X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fcompiler-error.lisp;h=d2fbbfbe47ae2934b32daff5347fe26404d1b8c0;hb=127fd3d2fb843c6bb7ad0763e143d81877e760e8;hp=bd19505a80ae4ef3c991cd8b25f07d7eb4c26379;hpb=fea8ea02847ddc0864546a02480fb3e97d6fa318;p=sbcl.git diff --git a/src/compiler/compiler-error.lisp b/src/compiler/compiler-error.lisp index bd19505..d2fbbfb 100644 --- a/src/compiler/compiler-error.lisp +++ b/src/compiler/compiler-error.lisp @@ -82,7 +82,7 @@ ;;; CSR, 2003-05-13 (define-condition compiler-error (encapsulated-condition) () (:report (lambda (condition stream) - (print-object (encapsulated-condition condition) stream)))) + (print-object (encapsulated-condition condition) stream)))) ;;; Signal the appropriate condition. COMPILER-ERROR calls the bailout ;;; function so that it never returns (but compilation continues). @@ -111,20 +111,23 @@ (values)) (defun make-compiler-error-form (condition source) - ;; The condition must be literal so the this form kicks off the - ;; MAKE-LOAD-FORM in the file-compiler for COMPILED-PROGRAM-ERROR, - ;; not the encapsulated condition. - `(error ,(make-condition 'compiled-program-error - :condition condition - :source source))) + `(error 'compiled-program-error + :message ,(princ-to-string condition) + :source ,(princ-to-string source))) + +;;; Fatal compiler errors. We export FATAL-COMPILER-ERROR as an +;;; interface for errors that kill the compiler dead +;;; +;;; These are not a COMPILER-ERRORs, since we don't try to recover +;;; from them and keep chugging along, but instead immediately bail +;;; out of the entire COMPILE-FILE. + +(define-condition fatal-compiler-error (encapsulated-condition) + ()) ;;; the condition of COMPILE-FILE being unable to READ from the ;;; source file ;;; -;;; This is not a COMPILER-ERROR, since we don't try to recover from -;;; it and keep chugging along, but instead immediately bail out of -;;; the entire COMPILE-FILE. -;;; ;;; (The old CMU CL code did try to recover from this condition, but ;;; the code for doing that was messy and didn't always work right. ;;; Since in Common Lisp the simple act of reading and compiling code @@ -133,20 +136,17 @@ ;;; deeply confused, so we violate what'd otherwise be good compiler ;;; practice by not trying to recover from this error and bailing out ;;; instead.) -(define-condition input-error-in-compile-file (error) - (;; the original error which was trapped to produce this condition - (error :reader input-error-in-compile-file-error - :initarg :error) - ;; the position where the bad READ began, or NIL if unavailable, +(define-condition input-error-in-compile-file (fatal-compiler-error) + (;; the position where the bad READ began, or NIL if unavailable, ;; redundant, or irrelevant (position :reader input-error-in-compile-file-position - :initarg :position - :initform nil)) + :initarg :position + :initform nil)) (:report (lambda (condition stream) (format stream - "~@<~S failure in ~S~@[ at character ~W~]: ~2I~_~A~:>" - 'read - 'compile-file - (input-error-in-compile-file-position condition) - (input-error-in-compile-file-error condition))))) + "~@<~S failure in ~S~@[ at character ~W~]: ~2I~_~A~:>" + 'read + 'compile-file + (input-error-in-compile-file-position condition) + (encapsulated-condition condition)))))