From 9d57b55f24a7eadea057f06d2dd349ff361dc68d Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 31 May 2024 20:32:29 +0200 Subject: [PATCH] LibJS/Bytecode: Make Generator aware of the function it's compiling --- Userland/Libraries/LibJS/Bytecode/Generator.cpp | 5 +++-- Userland/Libraries/LibJS/Bytecode/Generator.h | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibJS/Bytecode/Generator.cpp b/Userland/Libraries/LibJS/Bytecode/Generator.cpp index fb3bf891022..70e6a8a7d56 100644 --- a/Userland/Libraries/LibJS/Bytecode/Generator.cpp +++ b/Userland/Libraries/LibJS/Bytecode/Generator.cpp @@ -17,7 +17,7 @@ namespace JS::Bytecode { -Generator::Generator(VM& vm, MustPropagateCompletion must_propagate_completion) +Generator::Generator(VM& vm, GCPtr function, MustPropagateCompletion must_propagate_completion) : m_vm(vm) , m_string_table(make()) , m_identifier_table(make()) @@ -25,6 +25,7 @@ Generator::Generator(VM& vm, MustPropagateCompletion must_propagate_completion) , m_constants(vm.heap()) , m_accumulator(*this, Operand(Register::accumulator())) , m_must_propagate_completion(must_propagate_completion == MustPropagateCompletion::Yes) + , m_function(function) { } @@ -199,7 +200,7 @@ CodeGenerationErrorOr Generator::emit_function_declaration_instantiation(E CodeGenerationErrorOr> Generator::compile(VM& vm, ASTNode const& node, FunctionKind enclosing_function_kind, GCPtr function, MustPropagateCompletion must_propagate_completion) { - Generator generator(vm, must_propagate_completion); + Generator generator(vm, function, must_propagate_completion); generator.switch_to_basic_block(generator.make_block()); SourceLocationScope scope(generator, node); diff --git a/Userland/Libraries/LibJS/Bytecode/Generator.h b/Userland/Libraries/LibJS/Bytecode/Generator.h index aeb7eceba25..a8dc8885392 100644 --- a/Userland/Libraries/LibJS/Bytecode/Generator.h +++ b/Userland/Libraries/LibJS/Bytecode/Generator.h @@ -353,7 +353,7 @@ private: void generate_scoped_jump(JumpType); void generate_labelled_jump(JumpType, DeprecatedFlyString const& label); - Generator(VM&, MustPropagateCompletion); + Generator(VM&, GCPtr, MustPropagateCompletion); ~Generator() = default; void grow(size_t); @@ -393,6 +393,8 @@ private: bool m_finished { false }; bool m_must_propagate_completion { true }; + + GCPtr m_function; }; }