return stack words

main
Clyne 4 weeks ago
parent d76d97f608
commit 784f819f97
Signed by: clyne
GPG Key ID: 7BA5A2980566A649

@ -12,7 +12,7 @@ Register usage is the only platform-specific requirement; otherwise, `foci` is w
dup drop swap rot -rot over tuck @ ! c@ c! + +! - * / mod and or xor = < [ ] , dup drop swap rot -rot over tuck @ ! c@ c! + +! - * / mod and or xor = < [ ] ,
cell cell+ cells base here allot latest negate invert 1- 1+ aligned align : ; cell cell+ cells base here allot latest negate invert 1- 1+ aligned align : ;
literal if then else ' ['] execute decimal hex . emit begin until again while literal if then else ' ['] execute decimal hex . emit begin until again while
repeat repeat >r r> 2>r 2r>
``` ```
## Build instructions ## Build instructions

@ -158,7 +158,13 @@ I(until, "until", &w_begin) LIT(bz), comma, comma, END
I(again, "again", &w_until) LIT(b), comma, comma, END I(again, "again", &w_until) LIT(b), comma, comma, END
I(fwhile, "while", &w_again) FTH(fif), END I(fwhile, "while", &w_again) FTH(fif), END
I(repeat, "repeat", &w_fwhile) swap, FTH(again), FTH(then), END I(repeat, "repeat", &w_fwhile) swap, FTH(again), FTH(then), END
#define LATEST_INIT &w_repeat N(pushr, ">r", &w_repeat) { *--rp = (intptr_t **)*sp++; NEXT; }
N(popr, "r>", &w_pushr) { *--sp = (intptr_t)*rp++; NEXT; }
N(pushr2, "2>r", &w_popr) { *--rp = (intptr_t **)sp[1];
*--rp = (intptr_t **)sp[0]; sp += 2; NEXT; }
N(popr2, "2r>", &w_pushr2) { *--sp = (intptr_t)rp[1];
*--sp = (intptr_t)rp[0]; rp += 2; NEXT; }
#define LATEST_INIT &w_popr2
void enter_forth(const void * const ptr) void enter_forth(const void * const ptr)
{ {

Loading…
Cancel
Save