• 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
public-static-class-fields.js 7.06 KB