/* push at least 'size' slots worth of padding onto the savestack */
static void su_ss_push_padding(pTHX_ void *ud, I32 size) {
/* push at least 'size' slots worth of padding onto the savestack */
static void su_ss_push_padding(pTHX_ void *ud, I32 size) {
* first indicates that this is the first push of a destructor */
static void su_ss_push_destructor(pTHX_ void *ud, I32 depth, bool first) {
* first indicates that this is the first push of a destructor */
static void su_ss_push_destructor(pTHX_ void *ud, I32 depth, bool first) {
su_ud_origin_elem *origin = SU_UD_ORIGIN(ud);
assert(first || origin[depth+1].orig_ix == PL_savestack_ix);
su_ud_origin_elem *origin = SU_UD_ORIGIN(ud);
assert(first || origin[depth+1].orig_ix == PL_savestack_ix);
(origin[depth].orig_ix + origin[depth].offset) - PL_savestack_ix);
XSH_D(su_debug_log(
"%p: push destructor at save_ix=%d depth=%d scope_ix=%d\n",
(origin[depth].orig_ix + origin[depth].offset) - PL_savestack_ix);
XSH_D(su_debug_log(
"%p: push destructor at save_ix=%d depth=%d scope_ix=%d\n",
if (PL_savestack_ix < base + offset) {
I32 gap = (base + offset) - PL_savestack_ix;
assert(gap >= SU_SAVE_ALLOC_SIZE + 1);
if (PL_savestack_ix < base + offset) {
I32 gap = (base + offset) - PL_savestack_ix;
assert(gap >= SU_SAVE_ALLOC_SIZE + 1);