At 04:28 PM 3/15/2002 -0500, Dan Sugalski wrote:
>At 4:01 PM -0500 3/15/02, Clinton A. Pierce wrote:
>>I'm in the midst of writing some routines to debug pasm code, and one of 
>>the things I dearly want is a "stack dump" routine.  I can *almost* code 
>>this in pasm, except I'm missing one last component: a way to tell the 
>>depth of the stack without causing the runtime to bail.
>>
>>Any of the following would help:
>>
>>1. a rotate_up() that doesn't take an argument, instead the WHOLE stack 
>>rotates.
>>
>>2. an opcode that will tell me the stack depth
>>
>>3. A mod to rotate_up or entrytype that lets me start indexing from the 
>>*bottom* of the stack.
>>
>>4. some way of harmlessly catching the internal error "Stack Depth Wrong"
>>
>>[I'm not subscribed to p6i, cc me if you can otherwise I'll catch it in 
>>archives.  Thanks.]
>
>#4 needs to go in when we put in exceptions. Other than that... which do 
>you want? They're all reasonable, and while I don't want to do all of 
>them, any one of #s 1-3 are fine.

#3 is a can of worms best not opened, I think.

#2 on CPU's that I'm familiar with is usually done by querying the stack 
pointer register.  In parrotish:

         set I0, SP
         dec I0
         set SP, I0   # For a pop-without-a-target-register kind of action.

Dunno if that's the kind of design goal you're looking for.  Seems a shame 
to use a whole opcode just for querying/setting the stack depth.  But now 
that I think about it, this might be fun because then you can:

         set I0, SP     # Stake in the ground
         save X
         save Y
         save Z etc...
           (bunch of processing)
           ne some_exception_condition, okay

           # Whoops, error.
         set SP, I0     # Go back to your stake
           branch exception_handler

okay:  (more processing)

#1 seems the cleanest, because you don't have to add anything new except 
some parsing bits.  But going through a deep stack would get 
loopy.  :)  Hopefully, other than things like stack dumps, it won't happen 
often.

Sorry I'm so non-commital.  I'm approaching this like a fun little CPU to 
play with, but am (purposefully) trying to avoid developing an agenda or 
inject design.

Reply via email to