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

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

Issue 2747083005: Parse for-in statements with Fasta. (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
« no previous file with comments | « pkg/front_end/lib/src/fasta/parser/listener.dart ('k') | no next file » | 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) 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 3186 matching lines...) Expand 10 before | Expand all | Expand 10 after
3197 listener.endElseStatement(token); 3197 listener.endElseStatement(token);
3198 } 3198 }
3199 listener.endIfStatement(ifToken, elseToken); 3199 listener.endIfStatement(ifToken, elseToken);
3200 return token; 3200 return token;
3201 } 3201 }
3202 3202
3203 Token parseForStatement(Token awaitToken, Token token) { 3203 Token parseForStatement(Token awaitToken, Token token) {
3204 Token forToken = token; 3204 Token forToken = token;
3205 listener.beginForStatement(forToken); 3205 listener.beginForStatement(forToken);
3206 token = expect('for', token); 3206 token = expect('for', token);
3207 Token leftParenthesis = token;
3207 token = expect('(', token); 3208 token = expect('(', token);
3208 token = parseVariablesDeclarationOrExpressionOpt(token); 3209 token = parseVariablesDeclarationOrExpressionOpt(token);
3209 if (optional('in', token)) { 3210 if (optional('in', token)) {
3210 return parseForInRest(awaitToken, forToken, token); 3211 return parseForInRest(awaitToken, forToken, leftParenthesis, token);
3211 } else { 3212 } else {
3212 if (awaitToken != null) { 3213 if (awaitToken != null) {
3213 reportRecoverableError(awaitToken, ErrorKind.InvalidAwaitFor); 3214 reportRecoverableError(awaitToken, ErrorKind.InvalidAwaitFor);
3214 } 3215 }
3215 return parseForRest(forToken, token); 3216 return parseForRest(forToken, token);
3216 } 3217 }
3217 } 3218 }
3218 3219
3219 Token parseVariablesDeclarationOrExpressionOpt(Token token) { 3220 Token parseVariablesDeclarationOrExpressionOpt(Token token) {
3220 final String value = token.stringValue; 3221 final String value = token.stringValue;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
3253 } 3254 }
3254 } 3255 }
3255 token = expect(')', token); 3256 token = expect(')', token);
3256 listener.beginForStatementBody(token); 3257 listener.beginForStatementBody(token);
3257 token = parseStatement(token); 3258 token = parseStatement(token);
3258 listener.endForStatementBody(token); 3259 listener.endForStatementBody(token);
3259 listener.endForStatement(expressionCount, forToken, token); 3260 listener.endForStatement(expressionCount, forToken, token);
3260 return token; 3261 return token;
3261 } 3262 }
3262 3263
3263 Token parseForInRest(Token awaitToken, Token forToken, Token token) { 3264 Token parseForInRest(
3265 Token awaitToken, Token forToken, Token leftParenthesis, Token token) {
3264 assert(optional('in', token)); 3266 assert(optional('in', token));
3265 Token inKeyword = token; 3267 Token inKeyword = token;
3266 token = token.next; 3268 token = token.next;
3267 listener.beginForInExpression(token); 3269 listener.beginForInExpression(token);
3268 token = parseExpression(token); 3270 token = parseExpression(token);
3269 listener.endForInExpression(token); 3271 listener.endForInExpression(token);
3272 Token rightParenthesis = token;
3270 token = expect(')', token); 3273 token = expect(')', token);
3271 listener.beginForInBody(token); 3274 listener.beginForInBody(token);
3272 token = parseStatement(token); 3275 token = parseStatement(token);
3273 listener.endForInBody(token); 3276 listener.endForInBody(token);
3274 listener.endForIn(awaitToken, forToken, inKeyword, token); 3277 listener.endForIn(awaitToken, forToken, leftParenthesis, inKeyword,
3278 rightParenthesis, token);
3275 return token; 3279 return token;
3276 } 3280 }
3277 3281
3278 Token parseWhileStatement(Token token) { 3282 Token parseWhileStatement(Token token) {
3279 Token whileToken = token; 3283 Token whileToken = token;
3280 listener.beginWhileStatement(whileToken); 3284 listener.beginWhileStatement(whileToken);
3281 token = expect('while', token); 3285 token = expect('while', token);
3282 token = parseParenthesizedExpression(token); 3286 token = parseParenthesizedExpression(token);
3283 listener.beginWhileStatementBody(token); 3287 listener.beginWhileStatementBody(token);
3284 token = parseStatement(token); 3288 token = parseStatement(token);
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
3597 break; 3601 break;
3598 } 3602 }
3599 if (isRecoverable) { 3603 if (isRecoverable) {
3600 listener.handleRecoverableError(token, kind, arguments); 3604 listener.handleRecoverableError(token, kind, arguments);
3601 return null; 3605 return null;
3602 } else { 3606 } else {
3603 return listener.handleUnrecoverableError(token, kind, arguments); 3607 return listener.handleUnrecoverableError(token, kind, arguments);
3604 } 3608 }
3605 } 3609 }
3606 } 3610 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/fasta/parser/listener.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698