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/element_map.dart

Issue 2845093003: Handle mixed in members (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 | « no previous file | tests/compiler/dart2js/kernel/closed_world2_test.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.dart
diff --git a/pkg/compiler/lib/src/kernel/element_map.dart b/pkg/compiler/lib/src/kernel/element_map.dart
index 47d432aa64ca6e67d41c3704483538163eb69864..025838bb6b0f89d2866b8b14aa027487c1e65620 100644
--- a/pkg/compiler/lib/src/kernel/element_map.dart
+++ b/pkg/compiler/lib/src/kernel/element_map.dart
@@ -162,7 +162,9 @@ class KernelToElementMap extends KernelElementAdapterMixin {
void _forEachClass(KLibrary library, void f(ClassEntity cls)) {
_KLibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex];
libraryEnv.forEachClass((_KClassEnv classEnv) {
- f(_getClass(classEnv.cls, classEnv));
+ if (!classEnv.isUnnamedMixinApplication) {
+ f(_getClass(classEnv.cls, classEnv));
+ }
});
}
@@ -707,6 +709,7 @@ class _KLibraryEnv {
/// Environment for fast lookup of class members.
class _KClassEnv {
final ir.Class cls;
+ final bool isUnnamedMixinApplication;
InterfaceType thisType;
InterfaceType rawType;
@@ -720,34 +723,46 @@ class _KClassEnv {
Iterable<ConstantExpression> _metadata;
- _KClassEnv(this.cls);
+ _KClassEnv(this.cls)
+ // TODO(johnniwinther): Change this to use a property on [cls] when such
+ // is added to kernel.
+ : isUnnamedMixinApplication = cls.name.contains('+');
void _ensureMaps() {
if (_memberMap == null) {
_memberMap = <String, ir.Member>{};
_setterMap = <String, ir.Member>{};
_constructorMap = <String, ir.Member>{};
- for (ir.Member member in cls.members) {
- if (member is ir.Constructor ||
- member is ir.Procedure && member.kind == ir.ProcedureKind.Factory) {
- _constructorMap[member.name.name] = member;
- } else if (member is ir.Procedure) {
- if (member.kind == ir.ProcedureKind.Setter) {
- _setterMap[member.name.name] = member;
- } else {
+
+ void addMembers(ir.Class c) {
+ for (ir.Member member in c.members) {
+ if (member is ir.Constructor ||
+ member is ir.Procedure &&
+ member.kind == ir.ProcedureKind.Factory) {
+ _constructorMap[member.name.name] = member;
+ } else if (member is ir.Procedure) {
+ if (member.kind == ir.ProcedureKind.Setter) {
+ _setterMap[member.name.name] = member;
+ } else {
+ _memberMap[member.name.name] = member;
+ }
+ } else if (member is ir.Field) {
_memberMap[member.name.name] = member;
+ if (member.isMutable) {
+ _setterMap[member.name.name] = member;
+ }
+ _memberMap[member.name.name] = member;
+ } else {
+ throw new SpannableAssertionFailure(
+ NO_LOCATION_SPANNABLE, "Unexpected class member node: $member");
}
- } else if (member is ir.Field) {
- _memberMap[member.name.name] = member;
- if (member.isMutable) {
- _setterMap[member.name.name] = member;
- }
- _memberMap[member.name.name] = member;
- } else {
- throw new SpannableAssertionFailure(
- NO_LOCATION_SPANNABLE, "Unexpected class member node: $member");
}
}
+
+ if (cls.mixedInClass != null) {
+ addMembers(cls.mixedInClass);
+ }
+ addMembers(cls);
}
}
@@ -1235,15 +1250,6 @@ class WorldDeconstructionForTesting {
WorldDeconstructionForTesting(this.builder);
- Uri getLibraryUri(KLibrary library) {
- return builder._libraryEnvs[library.libraryIndex].library.importUri;
- }
-
- KLibrary getLibraryForClass(KClass cls) {
- _KClassEnv env = builder._classEnvs[cls.classIndex];
- return builder.getLibrary(env.cls.enclosingLibrary);
- }
-
KLibrary _getLibrary<E>(E member, Map<ir.Member, E> map) {
ir.Library library;
map.forEach((ir.Member node, E other) {
@@ -1270,6 +1276,11 @@ class WorldDeconstructionForTesting {
return builder.getClass(supertype.classNode);
}
+ bool isUnnamedMixinApplication(KClass cls) {
+ _KClassEnv env = builder._classEnvs[cls.classIndex];
+ return env.isUnnamedMixinApplication;
+ }
+
InterfaceType getMixinTypeForClass(KClass cls) {
_KClassEnv env = builder._classEnvs[cls.classIndex];
ir.Supertype mixedInType = env.cls.mixedInType;
« no previous file with comments | « no previous file | tests/compiler/dart2js/kernel/closed_world2_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698