Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: pkg/compiler/lib/src/elements/types.dart

Issue 2944843002: All strong mode cleaning of dart2js. (Closed)
Patch Set: More issues discovered during testing. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/elements/resolution_types.dart ('k') | pkg/compiler/lib/src/elements/visitor.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/elements/types.dart
diff --git a/pkg/compiler/lib/src/elements/types.dart b/pkg/compiler/lib/src/elements/types.dart
index 1eb24697869121666dd011253b5d584178d22f4e..260ab3479c47f6818eeaaa4fdf92a5b92a22c1f6 100644
--- a/pkg/compiler/lib/src/elements/types.dart
+++ b/pkg/compiler/lib/src/elements/types.dart
@@ -125,7 +125,7 @@ class InterfaceType extends DartType {
}
@override
- R accept<R, A>(DartTypeVisitor visitor, A argument) =>
+ R accept<R, A>(DartTypeVisitor<R, A> visitor, A argument) =>
visitor.visitInterfaceType(this, argument);
int get hashCode {
@@ -190,7 +190,7 @@ class TypeVariableType extends DartType {
}
@override
- R accept<R, A>(DartTypeVisitor visitor, A argument) =>
+ R accept<R, A>(DartTypeVisitor<R, A> visitor, A argument) =>
visitor.visitTypeVariableType(this, argument);
int get hashCode => 17 * element.hashCode;
@@ -214,7 +214,7 @@ class VoidType extends DartType {
}
@override
- R accept<R, A>(DartTypeVisitor visitor, A argument) =>
+ R accept<R, A>(DartTypeVisitor<R, A> visitor, A argument) =>
visitor.visitVoidType(this, argument);
int get hashCode => 6007;
@@ -237,7 +237,7 @@ class DynamicType extends DartType {
}
@override
- R accept<R, A>(DartTypeVisitor visitor, A argument) =>
+ R accept<R, A>(DartTypeVisitor<R, A> visitor, A argument) =>
visitor.visitDynamicType(this, argument);
int get hashCode => 91;
@@ -309,7 +309,7 @@ class FunctionType extends DartType {
}
@override
- R accept<R, A>(DartTypeVisitor visitor, A argument) =>
+ R accept<R, A>(DartTypeVisitor<R, A> visitor, A argument) =>
visitor.visitFunctionType(this, argument);
int get hashCode {
@@ -410,53 +410,55 @@ List<DartType> _substTypes(
abstract class DartTypeVisitor<R, A> {
const DartTypeVisitor();
- R visit(DartType type, A argument) => type.accept(this, argument);
+ R visit(covariant DartType type, A argument) => type.accept(this, argument);
- R visitVoidType(VoidType type, A argument) => null;
+ R visitVoidType(covariant VoidType type, A argument) => null;
- R visitTypeVariableType(TypeVariableType type, A argument) => null;
+ R visitTypeVariableType(covariant TypeVariableType type, A argument) => null;
- R visitFunctionType(FunctionType type, A argument) => null;
+ R visitFunctionType(covariant FunctionType type, A argument) => null;
- R visitInterfaceType(InterfaceType type, A argument) => null;
+ R visitInterfaceType(covariant InterfaceType type, A argument) => null;
- R visitDynamicType(DynamicType type, A argument) => null;
+ R visitDynamicType(covariant DynamicType type, A argument) => null;
}
abstract class BaseDartTypeVisitor<R, A> extends DartTypeVisitor<R, A> {
const BaseDartTypeVisitor();
- R visitType(DartType type, A argument);
+ R visitType(covariant DartType type, A argument);
@override
- R visitVoidType(VoidType type, A argument) => visitType(type, argument);
+ R visitVoidType(covariant VoidType type, A argument) =>
+ visitType(type, argument);
@override
- R visitTypeVariableType(TypeVariableType type, A argument) =>
+ R visitTypeVariableType(covariant TypeVariableType type, A argument) =>
visitType(type, argument);
@override
- R visitFunctionType(FunctionType type, A argument) =>
+ R visitFunctionType(covariant FunctionType type, A argument) =>
visitType(type, argument);
@override
- R visitInterfaceType(InterfaceType type, A argument) =>
+ R visitInterfaceType(covariant InterfaceType type, A argument) =>
visitType(type, argument);
@override
- R visitDynamicType(DynamicType type, A argument) => visitType(type, argument);
+ R visitDynamicType(covariant DynamicType type, A argument) =>
+ visitType(type, argument);
}
/// Abstract visitor for determining relations between types.
-abstract class AbstractTypeRelation
- extends BaseDartTypeVisitor<bool, DartType> {
+abstract class AbstractTypeRelation<T extends DartType>
+ extends BaseDartTypeVisitor<bool, T> {
CommonElements get commonElements;
/// Ensures that the super hierarchy of [type] is computed.
void ensureResolved(InterfaceType type) {}
/// Returns the unaliased version of [type].
- DartType getUnaliased(DartType type) => type.unaliased;
+ T getUnaliased(T type) => type.unaliased;
/// Returns [type] as an instance of [cls], or `null` if [type] is not subtype
/// if [cls].
@@ -469,31 +471,31 @@ abstract class AbstractTypeRelation
/// Returns the declared bound of [element].
DartType getTypeVariableBound(TypeVariableEntity element);
- bool visitType(DartType t, DartType s) {
+ bool visitType(T t, T s) {
throw 'internal error: unknown type ${t}';
}
- bool visitVoidType(VoidType t, DartType s) {
+ bool visitVoidType(VoidType t, T s) {
assert(s is! VoidType);
return false;
}
- bool invalidTypeArguments(DartType t, DartType s);
+ bool invalidTypeArguments(T t, T s);
- bool invalidFunctionReturnTypes(DartType t, DartType s);
+ bool invalidFunctionReturnTypes(T t, T s);
- bool invalidFunctionParameterTypes(DartType t, DartType s);
+ bool invalidFunctionParameterTypes(T t, T s);
- bool invalidTypeVariableBounds(DartType bound, DartType s);
+ bool invalidTypeVariableBounds(T bound, T s);
- bool invalidCallableType(DartType callType, DartType s);
+ bool invalidCallableType(covariant DartType callType, covariant DartType s);
- bool visitInterfaceType(InterfaceType t, DartType s) {
+ bool visitInterfaceType(InterfaceType t, covariant DartType s) {
ensureResolved(t);
bool checkTypeArguments(InterfaceType instance, InterfaceType other) {
- List<DartType> tTypeArgs = instance.typeArguments;
- List<DartType> sTypeArgs = other.typeArguments;
+ List<T> tTypeArgs = instance.typeArguments;
+ List<T> sTypeArgs = other.typeArguments;
assert(tTypeArgs.length == sTypeArgs.length);
for (int i = 0; i < tTypeArgs.length; i++) {
if (invalidTypeArguments(tTypeArgs[i], sTypeArgs[i])) {
@@ -539,8 +541,8 @@ abstract class AbstractTypeRelation
// x.o : optionalParameterTypes on [:x:], and
// len(xs) : length of list [:xs:].
- Iterator<DartType> tps = tf.parameterTypes.iterator;
- Iterator<DartType> sps = sf.parameterTypes.iterator;
+ Iterator<T> tps = tf.parameterTypes.iterator;
+ Iterator<T> sps = sf.parameterTypes.iterator;
bool sNotEmpty = sps.moveNext();
bool tNotEmpty = tps.moveNext();
tNext() => (tNotEmpty = tps.moveNext());
@@ -571,9 +573,9 @@ abstract class AbstractTypeRelation
// subset relation with a linear search for [:sf.namedParameters:]
// within [:tf.namedParameters:].
List<String> tNames = tf.namedParameters;
- List<DartType> tTypes = tf.namedParameterTypes;
+ List<T> tTypes = tf.namedParameterTypes;
List<String> sNames = sf.namedParameters;
- List<DartType> sTypes = sf.namedParameterTypes;
+ List<T> sTypes = sf.namedParameterTypes;
int tIndex = 0;
int sIndex = 0;
while (tIndex < tNames.length && sIndex < sNames.length) {
@@ -618,7 +620,7 @@ abstract class AbstractTypeRelation
return true;
}
- bool visitTypeVariableType(TypeVariableType t, DartType s) {
+ bool visitTypeVariableType(TypeVariableType t, T s) {
// Identity check is handled in [isSubtype].
DartType bound = getTypeVariableBound(t.element);
if (bound.isTypeVariable) {
@@ -646,8 +648,9 @@ abstract class AbstractTypeRelation
}
}
-abstract class MoreSpecificVisitor extends AbstractTypeRelation {
- bool isMoreSpecific(DartType t, DartType s) {
+abstract class MoreSpecificVisitor<T extends DartType>
+ extends AbstractTypeRelation<T> {
+ bool isMoreSpecific(T t, T s) {
if (identical(t, s) || s.treatAsDynamic || t == commonElements.nullType) {
return true;
}
@@ -666,55 +669,56 @@ abstract class MoreSpecificVisitor extends AbstractTypeRelation {
return t.accept(this, s);
}
- bool invalidTypeArguments(DartType t, DartType s) {
+ bool invalidTypeArguments(T t, T s) {
return !isMoreSpecific(t, s);
}
- bool invalidFunctionReturnTypes(DartType t, DartType s) {
+ bool invalidFunctionReturnTypes(T t, T s) {
if (s.treatAsDynamic && t.isVoid) return true;
return !s.isVoid && !isMoreSpecific(t, s);
}
- bool invalidFunctionParameterTypes(DartType t, DartType s) {
+ bool invalidFunctionParameterTypes(T t, T s) {
return !isMoreSpecific(t, s);
}
- bool invalidTypeVariableBounds(DartType bound, DartType s) {
+ bool invalidTypeVariableBounds(T bound, T s) {
return !isMoreSpecific(bound, s);
}
- bool invalidCallableType(DartType callType, DartType s) {
+ bool invalidCallableType(covariant DartType callType, covariant DartType s) {
return !isMoreSpecific(callType, s);
}
}
/// Type visitor that determines the subtype relation two types.
-abstract class SubtypeVisitor extends MoreSpecificVisitor {
- bool isSubtype(DartType t, DartType s) {
+abstract class SubtypeVisitor<T extends DartType>
+ extends MoreSpecificVisitor<T> {
+ bool isSubtype(T t, T s) {
return t.treatAsDynamic || isMoreSpecific(t, s);
}
- bool isAssignable(DartType t, DartType s) {
+ bool isAssignable(T t, T s) {
return isSubtype(t, s) || isSubtype(s, t);
}
- bool invalidTypeArguments(DartType t, DartType s) {
+ bool invalidTypeArguments(T t, T s) {
return !isSubtype(t, s);
}
- bool invalidFunctionReturnTypes(DartType t, DartType s) {
+ bool invalidFunctionReturnTypes(T t, T s) {
return !s.isVoid && !isAssignable(t, s);
}
- bool invalidFunctionParameterTypes(DartType t, DartType s) {
+ bool invalidFunctionParameterTypes(T t, T s) {
return !isAssignable(t, s);
}
- bool invalidTypeVariableBounds(DartType bound, DartType s) {
+ bool invalidTypeVariableBounds(T bound, T s) {
return !isSubtype(bound, s);
}
- bool invalidCallableType(DartType callType, DartType s) {
+ bool invalidCallableType(covariant DartType callType, covariant DartType s) {
return !isSubtype(callType, s);
}
}
@@ -722,8 +726,9 @@ abstract class SubtypeVisitor extends MoreSpecificVisitor {
/// Type visitor that determines one type could a subtype of another given the
/// right type variable substitution. The computation is approximate and returns
/// `false` only if we are sure no such substitution exists.
-abstract class PotentialSubtypeVisitor extends SubtypeVisitor {
- bool isSubtype(DartType t, DartType s) {
+abstract class PotentialSubtypeVisitor<T extends DartType>
+ extends SubtypeVisitor<T> {
+ bool isSubtype(T t, T s) {
if (t is TypeVariableType || s is TypeVariableType) {
return true;
}
« no previous file with comments | « pkg/compiler/lib/src/elements/resolution_types.dart ('k') | pkg/compiler/lib/src/elements/visitor.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698