-: recursive-hashcode ( n obj quot -- code )
- pick 0 <= [ 3drop 0 ] [ [ 1 - ] 2dip call ] if ; inline
-
-! These go here, not in sequences and hashtables, since those
-! two cannot depend on us
-M: sequence hashcode* [ sequence-hashcode ] recursive-hashcode ;
-
-M: array hashcode* [ sequence-hashcode ] recursive-hashcode ;
-
-M: byte-array hashcode* [ sequence-hashcode ] recursive-hashcode ;
-
-M: reversed hashcode* [ sequence-hashcode ] recursive-hashcode ;
-
-M: slice hashcode* [ sequence-hashcode ] recursive-hashcode ;
-
-M: iota hashcode*
- over 0 <= [ 2drop 0 ] [
- nip length 0 swap [ sequence-hashcode-step ] each-integer
- ] if ;
-
-M: hashtable hashcode*
- [
- dup assoc-size 1 eq?
- [ assoc-hashcode ] [ nip assoc-size ] if
- ] recursive-hashcode ;
-