]> git.vpit.fr Git - perl/modules/Variable-Magic.git/commitdiff
Simplify vmg_call_sv() so that ERRSV is no longer used as a lvalue
authorVincent Pit <vince@profvince.com>
Tue, 10 Mar 2015 19:33:52 +0000 (16:33 -0300)
committerVincent Pit <vince@profvince.com>
Tue, 10 Mar 2015 19:33:52 +0000 (16:33 -0300)
It's less hackish and more resilient to core changes.

Magic.xs

index 9a07ac57e46d6e0785c665d7ebe5e4bdbd83c047..61bc9e092aa5191959e39662a7c83e332528c444 100644 (file)
--- a/Magic.xs
+++ b/Magic.xs
@@ -285,8 +285,8 @@ STATIC I32 vmg_call_sv(pTHX_ SV *sv, I32 flags, int (*cleanup)(pTHX_ void *), vo
  SV *old_err = NULL;
 
  if (SvTRUE(ERRSV)) {
-  old_err = ERRSV;
-  ERRSV   = newSV(0);
+  old_err = newSVsv(ERRSV);
+  sv_setsv(ERRSV, &PL_sv_undef);
  }
 
  cxix     = (cxstack_ix < cxstack_max) ? (cxstack_ix + 1) : Perl_cxinc(aTHX);
@@ -299,11 +299,8 @@ STATIC I32 vmg_call_sv(pTHX_ SV *sv, I32 flags, int (*cleanup)(pTHX_ void *), vo
  cxstack[cxix] = saved_cx;
 
  if (SvTRUE(ERRSV)) {
-  if (old_err) {
-   sv_setsv(old_err, ERRSV);
-   SvREFCNT_dec(ERRSV);
-   ERRSV = old_err;
-  }
+  SvREFCNT_dec(old_err);
+
   if (IN_PERL_COMPILETIME) {
    if (!PL_in_eval) {
     if (PL_errors)
@@ -326,8 +323,8 @@ STATIC I32 vmg_call_sv(pTHX_ SV *sv, I32 flags, int (*cleanup)(pTHX_ void *), vo
   }
  } else {
   if (old_err) {
-   SvREFCNT_dec(ERRSV);
-   ERRSV = old_err;
+   sv_setsv(ERRSV, old_err);
+   SvREFCNT_dec(old_err);
   }
  }