X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;f=sys.f;h=6e7c8539bcdd67ea720b7faf5c2f15c8781b0880;hb=e528551bc019017d3a1313b9d8299d15cc5e3c82;hp=27d540a87cee34e5f172194a21b88812ec72338e;hpb=f0df53c35124c9a5e2b045aba60b513faa344567;p=rrq%2Fjonasforth.git diff --git a/sys.f b/sys.f index 27d540a..6e7c853 100644 --- a/sys.f +++ b/sys.f @@ -1,4 +1,4 @@ -BUF" :" CREATE ] DOCOL +S" :" CREATE ] DOCOL READ-WORD CREATE LIT DOCOL , ] @@ -47,7 +47,7 @@ EXIT [ ELSE DROP THEN - AGAIN ; + AGAIN ; ( Yay! We now have comments! ) : UNTIL IMMEDIATE ' 0BRANCH , @@ -69,6 +69,27 @@ EXIT [ : OVER ( a b -- a b a ) SWAP DUP ROT ; +( An alternative comment syntax. Reads until the end of the line. ) +: \ IMMEDIATE + BEGIN + KEY + 10 = UNTIL ; + +\ So far, S" has only worked in immediate mode, which is backwards -- actually, +\ the main use-case of this is as a compile-time word. Let's fix that. +: S" IMMEDIATE + ' LITSTRING , + HERE @ 0 C, \ We will put the length here + 0 + BEGIN + 1 + + KEY DUP C, + 34 = UNTIL + \ Remove final " + HERE @ 1 - HERE ! + 1 - + SWAP C! ; + ( Compile the given string into the current word directly. ) : STORE-STRING ( str len -- ) BEGIN @@ -83,5 +104,6 @@ EXIT [ ( Read a number from standard input. ) : READ-NUMBER READ-WORD PARSE-NUMBER ; -( vim: syntax=forth -) +: RESTART S" Ready." TELL NEWLINE ; +RESTART +