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

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

Issue 2711813002: Add AstBuilder support for enum declarations. (Closed)
Patch Set: Created 3 years, 10 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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 void handleIdentifier(Token token, IdentifierContext context) { 114 void handleIdentifier(Token token, IdentifierContext context) {
115 debugEvent("handleIdentifier"); 115 debugEvent("handleIdentifier");
116 String name = token.value; 116 String name = token.value;
117 SimpleIdentifier identifier = ast.simpleIdentifier(toAnalyzerToken(token)); 117 SimpleIdentifier identifier = ast.simpleIdentifier(toAnalyzerToken(token));
118 if (context.inLibraryOrPartOfDeclaration) { 118 if (context.inLibraryOrPartOfDeclaration) {
119 if (!context.isContinuation) { 119 if (!context.isContinuation) {
120 push([identifier]); 120 push([identifier]);
121 } else { 121 } else {
122 push(identifier); 122 push(identifier);
123 } 123 }
124 } else if (context == IdentifierContext.enumValueDeclaration) {
125 // TODO(paulberry): analyzer's ASTs allow for enumerated values to have
126 // metadata, but the spec doesn't permit it.
ahe 2017/02/23 16:47:25 I think we should accept it for error recovery.
127 List<Annotation> metadata;
128 // TODO(paulberry): capture doc comments. See dartbug.com/28851.
129 Comment comment = null;
130 push(ast.enumConstantDeclaration(comment, metadata, identifier));
124 } else { 131 } else {
125 if (context.isScopeReference) { 132 if (context.isScopeReference) {
126 Builder builder = scope.lookup(name, token.charOffset, uri); 133 Builder builder = scope.lookup(name, token.charOffset, uri);
127 if (builder != null) { 134 if (builder != null) {
128 Element element = elementStore[builder]; 135 Element element = elementStore[builder];
129 assert(element != null); 136 assert(element != null);
130 identifier.staticElement = element; 137 identifier.staticElement = element;
131 } 138 }
132 } 139 }
133 push(identifier); 140 push(identifier);
(...skipping 937 matching lines...) Expand 10 before | Expand all | Expand 10 after
1071 comment, 1078 comment,
1072 metadata, 1079 metadata,
1073 toAnalyzerToken(typedefKeyword), 1080 toAnalyzerToken(typedefKeyword),
1074 returnType, 1081 returnType,
1075 name, 1082 name,
1076 typeParameters, 1083 typeParameters,
1077 parameters, 1084 parameters,
1078 toAnalyzerToken(endToken))); 1085 toAnalyzerToken(endToken)));
1079 } 1086 }
1080 1087
1088 void endEnum(Token enumKeyword, Token endBrace, int count) {
1089 debugEvent("Enum");
1090 List<EnumConstantDeclaration> constants = popList(count);
1091 // TODO(paulberry,ahe): the parser should pass in the openBrace token.
1092 var openBrace = enumKeyword.next.next as BeginGroupToken;
ahe 2017/02/23 16:47:25 I would recommend against casts as they have to be
1093 // TODO(paulberry): what if the '}' is missing and the parser has performed
1094 // error recovery?
ahe 2017/02/23 16:47:25 The scanner always provides a synthetic end token.
1095 Token closeBrace = openBrace.endGroup;
1096 SimpleIdentifier name = pop();
1097 List<Annotation> metadata = pop();
1098 // TODO(paulberry): capture doc comments. See dartbug.com/28851.
1099 Comment comment = null;
1100 push(ast.enumDeclaration(
1101 comment,
1102 metadata,
1103 toAnalyzerToken(enumKeyword),
1104 name,
1105 toAnalyzerToken(openBrace),
1106 constants,
1107 toAnalyzerToken(closeBrace)));
1108 }
1109
1081 /** 1110 /**
1082 * Pop the modifiers list, if the list is empty return `null`, if the list 1111 * Pop the modifiers list, if the list is empty return `null`, if the list
1083 * has one item return it; otherwise return `null`. 1112 * has one item return it; otherwise return `null`.
1084 */ 1113 */
1085 Token _popOptionalSingleModifier() { 1114 Token _popOptionalSingleModifier() {
1086 List<Token> modifiers = pop(); 1115 List<Token> modifiers = pop();
1087 if (modifiers.length == 0) { 1116 if (modifiers.length == 0) {
1088 return null; 1117 return null;
1089 } else if (modifiers.length == 1) { 1118 } else if (modifiers.length == 1) {
1090 // TODO(scheglov): Verify that the modifier is valid. 1119 // TODO(scheglov): Verify that the modifier is valid.
(...skipping 29 matching lines...) Expand all
1120 /// [ClassDeclaration] or [ClassTypeAlias] object. 1149 /// [ClassDeclaration] or [ClassTypeAlias] object.
1121 class _MixinApplication { 1150 class _MixinApplication {
1122 final TypeName supertype; 1151 final TypeName supertype;
1123 1152
1124 final Token withKeyword; 1153 final Token withKeyword;
1125 1154
1126 final List<TypeName> mixinTypes; 1155 final List<TypeName> mixinTypes;
1127 1156
1128 _MixinApplication(this.supertype, this.withKeyword, this.mixinTypes); 1157 _MixinApplication(this.supertype, this.withKeyword, this.mixinTypes);
1129 } 1158 }
OLDNEW
« no previous file with comments | « pkg/analyzer/test/generated/parser_fasta_test.dart ('k') | pkg/front_end/lib/src/fasta/parser/listener.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698