1. 09 Feb, 2021 1 commit
    • Shu-yu Guo's avatar
      Set is_awaiting on async generators after await's Promise machinery · 8efed0f9
      Shu-yu Guo authored
      The is_awaiting bit on async generators distinguishes waiting on an
      await. When the async generator resumes from an await, the is_awaiting
      bit is cleared.
      
      It is possible through overriding Promise#constructor that `await`
      throws *after* setting is_awaiting. There is an implicit try-catch
      around the body of the async generator such that, usually, caught
      exceptions would clear the is_awaiting bit. However, the exception
      thrown from a monkeypatched Promise#constructor can be caught by script,
      and thus never clear the is_awaiting bit.
      
      This CL sets the is_awaiting bit *after* `await` completes, with the
      exception of the return resumption. It is not possible to have the
      exception thrown by the await in the return resumption be caught by
      script.
      
      Bug: chromium:1171667
      Change-Id: I0b615617a5c949f03350ab0f06c42920d43b5488
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2659508Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
      Commit-Queue: Shu-yu Guo <syg@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#72593}
      8efed0f9