]> code.bitgloo.com Git - clyne/foci.git/commitdiff
-rot, over, tuck
authorClyne Sullivan <clyne@bitgloo.com>
Mon, 27 Jan 2025 02:19:48 +0000 (21:19 -0500)
committerClyne Sullivan <clyne@bitgloo.com>
Mon, 27 Jan 2025 02:19:48 +0000 (21:19 -0500)
foci.c

diff --git a/foci.c b/foci.c
index c466460b20b8d5b9f138e0309ce4e3990f1c1943..a75669edb4f074ebaae73425f847d613898065a4 100644 (file)
--- a/foci.c
+++ b/foci.c
@@ -98,7 +98,11 @@ N(drop,   "drop",   &w_dup)   { ++sp; NEXT; }
 N(swap,   "swap",   &w_drop)  { tmp = sp[0]; sp[0] = sp[1]; sp[1] = tmp; NEXT; }
 N(rot,    "rot",    &w_swap)  { tmp = sp[0]; sp[0] = sp[2]; sp[2] = sp[1];
                                 sp[1] = tmp; NEXT; }
-N(peek,   "@",      &w_rot)   { *sp = *(intptr_t *)*sp; NEXT; }
+N(mrot,   "-rot",   &w_rot)   { tmp = sp[2]; sp[2] = sp[0]; sp[0] = sp[1];
+                                sp[1] = tmp; NEXT; }
+N(over,   "over",   &w_mrot)  { --sp; sp[0] = sp[2]; NEXT; }
+W(tuck,   "tuck",   &w_over)  swap, over, END
+N(peek,   "@",      &w_tuck)  { *sp = *(intptr_t *)*sp; NEXT; }
 N(poke,   "!",      &w_peek)  { *(intptr_t *)sp[0] = sp[1]; sp += 2; NEXT; }
 N(cpeek,  "c@",     &w_poke)  { *sp = *(char *)*sp; NEXT; }
 N(cpoke,  "c!",     &w_cpeek) { *(char *)sp[0] = (char)sp[1]; sp += 2; NEXT; }