Revision history for Future-AsyncAwait
0.70 2024-12-20
[CHANGES]
*
Allow `async sub` declarations that put named functions into other
packages
*
Update to latest copies of shared t/80*.t cross-module test files
0.69 2024-09-18
[CHANGES]
*
Support asynchonous lexical subs declared with `my async sub`
0.68 2024-08-29
[BUGFIXES]
*
Updated to latest hax/ support files: #ifdef around SAVEt_LONG for
perl 5.41.3 which removed it
0.67 2024-08-19
[CHANGES]
*
Use `File::ShareDir` for storing .h include file, rather than
storing the contents in the `__DATA__` section of the build helper
*
Updates for XS::Parse::Sublike v0.23:
+ add .ver hooks struct field
*
Pod style updates
[BUGFIXES]
*
Permit `async` keyword on bodyless sub or method declarations
(RT151046)
0.66 2023-09-08
[CHANGES]
*
Add a unit test to check that `async method` works on core perl
class syntax
*
Remember to implement `sub unimport` so that `no Future::AsyncAwait`
works
[BUGFIXES]
*
Provide a permit_hintkey to keep XPS happy
0.65 2023-03-17
[CHANGES]
*
More specific unit-testing of the croak location when testing
`AWAIT_GET` (related to RT145249)
*
Swap all unit tests from `Test::More` to `Test2::V0`
*
Avoids test_requires on `Test::Refcount` or `Test::Fatal`
[BUGFIXES]
*
A more robust handling of defav during suspend/resume to try not to
upset `perl -d` (RT146246)
0.64 2023-02-14
[CHANGES]
*
Define ABI version 2, which adds pre_suspend and post_resume phase
hooks
0.63 2023-02-12
[CHANGES]
*
Added various bits of API to extension modules using modhookdata more
flexibly, including by pre-allocation before the first `await`
*
Legacy hook API now prints warnings about its deprecation and
impending removal
[BUGFIXES]
*
Bleadperl no longer supports `GIMME`, in any case should use
`GIMME_V`
*
Fix memory leak around pre-allocated cancel AV
0.62 2022-12-20
[BUGFIXES]
*
Save/restore the value of the @_ array; does not work on perls
before 5.24 for reasons unknown (RT130683)
*
Updated hax/ files to avoid a build warning on current bleadperl
0.61 2022-11-21
[BUGFIXES]
*
Fix for some C compilers which get upset about variable
declarations having goto labels
0.60 2022-11-21
[CHANGES]
*
Added entirely new extension API based on structs of hook functions
registered with the module; similar to Object::Pad and XS::Parse::*
*
Provide Future::AsyncAwait::ExtensionBuilder in a similar fashion
to above
*
Added some more internal assert() and TRACEPRINT calls for
debugging
[BUGFIXES]
*
Don't crash if an async sub's returning future is abandoned outside
of an await state
0.59 2022-09-23
[BUGFIXES]
*
Fix broken Future->get method resolution on recent
Future + Future::XS experiments
*
Fix hax/docatch.c.inc for "NULL OP IN RUN" messages
*
Make t/31destroy.t less fragile in the case of non-HASH Future
instances
*
Back-compat to perl 5.16 by passing `flags` arg to `cv_copy_flags`
(RT143742)
0.58 2022-04-29
[BUGFIXES]
*
Fix memory leak with long-running futures and on_cancel (RT142222)
*
Copy SVs with SvPADTMP in case of running code, or folded constants
that erroneously end up with that flag anyway (RT142468)
0.57 2022-03-16
[CHANGES]
*
Updates for Devel::MAT::Dumper v0.44
*
Updates to bundled hax/ files
0.56 2022-01-26
[CHANGES]
*
Updated Awaitable API definition for AWAIT_ON_CANCEL
*
Actually use AWAIT_ON_CANCEL properly (RT137723)
*
Document the interaction of `multi async sub`
0.55 2021-12-16
[CHANGES]
*
Updated for XS::Parse::Keyword 0.15
*
Hoist an OP_ARGCHECK to outside the ENTERTRY block if present, so
that signature validation happens synchronously
*
Support and unit-test Syntax::Keyword::MultiSub
*
No longer set `-std=c89` compile flag now that core perl requires
C99 anyway
0.54 2021-10-26
[CHANGES]
*
Add unit-test for await from within perl 5.35.5's multi-variable
`for_list` feature
*
Add cross-module test for compatibility with Syntax::Keyword::Match
[BUGFIXES]
*
Handle `state` vars correctly (RT139821)
0.53 2021-08-26
[CHANGES]
*
Updated for XS::Parse::Keyword 0.13
0.52 2021-07-13
[BUGFIXES]
*
Account for changed error message from XS::Parse::Keyword 0.09
(RT137589)
0.51 2021-05-31
[CHANGES]
*
Updates for XS::Parse::Keyword 0.05
*
Removed unused hax/* files
0.50 2021-04-30
[CHANGES]
*
Rewrite of parser logic to use XS::Parse::Keyword instead of
lowlevel code on PL_keyword_parser directly
*
Attempt to provide a name for the local'ized GV that cannot be
handled (thanks fgasper)
*
Attempt to provide a name for SAVEt_* constants that cannot be
handled
*
Added a shouty AWAIT_WAIT method to implement toplevel `await`
(RT134671)
*
Docs update - remark that Rust and C++20 have async/await too
(RT135356)
[BUGFIXES]
*
Invoke defer {} and finally {} blocks on cancellation (RT135351)
0.49 2021-02-24
[BUGFIXES]
*
Handle the CXp_TRY and real try/catch syntax added in perl 5.33.7
(RT134414)
0.48 2021-02-02
[CHANGES]
*
Explicitly document that `async sub` works on anon subs too
*
Update to latest hax/ files
[BUGFIXES]
*
t/80await+try.t requires Syntax::Keyword::Try version >= 0.18
(RT134250)
0.47 2020-11-29
[CHANGES]
*
Allow `await` expressions at toplevel of main script, for
consistency of examples, unit tests, etc... (RT129306)
0.46 2020-11-09
[CHANGES]
*
Provide future_asyncawait_on_activate() in AsyncAwait.h
*
Adjusted docs around new `AWAIT_CHAIN_CANCEL` method
*
Depend on Future 0.43 for Awaitable role named methods, rather than
monkey-patching older versions
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
[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'