docs: 补充注释与格式化

This commit is contained in:
爱特每羊队
2026-08-06 23:10:27 +08:00
parent 4e0fd762c2
commit 328b8a3ddc
156 changed files with 2393 additions and 1687 deletions
+31 -7
View File
@@ -4,7 +4,11 @@ use crate::{BasicBlock, Cfg};
/// 追加 exit 哨兵块(`0..0`,置末尾),从各块 succs 反推 preds。
pub(super) fn finalize(mut blocks: Vec<BasicBlock>, exit_id: usize) -> Cfg {
blocks.push(BasicBlock { inst_range: 0..0, preds: Vec::new(), succs: Vec::new() });
blocks.push(BasicBlock {
inst_range: 0..0,
preds: Vec::new(),
succs: Vec::new(),
});
let mut succs_total = 0usize;
let mut preds_total = 0usize;
for i in 0..blocks.len() {
@@ -17,7 +21,11 @@ pub(super) fn finalize(mut blocks: Vec<BasicBlock>, exit_id: usize) -> Cfg {
}
debug_assert_eq!(succs_total, preds_total, "succs/preds 不对称(Pitfall 4)");
Cfg { blocks, entry: 0, exit: exit_id }
Cfg {
blocks,
entry: 0,
exit: exit_id,
}
}
#[cfg(test)]
@@ -29,8 +37,16 @@ mod tests {
#[test]
fn exit_sentinel_appended_with_preds_reversed() {
let blocks_in = vec![
BasicBlock { inst_range: 0..1, preds: Vec::new(), succs: vec![(1, EdgeKind::Jump)] },
BasicBlock { inst_range: 1..2, preds: Vec::new(), succs: vec![(2, EdgeKind::Fallthrough)] },
BasicBlock {
inst_range: 0..1,
preds: Vec::new(),
succs: vec![(1, EdgeKind::Jump)],
},
BasicBlock {
inst_range: 1..2,
preds: Vec::new(),
succs: vec![(2, EdgeKind::Fallthrough)],
},
];
let cfg = finalize(blocks_in, 2);
assert_eq!(cfg.blocks.len(), 3, "2 实块 + exit 哨兵");
@@ -41,12 +57,20 @@ mod tests {
assert_eq!(cfg.blocks[2].preds, vec![1], "exit preds 反推自块 1 的 Fallthrough 边");
}
/// succs/preds 对称:total 边数一致(Pitfall 4 防御性约束)。
/// succs/preds 对称:total 边数一致(防御性约束)。
#[test]
fn preds_and_succs_symmetric() {
let blocks_in = vec![
BasicBlock { inst_range: 0..1, preds: Vec::new(), succs: vec![(1, EdgeKind::Jump)] },
BasicBlock { inst_range: 1..2, preds: Vec::new(), succs: vec![(2, EdgeKind::Fallthrough)] },
BasicBlock {
inst_range: 0..1,
preds: Vec::new(),
succs: vec![(1, EdgeKind::Jump)],
},
BasicBlock {
inst_range: 1..2,
preds: Vec::new(),
succs: vec![(2, EdgeKind::Fallthrough)],
},
];
let cfg = finalize(blocks_in, 2);
let succs_total: usize = cfg.blocks.iter().map(|b| b.succs.len()).sum();