This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regcomp.c: Re-order branches
authorKarl Williamson <khw@cpan.org>
Thu, 12 Jan 2017 21:59:45 +0000 (14:59 -0700)
committerKarl Williamson <khw@cpan.org>
Tue, 20 Feb 2018 08:37:23 +0000 (01:37 -0700)
This will be useful in a future commit

regcomp.c

index 3a10ba5..a5feddf 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -12350,8 +12350,6 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
        return TRUE;
     }
 
-    /* Here, we have decided it should be a named character or sequence */
-
     /* The test above made sure that the next real character is a '{', but
      * under the /x modifier, it could be separated by space (or a comment and
      * \n) and this is not allowed (for consistency with \x{...} and the
@@ -12366,16 +12364,8 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
     if (! endbrace) { /* no trailing brace */
         vFAIL2("Missing right brace on \\%c{}", 'N');
     }
-    else if (!(   endbrace == RExC_parse       /* nothing between the {} */
-               || memBEGINs(RExC_parse,   /* U+ (bad hex is checked below
-                                                   for a  better error msg) */
-                                  (STRLEN) (RExC_end - RExC_parse),
-                                 "U+")))
-    {
-       RExC_parse = endbrace;  /* position msg's '<--HERE' */
-       vFAIL("\\N{NAME} must be resolved by the lexer");
-    }
 
+    /* Here, we have decided it should be a named character or sequence */
     REQUIRE_UNI_RULES(flagp, FALSE); /* Unicode named chars imply Unicode
                                         semantics */
 
@@ -12396,6 +12386,15 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
         return TRUE;
     }
 
+    if (!(endbrace == RExC_parse               /* nothing between the {} */
+              || (endbrace - RExC_parse >= 2   /* U+ (bad hex is checked... */
+                  && strnEQ(RExC_parse, "U+", 2)))) /* ... below for a better
+                                                       error msg) */
+    {
+       RExC_parse = endbrace;  /* position msg's '<--HERE' */
+       vFAIL("\\N{NAME} must be resolved by the lexer");
+    }
+
     RExC_parse += 2;   /* Skip past the 'U+' */
 
     /* Because toke.c has generated a special construct for us guaranteed not