@Override public void RestoreErrorInfoInstr(RestoreErrorInfoInstr restoreerrorinfoinstr) { jvmMethod().loadContext(); visit(restoreerrorinfoinstr.getArg()); jvmAdapter().invokevirtual(p(ThreadContext.class), "setErrorInfo", sig(IRubyObject.class, IRubyObject.class)); jvmAdapter().pop(); }
@Override public void BUndefInstr(BUndefInstr bundefinstr) { visit(bundefinstr.getArg1()); jvmMethod().pushUndefined(); jvmAdapter().if_acmpeq(getJVMLabel(bundefinstr.getJumpTarget())); }
@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 BUndefInstr(BUndefInstr bundefinstr) { visit(bundefinstr.getArg1()); jvmMethod().pushUndefined(); jvmAdapter().if_acmpeq(getJVMLabel(bundefinstr.getJumpTarget())); }
@Override public void RestoreErrorInfoInstr(RestoreErrorInfoInstr restoreerrorinfoinstr) { jvmMethod().loadContext(); visit(restoreerrorinfoinstr.getArg()); jvmAdapter().invokevirtual(p(ThreadContext.class), "setErrorInfo", sig(IRubyObject.class, IRubyObject.class)); jvmAdapter().pop(); }
@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 ToggleBacktraceInstr(ToggleBacktraceInstr instr) { jvmMethod().loadContext(); jvmAdapter().pushBoolean(instr.requiresBacktrace()); jvmAdapter().invokevirtual(p(ThreadContext.class), "setExceptionRequiresBacktrace", sig(void.class, boolean.class)); }
@Override public void LoadFrameClosure(LoadFrameClosureInstr loadframeclosureinstr) { jvmMethod().loadContext(); jvmAdapter().invokevirtual(p(ThreadContext.class), "getFrameBlock", sig(Block.class)); jvmStoreLocal(loadframeclosureinstr.getResult()); }
@Override public void GetErrorInfoInstr(GetErrorInfoInstr geterrorinfoinstr) { jvmMethod().loadContext(); jvmAdapter().invokevirtual(p(ThreadContext.class), "getErrorInfo", sig(IRubyObject.class)); jvmStoreLocal(geterrorinfoinstr.getResult()); }
@Override public void GVarAliasInstr(GVarAliasInstr gvaraliasinstr) { jvmMethod().loadRuntime(); jvmAdapter().invokevirtual(p(Ruby.class), "getGlobalVariables", sig(GlobalVariables.class)); visit(gvaraliasinstr.getNewName()); jvmAdapter().invokevirtual(p(Object.class), "toString", sig(String.class)); visit(gvaraliasinstr.getOldName()); jvmAdapter().invokevirtual(p(Object.class), "toString", sig(String.class)); jvmAdapter().invokevirtual(p(GlobalVariables.class), "alias", sig(void.class, String.class, String.class)); }
@Override public void GetErrorInfoInstr(GetErrorInfoInstr geterrorinfoinstr) { jvmMethod().loadContext(); jvmAdapter().invokevirtual(p(ThreadContext.class), "getErrorInfo", sig(IRubyObject.class)); jvmStoreLocal(geterrorinfoinstr.getResult()); }
@Override public void GVarAliasInstr(GVarAliasInstr gvaraliasinstr) { jvmMethod().loadRuntime(); jvmAdapter().invokevirtual(p(Ruby.class), "getGlobalVariables", sig(GlobalVariables.class)); visit(gvaraliasinstr.getNewName()); jvmAdapter().invokevirtual(p(Object.class), "toString", sig(String.class)); visit(gvaraliasinstr.getOldName()); jvmAdapter().invokevirtual(p(Object.class), "toString", sig(String.class)); jvmAdapter().invokevirtual(p(GlobalVariables.class), "alias", sig(void.class, String.class, String.class)); }
@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 SaveBindingVisibilityInstr(SaveBindingVisibilityInstr instr) { jvmMethod().loadSelfBlock(); jvmAdapter().invokevirtual(p(Block.class), "getBinding", sig(Binding.class)); jvmAdapter().invokevirtual(p(Binding.class), "getFrame", sig(Frame.class)); jvmAdapter().invokevirtual(p(Frame.class), "getVisibility", sig(Visibility.class)); jvmStoreLocal(instr.getResult()); }
@Override public void RestoreBindingVisibilityInstr(RestoreBindingVisibilityInstr instr) { jvmMethod().loadSelfBlock(); jvmAdapter().invokevirtual(p(Block.class), "getBinding", sig(Binding.class)); jvmAdapter().invokevirtual(p(Binding.class), "getFrame", sig(Frame.class)); visit(instr.getVisibility()); jvmAdapter().invokevirtual(p(Frame.class), "setVisibility", sig(void.class, Visibility.class)); }
@Override public void LoadFrameClosure(LoadFrameClosureInstr loadframeclosureinstr) { jvmMethod().loadContext(); jvmAdapter().invokevirtual(p(ThreadContext.class), "getFrameBlock", sig(Block.class)); jvmStoreLocal(loadframeclosureinstr.getResult()); }
@Override public void RestoreBindingVisibilityInstr(RestoreBindingVisibilityInstr instr) { jvmMethod().loadSelfBlock(); jvmAdapter().invokevirtual(p(Block.class), "getBinding", sig(Binding.class)); jvmAdapter().invokevirtual(p(Binding.class), "getFrame", sig(Frame.class)); visit(instr.getVisibility()); jvmAdapter().invokevirtual(p(Frame.class), "setVisibility", sig(void.class, Visibility.class)); }
@Override public void ToggleBacktraceInstr(ToggleBacktraceInstr instr) { jvmMethod().loadContext(); jvmAdapter().pushBoolean(instr.requiresBacktrace()); jvmAdapter().invokevirtual(p(ThreadContext.class), "setExceptionRequiresBacktrace", sig(void.class, boolean.class)); }
@Override public void RestArgMultipleAsgnInstr(RestArgMultipleAsgnInstr restargmultipleasgninstr) { jvmMethod().loadContext(); visit(restargmultipleasgninstr.getArray()); jvmAdapter().checkcast(p(RubyArray.class)); jvmAdapter().pushInt(restargmultipleasgninstr.getPreArgsCount()); jvmAdapter().pushInt(restargmultipleasgninstr.getPostArgsCount()); jvmAdapter().invokestatic(p(Helpers.class), "viewArgsArray", sig(RubyArray.class, ThreadContext.class, RubyArray.class, int.class, int.class)); jvmStoreLocal(restargmultipleasgninstr.getResult()); }
@Override public void DynamicSymbol(DynamicSymbol dynamicsymbol) { jvmMethod().loadRuntime(); visit(dynamicsymbol.getSymbolName()); jvmAdapter().dup(); // get symbol name jvmAdapter().invokeinterface(p(IRubyObject.class), "asJavaString", sig(String.class)); jvmAdapter().swap(); // get encoding of symbol name jvmAdapter().invokeinterface(p(IRubyObject.class), "asString", sig(RubyString.class)); jvmAdapter().invokevirtual(p(RubyString.class), "getByteList", sig(ByteList.class)); jvmAdapter().invokevirtual(p(ByteList.class), "getEncoding", sig(Encoding.class)); // keeps encoding of symbol name jvmAdapter().invokevirtual(p(Ruby.class), "newSymbol", sig(RubySymbol.class, String.class, Encoding.class)); }