From: Vincent Pit Date: Thu, 27 Oct 2011 16:52:15 +0000 (+0200) Subject: This is 0.47 X-Git-Tag: v0.47^0 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FVariable-Magic.git;a=commitdiff_plain;h=67183cedd68decfdd05ef3d64b27bb7e07476626 This is 0.47 --- diff --git a/Changes b/Changes index b97a2e2..1a1ccb7 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,20 @@ Revision history for Variable-Magic +0.47 2011-10-27 16:55 UTC + + Add : The new constant VMG_COMPAT_HASH_DELETE_NOUVAR_VOID evaluates + to true when "delete $hash{key}" does not call 'delete' uvar + magic in void context. + + Chg : The MAGIC tokens created by this module no longer use the + mg_private member for storing a "magical" signature. + + Fix : Triggering magic in a thread on a variable cloned from the main + interpreter, and when the wizard already went out of scope, + will not segfault anymore. + + Opt : The pointer table is no longer needed to ensure thread safety. + The size of the object code is about 8% smaller for threaded + perls. + + Tst : Threads tests will not fail anymore if resources constraints + prevent the system from creating all the required threads. + 0.46 2011-01-23 16:45 UTC + Fix : [RT #64866] : Assertion failure with perl 5.13.9. The real problem was that dispell() wasn't properly resetting diff --git a/META.json b/META.json index 83a84b9..dcdf96f 100644 --- a/META.json +++ b/META.json @@ -4,7 +4,7 @@ "Vincent Pit " ], "dynamic_config" : 1, - "generated_by" : "ExtUtils::MakeMaker version 6.59, CPAN::Meta::Converter version 2.112150", + "generated_by" : "ExtUtils::MakeMaker version 6.59, CPAN::Meta::Converter version 2.112621", "license" : [ "perl_5" ], @@ -60,5 +60,5 @@ "url" : "http://git.profvince.com/?p=perl%2Fmodules%2FVariable-Magic.git" } }, - "version" : "0.46" + "version" : "0.47" } diff --git a/META.yml b/META.yml index 3ea6960..7c5a46c 100644 --- a/META.yml +++ b/META.yml @@ -1,39 +1,38 @@ ---- #YAML:1.0 -name: Variable-Magic -version: 0.46 -abstract: Associate user-defined magic to variables from Perl. +--- +abstract: 'Associate user-defined magic to variables from Perl.' author: - - Vincent Pit -license: perl -distribution_type: module -configure_requires: - Config: 0 - ExtUtils::MakeMaker: 0 + - 'Vincent Pit ' build_requires: - base: 0 - Carp: 0 - Config: 0 - Exporter: 0 - ExtUtils::MakeMaker: 0 - Test::More: 0 - XSLoader: 0 + Carp: 0 + Config: 0 + Exporter: 0 + ExtUtils::MakeMaker: 0 + Test::More: 0 + XSLoader: 0 + base: 0 +configure_requires: + Config: 0 + ExtUtils::MakeMaker: 0 +dynamic_config: 1 +generated_by: 'ExtUtils::MakeMaker version 6.59, CPAN::Meta::Converter version 2.112621' +license: perl +meta-spec: + url: http://module-build.sourceforge.net/META-spec-v1.4.html + version: 1.4 +name: Variable-Magic +no_index: + directory: + - t + - inc requires: - base: 0 - Carp: 0 - Exporter: 0 - perl: 5.008 - XSLoader: 0 + Carp: 0 + Exporter: 0 + XSLoader: 0 + base: 0 + perl: 5.008 resources: - bugtracker: http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Variable-Magic - homepage: http://search.cpan.org/dist/Variable-Magic/ - license: http://dev.perl.org/licenses/ - repository: http://git.profvince.com/?p=perl%2Fmodules%2FVariable-Magic.git -no_index: - directory: - - t - - inc -generated_by: ExtUtils::MakeMaker version 6.56 -meta-spec: - url: http://module-build.sourceforge.net/META-spec-v1.4.html - version: 1.4 -dynamic_config: 1 + bugtracker: http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Variable-Magic + homepage: http://search.cpan.org/dist/Variable-Magic/ + license: http://dev.perl.org/licenses/ + repository: http://git.profvince.com/?p=perl%2Fmodules%2FVariable-Magic.git +version: 0.47 diff --git a/README b/README index ac81e42..9ab46cb 100644 --- a/README +++ b/README @@ -2,14 +2,16 @@ NAME Variable::Magic - Associate user-defined magic to variables from Perl. VERSION - Version 0.46 + Version 0.47 SYNOPSIS use Variable::Magic qw; { # A variable tracer - my $wiz = wizard set => sub { print "now set to ${$_[0]}!\n" }, - free => sub { print "destroyed!\n" }; + my $wiz = wizard( + set => sub { print "now set to ${$_[0]}!\n" }, + free => sub { print "destroyed!\n" }, + ); my $a = 1; cast $a, $wiz; @@ -17,15 +19,17 @@ SYNOPSIS } # "destroyed!" { # A hash with a default value - my $wiz = wizard data => sub { $_[1] }, - fetch => sub { $_[2] = $_[1] unless exists $_[0]->{$_[2]}; () }, - store => sub { print "key $_[2] stored in $_[-1]\n" }, - copy_key => 1, - op_info => VMG_OP_INFO_NAME; + my $wiz = wizard( + data => sub { $_[1] }, + fetch => sub { $_[2] = $_[1] unless exists $_[0]->{$_[2]}; () }, + store => sub { print "key $_[2] stored in $_[-1]\n" }, + copy_key => 1, + op_info => VMG_OP_INFO_NAME, + ); my %h = (_default => 0, apple => 2); cast %h, $wiz, '_default'; - print $h{banana}, "\n"; # "0", because the 'banana' key doesn't exist in %h + print $h{banana}, "\n"; # "0" (there is no 'banana' key in %h) $h{pear} = 1; # "key pear stored in helem" } @@ -150,29 +154,26 @@ DESCRIPTION You can refer to the tests to have more insight of where the different magics are invoked. - To prevent any clash between different magics defined with this module, - an unique numerical signature is attached to each kind of magic (i.e. - each set of callbacks for magic operations). At the C level, magic - tokens owned by magic created by this module have their "mg->mg_private" - field set to 0x3891 or 0x3892, so please don't use these magic (sic) - numbers in other extensions. - FUNCTIONS "wizard" - wizard data => sub { ... }, - get => sub { my ($ref, $data [, $op]) = @_; ... }, - set => sub { my ($ref, $data [, $op]) = @_; ... }, - len => sub { my ($ref, $data, $len [, $op]) = @_; ... ; return $newlen; }, - clear => sub { my ($ref, $data [, $op]) = @_; ... }, - free => sub { my ($ref, $data [, $op]) = @_, ... }, - copy => sub { my ($ref, $data, $key, $elt [, $op]) = @_; ... }, - local => sub { my ($ref, $data [, $op]) = @_; ... }, - fetch => sub { my ($ref, $data, $key [, $op]) = @_; ... }, - store => sub { my ($ref, $data, $key [, $op]) = @_; ... }, - exists => sub { my ($ref, $data, $key [, $op]) = @_; ... }, - delete => sub { my ($ref, $data, $key [, $op]) = @_; ... }, - copy_key => $bool, - op_info => [ 0 | VMG_OP_INFO_NAME | VMG_OP_INFO_OBJECT ] + wizard( + data => sub { ... }, + get => sub { my ($ref, $data [, $op]) = @_; ... }, + set => sub { my ($ref, $data [, $op]) = @_; ... }, + len => sub { + my ($ref, $data, $len [, $op]) = @_; ... ; return $newlen + }, + clear => sub { my ($ref, $data [, $op]) = @_; ... }, + free => sub { my ($ref, $data [, $op]) = @_, ... }, + copy => sub { my ($ref, $data, $key, $elt [, $op]) = @_; ... }, + local => sub { my ($ref, $data [, $op]) = @_; ... }, + fetch => sub { my ($ref, $data, $key [, $op]) = @_; ... }, + store => sub { my ($ref, $data, $key [, $op]) = @_; ... }, + exists => sub { my ($ref, $data, $key [, $op]) = @_; ... }, + delete => sub { my ($ref, $data, $key [, $op]) = @_; ... }, + copy_key => $bool, + op_info => [ 0 | VMG_OP_INFO_NAME | VMG_OP_INFO_OBJECT ], + ) This function creates a 'wizard', an opaque type that holds the magic information. It takes a list of keys / values as argument, whose keys @@ -243,9 +244,11 @@ FUNCTIONS Here's a simple usage example : # A simple scalar tracer - my $wiz = wizard get => sub { print STDERR "got ${$_[0]}\n" }, - set => sub { print STDERR "set to ${$_[0]}\n" }, - free => sub { print STDERR "${$_[0]} was deleted\n" } + my $wiz = wizard( + get => sub { print STDERR "got ${$_[0]}\n" }, + set => sub { print STDERR "set to ${$_[0]}\n" }, + free => sub { print STDERR "${$_[0]} was deleted\n" }, + ); "cast" cast [$@%&*]var, $wiz, ... @@ -310,6 +313,10 @@ CONSTANTS callbacks on hashes. Initial VMG_UVAR capability was introduced in perl 5.9.5, with a fully functional implementation shipped with perl 5.10.0. + "VMG_COMPAT_SCALAR_LENGTH_NOLEN" + True for perls that don't call 'len' magic when taking the "length" of a + magical scalar. + "VMG_COMPAT_ARRAY_PUSH_NOLEN" True for perls that don't call 'len' magic when you push an element in a magical array. Starting from perl 5.11.0, this only refers to pushes in @@ -326,9 +333,9 @@ CONSTANTS "VMG_COMPAT_ARRAY_UNDEF_CLEAR" True for perls that call 'clear' magic when undefining magical arrays. - "VMG_COMPAT_SCALAR_LENGTH_NOLEN" - True for perls that don't call 'len' magic when taking the "length" of a - magical scalar. + "VMG_COMPAT_HASH_DELETE_NOUVAR_VOID" + True for perls that don't call 'delete' uvar magic when you delete an + element from a hash in void context. "VMG_COMPAT_GLOB_GET" True for perls that call 'get' magic for operations on globs. @@ -373,7 +380,7 @@ COOKBOOK unless (defined $data) { $data = \(my $slot); &cast($var, $wiz, $slot) - or die "Couldn't cast UserData magic onto the variable"; + or die "Couldn't cast UserData magic onto the variable"; } $$data; } diff --git a/lib/Variable/Magic.pm b/lib/Variable/Magic.pm index ebfbc7c..05821e9 100644 --- a/lib/Variable/Magic.pm +++ b/lib/Variable/Magic.pm @@ -11,13 +11,13 @@ Variable::Magic - Associate user-defined magic to variables from Perl. =head1 VERSION -Version 0.46 +Version 0.47 =cut our $VERSION; BEGIN { - $VERSION = '0.46'; + $VERSION = '0.47'; } =head1 SYNOPSIS