1. 09 Nov, 2021 1 commit
    • Joyee Cheung's avatar
      [class] fix evaluation order and errors in private accessor assignments · f77b05d4
      Joyee Cheung authored
      In assignments the lhs should be evaluated first and shouldn't be
      re-evaluated when the value of the rhs is available. Fix it by
      saving the receiver and the key registers into AssignmentLhsData
      before building the assignment and use them later, instead of visiting
      the AST again to retrieve the receiver.
      
      In addition, now that we save the receiver register, use it to
      perform the brand check even when we know for sure that it's
      going to fail later because it's a write to a private
      method or accessing the accessor in the wrong way (v8:11364),
      so that the brand check error always appears first if it is present,
      as specified in
      https://tc39.es/proposal-private-methods/#sec-privatefieldget
      
      Drive-by: unify the brand check error messages, and replace "Object"
      with "Receiver" in the messages for clarity. The instance private
      brand check now throws "Receiver must be an instance of class <name>"
      and the static private brand check now throws "Receiver must be
      class <name>". Also always set the expression position to the
      property load position, because the brand check failure comes from
      the load operation.
      
      Bug: v8:12352, v8:11364
      Change-Id: I61a8979b2e02b561dd5b2b35f9e0b6691fe07599
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3266964
      Commit-Queue: Joyee Cheung <joyee@igalia.com>
      Reviewed-by: 's avatarMarja Hölttä <marja@chromium.org>
      Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
      Cr-Commit-Position: refs/heads/main@{#77797}
      f77b05d4