Ticket #865 (closed defect: fixed)
restart-case mishandles cerror
| Reported by: | gz | Owned by: | |
|---|---|---|---|
| Priority: | normal | Milestone: | Clozure CL 1.8 |
| Component: | ANSI CL Compliance | Version: | trunk |
| Keywords: | Cc: |
Description
? (defun test (name) (restart-case (cerror "foo ~s" "bar ~s" name) (a-restart () nil))) TEST ? (test 'hah) > Error: bar HAH > While executing: TEST, in process listener(1). > Type :GO to continue, :POP to abort, :R for a list of available restarts. > If continued: foo #<error printing object>
Note the #<error printing object>. The problem seems to be restart-case transforming the cerror call and losing its format args in the process.
(pprint (macroexpand-1 '(restart-case (cerror "foo ~s" "bar ~s" name)
(a-restart () nil))))
(BLOCK #:G672
(LET* ((#:G673 (%CONS-RESTART 'A-RESTART NIL NIL NIL NIL))
(#:G670 (LIST #:G673)))
(DECLARE (DYNAMIC-EXTENT #:G673 #:G670))
(CATCH #:G670
(LET ((%RESTARTS% (CONS #:G670 %RESTARTS%)))
(DECLARE (DYNAMIC-EXTENT %RESTARTS%))
(RETURN-FROM #:G672
(LET ((#:G671
(CONDITION-ARG "bar ~s" (LIST NAME) 'SIMPLE-ERROR)))
(WITH-CONDITION-RESTARTS
#:G671
#:G670
(CERROR "foo ~s" #:G671)))))))
Change History
Note: See
TracTickets for help on using
tickets.
