Index: dart/sdk/lib/_internal/lib/js_helper.dart |
diff --git a/dart/sdk/lib/_internal/lib/js_helper.dart b/dart/sdk/lib/_internal/lib/js_helper.dart |
index 29715d1aee1c3d417a5a7e8f5d08b4b9dac71a9e..418590fccf9a5f8cce2267805db2fb9a494fd194 100644 |
--- a/dart/sdk/lib/_internal/lib/js_helper.dart |
+++ b/dart/sdk/lib/_internal/lib/js_helper.dart |
@@ -17,7 +17,8 @@ import 'dart:_foreign_helper' show DART_CLOSURE_TO_JS, |
JS_OPERATOR_IS_PREFIX, |
RAW_DART_FUNCTION_REF; |
import 'dart:_interceptors'; |
-import "dart:_collection-dev" as _symbol_dev; |
+import 'dart:_collection-dev' as _symbol_dev; |
+import 'dart:_js_names' show mangledNames; |
part 'constant_map.dart'; |
part 'native_helper.dart'; |
@@ -56,8 +57,18 @@ String S(value) { |
return res; |
} |
-createInvocationMirror(name, internalName, type, arguments, argumentNames) { |
- return new JSInvocationMirror(new _symbol_dev.Symbol.unvalidated(name), |
+createInvocationMirror(String name, internalName, type, arguments, |
+ argumentNames) { |
+ return new JSInvocationMirror(name, |
+ internalName, |
+ type, |
+ arguments, |
+ argumentNames); |
+} |
+ |
+createUnmangledInvocationMirror(Symbol symbol, internalName, type, arguments, |
+ argumentNames) { |
+ return new JSInvocationMirror(symbol, |
internalName, |
type, |
arguments, |
@@ -69,7 +80,9 @@ class JSInvocationMirror implements Invocation { |
static const GETTER = 1; |
static const SETTER = 2; |
- final Symbol memberName; |
+ /// When [_memberName] is a String, it holds the mangled name of this |
+ /// invocation. When it is a Symbol, it holds the unmangled name. |
+ var /* String or Symbol */ _memberName; |
final String _internalName; |
final int _kind; |
final List _arguments; |
@@ -77,12 +90,23 @@ class JSInvocationMirror implements Invocation { |
/** Map from argument name to index in _arguments. */ |
Map<String,dynamic> _namedIndices = null; |
- JSInvocationMirror(this.memberName, |
+ JSInvocationMirror(this._memberName, |
this._internalName, |
this._kind, |
this._arguments, |
this._namedArgumentNames); |
+ Symbol get memberName { |
+ if (_memberName is Symbol) return _memberName; |
+ String name = _memberName; |
+ String unmangledName = mangledNames[name]; |
+ if (unmangledName != null) { |
+ name = unmangledName.split(':')[0]; |
+ } |
+ _memberName = new _symbol_dev.Symbol.unvalidated(name); |
+ return _memberName; |
+ } |
+ |
bool get isMethod => _kind == METHOD; |
bool get isGetter => _kind == GETTER; |
bool get isSetter => _kind == SETTER; |