home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.forth      Forth programmers eat a lot of Bratwurst      117,927 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 117,310 of 117,927   
   Ruvim to albert@spenarnc.xs4all.nl   
   Re: QUIT and ABORT   
   08 May 25 17:07:02   
   
   From: ruvim.pinka@gmail.com   
      
   On 2025-05-08 15:01, albert@spenarnc.xs4all.nl wrote:   
   > In article ,   
   > Ruvim   wrote:   
   >>   
   >> I use `quit` only for testing and debugging. And I expect to get into   
   >> the Forth text interpreter (Forth shell) exactly in the current program   
   >> state (as far as possible).   
   >>   
   >> If `quit` simply calls `-56 throw`, the program state will probably   
   >> change (due to actions after `catch` in the program, including restoring   
   >> the data stack depth in `throw`) when you get into the Forth shell.   
   >> Also, there is a chance that you will not get into the Forth shell at   
   >> all if the program does not re-throw the error in some places.   
   >>   
   >> So I would not recommend the suggested deviation in the `quit` behavior   
   >> even for new implementers, since this brakes the well-known expectation   
   >> from `quit`. A better way is to introduce another word with desired   
   >> behavior deviation.   
   >   
   > I introduced `break that does deviate from `QUIT only in not cleaning   
   > the return stack. So you can debug from such a nested "shell" with   
   > impunity. A soon as you type ^D into this shell, you can continue   
   > as if nothing happened. Or you can amend the stack, maybe even the   
   > return stack, is you know what you're doing.   
   >   
   > Of course `break must save and restore the current input stream.   
   > I have words for that. It is straightforward. Others have   
   > proposed INTERPRET-WHILE-READING or some such words.   
   > Maybe these words could define a `break, but not as easily.   
   >   
   > : break   
   >      SAVE   
   >      BEGIN '(ACCEPT)   CATCH   DUP   E_BROKEN_PIPE <>   WHILE   
   >      ?ERRUR   SET-SRC   INTERPRET   REPEAT   
   >      DROP   RESTORE   
   > ;   
   >   
   > : QUIT   
   >      POSTPONE [   
   >      BEGIN   
   >      R0   @   RSP!   \ this part is missing from break.   
   >      '(ACCEPT)   CATCH   DUP   E_BROKEN_PIPE =   IF   
   >      BYE   THEN   
   >      ?ERRUR   1+   SET-SRC   INTERPRET   OK   AGAIN   
   > ;   
      
   In this implementation, the following actions of 6.1.2050 `QUIT` are missed:   
      - store zero in SOURCE-ID if it is present,   
      - make the user input device the input source.   
      
      
   --   
   Ruvim   
      
   --- SoupGate-DOS v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca