| Index: pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| index 2bac7edb2bd15a8818bf81d9a4dbc8eac0f7dbca..97dd9b58af6942cec4967724dd40abe1763a7fe9 100644
|
| --- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| +++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| @@ -601,14 +601,14 @@ abstract class KernelToElementMapBase extends KernelToElementMapBaseMixin {
|
| return sourceSpan;
|
| }
|
|
|
| - ir.Member _getMemberNode(covariant IndexedMember member) {
|
| + MemberDefinition _getMemberDefinition(covariant IndexedMember member) {
|
| assert(checkFamily(member));
|
| - return _memberData[member.memberIndex].node;
|
| + return _memberData[member.memberIndex].definition;
|
| }
|
|
|
| - ir.Class _getClassNode(covariant IndexedClass cls) {
|
| + ClassDefinition _getClassDefinition(covariant IndexedClass cls) {
|
| assert(checkFamily(cls));
|
| - return _classEnvs[cls.classIndex].cls;
|
| + return _classData[cls.classIndex].definition;
|
| }
|
| }
|
|
|
| @@ -668,6 +668,8 @@ abstract class ElementCreatorMixin {
|
| });
|
| }
|
|
|
| + // TODO(johnniwinther,efortuna): Create the class index and data together with
|
| + // the [KernelClosureClass].
|
| void addClosureClass(KernelClosureClass cls, InterfaceType supertype) {
|
| cls.classIndex = _classEnvs.length;
|
| _classEnvs.add(new ClassEnv.closureClass());
|
| @@ -675,7 +677,8 @@ abstract class ElementCreatorMixin {
|
|
|
| // Create a classData and set up the interfaces and subclass
|
| // relationships that _ensureSupertypes and _ensureThisAndRawType are doing
|
| - var closureData = new ClassData(null);
|
| + var closureData =
|
| + new ClassData(null, new ClosureClassDefinition(cls, cls.location));
|
| closureData
|
| ..isMixinApplication = false
|
| ..thisType =
|
| @@ -697,9 +700,10 @@ abstract class ElementCreatorMixin {
|
| classEnv = _libraryEnvs[library.libraryIndex].lookupClass(node.name);
|
| }
|
| _classEnvs.add(classEnv);
|
| - _classData.add(new ClassData(node));
|
| ClassEntity cls = createClass(library, _classList.length, node.name,
|
| isAbstract: node.isAbstract);
|
| + _classData
|
| + .add(new ClassData(node, new RegularClassDefinition(cls, node)));
|
| _classList.add(cls);
|
| return cls;
|
| });
|
| @@ -751,11 +755,14 @@ abstract class ElementCreatorMixin {
|
| bool isExternal = node.isExternal;
|
|
|
| ir.FunctionNode functionNode;
|
| + MemberDefinition definition;
|
| if (node is ir.Constructor) {
|
| functionNode = node.function;
|
| constructor = createGenerativeConstructor(memberIndex, enclosingClass,
|
| name, _getParameterStructure(functionNode),
|
| isExternal: isExternal, isConst: node.isConst);
|
| + definition = new SpecialMemberDefinition(
|
| + constructor, node, MemberKind.constructor);
|
| } else if (node is ir.Procedure) {
|
| functionNode = node.function;
|
| bool isFromEnvironment = isExternal &&
|
| @@ -766,12 +773,13 @@ abstract class ElementCreatorMixin {
|
| isExternal: isExternal,
|
| isConst: node.isConst,
|
| isFromEnvironmentConstructor: isFromEnvironment);
|
| + definition = new RegularMemberDefinition(constructor, node);
|
| } else {
|
| // TODO(johnniwinther): Convert `node.location` to a [SourceSpan].
|
| throw failedAt(
|
| NO_LOCATION_SPANNABLE, "Unexpected constructor node: ${node}.");
|
| }
|
| - _memberData.add(new ConstructorData(node, functionNode));
|
| + _memberData.add(new ConstructorData(node, functionNode, definition));
|
| _memberList.add(constructor);
|
| return constructor;
|
| });
|
| @@ -838,7 +846,8 @@ abstract class ElementCreatorMixin {
|
| isAbstract: isAbstract);
|
| break;
|
| }
|
| - _memberData.add(new FunctionData(node, node.function));
|
| + _memberData.add(new FunctionData(
|
| + node, node.function, new RegularMemberDefinition(function, node)));
|
| _memberList.add(function);
|
| return function;
|
| });
|
| @@ -857,12 +866,13 @@ abstract class ElementCreatorMixin {
|
| }
|
| Name name = getName(node.name);
|
| bool isStatic = node.isStatic;
|
| - _memberData.add(new FieldData(node));
|
| FieldEntity field = createField(
|
| memberIndex, library, enclosingClass, name,
|
| isStatic: isStatic,
|
| isAssignable: node.isMutable,
|
| isConst: node.isConst);
|
| + _memberData
|
| + .add(new FieldData(node, new RegularMemberDefinition(field, node)));
|
| _memberList.add(field);
|
| return field;
|
| });
|
| @@ -1949,7 +1959,11 @@ class JsKernelToElementMap extends KernelToElementMapBase
|
| data.constructorBody =
|
| createConstructorBody(_memberList.length, constructor);
|
| _memberList.add(data.constructorBody);
|
| - _memberData.add(new FunctionData(node, node.function));
|
| + _memberData.add(new FunctionData(
|
| + node,
|
| + node.function,
|
| + new SpecialMemberDefinition(
|
| + data.constructorBody, node, MemberKind.constructorBody)));
|
| }
|
| return data.constructorBody;
|
| }
|
| @@ -1958,13 +1972,13 @@ class JsKernelToElementMap extends KernelToElementMapBase
|
| int memberIndex, ConstructorEntity constructor);
|
|
|
| @override
|
| - ir.Member getMemberNode(MemberEntity member) {
|
| - return _getMemberNode(member);
|
| + MemberDefinition getMemberDefinition(MemberEntity member) {
|
| + return _getMemberDefinition(member);
|
| }
|
|
|
| @override
|
| - ir.Class getClassNode(ClassEntity cls) {
|
| - return _getClassNode(cls);
|
| + ClassDefinition getClassDefinition(ClassEntity cls) {
|
| + return _getClassDefinition(cls);
|
| }
|
|
|
| @override
|
|
|