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

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

Issue 1879373004: Implement modular compilation (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 8 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', null, /* Imports */[
2 'dart/_runtime',
3 'dart/core',
4 'dart/collection',
5 'dart/_js_helper'
6 ], /* Lazy imports */[
7 ], function(exports, dart, core, collection, _js_helper) {
8 'use strict';
9 let dartx = dart.dartx;
10 const _global = dart.global;
11 dart.defineLazyProperties(exports, {
12 get context() {
13 return _wrapToDart(_global);
14 }
15 });
16 const _jsObject = Symbol('_jsObject');
17 class JsObject extends core.Object {
18 _fromJs(jsObject) {
19 this[_jsObject] = jsObject;
20 dart.assert(this[_jsObject] != null);
21 }
22 static new(constructor, arguments$) {
23 if (arguments$ === void 0) arguments$ = null;
24 let ctor = constructor[_jsObject];
25 if (arguments$ == null) {
26 return _wrapToDart(new ctor());
27 }
28 let unwrapped = core.List.from(arguments$[dartx.map](_convertToJS));
29 return _wrapToDart(new ctor(...unwrapped));
30 }
31 static fromBrowserObject(object) {
32 if (typeof object == 'number' || typeof object == 'string' || typeof objec t == 'boolean' || object == null) {
33 dart.throw(new core.ArgumentError("object cannot be a num, string, bool, or null"));
34 }
35 return _wrapToDart(_convertToJS(object));
36 }
37 static jsify(object) {
38 if (!dart.is(object, core.Map) && !dart.is(object, core.Iterable)) {
39 dart.throw(new core.ArgumentError("object must be a Map or Iterable"));
40 }
41 return _wrapToDart(JsObject._convertDataTree(object));
42 }
43 static _convertDataTree(data) {
44 let _convertedObjects = collection.HashMap.identity();
45 function _convert(o) {
46 if (dart.notNull(_convertedObjects.containsKey(o))) {
47 return _convertedObjects.get(o);
48 }
49 if (dart.is(o, core.Map)) {
50 let convertedMap = {};
51 _convertedObjects.set(o, convertedMap);
52 for (let key of o[dartx.keys]) {
53 convertedMap[key] = _convert(o[dartx.get](key));
54 }
55 return convertedMap;
56 } else if (dart.is(o, core.Iterable)) {
57 let convertedList = [];
58 _convertedObjects.set(o, convertedList);
59 convertedList[dartx.addAll](o[dartx.map](_convert));
60 return convertedList;
61 } else {
62 return _convertToJS(o);
63 }
64 }
65 dart.fn(_convert);
66 return _convert(data);
67 }
68 get(property) {
69 if (!(typeof property == 'string') && !(typeof property == 'number')) {
70 dart.throw(new core.ArgumentError("property is not a String or num"));
71 }
72 return _convertToDart(this[_jsObject][property]);
73 }
74 set(property, value) {
75 if (!(typeof property == 'string') && !(typeof property == 'number')) {
76 dart.throw(new core.ArgumentError("property is not a String or num"));
77 }
78 this[_jsObject][property] = _convertToJS(value);
79 return value;
80 }
81 get hashCode() {
82 return 0;
83 }
84 ['=='](other) {
85 return dart.is(other, JsObject) && this[_jsObject] === other[_jsObject];
86 }
87 hasProperty(property) {
88 if (!(typeof property == 'string') && !(typeof property == 'number')) {
89 dart.throw(new core.ArgumentError("property is not a String or num"));
90 }
91 return property in this[_jsObject];
92 }
93 deleteProperty(property) {
94 if (!(typeof property == 'string') && !(typeof property == 'number')) {
95 dart.throw(new core.ArgumentError("property is not a String or num"));
96 }
97 delete this[_jsObject][property];
98 }
99 instanceof(type) {
100 return this[_jsObject] instanceof _convertToJS(type);
101 }
102 toString() {
103 try {
104 return String(this[_jsObject]);
105 } catch (e) {
106 return super.toString();
107 }
108
109 }
110 callMethod(method, args) {
111 if (args === void 0) args = null;
112 if (!(typeof method == 'string') && !(typeof method == 'number')) {
113 dart.throw(new core.ArgumentError("method is not a String or num"));
114 }
115 if (args != null) args = core.List.from(args[dartx.map](_convertToJS));
116 let fn = this[_jsObject][method];
117 if (!(fn instanceof Function)) {
118 dart.throw(new core.NoSuchMethodError(this[_jsObject], core.Symbol.new(d art.as(method, core.String)), args, dart.map()));
119 }
120 return _convertToDart(fn.apply(this[_jsObject], args));
121 }
122 }
123 dart.defineNamedConstructor(JsObject, '_fromJs');
124 dart.setSignature(JsObject, {
125 constructors: () => ({
126 _fromJs: [JsObject, [dart.dynamic]],
127 new: [JsObject, [JsFunction], [core.List]],
128 fromBrowserObject: [JsObject, [dart.dynamic]],
129 jsify: [JsObject, [dart.dynamic]]
130 }),
131 methods: () => ({
132 get: [dart.dynamic, [core.Object]],
133 set: [dart.dynamic, [core.Object, dart.dynamic]],
134 hasProperty: [core.bool, [dart.dynamic]],
135 deleteProperty: [dart.void, [dart.dynamic]],
136 instanceof: [core.bool, [JsFunction]],
137 callMethod: [dart.dynamic, [dart.dynamic], [core.List]]
138 }),
139 statics: () => ({_convertDataTree: [dart.dynamic, [dart.dynamic]]}),
140 names: ['_convertDataTree']
141 });
142 class JsFunction extends JsObject {
143 static withThis(f) {
144 return new JsFunction._fromJs(function() {
145 let args = [_convertToDart(this)];
146 for (let arg of arguments) {
147 args.push(_convertToDart(arg));
148 }
149 return _convertToJS(f(...args));
150 });
151 }
152 _fromJs(jsObject) {
153 super._fromJs(jsObject);
154 }
155 apply(args, opts) {
156 let thisArg = opts && 'thisArg' in opts ? opts.thisArg : null;
157 return _convertToDart(this[_jsObject].apply(_convertToJS(thisArg), args == null ? null : core.List.from(args[dartx.map](_convertToJS))));
158 }
159 }
160 dart.defineNamedConstructor(JsFunction, '_fromJs');
161 dart.setSignature(JsFunction, {
162 constructors: () => ({
163 withThis: [JsFunction, [core.Function]],
164 _fromJs: [JsFunction, [dart.dynamic]]
165 }),
166 methods: () => ({apply: [dart.dynamic, [core.List], {thisArg: dart.dynamic}] })
167 });
168 const _checkIndex = Symbol('_checkIndex');
169 const _checkInsertIndex = Symbol('_checkInsertIndex');
170 const JsArray$ = dart.generic(function(E) {
171 class JsArray extends dart.mixin(JsObject, collection.ListMixin$(E)) {
172 JsArray() {
173 super._fromJs([]);
174 }
175 from(other) {
176 super._fromJs((() => {
177 let _ = [];
178 _[dartx.addAll](other[dartx.map](_convertToJS));
179 return _;
180 })());
181 }
182 _fromJs(jsObject) {
183 super._fromJs(jsObject);
184 }
185 [_checkIndex](index) {
186 if (typeof index == 'number' && (dart.notNull(index) < 0 || dart.notNull (index) >= dart.notNull(this.length))) {
187 dart.throw(new core.RangeError.range(index, 0, this.length));
188 }
189 }
190 [_checkInsertIndex](index) {
191 if (typeof index == 'number' && (dart.notNull(index) < 0 || dart.notNull (index) >= dart.notNull(this.length) + 1)) {
192 dart.throw(new core.RangeError.range(index, 0, this.length));
193 }
194 }
195 static _checkRange(start, end, length) {
196 if (dart.notNull(start) < 0 || dart.notNull(start) > dart.notNull(length )) {
197 dart.throw(new core.RangeError.range(start, 0, length));
198 }
199 if (dart.notNull(end) < dart.notNull(start) || dart.notNull(end) > dart. notNull(length)) {
200 dart.throw(new core.RangeError.range(end, start, length));
201 }
202 }
203 get(index) {
204 if (typeof index == 'number' && index == index[dartx.toInt]()) {
205 this[_checkIndex](dart.asInt(index));
206 }
207 return dart.as(super.get(index), E);
208 }
209 set(index, value) {
210 dart.as(value, E);
211 if (typeof index == 'number' && index == index[dartx.toInt]()) {
212 this[_checkIndex](dart.asInt(index));
213 }
214 super.set(index, value);
215 return value;
216 }
217 get length() {
218 let len = this[_jsObject].length;
219 if (typeof len === "number" && len >>> 0 === len) {
220 return len;
221 }
222 dart.throw(new core.StateError('Bad JsArray length'));
223 }
224 set length(length) {
225 super.set('length', length);
226 }
227 add(value) {
228 dart.as(value, E);
229 this.callMethod('push', dart.list([value], E));
230 }
231 addAll(iterable) {
232 dart.as(iterable, core.Iterable$(E));
233 let list = iterable instanceof Array ? iterable : core.List.from(iterabl e);
234 this.callMethod('push', dart.as(list, core.List));
235 }
236 insert(index, element) {
237 dart.as(element, E);
238 this[_checkInsertIndex](index);
239 this.callMethod('splice', dart.list([index, 0, element], core.Object));
240 }
241 removeAt(index) {
242 this[_checkIndex](index);
243 return dart.as(dart.dindex(this.callMethod('splice', dart.list([index, 1 ], core.int)), 0), E);
244 }
245 removeLast() {
246 if (this.length == 0) dart.throw(new core.RangeError(-1));
247 return dart.as(this.callMethod('pop'), E);
248 }
249 removeRange(start, end) {
250 JsArray$()._checkRange(start, end, this.length);
251 this.callMethod('splice', dart.list([start, dart.notNull(end) - dart.not Null(start)], core.int));
252 }
253 setRange(start, end, iterable, skipCount) {
254 dart.as(iterable, core.Iterable$(E));
255 if (skipCount === void 0) skipCount = 0;
256 JsArray$()._checkRange(start, end, this.length);
257 let length = dart.notNull(end) - dart.notNull(start);
258 if (length == 0) return;
259 if (dart.notNull(skipCount) < 0) dart.throw(new core.ArgumentError(skipC ount));
260 let args = dart.list([start, length], core.int);
261 args[dartx.addAll](iterable[dartx.skip](skipCount)[dartx.take](length));
262 this.callMethod('splice', args);
263 }
264 sort(compare) {
265 if (compare === void 0) compare = null;
266 dart.as(compare, dart.functionType(core.int, [E, E]));
267 this.callMethod('sort', compare == null ? [] : dart.list([compare], dart .functionType(core.int, [E, E])));
268 }
269 }
270 dart.defineNamedConstructor(JsArray, 'from');
271 dart.defineNamedConstructor(JsArray, '_fromJs');
272 dart.setSignature(JsArray, {
273 constructors: () => ({
274 JsArray: [JsArray$(E), []],
275 from: [JsArray$(E), [core.Iterable$(E)]],
276 _fromJs: [JsArray$(E), [dart.dynamic]]
277 }),
278 methods: () => ({
279 [_checkIndex]: [dart.dynamic, [core.int]],
280 [_checkInsertIndex]: [dart.dynamic, [core.int]],
281 get: [E, [core.Object]],
282 set: [dart.void, [core.Object, E]],
283 add: [dart.void, [E]],
284 addAll: [dart.void, [core.Iterable$(E)]],
285 insert: [dart.void, [core.int, E]],
286 removeAt: [E, [core.int]],
287 removeLast: [E, []],
288 setRange: [dart.void, [core.int, core.int, core.Iterable$(E)], [core.int ]],
289 sort: [dart.void, [], [dart.functionType(core.int, [E, E])]]
290 }),
291 statics: () => ({_checkRange: [dart.dynamic, [core.int, core.int, core.int ]]}),
292 names: ['_checkRange']
293 });
294 dart.defineExtensionMembers(JsArray, [
295 'get',
296 'set',
297 'add',
298 'addAll',
299 'insert',
300 'removeAt',
301 'removeLast',
302 'removeRange',
303 'setRange',
304 'sort',
305 'length',
306 'length'
307 ]);
308 return JsArray;
309 });
310 let JsArray = JsArray$();
311 function _isBrowserType(o) {
312 return o instanceof Blob || o instanceof Event || window.KeyRange && o insta nceof KeyRange || o instanceof ImageData || o instanceof Node || window.TypedDat a && o instanceof TypedData || o instanceof Window;
313 }
314 dart.fn(_isBrowserType, core.bool, [dart.dynamic]);
315 const _dartObj = Symbol('_dartObj');
316 class _DartObject extends core.Object {
317 _DartObject(dartObj) {
318 this[_dartObj] = dartObj;
319 }
320 }
321 dart.setSignature(_DartObject, {
322 constructors: () => ({_DartObject: [_DartObject, [dart.dynamic]]})
323 });
324 function _convertToJS(o) {
325 if (o == null || typeof o == 'string' || typeof o == 'number' || typeof o == 'boolean' || dart.notNull(_isBrowserType(o))) {
326 return o;
327 } else if (dart.is(o, core.DateTime)) {
328 return _js_helper.Primitives.lazyAsJsDate(o);
329 } else if (dart.is(o, JsObject)) {
330 return o[_jsObject];
331 } else if (dart.is(o, core.Function)) {
332 return _putIfAbsent(_jsProxies, o, _wrapDartFunction);
333 } else {
334 return _putIfAbsent(_jsProxies, o, dart.fn(o => new _DartObject(o), _DartO bject, [dart.dynamic]));
335 }
336 }
337 dart.fn(_convertToJS);
338 function _wrapDartFunction(f) {
339 let wrapper = function() {
340 let args = Array.prototype.map.call(arguments, _convertToDart);
341 return _convertToJS(f(...args));
342 };
343 dart.dsetindex(_dartProxies, wrapper, f);
344 return wrapper;
345 }
346 dart.fn(_wrapDartFunction);
347 function _convertToDart(o) {
348 if (o == null || typeof o == "string" || typeof o == "number" || typeof o == "boolean" || dart.notNull(_isBrowserType(o))) {
349 return o;
350 } else if (o instanceof Date) {
351 let ms = o.getTime();
352 return new core.DateTime.fromMillisecondsSinceEpoch(dart.asInt(ms));
353 } else if (dart.is(o, _DartObject) && dart.jsobject != dart.realRuntimeType( o)) {
354 return o[_dartObj];
355 } else {
356 return _putIfAbsent(_dartProxies, o, _wrapToDart);
357 }
358 }
359 dart.fn(_convertToDart, core.Object, [dart.dynamic]);
360 function _wrapToDart(o) {
361 if (typeof o == "function") {
362 return new JsFunction._fromJs(o);
363 }
364 if (o instanceof Array) {
365 return new JsArray._fromJs(o);
366 }
367 return new JsObject._fromJs(o);
368 }
369 dart.fn(_wrapToDart, JsObject, [dart.dynamic]);
370 const _dartProxies = new WeakMap();
371 const _jsProxies = new WeakMap();
372 function _putIfAbsent(weakMap, o, getValue) {
373 let value = weakMap.get(o);
374 if (value == null) {
375 value = dart.dcall(getValue, o);
376 weakMap.set(o, value);
377 }
378 return value;
379 }
380 dart.fn(_putIfAbsent, core.Object, [dart.dynamic, dart.dynamic, dart.functionT ype(dart.dynamic, [dart.dynamic])]);
381 function allowInterop(f) {
382 return f;
383 }
384 dart.fn(allowInterop, core.Function, [core.Function]);
385 dart.defineLazyProperties(exports, {
386 get _interopCaptureThisExpando() {
387 return new (core.Expando$(core.Function))();
388 },
389 set _interopCaptureThisExpando(_) {}
390 });
391 function allowInteropCaptureThis(f) {
392 let ret = exports._interopCaptureThisExpando.get(f);
393 if (ret == null) {
394 ret = dart.as(function() {
395 let args = [this];
396 for (let arg of arguments) {
397 args.push(arg);
398 }
399 return f(...args);
400 }, core.Function);
401 exports._interopCaptureThisExpando.set(f, ret);
402 }
403 return ret;
404 }
405 dart.fn(allowInteropCaptureThis, core.Function, [core.Function]);
406 // Exports:
407 exports.JsObject = JsObject;
408 exports.JsFunction = JsFunction;
409 exports.JsArray$ = JsArray$;
410 exports.JsArray = JsArray;
411 exports.allowInterop = allowInterop;
412 exports.allowInteropCaptureThis = allowInteropCaptureThis;
413 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698