X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=scope.h;h=cc349f0f7c22957f73a2677ea1db343a5395ab0d;hb=249edfdff1b2b750e894ee5a0b6cb64d2640ca02;hp=44bc43567a679343145283f202e01af866798dbd;hpb=f46d017c815b0d11f074ad6c16247c01f8af2ece;p=p5sagit%2Fp5-mst-13.2.git diff --git a/scope.h b/scope.h index 44bc435..cc349f0 100644 --- a/scope.h +++ b/scope.h @@ -22,7 +22,9 @@ #define SAVEt_REGCONTEXT 21 #define SAVEt_STACK_POS 22 #define SAVEt_I16 23 -#define SAVEt_OP 24 +#define SAVEt_AELEM 24 +#define SAVEt_HELEM 25 +#define SAVEt_OP 26 #define SSCHECK(need) if (savestack_ix + need > savestack_max) savestack_grow() #define SSPUSHINT(i) (savestack[savestack_ix++].any_i32 = (I32)(i)) @@ -43,13 +45,13 @@ #define ENTER \ STMT_START { \ push_scope(); \ - DEBUG_l(deb("ENTER scope %ld at %s:%d\n", \ - scopestack_ix, __FILE__, __LINE__)); \ + DEBUG_l(WITH_THR(deb("ENTER scope %ld at %s:%d\n", \ + scopestack_ix, __FILE__, __LINE__))); \ } STMT_END #define LEAVE \ STMT_START { \ - DEBUG_l(deb("LEAVE scope %ld at %s:%d\n", \ - scopestack_ix, __FILE__, __LINE__)); \ + DEBUG_l(WITH_THR(deb("LEAVE scope %ld at %s:%d\n", \ + scopestack_ix, __FILE__, __LINE__))); \ pop_scope(); \ } STMT_END #else @@ -75,8 +77,17 @@ #define SAVECLEARSV(sv) save_clearsv(SOFT_CAST(SV**)&(sv)) #define SAVEDELETE(h,k,l) \ save_delete(SOFT_CAST(HV*)(h), SOFT_CAST(char*)(k), (I32)(l)) +#ifdef PERL_OBJECT +#define CALLDESTRUCTOR this->*SSPOPDPTR #define SAVEDESTRUCTOR(f,p) \ - save_destructor(SOFT_CAST(void(*)_((void*)))(f),SOFT_CAST(void*)(p)) + save_destructor((DESTRUCTORFUNC)(FUNC_NAME_TO_PTR(f)), \ + SOFT_CAST(void*)(p)) +#else +#define CALLDESTRUCTOR *SSPOPDPTR +#define SAVEDESTRUCTOR(f,p) \ + save_destructor(SOFT_CAST(void(*)_((void*)))(FUNC_NAME_TO_PTR(f)), \ + SOFT_CAST(void*)(p)) +#endif #define SAVESTACK_POS() STMT_START { \ SSCHECK(2); \ SSPUSHINT(stack_sp - stack_base); \