From: Jesse Luehrs Date: Sun, 14 Nov 2010 19:11:55 +0000 (-0600) Subject: factor out glob expanding into a helper function X-Git-Tag: 0.14~9 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=60b395a1c2f7efdba256d7886ad86a0a9fb87e9d;p=gitmo%2FPackage-Stash-XS.git factor out glob expanding into a helper function --- diff --git a/Stash.xs b/Stash.xs index 9c61138..41d9c0c 100644 --- a/Stash.xs +++ b/Stash.xs @@ -285,6 +285,20 @@ SV *_get_name(SV *self) return ret; } +void _expand_glob(SV *self, char *name) +{ + SV *namesv; + + namesv = newSVsv(_get_name(self)); + sv_catpvs(namesv, "::"); + sv_catpv(namesv, name); + + /* can't use gv_init here, because it screws up @ISA in a way that I + * can't reproduce, but that CMOP triggers */ + gv_fetchsv(namesv, GV_ADD, SVt_NULL); + SvREFCNT_dec(namesv); +} + SV *_get_symbol(SV *self, varspec_t *variable, int vivify) { HV *namespace; @@ -297,18 +311,8 @@ SV *_get_symbol(SV *self, varspec_t *variable, int vivify) return NULL; glob = (GV*)(*entry); - if (!isGV(glob)) { - SV *namesv; - - namesv = newSVsv(_get_name(self)); - sv_catpvs(namesv, "::"); - sv_catpv(namesv, variable->name); - - /* can't use gv_init here, because it screws up @ISA in a way that I - * can't reproduce, but that CMOP triggers */ - gv_fetchsv(namesv, GV_ADD, vartype_to_svtype(variable->type)); - SvREFCNT_dec(namesv); - } + if (!isGV(glob)) + _expand_glob(self, variable->name); if (vivify) { switch (variable->type) {