@Override public Instr clone(CloneInfo ii) { Variable var = getResult(); return new RuntimeHelperCall(var == null ? null : ii.getRenamedVariable(var), helperMethod, cloneOperands(ii)); }
@Override public Instr clone(CloneInfo ii) { Variable var = getResult(); return new RuntimeHelperCall(var == null ? null : ii.getRenamedVariable(var), helperMethod, cloneOperands(ii)); }
@Override public Instr cloneForInlining(InlinerInfo ii) { // SSS FIXME: array of args cloning should be part of utility class Operand[] clonedArgs = new Operand[args.length]; for (int i = 0; i < args.length; i++) { clonedArgs[i] = args[i].cloneForInlining(ii); } Variable var = getResult(); return new RuntimeHelperCall(var == null ? null : ii.getRenamedVariable(var), helperMethod, clonedArgs); }
@Override public Instr cloneForInlining(InlinerInfo ii) { // SSS FIXME: array of args cloning should be part of utility class Operand[] clonedArgs = new Operand[args.length]; for (int i = 0; i < args.length; i++) { clonedArgs[i] = args[i].cloneForInlining(ii); } Variable var = getResult(); return new RuntimeHelperCall(var == null ? null : ii.getRenamedVariable(var), helperMethod, clonedArgs); }
visit(runtimehelpercall.getArgs()[0]); jvmAdapter().invokestatic(p(IRRuntimeHelpers.class), "handlePropagatedBreak", sig(IRubyObject.class, ThreadContext.class, DynamicScope.class, Object.class)); jvmStoreLocal(runtimehelpercall.getResult()); break; case HANDLE_NONLOCAL_RETURN: visit(runtimehelpercall.getArgs()[0]); jvmAdapter().invokestatic(p(IRRuntimeHelpers.class), "handleNonlocalReturn", sig(IRubyObject.class, DynamicScope.class, Object.class)); jvmStoreLocal(runtimehelpercall.getResult()); break; case HANDLE_BREAK_AND_RETURNS_IN_LAMBDA: jvmMethod().loadSelfBlock(); jvmAdapter().invokestatic(p(IRRuntimeHelpers.class), "handleBreakAndReturnsInLambdas", sig(IRubyObject.class, ThreadContext.class, DynamicScope.class, Object.class, Block.class)); jvmStoreLocal(runtimehelpercall.getResult()); break; case IS_DEFINED_BACKREF: visit(runtimehelpercall.getArgs()[0]); jvmAdapter().invokestatic(p(IRRuntimeHelpers.class), "isDefinedBackref", sig(IRubyObject.class, ThreadContext.class, IRubyObject.class)); jvmStoreLocal(runtimehelpercall.getResult()); break; case IS_DEFINED_CALL: visit(runtimehelpercall.getArgs()[2]); jvmAdapter().invokestatic(p(IRRuntimeHelpers.class), "isDefinedCall", sig(IRubyObject.class, ThreadContext.class, IRubyObject.class, IRubyObject.class, String.class, IRubyObject.class)); jvmStoreLocal(runtimehelpercall.getResult()); break; case IS_DEFINED_CONSTANT_OR_METHOD:
visit(runtimehelpercall.getArgs()[0]); jvmAdapter().invokestatic(p(IRRuntimeHelpers.class), "handlePropagatedBreak", sig(IRubyObject.class, ThreadContext.class, DynamicScope.class, Object.class)); jvmStoreLocal(runtimehelpercall.getResult()); break; case HANDLE_NONLOCAL_RETURN: visit(runtimehelpercall.getArgs()[0]); jvmAdapter().invokestatic(p(IRRuntimeHelpers.class), "handleNonlocalReturn", sig(IRubyObject.class, DynamicScope.class, Object.class)); jvmStoreLocal(runtimehelpercall.getResult()); break; case HANDLE_BREAK_AND_RETURNS_IN_LAMBDA: jvmMethod().loadSelfBlock(); jvmAdapter().invokestatic(p(IRRuntimeHelpers.class), "handleBreakAndReturnsInLambdas", sig(IRubyObject.class, ThreadContext.class, DynamicScope.class, Object.class, Block.class)); jvmStoreLocal(runtimehelpercall.getResult()); break; case IS_DEFINED_BACKREF: visit(runtimehelpercall.getArgs()[0]); jvmAdapter().invokestatic(p(IRRuntimeHelpers.class), "isDefinedBackref", sig(IRubyObject.class, ThreadContext.class, IRubyObject.class)); jvmStoreLocal(runtimehelpercall.getResult()); break; case IS_DEFINED_CALL: visit(runtimehelpercall.getArgs()[2]); jvmAdapter().invokestatic(p(IRRuntimeHelpers.class), "isDefinedCall", sig(IRubyObject.class, ThreadContext.class, IRubyObject.class, IRubyObject.class, String.class, IRubyObject.class)); jvmStoreLocal(runtimehelpercall.getResult()); break; case IS_DEFINED_CONSTANT_OR_METHOD:
setResult(temp, currDynScope, rhc.getResult(), rhc.callHelper(context, currScope, currDynScope, self, temp, block)); break;
setResult(temp, currDynScope, rhc.getResult(), rhc.callHelper(context, currScope, currDynScope, self, temp, block)); break;
RuntimeHelperCall rhc = (RuntimeHelperCall)instr; result = rhc.callHelper(context, currDynScope, self, temp, scope, blockType); setResult(temp, currDynScope, rhc.getResult(), result); break;
RuntimeHelperCall rhc = (RuntimeHelperCall)instr; result = rhc.callHelper(context, currDynScope, self, temp, scope, blockType); setResult(temp, currDynScope, rhc.getResult(), result); break;
setResult(temp, currDynScope, rhc.getResult(), rhc.callHelper(context, currScope, currDynScope, self, temp, block)); break;
setResult(temp, currDynScope, rhc.getResult(), rhc.callHelper(context, currScope, currDynScope, self, temp, block)); break;