From aaa9948f0bfe49ed224637910a43a6cb23b4ef0c Mon Sep 17 00:00:00 2001 From: uho Date: Sat, 2 Nov 2019 09:47:32 +0100 Subject: [PATCH] Tweak it, beautify it --- preForth/seedForth-i386.pre | 8 ++++---- preForth/seedForth-tokenizer.fs | 30 +++++++++++++++--------------- preForth/seedForthDemo.seedsource | 4 ++++ 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/preForth/seedForth-i386.pre b/preForth/seedForth-i386.pre index 5c463f5..ad0483b 100644 --- a/preForth/seedForth-i386.pre +++ b/preForth/seedForth-i386.pre @@ -366,10 +366,10 @@ code rp! ( x -- ) h@ invoke ; : interpreter ( -- ) - key execute tail interpreter ; + key ?dup 0= ?exit execute tail interpreter ; -: num ( -- x ) - key ?dup 0= ?exit execute tail num ; +: num ( -- x ) + tail interpreter ; : ?lit ( xt -- xt ) h@ lit num - ?exit drop \ not num token: exit i.e. normal compile action @@ -465,7 +465,7 @@ code rp! ( x -- ) lit rp! h, \ 49 31 lit $lit h, \ 50 32 lit num h, \ 51 33 - tail interpreter ; + interpreter bye ; pre _start: DB 43 diff --git a/preForth/seedForth-tokenizer.fs b/preForth/seedForth-tokenizer.fs index 625d78b..05d9aa6 100644 --- a/preForth/seedForth-tokenizer.fs +++ b/preForth/seedForth-tokenizer.fs @@ -41,7 +41,7 @@ VARIABLE OUTFILE : ( -- c-addr u ) bl word count ; Variable #tokens 0 #tokens ! -: Token ( -- ) +: Token ( -- ) cr #tokens @ base @ >r hex 3 u.r r> base ! space >in @ type >in ! :noname #tokens @ postpone LITERAL postpone SUBMIT postpone ; @@ -59,19 +59,19 @@ Variable #tokens 0 #tokens ! token@ dup 0= Abort" is undefined" postpone LITERAL postpone EXECUTE ; immediate -Token bye Token emit Token key Token dup -Token swap Token drop Token 0< Token ?exit -Token >r Token r> Token - Token exit -Token lit Token @ Token c@ Token ! -Token c! Token execute Token branch Token ?branch -Token negate Token + Token 0= Token ?dup -Token cells Token +! Token h@ Token h, -Token here Token allot Token , Token c, -Token fun Token interpreter Token compiler Token create -Token does> Token cold Token depth Token compile, -Token new Token couple Token and Token or -Token catch Token throw Token sp@ Token sp! -Token rp@ Token rp! Token $lit Token num +( 0 $00 ) Token bye Token emit Token key Token dup +( 4 $04 ) Token swap Token drop Token 0< Token ?exit +( 8 $08 ) Token >r Token r> Token - Token exit +( 12 $0C ) Token lit Token @ Token c@ Token ! +( 16 $10 ) Token c! Token execute Token branch Token ?branch +( 20 $14 ) Token negate Token + Token 0= Token ?dup +( 24 $18 ) Token cells Token +! Token h@ Token h, +( 28 $1C ) Token here Token allot Token , Token c, +( 32 $20 ) Token fun Token interpreter Token compiler Token create +( 36 $24 ) Token does> Token cold Token depth Token compile, +( 40 $28 ) Token new Token couple Token and Token or +( 44 $2C ) Token catch Token throw Token sp@ Token sp! +( 48 $30 ) Token rp@ Token rp! Token $lit Token num \ generate token sequences for numbers @@ -121,7 +121,7 @@ Token rp@ Token rp! Token $lit Token num Macro END ( -- ) .S CR 0 SUBMIT OUTFILE @ CLOSE-FILE THROW BYE end-macro -Macro [ ( -- ) 0 SUBMIT end-macro \ bye +Macro [ ( -- ) seed bye end-macro \ bye Macro ] ( -- ) seed compiler end-macro \ compiler Macro : ( -- ) seed fun Token end-macro diff --git a/preForth/seedForthDemo.seedsource b/preForth/seedForthDemo.seedsource index d808d3b..b8bb746 100644 --- a/preForth/seedForthDemo.seedsource +++ b/preForth/seedForthDemo.seedsource @@ -395,6 +395,10 @@ t{ 60 5 a ! 0 a @ 1 a @ 2 a @ 3 a @ 4 a @ 5 a @ -> 10 20 30 40 50 60 }t : done ( -- ) cr ." done" cr ; done + +\ How to compile bye that normally exits the compile and interpret loop +\ : goodbye lit [ key bye , ] execute ; + \ cr 'd' emit 'o' emit 'n' emit 'e' emit cr \ hi -- 2.34.1