1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 19:44:58 +00:00

LibJS: Throw TypeError when calling class constructor without 'new'

This commit is contained in:
Linus Groh 2020-11-11 21:37:40 +00:00 committed by Andreas Kling
parent b07c7f589f
commit 1b0c862f3a
5 changed files with 21 additions and 5 deletions

View file

@ -110,7 +110,7 @@ LexicalEnvironment* ScriptFunction::create_environment()
return environment;
}
Value ScriptFunction::call()
Value ScriptFunction::execute_function_body()
{
auto& vm = this->vm();
@ -150,13 +150,22 @@ Value ScriptFunction::call()
return interpreter->execute_statement(global_object(), m_body, move(arguments), ScopeType::Function);
}
Value ScriptFunction::call()
{
if (m_is_class_constructor) {
vm().throw_exception<TypeError>(global_object(), ErrorType::ClassConstructorWithoutNew, m_name);
return {};
}
return execute_function_body();
}
Value ScriptFunction::construct(Function&)
{
if (m_is_arrow_function) {
vm().throw_exception<TypeError>(global_object(), ErrorType::NotAConstructor, m_name);
return {};
}
return call();
return execute_function_body();
}
JS_DEFINE_NATIVE_GETTER(ScriptFunction::length_getter)