Open shamazmazum opened 3 years ago
CL-USER> (destructuring-bind-star:destructuring-bind* (a b (c d &rest e) &rest f) '(1 2 ("a" "b" "c" "d") 3 4) (values b c e))) ; in: ; DESTRUCTURING-BIND-STAR:DESTRUCTURING-BIND* (A B (C D &REST E) &REST F) ; (DESTRUCTURING-BIND ; (A B (C (PROG2 (SETF #) D (SETF #)) &REST E) &REST F) ; #:VALUE629 ; (SETF #:IN-BODY626 T) ; (LOCALLY (VALUES B C E))) ; --> SB-INT:BINDING* ; ==> ; (LET* ((#:G0 (SB-C::CHECK-DS-LIST/&REST #:VALUE629 3 3 '(A B # &REST F))) ; (A (POP #:G0)) ; (B (POP #:G0)) ; (#:G1 (SB-C::CHECK-DS-LIST/&REST (POP #:G0) 2 2 '(C # &REST E))) ; (C (POP #:G1)) ; (#:G2 (SB-C::CHECK-DS-LIST (POP #:G1) 4 4 '(PROG2 # D #))) ; (PROG2 (POP #:G2)) ; (#:G3 (SB-C::CHECK-DS-LIST (POP #:G2) 3 3 '(SETF #))) ; (SETF (POP #:G3)) ; (#:IN-BODY626 (POP #:G3)) ; (T (POP #:G3)) ; (D (POP #:G2)) ; ...) ; (DECLARE (IGNORABLE #:G5)) ; (SETF #:IN-BODY626 T) ; (LOCALLY (VALUES B C E))) ; ; caught ERROR: ; COMMON-LISP:T names a defined constant, and cannot be used in LET*. ; (LET ((#:VALUE629 '(1 2 ("a" "b" "c" "d") 3 4))) ; (HANDLER-BIND ((ERROR #'#:HANDLE627)) ; (DESTRUCTURING-BIND ; (A B (C # &REST E) &REST F) ; #:VALUE629 ; (SETF #:IN-BODY626 T) ; (LOCALLY (VALUES B C E))))) ; ; caught STYLE-WARNING: ; The variable #:VALUE629 is defined but never used. ; ; compilation unit finished ; caught 1 ERROR condition ; caught 1 STYLE-WARNING condition
Macroexpansion doesn't seem to be legit (prog2 leaked in destructuring-bind's lambda-list):
prog2
destructuring-bind
(LET (#:IN-BODY630) (FLET ((#:HANDLE631 (#:CONDITION632) (UNLESS #:IN-BODY630 (ERROR (MAKE-CONDITION 'DESTRUCTURING-BIND-STAR:DESTRUCTURING-ERROR :LAMBDA-LIST '(A B (C D &REST E) &REST F) :EXPRESSION ''(1 2 ("a" "b" "c" "d") 3 4) :REASON #:CONDITION632))))) (DECLARE (IGNORABLE (FUNCTION #:HANDLE631))) (LET ((#:VALUE633 '(1 2 ("a" "b" "c" "d") 3 4))) (HANDLER-BIND ((ERROR #'#:HANDLE631)) (DESTRUCTURING-BIND (A B (C (PROG2 (SETF #:IN-BODY630 T) D (SETF #:IN-BODY630 NIL)) &REST E) &REST F) #:VALUE633 (SETF #:IN-BODY630 T) (LOCALLY (VALUES B C E)))))))
This isn't just SBCL 2.1.4, it's the fact that my destructuring-lambda-list logic is broken. Thanks for letting me know, I'll fix this eventually!
Macroexpansion doesn't seem to be legit (
prog2
leaked indestructuring-bind
's lambda-list):