[parser] Don't mark sloppy block functions as assigned
When preparsing and detecting a sloppy block function redefinition then don't mark the variable as assigned to make it consistent with the eager parser. Bug: chromium:1053364 Change-Id: Iec7c24db80014bfe73ee41a4f3bb7a41a354cef2 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2241511 Auto-Submit: Dan Elphick <delphick@chromium.org> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Commit-Queue: Dan Elphick <delphick@chromium.org> Cr-Commit-Position: refs/heads/master@{#68415}
This commit is contained in:
parent
a6e7ae647d
commit
92cd4d1ea2
@ -325,10 +325,6 @@ PreParser::Expression PreParser::ParseFunctionLiteral(
|
||||
// Parsing the body may change the language mode in our scope.
|
||||
language_mode = function_scope->language_mode();
|
||||
|
||||
if (is_sloppy(language_mode)) {
|
||||
function_scope->HoistSloppyBlockFunctions(nullptr);
|
||||
}
|
||||
|
||||
// Validate name and parameter names. We can do this only after parsing the
|
||||
// function, since the function can declare itself strict.
|
||||
CheckFunctionName(language_mode, function_name, function_name_validity,
|
||||
|
20
test/mjsunit/regress/regress-crbug-1053364.js
Normal file
20
test/mjsunit/regress/regress-crbug-1053364.js
Normal file
@ -0,0 +1,20 @@
|
||||
// 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.
|
||||
|
||||
// Flags: --throws
|
||||
|
||||
function main() {
|
||||
function g() {
|
||||
function h() {
|
||||
f;
|
||||
}
|
||||
{
|
||||
function f() {}
|
||||
}
|
||||
f;
|
||||
throw new Error();
|
||||
}
|
||||
g();
|
||||
}
|
||||
main();
|
Loading…
Reference in New Issue
Block a user