0.9.14.3:
[sbcl.git] / src / code / error.lisp
index 522df87..8666181 100644 (file)
   (:report (lambda (condition stream)
              (format stream "Execution of a form compiled with errors.~%~
                              Form:~%  ~A~%~
   (:report (lambda (condition stream)
              (format stream "Execution of a form compiled with errors.~%~
                              Form:~%  ~A~%~
-                             Compile-time-error:~%  ~A"
+                             Compile-time error:~%  ~A"
                        (program-error-source condition)
                        (program-error-message condition)))))
 
                        (program-error-source condition)
                        (program-error-message condition)))))
 
+(define-condition interpreted-program-error
+    (program-error encapsulated-condition)
+  ;; Unlike COMPILED-PROGRAM-ERROR, we don't need to dump these, so
+  ;; storing the original condition and form is OK.
+  ((form :initarg :form :reader program-error-form))
+  (:report (lambda (condition stream)
+             (format stream "~&Evaluation of~%  ~S~%~
+                             caused error:~%  ~A~%"
+                     (program-error-form condition)
+                     (encapsulated-condition condition)))))
+
 (define-condition simple-control-error (simple-condition control-error) ())
 (define-condition simple-file-error    (simple-condition file-error)    ())
 (define-condition simple-program-error (simple-condition program-error) ())
 (define-condition simple-control-error (simple-condition control-error) ())
 (define-condition simple-file-error    (simple-condition file-error)    ())
 (define-condition simple-program-error (simple-condition program-error) ())
       (format stream
              "Control stack exhausted (no more space for function call frames).  This is probably due to heavily nested or infinitely recursive function calls, or a tail call that SBCL cannot or has not optimized away."))))
 
       (format stream
              "Control stack exhausted (no more space for function call frames).  This is probably due to heavily nested or infinitely recursive function calls, or a tail call that SBCL cannot or has not optimized away."))))
 
+(define-condition heap-exhausted-error (storage-condition)
+  ()
+  (:report
+   (lambda (condition stream)
+     (declare (special *heap-exhausted-error-available-bytes*
+                       *heap-exhausted-error-requested-bytes*))
+     ;; See comments in interr.lisp -- there is a method to this madness.
+     (if (and (boundp '*heap-exhausted-error-available-bytes*)
+              (boundp '*heap-exhausted-error-requested-bytes*))
+         (format stream
+                 "Heap exhausted: ~D bytes available, ~D requested. PROCEED WITH CAUTION!"
+                 *heap-exhausted-error-available-bytes*
+                 *heap-exhausted-error-requested-bytes*)
+         (print-unreadable-object (condition stream))))))
+
 (define-condition memory-fault-error (error)
   ()
   (:report
    (lambda (condition stream)
      (declare (ignore condition))
 (define-condition memory-fault-error (error)
   ()
   (:report
    (lambda (condition stream)
      (declare (ignore condition))
-     (format stream "memory fault"))))
\ No newline at end of file
+     (format stream "memory fault"))))