Skip to content

Commit

Permalink
0.8.16.45:
Browse files Browse the repository at this point in the history
	made the system stop guessing whether a fooCASE normal-clause
		might have been intended as an otherwise-clause (and
		stop issuing STYLE-WARNINGs); this fixes an unreasonable
		guess reported by Tony Martinez sbcl-devel 2004-11-09
  • Loading branch information
William Harold Newman committed Nov 20, 2004
1 parent 760349a commit 3864bb9
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 13 deletions.
41 changes: 29 additions & 12 deletions src/code/macros.lisp
Expand Up @@ -181,8 +181,9 @@
;;; When MULTI-P, TEST is applied to the value of KEYFORM and each key
;;; for a given branch; otherwise, TEST is applied to the value of
;;; KEYFORM and the entire first element, instead of each part, of the
;;; case branch. When ERRORP, no T or OTHERWISE branch is permitted,
;;; and an ERROR form is generated. When PROCEEDP, it is an error to
;;; case branch. When ERRORP, no OTHERWISE-CLAUSEs are recognized,
;;; and an ERROR form is generated where control falls off the end
;;; of the ordinary clauses. When PROCEEDP, it is an error to
;;; omit ERRORP, and the ERROR form generated is executed within a
;;; RESTART-CASE allowing KEYFORM to be set and retested.
(defun case-body (name keyform cases multi-p test errorp proceedp needcasesp)
Expand All @@ -197,17 +198,33 @@
(unless (list-of-length-at-least-p case 1)
(error "~S -- bad clause in ~S" case name))
(destructuring-bind (keyoid &rest forms) case
(cond ((and (memq keyoid '(t otherwise))
(cond (;; an OTHERWISE-CLAUSE
;;
;; By the way... The old code here tried gave
;; STYLE-WARNINGs for normal-clauses which looked as
;; though they might've been intended to be
;; otherwise-clauses. As Tony Martinez reported on
;; sbcl-devel 2004-11-09 there are sometimes good
;; reasons to write clauses like that; and as I noticed
;; when trying to understand the old code so I could
;; understand his patch, trying to guess which clauses
;; don't have good reasons is fundamentally kind of a
;; mess. SBCL does issue style warnings rather
;; enthusiastically, and I have often justified that by
;; arguing that we're doing that to detect issues which
;; are tedious for programmers to detect for by
;; proofreading (like small typoes in long symbol
;; names, or duplicate function definitions in large
;; files). This doesn't seem to be an issue like that,
;; and I can't think of a comparably good justification
;; for giving STYLE-WARNINGs for legal code here, so
;; now we just hope the programmer knows what he's
;; doing. -- WHN 2004-11-20
(and (not errorp) ; possible only in CASE or TYPECASE,
; not in [EC]CASE or [EC]TYPECASE
(memq keyoid '(t otherwise))
(null (cdr cases)))
(if errorp
(progn
(style-warn "~@<Treating bare ~A in ~A as introducing a ~
normal-clause, not an otherwise-clause~@:>"
keyoid name)
(push keyoid keys)
(push `((,test ,keyform-value ',keyoid) nil ,@forms)
clauses))
(push `(t nil ,@forms) clauses)))
(push `(t nil ,@forms) clauses))
((and multi-p (listp keyoid))
(setf keys (append keyoid keys))
(push `((or ,@(mapcar (lambda (key)
Expand Down
2 changes: 1 addition & 1 deletion version.lisp-expr
Expand Up @@ -17,4 +17,4 @@
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
"0.8.16.44"
"0.8.16.45"

0 comments on commit 3864bb9

Please sign in to comment.