summaryrefslogtreecommitdiff
path: root/regcomp.c
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2001-11-06 03:05:34 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2001-11-06 03:05:34 +0000
commita72c75842468bcd2a7cf17032844c4040a5a31e2 (patch)
treef1d67259d9b154926eb495b329d3239f96b9be7c /regcomp.c
parent545666dba9cc33d16d0b8341e36facdb43c44913 (diff)
downloadperl-a72c75842468bcd2a7cf17032844c4040a5a31e2.tar.gz
Implement the encoding pragma for regex literals.
p4raw-id: //depot/perl@12864
Diffstat (limited to 'regcomp.c')
-rw-r--r--regcomp.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/regcomp.c b/regcomp.c
index efc1275cb5..cd3857eb2b 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -3155,6 +3155,21 @@ tryagain:
break;
}
+ if (PL_encoding && PL_regkind[(U8)OP(ret)] == EXACT && !RExC_utf8) {
+ STRLEN oldlen = STR_LEN(ret);
+ SV *sv = sv_2mortal(newSVpvn(STRING(ret), oldlen));
+ char *s = Perl_sv_recode_to_utf8(aTHX_ sv, PL_encoding);
+ STRLEN newlen = SvCUR(sv);
+ if (!SIZE_ONLY) {
+ DEBUG_r(PerlIO_printf(Perl_debug_log, "recode %*s to %*s\n",
+ oldlen, STRING(ret), newlen, s));
+ Copy(s, STRING(ret), newlen, char);
+ STR_LEN(ret) += newlen - oldlen;
+ RExC_emit += STR_SZ(newlen) - STR_SZ(oldlen);
+ } else
+ RExC_size += STR_SZ(newlen) - STR_SZ(oldlen);
+ }
+
return(ret);
}