#include "perl.h"
void *
-Perl_default_protect(pTHX_ int *excpt, protect_body_t body, ...)
+Perl_default_protect(pTHX_ volatile JMPENV *pcur_env, int *excpt,
+ protect_body_t body, ...)
{
void *ret;
va_list args;
va_start(args, body);
- ret = vdefault_protect(excpt, body, &args);
+ ret = vdefault_protect(pcur_env, excpt, body, &args);
va_end(args);
return ret;
}
void *
-Perl_vdefault_protect(pTHX_ int *excpt, protect_body_t body, va_list *args)
+Perl_vdefault_protect(pTHX_ volatile JMPENV *pcur_env, int *excpt,
+ protect_body_t body, va_list *args)
{
dTHR;
- dJMPENV;
int ex;
void *ret;
DEBUG_l(Perl_deb(aTHX_ "Setting up local jumplevel %p, was %p\n",
- &cur_env, PL_top_env));
+ pcur_env, PL_top_env));
JMPENV_PUSH(ex);
if (ex)
ret = NULL;
}
void
-Perl_save_destructor(pTHX_ DESTRUCTORFUNC_t f, void* p)
+Perl_save_destructor(pTHX_ DESTRUCTORFUNC_NOCONTEXT_t f, void* p)
{
dTHR;
SSCHECK(3);
}
void
+Perl_save_destructor_x(pTHX_ DESTRUCTORFUNC_t f, void* p)
+{
+ dTHR;
+ SSCHECK(3);
+ SSPUSHDXPTR(f);
+ SSPUSHPTR(p);
+ SSPUSHINT(SAVEt_DESTRUCTOR_X);
+}
+
+void
Perl_save_aelem(pTHX_ AV *av, I32 idx, SV **sptr)
{
dTHR;
break;
case SAVEt_DESTRUCTOR:
ptr = SSPOPPTR;
- CALLDESTRUCTOR(aTHXo_ ptr);
+ (*SSPOPDPTR)(ptr);
+ break;
+ case SAVEt_DESTRUCTOR_X:
+ ptr = SSPOPPTR;
+ (*SSPOPDXPTR)(aTHXo_ ptr);
break;
case SAVEt_REGCONTEXT:
case SAVEt_ALLOC: