[TUHS] GOTO etc

Bakul Shah bakul at iitbombay.org
Mon Mar 13 06:06:55 AEST 2023


Perhaps you’re talking about non-local GOTOs in Algol68, where you can jump from a nested procedure to a label in a lexically enclosing procedure. Pascal has this too. C has no nested procedures but its setjmp/longjmp is much more powerful (& dangerous). Though both can be used to the top level of a REPL or to jump to a known place after an error.

> On Mar 12, 2023, at 11:24 AM, Steve <srb at unixsh.com> wrote:
> 
>  Dennis added setjmp() and longjmp() so the shell could handle errors in a reasonable way.
> There are two places where setjmp was used in the original shell (7th edition) code as I recall.  Both at the top level
> in main.c.
> 
> The idea came from Algol68 but I do not know where it was originally invented.  longjmp() was used in the "exitsh"
> function that got called on the exit command, default trap routine and a fault with no trap set.
> 
> It was also used when executing a subshell to avoid a fork and exec.  In this case the setjmp() was at top level
> in the initial sh setup.
> 
> Hope this makes sense.  But these were two different uses.  One for error recovery and one to reset the execution environment
> back to initial state.
> 
> Steve
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.tuhs.org/pipermail/tuhs/attachments/20230312/16c6c05a/attachment.htm>


More information about the TUHS mailing list