| 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 d53af0c39545bb72400800fb56b41c42b758088e..538da1dd560eac15cbd6153dcc39d59f5b65c1c7 100644
|
| --- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| +++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| @@ -477,6 +477,12 @@ abstract class KernelToElementMapBase extends KernelToElementMapBaseMixin {
|
| });
|
| }
|
|
|
| + void _forEachConstructorBody(
|
| + IndexedClass cls, void f(ConstructorBodyEntity member)) {
|
| + throw new UnsupportedError(
|
| + 'KernelToElementMapBase._forEachConstructorBody');
|
| + }
|
| +
|
| void _forEachClassMember(
|
| IndexedClass cls, void f(ClassEntity cls, MemberEntity member)) {
|
| assert(checkFamily(cls));
|
| @@ -659,8 +665,8 @@ abstract class ElementCreatorMixin {
|
| ConstructorEntity _getConstructor(ir.Member node) {
|
| return _constructorMap.putIfAbsent(node, () {
|
| int memberIndex = _memberData.length;
|
| - KConstructor constructor;
|
| - KClass enclosingClass = _getClass(node.enclosingClass);
|
| + ConstructorEntity constructor;
|
| + ClassEntity enclosingClass = _getClass(node.enclosingClass);
|
| Name name = getName(node.name);
|
| bool isExternal = node.isExternal;
|
|
|
| @@ -1153,6 +1159,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);
|
| @@ -1817,6 +1829,26 @@ class JsKernelToElementMap extends KernelToElementMapBase
|
| return constructor;
|
| }
|
|
|
| + FunctionEntity getConstructorBody(ir.Constructor node) {
|
| + ConstructorEntity constructor = getConstructor(node);
|
| + return _getConstructorBody(node, constructor);
|
| + }
|
| +
|
| + 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;
|
| + }
|
| +
|
| + ConstructorBodyEntity createConstructorBody(
|
| + int memberIndex, ConstructorEntity constructor);
|
| +
|
| @override
|
| ir.Member getMemberNode(MemberEntity member) {
|
| return _getMemberNode(member);
|
| @@ -1852,4 +1884,24 @@ class JsKernelToElementMap extends KernelToElementMapBase
|
| FunctionData data = _memberData[function.memberIndex];
|
| data.forEachParameter(this, f);
|
| }
|
| +
|
| + void _forEachConstructorBody(
|
| + IndexedClass cls, void f(ConstructorBodyEntity member)) {
|
| + ClassEnv env = _classEnvs[cls.classIndex];
|
| + env.forEachConstructor((ir.Member member) {
|
| + IndexedConstructor constructor = _constructorMap[member];
|
| + if (constructor == null) {
|
| + // The constructor is not live.
|
| + return;
|
| + }
|
| + ConstructorData data = _memberData[constructor.memberIndex];
|
| + if (data.constructorBody != null) {
|
| + f(data.constructorBody);
|
| + }
|
| + });
|
| + }
|
| +
|
| + String getDeferredUri(ir.LibraryDependency node) {
|
| + throw new UnimplementedError('JsKernelToElementMap.getDeferredUri');
|
| + }
|
| }
|
|
|