Chromium Code Reviews| Index: pkg/compiler/lib/src/ssa/builder_kernel.dart |
| diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart |
| index 141cda07f84eb7513b3400d8727bf9e2ba0c4030..62b256459415b0558e80ff167de3b901885b4cc3 100644 |
| --- a/pkg/compiler/lib/src/ssa/builder_kernel.dart |
| +++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart |
| @@ -462,23 +462,28 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| /// Maps the instance fields of a class to their SSA values. |
| Map<FieldEntity, HInstruction> _collectFieldValues(ir.Class clazz) { |
| Map<FieldEntity, HInstruction> fieldValues = <FieldEntity, HInstruction>{}; |
| - |
| - for (ir.Field node in clazz.fields) { |
| - if (node.isInstanceMember) { |
| - FieldEntity field = _elementMap.getField(node); |
| - if (node.initializer == null) { |
| - fieldValues[field] = graph.addConstantNull(closedWorld); |
| - } else { |
| - // Gotta update the resolvedAst when we're looking at field values |
| - // outside the constructor. |
| - inlinedFrom(field, () { |
| - node.initializer.accept(this); |
| - fieldValues[field] = pop(); |
| - }); |
| - } |
| + ClassEntity cls = _elementMap.getClass(clazz); |
| + _worldBuilder.forEachInstanceField(cls, (_, FieldEntity field) { |
| + MemberDefinition definition = _elementMap.getMemberDefinition(field); |
| + ir.Field node; |
| + switch (definition.kind) { |
| + case MemberKind.regular: |
| + node = definition.node; |
| + break; |
| + default: |
| + failedAt(field, "Unexpected member definition $definition."); |
| } |
| - } |
| - |
| + if (node.initializer == null) { |
| + fieldValues[field] = graph.addConstantNull(closedWorld); |
| + } else { |
| + // Gotta update the resolvedAst when we're looking at field values |
|
Siggi Cherem (dart-lang)
2017/08/30 19:33:53
nit: resolvedAst => current entity? (I know it was
Johnni Winther
2017/09/01 15:17:45
Done.
|
| + // outside the constructor. |
| + inlinedFrom(field, () { |
| + node.initializer.accept(this); |
| + fieldValues[field] = pop(); |
| + }); |
| + } |
| + }); |
| return fieldValues; |
| } |
| @@ -625,12 +630,6 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| _bindSupertypeTypeParameters(callerClass.mixedInType); |
| } |
| - ir.Class cls = target.enclosingClass; |
| - |
| - inlinedFrom(_elementMap.getConstructor(target), () { |
| - fieldValues.addAll(_collectFieldValues(cls)); |
|
Siggi Cherem (dart-lang)
2017/08/30 19:33:53
Is this not needed anymore?
Johnni Winther
2017/09/01 15:17:45
[_collectFieldValues] handles fields in all superc
|
| - }); |
| - |
| _inlineSuperOrRedirectCommon( |
| initializer, target, arguments, constructorChain, fieldValues, caller); |
| } |