[armedbear-devel] [REVISED] Patch for including relevant java stack frames

Mark Evenson evenson at panix.com
Thu Jul 30 17:14:52 UTC 2009

On 7/30/09 12:41 PM, Tobias C. Rittweiler wrote:
>> Comments please on whether this functionality would be useful, and
>> potential improvements.
> a) Why did you change SYS:BACKTRACE-AS-LIST to listify the frames? I
>     deliberately changed it to return a list of StackFrame objects, so
>     higher levels can decide whether they want to print java frames, or
>     not. (Which addresses your concern about "abstraction barrier".)

 From what I recall this was to support the use of the :frame and 
:inspect methods in the top-level REPL as it worked before.  One could 
select a frame in the backtrace via ":frame n" (where n was the frame 
you were interested in), and then issue an ":inspect *" to start walking 
through the frame.  This should certainly be kept for the LispStackFrame 
but maybe not for the JavaStackFrame.  I think I ran into one problem 
that the "~S" representation of these objects was pretty opaque (i.e. 
just "#<JAVA-STACK-FRAME>" and "#<LISP-STACK-FRAME"), but I am not quite 
sure of my reasoning right now.  I'll revisit this in course of the 
renamings you suggest below.

>     Perhaps because the name BACKTRACE-AS-LIST could be understand to do
>     implicit listification? I could follow that line. In fact, I'd have
>     liked to perform the following renamings, but opted out to change too
>     many things with my patch:
>        Define BACKTRACE to return a list of StackFrames.
>        Define BACKTRACE-AS-LIST to return a list of listified stack
>        frames.

That sounds quite reasonable.  Sure, it is a lot of renaming, but other 
than SLIME, I think our only customer is 'top-level.lisp', so as long as 
we preserve the behavior there we should be fine.  I completely agree 
that calling our main backtrace function BACKTRACE-AS-LIST is wrong.

> b) I don't like that
>        (frame-to-list #<JAVA-STACK-FRAME>) =>  ("class.meth(file.java:NN)")
>     I think it should return ("class.meth" :file "file.java" :line NN) so
>     higher levels can use that information. (For example `v' in SLDB.)

Agreed.  I had a version doing plist like things as well, which makes a 
lot more sense for tools further down the line.  I was going to make the 
whole result a plist so as not to trip up future reorderings.  Would you 
just have the first element of the list be a string?

> c) PRINT-FRAME contains an IGNORE-ERRORS which purpose I don't
>     understand. Mind you, you actually copied that from my patch, so it's
>     all my fault---I just can't remember why I put it in there. Do you
>     know? If so, please add a comment.

Nope, I thought *you* had the deep reason here, so I was just slaving 
away via cut and paste.  I'll remove it in the next iteration.

"A screaming comes across the sky.  It has happened before, but there
is nothing to compare to it now."

More information about the armedbear-devel mailing list