Skip to content

Commit

Permalink
[js] Refactor src/vm/js/nqp-runtime/global-context.js
Browse files Browse the repository at this point in the history
  • Loading branch information
Kaiepi committed Jun 10, 2019
1 parent f2b319d commit 33ae05a
Show file tree
Hide file tree
Showing 9 changed files with 87 additions and 82 deletions.
3 changes: 1 addition & 2 deletions src/vm/js/nqp-runtime/bootstrap.js
Expand Up @@ -21,8 +21,7 @@ const globalContext = require('./global-context.js');

const core = new SerializationContext('__6MODEL_CORE__');
core.description = 'core SC';

globalContext.initialize(context => context.scs['__6MODEL_CORE__'] = core);
globalContext.initialize(context => context.scs.set('__6MODEL_CORE__', core));

function addToScWithSt(obj) {
core.rootObjects.push(obj);
Expand Down
4 changes: 0 additions & 4 deletions src/vm/js/nqp-runtime/core.js
Expand Up @@ -597,9 +597,6 @@ op.scwbdisable = function() {
return ++globalContext.context.scwbDisableDepth;
};


globalContext.initialize(context => context.compilerRegistry = new Map());

op.bindcomp = function(language, compiler) {
globalContext.context.compilerRegistry.set(language, compiler);
return compiler;
Expand Down Expand Up @@ -858,7 +855,6 @@ class BuildSourceMap extends NQPObject {
exports.createSourceMap = createSourceMap;
exports.buildSourceMap = new BuildSourceMap();


class JavaScriptCompiler extends NQPObject {
$$mangleCode(code) {
if ('/*async*/' !== '/*asy' + 'nc*/') {
Expand Down
12 changes: 7 additions & 5 deletions src/vm/js/nqp-runtime/deserialization.js
Expand Up @@ -45,7 +45,7 @@ const REFVAR_CLONED_CODEREF = 12;
/** All the loaded serialization contexts using their unique IDs as keys */

module.exports.wval = function(handle, idx) {
return globalContext.context.scs[handle].rootObjects[idx];
return globalContext.context.scs.get(handle).rootObjects[idx];
};

op.deserialize = function(currentHLL, blob, sc, sh, codeRefs, conflicts, cuids, setupWVals) {
Expand All @@ -65,7 +65,9 @@ op.deserialize = function(currentHLL, blob, sc, sh, codeRefs, conflicts, cuids,
};

op.createsc = function(handle) {
return (globalContext.context.scs[handle] = new SerializationContext(handle));
const sc = new SerializationContext(handle);
globalContext.context.scs.set(handle, sc);
return sc;
};

op.scsetdesc = function(sc, desc) {
Expand Down Expand Up @@ -552,7 +554,7 @@ class BinaryCursor {
this.sc.deps = deps;

for (const i in dependencies) {
const dep = globalContext.context.scs[dependencies[i][0]];
const dep = globalContext.context.scs.get(dependencies[i][0]);
if (!dep) {
console.log(
'Missing dependencie, can\'t find serialization context handle:',
Expand Down Expand Up @@ -630,7 +632,7 @@ class BinaryCursor {
if (codeRef.staticVars) {
for (const name in codeRef.staticVars) {
if (codeRef.staticVars[name] instanceof Array) {
codeRef.staticVars[name] = globalContext.context.scs[codeRef.staticVars[name][0]].rootObjects[codeRef.staticVars[name][1]];
codeRef.staticVars[name] = globalContext.context.scs.get(codeRef.staticVars[name][0]).rootObjects[codeRef.staticVars[name][1]];
} else if (typeof codeRef.staticVars[name] === 'number') {
codeRef.staticVars[name] = sc.rootObjects[codeRef.staticVars[name]];
}
Expand All @@ -640,7 +642,7 @@ class BinaryCursor {
if (codeRef.contVars) {
for (const name in codeRef.contVars) {
if (codeRef.contVars[name] instanceof Array) {
codeRef.contVars[name] = globalContext.context.scs[codeRef.contVars[name][0]].rootObjects[codeRef.contVars[name][1]];
codeRef.contVars[name] = globalContext.context.scs.get(codeRef.contVars[name][0]).rootObjects[codeRef.contVars[name][1]];
} else if (typeof codeRef.contVars[name] === 'number') {
codeRef.contVars[name] = sc.rootObjects[codeRef.contVars[name]];
}
Expand Down
91 changes: 54 additions & 37 deletions src/vm/js/nqp-runtime/global-context.js
@@ -1,59 +1,76 @@
'use strict';

class GlobalContext {
constructor() {
this.restore = [];
this.save = [];
}
};
this.save = [];

module.exports.context = new GlobalContext();
// Serialization context properties.
this.scs = new Map();
this.compilingSCs = [];
this.scwbDisableDepth = 0;
this.neverRepossess = new WeakSet();

const initialization = [];
// HLL properties.
this.hllSyms = new Map();
this.hllConfigs = new Map();
this.compilerRegistry = new Map();

module.exports.initialize = function(setup) {
setup(module.exports.context);
initialization.push(setup);
};

module.exports.freshGlobalContext = function(setup) {
const old = module.exports.context;

for (const save of old.save) {
save(old);
// Runtime properties.
this.loadedCache = new WeakMap();
}
}

module.exports.context = new GlobalContext();
class GlobalContextWrapper {
constructor() {
this.context = new GlobalContext();
this.initialization = [];
}

for (const setup of initialization) {
setup(module.exports.context);
initialize(setup) {
setup(this.context);
this.initialization.push(setup);
}

return old;
};
freshGlobalContext(setup) {
const old = this.context;
for (const save of old.save) {
save(old);
}

module.exports.setGlobalContext = function(context) {
const old = module.exports.context;
this.context = new GlobalContext();
for (const setup of this.initialization) {
setup(this.context);
}

for (const save of old.save) {
save(old);
return old;
}

module.exports.context = context;
setGlobalContext(context) {
const old = this.context;
for (const save of old.save) {
save(old);
}

for (const action of context.restore) {
action(context);
this.context = context;
for (const action of this.context.restore) {
action(this.context);
}

return old;
}

return old;
};
restoreThisGlobalContext(callback) {
callback(this.context);
this.context.restore.push(callback);
}

module.exports.restoreThisGlobalContext = function(callback) {
callback(module.exports.context);
module.exports.context.restore.push(callback);
};
saveThisGlobalContext(callback) {
callback(this.context);
this.context.save.push(callback);
}

module.exports.saveThisGlobalContext = function(callback) {
callback(module.exports.context);
module.exports.context.save.push(callback);
// Think about compiling SCs.
};

// Think about compilingSCs
module.exports = new GlobalContextWrapper();
29 changes: 15 additions & 14 deletions src/vm/js/nqp-runtime/hll.js
Expand Up @@ -13,8 +13,6 @@ exports.op = op;

const globalContext = require('./global-context.js');

globalContext.initialize(context => context.hllSyms = new Map());

op.gethllsym = function(hllName, name) {
const hllSyms = globalContext.context.hllSyms;
if (hllSyms.has(hllName) && hllSyms.get(hllName).has(name)) {
Expand Down Expand Up @@ -88,22 +86,25 @@ op.hllizefor = function(ctx, obj, language) {
}
};

globalContext.initialize(context => context.hllConfigs = {});

function getHLL(language) {
const hllConfigs = globalContext.context.hllConfigs;

if (!hllConfigs[language]) {
hllConfigs[language] = new Map;
hllConfigs[language].set('slurpy_array', BOOT.Array);
hllConfigs[language].set('list', BOOT.Array);
hllConfigs[language].set('true_value', Null);
hllConfigs[language].set('false_value', Null);

// For serialization purposes
hllConfigs[language].set('name', language);
if (hllConfigs.has(language)) {
return hllConfigs.get(language);
}
return hllConfigs[language];

const hllConfig = new Map([
['slurpy_array', BOOT.Array],
['list', BOOT.Array],
['true_value', Null ],
['false_value', Null ],
// For serialization purposes.
['name', language ],
]);

hllConfigs.set(language, hllConfig);

return hllConfig;
}

exports.getHLL = getHLL;
Expand Down
18 changes: 8 additions & 10 deletions src/vm/js/nqp-runtime/runtime.js
Expand Up @@ -144,14 +144,13 @@ exports.loaderCtx = null;

/* dependencies */

globalContext.initialize(context => context.loadedCache = new Map());

function loadWithCache(code) {
const loadedCache = globalContext.context.loadedCache;

if (!loadedCache.has(code)) {
loadedCache.set(code, code(module.exports, false));
}

return loadedCache.get(code);
}

Expand Down Expand Up @@ -842,16 +841,15 @@ for (const prop in props) {
exports.buildSourceMap = core.buildSourceMap;
exports.createSourceMap = core.createSourceMap;

exports.ZERO = JSBI.BigInt(0);
exports.asIntN = asIntN.asIntN;
exports.ZERO = JSBI.BigInt(0);
exports.asIntN = asIntN.asIntN;
exports.asUintN = asIntN.asUintN;
exports.BigInt = JSBI.BigInt;

module.exports.freshGlobalContext = globalContext.freshGlobalContext;
module.exports.setGlobalContext = globalContext.setGlobalContext;
exports.BigInt = JSBI.BigInt;

module.exports.saveThisGlobalContext = globalContext.saveThisGlobalContext;
module.exports.restoreThisGlobalContext = globalContext.restoreThisGlobalContext;
module.exports.freshGlobalContext = (setup) => globalContext.freshGlobalContext(setup);
module.exports.setGlobalContext = (context) => globalContext.setGlobalContext(context);
module.exports.saveThisGlobalContext = (callback) => globalContext.saveThisGlobalContext(callback);
module.exports.restoreThisGlobalContext = (callback) => globalContext.restoreThisGlobalContext(callback);

exports.loadCompileTimeDependency = /*async*/ function(unit) {
const fakeModule = {};
Expand Down
2 changes: 0 additions & 2 deletions src/vm/js/nqp-runtime/serialization-context.js
Expand Up @@ -2,8 +2,6 @@

const globalContext = require('./global-context.js');

globalContext.initialize(context => context.scs = {});

const NQPObject = require('./nqp-object.js');

/**
Expand Down
2 changes: 1 addition & 1 deletion src/vm/js/nqp-runtime/serialization.js
Expand Up @@ -1040,7 +1040,7 @@ op.scsetcode = function(sc, idx, obj) {
};

op.neverrepossess = function(obj) {
globalContext.context.neverRepossess.set(obj, true);
globalContext.context.neverRepossess.add(obj);
return obj;
};

Expand Down
8 changes: 1 addition & 7 deletions src/vm/js/nqp-runtime/sixmodel.js
Expand Up @@ -10,12 +10,6 @@ const Null = require('./null.js');

const globalContext = require('./global-context.js');

globalContext.initialize(context => {
context.compilingSCs = [];
context.scwbDisableDepth = 0;
context.neverRepossess = new Map();
});

const constants = require('./constants.js');

/* Needed for setting defaults values of attrs for objects */
Expand Down Expand Up @@ -46,7 +40,7 @@ const NativeStrArg = nativeArgs.NativeStrArg;
function scwb() {
const compilingSCs = globalContext.context.compilingSCs;

if (compilingSCs.length == 0 || globalContext.context.scwbDisableDepth || globalContext.context.neverRepossess.get(this)) {
if (compilingSCs.length == 0 || globalContext.context.scwbDisableDepth || globalContext.context.neverRepossess.has(this)) {
return;
}

Expand Down

0 comments on commit 33ae05a

Please sign in to comment.