@Override public void meet(Or node) throws RuntimeException { builder.append("("); node.getLeftArg().visit(this); builder.append(" OR "); node.getRightArg().visit(this); builder.append(")"); }
public static void init() { Add.init(); Address.init(); Align.init(); Alloc.init(); Anchor.init(); And.init(); Bad.init(); Bitcast.init(); Block.init(); Builtin.init(); Call.init(); Cmp.init(); Cond.init(); Confirm.init(); Const.init(); Conv.init(); CopyB.init(); Deleted.init(); Div.init(); Dummy.init(); End.init(); Eor.init(); Free.init(); IJmp.init(); Id.init(); Jmp.init(); Load.init(); Member.init(); Minus.init(); Mod.init(); Mul.init(); Mulh.init(); Mux.init(); NoMem.init(); Not.init(); Offset.init(); Or.init(); Phi.init(); Pin.init(); Proj.init(); Raise.init(); Return.init(); Sel.init(); Shl.init(); Shr.init(); Shrs.init(); Size.init(); Start.init(); Store.init(); Sub.init(); Switch.init(); Sync.init(); Tuple.init(); Unknown.init(); }
@Override public Boolean visit(Or ast) { boolean checkLhs = ast.getLhs().accept(this); boolean checkRhs = ast.getRhs().accept(this); if (!(checkLhs && checkRhs)) return false; Type lhsType = ast.getLhs().typeOf(env); Type rhsType = ast.getRhs().typeOf(env); if (!(lhsType.isCompatibleToBool() && rhsType.isCompatibleToBool())) { addToErrorList( ast, "the operator || can not be applied to instances of type " + lhsType.getClass() + " and type " + rhsType.getClass()); return false; } return true; }
@Override public Node visit(Sequence node) { // Node result = new Sequence( node.a.accept(this), node.b); Node result = Sequence.getInstance( new SequenceChild(node.sequenceChild.a.accept(this), node.sequenceChild.b)); // Dc(AB) = Dc(A)B if A does not contain the empty string if (!node.sequenceChild.a.accept(nullable)) { return result; // Dc(AB) = Dc(A)B | Dc(B) if A contains the empty string } else { /* return new Or( result, // Dc(AB) node.sequenceChild.b.accept(this) // Dc(B) ); */ return Or.getInstance( new OrChild( result, // Dc(AB) node.sequenceChild.b.accept(this)) // Dc(B) ); } }
@Override public Node visit(OrChild node) { // Dc(A | B) = Dc(A) | Dc(B) // return new Or(node.a.accept(this), node.b.accept(this)); return Or.getInstance(new OrChild(node.a.accept(this), node.b.accept(this))); }
@Override public ConditionBuilder orNot(final Condition condition) { if (condition == null) return this; return Or.any(this, Not.any(condition)); }