X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ferror.lisp;h=1cf2c8ee57aaefb32357d17562e1889d3c4638f1;hb=71766d9db05e93567cb7e829abfc675c3cb895c9;hp=3a02c24451c92b53b45819c56d303898719ee809;hpb=25d4ea4f108159b9782f21212374a1631cfe9a56;p=sbcl.git diff --git a/src/code/error.lisp b/src/code/error.lisp index 3a02c24..1cf2c8e 100644 --- a/src/code/error.lisp +++ b/src/code/error.lisp @@ -124,6 +124,24 @@ stream ':external-format (stream-external-format stream) octets))))) +(define-condition c-string-encoding-error (character-encoding-error) + ((external-format :initarg :external-format :reader c-string-encoding-error-external-format)) + (:report + (lambda (c s) + (format s "~@" + (c-string-encoding-error-external-format c) + (character-encoding-error-code c))))) + +(define-condition c-string-decoding-error (character-decoding-error) + ((external-format :initarg :external-format :reader c-string-decoding-error-external-format)) + (:report + (lambda (c s) + (format s "~@" + (c-string-decoding-error-external-format c) + (character-decoding-error-octets c))))) + (define-condition control-stack-exhausted (storage-condition) () (:report @@ -132,9 +150,23 @@ (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 memory-fault-error (error) +(define-condition heap-exhausted-error (storage-condition) () (:report (lambda (condition stream) - (declare (ignore condition)) - (format stream "memory fault")))) \ No newline at end of file + (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) + ((address :initarg :address :reader memory-fault-error-address)) + (:report + (lambda (condition stream) + (format stream "Memory fault in address #x~X" (memory-fault-error-address condition)))))