@Override public void RecordEndBlockInstr(RecordEndBlockInstr recordEndBlockInstr) { jvmMethod().loadContext(); jvmMethod().loadContext(); visit(recordEndBlockInstr.getEndBlockClosure()); jvmMethod().invokeIRHelper("getBlockFromObject", sig(Block.class, ThreadContext.class, Object.class)); jvmMethod().invokeIRHelper("pushExitBlock", sig(void.class, ThreadContext.class, Block.class)); }
@Override public void ArgScopeDepthInstr(ArgScopeDepthInstr instr) { jvmMethod().loadContext(); jvmMethod().loadStaticScope(); jvmMethod().invokeIRHelper("getArgScopeDepth", sig(RubyFixnum.class, ThreadContext.class, StaticScope.class)); jvmStoreLocal(instr.getResult()); }
@Override public void ReturnOrRethrowSavedExcInstr(ReturnOrRethrowSavedExcInstr instr) { jvmMethod().loadContext(); visit(instr.getReturnValue()); jvmMethod().invokeIRHelper("returnOrRethrowSavedException", sig(IRubyObject.class, ThreadContext.class, IRubyObject.class)); jvmMethod().returnValue(); }
@Override public void LoadFrameClosure(LoadFrameClosureInstr loadframeclosureinstr) { jvmMethod().loadContext(); jvmAdapter().invokevirtual(p(ThreadContext.class), "getFrameBlock", sig(Block.class)); jvmStoreLocal(loadframeclosureinstr.getResult()); }
@Override public void PopBlockFrameInstr(PopBlockFrameInstr instr) { jvmMethod().loadContext(); visit(instr.getFrame()); jvmAdapter().invokevirtual(p(ThreadContext.class), "postYieldNoScope", sig(void.class, Frame.class)); }
@Override public void GetErrorInfoInstr(GetErrorInfoInstr geterrorinfoinstr) { jvmMethod().loadContext(); jvmAdapter().invokevirtual(p(ThreadContext.class), "getErrorInfo", sig(IRubyObject.class)); jvmStoreLocal(geterrorinfoinstr.getResult()); }
@Override public void GetErrorInfoInstr(GetErrorInfoInstr geterrorinfoinstr) { jvmMethod().loadContext(); jvmAdapter().invokevirtual(p(ThreadContext.class), "getErrorInfo", sig(IRubyObject.class)); jvmStoreLocal(geterrorinfoinstr.getResult()); }
@Override public void PushBlockFrameInstr(PushBlockFrameInstr instr) { jvmMethod().loadContext(); jvmMethod().loadSelfBlock(); jvmAdapter().invokevirtual(p(Block.class), "getBinding", sig(Binding.class)); jvmAdapter().invokevirtual(p(ThreadContext.class), "preYieldNoScope", sig(Frame.class, Binding.class)); jvmStoreLocal(instr.getResult()); }
@Override public void PopBlockFrameInstr(PopBlockFrameInstr instr) { jvmMethod().loadContext(); visit(instr.getFrame()); jvmAdapter().invokevirtual(p(ThreadContext.class), "postYieldNoScope", sig(void.class, Frame.class)); }
@Override public void NonlocalReturnInstr(NonlocalReturnInstr returninstr) { jvmMethod().loadContext(); jvmLoadLocal(DYNAMIC_SCOPE); jvmMethod().loadSelfBlock(); visit(returninstr.getReturnValue()); jvmMethod().invokeIRHelper("initiateNonLocalReturn", sig(IRubyObject.class, ThreadContext.class, DynamicScope.class, Block.class, IRubyObject.class)); jvmMethod().returnValue(); }
@Override public void ToAryInstr(ToAryInstr toaryinstr) { jvmMethod().loadContext(); visit(toaryinstr.getArray()); jvmMethod().invokeIRHelper("irToAry", sig(IRubyObject.class, ThreadContext.class, IRubyObject.class)); jvmStoreLocal(toaryinstr.getResult()); }
@Override public void LoadFrameClosure(LoadFrameClosureInstr loadframeclosureinstr) { jvmMethod().loadContext(); jvmAdapter().invokevirtual(p(ThreadContext.class), "getFrameBlock", sig(Block.class)); jvmStoreLocal(loadframeclosureinstr.getResult()); }
@Override public void UndefMethodInstr(UndefMethodInstr undefmethodinstr) { jvmMethod().loadContext(); visit(undefmethodinstr.getMethodName()); jvmLoadLocal(DYNAMIC_SCOPE); jvmMethod().loadSelf(); jvmMethod().invokeIRHelper("undefMethod", sig(IRubyObject.class, ThreadContext.class, Object.class, DynamicScope.class, IRubyObject.class)); jvmStoreLocal(undefmethodinstr.getResult()); }
@Override public void PrepareBlockArgsInstr(PrepareBlockArgsInstr instr) { jvmMethod().loadContext(); jvmMethod().loadSelfBlock(); jvmMethod().loadArgs(); jvmAdapter().ldc(((IRClosure)jvm.methodData().scope).receivesKeywordArgs()); jvmMethod().invokeIRHelper("prepareBlockArgs", sig(IRubyObject[].class, ThreadContext.class, Block.class, IRubyObject[].class, boolean.class)); jvmMethod().storeArgs(); }
@Override public void BlockGivenInstr(BlockGivenInstr blockGivenInstr) { jvmMethod().loadContext(); visit(blockGivenInstr.getBlockArg()); jvmMethod().invokeIRHelper("isBlockGiven", sig(RubyBoolean.class, ThreadContext.class, Object.class)); jvmStoreLocal(blockGivenInstr.getResult()); }
@Override public void ToAryInstr(ToAryInstr toaryinstr) { jvmMethod().loadContext(); visit(toaryinstr.getArray()); jvmMethod().invokeIRHelper("irToAry", sig(IRubyObject.class, ThreadContext.class, IRubyObject.class)); jvmStoreLocal(toaryinstr.getResult()); }
@Override public void RescueEQQInstr(RescueEQQInstr rescueeqqinstr) { jvmMethod().loadContext(); visit(rescueeqqinstr.getArg1()); visit(rescueeqqinstr.getArg2()); jvmMethod().invokeIRHelper("isExceptionHandled", sig(IRubyObject.class, ThreadContext.class, IRubyObject.class, Object.class)); jvmStoreLocal(rescueeqqinstr.getResult()); }
@Override public void PushBlockFrameInstr(PushBlockFrameInstr instr) { jvmMethod().loadContext(); jvmMethod().loadSelfBlock(); jvmAdapter().invokevirtual(p(Block.class), "getBinding", sig(Binding.class)); jvmAdapter().invokevirtual(p(ThreadContext.class), "preYieldNoScope", sig(Frame.class, Binding.class)); jvmStoreLocal(instr.getResult()); }
@Override public void UndefMethodInstr(UndefMethodInstr undefmethodinstr) { jvmMethod().loadContext(); visit(undefmethodinstr.getMethodName()); jvmLoadLocal(DYNAMIC_SCOPE); jvmMethod().loadSelf(); jvmMethod().invokeIRHelper("undefMethod", sig(IRubyObject.class, ThreadContext.class, Object.class, DynamicScope.class, IRubyObject.class)); jvmStoreLocal(undefmethodinstr.getResult()); }
@Override public void BlockGivenInstr(BlockGivenInstr blockGivenInstr) { jvmMethod().loadContext(); visit(blockGivenInstr.getBlockArg()); jvmMethod().invokeIRHelper("isBlockGiven", sig(RubyBoolean.class, ThreadContext.class, Object.class)); jvmStoreLocal(blockGivenInstr.getResult()); }