X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=scope.h;h=97e0d7aa3f8e06cd385bab1c4fb51f08b1512bc0;hb=0b99e9860ee94a7d55fe93fe492e8286fdfa409d;hp=6eddb1942286b97e5b1fa132828feb78cb1ea51e;hpb=747e2fae43204b65ccf806e75ededd01638e4351;p=p5sagit%2Fp5-mst-13.2.git diff --git a/scope.h b/scope.h index 6eddb19..97e0d7a 100644 --- a/scope.h +++ b/scope.h @@ -54,6 +54,7 @@ #define SAVEt_COMPILE_WARNINGS 43 #define SAVEt_STACK_CXPOS 44 #define SAVEt_PARSER 45 +#define SAVEt_ADELETE 46 #define SAVEf_SETMAGIC 1 @@ -142,6 +143,8 @@ Closing bracket on a callback. See C and L. #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 SAVEADELETE(a,k) \ + save_adelete(MUTABLE_AV(a), (I32)(k)) #define SAVEDESTRUCTOR(f,p) \ save_destructor((DESTRUCTORFUNC_NOCONTEXT_t)(f), (void*)(p)) @@ -157,42 +160,18 @@ Closing bracket on a callback. See C and L. #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