| Index: lib/src/ast.dart
|
| diff --git a/lib/src/ast.dart b/lib/src/ast.dart
|
| index 26c09bfb79b69857e41f297337f4e735f9a549f3..13eb633135507b5d450d31311f9fa35f7740f42e 100644
|
| --- a/lib/src/ast.dart
|
| +++ b/lib/src/ast.dart
|
| @@ -38,6 +38,10 @@ class VariableNode implements Node {
|
| accept(Visitor visitor) => visitor.visitVariable(this);
|
|
|
| String toString() => name;
|
| +
|
| + bool operator==(other) => other is VariableNode && name == other.name;
|
| +
|
| + int get hashCode => name.hashCode;
|
| }
|
|
|
| /// A negation expression.
|
| @@ -56,6 +60,10 @@ class NotNode implements Node {
|
| String toString() => child is VariableNode || child is NotNode
|
| ? "!$child"
|
| : "!($child)";
|
| +
|
| + bool operator==(other) => other is NotNode && child == other.child;
|
| +
|
| + int get hashCode => ~child.hashCode;
|
| }
|
|
|
| /// An or expression.
|
| @@ -87,6 +95,11 @@ class OrNode implements Node {
|
|
|
| return "$string1 || $string2";
|
| }
|
| +
|
| + bool operator==(other) =>
|
| + other is OrNode && left == other.left && right == other.right;
|
| +
|
| + int get hashCode => left.hashCode ^ right.hashCode;
|
| }
|
|
|
| /// An and expression.
|
| @@ -118,6 +131,11 @@ class AndNode implements Node {
|
|
|
| return "$string1 && $string2";
|
| }
|
| +
|
| + bool operator==(other) =>
|
| + other is AndNode && left == other.left && right == other.right;
|
| +
|
| + int get hashCode => left.hashCode ^ right.hashCode;
|
| }
|
|
|
| /// A ternary conditional expression.
|
| @@ -149,6 +167,15 @@ class ConditionalNode implements Node {
|
| var trueString = whenTrue is ConditionalNode ? "($whenTrue)" : whenTrue;
|
| return "$conditionString ? $trueString : $whenFalse";
|
| }
|
| +
|
| + bool operator==(other) =>
|
| + other is ConditionalNode &&
|
| + condition == other.condition &&
|
| + whenTrue == other.whenTrue &&
|
| + whenFalse == other.whenFalse;
|
| +
|
| + int get hashCode =>
|
| + condition.hashCode ^ whenTrue.hashCode ^ whenFalse.hashCode;
|
| }
|
|
|
| /// Like [FileSpan.expand], except if [start] and [end] are `null` or from
|
|
|