OLD | NEW |
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.outline_builder; | 5 library fasta.outline_builder; |
6 | 6 |
7 import 'package:kernel/ast.dart' show | 7 import 'package:kernel/ast.dart' show |
8 AsyncMarker, | 8 AsyncMarker, |
9 ProcedureKind; | 9 ProcedureKind; |
10 | 10 |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 | 134 |
135 @override | 135 @override |
136 void endExport(Token exportKeyword, Token semicolon) { | 136 void endExport(Token exportKeyword, Token semicolon) { |
137 debugEvent("Export"); | 137 debugEvent("Export"); |
138 List<Combinator> combinators = pop(); | 138 List<Combinator> combinators = pop(); |
139 Unhandled conditionalUris = pop(); | 139 Unhandled conditionalUris = pop(); |
140 String uri = pop(); | 140 String uri = pop(); |
141 List<MetadataBuilder> metadata = pop(); | 141 List<MetadataBuilder> metadata = pop(); |
142 library.addExport( | 142 library.addExport( |
143 metadata, uri, conditionalUris, combinators, exportKeyword.charOffset); | 143 metadata, uri, conditionalUris, combinators, exportKeyword.charOffset); |
144 checkEmpty(); | 144 checkEmpty(exportKeyword.charOffset); |
145 } | 145 } |
146 | 146 |
147 @override | 147 @override |
148 void endImport(Token importKeyword, Token deferredKeyword, Token asKeyword, | 148 void endImport(Token importKeyword, Token deferredKeyword, Token asKeyword, |
149 Token semicolon) { | 149 Token semicolon) { |
150 debugEvent("endImport"); | 150 debugEvent("endImport"); |
151 List<Combinator> combinators = pop(); | 151 List<Combinator> combinators = pop(); |
152 String prefix = popIfNotNull(asKeyword); | 152 String prefix = popIfNotNull(asKeyword); |
153 Unhandled conditionalUris = pop(); | 153 Unhandled conditionalUris = pop(); |
154 String uri = pop(); | 154 String uri = pop(); |
155 List<MetadataBuilder> metadata = pop(); | 155 List<MetadataBuilder> metadata = pop(); |
156 library.addImport(metadata, uri, conditionalUris, prefix, combinators, | 156 library.addImport(metadata, uri, conditionalUris, prefix, combinators, |
157 deferredKeyword != null, importKeyword.charOffset, | 157 deferredKeyword != null, importKeyword.charOffset, |
158 asKeyword?.next?.charOffset ?? -1); | 158 asKeyword?.next?.charOffset ?? -1); |
159 checkEmpty(); | 159 checkEmpty(importKeyword.charOffset); |
160 } | 160 } |
161 | 161 |
162 @override | 162 @override |
163 void endPart(Token partKeyword, Token semicolon) { | 163 void endPart(Token partKeyword, Token semicolon) { |
164 debugEvent("Part"); | 164 debugEvent("Part"); |
165 String uri = pop(); | 165 String uri = pop(); |
166 List<MetadataBuilder> metadata = pop(); | 166 List<MetadataBuilder> metadata = pop(); |
167 library.addPart(metadata, uri); | 167 library.addPart(metadata, uri); |
168 checkEmpty(); | 168 checkEmpty(partKeyword.charOffset); |
169 } | 169 } |
170 | 170 |
171 @override | 171 @override |
172 void handleOperatorName(Token operatorKeyword, Token token) { | 172 void handleOperatorName(Token operatorKeyword, Token token) { |
173 debugEvent("OperatorName"); | 173 debugEvent("OperatorName"); |
174 push(operatorFromString(token.stringValue)); | 174 push(operatorFromString(token.stringValue)); |
175 } | 175 } |
176 | 176 |
177 @override | 177 @override |
178 void endIdentifierList(int count) { | 178 void endIdentifierList(int count) { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 List<TypeVariableBuilder> typeVariables = pop(); | 211 List<TypeVariableBuilder> typeVariables = pop(); |
212 String name = pop(); | 212 String name = pop(); |
213 if (typeVariables != null && supertype is MixinApplicationBuilder) { | 213 if (typeVariables != null && supertype is MixinApplicationBuilder) { |
214 supertype.typeVariables = typeVariables; | 214 supertype.typeVariables = typeVariables; |
215 supertype.subclassName = name; | 215 supertype.subclassName = name; |
216 } | 216 } |
217 int modifiers = Modifier.validate(pop()); | 217 int modifiers = Modifier.validate(pop()); |
218 List<MetadataBuilder> metadata = pop(); | 218 List<MetadataBuilder> metadata = pop(); |
219 library.addClass(metadata, modifiers, name, typeVariables, supertype, | 219 library.addClass(metadata, modifiers, name, typeVariables, supertype, |
220 interfaces, beginToken.charOffset); | 220 interfaces, beginToken.charOffset); |
221 checkEmpty(); | 221 checkEmpty(beginToken.charOffset); |
222 } | 222 } |
223 | 223 |
224 ProcedureKind computeProcedureKind(Token token) { | 224 ProcedureKind computeProcedureKind(Token token) { |
225 if (token == null) return ProcedureKind.Method; | 225 if (token == null) return ProcedureKind.Method; |
226 if (optional("get", token)) return ProcedureKind.Getter; | 226 if (optional("get", token)) return ProcedureKind.Getter; |
227 if (optional("set", token)) return ProcedureKind.Setter; | 227 if (optional("set", token)) return ProcedureKind.Setter; |
228 return internalError("Unhandled: ${token.value}"); | 228 return internalError("Unhandled: ${token.value}"); |
229 } | 229 } |
230 | 230 |
231 @override | 231 @override |
232 void beginTopLevelMethod(Token token, Token name) { | 232 void beginTopLevelMethod(Token token, Token name) { |
233 library.beginNestedDeclaration(name.value, hasMembers: false); | 233 library.beginNestedDeclaration(name.value, hasMembers: false); |
234 } | 234 } |
235 | 235 |
236 @override | 236 @override |
237 void endTopLevelMethod( | 237 void endTopLevelMethod( |
238 Token beginToken, Token getOrSet, Token endToken) { | 238 Token beginToken, Token getOrSet, Token endToken) { |
239 debugEvent("endTopLevelMethod"); | 239 debugEvent("endTopLevelMethod"); |
240 MethodBody kind = pop(); | 240 MethodBody kind = pop(); |
241 AsyncMarker asyncModifier = pop(); | 241 AsyncMarker asyncModifier = pop(); |
242 List<FormalParameterBuilder> formals = pop(); | 242 List<FormalParameterBuilder> formals = pop(); |
243 List<TypeVariableBuilder> typeVariables = pop(); | 243 List<TypeVariableBuilder> typeVariables = pop(); |
244 String name = pop(); | 244 String name = pop(); |
245 TypeBuilder returnType = pop(); | 245 TypeBuilder returnType = pop(); |
246 int modifiers = Modifier.validate(pop(), | 246 int modifiers = Modifier.validate(pop(), |
247 isAbstract: kind == MethodBody.Abstract); | 247 isAbstract: kind == MethodBody.Abstract); |
248 List<MetadataBuilder> metadata = pop(); | 248 List<MetadataBuilder> metadata = pop(); |
249 checkEmpty(); | 249 checkEmpty(beginToken.charOffset); |
250 library.addProcedure(metadata, modifiers, returnType, name, | 250 library.addProcedure(metadata, modifiers, returnType, name, |
251 typeVariables, formals, asyncModifier, computeProcedureKind(getOrSet), | 251 typeVariables, formals, asyncModifier, computeProcedureKind(getOrSet), |
252 beginToken.charOffset, nativeMethodName, isTopLevel: true); | 252 beginToken.charOffset, nativeMethodName, isTopLevel: true); |
253 nativeMethodName = null; | 253 nativeMethodName = null; |
254 } | 254 } |
255 | 255 |
256 @override | 256 @override |
257 void handleNoFunctionBody(Token token) { | 257 void handleNoFunctionBody(Token token) { |
258 debugEvent("NoFunctionBody"); | 258 debugEvent("NoFunctionBody"); |
259 push(MethodBody.Abstract); | 259 push(MethodBody.Abstract); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 String name = pop(); | 327 String name = pop(); |
328 if (typeVariables != null && mixinApplication is MixinApplicationBuilder) { | 328 if (typeVariables != null && mixinApplication is MixinApplicationBuilder) { |
329 mixinApplication.typeVariables = typeVariables; | 329 mixinApplication.typeVariables = typeVariables; |
330 mixinApplication.subclassName = name; | 330 mixinApplication.subclassName = name; |
331 } | 331 } |
332 int modifiers = Modifier.validate(pop()); | 332 int modifiers = Modifier.validate(pop()); |
333 List<MetadataBuilder> metadata = pop(); | 333 List<MetadataBuilder> metadata = pop(); |
334 library.addNamedMixinApplication( | 334 library.addNamedMixinApplication( |
335 metadata, name, typeVariables, modifiers, mixinApplication, interfaces, | 335 metadata, name, typeVariables, modifiers, mixinApplication, interfaces, |
336 classKeyword.charOffset); | 336 classKeyword.charOffset); |
337 checkEmpty(); | 337 checkEmpty(classKeyword.charOffset); |
338 } | 338 } |
339 | 339 |
340 @override | 340 @override |
341 void endTypeArguments(int count, Token beginToken, Token endToken) { | 341 void endTypeArguments(int count, Token beginToken, Token endToken) { |
342 debugEvent("TypeArguments"); | 342 debugEvent("TypeArguments"); |
343 push(popList(count) ?? NullValue.TypeArguments); | 343 push(popList(count) ?? NullValue.TypeArguments); |
344 } | 344 } |
345 | 345 |
346 @override | 346 @override |
347 void endType(Token beginToken, Token endToken) { | 347 void endType(Token beginToken, Token endToken) { |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
441 } | 441 } |
442 push(formals ?? NullValue.FormalParameters); | 442 push(formals ?? NullValue.FormalParameters); |
443 } | 443 } |
444 | 444 |
445 @override | 445 @override |
446 void endEnum(Token enumKeyword, Token endBrace, int count) { | 446 void endEnum(Token enumKeyword, Token endBrace, int count) { |
447 List<String> constants = popList(count); | 447 List<String> constants = popList(count); |
448 String name = pop(); | 448 String name = pop(); |
449 List<MetadataBuilder> metadata = pop(); | 449 List<MetadataBuilder> metadata = pop(); |
450 library.addEnum(metadata, name, constants, enumKeyword.charOffset); | 450 library.addEnum(metadata, name, constants, enumKeyword.charOffset); |
451 checkEmpty(); | 451 checkEmpty(enumKeyword.charOffset); |
452 } | 452 } |
453 | 453 |
454 @override | 454 @override |
455 void beginFunctionTypeAlias(Token token) { | 455 void beginFunctionTypeAlias(Token token) { |
456 library.beginNestedDeclaration(null, hasMembers: false); | 456 library.beginNestedDeclaration(null, hasMembers: false); |
457 } | 457 } |
458 | 458 |
459 @override | 459 @override |
460 void endFunctionTypeAlias(Token typedefKeyword, Token endToken) { | 460 void endFunctionTypeAlias(Token typedefKeyword, Token endToken) { |
461 debugEvent("endFunctionTypeAlias"); | 461 debugEvent("endFunctionTypeAlias"); |
462 List<FormalParameterBuilder> formals = pop(); | 462 List<FormalParameterBuilder> formals = pop(); |
463 List<TypeVariableBuilder> typeVariables = pop(); | 463 List<TypeVariableBuilder> typeVariables = pop(); |
464 String name = pop(); | 464 String name = pop(); |
465 TypeBuilder returnType = pop(); | 465 TypeBuilder returnType = pop(); |
466 List<MetadataBuilder> metadata = pop(); | 466 List<MetadataBuilder> metadata = pop(); |
467 library.addFunctionTypeAlias( | 467 library.addFunctionTypeAlias( |
468 metadata, returnType, name, typeVariables, formals, | 468 metadata, returnType, name, typeVariables, formals, |
469 typedefKeyword.charOffset); | 469 typedefKeyword.charOffset); |
470 checkEmpty(); | 470 checkEmpty(typedefKeyword.charOffset); |
471 } | 471 } |
472 | 472 |
473 @override | 473 @override |
474 void endTopLevelFields(int count, Token beginToken, Token endToken) { | 474 void endTopLevelFields(int count, Token beginToken, Token endToken) { |
475 debugEvent("endTopLevelFields"); | 475 debugEvent("endTopLevelFields"); |
476 List<String> names = popList(count); | 476 List<String> names = popList(count); |
477 TypeBuilder type = pop(); | 477 TypeBuilder type = pop(); |
478 int modifiers = Modifier.validate(pop()); | 478 int modifiers = Modifier.validate(pop()); |
479 List<MetadataBuilder> metadata = pop(); | 479 List<MetadataBuilder> metadata = pop(); |
480 library.addFields(metadata, modifiers, type, names); | 480 library.addFields(metadata, modifiers, type, names); |
481 checkEmpty(); | 481 checkEmpty(beginToken.charOffset); |
482 } | 482 } |
483 | 483 |
484 @override | 484 @override |
485 void endFields(int count, Token beginToken, Token endToken) { | 485 void endFields(int count, Token beginToken, Token endToken) { |
486 debugEvent("Fields"); | 486 debugEvent("Fields"); |
487 List<String> names = popList(count); | 487 List<String> names = popList(count); |
488 TypeBuilder type = pop(); | 488 TypeBuilder type = pop(); |
489 int modifiers = Modifier.validate(pop()); | 489 int modifiers = Modifier.validate(pop()); |
490 List<MetadataBuilder> metadata = pop(); | 490 List<MetadataBuilder> metadata = pop(); |
491 library.addFields(metadata, modifiers, type, names); | 491 library.addFields(metadata, modifiers, type, names); |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
614 Link<Token> handleMemberName(Link<Token> identifiers) { | 614 Link<Token> handleMemberName(Link<Token> identifiers) { |
615 if (!isDartLibrary || identifiers.isEmpty) return identifiers; | 615 if (!isDartLibrary || identifiers.isEmpty) return identifiers; |
616 return removeNativeClause(identifiers); | 616 return removeNativeClause(identifiers); |
617 } | 617 } |
618 | 618 |
619 @override | 619 @override |
620 void debugEvent(String name) { | 620 void debugEvent(String name) { |
621 // printEvent(name); | 621 // printEvent(name); |
622 } | 622 } |
623 } | 623 } |
OLD | NEW |