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

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

Powered by Google App Engine
This is Rietveld 408576698