Index: frog/member.dart |
diff --git a/frog/member.dart b/frog/member.dart |
index 9bab915ac9099d4017ae1682a5018051573f16d8..09fa429ea010d885db68b9459aa93c3c9ddbb4a3 100644 |
--- a/frog/member.dart |
+++ b/frog/member.dart |
@@ -115,11 +115,6 @@ class Member implements Named { |
bool get isProperty() => false; |
bool get isAbstract() => false; |
- // TODO(jmesserly): these only makes sense on methods, but because of |
- // ConcreteMember we need to support them on Member. |
- bool get isConst() => false; |
- bool get isFactory() => false; |
- |
bool get prefersPropertySyntax() => true; |
bool get requiresFieldSyntax() => false; |
@@ -129,12 +124,7 @@ class Member implements Named { |
void provideFieldSyntax() => world.internalError('can not be field', span); |
void providePropertySyntax() => |
- world.internalError('can not be property', span); |
- |
- Definition get initDelegate() => |
- world.internalError('cannot have initializers', span); |
- Definition set initDelegate(ctor) => |
- world.internalError('cannot have initializers', span); |
+ world.internalError('can not be property', span); |
Definition get definition() => null; |
@@ -179,16 +169,6 @@ class Member implements Named { |
return '${prefix}$name\$factory'; |
} |
} |
- |
- Type resolveType(TypeReference node, bool isRequired) { |
- var type = declaringType.resolveType(node, isRequired); |
- if (isStatic && type.hasTypeParams) { |
- // TODO(jimhug): Is this really so hard? |
- world.error('using type parameter in static context', |
- node.span); |
- } |
- return type; |
- } |
} |
@@ -209,7 +189,7 @@ class TypeMember extends Member { |
bool get isStatic() => true; |
// If this really becomes first class, this should return typeof(Type) |
- Type get returnType() => world.varType; |
+ Type get returnType() => world.isVar; |
bool canInvoke(MethodGenerator context, Arguments args) => false; |
bool get canGet() => true; |
@@ -386,7 +366,7 @@ class FieldMember extends Member { |
} |
} else if (target.isConst && isFinal) { |
// take advantage of consts and retrieve the value directly if possible |
- var constTarget = target is GlobalValue ? target.dynamic.exp : target; |
+ var constTarget = target is GlobalValue ? target.exp : target; |
if (constTarget is ConstObjectValue) { |
return constTarget.fields[name]; |
} else if (constTarget.type == world.stringType && name == 'length') { |
@@ -478,16 +458,12 @@ class PropertyMember extends Member { |
addFromParent(Member parentMember) { |
// TODO(jimhug): Egregious Hack! |
- PropertyMember parent; |
if (parentMember is ConcreteMember) { |
- ConcreteMember c = parentMember; |
- parent = c.baseMember; |
- } else { |
- parent = parentMember; |
+ parentMember = parentMember.baseMember; |
} |
- if (getter == null) getter = parent.getter; |
- if (setter == null) setter = parent.setter; |
+ if (getter == null) getter = parentMember.getter; |
+ if (setter == null) setter = parentMember.setter; |
} |
resolve(Type inType) { |
@@ -524,12 +500,12 @@ class ConcreteMember extends Member { |
bool get isStatic() => baseMember.isStatic; |
bool get isAbstract() => baseMember.isAbstract; |
bool get isConst() => baseMember.isConst; |
- bool get isFactory() => baseMember.isFactory; |
String get jsname() => baseMember.jsname; |
set jsname(String name) => |
world.internalError('bad set of jsname on ConcreteMember'); |
+ bool get isFactory() => baseMember.isFactory; |
bool get canGet() => baseMember.canGet; |
bool get canSet() => baseMember.canSet; |
@@ -640,14 +616,13 @@ class MethodMember extends Member { |
SourceSpan get span() => definition == null ? null : definition.span; |
String get constructorName() { |
- NameTypeReference returnType = definition.returnType; |
- if (returnType == null) return ''; |
+ if (definition.returnType == null) return ''; |
// TODO(jmesserly): make this easier? |
- if (returnType.names != null) { |
- return returnType.names[0].name; |
- } else if (returnType.name != null) { |
- return returnType.name.name; |
+ if (definition.returnType.names != null) { |
+ return definition.returnType.names[0].name; |
+ } else if (definition.returnType.name != null) { |
+ return definition.returnType.name.name; |
} |
world.internalError('no valid constructor name', definition.span); |
} |
@@ -711,6 +686,16 @@ class MethodMember extends Member { |
return -1; |
} |
+ Type resolveType(TypeReference node, bool isRequired) { |
+ var type = declaringType.resolveType(node, isRequired); |
+ if (isStatic && type.hasTypeParams) { |
+ // TODO(jimhug): Is this really so hard? |
+ world.error('using type parameter in static context', |
+ node.span); |
+ } |
+ return type; |
+ } |
+ |
bool get prefersPropertySyntax() => true; |
bool get requiresFieldSyntax() => false; |
@@ -925,15 +910,15 @@ class MethodMember extends Member { |
// optimize expressions which we know statically their value. |
if (target.isConst) { |
if (target is GlobalValue) { |
- target = target.dynamic.exp; // TODO: an inline "cast" would be nice. |
+ target = target.exp; |
} |
if (name == 'get\$length') { |
if (target is ConstListValue || target is ConstMapValue) { |
- code = '${target.dynamic.values.length}'; |
+ code = '${target.values.length}'; |
} |
} else if (name == 'isEmpty') { |
if (target is ConstListValue || target is ConstMapValue) { |
- code = '${target.dynamic.values.isEmpty()}'; |
+ code = '${target.values.isEmpty()}'; |
} |
} |
} |
@@ -946,8 +931,8 @@ class MethodMember extends Member { |
return new Value(returnType, code); |
} |
- Value _invokeConstructor(MethodGenerator context, Node node, |
- Value target, Arguments args, argsString) { |
+ Value _invokeConstructor(MethodGenerator context, Node node, Value target, |
+ Arguments args, argsString) { |
declaringType.markUsed(); |
if (target != null) { |
@@ -960,8 +945,7 @@ class MethodMember extends Member { |
var code = (constructorName != '') |
? 'new ${declaringType.jsname}.${constructorName}\$ctor($argsString)' |
: 'new ${declaringType.jsname}($argsString)'; |
- // TODO(jmesserly): using the "node" here feels really hacky |
- if (isConst && node is NewExpression && node.dynamic.isConst) { |
+ if (isConst && node.isConst) { |
return _invokeConstConstructor(node, code, target, args); |
} else { |
return new Value(declaringType, code); |
@@ -1048,10 +1032,8 @@ class MethodMember extends Member { |
} |
} else { |
// Normal field initializer assignment. |
- BinaryExpression assign = init; |
- VarExpression x = assign.x; |
- var fname = x.name.name; |
- var val = generator.visitValue(assign.y); |
+ var fname = init.x.name.name; |
+ var val = generator.visitValue(init.y); |
fields[fname] = val; |
} |
} |