Builtins now vlisting.

This commit is contained in:
Brad Nelson
2022-02-06 17:18:11 -08:00
parent fd43d523b1
commit 7bd9090913
5 changed files with 21 additions and 5 deletions

View File

@ -59,6 +59,7 @@ static struct {
// Layout not used by Forth. // Layout not used by Forth.
cell_t *rp; // spot to park main thread cell_t *rp; // spot to park main thread
cell_t DOLIT_XT, DOFLIT_XT, DOEXIT_XT, YIELD_XT; cell_t DOLIT_XT, DOFLIT_XT, DOEXIT_XT, YIELD_XT;
void *DOCREATE_OP;
const BUILTIN_WORD *builtins; const BUILTIN_WORD *builtins;
} g_sys; } g_sys;
@ -260,7 +261,7 @@ static void forth_init(int argc, char *argv[], void *heap,
forth_run(0); forth_run(0);
#define V(name) \ #define V(name) \
create(#name "-builtins", sizeof(#name "-builtins") - 1, \ create(#name "-builtins", sizeof(#name "-builtins") - 1, \
BUILTIN_FORK, 0); \ BUILTIN_FORK, g_sys.DOCREATE_OP); \
*g_sys.heap++ = VOC_ ## name; *g_sys.heap++ = VOC_ ## name;
VOCABULARY_LIST VOCABULARY_LIST
#undef V #undef V

View File

@ -31,6 +31,7 @@ static cell_t *forth_run(cell_t *init_rp) {
}; };
if (!init_rp) { if (!init_rp) {
g_sys.DOCREATE_OP = ADDR_DOCREATE;
g_sys.builtins = builtins; g_sys.builtins = builtins;
return 0; return 0;
} }

View File

@ -125,4 +125,5 @@ typedef struct {
sp = evaluate1(sp, &tfp); \ sp = evaluate1(sp, &tfp); \
fp = tfp; w = *sp--; DROP; if (w) JMPW) \ fp = tfp; w = *sp--; DROP; if (w) JMPW) \
Y(EXIT, ip = (cell_t *) *rp--) \ Y(EXIT, ip = (cell_t *) *rp--) \
XV(internals, "'builtins", TBUILTINS, DUP; tos = (cell_t) g_sys.builtins) \
XV(forth_immediate, ";", SEMICOLON, COMMA(g_sys.DOEXIT_XT); UNSMUDGE(); g_sys.state = 0) XV(forth_immediate, ";", SEMICOLON, COMMA(g_sys.DOEXIT_XT); UNSMUDGE(); g_sys.state = 0)

View File

@ -59,6 +59,7 @@ internals definitions
dup @ ['] see-loop @ = if dup @ ['] see-loop @ = if
['] : see. dup see. space see-loop ['] ; see. cr exit ['] : see. dup see. space see-loop ['] ; see. cr exit
then then
dup >flags BUILTIN_FORK and if ." Built-in fork: " see. exit then
dup @ ['] input-buffer @ = if ." CREATE/VARIABLE: " see. cr exit then dup @ ['] input-buffer @ = if ." CREATE/VARIABLE: " see. cr exit then
dup @ ['] SMUDGE @ = if ." DOES>/CONSTANT: " see. cr exit then dup @ ['] SMUDGE @ = if ." DOES>/CONSTANT: " see. cr exit then
dup >params 0= if ." Built-in: " see. cr exit then dup >params 0= if ." Built-in: " see. cr exit then
@ -102,11 +103,22 @@ only forth definitions
( List words in Dictionary / Vocabulary ) ( List words in Dictionary / Vocabulary )
internals definitions internals definitions
70 value line-width 70 value line-width
: onlines ( n xt -- n xt ) 0 value line-pos
swap dup line-width > if drop 0 cr then over >name nip + 1+ swap ; : onlines ( xt -- xt )
line-pos line-width > if cr 0 to line-pos then
dup >name nip 1+ line-pos + to line-pos ;
: vins. ( voc -- )
>r 'builtins 2 cells + begin dup 2 cells - @ while
dup >params r@ = if dup onlines see. then
3 cells +
repeat drop rdrop ;
: ins. ( n xt -- n ) cell+ @ vins. ;
: ?ins. ( xt -- xt ) dup >flags BUILTIN_FORK and if dup ins. then ;
forth definitions also internals forth definitions also internals
: vlist 0 context @ @ begin dup nonvoc? while onlines dup see. >link repeat 2drop cr ; : vlist 0 to line-pos context @ @
: words 0 context @ @ begin dup while onlines dup see. >link repeat 2drop cr ; begin dup nonvoc? while onlines dup ?ins. see. >link repeat drop cr ;
: words 0 to line-pos context @ @
begin dup while onlines dup see. >link repeat drop cr ;
only forth definitions only forth definitions
( Extra Task Utils ) ( Extra Task Utils )

View File

@ -41,6 +41,7 @@ static cell_t *forth_run(cell_t *init_rp) {
}; };
if (!init_rp) { if (!init_rp) {
g_sys.DOCREATE_OP = ADDR_DOCREATE;
g_sys.builtins = builtins; g_sys.builtins = builtins;
return 0; return 0;
} }