| 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 library fasta.parser.parser; | 5 library fasta.parser.parser; |
| 6 | 6 |
| 7 import '../scanner.dart' show ErrorToken; | 7 import '../scanner.dart' show ErrorToken; |
| 8 | 8 |
| 9 import '../scanner/recover.dart' show closeBraceFor, skipToEof; | 9 import '../scanner/recover.dart' show closeBraceFor, skipToEof; |
| 10 | 10 |
| (...skipping 2585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2596 token = parsePrecedenceExpression( | 2596 token = parsePrecedenceExpression( |
| 2597 token.next, POSTFIX_PRECEDENCE, allowCascades); | 2597 token.next, POSTFIX_PRECEDENCE, allowCascades); |
| 2598 listener.handleUnaryPrefixAssignmentExpression(operator); | 2598 listener.handleUnaryPrefixAssignmentExpression(operator); |
| 2599 } else { | 2599 } else { |
| 2600 token = parsePrimary(token); | 2600 token = parsePrimary(token); |
| 2601 } | 2601 } |
| 2602 return token; | 2602 return token; |
| 2603 } | 2603 } |
| 2604 | 2604 |
| 2605 Token parseArgumentOrIndexStar(Token token) { | 2605 Token parseArgumentOrIndexStar(Token token) { |
| 2606 Token beginToken = token; |
| 2606 while (true) { | 2607 while (true) { |
| 2607 if (optional('[', token)) { | 2608 if (optional('[', token)) { |
| 2608 Token openSquareBracket = token; | 2609 Token openSquareBracket = token; |
| 2609 bool old = mayParseFunctionExpressions; | 2610 bool old = mayParseFunctionExpressions; |
| 2610 mayParseFunctionExpressions = true; | 2611 mayParseFunctionExpressions = true; |
| 2611 token = parseExpression(token.next); | 2612 token = parseExpression(token.next); |
| 2612 mayParseFunctionExpressions = old; | 2613 mayParseFunctionExpressions = old; |
| 2613 listener.handleIndexedExpression(openSquareBracket, token); | 2614 listener.handleIndexedExpression(openSquareBracket, token); |
| 2614 token = expect(']', token); | 2615 token = expect(']', token); |
| 2615 } else if (optional('(', token)) { | 2616 } else if (optional('(', token)) { |
| 2616 listener.handleNoTypeArguments(token); | 2617 listener.handleNoTypeArguments(token); |
| 2617 token = parseArguments(token); | 2618 token = parseArguments(token); |
| 2618 listener.endSend(token); | 2619 listener.endSend(beginToken, token); |
| 2619 } else { | 2620 } else { |
| 2620 break; | 2621 break; |
| 2621 } | 2622 } |
| 2622 } | 2623 } |
| 2623 return token; | 2624 return token; |
| 2624 } | 2625 } |
| 2625 | 2626 |
| 2626 Token parsePrimary(Token token) { | 2627 Token parsePrimary(Token token) { |
| 2627 final kind = token.kind; | 2628 final kind = token.kind; |
| 2628 if (kind == IDENTIFIER_TOKEN) { | 2629 if (kind == IDENTIFIER_TOKEN) { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2710 token = parseExpression(token); | 2711 token = parseExpression(token); |
| 2711 if (!identical(begin.endGroup, token)) { | 2712 if (!identical(begin.endGroup, token)) { |
| 2712 reportUnrecoverableError(token, ErrorKind.UnexpectedToken); | 2713 reportUnrecoverableError(token, ErrorKind.UnexpectedToken); |
| 2713 token = begin.endGroup; | 2714 token = begin.endGroup; |
| 2714 } | 2715 } |
| 2715 listener.handleParenthesizedExpression(begin); | 2716 listener.handleParenthesizedExpression(begin); |
| 2716 return expect(')', token); | 2717 return expect(')', token); |
| 2717 } | 2718 } |
| 2718 | 2719 |
| 2719 Token parseThisExpression(Token token) { | 2720 Token parseThisExpression(Token token) { |
| 2721 Token beginToken = token; |
| 2720 listener.handleThisExpression(token); | 2722 listener.handleThisExpression(token); |
| 2721 token = token.next; | 2723 token = token.next; |
| 2722 if (optional('(', token)) { | 2724 if (optional('(', token)) { |
| 2723 // Constructor forwarding. | 2725 // Constructor forwarding. |
| 2724 listener.handleNoTypeArguments(token); | 2726 listener.handleNoTypeArguments(token); |
| 2725 token = parseArguments(token); | 2727 token = parseArguments(token); |
| 2726 listener.endSend(token); | 2728 listener.endSend(beginToken, token); |
| 2727 } | 2729 } |
| 2728 return token; | 2730 return token; |
| 2729 } | 2731 } |
| 2730 | 2732 |
| 2731 Token parseSuperExpression(Token token) { | 2733 Token parseSuperExpression(Token token) { |
| 2734 Token beginToken = token; |
| 2732 listener.handleSuperExpression(token); | 2735 listener.handleSuperExpression(token); |
| 2733 token = token.next; | 2736 token = token.next; |
| 2734 if (optional('(', token)) { | 2737 if (optional('(', token)) { |
| 2735 // Super constructor. | 2738 // Super constructor. |
| 2736 listener.handleNoTypeArguments(token); | 2739 listener.handleNoTypeArguments(token); |
| 2737 token = parseArguments(token); | 2740 token = parseArguments(token); |
| 2738 listener.endSend(token); | 2741 listener.endSend(beginToken, token); |
| 2739 } | 2742 } |
| 2740 return token; | 2743 return token; |
| 2741 } | 2744 } |
| 2742 | 2745 |
| 2743 /// '[' (expressionList ','?)? ']'. | 2746 /// '[' (expressionList ','?)? ']'. |
| 2744 /// | 2747 /// |
| 2745 /// Provide [constKeyword] if preceded by 'const', null if not. | 2748 /// Provide [constKeyword] if preceded by 'const', null if not. |
| 2746 /// This is a suffix parser because it is assumed that type arguments have | 2749 /// This is a suffix parser because it is assumed that type arguments have |
| 2747 /// been parsed, or `listener.handleNoTypeArguments(..)` has been executed. | 2750 /// been parsed, or `listener.handleNoTypeArguments(..)` has been executed. |
| 2748 Token parseLiteralListSuffix(Token token, Token constKeyword) { | 2751 Token parseLiteralListSuffix(Token token, Token constKeyword) { |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3017 listener.handleLiteralBool(token); | 3020 listener.handleLiteralBool(token); |
| 3018 return token.next; | 3021 return token.next; |
| 3019 } | 3022 } |
| 3020 | 3023 |
| 3021 Token parseLiteralNull(Token token) { | 3024 Token parseLiteralNull(Token token) { |
| 3022 listener.handleLiteralNull(token); | 3025 listener.handleLiteralNull(token); |
| 3023 return token.next; | 3026 return token.next; |
| 3024 } | 3027 } |
| 3025 | 3028 |
| 3026 Token parseSend(Token token, IdentifierContext context) { | 3029 Token parseSend(Token token, IdentifierContext context) { |
| 3030 Token beginToken = token; |
| 3027 listener.beginSend(token); | 3031 listener.beginSend(token); |
| 3028 token = parseIdentifier(token, context); | 3032 token = parseIdentifier(token, context); |
| 3029 if (isValidMethodTypeArguments(token)) { | 3033 if (isValidMethodTypeArguments(token)) { |
| 3030 token = parseTypeArgumentsOpt(token); | 3034 token = parseTypeArgumentsOpt(token); |
| 3031 } else { | 3035 } else { |
| 3032 listener.handleNoTypeArguments(token); | 3036 listener.handleNoTypeArguments(token); |
| 3033 } | 3037 } |
| 3034 token = parseArgumentsOpt(token); | 3038 token = parseArgumentsOpt(token); |
| 3035 listener.endSend(token); | 3039 listener.endSend(beginToken, token); |
| 3036 return token; | 3040 return token; |
| 3037 } | 3041 } |
| 3038 | 3042 |
| 3039 Token skipArgumentsOpt(Token token) { | 3043 Token skipArgumentsOpt(Token token) { |
| 3040 listener.handleNoArguments(token); | 3044 listener.handleNoArguments(token); |
| 3041 if (optional('(', token)) { | 3045 if (optional('(', token)) { |
| 3042 BeginGroupToken begin = token; | 3046 BeginGroupToken begin = token; |
| 3043 return begin.endGroup.next; | 3047 return begin.endGroup.next; |
| 3044 } else { | 3048 } else { |
| 3045 return token; | 3049 return token; |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3143 token = expectSemicolon(semicolon); | 3147 token = expectSemicolon(semicolon); |
| 3144 listener.endVariablesDeclaration(count, semicolon); | 3148 listener.endVariablesDeclaration(count, semicolon); |
| 3145 return token; | 3149 return token; |
| 3146 } else { | 3150 } else { |
| 3147 listener.endVariablesDeclaration(count, null); | 3151 listener.endVariablesDeclaration(count, null); |
| 3148 return token; | 3152 return token; |
| 3149 } | 3153 } |
| 3150 } | 3154 } |
| 3151 | 3155 |
| 3152 Token parseOptionallyInitializedIdentifier(Token token) { | 3156 Token parseOptionallyInitializedIdentifier(Token token) { |
| 3157 Token nameToken = token; |
| 3153 listener.beginInitializedIdentifier(token); | 3158 listener.beginInitializedIdentifier(token); |
| 3154 token = parseIdentifier(token, IdentifierContext.localVariableDeclaration); | 3159 token = parseIdentifier(token, IdentifierContext.localVariableDeclaration); |
| 3155 token = parseVariableInitializerOpt(token); | 3160 token = parseVariableInitializerOpt(token); |
| 3156 listener.endInitializedIdentifier(); | 3161 listener.endInitializedIdentifier(nameToken); |
| 3157 return token; | 3162 return token; |
| 3158 } | 3163 } |
| 3159 | 3164 |
| 3160 Token parseIfStatement(Token token) { | 3165 Token parseIfStatement(Token token) { |
| 3161 Token ifToken = token; | 3166 Token ifToken = token; |
| 3162 listener.beginIfStatement(ifToken); | 3167 listener.beginIfStatement(ifToken); |
| 3163 token = expect('if', token); | 3168 token = expect('if', token); |
| 3164 token = parseParenthesizedExpression(token); | 3169 token = parseParenthesizedExpression(token); |
| 3165 listener.beginThenStatement(token); | 3170 listener.beginThenStatement(token); |
| 3166 token = parseStatement(token); | 3171 token = parseStatement(token); |
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3573 break; | 3578 break; |
| 3574 } | 3579 } |
| 3575 if (isRecoverable) { | 3580 if (isRecoverable) { |
| 3576 listener.handleRecoverableError(token, kind, arguments); | 3581 listener.handleRecoverableError(token, kind, arguments); |
| 3577 return null; | 3582 return null; |
| 3578 } else { | 3583 } else { |
| 3579 return listener.handleUnrecoverableError(token, kind, arguments); | 3584 return listener.handleUnrecoverableError(token, kind, arguments); |
| 3580 } | 3585 } |
| 3581 } | 3586 } |
| 3582 } | 3587 } |
| OLD | NEW |