[movitz-cvs] CVS movitz/losp/muerte
ffjeld
ffjeld at common-lisp.net
Sun Apr 27 16:14:10 UTC 2008
Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory clnet:/tmp/cvs-serv18531
Modified Files:
eval.lisp
Log Message:
Fix parse-docstring-declarations-and-body. Fix bug in decode-keyword-formal.
--- /project/movitz/cvsroot/movitz/losp/muerte/eval.lisp 2008/04/27 08:38:01 1.33
+++ /project/movitz/cvsroot/movitz/losp/muerte/eval.lisp 2008/04/27 16:14:10 1.34
@@ -10,7 +10,7 @@
;;;; Author: Frode Vatvedt Fjeld <frodef at acm.org>
;;;; Created at: Fri Oct 19 21:15:12 2001
;;;;
-;;;; $Id: eval.lisp,v 1.33 2008/04/27 08:38:01 ffjeld Exp $
+;;;; $Id: eval.lisp,v 1.34 2008/04/27 16:14:10 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -149,11 +149,6 @@
((multiple-value-prog1)
(multiple-value-prog1 (eval-form (cadr form) env)
(eval-progn (cddr form) env)))
- ((destructuring-bind)
- (eval-progn (cdddr form)
- (make-destructuring-env (cadr form)
- (eval-form (caddr form) env)
- env)))
((catch)
(catch (eval-form (second form) env)
(eval-progn (cddr form) env)))
@@ -234,6 +229,26 @@
(dolist (d (cdar p))
(push d declarations))))
+(defun parse-docstring-declarations-and-body (forms &optional (declare-symbol 'muerte.cl::declare))
+ "From the list of FORMS, return first the non-declarations forms, second the declarations, ~
+ and third the documentation string."
+ (let ((docstring nil))
+ (do (declarations docstring)
+ ((endp forms)
+ (values nil
+ declarations
+ docstring))
+ (cond
+ ((typep (car forms)
+ '(cons (eql declare)))
+ (setf declarations (append declarations (cdr (pop forms)))))
+ ((and (stringp (car forms))
+ (cdr forms))
+ (setf docstring (pop forms)))
+ (t (return (values forms
+ declarations
+ docstring)))))))
+
(defun parse-docstring-declarations-and-body (forms &optional (declare 'declare))
"From the list of FORMS, return first the list of non-declaration forms, ~
second the list of declaration-specifiers, third any docstring."
@@ -241,9 +256,9 @@
(if (or (not (cdr forms))
(not (stringp (car forms))))
(parse-declarations-and-body forms)
- (multiple-value-call #'values
- (parse-declarations-and-body (cdr forms))
- (car forms))))
+ (multiple-value-call #'values
+ (parse-declarations-and-body (cdr forms))
+ (car forms))))
(defun compute-function-block-name (function-name)
(cond
@@ -290,7 +305,9 @@
Return the variable, keyword, init-fom, and supplied-p-parameter."
(cond
((symbolp formal)
- (values formal formal nil nil))
+ (values formal
+ (intern (symbol-name formal) :keyword)
+ nil nil))
((symbolp (car formal))
(values (car formal)
(intern (symbol-name (car formal)) :keyword)
@@ -302,8 +319,8 @@
(caddr formal)))))
(defun make-destructuring-env (pattern values env &key (recursive-p t)
- (environment-p nil)
- (whole-p t))
+ (environment-p nil)
+ (whole-p t))
(let (env-var)
(when (and whole-p (eq '&whole (car pattern)))
(push (cons (cadr pattern) values)
@@ -381,12 +398,12 @@
(push (cons (cdr pp) values)
env))
finally
- (when (and values (member state '(requireds optionals)))
- (simple-program-error "Too many arguments.")))
+ (when (and values (member state '(requireds optionals)))
+ (simple-program-error "Too many arguments.")))
(if (and environment-p env-var)
(cons (cons env-var env)
env)
- env)))
+ env)))
(defun eval-let (var-specs declarations-and-body env)
(let (special-vars
@@ -579,7 +596,8 @@
(values (if (not name)
function
(setf (symbol-function name) function))
- t nil)))
+ nil
+ nil)))
(defun macroexpand-1 (form &optional env)
(if (atom form)
More information about the Movitz-cvs
mailing list