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

Side by Side Diff: lib/runtime/dart/_js_mirrors.js

Issue 1186683005: dart:mirrors (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Address comments Created 5 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 unified diff | Download patch
OLDNEW
(Empty)
1 dart_library.library('dart/_js_mirrors', null, /* Imports */[
2 "dart_runtime/dart",
3 'dart/_internal',
4 'dart/core',
5 'dart/mirrors'
6 ], /* Lazy imports */[
7 ], function(exports, dart, _internal, core, mirrors) {
8 'use strict';
9 let dartx = dart.dartx;
10 function getName(symbol) {
11 return _internal.Symbol.getName(dart.as(symbol, _internal.Symbol));
12 }
13 dart.fn(getName, core.String, [core.Symbol]);
14 function getSymbol(name, library) {
15 return dart.throw_(new core.UnimplementedError("MirrorSystem.getSymbol unimp lemented"));
16 }
17 dart.fn(getSymbol, core.Symbol, [core.Object, core.Object]);
18 dart.defineLazyProperties(exports, {
19 get currentJsMirrorSystem() {
20 return dart.throw_(new core.UnimplementedError("MirrorSystem.currentJsMirr orSystem unimplemented"));
21 }
22 });
23 function reflect(reflectee) {
24 return new JsInstanceMirror._(reflectee);
25 }
26 dart.fn(reflect, mirrors.InstanceMirror, [core.Object]);
27 function reflectType(key) {
28 return new JsClassMirror._(key);
29 }
30 dart.fn(reflectType, mirrors.TypeMirror, [core.Type]);
31 dart.defineLazyProperties(exports, {
32 get _dart() {
33 return dart;
34 },
35 get _metadata() {
36 return exports._dart.metadata;
37 }
38 });
39 function _dload(obj, name) {
40 return exports._dart.dload(obj, name);
41 }
42 dart.fn(_dload, core.Object, [core.Object, core.String]);
43 function _dput(obj, name, val) {
44 exports._dart.dput(obj, name, val);
45 }
46 dart.fn(_dput, dart.void, [core.Object, core.String, core.Object]);
47 function _dsend(obj, name, args) {
48 return exports._dart.dsendArray(obj, name, args);
49 }
50 dart.fn(_dsend, core.Object, [core.Object, core.String, core.List]);
51 let _toJsMap = Symbol('_toJsMap');
52 class JsInstanceMirror extends core.Object {
53 _(reflectee) {
54 this.reflectee = reflectee;
55 }
56 getField(symbol) {
57 let name = getName(symbol);
58 let field = _dload(this.reflectee, name);
59 return new JsInstanceMirror._(field);
60 }
61 setField(symbol, value) {
62 let name = getName(symbol);
63 let field = _dput(this.reflectee, name, value);
64 return new JsInstanceMirror._(field);
65 }
66 invoke(symbol, args, namedArgs) {
67 if (namedArgs === void 0)
68 namedArgs = null;
69 let name = getName(symbol);
70 if (namedArgs != null) {
71 args = core.List.from(args);
72 args[dartx.add](this[_toJsMap](namedArgs));
73 }
74 let result = _dsend(this.reflectee, name, args);
75 return new JsInstanceMirror._(result);
76 }
77 [_toJsMap](map) {
78 let obj = {};
79 map.forEach(dart.fn((key, value) => {
80 obj[getName(key)] = value;
81 }, core.Object, [core.Symbol, core.Object]));
82 return obj;
83 }
84 }
85 JsInstanceMirror[dart.implements] = () => [mirrors.InstanceMirror];
86 dart.defineNamedConstructor(JsInstanceMirror, '_');
87 dart.setSignature(JsInstanceMirror, {
88 constructors: () => ({_: [JsInstanceMirror, [core.Object]]}),
89 methods: () => ({
90 getField: [mirrors.InstanceMirror, [core.Symbol]],
91 setField: [mirrors.InstanceMirror, [core.Symbol, core.Object]],
92 invoke: [mirrors.InstanceMirror, [core.Symbol, core.List], [core.Map$(core .Symbol, core.Object)]],
93 [_toJsMap]: [core.Object, [core.Map$(core.Symbol, core.Object)]]
94 })
95 });
96 let _metadata = Symbol('_metadata');
97 let _declarations = Symbol('_declarations');
98 let _cls = Symbol('_cls');
99 class JsClassMirror extends core.Object {
100 get metadata() {
101 return this[_metadata];
102 }
103 get declarations() {
104 return this[_declarations];
105 }
106 _(cls) {
107 this[_cls] = cls;
108 this.simpleName = core.Symbol.new(cls.name);
109 this[_metadata] = null;
110 this[_declarations] = null;
111 let fn = this[_cls][dart.metadata];
112 this[_metadata] = fn == null ? dart.list([], mirrors.InstanceMirror) : cor e.List$(mirrors.InstanceMirror).from(dart.as(dart.dsend(dart.dcall(fn), 'map', d art.fn(i => new JsInstanceMirror._(i), JsInstanceMirror, [core.Object])), core.I terable));
113 this[_declarations] = core.Map$(core.Symbol, mirrors.MethodMirror).new();
114 this[_declarations].set(this.simpleName, new JsMethodMirror._(this, this[_ cls]));
115 }
116 newInstance(constructorName, args, namedArgs) {
117 if (namedArgs === void 0)
118 namedArgs = null;
119 dart.assert(getName(constructorName) == "");
120 dart.assert(namedArgs == null || dart.notNull(namedArgs.isEmpty));
121 let instance = exports._dart.instantiate(this[_cls], args);
122 return new JsInstanceMirror._(instance);
123 }
124 }
125 JsClassMirror[dart.implements] = () => [mirrors.ClassMirror];
126 dart.defineNamedConstructor(JsClassMirror, '_');
127 dart.setSignature(JsClassMirror, {
128 constructors: () => ({_: [JsClassMirror, [core.Type]]}),
129 methods: () => ({newInstance: [mirrors.InstanceMirror, [core.Symbol, core.Li st], [core.Map$(core.Symbol, core.Object)]]})
130 });
131 class JsTypeMirror extends core.Object {
132 _(reflectedType) {
133 this.reflectedType = reflectedType;
134 }
135 }
136 JsTypeMirror[dart.implements] = () => [mirrors.TypeMirror];
137 dart.defineNamedConstructor(JsTypeMirror, '_');
138 dart.setSignature(JsTypeMirror, {
139 constructors: () => ({_: [JsTypeMirror, [core.Type]]})
140 });
141 let _name = Symbol('_name');
142 class JsParameterMirror extends core.Object {
143 _(name, t) {
144 this.metadata = dart.list([], mirrors.InstanceMirror);
145 this[_name] = name;
146 this.type = new JsTypeMirror._(t);
147 }
148 }
149 JsParameterMirror[dart.implements] = () => [mirrors.ParameterMirror];
150 dart.defineNamedConstructor(JsParameterMirror, '_');
151 dart.setSignature(JsParameterMirror, {
152 constructors: () => ({_: [JsParameterMirror, [core.String, core.Type]]})
153 });
154 let _method = Symbol('_method');
155 let _params = Symbol('_params');
156 let _createParameterMirrorList = Symbol('_createParameterMirrorList');
157 class JsMethodMirror extends core.Object {
158 _(cls, method) {
159 this[_method] = method;
160 this[_name] = getName(cls.simpleName);
161 this[_params] = null;
162 let ftype = exports._dart.classGetConstructorType(cls[_cls]);
163 this[_params] = this[_createParameterMirrorList](ftype);
164 }
165 get constructorName() {
166 return core.Symbol.new('');
167 }
168 get parameters() {
169 return this[_params];
170 }
171 [_createParameterMirrorList](ftype) {
172 if (ftype == null) {
173 return dart.list([], mirrors.ParameterMirror);
174 }
175 let args = dart.as(dart.dload(ftype, 'args'), core.List);
176 let opts = dart.as(dart.dload(ftype, 'optionals'), core.List);
177 let params = core.List$(mirrors.ParameterMirror).new(dart.notNull(args[dar tx.length]) + dart.notNull(opts[dartx.length]));
178 for (let i = 0; dart.notNull(i) < dart.notNull(args[dartx.length]); i = da rt.notNull(i) + 1) {
179 let type = args[dartx.get](i);
180 let param = new JsParameterMirror._('', dart.as(type, core.Type));
181 params[dartx.set](i, param);
182 }
183 for (let i = 0; dart.notNull(i) < dart.notNull(opts[dartx.length]); i = da rt.notNull(i) + 1) {
184 let type = opts[dartx.get](i);
185 let param = new JsParameterMirror._('', dart.as(type, core.Type));
186 params[dartx.set](dart.notNull(i) + dart.notNull(args[dartx.length]), pa ram);
187 }
188 return params;
189 }
190 }
191 JsMethodMirror[dart.implements] = () => [mirrors.MethodMirror];
192 dart.defineNamedConstructor(JsMethodMirror, '_');
193 dart.setSignature(JsMethodMirror, {
194 constructors: () => ({_: [JsMethodMirror, [JsClassMirror, core.Object]]}),
195 methods: () => ({[_createParameterMirrorList]: [core.List$(mirrors.Parameter Mirror), [core.Object]]})
196 });
197 // Exports:
198 exports.getName = getName;
199 exports.getSymbol = getSymbol;
200 exports.reflect = reflect;
201 exports.reflectType = reflectType;
202 exports.JsInstanceMirror = JsInstanceMirror;
203 exports.JsClassMirror = JsClassMirror;
204 exports.JsTypeMirror = JsTypeMirror;
205 exports.JsParameterMirror = JsParameterMirror;
206 exports.JsMethodMirror = JsMethodMirror;
207 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698