Chromium Code Reviews| 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, |