svtype type;
} su_ud_localize;
+#define SU_UD_LOCALIZE_FREE(U) STMT_START { \
+ SvREFCNT_dec((U)->elem); \
+ SvREFCNT_dec((U)->val); \
+ SvREFCNT_dec((U)->sv); \
+ SU_UD_FREE(U); \
+} STMT_END
+
STATIC I32 su_ud_localize_init(pTHX_ su_ud_localize *ud, SV *sv, SV *val, SV *elem) {
#define su_ud_localize_init(UD, S, V, E) su_ud_localize_init(aTHX_ (UD), (S), (V), (E))
UV deref = 0;
SvSetMagicSV((SV *) gv, val);
done:
- SvREFCNT_dec(ud->elem);
- SvREFCNT_dec(ud->val);
- SvREFCNT_dec(ud->sv);
- SU_UD_FREE(ud);
+ SU_UD_LOCALIZE_FREE(ud);
}
/* --- Pop a context back -------------------------------------------------- */
SU_UD_HANDLER(ud) = su_localize;
size = su_ud_localize_init(ud, sv, val, elem);
if (ud->type != SVt_PVAV && ud->type != SVt_PVHV) {
- Safefree(ud);
+ SU_UD_LOCALIZE_FREE(ud);
croak("Can't localize an element of something that isn't an array or a hash");
}
su_init(cxix, ud, size);