#define SAVEt_COMPILE_WARNINGS 43
#define SAVEt_STACK_CXPOS 44
#define SAVEt_PARSER 45
+#define SAVEt_ADELETE 46
#define SAVEf_SETMAGIC 1
+#define SAVEf_KEEPOLDELEM 2
+#define save_aelem(av,idx,sptr) save_aelem_flags(av,idx,sptr,SAVEf_SETMAGIC)
#define save_helem(hv,key,sptr) save_helem_flags(hv,key,sptr,SAVEf_SETMAGIC)
#ifndef SCOPE_SAVES_SIGNAL_MASK
#define SAVESETSVFLAGS(sv,mask,val) save_set_svflags(sv,mask,val)
#define SAVEDELETE(h,k,l) \
save_delete(MUTABLE_HV(h), (char*)(k), (I32)(l))
+#define SAVEHDELETE(h,s) \
+ save_hdelete(MUTABLE_HV(h), (s))
+#define SAVEADELETE(a,k) \
+ save_adelete(MUTABLE_AV(a), (I32)(k))
#define SAVEDESTRUCTOR(f,p) \
save_destructor((DESTRUCTORFUNC_NOCONTEXT_t)(f), (void*)(p))
#define SAVEOP() save_op()
-#define SAVEHINTS() \
- STMT_START { \
- SSCHECK(4); \
- if (PL_hints & HINT_LOCALIZE_HH) { \
- SSPUSHPTR(GvHV(PL_hintgv)); \
- GvHV(PL_hintgv) = Perl_hv_copy_hints_hv(aTHX_ GvHV(PL_hintgv)); \
- } \
- if (PL_compiling.cop_hints_hash) { \
- HINTS_REFCNT_LOCK; \
- PL_compiling.cop_hints_hash->refcounted_he_refcnt++; \
- HINTS_REFCNT_UNLOCK; \
- } \
- SSPUSHPTR(PL_compiling.cop_hints_hash); \
- SSPUSHINT(PL_hints); \
- SSPUSHINT(SAVEt_HINTS); \
- } STMT_END
+#define SAVEHINTS() save_hints()
#define SAVECOMPPAD() save_pushptr(MUTABLE_SV(PL_comppad), SAVEt_COMPPAD)
#define SAVESWITCHSTACK(f,t) \
STMT_START { \
- SSCHECK(3); \
- SSPUSHPTR(MUTABLE_SV(f)); \
- SSPUSHPTR(MUTABLE_SV(t)); \
- SSPUSHINT(SAVEt_SAVESWITCHSTACK); \
+ save_pushptrptr(MUTABLE_SV(f), MUTABLE_SV(t), SAVEt_SAVESWITCHSTACK); \
SWITCHSTACK((f),(t)); \
PL_curstackinfo->si_stack = (t); \
} STMT_END
-#define SAVECOPARYBASE(c) \
- STMT_START { \
- SSCHECK(3); \
- SSPUSHINT(CopARYBASE_get(c)); \
- SSPUSHPTR(c); \
- SSPUSHINT(SAVEt_COP_ARYBASE); \
- } STMT_END
+#define SAVECOPARYBASE(c) save_pushi32ptr(CopARYBASE_get(c), c, SAVEt_COP_ARYBASE);
/* Need to do the cop warnings like this, rather than a "SAVEFREESHAREDPV",
because realloc() means that the value can actually change. Possibly
#define SSNEW(size) Perl_save_alloc(aTHX_ (size), 0)
#define SSNEWt(n,t) SSNEW((n)*sizeof(t))
#define SSNEWa(size,align) Perl_save_alloc(aTHX_ (size), \
- (align - ((int)((caddr_t)&PL_savestack[PL_savestack_ix]) % align)) % align)
+ (I32)(align - ((size_t)((caddr_t)&PL_savestack[PL_savestack_ix]) % align)) % align)
#define SSNEWat(n,t,align) SSNEWa((n)*sizeof(t), align)
#define SSPTR(off,type) ((type) ((char*)PL_savestack + off))