public BuildLambdaInstr(Variable lambda, IRClosure lambdaBody, ISourcePosition position) { super(Operation.LAMBDA); this.result = lambda; this.operands = new Operand[] { new WrappedIRClosure(lambdaBody) }; this.position = position; }
public BuildLambdaInstr(Variable lambda, IRClosure lambdaBody, ISourcePosition position) { super(Operation.LAMBDA); this.result = lambda; this.operands = new Operand[] { new WrappedIRClosure(lambdaBody) }; this.position = position; }
@Override public Operand getSimplifiedOperand(Map<Operand, Operand> valueMap, boolean force) { Operand newSelf = self.getSimplifiedOperand(valueMap, force); return newSelf == self ? this : new WrappedIRClosure((Variable)newSelf, closure); }
@Override public Operand getSimplifiedOperand(Map<Operand, Operand> valueMap, boolean force) { Operand newSelf = self.getSimplifiedOperand(valueMap, force); return newSelf == self ? this : new WrappedIRClosure((Variable)newSelf, closure); }
@Override public Operand cloneForInlining(InlinerInfo ii) { return new WrappedIRClosure(closure.cloneForClonedInstr(ii)); }
@Override public Operand cloneForInlining(InlinerInfo ii) { return new WrappedIRClosure(closure.cloneForClonedInstr(ii)); }
@Override public Operand cloneForInlining(CloneInfo info) { // Making interp instrs so that if JIT hits IRClosure we will not concurrently modify the same IRScope. if (info instanceof SimpleCloneInfo && !((SimpleCloneInfo) info).isEnsureBlockCloneMode()) { // FIXME: It really bothers me we do not clone closure here but cloning like main clone case loses interpContext + other things. return new WrappedIRClosure(info.getRenamedVariable(self), closure); } return new WrappedIRClosure(info.getRenamedVariable(self), closure.cloneForInlining(info)); }
@Override public Operand cloneForInlining(CloneInfo info) { // Making interp instrs so that if JIT hits IRClosure we will not concurrently modify the same IRScope. if (info instanceof SimpleCloneInfo && !((SimpleCloneInfo) info).isEnsureBlockCloneMode()) { // FIXME: It really bothers me we do not clone closure here but cloning like main clone case loses interpContext + other things. return new WrappedIRClosure(info.getRenamedVariable(self), closure); } return new WrappedIRClosure(info.getRenamedVariable(self), closure.cloneForInlining(info)); }
public static WrappedIRClosure decode(IRReaderDecoder d) { return new WrappedIRClosure(d.decodeVariable(), (IRClosure) d.decodeScope()); }
public static WrappedIRClosure decode(IRReaderDecoder d) { return new WrappedIRClosure(d.decodeVariable(), (IRClosure) d.decodeScope()); }
public static void runBeginBlocks(List<IRClosure> beBlocks, ThreadContext context, IRubyObject self, StaticScope currScope, Object[] temp) { if (beBlocks == null) return; for (IRClosure b: beBlocks) { // SSS FIXME: Should I piggyback on WrappedIRClosure.retrieve or just copy that code here? Block blk = (Block)(new WrappedIRClosure(b.getSelf(), b)).retrieve(context, self, currScope, context.getCurrentScope(), temp); blk.yield(context, null); } }
public static void runBeginEndBlocks(List<IRClosure> beBlocks, ThreadContext context, IRubyObject self, Object[] temp) { if (beBlocks == null) return; for (IRClosure b: beBlocks) { // SSS FIXME: Should I piggyback on WrappedIRClosure.retrieve or just copy that code here? b.prepareForInterpretation(false); Block blk = (Block)(new WrappedIRClosure(b)).retrieve(context, self, context.getCurrentScope(), temp); blk.yield(context, null); } }
public static void runBeginBlocks(List<IRClosure> beBlocks, ThreadContext context, IRubyObject self, StaticScope currScope, Object[] temp) { if (beBlocks == null) return; for (IRClosure b: beBlocks) { // SSS FIXME: Should I piggyback on WrappedIRClosure.retrieve or just copy that code here? Block blk = (Block)(new WrappedIRClosure(b.getSelf(), b)).retrieve(context, self, currScope, context.getCurrentScope(), temp); blk.yield(context, null); } }
public static void runBeginEndBlocks(List<IRClosure> beBlocks, ThreadContext context, IRubyObject self, Object[] temp) { if (beBlocks == null) return; for (IRClosure b: beBlocks) { // SSS FIXME: Should I piggyback on WrappedIRClosure.retrieve or just copy that code here? b.prepareForInterpretation(false); Block blk = (Block)(new WrappedIRClosure(b)).retrieve(context, self, context.getCurrentScope(), temp); blk.yield(context, null); } }
public Operand buildForIter(final ForNode forNode) { // Create a new closure context IRClosure closure = new IRFor(manager, scope, forNode.getLine(), forNode.getScope(), Signature.from(forNode)); // Create a new nested builder to ensure this gets its own IR builder state like the ensure block stack newIRBuilder(manager, closure).buildForIterInner(forNode); return new WrappedIRClosure(buildSelf(), closure); }
public Operand buildIter(final IterNode iterNode) { IRClosure closure = new IRClosure(manager, scope, iterNode.getLine(), iterNode.getScope(), Signature.from(iterNode), needsCodeCoverage); // Create a new nested builder to ensure this gets its own IR builder state like the ensure block stack newIRBuilder(manager, closure).buildIterInner(iterNode); return new WrappedIRClosure(buildSelf(), closure); }
public Operand buildForIter(final ForNode forNode) { // Create a new closure context IRClosure closure = new IRFor(manager, scope, forNode.getLine(), forNode.getScope(), Signature.from(forNode)); // Create a new nested builder to ensure this gets its own IR builder state like the ensure block stack newIRBuilder(manager, closure).buildForIterInner(forNode); return new WrappedIRClosure(buildSelf(), closure); }
public Operand buildIter(final IterNode iterNode) { IRClosure closure = new IRClosure(manager, scope, iterNode.getLine(), iterNode.getScope(), Signature.from(iterNode), needsCodeCoverage); // Create a new nested builder to ensure this gets its own IR builder state like the ensure block stack newIRBuilder(manager, closure).buildIterInner(iterNode); return new WrappedIRClosure(buildSelf(), closure); }
public Operand buildLambda(LambdaNode node) { IRClosure closure = new IRClosure(manager, scope, node.getLine(), node.getScope(), Signature.from(node), needsCodeCoverage); // Create a new nested builder to ensure this gets its own IR builder state like the ensure block stack newIRBuilder(manager, closure).buildLambdaInner(node); Variable lambda = createTemporaryVariable(); WrappedIRClosure lambdaBody = new WrappedIRClosure(closure.getSelf(), closure); addInstr(new BuildLambdaInstr(lambda, lambdaBody, scope.getFile(), node.getLine())); return lambda; }
public Operand buildLambda(LambdaNode node) { IRClosure closure = new IRClosure(manager, scope, node.getLine(), node.getScope(), Signature.from(node), needsCodeCoverage); // Create a new nested builder to ensure this gets its own IR builder state like the ensure block stack newIRBuilder(manager, closure).buildLambdaInner(node); Variable lambda = createTemporaryVariable(); WrappedIRClosure lambdaBody = new WrappedIRClosure(closure.getSelf(), closure); addInstr(new BuildLambdaInstr(lambda, lambdaBody, scope.getFile(), node.getLine())); return lambda; }