--- gforth/hash.fs 1998/05/02 21:28:42 1.20 +++ gforth/hash.fs 2000/09/23 15:46:57 1.26 @@ -1,6 +1,6 @@ \ Hashed dictionaries 15jul94py -\ Copyright (C) 1995 Free Software Foundation, Inc. +\ Copyright (C) 1995,1998,2000 Free Software Foundation, Inc. \ This file is part of Gforth. @@ -16,7 +16,7 @@ \ You should have received a copy of the GNU General Public License \ along with this program; if not, write to the Free Software -\ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +\ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. [IFUNDEF] allocate : reserve-mem here swap allot ; @@ -48,7 +48,7 @@ Variable HashIndex \ forward declarations 0 Value hashsearch-map -Defer hash-alloc +Defer hash-alloc ( addr -- addr ) \ DelFix and NewFix are from bigFORTH 15jul94py @@ -88,7 +88,8 @@ Defer hash-alloc : inithash ( wid -- ) wordlist-extend - insRule @ >r insRule off hash-alloc 3 cells - dup + insRule @ >r insRule off hash-alloc 3 cells - + dup wordlist-id BEGIN @ dup WHILE 2dup swap (reveal REPEAT 2drop r> insRule ! ; @@ -96,7 +97,7 @@ Defer hash-alloc voclink BEGIN @ dup WHILE dup 0 wordlist-link - - dup wordlist-map @ hashsearch-map = + dup wordlist-map @ reveal-method @ ['] hash-reveal = IF inithash ELSE drop THEN REPEAT drop ; @@ -104,15 +105,24 @@ Defer hash-alloc HashTable Hashlen cells bounds DO I @ BEGIN dup WHILE - dup @ swap HashPointer DelFix - REPEAT I ! - cell +LOOP HashIndex off + dup @ swap HashPointer DelFix + REPEAT + I ! + cell +LOOP + HashIndex off voclink - BEGIN @ dup WHILE - dup 0 wordlist-link - - dup wordlist-map @ hashsearch-map = - IF 0 swap wordlist-extend ! ELSE drop THEN - REPEAT drop ; + BEGIN ( wordlist-link-addr ) + @ dup + WHILE ( wordlist-link ) + dup 0 wordlist-link - ( wordlist-link wid ) + dup wordlist-map @ hashsearch-map = + IF ( wordlist-link wid ) + 0 swap wordlist-extend ! + ELSE + drop + THEN + REPEAT + drop ; : rehashall ( wid -- ) drop revealed @ @@ -130,7 +140,7 @@ to hashsearch-map \ hash allocate and vocabulary initialization 10oct94py -:noname ( hash-alloc ) ( addr -- addr ) +:noname ( addr -- addr ) HashTable 0= IF Hashlen cells reserve-mem TO HashTable HashTable Hashlen cells erase THEN @@ -150,11 +160,11 @@ to hashsearch-map has? cross 0= [IF] : make-hash - hashsearch-map forth-wordlist cell+ ! + hashsearch-map forth-wordlist wordlist-map ! addall ; make-hash \ Baumsuche ist installiert. [ELSE] - hashsearch-map forth-wordlist cell+ ! + hashsearch-map forth-wordlist wordlist-map ! [THEN] \ for ec version display that vocabulary goes hashed