Skip to content

Commit

Permalink
deps: V8: cherry-pick 6a4cd97d6691
Browse files Browse the repository at this point in the history
Original commit message:

    Merged: [parser] Fix AST func reindexing for function fields

    AST reindexing has to skip visiting fields that are already in the
    member initializer, as they will have already been visited when
    visiting said initializer. This is the case for private fields and
    fields with computed names.

    However, the reindexer was incorrectly assuming that all properties
    with a FunctionLiteral value are methods (and thus not fields, and
    can safely be visited). This is not the case for fields with
    function expression values.

    Now, we correctly use the class property's "kind" when making this
    visitation decision.

    (cherry picked from commit a769ea7a4462115579ba87bc16fbffbae01310c1)

    Bug: chromium:1132111
    Tbr: leszeks@chromium.org
    No-Try: true
    No-Presubmit: true
    No-Tree-Checks: true
    Change-Id: I33ac5664bb5334e964d351de1ba7e2c57f3398f8
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2465056
    Commit-Queue: Adam Klein <adamk@chromium.org>
    Reviewed-by: Adam Klein <adamk@chromium.org>
    Cr-Commit-Position: refs/branch-heads/8.6@{#24}
    Cr-Branched-From: a64aed2333abf49e494d2a5ce24bbd14fff19f60-refs/heads/8.6.395@{#1}
    Cr-Branched-From: a626bc036236c9bf92ac7b87dc40c9e538b087e3-refs/heads/master@{#69472}

Refs: v8/v8@6a4cd97

PR-URL: #38275
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Shelley Vohr <codebytere@gmail.com>
  • Loading branch information
targos committed Apr 30, 2021
1 parent b10cce1 commit 86c7c0a
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 5 deletions.
2 changes: 1 addition & 1 deletion common.gypi
Expand Up @@ -36,7 +36,7 @@

# Reset this number to 0 on major V8 upgrades.
# Increment by one for each non-official patch applied to deps/v8.
'v8_embedder_string': '-node.34',
'v8_embedder_string': '-node.35',

##### V8 defaults for Node.js #####

Expand Down
9 changes: 5 additions & 4 deletions deps/v8/src/ast/ast-function-literal-id-reindexer.cc
Expand Up @@ -54,10 +54,10 @@ void AstFunctionLiteralIdReindexer::VisitClassLiteral(ClassLiteral* expr) {
// Private fields have their key and value present in
// instance_members_initializer_function, so they will
// already have been visited.
if (prop->value()->IsFunctionLiteral()) {
Visit(prop->value());
} else {
if (prop->kind() == ClassLiteralProperty::Kind::FIELD) {
CheckVisited(prop->value());
} else {
Visit(prop->value());
}
}
ZonePtrList<ClassLiteral::Property>* props = expr->public_members();
Expand All @@ -67,7 +67,8 @@ void AstFunctionLiteralIdReindexer::VisitClassLiteral(ClassLiteral* expr) {
// Public fields with computed names have their key
// and value present in instance_members_initializer_function, so they will
// already have been visited.
if (prop->is_computed_name() && !prop->value()->IsFunctionLiteral()) {
if (prop->is_computed_name() &&
prop->kind() == ClassLiteralProperty::Kind::FIELD) {
if (!prop->key()->IsLiteral()) {
CheckVisited(prop->key());
}
Expand Down
23 changes: 23 additions & 0 deletions deps/v8/test/mjsunit/regress/regress-1132111.js
@@ -0,0 +1,23 @@
// Copyright 2020 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Public function field with computed name
eval(`
buggy = ((bug = new class { [0] = x => 1337.0; }) => bug);
`);

// Public method with computed name
eval(`
buggy = ((bug = new class { [0](x) { return 1337.0}; }) => bug);
`);

// Private function field with computed name
eval(`
buggy = ((bug = new class { #foo = x => 1337.0; }) => bug);
`);

// Private method with computed name
eval(`
buggy = ((bug = new class { #foo(x) { return 1337.0; } }) => bug);
`);

0 comments on commit 86c7c0a

Please sign in to comment.