Index: pkg/compiler/lib/src/resolution/semantic_visitor.dart |
diff --git a/pkg/compiler/lib/src/resolution/semantic_visitor.dart b/pkg/compiler/lib/src/resolution/semantic_visitor.dart |
index f90db1c38db279a6aca732b830e754979c51c4cb..3cc1c22ba338bc49caaac886b1a351d6c3284a93 100644 |
--- a/pkg/compiler/lib/src/resolution/semantic_visitor.dart |
+++ b/pkg/compiler/lib/src/resolution/semantic_visitor.dart |
@@ -91,16 +91,10 @@ abstract class SemanticDeclarationResolvedMixin<R, A> |
} |
} |
- visitInitializers(NodeList initializers, A arg) { |
- if (initializers != null) { |
- for (Node node in initializers) { |
- InitializerStructure structure = computeInitializerStructure(node); |
- if (structure == null) { |
- internalError(node, 'No structure for $node'); |
- } else { |
- structure.dispatch(declVisitor, node, arg); |
- } |
- } |
+ visitInitializers(FunctionExpression function, A arg) { |
+ InitializersStructure initializers = computeInitializersStructure(function); |
+ for (InitializerStructure structure in initializers.initializers) { |
+ structure.dispatch(declVisitor, arg); |
} |
} |
@@ -4009,8 +4003,8 @@ abstract class SemanticDeclarationVisitor<R, A> { |
/// Apply this visitor to the [parameters]. |
applyParameters(NodeList parameters, A arg); |
- /// Apply this visitor to the constructor [initializers]. |
- applyInitializers(NodeList initializers, A arg); |
+ /// Apply this visitor to the initializers of [constructor]. |
+ applyInitializers(FunctionExpression constructor, A arg); |
/// A declaration of a top level [getter]. |
/// |
@@ -4395,6 +4389,8 @@ abstract class SemanticDeclarationVisitor<R, A> { |
/// C(a) : this.a = a, super(); |
/// } |
/// |
+ // TODO(johnniwinther): Replace [initializers] with a structure like |
+ // [InitializersStructure] when computed in resolution. |
R visitGenerativeConstructorDeclaration( |
FunctionExpression node, |
ConstructorElement constructor, |
@@ -4412,6 +4408,8 @@ abstract class SemanticDeclarationVisitor<R, A> { |
/// C._(); |
/// } |
/// |
+ // TODO(johnniwinther): Replace [initializers] with a single |
+ // [ThisConstructorInvokeStructure] when computed in resolution. |
R visitRedirectingGenerativeConstructorDeclaration( |
FunctionExpression node, |
ConstructorElement constructor, |
@@ -4499,7 +4497,24 @@ abstract class SemanticDeclarationVisitor<R, A> { |
ConstructorElement superConstructor, |
InterfaceType type, |
NodeList arguments, |
- Selector selector, |
+ CallStructure callStructure, |
+ A arg); |
+ |
+ /// An implicit super constructor invocation of [superConstructor] from |
+ /// generative constructor initializers. |
+ /// |
+ /// For instance `super(42)` in |
+ /// class B { |
+ /// B(); |
+ /// } |
+ /// class C extends B { |
+ /// C(); // Implicit super call of B(). |
+ /// } |
+ /// |
+ R visitImplicitSuperConstructorInvoke( |
+ FunctionExpression node, |
+ ConstructorElement superConstructor, |
+ InterfaceType type, |
A arg); |
/// An super constructor invocation of an unresolved with [arguments] as |
@@ -4533,7 +4548,7 @@ abstract class SemanticDeclarationVisitor<R, A> { |
Send node, |
ConstructorElement thisConstructor, |
NodeList arguments, |
- Selector selector, |
+ CallStructure callStructure, |
A arg); |
/// An this constructor invocation of an unresolved constructor with |