X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Upper.xs;h=24e3f0a2e09d5dd9029ab23e6d6022121a345b2b;hb=fe6605581cbe68b5935e72c98a8a685379d1f320;hp=60b42778de14e6dfd4e87b7f88fe0710530c0c72;hpb=73bda6730e64ae835f07954ad37ca1b19d8ec002;p=perl%2Fmodules%2FScope-Upper.git diff --git a/Upper.xs b/Upper.xs index 60b4277..24e3f0a 100644 --- a/Upper.xs +++ b/Upper.xs @@ -69,6 +69,7 @@ #endif #define SU_HAS_PERL(R, V, S) (PERL_REVISION > (R) || (PERL_REVISION == (R) && (PERL_VERSION > (V) || (PERL_VERSION == (V) && (PERL_SUBVERSION >= (S)))))) +#define SU_HAS_PERL_EXACT(R, V, S) ((PERL_REVISION == (R)) && (PERL_VERSION == (V)) && (PERL_SUBVERSION == (S))) /* --- Threads and multiplicity -------------------------------------------- */ @@ -163,7 +164,7 @@ START_MY_CXT #if !SU_HAS_PERL(5, 8, 9) # define SU_SAVE_GP_SIZE 6 -#elif !SU_HAS_PERL(5, 13, 0) +#elif !SU_HAS_PERL(5, 13, 0) || (SU_RELEASE && SU_HAS_PERL_EXACT(5, 13, 0)) # define SU_SAVE_GP_SIZE 3 #else # define SU_SAVE_GP_SIZE 4 @@ -624,8 +625,8 @@ STATIC void su_pop(pTHX_ void *ud) { /* --- Initialize the stack and the action userdata ------------------------ */ -STATIC I32 su_init(pTHX_ I32 cxix, void *ud, I32 size) { -#define su_init(L, U, S) su_init(aTHX_ (L), (U), (S)) +STATIC I32 su_init(pTHX_ void *ud, I32 cxix, I32 size) { +#define su_init(U, C, S) su_init(aTHX_ (U), (C), (S)) I32 i, depth = 1, pad, offset, *origin; SU_D(PerlIO_printf(Perl_debug_log, "%p: ### init for cx %d\n", ud, cxix)); @@ -1051,7 +1052,7 @@ CODE: SU_UD_ORIGIN(ud) = NULL; SU_UD_HANDLER(ud) = su_reap; ud->cb = newSVsv(hook); - su_init(cxix, ud, SU_SAVE_DESTRUCTOR_SIZE); + su_init(ud, cxix, SU_SAVE_DESTRUCTOR_SIZE); void localize(SV *sv, SV *val, ...) @@ -1066,7 +1067,7 @@ CODE: SU_UD_ORIGIN(ud) = NULL; SU_UD_HANDLER(ud) = su_localize; size = su_ud_localize_init(ud, sv, val, NULL); - su_init(cxix, ud, size); + su_init(ud, cxix, size); void localize_elem(SV *sv, SV *elem, SV *val, ...) @@ -1087,7 +1088,7 @@ CODE: 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); + su_init(ud, cxix, size); void localize_delete(SV *sv, SV *elem, ...) @@ -1102,4 +1103,4 @@ CODE: SU_UD_ORIGIN(ud) = NULL; SU_UD_HANDLER(ud) = su_localize; size = su_ud_localize_init(ud, sv, NULL, elem); - su_init(cxix, ud, size); + su_init(ud, cxix, size);