Revision history for Future-AsyncAwait

0.29    2019-06-26 20:23:12
         * Further annotations in Devel::MAT::Dumper helper about loop state

         * Fix various memory leaks of abandoned `async sub`s (RT129836)

0.28    2019-06-17 17:06:18
         * Fix localisation of hints hash at compiletime so nested `async sub`
           works correctly (RT129836)

0.27    2019-06-04 20:48:42
         * Detect certain forbidden constructs at compile-time; await inside:
            + non-lexical foreach
            + map and grep (RT129748)
            + string-eval (RT126036)

         * Preserve regexp context across await boundary (RT129321)

0.26    2019-04-27 12:41:11
         * Further fixes for foreach(LIST) handling (RT129319)
         * Handle SAVEt_FREEPV (RT129320)
         * Cleanup itervar and SAVEt_PADSV_AND_MORTALIZE of abandoned futures
         * 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
         * Print a warning but don't panic on resume with lost returning
           future (RT129303)

0.24    2019-04-18 23:47:56
         * 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

         * 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
         * 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
         * More detailed annotations in Devel::MAT::Dumper helper

         * 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
         * Fix more memory leaks - simple test case now executes cleanly

0.20    2019-01-16 22:34:20
         * Ensure mortal SVs aren't reclaimed prematurely during
         * Fix several memory leaks. Some still remain but overall the
           situation is much improved (RT128222)

0.19    2019-01-08 23:49:03
         * 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
         * Declare threaded perls before version 5.22 as unsupported. The bug
           remains open but for now I'm disinclined to look into it. (RT124351)

         * 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
         * 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
         * Set -DNO_XSLOCKS in order to get working JMPENV on MSWin32

0.16    2019-01-03 22:09:28
         * Use ENTER_with_name/LEAVE_with_name variants for easier debug (thanks
         * 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()

         * 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
         * 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

         * Avoid using anonymous union in struct SuspendedFrame (thanks ilmari)

0.14    2018-01-22 04:42:02
         * Document and test that 'await' works from inside 'do {}'
         * Test that two nested 'async sub's can await nicely

         * 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
         * Support older perls back to 5.18 (continues work on RT122252)
         * 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
         * 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
         * 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
         * 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
         * 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
         * Save cx->blk_gimme on CXt_LOOP_* contexts (thanks rurban)

0.08    2017/08/10 16:48:52
         * Handle the other CXt_LOOP_* context types, making foreach() loops

0.07    2017/07/11 23:26:48
         * Forbid the use of 'await' outside of 'async sub'
         * Handle CXt_BLOCK contexts
         * Handle SAVEt_CLEARSV and SAVEt_CLEARPADRANGE savestack entries
         * Further documentation rework

         * 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
         * 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

         * 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
         * Fix await op so it can await multiple times within the same sub

0.04    2017/06/06 18:42:15
         * Suspend and resume the PAD around an await so lexical variables are
         * Ensure that anon async subs can suspend/resume - see also
         * Ensure MARK stack doesn't upset debugperl

0.03    2017/05/08 21:33:46
         * Handle the value and mark stacks around suspend/await, allowing
           some stack temporaries to be preserved
         * Avoid naming internal functions "Perl_..."

         * Ensure that die after await is still caught
         * Avoid C++-style comments and C99-style for() loop variable declarations

0.02    2017/05/08 16:55:38
         * Initial tiny implementation of actual suspend/resume on 'await'