Chromium Code Reviews| Index: sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart |
| diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart |
| index d7279d54a7bfb622670c2808bc6e3187ce05b91b..40fb6ead72d6ee2d8d28cd5b9d8bb8efc818dff7 100644 |
| --- a/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart |
| +++ b/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart |
| @@ -195,14 +195,16 @@ class PlaceholderCollector extends Visitor { |
| ConstructorElement constructor = element; |
| DartType type = element.enclosingClass.thisType.asRaw(); |
| makeConstructorPlaceholder(node.name, element, type); |
| - Return bodyAsReturn = node.body.asReturn(); |
| - if (bodyAsReturn != null && bodyAsReturn.isRedirectingFactoryBody) { |
| + RedirectingFactoryBody bodyAsRedirectingFactoryBody = |
| + node.body.asRedirectingFactoryBody(); |
| + if (bodyAsRedirectingFactoryBody != null) { |
| // Factory redirection. |
| FunctionElement redirectTarget = constructor.immediateRedirectionTarget; |
| assert(redirectTarget != null && redirectTarget != element); |
| type = redirectTarget.enclosingClass.thisType.asRaw(); |
| makeConstructorPlaceholder( |
| - bodyAsReturn.expression, redirectTarget, type); |
| + bodyAsRedirectingFactoryBody.constructorReference, |
| + redirectTarget, type); |
| } |
| } else if (Elements.isStaticOrTopLevel(element)) { |
| // Note: this code should only rename private identifiers for class' |
| @@ -239,11 +241,7 @@ class PlaceholderCollector extends Visitor { |
| } else if (element is VariableElement) { |
| VariableDefinitions definitions = elementNode; |
| Node definition = definitions.definitions.nodes.head; |
| - final definitionElement = treeElements[elementNode]; |
| - // definitionElement == null if variable is actually unused. |
|
Johnni Winther
2014/07/25 10:22:20
Not true.
|
| - if (definitionElement != null) { |
| - collectFieldDeclarationPlaceholders(definitionElement, definition); |
| - } |
| + collectFieldDeclarationPlaceholders(element, definition); |
| makeVarDeclarationTypePlaceholder(definitions); |
| } else { |
| assert(element is ClassElement || element is TypedefElement); |
| @@ -252,6 +250,9 @@ class PlaceholderCollector extends Visitor { |
| compiler.withCurrentElement(element, () { |
| elementNode.accept(this); |
| }); |
| + if (element == backend.mirrorHelperSymbolsMap) { |
| + backend.registerMirrorHelperElement(element, elementNode); |
| + } |
| } |
| // TODO(karlklose): should we create placeholders for these? |
| @@ -484,10 +485,6 @@ class PlaceholderCollector extends Visitor { |
| } |
| visitVariableDefinitions(VariableDefinitions node) { |
| - Element definitionElement = treeElements[node]; |
| - if (definitionElement == backend.mirrorHelperSymbolsMap) { |
| - backend.registerMirrorHelperElement(definitionElement, node); |
| - } |
| // Collect only local placeholders. |
| for (Node definition in node.definitions.nodes) { |
| Element definitionElement = treeElements[definition]; |