зеркало из https://github.com/mozilla/pluotsorbet.git
rewrite bytecodes
This commit is contained in:
Родитель
ebfb4b4bf5
Коммит
b2d323445d
1165
frame.js
1165
frame.js
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
47
scheduler.js
47
scheduler.js
|
@ -3,49 +3,36 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var MODE = {
|
var Scheduler = function() {
|
||||||
NORMAL: 0,
|
|
||||||
SYNC: 1,
|
|
||||||
YIELD: 2
|
|
||||||
};
|
|
||||||
|
|
||||||
var Scheduler = function(mticks) {
|
|
||||||
if (this instanceof Scheduler) {
|
if (this instanceof Scheduler) {
|
||||||
this._ticks = 0;
|
this._ticks = 0;
|
||||||
this._mode = MODE.NORMAL;
|
this._sync = false;
|
||||||
|
this._yieldException = {};
|
||||||
} else {
|
} else {
|
||||||
return new Scheduler(mticks);
|
return new Scheduler();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Scheduler.prototype.tick = function(pid, fn) {
|
Scheduler.prototype.yield = function(pid) {
|
||||||
switch(this._mode) {
|
if (!this._sync && ++this._ticks > THREADS.getThread(pid).getPriority()) {
|
||||||
case MODE.SYNC:
|
|
||||||
fn();
|
|
||||||
break;
|
|
||||||
case MODE.YIELD:
|
|
||||||
this._mode = MODE.NORMAL;
|
|
||||||
this._ticks = 0;
|
this._ticks = 0;
|
||||||
setTimeout(fn, 0);
|
throw this._yieldException;
|
||||||
break;
|
|
||||||
case MODE.NORMAL:
|
|
||||||
if (++this._ticks > THREADS.getThread(pid).getPriority()) {
|
|
||||||
this._ticks = 0;
|
|
||||||
setTimeout(fn, 0);
|
|
||||||
} else {
|
|
||||||
fn();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Scheduler.prototype.yield = function() {
|
Scheduler.prototype.spawn = function(fn) {
|
||||||
this._mode = MODE.YIELD;
|
try {
|
||||||
|
fn();
|
||||||
|
} catch (e) {
|
||||||
|
if (e !== this._yieldException)
|
||||||
|
throw e;
|
||||||
|
setTimeout(fn, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Scheduler.prototype.sync = function(fn) {
|
Scheduler.prototype.sync = function(fn) {
|
||||||
this._mode = MODE.SYNC;
|
this._sync = true;
|
||||||
fn();
|
fn();
|
||||||
this._mode = MODE.NORMAL;
|
this._sync = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
38
util.js
38
util.js
|
@ -86,6 +86,37 @@ var util = (function () {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function double2float(d) {
|
||||||
|
if (a > 3.40282346638528860e+38)
|
||||||
|
return Number.POSITIVE_INFINITY;
|
||||||
|
if (0 < a < 1.40129846432481707e-45)
|
||||||
|
return 0;
|
||||||
|
if (a < -3.40282346638528860e+38)
|
||||||
|
return Number.NEGATIVE_INFINITY;
|
||||||
|
if (0 > a > -1.40129846432481707e-45)
|
||||||
|
return 0;
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
var INT_MAX = Math.pow(2, 31) - 1;
|
||||||
|
var INT_MIN = -INT_MAX - 1;
|
||||||
|
|
||||||
|
function double2int(d) {
|
||||||
|
if (a > INT_MAX)
|
||||||
|
return INT_MAX;
|
||||||
|
if (a < INT_MIN)
|
||||||
|
return INT_MIN;
|
||||||
|
return a|0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function double2long(d) {
|
||||||
|
if (d === Number.POSITIVE_INFINITY)
|
||||||
|
return gLong.MAX_VALUE;
|
||||||
|
if (d === Number.NEGATIVE_INFINITY)
|
||||||
|
return gLong.MIN_VALUE;
|
||||||
|
return gLong.fromNumber(d);
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
inherits: inherits,
|
inherits: inherits,
|
||||||
format: format,
|
format: format,
|
||||||
|
@ -95,6 +126,11 @@ var util = (function () {
|
||||||
info: console.info.bind(console),
|
info: console.info.bind(console),
|
||||||
warn: console.warn.bind(console),
|
warn: console.warn.bind(console),
|
||||||
decodeUtf8: decodeUtf8,
|
decodeUtf8: decodeUtf8,
|
||||||
defaultValue: defaultValue
|
defaultValue: defaultValue,
|
||||||
|
double2float: double2float,
|
||||||
|
double2int: double2int,
|
||||||
|
double2long: double2long,
|
||||||
|
INT_MAX: INT_MAX,
|
||||||
|
INT_MIN: INT_MIN
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче