Skip to content

Commit 7531448

Browse files
authored
CABI: change result of async lower on eager return to be more consistent (#516)
1 parent e66bf2b commit 7531448

File tree

4 files changed

+17
-17
lines changed

4 files changed

+17
-17
lines changed

design/mvp/Async.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -645,7 +645,7 @@ the same as in the synchronous case. What's different, however, is *when* `$in`
645645
and `$out` are read or written. In a synchronous call, they are always read or
646646
written before the call returns. In an asynchronous call, there is a set of
647647
possibilities indicated by the `(result i32)` value:
648-
* If the returned `i32` is `0`, then the call completed synchronously without
648+
* If the returned `i32` is `2`, then the call returned eagerly without
649649
blocking and so `$in` has been read and `$out` has been written.
650650
* Otherwise, the high 28 bits of the `i32` are the index of a new `Subtask`
651651
in the current component instance's table. The low 4 bits indicate how far

design/mvp/CanonicalABI.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3143,7 +3143,7 @@ always returns control flow back to the caller without blocking:
31433143
await subtask.call_async(callee, on_start, on_resolve)
31443144
if subtask.resolved():
31453145
subtask.deliver_resolve()
3146-
return [0]
3146+
return [int(Subtask.State.RETURNED)]
31473147

31483148
subtaski = task.inst.table.add(subtask)
31493149
assert(0 < subtaski <= Table.MAX_LENGTH < 2**28)

design/mvp/canonical-abi/definitions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1951,7 +1951,7 @@ def subtask_event():
19511951
await subtask.call_async(callee, on_start, on_resolve)
19521952
if subtask.resolved():
19531953
subtask.deliver_resolve()
1954-
return [0]
1954+
return [int(Subtask.State.RETURNED)]
19551955

19561956
subtaski = task.inst.table.add(subtask)
19571957
assert(0 < subtaski <= Table.MAX_LENGTH < 2**28)

design/mvp/canonical-abi/run_tests.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,7 @@ async def consumer(task, args):
574574
[seti] = await canon_waitable_set_new(task)
575575
ptr = consumer_heap.realloc(0, 0, 1, 1)
576576
[ret] = await canon_lower(consumer_opts, eager_ft, eager_callee, task, [ptr])
577-
assert(ret == 0)
577+
assert(ret == Subtask.State.RETURNED)
578578
u8 = consumer_heap.memory[ptr]
579579
assert(u8 == 43)
580580
[ret] = await canon_lower(consumer_opts, toggle_ft, toggle_callee, task, [])
@@ -1171,7 +1171,7 @@ async def core_func(task, args):
11711171
retp = 12
11721172
await asyncio.sleep(0)
11731173
[ret] = await canon_lower(opts, ft, host_import, task, [rsi3, retp])
1174-
assert(ret == 0)
1174+
assert(ret == Subtask.State.RETURNED)
11751175
rsi4 = mem[retp]
11761176
[ret] = await canon_stream_write(StreamType(U8Type()), opts, task, wsi3, 0, 4)
11771177
result,n = unpack_result(ret)
@@ -1267,7 +1267,7 @@ async def core_func(task, args):
12671267
[packed] = await canon_stream_new(StreamType(U8Type()), task)
12681268
rsi3,wsi3 = unpack_new_ends(packed)
12691269
[ret] = await canon_lower(opts, ft, host_import, task, [rsi3, retp])
1270-
assert(ret == 0)
1270+
assert(ret == Subtask.State.RETURNED)
12711271
rsi4 = mem[16]
12721272
assert(rsi4 == 4)
12731273
[ret] = await canon_stream_write(StreamType(U8Type()), opts, task, wsi3, 0, 4)
@@ -1370,7 +1370,7 @@ async def core_func(task, args):
13701370
assert(ret == definitions.BLOCKED)
13711371
retp = 8
13721372
[ret] = await canon_lower(opts, host_ft, host_import, task, [rsi, retp])
1373-
assert(ret == 0)
1373+
assert(ret == Subtask.State.RETURNED)
13741374
rsi2 = int.from_bytes(mem[retp : retp+4], 'little', signed=False)
13751375
assert(rsi2 == 1)
13761376
try:
@@ -1408,7 +1408,7 @@ async def core_func(task, args):
14081408
assert(len(args) == 0)
14091409
retp = 4
14101410
[ret] = await canon_lower(opts, source_ft, host_source, task, [retp])
1411-
assert(ret == 0)
1411+
assert(ret == Subtask.State.RETURNED)
14121412
rsi = mem[retp]
14131413
assert(rsi == 1)
14141414
[ret] = await canon_stream_read(StreamType(U8Type()), opts, task, rsi, 0, 4)
@@ -1437,7 +1437,7 @@ async def core_func(task, args):
14371437
assert(rsi == 1)
14381438
assert(wsi == 3)
14391439
[ret] = await canon_lower(opts, sink_ft, host_sink, task, [rsi])
1440-
assert(ret == 0)
1440+
assert(ret == Subtask.State.RETURNED)
14411441
mem[0:6] = b'\x01\x02\x03\x04\x05\x06'
14421442
[ret] = await canon_stream_write(StreamType(U8Type()), opts, task, wsi, 0, 6)
14431443
result,n = unpack_result(ret)
@@ -1538,7 +1538,7 @@ async def core_func2(task, args):
15381538

15391539
retp = 16
15401540
[ret] = await canon_lower(opts2, ft1, func1, task, [retp])
1541-
assert(ret == 0)
1541+
assert(ret == Subtask.State.RETURNED)
15421542
rsi = mem2[retp]
15431543
assert(rsi == 1)
15441544

@@ -1649,7 +1649,7 @@ async def core_func2(task, args):
16491649

16501650
retp = 0
16511651
[ret] = await canon_lower(opts2, ft1, func1, task, [retp])
1652-
assert(ret == 0)
1652+
assert(ret == Subtask.State.RETURNED)
16531653
rsi = mem2[0]
16541654
assert(rsi == 1)
16551655

@@ -1715,7 +1715,7 @@ async def core_func(task, args):
17151715
[packed] = await canon_stream_new(StreamType(U8Type()), task)
17161716
rsi,wsi = unpack_new_ends(packed)
17171717
[ret] = await canon_lower(lower_opts, host_ft1, host_func1, task, [rsi])
1718-
assert(ret == 0)
1718+
assert(ret == Subtask.State.RETURNED)
17191719
mem[0:4] = b'\x0a\x0b\x0c\x0d'
17201720
[ret] = await canon_stream_write(StreamType(U8Type()), lower_opts, task, wsi, 0, 4)
17211721
assert(ret == definitions.BLOCKED)
@@ -1732,7 +1732,7 @@ async def core_func(task, args):
17321732
[packed] = await canon_stream_new(StreamType(U8Type()), task)
17331733
rsi,wsi = unpack_new_ends(packed)
17341734
[ret] = await canon_lower(lower_opts, host_ft1, host_func1, task, [rsi])
1735-
assert(ret == 0)
1735+
assert(ret == Subtask.State.RETURNED)
17361736
mem[0:4] = b'\x01\x02\x03\x04'
17371737
[ret] = await canon_stream_write(StreamType(U8Type()), lower_opts, task, wsi, 0, 4)
17381738
assert(ret == definitions.BLOCKED)
@@ -1748,7 +1748,7 @@ async def core_func(task, args):
17481748

17491749
retp = 16
17501750
[ret] = await canon_lower(lower_opts, host_ft2, host_func2, task, [retp])
1751-
assert(ret == 0)
1751+
assert(ret == Subtask.State.RETURNED)
17521752
rsi = mem[retp]
17531753
[ret] = await canon_stream_read(StreamType(U8Type()), lower_opts, task, rsi, 0, 4)
17541754
assert(ret == definitions.BLOCKED)
@@ -1758,7 +1758,7 @@ async def core_func(task, args):
17581758
[] = await canon_stream_close_readable(StreamType(U8Type()), task, rsi)
17591759

17601760
[ret] = await canon_lower(lower_opts, host_ft2, host_func2, task, [retp])
1761-
assert(ret == 0)
1761+
assert(ret == Subtask.State.RETURNED)
17621762
rsi = mem[retp]
17631763
[ret] = await canon_stream_read(StreamType(U8Type()), lower_opts, task, rsi, 0, 4)
17641764
assert(ret == definitions.BLOCKED)
@@ -1868,7 +1868,7 @@ async def core_func(task, args):
18681868
rfi,wfi = unpack_new_ends(packed)
18691869
retp = 16
18701870
[ret] = await canon_lower(lower_opts, host_ft1, host_func, task, [rfi, retp])
1871-
assert(ret == 0)
1871+
assert(ret == Subtask.State.RETURNED)
18721872
rfi = mem[retp]
18731873

18741874
readp = 0
@@ -1897,7 +1897,7 @@ async def core_func(task, args):
18971897
[packed] = await canon_future_new(FutureType(U8Type()), task)
18981898
rfi,wfi = unpack_new_ends(packed)
18991899
[ret] = await canon_lower(lower_opts, host_ft1, host_func, task, [rfi, retp])
1900-
assert(ret == 0)
1900+
assert(ret == Subtask.State.RETURNED)
19011901
rfi = mem[retp]
19021902

19031903
readp = 0

0 commit comments

Comments
 (0)