@Override public Instr cloneForInlining(InlinerInfo ii) { // SSS FIXME: Correct in all situations?? return new RecordEndBlockInstr(declaringScope, endBlockClosure); }
@Override public void encode(IRWriterEncoder e) { super.encode(e); e.encode(getDeclaringScope()); e.encode(getEndBlockClosure()); }
public WrappedIRClosure getEndBlockClosure() { return (WrappedIRClosure) getOperand1(); }
@Override public Instr clone(CloneInfo ii) { // SSS FIXME: Correct in all situations?? return new RecordEndBlockInstr(declaringScope, (WrappedIRClosure) getEndBlockClosure().cloneForInlining(ii)); }
@Override public Object interpret(ThreadContext context, StaticScope currScope, DynamicScope currDynScope, IRubyObject self, Object[] temp) { Block blk = (Block) getEndBlockClosure().retrieve(context, self, currScope, context.getCurrentScope(), temp); IRRuntimeHelpers.pushExitBlock(context, blk); return null; }
@Override public String toString() { return getOperation().toString() + "(" + endBlockClosure.getName() + ")"; }
case RAISE_ARGUMENT_ERROR: return RaiseArgumentErrorInstr.decode(this); case RAISE_REQUIRED_KEYWORD_ARGUMENT_ERROR: return RaiseRequiredKeywordArgumentError.decode(this); case RECORD_END_BLOCK: return RecordEndBlockInstr.decode(this); case REIFY_CLOSURE: return ReifyClosureInstr.decode(this); case RECV_RUBY_EXC: return ReceiveRubyExceptionInstr.decode(this);
break; case RECORD_END_BLOCK: ((RecordEndBlockInstr)instr).interpret(); break;
@Override public Instr clone(CloneInfo ii) { // SSS FIXME: Correct in all situations?? return new RecordEndBlockInstr(declaringScope, (WrappedIRClosure) getEndBlockClosure().cloneForInlining(ii)); }
@Override public Object interpret(ThreadContext context, StaticScope currScope, DynamicScope currDynScope, IRubyObject self, Object[] temp) { Block blk = (Block) getEndBlockClosure().retrieve(context, self, currScope, context.getCurrentScope(), temp); IRRuntimeHelpers.pushExitBlock(context, blk); return null; }
@Override public String toString() { return getOperation().toString() + "(" + endBlockClosure.getName() + ")"; }
case RAISE_ARGUMENT_ERROR: return RaiseArgumentErrorInstr.decode(this); case RAISE_REQUIRED_KEYWORD_ARGUMENT_ERROR: return RaiseRequiredKeywordArgumentError.decode(this); case RECORD_END_BLOCK: return RecordEndBlockInstr.decode(this); case REIFY_CLOSURE: return ReifyClosureInstr.decode(this); case RECV_RUBY_EXC: return ReceiveRubyExceptionInstr.decode(this);
break; case RECORD_END_BLOCK: ((RecordEndBlockInstr)instr).interpret(); break;
@Override public Instr cloneForInlining(InlinerInfo ii) { // SSS FIXME: Correct in all situations?? return new RecordEndBlockInstr(declaringScope, endBlockClosure); }
@Override public void encode(IRWriterEncoder e) { super.encode(e); e.encode(getDeclaringScope()); e.encode(getEndBlockClosure()); }
@Override public void RecordEndBlockInstr(RecordEndBlockInstr recordEndBlockInstr) { jvmMethod().loadContext(); jvmMethod().loadContext(); visit(recordEndBlockInstr.getEndBlockClosure()); jvmMethod().invokeIRHelper("getBlockFromObject", sig(Block.class, ThreadContext.class, Object.class)); jvmMethod().invokeIRHelper("pushExitBlock", sig(void.class, ThreadContext.class, Block.class)); }
public WrappedIRClosure getEndBlockClosure() { return (WrappedIRClosure) getOperand1(); }
public static RecordEndBlockInstr decode(IRReaderDecoder d) { return new RecordEndBlockInstr(d.decodeScope(), (WrappedIRClosure) d.decodeOperand()); }
@Override public void RecordEndBlockInstr(RecordEndBlockInstr recordEndBlockInstr) { jvmMethod().loadContext(); jvmMethod().loadContext(); visit(recordEndBlockInstr.getEndBlockClosure()); jvmMethod().invokeIRHelper("getBlockFromObject", sig(Block.class, ThreadContext.class, Object.class)); jvmMethod().invokeIRHelper("pushExitBlock", sig(void.class, ThreadContext.class, Block.class)); }
public static RecordEndBlockInstr decode(IRReaderDecoder d) { return new RecordEndBlockInstr(d.decodeScope(), (WrappedIRClosure) d.decodeOperand()); }