// Create and return a lisp string for the Javascript string STRING.
function make_lisp_string (string){
var array = string.split("");
- array.type = 'character'
+ array.stringp = 1;
return array;
}
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')
+ if (typeof x == 'object' && 'length' in x && x.stringp == 1)
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;
}
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;
}