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

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

Issue 2968383002: Add ConstructorBodyEntity (Closed)
Patch Set: Skip non-live constructor bodies 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 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');
+ }
}
« 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