From 48516b61ac5ca694486e038b1be45d01ec90178e Mon Sep 17 00:00:00 2001 From: Ala'a Mohammad Alawi Date: Tue, 1 May 2012 21:44:23 +0400 Subject: changed the implementation of extract-declarations as per Hans request - to be more readable/easier to reason about. --- util.lisp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/util.lisp b/util.lisp index ecfb689..717aa7c 100644 --- a/util.lisp +++ b/util.lisp @@ -228,15 +228,13 @@ determine whether CHAR must be escaped." character set." (escape-string string :test #'non-7bit-ascii-escape-char-p)) -(defun extract-declarations (body) +(defun extract-declarations (forms) "Given a FORM, the declarations - if any - will be extracted from the head of the FORM, and will return two values the declarations, and the remaining of FORM" - (loop for sexp = (first body) then (first forms) - for forms = (rest body) then (rest forms) - for declarations = nil - if (not (eq (first sexp) 'cl:declare)) - do (return (values declarations - (append (if (null sexp) sexp (list sexp)) forms))) - else - do (push sexp declarations))) \ No newline at end of file + (loop with declarations + for forms on forms + for form = (first forms) + while (eql (first form) 'cl:declare) + do (push form declarations) + finally (return (values (nreverse declarations) forms)))) \ No newline at end of file -- cgit v1.2.3