• 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
..
OWNERS Loading commit data...
ast-function-literal-id-reindexer.cc Loading commit data...
ast-function-literal-id-reindexer.h Loading commit data...
ast-source-ranges.h Loading commit data...
ast-traversal-visitor.h Loading commit data...
ast-value-factory.cc Loading commit data...
ast-value-factory.h Loading commit data...
ast.cc Loading commit data...
ast.h Loading commit data...
modules.cc Loading commit data...
modules.h Loading commit data...
prettyprinter.cc Loading commit data...
prettyprinter.h Loading commit data...
scopes.cc Loading commit data...
scopes.h Loading commit data...
source-range-ast-visitor.cc Loading commit data...
source-range-ast-visitor.h Loading commit data...
variables.cc Loading commit data...
variables.h Loading commit data...