mirror of
https://github.com/RGBCube/serenity
synced 2025-05-19 00:25:07 +00:00
LibJS/JIT: Support the EnterObjectEnvironment bytecode instruction
We can now use `with` statements in jitted code. :^)
This commit is contained in:
parent
cfdb8a2756
commit
cb7169d73f
4 changed files with 26 additions and 5 deletions
|
@ -444,6 +444,13 @@ void Interpreter::catch_exception()
|
|||
vm().running_execution_context().lexical_environment = context.lexical_environment;
|
||||
}
|
||||
|
||||
void Interpreter::enter_object_environment(Object& object)
|
||||
{
|
||||
auto& old_environment = vm().running_execution_context().lexical_environment;
|
||||
saved_lexical_environment_stack().append(old_environment);
|
||||
vm().running_execution_context().lexical_environment = new_object_environment(object, true, old_environment);
|
||||
}
|
||||
|
||||
ThrowCompletionOr<NonnullRefPtr<Bytecode::Executable>> compile(VM& vm, ASTNode const& node, FunctionKind kind, DeprecatedFlyString const& name)
|
||||
{
|
||||
auto executable_result = Bytecode::Generator::generate(node, kind);
|
||||
|
@ -743,11 +750,8 @@ ThrowCompletionOr<void> CreateLexicalEnvironment::execute_impl(Bytecode::Interpr
|
|||
|
||||
ThrowCompletionOr<void> EnterObjectEnvironment::execute_impl(Bytecode::Interpreter& interpreter) const
|
||||
{
|
||||
auto& vm = interpreter.vm();
|
||||
auto& old_environment = vm.running_execution_context().lexical_environment;
|
||||
interpreter.saved_lexical_environment_stack().append(old_environment);
|
||||
auto object = TRY(interpreter.accumulator().to_object(vm));
|
||||
vm.running_execution_context().lexical_environment = new_object_environment(object, true, old_environment);
|
||||
auto object = TRY(interpreter.accumulator().to_object(interpreter.vm()));
|
||||
interpreter.enter_object_environment(*object);
|
||||
return {};
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue