Revision history for Perl extension Want.

0.01  Sun Jul  1 18:04:58 2001
	- original version; created by h2xs with options
		-A Want
	- Published to CPAN on 2001-07-15

0.02  Mon Jul 16 10:06:15 2001
	- Give correct expectation count for constructs like
		my ($x, $y, $z) = (23, foo());   # foo's expectation count is 2
	- want(2) should be true in C<@x = foo()> etc;
	  i.e. infinity > N for any finite N  :-)
	- Support '!' negative requests
	- correct expectation count for slices

0.03  Wed Jul 25 12:03:01 BST 2001
	- Fix documentation snafus
	- add want('COUNT') as a synonym for C<howmany>
	  and want('REF') for C<wantref>
	- BOOLEAN context
	- now compiles & passes tests under ithreads
	- SCALARREF and OBJECT reference contexts
	  (want('REF') eq 'SCALAR' || want('REF') eq 'OBJECT')
	- Reorganised test suite

0.04  Sat Aug  4 09:44:34 BST 2001
	- 'want' is now exported by default
	- BOOL is a euphemism for BOOLEAN (Perl 6 compatibility)
	- ARGUMENTS section added to documentation
	- excised C++-style comments from the source
	- fixed the expectation count issue from the BUGS section of 0.03
	- ASSIGN context. Yeah, baby!
	- don't throw an error if RVALUE/LVALUE are used from a non-lvalue sub
	- specifiers can also now be space-separated, e.g.:
		want('LVALUE ASSIGN');

0.05  Tue Aug 28 22:14:48 BST 2001
	- tests pass on 5.6.1 and above
	- added 'rreturn' and 'lnoreturn' functions

0.06  Fri Jul 25 11:42:13 BST 2003
	- pass thread context to Perl_pop_return
	- remove v-string

0.07  Mon Aug 18 10:27:27 BST 2003
	- do not try to call pop_return (it's private)
	- update copyright year(s) and fix doc glitches
	- remove spurious || $n eq 'gelem' from _wantref
        - change i to I32 (rather than U32) to avoid compiler warning
          on Win32

0.08  Mon Dec 13 01:23:28 GMT 2004
	- Accommodate the changed internals of perl 5.9.2
          (the retstack is no more: see change #23156).

0.09  Thu Jun 30 15:02:37 BST 2005
    - Fix a bug reported by Damian: want doesn't work (crashes) if
      it's called from within the guard of a loop. See the comment
      above upcontext_plus in Want.xs.
    - Runs under the debugger!
    - Give an error message (rather than segfaulting) if called from
      a tie handler.

0.10  Sat Mar 25 15:00:41 GMT 2006
    - Make context propagate through subroutine return
    - Fix bug whereby want('LVALUE') sometimes gave false positives
      (see test 58 in t/all.t)
    - Fix bug whereby want_boolean often gave false positives

0.11  Sat Aug 26 22:36:27 BST 2006
    - (Jerry D. Hedden) Fix bug whereby 'lnoreturn' failed to
      decrement the CvDEPTH, which causes an error with 'use threads'

0.12  Tue Aug 29 21:06:40 BST 2006
    - (Jerry D. Hedden) Force the threads test to be skipped if oldstyle
      threads (as opposed to ithreads) are in use.

0.13  Tue May  1 21:39:19 BST 2007
    - Address bug #26847, and add t/methcall.t

0.14  Fri May  4 12:00:20 BST 2007
    - Fix bug #26928

0.15  Sun Jul 15 14:39:15 BST 2007
    - Fix compiler warning (#26961) -- from Jerry D. Hedden
    - Fix memory leak in want_assign (#28224)

0.16  Thu Dec  6 11:15:39 GMT 2007
    - Make sure there are no ._ files in the tarball
    - Refuse to run Makefile.PL with Perl < 5.006

0.17  Sun Feb  3 22:30:30 GMT 2008
    - Be compatible with internals changes post-5.10 (new loop contexts & CxLVAL)

0.18  Mon Feb  4 09:35:56 GMT 2008
    - Code identical to 0.17; eliminate ._files by using gnutar.

0.19  Sat 30 Jul 2011 17:07:16 BST
    - Change tests to avoid the new warning 'Useless assignment to a temporary' added in 5.15.

0.20  Sun  5 Feb 2012 17:43:22 GMT
    - Remove a test that was testing the behaviour of perl, rather than of this module,
      and was testing an aspect of perl’s behaviour that has changed (bf8fb5ebd) in
      in such a way that the test was failing with bleadperl.

0.21  Wed 29 Feb 2012 16:47:58 GMT
    - Avoid leaking the RHS of an lnoreturn lvalue sub, thanks to Father Chrysostomos

0.22  Sun 15 Dec 2013 17:08:35 GMT
    - Prevent return from being optimised away by newer (>= 5.19.7) Perls.
      This is a patch supplied by @wolfsage: see

0.23  Mon 24 Mar 2014 00:28:36 GMT
    - Accommodate a bleadperl change to the optree, made in 7d3c8a6837b55fff0e6294ebf8c94a1601367c76.
      This is bug #94086 for Want, and bug #121342 for perl5.

0.24  Tue  2 Dec 2014 10:22:39 GMT
    - Accommodate another bleadperl change. Patch provided by Father Chrysostomos at

0.25  Wed 10 Dec 2014 19:31:03 GMT
    - Add support for the new OP_MULTIDEREF
      Perl has a new op, added as a performance optimisation in fedf30e1c349130b23648c022f5f3cb4ad7928f3,
      to represent a sequence of array/hash dereferences. This patch adds support for the new op.

0.26  Tue 28 Apr 2015 12:31:17 BST
    - There is a new experimental option in bleadperl under which one ought not to use
      the op_sibling field directly. Quoting from perlguts.pod:
      “ Starting in version 5.21.2, perls built with the experimental
        define C<-DPERL_OP_PARENT> add an extra boolean flag for each op,
        C<op_moresib>.  When not set, this indicates that this is the last op in an
        C<OpSIBLING> chain. This frees up the C<op_sibling> field on the last
        sibling to point back to the parent op. Under this build, that field is
        also renamed C<op_sibparent> to reflect its joint role. The macro
        C<OpSIBLING(o)> wraps this special behaviour, and always returns NULL on
        the last sibling.  With this build the C<op_parent(o)> function can be
        used to find the parent of any op. Thus for forward compatibility, you
        should always use the C<OpSIBLING(o)> macro rather than accessing
        C<op_sibling> directly. ”
      Thanks to Reini Urban for the patch.

0.27  Thu 25 Feb 2016 21:26:04 GMT
    - perl 5.23.8 breaks the hack we were using to implement double_return.

    This patch from David Mitchell fixes it. See

    David wrote:

    > Running with a debugging perl-5.23.8 will show assertion failures in the Want test suite. It's because PL_comppad/PL_curpad save/restore is now done by the context stack / cx_popsub() rather than as previously on the savestack / LEAVE.

    > This stops the double_return() 'convert CXt_SUB to CXt_NULL' hack from working properly, as PL_comppad is no longer restored when transitioning from the inner to outer sub. The attached patch substitutes one evil hack for another: it keeps the CXt_SUB context stack entry, but sets its retop field to point to the return op again (rather than its caller) so that the return op gets called twice (with a bit of markstack hackery to ensure there are two marks for the two returns to pop).

    > rreturn and lnoreturn are also a bit under-tested. In particular, there are no tests for rreturn in list context. I added such a test, but more need adding.

    > I can see this hack breaking again in the future. Perhaps in the long term
    > rreturn() and lnoreturn() should be implemented using custom ops???

    > Dave M.

0.28  Thu 25 Feb 2016 22:02:42 GMT
    - Fix test failure in 5.14
    - Fix test failure in 5.23.9 (using a patch from Slaven Rezic)

0.29  Fri 26 Feb 2016 04:42:19 GMT
    - Restore compatibility with certain older perl versions (5.10 and 5.12)

      It seems that “ATTRS: lvalue” doesn’t work with older perls, but that you can
      forward-declare the method in Perl code with the :lvalue attribute with the same

      This version of Want is still broken with perl 5.8, for reasons I haven’t investigated.