summaryrefslogtreecommitdiffstats
path: root/XS.xs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-12-10 16:23:40 -0600
committerJesse Luehrs <doy@tozt.net>2011-12-10 16:26:33 -0600
commite006ab793e155668184c71836c2d69a8eeac9757 (patch)
tree38ae38e20b95b521a699f27314aabe51819f31d5 /XS.xs
parent672ffdba4da7d100f0377139c087ea63c0f24ecd (diff)
downloadpackage-stash-xs-e006ab793e155668184c71836c2d69a8eeac9757.tar.gz
package-stash-xs-e006ab793e155668184c71836c2d69a8eeac9757.zip
refactor a bit
Diffstat (limited to 'XS.xs')
-rw-r--r--XS.xs20
1 files changed, 11 insertions, 9 deletions
diff --git a/XS.xs b/XS.xs
index d3ce6aa..d131115 100644
--- a/XS.xs
+++ b/XS.xs
@@ -325,6 +325,15 @@ static SV *_get_name(SV *self)
return ret;
}
+static void _real_gv_init(GV *gv, HV *stash, SV *name)
+{
+ char *name_pv;
+ STRLEN name_len;
+
+ name_pv = SvPV(name, name_len);
+ gv_init(gv, stash, name_pv, name_len, 1);
+}
+
static void _expand_glob(SV *self, SV *varname)
{
HV *namespace;
@@ -339,12 +348,8 @@ static void _expand_glob(SV *self, SV *varname)
croak("_expand_glob called on stash slot with expanded glob");
}
else {
- char *varname_pv;
- STRLEN varname_len;
-
- varname_pv = SvPV(varname, varname_len);
- gv_init(glob, namespace, varname_pv, varname_len, 1);
SvREFCNT_inc(glob);
+ _real_gv_init(glob, namespace, varname);
if (!hv_store_ent(namespace, varname, (SV*)glob, 0)) {
croak("hv_store failed");
}
@@ -583,11 +588,8 @@ add_symbol(self, variable, initial=NULL, ...)
glob = (GV*)HeVAL(entry);
}
else {
- char *varname_pv;
- STRLEN varname_len;
glob = (GV*)newSV(0);
- varname_pv = SvPV(variable.name, varname_len);
- gv_init(glob, namespace, varname_pv, varname_len, 1);
+ _real_gv_init(glob, namespace, variable.name);
if (!hv_store_ent(namespace, variable.name, (SV*)glob, 0)) {
croak("hv_store failed");
}