• 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
..
bugs/harmony Loading commit data...
debug Loading commit data...
protocol Loading commit data...
regress Loading commit data...
wrapper Loading commit data...
BUILD.gn Loading commit data...
OWNERS Loading commit data...
debugger.status Loading commit data...
test-api.js Loading commit data...
testcfg.py Loading commit data...