SV *namesv = sv_2mortal(newSVpvs("$"));
sv_catsv(namesv, a1);
namepv = SvPV(namesv, namelen);
- padoff = pad_findmy_pvn(namepv, namelen, 0);
+ padoff = pad_findmy_pvn(namepv, namelen, SvUTF8(namesv));
} break;
case 3: {
char *namepv;
SV *namesv = sv_2mortal(newSVpvs("$"));
sv_catsv(namesv, a1);
namepv = SvPV_nolen(namesv);
- padoff = pad_findmy_pv(namepv, 0);
+ padoff = pad_findmy_pv(namepv, SvUTF8(namesv));
} break;
case 4: {
padoff = pad_findmy_pvs("$foo", 0);
cv_set_call_checker(pscv, THX_ck_entersub_pad_scalar, (SV*)pscv);
}
+SV*
+fetch_pad_names( cv )
+CV* cv
+ PREINIT:
+ I32 i;
+ AV *pad_namelist;
+ AV *retav = newAV();
+ CODE:
+ pad_namelist = (AV*) *av_fetch(CvPADLIST(cv), 0, FALSE);
+
+ for ( i = av_len(pad_namelist); i >= 0; i-- ) {
+ SV** name_ptr = av_fetch(pad_namelist, i, 0);
+
+ if (name_ptr && SvPOKp(*name_ptr)) {
+ av_push(retav, newSVsv(*name_ptr));
+ }
+ }
+ RETVAL = newRV_noinc((SV*)retav);
+ OUTPUT:
+ RETVAL
+
STRLEN
underscore_length()
PROTOTYPE:
],
pad_size => {
total => { cmp => 2, msg => 'Sub has two lexicals.' },
- utf8 => { cmp => 0, msg => '' },
- invariant => { cmp => 2, msg => '' },
+ utf8 => { cmp => 0, msg => 'Sub has no UTF-8 encoded vars.' },
+ invariant => { cmp => 2, msg => 'Sub has two invariant vars.' },
},
vars => [
{ name => '$zest', msg => 'Sub has [\$zest].', type => 'ok' },