STATIC I32
S_do_trans_simple(pTHX_ SV * const sv)
{
- dVAR;
I32 matches = 0;
STRLEN len;
U8 *s = (U8*)SvPV_nomg(sv,len);
STATIC I32
S_do_trans_count(pTHX_ SV * const sv)
{
- dVAR;
STRLEN len;
const U8 *s = (const U8*)SvPV_nomg_const(sv, len);
const U8 * const send = s + len;
STATIC I32
S_do_trans_complex(pTHX_ SV * const sv)
{
- dVAR;
STRLEN len;
U8 *s = (U8*)SvPV_nomg(sv, len);
U8 * const send = s+len;
STATIC I32
S_do_trans_simple_utf8(pTHX_ SV * const sv)
{
- dVAR;
U8 *s;
U8 *send;
U8 *d;
const U8 * const e = s + len;
while (t < e) {
const U8 ch = *t++;
- hibit = !NATIVE_IS_INVARIANT(ch);
+ hibit = !NATIVE_BYTE_IS_INVARIANT(ch);
if (hibit) {
s = bytes_to_utf8(s, &len);
break;
if (uv < none) {
s += UTF8SKIP(s);
matches++;
- d = uvuni_to_utf8(d, uv);
+ d = uvchr_to_utf8(d, uv);
}
else if (uv == none) {
const int i = UTF8SKIP(s);
else if (uv == extra) {
s += UTF8SKIP(s);
matches++;
- d = uvuni_to_utf8(d, final);
+ d = uvchr_to_utf8(d, final);
}
else
s += UTF8SKIP(s);
STATIC I32
S_do_trans_count_utf8(pTHX_ SV * const sv)
{
- dVAR;
const U8 *s;
const U8 *start = NULL;
const U8 *send;
const U8 * const e = s + len;
while (t < e) {
const U8 ch = *t++;
- hibit = !NATIVE_IS_INVARIANT(ch);
+ hibit = !NATIVE_BYTE_IS_INVARIANT(ch);
if (hibit) {
start = s = bytes_to_utf8(s, &len);
break;
STATIC I32
S_do_trans_complex_utf8(pTHX_ SV * const sv)
{
- dVAR;
U8 *start, *send;
U8 *d;
I32 matches = 0;
const U8 * const e = s + len;
while (t < e) {
const U8 ch = *t++;
- hibit = !NATIVE_IS_INVARIANT(ch);
+ hibit = !NATIVE_BYTE_IS_INVARIANT(ch);
if (hibit) {
s = bytes_to_utf8(s, &len);
break;
matches++;
s += UTF8SKIP(s);
if (uv != puv) {
- d = uvuni_to_utf8(d, uv);
+ d = uvchr_to_utf8(d, uv);
puv = uv;
}
continue;
if (havefinal) {
s += UTF8SKIP(s);
if (puv != final) {
- d = uvuni_to_utf8(d, final);
+ d = uvchr_to_utf8(d, final);
puv = final;
}
}
else {
STRLEN len;
- uv = utf8n_to_uvuni(s, send - s, &len, UTF8_ALLOW_DEFAULT);
+ uv = utf8n_to_uvchr(s, send - s, &len, UTF8_ALLOW_DEFAULT);
if (uv != puv) {
Move(s, d, len, U8);
d += len;
if (uv < none) {
matches++;
s += UTF8SKIP(s);
- d = uvuni_to_utf8(d, uv);
+ d = uvchr_to_utf8(d, uv);
continue;
}
else if (uv == none) { /* "none" is unmapped character */
else if (uv == extra && !del) {
matches++;
s += UTF8SKIP(s);
- d = uvuni_to_utf8(d, final);
+ d = uvchr_to_utf8(d, final);
continue;
}
matches++; /* "none+1" is delete character */
I32
Perl_do_trans(pTHX_ SV *sv)
{
- dVAR;
STRLEN len;
const I32 hasutf = (PL_op->op_private &
(OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF));
PERL_ARGS_ASSERT_DO_TRANS;
if (SvREADONLY(sv) && !(PL_op->op_private & OPpTRANS_IDENTICAL)) {
- if (!SvIsCOW(sv))
Perl_croak_no_modify();
}
(void)SvPV_const(sv, len);
void
Perl_do_join(pTHX_ SV *sv, SV *delim, SV **mark, SV **sp)
{
- dVAR;
SV ** const oldmark = mark;
I32 items = sp - mark;
STRLEN len;
void
Perl_do_sprintf(pTHX_ SV *sv, I32 len, SV **sarg)
{
- dVAR;
STRLEN patlen;
const char * const pat = SvPV_const(*sarg, patlen);
bool do_taint = FALSE;
UV
Perl_do_vecget(pTHX_ SV *sv, SSize_t offset, int size)
{
- dVAR;
STRLEN srclen, len, uoffset, bitoffs = 0;
- const unsigned char *s = (const unsigned char *) SvPV_flags_const(sv, srclen,
- SV_GMAGIC | ((PL_op->op_flags & OPf_MOD || LVRET)
- ? SV_UNDEF_RETURNS_NULL : 0));
+ const I32 svpv_flags = ((PL_op->op_flags & OPf_MOD || LVRET)
+ ? SV_UNDEF_RETURNS_NULL : 0);
+ unsigned char *s = (unsigned char *)
+ SvPV_flags(sv, srclen, (svpv_flags|SV_GMAGIC));
UV retnum = 0;
if (!s) {
- s = (const unsigned char *)"";
+ s = (unsigned char *)"";
}
PERL_ARGS_ASSERT_DO_VECGET;
if (size < 1 || (size & (size-1))) /* size < 1 or not a power of two */
Perl_croak(aTHX_ "Illegal number of bits in vec");
- if (SvUTF8(sv))
+ if (SvUTF8(sv)) {
(void) Perl_sv_utf8_downgrade(aTHX_ sv, TRUE);
+ /* PVX may have changed */
+ s = (unsigned char *) SvPV_flags(sv, srclen, svpv_flags);
+ }
if (size < 8) {
bitoffs = ((offset%8)*size)%8;
((UV) s[uoffset + 1] << 48) +
((UV) s[uoffset + 2] << 40) +
((UV) s[uoffset + 3] << 32) +
- ( s[uoffset + 4] << 24);
+ ((UV) s[uoffset + 4] << 24);
else if (uoffset + 6 >= srclen)
retnum =
((UV) s[uoffset ] << 56) +
((UV) s[uoffset + 3] << 32) +
((UV) s[uoffset + 4] << 24) +
((UV) s[uoffset + 5] << 16) +
- ( s[uoffset + 6] << 8);
+ ((UV) s[uoffset + 6] << 8);
}
#endif
}
void
Perl_do_vecset(pTHX_ SV *sv)
{
- dVAR;
SSize_t offset, bitoffs = 0;
int size;
unsigned char *s;
void
Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
{
- dVAR;
#ifdef LIBERAL
long *dl;
long *ll;
OP *
Perl_do_kv(pTHX)
{
- dVAR;
dSP;
HV * const keys = MUTABLE_HV(POPs);
HE *entry;