package org.rascalmpl.library.experiments.Compiler.RVM.Interpreter.Instructions; import org.rascalmpl.library.experiments.Compiler.RVM.Interpreter.BytecodeGenerator; import org.rascalmpl.library.experiments.Compiler.RVM.Interpreter.CodeBlock; public class Call extends Instruction { final String fuid; final int arity; int continuationPoint ; public Call(CodeBlock ins, String fuid, int arity, int continuationPoint) { super(ins, Opcode.CALL); this.fuid = fuid; this.arity = arity; this.continuationPoint = continuationPoint ; } public String toString() { return "CALL " + fuid + ", " + arity + " [ " + codeblock.getFunctionIndex(fuid) + " ]"; } public void generate() { codeblock.addCode2(opcode.getOpcode(), codeblock.getFunctionIndex(fuid), arity); } public void generateByteCode(BytecodeGenerator codeEmittor, boolean debug) { if ( debug ) codeEmittor.emitDebugCall2(opcode.name(), codeblock.getFunctionName(fuid), arity); codeEmittor.emitOptimizedCall(fuid, codeblock.getFunctionIndex(fuid), arity, continuationPoint,debug) ; } }