From 39f641b7711742bed10277665a1b1ee65f576fbe Mon Sep 17 00:00:00 2001 From: Stas Boukarev Date: Sun, 6 Mar 2016 16:15:11 +0300 Subject: [PATCH] Debugger: don't use symbol-macrolet on special variables. The debugger sets up a symbol-macrolet with local variables in a frame, and symbol-macrolet doesn't mix well with special variables. Fixes lp#1524922 --- src/code/debug-int.lisp | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/code/debug-int.lisp b/src/code/debug-int.lisp index f808b9a3c..81e35b4bb 100644 --- a/src/code/debug-int.lisp +++ b/src/code/debug-int.lisp @@ -2700,23 +2700,24 @@ register." (dolist (bind (binds)) (let ((name (first bind)) (var (third bind))) - (ecase (second bind) - (:valid - (specs `(,name (debug-var-value ',var ,n-frame)))) - (:more - (let ((count-var (fourth bind))) - (specs `(,name (multiple-value-list - (sb!c:%more-arg-values (debug-var-value ',var ,n-frame) - 0 - (debug-var-value ',count-var ,n-frame))))))) - (:unknown - (specs `(,name (debug-signal 'invalid-value - :debug-var ',var - :frame ,n-frame)))) - (:ambiguous - (specs `(,name (debug-signal 'ambiguous-var-name - :name ',name - :frame ,n-frame))))))) + (unless (eq (info :variable :kind name) :special) + (ecase (second bind) + (:valid + (specs `(,name (debug-var-value ',var ,n-frame)))) + (:more + (let ((count-var (fourth bind))) + (specs `(,name (multiple-value-list + (sb!c:%more-arg-values (debug-var-value ',var ,n-frame) + 0 + (debug-var-value ',count-var ,n-frame))))))) + (:unknown + (specs `(,name (debug-signal 'invalid-value + :debug-var ',var + :frame ,n-frame)))) + (:ambiguous + (specs `(,name (debug-signal 'ambiguous-var-name + :name ',name + :frame ,n-frame)))))))) (let ((res (coerce `(lambda (,n-frame) (declare (ignorable ,n-frame)) (symbol-macrolet ,(specs) ,form)) -- 2.11.4.GIT