X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=test.lisp;h=dc1b52ede9812d09fc622b9fcbcd6467c8513ca2;hb=3eb043e814a43ce8fcb12e4121225ad484f00671;hp=d4ff11f55732111a8b7650878c0f4235c15ca638;hpb=1f7914504ed7424902f66d1760c413ef39ac6f1e;p=jscl.git diff --git a/test.lisp b/test.lisp index d4ff11f..dc1b52e 100644 --- a/test.lisp +++ b/test.lisp @@ -94,12 +94,15 @@ x (list x))) -(defun append (list1 list2) +(defun append-two (list1 list2) (if (null list1) list2 (cons (car list1) (append (cdr list1) list2)))) +(defun append (&rest lists) + (!reduce #'append-two lists '())) + (defun reverse-aux (list acc) (if (null list) acc @@ -736,7 +739,7 @@ (lookup-function-translation x fenv)))) #+common-lisp -c(defmacro eval-when-compile (&body body) +(defmacro eval-when-compile (&body body) `(eval-when (:compile-toplevel :load-toplevel :execute) ,@body)) @@ -828,7 +831,7 @@ c(defmacro eval-when-compile (&body body) (compile-bool (concat "(" (ls-compile x env fenv) "===" (ls-compile nil env fenv) ")"))) (define-compilation cons (x y) - (concat "{car: " (ls-compile x env fenv) ", cdr: " (ls-compile y env fenv) "}")) + (concat "({car: " (ls-compile x env fenv) ", cdr: " (ls-compile y env fenv) "})")) (define-compilation consp (x) (compile-bool @@ -837,10 +840,16 @@ c(defmacro eval-when-compile (&body body) "; return (typeof tmp == 'object' && 'car' in tmp);})()"))) (define-compilation car (x) - (concat "(" (ls-compile x env fenv) ").car")) + (concat "(function () { var tmp = " (ls-compile x env fenv) + "; return tmp === " (ls-compile nil nil nil) "? " + (ls-compile nil nil nil) + ": tmp.car; })()")) (define-compilation cdr (x) - (concat "(" (ls-compile x env fenv) ").cdr")) + (concat "(function () { var tmp = " (ls-compile x env fenv) + "; return tmp === " (ls-compile nil nil nil) "? " + (ls-compile nil nil nil) + ": tmp.cdr; })()")) (define-compilation setcar (x new) (concat "((" (ls-compile x env fenv) ").car = " (ls-compile new env fenv) ")")) @@ -958,11 +967,12 @@ c(defmacro eval-when-compile (&body body) (and (symbolp x) (eq (binding-type (lookup-function x *fenv*)) 'macro))) (defun ls-macroexpand-1 (form env fenv) - (when (macrop (car form)) - (let ((binding (lookup-function (car form) *env*))) - (if (eq (binding-type binding) 'macro) - (apply (eval (binding-translation binding)) (cdr form)) - form)))) + (if (macrop (car form)) + (let ((binding (lookup-function (car form) *env*))) + (if (eq (binding-type binding) 'macro) + (apply (eval (binding-translation binding)) (cdr form)) + form)) + form)) (defun compile-funcall (function args env fenv) (cond