Correct lookup scope for subclasses of mixin application.
diff --git a/pkg/compiler/lib/src/elements/modelx.dart b/pkg/compiler/lib/src/elements/modelx.dart
index 2bd0ef9..128f56e 100644
--- a/pkg/compiler/lib/src/elements/modelx.dart
+++ b/pkg/compiler/lib/src/elements/modelx.dart
@@ -2846,6 +2846,8 @@
InterfaceType mixinType;
+ final ScopeX localScope = new ScopeX();
+
MixinApplicationElementX(String name, Element enclosing, int id)
: super(name, enclosing, id, STATE_NOT_STARTED);
@@ -2853,7 +2855,9 @@
bool get isMixinApplication => true;
bool get hasConstructor => !constructors.isEmpty;
- bool get hasLocalScopeMembers => !constructors.isEmpty;
+ bool get hasLocalScopeMembers {
+ return constructors.isNotEmpty || members.isNotEmpty;
+ }
get patch => null;
get origin => null;
@@ -2866,10 +2870,11 @@
void addMember(Element element, DiagnosticReporter reporter) {
members = members.prepend(element);
+ addToScope(element, reporter);
}
void addToScope(Element element, DiagnosticReporter reporter) {
- reporter.internalError(this, 'Cannot add to scope of $this.');
+ localScope.add(element, reporter);
}
void addConstructor(FunctionElement constructor) {
@@ -2910,6 +2915,13 @@
}
return new MixinApplicationScope(parentScope, this);
}
+
+ Element localLookup(String name) {
+ for (Link<Element> link = constructors; !link.isEmpty; link = link.tail) {
+ if (link.head.name == name) return link.head;
+ }
+ return localScope.lookup(name);
+ }
}
class NamedMixinApplicationElementX extends MixinApplicationElementX