diff --git a/src/main/java/org/jcnc/snow/compiler/ir/builder/IRContext.java b/src/main/java/org/jcnc/snow/compiler/ir/builder/IRContext.java index ca870c0..e931ff5 100644 --- a/src/main/java/org/jcnc/snow/compiler/ir/builder/IRContext.java +++ b/src/main/java/org/jcnc/snow/compiler/ir/builder/IRContext.java @@ -6,114 +6,102 @@ import org.jcnc.snow.compiler.ir.value.IRVirtualRegister; /** - * IRContext 类负责封装当前正在构建的 IRFunction 实例 + * {@code IRContext} 类负责封装当前正在构建的 IRFunction 实例 * 以及与之配套的作用域管理(IRBuilderScope), * 并简化虚拟寄存器分配与 IR 指令添加操作。 * - *
本类提供以下核心功能: + *
本类提供以下核心功能: *
包内可见: 仅限 builder 包内部使用。 - * - * @return IRBuilderScope 实例 + *
包内可见,仅限 builder 包内部调用,避免被外部滥用。
*/ IRBuilderScope getScope() { return scope; } - /** - * 为当前函数分配一个新的虚拟寄存器。 - * - * @return 分配到的 IRVirtualRegister 对象 - */ + /** 为当前函数分配一个新的虚拟寄存器。 */ public IRVirtualRegister newRegister() { return function.newRegister(); } /** - * 将指定的 IRInstruction 添加到当前 IRFunction 的指令列表中。 - * - * @param instr 要添加的 IRInstruction 实例 + * 兼容用法:分配一个“临时虚拟寄存器”。 + *+ * 目前直接委托给 {@link #newRegister()},便于老代码兼容与简单用法。 + * 若将来有命名/临时寄存器区分的需要,可在此扩展实现。 + *
*/ + public IRVirtualRegister newTempRegister() { + return newRegister(); + } + + /** 将指定的 IRInstruction 添加到当前 IRFunction 的指令列表中。 */ public void addInstruction(IRInstruction instr) { function.add(instr); } - /** 生成一个形如 L0 / L1 ... 的唯一标签名 */ + /** + * 生成一个唯一标签名,如 L0、L1、L2... + *常用于条件跳转、分支合流等 IR 控制流构建场景。
+ * + * @return 形如 "L0", "L1" 等的唯一字符串标签 + */ public String newLabel() { return "L" + (labelCounter++); } - /** - * 获取当前 declare 编译阶段变量类型 - * - * @return 当前 declare 的变量类型 - */ + /** 获取当前 declare 编译阶段变量类型(声明流程中临时记录) */ public String getVarType() { return varType; } - /** - * 设置当前 declare 编译阶段变量类型 - * - */ + /** 设置当前 declare 编译阶段变量类型(一般在变量声明时赋值) */ public void setVarType(String type) { this.varType = type; } - /** - * 清除当前 declare 编译阶段变量类型 - * - */ + /** 清除当前 declare 编译阶段变量类型(声明流程结束时调用) */ public void clearVarType() { this.varType = null; }