| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 | 4 |
| 5 const bool VERBOSE = false; | 5 const bool VERBOSE = false; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * A parser event listener that does nothing except throw exceptions | 8 * A parser event listener that does nothing except throw exceptions |
| 9 * on parser errors. | 9 * on parser errors. |
| 10 */ | 10 */ |
| (...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 647 node: node); | 647 node: node); |
| 648 return null; | 648 return null; |
| 649 } | 649 } |
| 650 return node; | 650 return node; |
| 651 } | 651 } |
| 652 | 652 |
| 653 bool allowLibraryTags() { | 653 bool allowLibraryTags() { |
| 654 // Library tags are only allowed in the library file itself, not | 654 // Library tags are only allowed in the library file itself, not |
| 655 // in sourced files. | 655 // in sourced files. |
| 656 LibraryElement library = compilationUnitElement.getLibrary(); | 656 LibraryElement library = compilationUnitElement.getLibrary(); |
| 657 return compilationUnitElement.localMembers.isEmpty() | 657 return compilationUnitElement.localMembers.isEmpty |
| 658 && library.entryCompilationUnit == compilationUnitElement; | 658 && library.entryCompilationUnit == compilationUnitElement; |
| 659 } | 659 } |
| 660 | 660 |
| 661 void endLibraryName(Token libraryKeyword, Token semicolon) { | 661 void endLibraryName(Token libraryKeyword, Token semicolon) { |
| 662 Expression name = popNode(); | 662 Expression name = popNode(); |
| 663 addLibraryTag(new LibraryName(libraryKeyword, name)); | 663 addLibraryTag(new LibraryName(libraryKeyword, name)); |
| 664 } | 664 } |
| 665 | 665 |
| 666 void endImport(Token importKeyword, Token asKeyword, Token semicolon) { | 666 void endImport(Token importKeyword, Token asKeyword, Token semicolon) { |
| 667 NodeList combinators = popNode(); | 667 NodeList combinators = popNode(); |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 835 NodeList variables, | 835 NodeList variables, |
| 836 ContainerElement enclosingElement, | 836 ContainerElement enclosingElement, |
| 837 void buildFieldElement(SourceString name, | 837 void buildFieldElement(SourceString name, |
| 838 Element fields), | 838 Element fields), |
| 839 Token beginToken, Token endToken) { | 839 Token beginToken, Token endToken) { |
| 840 Element fields = new PartialFieldListElement(beginToken, | 840 Element fields = new PartialFieldListElement(beginToken, |
| 841 endToken, | 841 endToken, |
| 842 modifiers, | 842 modifiers, |
| 843 enclosingElement); | 843 enclosingElement); |
| 844 for (Link<Node> variableNodes = variables.nodes; | 844 for (Link<Node> variableNodes = variables.nodes; |
| 845 !variableNodes.isEmpty(); | 845 !variableNodes.isEmpty; |
| 846 variableNodes = variableNodes.tail) { | 846 variableNodes = variableNodes.tail) { |
| 847 Expression initializedIdentifier = variableNodes.head; | 847 Expression initializedIdentifier = variableNodes.head; |
| 848 Identifier identifier = initializedIdentifier.asIdentifier(); | 848 Identifier identifier = initializedIdentifier.asIdentifier(); |
| 849 if (identifier == null) { | 849 if (identifier == null) { |
| 850 identifier = initializedIdentifier.asSendSet().selector.asIdentifier(); | 850 identifier = initializedIdentifier.asSendSet().selector.asIdentifier(); |
| 851 } | 851 } |
| 852 SourceString name = identifier.source; | 852 SourceString name = identifier.source; |
| 853 buildFieldElement(name, fields); | 853 buildFieldElement(name, fields); |
| 854 } | 854 } |
| 855 } | 855 } |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 983 Token unmatched(Token token) { | 983 Token unmatched(Token token) { |
| 984 listener.cancel("unmatched '${token.slowToString()}'", token: token); | 984 listener.cancel("unmatched '${token.slowToString()}'", token: token); |
| 985 return skipToEof(token); | 985 return skipToEof(token); |
| 986 } | 986 } |
| 987 | 987 |
| 988 void recoverableError(String message, {Token token, Node node}) { | 988 void recoverableError(String message, {Token token, Node node}) { |
| 989 listener.cancel(message, token: token, node: node); | 989 listener.cancel(message, token: token, node: node); |
| 990 } | 990 } |
| 991 | 991 |
| 992 void pushElement(Element element) { | 992 void pushElement(Element element) { |
| 993 for (Link link = metadata; !link.isEmpty(); link = link.tail) { | 993 for (Link link = metadata; !link.isEmpty; link = link.tail) { |
| 994 element.addMetadata(link.head); | 994 element.addMetadata(link.head); |
| 995 } | 995 } |
| 996 metadata = const Link<MetadataAnnotation>(); | 996 metadata = const Link<MetadataAnnotation>(); |
| 997 compilationUnitElement.addMember(element, listener); | 997 compilationUnitElement.addMember(element, listener); |
| 998 } | 998 } |
| 999 | 999 |
| 1000 void pushMetadata(MetadataAnnotation annotation) { | 1000 void pushMetadata(MetadataAnnotation annotation) { |
| 1001 metadata = metadata.prepend(annotation); | 1001 metadata = metadata.prepend(annotation); |
| 1002 } | 1002 } |
| 1003 | 1003 |
| 1004 void addScriptTag(ScriptTag tag) { | 1004 void addScriptTag(ScriptTag tag) { |
| 1005 // TODO(ahe): Remove this method. | 1005 // TODO(ahe): Remove this method. |
| 1006 addLibraryTag(tag.toLibraryTag()); | 1006 addLibraryTag(tag.toLibraryTag()); |
| 1007 } | 1007 } |
| 1008 | 1008 |
| 1009 void addLibraryTag(LibraryTag tag) { | 1009 void addLibraryTag(LibraryTag tag) { |
| 1010 if (!allowLibraryTags()) { | 1010 if (!allowLibraryTags()) { |
| 1011 recoverableError('library tags not allowed here', node: tag); | 1011 recoverableError('library tags not allowed here', node: tag); |
| 1012 } | 1012 } |
| 1013 compilationUnitElement.getImplementationLibrary().addTag(tag, listener); | 1013 compilationUnitElement.getImplementationLibrary().addTag(tag, listener); |
| 1014 } | 1014 } |
| 1015 | 1015 |
| 1016 void pushNode(Node node) { | 1016 void pushNode(Node node) { |
| 1017 nodes = nodes.prepend(node); | 1017 nodes = nodes.prepend(node); |
| 1018 if (VERBOSE) log("push $nodes"); | 1018 if (VERBOSE) log("push $nodes"); |
| 1019 } | 1019 } |
| 1020 | 1020 |
| 1021 Node popNode() { | 1021 Node popNode() { |
| 1022 assert(!nodes.isEmpty()); | 1022 assert(!nodes.isEmpty); |
| 1023 Node node = nodes.head; | 1023 Node node = nodes.head; |
| 1024 nodes = nodes.tail; | 1024 nodes = nodes.tail; |
| 1025 if (VERBOSE) log("pop $nodes"); | 1025 if (VERBOSE) log("pop $nodes"); |
| 1026 return node; | 1026 return node; |
| 1027 } | 1027 } |
| 1028 | 1028 |
| 1029 Node peekNode() { | 1029 Node peekNode() { |
| 1030 assert(!nodes.isEmpty()); | 1030 assert(!nodes.isEmpty); |
| 1031 Node node = nodes.head; | 1031 Node node = nodes.head; |
| 1032 if (VERBOSE) log("peek $node"); | 1032 if (VERBOSE) log("peek $node"); |
| 1033 return node; | 1033 return node; |
| 1034 } | 1034 } |
| 1035 | 1035 |
| 1036 void log(message) { | 1036 void log(message) { |
| 1037 print(message); | 1037 print(message); |
| 1038 } | 1038 } |
| 1039 | 1039 |
| 1040 NodeList makeNodeList(int count, Token beginToken, Token endToken, | 1040 NodeList makeNodeList(int count, Token beginToken, Token endToken, |
| (...skipping 865 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1906 return cachedNode; | 1906 return cachedNode; |
| 1907 } | 1907 } |
| 1908 } | 1908 } |
| 1909 | 1909 |
| 1910 Node parse(DiagnosticListener diagnosticListener, | 1910 Node parse(DiagnosticListener diagnosticListener, |
| 1911 CompilationUnitElement element, | 1911 CompilationUnitElement element, |
| 1912 doParse(Parser parser)) { | 1912 doParse(Parser parser)) { |
| 1913 NodeListener listener = new NodeListener(diagnosticListener, element); | 1913 NodeListener listener = new NodeListener(diagnosticListener, element); |
| 1914 doParse(new Parser(listener)); | 1914 doParse(new Parser(listener)); |
| 1915 Node node = listener.popNode(); | 1915 Node node = listener.popNode(); |
| 1916 assert(listener.nodes.isEmpty()); | 1916 assert(listener.nodes.isEmpty); |
| 1917 return node; | 1917 return node; |
| 1918 } | 1918 } |
| OLD | NEW |