| // 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'; |
| import 'visitor.dart'; |
| |
| /// A visitor for evaluating boolean selectors against a specific set of |
| /// semantics. |
| class Evaluator implements Visitor<bool> { |
| final bool Function(String variable) _semantics; |
| |
| Evaluator(this._semantics); |
| |
| @override |
| bool visitVariable(VariableNode node) => _semantics(node.name); |
| |
| @override |
| bool visitNot(NotNode node) => !node.child.accept(this); |
| |
| @override |
| bool visitOr(OrNode node) => |
| node.left.accept(this) || node.right.accept(this); |
| |
| @override |
| bool visitAnd(AndNode node) => |
| node.left.accept(this) && node.right.accept(this); |
| |
| @override |
| bool visitConditional(ConditionalNode node) => node.condition.accept(this) |
| ? node.whenTrue.accept(this) |
| : node.whenFalse.accept(this); |
| } |