Просмотр исходного кода

LibJS: Treat the Catch binding identifier as a var binding

Ali Mohammad Pur 3 лет назад
Родитель
Сommit
da296ffd56
1 измененных файлов с 4 добавлено и 2 удалено
  1. 4 2
      Userland/Libraries/LibJS/Parser.cpp

+ 4 - 2
Userland/Libraries/LibJS/Parser.cpp

@@ -82,13 +82,15 @@ public:
         return scope_pusher;
         return scope_pusher;
     }
     }
 
 
-    static ScopePusher catch_scope(Parser& parser, RefPtr<BindingPattern> const& pattern)
+    static ScopePusher catch_scope(Parser& parser, RefPtr<BindingPattern> const& pattern, FlyString const& parameter)
     {
     {
         ScopePusher scope_pusher(parser, nullptr, false);
         ScopePusher scope_pusher(parser, nullptr, false);
         if (pattern) {
         if (pattern) {
             pattern->for_each_bound_name([&](auto const& name) {
             pattern->for_each_bound_name([&](auto const& name) {
                 scope_pusher.m_forbidden_var_names.set(name);
                 scope_pusher.m_forbidden_var_names.set(name);
             });
             });
+        } else if (!parameter.is_empty()) {
+            scope_pusher.m_var_names.set(parameter);
         }
         }
         return scope_pusher;
         return scope_pusher;
     }
     }
@@ -2709,7 +2711,7 @@ NonnullRefPtr<CatchClause> Parser::parse_catch_clause()
         bound_names.set(parameter);
         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();
     auto body = parse_block_statement();
 
 
     body->for_each_lexically_declared_name([&](auto const& name) {
     body->for_each_lexically_declared_name([&](auto const& name) {