Revision history for Variable-Magic 0.32 2009-03-01 13:45 UTC + Chg : dispell() and getdata() now croak when an invalid signature is passed. + Doc : More examples and a brand new synopsis. + Fix : The signature is no longer stored in the mg_private member of the MAGIC struct. This fixes possible clashes with magics from other extensions. + Fix : op info objects weren't blessed into the right class. + Fix : Races when initializing the op names cache under threads. 0.31 2009-02-19 23:50 UTC + Doc : A somewhat better introduction. The FUNCTION section was moved before CONSTANTS and HISTORY since it's more important. And 'assignation' is really 'assignment', says Ricardo. :) + Fix : The op_info features are now thread safe. + Fix : Segfaults that occured when trying to get the op name during global destruction. + Fix : Segfaults and wrong "Unknown error" exceptions that happened when dieing in require caused a free callback to fire. Thanks Florian Ragwitz for reporting. 0.30 2009-02-12 17:05 UTC + Add : You can now get in all the callbacks either the name or a B::OP object representing the current op if you pass the new 'op_info' option to wizard() with respective values VMG_OP_INFO_NAME and VMG_OP_INFO_OBJECT. + Doc : Document magic on array/hashes values. + Fix : Completely skip free callbacks during global destruction. + Tst : Tests now pass again on 5.8.3 and lower (they were broken since 0.27). + Tst : Test magic on symbol table and on array/hash values. 0.29 2009-02-08 11:10 UTC + Add : Set $_[2] to the default length for len magic on scalars. + Chg : Perl 5.8 is required. + Chg : The CLONE method will no longer be defined for non-threaded perls. + Doc : Nits. + Fix : The logic for turning off the GMAGICAL flag on hashes when no uvar magic is involved could do nasty things on tied hashes. + Upd : More resources in META.yml. 0.28 2009-01-24 17:05 UTC + Add : The 'copy_key' option to wizard(), that enables the safe edition of $_[2] in uvar callbacks to redirect actions to another key. + Fix : Exception objects thrown from callbacks at compile time were not available in $@. + Fix : free callbacks triggered during global destruction could lead to segfaults because the wizard was already freed. + Fix : Refcount of scalars with free callback. + Fix : Segfaults when using get or uvar magic simultaneously with clear magic. + Doc : The documentation about what the callbacks take and should return is now somewhat clearer. 0.27 2009-01-18 23:40 UTC + Fix : Offset of 1 with len magic on scalars. + Fix : Segfaults that seem to happen when one croak in a callback at compile time (thanks Ash Berlin for the testcase). + Upd : Resources in META.yml (Florian Ragwitz) + Tst : Large cleanup resulting in a wider set of tested behaviours. 0.26 2008-11-29 22:05 UTC + Fix : Leaks of cloned coderefs that access lexicals. + Fix : Building with maint-5.8 and blead (thanks Andreas Koenig). 0.25 2008-11-12 19:40 UTC + Fix : Compatibility with 5.8.9. + Fix : Old Pod::Coverage don't ignore CLONE. + Upd : META.yml spec updated to 1.4. 0.24 2008-10-12 14:55 UTC + Fix : Really fix it. 0.23 2008-10-11 17:25 UTC + Fix : Building on perls with multiplicity but not ithreads. 0.22 2008-09-29 19:40 UTC + Doc : Explain how magic differs from overloading. + Fix : Disable thread safety for perl 5.8 on Windows. If you want it enabled, reliable feedback is welcome. 0.21_02 2008-09-28 23:10 UTC + Fix : Hide previously deleted magic tokens in vmg_svt_free (Yuval Kogman). 0.21_01 2008-09-22 13:25 UTC + Chg : Shrink the context data. + Fix : Enable thread safety features for perls that just lack MY_CXT_CLONE. + Tst : Output threads and threads::shared versions in threads tests. 0.20 2008-09-20 23:35 UTC + Fix : The module is now thread safe. You can test if it had been built with thread safety features enabled through the VMG_THREADSAFE constant. + Fix : Correct backtrace when wizard() croaks. + Fix : 'cast $a, undef' should throw an 'invalid wizard' error instead of an 'invalid signature'. 0.19 2008-07-05 15:05 UTC + Add : The patchlevel with which the module has been built is now exported with the VMG_PERL_PATCHLEVEL constant. + Chg : Version checking macros overhaul. + Fix : 'uvar' magic should only be enabled in maint-5.10 and higher since it's never going to be backported to 5.8. + Fix : Likewise, the copy callback API change should only be enabled in 5.11 and higher. + Fix : Instead of those ackward fake refcount increments in the wizard destructor, flag the wizard with SVf_BREAK and force temps cleanup. This should fix the wizard destruction for all perls, and solves the leak introduced by the previous solution. 0.18 2008-07-04 12:20 UTC + Fix : Enable uvar magic when patchlevel >= 28419. + Fix : Set VMG_COMPAT_ARRAY_PUSH_NOLEN for Windows ActiveState Perl 5.8.x. 0.17 2008-05-11 09:05 UTC + Fix : 5.8.4 and lower don't have mPUSHi. Gah. Yeah, I know, I should use Devel::PPPort. 0.16 2008-05-10 22:05 UTC + Add : The samples/copy.pl script. + Chg : The sv_magical() + vmg_mg_magical() combo was simplified into vmg_sv_magicuvar(). + Tst : t/33-code.t was testing scalars, not code. + Tst : is() and like() are better than ok(). + Tst : 100% coverage reached. 0.15 2008-04-11 18:25 UTC + Chg : Factor vmg_cb_call{1,2,3}() into one function. + Fix : len magic is no longer called when taking the length() of a magical scalar since p32969. The VMG_COMPAT_SCALAR_LENGTH_NOLEN constant was added to cover this. + Tst : More tests for t/22-len.t. 0.14 2008-03-24 12:35 UTC + Fix : t/16-huf.t failures on Solaris and FreeBSD caused by not updating mg->mg_ptr after Renew-ing it on dispell. + Fix : Undefining MGf_DUP caused the wizard's magic to be wrongly initialized. MGf_DUP now appears as true from the user point of view, but the dup callback isn't actually set. + Fix : Warnings with blead due to copy callbacks now taking an I32 (API change #33256). + Fix : vmg_svt_val() and vmg_uvar_del() aren't required if no uvar magic is available. + Tst : Tests now output the version of optional modules loaded. 0.13 2008-03-19 14:35 UTC + Doc : Link to coverage report. + Fix : Correct dependencies listing in META.yml. + Tst : Improved test coverage. + Tst : Print the patchlevel as a comment. + Tst : Use is() where it's relevant. + Tst : t/16-huf.t now really tests interaction with H::U::FH. 0.12 2008-02-07 18:15 UTC + Fix : POD error. Thanks to Chris Williams (BinGOs) for the quick feedback. 0.11 2008-02-07 17:55 UTC + Add : Copy callbacks now receive the current key/index in $_[2]. The current value/element is now in $_[3]. + Chg : The trigger of copy magic on list assignment with perls greater than 5.10.0 was caused by uvar magic. Hence, VMG_COMPAT_HASH_LISTASSIGN_COPY was removed. Use VMG_UVAR instead. + Fix : Build failures on patched perls. + Tst : Added missing exported symbols to 01-import.t. 0.10 2008-02-04 11:30 UTC + Add : New script : samples/vm_vs_tie.pl, that benchmarks our uvar magic versus tied hashes. + Add : The VMG_COMPAT_* constants can be used from userspace to check perl magic abilities. + Fix : Callbacks that returned undef made us croak, breaking the variable behaviour (regression test in 14-callbacks.t). + Fix : uvar callbacks weren't tested for non-NULL-ity before being called (regression test in 28-uvar.t). + Tst : Fix typo in 25-copy.t that prevented Tie::Hash tests to be ran. 0.09 2008-02-02 11:30 UTC + Doc : Explicitely say that uvar callbacks are safely ignored for non-hashes. + Doc : Document caveats and fix the usual set of typos. + Fix : vmg_dispell() didn't check if the ext magic were ours when counting wizards that have uvar callbacks, resulting in a possible memory misread. + Fix : getdata() now returns directly the data object, and no longer a copy. This caused a leak. + Tst : Prefix author tests by 9*-. + Tst : New optional author test : 95-portability-files.t, that uses Test::Portability::Files when it's present. + Tst : New test : 14-self.t, that tests application of magic on the wizard itself. + Tst : Move Hash::Util::FieldHash tests out of 11-multiple.t to 15-huf.t. 0.08 2008-02-01 16:55 UTC + Add : copy magic for tied arrays/hashes. + Add : local magic. + Add : uvar magics : fetch, store, exists, delete for hashes. 0.07_* 2008-01 Internal development versions. 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.04 2007-08-28 12:25 UTC + Chg : s/require (XSLoader)/use $1/. + Fix : Tests are now strict. + Fix : Complete dependencies. 0.03 2007-08-01 17:20 UTC + Add : Passing the signature of an already defined magic to wizard() now returns the corresponding magic object. + Add : You can pass the numeric signature as the wizard argument of cast(), dispell() and getdata(). + Add : Any argument specified after the wizard (or the signature) in a call to cast() is now passed to the private data constructor in $_[1] and after. + Chg : $_[0] is now always a reference to the magic variable in all callbacks. The reason for changing from the previous behaviour is that one may want to apply the same magic to a plain scalar and to a scalar reference, and needs a way to distinguish between them in the callback (say, ref()). + Fix : Wizard object destruction used not to free the signature. 0.02 2007-07-27 13:50 UTC + Fix : In response to test report 548152 : Newx() and SvMAGIC_set() not present on older perls. + Fix : In response to test report 548275 : Since perl 5.9.5, 'clear' magic is invoked when an array is undefined (bug #43357). Moreover, 'len' magic is no longer called by pushing an element since perl 5.9.3. + Fix : Missing glob test in MANIFEST. 0.01 2007-07-25 16:15 UTC First version, released on an unsuspecting world.