]> git.vpit.fr Git - perl/modules/Variable-Magic.git/commitdiff
Set the mg_flags inside vmg_sv_magicext() according to the vtbl entries
authorVincent Pit <vince@profvince.com>
Wed, 11 Mar 2015 01:04:33 +0000 (22:04 -0300)
committerVincent Pit <vince@profvince.com>
Wed, 11 Mar 2015 01:04:33 +0000 (22:04 -0300)
Magic.xs

index c6d7454253ae85cd695ac5771c90f833e62155c0..1349a9cf183144402a08efbe1aef84d548a43efb 100644 (file)
--- a/Magic.xs
+++ b/Magic.xs
@@ -288,6 +288,17 @@ STATIC MAGIC *vmg_sv_magicext(pTHX_ SV *sv, SV *obj, const MGVTBL *vtbl, const v
 
  mg->mg_private = 0;
 
+ if (vtbl->svt_copy)
+  mg->mg_flags |= MGf_COPY;
+#if MGf_DUP
+ if (vtbl->svt_dup)
+  mg->mg_flags |= MGf_DUP;
+#endif /* MGf_DUP */
+#if MGf_LOCAL
+ if (vtbl->svt_local)
+  mg->mg_flags |= MGf_LOCAL;
+#endif /* MGf_LOCAL */
+
  if (mg->mg_flags & MGf_REFCOUNTED)
   SvREFCNT_dec(obj);
 
@@ -722,13 +733,8 @@ STATIC SV *vmg_wizard_sv_new(pTHX_ const vmg_wizard *w) {
  wiz = newSViv(PTR2IV(w));
 #endif
 
- if (w) {
-  MAGIC *mg;
-  mg = vmg_sv_magicext(wiz, NULL, &vmg_wizard_sv_vtbl, w, 0);
-#if VMG_THREADSAFE
-  mg->mg_flags |= MGf_DUP;
-#endif
- }
+ vmg_sv_magicext(wiz, NULL, &vmg_wizard_sv_vtbl, w, 0);
+
  SvREADONLY_on(wiz);
 
  return wiz;
@@ -919,17 +925,6 @@ STATIC UV vmg_cast(pTHX_ SV *sv, const vmg_wizard *w, const SV *wiz, SV **args,
  t  = vmg_vtable_vtbl(w->vtable);
  mg = vmg_sv_magicext(sv, data, t, wiz, HEf_SVKEY);
 
- if (t->svt_copy)
-  mg->mg_flags |= MGf_COPY;
-#if 0
- if (t->svt_dup)
-  mg->mg_flags |= MGf_DUP;
-#endif
-#if MGf_LOCAL
- if (t->svt_local)
-  mg->mg_flags |= MGf_LOCAL;
-#endif /* MGf_LOCAL */
-
  if (SvTYPE(sv) < SVt_PVHV)
   goto done;