• Simon Zünd's avatar
    Implement top-level await for REPL mode · 5bddc0e1
    Simon Zünd authored
    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/+/1900464Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
    Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
    Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
    Commit-Queue: Simon Zünd <szuend@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#65273}
    5bddc0e1
Name
Last commit
Last update
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.flake8 Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
COMMON_OWNERS Loading commit data...
DEPS Loading commit data...
ENG_REVIEW_OWNERS Loading commit data...
INFRA_OWNERS Loading commit data...
INTL_OWNERS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
MIPS_OWNERS Loading commit data...
OWNERS Loading commit data...
PPC_OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...