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

Unified Diff: tool/input_sdk/private/js_mirrors.dart

Issue 1989593002: Wrap and unwrap types in dart:mirrors (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 7 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: tool/input_sdk/private/js_mirrors.dart
diff --git a/tool/input_sdk/private/js_mirrors.dart b/tool/input_sdk/private/js_mirrors.dart
index 7b4647fc3486377eeb283ff79d8b4a92ff0c8daa..f02c82d08c41a98e03d0baa0eaf6ebb9725316ca 100644
--- a/tool/input_sdk/private/js_mirrors.dart
+++ b/tool/input_sdk/private/js_mirrors.dart
@@ -38,6 +38,13 @@ dynamic _dsend(obj, String name, List args) {
return JS('', '#.dsend(#, #, ...#)', _dart, obj, name, args);
}
+// TODO(vsm): These methods need to validate whether we really have a
+// WrappedType or a raw type that should be wrapped (as opposed to a
+// function).
+dynamic _unwrap(obj) => JS('', '#.unwrapped()', obj);
+
+dynamic _wrap(obj) => JS('', '#.wrapType(#)', _dart, obj);
+
class JsInstanceMirror implements InstanceMirror {
final Object reflectee;
@@ -95,9 +102,9 @@ class JsClassMirror implements ClassMirror {
JsClassMirror._(Type cls)
: _cls = cls,
- simpleName = new Symbol(JS('String', '#.name', cls)) {
+ simpleName = new Symbol(JS('String', '#.name', _unwrap(cls))) {
// Load metadata.
- var fn = JS('Function', '#[dart.metadata]', _cls);
+ var fn = JS('Function', '#[dart.metadata]', _unwrap(_cls));
_metadata = (fn == null)
? <InstanceMirror>[]
: new List<InstanceMirror>.from(
@@ -114,12 +121,12 @@ class JsClassMirror implements ClassMirror {
// TODO(vsm): Support named constructors and named arguments.
assert(getName(constructorName) == "");
assert(namedArgs == null || namedArgs.isEmpty);
- var instance = JS('', 'new #(...#)', _cls, args);
+ var instance = JS('', 'new #(...#)', _unwrap(_cls), args);
return new JsInstanceMirror._(instance);
}
List<ClassMirror> get superinterfaces {
- var interfaceThunk = JS('Function', '#[dart.implements]', _cls);
+ var interfaceThunk = JS('Function', '#[dart.implements]', _unwrap(_cls));
if (interfaceThunk == null) {
return [];
} else {
@@ -176,7 +183,7 @@ class JsClassMirror implements ClassMirror {
if (_cls == Object) {
return null;
} else {
- return new JsClassMirror._(JS('Type', '#.__proto__', _cls));
+ return new JsClassMirror._(_wrap(JS('Type', '#.__proto__', _unwrap(_cls))));
}
}
List<TypeMirror> get typeArguments =>
@@ -268,7 +275,7 @@ class JsMethodMirror implements MethodMirror {
JsMethodMirror._(JsClassMirror cls, this._method)
: _name = getName(cls.simpleName) {
- var ftype = JS('', '#.classGetConstructorType(#)', _dart, cls._cls);
+ var ftype = JS('', '#.classGetConstructorType(#)', _dart, _unwrap(cls._cls));
_params = _createParameterMirrorList(ftype);
}
@@ -291,7 +298,7 @@ class JsMethodMirror implements MethodMirror {
var type = args[i];
var metadata = ftype.metadata[i];
// TODO(vsm): Recover the param name.
- var param = new JsParameterMirror._('', type, metadata);
+ var param = new JsParameterMirror._('', _wrap(type), metadata);
params[i] = param;
}
@@ -299,7 +306,7 @@ class JsMethodMirror implements MethodMirror {
var type = opts[i];
var metadata = ftype.metadata[args.length + i];
// TODO(vsm): Recover the param name.
- var param = new JsParameterMirror._('', type, metadata);
+ var param = new JsParameterMirror._('', _wrap(type), metadata);
params[i + args.length] = param;
}

Powered by Google App Engine
This is Rietveld 408576698