Skip to content
This repository was archived by the owner on Feb 22, 2018. It is now read-only.

Commit 74bfe5b

Browse files
author
John Messerly
committed
fixes #40, extension methods for primitive types
fixes #138, extension methods for Iterable/List injected as needed, regardless of how the methods started fixes #142, extension methods and dynamic dispatch small change that fixes #139, recognize that '.length' doesn't need an extension method Also restores JSArray, moved the methods out of List, which is back to just being an interface. NOTE: this removes the capability of types that mix native JS members and some Dart extension members, instead it now *hides* all JS members for these native types. We'll want to bring that feature back to support dart:html, so it's just a simplification for now. Should be easy to add that capability when we pull in dart:html for reals. [email protected], [email protected] Review URL: https://codereview.chromium.org/1153003003
1 parent 6e49f34 commit 74bfe5b

38 files changed

+3016
-4457
lines changed

lib/runtime/dart/_interceptors.js

Lines changed: 456 additions & 240 deletions
Large diffs are not rendered by default.

lib/runtime/dart/_internal.js

Lines changed: 451 additions & 375 deletions
Large diffs are not rendered by default.

lib/runtime/dart/_isolate_helper.js

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -105,31 +105,31 @@ var async = dart.import(async);
105105
}
106106
serializeArray(x) {
107107
let serialized = [];
108-
serialized[core.$length] = x[core.$length];
109-
for (let i = 0; dart.notNull(i) < dart.notNull(x[core.$length]); i = dart.notNull(i) + 1) {
110-
serialized[core.$set](i, this.serialize(x[core.$get](i)));
108+
serialized.length = x.length;
109+
for (let i = 0; dart.notNull(i) < dart.notNull(x.length); i = dart.notNull(i) + 1) {
110+
serialized[dartx.set](i, this.serialize(x[dartx.get](i)));
111111
}
112112
return serialized;
113113
}
114114
serializeArrayInPlace(x) {
115-
for (let i = 0; dart.notNull(i) < dart.notNull(x[core.$length]); i = dart.notNull(i) + 1) {
116-
x[core.$set](i, this.serialize(x[core.$get](i)));
115+
for (let i = 0; dart.notNull(i) < dart.notNull(x.length); i = dart.notNull(i) + 1) {
116+
x[dartx.set](i, this.serialize(x[dartx.get](i)));
117117
}
118118
return x;
119119
}
120120
serializeMap(x) {
121121
let serializeTearOff = dart.bind(this, 'serialize');
122-
return ['map', x.keys[core.$map](dart.as(serializeTearOff, __CastType0))[core.$toList](), x.values[core.$map](dart.as(serializeTearOff, dart.functionType(core.Object, [dart.bottom])))[core.$toList]()];
122+
return ['map', x.keys[dartx.map](dart.as(serializeTearOff, __CastType0))[dartx.toList](), x.values[dartx.map](dart.as(serializeTearOff, dart.functionType(core.Object, [dart.bottom])))[dartx.toList]()];
123123
}
124124
serializeJSObject(x) {
125125
if (!!x.constructor && x.constructor !== Object) {
126126
this.unsupported(x, "Only plain JS Objects are supported:");
127127
}
128128
let keys = dart.as(Object.keys(x), core.List);
129129
let values = [];
130-
values[core.$length] = keys[core.$length];
131-
for (let i = 0; dart.notNull(i) < dart.notNull(keys[core.$length]); i = dart.notNull(i) + 1) {
132-
values[core.$set](i, this.serialize(x[keys[core.$get](i)]));
130+
values.length = keys.length;
131+
for (let i = 0; dart.notNull(i) < dart.notNull(keys.length); i = dart.notNull(i) + 1) {
132+
values[dartx.set](i, this.serialize(x[keys[dartx.get](i)]));
133133
}
134134
return ['js-object', keys, values];
135135
}
@@ -266,59 +266,59 @@ var async = dart.import(async);
266266
deserializeRef(x) {
267267
dart.assert(dart.equals(dart.dindex(x, 0), 'ref'));
268268
let serializationId = dart.as(dart.dindex(x, 1), core.int);
269-
return this.deserializedObjects[core.$get](serializationId);
269+
return this.deserializedObjects[dartx.get](serializationId);
270270
}
271271
deserializeByteBuffer(x) {
272272
dart.assert(dart.equals(dart.dindex(x, 0), 'buffer'));
273273
let result = dart.as(dart.dindex(x, 1), _native_typed_data.NativeByteBuffer);
274-
this.deserializedObjects[core.$add](result);
274+
this.deserializedObjects[dartx.add](result);
275275
return result;
276276
}
277277
deserializeTypedData(x) {
278278
dart.assert(dart.equals(dart.dindex(x, 0), 'typed'));
279279
let result = dart.as(dart.dindex(x, 1), _native_typed_data.NativeTypedData);
280-
this.deserializedObjects[core.$add](result);
280+
this.deserializedObjects[dartx.add](result);
281281
return result;
282282
}
283283
deserializeArrayInPlace(x) {
284-
for (let i = 0; dart.notNull(i) < dart.notNull(x[core.$length]); i = dart.notNull(i) + 1) {
285-
x[core.$set](i, this.deserialize(x[core.$get](i)));
284+
for (let i = 0; dart.notNull(i) < dart.notNull(x.length); i = dart.notNull(i) + 1) {
285+
x[dartx.set](i, this.deserialize(x[dartx.get](i)));
286286
}
287287
return x;
288288
}
289289
deserializeFixed(x) {
290290
dart.assert(dart.equals(dart.dindex(x, 0), 'fixed'));
291291
let result = dart.as(dart.dindex(x, 1), core.List);
292-
this.deserializedObjects[core.$add](result);
292+
this.deserializedObjects[dartx.add](result);
293293
return _interceptors.JSArray.markFixed(this.deserializeArrayInPlace(dart.as(result, _interceptors.JSArray)));
294294
}
295295
deserializeExtendable(x) {
296296
dart.assert(dart.equals(dart.dindex(x, 0), 'extendable'));
297297
let result = dart.as(dart.dindex(x, 1), core.List);
298-
this.deserializedObjects[core.$add](result);
298+
this.deserializedObjects[dartx.add](result);
299299
return _interceptors.JSArray.markGrowable(this.deserializeArrayInPlace(dart.as(result, _interceptors.JSArray)));
300300
}
301301
deserializeMutable(x) {
302302
dart.assert(dart.equals(dart.dindex(x, 0), 'mutable'));
303303
let result = dart.as(dart.dindex(x, 1), core.List);
304-
this.deserializedObjects[core.$add](result);
304+
this.deserializedObjects[dartx.add](result);
305305
return this.deserializeArrayInPlace(dart.as(result, _interceptors.JSArray));
306306
}
307307
deserializeConst(x) {
308308
dart.assert(dart.equals(dart.dindex(x, 0), 'const'));
309309
let result = dart.as(dart.dindex(x, 1), core.List);
310-
this.deserializedObjects[core.$add](result);
310+
this.deserializedObjects[dartx.add](result);
311311
return _interceptors.JSArray.markFixed(this.deserializeArrayInPlace(dart.as(result, _interceptors.JSArray)));
312312
}
313313
deserializeMap(x) {
314314
dart.assert(dart.equals(dart.dindex(x, 0), 'map'));
315315
let keys = dart.as(dart.dindex(x, 1), core.List);
316316
let values = dart.as(dart.dindex(x, 2), core.List);
317317
let result = dart.map();
318-
this.deserializedObjects[core.$add](result);
319-
keys = keys[core.$map](dart.bind(this, 'deserialize'))[core.$toList]();
320-
for (let i = 0; dart.notNull(i) < dart.notNull(keys[core.$length]); i = dart.notNull(i) + 1) {
321-
result.set(keys[core.$get](i), this.deserialize(values[core.$get](i)));
318+
this.deserializedObjects[dartx.add](result);
319+
keys = keys[dartx.map](dart.bind(this, 'deserialize'))[dartx.toList]();
320+
for (let i = 0; dart.notNull(i) < dart.notNull(keys.length); i = dart.notNull(i) + 1) {
321+
result.set(keys[dartx.get](i), this.deserialize(values[dartx.get](i)));
322322
}
323323
return result;
324324
}
@@ -339,31 +339,31 @@ var async = dart.import(async);
339339
} else {
340340
result = new _WorkerSendPort(managerId, isolateId, receivePortId);
341341
}
342-
this.deserializedObjects[core.$add](result);
342+
this.deserializedObjects[dartx.add](result);
343343
return result;
344344
}
345345
deserializeRawSendPort(x) {
346346
dart.assert(dart.equals(dart.dindex(x, 0), 'raw sendport'));
347347
let result = dart.as(dart.dindex(x, 1), isolate.SendPort);
348-
this.deserializedObjects[core.$add](result);
348+
this.deserializedObjects[dartx.add](result);
349349
return result;
350350
}
351351
deserializeJSObject(x) {
352352
dart.assert(dart.equals(dart.dindex(x, 0), 'js-object'));
353353
let keys = dart.as(dart.dindex(x, 1), core.List);
354354
let values = dart.as(dart.dindex(x, 2), core.List);
355355
let o = {};
356-
this.deserializedObjects[core.$add](o);
357-
for (let i = 0; dart.notNull(i) < dart.notNull(keys[core.$length]); i = dart.notNull(i) + 1) {
358-
o[keys[core.$get](i)] = this.deserialize(values[core.$get](i));
356+
this.deserializedObjects[dartx.add](o);
357+
for (let i = 0; dart.notNull(i) < dart.notNull(keys.length); i = dart.notNull(i) + 1) {
358+
o[keys[dartx.get](i)] = this.deserialize(values[dartx.get](i));
359359
}
360360
return o;
361361
}
362362
deserializeClosure(x) {
363363
dart.assert(dart.equals(dart.dindex(x, 0), 'function'));
364364
let name = dart.as(dart.dindex(x, 1), core.String);
365365
let result = dart.as(IsolateNatives._getJSFunctionFromName(name), core.Function);
366-
this.deserializedObjects[core.$add](result);
366+
this.deserializedObjects[dartx.add](result);
367367
return result;
368368
}
369369
deserializeDartObject(x) {
@@ -373,7 +373,7 @@ var async = dart.import(async);
373373
let instanceFromClassId = _foreign_helper.JS_EMBEDDED_GLOBAL('', _js_embedded_names.INSTANCE_FROM_CLASS_ID);
374374
let initializeObject = _foreign_helper.JS_EMBEDDED_GLOBAL('', _js_embedded_names.INITIALIZE_EMPTY_INSTANCE);
375375
let emptyInstance = instanceFromClassId(classId);
376-
this.deserializedObjects[core.$add](emptyInstance);
376+
this.deserializedObjects[dartx.add](emptyInstance);
377377
this.deserializeArrayInPlace(dart.as(fields, _interceptors.JSArray));
378378
return initializeObject(classId, emptyInstance, fields);
379379
}
@@ -553,7 +553,7 @@ var async = dart.import(async);
553553
this.controlPort = new RawReceivePortImpl._controlPort();
554554
this.pauseCapability = isolate.Capability.new();
555555
this.terminateCapability = isolate.Capability.new();
556-
this.delayedEvents = dart.setType([], core.List$(_IsolateEvent));
556+
this.delayedEvents = dart.list([], _IsolateEvent);
557557
this.pauseTokens = core.Set$(isolate.Capability).new();
558558
this.errorPorts = core.Set$(isolate.SendPort).new();
559559
this.initialized = false;
@@ -576,9 +576,9 @@ var async = dart.import(async);
576576
if (!dart.notNull(this.isPaused))
577577
return;
578578
this.pauseTokens.remove(resume);
579-
if (this.pauseTokens[core.$isEmpty]) {
580-
while (this.delayedEvents[core.$isNotEmpty]) {
581-
let event = this.delayedEvents[core.$removeLast]();
579+
if (this.pauseTokens.isEmpty) {
580+
while (this.delayedEvents[dartx.isNotEmpty]) {
581+
let event = this.delayedEvents[dartx.removeLast]();
582582
exports._globalState.topEventLoop.prequeue(event);
583583
}
584584
this.isPaused = false;
@@ -646,7 +646,7 @@ var async = dart.import(async);
646646
this.errorPorts.remove(port);
647647
}
648648
handleUncaughtError(error, stackTrace) {
649-
if (this.errorPorts[core.$isEmpty]) {
649+
if (this.errorPorts.isEmpty) {
650650
if (dart.notNull(this.errorsAreFatal) && dart.notNull(core.identical(this, exports._globalState.rootContext))) {
651651
return;
652652
}
@@ -660,8 +660,8 @@ var async = dart.import(async);
660660
return;
661661
}
662662
let message = core.List.new(2);
663-
message[core.$set](0, dart.toString(error));
664-
message[core.$set](1, stackTrace == null ? null : dart.toString(stackTrace));
663+
message[dartx.set](0, dart.toString(error));
664+
message[dartx.set](1, stackTrace == null ? null : dart.toString(stackTrace));
665665
for (let port of this.errorPorts)
666666
port.send(message);
667667
}
@@ -767,7 +767,7 @@ var async = dart.import(async);
767767
this[_addRegistration](portId, port);
768768
}
769769
[_updateGlobalState]() {
770-
if (dart.notNull(this.ports.length) - dart.notNull(this.weakPorts[core.$length]) > 0 || dart.notNull(this.isPaused) || !dart.notNull(this.initialized)) {
770+
if (dart.notNull(this.ports.length) - dart.notNull(this.weakPorts.length) > 0 || dart.notNull(this.isPaused) || !dart.notNull(this.initialized)) {
771771
exports._globalState.isolates.set(this.id, this);
772772
} else {
773773
this.kill();
@@ -836,7 +836,7 @@ var async = dart.import(async);
836836
this.events.addFirst(event);
837837
}
838838
dequeue() {
839-
if (this.events[core.$isEmpty])
839+
if (this.events.isEmpty)
840840
return null;
841841
return this.events.removeFirst();
842842
}
@@ -903,7 +903,7 @@ var async = dart.import(async);
903903
}
904904
process() {
905905
if (this.isolate.isPaused) {
906-
this.isolate.delayedEvents[core.$add](this);
906+
this.isolate.delayedEvents[dartx.add](this);
907907
return;
908908
}
909909
this.isolate.eval(this.fn);
@@ -1104,7 +1104,7 @@ var async = dart.import(async);
11041104
return IsolateNatives.spawn(null, dart.toString(uri), args, message, isLight, isSpawnUri, startPaused);
11051105
}
11061106
static spawn(functionName, uri, args, message, isLight, isSpawnUri, startPaused) {
1107-
if (uri != null && dart.notNull(uri.endsWith(".dart"))) {
1107+
if (uri != null && dart.notNull(uri[dartx.endsWith](".dart"))) {
11081108
uri = dart.notNull(uri) + ".js";
11091109
}
11101110
let port = isolate.ReceivePort.new();

0 commit comments

Comments
 (0)