• 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
parser-base.h 219 KB