This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regcomp.c: Move some code in regpiece()
authorKarl Williamson <khw@cpan.org>
Tue, 21 Apr 2020 13:05:23 +0000 (07:05 -0600)
committerKarl Williamson <khw@cpan.org>
Mon, 12 Oct 2020 15:45:47 +0000 (09:45 -0600)
This moves some code, making it part of an if/else.  As a result, several
gotos are eliminated, and the code is in a more logical order.

regcomp.c

index 287539b..f2ee72a 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -12637,8 +12637,24 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
     parse_start = RExC_parse;
 #endif
 
-    if (op == '{') {
+    if (op != '{') {
+        nextchar(pRExC_state);
+
+        *flagp = HASWIDTH;
+
+        if (op == '*') {
+            min = 0;
+        }
+        else if (op == '+') {
+            min = 1;
+        }
+        else if (op == '?') {
+            min = 0; max = 1;
+        }
+    }
+    else {  /* is '{' */
         const char* endptr;
+
        maxpos = NULL;
        next = RExC_parse + 1;
        while (isDIGIT(*next) || *next == ',') {
@@ -12696,8 +12712,8 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
                        "Useless use of greediness modifier '%c'",
                        *RExC_parse);
         }
+    }
 
-      do_curly:
         if ((flags&SIMPLE)) {
             if (min == 0 && max == REG_INFTY) {
 
@@ -12774,7 +12790,6 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
             RExC_seen |= REG_UNBOUNDED_QUANTIFIER_SEEN;
 
         goto nest_check;
-    }
 
 #if 0                          /* Now runtime fix should be reliable. */
 
@@ -12791,23 +12806,6 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
     if (!(flags&HASWIDTH) && op != '?')
       vFAIL("Regexp *+ operand could be empty");
 #endif
-
-    nextchar(pRExC_state);
-
-    *flagp = HASWIDTH;
-
-    if (op == '*') {
-       min = 0;
-       goto do_curly;
-    }
-    else if (op == '+') {
-       min = 1;
-       goto do_curly;
-    }
-    else if (op == '?') {
-       min = 0; max = 1;
-       goto do_curly;
-    }
   nest_check:
     if (!(flags&(HASWIDTH|POSTPONED)) && max > REG_INFTY/3) {
         if (origparse[0] == '\\' && origparse[1] == 'K') {