]> git.vpit.fr Git - perl/modules/Variable-Magic.git/blobdiff - Magic.xs
This is 0.58
[perl/modules/Variable-Magic.git] / Magic.xs
index 9eda482e03a65e3652c7732e63b921a0386b47da..f7917abcad8c9fbde616cc2dd3bcb32f75ffeecd 100644 (file)
--- a/Magic.xs
+++ b/Magic.xs
@@ -488,9 +488,8 @@ static opclass vmg_opclass(const OP *o) {
 
 /* --- Error messages ------------------------------------------------------ */
 
-static const char vmg_invalid_wiz[]    = "Invalid wizard object";
-static const char vmg_wrongargnum[]    = "Wrong number of arguments";
-static const char vmg_argstorefailed[] = "Error while storing arguments";
+static const char vmg_invalid_wiz[] = "Invalid wizard object";
+static const char vmg_wrongargnum[] = "Wrong number of arguments";
 
 /* --- Context-safe global data -------------------------------------------- */
 
@@ -1246,11 +1245,18 @@ static int vmg_cb_call(pTHX_ SV *cb, unsigned int flags, SV *sv, ...) {
  svr = POPs;
  if (SvOK(svr))
   ret = (int) SvIV(svr);
+ if (SvROK(svr))
+  SvREFCNT_inc(svr);
+ else
+  svr = NULL;
  PUTBACK;
 
  FREETMPS;
  LEAVE;
 
+ if (svr && !SvTEMP(svr))
+  sv_2mortal(svr);
+
  if (chain) {
   vmg_dispell_guard_new(*chain);
   *chain = NULL;