public void pushObjectClass() { loadRuntime(); adapter.invokevirtual(p(Ruby.class), "getObject", sig(RubyClass.class)); }
@Override public void StandardError(StandardError standarderror) { jvmMethod().loadRuntime(); jvmAdapter().invokevirtual(p(Ruby.class), "getStandardError", sig(RubyClass.class)); }
@Override public void StandardError(StandardError standarderror) { jvm.method().loadRuntime(); jvm.method().adapter.invokevirtual(p(Ruby.class), "getStandardError", sig(RubyClass.class)); }
@Override public void StandardError(StandardError standarderror) { jvmMethod().loadRuntime(); jvmAdapter().invokevirtual(p(Ruby.class), "getStandardError", sig(RubyClass.class)); }
@Override public void StandardError(StandardError standarderror) { jvm.method().loadRuntime(); jvm.method().adapter.invokevirtual(p(Ruby.class), "getStandardError", sig(RubyClass.class)); }
@Override public void ReifyClosureInstr(ReifyClosureInstr reifyclosureinstr) { jvmMethod().loadRuntime(); jvmLoadLocal("$blockArg"); jvmMethod().invokeIRHelper("newProc", sig(IRubyObject.class, Ruby.class, Block.class)); jvmStoreLocal(reifyclosureinstr.getResult()); }
@Override public void ReifyClosureInstr(ReifyClosureInstr reifyclosureinstr) { jvmMethod().loadRuntime(); jvmLoadLocal("$blockArg"); jvmMethod().invokeIRHelper("newProc", sig(IRubyObject.class, Ruby.class, Block.class)); jvmStoreLocal(reifyclosureinstr.getResult()); }
@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 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 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 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 BlockGivenInstr(BlockGivenInstr blockGivenInstr) { jvm.method().loadRuntime(); visit(blockGivenInstr.getBlockArg()); jvm.method().invokeVirtual(Type.getType(Block.class), Method.getMethod("boolean isGiven()")); jvm.method().invokeVirtual(Type.getType(Ruby.class), Method.getMethod("org.jruby.RubyBoolean newBoolean(boolean)")); jvmStoreLocal(blockGivenInstr.getResult()); }
@Override public void BlockGivenInstr(BlockGivenInstr blockGivenInstr) { jvm.method().loadRuntime(); visit(blockGivenInstr.getBlockArg()); jvm.method().invokeVirtual(Type.getType(Block.class), Method.getMethod("boolean isGiven()")); jvm.method().invokeVirtual(Type.getType(Ruby.class), Method.getMethod("org.jruby.RubyBoolean newBoolean(boolean)")); jvmStoreLocal(blockGivenInstr.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 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 HasInstanceVarInstr(HasInstanceVarInstr hasinstancevarinstr) { IRBytecodeAdapter m = jvm.method(); // TODO: This is suboptimal, not caching ivar offset at all m.loadRuntime(); visit(hasinstancevarinstr.getObject()); m.adapter.invokeinterface(p(IRubyObject.class), "getInstanceVariables", sig(InstanceVariables.class)); m.adapter.ldc(hasinstancevarinstr.getName().string); m.adapter.invokeinterface(p(InstanceVariables.class), "hasInstanceVariable", sig(boolean.class, String.class)); m.adapter.invokevirtual(p(Ruby.class), "newBoolean", sig(RubyBoolean.class, boolean.class)); jvmStoreLocal(hasinstancevarinstr.getResult()); }
@Override public void HasInstanceVarInstr(HasInstanceVarInstr hasinstancevarinstr) { IRBytecodeAdapter m = jvm.method(); // TODO: This is suboptimal, not caching ivar offset at all m.loadRuntime(); visit(hasinstancevarinstr.getObject()); m.adapter.invokeinterface(p(IRubyObject.class), "getInstanceVariables", sig(InstanceVariables.class)); m.adapter.ldc(hasinstancevarinstr.getName().string); m.adapter.invokeinterface(p(InstanceVariables.class), "hasInstanceVariable", sig(boolean.class, String.class)); m.adapter.invokevirtual(p(Ruby.class), "newBoolean", sig(RubyBoolean.class, boolean.class)); jvmStoreLocal(hasinstancevarinstr.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 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 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)); }