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

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

Issue 2797173004: Remove use of Element in ResolutionEnqueuerListener. (Closed)
Patch Set: Created 3 years, 8 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') | no next file » | 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 d2d74e7fb9800101753a927129c4b5e069cf49fe..c1dc21e2f2746440109d6f958c12c293644f2953 100644
--- a/pkg/compiler/lib/src/kernel/world_builder.dart
+++ b/pkg/compiler/lib/src/kernel/world_builder.dart
@@ -23,6 +23,7 @@ import '../js_backend/constant_system_javascript.dart';
import '../js_backend/no_such_method_registry.dart';
import '../native/native.dart' as native;
import '../native/resolver.dart';
+import '../universe/call_structure.dart';
import 'element_adapter.dart';
import 'elements.dart';
@@ -55,19 +56,17 @@ class KernelWorldBuilder extends KernelElementAdapterMixin {
Map<ir.TypeParameter, KTypeVariable> _typeVariableMap =
<ir.TypeParameter, KTypeVariable>{};
+ // TODO(johnniwinther): Change this to a list of 'KMemberData' class if we
+ // need more data for members.
+ List<ir.Member> _memberList = <ir.Member>[];
+
Map<ir.Member, KConstructor> _constructorMap = <ir.Member, KConstructor>{};
- // TODO(johnniwinther): Change this to a list of 'KConstructorData' class
- // holding the [ConstantConstructor] if we need more data for constructors.
- List<ir.Member> _constructorList = <ir.Member>[];
Map<KConstructor, ConstantConstructor> _constructorConstantMap =
<KConstructor, ConstantConstructor>{};
Map<ir.Procedure, KFunction> _methodMap = <ir.Procedure, KFunction>{};
Map<ir.Field, KField> _fieldMap = <ir.Field, KField>{};
- // TODO(johnniwinther): Change this to a list of 'KFieldData' class
- // holding the [ConstantExpression] if we need more data for fields.
- List<ir.Field> _fieldList = <ir.Field>[];
Map<KField, ConstantExpression> _fieldConstantMap =
<KField, ConstantExpression>{};
@@ -112,14 +111,15 @@ class KernelWorldBuilder extends KernelElementAdapterMixin {
KLibrary _getLibrary(ir.Library node, [KLibraryEnv libraryEnv]) {
return _libraryMap.putIfAbsent(node, () {
- _libraryEnvs.add(libraryEnv ?? _env.lookupLibrary(node.importUri));
+ Uri canonicalUri = node.importUri;
+ _libraryEnvs.add(libraryEnv ?? _env.lookupLibrary(canonicalUri));
String name = node.name;
if (name == null) {
// Use the file name as script name.
- String path = node.importUri.path;
+ String path = canonicalUri.path;
name = path.substring(path.lastIndexOf('/') + 1);
}
- return new KLibrary(_libraryMap.length, name);
+ return new KLibrary(_libraryMap.length, name, canonicalUri);
});
}
@@ -194,27 +194,31 @@ class KernelWorldBuilder extends KernelElementAdapterMixin {
KConstructor _getConstructor(ir.Member node) {
return _constructorMap.putIfAbsent(node, () {
- int constructorIndex = _constructorList.length;
+ int memberIndex = _memberList.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, enclosingClass, name,
- isExternal: isExternal);
+ memberIndex, enclosingClass, name,
+ isExternal: isExternal, isConst: node.isConst);
+ } else if (node is ir.Procedure) {
+ constructor = new KFactoryConstructor(memberIndex, enclosingClass, name,
+ isExternal: isExternal, isConst: node.isConst);
} else {
- constructor = new KFactoryConstructor(
- constructorIndex, enclosingClass, name,
- isExternal: isExternal);
+ // TODO(johnniwinther): Convert `node.location` to a [SourceSpan].
+ throw new SpannableAssertionFailure(
+ NO_LOCATION_SPANNABLE, "Unexpected constructor node: ${node}.");
}
- _constructorList.add(node);
+ _memberList.add(node);
return constructor;
});
}
KFunction _getMethod(ir.Procedure node) {
return _methodMap.putIfAbsent(node, () {
+ int memberIndex = _memberList.length;
KLibrary library;
KClass enclosingClass;
if (node.enclosingClass != null) {
@@ -226,26 +230,33 @@ class KernelWorldBuilder extends KernelElementAdapterMixin {
Name name = getName(node.name);
bool isStatic = node.isStatic;
bool isExternal = node.isExternal;
+ KFunction function;
switch (node.kind) {
case ir.ProcedureKind.Factory:
throw new UnsupportedError("Cannot create method from factory.");
case ir.ProcedureKind.Getter:
- return new KGetter(library, enclosingClass, name,
+ function = new KGetter(memberIndex, library, enclosingClass, name,
isStatic: isStatic, isExternal: isExternal);
+ break;
case ir.ProcedureKind.Method:
case ir.ProcedureKind.Operator:
- return new KMethod(library, enclosingClass, name,
+ function = new KMethod(memberIndex, library, enclosingClass, name,
isStatic: isStatic, isExternal: isExternal);
+ break;
case ir.ProcedureKind.Setter:
- return new KSetter(library, enclosingClass, getName(node.name).setter,
+ function = new KSetter(
+ memberIndex, library, enclosingClass, getName(node.name).setter,
isStatic: isStatic, isExternal: isExternal);
+ break;
}
+ _memberList.add(node);
+ return function;
});
}
KField _getField(ir.Field node) {
return _fieldMap.putIfAbsent(node, () {
- int fieldIndex = _fieldList.length;
+ int memberIndex = _memberList.length;
KLibrary library;
KClass enclosingClass;
if (node.enclosingClass != null) {
@@ -256,9 +267,11 @@ class KernelWorldBuilder extends KernelElementAdapterMixin {
}
Name name = getName(node.name);
bool isStatic = node.isStatic;
- _fieldList.add(node);
- return new KField(fieldIndex, library, enclosingClass, name,
- isStatic: isStatic, isAssignable: node.isMutable);
+ _memberList.add(node);
+ return new KField(memberIndex, library, enclosingClass, name,
+ isStatic: isStatic,
+ isAssignable: node.isMutable,
+ isConst: node.isConst);
});
}
@@ -400,7 +413,7 @@ class KernelWorldBuilder extends KernelElementAdapterMixin {
ConstantConstructor _getConstructorConstant(KConstructor constructor) {
return _constructorConstantMap.putIfAbsent(constructor, () {
- ir.Member node = _constructorList[constructor.constructorIndex];
+ ir.Member node = _memberList[constructor.memberIndex];
if (node is ir.Constructor && node.isConst) {
return new Constantifier(this).computeConstantConstructor(node);
}
@@ -413,7 +426,7 @@ class KernelWorldBuilder extends KernelElementAdapterMixin {
ConstantExpression _getFieldConstant(KField field) {
return _fieldConstantMap.putIfAbsent(field, () {
- ir.Field node = _fieldList[field.fieldIndex];
+ ir.Field node = _memberList[field.memberIndex];
if (node.isConst) {
return new Constantifier(this).visit(node.initializer);
}
@@ -556,6 +569,11 @@ class KernelElementEnvironment implements ElementEnvironment {
}
@override
+ FunctionType getFunctionType(KFunction function) {
+ throw new UnimplementedError('KernelElementEnvironment.getFunctionType');
+ }
+
+ @override
ConstructorEntity lookupConstructor(ClassEntity cls, String name,
{bool required: false}) {
ConstructorEntity constructor = worldBuilder.lookupConstructor(cls, name);
@@ -627,6 +645,30 @@ class KernelElementEnvironment implements ElementEnvironment {
}
return library;
}
+
+ @override
+ CallStructure getCallStructure(KFunction function) {
+ ir.Member member = worldBuilder._memberList[function.memberIndex];
+ ir.FunctionNode functionNode;
+ if (member is ir.Procedure) {
+ functionNode = member.function;
+ } else if (member is ir.Constructor) {
+ functionNode = member.function;
+ } else {
+ throw new SpannableAssertionFailure(
+ function, "Unexpected function node ${member} for $function.");
+ }
+ return new CallStructure(
+ functionNode.positionalParameters.length +
+ functionNode.namedParameters.length,
+ functionNode.namedParameters.map((d) => d.name).toList());
+ }
+
+ @override
+ bool isDeferredLoadLibraryGetter(KMember member) {
+ // TODO(johnniwinther): Support these.
+ return false;
+ }
}
/// Visitor that converts kernel dart types into [DartType].
« no previous file with comments | « pkg/compiler/lib/src/kernel/elements.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698