Index: frog/member.dart |
diff --git a/frog/member.dart b/frog/member.dart |
index 0e47a71dd028002871edb0de4488ee7746b6064c..4198bcaf3341824e8c4c5ba8fe288c70bf07a33e 100644 |
--- a/frog/member.dart |
+++ b/frog/member.dart |
@@ -89,9 +89,22 @@ class Member extends Element { |
Member(String name, Type declaringType) |
: this.declaringType = declaringType, |
- super(name, declaringType) { |
- if (_jsname != null && declaringType != null && declaringType.isTop) { |
- _jsname = JsNames.getValid(_jsname); |
+ super(name, declaringType); |
+ |
+ String mangleJsName() { |
+ var mangled = super.mangleJsName(); |
+ if (mangled == 'split') { |
+ // Hack: We don't want Dart's String.split to overwrite the |
+ // existing JS String.prototype.split method. By mangling it we |
+ // ensure that frog will not use the 'split' name, thus leaving |
+ // the original JS String.prototype.split untouched. |
+ return 'split_'; |
+ } else if (declaringType != null && declaringType.isTop) { |
+ return JsNames.getValid(mangled); |
+ } else { |
+ // We don't need to mangle native member names unless |
+ // they contain illegal characters. |
+ return (isNative && !name.contains(':')) ? name : mangled; |
} |
} |
@@ -368,7 +381,7 @@ class FieldMember extends Member { |
bool isStatic; |
bool isFinal; |
- bool isNative; |
+ final bool isNative; |
// TODO(jimhug): Better notion of fields that need special handling... |
bool get overridesProperty() { |
@@ -413,8 +426,9 @@ class FieldMember extends Member { |
} |
} |
- FieldMember(String name, Type declaringType, this.definition, this.value) |
- : super(name, declaringType), isNative = false; |
+ FieldMember(String name, Type declaringType, this.definition, this.value, |
+ [bool this.isNative = false]) |
+ : super(name, declaringType); |
Member makeConcrete(Type concreteType) { |
var ret = new FieldMember(name, concreteType, definition, value); |
@@ -423,7 +437,6 @@ class FieldMember extends Member { |
return ret; |
} |
- |
SourceSpan get span() => definition == null ? null : definition.span; |
Type get returnType() => type; |
@@ -701,7 +714,7 @@ class MethodMember extends Member { |
bool isFactory = false; |
/** True if this is a function defined inside another method. */ |
- bool isLambda = false; |
+ final bool isLambda; |
/** |
* True if we should provide info on optional parameters for use by runtime |
@@ -716,7 +729,10 @@ class MethodMember extends Member { |
Member initDelegate; |
MethodMember(String name, Type declaringType, this.definition) |
- : super(name, declaringType); |
+ : isLambda = false, super(name, declaringType); |
+ |
+ MethodMember.lambda(String name, Type declaringType, this.definition) |
+ : isLambda = true, super(name, declaringType); |
Member makeConcrete(Type concreteType) { |
var _name = isConstructor ? concreteType.name : name; |
@@ -738,7 +754,10 @@ class MethodMember extends Member { |
bool get isConstructor() => name == declaringType.name; |
bool get isMethod() => !isConstructor; |
- bool get isNative() => definition.nativeBody != null; |
+ bool get isNative() { |
+ if (definition == null) return false; |
+ return definition.nativeBody != null; |
+ } |
bool get canGet() => true; |
bool get canSet() => false; |