diff --git a/src/main/java/org/jcnc/snow/compiler/ir/instruction/CallInstruction.java b/src/main/java/org/jcnc/snow/compiler/ir/instruction/CallInstruction.java index 7e9f152..405f0f6 100644 --- a/src/main/java/org/jcnc/snow/compiler/ir/instruction/CallInstruction.java +++ b/src/main/java/org/jcnc/snow/compiler/ir/instruction/CallInstruction.java @@ -10,24 +10,53 @@ import java.util.ArrayList; import java.util.List; /** - * CallInstruction —— 表示一次函数调用,格式:dest = CALL functionName, arg1, arg2, ... + * CallInstruction —— 表示一次函数调用的中间代码指令 + * 形式为:dest = CALL functionName, arg1, arg2, ... */ public class CallInstruction extends IRInstruction { + /** + * 调用结果存放的目标虚拟寄存器 + */ private final IRVirtualRegister dest; + + /** + * 被调用的函数名 + */ private final String functionName; + + /** + * 传递给函数的参数列表 + */ private final List arguments; + /** + * 构造函数,创建一个函数调用指令 + * + * @param dest 调用结果存放的目标寄存器 + * @param functionName 被调用的函数名 + * @param args 参数列表 + */ public CallInstruction(IRVirtualRegister dest, String functionName, List args) { this.dest = dest; this.functionName = functionName; this.arguments = List.copyOf(args); } + /** + * 获取该指令的操作码 + * + * @return 操作码 CALL + */ @Override public IROpCode op() { return IROpCode.CALL; } + /** + * 获取该指令涉及的操作数(目标寄存器和所有参数) + * + * @return 操作数列表 + */ @Override public List operands() { List ops = new ArrayList<>(); @@ -36,23 +65,48 @@ public class CallInstruction extends IRInstruction { return ops; } + /** + * 获取目标虚拟寄存器 + * + * @return 目标虚拟寄存器 + */ public IRVirtualRegister getDest() { return dest; } + /** + * 获取被调用的函数名 + * + * @return 函数名 + */ public String getFunctionName() { return functionName; } + /** + * 获取参数列表 + * + * @return 参数列表 + */ public List getArguments() { return arguments; } + /** + * 接受 IRVisitor 访问 + * + * @param visitor 访问者 + */ @Override public void accept(IRVisitor visitor) { visitor.visit(this); } + /** + * 获取该指令的字符串表示 + * + * @return 字符串形式 + */ @Override public String toString() { StringBuilder sb = new StringBuilder(dest + " = CALL " + functionName);