Line data Source code
1 : // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 2 : // for details. All rights reserved. Use of this source code is governed by a 3 : // BSD-style license that can be found in the LICENSE file. 4 : 5 : import 'package:source_span/source_span.dart'; 6 : 7 : import 'ast.dart'; 8 : import 'visitor.dart'; 9 : 10 : typedef _IsDefined = bool Function(String variable); 11 : 12 : /// An AST visitor that ensures that all variables are valid. 13 : class Validator extends RecursiveVisitor { 14 : final _IsDefined _isDefined; 15 : 16 0 : Validator(this._isDefined); 17 : 18 0 : @override 19 : void visitVariable(VariableNode node) { 20 0 : if (_isDefined(node.name)) return; 21 0 : throw SourceSpanFormatException('Undefined variable.', node.span); 22 : } 23 : }