From: Gabriel D. R. <gd...@in...> - 2009-07-06 16:45:01
|
The form exposes a bug in the SBCL DIVISION-BY-ZERO class. ;; --- cut here (defun invert-x (x) (/ 1 x)) (defun handle-div-by-zero (c) (let ((op (arithmetic-error-operation c)) (args (arithmetic-error-operands c))) (format *error-output* "op = ~A, args = ~A ~%" op args) (throw 'result "failed"))) (defun invert (x) (handler-bind ((division-by-zero #'handle-div-by-zero)) (catch 'result (invert-x x)))) (invert 0) ;; OK -- returns "failed" (invert 0.0) ;; KO -- drops into debugger ;; -- cut here On gets dropped into the debugger: debugger invoked on a SIMPLE-ERROR: unbound condition slot: SB-KERNEL::OPERANDS Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL. restarts (invokable by number or by possibly-abbreviated name): 0: [ABORT] Exit debugger, returning to top level. (SB-KERNEL::FIND-SLOT-DEFAULT #<SB-KERNEL::CONDITION-CLASSOID DIVISION-BY-ZERO> #S(SB-KERNEL::CONDITION-SLOT :NAME SB-KERNEL::OPERANDS :INITARGS (:OPERANDS) :READERS (ARITHMETIC-ERROR-OPERANDS) :WRITERS NIL :INITFORM-P NIL :INITFORM NIL :ALLOCATION :INSTANCE :CELL NIL :DOCUMENTATION NIL)) 0] |