| 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;
|
|
|