OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 dart2js.resolution.signatures; | 5 library dart2js.resolution.signatures; |
6 | 6 |
7 import '../common.dart'; | 7 import '../common.dart'; |
8 import '../common/resolution.dart'; | 8 import '../common/resolution.dart'; |
9 import '../elements/resolution_types.dart'; | 9 import '../elements/resolution_types.dart'; |
10 import '../elements/elements.dart'; | 10 import '../elements/elements.dart'; |
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
392 } else { | 392 } else { |
393 AsyncMarker asyncMarker = AsyncMarker.SYNC; | 393 AsyncMarker asyncMarker = AsyncMarker.SYNC; |
394 if (isFunctionExpression) { | 394 if (isFunctionExpression) { |
395 // Use async marker to determine the return type of function | 395 // Use async marker to determine the return type of function |
396 // expressions. | 396 // expressions. |
397 FunctionElement function = element; | 397 FunctionElement function = element; |
398 asyncMarker = function.asyncMarker; | 398 asyncMarker = function.asyncMarker; |
399 } | 399 } |
400 switch (asyncMarker) { | 400 switch (asyncMarker) { |
401 case AsyncMarker.SYNC: | 401 case AsyncMarker.SYNC: |
402 returnType = visitor.resolveReturnType(returnNode); | 402 returnType = visitor.resolveTypeAnnotation(returnNode); |
403 break; | 403 break; |
404 case AsyncMarker.SYNC_STAR: | 404 case AsyncMarker.SYNC_STAR: |
405 ResolutionInterfaceType iterableType = | 405 ResolutionInterfaceType iterableType = |
406 resolution.commonElements.iterableType(); | 406 resolution.commonElements.iterableType(); |
407 returnType = iterableType; | 407 returnType = iterableType; |
408 break; | 408 break; |
409 case AsyncMarker.ASYNC: | 409 case AsyncMarker.ASYNC: |
410 ResolutionInterfaceType futureType = | 410 ResolutionInterfaceType futureType = |
411 resolution.commonElements.futureType(); | 411 resolution.commonElements.futureType(); |
412 returnType = futureType; | 412 returnType = futureType; |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 requiredParameters: parameters, | 475 requiredParameters: parameters, |
476 optionalParameters: visitor.optionalParameters, | 476 optionalParameters: visitor.optionalParameters, |
477 requiredParameterCount: requiredParameterCount, | 477 requiredParameterCount: requiredParameterCount, |
478 optionalParameterCount: visitor.optionalParameterCount, | 478 optionalParameterCount: visitor.optionalParameterCount, |
479 optionalParametersAreNamed: visitor.optionalParametersAreNamed, | 479 optionalParametersAreNamed: visitor.optionalParametersAreNamed, |
480 orderedOptionalParameters: orderedOptionalParameters, | 480 orderedOptionalParameters: orderedOptionalParameters, |
481 type: type); | 481 type: type); |
482 } | 482 } |
483 | 483 |
484 ResolutionDartType resolveTypeAnnotation(TypeAnnotation annotation) { | 484 ResolutionDartType resolveTypeAnnotation(TypeAnnotation annotation) { |
485 ResolutionDartType type = resolveReturnType(annotation); | |
486 if (type.isVoid) { | |
487 reporter.reportErrorMessage(annotation, MessageKind.VOID_NOT_ALLOWED); | |
488 } | |
489 return type; | |
490 } | |
491 | |
492 ResolutionDartType resolveReturnType(TypeAnnotation annotation) { | |
493 if (annotation == null) return const ResolutionDynamicType(); | 485 if (annotation == null) return const ResolutionDynamicType(); |
494 ResolutionDartType result = resolver.resolveTypeAnnotation(annotation); | 486 ResolutionDartType result = resolver.resolveTypeAnnotation(annotation); |
495 if (result == null) { | 487 if (result == null) { |
496 return const ResolutionDynamicType(); | 488 return const ResolutionDynamicType(); |
497 } | 489 } |
498 return result; | 490 return result; |
499 } | 491 } |
500 } | 492 } |
501 | 493 |
502 /// Used during `SignatureResolver.analyze` to provide access to the type | 494 /// Used during `SignatureResolver.analyze` to provide access to the type |
503 /// variables of the function signature itself when its signature is analyzed. | 495 /// variables of the function signature itself when its signature is analyzed. |
504 class FunctionSignatureBuildingScope extends TypeVariablesScope { | 496 class FunctionSignatureBuildingScope extends TypeVariablesScope { |
505 @override | 497 @override |
506 final List<ResolutionDartType> typeVariables; | 498 final List<ResolutionDartType> typeVariables; |
507 | 499 |
508 FunctionSignatureBuildingScope(Scope parent, this.typeVariables) | 500 FunctionSignatureBuildingScope(Scope parent, this.typeVariables) |
509 : super(parent); | 501 : super(parent); |
510 | 502 |
511 String toString() => 'FunctionSignatureBuildingScope($typeVariables)'; | 503 String toString() => 'FunctionSignatureBuildingScope($typeVariables)'; |
512 } | 504 } |
OLD | NEW |