mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 16:18:12 +00:00
LibJS: Make class definition evaluation work in bytecode mode
Instead of assuming that there's an active AST interpreter, this code now takes VM& everywhere and invokes the appropriate interpreter. 92 new passes on test262. :^)
This commit is contained in:
parent
66936a0d61
commit
8450948458
4 changed files with 38 additions and 39 deletions
|
@ -1137,16 +1137,15 @@ ThrowCompletionOr<void> IteratorResultValue::execute_impl(Bytecode::Interpreter&
|
|||
|
||||
ThrowCompletionOr<void> NewClass::execute_impl(Bytecode::Interpreter& interpreter) const
|
||||
{
|
||||
auto& vm = interpreter.vm();
|
||||
auto name = m_class_expression.name();
|
||||
auto scope = interpreter.ast_interpreter_scope(interpreter.realm());
|
||||
auto& ast_interpreter = scope.interpreter();
|
||||
|
||||
ECMAScriptFunctionObject* class_object = nullptr;
|
||||
|
||||
if (!m_class_expression.has_name() && m_lhs_name.has_value())
|
||||
class_object = TRY(m_class_expression.class_definition_evaluation(ast_interpreter, {}, m_lhs_name.value()));
|
||||
class_object = TRY(m_class_expression.class_definition_evaluation(vm, {}, m_lhs_name.value()));
|
||||
else
|
||||
class_object = TRY(m_class_expression.class_definition_evaluation(ast_interpreter, name, name.is_null() ? ""sv : name));
|
||||
class_object = TRY(m_class_expression.class_definition_evaluation(vm, name, name.is_null() ? ""sv : name));
|
||||
|
||||
class_object->set_source_text(m_class_expression.source_text());
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue