From e006ab793e155668184c71836c2d69a8eeac9757 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 10 Dec 2011 16:23:40 -0600 Subject: refactor a bit --- XS.xs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'XS.xs') 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"); } -- cgit v1.2.3-54-g00ecf