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

Side by Side Diff: pkg/front_end/lib/src/fasta/parser/parser.dart

Issue 2736093003: [fasta] Add and correct offsets on nodes (Closed)
Patch Set: Created 3 years, 9 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
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 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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698