• Simon Zünd's avatar
    Reland "Implement top-level await for REPL mode" · f96f9312
    Simon Zünd authored
    This is a reland of 5bddc0e1
    
    The original CL was speculatively reverted as it was suspected to
    cause failures on the non-determinism bot. This was ultimately
    confirmed to not be the case, so this CL is safe to reland as-is.
    
    Original change's description:
    > Implement top-level await for REPL mode
    >
    > Design doc: bit.ly/v8-repl-mode
    >
    > This CL allows the usage of 'await' without wrapping code in an async
    > function when using REPL mode in global evaluate. REPL mode evaluate
    > is changed to *always* return a Promise. The resolve value of the
    > promise is the completion value of the REPL script.
    >
    > The implementation is based on two existing mechanisms:
    >   - Similar to async functions, the content of a REPL script is
    >     enclosed in a synthetic 'try' block. Any thrown error
    >     is used to reject the Promise of the REPL script.
    >
    >   - The content of the synthetic 'try' block is also re-written the
    >     same way a normal script is. This is, artificial assignments to
    >     a ".result" variable are inserted to simulate a completion
    >     value. The difference for REPL scripts is, that ".result" is
    >     used to resolve the Promise of the REPL script.
    >
    >   - ".result" is not returned directly but wrapped in an object
    >     literal: "{ .repl_result: .result}". This is done to prevent
    >     resolved promises from being chained and resolved prematurely:
    >
    >     > Promse.resolve(42);
    >
    >     should evaluate to a promise, not 42.
    >
    > Bug: chromium:1021921
    > Change-Id: I00a5aafd9126ca7c97d09cd8787a3aec2821a67f
    > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1900464
    > Reviewed-by: Yang Guo <yangguo@chromium.org>
    > Reviewed-by: Leszek Swirski <leszeks@chromium.org>
    > Reviewed-by: Toon Verwaest <verwaest@chromium.org>
    > Commit-Queue: Simon Zünd <szuend@chromium.org>
    > Cr-Commit-Position: refs/heads/master@{#65273}
    
    TBR: yangguo@chromium.org,verwaest@chromium.org
    Bug: chromium:1021921
    Change-Id: I95c5dc17593161009a533188f91b4cd67234c32f
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1954388Reviewed-by: 's avatarSimon Zünd <szuend@chromium.org>
    Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
    Commit-Queue: Simon Zünd <szuend@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#65360}
    f96f9312
Name
Last commit
Last update
..
benchmarks Loading commit data...
cctest Loading commit data...
common Loading commit data...
debugger Loading commit data...
fuzzer Loading commit data...
inspector Loading commit data...
intl Loading commit data...
js-perf-test Loading commit data...
memory Loading commit data...
message Loading commit data...
mjsunit Loading commit data...
mkgrokdump Loading commit data...
mozilla Loading commit data...
test262 Loading commit data...
torque Loading commit data...
unittests Loading commit data...
wasm-api-tests Loading commit data...
wasm-js Loading commit data...
wasm-spec-tests Loading commit data...
webkit Loading commit data...
BUILD.gn Loading commit data...
OWNERS Loading commit data...