mirror of
https://github.com/kanaka/mal.git
synced 2024-09-19 09:38:28 +03:00
8a19f60386
- Reorder README to have implementation list after "learning tool" bullet. - This also moves tests/ and libs/ into impls. It would be preferrable to have these directories at the top level. However, this causes difficulties with the wasm implementations which need pre-open directories and have trouble with paths starting with "../../". So in lieu of that, symlink those directories to the top-level. - Move the run_argv_test.sh script into the tests directory for general hygiene.
40 lines
1.0 KiB
JavaScript
40 lines
1.0 KiB
JavaScript
// Node vs browser behavior
|
|
var interop = {};
|
|
if (typeof module === 'undefined') {
|
|
var exports = interop,
|
|
GLOBAL = window;
|
|
}
|
|
|
|
function resolve_js(str) {
|
|
if (str.match(/\./)) {
|
|
var re = /^(.*)\.[^\.]*$/,
|
|
match = re.exec(str);
|
|
return [eval(match[1]), eval(str)];
|
|
} else {
|
|
return [GLOBAL, eval(str)];
|
|
}
|
|
}
|
|
|
|
function js_to_mal(obj) {
|
|
if (obj === null || obj === undefined) {
|
|
return null;
|
|
}
|
|
var cache = [];
|
|
var str = JSON.stringify(obj, function(key, value) {
|
|
if (typeof value === 'object' && value !== null) {
|
|
if (cache.indexOf(value) !== -1) {
|
|
// Circular reference found, discard key
|
|
return;
|
|
}
|
|
// Store value in our collection
|
|
cache.push(value);
|
|
}
|
|
return value;
|
|
});
|
|
cache = null; // Enable garbage collection
|
|
return JSON.parse(str);
|
|
}
|
|
|
|
exports.resolve_js = interop.resolve_js = resolve_js;
|
|
exports.js_to_mal = interop.js_to_mal = js_to_mal;
|