• Sathya Gunasekaran's avatar
    [class] Fix class field name initialization · bc324dbd
    Sathya Gunasekaran authored
    Previously when class names were computed and set as part of
    StoreDataPropertyInLiteral calls, it was observable to static fields
    as these static fields are initialized right after the classes were
    constructed but before the class names were installed.
    This caused the name property to be undefined for this case.
    
    Instead, this patch always forces the creation of a name property on
    the class constructor when static class fields are used. This patch
    does kill the class boilerplate optimization, but currently all static
    class fields are installed using a runtime call to CreateDataProperty
    so this isn't any worse when using static class fields.
    
    In the future, this can be optimized away by storing the name on the
    boilerplate.
    
    There is spec discussion here:
    https://github.com/tc39/proposal-class-fields/issues/85
    
    There isn't a resolution yet, there's still discussion about whether
    to have the name be undefined always for static class field
    initializers. But, I don't think that's useful as it would always kill
    our boilerplate optimization (like this patch does ..., but without the
    future optimization potential).
    
    Bug: v8:5367
    Change-Id: I14afdf7ece3f2d9fa3c659d2c0bc3806e0b17abb
    Reviewed-on: https://chromium-review.googlesource.com/c/1281002Reviewed-by: 's avatarMythri Alle <mythria@chromium.org>
    Reviewed-by: 's avatarDaniel Ehrenberg <littledan@chromium.org>
    Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
    Commit-Queue: Sathya Gunasekaran <gsathya@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#56686}
    bc324dbd
Name
Last commit
Last update
benchmarks 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...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...