Index: dart/sdk/lib/_internal/compiler/implementation/lib/js_mirrors.dart |
diff --git a/dart/sdk/lib/_internal/compiler/implementation/lib/js_mirrors.dart b/dart/sdk/lib/_internal/compiler/implementation/lib/js_mirrors.dart |
index 4f6a8b382624a7f65bf21eba0b5d2aefa5cc0fc4..d0533ab3083f614ca17b17e0e9ac3ab2d6d21262 100644 |
--- a/dart/sdk/lib/_internal/compiler/implementation/lib/js_mirrors.dart |
+++ b/dart/sdk/lib/_internal/compiler/implementation/lib/js_mirrors.dart |
@@ -32,6 +32,10 @@ class JsMirrorSystem implements MirrorSystem { |
static final Map<String, List<LibraryMirror>> librariesByName = |
computeLibrariesByName(); |
+ static final Map<String, String> mangledNames = computeMangledNames(); |
+ |
+ static final Map<String, String> reflectiveNames = computeReflectiveNames(); |
+ |
Iterable<LibraryMirror> findLibrary(Symbol libraryName) { |
return new List<LibraryMirror>.from(librariesByName[n(libraryName)]); |
} |
@@ -54,6 +58,31 @@ class JsMirrorSystem implements MirrorSystem { |
} |
return result; |
} |
+ |
+ static Map<String, String> computeMangledNames() { |
+ var mangledNames = JS('', 'init.mangledNames'); |
+ var keys = JS('List', ''' |
+(function(m, h) { |
kasperl
2013/06/04 14:05:55
I'd avoid the abbreviations of m and h. Maybe keep
ahe
2013/06/04 14:21:01
Done.
|
+ var result = []; |
+ for (var key in m) { |
+ if (h.call(m, key)) result.push(key); |
+ } |
+ return result; |
+})(#, Object.prototype.hasOwnProperty)''', mangledNames); |
+ var result = <String, String>{}; |
+ for (String key in keys) { |
+ result[key] = JS('String', '#[#]', mangledNames, key); |
+ } |
+ return result; |
+ } |
+ |
+ static Map<String, String> computeReflectiveNames() { |
+ var result = <String, String>{}; |
+ mangledNames.forEach((String mangledName, String reflectiveName) { |
+ result[reflectiveName] = mangledName; |
+ }); |
+ return result; |
+ } |
} |
class JsTypeMirror implements TypeMirror { |
@@ -244,9 +273,9 @@ class JsInstanceMirror extends JsObjectMirror implements InstanceMirror { |
// Copy the list to ensure that it can safely be passed to |
// JavaScript. |
var jsList = new List.from(positionalArguments); |
- return _invoke( |
- memberName, JSInvocationMirror.METHOD, |
- '${n(memberName)}\$${positionalArguments.length}', jsList); |
+ String reflectiveName = '${n(memberName)}:${positionalArguments.length}:0'; |
+ String mangledName = JsMirrorSystem.reflectiveNames[reflectiveName]; |
+ return _invoke(memberName, JSInvocationMirror.METHOD, mangledName, jsList); |
} |
InstanceMirror _invoke(Symbol name, |