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