Index: sdk/lib/_internal/compiler/implementation/typechecker.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/typechecker.dart b/sdk/lib/_internal/compiler/implementation/typechecker.dart |
index f85ac49402e8bc600558731e9bc7e5c09f89f265..b192c23b444d7a8ec4862e84256633ca5fcf9365 100644 |
--- a/sdk/lib/_internal/compiler/implementation/typechecker.dart |
+++ b/sdk/lib/_internal/compiler/implementation/typechecker.dart |
@@ -87,11 +87,6 @@ abstract class DartType { |
bool operator ==(other); |
- /** |
- * Is [: true :] if this type has no explict type arguments. |
- */ |
- bool get isRaw => true; |
- |
DartType asRaw() => this; |
} |
@@ -269,7 +264,7 @@ class MalformedType extends DartType { |
} |
class InterfaceType extends DartType { |
- final ClassElement element; |
+ final Element element; |
final Link<DartType> typeArguments; |
InterfaceType(this.element, |
@@ -305,7 +300,7 @@ class InterfaceType extends DartType { |
String toString() { |
StringBuffer sb = new StringBuffer(); |
sb.add(name.slowToString()); |
- if (!isRaw) { |
+ if (!typeArguments.isEmpty) { |
sb.add('<'); |
typeArguments.printOn(sb, ', '); |
sb.add('>'); |
@@ -330,9 +325,10 @@ class InterfaceType extends DartType { |
return typeArguments == other.typeArguments; |
} |
- bool get isRaw => typeArguments.isEmpty || identical(this, element.rawType); |
- |
- InterfaceType asRaw() => element.rawType; |
+ InterfaceType asRaw() { |
+ if (typeArguments.isEmpty) return this; |
+ return new InterfaceType(element); |
+ } |
} |
class FunctionType extends DartType { |
@@ -449,7 +445,7 @@ class TypedefType extends DartType { |
String toString() { |
StringBuffer sb = new StringBuffer(); |
sb.add(name.slowToString()); |
- if (!isRaw) { |
+ if (!typeArguments.isEmpty) { |
sb.add('<'); |
typeArguments.printOn(sb, ', '); |
sb.add('>'); |
@@ -464,10 +460,6 @@ class TypedefType extends DartType { |
if (!identical(element, other.element)) return false; |
return typeArguments == other.typeArguments; |
} |
- |
- bool get isRaw => typeArguments.isEmpty || identical(this, element.rawType); |
- |
- TypedefType asRaw() => element.rawType; |
} |
/** |
@@ -485,7 +477,7 @@ class Types { |
final Compiler compiler; |
// TODO(karlklose): should we have a class Void? |
final VoidType voidType; |
- final DynamicType dynamicType; |
+ final InterfaceType dynamicType; |
Types(Compiler compiler, ClassElement dynamicElement) |
: this.with(compiler, dynamicElement, |
@@ -496,7 +488,7 @@ class Types { |
LibraryElement library) |
: voidType = new VoidType(new VoidElement(library)), |
dynamicType = new DynamicType(dynamicElement) { |
- dynamicElement.rawType = dynamicElement.thisType = dynamicType; |
+ dynamicElement.type = dynamicType; |
} |
/** Returns true if t is a subtype of s */ |
@@ -513,9 +505,8 @@ class Types { |
if (t is VoidType) { |
return false; |
- } else if (t is MalformedType || s is MalformedType) { |
- // A malformed type should be treated as dynamic. |
- return true; |
+ } else if (t is MalformedType) { |
+ return false; |
} else if (t is InterfaceType) { |
if (s is !InterfaceType) return false; |
ClassElement tc = t.element; |