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); |