blob: 38d88b35d1c5a5e8db662b7fb7b402bf06dc4611 [file] [log] [blame]
// Copyright (c) 2012, 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 visitor;
import 'elements.dart';
import '../ssa/ssa.dart'
show InterceptedElement;
import '../closure.dart'
show ThisElement,
BoxElement,
BoxFieldElement,
ClosureClassElement,
ClosureFieldElement;
abstract class ElementVisitor<R> {
R visit(Element e) => e.accept(this);
R visitElement(Element e);
R visitErroneousElement(ErroneousElement e) => visitFunctionElement(e);
R visitWarnOnUseElement(WarnOnUseElement e) => visitElement(e);
R visitAmbiguousElement(AmbiguousElement e) => visitElement(e);
R visitScopeContainerElement(ScopeContainerElement e) => visitElement(e);
R visitCompilationUnitElement(CompilationUnitElement e) => visitElement(e);
R visitLibraryElement(LibraryElement e) => visitScopeContainerElement(e);
R visitPrefixElement(PrefixElement e) => visitElement(e);
R visitTypedefElement(TypedefElement e) => visitElement(e);
R visitVariableElement(VariableElement e) => visitElement(e);
R visitFieldElement(FieldElement e) => visitVariableElement(e);
R visitFieldParameterElement(FieldParameterElement e) => visitElement(e);
R visitVariableListElement(VariableListElement e) => visitElement(e);
R visitAbstractFieldElement(AbstractFieldElement e) => visitElement(e);
R visitFunctionElement(FunctionElement e) => visitElement(e);
R visitConstructorBodyElement(ConstructorBodyElement e) => visitElement(e);
R visitClassElement(ClassElement e) => visitScopeContainerElement(e);
R visitTypeDeclarationElement(TypeDeclarationElement e) => visitElement(e);
R visitMixinApplicationElement(MixinApplicationElement e) {
return visitClassElement(e);
}
R visitVoidElement(VoidElement e) => visitElement(e);
R visitLabelElement(LabelElement e) => visitElement(e);
R visitTargetElement(TargetElement e) => visitElement(e);
R visitTypeVariableElement(TypeVariableElement e) => visitElement(e);
R visitInterceptedElement(InterceptedElement e) => visitElement(e);
R visitThisElement(ThisElement e) => visitElement(e);
R visitBoxElement(BoxElement e) => visitElement(e);
R visitBoxFieldElement(BoxFieldElement e) => visitElement(e);
R visitClosureClassElement(ClosureClassElement e) => visitClassElement(e);
R visitClosureFieldElement(ClosureFieldElement e) => visitVariableElement(e);
}