struct padlist {
SSize_t xpadl_max; /* max index for which array has space */
PAD ** xpadl_alloc; /* pointer to beginning of array of AVs */
- U32 xpadl_id; /* Semi-unique ID, shared between clones */
- U32 xpadl_outid; /* ID of outer pad */
+ PADNAMELIST*xpadl_outid; /* Padnamelist of outer pad; used as ID */
};
=for apidoc m|bool|PadnameOUTER|PADNAME pn
Whether this entry belongs to an outer pad.
-=for apidoc m|bool|PadnameSTATE|PADNAME pn
+=for apidoc m|bool|PadnameIsSTATE|PADNAME pn
Whether this is a "state" variable.
=for apidoc m|HV *|PadnameTYPE|PADNAME pn
#define PadnamelistARRAY(pnl) AvARRAY(pnl)
#define PadnamelistMAX(pnl) AvFILLp(pnl)
+#define PadnamelistMAXNAMED(pnl) \
+ ((XPVAV*) SvANY(pnl))->xmg_u.xmg_hash_index
#define PadARRAY(pad) AvARRAY(pad)
#define PadMAX(pad) AvFILLp(pad)
#define PadnamePV(pn) (SvPOKp(pn) ? SvPVX(pn) : NULL)
-#define PadnameLEN(pn) SvCUR(pn)
+#define PadnameLEN(pn) ((pn) == &PL_sv_undef ? 0 : SvCUR(pn))
#define PadnameUTF8(pn) !!SvUTF8(pn)
#define PadnameSV(pn) pn
#define PadnameIsOUR(pn) !!SvPAD_OUR(pn)
#define PadnameOURSTASH(pn) SvOURSTASH(pn)
#define PadnameOUTER(pn) !!SvFAKE(pn)
-#define PadnameSTATE(pn) SvPAD_STATE(pn)
+#define PadnameIsSTATE(pn) !!SvPAD_STATE(pn)
#define PadnameTYPE(pn) (SvPAD_TYPED(pn) ? SvSTASH(pn) : NULL)