summaryrefslogtreecommitdiff
path: root/gv.c
diff options
context:
space:
mode:
authorFlorian Ragwitz <rafl@debian.org>2010-09-08 04:06:23 +0200
committerFlorian Ragwitz <rafl@debian.org>2010-09-08 04:06:23 +0200
commitad7cce9f36d376e55b45dd79ec28a7f795b5ae4e (patch)
tree832319c9b4466f99397bd7b81c6c5182a99b8317 /gv.c
parenta5ce339cb0c533c90d1033581bf794417d495928 (diff)
downloadperl-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.c72
1 files changed, 44 insertions, 28 deletions
diff --git a/gv.c b/gv.c
index 72016bf6d5..664e877a69 100644
--- a/gv.c
+++ b/gv.c
@@ -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':