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; import org.rascalmpl.library.experiments.Compiler.RVM.Interpreter.RascalPrimitive; import org.rascalmpl.value.ISourceLocation; public class CallPrimN extends Instruction { RascalPrimitive prim; int arity; ISourceLocation src; public CallPrimN(CodeBlock ins, RascalPrimitive prim, int arity, ISourceLocation src){ super(ins, Opcode.CALLPRIMN); this.prim = prim; this.arity = arity; this.src = src; } public String toString() { return "CALLPRIMN " + prim + ", " + arity + ", " + src; } public void generate(){ codeblock.addCode2(opcode.getOpcode(), prim.ordinal(), arity); codeblock.addCode(codeblock.getConstantIndex(src)); } public void generateByteCode(BytecodeGenerator codeEmittor, boolean debug){ if ( debug ) codeEmittor.emitDebugCall2(opcode.name(), prim.name(), arity); codeEmittor.emitInlineCallPrimN(prim, arity, codeblock.getConstantIndex(src), debug); } }