From 60b395a1c2f7efdba256d7886ad86a0a9fb87e9d Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 14 Nov 2010 13:11:55 -0600 Subject: factor out glob expanding into a helper function --- Stash.xs | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'Stash.xs') 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) { -- cgit v1.2.3-54-g00ecf