Index: pkg/compiler/lib/src/elements/resolution_types.dart |
diff --git a/pkg/compiler/lib/src/elements/resolution_types.dart b/pkg/compiler/lib/src/elements/resolution_types.dart |
index b8ed4fb8c1b169a802d0f2ee00bcee4cae82245f..07850b6985bda6925158d1165b0daa79bd1af90f 100644 |
--- a/pkg/compiler/lib/src/elements/resolution_types.dart |
+++ b/pkg/compiler/lib/src/elements/resolution_types.dart |
@@ -25,7 +25,6 @@ enum ResolutionTypeKind { |
TYPE_VARIABLE, |
MALFORMED_TYPE, |
DYNAMIC, |
- VOID, |
} |
abstract class ResolutionDartType implements DartType { |
@@ -110,7 +109,7 @@ abstract class ResolutionDartType implements DartType { |
bool get isDynamic => kind == ResolutionTypeKind.DYNAMIC; |
/// Is [: true :] if this type is the void type. |
- bool get isVoid => kind == ResolutionTypeKind.VOID; |
+ bool get isVoid => false; |
/// Is [: true :] if this is the type of `Object` from dart:core. |
bool get isObject => false; |
@@ -272,10 +271,9 @@ class MethodTypeVariableType extends ResolutionTypeVariableType { |
get containsMethodTypeVariableType => true; |
} |
-class ResolutionVoidType extends ResolutionDartType implements VoidType { |
- const ResolutionVoidType(); |
- |
- ResolutionTypeKind get kind => ResolutionTypeKind.VOID; |
+class ResolutionVoidType extends ResolutionInterfaceType implements VoidType { |
+ ResolutionVoidType(ClassElement objectElement) |
+ : super(objectElement); |
String get name => 'void'; |
@@ -291,6 +289,9 @@ class ResolutionVoidType extends ResolutionDartType implements VoidType { |
return visitor.visitVoidType(this, argument); |
} |
+ @override |
+ bool get isVoid => true; |
+ |
String toString() => name; |
int get hashCode => 6007; |
@@ -642,6 +643,16 @@ class ResolutionFunctionType extends ResolutionDartType |
optionalParameterTypes, namedParameters, namedParameterTypes); |
} |
+ factory ResolutionFunctionType.generalized( |
+ ResolutionDartType returnType, |
+ List<ResolutionDartType> parameterTypes, |
+ List<ResolutionDartType> optionalParameterTypes, |
+ List<String> namedParameters, |
+ List<ResolutionDartType> namedParameterTypes) { |
+ return new ResolutionFunctionType.internal(null, returnType, parameterTypes, |
+ optionalParameterTypes, namedParameters, namedParameterTypes); |
+ } |
+ |
ResolutionFunctionType.internal(FunctionTypedElement this.element, |
[ResolutionDartType returnType = const ResolutionDynamicType(), |
List<ResolutionDartType> parameterTypes = const <ResolutionDartType>[], |
@@ -989,7 +1000,7 @@ abstract class BaseDartTypeVisitor<R, A> extends DartTypeVisitor<R, A> { |
@override |
R visitVoidType(ResolutionVoidType type, A argument) => |
- visitType(type, argument); |
+ visitInterfaceType(type, argument); |
@override |
R visitTypeVariableType(ResolutionTypeVariableType type, A argument) => |
@@ -1033,11 +1044,6 @@ abstract class AbstractTypeRelation |
throw 'internal error: unknown type kind ${t.kind}'; |
} |
- bool visitVoidType(ResolutionVoidType t, ResolutionDartType s) { |
- assert(s is! ResolutionVoidType); |
- return false; |
- } |
- |
bool invalidTypeArguments(ResolutionDartType t, ResolutionDartType s); |
bool invalidFunctionReturnTypes(ResolutionDartType t, ResolutionDartType s); |
@@ -1743,7 +1749,7 @@ class Types implements DartTypes { |
if (a.treatAsDynamic || b.treatAsDynamic) |
return const ResolutionDynamicType(); |
- if (a.isVoid || b.isVoid) return const ResolutionVoidType(); |
+ if (a.isVoid || b.isVoid) return new ResolutionVoidType(a.element); |
if (a.isFunctionType && b.isFunctionType) { |
return computeLeastUpperBoundFunctionTypes(a, b); |