OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 library kernel.ast_to_text; | 4 library kernel.ast_to_text; |
5 | 5 |
6 import '../ast.dart'; | 6 import '../ast.dart'; |
7 import '../import_table.dart'; | 7 import '../import_table.dart'; |
8 | 8 |
9 class Namer<T> { | 9 class Namer<T> { |
10 int index = 0; | 10 int index = 0; |
(...skipping 821 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
832 | 832 |
833 visitLogicalExpression(LogicalExpression node) { | 833 visitLogicalExpression(LogicalExpression node) { |
834 int precedence = Precedence.binaryPrecedence[node.operator]; | 834 int precedence = Precedence.binaryPrecedence[node.operator]; |
835 writeExpression(node.left, precedence); | 835 writeExpression(node.left, precedence); |
836 writeSpaced(node.operator); | 836 writeSpaced(node.operator); |
837 writeExpression(node.right, precedence + 1); | 837 writeExpression(node.right, precedence + 1); |
838 } | 838 } |
839 | 839 |
840 visitConditionalExpression(ConditionalExpression node) { | 840 visitConditionalExpression(ConditionalExpression node) { |
841 writeExpression(node.condition, Precedence.LOGICAL_OR); | 841 writeExpression(node.condition, Precedence.LOGICAL_OR); |
842 writeSpaced('?'); | 842 ensureSpace(); |
| 843 write('?'); |
| 844 writeStaticType(node.staticType); |
| 845 writeSpace(); |
843 writeExpression(node.then); | 846 writeExpression(node.then); |
844 writeSpaced(':'); | 847 writeSpaced(':'); |
845 writeExpression(node.otherwise); | 848 writeExpression(node.otherwise); |
846 } | 849 } |
847 | 850 |
848 String getEscapedCharacter(int codeUnit) { | 851 String getEscapedCharacter(int codeUnit) { |
849 switch (codeUnit) { | 852 switch (codeUnit) { |
850 case 9: | 853 case 9: |
851 return r'\t'; | 854 return r'\t'; |
852 case 10: | 855 case 10: |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1107 void writeInterfaceTarget(Name name, Member target) { | 1110 void writeInterfaceTarget(Name name, Member target) { |
1108 if (target != null) { | 1111 if (target != null) { |
1109 writeSymbol('{'); | 1112 writeSymbol('{'); |
1110 writeMemberReference(target); | 1113 writeMemberReference(target); |
1111 writeSymbol('}'); | 1114 writeSymbol('}'); |
1112 } else { | 1115 } else { |
1113 writeName(name); | 1116 writeName(name); |
1114 } | 1117 } |
1115 } | 1118 } |
1116 | 1119 |
| 1120 void writeStaticType(DartType type) { |
| 1121 if (type != null) { |
| 1122 writeSymbol('{'); |
| 1123 writeType(type); |
| 1124 writeSymbol('}'); |
| 1125 } |
| 1126 } |
| 1127 |
1117 visitPropertyGet(PropertyGet node) { | 1128 visitPropertyGet(PropertyGet node) { |
1118 writeExpression(node.receiver, Precedence.PRIMARY); | 1129 writeExpression(node.receiver, Precedence.PRIMARY); |
1119 writeSymbol('.'); | 1130 writeSymbol('.'); |
1120 writeInterfaceTarget(node.name, node.interfaceTarget); | 1131 writeInterfaceTarget(node.name, node.interfaceTarget); |
1121 } | 1132 } |
1122 | 1133 |
1123 visitPropertySet(PropertySet node) { | 1134 visitPropertySet(PropertySet node) { |
1124 writeExpression(node.receiver, Precedence.PRIMARY); | 1135 writeExpression(node.receiver, Precedence.PRIMARY); |
1125 writeSymbol('.'); | 1136 writeSymbol('.'); |
1126 writeInterfaceTarget(node.name, node.interfaceTarget); | 1137 writeInterfaceTarget(node.name, node.interfaceTarget); |
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1655 } | 1666 } |
1656 throw 'illegal ProcedureKind: $kind'; | 1667 throw 'illegal ProcedureKind: $kind'; |
1657 } | 1668 } |
1658 | 1669 |
1659 class ExpressionPrinter { | 1670 class ExpressionPrinter { |
1660 final Printer writeer; | 1671 final Printer writeer; |
1661 final int minimumPrecedence; | 1672 final int minimumPrecedence; |
1662 | 1673 |
1663 ExpressionPrinter(this.writeer, this.minimumPrecedence); | 1674 ExpressionPrinter(this.writeer, this.minimumPrecedence); |
1664 } | 1675 } |
OLD | NEW |