@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()); }
private void boxResult(SkinnyMethodAdapter mv, String boxMethodName) { mv.invokestatic(p(JITRuntime.class), boxMethodName, sig(IRubyObject.class, ThreadContext.class, getInvokerIntType())); }
public void createNewArray(boolean lightweight) { loadRuntime(); // put under object array already present method.swap(); if (lightweight) { method.invokestatic(p(RubyArray.class), "newArrayNoCopyLight", sig(RubyArray.class, params(Ruby.class, IRubyObject[].class))); } else { method.invokestatic(p(RubyArray.class), "newArrayNoCopy", sig(RubyArray.class, params(Ruby.class, IRubyObject[].class))); } }
@Override public void Complex(Complex complex) { jvmMethod().loadRuntime(); jvmMethod().pushFixnum(0); visit(complex.getNumber()); jvmAdapter().invokestatic(p(RubyComplex.class), "newComplexRaw", sig(RubyComplex.class, Ruby.class, IRubyObject.class, IRubyObject.class)); }
@Override public void GetClassVariableInstr(GetClassVariableInstr getclassvariableinstr) { visit(getclassvariableinstr.getSource()); jvmAdapter().checkcast(p(RubyModule.class)); jvmAdapter().ldc(getclassvariableinstr.getId()); jvmAdapter().invokevirtual(p(RubyModule.class), "getClassVar", sig(IRubyObject.class, String.class)); jvmStoreLocal(getclassvariableinstr.getResult()); }
@Override public void Range(Range range) { jvm.method().loadRuntime(); jvm.method().loadContext(); visit(range.getBegin()); visit(range.getEnd()); jvm.method().adapter.ldc(range.isExclusive()); jvm.method().adapter.invokestatic(p(RubyRange.class), "newRange", sig(RubyRange.class, Ruby.class, ThreadContext.class, IRubyObject.class, IRubyObject.class, boolean.class)); }
@Override public void PushBindingInstr(PushBindingInstr pushbindinginstr) { jvm.method().loadStaticScope(); jvm.method().adapter.invokestatic(p(DynamicScope.class), "newDynamicScope", sig(DynamicScope.class, StaticScope.class)); jvmStoreLocal(DYNAMIC_SCOPE); // TODO push }
public void iprintln() { dup(); getstatic(p(System.class), "out", ci(PrintStream.class)); swap(); invokevirtual(p(PrintStream.class), "println", sig(void.class, params(int.class))); }
public void loadFrameName() { int superNameOffset = signature.argOffset(JVMVisitor.SUPER_NAME_NAME); if (superNameOffset == -1) { // load from self block loadSelfBlock(); adapter.invokevirtual(p(Block.class), "getBinding", sig(Binding.class)); adapter.invokevirtual(p(Binding.class), "getMethod", sig(String.class)); } else { adapter.aload(superNameOffset); } }
@Override public void Rational(Rational rational) { jvmMethod().loadRuntime(); visit(rational.getNumerator()); visit(rational.getDenominator()); jvmAdapter().invokestatic(p(RubyRational.class), "newRationalRaw", sig(RubyRational.class, Ruby.class, IRubyObject.class, IRubyObject.class)); }
@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)); }
public void createNewRange(CompilerCallback beginEndCallback, boolean isExclusive) { loadRuntime(); loadThreadContext(); beginEndCallback.call(this); if (isExclusive) { method.invokestatic(p(RubyRange.class), "newExclusiveRange", sig(RubyRange.class, params(Ruby.class, ThreadContext.class, IRubyObject.class, IRubyObject.class))); } else { method.invokestatic(p(RubyRange.class), "newInclusiveRange", sig(RubyRange.class, params(Ruby.class, ThreadContext.class, IRubyObject.class, IRubyObject.class))); } }
private void boxResult(SkinnyMethodAdapter mv, String boxMethodName) { mv.invokestatic(p(JITRuntime.class), boxMethodName, sig(IRubyObject.class, ThreadContext.class, getInvokerIntType())); }
@Override public void GetClassVariableInstr(GetClassVariableInstr getclassvariableinstr) { visit(getclassvariableinstr.getSource()); jvmAdapter().checkcast(p(RubyModule.class)); jvmAdapter().ldc(getclassvariableinstr.getId()); jvmAdapter().invokevirtual(p(RubyModule.class), "getClassVar", sig(IRubyObject.class, String.class)); jvmStoreLocal(getclassvariableinstr.getResult()); }
@Override public void Range(Range range) { jvm.method().loadRuntime(); jvm.method().loadContext(); visit(range.getBegin()); visit(range.getEnd()); jvm.method().adapter.ldc(range.isExclusive()); jvm.method().adapter.invokestatic(p(RubyRange.class), "newRange", sig(RubyRange.class, Ruby.class, ThreadContext.class, IRubyObject.class, IRubyObject.class, boolean.class)); }
private static void invokeCReturnTrace(SkinnyMethodAdapter method, int traceBoolIndex) { method.aloadMany(0, 1); // method, threadContext method.iload(traceBoolIndex); // traceEnable method.aload(4); // invokedName method.invokevirtual(p(JavaMethod.class), "returnTrace", sig(void.class, ThreadContext.class, boolean.class, String.class)); }
@Override public void BreakInstr(BreakInstr breakInstr) { jvmMethod().loadContext(); jvmLoadLocal(DYNAMIC_SCOPE); visit(breakInstr.getReturnValue()); jvmMethod().loadSelfBlock(); jvmAdapter().invokestatic(p(IRRuntimeHelpers.class), "initiateBreak", sig(IRubyObject.class, ThreadContext.class, DynamicScope.class, IRubyObject.class, Block.class)); jvmMethod().returnValue(); }
@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)); }
public void createNewRange(CompilerCallback beginEndCallback, boolean isExclusive) { loadRuntime(); loadThreadContext(); beginEndCallback.call(this); if (isExclusive) { method.invokestatic(p(RubyRange.class), "newExclusiveRange", sig(RubyRange.class, params(Ruby.class, ThreadContext.class, IRubyObject.class, IRubyObject.class))); } else { method.invokestatic(p(RubyRange.class), "newInclusiveRange", sig(RubyRange.class, params(Ruby.class, ThreadContext.class, IRubyObject.class, IRubyObject.class))); } }
public void pushBignum(BigInteger bigint) { String bigintStr = bigint.toString(); loadRuntime(); adapter.ldc(bigintStr); adapter.invokestatic(p(RubyBignum.class), "newBignum", sig(RubyBignum.class, Ruby.class, String.class)); }