diff options
author | Florian Ragwitz <rafl@debian.org> | 2010-09-08 04:06:23 +0200 |
---|---|---|
committer | Florian Ragwitz <rafl@debian.org> | 2010-09-08 04:06:23 +0200 |
commit | ad7cce9f36d376e55b45dd79ec28a7f795b5ae4e (patch) | |
tree | 832319c9b4466f99397bd7b81c6c5182a99b8317 /gv.c | |
parent | a5ce339cb0c533c90d1033581bf794417d495928 (diff) | |
download | perl-ad7cce9f36d376e55b45dd79ec28a7f795b5ae4e.tar.gz |
Move magicalize_{isa,overload} out into functions
This way c++ compilers like us again, as we don't do jumps that skip
initialisations anymore.
Diffstat (limited to 'gv.c')
-rw-r--r-- | gv.c | 72 |
1 files changed, 44 insertions, 28 deletions
@@ -963,6 +963,46 @@ Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, const svtype sv_type) { return gv_fetchpvn_flags(nambeg, len, flags | SvUTF8(name), sv_type); } +STATIC void +S_gv_magicalize_isa(GV *gv, const char *nambeg, I32 add) +{ + AV* av; + + PERL_ARGS_ASSERT_GV_MAGICALIZE_ISA; + + av = GvAVn(gv); + GvMULTI_on(gv); + sv_magic(MUTABLE_SV(av), MUTABLE_SV(gv), PERL_MAGIC_isa, + NULL, 0); + /* NOTE: No support for tied ISA */ + if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA") + && AvFILLp(av) == -1) + { + av_push(av, newSVpvs("NDBM_File")); + gv_stashpvs("NDBM_File", GV_ADD); + av_push(av, newSVpvs("DB_File")); + gv_stashpvs("DB_File", GV_ADD); + av_push(av, newSVpvs("GDBM_File")); + gv_stashpvs("GDBM_File", GV_ADD); + av_push(av, newSVpvs("SDBM_File")); + gv_stashpvs("SDBM_File", GV_ADD); + av_push(av, newSVpvs("ODBM_File")); + gv_stashpvs("ODBM_File", GV_ADD); + } +} + +STATIC void +S_gv_magicalize_overload(GV *gv) +{ + HV* hv; + + PERL_ARGS_ASSERT_GV_MAGICALIZE_OVERLOAD; + + hv = GvHVn(gv); + GvMULTI_on(gv); + hv_magic(hv, NULL, PERL_MAGIC_overload); +} + GV * Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags, const svtype sv_type) @@ -1216,35 +1256,11 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags, break; case 'I': if (strEQ(name2, "SA")) - magicalize_isa: { - AV* const av = GvAVn(gv); - GvMULTI_on(gv); - sv_magic(MUTABLE_SV(av), MUTABLE_SV(gv), PERL_MAGIC_isa, - NULL, 0); - /* NOTE: No support for tied ISA */ - if ((add & GV_ADDMULTI) && strEQ(nambeg,"AnyDBM_File::ISA") - && AvFILLp(av) == -1) - { - av_push(av, newSVpvs("NDBM_File")); - gv_stashpvs("NDBM_File", GV_ADD); - av_push(av, newSVpvs("DB_File")); - gv_stashpvs("DB_File", GV_ADD); - av_push(av, newSVpvs("GDBM_File")); - gv_stashpvs("GDBM_File", GV_ADD); - av_push(av, newSVpvs("SDBM_File")); - gv_stashpvs("SDBM_File", GV_ADD); - av_push(av, newSVpvs("ODBM_File")); - gv_stashpvs("ODBM_File", GV_ADD); - } - } + gv_magicalize_isa(gv, nambeg, add); break; case 'O': if (strEQ(name2, "VERLOAD")) - magicalize_overload: { - HV* const hv = GvHVn(gv); - GvMULTI_on(gv); - hv_magic(hv, NULL, PERL_MAGIC_overload); - } + gv_magicalize_overload(gv); break; case 'V': if (strEQ(name2, "ERSION")) @@ -1280,12 +1296,12 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags, break; case 'I': if (strEQ(name2, "SA")) { - goto magicalize_isa; + gv_magicalize_isa(gv, nambeg, add); } break; case 'O': if (strEQ(name2, "VERLOAD")) { - goto magicalize_overload; + gv_magicalize_overload(gv); } break; case 'S': |