Index: dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart |
diff --git a/dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart b/dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart |
index fd440748cc9d4a881e9f14ab40b0ac3870f354a6..88864114d66845cfa24259ff6e301cb7ba73d16a 100644 |
--- a/dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart |
+++ b/dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart |
@@ -1591,6 +1591,8 @@ class CodeEmitterTask extends CompilerTask { |
} |
bool canGenerateCheckedSetter(Element member) { |
+ // We never generate accessors for top-level/static fields. |
+ if (!member.isInstanceMember()) return false; |
DartType type = member.computeType(compiler).unalias(compiler); |
if (type.element.isTypeVariable() || |
(type is FunctionType && type.containsTypeVariables) || |
@@ -1732,7 +1734,7 @@ class CodeEmitterTask extends CompilerTask { |
// TODO(sra): 'isInterceptorClass' might not be the correct test for |
// methods forced to use the interceptor convention because the |
// method's class was elsewhere mixed-in to an interceptor. |
- assert(getterCode != 0); |
+ assert(!member.isInstanceMember() || getterCode != 0); |
sra1
2013/07/18 20:33:49
I'm trying to understand a bug in this area. (issu
|
} |
int setterCode = 0; |
if (needsSetter) { |
@@ -1741,7 +1743,7 @@ class CodeEmitterTask extends CompilerTask { |
// 11: function(receiver, value) { this.field = value; } |
setterCode += backend.fieldHasInterceptedSetter(member) ? 2 : 0; |
setterCode += backend.isInterceptorClass(classElement) ? 0 : 1; |
- assert(setterCode != 0); |
+ assert(!member.isInstanceMember() || setterCode != 0); |
} |
int code = getterCode + (setterCode << 2); |
if (code == 0) { |