]> git.vpit.fr Git - perl/modules/Variable-Magic.git/commitdiff
5.13.2 calls get magic on globs
authorVincent Pit <vince@profvince.com>
Fri, 25 Jun 2010 20:30:18 +0000 (22:30 +0200)
committerVincent Pit <vince@profvince.com>
Fri, 25 Jun 2010 20:30:18 +0000 (22:30 +0200)
Add the new compatibility macro VMG_COMPAT_GLOB_GET to reflect this change.

Magic.xs
lib/Variable/Magic.pm
t/01-import.t
t/34-glob.t

index fab2340743ca8f1f1d06d8ada018c90bf59ada41..0d6359e83d5529815bd7b136205acede6f29c9bd 100644 (file)
--- a/Magic.xs
+++ b/Magic.xs
@@ -196,6 +196,12 @@ STATIC SV *vmg_clone(pTHX_ SV *sv, tTHX owner) {
 # define VMG_COMPAT_SCALAR_LENGTH_NOLEN 0
 #endif
 
+#if VMG_HAS_PERL(5, 13, 2)
+# define VMG_COMPAT_GLOB_GET 1
+#else
+# define VMG_COMPAT_GLOB_GET 0
+#endif
+
 /* ... Bug-free mg_magical ................................................. */
 
 /* See the discussion at http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-01/msg00036.html. This version is specialized to our needs. */
@@ -1357,6 +1363,7 @@ BOOT:
                     newSVuv(VMG_COMPAT_ARRAY_UNDEF_CLEAR));
  newCONSTSUB(stash, "VMG_COMPAT_SCALAR_LENGTH_NOLEN",
                     newSVuv(VMG_COMPAT_SCALAR_LENGTH_NOLEN));
+ newCONSTSUB(stash, "VMG_COMPAT_GLOB_GET", newSVuv(VMG_COMPAT_GLOB_GET));
  newCONSTSUB(stash, "VMG_PERL_PATCHLEVEL", newSVuv(VMG_PERL_PATCHLEVEL));
  newCONSTSUB(stash, "VMG_THREADSAFE",      newSVuv(VMG_THREADSAFE));
  newCONSTSUB(stash, "VMG_FORKSAFE",        newSVuv(VMG_FORKSAFE));
index d792a8abd139ae74333117f5de875fd5cafb9598..05fdde14f6d39109792e5b267b475c7dbd24d934 100644 (file)
@@ -392,6 +392,10 @@ True for perls that call 'clear' magic when undefining magical arrays.
 
 True for perls that don't call 'len' magic when taking the C<length> of a magical scalar.
 
+=head2 C<VMG_COMPAT_GLOB_GET>
+
+True for perls that call 'get' magic for operations on globs.
+
 =head2 C<VMG_PERL_PATCHLEVEL>
 
 The perl patchlevel this module was built with, or C<0> for non-debugging perls.
@@ -569,6 +573,7 @@ our %EXPORT_TAGS    = (
                qw/VMG_COMPAT_ARRAY_UNSHIFT_NOLEN_VOID/,
                qw/VMG_COMPAT_ARRAY_UNDEF_CLEAR/,
                qw/VMG_COMPAT_SCALAR_LENGTH_NOLEN/,
+               qw/VMG_COMPAT_GLOB_GET/,
                qw/VMG_PERL_PATCHLEVEL/,
                qw/VMG_THREADSAFE VMG_FORKSAFE/,
                qw/VMG_OP_INFO_NAME VMG_OP_INFO_OBJECT/
index 19d165f0e3bae1db6adfbd9d41d7fcc5ac0df77d..8fdd778f434ece8c898e7adc7eefe068dbdd96c6 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 2 * 18;
+use Test::More tests => 2 * 19;
 
 require Variable::Magic;
 
@@ -18,6 +18,7 @@ my %syms = (
   VMG_COMPAT_ARRAY_UNSHIFT_NOLEN_VOID
   VMG_COMPAT_ARRAY_UNDEF_CLEAR
   VMG_COMPAT_SCALAR_LENGTH_NOLEN
+  VMG_COMPAT_GLOB_GET
   VMG_PERL_PATCHLEVEL
   VMG_THREADSAFE VMG_FORKSAFE
   VMG_OP_INFO_NAME VMG_OP_INFO_OBJECT
index 664152da32bc9233af63939c10c6bd99e2df27fd..de5c64cdf16ed408e3be995775656dfbf860f9e8 100644 (file)
@@ -13,7 +13,9 @@ if ($@) {
  diag "Using Symbol $Symbol::VERSION" if defined $Symbol::VERSION;
 }
 
-use Variable::Magic qw/cast dispell/;
+use Variable::Magic qw/cast dispell VMG_COMPAT_GLOB_GET/;
+
+my %get = VMG_COMPAT_GLOB_GET ? (get => 1) : ();
 
 use lib 't/lib';
 use Variable::Magic::TestWatcher;
@@ -24,17 +26,17 @@ my $wiz = init_watcher
 
 local *a = gensym();
 
-watch { cast *a, $wiz } { }, 'cast';
+watch { cast *a, $wiz } +{ }, 'cast';
 
-watch { local *b = *a } { }, 'assign to';
+watch { local *b = *a } +{ %get }, 'assign to';
 
-watch { *a = gensym() } { set => 1 }, 'assign';
+watch { *a = gensym() } +{ %get, set => 1 }, 'assign';
 
 watch {
  local *b = gensym();
- watch { cast *b, $wiz } { }, 'cast 2';
-} { }, 'scope end';
+ watch { cast *b, $wiz } +{ }, 'cast 2';
+} +{ }, 'scope end';
 
-watch { undef *a } { }, 'undef';
+watch { undef *a } +{ %get }, 'undef';
 
-watch { dispell *a, $wiz } { }, 'dispell';
+watch { dispell *a, $wiz } +{ %get }, 'dispell';