Chromium Code Reviews| 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); |