--- gforth/hash.fs 1998/05/02 21:28:42 1.20 +++ gforth/hash.fs 1998/12/19 13:43:17 1.23 @@ -1,6 +1,6 @@ \ Hashed dictionaries 15jul94py -\ Copyright (C) 1995 Free Software Foundation, Inc. +\ Copyright (C) 1995,1998 Free Software Foundation, Inc. \ This file is part of Gforth. @@ -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 ! ; @@ -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