Chromium Code Reviews| Index: pkg/analyzer/lib/src/generated/type_system.dart |
| diff --git a/pkg/analyzer/lib/src/generated/type_system.dart b/pkg/analyzer/lib/src/generated/type_system.dart |
| index 2f4229625823b42dd4f5c686ce762785c015c21c..5f0d96dc24a860984a28e1daaf5202fed40a2282 100644 |
| --- a/pkg/analyzer/lib/src/generated/type_system.dart |
| +++ b/pkg/analyzer/lib/src/generated/type_system.dart |
| @@ -171,32 +171,6 @@ class StrongTypeSystemImpl extends TypeSystem { |
| } |
| @override |
| - DartType tryPromoteToType(DartType to, DartType from) { |
| - // Allow promoting to a subtype, for example: |
| - // |
| - // f(Base b) { |
| - // if (b is SubTypeOfBase) { |
| - // // promote `b` to SubTypeOfBase for this block |
| - // } |
| - // } |
| - // |
| - // This allows the variable to be used wherever the supertype (here `Base`) |
| - // is expected, while gaining a more precise type. |
| - if (isSubtypeOf(to, from)) { |
| - return to; |
| - } |
| - // For a type parameter `T extends U`, allow promoting the upper bound |
| - // `U` to `S` where `S <: U`, yielding a type parameter `T extends S`. |
| - if (from is TypeParameterType) { |
| - if (isSubtypeOf(to, from.resolveToBound(DynamicTypeImpl.instance))) { |
| - return new TypeParameterMember(from.element, null, to).type; |
| - } |
| - } |
| - |
| - return null; |
| - } |
| - |
| - @override |
| FunctionType functionTypeToConcreteType( |
| TypeProvider typeProvider, FunctionType t) { |
| // TODO(jmesserly): should we use a real "fuzzyArrow" bit on the function |
| @@ -610,6 +584,32 @@ class StrongTypeSystemImpl extends TypeSystem { |
| } |
| @override |
| + DartType tryPromoteToType(DartType to, DartType from) { |
|
Brian Wilkerson
2016/11/30 20:05:31
This appears to just be sorting changes. Let me kn
Paul Berry
2016/11/30 20:21:57
Whoops, you are correct. Reverted this file to av
|
| + // Allow promoting to a subtype, for example: |
| + // |
| + // f(Base b) { |
| + // if (b is SubTypeOfBase) { |
| + // // promote `b` to SubTypeOfBase for this block |
| + // } |
| + // } |
| + // |
| + // This allows the variable to be used wherever the supertype (here `Base`) |
| + // is expected, while gaining a more precise type. |
| + if (isSubtypeOf(to, from)) { |
| + return to; |
| + } |
| + // For a type parameter `T extends U`, allow promoting the upper bound |
| + // `U` to `S` where `S <: U`, yielding a type parameter `T extends S`. |
| + if (from is TypeParameterType) { |
| + if (isSubtypeOf(to, from.resolveToBound(DynamicTypeImpl.instance))) { |
| + return new TypeParameterMember(from.element, null, to).type; |
| + } |
| + } |
| + |
| + return null; |
| + } |
| + |
| + @override |
| DartType typeToConcreteType(TypeProvider typeProvider, DartType t) { |
| if (t is FunctionType) { |
| return functionTypeToConcreteType(typeProvider, t); |
| @@ -1046,20 +1046,6 @@ class StrongTypeSystemImpl extends TypeSystem { |
| */ |
| abstract class TypeSystem { |
| /** |
| - * Tries to promote from the first type from the second type, and returns the |
| - * promoted type if it succeeds, otherwise null. |
| - * |
| - * In the Dart 1 type system, it is not possible to promote from or to |
| - * `dynamic`, and we must be promoting to a more specific type, see |
| - * [isMoreSpecificThan]. Also it will always return the promote [to] type or |
| - * null. |
| - * |
| - * In strong mode, this can potentially return a different type, see |
| - * the override in [StrongTypeSystemImpl]. |
| - */ |
| - DartType tryPromoteToType(DartType to, DartType from); |
| - |
| - /** |
| * Make a function type concrete. |
| * |
| * Normally we treat dynamically typed parameters as bottom for function |
| @@ -1272,6 +1258,20 @@ abstract class TypeSystem { |
| } |
| /** |
| + * Tries to promote from the first type from the second type, and returns the |
| + * promoted type if it succeeds, otherwise null. |
| + * |
| + * In the Dart 1 type system, it is not possible to promote from or to |
| + * `dynamic`, and we must be promoting to a more specific type, see |
| + * [isMoreSpecificThan]. Also it will always return the promote [to] type or |
| + * null. |
| + * |
| + * In strong mode, this can potentially return a different type, see |
| + * the override in [StrongTypeSystemImpl]. |
| + */ |
| + DartType tryPromoteToType(DartType to, DartType from); |
| + |
| + /** |
| * Given a [DartType] type, return the [TypeParameterElement]s corresponding |
| * to its formal type parameters (if any). |
| * |
| @@ -1423,18 +1423,6 @@ class TypeSystemImpl extends TypeSystem { |
| TypeSystemImpl(); |
| @override |
| - DartType tryPromoteToType(DartType to, DartType from) { |
| - // Declared type should not be "dynamic". |
| - // Promoted type should not be "dynamic". |
| - // Promoted type should be more specific than declared. |
| - if (!from.isDynamic && !to.isDynamic && to.isMoreSpecificThan(from)) { |
| - return to; |
| - } else { |
| - return null; |
| - } |
| - } |
| - |
| - @override |
| FunctionType functionTypeToConcreteType( |
| TypeProvider typeProvider, FunctionType t) => |
| t; |
| @@ -1469,6 +1457,18 @@ class TypeSystemImpl extends TypeSystem { |
| } |
| @override |
| + DartType tryPromoteToType(DartType to, DartType from) { |
| + // Declared type should not be "dynamic". |
| + // Promoted type should not be "dynamic". |
| + // Promoted type should be more specific than declared. |
| + if (!from.isDynamic && !to.isDynamic && to.isMoreSpecificThan(from)) { |
| + return to; |
| + } else { |
| + return null; |
| + } |
| + } |
| + |
| + @override |
| DartType typeToConcreteType(TypeProvider typeProvider, DartType t) => t; |
| @override |