<br><font size=2 face="sans-serif">Umm, did you test this against code
like</font>
<br>
<br><font size=2 face="sans-serif">(defun f (x y)</font>
<br><font size=2 face="sans-serif">  (let ((y x)</font>
<br><font size=2 face="sans-serif">          (x
y))</font>
<br><font size=2 face="sans-serif">   ...))</font>
<br>
<br><font size=2 face="sans-serif">where there ARE both formal and local
variables with the same name?<br>
</font>
<br><font size=2 face="sans-serif">-- <br>
Bradford W. Miller<br>
Cognitive/Computer Scientist/Engineer<br>
<br>
Raytheon, Inc.<br>
1847 West Main Road<br>
Portsmouth, RI  02871-1087<br>
<br>
(401) 842-3578</font>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td width=40%><font size=1 face="sans-serif"><b>"Willem Broekema"
<metawilm@gmail.com></b> </font>
<br><font size=1 face="sans-serif">Sent by: slime-devel-bounces@common-lisp.net</font>
<p><font size=1 face="sans-serif">06/10/2008 04:28 PM</font>
<td width=59%>
<table width=100%>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">To</font></div>
<td><font size=1 face="sans-serif">slime-devel@common-lisp.net</font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">Subject</font></div>
<td><font size=1 face="sans-serif">[slime-devel] Patch: suppress duplicated
frame variables (Allegro)</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><tt><font size=2>The Allegro debugger sometimes includes a local variable
more than<br>
once as a variable in a frame.<br>
E.g.<br>
<br>
(defun f (x y)<br>
   (declare (optimize debug))<br>
   (zut (bar x) y))<br>
<br>
Allegro itself lists the frame variables as:<br>
<br>
Compiled lexical environment:<br>
0(required): x: 1<br>
1(required): y: 2<br>
2(local): y: 2<br>
<br>
This patch suppresses the duplicates as shown by Slime (which does not<br>
show the "required" / "local" labels).<br>
<br>
- Willem<br>
<br>
<br>
--- swank-allegro.lisp            
    10 Jun 2008 19:55:30 +0200        
        1.102<br>
+++ swank-allegro.lisp            
    10 Jun 2008 22:16:09 +0200        
        <br>
@@ -173,11 +173,16 @@<br>
   (debugger:output-frame stream frame :moderate))<br>
<br>
 (defimplementation frame-locals (index)<br>
-  (let ((frame (nth-frame index)))<br>
-    (loop for i from 0 below (debugger:frame-number-vars frame)<br>
-                
  collect (list :name (debugger:frame-var-name frame i)<br>
-                
                 
               
:id 0<br>
-                
                 
               
:value (debugger:frame-var-value frame i)))))<br>
+  (let* ((frame (nth-frame index))<br>
+         (locals (loop for i from 0 below (debugger:frame-number-vars
frame)<br>
+                    
collect (cons (debugger:frame-var-name frame i)<br>
+                    
              (debugger:frame-var-value
frame i)))))<br>
+    ;; Remove e.g. function arguments duplicated as local variables.<br>
+    (setq locals (delete-duplicates locals :test (lambda (x
y)<br>
+                    
                     
        (and (eq (car x) (car y))<br>
+                    
                     
             (eq (cdr x)<br>
(cdr y))))))<br>
+    (loop for (name . val) in locals<br>
+          collect (list :name name :id 0 :value
val))))<br>
<br>
 (defimplementation frame-var-value (frame var)<br>
   (let ((frame (nth-frame frame)))<br>
_______________________________________________<br>
slime-devel site list<br>
slime-devel@common-lisp.net<br>
http://common-lisp.net/mailman/listinfo/slime-devel<br>
</font></tt>
<br>
<br>
<br>