X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fcondition.lisp;h=d6cfa9d1c11bb645fc917f07edc081caab6596c2;hb=da54f0f75754190f30f8585ff05bebd254aa4e40;hp=9b68c2b0c317581ef1eba5172c1f2f0461b0f807;hpb=63cef087068afc157283c0a05ae1f16b962303aa;p=sbcl.git diff --git a/src/code/condition.lisp b/src/code/condition.lisp index 9b68c2b..d6cfa9d 100644 --- a/src/code/condition.lisp +++ b/src/code/condition.lisp @@ -497,10 +497,6 @@ (t (error "unknown option: ~S" (first option))))) - (when (all-writers) - (warn "Condition slot setters probably not allowed in ANSI CL:~% ~S" - (all-writers))) - `(progn (eval-when (:compile-toplevel :load-toplevel :execute) (%compiler-define-condition ',name ',parent-types ',layout)) @@ -586,15 +582,7 @@ ((pathname :reader file-error-pathname :initarg :pathname)) (:report (lambda (condition stream) - (format stream - "~@" - (file-error-pathname condition) - ;; FIXME: ANSI's FILE-ERROR doesn't have FORMAT-CONTROL and - ;; FORMAT-ARGUMENTS, and the inheritance here doesn't seem - ;; to give us FORMAT-CONTROL or FORMAT-ARGUMENTS either. - ;; So how does this work? - (serious-condition-format-control condition) - (serious-condition-format-arguments condition))))) + (format stream "error on file ~S" (file-error-pathname condition))))) (define-condition package-error (error) ((package :reader package-error-package :initarg :package))) @@ -616,6 +604,13 @@ "The function ~S is undefined." (cell-error-name condition))))) +(define-condition special-form-function (undefined-function) () + (:report + (lambda (condition stream) + (format stream + "Cannot FUNCALL the SYMBOL-FUNCTION of special operator ~S." + (cell-error-name condition))))) + (define-condition arithmetic-error (error) ((operation :reader arithmetic-error-operation :initarg :operation @@ -701,6 +696,21 @@ "The index ~S is too large." (type-error-datum condition))))) +;;; Out-of-range &KEY END arguments are similar to, but off by one +;;; from out-of-range indices into the sequence. +;;; +;;; FIXME: Uh, but it isn't used for &KEY END things -- in fact, this +;;; is only used in one place, in SUBSEQ. Is it really necessary? Is +;;; it here so that we can actually go round seq.lisp decorating all +;;; the sequence functions with extra checks? -- CSR, 2002-11-01 +(define-condition end-too-large-error (type-error) + () + (:report + (lambda (condition stream) + (format stream + "The end-of-sequence specifier ~S is too large." + (type-error-datum condition))))) + (define-condition io-timeout (stream-error) ((direction :reader io-timeout-direction :initarg :direction)) (:report @@ -737,6 +747,17 @@ "unexpected end of file on ~S ~A" (stream-error-stream condition) (reader-eof-error-context condition))))) + +(define-condition reader-impossible-number-error (reader-error) + ((error :reader reader-impossible-number-error-error :initarg :error)) + (:report + (lambda (condition stream) + (let ((error-stream (stream-error-stream condition))) + (format stream "READER-ERROR ~@[at ~W ~]on ~S:~%~?~%Original error: ~A" + (file-position error-stream) error-stream + (reader-error-format-control condition) + (reader-error-format-arguments condition) + (reader-impossible-number-error-error condition)))))) ;;;; special SBCL extension conditions