public static BNilInstr decode(IRReaderDecoder d) { return new BNilInstr(d.decodeLabel(), d.decodeOperand()); }
public static BNilInstr decode(IRReaderDecoder d) { return new BNilInstr(d.decodeLabel(), d.decodeOperand()); }
@Override public Instr cloneForBlockCloning(InlinerInfo ii) { return new BNilInstr(getArg1().cloneForInlining(ii), getJumpTarget()); }
@Override public Instr cloneForBlockCloning(InlinerInfo ii) { return new BNilInstr(getArg1().cloneForInlining(ii), getJumpTarget()); }
@Override public Instr clone(CloneInfo ii) { return new BNilInstr(ii.getRenamedLabel(getJumpTarget()), getArg1().cloneForInlining(ii)); }
@Override public Instr clone(CloneInfo ii) { return new BNilInstr(ii.getRenamedLabel(getJumpTarget()), getArg1().cloneForInlining(ii)); }
@Override public Instr cloneForInlinedScope(InlinerInfo ii) { return new BNilInstr(getArg1().cloneForInlining(ii), ii.getRenamedLabel(getJumpTarget())); }
@Override public Instr cloneForInlinedScope(InlinerInfo ii) { return new BNilInstr(getArg1().cloneForInlining(ii), ii.getRenamedLabel(getJumpTarget())); }
public static BranchInstr create(Operand v1, Operand v2, Label jmpTarget) { if (v2 instanceof BooleanLiteral) { return ((BooleanLiteral) v2).isTrue() ? new BTrueInstr(v1, jmpTarget) : new BFalseInstr(v1, jmpTarget); } if (v2 instanceof Nil) return new BNilInstr(v1, jmpTarget); if (v2 == UndefinedValue.UNDEFINED) return new BUndefInstr(v1, jmpTarget); return new BEQInstr(v1, v2, jmpTarget); }
public static BranchInstr create(Operand v1, Operand v2, Label jmpTarget) { if (v2 instanceof BooleanLiteral) { return ((BooleanLiteral) v2).isTrue() ? new BTrueInstr(v1, jmpTarget) : new BFalseInstr(v1, jmpTarget); } if (v2 instanceof Nil) return new BNilInstr(v1, jmpTarget); if (v2 == UndefinedValue.UNDEFINED) return new BUndefInstr(v1, jmpTarget); return new BEQInstr(v1, v2, jmpTarget); }
return new JumpInstr(jmpTarget); } else { return new BNilInstr(jmpTarget, v1);
return new JumpInstr(jmpTarget); } else { return new BNilInstr(jmpTarget, v1);
private Operand buildAttrAssign(Variable result, AttrAssignNode attrAssignNode) { boolean containsAssignment = attrAssignNode.containsVariableAssignment(); Operand obj = buildWithOrder(attrAssignNode.getReceiverNode(), containsAssignment); Label lazyLabel = null; Label endLabel = null; if (result == null) result = createTemporaryVariable(); if (attrAssignNode.isLazy()) { lazyLabel = getNewLabel(); endLabel = getNewLabel(); addInstr(new BNilInstr(lazyLabel, obj)); } List<Operand> args = new ArrayList<>(); Node argsNode = attrAssignNode.getArgsNode(); Operand lastArg = buildAttrAssignCallArgs(args, argsNode, containsAssignment); addInstr(AttrAssignInstr.create(scope, obj, attrAssignNode.getName(), args.toArray(new Operand[args.size()]), scope.maybeUsingRefinements())); addInstr(new CopyInstr(result, lastArg)); if (attrAssignNode.isLazy()) { addInstr(new JumpInstr(endLabel)); addInstr(new LabelInstr(lazyLabel)); addInstr(new CopyInstr(result, manager.getNil())); addInstr(new LabelInstr(endLabel)); } return result; }
private Operand buildAttrAssign(Variable result, AttrAssignNode attrAssignNode) { boolean containsAssignment = attrAssignNode.containsVariableAssignment(); Operand obj = buildWithOrder(attrAssignNode.getReceiverNode(), containsAssignment); Label lazyLabel = null; Label endLabel = null; if (result == null) result = createTemporaryVariable(); if (attrAssignNode.isLazy()) { lazyLabel = getNewLabel(); endLabel = getNewLabel(); addInstr(new BNilInstr(lazyLabel, obj)); } List<Operand> args = new ArrayList<>(); Node argsNode = attrAssignNode.getArgsNode(); Operand lastArg = buildAttrAssignCallArgs(args, argsNode, containsAssignment); addInstr(AttrAssignInstr.create(scope, obj, attrAssignNode.getName(), args.toArray(new Operand[args.size()]), scope.maybeUsingRefinements())); addInstr(new CopyInstr(result, lastArg)); if (attrAssignNode.isLazy()) { addInstr(new JumpInstr(endLabel)); addInstr(new LabelInstr(lazyLabel)); addInstr(new CopyInstr(result, manager.getNil())); addInstr(new LabelInstr(endLabel)); } return result; }
addInstr(new BNilInstr(lazyLabel, receiver));
addInstr(new BNilInstr(lazyLabel, receiver));
lazyLabel = getNewLabel(); endLabel = getNewLabel(); addInstr(new BNilInstr(lazyLabel, v1));
lazyLabel = getNewLabel(); endLabel = getNewLabel(); addInstr(new BNilInstr(lazyLabel, v1));