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.body_builder; | 5 library fasta.body_builder; |
6 | 6 |
7 import '../fasta_codes.dart' | 7 import '../fasta_codes.dart' |
8 show | 8 show |
9 FastaMessage, | 9 FastaMessage, |
10 codeConstFieldWithoutInitializer, | 10 codeConstFieldWithoutInitializer, |
(...skipping 2414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2425 ..fileOffset = formals.charOffset | 2425 ..fileOffset = formals.charOffset |
2426 ..fileEndOffset = endToken.charOffset)); | 2426 ..fileEndOffset = endToken.charOffset)); |
2427 } | 2427 } |
2428 | 2428 |
2429 @override | 2429 @override |
2430 void endFunctionDeclaration(Token token) { | 2430 void endFunctionDeclaration(Token token) { |
2431 debugEvent("FunctionDeclaration"); | 2431 debugEvent("FunctionDeclaration"); |
2432 FunctionNode function = pop(); | 2432 FunctionNode function = pop(); |
2433 exitLocalScope(); | 2433 exitLocalScope(); |
2434 var declaration = pop(); | 2434 var declaration = pop(); |
2435 var returnType = pop() ?? const DynamicType(); | 2435 var returnType = pop(); |
| 2436 var hasImplicitReturnType = returnType == null; |
| 2437 returnType ??= const DynamicType(); |
2436 pop(); // Modifiers. | 2438 pop(); // Modifiers. |
2437 exitFunction(); | 2439 exitFunction(); |
2438 if (declaration is FunctionDeclaration) { | 2440 if (declaration is FunctionDeclaration) { |
| 2441 KernelFunctionDeclaration.setHasImplicitReturnType( |
| 2442 declaration, hasImplicitReturnType); |
2439 function.returnType = returnType; | 2443 function.returnType = returnType; |
2440 declaration.variable.type = function.functionType; | 2444 declaration.variable.type = function.functionType; |
2441 declaration.function = function; | 2445 declaration.function = function; |
2442 function.parent = declaration; | 2446 function.parent = declaration; |
2443 } else { | 2447 } else { |
2444 // If [declaration] isn't a [FunctionDeclaration], it must be because | 2448 // If [declaration] isn't a [FunctionDeclaration], it must be because |
2445 // there was a compile-time error. | 2449 // there was a compile-time error. |
2446 | 2450 |
2447 // TODO(paulberry): ensure that when integrating with analyzer, type | 2451 // TODO(paulberry): ensure that when integrating with analyzer, type |
2448 // inference is still performed for the dropped declaration. | 2452 // inference is still performed for the dropped declaration. |
(...skipping 1233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3682 if (starToken == null) { | 3686 if (starToken == null) { |
3683 return AsyncMarker.Async; | 3687 return AsyncMarker.Async; |
3684 } else { | 3688 } else { |
3685 assert(identical(starToken.stringValue, "*")); | 3689 assert(identical(starToken.stringValue, "*")); |
3686 return AsyncMarker.AsyncStar; | 3690 return AsyncMarker.AsyncStar; |
3687 } | 3691 } |
3688 } else { | 3692 } else { |
3689 return internalError("Unknown async modifier: $asyncToken"); | 3693 return internalError("Unknown async modifier: $asyncToken"); |
3690 } | 3694 } |
3691 } | 3695 } |
OLD | NEW |