@Override public Instr clone(CloneInfo ii) { Variable var = getResult(); return new RuntimeHelperCall(var == null ? null : ii.getRenamedVariable(var), helperMethod, cloneOperands(ii)); }
@Override public void encode(IRWriterEncoder e) { super.encode(e); e.encode(getHelperMethod().ordinal()); e.encode(getArgs()); }
public Operand[] getArgs() { return getOperands(); }
@Override public String toString() { return (getResult() == null ? "" : (getResult() + " = ")) + getOperation() + "(" + helperMethod + ", " + Arrays.toString(args) + ")"; }
@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); }
setResult(temp, currDynScope, rhc.getResult(), rhc.callHelper(context, currScope, currDynScope, self, temp, block)); break;
public static RuntimeHelperCall decode(IRReaderDecoder d) { return new RuntimeHelperCall(d.decodeVariable(), Methods.fromOrdinal(d.decodeInt()), d.decodeOperandArray()); }
@Override public void RuntimeHelperCall(RuntimeHelperCall runtimehelpercall) { switch (runtimehelpercall.getHelperMethod()) { case HANDLE_PROPAGATED_BREAK: jvmMethod().loadContext(); jvmLoadLocal(DYNAMIC_SCOPE); 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: jvmLoadLocal(DYNAMIC_SCOPE); 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().loadContext(); jvmLoadLocal(DYNAMIC_SCOPE); visit(runtimehelpercall.getArgs()[0]); 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: jvmMethod().loadContext(); visit(runtimehelpercall.getArgs()[0]); jvmAdapter().invokestatic(p(IRRuntimeHelpers.class), "isDefinedBackref", sig(IRubyObject.class, ThreadContext.class, IRubyObject.class)); jvmStoreLocal(runtimehelpercall.getResult()); break;
public IRubyObject callHelper(ThreadContext context, StaticScope currScope, DynamicScope currDynScope, IRubyObject self, Object[] temp, Block block) { Operand[] operands = getOperands(); case MERGE_KWARGS: return IRRuntimeHelpers.mergeKeywordArguments(context, (IRubyObject) arg1, (IRubyObject) getArgs()[1].retrieve(context, self, currScope, currDynScope, temp));
case RETURN: return ReturnInstr.decode(this); case RETURN_OR_RETHROW_SAVED_EXC: return ReturnOrRethrowSavedExcInstr.decode(this); case RUNTIME_HELPER: return RuntimeHelperCall.decode(this); case SEARCH_CONST: return SearchConstInstr.decode(this); case SEARCH_MODULE_FOR_CONST: return SearchModuleForConstInstr.decode(this);
setResult(temp, currDynScope, rhc.getResult(), rhc.callHelper(context, currScope, currDynScope, self, temp, block)); break;
public static RuntimeHelperCall decode(IRReaderDecoder d) { return new RuntimeHelperCall(d.decodeVariable(), Methods.fromOrdinal(d.decodeInt()), d.decodeOperandArray()); }
@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 void RuntimeHelperCall(RuntimeHelperCall runtimehelpercall) { switch (runtimehelpercall.getHelperMethod()) { case HANDLE_PROPAGATED_BREAK: jvmMethod().loadContext(); jvmLoadLocal(DYNAMIC_SCOPE); 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: jvmLoadLocal(DYNAMIC_SCOPE); 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().loadContext(); jvmLoadLocal(DYNAMIC_SCOPE); visit(runtimehelpercall.getArgs()[0]); 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: jvmMethod().loadContext(); visit(runtimehelpercall.getArgs()[0]); jvmAdapter().invokestatic(p(IRRuntimeHelpers.class), "isDefinedBackref", sig(IRubyObject.class, ThreadContext.class, IRubyObject.class)); jvmStoreLocal(runtimehelpercall.getResult()); break;
@Override public String toString() { return (getResult() == null ? "" : (getResult() + " = ")) + getOperation() + "(" + helperMethod + ", " + Arrays.toString(args) + ")"; }
public IRubyObject callHelper(ThreadContext context, StaticScope currScope, DynamicScope currDynScope, IRubyObject self, Object[] temp, Block block) { Operand[] operands = getOperands(); case MERGE_KWARGS: return IRRuntimeHelpers.mergeKeywordArguments(context, (IRubyObject) arg1, (IRubyObject) getArgs()[1].retrieve(context, self, currScope, currDynScope, temp));
case RETURN: return ReturnInstr.decode(this); case RETURN_OR_RETHROW_SAVED_EXC: return ReturnOrRethrowSavedExcInstr.decode(this); case RUNTIME_HELPER: return RuntimeHelperCall.decode(this); case SEARCH_CONST: return SearchConstInstr.decode(this); case SEARCH_MODULE_FOR_CONST: return SearchModuleForConstInstr.decode(this);
case RUNTIME_HELPER: { RuntimeHelperCall rhc = (RuntimeHelperCall)instr; result = rhc.callHelper(context, currDynScope, self, temp, scope, blockType); setResult(temp, currDynScope, rhc.getResult(), result); break;
geb.addInstr(new RuntimeHelperCall(null, "catchUncaughtBreakInLambdas", new Operand[]{exc} )); cfg.addGlobalEnsureBB(geb); } else { instrs.set(instrs.size(), new RuntimeHelperCall(null, "catchUncaughtBreakInLambdas", new Operand[]{exc} ));
@Override public Instr clone(CloneInfo ii) { Variable var = getResult(); return new RuntimeHelperCall(var == null ? null : ii.getRenamedVariable(var), helperMethod, cloneOperands(ii)); }