]> git.vpit.fr Git - perl/modules/Variable-Magic.git/blobdiff - Magic.xs
Pass the 'data' callback after the 'op_info' flag when calling _wizard()
[perl/modules/Variable-Magic.git] / Magic.xs
index 6e0848128ce440659de00d1c4dcc55f97029c840..062cdb30fe595b841a61d0bdb59d1a2a3a623908 100644 (file)
--- a/Magic.xs
+++ b/Magic.xs
@@ -124,7 +124,7 @@ STATIC SV *vmg_clone(pTHX_ SV *sv, tTHX owner) {
 #endif
 
 #ifndef SvREFCNT_inc_simple_void
-# define SvREFCNT_inc_simple_void(sv) SvREFCNT_inc(sv)
+# define SvREFCNT_inc_simple_void(sv) ((void) SvREFCNT_inc(sv))
 #endif
 
 #ifndef mPUSHu
@@ -359,9 +359,11 @@ STATIC opclass vmg_opclass(const OP *o) {
   return ((o->op_private & OPpASSIGN_BACKWARDS) ? OPc_UNOP : OPc_BINOP);
 
  if (o->op_type == OP_AELEMFAST) {
+#if PERL_VERSION <= 14
   if (o->op_flags & OPf_SPECIAL)
    return OPc_BASEOP;
   else
+#endif
 #ifdef USE_ITHREADS
    return OPc_PADOP;
 #else
@@ -757,7 +759,7 @@ STATIC SV *vmg_data_get(pTHX_ SV *sv, const SV *wiz) {
 #define vmg_data_get(S, W) vmg_data_get(aTHX_ (S), (W))
  const MAGIC *mg = vmg_find(sv, wiz);
  return mg ? mg->mg_obj : NULL;
-} 
+}
 
 /* ... Magic cast/dispell .................................................. */
 
@@ -1467,14 +1469,14 @@ CODE:
  Newx(t, 1, MGVTBL);
  Newx(w, 1, MGWIZ);
 
- VMG_SET_CB(ST(i++), data);
-
  cb = ST(i++);
  opinfo = SvOK(cb) ? SvUV(cb) : 0;
  w->opinfo = (U8) ((opinfo < 255) ? opinfo : 255);
  if (w->opinfo)
   vmg_op_info_init(w->opinfo);
 
+ VMG_SET_CB(ST(i++), data);
+
  VMG_SET_SVT_CB(ST(i++), get);
  VMG_SET_SVT_CB(ST(i++), set);
  VMG_SET_SVT_CB(ST(i++), len);