Add a FATAL-COMPILER-ERROR to indicate fatal file compiler errors.
This is a change to make SLIME handle READ errors on file compilation
better.
* export a FATAL-COMPILER-ERROR
* Make input-error-in-compile-file inherit from that.
* re-signal the FATAL-COMPILER-ERROR condition from sub-compile-file
so that SLIME has a remote chance of noticing what is going on
"CODE-CONSTANT-REF" "CODE-CONSTANT-SET"
"COMPILE-IN-LEXENV"
"COMPILE-LAMBDA-FOR-DEFUN"
"CODE-CONSTANT-REF" "CODE-CONSTANT-SET"
"COMPILE-IN-LEXENV"
"COMPILE-LAMBDA-FOR-DEFUN"
- "%COMPILER-DEFUN" "COMPILER-ERROR"
+ "%COMPILER-DEFUN" "COMPILER-ERROR" "FATAL-COMPILER-ERROR"
"COMPILER-NOTIFY"
"COMPILER-STYLE-WARN" "COMPILER-WARN"
"COMPONENT" "COMPONENT-HEADER-LENGTH"
"COMPILER-NOTIFY"
"COMPILER-STYLE-WARN" "COMPILER-WARN"
"COMPONENT" "COMPONENT-HEADER-LENGTH"
:message ,(princ-to-string condition)
:source ,(princ-to-string source)))
: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
;;;
;;; 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
;;; (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
;;; deeply confused, so we violate what'd otherwise be good compiler
;;; practice by not trying to recover from this error and bailing out
;;; instead.)
;;; 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
;; redundant, or irrelevant
(position :reader input-error-in-compile-file-position
:initarg :position
'read
'compile-file
(input-error-in-compile-file-position condition)
'read
'compile-file
(input-error-in-compile-file-position condition)
- (input-error-in-compile-file-error condition)))))
+ (encapsulated-condition condition)))))
(handler-case (read stream nil stream)
(reader-error (condition)
(error 'input-error-in-compile-file
(handler-case (read stream nil stream)
(reader-error (condition)
(error 'input-error-in-compile-file
;; We don't need to supply :POSITION here because
;; READER-ERRORs already know their position in the file.
))
;; We don't need to supply :POSITION here because
;; READER-ERRORs already know their position in the file.
))
;; file in the middle of something it's trying to read.
(end-of-file (condition)
(error 'input-error-in-compile-file
;; file in the middle of something it's trying to read.
(end-of-file (condition)
(error 'input-error-in-compile-file
;; We need to supply :POSITION here because the END-OF-FILE
;; condition doesn't carry the position that the user
;; probably cares about, where the failed READ began.
;; We need to supply :POSITION here because the END-OF-FILE
;; condition doesn't carry the position that the user
;; probably cares about, where the failed READ began.
;; Some errors are sufficiently bewildering that we just fail
;; immediately, without trying to recover and compile more of
;; the input file.
;; Some errors are sufficiently bewildering that we just fail
;; immediately, without trying to recover and compile more of
;; the input file.
- (input-error-in-compile-file (condition)
+ (fatal-compiler-error (condition)
+ (signal condition)
- "~@<compilation aborted because of input error: ~2I~_~A~:>"
+ "~@<compilation aborted because of fatal error: ~2I~_~A~:>"
condition)
(values nil t t)))))
condition)
(values nil t t)))))
;;; 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".)
;;; 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".)