mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 08:38:12 +00:00
LibJS/Bytecode: Add codegen for ImportCall
Also moved most of the AST ImportCall::execute() into a helper so we can share the code.
This commit is contained in:
parent
eb9298b54e
commit
8a5e71256d
8 changed files with 160 additions and 89 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2021-2023, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2021-2023, Linus Groh <linusg@serenityos.org>
|
||||
* Copyright (c) 2021, Gunnar Beutner <gbeutner@serenityos.org>
|
||||
*
|
||||
|
@ -244,6 +244,23 @@ ThrowCompletionOr<void> Append::execute_impl(Bytecode::Interpreter& interpreter)
|
|||
return {};
|
||||
}
|
||||
|
||||
ThrowCompletionOr<void> ImportCall::execute_impl(Bytecode::Interpreter& interpreter) const
|
||||
{
|
||||
auto& vm = interpreter.vm();
|
||||
auto specifier = interpreter.reg(m_specifier);
|
||||
auto options_value = interpreter.reg(m_options);
|
||||
interpreter.accumulator() = TRY(perform_import_call(vm, specifier, options_value));
|
||||
return {};
|
||||
}
|
||||
|
||||
void ImportCall::replace_references_impl(Register from, Register to)
|
||||
{
|
||||
if (m_specifier == from)
|
||||
m_specifier = to;
|
||||
if (m_options == from)
|
||||
m_options = to;
|
||||
}
|
||||
|
||||
// FIXME: Since the accumulator is a Value, we store an object there and have to convert back and forth between that an Iterator records. Not great.
|
||||
// Make sure to put this into the accumulator before the iterator object disappears from the stack to prevent the members from being GC'd.
|
||||
static Object* iterator_to_object(VM& vm, Iterator iterator)
|
||||
|
@ -1552,4 +1569,9 @@ DeprecatedString BlockDeclarationInstantiation::to_deprecated_string_impl(Byteco
|
|||
return "BlockDeclarationInstantiation"sv;
|
||||
}
|
||||
|
||||
DeprecatedString ImportCall::to_deprecated_string_impl(Bytecode::Executable const&) const
|
||||
{
|
||||
return DeprecatedString::formatted("ImportCall specifier:{} options:{}"sv, m_specifier, m_options);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue