Avoid forwards and then backwards on the :: splitting logic in
Nicholas Clark [Wed, 16 Apr 2008 16:08:04 +0000 (16:08 +0000)]
Perl_gv_fetchmethod_autoload()

p4raw-id: //depot/perl@33701

gv.c

diff --git a/gv.c b/gv.c
index 6bcf2bb..ea0b34d 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -618,6 +618,7 @@ Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
     const char *nsplit = NULL;
     GV* gv;
     HV* ostash = stash;
+    const char * const origname = name;
 
     PERL_ARGS_ASSERT_GV_FETCHMETHOD_AUTOLOAD;
 
@@ -625,16 +626,16 @@ Perl_gv_fetchmethod_autoload(pTHX_ HV *stash, const char *name, I32 autoload)
        stash = NULL;
 
     for (nend = name; *nend; nend++) {
-       if (*nend == '\'')
+       if (*nend == '\'') {
            nsplit = nend;
-       else if (*nend == ':' && *(nend + 1) == ':')
-           nsplit = ++nend;
+           name = nend + 1;
+       }
+       else if (*nend == ':' && *(nend + 1) == ':') {
+           nsplit = nend++;
+           name = nend + 1;
+       }
     }
     if (nsplit) {
-       const char * const origname = name;
-       name = nsplit + 1;
-       if (*nsplit == ':')
-           --nsplit;
        if ((nsplit - origname) == 5 && memEQ(origname, "SUPER", 5)) {
            /* ->SUPER::method should really be looked up in original stash */
            SV * const tmpstr = sv_2mortal(Perl_newSVpvf(aTHX_ "%s::SUPER",