Chromium Code Reviews| Index: sdk/lib/_internal/compiler/implementation/js/printer.dart |
| diff --git a/sdk/lib/_internal/compiler/implementation/js/printer.dart b/sdk/lib/_internal/compiler/implementation/js/printer.dart |
| index 048dc71a00d20065768637dcd62e8c6dc5638a64..1cdfbf977d261038b16aa2db2738d62b738b044e 100644 |
| --- a/sdk/lib/_internal/compiler/implementation/js/printer.dart |
| +++ b/sdk/lib/_internal/compiler/implementation/js/printer.dart |
| @@ -31,11 +31,16 @@ class Printer implements NodeVisitor { |
| ? new MinifyRenamer() : new IdentityNamer(); |
| } |
| - void spaceOut() { |
| - if (!shouldCompressOutput) out(" "); |
| + /// Always emit a newline, even under `enableMinification`. |
| + void forceLine() { |
| + out("\n"); |
| } |
| + /// Emits a newline for readability. |
| void lineOut() { |
| - if (!shouldCompressOutput) out("\n"); |
| + if (!shouldCompressOutput) forceLine(); |
| + } |
| + void spaceOut() { |
| + if (!shouldCompressOutput) out(" "); |
| } |
| String lastAddedString = null; |
| @@ -70,7 +75,8 @@ class Printer implements NodeVisitor { |
| if (shouldCompressOutput) { |
| pendingSemicolon = true; |
| } else { |
| - out(";\n"); |
| + out(";"); |
| + forceLine(); |
| } |
| } |
| @@ -672,8 +678,10 @@ class Printer implements NodeVisitor { |
| return false; |
| } |
| } |
| - // TODO(floitsch): normally we should also check that the field is not |
| - // a reserved word. |
| + // TODO(floitsch): normally we should also check that the field is not a |
| + // reserved word. We don't generate fields with reserved word names except |
| + // for 'super'. |
| + if (field == '"super"') return false; |
|
ngeoffray
2013/01/10 10:40:07
Using super breaks android AFAIR. Why did you need
sra1
2013/01/10 16:32:42
Without this line, we get
super: "X",
with the l
|
| return true; |
| } |
| @@ -758,15 +766,28 @@ class Printer implements NodeVisitor { |
| } |
| visitObjectInitializer(ObjectInitializer node) { |
| - out("{"); |
| + // Print all the properties on one line until we see a function-valued |
| + // property. Ideally, we would use a proper pretty-printer to make the |
| + // decision based on layout. |
| + bool onePerLine = false; |
| List<Property> properties = node.properties; |
| + out("{"); |
| + ++indentLevel; |
| for (int i = 0; i < properties.length; i++) { |
| + Expression value = properties[i].value; |
| + if (value is Fun || value is NamedFunction) onePerLine = true; |
| if (i != 0) { |
| out(","); |
| - spaceOut(); |
| + if (!onePerLine) spaceOut(); |
| + } |
| + if (onePerLine) { |
| + forceLine(); |
| + indent(); |
| } |
| visitProperty(properties[i]); |
| } |
| + --indentLevel; |
| + if (onePerLine) lineOut(); |
| out("}"); |
| } |