Deutsch   English   Français   Italiano  
<2025Jan9.184305@mips.complang.tuwien.ac.at>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: anton@mips.complang.tuwien.ac.at (Anton Ertl)
Newsgroups: comp.lang.forth
Subject: xts and return addresses (was: "Back & Forth" - Local variables)
Date: Thu, 09 Jan 2025 17:43:05 GMT
Organization: Institut fuer Computersprachen, Technische Universitaet Wien
Lines: 48
Message-ID: <2025Jan9.184305@mips.complang.tuwien.ac.at>
References: <nnd$75b7a2a4$616fdd6b@4f60b314ce95c9b9> <nnd$65a6d402$1bfbf0ca@d49afc2a32e40cf2> <752c8e210166d00119336309dc35240d36d6f17d@i2pn2.org> <9747ef2be5ee93d6a4f0c89352a38cec72624609@i2pn2.org> <nnd$43da5afe$0d359236@662b3066f040a86b>
Injection-Date: Thu, 09 Jan 2025 19:00:22 +0100 (CET)
Injection-Info: dont-email.me; posting-host="26ca2a267844a559410fefd8d7bda046";
	logging-data="3647462"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+m/KkE85MAnifO9MgZ87tr"
Cancel-Lock: sha1:HFmE0rAH6kE6ZR4KvuHyhoXJ4s0=
X-newsreader: xrn 10.11
Bytes: 2657

albert@spenarnc.xs4all.nl writes:
>>R EXECUTE doesn't work for ciforth.
>There is no guarantee that a saved interpreter pointer on the
>stack is an execution token.

In development Gforth, if you use the xt of a colon definition as a
return address, you get the same effect as EXECUTE.  E.g.

: colon-execute >r ;

1 ' . colon-execute \ prints "1"

I have recently had a puzzling bug syndrome in the following word
(buggy version shown):

: reverse-sections-execute ( xt -- )
    >r sections $@ cell mem-do
        j i @ section-execute
    loop ;

[: current-section @ cr h. ;] reverse-sections-execute

The output is:

$7FF5F428F000 
$7FF5F3F1A000 
$7FF5F3F3B000 
$7FF5E5BFD000 
$7FF5E5DFE040 
$7FF5F4298000 
$7FF5E5DFE040  ok

The last line should not be output.  What happens is that the xt
passed to REVERSE-SECTIONS-EXECUTE is pushed on the return stack, and
I then forgot to drop it.  But instead of that resulting in a crash
(as you would get in Gforth up to around 2020), with the new xt
implementation the ; at the end COLON-EXECUTEs the xt.  And because
the xt is a colon definition, this calls the xt again.

xt=pfa has it's advantages, but here a disadvantage showed up.

- anton
-- 
M. Anton Ertl  http://www.complang.tuwien.ac.at/anton/home.html
comp.lang.forth FAQs: http://www.complang.tuwien.ac.at/forth/faq/toc.html
     New standard: https://forth-standard.org/
EuroForth 2023 proceedings: http://www.euroforth.org/ef23/papers/
EuroForth 2024 proceedings: http://www.euroforth.org/ef24/papers/