Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Unified Diff: pkg/compiler/lib/src/kernel/element_map_impl.dart

Issue 2984643002: Add Class/MemberDefinition to handle synthesized classes/members (Closed)
Patch Set: Updated cf. comment Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/kernel/element_map.dart ('k') | pkg/compiler/lib/src/kernel/env.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « pkg/compiler/lib/src/kernel/element_map.dart ('k') | pkg/compiler/lib/src/kernel/env.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698