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 UnwrapThrownVar extends Instruction { final String fuid; final int pos; public UnwrapThrownVar(CodeBlock ins, String fuid, int pos) { super(ins, Opcode.UNWRAPTHROWNVAR); this.fuid = fuid; this.pos = pos; } public String toString() { return "UNWRAPTHROWNVAR " + fuid + ", " + pos + " [" + codeblock.getFunctionIndex(fuid) + ", " + pos + "]"; } public void generate(){ codeblock.addCode2(opcode.getOpcode(), codeblock.getFunctionIndex(fuid), pos); } public void generateByteCode(BytecodeGenerator codeEmittor, boolean debug){ if (debug) codeEmittor.emitDebugCall2(opcode.name(), codeblock.getFunctionName(fuid), pos); if(pos == -1){ codeEmittor.emitCallWithArgsSSFI_S("UNWRAPTHROWNVARMODULE", codeblock.getFunctionIndex(fuid), debug); } else { codeEmittor.emitCallWithArgsSSFII_S("UNWRAPTHROWNVARSCOPED", codeblock.getFunctionIndex(fuid), pos, debug); } } }