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,294 of 117,927    |
|    Ruvim to dxf    |
|    Re: QUIT and ABORT    |
|    05 May 25 21:29:19    |
   
   From: ruvim.pinka@gmail.com   
      
   On 2025-05-05 08:11, dxf wrote:   
   > On 4/05/2025 11:33 pm, Anton Ertl wrote:   
   >> ...   
   >> Here's the code I give to the Forth systems:   
   >>   
   >> 1 .( a ) cr -56 throw .( b )   
   >> .s   
   >> 2 .( a ) cr quit .( b )   
   >> .s   
   >> : foo 3 -56 throw ; ' foo catch 5   
   >> .s   
   >> : bar 4 quit ; ' bar catch 6   
   >> .s   
   >>   
   >> Let's see what different Forth systems do:   
   >> ...   
   >   
   > In DX-Forth QUIT is not CATCHable thus -56 THROW simply returns:   
   >   
   > a   
   > THROW #-56   
   >   
   > However modifying it to do so gives these results:   
   >   
   > 1 .( a ) cr -56 throw .( b )   
   >   
   > 'a' is displayed and the stack is: 1   
      
   This violates the behavior of `throw` specified in 9.6.1.2275,   
   because if there is no a user's exception frame, the data stack must be   
   emptied.   
      
   The table 9.1 in Forth-2012 (or 9.2 in Forth-94) does not affect the   
   behavior of `throw` at all.   
      
   Your implementation will probably fail the following test case:   
      
    t{ 123 [: 999 -56 throw ;] catch 456 -> 123 -56 456 }t   
      
      
      
   >   
   > 2 .( a ) cr quit .( b )   
   >   
   > 'a' is displayed and the stack is: 2   
   >   
   > : foo 3 -56 throw ; ' foo catch 5   
   >   
   > stack is: -56 5   
      
   These cases are standard-compliant.   
      
      
   >   
   > : bar 4 quit ; ' bar catch 6   
   >   
   > stack is: -56 6   
   >   
      
   This violates `quit` 6.1.2050, because:   
    - `quit` is not allowed to remove anything from the data stack (in   
   this case, remove 4 from the stack);   
    - `quit` is not allowed to place anything on the data stack (in this   
   case, place `-56`);   
    - `quit` is not allowed to interpret the remaining part of the input   
   buffer (in this case, interpret "6" and place 6 on the stack).   
      
      
      
   --   
   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