@Override public TernaryValue xor(TernaryValue that) { return that.not(); }
@Override public TernaryValue xor(TernaryValue that) { return that.not(); }
static TernaryValue evaluateComparison(Token op, Node left, Node right) { // Don't try to minimize side-effects here. if (NodeUtil.mayHaveSideEffects(left) || NodeUtil.mayHaveSideEffects(right)) { return TernaryValue.UNKNOWN; } switch (op) { case EQ: return tryAbstractEqualityComparison(left, right); case NE: return tryAbstractEqualityComparison(left, right).not(); case SHEQ: return tryStrictEqualityComparison(left, right); case SHNE: return tryStrictEqualityComparison(left, right).not(); case LT: return tryAbstractRelationalComparison(left, right, false); case GT: return tryAbstractRelationalComparison(right, left, false); case LE: return tryAbstractRelationalComparison(right, left, true).not(); case GE: return tryAbstractRelationalComparison(left, right, true).not(); default: break; } throw new IllegalStateException("Unexpected operator for comparison"); }
static TernaryValue evaluateComparison(int op, Node left, Node right, boolean useTypes) { // Don't try to minimize side-effects here. if (NodeUtil.mayHaveSideEffects(left) || NodeUtil.mayHaveSideEffects(right)) { return TernaryValue.UNKNOWN; } switch (op) { case Token.EQ: return tryAbstractEqualityComparison(left, right, useTypes); case Token.NE: return tryAbstractEqualityComparison(left, right, useTypes).not(); case Token.SHEQ: return tryStrictEqualityComparison(left, right, useTypes); case Token.SHNE: return tryStrictEqualityComparison(left, right, useTypes).not(); case Token.LT: return tryAbstractRelationalComparison(left, right, useTypes, false); case Token.GT: return tryAbstractRelationalComparison(right, left, useTypes, false); case Token.LE: return tryAbstractRelationalComparison(right, left, useTypes, true).not(); case Token.GE: return tryAbstractRelationalComparison(left, right, useTypes, true).not(); } throw new IllegalStateException("Unexpected operator for comparison"); }
return getPureBooleanValue(n.getLastChild()).not();
return getPureBooleanValue(n.getLastChild()).not();
case NOT: TernaryValue value = getImpureBooleanValue(n.getLastChild()); return value.not(); case AND: { TernaryValue lhs = getImpureBooleanValue(n.getFirstChild());
case Token.NOT: TernaryValue value = getImpureBooleanValue(n.getLastChild()); return value.not(); case Token.AND: { TernaryValue lhs = getImpureBooleanValue(n.getFirstChild());
return getBooleanValueWithTypes(n.getLastChild()); case NOT: return getBooleanValueWithTypes(n.getLastChild()).not(); case AND:
result = leftTypeRestricted.testForEquality(rightTypeRestricted); if (n.isNE()) { result = result.not();
result = leftTypeRestricted.testForEquality(rightTypeRestricted); if (n.isNE()) { result = result.not();