When you hit a suspension, there is a J stack and the C program is in a
loop at the bottom level of C execution waiting for input. When you say
'cut stack', Roger goes sends a message to the current execution level
saying 'abort', and a message to the next-higher level saying 'restart
the last instruction'. Then suspension returns, with an error value.
This errors its way up the C execution levels. It gets to the aborted
explicit definition, which duly aborts. Execution continues until it
gets to the next explicit definition, which is where you cut the stack
back to. That wakes up and runs (unmindful of the pending error),
restarting at the failing line. Because debug is on, the execution of
this line is intercepted before it is executed, and you go back into
suspension at the new level.
No longjmp required.
Henry Rich
On 5/14/2019 2:51 PM, Raul Miller wrote:
I think I see what you are getting at: C stack function calls do not
show up as stack entries for 13!:x
But, for example, if I use (".) or some user defined verb instead of
(,) as an example, I can wind up with additional stack frames from my
debug session and there will be additional C stack frames behind the
scenes which would need to be unwound when cutting back the J stack.
(This is in contrast to how threaded code can work -- in threaded code
the stack of the host programming language can be kept level when
making calls in the client language -- depending on the threading
implementation, of course...)
Thanks,
---
This email has been checked for viruses by AVG.
https://www.avg.com
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm