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

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

Issue 2731173002: Add ClassEntity.library, MemberEntity.library and FunctionEntity.isExternal (Closed)
Patch Set: Updated cf. comments. Created 3 years, 9 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/elements.dart ('k') | pkg/compiler/lib/src/native/resolver.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/kernel/world_builder.dart
diff --git a/pkg/compiler/lib/src/kernel/world_builder.dart b/pkg/compiler/lib/src/kernel/world_builder.dart
index f329a24c6cd3dadfa447320f068640935d5b0dd7..758687d64031c8f1f5ccc3d4c7182ba1b86a7d3e 100644
--- a/pkg/compiler/lib/src/kernel/world_builder.dart
+++ b/pkg/compiler/lib/src/kernel/world_builder.dart
@@ -148,12 +148,12 @@ class KernelWorldBuilder extends KernelElementAdapterMixin {
KClass _getClass(ir.Class node, [KClassEnv classEnv]) {
return _classMap.putIfAbsent(node, () {
+ KLibrary library = _getLibrary(node.enclosingLibrary);
if (classEnv == null) {
- KLibrary library = _getLibrary(node.enclosingLibrary);
classEnv = _libraryEnvs[library.libraryIndex].lookupClass(node.name);
}
_classEnvs.add(classEnv);
- return new KClass(_classMap.length, node.name);
+ return new KClass(library, _classMap.length, node.name);
});
}
@@ -190,12 +190,17 @@ class KernelWorldBuilder extends KernelElementAdapterMixin {
return _constructorMap.putIfAbsent(node, () {
int constructorIndex = _constructorList.length;
KConstructor constructor;
+ KClass enclosingClass = _getClass(node.enclosingClass);
+ Name name = getName(node.name);
+ bool isExternal = node.isExternal;
if (node is ir.Constructor) {
- constructor = new KGenerativeConstructor(constructorIndex,
- _getClass(node.enclosingClass), getName(node.name));
+ constructor = new KGenerativeConstructor(
+ constructorIndex, enclosingClass, name,
+ isExternal: isExternal);
} else {
- constructor = new KFactoryConstructor(constructorIndex,
- _getClass(node.enclosingClass), getName(node.name));
+ constructor = new KFactoryConstructor(
+ constructorIndex, enclosingClass, name,
+ isExternal: isExternal);
}
_constructorList.add(node);
return constructor;
@@ -204,21 +209,30 @@ class KernelWorldBuilder extends KernelElementAdapterMixin {
KFunction _getMethod(ir.Procedure node) {
return _methodMap.putIfAbsent(node, () {
- KClass enclosingClass =
- node.enclosingClass != null ? _getClass(node.enclosingClass) : null;
+ KLibrary library;
+ KClass enclosingClass;
+ if (node.enclosingClass != null) {
+ enclosingClass = _getClass(node.enclosingClass);
+ library = enclosingClass.library;
+ } else {
+ library = _getLibrary(node.enclosingLibrary);
+ }
Name name = getName(node.name);
bool isStatic = node.isStatic;
+ bool isExternal = node.isExternal;
switch (node.kind) {
case ir.ProcedureKind.Factory:
throw new UnsupportedError("Cannot create method from factory.");
case ir.ProcedureKind.Getter:
- return new KGetter(enclosingClass, name, isStatic: isStatic);
+ return new KGetter(library, enclosingClass, name,
+ isStatic: isStatic, isExternal: isExternal);
case ir.ProcedureKind.Method:
case ir.ProcedureKind.Operator:
- return new KMethod(enclosingClass, name, isStatic: isStatic);
+ return new KMethod(library, enclosingClass, name,
+ isStatic: isStatic, isExternal: isExternal);
case ir.ProcedureKind.Setter:
- return new KSetter(enclosingClass, getName(node.name).setter,
- isStatic: isStatic);
+ return new KSetter(library, enclosingClass, getName(node.name).setter,
+ isStatic: isStatic, isExternal: isExternal);
}
});
}
@@ -226,12 +240,18 @@ class KernelWorldBuilder extends KernelElementAdapterMixin {
KField _getField(ir.Field node) {
return _fieldMap.putIfAbsent(node, () {
int fieldIndex = _fieldList.length;
- KClass enclosingClass =
- node.enclosingClass != null ? _getClass(node.enclosingClass) : null;
+ KLibrary library;
+ KClass enclosingClass;
+ if (node.enclosingClass != null) {
+ enclosingClass = _getClass(node.enclosingClass);
+ library = enclosingClass.library;
+ } else {
+ library = _getLibrary(node.enclosingLibrary);
+ }
Name name = getName(node.name);
bool isStatic = node.isStatic;
_fieldList.add(node);
- return new KField(fieldIndex, enclosingClass, name,
+ return new KField(fieldIndex, library, enclosingClass, name,
isStatic: isStatic, isAssignable: node.isMutable);
});
}
« no previous file with comments | « pkg/compiler/lib/src/kernel/elements.dart ('k') | pkg/compiler/lib/src/native/resolver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698