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

Unified Diff: frog/member.dart

Issue 9487012: Avoid mangling the name of native methods. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Rebase. Created 8 years, 10 months 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/gen.dart ('k') | frog/minfrog » ('j') | frog/world.dart » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « frog/gen.dart ('k') | frog/minfrog » ('j') | frog/world.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698