Index: frog/value.dart |
diff --git a/frog/value.dart b/frog/value.dart |
index e370fda36f36f7933c05f2bf12bfc5a9f896b3ea..88f93f42769417e3fa50646bfe3b878c9ba76927 100644 |
--- a/frog/value.dart |
+++ b/frog/value.dart |
@@ -24,6 +24,10 @@ class Value { |
/** If we reference this value multiple times, do we need a temp? */ |
bool needsTemp; |
+ // TODO(jmesserly): until reified generics are fixed, treat ParameterType as |
+ // "var". |
+ bool get _typeIsVarOrParameterType() => type.isVar || type is ParameterType; |
+ |
Value(this.type, this.code, this.span, |
// TODO(sigmund): reorder, so that needsTemp comes first. |
[this.isSuper = false, this.needsTemp = true, this.isType = false]) { |
@@ -57,11 +61,10 @@ class Value { |
} |
- |
Value invoke(MethodGenerator context, String name, Node node, Arguments args, |
[bool isDynamic=false]) { |
// TODO(jimhug): The != method is weird - understand it better. |
- if (type.isVar && name == '\$ne') { |
+ if (_typeIsVarOrParameterType && name == '\$ne') { |
if (args.values.length != 1) { |
world.warning('wrong number of arguments for !=', node.span); |
} |
@@ -97,7 +100,7 @@ class Value { |
bool canInvoke(MethodGenerator context, String name, Arguments args) { |
// TODO(jimhug): The != method is weird - understand it better. |
- if (type.isVar && name == '\$ne') { |
+ if (_typeIsVarOrParameterType && name == '\$ne') { |
return true; |
} |
@@ -135,10 +138,8 @@ class Value { |
_resolveMember(MethodGenerator context, String name, Node node, |
[bool isDynamic=false]) { |
- // TODO(jmesserly): until reified generic lists are fixed, treat |
- // ParameterType as "var". |
var member; |
- if (!type.isVar && type is! ParameterType) { |
+ if (!_typeIsVarOrParameterType) { |
member = _tryResolveMember(context, name); |
if (member != null && isType && !member.isStatic) { |