1 // This file is prepended to the result of compile ecmalisp.lisp, and
2 // contain runtime code that ecmalisp assumes to exist.
7 function globalEval (x) {
8 return eval.call (window, x);
11 function pv (x) { return x==undefined? nil: x; }
14 var r = [].slice.call(arguments);
15 r['multiple-value'] = true;
19 function forcemv (x) {
20 return typeof x == 'object' && 'multiple-value' in x? x: mv(x);
23 // NOTE: Define VALUES to be MV for toplevel forms. It is because
24 // `eval' compiles the forms and execute the Javascript code at
25 // toplevel with `js-eval', so it is necessary to return multiple
26 // values from the eval function.
29 function checkArgsAtLeast(args, n){
30 if (args.length < n) throw 'too few arguments';
33 function checkArgsAtMost(args, n){
34 if (args.length > n) throw 'too many arguments';
37 function checkArgs(args, n){
38 checkArgsAtLeast(args, n);
39 checkArgsAtMost(args, n);
42 // Improper list constructor (like LIST*)
44 if (arguments.length == 1)
47 var i = arguments.length-1;
48 var r = arguments[i--];
50 r = {car: arguments[i], cdr: r};