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

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

Issue 2968383002: Add ConstructorBodyEntity (Closed)
Patch Set: 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
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 7a5a6aabea68615b4b8e517f261cac29e255a9c8..d83141f27b6a3a7837aae1b08590627ae610a83b 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -308,6 +308,14 @@ abstract class KernelToElementMapBase extends KernelToElementMapBaseMixin {
ConstructorEntity _getConstructor(ir.Member node);
+ FunctionEntity getConstructorBody(ir.Constructor node) {
+ ConstructorEntity constructor = getConstructor(node);
+ return _getConstructorBody(node, constructor);
+ }
+
+ FunctionEntity _getConstructorBody(
+ ir.Constructor node, ConstructorEntity constructor);
+
ConstructorEntity getSuperConstructor(
ir.Constructor sourceNode, ir.Member targetNode) {
ConstructorEntity source = getConstructor(sourceNode);
@@ -452,6 +460,18 @@ abstract class KernelToElementMapBase extends KernelToElementMapBaseMixin {
});
}
+ void _forEachConstructorBody(
+ IndexedClass cls, void f(ConstructorBodyEntity member)) {
+ ClassEnv env = _classEnvs[cls.classIndex];
+ env.forEachConstructor((ir.Member member) {
+ IndexedConstructor constructor = getConstructor(member);
+ ConstructorData data = _memberData[constructor.memberIndex];
+ if (data.constructorBody != null) {
+ f(data.constructorBody);
+ }
+ });
+ }
+
void _forEachClassMember(
IndexedClass cls, void f(ClassEntity cls, MemberEntity member)) {
ClassEnv env = _classEnvs[cls.classIndex];
@@ -648,6 +668,18 @@ abstract class ElementCreatorMixin {
});
}
+ FunctionEntity _getConstructorBody(
+ ir.Constructor node, covariant IndexedConstructor constructor) {
+ ConstructorData data = _memberData[constructor.memberIndex];
+ if (data.constructorBody == null) {
+ data.constructorBody =
+ createConstructorBody(_memberList.length, constructor);
+ _memberList.add(data.constructorBody);
+ _memberData.add(new FunctionData(node, node.function));
+ }
+ return data.constructorBody;
+ }
+
FunctionEntity _getMethod(ir.Procedure node) {
return _methodMap.putIfAbsent(node, () {
int memberIndex = _memberData.length;
@@ -806,6 +838,9 @@ abstract class ElementCreatorMixin {
bool isConst,
bool isFromEnvironmentConstructor});
+ ConstructorBodyEntity createConstructorBody(
+ int memberIndex, ConstructorEntity constructor);
+
IndexedFunction createGetter(int memberIndex, LibraryEntity library,
ClassEntity enclosingClass, Name name, AsyncMarker asyncMarker,
{bool isStatic, bool isExternal, bool isAbstract});
@@ -877,6 +912,12 @@ abstract class KElementCreatorMixin implements ElementCreatorMixin {
isFromEnvironmentConstructor: isFromEnvironmentConstructor);
}
+ @override
+ ConstructorBodyEntity createConstructorBody(
+ int memberIndex, ConstructorEntity constructor) {
+ return new KConstructorBody(memberIndex, constructor);
Siggi Cherem (dart-lang) 2017/07/07 20:00:25 I thought we didn't need to have one on the K mode
Johnni Winther 2017/07/10 14:11:33 Now, we don't. [getConstructorBody], [_getConstruc
+ }
+
IndexedFunction createGetter(int memberIndex, LibraryEntity library,
ClassEntity enclosingClass, Name name, AsyncMarker asyncMarker,
{bool isStatic, bool isExternal, bool isAbstract}) {
@@ -1001,6 +1042,11 @@ abstract class KernelToElementMapForBuildingFromBaseMixin
FunctionData data = _memberData[function.memberIndex];
data.forEachParameter(this, f);
}
+
+ String getDeferredUri(ir.LibraryDependency node) {
+ throw new UnimplementedError(
+ 'KernelToElementMapForBuildingFromBaseMixin.getDeferredUri');
+ }
}
/// Element builder used for creating elements and types corresponding to Kernel
@@ -1196,6 +1242,12 @@ class KernelElementEnvironment implements ElementEnvironment {
}
@override
+ void forEachConstructorBody(
+ ClassEntity cls, void f(ConstructorBodyEntity constructor)) {
+ elementMap._forEachConstructorBody(cls, f);
+ }
+
+ @override
void forEachLibraryMember(
LibraryEntity library, void f(MemberEntity member)) {
elementMap._forEachLibraryMember(library, f);

Powered by Google App Engine
This is Rietveld 408576698