| 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 AsyncMarker, ProcedureKind; | 7 import 'package:kernel/ast.dart' show AsyncMarker, ProcedureKind; |
| 8 | 8 |
| 9 import '../parser/parser.dart' show FormalParameterType, optional; | 9 import '../parser/parser.dart' show FormalParameterType, optional; |
| 10 | 10 |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 TypeBuilder supertype = pop(); | 215 TypeBuilder supertype = pop(); |
| 216 List<TypeVariableBuilder> typeVariables = pop(); | 216 List<TypeVariableBuilder> typeVariables = pop(); |
| 217 String name = pop(); | 217 String name = pop(); |
| 218 if (typeVariables != null && supertype is MixinApplicationBuilder) { | 218 if (typeVariables != null && supertype is MixinApplicationBuilder) { |
| 219 supertype.typeVariables = typeVariables; | 219 supertype.typeVariables = typeVariables; |
| 220 supertype.subclassName = name; | 220 supertype.subclassName = name; |
| 221 } | 221 } |
| 222 int modifiers = Modifier.validate(pop()); | 222 int modifiers = Modifier.validate(pop()); |
| 223 List<MetadataBuilder> metadata = pop(); | 223 List<MetadataBuilder> metadata = pop(); |
| 224 library.addClass(metadata, modifiers, name, typeVariables, supertype, | 224 library.addClass(metadata, modifiers, name, typeVariables, supertype, |
| 225 interfaces, beginToken.charOffset); | 225 interfaces, classKeyword.next?.charOffset ?? beginToken.charOffset); |
| 226 checkEmpty(beginToken.charOffset); | 226 checkEmpty(beginToken.charOffset); |
| 227 } | 227 } |
| 228 | 228 |
| 229 ProcedureKind computeProcedureKind(Token token) { | 229 ProcedureKind computeProcedureKind(Token token) { |
| 230 if (token == null) return ProcedureKind.Method; | 230 if (token == null) return ProcedureKind.Method; |
| 231 if (optional("get", token)) return ProcedureKind.Getter; | 231 if (optional("get", token)) return ProcedureKind.Getter; |
| 232 if (optional("set", token)) return ProcedureKind.Setter; | 232 if (optional("set", token)) return ProcedureKind.Setter; |
| 233 return internalError("Unhandled: ${token.lexeme}"); | 233 return internalError("Unhandled: ${token.lexeme}"); |
| 234 } | 234 } |
| 235 | 235 |
| 236 @override | 236 @override |
| 237 void beginTopLevelMethod(Token token, Token name) { | 237 void beginTopLevelMethod(Token token, Token name) { |
| 238 library.beginNestedDeclaration(name.lexeme, hasMembers: false); | 238 library.beginNestedDeclaration(name.lexeme, hasMembers: false); |
| 239 } | 239 } |
| 240 | 240 |
| 241 @override | 241 @override |
| 242 void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) { | 242 void endTopLevelMethod(Token beginToken, Token getOrSet, |
| 243 Token formalParametersToken, Token endToken) { |
| 243 debugEvent("endTopLevelMethod"); | 244 debugEvent("endTopLevelMethod"); |
| 244 MethodBody kind = pop(); | 245 MethodBody kind = pop(); |
| 245 AsyncMarker asyncModifier = pop(); | 246 AsyncMarker asyncModifier = pop(); |
| 246 List<FormalParameterBuilder> formals = pop(); | 247 List<FormalParameterBuilder> formals = pop(); |
| 247 List<TypeVariableBuilder> typeVariables = pop(); | 248 List<TypeVariableBuilder> typeVariables = pop(); |
| 248 String name = pop(); | 249 String name = pop(); |
| 249 TypeBuilder returnType = pop(); | 250 TypeBuilder returnType = pop(); |
| 250 int modifiers = | 251 int modifiers = |
| 251 Modifier.validate(pop(), isAbstract: kind == MethodBody.Abstract); | 252 Modifier.validate(pop(), isAbstract: kind == MethodBody.Abstract); |
| 252 List<MetadataBuilder> metadata = pop(); | 253 List<MetadataBuilder> metadata = pop(); |
| 253 checkEmpty(beginToken.charOffset); | 254 checkEmpty(beginToken.charOffset); |
| 254 library.addProcedure( | 255 library.addProcedure( |
| 255 metadata, | 256 metadata, |
| 256 modifiers, | 257 modifiers, |
| 257 returnType, | 258 returnType, |
| 258 name, | 259 name, |
| 259 typeVariables, | 260 typeVariables, |
| 260 formals, | 261 formals, |
| 261 asyncModifier, | 262 asyncModifier, |
| 262 computeProcedureKind(getOrSet), | 263 computeProcedureKind(getOrSet), |
| 263 beginToken.charOffset, | 264 beginToken.charOffset, |
| 265 formalParametersToken.charOffset, |
| 264 endToken.charOffset, | 266 endToken.charOffset, |
| 265 nativeMethodName, | 267 nativeMethodName, |
| 266 isTopLevel: true); | 268 isTopLevel: true); |
| 267 nativeMethodName = null; | 269 nativeMethodName = null; |
| 268 } | 270 } |
| 269 | 271 |
| 270 @override | 272 @override |
| 271 void handleNoFunctionBody(Token token) { | 273 void handleNoFunctionBody(Token token) { |
| 272 debugEvent("NoFunctionBody"); | 274 debugEvent("NoFunctionBody"); |
| 273 push(MethodBody.Abstract); | 275 push(MethodBody.Abstract); |
| 274 } | 276 } |
| 275 | 277 |
| 276 @override | 278 @override |
| 277 void handleFunctionBodySkipped(Token token) { | 279 void handleFunctionBodySkipped(Token token) { |
| 278 debugEvent("handleFunctionBodySkipped"); | 280 debugEvent("handleFunctionBodySkipped"); |
| 279 push(MethodBody.Regular); | 281 push(MethodBody.Regular); |
| 280 } | 282 } |
| 281 | 283 |
| 282 @override | 284 @override |
| 283 void beginMethod(Token token, Token name) { | 285 void beginMethod(Token token, Token name) { |
| 284 library.beginNestedDeclaration(name.lexeme, hasMembers: false); | 286 library.beginNestedDeclaration(name.lexeme, hasMembers: false); |
| 285 } | 287 } |
| 286 | 288 |
| 287 @override | 289 @override |
| 288 void endMethod(Token getOrSet, Token beginToken, Token endToken) { | 290 void endMethod(Token getOrSet, Token beginToken, Token formalParametersToken, |
| 291 Token endToken) { |
| 289 debugEvent("Method"); | 292 debugEvent("Method"); |
| 290 MethodBody bodyKind = pop(); | 293 MethodBody bodyKind = pop(); |
| 291 if (bodyKind == MethodBody.RedirectingFactoryBody) { | 294 if (bodyKind == MethodBody.RedirectingFactoryBody) { |
| 292 // This will cause an error later. | 295 // This will cause an error later. |
| 293 pop(); | 296 pop(); |
| 294 } | 297 } |
| 295 AsyncMarker asyncModifier = pop(); | 298 AsyncMarker asyncModifier = pop(); |
| 296 List<FormalParameterBuilder> formals = pop(); | 299 List<FormalParameterBuilder> formals = pop(); |
| 297 List<TypeVariableBuilder> typeVariables = pop(); | 300 List<TypeVariableBuilder> typeVariables = pop(); |
| 298 dynamic nameOrOperator = pop(); | 301 dynamic nameOrOperator = pop(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 315 library.addProcedure( | 318 library.addProcedure( |
| 316 metadata, | 319 metadata, |
| 317 modifiers, | 320 modifiers, |
| 318 returnType, | 321 returnType, |
| 319 name, | 322 name, |
| 320 typeVariables, | 323 typeVariables, |
| 321 formals, | 324 formals, |
| 322 asyncModifier, | 325 asyncModifier, |
| 323 kind, | 326 kind, |
| 324 beginToken.charOffset, | 327 beginToken.charOffset, |
| 328 formalParametersToken.charOffset, |
| 325 endToken.charOffset, | 329 endToken.charOffset, |
| 326 nativeMethodName, | 330 nativeMethodName, |
| 327 isTopLevel: false); | 331 isTopLevel: false); |
| 328 nativeMethodName = null; | 332 nativeMethodName = null; |
| 329 } | 333 } |
| 330 | 334 |
| 331 @override | 335 @override |
| 332 void endMixinApplication(Token withKeyword) { | 336 void endMixinApplication(Token withKeyword) { |
| 333 debugEvent("MixinApplication"); | 337 debugEvent("MixinApplication"); |
| 334 List<TypeBuilder> mixins = pop(); | 338 List<TypeBuilder> mixins = pop(); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 push(popList(count) ?? NullValue.TypeVariables); | 395 push(popList(count) ?? NullValue.TypeVariables); |
| 392 } | 396 } |
| 393 | 397 |
| 394 @override | 398 @override |
| 395 void handleVoidKeyword(Token token) { | 399 void handleVoidKeyword(Token token) { |
| 396 debugEvent("VoidKeyword"); | 400 debugEvent("VoidKeyword"); |
| 397 push(library.addVoidType(token.charOffset)); | 401 push(library.addVoidType(token.charOffset)); |
| 398 } | 402 } |
| 399 | 403 |
| 400 @override | 404 @override |
| 401 void endFormalParameter( | 405 void endFormalParameter(Token covariantKeyword, Token thisKeyword, |
| 402 Token covariantKeyword, Token thisKeyword, FormalParameterType kind) { | 406 Token nameToken, FormalParameterType kind) { |
| 403 debugEvent("FormalParameter"); | 407 debugEvent("FormalParameter"); |
| 404 String name = pop(); | 408 String name = pop(); |
| 405 TypeBuilder type = pop(); | 409 TypeBuilder type = pop(); |
| 406 int modifiers = Modifier.validate(pop()); | 410 int modifiers = Modifier.validate(pop()); |
| 407 List<MetadataBuilder> metadata = pop(); | 411 List<MetadataBuilder> metadata = pop(); |
| 408 // TODO(ahe): Needs begin token. | 412 // TODO(ahe): Needs begin token. |
| 409 push(library.addFormalParameter(metadata, modifiers, type, name, | 413 push(library.addFormalParameter( |
| 410 thisKeyword != null, thisKeyword?.charOffset ?? -1)); | 414 metadata, |
| 415 modifiers, |
| 416 type, |
| 417 name, |
| 418 thisKeyword != null, |
| 419 thisKeyword?.charOffset ?? nameToken?.charOffset ?? -1)); |
| 411 } | 420 } |
| 412 | 421 |
| 413 @override | 422 @override |
| 414 void handleValuedFormalParameter(Token equals, Token token) { | 423 void handleValuedFormalParameter(Token equals, Token token) { |
| 415 debugEvent("ValuedFormalParameter"); | 424 debugEvent("ValuedFormalParameter"); |
| 416 // Ignored for now. | 425 // Ignored for now. |
| 417 } | 426 } |
| 418 | 427 |
| 419 @override | 428 @override |
| 420 void handleFormalParameterWithoutValue(Token token) { | 429 void handleFormalParameterWithoutValue(Token token) { |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 593 push(library.addConstructorReference( | 602 push(library.addConstructorReference( |
| 594 name, typeArguments, suffix, start.charOffset)); | 603 name, typeArguments, suffix, start.charOffset)); |
| 595 } | 604 } |
| 596 | 605 |
| 597 @override | 606 @override |
| 598 void beginFactoryMethod(Token token) { | 607 void beginFactoryMethod(Token token) { |
| 599 library.beginNestedDeclaration(null, hasMembers: false); | 608 library.beginNestedDeclaration(null, hasMembers: false); |
| 600 } | 609 } |
| 601 | 610 |
| 602 @override | 611 @override |
| 603 void endFactoryMethod( | 612 void endFactoryMethod(Token beginToken, Token factoryKeyword, |
| 604 Token beginToken, Token factoryKeyword, Token endToken) { | 613 Token formalParametersToken, Token endToken) { |
| 605 debugEvent("FactoryMethod"); | 614 debugEvent("FactoryMethod"); |
| 606 MethodBody kind = pop(); | 615 MethodBody kind = pop(); |
| 607 ConstructorReferenceBuilder redirectionTarget; | 616 ConstructorReferenceBuilder redirectionTarget; |
| 608 if (kind == MethodBody.RedirectingFactoryBody) { | 617 if (kind == MethodBody.RedirectingFactoryBody) { |
| 609 redirectionTarget = pop(); | 618 redirectionTarget = pop(); |
| 610 } | 619 } |
| 611 AsyncMarker asyncModifier = pop(); | 620 AsyncMarker asyncModifier = pop(); |
| 612 List<FormalParameterBuilder> formals = pop(); | 621 List<FormalParameterBuilder> formals = pop(); |
| 613 var name = pop(); | 622 var name = pop(); |
| 614 int modifiers = Modifier.validate(pop()); | 623 int modifiers = Modifier.validate(pop()); |
| 615 List<MetadataBuilder> metadata = pop(); | 624 List<MetadataBuilder> metadata = pop(); |
| 616 library.addFactoryMethod( | 625 library.addFactoryMethod( |
| 617 metadata, | 626 metadata, |
| 618 modifiers, | 627 modifiers, |
| 619 name, | 628 name, |
| 620 formals, | 629 formals, |
| 621 asyncModifier, | 630 asyncModifier, |
| 622 redirectionTarget, | 631 redirectionTarget, |
| 623 beginToken.charOffset, | 632 beginToken.charOffset, |
| 633 formalParametersToken.charOffset, |
| 624 endToken.charOffset, | 634 endToken.charOffset, |
| 625 nativeMethodName); | 635 nativeMethodName); |
| 626 nativeMethodName = null; | 636 nativeMethodName = null; |
| 627 } | 637 } |
| 628 | 638 |
| 629 @override | 639 @override |
| 630 void endRedirectingFactoryBody(Token beginToken, Token endToken) { | 640 void endRedirectingFactoryBody(Token beginToken, Token endToken) { |
| 631 debugEvent("RedirectingFactoryBody"); | 641 debugEvent("RedirectingFactoryBody"); |
| 632 push(MethodBody.RedirectingFactoryBody); | 642 push(MethodBody.RedirectingFactoryBody); |
| 633 } | 643 } |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 700 Link<Token> handleMemberName(Link<Token> identifiers) { | 710 Link<Token> handleMemberName(Link<Token> identifiers) { |
| 701 if (!isDartLibrary || identifiers.isEmpty) return identifiers; | 711 if (!isDartLibrary || identifiers.isEmpty) return identifiers; |
| 702 return removeNativeClause(identifiers); | 712 return removeNativeClause(identifiers); |
| 703 } | 713 } |
| 704 | 714 |
| 705 @override | 715 @override |
| 706 void debugEvent(String name) { | 716 void debugEvent(String name) { |
| 707 // printEvent(name); | 717 // printEvent(name); |
| 708 } | 718 } |
| 709 } | 719 } |
| OLD | NEW |