93 строки
2.2 KiB
JavaScript
93 строки
2.2 KiB
JavaScript
// *** Environment setup code ***
|
|
var arguments_ = [];
|
|
|
|
var ENVIRONMENT_IS_NODE = typeof process === 'object';
|
|
var ENVIRONMENT_IS_WEB = typeof window === 'object';
|
|
var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
|
|
var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
|
|
|
|
if (ENVIRONMENT_IS_NODE) {
|
|
// Expose functionality in the same simple way that the shells work
|
|
// Note that we pollute the global namespace here, otherwise we break in node
|
|
print = function(x) {
|
|
process['stdout'].write(x + '\n');
|
|
};
|
|
printErr = function(x) {
|
|
process['stderr'].write(x + '\n');
|
|
};
|
|
|
|
var nodeFS = require('fs');
|
|
|
|
read = function(filename) {
|
|
var ret = nodeFS['readFileSync'](filename).toString();
|
|
if (!ret && filename[0] != '/') {
|
|
filename = __dirname.split('/').slice(0, -1).join('/') + '/src/' + filename;
|
|
ret = nodeFS['readFileSync'](filename).toString();
|
|
}
|
|
return ret;
|
|
};
|
|
|
|
load = function(f) {
|
|
globalEval(read(f));
|
|
};
|
|
|
|
arguments_ = process['argv'].slice(2);
|
|
|
|
} else if (ENVIRONMENT_IS_SHELL) {
|
|
// Polyfill over SpiderMonkey/V8 differences
|
|
if (!this['read']) {
|
|
this['read'] = function(f) { snarf(f) };
|
|
}
|
|
|
|
if (typeof scriptArgs != 'undefined') {
|
|
arguments_ = scriptArgs;
|
|
} else if (typeof arguments != 'undefined') {
|
|
arguments_ = arguments;
|
|
}
|
|
|
|
} else if (ENVIRONMENT_IS_WEB) {
|
|
this['print'] = printErr = function(x) {
|
|
console.log(x);
|
|
};
|
|
|
|
this['read'] = function(url) {
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open('GET', url, false);
|
|
xhr.send(null);
|
|
return xhr.responseText;
|
|
};
|
|
|
|
if (this['arguments']) {
|
|
arguments_ = arguments;
|
|
}
|
|
} else if (ENVIRONMENT_IS_WORKER) {
|
|
// We can do very little here...
|
|
|
|
this['load'] = importScripts;
|
|
|
|
} else {
|
|
throw 'Unknown runtime environment. Where are we?';
|
|
}
|
|
|
|
function globalEval(x) {
|
|
eval.call(null, x);
|
|
}
|
|
|
|
if (typeof load == 'undefined' && typeof read != 'undefined') {
|
|
this['load'] = function(f) {
|
|
globalEval(read(f));
|
|
};
|
|
}
|
|
|
|
if (typeof printErr === 'undefined') {
|
|
this['printErr'] = function(){};
|
|
}
|
|
|
|
if (typeof print === 'undefined') {
|
|
this['print'] = printErr;
|
|
}
|
|
// *** Environment setup code ***
|
|
|
|
print('hello, world!');
|
|
|