Revision history for Future-AsyncAwait
0.45 2020-10-22
[CHANGES]
* Have Test::Future::AsyncAwait::Awaitable check for the suggested
new `AWAIT_CHAIN_CANCEL` method
[BUGFIXES]
* Avoid refcounting bug when cancelling a suspended SAVEt_SPTR
(RT133564)
* Turn on SvPADMY on precancel AV to keep -DDEBUGGING perl happy
(RT133517)
0.44 2020-10-09
[CHANGES]
* Added initial attempt at `CANCEL` blocks for handling Future
cancellation - experimental
* Announce upcoming API method rename of `AWAIT_ON_CANCEL` to
`AWAIT_CHAIN_CANCEL`
0.43 2020-07-06
[CHANGES]
* Added explicit use VERSION declarations to every perl file
[BUGFIXES]
* Don't segfault when awaiting in closures that capture outer 'our'
variables (RT132945)
0.42 2020-06-29
[BUGFIXES]
* Fixes for assert failures on -DDEBUGGING perls:
+ Workarounds for perl versions prior to 5.22 that get upset about
new*OP() being invoked with OP_CUSTOM
+ Remember to set SVs_PADMY flag on newly-generated pad slot SVs
during suspend
* Don't leak SVs when cleaning up SAVEt_FREESV during cancellation
0.41 2020-06-20
[CHANGES]
* Updates for XS::Parse::Sublike 0.10
[BUGFIXES]
* Fix Build.PL declaration on XS::Parse::Sublike that it needs to be
configure_requires
0.40 2020-04-15
[CHANGES]
* Support a limited form of SAVEt_SPTR when the var is within the
current pad; this supports SAVESPTR(PAD_SVl(padix)) as may be used
by Object::Pad et.al.
0.39 2020-03-27
[CHANGES]
* Updated for XS::Parse::Sublike 0.06 API
0.38 2020-03-24
[CHANGES]
* Use XS::Parse::Sublike for `async sub` parsing. This makes it
possible to coƶperate with other sub-like keyword modules
* Add cross-module test sthat module works correctly with Object::Pad,
and additionally Syntax::Keyword::Dynamically as well
0.37 2020-03-10
[CHANGES]
* Minor reƤrrangement of internal stages to closer match core's
sub parser and allow more generic hooking in future
[BUGFIXES]
* Don't allow a space between attr name and optional parenthesized
argument (RT131571)
0.36 2020-01-16
[CHANGES]
* Add an optional 'force' callback to test_awaitable()
[BUGFIXES]
* Fix more segfault cases during compile failures
(RT129987, RT131487)
0.35 2020-01-07
[CHANGES]
* Support lexical scopes declaring a different class of future
* Document the required API for awaitable objects
* Provide an API conformance test for implementors of alternative
future classes
[BUGFIXES]
* Provide scalar context to controlling expression of `await`
0.34 2019-12-01 01:45:23
[CHANGES]
* Various internal changes to neaten up the hax/ directory of C
source files, letting them be more shareable with other XS dists
[BUGFIXES]
* Fix (some of the cases of) RT129987
* Only fetch CX_CUR() after the future_done_from_stack() call
(RT131118)
0.33 2019-09-08 05:16:05
[BUGFIXES]
* Remember to SPAGAIN after future_done_from_stack() in case the
stack array was moved (RT130464)
0.32 2019-09-03 17:00:35
[CHANGES]
* Define a super-experimental C-level API for other modules to hook
parts of the suspend/resume lifecycle to provide extension
behaviour.
[BUGFIXES]
* Actually use perl's own `wrap_keyword_plugin()`
* Avoid compiler warning about int/IV mismatch in printf (RT130285)
* Use warn_sv() to avoid compiler wraning about formatless warn() on
a plain PV (RT130285)
* Don't segfault on parse errors from parse_block() (RT130417)
0.31 2019-07-25 15:09:04
[CHANGES]
* Use `parse_subsignature()` on bleadperl and backport it to
perl 5.26, allowing parsing of subroutine signatures (RT123465)
0.30 2019-07-05 16:09:02
[CHANGES]
* Parse attribute lists on `async sub`s (RT129985)
0.29 2019-06-26 20:23:12
[CHANGES]
* Further annotations in Devel::MAT::Dumper helper about loop state
[BUGFIXES]
* Fix various memory leaks of abandoned `async sub`s (RT129836)
0.28 2019-06-17 17:06:18
[BUGFIXES]
* Fix localisation of hints hash at compiletime so nested `async sub`
works correctly (RT129836)
0.27 2019-06-04 20:48:42
[CHANGES]
* Detect certain forbidden constructs at compile-time; await inside:
+ non-lexical foreach
+ map and grep (RT129748)
+ string-eval (RT126036)
[BUGFIXES]
* Preserve regexp context across await boundary (RT129321)
0.26 2019-04-27 12:41:11
[BUGFIXES]
* Further fixes for foreach(LIST) handling (RT129319)
* Handle SAVEt_FREEPV (RT129320)
* Cleanup itervar and SAVEt_PADSV_AND_MORTALIZE of abandoned futures
(RT129320)
* Ensure body of async sub starts with OP_NEXSTATE so as not to upset
Devel::Cover (thanks ilmari) (RT128309)
0.25 2019-04-24 15:46:15
[BUGFIXES]
* Print a warning but don't panic on resume with lost returning
future (RT129303)
0.24 2019-04-18 23:47:56
[CHANGES]
* Stop `async sub`s on ->cancel (RT129202)
* Propagate ->cancel requests back to awaiting future, though at
present only on perl 5.24+ (RT129202)
* Added more internal consistency checks and `panic()` assertions
[BUGFIXES]
* Further fixes for broken behaviour of `foreach(LIST)` (RT129215)
* Fix Devel::MAT::Dumper helper for expired but unreclaimed magic
0.23 2019-04-16 01:08:34
[BUGFIXES]
* Many improvements to mortals handling, including workarounds for
lack of cx->old_tmpsfloor on perls before 5.24 (RT128619)
0.22 2019-04-02 00:12:47
[CHANGES]
* More detailed annotations in Devel::MAT::Dumper helper
[BUGFIXES]
* Partial attempt at freeing things when dropping a pending await
future (RT128620)
* Fix for labeled loop controls (RT128205)
0.21 2019-02-02 17:19:35
[BUGFIXES]
* Fix more memory leaks - simple test case now executes cleanly
(RT128222)
0.20 2019-01-16 22:34:20
[BUGFIXES]
* Ensure mortal SVs aren't reclaimed prematurely during
suspend/resume
* Fix several memory leaks. Some still remain but overall the
situation is much improved (RT128222)
0.19 2019-01-08 23:49:03
[BUGFIXES]
* Replace stolen array or hash pad lexicals with newAV() / newHV() to
maintain the expected SvTYPE() invariants (RT128176)
0.18 2019-01-05 20:08:38
[CHANGES]
* Declare threaded perls before version 5.22 as unsupported. The bug
remains open but for now I'm disinclined to look into it. (RT124351)
[BUGFIXES]
* Don't panic about blk_eval.old_eval_root or .cur_text fields, as it
seems we can safely ignore those (RT126036)
0.17 2019-01-04 18:45:22
[BUGFIXES]
* Perl 5.26 and above still needs SvREFCNT_inc() on the state array
in CXt_LOOP_ARR (RT124353)
* Better fix for scopestack name tracking under -DDEBUGGING
(RT128164)
* Set -DNO_XSLOCKS in order to get working JMPENV on MSWin32
(RT128163)
0.16 2019-01-03 22:09:28
[CHANGES]
* Use ENTER_with_name/LEAVE_with_name variants for easier debug (thanks
ilmari)
* Don't clone the CVf_CVGV_RC flag
* Unit-test that async/await also behaves fine through nested named
method calls
* Unit-test die after single await()
[BUGFIXES]
* Avoid call to non-public unshare_hek() function (RT125613)
* Remember to wrap pp_await in docatch() if CATCH_GET is true. Fixes
many failing test cases (double-nested await, RT126037, RT123062)
0.15 2018-01-24 04:12:04
[CHANGES]
* Support older perls back to 5.16 (continues work on RT122252). Just
5.14 remains unsupported now
* Neater implementation which avoids hacky workarounds from abusing
`cv_clone()`
[BUGFIXES]
* Avoid using anonymous union in struct SuspendedFrame (thanks ilmari)
(RT124171)
0.14 2018-01-22 04:42:02
[CHANGES]
* Document and test that 'await' works from inside 'do {}'
* Test that two nested 'async sub's can await nicely
[BUGFIXES]
* Fix for 'await' twice inside the same 'foreach' loop (RT124144)
* Fix handling of ITERVAR save/restore on perl 5.24+
* Use correct printf format for IVs when debug printing
* Ensure that captured lexicals from now-dead scopes remain working
0.13 2018-01-18 15:52:03
[CHANGES]
* Support older perls back to 5.18 (continues work on RT122252)
[BUGFIXES]
* Ensure that 'async sub' called in list context doesn't leak its
input arguments as well as Future result
0.12 2018-01-15 19:02:42
[CHANGES]
* Support older perls back as far as 5.20 and 5.22
(partly solves RT122252)
* Link to TPCiA talk recording on youtube
0.11 2018-01-07 16:35:25
[BUGFIXES]
* Fixes for markstack restoration calculation
* Don't save/restore PAD slots relating to outer captures or
protosubs (RT124026)
0.10 2017-08-13 23:25:33
[BUGFIXES]
* Implement enough of SAVEt_DESTRUCTOR_X to make try/finally work
* Fix the remaining integration tests with Syntax::Keyword::Try now
latest version (0.07) works correctly
0.09 2017-08-13 17:44:48
[CHANGES]
* Link to TPCiA talk slides
* Forbid the use of foreach loops on non-lexicals as that has
semantic problems due to the implied 'local'
* Unit-test that plain 'eval{}' works as expected
* Allow specifically the use of 'local $@' to support common patterns
around 'eval{}'
* Unit-test that try/catch from Syntax::Keyword::Try works
[BUGFIXES]
* Save cx->blk_gimme on CXt_LOOP_* contexts (thanks rurban)
(RT122673)
0.08 2017/08/10 16:48:52
[CHANGES]
* Handle the other CXt_LOOP_* context types, making foreach() loops
work
0.07 2017/07/11 23:26:48
[CHANGES]
* Forbid the use of 'await' outside of 'async sub'
* Handle CXt_BLOCK contexts
* Handle SAVEt_CLEARSV and SAVEt_CLEARPADRANGE savestack entries
* Further documentation rework
[BUGFIXES]
* Fix off-by-one error on reading the savestack, resulting in a
number of false-"TODO" failures being fixed
* Fix parser logic for parenthesized 'await( ... )' expressions
0.06 2017/06/29 17:43:19
[CHANGES]
* Support suspend/resume within while loops and plain loop blocks
* Import the syntax keywords by default, rather than having to
request them as an import symbol
* Added some initial documentation to explain the new syntax
[BUGFIXES]
* Declare (for now) dependency on perl 5.24 to prevent older versions
from attempting it and failing. We hope to support older versions
back to 5.14 in due course.
0.05 2017/06/27 15:20:54
[BUGFIXES]
* Fix await op so it can await multiple times within the same sub
0.04 2017/06/06 18:42:15
[CHANGES]
* Suspend and resume the PAD around an await so lexical variables are
preserved
* Ensure that anon async subs can suspend/resume - see also
https://rt.perl.org/Public/Bug/Display.html?id=131519
[BUGFIXES]
* Ensure MARK stack doesn't upset debugperl
0.03 2017/05/08 21:33:46
[CHANGES]
* Handle the value and mark stacks around suspend/await, allowing
some stack temporaries to be preserved
* Avoid naming internal functions "Perl_..."
[BUGFIXES]
* Ensure that die after await is still caught
* Avoid C++-style comments and C99-style for() loop variable declarations
(RT121569)
0.02 2017/05/08 16:55:38
[CHANGES]
* Initial tiny implementation of actual suspend/resume on 'await'