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

Side by Side Diff: lib/compiler/implementation/scanner/parser.dart

Issue 10697096: Add "external" prefix to methods and constructors. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 5 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
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 /** 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 (aka a token stream). 7 * all tokens in a linked list (aka a token stream).
8 * 8 *
9 * The class [Scanner] is used to generate a token stream. See the 9 * The class [Scanner] is used to generate a token stream. See the
10 * file scanner.dart. 10 * file scanner.dart.
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 460
461 Token expectSemicolon(Token token) { 461 Token expectSemicolon(Token token) {
462 return expect(';', token); 462 return expect(';', token);
463 } 463 }
464 464
465 Token parseModifier(Token token) { 465 Token parseModifier(Token token) {
466 assert(('final' === token.stringValue) || 466 assert(('final' === token.stringValue) ||
467 ('var' === token.stringValue) || 467 ('var' === token.stringValue) ||
468 ('const' === token.stringValue) || 468 ('const' === token.stringValue) ||
469 ('abstract' === token.stringValue) || 469 ('abstract' === token.stringValue) ||
470 ('static' === token.stringValue)); 470 ('static' === token.stringValue) ||
471 ('external' === token.stringValue));
471 listener.handleModifier(token); 472 listener.handleModifier(token);
472 return token.next; 473 return token.next;
473 } 474 }
474 475
475 Token parseModifiers(Token token) { 476 Token parseModifiers(Token token) {
476 int count = 0; 477 int count = 0;
477 while (token.kind === KEYWORD_TOKEN) { 478 while (token.kind === KEYWORD_TOKEN) {
478 final String value = token.stringValue; 479 final String value = token.stringValue;
479 if (('final' !== value) && 480 if (('final' !== value) &&
480 ('var' !== value) && 481 ('var' !== value) &&
481 ('const' !== value) && 482 ('const' !== value) &&
482 ('abstract' !== value) && 483 ('abstract' !== value) &&
483 ('static' !== value)) 484 ('static' !== value) &&
485 ('external' !== value))
484 break; 486 break;
485 token = parseModifier(token); 487 token = parseModifier(token);
486 count++; 488 count++;
487 } 489 }
488 listener.handleModifiers(count); 490 listener.handleModifiers(count);
489 return token; 491 return token;
490 } 492 }
491 493
492 Token peekAfterType(Token token) { 494 Token peekAfterType(Token token) {
493 // TODO(ahe): Also handle var? 495 // TODO(ahe): Also handle var?
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 final Token peek = peekAfterType(token); 562 final Token peek = peekAfterType(token);
561 if (isGetOrSet(peek) && isIdentifier(peek.next)) { 563 if (isGetOrSet(peek) && isIdentifier(peek.next)) {
562 // type? get identifier 564 // type? get identifier
563 return peek; 565 return peek;
564 } 566 }
565 } 567 }
566 return null; 568 return null;
567 } 569 }
568 570
569 Token parseMember(Token token) { 571 Token parseMember(Token token) {
570 if (optional('factory', token)) { 572 String value = token.stringValue;
ahe 2012/08/02 20:14:36 This is kinda of a hack.
573 if (value === 'factory' ||
574 (value === 'external' && optional('factory', token.next))) {
ahe 2012/08/02 20:14:36 And now the hack doesn't work anymore.
571 return parseFactoryMethod(token); 575 return parseFactoryMethod(token);
572 } 576 }
573 Token start = token; 577 Token start = token;
574 listener.beginMember(token); 578 listener.beginMember(token);
575 token = parseModifiers(token); 579 token = parseModifiers(token);
576 Token getOrSet = findGetOrSet(token); 580 Token getOrSet = findGetOrSet(token);
577 if (token === getOrSet) token = token.next; 581 if (token === getOrSet) token = token.next;
578 Token peek = peekAfterType(token); 582 Token peek = peekAfterType(token);
579 if (isIdentifier(peek) && token.stringValue !== 'operator') { 583 if (isIdentifier(peek) && token.stringValue !== 'operator') {
580 // Skip type. 584 // Skip type.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
624 token = parseQualifiedRestOpt(token); 628 token = parseQualifiedRestOpt(token);
625 token = parseFormalParameters(token); 629 token = parseFormalParameters(token);
626 token = parseInitializersOpt(token); 630 token = parseInitializersOpt(token);
627 token = parseFunctionBody(token, false); 631 token = parseFunctionBody(token, false);
628 listener.endMethod(getOrSet, start, token); 632 listener.endMethod(getOrSet, start, token);
629 } 633 }
630 return token.next; 634 return token.next;
631 } 635 }
632 636
633 Token parseFactoryMethod(Token token) { 637 Token parseFactoryMethod(Token token) {
634 assert(optional('factory', token)); 638 assert((optional('external', token) && optional('factory', token.next)) ||
639 optional('factory', token));
640 Token start = token;
641 if (start.stringValue === 'external') token = token.next;
635 Token factoryKeyword = token; 642 Token factoryKeyword = token;
636 listener.beginFactoryMethod(factoryKeyword); 643 listener.beginFactoryMethod(factoryKeyword);
637 token = token.next; // Skip 'factory'. 644 token = token.next; // Skip 'factory'.
638 token = parseIdentifier(token); 645 token = parseIdentifier(token);
639 token = parseQualifiedRestOpt(token); 646 token = parseQualifiedRestOpt(token);
640 token = parseTypeVariablesOpt(token); 647 token = parseTypeVariablesOpt(token);
641 Token period = null; 648 Token period = null;
642 if (optional('.', token)) { 649 if (optional('.', token)) {
643 period = token; 650 period = token;
644 token = parseIdentifier(token.next); 651 token = parseIdentifier(token.next);
645 } 652 }
646 token = parseFormalParameters(token); 653 token = parseFormalParameters(token);
647 token = parseFunctionBody(token, false); 654 token = parseFunctionBody(token, false);
648 listener.endFactoryMethod(factoryKeyword, period, token); 655 listener.endFactoryMethod(factoryKeyword, period, start);
649 return token.next; 656 return token.next;
650 } 657 }
651 658
652 Token parseOperatorName(Token token) { 659 Token parseOperatorName(Token token) {
653 assert(optional('operator', token)); 660 assert(optional('operator', token));
654 if (isUserDefinableOperator(token.next.stringValue)) { 661 if (isUserDefinableOperator(token.next.stringValue)) {
655 Token operator = token; 662 Token operator = token;
656 token = token.next; 663 token = token.next;
657 listener.handleOperatorName(operator, token); 664 listener.handleOperatorName(operator, token);
658 return token.next; 665 return token.next;
(...skipping 1048 matching lines...) Expand 10 before | Expand all | Expand 10 after
1707 } 1714 }
1708 listener.handleContinueStatement(hasTarget, continueKeyword, token); 1715 listener.handleContinueStatement(hasTarget, continueKeyword, token);
1709 return expectSemicolon(token); 1716 return expectSemicolon(token);
1710 } 1717 }
1711 1718
1712 Token parseEmptyStatement(Token token) { 1719 Token parseEmptyStatement(Token token) {
1713 listener.handleEmptyStatement(token); 1720 listener.handleEmptyStatement(token);
1714 return expectSemicolon(token); 1721 return expectSemicolon(token);
1715 } 1722 }
1716 } 1723 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698