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

Side by Side Diff: frog/leg/scanner/parser.dart

Issue 9284022: Operators. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 8 years, 11 months 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
« no previous file with comments | « frog/leg/scanner/class_element_parser.dart ('k') | frog/leg/ssa/builder.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 /** 5 /**
6 * An event generating parser of Dart programs. This parser expects 6 * An event generating parser of Dart programs. This parser expects
7 * all tokens in a linked list. 7 * all tokens in a linked list.
8 */ 8 */
9 class Parser { 9 class Parser {
10 final Listener listener; 10 final Listener listener;
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 } else { 547 } else {
548 // For example: get ... 548 // For example: get ...
549 if (isGetOrSet(token.next) && isIdentifier(token.next.next)) { 549 if (isGetOrSet(token.next) && isIdentifier(token.next.next)) {
550 // For example: get get identifier 550 // For example: get get identifier
551 return token.next; 551 return token.next;
552 } else { 552 } else {
553 // For example: get identifier 553 // For example: get identifier
554 return token; 554 return token;
555 } 555 }
556 } 556 }
557 } else { 557 } else if (token.stringValue !== 'operator') {
558 final Token peek = peekAfterType(token); 558 final Token peek = peekAfterType(token);
559 if (isGetOrSet(peek) && isIdentifier(peek.next)) { 559 if (isGetOrSet(peek) && isIdentifier(peek.next)) {
560 // type? get identifier 560 // type? get identifier
561 return token; 561 return token;
562 } 562 }
563 } 563 }
564 return null; 564 return null;
565 } 565 }
566 566
567 Token parseMember(Token token) { 567 Token parseMember(Token token) {
568 if (optional('factory', token)) { 568 if (optional('factory', token)) {
569 return parseFactoryMethod(token); 569 return parseFactoryMethod(token);
570 } 570 }
571 Token start = token; 571 Token start = token;
572 listener.beginMember(token); 572 listener.beginMember(token);
573 token = parseModifiers(token); 573 token = parseModifiers(token);
574 Token getOrSet = findGetOrSet(token); 574 Token getOrSet = findGetOrSet(token);
575 if (token === getOrSet) token = token.next; 575 if (token === getOrSet) token = token.next;
576 Token peek = peekAfterType(token); 576 Token peek = peekAfterType(token);
577 if (isIdentifier(peek)) { 577 if (isIdentifier(peek) && token.stringValue !== 'operator') {
578 // Skip type. 578 // Skip type.
579 token = peek; 579 token = peek;
580 } 580 }
581 if (token === getOrSet) token = token.next; 581 if (token === getOrSet) token = token.next;
582 if (optional('operator', token)) { 582 if (optional('operator', token)) {
583 token = parseOperatorName(token); 583 token = parseOperatorName(token);
584 } else { 584 } else {
585 token = parseIdentifier(token); 585 token = parseIdentifier(token);
586 } 586 }
587 bool isField; 587 bool isField;
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 (value === '|'); 685 (value === '|');
686 } 686 }
687 687
688 Token parseFunction(Token token, Token getOrSet) { 688 Token parseFunction(Token token, Token getOrSet) {
689 listener.beginFunction(token); 689 listener.beginFunction(token);
690 token = parseModifiers(token); 690 token = parseModifiers(token);
691 if (getOrSet === token) token = token.next; 691 if (getOrSet === token) token = token.next;
692 token = parseReturnTypeOpt(token); 692 token = parseReturnTypeOpt(token);
693 if (getOrSet === token) token = token.next; 693 if (getOrSet === token) token = token.next;
694 listener.beginFunctionName(token); 694 listener.beginFunctionName(token);
695 token = parseIdentifier(token); 695 if (optional('operator', token)) {
696 token = parseOperatorName(token);
697 } else {
698 token = parseIdentifier(token);
699 }
696 token = parseQualifiedRestOpt(token); 700 token = parseQualifiedRestOpt(token);
697 listener.endFunctionName(token); 701 listener.endFunctionName(token);
698 token = parseFormalParameters(token); 702 token = parseFormalParameters(token);
699 token = parseInitializersOpt(token); 703 token = parseInitializersOpt(token);
700 token = parseFunctionBody(token, false); 704 token = parseFunctionBody(token, false);
701 listener.endFunction(getOrSet, token); 705 listener.endFunction(getOrSet, token);
702 return token.next; 706 return token.next;
703 } 707 }
704 708
705 Token parseUnamedFunction(Token token) { 709 Token parseUnamedFunction(Token token) {
(...skipping 893 matching lines...) Expand 10 before | Expand all | Expand 10 after
1599 } 1603 }
1600 listener.handleContinueStatement(hasTarget, continueKeyword, token); 1604 listener.handleContinueStatement(hasTarget, continueKeyword, token);
1601 return expectSemicolon(token); 1605 return expectSemicolon(token);
1602 } 1606 }
1603 1607
1604 Token parseEmptyStatement(Token token) { 1608 Token parseEmptyStatement(Token token) {
1605 listener.handleEmptyStatement(token); 1609 listener.handleEmptyStatement(token);
1606 return expectSemicolon(token); 1610 return expectSemicolon(token);
1607 } 1611 }
1608 } 1612 }
OLDNEW
« no previous file with comments | « frog/leg/scanner/class_element_parser.dart ('k') | frog/leg/ssa/builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698