]> git.vpit.fr Git - perl/modules/Variable-Magic.git/commitdiff
Importing Variable-Magic-0.06.tar.gz v0.06
authorVincent Pit <vince@profvince.com>
Sun, 29 Jun 2008 16:24:24 +0000 (18:24 +0200)
committerVincent Pit <vince@profvince.com>
Sun, 29 Jun 2008 16:24:24 +0000 (18:24 +0200)
Changes
META.yml
Magic.xs
Makefile.PL
README
lib/Variable/Magic.pm

diff --git a/Changes b/Changes
index 171ac4f41afac3421dae578fe906f71c6917fd4c..9e840ed3927ad19d0f4f28477b7db38dcad082e9 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,10 @@
 Revision history for Variable-Magic
 
 Revision history for Variable-Magic
 
+0.06    2007-11-20 10:10 UTC
+        + Chg : 5.7.3 is now officially required.
+        + Fix : "data" test failures on 5.8.{0,2}.
+        + Fix : Drand01() vs rand().
+
 0.05    2007-11-19 09:10 UTC
         + Fix : 5.10.0_RC1 compatibility fix.
 
 0.05    2007-11-19 09:10 UTC
         + Fix : 5.10.0_RC1 compatibility fix.
 
index c70ad14c09262298e2d504c3f6be0c2ace8c4d25..46168a1b04866a8e5a51ea08ac5f8a5f8d80e5a9 100644 (file)
--- a/META.yml
+++ b/META.yml
@@ -1,6 +1,6 @@
 --- #YAML:1.0
 name:                Variable-Magic
 --- #YAML:1.0
 name:                Variable-Magic
-version:             0.05
+version:             0.06
 abstract:            Associate user-defined magic to variables from Perl.
 license:             perl
 generated_by:        ExtUtils::MakeMaker version 6.36_01
 abstract:            Associate user-defined magic to variables from Perl.
 license:             perl
 generated_by:        ExtUtils::MakeMaker version 6.36_01
index 89c8351d902fc361f94bd7db7642b3962860212e..a2387f1615d881101d3599317c385b965ae07a9c 100644 (file)
--- a/Magic.xs
+++ b/Magic.xs
@@ -1,7 +1,6 @@
 /* This file is part of the Variable::Magic Perl module.
  * See http://search.cpan.org/dist/Variable-Magic/ */
 
 /* This file is part of the Variable::Magic Perl module.
  * See http://search.cpan.org/dist/Variable-Magic/ */
 
-#include <stdlib.h> /* rand(), RAND_MAX */
 #include <stdio.h>  /* sprintf() */
 
 #define PERL_NO_GET_CONTEXT
 #include <stdio.h>  /* sprintf() */
 
 #define PERL_NO_GET_CONTEXT
 
 #define R(S) fprintf(stderr, "R(" #S ") = %d\n", SvREFCNT(S))
 
 
 #define R(S) fprintf(stderr, "R(" #S ") = %d\n", SvREFCNT(S))
 
+#define PERL_VERSION_LE(R, V, S) (PERL_REVISION < (R) || (PERL_REVISION == (R) && (PERL_VERSION < (V) || (PERL_VERSION == (V) && (PERL_SUBVERSION <= (S))))))
+
+#define PERL_API_VERSION_GE(R, V, S) (PERL_API_REVISION > (R) || (PERL_API_REVISION == (R) && (PERL_API_VERSION > (V) || (PERL_API_VERSION == (V) && (PERL_API_SUBVERSION >= (S))))))
+
 /* --- Compatibility ------------------------------------------------------- */
 
 #ifndef Newx
 /* --- Compatibility ------------------------------------------------------- */
 
 #ifndef Newx
 # define MY_CXT_INIT
 #endif
 
 # define MY_CXT_INIT
 #endif
 
+#ifndef PERL_MAGIC_ext
+# define PERL_MAGIC_ext '~'
+#endif
+
+/* --- Our sv_magicext ----------------------------------------------------- */
+
+#ifdef sv_magicext
+STATIC MAGIC *vmg_sv_magicext(pTHX_ SV *sv, SV *obj, MGVTBL *vtbl, SV *obj2, I32 flag) {
+ return sv_magicext(sv, obj, PERL_MAGIC_ext, vtbl, (const char *) obj2, flag);
+}
+#else /* Stub inspired from 5.7.3's sv_magicext */
+STATIC MAGIC *vmg_sv_magicext(pTHX_ SV *sv, SV *obj, MGVTBL *vtbl, SV *obj2, I32 flag) {
+ MAGIC* mg;
+
+ if (SvTYPE(sv) < SVt_PVMG) {
+  SvUPGRADE(sv, SVt_PVMG);
+ }
+ Newx(mg, 1, MAGIC);
+ mg->mg_moremagic = SvMAGIC(sv);
+ SvMAGIC_set(sv, mg);
+
+ if (!obj || obj == sv ||
+     (SvTYPE(obj) == SVt_PVGV &&
+        (GvSV(obj) == sv || GvHV(obj) == (HV *) sv || GvAV(obj) == (AV *) sv ||
+                            GvCV(obj) == (CV *) sv || GvIOp(obj) == (IO *) sv ||
+                            GvFORM(obj) == (CV *) sv))) {
+  mg->mg_obj = obj;
+ } else {
+  mg->mg_obj = SvREFCNT_inc(obj);
+  mg->mg_flags |= MGf_REFCOUNTED;
+ }
+
+ mg->mg_type = PERL_MAGIC_ext;
+ mg->mg_len  = flag;
+ if (obj2) {
+  if (flag == HEf_SVKEY) {
+   mg->mg_ptr = (char *) SvREFCNT_inc((SV *) obj2);
+  } else {
+   mg->mg_ptr = (char *) obj2;
+  }
+ }
+ mg->mg_virtual = vtbl;
+
+ mg_magical(sv);
+ if (SvGMAGICAL(sv)) {
+  SvFLAGS(sv) &= ~(SVf_IOK | SVf_NOK | SVf_POK);
+ }
+
+ return mg;
+}
+#endif
+#define vmg_sv_magicext(S, O, V, OO, F) vmg_sv_magicext(aTHX_ (S), (O), (V), (OO), (F))
+
 /* --- Context-safe global data -------------------------------------------- */
 
 #define MY_CXT_KEY __PACKAGE__ "::_guts" XS_VERSION
 /* --- Context-safe global data -------------------------------------------- */
 
 #define MY_CXT_KEY __PACKAGE__ "::_guts" XS_VERSION
@@ -57,8 +113,7 @@ STATIC U16 vmg_gensig(pTHX) {
  dMY_CXT;
 
  do {
  dMY_CXT;
 
  do {
-  double u = rand() / (RAND_MAX + 1.0);
-  sig = SIG_NBR * u + SIG_MIN;
+  sig = SIG_NBR * Drand01() + SIG_MIN;
  } while (hv_exists(MY_CXT.wizz, buf, sprintf(buf, "%u", sig)));
 
  return sig;
  } while (hv_exists(MY_CXT.wizz, buf, sprintf(buf, "%u", sig)));
 
  return sig;
@@ -101,7 +156,11 @@ STATIC SV *vmg_data_new(pTHX_ SV *ctor, SV *sv, AV *args) {
 
  if (count != 1) { croak("Callback needs to return 1 scalar\n"); }
  nsv = POPs;
 
  if (count != 1) { croak("Callback needs to return 1 scalar\n"); }
  nsv = POPs;
- SvREFCNT_inc(nsv); /* Or it will be destroyed in FREETMPS */
+#if PERL_VERSION_LE(5, 8, 2)
+ nsv = sv_newref(nsv); /* Workaround some bug in SvREFCNT_inc() */
+#else
+ SvREFCNT_inc(nsv);    /* Or it will be destroyed in FREETMPS */
+#endif
 
  PUTBACK;
 
 
  PUTBACK;
 
@@ -145,8 +204,7 @@ STATIC UV vmg_cast(pTHX_ SV *sv, SV *wiz, AV *args) {
  }
 
  data = (w->cb_data) ? vmg_data_new(w->cb_data, sv, args) : NULL;
  }
 
  data = (w->cb_data) ? vmg_data_new(w->cb_data, sv, args) : NULL;
- mg = sv_magicext(sv, data, PERL_MAGIC_ext, w->vtbl,
-                            (const char *) wiz, HEf_SVKEY);
+ mg = vmg_sv_magicext(sv, data, w->vtbl, wiz, HEf_SVKEY);
  mg->mg_private = w->sig;
 
  return 1;
  mg->mg_private = w->sig;
 
  return 1;
@@ -273,7 +331,7 @@ STATIC int vmg_wizard_free(pTHX_ SV *wiz, MAGIC *mg) {
  w = SV2MGWIZ(wiz);
 
  SvREFCNT_inc(wiz); /* Fake survival - it's gonna be deleted anyway */
  w = SV2MGWIZ(wiz);
 
  SvREFCNT_inc(wiz); /* Fake survival - it's gonna be deleted anyway */
-#if PERL_API_REVISION > 5 || (PERL_API_REVISION == 5 && (PERL_API_VERSION > 9 || (PERL_API_VERSION == 9 && PERL_API_SUBVERSION >= 5)))
+#if PERL_API_VERSION_GE(5, 9, 5)
  SvREFCNT_inc(wiz); /* One more push */
 #endif
  if (hv_delete(MY_CXT.wizz, buf, sprintf(buf, "%u", w->sig), 0)) {
  SvREFCNT_inc(wiz); /* One more push */
 #endif
  if (hv_delete(MY_CXT.wizz, buf, sprintf(buf, "%u", w->sig), 0)) {
@@ -400,7 +458,7 @@ CODE:
  w->cb_data  = (SvROK(cb_data))  ? newRV_inc(SvRV(cb_data))  : NULL;
 
  sv = MGWIZ2SV(w);
  w->cb_data  = (SvROK(cb_data))  ? newRV_inc(SvRV(cb_data))  : NULL;
 
  sv = MGWIZ2SV(w);
- mg = sv_magicext(sv, NULL, PERL_MAGIC_ext, &vmg_wizard_vtbl, NULL, -1);
+ mg = vmg_sv_magicext(sv, NULL, &vmg_wizard_vtbl, NULL, -1);
  mg->mg_private = SIG_WIZ;
 
  hv_store(MY_CXT.wizz, buf, sprintf(buf, "%u", sig), sv, 0);
  mg->mg_private = SIG_WIZ;
 
  hv_store(MY_CXT.wizz, buf, sprintf(buf, "%u", sig), sv, 0);
index f2871215e36016a0f3030c1ffdbb2063ea354f8d..f76dda4b2e08f085026b7a324d88e9d0a26d2f70 100644 (file)
@@ -1,3 +1,5 @@
+use 5.007003;
+
 use strict;
 use warnings;
 use ExtUtils::MakeMaker;
 use strict;
 use warnings;
 use ExtUtils::MakeMaker;
diff --git a/README b/README
index cec74c1770dafc895c144ade5dd3475c5b7306e8..4b92a15c4a549011fbbd39e1ce306ca01aa3197f 100644 (file)
--- a/README
+++ b/README
@@ -2,7 +2,7 @@ NAME
     Variable::Magic - Associate user-defined magic to variables from Perl.
 
 VERSION
     Variable::Magic - Associate user-defined magic to variables from Perl.
 
 VERSION
-    Version 0.05
+    Version 0.06
 
 SYNOPSIS
         use Variable::Magic qw/wizard cast dispell/;
 
 SYNOPSIS
         use Variable::Magic qw/wizard cast dispell/;
@@ -173,6 +173,8 @@ EXPORT
     on request. They are all exported by the tags ':consts' and ':all'.
 
 DEPENDENCIES
     on request. They are all exported by the tags ':consts' and ':all'.
 
 DEPENDENCIES
+    perl 5.7.3.
+
     Carp (standard since perl 5), XSLoader (standard since perl 5.006).
 
     Glob tests need Symbol (standard since perl 5.002).
     Carp (standard since perl 5), XSLoader (standard since perl 5.006).
 
     Glob tests need Symbol (standard since perl 5.002).
index d33c37b4d47e2b1a8666bfe5bdb7a7378ca3a50f..ff6ec4ab8717dc892ea811cbcde288d40ea8b240 100644 (file)
@@ -1,5 +1,7 @@
 package Variable::Magic;
 
 package Variable::Magic;
 
+use 5.007003;
+
 use strict;
 use warnings;
 
 use strict;
 use warnings;
 
@@ -11,11 +13,11 @@ Variable::Magic - Associate user-defined magic to variables from Perl.
 
 =head1 VERSION
 
 
 =head1 VERSION
 
-Version 0.05
+Version 0.06
 
 =cut
 
 
 =cut
 
-our $VERSION = '0.05';
+our $VERSION = '0.06';
 
 =head1 SYNOPSIS
 
 
 =head1 SYNOPSIS
 
@@ -201,6 +203,8 @@ $EXPORT_TAGS{'all'} = \@EXPORT_OK;
 
 =head1 DEPENDENCIES
 
 
 =head1 DEPENDENCIES
 
+L<perl> 5.7.3.
+
 L<Carp> (standard since perl 5), L<XSLoader> (standard since perl 5.006).
 
 Glob tests need L<Symbol> (standard since perl 5.002).
 L<Carp> (standard since perl 5), L<XSLoader> (standard since perl 5.006).
 
 Glob tests need L<Symbol> (standard since perl 5.002).