| 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 597d6fa9a55ef78c336b36dad2bf14199f7a9a31..ed3b4555efe4df498c5b697936017e8139072b7c 100644
|
| --- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| +++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| @@ -49,7 +49,6 @@ import 'type_builder.dart';
|
|
|
| class KernelSsaGraphBuilder extends ir.Visitor
|
| with GraphBuilder, SsaBuilderFieldMixin {
|
| - final ir.Node target;
|
| final MemberEntity targetElement;
|
|
|
| /// The root node of [targetElement]. This is used as the key into the
|
| @@ -104,7 +103,6 @@ class KernelSsaGraphBuilder extends ir.Visitor
|
| KernelSsaGraphBuilder(
|
| this.targetElement,
|
| ClassEntity contextClass,
|
| - this.target,
|
| this.compiler,
|
| this._elementMap,
|
| this._typeInferenceMap,
|
| @@ -132,33 +130,42 @@ class KernelSsaGraphBuilder extends ir.Visitor
|
| return reporter.withCurrentElement(localsMap.currentMember, () {
|
| // TODO(het): no reason to do this here...
|
| HInstruction.idCounter = 0;
|
| - if (target is ir.Procedure) {
|
| - _targetFunction = (target as ir.Procedure).function;
|
| - buildFunctionNode(_targetFunction);
|
| - } else if (target is ir.Field) {
|
| - if (handleConstantField(targetElement, registry, closedWorld)) {
|
| - // No code is generated for `targetElement`: All references inline the
|
| - // constant value.
|
| - return null;
|
| - } else if (targetElement.isStatic || targetElement.isTopLevel) {
|
| - backend.constants.registerLazyStatic(targetElement);
|
| - }
|
| - buildField(target);
|
| - } else if (target is ir.Constructor) {
|
| - if (targetElement is ConstructorBodyEntity) {
|
| - buildConstructorBody(target);
|
| - } else {
|
| - buildConstructor(target);
|
| - }
|
| - } else if (target is ir.FunctionExpression) {
|
| - _targetFunction = (target as ir.FunctionExpression).function;
|
| - buildFunctionNode(_targetFunction);
|
| - } else if (target is ir.FunctionDeclaration) {
|
| - _targetFunction = (target as ir.FunctionDeclaration).function;
|
| - buildFunctionNode(_targetFunction);
|
| - } else {
|
| - throw 'No case implemented to handle target: '
|
| - '$target for $targetElement';
|
| + MemberDefinition definition =
|
| + _elementMap.getMemberDefinition(targetElement);
|
| +
|
| + switch (definition.kind) {
|
| + case MemberKind.regular:
|
| + case MemberKind.closureCall:
|
| + ir.Node target = definition.node;
|
| + if (target is ir.Procedure) {
|
| + _targetFunction = target.function;
|
| + buildFunctionNode(_targetFunction);
|
| + } else if (target is ir.Field) {
|
| + if (handleConstantField(targetElement, registry, closedWorld)) {
|
| + // No code is generated for `targetElement`: All references inline the
|
| + // constant value.
|
| + return null;
|
| + } else if (targetElement.isStatic || targetElement.isTopLevel) {
|
| + backend.constants.registerLazyStatic(targetElement);
|
| + }
|
| + buildField(target);
|
| + } else if (target is ir.FunctionExpression) {
|
| + _targetFunction = target.function;
|
| + buildFunctionNode(_targetFunction);
|
| + } else if (target is ir.FunctionDeclaration) {
|
| + _targetFunction = target.function;
|
| + buildFunctionNode(_targetFunction);
|
| + } else {
|
| + throw 'No case implemented to handle target: '
|
| + '$target for $targetElement';
|
| + }
|
| + break;
|
| + case MemberKind.constructor:
|
| + buildConstructor(definition.node);
|
| + break;
|
| + case MemberKind.constructorBody:
|
| + buildConstructorBody(definition.node);
|
| + break;
|
| }
|
| assert(graph.isValid());
|
| return graph;
|
| @@ -168,7 +175,10 @@ class KernelSsaGraphBuilder extends ir.Visitor
|
| @override
|
| ConstantValue getFieldInitialConstantValue(FieldEntity field) {
|
| assert(field == targetElement);
|
| - return _elementMap.getFieldConstantValue(target);
|
| + MemberDefinition definition = _elementMap.getMemberDefinition(field);
|
| + assert(definition.kind == MemberKind.regular,
|
| + failedAt(field, "Unexpected member definition: $definition"));
|
| + return _elementMap.getFieldConstantValue(definition.node);
|
| }
|
|
|
| void buildField(ir.Field field) {
|
|
|