Index: lib/src/compiler/code_generator.dart |
diff --git a/lib/src/compiler/code_generator.dart b/lib/src/compiler/code_generator.dart |
index ca56b1f7938fadaa362d2916ea0bc13415cc0d81..199a629e74a9a4fbdc601c56b03680ae25dd8ca9 100644 |
--- a/lib/src/compiler/code_generator.dart |
+++ b/lib/src/compiler/code_generator.dart |
@@ -2963,7 +2963,7 @@ class CodeGenerator extends GeneralizingAstVisitor |
if (isLibraryPrefix(node.prefix)) { |
return _visit(node.identifier); |
} else { |
- return _emitGet(node.prefix, node.identifier); |
+ return _emitAccess(node.prefix, node.identifier); |
} |
} |
@@ -2972,7 +2972,7 @@ class CodeGenerator extends GeneralizingAstVisitor |
if (node.operator.lexeme == '?.') { |
return _emitNullSafe(node); |
} |
- return _emitGet(_getTarget(node), node.propertyName); |
+ return _emitAccess(_getTarget(node), node.propertyName); |
} |
JS.Expression _emitNullSafe(Expression node) { |
@@ -3042,7 +3042,7 @@ class CodeGenerator extends GeneralizingAstVisitor |
} |
/// Shared code for [PrefixedIdentifier] and [PropertyAccess]. |
- JS.Expression _emitGet(Expression target, SimpleIdentifier memberId) { |
+ JS.Expression _emitAccess(Expression target, SimpleIdentifier memberId) { |
var member = memberId.staticElement; |
if (member is PropertyAccessorElement) { |
member = (member as PropertyAccessorElement).variable; |
@@ -3054,6 +3054,14 @@ class CodeGenerator extends GeneralizingAstVisitor |
return js.call('dart.dload(#, #)', [_visit(target), name]); |
} |
+ if (target is SuperExpression && |
+ member is FieldElement && |
+ !member.isSynthetic) { |
+ // If super.x is actually a field, then x is an instance property since |
+ // subclasses cannot override x. |
+ return js.call('this.#', [name]); |
+ } |
+ |
String code; |
if (member != null && member is MethodElement && !isStatic) { |
// Tear-off methods: explicitly bind it. |