blob: bd797a75a8e506da751be6b2dfa25c5d23f56e42 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
* compile error for error: expected anyframe->T, found 'anyframe'
* compile error for error: expected anyframe->T, found 'i32'
* await of a non async function
* async call on a non async function
* a test where an async function destroys its own frame in a defer
* implicit cast of normal function to async function should be allowed when it is inferred to be async
* revive std.event.Loop
* @typeInfo for @Frame(func)
* peer type resolution of *@Frame(func) and anyframe
* peer type resolution of *@Frame(func) and anyframe->T when the return type matches
* returning a value from within a suspend block
* make resuming inside a suspend block, with nothing after it, a must-tail call.
* make sure there are safety tests for all the new safety features (search the new PanicFnId enum values)
* compile error for casting a function to a non-async function pointer, but then later it gets inferred to be an async function
* compile error for copying a frame
* compile error for resuming a const frame pointer
* runtime safety enabling/disabling scope has to be coordinated across resume/await/calls/return
* calling a generic function which is async
* make sure `await @asyncCall` and `await async` are handled correctly.
* allow @asyncCall with a real @Frame(func) (the point of this is result pointer)
* documentation
- @asyncCall
- @frame
- @Frame
- @frameSize
- coroutines section
- suspend
- resume
- anyframe, anyframe->T
* call graph analysis to have fewer stack trace frames
* grep for "coroutine" and "coro" and replace all that nomenclature with "async functions"
* when there are multiple calls to async functions in a function, reuse the same frame buffer, so that the
needed bytes is equal to the largest callee's frame
* if an async function is never called with async then a few optimizations can be made:
- the return does not need to be atomic
- it can be assumed that these are always available: the awaiter ptr, return ptr if applicable,
error return trace ptr if applicable.
- it can be assumed that it is never cancelled
|