| Index: observatory_pub_packages/polymer_expressions/visitor.dart
|
| ===================================================================
|
| --- observatory_pub_packages/polymer_expressions/visitor.dart (revision 0)
|
| +++ observatory_pub_packages/polymer_expressions/visitor.dart (working copy)
|
| @@ -0,0 +1,133 @@
|
| +// 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);
|
| + visitGetter(Getter i);
|
| + visitIndex(Index i);
|
| + visitInvoke(Invoke i);
|
| + visitLiteral(Literal l);
|
| + visitListLiteral(ListLiteral l);
|
| + visitMapLiteral(MapLiteral l);
|
| + visitMapLiteralEntry(MapLiteralEntry l);
|
| + visitIdentifier(Identifier i);
|
| + visitBinaryOperator(BinaryOperator o);
|
| + visitUnaryOperator(UnaryOperator o);
|
| + visitTernaryOperator(TernaryOperator o);
|
| + visitInExpression(InExpression c);
|
| + visitAsExpression(AsExpression c);
|
| +}
|
| +
|
| +class RecursiveVisitor extends Visitor {
|
| + preVisitExpression(Expression e) {}
|
| + visitExpression(Expression e) {}
|
| +
|
| + visitEmptyExpression(EmptyExpression e) {
|
| + preVisitExpression(e);
|
| + visitExpression(e);
|
| + }
|
| +
|
| + visitParenthesizedExpression(ParenthesizedExpression e) {
|
| + preVisitExpression(e);
|
| + visit(e.child);
|
| + visitExpression(e);
|
| + }
|
| +
|
| + visitGetter(Getter i) {
|
| + preVisitExpression(i);
|
| + visit(i.receiver);
|
| + visitExpression(i);
|
| + }
|
| +
|
| + visitIndex(Index i) {
|
| + preVisitExpression(i);
|
| + visit(i.receiver);
|
| + visit(i.argument);
|
| + visitExpression(i);
|
| + }
|
| +
|
| + visitInvoke(Invoke i) {
|
| + preVisitExpression(i);
|
| + visit(i.receiver);
|
| + if (i.arguments != null) {
|
| + for (var a in i.arguments) {
|
| + visit(a);
|
| + }
|
| + }
|
| + visitExpression(i);
|
| + }
|
| +
|
| + visitLiteral(Literal l) {
|
| + preVisitExpression(l);
|
| + visitExpression(l);
|
| + }
|
| +
|
| + visitListLiteral(ListLiteral l) {
|
| + preVisitExpression(l);
|
| + for (var i in l.items) {
|
| + visit(i);
|
| + }
|
| + visitExpression(l);
|
| + }
|
| +
|
| + visitMapLiteral(MapLiteral l) {
|
| + preVisitExpression(l);
|
| + for (var e in l.entries) {
|
| + visit(e);
|
| + }
|
| + visitExpression(l);
|
| + }
|
| +
|
| + visitMapLiteralEntry(MapLiteralEntry e) {
|
| + preVisitExpression(e);
|
| + visit(e.key);
|
| + visit(e.entryValue);
|
| + visitExpression(e);
|
| + }
|
| +
|
| + visitIdentifier(Identifier i) {
|
| + preVisitExpression(i);
|
| + visitExpression(i);
|
| + }
|
| +
|
| + visitBinaryOperator(BinaryOperator o) {
|
| + preVisitExpression(o);
|
| + visit(o.left);
|
| + visit(o.right);
|
| + visitExpression(o);
|
| + }
|
| +
|
| + visitUnaryOperator(UnaryOperator o) {
|
| + preVisitExpression(o);
|
| + visit(o.child);
|
| + visitExpression(o);
|
| + }
|
| +
|
| + visitTernaryOperator(TernaryOperator o) {
|
| + preVisitExpression(o);
|
| + visit(o.condition);
|
| + visit(o.trueExpr);
|
| + visit(o.falseExpr);
|
| + visitExpression(o);
|
| + }
|
| +
|
| + visitInExpression(InExpression c) {
|
| + preVisitExpression(c);
|
| + visit(c.left);
|
| + visit(c.right);
|
| + visitExpression(c);
|
| + }
|
| +
|
| + visitAsExpression(AsExpression c) {
|
| + visit(c.left);
|
| + visit(c.right);
|
| + visitExpression(c);
|
| + }
|
| +}
|
|
|