| // Copyright (c) 2013, 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. |
| |
| library polymer_expressions.visitor; |
| |
| import 'expression.dart'; |
| |
| abstract class Visitor { |
| visit(Expression s) => s.accept(this); |
| visitEmptyExpression(EmptyExpression e); |
| visitParenthesizedExpression(ParenthesizedExpression e); |
| visitInvoke(Invoke i); |
| visitLiteral(Literal l); |
| visitMapLiteral(MapLiteral l); |
| visitMapLiteralEntry(MapLiteralEntry l); |
| visitIdentifier(Identifier i); |
| visitBinaryOperator(BinaryOperator o); |
| visitUnaryOperator(UnaryOperator o); |
| visitInExpression(InExpression c); |
| } |
| |
| abstract class RecursiveVisitor extends Visitor { |
| visitExpression(Expression e); |
| |
| visitEmptyExpression(EmptyExpression e) => visitExpression(e); |
| |
| visitParenthesizedExpression(ParenthesizedExpression e) { |
| visit(e); |
| visitExpression(e); |
| } |
| |
| visitInvoke(Invoke i) { |
| visit(i.receiver); |
| if (i.arguments != null) { |
| for (var a in i.arguments) { |
| visit(a); |
| } |
| } |
| visitExpression(i); |
| } |
| |
| visitLiteral(Literal l) => visitExpression(l); |
| |
| visitMapLiteral(MapLiteral l) { |
| for (var e in l.entries) { |
| visit(e); |
| } |
| visitExpression(l); |
| } |
| |
| visitMapLiteralEntry(MapLiteralEntry e) { |
| visit(e.key); |
| visit(e.entryValue); |
| visitExpression(e); |
| } |
| |
| visitIdentifier(Identifier i) => visitExpression(i); |
| |
| visitBinaryOperator(BinaryOperator o) { |
| visit(o.left); |
| visit(o.right); |
| visitExpression(o); |
| } |
| |
| visitUnaryOperator(UnaryOperator o) { |
| visit(o.child); |
| visitExpression(o); |
| } |
| |
| visitInExpression(InExpression c) { |
| visit(c.left); |
| visit(c.right); |
| visitExpression(c); |
| } |
| } |