1. 06 Dec, 2019 1 commit
    • 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
  2. 04 Dec, 2019 1 commit
    • Maya Lekova's avatar
      Revert "Implement top-level await for REPL mode" · 99005f33
      Maya Lekova authored
      This reverts commit 5bddc0e1.
      
      Reason for revert: Possible culprit for https://bugs.chromium.org/p/chromium/issues/detail?id=1029863
      
      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,leszeks@chromium.org,verwaest@chromium.org,szuend@chromium.org
      
      # Not skipping CQ checks because original CL landed > 1 day ago.
      
      Bug: chromium:1021921
      Change-Id: I9eaea584e2e09f3dffcbbca3d75a3c9bcb0a1adf
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1948719Reviewed-by: 's avatarMaya Lekova <mslekova@chromium.org>
      Commit-Queue: Maya Lekova <mslekova@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#65333}
      99005f33
  3. 02 Dec, 2019 1 commit
    • 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