--- gforth/search.fs 2000/09/23 15:46:58 1.18 +++ gforth/search.fs 2007/01/14 22:19:35 1.28 @@ -1,6 +1,6 @@ \ search order wordset 14may93py -\ Copyright (C) 1995,1996,1997,1998,2000 Free Software Foundation, Inc. +\ Copyright (C) 1995,1996,1997,1998,2000,2003,2005 Free Software Foundation, Inc. \ This file is part of Gforth. @@ -18,10 +18,11 @@ \ along with this program; if not, write to the Free Software \ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. -$10 constant maxvp -Variable vp - 0 A, 0 A, 0 A, 0 A, 0 A, 0 A, 0 A, 0 A, - 0 A, 0 A, 0 A, 0 A, 0 A, 0 A, 0 A, 0 A, +require struct.fs + +$10 Value maxvp \ current size of search order stack +$400 Value maxvp-limit \ upper limit for resizing search order stack +0 AValue vp \ will be initialized later (dynamic) : get-current ( -- wid ) \ search \G @i{wid} is the identifier of the current compilation word list. @@ -50,7 +51,7 @@ Variable slowvoc 0 slowvoc ! : mappedwordlist ( map-struct -- wid ) \ gforth \G Create a wordlist with a special map-structure. - here swap A, 0 A, voclink @ A, 0 A, + align here swap A, 0 A, voclink @ A, 0 A, dup wordlist-link voclink ! dup initvoc ; @@ -71,7 +72,11 @@ Variable slowvoc 0 slowvoc ! Create wordlist drop DOES> context ! ; : check-maxvp ( n -- ) - maxvp > -49 and throw ; + dup maxvp-limit > -49 and throw + dup maxvp > IF + BEGIN dup maxvp 2* dup TO maxvp <= UNTIL + vp maxvp 1+ cells resize throw TO vp + THEN drop ; : >order ( wid -- ) \ gforth to-order \g Push @var{wid} on the search order. @@ -146,12 +151,30 @@ Vocabulary Root ( -- ) \ gforth \G order (for Gforth, this is the word list @code{Root}). 1 vp! Root also ; +: update-image-order ( -- ) + \ save search order here, let vp point there + here vp over vp @ 1+ cells + dup allot move + to vp ; + +: init-vp ( -- ) + vp @ $10 max to maxvp + maxvp 1+ cells allocate throw + vp over vp @ 1+ cells move + TO vp ; + +:noname + init-vp DEFERS 'cold ; +IS 'cold + +here 0 , to vp + +init-vp Only Forth also definitions + \ set initial search order 14may93py Forth-wordlist wordlist-id @ ' Forth >body wordlist-id ! -0 vp! also Root also definitions -Only Forth also definitions lookup ! \ our dictionary search order becomes the law ( -- ) ' Forth >body to Forth-wordlist \ "forth definitions get-current" and "forth-wordlist" should produce the same wid @@ -187,8 +210,30 @@ lookup ! \ our dictionary search order b \G list that is currently on the top of the search order stack. context @ 1 set-order ; -: .voc - body> >head-noprim name>string type space ; +[IFUNDEF] .name +: id. ( nt -- ) \ gforth i-d-dot + \G Print the name of the word represented by @var{nt}. + \ this name comes from fig-Forth + name>string type space ; + +' id. alias .id ( nt -- ) \ F83 dot-i-d +\G F83 name for @code{id.}. + +' id. alias .name ( nt -- ) \ gforth-obsolete dot-name +\G Gforth <=0.5.0 name for @code{id.}. + +[THEN] + +: .voc ( wid -- ) \ gforth dot-voc +\G print the name of the wordlist represented by @var{wid}. Can +\G only print names defined with @code{vocabulary} or +\G @code{wordlist constant}, otherwise prints @samp{???}. + dup >r wordlist-struct %size + dup head? if ( wid nt ) + dup name>int dup >code-address docon: = swap >body @ r@ = and if + id. rdrop exit + endif + endif + drop r> body> >head-noprim id. ; : order ( -- ) \ gforthman- search-ext \G Print the search order and the compilation word list. The