dougm 01/10/13 11:55:03 Modified: src/modules/perl modperl_perl_global.c modperl_perl_global.h Log: s/hv_fetch/hv_fetch_he/g Revision Changes Path 1.10 +24 -9 modperl-2.0/src/modules/perl/modperl_perl_global.c Index: modperl_perl_global.c =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl_global.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- modperl_perl_global.c 2001/10/08 21:09:08 1.9 +++ modperl_perl_global.c 2001/10/13 18:55:03 1.10 @@ -12,8 +12,14 @@ /* XXX: PL_modglobal thingers might be useful elsewhere */ +#define MP_MODGLOBAL_FETCH(gkey) \ +hv_fetch_he(PL_modglobal, (char *)gkey->val, gkey->len, gkey->hash) + +#define MP_MODGLOBAL_STORE_HV(gkey) \ +(HV*)*hv_store(PL_modglobal, gkey->val, gkey->len, (SV*)newHV(), gkey->hash) + #define MP_MODGLOBAL_ENT(key) \ -{key, "ModPerl::" key, (sizeof("ModPerl::")-1)+(sizeof(key)-1)} +{key, "ModPerl::" key, (sizeof("ModPerl::")-1)+(sizeof(key)-1), 0} static modperl_modglobal_key_t MP_modglobal_keys[] = { MP_MODGLOBAL_ENT("END"), @@ -36,18 +42,18 @@ static AV *modperl_perl_global_avcv_fetch(pTHX_ modperl_modglobal_key_t *gkey, const char *package, I32 packlen) { - SV **svp = hv_fetch(PL_modglobal, gkey->val, gkey->len, FALSE); + HE *he = MP_MODGLOBAL_FETCH(gkey); HV *hv; - if (!(svp && (hv = (HV*)*svp))) { + if (!(he && (hv = (HV*)HeVAL(he)))) { return Nullav; } - if (!(svp = hv_fetch(hv, package, packlen, FALSE))) { + if (!(he = hv_fetch_he(hv, (char *)package, packlen, 0))) { return Nullav; } - return (AV*)*svp; + return (AV*)HeVAL(he); } void modperl_perl_global_avcv_call(pTHX_ modperl_modglobal_key_t *gkey, @@ -76,6 +82,7 @@ static int modperl_perl_global_avcv_set(pTHX_ SV *sv, MAGIC *mg) { + HE *he; HV *hv; AV *mav, *av = (AV*)sv; const char *package = HvNAME(PL_curstash); @@ -83,11 +90,19 @@ modperl_modglobal_key_t *gkey = (modperl_modglobal_key_t *)mg->mg_ptr; - hv = (HV*)*hv_fetch(PL_modglobal, gkey->val, gkey->len, TRUE); - (void)SvUPGRADE((SV*)hv, SVt_PVHV); + if ((he = MP_MODGLOBAL_FETCH(gkey))) { + hv = (HV*)HeVAL(he); + } + else { + hv = MP_MODGLOBAL_STORE_HV(gkey); + } - mav = (AV*)*hv_fetch(hv, package, packlen, TRUE); - (void)SvUPGRADE((SV*)mav, SVt_PVAV); + if ((he = hv_fetch_he(hv, (char *)package, packlen, 0))) { + mav = (AV*)HeVAL(he); + } + else { + mav = (AV*)*hv_store(hv, package, packlen, (SV*)newAV(), 0); + } /* $cv = pop @av */ sv = AvARRAY(av)[AvFILLp(av)]; 1.8 +1 -0 modperl-2.0/src/modules/perl/modperl_perl_global.h Index: modperl_perl_global.h =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl_global.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- modperl_perl_global.h 2001/10/07 22:07:15 1.7 +++ modperl_perl_global.h 2001/10/13 18:55:03 1.8 @@ -5,6 +5,7 @@ const char *name; const char *val; I32 len; + U32 hash; } modperl_modglobal_key_t; typedef enum {