Chromium Code Reviews| Index: lib/compiler/implementation/resolver.dart |
| diff --git a/lib/compiler/implementation/resolver.dart b/lib/compiler/implementation/resolver.dart |
| index aff2ad7514ac706518559708544f85e8f670c237..913abdb0432ead0f285ad3b0e53de659b21f2959 100644 |
| --- a/lib/compiler/implementation/resolver.dart |
| +++ b/lib/compiler/implementation/resolver.dart |
| @@ -128,7 +128,8 @@ class ResolverTask extends CompilerTask { |
| if (isConstructor) { |
| // Even if there is no initializer list we still have to do the |
| // resolution in case there is an implicit super constructor call. |
| - InitializerResolver resolver = new InitializerResolver(visitor); |
| + InitializerResolver resolver = |
| + new InitializerResolver(compiler, visitor); |
| FunctionElement redirection = |
| resolver.resolveInitializers(element, tree); |
| if (redirection !== null) { |
| @@ -406,12 +407,13 @@ class ResolverTask extends CompilerTask { |
| } |
| class InitializerResolver { |
| + final Compiler compiler; |
|
ahe
2012/08/15 10:47:07
Don't need this field.
|
| final ResolverVisitor visitor; |
| final Map<SourceString, Node> initialized; |
| Link<Node> initializers; |
| bool hasSuper; |
| - InitializerResolver(this.visitor) |
| + InitializerResolver(this.compiler, this.visitor) |
| : initialized = new Map<SourceString, Node>(), hasSuper = false; |
| error(Node node, MessageKind kind, [arguments = const []]) { |
| @@ -552,6 +554,18 @@ class InitializerResolver { |
| */ |
| FunctionElement resolveInitializers(FunctionElement constructor, |
| FunctionExpression functionNode) { |
| + // keep track of all "this.param" parameters specified for constructor so |
|
ahe
2012/08/15 10:47:07
Not a proper sentence. By which I mean: please cap
|
| + // that we can ensure that fields are initialized only once |
| + FunctionSignature functionParameters = |
| + constructor.computeSignature(compiler); |
|
ahe
2012/08/15 10:47:07
You can get this from visitor.compiler.
|
| + if (functionParameters != null) { |
| + functionParameters.forEachParameter((Element element) { |
| + if (element.kind == ElementKind.FIELD_PARAMETER) { |
| + initialized[element.name] = element; |
| + } |
| + }); |
| + } |
| + |
| if (functionNode.initializers === null) { |
| initializers = const EmptyLink<Node>(); |
| } else { |