dVAR;
I32 matches = 0;
STRLEN len;
- U8 *s = (U8*)SvPV(sv,len);
+ U8 *s = (U8*)SvPV_nomg(sv,len);
U8 * const send = s+len;
const short * const tbl = (short*)cPVOP->op_pv;
{
dVAR;
STRLEN len;
- const U8 *s = (const U8*)SvPV_const(sv, len);
+ const U8 *s = (const U8*)SvPV_nomg_const(sv, len);
const U8 * const send = s + len;
I32 matches = 0;
const short * const tbl = (short*)cPVOP->op_pv;
{
dVAR;
STRLEN len;
- U8 *s = (U8*)SvPV(sv, len);
+ U8 *s = (U8*)SvPV_nomg(sv, len);
U8 * const send = s+len;
I32 matches = 0;
const short * const tbl = (short*)cPVOP->op_pv;
PERL_ARGS_ASSERT_DO_TRANS_SIMPLE_UTF8;
- s = (U8*)SvPV(sv, len);
+ s = (U8*)SvPV_nomg(sv, len);
if (!SvUTF8(sv)) {
const U8 *t = s;
const U8 * const e = s + len;
PERL_ARGS_ASSERT_DO_TRANS_COUNT_UTF8;
- s = (const U8*)SvPV_const(sv, len);
+ s = (const U8*)SvPV_nomg_const(sv, len);
if (!SvUTF8(sv)) {
const U8 *t = s;
const U8 * const e = s + len;
STRLEN len;
U8 *dstart, *dend;
U8 hibit = 0;
- U8 *s = (U8*)SvPV(sv, len);
+ U8 *s = (U8*)SvPV_nomg(sv, len);
PERL_ARGS_ASSERT_DO_TRANS_COMPLEX_UTF8;
if (SvIsCOW(sv))
sv_force_normal_flags(sv, 0);
if (SvREADONLY(sv))
- Perl_croak(aTHX_ "%s", PL_no_modify);
+ Perl_croak_no_modify(aTHX);
}
(void)SvPV_const(sv, len);
if (!len)
sv_force_normal_flags(sv, 0);
}
if (SvREADONLY(sv))
- Perl_croak(aTHX_ "%s", PL_no_modify);
+ Perl_croak_no_modify(aTHX);
}
if (PL_encoding && !SvUTF8(sv)) {
sv_force_normal_flags(sv, 0);
}
if (SvREADONLY(sv))
- Perl_croak(aTHX_ "%s", PL_no_modify);
+ Perl_croak_no_modify(aTHX);
}
if (PL_encoding) {
}
nope:
- if (svrecode)
- SvREFCNT_dec(svrecode);
+ SvREFCNT_dec(svrecode);
Safefree(temp_buffer);
return count;
RETURN;
if (gimme == G_SCALAR) {
- IV i;
- dTARGET;
-
if (PL_op->op_flags & OPf_MOD || LVRET) { /* lvalue */
- if (SvTYPE(TARG) < SVt_PVLV) {
- sv_upgrade(TARG, SVt_PVLV);
- sv_magic(TARG, NULL, PERL_MAGIC_nkeys, NULL, 0);
- }
- LvTYPE(TARG) = 'k';
- if (LvTARG(TARG) != (const SV *)keys) {
- if (LvTARG(TARG))
- SvREFCNT_dec(LvTARG(TARG));
- LvTARG(TARG) = SvREFCNT_inc_simple(keys);
- }
- PUSHs(TARG);
- RETURN;
- }
-
- if (! SvTIED_mg((const SV *)keys, PERL_MAGIC_tied) )
- {
- i = HvKEYS(keys);
+ SV * const ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
+ sv_magic(ret, NULL, PERL_MAGIC_nkeys, NULL, 0);
+ LvTYPE(ret) = 'k';
+ LvTARG(ret) = SvREFCNT_inc_simple(keys);
+ PUSHs(ret);
}
else {
- i = 0;
- while (hv_iternext(keys)) i++;
+ IV i;
+ dTARGET;
+
+ if (! SvTIED_mg((const SV *)keys, PERL_MAGIC_tied) ) {
+ i = HvKEYS(keys);
+ }
+ else {
+ i = 0;
+ while (hv_iternext(keys)) i++;
+ }
+ PUSHi( i );
}
- PUSHi( i );
RETURN;
}