| // 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 'package:source_span/source_span.dart'; |
| |
| import 'ast.dart'; |
| import 'visitor.dart'; |
| |
| typedef _IsDefined = bool Function(String variable); |
| |
| /// An AST visitor that ensures that all variables are valid. |
| class Validator extends RecursiveVisitor { |
| final _IsDefined _isDefined; |
| |
| Validator(this._isDefined); |
| |
| @override |
| void visitVariable(VariableNode node) { |
| if (_isDefined(node.name)) return; |
| throw SourceSpanFormatException('Undefined variable.', node.span); |
| } |
| } |