This commit is contained in:
Andreas Gal 2014-07-11 20:20:41 -07:00
Родитель ebfb4b4bf5
Коммит b2d323445d
3 изменённых файлов: 392 добавлений и 886 удалений

1191
frame.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
Просмотреть файл

@ -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
};
})();