public static void unboxAndCast(SkinnyMethodAdapter m, Class paramClass) { if (paramClass.isPrimitive()) { Class boxType = getBoxType(paramClass); m.checkcast(p(boxType)); m.invokevirtual(p(boxType), paramClass.toString() + "Value", sig(paramClass)); } else if (paramClass != Object.class) { m.checkcast(p(paramClass)); } }
public static void unboxAndCast(SkinnyMethodAdapter m, Class paramClass) { if (paramClass.isPrimitive()) { Class boxType = getBoxType(paramClass); m.checkcast(p(boxType)); m.invokevirtual(p(boxType), paramClass.toString() + "Value", sig(paramClass)); } else if (paramClass != Object.class) { m.checkcast(p(paramClass)); } }
public static void unboxAndCast(SkinnyMethodAdapter m, Class paramClass) { if (paramClass.isPrimitive()) { Class boxType = getBoxType(paramClass); m.checkcast(p(boxType)); m.invokevirtual(p(boxType), paramClass.toString() + "Value", sig(paramClass)); } else if (paramClass != Object.class) { m.checkcast(p(paramClass)); } }
@Override public void CompoundArray(CompoundArray compoundarray) { visit(compoundarray.getAppendingArg()); if (compoundarray.isArgsPush()) jvm.method().adapter.checkcast("org/jruby/RubyArray"); visit(compoundarray.getAppendedArg()); if (compoundarray.isArgsPush()) { jvm.method().invokeHelper("argsPush", RubyArray.class, RubyArray.class, IRubyObject.class); } else { jvm.method().invokeHelper("argsCat", RubyArray.class, IRubyObject.class, IRubyObject.class); } }
@Override public void PutConstInstr(PutConstInstr putconstinstr) { IRBytecodeAdapter m = jvmMethod(); visit(putconstinstr.getTarget()); m.adapter.checkcast(p(RubyModule.class)); m.adapter.ldc(putconstinstr.getId()); visit(putconstinstr.getValue()); m.adapter.invokevirtual(p(RubyModule.class), "setConstant", sig(IRubyObject.class, String.class, IRubyObject.class)); m.adapter.pop(); }
@Override public void PutConstInstr(PutConstInstr putconstinstr) { IRBytecodeAdapter m = jvm.method(); visit(putconstinstr.getTarget()); m.adapter.checkcast(p(RubyModule.class)); m.adapter.ldc(putconstinstr.getRef()); visit(putconstinstr.getValue()); m.adapter.invokevirtual(p(RubyModule.class), "setConstant", sig(IRubyObject.class, String.class, IRubyObject.class)); m.adapter.pop(); }
@Override public void PutConstInstr(PutConstInstr putconstinstr) { IRBytecodeAdapter m = jvmMethod(); visit(putconstinstr.getTarget()); m.adapter.checkcast(p(RubyModule.class)); m.adapter.ldc(putconstinstr.getId()); visit(putconstinstr.getValue()); m.adapter.invokevirtual(p(RubyModule.class), "setConstant", sig(IRubyObject.class, String.class, IRubyObject.class)); m.adapter.pop(); }
@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 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 ConstMissingInstr(ConstMissingInstr constmissinginstr) { visit(constmissinginstr.getReceiver()); jvm.method().adapter.checkcast("org/jruby/RubyModule"); jvm.method().loadContext(); jvm.method().adapter.ldc("const_missing"); jvm.method().pushSymbol(constmissinginstr.getMissingConst()); jvm.method().invokeVirtual(Type.getType(RubyModule.class), Method.getMethod("org.jruby.runtime.builtin.IRubyObject callMethod(org.jruby.runtime.ThreadContext, java.lang.String, org.jruby.runtime.builtin.IRubyObject)")); }
@Override public void ConstMissingInstr(ConstMissingInstr constmissinginstr) { visit(constmissinginstr.getReceiver()); jvm.method().adapter.checkcast("org/jruby/RubyModule"); jvm.method().loadContext(); jvm.method().adapter.ldc("const_missing"); jvm.method().pushSymbol(constmissinginstr.getMissingConst()); jvm.method().invokeVirtual(Type.getType(RubyModule.class), Method.getMethod("org.jruby.runtime.builtin.IRubyObject callMethod(org.jruby.runtime.ThreadContext, java.lang.String, org.jruby.runtime.builtin.IRubyObject)")); }
@Override public void OptArgMultipleAsgnInstr(OptArgMultipleAsgnInstr optargmultipleasgninstr) { visit(optargmultipleasgninstr.getArray()); jvmAdapter().checkcast(p(RubyArray.class)); jvmAdapter().ldc(optargmultipleasgninstr.getMinArgsLength()); jvmAdapter().ldc(optargmultipleasgninstr.getIndex()); jvmAdapter().invokestatic(p(IRRuntimeHelpers.class), "extractOptionalArgument", sig(IRubyObject.class, RubyArray.class, int.class, int.class)); jvmStoreLocal(optargmultipleasgninstr.getResult()); }
@Override public void OptArgMultipleAsgnInstr(OptArgMultipleAsgnInstr optargmultipleasgninstr) { visit(optargmultipleasgninstr.getArray()); jvmAdapter().checkcast(p(RubyArray.class)); jvmAdapter().ldc(optargmultipleasgninstr.getMinArgsLength()); jvmAdapter().ldc(optargmultipleasgninstr.getIndex()); jvmAdapter().invokestatic(p(IRRuntimeHelpers.class), "extractOptionalArgument", sig(IRubyObject.class, RubyArray.class, int.class, int.class)); jvmStoreLocal(optargmultipleasgninstr.getResult()); }
@Override public void ConstMissingInstr(ConstMissingInstr constmissinginstr) { visit(constmissinginstr.getReceiver()); jvmAdapter().checkcast("org/jruby/RubyModule"); jvmMethod().loadContext(); jvmAdapter().ldc("const_missing"); jvmMethod().pushSymbol(constmissinginstr.getMissingConst().getBytes()); jvmMethod().invokeVirtual(Type.getType(RubyModule.class), Method.getMethod("org.jruby.runtime.builtin.IRubyObject callMethod(org.jruby.runtime.ThreadContext, java.lang.String, org.jruby.runtime.builtin.IRubyObject)")); jvmStoreLocal(constmissinginstr.getResult()); }
@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 ConstMissingInstr(ConstMissingInstr constmissinginstr) { visit(constmissinginstr.getReceiver()); jvmAdapter().checkcast("org/jruby/RubyModule"); jvmMethod().loadContext(); jvmAdapter().ldc("const_missing"); jvmMethod().pushSymbol(constmissinginstr.getMissingConst().getBytes()); jvmMethod().invokeVirtual(Type.getType(RubyModule.class), Method.getMethod("org.jruby.runtime.builtin.IRubyObject callMethod(org.jruby.runtime.ThreadContext, java.lang.String, org.jruby.runtime.builtin.IRubyObject)")); jvmStoreLocal(constmissinginstr.getResult()); }
@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 ReqdArgMultipleAsgnInstr(ReqdArgMultipleAsgnInstr reqdargmultipleasgninstr) { jvm.method().loadContext(); visit(reqdargmultipleasgninstr.getArrayArg()); jvm.method().adapter.checkcast("org/jruby/RubyArray"); jvm.method().adapter.pushInt(reqdargmultipleasgninstr.getPreArgsCount()); jvm.method().adapter.pushInt(reqdargmultipleasgninstr.getIndex()); jvm.method().adapter.pushInt(reqdargmultipleasgninstr.getPostArgsCount()); jvm.method().invokeHelper("irReqdArgMultipleAsgn", IRubyObject.class, ThreadContext.class, RubyArray.class, int.class, int.class, int.class); jvmStoreLocal(reqdargmultipleasgninstr.getResult()); }
@Override public void ReqdArgMultipleAsgnInstr(ReqdArgMultipleAsgnInstr reqdargmultipleasgninstr) { jvmMethod().loadContext(); visit(reqdargmultipleasgninstr.getArray()); jvmAdapter().checkcast(p(RubyArray.class)); jvmAdapter().pushInt(reqdargmultipleasgninstr.getPreArgsCount()); jvmAdapter().pushInt(reqdargmultipleasgninstr.getIndex()); jvmAdapter().pushInt(reqdargmultipleasgninstr.getPostArgsCount()); jvmMethod().invokeIRHelper("irReqdArgMultipleAsgn", sig(IRubyObject.class, ThreadContext.class, RubyArray.class, int.class, int.class, int.class)); jvmStoreLocal(reqdargmultipleasgninstr.getResult()); }
@Override public void ReqdArgMultipleAsgnInstr(ReqdArgMultipleAsgnInstr reqdargmultipleasgninstr) { jvmMethod().loadContext(); visit(reqdargmultipleasgninstr.getArray()); jvmAdapter().checkcast(p(RubyArray.class)); jvmAdapter().pushInt(reqdargmultipleasgninstr.getPreArgsCount()); jvmAdapter().pushInt(reqdargmultipleasgninstr.getIndex()); jvmAdapter().pushInt(reqdargmultipleasgninstr.getPostArgsCount()); jvmMethod().invokeIRHelper("irReqdArgMultipleAsgn", sig(IRubyObject.class, ThreadContext.class, RubyArray.class, int.class, int.class, int.class)); jvmStoreLocal(reqdargmultipleasgninstr.getResult()); }