Index: sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart |
=================================================================== |
--- sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart (revision 15244) |
+++ sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart (working copy) |
@@ -236,7 +236,7 @@ |
for (var cls in collectedClasses) { |
if (hasOwnProperty.call(collectedClasses, cls)) { |
var desc = collectedClasses[cls]; |
- $isolatePropertiesName[cls] = $defineClassName(cls, desc[''], desc); |
+ $isolatePropertiesName[cls] = $defineClassName(cls, desc[''] || [], desc); |
ahe
2012/11/22 12:22:05
I suggest that you use string juxtaposition to get
ngeoffray
2012/11/22 13:15:18
Done.
|
if (desc['super'] !== "") $pendingClassesName[cls] = desc['super']; |
} |
} |
@@ -671,12 +671,11 @@ |
*/ |
void emitInstanceMembers(ClassElement classElement, |
CodeBuffer buffer, |
- bool needsLeadingComma) { |
+ {bool emitLeadingComma: true}) { |
ahe
2012/11/22 12:22:05
Why is this a named argument now?
ngeoffray
2012/11/22 13:15:18
It was to make it consistent with the other method
|
assert(invariant(classElement, classElement.isDeclaration)); |
- bool needsComma = needsLeadingComma; |
void defineInstanceMember(String name, StringBuffer memberBuffer) { |
- if (needsComma) buffer.add(','); |
- needsComma = true; |
+ if (emitLeadingComma) buffer.add(','); |
+ emitLeadingComma = true; |
buffer.add('\n'); |
buffer.add(' $name: '); |
buffer.add(memberBuffer); |
@@ -846,8 +845,9 @@ |
/* Do nothing. */ |
} |
- void emitClassFields(ClassElement classElement, CodeBuffer buffer) { |
- buffer.add('"": ['); |
+ void emitClassFields(ClassElement classElement, |
+ CodeBuffer buffer, |
+ {bool emitEndingComma: true}) { |
ahe
2012/11/22 12:22:05
I think it would be better to update all the calle
ngeoffray
2012/11/22 13:15:18
Done.
|
bool isFirstField = true; |
visitClassFields(classElement, (Element member, |
String name, |
@@ -856,6 +856,7 @@ |
bool needsSetter, |
bool needsCheckedSetter) { |
if (isFirstField) { |
+ buffer.add('"": ['); |
isFirstField = false; |
} else { |
buffer.add(", "); |
@@ -876,12 +877,18 @@ |
} |
buffer.add('"'); |
}); |
- buffer.add(']'); |
+ if (!isFirstField) { |
+ // There was at least one field. |
+ buffer.add(']'); |
+ if (emitEndingComma) { |
+ buffer.add(', '); |
+ } |
+ } |
} |
/** Each getter/setter must be prefixed with a ",\n ". */ |
void emitClassGettersSetters(ClassElement classElement, CodeBuffer buffer, |
- {bool omitLeadingComma: false}) { |
+ {bool emitLeadingComma: true}) { |
visitClassFields(classElement, (Element member, |
String name, |
String accessorName, |
@@ -890,10 +897,10 @@ |
bool needsCheckedSetter) { |
if (needsCheckedSetter) { |
assert(!needsSetter); |
- if (!omitLeadingComma) { |
+ if (emitLeadingComma) { |
buffer.add(",\n "); |
} else { |
- omitLeadingComma = false; |
+ emitLeadingComma = true; |
} |
generateCheckedSetter(member, name, accessorName, buffer); |
} |
@@ -931,9 +938,9 @@ |
// TODO(floitsch): the emitInstanceMember should simply always emit a ',\n'. |
// That does currently not work because the native classes have a different |
// syntax. |
- buffer.add(',\n "super": "$superName"'); |
+ buffer.add('\n "super": "$superName"'); |
emitClassGettersSetters(classElement, buffer); |
- emitInstanceMembers(classElement, buffer, true); |
+ emitInstanceMembers(classElement, buffer); |
buffer.add('\n};\n\n'); |
} |