diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2001-11-06 03:05:34 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-11-06 03:05:34 +0000 |
commit | a72c75842468bcd2a7cf17032844c4040a5a31e2 (patch) | |
tree | f1d67259d9b154926eb495b329d3239f96b9be7c /regcomp.c | |
parent | 545666dba9cc33d16d0b8341e36facdb43c44913 (diff) | |
download | perl-a72c75842468bcd2a7cf17032844c4040a5a31e2.tar.gz |
Implement the encoding pragma for regex literals.
p4raw-id: //depot/perl@12864
Diffstat (limited to 'regcomp.c')
-rw-r--r-- | regcomp.c | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -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); } |