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

Unified Diff: frog/type.dart

Issue 8509035: TBR (red build bot). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 9 years, 1 month 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 | « frog/tree.dart ('k') | frog/utils.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: frog/type.dart
diff --git a/frog/type.dart b/frog/type.dart
index ca8a1a2ff8d9c85bd2bfb80979cc5ed14b4b13dd..4d8b1377c43ceb393c590fa1665ad95680af0a43 100644
--- a/frog/type.dart
+++ b/frog/type.dart
@@ -41,9 +41,7 @@ class Type implements Named, Hashable {
Member getMember(String name) => null;
abstract MethodMember getConstructor(String name);
abstract MethodMember getFactory(Type type, String name);
- abstract Type getOrMakeConcreteType(List<Type> typeArgs);
- abstract Map<String, MethodMember> get constructors();
- abstract addDirectSubtype(Type type);
+
abstract bool get isClass();
abstract Library get library();
@@ -85,14 +83,10 @@ class Type implements Named, Hashable {
set jsname(String name) => _jsname = name;
- Map<String, Member> get members() => null;
- Definition get definition() => null;
- FactoryMap get factories() => null;
-
// TODO(jmesserly): should try using a const list instead of null to represent
// the absence of type parameters.
Collection<Type> get typeArgsInOrder() => null;
- DefinedType get genericType() => this;
+ Type get genericType() => this;
// TODO(jmesserly): what should these do for ParameterType?
List<Type> get interfaces() => null;
@@ -310,9 +304,6 @@ class ParameterType extends Type {
ParameterType(String name, this.typeParameter): super(name);
- Map<String, MethodMember> get constructors() =>
- world.internalError('no constructors on type parameters yet');
-
MethodMember getCallMethod() => extendsType.getCallMethod();
void genMethod(Member method) {
@@ -331,18 +322,10 @@ class ParameterType extends Type {
world.internalError('no constructors on type parameters yet');
}
- Type getOrMakeConcreteType(List<Type> typeArgs) {
- world.internalError('no concrete types of type parameters yet', span);
- }
-
Type resolveTypeParams(ConcreteType inType) {
return inType.typeArguments[name];
}
- addDirectSubtype(Type type) {
- world.internalError('no subtypes of type parameters yet', span);
- }
-
resolve(Type inType) {
if (typeParameter.extendsType != null) {
extendsType = inType.resolveType(typeParameter.extendsType, true);
@@ -355,7 +338,7 @@ class ParameterType extends Type {
/** A concrete version of a generic type. */
class ConcreteType extends Type {
- final DefinedType genericType;
+ final Type genericType;
Map<String, Type> typeArguments;
List<Type> _interfaces;
List<Type> typeArgsInOrder;
@@ -741,14 +724,13 @@ class DefinedType extends Type {
resolve() {
if (definition is TypeDefinition) {
- TypeDefinition typeDef = definition;
if (isClass) {
- if (typeDef.extendsTypes != null && typeDef.extendsTypes.length > 0) {
- if (typeDef.extendsTypes.length > 1) {
+ if (definition.extendsTypes != null && definition.extendsTypes.length > 0) {
+ if (definition.extendsTypes.length > 1) {
world.error('more than one base class',
- typeDef.extendsTypes[1].span);
+ definition.extendsTypes[1].span);
}
- var extendsTypeRef = typeDef.extendsTypes[0];
+ var extendsTypeRef = definition.extendsTypes[0];
if (extendsTypeRef is GenericTypeReference) {
// If we are extending a generic type first resolve against the
// base type, then the full generic type. This makes circular
@@ -759,7 +741,7 @@ class DefinedType extends Type {
parent = resolveType(extendsTypeRef, true);
if (!parent.isClass) {
world.error('class may not extend an interface - use implements',
- typeDef.extendsTypes[0].span);
+ definition.extendsTypes[0].span);
}
parent.addDirectSubtype(this);
if (_cycleInClassExtends()) {
@@ -772,29 +754,31 @@ class DefinedType extends Type {
parent = world.objectType;
}
}
- this.interfaces = _resolveInterfaces(typeDef.implementsTypes);
- if (typeDef.factoryType != null) {
+ this.interfaces = _resolveInterfaces(definition.implementsTypes);
+ if (definition.factoryType != null) {
world.error('factory not allowed on classes',
- typeDef.factoryType.span);
+ definition.factoryType.span);
}
} else {
- if (typeDef.implementsTypes != null &&
- typeDef.implementsTypes.length > 0) {
+ if (definition.implementsTypes != null &&
+ definition.implementsTypes.length > 0) {
world.error('implements not allowed on interfaces (use extends)',
- typeDef.implementsTypes[0].span);
+ definition.implementsTypes[0].span);
}
- this.interfaces = _resolveInterfaces(typeDef.extendsTypes);
+ this.interfaces = _resolveInterfaces(definition.extendsTypes);
final res = _cycleInInterfaceExtends();
if (res >= 0) {
world.error('interface "$name" has a cycle in its inheritance chain',
- typeDef.extendsTypes[res].span);
+ definition.extendsTypes[res].span);
}
- if (typeDef.factoryType != null) {
- factory_ = resolveType(typeDef.factoryType, true);
+ if (definition.factoryType != null) {
+ factory_ = resolveType(definition.factoryType, true);
if (factory_ == null) {
// TODO(jimhug): Appropriate warning levels;
- world.warning('unresolved factory', typeDef.factoryType.span);
+ world.info(
+ 'unresolved factory: ${definition.factoryType.name.name}',
+ definition.factoryType.name.span);
}
}
}
@@ -951,9 +935,7 @@ class DefinedType extends Type {
inits = [new CallExpression(new SuperExpression(span), [], span)];
}
-
- TypeDefinition typeDef = definition;
- var c = new FunctionDefinition(null, null, typeDef.name, [],
+ var c = new FunctionDefinition(null, null, definition.name, [],
inits, body, span);
addMethod(null, c);
constructors[''].resolve(this);
@@ -1088,62 +1070,59 @@ class DefinedType extends Type {
// same message twice.
if (node is NameTypeReference) {
- NameTypeReference typeRef = node;
String name;
- if (typeRef.names != null) {
- name = typeRef.names.last().name;
+ if (node.names != null) {
+ name = node.names.last().name;
} else {
- name = typeRef.name.name;
+ name = node.name.name;
}
if (typeParameters != null) {
for (var tp in typeParameters) {
if (tp.name == name) {
- typeRef.type = tp;
+ node.type = tp;
}
}
}
- if (typeRef.type == null) {
- typeRef.type = library.findType(typeRef);
+ if (node.type == null) {
+ node.type = library.findType(node);
}
- if (typeRef.type == null) {
- var message = 'can not find type ${_getDottedName(typeRef)}';
+ if (node.type == null) {
+ var message = 'can not find type ${_getDottedName(node)}';
if (typeErrors) {
- world.error(message, typeRef.span);
- typeRef.type = world.objectType;
+ world.error(message, node.span);
+ node.type = world.objectType;
} else {
- world.warning(message, typeRef.span);
- typeRef.type = world.varType;
+ world.warning(message, node.span);
+ node.type = world.varType;
}
}
} else if (node is GenericTypeReference) {
- GenericTypeReference typeRef = node;
// TODO(jimhug): Expand the handling of typeErrors to generics and funcs
- var baseType = resolveType(typeRef.baseType, typeErrors);
+ var baseType = resolveType(node.baseType, typeErrors);
if (!baseType.isGeneric) {
- world.error('${baseType.name} is not generic', typeRef.span);
+ world.error('${baseType.name} is not generic', node.span);
return null;
}
- if (typeRef.typeArguments.length != baseType.typeParameters.length) {
- world.error('wrong number of type arguments', typeRef.span);
+ if (node.typeArguments.length != baseType.typeParameters.length) {
+ world.error('wrong number of type arguments', node.span);
return null;
}
var typeArgs = [];
- for (int i=0; i < typeRef.typeArguments.length; i++) {
+ for (int i=0; i < node.typeArguments.length; i++) {
var extendsType = baseType.typeParameters[i].extendsType;
- var typeArg = resolveType(typeRef.typeArguments[i], typeErrors);
+ var typeArg = resolveType(node.typeArguments[i], typeErrors);
typeArgs.add(typeArg);
if (extendsType != null && typeArg is! ParameterType) {
typeArg.ensureSubtypeOf(extendsType,
- typeRef.typeArguments[i].span, typeErrors);
+ node.typeArguments[i].span, typeErrors);
}
}
- typeRef.type = baseType.getOrMakeConcreteType(typeArgs);
+ node.type = baseType.getOrMakeConcreteType(typeArgs);
} else if (node is FunctionTypeReference) {
- FunctionTypeReference typeRef = node;
var name = '';
- if (typeRef.func.name != null) name = typeRef.func.name.name;
- typeRef.type = library.getOrAddFunctionType(name, typeRef.func, this);
+ if (node.func.name != null) name = node.func.name.name;
+ node.type = library.getOrAddFunctionType(name, node.func, this);
} else {
world.internalError('unknown type reference', node.span);
}
« no previous file with comments | « frog/tree.dart ('k') | frog/utils.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698