X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fparse-body.lisp;h=7966c85e7e9db4987278c289ef5adfa319d38ebd;hb=0338d1fc97a74b8ff332821ea275120b9de951c1;hp=53365a68c7d46e3ab255b19e15e099e6a578aed2;hpb=c41cb4c87eae7b04f844dca5f7edb5086c5d2d68;p=sbcl.git diff --git a/src/code/parse-body.lisp b/src/code/parse-body.lisp index 53365a6..7966c85 100644 --- a/src/code/parse-body.lisp +++ b/src/code/parse-body.lisp @@ -35,46 +35,46 @@ ;; a little bit. (flet ((doc-string-p (x remaining-forms) (if (stringp x) - (if doc-string-allowed - ;; ANSI 3.4.11 explicitly requires that a doc - ;; string be followed by another form (either an - ;; ordinary form or a declaration). Hence: - (if remaining-forms - (if doc - ;; ANSI 3.4.11 says that the consequences of - ;; duplicate doc strings are unspecified. - ;; That's probably not something the - ;; programmer intends. We raise an error so - ;; that this won't pass unnoticed. - (error "duplicate doc string ~S" x) - t))))) + (if doc-string-allowed + ;; ANSI 3.4.11 explicitly requires that a doc + ;; string be followed by another form (either an + ;; ordinary form or a declaration). Hence: + (if remaining-forms + (if doc + ;; ANSI 3.4.11 says that the consequences of + ;; duplicate doc strings are unspecified. + ;; That's probably not something the + ;; programmer intends. We raise an error so + ;; that this won't pass unnoticed. + (error "duplicate doc string ~S" x) + t))))) (declaration-p (x) (if (consp x) (let ((name (car x))) - (case name - ((declare) t) - ((declaim) - (unless toplevel - ;; technically legal, but rather unlikely to - ;; be what the user meant to do... - (style-warn - "DECLAIM where DECLARE was probably intended") - nil)) - (t nil)))))) + (case name + ((declare) t) + ((declaim) + (unless toplevel + ;; technically legal, but rather unlikely to + ;; be what the user meant to do... + (style-warn + "DECLAIM where DECLARE was probably intended") + nil)) + (t nil)))))) (tagbody :again (if forms - (let ((form1 (first forms))) - ;; Note: The (IF (IF ..) ..) stuff is because we don't - ;; have the macro AND yet.:-| - (if (doc-string-p form1 (rest forms)) - (setq doc form1) - (if (declaration-p form1) - (setq reversed-decls - (cons form1 reversed-decls)) - (go :done))) - (setq forms (rest forms)) - (go :again))) + (let ((form1 (first forms))) + ;; Note: The (IF (IF ..) ..) stuff is because we don't + ;; have the macro AND yet.:-| + (if (doc-string-p form1 (rest forms)) + (setq doc form1) + (if (declaration-p form1) + (setq reversed-decls + (cons form1 reversed-decls)) + (go :done))) + (setq forms (rest forms)) + (go :again))) :done) (values forms (nreverse reversed-decls)