Part of #69.
Stage 3 — L3 intraprocedural CFG/CDG/DDG (syntactic)
Branch: feat/v2-stage3-l3
Deliverables:
dataflow/identity.py — the (signature, int node_id) ↔ (can:// callable-id, ordinal-id) bijection; consumed by both emitters.
- Populate
body with statement nodes + @entry/@exit; emit cfg/cdg/ddg edge lists on each callable, re-targeting the existing cfg/dominance/defuse kernels through the identity map.
- Split the current PDG rows into
cfg/cdg/ddg; add a syntactic-only DDG mode (textual interference, oracle bypassed, prov:["ssa"]).
- CLI:
--graphs cfg,dfg,pdg scoping; --graph-field-depth at L3+; sdg requires -a 4 (flag error otherwise).
- Neo4j:
PyCFGNode keyed by ordinal id; PY_DDG gains prov.
- Migrate
test/test_dataflow_{cfg,dominance,defuse,pdg,scc,cpg,slicing}.py to v2 ids.
Files: dataflow/{identity,builder,defuse}.py, core.py, __main__.py, neo4j/project.py, dataflow tests.
Gate: intraprocedural backward slice == hand-computed set exactly (over ordinal ids); assert_conformant(..., 3) incl. no dangling cfg/cdg/ddg; L2 ⊆ L3.
Expand into full bite-sized tasks with superpowers:writing-plans at stage start.
Part of #69.
Stage 3 — L3 intraprocedural CFG/CDG/DDG (syntactic)
Branch:
feat/v2-stage3-l3Deliverables:
dataflow/identity.py— the(signature, int node_id) ↔ (can:// callable-id, ordinal-id)bijection; consumed by both emitters.bodywith statement nodes +@entry/@exit; emitcfg/cdg/ddgedge lists on each callable, re-targeting the existingcfg/dominance/defusekernels through the identity map.cfg/cdg/ddg; add a syntactic-only DDG mode (textual interference, oracle bypassed,prov:["ssa"]).--graphs cfg,dfg,pdgscoping;--graph-field-depthat L3+;sdgrequires-a 4(flag error otherwise).PyCFGNodekeyed by ordinal id;PY_DDGgainsprov.test/test_dataflow_{cfg,dominance,defuse,pdg,scc,cpg,slicing}.pyto v2 ids.Files:
dataflow/{identity,builder,defuse}.py,core.py,__main__.py,neo4j/project.py, dataflow tests.Gate: intraprocedural backward slice == hand-computed set exactly (over ordinal ids);
assert_conformant(..., 3)incl. no danglingcfg/cdg/ddg;L2 ⊆ L3.