Skip to content

Commit afea1c3

Browse files
authored
Merge pull request #57 from WebAssembly/resolve
Modify spec to use Promise.resolve on result of call to suspending function.
2 parents ce7705f + 470c8f2 commit afea1c3

File tree

1 file changed

+20
-15
lines changed

1 file changed

+20
-15
lines changed

document/js-api/index.bs

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ urlPrefix: https://tc39.github.io/ecma262/; spec: ECMASCRIPT
4242
text: PromiseCapabilityRecord; url: sec-promisecapability-records
4343
text: EvaluateCall; url: sec-evaluatecall
4444
text: ExecutionContext; url: sec-execution-contexts
45-
text: IsPromise; url: sec-ispromise
45+
text: Promise; url: sec-promise-constructor
46+
text: PromiseResolve; url: sec-promise-resolve
4647
text: PerformPromiseThen; url: sec-performpromisethen
4748
text: Execution Context Stack; url: execution-context-stack
4849
type: dfn
@@ -1488,20 +1489,24 @@ To <dfn>create a suspending function</dfn> from a JavaScript function |func|, wi
14881489
1. If |ret|.\[[Type]] is <emu-const>throw</emu-const>, then:
14891490
1. Let |type|, |payload| and |opaqueData| be the result of [=coerce a JavaScript exception|coercing the JavaScript exception=] |ret|.\[[Value]].
14901491
1. [=WebAssembly/Throw=] with |type|, |payload| and |opaqueData|.
1491-
1. Otherwise, if [=list/size=] of |ret| is 1 and [$IsPromise$](|ret|.\[[Value]][0]):
1492-
1. Let |promise| be |ret|.\[[Value]][0].
1493-
1. Set the entry for |async_context| in |map| to [=paused=].
1494-
1. Let |awaitResult| be the result of performing [$Completion$]([$Await$](|promise|)).
1495-
1. Note: We only invoke [$Await$] if the call to |func| has returned a Promise object.
1496-
1. Note: This will suspend both this algorithm, and the WebAssembly function being invoked by the [=evaluate a Promising function=] algorithm. On return, |ret| will be either a normal completion or a throw completion.
1497-
1. If the entry for |async_context| in |map| is not [=paused=] then:
1498-
1. Perform [=throw a JavaScript exception=] with a {{SuspendError}}.
1499-
1. Otherwise, set the entry to [=active=].
1500-
1. If |awaitResult|.\[[Type]] is <emu-const>throw</emu-const>, then:
1501-
1. Let |type|, |payload| and |opaqueData| be the result of [=coerce a JavaScript exception|coercing the JavaScript exception=] |ret|.\[[Value]].
1502-
1. [=WebAssembly/Throw=] with |type|, |payload| and |opaqueData|.
1503-
1. Otherwise, return the result of performing [=coerce a JavaScript return=] on |resultTypes| and |awaitResult|.
1504-
1. Otherwise, return the result of performing [=coerce a JavaScript return=] on |resultTypes| and |ret|.
1492+
1. Otherwise,
1493+
1. Let |prRet| be the result of [$PromiseResolve$]({{%Promise%}},|ret|.\[[Value]]).
1494+
1. Assert: |prRet|.\[[Type]] is <emu-const>throw</emu-const> or <emu-const>normal</emu-const>.
1495+
1. If |prRet|.\[[Type]] is <emu-const>throw</emu-const>, then:
1496+
1. Let |type|, |payload| and |opaqueData| be the result of [=coerce a JavaScript exception|coercing the JavaScript exception=] |ret|.\[[Value]].
1497+
1. [=WebAssembly/Throw=] with |type|, |payload| and |opaqueData|.
1498+
1. Otherwise,
1499+
1. Let |promise| be |prRet|.\[[Value]].
1500+
1. Set the entry for |async_context| in |map| to [=paused=].
1501+
1. Let |awaitResult| be the result of performing [$Completion$]([$Await$](|promise|)).
1502+
1. Note: This will suspend both this algorithm, and the WebAssembly function being invoked by the [=evaluate a Promising function=] algorithm. On return, |ret| will be either a normal completion or a throw completion.
1503+
1. If the entry for |async_context| in |map| is not [=paused=] then:
1504+
1. Perform [=throw a JavaScript exception=] with a {{SuspendError}}.
1505+
1. Otherwise, set the entry to [=active=].
1506+
1. If |awaitResult|.\[[Type]] is <emu-const>throw</emu-const>, then:
1507+
1. Let |type|, |payload| and |opaqueData| be the result of [=coerce a JavaScript exception|coercing the JavaScript exception=] |ret|.\[[Value]].
1508+
1. [=WebAssembly/Throw=] with |type|, |payload| and |opaqueData|.
1509+
1. Otherwise, return the result of performing [=coerce a JavaScript return=] on |resultTypes| and |awaitResult|.
15051510
1. Let |store| be the [=surrounding agent=]'s [=associated store=].
15061511
1. Let (|store|, |funcaddr|) be [=func_alloc=](|store|, |functype|, |hostfunc|).
15071512
1. Set the [=surrounding agent=]'s [=associated store=] to |store|.

0 commit comments

Comments
 (0)