This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade Math::BigInt from version 1.999817 to 1.999818
[perl5.git] / toke.c
diff --git a/toke.c b/toke.c
index bfa9301..bc1caba 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -6635,8 +6635,6 @@ yyl_croak_unrecognised(pTHX_ char *s)
     Perl_croak(aTHX_  "Unrecognized character %s; marked by <-- HERE after %" UTF8f "<-- HERE near column %d", c,
                       UTF8fARG(UTF, (s - d), d),
                      (int) len + 1);
-
-    NORETURN_FUNCTION_END;
 }
 
 static int
@@ -6739,6 +6737,49 @@ yyl_do(pTHX_ char *s, I32 orig_keyword)
     OPERATOR(DO);
 }
 
+static int
+yyl_my(pTHX_ char **sp, I32 my)
+{
+    char *s = *sp;
+    if (PL_in_my) {
+        PL_bufptr = s;
+        yyerror(Perl_form(aTHX_
+                          "Can't redeclare \"%s\" in \"%s\"",
+                           my       == KEY_my    ? "my" :
+                           my       == KEY_state ? "state" : "our",
+                           PL_in_my == KEY_my    ? "my" :
+                           PL_in_my == KEY_state ? "state" : "our"));
+    }
+    PL_in_my = (U16)my;
+    s = skipspace(s);
+    if (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) {
+        STRLEN len;
+        s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
+        if (memEQs(PL_tokenbuf, len, "sub")) {
+            *sp = s;
+            return SUB;
+        }
+        PL_in_my_stash = find_in_my_stash(PL_tokenbuf, len);
+        if (!PL_in_my_stash) {
+            char tmpbuf[1024];
+            int i;
+            PL_bufptr = s;
+            i = my_snprintf(tmpbuf, sizeof(tmpbuf), "No such class %.1000s", PL_tokenbuf);
+            PERL_MY_SNPRINTF_POST_GUARD(i, sizeof(tmpbuf));
+            yyerror_pv(tmpbuf, UTF ? SVf_UTF8 : 0);
+        }
+    }
+    else if (*s == '\\') {
+        if (!FEATURE_MYREF_IS_ENABLED)
+            Perl_croak(aTHX_ "The experimental declared_refs "
+                             "feature is not enabled");
+        Perl_ck_warner_d(aTHX_
+             packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
+            "Declaring references is experimental");
+    }
+    OPERATOR(MY);
+}
+
 static int yyl_try(pTHX_ char, char*, STRLEN, I32, GV*, GV**, U8, U32, const bool);
 
 #define RETRY() yyl_try(aTHX_ 0, s, len, orig_keyword, gv, gvp, \
@@ -8482,41 +8523,13 @@ yyl_try(pTHX_ char initial_state, char *s, STRLEN len,
 
        case KEY_our:
        case KEY_my:
-       case KEY_state:
-           if (PL_in_my) {
-               PL_bufptr = s;
-               yyerror(Perl_form(aTHX_
-                                 "Can't redeclare \"%s\" in \"%s\"",
-                                  tmp      == KEY_my    ? "my" :
-                                  tmp      == KEY_state ? "state" : "our",
-                                  PL_in_my == KEY_my    ? "my" :
-                                  PL_in_my == KEY_state ? "state" : "our"));
-           }
-           PL_in_my = (U16)tmp;
-           s = skipspace(s);
-            if (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) {
-               s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
-               if (memEQs(PL_tokenbuf, len, "sub"))
-                   goto really_sub;
-               PL_in_my_stash = find_in_my_stash(PL_tokenbuf, len);
-               if (!PL_in_my_stash) {
-                   char tmpbuf[1024];
-                    int len;
-                   PL_bufptr = s;
-                   len = my_snprintf(tmpbuf, sizeof(tmpbuf), "No such class %.1000s", PL_tokenbuf);
-                    PERL_MY_SNPRINTF_POST_GUARD(len, sizeof(tmpbuf));
-                   yyerror_pv(tmpbuf, UTF ? SVf_UTF8 : 0);
-               }
-           }
-           else if (*s == '\\') {
-               if (!FEATURE_MYREF_IS_ENABLED)
-                   Perl_croak(aTHX_ "The experimental declared_refs "
-                                    "feature is not enabled");
-               Perl_ck_warner_d(aTHX_
-                    packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
-                   "Declaring references is experimental");
-           }
-           OPERATOR(MY);
+       case KEY_state: {
+            int tok = yyl_my(aTHX_ &s, tmp);
+            if (tok == SUB)
+                goto really_sub;
+            else
+                return tok;
+        }
 
        case KEY_next:
            LOOPX(OP_NEXT);
@@ -9328,8 +9341,8 @@ S_pending_ident(pTHX)
                 /* diag_listed_as: No package name allowed for variable %s
                                    in "our" */
                 yyerror_pv(Perl_form(aTHX_ "No package name allowed for "
-                                  "%se %s in \"our\"",
-                                  *PL_tokenbuf=='&' ?"subroutin":"variabl",
+                                  "%s %s in \"our\"",
+                                  *PL_tokenbuf=='&' ? "subroutine" : "variable",
                                   PL_tokenbuf), UTF ? SVf_UTF8 : 0);
             tmp = allocmy(PL_tokenbuf, tokenbuf_len, UTF ? SVf_UTF8 : 0);
         }
@@ -9341,7 +9354,7 @@ S_pending_ident(pTHX)
                 GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
                 yyerror_pv(Perl_form(aTHX_ PL_no_myglob,
                             PL_in_my == KEY_my ? "my" : "state",
-                            *PL_tokenbuf == '&' ? "subroutin" : "variabl",
+                            *PL_tokenbuf == '&' ? "subroutine" : "variable",
                             PL_tokenbuf),
                             UTF ? SVf_UTF8 : 0);
                 GCC_DIAG_RESTORE_STMT;