summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2010-11-13 11:56:11 -0600
committerJesse Luehrs <doy@tozt.net>2010-11-13 11:56:11 -0600
commita2fec41abc1808cd11a14d974dfc6eda8b0f541c (patch)
treebfdfc03e1a93176756f4b7541636ad64b9c50181
parent02b2a57f5ce745d7989c3fc74d054c6e1c71ee49 (diff)
downloadpackage-stash-xs-a2fec41abc1808cd11a14d974dfc6eda8b0f541c.tar.gz
package-stash-xs-a2fec41abc1808cd11a14d974dfc6eda8b0f541c.zip
be a bit more efficient with refcount manipulation
-rw-r--r--Stash.xs23
1 files changed, 9 insertions, 14 deletions
diff --git a/Stash.xs b/Stash.xs
index 9f8ee77..78b395f 100644
--- a/Stash.xs
+++ b/Stash.xs
@@ -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;
}