12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455typetype_id=intletdummy_type_id=0letcreate_type_id=letn=refdummy_type_idinfun()->incrn;if!n<0thenfailwith"Bi_share.Rd_poly.create_type_id: \
exhausted available type_id's"else!nmoduleWr=structmoduleH=Hashtbl.Make(structtypet=Obj.t*type_idletequal(x1,t1)(x2,t2)=x1==x2&&t1==t2lethash=Hashtbl.hashend)typetbl=intH.tletcreate=H.createletcleartbl=ifH.lengthtbl>0thenH.cleartblletputtblkpos=tryletpos0=H.findtbl(Obj.magick)inpos-pos0withNot_found->H.addtbl(Obj.magick)pos;0endmoduleRd=structtypetbl=((int*type_id),Obj.t)Hashtbl.tletcreaten=Hashtbl.createnletclear=Hashtbl.clearletputtblposx=Hashtbl.addtblposxletgettblpos=tryHashtbl.findtblposwithNot_found->Bi_util.error"Corrupted data (invalid reference)"end