X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=forth.jl.git;a=blobdiff_plain;f=src%2Fforth.jl;h=e571758f6d76254f7c5f70f023cbe6afa95fc7c2;hp=98999a354ef54c96302209654b5aa26d957eda4b;hb=7cc4407fe0b3da1af97f444bb03d874e868a7152;hpb=8170797f810ae128fda2d6ccf8eaaf37de177a64 diff --git a/src/forth.jl b/src/forth.jl index 98999a3..e571758 100644 --- a/src/forth.jl +++ b/src/forth.jl @@ -810,11 +810,6 @@ HIDE = defWord("HIDE", HIDDEN, EXIT]) -CREATE = defWord("CREATE", - [WORD, - HEADER, - LIT, DOVAR, COMMA, EXIT]); - COLON = defWord(":", [WORD, HEADER, @@ -841,6 +836,28 @@ TICK = defWord("'", BTICK = defWord("[']", [FROMR, DUP, INCR, TOR, FETCH, EXIT]) +# CREATE and DOES> + +CREATE = defWord("CREATE", + [WORD, + HEADER, + LIT, DOVAR, COMMA, EXIT]); + +DODOES = defPrim(() -> begin + pushRS(reg.IP) + reg.IP = reg.W + 1 + return NEXT +end, name="DOCOL") + +defConst("DODOES", DODOES) + +FROMDOES_PAREN = defWord("(DOES>)", + [DODOES, LAST, FETCH, TOCFA, STORE, EXIT]) + +FROMDOES = defWord("DOES>", + [BTICK, FROMDOES_PAREN, COMMA, BTICK, EXIT, COMMA, + BTICK, LIT, COMMA, LATEST, FETCH, TODFA, COMMA], flags=F_IMMED) + # Strings