Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: dart/sdk/lib/_internal/compiler/implementation/scanner/listener.dart

Issue 11416004: Reject deprecated language features. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: abstract class in resolver test Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 part of scanner; 5 part of scanner;
6 6
7 const bool VERBOSE = false; 7 const bool VERBOSE = false;
8 8
9 /** 9 /**
10 * A parser event listener that does nothing except throw exceptions 10 * A parser event listener that does nothing except throw exceptions
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 throw new ParserError("$message @ ${token.charOffset}"); 598 throw new ParserError("$message @ ${token.charOffset}");
599 } 599 }
600 } 600 }
601 601
602 class ParserError { 602 class ParserError {
603 final String reason; 603 final String reason;
604 ParserError(this.reason); 604 ParserError(this.reason);
605 toString() => reason; 605 toString() => reason;
606 } 606 }
607 607
608 typedef int IdGenerator();
609
608 /** 610 /**
609 * A parser event listener designed to work with [PartialParser]. It 611 * A parser event listener designed to work with [PartialParser]. It
610 * builds elements representing the top-level declarations found in 612 * builds elements representing the top-level declarations found in
611 * the parsed compilation unit and records them in 613 * the parsed compilation unit and records them in
612 * [compilationUnitElement]. 614 * [compilationUnitElement].
613 */ 615 */
614 class ElementListener extends Listener { 616 class ElementListener extends Listener {
615 Function idGenerator; 617 final IdGenerator idGenerator;
616 final DiagnosticListener listener; 618 final DiagnosticListener listener;
617 final CompilationUnitElement compilationUnitElement; 619 final CompilationUnitElement compilationUnitElement;
618 final StringValidator stringValidator; 620 final StringValidator stringValidator;
619 Link<StringQuoting> interpolationScope; 621 Link<StringQuoting> interpolationScope;
620 622
621 Link<Node> nodes = const Link<Node>(); 623 Link<Node> nodes = const Link<Node>();
622 624
623 Link<MetadataAnnotation> metadata = const Link<MetadataAnnotation>(); 625 Link<MetadataAnnotation> metadata = const Link<MetadataAnnotation>();
624 626
625 ElementListener(DiagnosticListener listener, 627 ElementListener(DiagnosticListener listener,
626 CompilationUnitElement this.compilationUnitElement, 628 this.compilationUnitElement,
627 int idGenerator()) 629 this.idGenerator)
628 : this.listener = listener, 630 : this.listener = listener,
629 this.idGenerator = idGenerator,
630 stringValidator = new StringValidator(listener), 631 stringValidator = new StringValidator(listener),
631 interpolationScope = const Link<StringQuoting>(); 632 interpolationScope = const Link<StringQuoting>();
632 633
633 void pushQuoting(StringQuoting quoting) { 634 void pushQuoting(StringQuoting quoting) {
634 interpolationScope = interpolationScope.prepend(quoting); 635 interpolationScope = interpolationScope.prepend(quoting);
635 } 636 }
636 637
637 StringQuoting popQuoting() { 638 StringQuoting popQuoting() {
638 StringQuoting result = interpolationScope.head; 639 StringQuoting result = interpolationScope.head;
639 interpolationScope = interpolationScope.tail; 640 interpolationScope = interpolationScope.tail;
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
784 // TODO(ahe): Record the defaultClause. 785 // TODO(ahe): Record the defaultClause.
785 Node defaultClause = popNode(); 786 Node defaultClause = popNode();
786 NodeList supertypes = 787 NodeList supertypes =
787 makeNodeList(supertypeCount, extendsKeyword, null, ","); 788 makeNodeList(supertypeCount, extendsKeyword, null, ",");
788 NodeList typeParameters = popNode(); 789 NodeList typeParameters = popNode();
789 Identifier name = popNode(); 790 Identifier name = popNode();
790 int id = idGenerator(); 791 int id = idGenerator();
791 pushElement(new PartialClassElement( 792 pushElement(new PartialClassElement(
792 name.source, interfaceKeyword, endToken, compilationUnitElement, id)); 793 name.source, interfaceKeyword, endToken, compilationUnitElement, id));
793 rejectBuiltInIdentifier(name); 794 rejectBuiltInIdentifier(name);
795 listener.onDeprecatedFeature(interfaceKeyword, 'interface declarations');
794 } 796 }
795 797
796 void endFunctionTypeAlias(Token typedefKeyword, Token endToken) { 798 void endFunctionTypeAlias(Token typedefKeyword, Token endToken) {
797 NodeList typeVariables = popNode(); // TOOD(karlklose): do not throw away. 799 NodeList typeVariables = popNode(); // TOOD(karlklose): do not throw away.
798 Identifier name = popNode(); 800 Identifier name = popNode();
799 TypeAnnotation returnType = popNode(); 801 TypeAnnotation returnType = popNode();
800 pushElement(new PartialTypedefElement(name.source, compilationUnitElement, 802 pushElement(new PartialTypedefElement(name.source, compilationUnitElement,
801 typedefKeyword)); 803 typedefKeyword));
802 rejectBuiltInIdentifier(name); 804 rejectBuiltInIdentifier(name);
803 } 805 }
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
998 element.addMetadata(link.head); 1000 element.addMetadata(link.head);
999 } 1001 }
1000 metadata = const Link<MetadataAnnotation>(); 1002 metadata = const Link<MetadataAnnotation>();
1001 compilationUnitElement.addMember(element, listener); 1003 compilationUnitElement.addMember(element, listener);
1002 } 1004 }
1003 1005
1004 void pushMetadata(MetadataAnnotation annotation) { 1006 void pushMetadata(MetadataAnnotation annotation) {
1005 metadata = metadata.prepend(annotation); 1007 metadata = metadata.prepend(annotation);
1006 } 1008 }
1007 1009
1010 // TODO(ahe): Remove this method.
1008 void addScriptTag(ScriptTag tag) { 1011 void addScriptTag(ScriptTag tag) {
1009 // TODO(ahe): Remove this method. 1012 listener.onDeprecatedFeature(tag, '# tags');
1010 addLibraryTag(tag.toLibraryTag()); 1013 addLibraryTag(tag.toLibraryTag());
1011 } 1014 }
1012 1015
1013 void addLibraryTag(LibraryTag tag) { 1016 void addLibraryTag(LibraryTag tag) {
1014 if (!allowLibraryTags()) { 1017 if (!allowLibraryTags()) {
1015 recoverableError('library tags not allowed here', node: tag); 1018 recoverableError('library tags not allowed here', node: tag);
1016 } 1019 }
1017 compilationUnitElement.getImplementationLibrary().addTag(tag, listener); 1020 compilationUnitElement.getImplementationLibrary().addTag(tag, listener);
1018 } 1021 }
1019 1022
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
1331 String tokenString = token.stringValue; 1334 String tokenString = token.stringValue;
1332 if (identical(tokenString, '.') || identical(tokenString, '..')) { 1335 if (identical(tokenString, '.') || identical(tokenString, '..')) {
1333 if (argument is !Send) internalError(node: argument); 1336 if (argument is !Send) internalError(node: argument);
1334 if (argument.asSend().receiver != null) internalError(node: argument); 1337 if (argument.asSend().receiver != null) internalError(node: argument);
1335 if (argument is SendSet) internalError(node: argument); 1338 if (argument is SendSet) internalError(node: argument);
1336 pushNode(argument.asSend().copyWithReceiver(receiver)); 1339 pushNode(argument.asSend().copyWithReceiver(receiver));
1337 } else { 1340 } else {
1338 NodeList arguments = new NodeList.singleton(argument); 1341 NodeList arguments = new NodeList.singleton(argument);
1339 pushNode(new Send(receiver, new Operator(token), arguments)); 1342 pushNode(new Send(receiver, new Operator(token), arguments));
1340 } 1343 }
1344 if (identical(tokenString, '===') || identical(tokenString, '!==')) {
1345 listener.onDeprecatedFeature(token, tokenString);
1346 }
1341 } 1347 }
1342 1348
1343 void beginCascade(Token token) { 1349 void beginCascade(Token token) {
1344 pushNode(new CascadeReceiver(popNode(), token)); 1350 pushNode(new CascadeReceiver(popNode(), token));
1345 } 1351 }
1346 1352
1347 void endCascade() { 1353 void endCascade() {
1348 pushNode(new Cascade(popNode())); 1354 pushNode(new Cascade(popNode()));
1349 } 1355 }
1350 1356
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after
1939 1945
1940 Node parse(DiagnosticListener diagnosticListener, 1946 Node parse(DiagnosticListener diagnosticListener,
1941 CompilationUnitElement element, 1947 CompilationUnitElement element,
1942 doParse(Parser parser)) { 1948 doParse(Parser parser)) {
1943 NodeListener listener = new NodeListener(diagnosticListener, element); 1949 NodeListener listener = new NodeListener(diagnosticListener, element);
1944 doParse(new Parser(listener)); 1950 doParse(new Parser(listener));
1945 Node node = listener.popNode(); 1951 Node node = listener.popNode();
1946 assert(listener.nodes.isEmpty); 1952 assert(listener.nodes.isEmpty);
1947 return node; 1953 return node;
1948 } 1954 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698