@@ -104,12 +104,9 @@ For the optional **live Neo4j push** (`--emit neo4j --neo4j-uri …`), install t
104104pip install ' codeanalyzer-python[neo4j]'
105105```
106106
107- For the ** Scalpel-backed points-to oracle** at level 4, install the ` scalpel ` extra. It is optional:
108- when it is absent, level 4 automatically falls back to the built-in type-based oracle.
109-
110- ``` sh
111- pip install ' codeanalyzer-python[scalpel]'
112- ```
107+ The ** Scalpel-backed points-to oracle** at level 4 is vendored and built in — no extra install
108+ required. If Scalpel cannot resolve a construct, level 4 automatically falls back to the built-in
109+ type-based oracle.
113110
114111### Install via shell script
115112
@@ -529,11 +526,12 @@ symbol-table signature by construction
529526- ** Points-to oracle (level 4):** the ** Scalpel** may-alias oracle — ` ScalpelAliasOracle `
530527 (` codeanalyzer/dataflow/scalpel_oracle.py ` ) — consumes Scalpel's SSA copy/const facts to answer
531528 ` may_alias(path_a, path_b) ` , adding the alias-aware DDG edges (` prov: ["points-to"] ` ) and the
532- interprocedural summaries. ` python-scalpel ` is an ** optional dependency**
533- (` pip install 'codeanalyzer-python[scalpel]' ` ); when it is absent or cannot resolve a construct,
534- the analyzer automatically falls back to the built-in ` TypeBasedAliasOracle ` (Jedi-inferred types;
535- unknown types conservatively alias), keeping the ` may_alias ` interface total. Call dispatch comes
536- from the merged Jedi(+PyCG) call graph, treated as a frozen oracle.
529+ interprocedural summaries. Scalpel is ** vendored** — a ` typed_ast ` -free slice built into the
530+ package under ` codeanalyzer/dataflow/scalpel/ ` — so it is the ** default** level-4 oracle with no
531+ external dependency to install; the analyzer falls back to the built-in ` TypeBasedAliasOracle `
532+ (Jedi-inferred types; unknown types conservatively alias) only when Scalpel can't resolve a
533+ construct or a per-callable build fails, keeping the ` may_alias ` interface total. Call dispatch
534+ comes from the merged Jedi(+PyCG) call graph, treated as a frozen oracle.
537535- ** Summaries:** relational formal-in → formal-out flows composed bottom-up over the Tarjan SCC
538536 condensation of the call graph, a monotone fixpoint within SCCs; globals ride as extra formals,
539537 closure captures bind at definition sites.
0 commit comments