[slime-devel] Patch: suppress duplicated frame variables (Allegro)

Willem Broekema metawilm at gmail.com
Tue Jun 10 23:07:04 UTC 2008


On Tue, Jun 10, 2008 at 11:53 PM, Willem Broekema <metawilm at gmail.com> wrote:
> On Tue, Jun 10, 2008 at 11:04 PM, Bradford W Miller
>> (defun f (x y)
>>   (let ((y x)
>>           (x y))
>>    ...))

I should make clear that the frame variable duplication happens
without the programmer introducing a new variable. The reason for this
patch is that it is a bit annoying to see an extra line that has no
extra information:

(defun f (x y)
   (declare (optimize debug))
   (zut (bar x) y))

Compiling and calling (f 1 2) results of course in:

   Error: attempt to call `bar' which is an undefined function.

and zooming to the corresponding frame for of the f call gives:

[1] cl-user(37): :loc
Compiled lexical environment:
0(required): x: 1
1(required): y: 2
2(local): y: 2

which slime displays the frame as:

  4: (f 1 2)
      Locals:
        x = 1
        y = 2
        y = 2

while it would make more sense to see:

  4: (f 1 2)
      Locals:
        x = 1
        y = 2

But there is the opposite case: a user introducing a variable binding
that has identical name and value as a parameter (or an outer
binding). This patch could remove a duplicated line that the user
expected to see twice.

However, it seems very unlikely to me that that poses any problem: the
compiler could optimize away a local variable; there is no guaranteed
order in which the variables are listed. Meanwhile the unintended
duplicates are a more frequent annoyance.

(Perhaps a better way to handle this, would be to include the
"required" / "local" labels in the listing of the local variables?)

- Willem



More information about the slime-devel mailing list