| Index: lib/compiler/implementation/resolver.dart
|
| ===================================================================
|
| --- lib/compiler/implementation/resolver.dart (revision 12312)
|
| +++ lib/compiler/implementation/resolver.dart (working copy)
|
| @@ -211,7 +211,9 @@
|
| return visitor.mapping;
|
| }
|
|
|
| - DartType resolveTypeAnnotation(Element element, TypeAnnotation annotation) {
|
| + DartType resolveTypeAnnotation(Element element,
|
| + TypeAnnotation annotation,
|
| + {bool isVoidAllowed: false}) {
|
| if (annotation === null) return compiler.types.dynamicType;
|
| ResolverVisitor visitor = new ResolverVisitor(compiler, element);
|
| DartType result = visitor.resolveTypeAnnotation(annotation);
|
| @@ -219,6 +221,9 @@
|
| // TODO(karklose): warning.
|
| return compiler.types.dynamicType;
|
| }
|
| + if (result == compiler.types.voidType && !isVoidAllowed) {
|
| + error(annotation, MessageKind.VOID_NOT_ALLOWED);
|
| + }
|
| return result;
|
| }
|
|
|
| @@ -2372,6 +2377,8 @@
|
| Element visitIdentifier(Identifier node) {
|
| Element variables = new VariableListElement.node(currentDefinitions,
|
| ElementKind.VARIABLE_LIST, enclosingElement);
|
| + // Ensure a parameter is not typed 'void'.
|
| + variables.computeType(compiler);
|
| return new VariableElement(node.source, variables,
|
| ElementKind.PARAMETER, enclosingElement, node: node);
|
| }
|
| @@ -2491,7 +2498,8 @@
|
| requiredParameterCount = parametersBuilder.length;
|
| parameters = parametersBuilder.toLink();
|
| }
|
| - DartType returnType = compiler.resolveTypeAnnotation(element, returnNode);
|
| + DartType returnType = compiler.resolveTypeAnnotation(
|
| + element, returnNode, isVoidAllowed: true);
|
| return new FunctionSignature(parameters,
|
| visitor.optionalParameters,
|
| requiredParameterCount,
|
|
|