• 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
Name
Last commit
Last update
.github Loading commit data...
bazel Loading commit data...
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...
.bazelrc 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...
.mailmap Loading commit data...
.vpython Loading commit data...
.vpython3 Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.bazel Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
COMMON_OWNERS Loading commit data...
DEPS Loading commit data...
DIR_METADATA 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...
LOONG_OWNERS 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...
RISCV_OWNERS Loading commit data...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
WORKSPACE Loading commit data...
codereview.settings Loading commit data...