Expand description
§cure-java-ast
Java AST(arena + NodeId)+ 编译单元/成员结构 + builder + cure_engine::Lang 实现。
覆盖反编译器产出的常见 Java:完整语句集(含 try/catch、switch、for-each、 lambda 等)、完整表达式集、类/接口/枚举成员。签名里的泛型/注解以原文字符串 保留(保真打印),方法体内才是可简化的 arena 节点。
零外部依赖(仅依赖 cure-engine),可单独作为“Java AST + 语义查询“基础库引用。
arena 不变量:children 永远先于父节点入 arena(index 递增)。
Structs§
- Child
List - 子节点容器:≤3 个孩子零堆分配(AST 绝大多数节点—— Binary/Assign=2、Member/MethodRef=1、VarDecl≤1、Literal=0…… 大语料 malloc 采样的剩余大头是每节点一次 Vec 堆分配); ≥4 溢出到堆。Block/Call 大参数列表溢出属预期路径。
- Compilation
Unit - 编译单元。
- Declarator
- 字段声明中的一个声明符(
int a = 1, b[];里的 a、b)。 - JavaAst
- Java
Facts - 编译单元级事实集:局部名(前端发射的名字与源码文本一致——名字是 文本往返的稳定键)→ 变量事实;被调成员名 → 副作用上限。
- JavaId
- arena 句柄。
- Node
- Noop
Candidate - 同名同元数方法候选(no-op 调用消解用)。
- Param
- 方法/构造器参数。
- Parse
Error - 解析错误(位置为 1-based 行/列)。
- Sym
- 符号(intern 名字 id)。VarRef/Member/MethodRef 的名字字段—— 87% 重复率(实测 jdk-sources:4754 个名字节点仅 669 个唯一), String→Sym 后:构造去重、比较 u32、clone 零分配(copy_subtree/ clone_node 全线受益)。
- Type
Decl - 类型声明。
- VarFacts
- 单个局部变量的事实集(全部缺省 false = 未知/不成立)。
Enums§
- BinOp
- 二元运算符(规范词汇表,语言负责映射)。
- Effect
- JType
- Java 类型(第一阶段的最小集合;
Ref存类型名字符串,泛型参数并入字符串)。 - Lit
- 字面量。
- LitRef
- 字面量值的借用视图(语言 crate 从自己的负载映射)。
- Member
- 类成员。
- Node
Data - 节点负载:children 统一放在
Node::children,这里只放非节点数据。 - Node
Kind - NumVal
- 数值字面量的解析值(用于语义查询;原文见
Lit::NumRaw)。 - Type
Kind - UnOp
- 一元运算符。
Statics§
Functions§
- unit_
metrics - 编译单元全部可执行体(方法/构造器/初始化块,含嵌套类型)的 结构指标总和。