From da296ffd56a6ea0967eef1a54d2c7c81bd1043c2 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Fri, 8 Oct 2021 13:34:13 +0330 Subject: [PATCH] LibJS: Treat the Catch binding identifier as a var binding --- Userland/Libraries/LibJS/Parser.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibJS/Parser.cpp b/Userland/Libraries/LibJS/Parser.cpp index 94f803d0f9..0bd68ee8b9 100644 --- a/Userland/Libraries/LibJS/Parser.cpp +++ b/Userland/Libraries/LibJS/Parser.cpp @@ -82,13 +82,15 @@ public: return scope_pusher; } - static ScopePusher catch_scope(Parser& parser, RefPtr const& pattern) + static ScopePusher catch_scope(Parser& parser, RefPtr const& pattern, FlyString const& parameter) { ScopePusher scope_pusher(parser, nullptr, false); if (pattern) { pattern->for_each_bound_name([&](auto const& name) { scope_pusher.m_forbidden_var_names.set(name); }); + } else if (!parameter.is_empty()) { + scope_pusher.m_var_names.set(parameter); } return scope_pusher; } @@ -2709,7 +2711,7 @@ NonnullRefPtr Parser::parse_catch_clause() bound_names.set(parameter); } - ScopePusher catch_scope = ScopePusher::catch_scope(*this, pattern_parameter); + ScopePusher catch_scope = ScopePusher::catch_scope(*this, pattern_parameter, parameter); auto body = parse_block_statement(); body->for_each_lexically_declared_name([&](auto const& name) {