X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FVariable-Magic.git;a=blobdiff_plain;f=Magic.xs;h=432eeed37ba1039d8c4f9f01da4598632e2da201;hp=69ad981a726d862427de4e88d96de34b3a689432;hb=d9d2fa9ce2900e97a1f4756bf51a0b6c9bd56c18;hpb=670e590caf3db942b5e7feddc1e86669f9f46294 diff --git a/Magic.xs b/Magic.xs index 69ad981..432eeed 100644 --- a/Magic.xs +++ b/Magic.xs @@ -857,6 +857,8 @@ static SV *vmg_data_new(pTHX_ SV *ctor, SV *sv, SV **args, I32 items) { ENTER; SAVETMPS; + PUSHSTACKi(PERLSI_MAGIC); + PUSHMARK(SP); EXTEND(SP, items + 1); PUSHs(sv_2mortal(newRV_inc(sv))); @@ -875,6 +877,8 @@ static SV *vmg_data_new(pTHX_ SV *ctor, SV *sv, SV **args, I32 items) { #endif PUTBACK; + POPSTACK; + FREETMPS; LEAVE; @@ -1260,6 +1264,8 @@ static int vmg_cb_call(pTHX_ SV *cb, unsigned int flags, SV *sv, ...) { ENTER; SAVETMPS; + PUSHSTACKi(PERLSI_MAGIC); + PUSHMARK(SP); EXTEND(SP, args + 1); PUSHs(sv_2mortal(newRV_inc(sv))); @@ -1294,6 +1300,8 @@ static int vmg_cb_call(pTHX_ SV *cb, unsigned int flags, SV *sv, ...) { svr = NULL; PUTBACK; + POPSTACK; + FREETMPS; LEAVE; @@ -1370,6 +1378,8 @@ static U32 vmg_svt_len(pTHX_ SV *sv, MAGIC *mg) { ENTER; SAVETMPS; + PUSHSTACKi(PERLSI_MAGIC); + PUSHMARK(SP); EXTEND(SP, 3); PUSHs(sv_2mortal(newRV_inc(sv))); @@ -1397,6 +1407,8 @@ static U32 vmg_svt_len(pTHX_ SV *sv, MAGIC *mg) { --ret; PUTBACK; + POPSTACK; + FREETMPS; LEAVE; @@ -1571,6 +1583,8 @@ static int vmg_svt_free(pTHX_ SV *sv, MAGIC *mg) { ENTER; SAVETMPS; + PUSHSTACKi(PERLSI_MAGIC); + PUSHMARK(SP); EXTEND(SP, 2); PUSHs(sv_2mortal(newRV_inc(sv))); @@ -1598,6 +1612,8 @@ static int vmg_svt_free(pTHX_ SV *sv, MAGIC *mg) { ret = (int) SvIV(svr); PUTBACK; + POPSTACK; + FREETMPS; LEAVE;