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

Unified Diff: dart/sdk/lib/_internal/compiler/implementation/lib/js_mirrors.dart

Issue 15979020: Implement InstanceMirror.invoke (minified). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 6 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
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,

Powered by Google App Engine
This is Rietveld 408576698