| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |