This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make *ISA assignment slightly faster
authorFather Chrysostomos <sprout@cpan.org>
Sat, 27 Nov 2010 21:05:16 +0000 (13:05 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 27 Nov 2010 21:17:50 +0000 (13:17 -0800)
Since we already know the array is magical and we already
have a pointer to the magic half the time, we can call
Perl_magic_clearisa directly.

sv.c

diff --git a/sv.c b/sv.c
index 5199268..92634e1 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -3842,14 +3842,18 @@ S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
                    av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
            }
            else
+           {
                sv_magic(
                 sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
                );
+               mg = mg_find(sref, PERL_MAGIC_isa);
+           }
            /* Since the *ISA assignment could have affected more than
               one stash, don’t call mro_isa_changed_in directly, but let
-              magic_setisa do it for us, as it already has the logic for
+              magic_clearisa do it for us, as it already has the logic for
               dealing with globs vs arrays of globs. */
-           SvSETMAGIC(sref);
+           assert(mg);
+           Perl_magic_clearisa(aTHX_ NULL, mg);
        }
        break;
     }