Made the ignore declaration in define-ps-special-form be generated on the condition...
authorVladimir Sedach <vsedach@gmail.com>
Sun, 5 Apr 2009 23:50:15 +0000 (17:50 -0600)
committerviper <viper@blackbox.(none)>
Sun, 5 Apr 2009 23:52:33 +0000 (17:52 -0600)
src/compiler.lisp
src/utils.lisp

index a3420ae..aff2e9e 100644 (file)
 'expecting' automatically added to the arglist) to the special form is
 a keyword indicating whether the form is expected to produce
 an :expression or a :statement."
-  (let ((args (gensym "ps-arglist-")))
+  (let ((args (gensym "ps-arglist-"))
+        (expecting-used-p (member 'expecting (flatten body))))
     `(setf (gethash ',name *ps-special-forms*)
            (lambda (&rest ,args)
              (destructuring-bind ,(cons 'expecting lambda-list)
                  ,args
-               (declare (ignore expecting))
+               ,(unless expecting-used-p '(declare (ignore expecting)))
                ,@body)))))
 
 (defun undefine-ps-special-form (name)
index f87bc59..897305e 100644 (file)
@@ -1,4 +1,4 @@
-(in-package :parenscript)
+(in-package "PARENSCRIPT")
 
 (defun string-join (strings separator)
   (format nil "~{~}" (format nil "~~a~~^~a" separator) strings))
@@ -99,3 +99,8 @@ SOMEGLOBAL."
 (defun ordered-set-difference (list1 list2 &key (test #'eql)) ; because the CL set-difference may not preserve order
   (reduce (lambda (list el) (remove el list :test test))
           (cons list1 list2)))
+
+(defun flatten (x &optional acc)
+  (cond ((null x) acc)
+        ((atom x) (cons x acc))
+        (t (flatten (car x) (flatten (cdr x) acc)))))
\ No newline at end of file