Skip to content

Commit

Permalink
[js] Add support for loading compiled NQP code in the browser
Browse files Browse the repository at this point in the history
  • Loading branch information
pmurias committed Jul 17, 2018
1 parent a4f1de1 commit b42996b
Showing 1 changed file with 44 additions and 31 deletions.
75 changes: 44 additions & 31 deletions src/vm/js/nqp-runtime/runtime.js
Expand Up @@ -133,42 +133,55 @@ exports.libpath = function(paths) {

exports.loaderCtx = null;

op.loadbytecode = /*async*/ function(ctx, file) {
// HACK - temporary hack for rakudo-js
if (file == '/nqp/lib/Perl6/BOOTSTRAP.js') {
file = 'Perl6::BOOTSTRAP';
}

let loadFrom;
if (ctx && ((loadFrom = ctx.lookupDynamic('$*LOADBYTECODE_FROM')) !== Null)) {
} else {
loadFrom = module;
}

const oldLoaderCtx = exports.loaderCtx;
exports.loaderCtx = ctx;
const mangled = file.replace(/::/g, '-');
/* dependencies */

if (process.browser) {
op.loadbytecode = /*async*/ function(ctx, file) {
const oldLoaderCtx = exports.loaderCtx;
exports.loaderCtx = ctx;
file = file.replace(/\.setting$/, '_setting');
file = file.replace(/::/g, '-');
require('./' + file + '.nqp-raw-runtime');
exports.loaderCtx = oldLoaderCtx;
};
} else {
op.loadbytecode = /*async*/ function(ctx, file) {
// HACK - temporary hack for rakudo-js
if (file == '/nqp/lib/Perl6/BOOTSTRAP.js') {
file = 'Perl6::BOOTSTRAP';
}

const prefixes = libpath.slice();
prefixes.push('./', './nqp-js-on-js/');
let found = false;
for (const prefix of prefixes) {
try {
/*await*/ loadFrom.require(prefix + mangled);
let loadFrom;
if (ctx && ((loadFrom = ctx.lookupDynamic('$*LOADBYTECODE_FROM')) !== Null)) {
} else {
loadFrom = module;
}

found = true;
break;
} catch (e) {
if (e.code !== 'MODULE_NOT_FOUND') {
throw e;
const oldLoaderCtx = exports.loaderCtx;
exports.loaderCtx = ctx;
const mangled = file.replace(/::/g, '-');

const prefixes = libpath.slice();
prefixes.push('./', './nqp-js-on-js/');
let found = false;
for (const prefix of prefixes) {
try {
/*await*/ loadFrom.require(prefix + mangled);

found = true;
break;
} catch (e) {
if (e.code !== 'MODULE_NOT_FOUND') {
throw e;
}
}
}
}
if (!found) throw `can't find: ${file}, looking in: ${prefixes.join(', ')} from ${loadFrom.filename}`;
exports.loaderCtx = oldLoaderCtx;
if (!found) throw `can't find: ${file}, looking in: ${prefixes.join(', ')} from ${loadFrom.filename}`;
exports.loaderCtx = oldLoaderCtx;

return file;
};
return file;
};
}

op.loadbytecodefh = function(ctx, fh, file) {
const oldLoaderCtx = exports.loaderCtx;
Expand Down

0 comments on commit b42996b

Please sign in to comment.