Skip to content

Commit e1cba95

Browse files
committed
CABI: change result of async lower on eager return to be more consistent
1 parent 935c478 commit e1cba95

4 files changed

Lines changed: 17 additions & 17 deletions

File tree

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
@@ -3149,7 +3149,7 @@ always returns control flow back to the caller without blocking:
31493149
await subtask.call_async(callee, on_start, on_resolve)
31503150
if subtask.resolved():
31513151
subtask.deliver_resolve()
3152-
return [0]
3152+
return [int(Subtask.State.RETURNED)]
31533153

31543154
subtaski = task.inst.table.add(subtask)
31553155
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
@@ -1953,7 +1953,7 @@ def subtask_event():
19531953
await subtask.call_async(callee, on_start, on_resolve)
19541954
if subtask.resolved():
19551955
subtask.deliver_resolve()
1956-
return [0]
1956+
return [int(Subtask.State.RETURNED)]
19571957

19581958
subtaski = task.inst.table.add(subtask)
19591959
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, [])
@@ -1170,7 +1170,7 @@ async def core_func(task, args):
11701170
retp = 12
11711171
await asyncio.sleep(0)
11721172
[ret] = await canon_lower(opts, ft, host_import, task, [rsi3, retp])
1173-
assert(ret == 0)
1173+
assert(ret == Subtask.State.RETURNED)
11741174
rsi4 = mem[retp]
11751175
[ret] = await canon_stream_write(StreamType(U8Type()), opts, task, wsi3, 0, 4)
11761176
result,n = unpack_result(ret)
@@ -1266,7 +1266,7 @@ async def core_func(task, args):
12661266
[packed] = await canon_stream_new(StreamType(U8Type()), task)
12671267
rsi3,wsi3 = unpack_new_ends(packed)
12681268
[ret] = await canon_lower(opts, ft, host_import, task, [rsi3, retp])
1269-
assert(ret == 0)
1269+
assert(ret == Subtask.State.RETURNED)
12701270
rsi4 = mem[16]
12711271
assert(rsi4 == 4)
12721272
[ret] = await canon_stream_write(StreamType(U8Type()), opts, task, wsi3, 0, 4)
@@ -1369,7 +1369,7 @@ async def core_func(task, args):
13691369
assert(ret == definitions.BLOCKED)
13701370
retp = 8
13711371
[ret] = await canon_lower(opts, host_ft, host_import, task, [rsi, retp])
1372-
assert(ret == 0)
1372+
assert(ret == Subtask.State.RETURNED)
13731373
rsi2 = int.from_bytes(mem[retp : retp+4], 'little', signed=False)
13741374
assert(rsi2 == 1)
13751375
try:
@@ -1407,7 +1407,7 @@ async def core_func(task, args):
14071407
assert(len(args) == 0)
14081408
retp = 4
14091409
[ret] = await canon_lower(opts, source_ft, host_source, task, [retp])
1410-
assert(ret == 0)
1410+
assert(ret == Subtask.State.RETURNED)
14111411
rsi = mem[retp]
14121412
assert(rsi == 1)
14131413
[ret] = await canon_stream_read(StreamType(U8Type()), opts, task, rsi, 0, 4)
@@ -1436,7 +1436,7 @@ async def core_func(task, args):
14361436
assert(rsi == 1)
14371437
assert(wsi == 3)
14381438
[ret] = await canon_lower(opts, sink_ft, host_sink, task, [rsi])
1439-
assert(ret == 0)
1439+
assert(ret == Subtask.State.RETURNED)
14401440
mem[0:6] = b'\x01\x02\x03\x04\x05\x06'
14411441
[ret] = await canon_stream_write(StreamType(U8Type()), opts, task, wsi, 0, 6)
14421442
result,n = unpack_result(ret)
@@ -1537,7 +1537,7 @@ async def core_func2(task, args):
15371537

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

@@ -1648,7 +1648,7 @@ async def core_func2(task, args):
16481648

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

@@ -1714,7 +1714,7 @@ async def core_func(task, args):
17141714
[packed] = await canon_stream_new(StreamType(U8Type()), task)
17151715
rsi,wsi = unpack_new_ends(packed)
17161716
[ret] = await canon_lower(lower_opts, host_ft1, host_func1, task, [rsi])
1717-
assert(ret == 0)
1717+
assert(ret == Subtask.State.RETURNED)
17181718
mem[0:4] = b'\x0a\x0b\x0c\x0d'
17191719
[ret] = await canon_stream_write(StreamType(U8Type()), lower_opts, task, wsi, 0, 4)
17201720
assert(ret == definitions.BLOCKED)
@@ -1731,7 +1731,7 @@ async def core_func(task, args):
17311731
[packed] = await canon_stream_new(StreamType(U8Type()), task)
17321732
rsi,wsi = unpack_new_ends(packed)
17331733
[ret] = await canon_lower(lower_opts, host_ft1, host_func1, task, [rsi])
1734-
assert(ret == 0)
1734+
assert(ret == Subtask.State.RETURNED)
17351735
mem[0:4] = b'\x01\x02\x03\x04'
17361736
[ret] = await canon_stream_write(StreamType(U8Type()), lower_opts, task, wsi, 0, 4)
17371737
assert(ret == definitions.BLOCKED)
@@ -1747,7 +1747,7 @@ async def core_func(task, args):
17471747

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

17591759
[ret] = await canon_lower(lower_opts, host_ft2, host_func2, task, [retp])
1760-
assert(ret == 0)
1760+
assert(ret == Subtask.State.RETURNED)
17611761
rsi = mem[retp]
17621762
[ret] = await canon_stream_read(StreamType(U8Type()), lower_opts, task, rsi, 0, 4)
17631763
assert(ret == definitions.BLOCKED)
@@ -1867,7 +1867,7 @@ async def core_func(task, args):
18671867
rfi,wfi = unpack_new_ends(packed)
18681868
retp = 16
18691869
[ret] = await canon_lower(lower_opts, host_ft1, host_func, task, [rfi, retp])
1870-
assert(ret == 0)
1870+
assert(ret == Subtask.State.RETURNED)
18711871
rfi = mem[retp]
18721872

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

19021902
readp = 0

0 commit comments

Comments
 (0)