return vmg_cb_call1(w->cb_set, w->opinfo, sv, mg->mg_obj);
}
+STATIC U32 vmg_sv_len(pTHX_ SV *sv) {
+#define vmg_sv_len(S) vmg_sv_len(aTHX_ (S))
+ STRLEN len;
+#if VMG_HAS_PERL(5, 9, 3)
+ const U8 *s = VOID2(const U8 *, VOID2(const void *, SvPV_const(sv, len)));
+#else
+ U8 *s = SvPV(sv, len);
+#endif
+
+ return DO_UTF8(sv) ? utf8_length(s, s + len) : len;
+}
+
STATIC U32 vmg_svt_len(pTHX_ SV *sv, MAGIC *mg) {
const vmg_wizard *w = vmg_wizard_from_mg_nocheck(mg);
unsigned int opinfo = w->opinfo;
PUSHs(sv_2mortal(newRV_inc(sv)));
PUSHs(mg->mg_obj ? mg->mg_obj : &PL_sv_undef);
if (t < SVt_PVAV) {
- STRLEN l;
-#if VMG_HAS_PERL(5, 9, 3)
- const U8 *s = VOID2(const U8 *, VOID2(const void *, SvPV_const(sv, l)));
-#else
- U8 *s = SvPV(sv, l);
-#endif
- if (DO_UTF8(sv))
- len = utf8_length(s, s + l);
- else
- len = l;
+ len = vmg_sv_len(sv);
mPUSHu(len);
} else if (t == SVt_PVAV) {
len = av_len((AV *) sv) + 1;