# define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling)
#endif
+#ifdef DEBUGGING
+# define VMG_ASSERT(C) assert(C)
+#else
+# define VMG_ASSERT(C)
+#endif
+
/* uvar magic and Hash::Util::FieldHash were commited with 28419, but we only
* enable them on 5.10 */
#if VMG_HAS_PERL(5, 10, 0)
OPc_COP,
#if VMG_HAS_PERL(5, 21, 5)
OPc_METHOP,
+#endif
+#if VMG_HAS_PERL(5, 21, 7)
+ OPc_UNOP_AUX,
#endif
OPc_MAX
} opclass;
"B::COP",
#if VMG_HAS_PERL(5, 21, 5)
"B::METHOP",
+#endif
+#if VMG_HAS_PERL(5, 21, 7)
+ "B::UNOP_AUX",
#endif
NULL
};
#if VMG_HAS_PERL(5, 21, 5)
case OA_METHOP:
return OPc_METHOP;
+#endif
+#if VMG_HAS_PERL(5, 21, 7)
+ case OA_UNOP_AUX:
+ return OPc_UNOP_AUX;
#endif
}
/* --- 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 -------------------------------------------- */
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;
vmg_sv_magicext((SV *) PL_strtab, NULL, &vmg_global_teardown_vtbl, NULL, 0);
}
} else {
- assert(vmg_loaded > 1);
+ VMG_ASSERT(vmg_loaded > 1);
--vmg_loaded;
}
MUTEX_INIT(&vmg_op_name_init_mutex);
vmg_loaded = 1;
} else {
- assert(vmg_loaded > 0);
+ VMG_ASSERT(vmg_loaded > 0);
++vmg_loaded;
}
MY_CXT.depth = old_depth;
MY_CXT.freed_tokens = NULL;
VMG_LOADED_LOCK;
- assert(vmg_loaded > 0);
+ VMG_ASSERT(vmg_loaded > 0);
++vmg_loaded;
VMG_LOADED_UNLOCK;
}