Deutsch English Français Italiano |
<vvashh$ra84$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!weretis.net!feeder9.news.weretis.net!news.quux.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail From: Ruvim <ruvim.pinka@gmail.com> Newsgroups: comp.lang.forth Subject: Re: QUIT and ABORT Date: Mon, 5 May 2025 21:29:19 +0400 Organization: A noiseless patient Spider Lines: 72 Message-ID: <vvashh$ra84$1@dont-email.me> References: <87bjtn2hct.fsf@gmail.com> <nnd$3b017059$6aa9c908@b5507bbc6e704cf6> <5ce2cb85311aa91fcb7ab57c802aef09b3345163@i2pn2.org> <nnd$1667d791$2eba7243@d7216ffec373a0d9> <nnd$595f502c$48101358@27425914746d2863> <d9149a9d12db559e2720156b315fcfdcdd90e3fe@i2pn2.org> <2025May3.072517@mips.complang.tuwien.ac.at> <6973d7bc1d0376ab234a39a3dda82287b7b13450@i2pn2.org> <2025May3.180226@mips.complang.tuwien.ac.at> <b78a04cbc0fc7c0a6c041e46ea83dc7a6206e5d6@i2pn2.org> <2025May4.153331@mips.complang.tuwien.ac.at> <6a9a2b6e873c1b72bdec2c72749ef0aac6f33f42@i2pn2.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Mon, 05 May 2025 19:29:22 +0200 (CEST) Injection-Info: dont-email.me; posting-host="b802166d6bcac374db4f5e210d68b5fa"; logging-data="895236"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/iRte3/bTlqHX+pDAQ2fAJ" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:I65+PBncbvBkXM8nPu6WPOefIII= Content-Language: en-US In-Reply-To: <6a9a2b6e873c1b72bdec2c72749ef0aac6f33f42@i2pn2.org> Bytes: 3234 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