Index: lib/compiler/implementation/resolver.dart |
diff --git a/lib/compiler/implementation/resolver.dart b/lib/compiler/implementation/resolver.dart |
index d9fde2468d86e0429f93c1ff3365cc7208d162d2..fff08484cefe6d0933519e8ef77ff381331b4d63 100644 |
--- a/lib/compiler/implementation/resolver.dart |
+++ b/lib/compiler/implementation/resolver.dart |
@@ -5,28 +5,28 @@ |
interface TreeElements { |
Element operator[](Node node); |
Selector getSelector(Send send); |
- Type getType(TypeAnnotation annotation); |
+ DartType getType(TypeAnnotation annotation); |
} |
class TreeElementMapping implements TreeElements { |
Map<Node, Element> map; |
Map<Node, Selector> selectors; |
- Map<TypeAnnotation, Type> types; |
+ Map<TypeAnnotation, DartType> types; |
TreeElementMapping() |
: map = new LinkedHashMap<Node, Element>(), |
selectors = new LinkedHashMap<Node, Selector>(), |
- types = new LinkedHashMap<TypeAnnotation, Type>(); |
+ types = new LinkedHashMap<TypeAnnotation, DartType>(); |
operator []=(Node node, Element element) => map[node] = element; |
operator [](Node node) => map[node]; |
void remove(Node node) { map.remove(node); } |
- void setType(TypeAnnotation annotation, Type type) { |
+ void setType(TypeAnnotation annotation, DartType type) { |
types[annotation] = type; |
} |
- Type getType(TypeAnnotation annotation) => types[annotation]; |
+ DartType getType(TypeAnnotation annotation) => types[annotation]; |
void setSelector(Node node, Selector selector) { |
selectors[node] = selector; |
@@ -150,7 +150,7 @@ class ResolverTask extends CompilerTask { |
if (constructor.defaultImplementation !== constructor) return; |
ClassElement intrface = constructor.getEnclosingClass(); |
if (!intrface.isInterface()) return; |
- Type defaultType = intrface.defaultClass; |
+ DartType defaultType = intrface.defaultClass; |
if (defaultType === null) { |
error(node, MessageKind.NO_DEFAULT_CLASS, [intrface.name]); |
} |
@@ -204,10 +204,10 @@ class ResolverTask extends CompilerTask { |
return visitor.mapping; |
} |
- Type resolveTypeAnnotation(Element element, TypeAnnotation annotation) { |
+ DartType resolveTypeAnnotation(Element element, TypeAnnotation annotation) { |
if (annotation === null) return compiler.types.dynamicType; |
ResolverVisitor visitor = new ResolverVisitor(compiler, element); |
- Type result = visitor.resolveTypeAnnotation(annotation); |
+ DartType result = visitor.resolveTypeAnnotation(annotation); |
if (result === null) { |
// TODO(karklose): warning. |
return compiler.types.dynamicType; |
@@ -230,7 +230,7 @@ class ResolverTask extends CompilerTask { |
MessageKind.CYCLIC_CLASS_HIERARCHY.error([cls.name]), |
api.Diagnostic.ERROR); |
cls.supertypeLoadState = STATE_DONE; |
- cls.allSupertypes = const EmptyLink<Type>().prepend( |
+ cls.allSupertypes = const EmptyLink<DartType>().prepend( |
compiler.objectClass.computeType(compiler)); |
// TODO(ahe): We should also set cls.supertype here to avoid |
// creating a malformed class hierarchy. |
@@ -427,7 +427,7 @@ class ResolverTask extends CompilerTask { |
FunctionType computeFunctionType(Element element, |
FunctionSignature signature) { |
- LinkBuilder<Type> parameterTypes = new LinkBuilder<Type>(); |
+ LinkBuilder<DartType> parameterTypes = new LinkBuilder<DartType>(); |
for (Link<Element> link = signature.requiredParameters; |
!link.isEmpty(); |
link = link.tail) { |
@@ -842,10 +842,10 @@ class TypeResolver { |
// flags instead of closures. |
// TODO(johnniwinther): Should never return [null] but instead an erroneous |
// type. |
- Type resolveTypeAnnotation(TypeAnnotation node, |
- [Scope inScope, ClassElement inClass, |
- onFailure(Node, MessageKind, [List arguments]), |
- whenResolved(Node, Type)]) { |
+ DartType resolveTypeAnnotation(TypeAnnotation node, |
+ [Scope inScope, ClassElement inClass, |
+ onFailure(Node, MessageKind, [List arguments]), |
+ whenResolved(Node, Type)]) { |
if (onFailure === null) { |
onFailure = (n, k, [arguments]) {}; |
} |
@@ -862,10 +862,10 @@ class TypeResolver { |
whenResolved); |
} |
- Type resolveTypeAnnotationInContext(Scope scope, TypeAnnotation node, |
- onFailure, whenResolved) { |
+ DartType resolveTypeAnnotationInContext(Scope scope, TypeAnnotation node, |
+ onFailure, whenResolved) { |
Element element = resolveTypeName(scope, node); |
- Type type; |
+ DartType type; |
if (element === null) { |
onFailure(node, MessageKind.CANNOT_RESOLVE_TYPE, [node.typeName]); |
} else if (!element.impliesType()) { |
@@ -877,7 +877,7 @@ class TypeResolver { |
} else if (element.isClass()) { |
ClassElement cls = element; |
cls.ensureResolved(compiler); |
- Link<Type> arguments = |
+ Link<DartType> arguments = |
resolveTypeArguments(node, cls.typeVariables, scope, |
onFailure, whenResolved); |
if (cls.typeVariables.isEmpty() && arguments.isEmpty()) { |
@@ -891,7 +891,7 @@ class TypeResolver { |
// TODO(ahe): Should be [ensureResolved]. |
compiler.resolveTypedef(typdef); |
typdef.computeType(compiler); |
- Link<Type> arguments = resolveTypeArguments( |
+ Link<DartType> arguments = resolveTypeArguments( |
node, typdef.typeVariables, |
scope, onFailure, whenResolved); |
if (typdef.typeVariables.isEmpty() && arguments.isEmpty()) { |
@@ -911,20 +911,20 @@ class TypeResolver { |
return type; |
} |
- Link<Type> resolveTypeArguments(TypeAnnotation node, |
- Link<Type> typeVariables, |
- Scope scope, onFailure, whenResolved) { |
+ Link<DartType> resolveTypeArguments(TypeAnnotation node, |
+ Link<DartType> typeVariables, |
+ Scope scope, onFailure, whenResolved) { |
if (node.typeArguments == null) { |
- return const EmptyLink<Type>(); |
+ return const EmptyLink<DartType>(); |
} |
- var arguments = new LinkBuilder<Type>(); |
+ var arguments = new LinkBuilder<DartType>(); |
for (Link<Node> typeArguments = node.typeArguments.nodes; |
!typeArguments.isEmpty(); |
typeArguments = typeArguments.tail) { |
if (typeVariables.isEmpty()) { |
onFailure(typeArguments.head, MessageKind.ADDITIONAL_TYPE_ARGUMENT); |
} |
- Type argType = resolveTypeAnnotationInContext(scope, |
+ DartType argType = resolveTypeAnnotationInContext(scope, |
typeArguments.head, |
onFailure, |
whenResolved); |
@@ -1029,7 +1029,7 @@ class ResolverVisitor extends CommonResolverVisitor<Element> { |
} |
Element visitTypeAnnotation(TypeAnnotation node) { |
- Type type = resolveTypeAnnotation(node); |
+ DartType type = resolveTypeAnnotation(node); |
if (type !== null) return type.element; |
return null; |
} |
@@ -1052,7 +1052,7 @@ class ResolverVisitor extends CommonResolverVisitor<Element> { |
return mapping[node] = element; |
} |
- Type useType(TypeAnnotation annotation, Type type) { |
+ DartType useType(TypeAnnotation annotation, DartType type) { |
if (type !== null) { |
mapping.setType(annotation, type); |
useElement(annotation, type.element); |
@@ -1242,7 +1242,7 @@ class ResolverVisitor extends CommonResolverVisitor<Element> { |
return target; |
} |
- Type resolveTypeTest(Node argument) { |
+ DartType resolveTypeTest(Node argument) { |
TypeAnnotation node = argument.asTypeAnnotation(); |
if (node === null) { |
// node is of the form !Type. |
@@ -1585,15 +1585,15 @@ class ResolverVisitor extends CommonResolverVisitor<Element> { |
return constructor; |
} |
- Type resolveTypeRequired(TypeAnnotation node) { |
+ DartType resolveTypeRequired(TypeAnnotation node) { |
bool old = typeRequired; |
typeRequired = true; |
- Type result = resolveTypeAnnotation(node); |
+ DartType result = resolveTypeAnnotation(node); |
typeRequired = old; |
return result; |
} |
- Type resolveTypeAnnotation(TypeAnnotation node) { |
+ DartType resolveTypeAnnotation(TypeAnnotation node) { |
Function report = typeRequired ? error : warning; |
return typeResolver.resolveTypeAnnotation(node, inScope: scope, |
onFailure: report, |
@@ -1858,7 +1858,7 @@ class ResolverVisitor extends CommonResolverVisitor<Element> { |
} |
} |
-class TypeDefinitionVisitor extends CommonResolverVisitor<Type> { |
+class TypeDefinitionVisitor extends CommonResolverVisitor<DartType> { |
Scope scope; |
TypeDeclarationElement element; |
TypeResolver typeResolver; |
@@ -1874,7 +1874,7 @@ class TypeDefinitionVisitor extends CommonResolverVisitor<Type> { |
var nameSet = new Set<SourceString>(); |
// Resolve the bounds of type variables. |
- Link<Type> typeLink = element.typeVariables; |
+ Link<DartType> typeLink = element.typeVariables; |
Link<Node> nodeLink = node.nodes; |
while (!nodeLink.isEmpty()) { |
TypeVariableType typeVariable = typeLink.head; |
@@ -1887,7 +1887,7 @@ class TypeDefinitionVisitor extends CommonResolverVisitor<Type> { |
TypeVariableElement variableElement = typeVariable.element; |
if (typeNode.bound !== null) { |
- Type boundType = typeResolver.resolveTypeAnnotation( |
+ DartType boundType = typeResolver.resolveTypeAnnotation( |
typeNode.bound, inScope: scope, onFailure: warning); |
if (boundType !== null && boundType.element == variableElement) { |
// TODO(johnniwinther): Check for more general cycles, like |
@@ -1949,7 +1949,7 @@ class ClassResolverVisitor extends TypeDefinitionVisitor { |
ClassResolverVisitor(Compiler compiler, ClassElement classElement) |
: super(compiler, classElement); |
- Type visitClassNode(ClassNode node) { |
+ DartType visitClassNode(ClassNode node) { |
compiler.ensure(element !== null); |
compiler.ensure(element.resolutionState == STATE_STARTED); |
@@ -1961,7 +1961,7 @@ class ClassResolverVisitor extends TypeDefinitionVisitor { |
resolveTypeVariableBounds(node.typeParameters); |
// Find super type. |
- Type supertype = visit(node.superclass); |
+ DartType supertype = visit(node.superclass); |
if (supertype !== null && supertype.element.isExtendable()) { |
element.supertype = supertype; |
if (isBlackListed(supertype)) { |
@@ -1982,11 +1982,11 @@ class ClassResolverVisitor extends TypeDefinitionVisitor { |
element.supertype = new InterfaceType(objectElement); |
} |
assert(element.interfaces === null); |
- Link<Type> interfaces = const EmptyLink<Type>(); |
+ Link<DartType> interfaces = const EmptyLink<DartType>(); |
for (Link<Node> link = node.interfaces.nodes; |
!link.isEmpty(); |
link = link.tail) { |
- Type interfaceType = visit(link.head); |
+ DartType interfaceType = visit(link.head); |
if (interfaceType !== null && interfaceType.element.isExtendable()) { |
interfaces = interfaces.prepend(interfaceType); |
if (isBlackListed(interfaceType)) { |
@@ -2006,11 +2006,11 @@ class ClassResolverVisitor extends TypeDefinitionVisitor { |
return element.computeType(compiler); |
} |
- Type visitTypeAnnotation(TypeAnnotation node) { |
+ DartType visitTypeAnnotation(TypeAnnotation node) { |
return visit(node.typeName); |
} |
- Type visitIdentifier(Identifier node) { |
+ DartType visitIdentifier(Identifier node) { |
Element element = scope.lookup(node.source); |
if (element === null) { |
error(node, MessageKind.CANNOT_RESOLVE_TYPE, [node]); |
@@ -2032,7 +2032,7 @@ class ClassResolverVisitor extends TypeDefinitionVisitor { |
return null; |
} |
- Type visitSend(Send node) { |
+ DartType visitSend(Send node) { |
Identifier prefix = node.receiver.asIdentifier(); |
if (prefix === null) { |
error(node.receiver, MessageKind.NOT_A_PREFIX, [node.receiver]); |
@@ -2058,17 +2058,18 @@ class ClassResolverVisitor extends TypeDefinitionVisitor { |
// TODO(karlklose): check if type arguments match, if a classelement occurs |
// more than once in the supertypes. |
if (cls.allSupertypes !== null) return; |
- final Type supertype = cls.supertype; |
+ final DartType supertype = cls.supertype; |
if (supertype != null) { |
ClassElement superElement = supertype.element; |
- Link<Type> superSupertypes = superElement.allSupertypes; |
+ Link<DartType> superSupertypes = superElement.allSupertypes; |
assert(superSupertypes !== null); |
- Link<Type> supertypes = new Link<Type>(supertype, superSupertypes); |
- for (Link<Type> interfaces = cls.interfaces; |
+ Link<DartType> supertypes = |
+ new Link<DartType>(supertype, superSupertypes); |
+ for (Link<DartType> interfaces = cls.interfaces; |
!interfaces.isEmpty(); |
interfaces = interfaces.tail) { |
ClassElement element = interfaces.head.element; |
- Link<Type> interfaceSupertypes = element.allSupertypes; |
+ Link<DartType> interfaceSupertypes = element.allSupertypes; |
assert(interfaceSupertypes !== null); |
supertypes = supertypes.reversePrependAll(interfaceSupertypes); |
supertypes = supertypes.prepend(interfaces.head); |
@@ -2076,7 +2077,7 @@ class ClassResolverVisitor extends TypeDefinitionVisitor { |
cls.allSupertypes = supertypes; |
} else { |
assert(cls === compiler.objectClass); |
- cls.allSupertypes = const EmptyLink<Type>(); |
+ cls.allSupertypes = const EmptyLink<DartType>(); |
} |
} |
@@ -2089,8 +2090,8 @@ class ClassResolverVisitor extends TypeDefinitionVisitor { |
SynthesizedConstructorElement constructor = |
new SynthesizedConstructorElement(element); |
element.addToScope(constructor, compiler); |
- Type returnType = compiler.types.voidType; |
- constructor.type = new FunctionType(returnType, const EmptyLink<Type>(), |
+ DartType returnType = compiler.types.voidType; |
+ constructor.type = new FunctionType(returnType, const EmptyLink<DartType>(), |
constructor); |
constructor.cachedNode = |
new FunctionExpression(new Identifier(element.position()), |
@@ -2099,7 +2100,7 @@ class ClassResolverVisitor extends TypeDefinitionVisitor { |
null, null, null, null); |
} |
- isBlackListed(Type type) { |
+ isBlackListed(DartType type) { |
LibraryElement lib = element.getLibrary(); |
return |
lib !== compiler.coreLibrary && |
@@ -2279,7 +2280,7 @@ class SignatureResolver extends CommonResolverVisitor<Element> { |
// Normal parameter: [:Type name:]. |
return identifier.source; |
} else { |
- // Function type parameter: [:void name(Type arg):]. |
+ // Function type parameter: [:void name(DartType arg):]. |
var functionExpression = node.selector.asFunctionExpression(); |
if (functionExpression !== null && |
functionExpression.name.asIdentifier() !== null) { |
@@ -2388,7 +2389,7 @@ class SignatureResolver extends CommonResolverVisitor<Element> { |
requiredParameterCount = parametersBuilder.length; |
parameters = parametersBuilder.toLink(); |
} |
- Type returnType = compiler.resolveTypeAnnotation(element, returnNode); |
+ DartType returnType = compiler.resolveTypeAnnotation(element, returnNode); |
return new FunctionSignature(parameters, |
visitor.optionalParameters, |
requiredParameterCount, |
@@ -2549,7 +2550,7 @@ class TypeDeclarationScope extends Scope { |
} |
Element lookup(SourceString name) { |
- Link<Type> typeVariableLink = element.typeVariables; |
+ Link<DartType> typeVariableLink = element.typeVariables; |
while (!typeVariableLink.isEmpty()) { |
TypeVariableType typeVariable = typeVariableLink.head; |
if (typeVariable.name == name) { |