develooper Front page | perl.perl5.changes | Postings from February 2012

[perl.git] branch blead, updated. v5.15.8-53-g0c28294

From:
Karl Williamson
Date:
February 28, 2012 16:41
Subject:
[perl.git] branch blead, updated. v5.15.8-53-g0c28294
Message ID:
E1S2Xbu-0004ZQ-Cg@camel.ams6.corp.booking.com
In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/0c2829400b005cbfc6543affe3aa5a63616b7498?hp=b4069bca6054692e4fffa8e9e04572511e910fbd>

- Log -----------------------------------------------------------------
commit 0c2829400b005cbfc6543affe3aa5a63616b7498
Author: Karl Williamson <public@khwilliamson.com>
Date:   Tue Feb 28 17:27:43 2012 -0700

    regcomp.c: Add comment

M	regcomp.c

commit 00b27cfcf04d3cbe5327f810377c46c2007c10d5
Author: Karl Williamson <public@khwilliamson.com>
Date:   Tue Feb 28 17:11:31 2012 -0700

    regcomp.c: Add comment, reorder #define more logically

M	regcomp.c

commit 9fa196e11dd896d12236f0f566c5c556473e1cdc
Author: Karl Williamson <public@khwilliamson.com>
Date:   Mon Feb 20 11:32:18 2012 -0700

    re/pat.t: Remove obsolete comment

M	t/re/pat.t

commit 96f54887615ec13b0713f735c3ec6618468ec51f
Author: Karl Williamson <public@khwilliamson.com>
Date:   Mon Feb 20 11:27:03 2012 -0700

    (?foo:...) loses passed in charset
    
    This commit looks for the passed-in charset, and overrides it only if it
    is /d and the pattern requires /u.  Previously the passed-in value was
    ignored.

M	regcomp.c
M	t/re/pat.t
-----------------------------------------------------------------------

Summary of changes:
 regcomp.c  |   15 +++++++++++----
 t/re/pat.t |   15 +++++++++++----
 2 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/regcomp.c b/regcomp.c
index 1e1dcfd..7a3433a 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -382,9 +382,11 @@ static const scan_data_t zero_scan_data =
 #define SCF_SEEN_ACCEPT         0x8000 
 
 #define UTF cBOOL(RExC_utf8)
+
+/* The enums for all these are ordered so things work out correctly */
 #define LOC (get_regex_charset(RExC_flags) == REGEX_LOCALE_CHARSET)
-#define UNI_SEMANTICS (get_regex_charset(RExC_flags) == REGEX_UNICODE_CHARSET)
 #define DEPENDS_SEMANTICS (get_regex_charset(RExC_flags) == REGEX_DEPENDS_CHARSET)
+#define UNI_SEMANTICS (get_regex_charset(RExC_flags) == REGEX_UNICODE_CHARSET)
 #define AT_LEAST_UNI_SEMANTICS (get_regex_charset(RExC_flags) >= REGEX_UNICODE_CHARSET)
 #define ASCII_RESTRICTED (get_regex_charset(RExC_flags) == REGEX_ASCII_RESTRICTED_CHARSET)
 #define MORE_ASCII_RESTRICTED (get_regex_charset(RExC_flags) == REGEX_ASCII_MORE_RESTRICTED_CHARSET)
@@ -8010,9 +8012,12 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp,U32 depth)
                 U32 posflags = 0, negflags = 0;
 	        U32 *flagsp = &posflags;
                 char has_charset_modifier = '\0';
-		regex_charset cs = (RExC_utf8 || RExC_uni_semantics)
-				    ? REGEX_UNICODE_CHARSET
-				    : REGEX_DEPENDS_CHARSET;
+		regex_charset cs = get_regex_charset(RExC_flags);
+		if (cs == REGEX_DEPENDS_CHARSET
+		    && (RExC_utf8 || RExC_uni_semantics))
+		{
+		    cs = REGEX_UNICODE_CHARSET;
+		}
 
 		while (*RExC_parse) {
 		    /* && strchr("iogcmsx", *RExC_parse) */
@@ -10848,6 +10853,8 @@ parseit:
                                             PL_PosixCntrl, PL_XPosixCntrl);
 		    break;
 		case ANYOF_DIGIT:
+		    /* Ignore the compiler warning for this macro, planned to
+		     * be eliminated later */
 		    DO_POSIX_LATIN1_ONLY_KNOWN(ret, namedclass, properties,
                         PL_PosixDigit, PL_PosixDigit, "XPosixDigit", listsv);
 		    break;
diff --git a/t/re/pat.t b/t/re/pat.t
index b4b7ac4..624b0d9 100644
--- a/t/re/pat.t
+++ b/t/re/pat.t
@@ -2,9 +2,7 @@
 #
 # This is a home for regular expression tests that don't fit into
 # the format supported by re/regexp.t.  If you want to add a test
-# that does fit that format, add it to re/re_tests, not here.  Tests for \N
-# should be added here because they are treated as single quoted strings
-# there, which means they avoid the lexer which otherwise would look at them.
+# that does fit that format, add it to re/re_tests, not here.
 
 use strict;
 use warnings;
@@ -21,7 +19,7 @@ BEGIN {
     require './test.pl';
 }
 
-plan tests => 469;  # Update this when adding/deleting tests.
+plan tests => 472;  # Update this when adding/deleting tests.
 
 run_tests() unless caller;
 
@@ -1253,6 +1251,15 @@ EOP
         $anch_count++ while $str=~/^.*/mg;
         is $anch_count, 1, 'while "\n"=~/^.*/mg should match only once';
     }
+
+    { # [perl #111174]
+        use re '/u';
+        like "\xe0", qr/(?i:\xc0)/, "(?i: shouldn't lose the passed in /u";
+        use re '/a';
+        unlike "\x{100}", qr/(?i:\w)/, "(?i: shouldn't lose the passed in /a";
+        use re '/aa';
+        unlike 'k', qr/(?i:\N{KELVIN SIGN})/, "(?i: shouldn't lose the passed in /aa";
+    }
 } # End of sub run_tests
 
 1;

--
Perl5 Master Repository



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About