3 <ENTRY HASH EXPAND-FLAG>
14 <SETG ONE-IN-LH <LSH 1 16>>
15 <MANIFEST PFIX PLIST PRECORD PBYTES PSTRING PUVECTOR PVECTOR ONE-IN-LH>
17 <DEFINE HASH (OBJ:ANY "OPT" (POS:FIX 0)
18 "AUX" HASH:FIX (FTYP:FIX <ANDB <CALL TYPE .OBJ> 7>)
19 PREHASH:FIX ATM (EXP-MACROS ,EXPAND-FLAG))
20 <COND (<AND <TYPE? .OBJ FORM>
23 <TYPE? <SET ATM <1 .OBJ>> ATOM>
25 <COND (<AND <OR <==? .ATM GVAL> <==? .ATM LVAL>>
26 <NOT <EMPTY? <REST .OBJ>>>
27 <TYPE? <2 .OBJ> ATOM>>
28 <SET OBJ <CHTYPE <2 .OBJ> .ATM>>
30 (<==? <GET-DECL <GBIND .ATM>> MANIFEST>
31 <SET PREHASH <HASH ,.ATM <+ .POS ,ONE-IN-LH>>>)
33 <SET PREHASH <HASH <EXPAND .OBJ>
34 <+ .POS ,ONE-IN-LH>>>)>)>
37 <SET HASH <CHTYPE .OBJ FIX>>)
39 <SET HASH <HASH-STRING <CHTYPE .OBJ STRING>
40 <+ .POS ,ONE-IN-LH>>>)
42 <SET HASH <HASH-LIST <CHTYPE .OBJ LIST> <+ .POS ,ONE-IN-LH>>>)
44 <COND (<AND .EXP-MACROS
46 <GASSIGNED? <SET ATM <CHTYPE .OBJ ATOM>>>
47 <==? <GET-DECL <GBIND .ATM>> MANIFEST>>
48 <SET HASH <HASH ,.ATM <+ .POS ,ONE-IN-LH>>>)
49 (<OR <TYPE? .OBJ ATOM LVAL GVAL>
50 <==? <PRIMTYPE .OBJ> ATOM>>
51 <SET HASH <HASH-ATOM <CHTYPE .OBJ ATOM>
52 <+ .POS ,ONE-IN-LH>>>)>)
54 <SET HASH <HASH-BYTES <CHTYPE .OBJ BYTES> <+ .POS ,ONE-IN-LH>>>)
56 <SET HASH <HASH-VECTOR <CHTYPE .OBJ VECTOR>
57 <+ .POS ,ONE-IN-LH>>>)
59 <SET HASH <HASH-UVECTOR <CHTYPE .OBJ UVECTOR>
60 <+ .POS ,ONE-IN-LH>>>)
62 (<ERROR UNKNOWN-PRIMTYPE!-ERRORS <PRIMTYPE .OBJ> HASH>)>
63 <COND (<NEWTYPE? .OBJ>
65 <XORB <ROT32 <CHTYPE <TYPE-C <PRIMTYPE .OBJ>> FIX> 13>
66 <HASH-ATOM <TYPE .OBJ> <+ .POS ,ONE-IN-LH>>
69 <SET HASH <XORB <ROT32 .HASH 17> <CALL TYPE .OBJ>>>)>
70 <COND (<ASSIGNED? PREHASH> <SET HASH <XORB <ROT32 .HASH 17> .PREHASH>>)>
73 <DEFINE HASH-ATOM (ATM:ATOM POS:FIX)
74 <COND (<==? .ATM ROOT>
77 <XORB <ROT32 <HASH-STRING <SPNAME .ATM> <+ .POS ,ONE-IN-LH>>
79 <HASH <OBLIST? .ATM> <+ .POS ,ONE-IN-LH>>>)>>
81 <DEFINE HASH-STRING (STR:STRING POS:FIX "AUX" (HASH 0))
84 <FUNCTION (CH:CHARACTER)
100 <DEFINE HASH-LIST (LIST:LIST POS:FIX "AUX" (HASH 0))
108 <HASH .ELEM <+ .POS ,ONE-IN-LH>>
110 <SET POS <+ .POS 1>>>
114 <DEFINE HASH-VECTOR (VEC:VECTOR POS:FIX "AUX" (HASH 0))
122 <HASH .ELEM <+ .POS ,ONE-IN-LH>>
124 <SET POS <+ .POS 1>>>
128 <DEFINE HASH-UVECTOR (UVEC:UVECTOR POS:FIX "AUX" (HASH 0))
138 <SET POS <+ .POS 1>>>
142 <DEFINE HASH-BYTES (BYT:BYTES POS:FIX "AUX" (HASH 0))
152 <SET POS <+ .POS 1>>>
156 <DEFINE NEWTYPE? (OBJ:ANY)
157 <G? <LSH <CALL TYPE .OBJ> -6> ,OLD-TYPES>>