Sujet : Re: Juggling system-compilation items
De : krishna.myneni (at) *nospam* ccreweb.org (Krishna Myneni)
Groupes : comp.lang.forthDate : 11. Aug 2024, 04:29:14
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v99b6a$154bp$1@dont-email.me>
References : 1
User-Agent : Mozilla Thunderbird
On 8/9/24 09:05, Ruvim wrote:
Do you know a Forth system in which the following definition for "const" is compiled but does not work as expected?
: const ( x "<spaces>name" -- )
depth >r ( x ) ( R: n.depth )
: ( x colon-sys ) ( R: n.depth )
depth r> - ( x colon-sys n.size ) ( R: )
n>r ( x ) ( R: i*x n.size )
postpone literal ( ) ( R: i*x n.size )
nr> ( colon-sys n.size ) ( R: )
drop ( colon-sys )
postpone ; ( )
;
t{ 123 const foo -> }t
t{ foo -> 3 }t
Note 3.1.5.1 System-compilation types <https://forth-standard.org/standard/usage#subsubsection.3.1.5.1>
-- Ruvim
In kForth, for the code above, foo returns 123 which is what I expect.
-- Krishna=== begin code ===: N>R \ xn .. x1 N -- ; R: -- x1 .. xn n\ Transfer N items and count to the return stack. dup \ xn .. x1 N N --
begin
dup
while
rot r> swap >r >r \ xn .. N N -- ; R: .. x1 --
1- \ xn .. N 'N -- ; R: .. x1 --
repeat
drop \ N -- ; R: x1 .. xn --
r> swap >r >r
;
: NR> \ -- xn .. x1 N ; R: x1 .. xn N --
\ Pull N items and count off the return stack.
r> r> swap >r dup
begin
dup
while
r> r> swap >r -rot
1-
repeat
drop
;
: const ( x "<spaces>name" -- )
depth >r ( x ) ( R: n.depth )
: ( x colon-sys ) ( R: n.depth )
depth r> - ( x colon-sys n.size ) ( R: )
n>r ( x ) ( R: i*x n.size )
postpone literal ( ) ( R: i*x n.size )
nr> ( colon-sys n.size ) ( R: )
drop ( colon-sys )
postpone ; ( )
;
=== end code ===
=== begin test ===
123 const foo
ok
foo .
123 ok
=== end test ===