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 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