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

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: Address review comments 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..2a50b31d9e3cbdc7134ecfe5ac969edf9f19b1e9 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(mangled, hasOwnProperty) {
+ var result = [];
+ for (var key in mangled) {
+ if (hasOwnProperty.call(mangled, 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