| 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 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 return node.name ?? syntheticNames.nameClass(node); | 203 return node.name ?? syntheticNames.nameClass(node); |
| 204 } | 204 } |
| 205 | 205 |
| 206 String getClassReference(Class node) { | 206 String getClassReference(Class node) { |
| 207 if (node == null) return '<No Class>'; | 207 if (node == null) return '<No Class>'; |
| 208 String name = getClassName(node); | 208 String name = getClassName(node); |
| 209 String library = getLibraryReference(node.enclosingLibrary); | 209 String library = getLibraryReference(node.enclosingLibrary); |
| 210 return '$library::$name'; | 210 return '$library::$name'; |
| 211 } | 211 } |
| 212 | 212 |
| 213 String getTypedefReference(Typedef node) { | |
| 214 if (node == null) return '<No Typedef>'; | |
| 215 String library = getLibraryReference(node.enclosingLibrary); | |
| 216 return '$library::${node.name}'; | |
| 217 } | |
| 218 | |
| 219 static final String emptyNameString = '•'; | 213 static final String emptyNameString = '•'; |
| 220 static final Name emptyName = new Name(emptyNameString); | 214 static final Name emptyName = new Name(emptyNameString); |
| 221 | 215 |
| 222 Name getMemberName(Member node) { | 216 Name getMemberName(Member node) { |
| 223 if (node.name?.name == '') return emptyName; | 217 if (node.name?.name == '') return emptyName; |
| 224 if (node.name != null) return node.name; | 218 if (node.name != null) return node.name; |
| 225 return new Name(syntheticNames.nameMember(node)); | 219 return new Name(syntheticNames.nameMember(node)); |
| 226 } | 220 } |
| 227 | 221 |
| 228 String getMemberReference(Member node) { | 222 String getMemberReference(Member node) { |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 280 } else { | 274 } else { |
| 281 var prefix = syntheticNames.nameLibraryPrefix(library); | 275 var prefix = syntheticNames.nameLibraryPrefix(library); |
| 282 endLine('import "$importPath" as $prefix;'); | 276 endLine('import "$importPath" as $prefix;'); |
| 283 } | 277 } |
| 284 } | 278 } |
| 285 for (var import in library.deferredImports) { | 279 for (var import in library.deferredImports) { |
| 286 import.accept(this); | 280 import.accept(this); |
| 287 } | 281 } |
| 288 endLine(); | 282 endLine(); |
| 289 var inner = new Printer._inner(this, imports); | 283 var inner = new Printer._inner(this, imports); |
| 290 library.typedefs.forEach(inner.writeNode); | |
| 291 library.classes.forEach(inner.writeNode); | 284 library.classes.forEach(inner.writeNode); |
| 292 library.fields.forEach(inner.writeNode); | 285 library.fields.forEach(inner.writeNode); |
| 293 library.procedures.forEach(inner.writeNode); | 286 library.procedures.forEach(inner.writeNode); |
| 294 } | 287 } |
| 295 | 288 |
| 296 void writeProgramFile(Program program) { | 289 void writeProgramFile(Program program) { |
| 297 ImportTable imports = new ProgramImportTable(program); | 290 ImportTable imports = new ProgramImportTable(program); |
| 298 var inner = new Printer._inner(this, imports); | 291 var inner = new Printer._inner(this, imports); |
| 299 writeWord('main'); | 292 writeWord('main'); |
| 300 writeSpaced('='); | 293 writeSpaced('='); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 313 } | 306 } |
| 314 if (library.importUri != null) { | 307 if (library.importUri != null) { |
| 315 writeSpaced('from'); | 308 writeSpaced('from'); |
| 316 writeWord('"${library.importUri}"'); | 309 writeWord('"${library.importUri}"'); |
| 317 } | 310 } |
| 318 var prefix = syntheticNames.nameLibraryPrefix(library); | 311 var prefix = syntheticNames.nameLibraryPrefix(library); |
| 319 writeSpaced('as'); | 312 writeSpaced('as'); |
| 320 writeWord(prefix); | 313 writeWord(prefix); |
| 321 endLine(' {'); | 314 endLine(' {'); |
| 322 ++inner.indentation; | 315 ++inner.indentation; |
| 323 library.typedefs.forEach(inner.writeNode); | |
| 324 library.classes.forEach(inner.writeNode); | 316 library.classes.forEach(inner.writeNode); |
| 325 library.fields.forEach(inner.writeNode); | 317 library.fields.forEach(inner.writeNode); |
| 326 library.procedures.forEach(inner.writeNode); | 318 library.procedures.forEach(inner.writeNode); |
| 327 --inner.indentation; | 319 --inner.indentation; |
| 328 endLine('}'); | 320 endLine('}'); |
| 329 } | 321 } |
| 330 } | 322 } |
| 331 | 323 |
| 332 int getPrecedence(TreeNode node) { | 324 int getPrecedence(TreeNode node) { |
| 333 return Precedence.of(node); | 325 return Precedence.of(node); |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 430 writeList(type.typeArguments, writeType); | 422 writeList(type.typeArguments, writeType); |
| 431 writeSymbol('>'); | 423 writeSymbol('>'); |
| 432 } | 424 } |
| 433 } | 425 } |
| 434 } | 426 } |
| 435 | 427 |
| 436 visitVectorType(VectorType type) { | 428 visitVectorType(VectorType type) { |
| 437 writeWord('Vector'); | 429 writeWord('Vector'); |
| 438 } | 430 } |
| 439 | 431 |
| 440 visitTypedefType(TypedefType type) { | |
| 441 writeTypedefReference(type.typedefNode); | |
| 442 if (type.typeArguments.isNotEmpty) { | |
| 443 writeSymbol('<'); | |
| 444 writeList(type.typeArguments, writeType); | |
| 445 writeSymbol('>'); | |
| 446 } | |
| 447 } | |
| 448 | |
| 449 void writeModifier(bool isThere, String name) { | 432 void writeModifier(bool isThere, String name) { |
| 450 if (isThere) { | 433 if (isThere) { |
| 451 writeWord(name); | 434 writeWord(name); |
| 452 } | 435 } |
| 453 } | 436 } |
| 454 | 437 |
| 455 void writeName(Name name) { | 438 void writeName(Name name) { |
| 456 if (name?.name == '') { | 439 if (name?.name == '') { |
| 457 writeWord(emptyNameString); | 440 writeWord(emptyNameString); |
| 458 } else { | 441 } else { |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 620 } | 603 } |
| 621 | 604 |
| 622 void writeMemberReference(Member member) { | 605 void writeMemberReference(Member member) { |
| 623 writeWord(getMemberReference(member)); | 606 writeWord(getMemberReference(member)); |
| 624 } | 607 } |
| 625 | 608 |
| 626 void writeClassReference(Class classNode) { | 609 void writeClassReference(Class classNode) { |
| 627 writeWord(getClassReference(classNode)); | 610 writeWord(getClassReference(classNode)); |
| 628 } | 611 } |
| 629 | 612 |
| 630 void writeTypedefReference(Typedef typedefNode) { | |
| 631 writeWord(getTypedefReference(typedefNode)); | |
| 632 } | |
| 633 | |
| 634 void writeLibraryReference(Library library) { | 613 void writeLibraryReference(Library library) { |
| 635 writeWord(getLibraryReference(library)); | 614 writeWord(getLibraryReference(library)); |
| 636 } | 615 } |
| 637 | 616 |
| 638 void writeVariableReference(VariableDeclaration variable) { | 617 void writeVariableReference(VariableDeclaration variable) { |
| 639 writeWord(getVariableReference(variable)); | 618 writeWord(getVariableReference(variable)); |
| 640 } | 619 } |
| 641 | 620 |
| 642 void writeTypeParameterReference(TypeParameter node) { | 621 void writeTypeParameterReference(TypeParameter node) { |
| 643 writeWord(getTypeParameterReference(node)); | 622 writeWord(getTypeParameterReference(node)); |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 765 endLine(endLineString); | 744 endLine(endLineString); |
| 766 ++indentation; | 745 ++indentation; |
| 767 node.fields.forEach(writeNode); | 746 node.fields.forEach(writeNode); |
| 768 node.constructors.forEach(writeNode); | 747 node.constructors.forEach(writeNode); |
| 769 node.procedures.forEach(writeNode); | 748 node.procedures.forEach(writeNode); |
| 770 --indentation; | 749 --indentation; |
| 771 writeIndentation(); | 750 writeIndentation(); |
| 772 endLine('}'); | 751 endLine('}'); |
| 773 } | 752 } |
| 774 | 753 |
| 775 visitTypedef(Typedef node) { | |
| 776 writeIndentation(); | |
| 777 writeWord('typedef'); | |
| 778 writeWord(node.name); | |
| 779 writeTypeParameterList(node.typeParameters); | |
| 780 writeSpaced('='); | |
| 781 writeNode(node.type); | |
| 782 endLine(';'); | |
| 783 } | |
| 784 | |
| 785 visitInvalidExpression(InvalidExpression node) { | 754 visitInvalidExpression(InvalidExpression node) { |
| 786 writeWord('invalid-expression'); | 755 writeWord('invalid-expression'); |
| 787 } | 756 } |
| 788 | 757 |
| 789 visitMethodInvocation(MethodInvocation node) { | 758 visitMethodInvocation(MethodInvocation node) { |
| 790 writeExpression(node.receiver, Precedence.PRIMARY); | 759 writeExpression(node.receiver, Precedence.PRIMARY); |
| 791 writeSymbol('.'); | 760 writeSymbol('.'); |
| 792 writeInterfaceTarget(node.name, node.interfaceTarget); | 761 writeInterfaceTarget(node.name, node.interfaceTarget); |
| 793 writeNode(node.arguments); | 762 writeNode(node.arguments); |
| 794 } | 763 } |
| (...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1643 } | 1612 } |
| 1644 throw 'illegal ProcedureKind: $kind'; | 1613 throw 'illegal ProcedureKind: $kind'; |
| 1645 } | 1614 } |
| 1646 | 1615 |
| 1647 class ExpressionPrinter { | 1616 class ExpressionPrinter { |
| 1648 final Printer writeer; | 1617 final Printer writeer; |
| 1649 final int minimumPrecedence; | 1618 final int minimumPrecedence; |
| 1650 | 1619 |
| 1651 ExpressionPrinter(this.writeer, this.minimumPrecedence); | 1620 ExpressionPrinter(this.writeer, this.minimumPrecedence); |
| 1652 } | 1621 } |
| OLD | NEW |