| Index: lib/src/visitor.dart
|
| diff --git a/lib/src/visitor.dart b/lib/src/visitor.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4bc0436c00a0111dd25ad62c9884f78a4305dd59
|
| --- /dev/null
|
| +++ b/lib/src/visitor.dart
|
| @@ -0,0 +1,44 @@
|
| +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +import 'ast.dart';
|
| +
|
| +/// The interface for visitors of the boolean selector AST.
|
| +abstract class Visitor<T> {
|
| + T visitVariable(VariableNode node);
|
| + T visitNot(NotNode node);
|
| + T visitOr(OrNode node);
|
| + T visitAnd(AndNode node);
|
| + T visitConditional(ConditionalNode node);
|
| +}
|
| +
|
| +/// An abstract superclass for side-effect-based visitors.
|
| +///
|
| +/// The default implementations of this visitor's methods just traverse the AST
|
| +/// and do nothing with it.
|
| +abstract class RecursiveVisitor implements Visitor {
|
| + const RecursiveVisitor();
|
| +
|
| + void visitVariable(VariableNode node) {}
|
| +
|
| + void visitNot(NotNode node) {
|
| + node.child.accept(this);
|
| + }
|
| +
|
| + void visitOr(OrNode node) {
|
| + node.left.accept(this);
|
| + node.right.accept(this);
|
| + }
|
| +
|
| + void visitAnd(AndNode node) {
|
| + node.left.accept(this);
|
| + node.right.accept(this);
|
| + }
|
| +
|
| + void visitConditional(ConditionalNode node) {
|
| + node.condition.accept(this);
|
| + node.whenTrue.accept(this);
|
| + node.whenFalse.accept(this);
|
| + }
|
| +}
|
|
|