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

Side by Side Diff: pkg/analyzer/lib/src/fasta/ast_builder.dart

Issue 2914373002: Restore invariant that stack is empty in parseFunctionBody. (Closed)
Patch Set: Created 3 years, 6 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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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.analyzer.ast_builder; 5 library fasta.analyzer.ast_builder;
6 6
7 import 'package:analyzer/analyzer.dart'; 7 import 'package:analyzer/analyzer.dart';
8 import 'package:analyzer/dart/ast/ast_factory.dart' show AstFactory; 8 import 'package:analyzer/dart/ast/ast_factory.dart' show AstFactory;
9 import 'package:analyzer/dart/ast/standard_ast_factory.dart' as standard; 9 import 'package:analyzer/dart/ast/standard_ast_factory.dart' as standard;
10 import 'package:analyzer/dart/ast/token.dart' as analyzer show Token; 10 import 'package:analyzer/dart/ast/token.dart' as analyzer show Token;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 * `native` support. 51 * `native` support.
52 */ 52 */
53 Parser parser; 53 Parser parser;
54 54
55 bool parseGenericMethodComments = false; 55 bool parseGenericMethodComments = false;
56 56
57 /// The name of the class currently being parsed, or `null` if no class is 57 /// The name of the class currently being parsed, or `null` if no class is
58 /// being parsed. 58 /// being parsed.
59 String className; 59 String className;
60 60
61 /// If true, this is building a full AST. Otherwise, only create method
62 /// bodies.
63 final bool isFullAst;
64
61 AstBuilder(this.errorReporter, this.library, this.member, this.elementStore, 65 AstBuilder(this.errorReporter, this.library, this.member, this.elementStore,
62 Scope scope, 66 Scope scope, this.isFullAst,
63 [Uri uri]) 67 [Uri uri])
64 : uri = uri ?? library.fileUri, 68 : uri = uri ?? library.fileUri,
65 super(scope); 69 super(scope);
66 70
67 createJumpTarget(JumpTargetKind kind, int charOffset) { 71 createJumpTarget(JumpTargetKind kind, int charOffset) {
68 // TODO(ahe): Implement jump targets. 72 // TODO(ahe): Implement jump targets.
69 return null; 73 return null;
70 } 74 }
71 75
72 void beginLiteralString(Token token) { 76 void beginLiteralString(Token token) {
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 Statement elsePart = popIfNotNull(elseToken); 400 Statement elsePart = popIfNotNull(elseToken);
397 Statement thenPart = pop(); 401 Statement thenPart = pop();
398 Expression condition = pop(); 402 Expression condition = pop();
399 analyzer.BeginToken leftParenthesis = ifToken.next; 403 analyzer.BeginToken leftParenthesis = ifToken.next;
400 push(ast.ifStatement(ifToken, ifToken.next, condition, 404 push(ast.ifStatement(ifToken, ifToken.next, condition,
401 leftParenthesis.endGroup, thenPart, elseToken, elsePart)); 405 leftParenthesis.endGroup, thenPart, elseToken, elsePart));
402 } 406 }
403 407
404 void handleNoInitializers() { 408 void handleNoInitializers() {
405 debugEvent("NoInitializers"); 409 debugEvent("NoInitializers");
410 if (!isFullAst) return;
406 push(NullValue.ConstructorInitializerSeparator); 411 push(NullValue.ConstructorInitializerSeparator);
407 push(NullValue.ConstructorInitializers); 412 push(NullValue.ConstructorInitializers);
408 } 413 }
409 414
410 void endInitializers(int count, Token beginToken, Token endToken) { 415 void endInitializers(int count, Token beginToken, Token endToken) {
411 debugEvent("Initializers"); 416 debugEvent("Initializers");
412 List<Object> initializerObjects = popList(count) ?? const []; 417 List<Object> initializerObjects = popList(count) ?? const [];
418 if (!isFullAst) return;
413 419
414 push(beginToken); 420 push(beginToken);
415 421
416 var initializers = <ConstructorInitializer>[]; 422 var initializers = <ConstructorInitializer>[];
417 for (Object initializerObject in initializerObjects) { 423 for (Object initializerObject in initializerObjects) {
418 if (initializerObject is FunctionExpressionInvocation) { 424 if (initializerObject is FunctionExpressionInvocation) {
419 Expression function = initializerObject.function; 425 Expression function = initializerObject.function;
420 if (function is SuperExpression) { 426 if (function is SuperExpression) {
421 initializers.add(ast.superConstructorInvocation(function.superKeyword, 427 initializers.add(ast.superConstructorInvocation(function.superKeyword,
422 null, null, initializerObject.argumentList)); 428 null, null, initializerObject.argumentList));
(...skipping 1592 matching lines...) Expand 10 before | Expand all | Expand 10 after
2015 } else if (identical('var', s)) { 2021 } else if (identical('var', s)) {
2016 finalConstOrVarKeyword = token; 2022 finalConstOrVarKeyword = token;
2017 } else if (identical('covariant', s)) { 2023 } else if (identical('covariant', s)) {
2018 covariantKeyword = token; 2024 covariantKeyword = token;
2019 } else { 2025 } else {
2020 internalError('Unhandled modifier: $s'); 2026 internalError('Unhandled modifier: $s');
2021 } 2027 }
2022 } 2028 }
2023 } 2029 }
2024 } 2030 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/fasta/analyzer_diet_listener.dart ('k') | pkg/analyzer/test/generated/parser_fasta_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698