diff options
author | Jesse Luehrs <doy@tozt.net> | 2010-11-13 11:56:11 -0600 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2010-11-13 11:56:11 -0600 |
commit | a2fec41abc1808cd11a14d974dfc6eda8b0f541c (patch) | |
tree | bfdfc03e1a93176756f4b7541636ad64b9c50181 | |
parent | 02b2a57f5ce745d7989c3fc74d054c6e1c71ee49 (diff) | |
download | package-stash-xs-a2fec41abc1808cd11a14d974dfc6eda8b0f541c.tar.gz package-stash-xs-a2fec41abc1808cd11a14d974dfc6eda8b0f541c.zip |
be a bit more efficient with refcount manipulation
-rw-r--r-- | Stash.xs | 23 |
1 files changed, 9 insertions, 14 deletions
@@ -277,7 +277,7 @@ new(class, package_name) instance = newHV(); - hv_store(instance, "name", 4, SvREFCNT_inc(package_name), 0); + hv_store(instance, "name", 4, SvREFCNT_inc_simple_NN(package_name), 0); namespace = gv_stashpv(SvPV_nolen(package_name), GV_ADD); hv_store(instance, "namespace", 9, newRV_inc((SV*)namespace), 0); @@ -294,7 +294,7 @@ name(self) if (!sv_isobject(self)) croak("Can't call name as a class method"); slot = hv_fetch((HV*)SvRV(self), "name", 4, 0); - RETVAL = slot ? SvREFCNT_inc(*slot) : &PL_sv_undef; + RETVAL = slot ? SvREFCNT_inc_simple_NN(*slot) : &PL_sv_undef; OUTPUT: RETVAL @@ -307,7 +307,7 @@ namespace(self) if (!sv_isobject(self)) croak("Can't call namespace as a class method"); slot = hv_fetch((HV*)SvRV(self), "namespace", 9, 0); - RETVAL = slot ? SvREFCNT_inc(*slot) : &PL_sv_undef; + RETVAL = slot ? SvREFCNT_inc_simple_NN(*slot) : &PL_sv_undef; OUTPUT: RETVAL @@ -382,7 +382,7 @@ add_package_symbol(self, variable, initial=NULL, ...) if (SvROK(initial)) { val = SvRV(initial); - SvREFCNT_inc(val); + SvREFCNT_inc_simple_void_NN(val); } else { val = newSVsv(initial); @@ -390,28 +390,23 @@ add_package_symbol(self, variable, initial=NULL, ...) switch (variable.type) { case VAR_SCALAR: - if (GvSV(glob)) - SvREFCNT_dec(GvSV(glob)); + SvREFCNT_dec(GvSV(glob)); GvSV(glob) = val; break; case VAR_ARRAY: - if (GvAV(glob)) - SvREFCNT_dec((SV*)GvAV(glob)); + SvREFCNT_dec((SV*)GvAV(glob)); GvAV(glob) = (AV*)val; break; case VAR_HASH: - if (GvHV(glob)) - SvREFCNT_dec((SV*)GvHV(glob)); + SvREFCNT_dec((SV*)GvHV(glob)); GvHV(glob) = (HV*)val; break; case VAR_CODE: - if (GvCV(glob)) - SvREFCNT_dec((SV*)GvCV(glob)); + SvREFCNT_dec((SV*)GvCV(glob)); GvCV(glob) = (CV*)val; break; case VAR_IO: - if (GvIO(glob)) - SvREFCNT_dec((SV*)GvIO(glob)); + SvREFCNT_dec((SV*)GvIO(glob)); GvIOp(glob) = (IO*)val; break; } |