+var window = this;
+var nil;
+
+function globalEval (x) {
+ return eval.call (window, x);
+}
+
+function pv (x) { return x==undefined? nil: x; }
+
+function mv(){
+ var r = [].slice.call(arguments);
+ r['multiple-value'] = true;
+ return r;
+}
+
+function forcemv (x) {
+ return typeof x == 'object' && 'multiple-value' in x? x: mv(x);
+}
+
+// NOTE: Define VALUES to be MV for toplevel forms. It is because
+// `eval' compiles the forms and execute the Javascript code at
+// toplevel with `js-eval', so it is necessary to return multiple
+// values from the eval function.
+var values = mv;
+
+function checkArgsAtLeast(args, n){
+ if (args.length < n) throw 'too few arguments';
+}
+
+function checkArgsAtMost(args, n){
+ if (args.length > n) throw 'too many arguments';