blob: 7bf8053854e814224dc8d901f5788a669164693f [file] [log] [blame]
// 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);
}
}