X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fprelude.js;h=6f5feeaa9c15efcf60799a9dee9351b6a6e86ab7;hb=d28977241d642ea32277945b81a99c7171458433;hp=601781fc24a95e9fdaa31005b2fb2c0816876910;hpb=84e86dfe99d64c1cb0bec680c9154dd9b2d34ca6;p=jscl.git diff --git a/src/prelude.js b/src/prelude.js index 601781f..6f5feea 100644 --- a/src/prelude.js +++ b/src/prelude.js @@ -62,14 +62,23 @@ function make_lisp_string (string){ function xstring(x){ return x.join(''); } +function Symbol(name, package_name){ + this.name = name; + if (package_name) + this['package'] = package_name; +} + function lisp_to_js (x) { if (typeof x == 'object' && 'length' in x && x.type == 'character') return xstring(x); else if (typeof x == 'function'){ // Trampoline calling the Lisp function return (function(){ - return x.apply(this, [pv, arguments.length] + Array.prototype.slice.call(arguments)); - }) + var args = Array.prototype.slice.call(arguments); + for (var i in args) + args[i] = js_to_lisp(args[i]); + return lisp_to_js(x.apply(this, [pv, arguments.length].concat(args))); + }); } else return x; } @@ -80,7 +89,10 @@ function js_to_lisp (x) { else if (typeof x == 'function'){ // Trampoline calling the JS function return (function(values, nargs){ - return x.apply(this, Array.prototype.slice.call(arguments, 2)); - }) + var args = Array.prototype.slice.call(arguments, 2); + for (var i in args) + args[i] = lisp_to_js(args[i]); + return values(js_to_lisp(x.apply(this, args))); + }); } else return x; }