summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--globvar.sym1
-rw-r--r--regcomp.c11
-rw-r--r--t/porting/globvar.t2
3 files changed, 11 insertions, 3 deletions
diff --git a/globvar.sym b/globvar.sym
index a8067e5a69..93eca43ea1 100644
--- a/globvar.sym
+++ b/globvar.sym
@@ -18,6 +18,7 @@ hexdigit
interp_size
interp_size_5_16_0
keyword_plugin
+latin1_lc
magic_data
magic_vtable_names
magic_vtables
diff --git a/regcomp.c b/regcomp.c
index 579dabec5a..40d08e9f4f 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -10702,8 +10702,14 @@ parseit:
else {
op = EXACT;
}
- } /* else 2 chars in the bit map: the folds of each other */
- else if (AT_LEAST_UNI_SEMANTICS || !isASCII(value)) {
+ }
+ else { /* else 2 chars in the bit map: the folds of each other */
+
+ /* Use the folded value, which for the cases where we get here,
+ * is just the lower case of the current one (which may resolve to
+ * itself, or to the other one */
+ value = toLOWER_LATIN1(value);
+ if (AT_LEAST_UNI_SEMANTICS || !isASCII(value)) {
/* To join adjacent nodes, they must be the exact EXACTish type.
* Try to use the most likely type, by using EXACTFU if the regex
@@ -10714,6 +10720,7 @@ parseit:
else { /* Otherwise, more likely to be EXACTF type */
op = EXACTF;
}
+ }
ret = reg_node(pRExC_state, op);
RExC_parse = (char *)cur_parse;
diff --git a/t/porting/globvar.t b/t/porting/globvar.t
index aa266959c2..795673b49a 100644
--- a/t/porting/globvar.t
+++ b/t/porting/globvar.t
@@ -14,7 +14,7 @@ skip_all("Code to read symbols not ported to $^O")
my %skip = map { ("PL_$_", 1) }
qw(
DBcv bitcount cshname force_link_funcs generation lastgotoprobe
- latin1_lc mod_latin1_uc modcount no_symref_sv timesbuf uudmap
+ mod_latin1_uc modcount no_symref_sv timesbuf uudmap
watchaddr watchok warn_uninit_sv
);