X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=ecmalisp.lisp;h=6c173b942ec5d981444997881d57c05b22797c71;hb=d8cc32ffc4cb6502bd1efe75a49cebf80645b68a;hp=071879e984d9f0f85a19186646679e2e5e4bcaed;hpb=1712b0b7c7a221532f5bdc04bdecc6168abca39e;p=jscl.git diff --git a/ecmalisp.lisp b/ecmalisp.lisp index 071879e..6c173b9 100644 --- a/ecmalisp.lisp +++ b/ecmalisp.lisp @@ -24,8 +24,6 @@ #+ecmalisp (progn - - 'defmacro (eval-when-compile (%compile-defmacro 'defmacro '(lambda (name args &rest body) @@ -40,8 +38,23 @@ ,@body))) ',name)))) + (setq nil 'nil) + (setq t 't) + + (defmacro when (condition &body body) + `(if ,condition (progn ,@body) nil)) + + (defmacro unless (condition &body body) + `(if ,condition nil (progn ,@body))) + (defmacro defvar (name value) `(progn + (unless (boundp ',name) + (setq ,name ,value)) + ',name)) + + (defmacro defparameter (name value) + `(progn (setq ,name ,value) ',name)) @@ -59,9 +72,6 @@ (defvar *package* (new)) - (defvar nil 'nil) - (defvar t 't) - (defun null (x) (eq x nil)) @@ -133,12 +143,6 @@ (defmacro push (x place) `(setq ,place (cons ,x ,place))) - (defmacro when (condition &body body) - `(if ,condition (progn ,@body) nil)) - - (defmacro unless (condition &body body) - `(if ,condition nil (progn ,@body))) - (defmacro dolist (iter &body body) (let ((var (first iter)) (g!list (gensym))) @@ -811,6 +815,7 @@ (reverse (remove-if #'null-or-empty-p *toplevel-compilations*))) (defun %compile-defmacro (name lambda) + (toplevel-compilation (ls-compile `',name)) (push-to-lexenv (make-binding name 'macro lambda t) *environment* 'function)) (defvar *compilations* nil) @@ -1305,10 +1310,13 @@ (concat "(" x ").name")) (define-builtin set (symbol value) - (concat "(" symbol ").value =" value)) + (concat "(" symbol ").value = " value)) (define-builtin fset (symbol value) - (concat "(" symbol ").function =" value)) + (concat "(" symbol ").function = " value)) + +(define-builtin boundp (x) + (js!bool (concat "(" x ".value !== undefined)"))) (define-builtin symbol-value (x) (js!selfcall