From 40e7101a05e2d8f67abf16a0b12dfe02481bc60f Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Sat, 7 Oct 2023 10:54:13 +0200 Subject: [PATCH] Add target property to Compiler --- include/scratchcpp/compiler.h | 3 ++- src/engine/compiler.cpp | 9 +++++++-- src/engine/compiler_p.cpp | 5 +++-- src/engine/compiler_p.h | 5 +++-- src/engine/internal/engine.cpp | 2 +- test/compiler/compiler_test.cpp | 10 ++++++++-- 6 files changed, 24 insertions(+), 10 deletions(-) diff --git a/include/scratchcpp/compiler.h b/include/scratchcpp/compiler.h index f316ac25..e2a4e76c 100644 --- a/include/scratchcpp/compiler.h +++ b/include/scratchcpp/compiler.h @@ -34,7 +34,7 @@ class LIBSCRATCHCPP_EXPORT Compiler IfStatement }; - Compiler(IEngine *engine); + Compiler(IEngine *engine, Target *target = nullptr); Compiler(const Compiler &) = delete; void init(); @@ -44,6 +44,7 @@ class LIBSCRATCHCPP_EXPORT Compiler const std::vector &bytecode() const; IEngine *engine() const; + Target *target() const; const std::vector &constInputValues() const; std::vector constValues() const; diff --git a/src/engine/compiler.cpp b/src/engine/compiler.cpp index f3901e9e..221dc9cf 100644 --- a/src/engine/compiler.cpp +++ b/src/engine/compiler.cpp @@ -14,8 +14,8 @@ using namespace libscratchcpp; using namespace vm; /*! Constructs Compiler. */ -Compiler::Compiler(IEngine *engine) : - impl(spimpl::make_unique_impl(engine)) +Compiler::Compiler(IEngine *engine, Target *target) : + impl(spimpl::make_unique_impl(engine, target)) { } @@ -87,6 +87,11 @@ IEngine *Compiler::engine() const return impl->engine; } +Target *Compiler::target() const +{ + return impl->target; +} + /*! Returns the list of constant input values. */ const std::vector &Compiler::constInputValues() const { diff --git a/src/engine/compiler_p.cpp b/src/engine/compiler_p.cpp index 7df13726..cf4b23e1 100644 --- a/src/engine/compiler_p.cpp +++ b/src/engine/compiler_p.cpp @@ -7,8 +7,9 @@ using namespace libscratchcpp; using namespace vm; -CompilerPrivate::CompilerPrivate(IEngine *engine) : - engine(engine) +CompilerPrivate::CompilerPrivate(IEngine *engine, Target *target) : + engine(engine), + target(target) { assert(engine); } diff --git a/src/engine/compiler_p.h b/src/engine/compiler_p.h index 0fab8fbe..6de6b8db 100644 --- a/src/engine/compiler_p.h +++ b/src/engine/compiler_p.h @@ -11,7 +11,7 @@ namespace libscratchcpp struct CompilerPrivate { - CompilerPrivate(IEngine *engine); + CompilerPrivate(IEngine *engine, Target *target); CompilerPrivate(const CompilerPrivate &) = delete; void addInstruction(vm::Opcode opcode, std::initializer_list args = {}); @@ -20,7 +20,8 @@ struct CompilerPrivate void substackEnd(); - IEngine *engine; + IEngine *engine = nullptr; + Target *target = nullptr; std::shared_ptr block; std::vector, std::shared_ptr>, Compiler::SubstackType>> substackTree; diff --git a/src/engine/internal/engine.cpp b/src/engine/internal/engine.cpp index 2192aaf4..e4190948 100644 --- a/src/engine/internal/engine.cpp +++ b/src/engine/internal/engine.cpp @@ -84,7 +84,7 @@ void Engine::compile() for (auto target : m_targets) { std::cout << "Compiling scripts in target " << target->name() << "..." << std::endl; std::unordered_map procedureBytecodeMap; - Compiler compiler(this); + Compiler compiler(this, target.get()); auto blocks = target->blocks(); for (auto block : blocks) { if (block->topLevel()) { diff --git a/test/compiler/compiler_test.cpp b/test/compiler/compiler_test.cpp index fd778ba0..97b38abb 100644 --- a/test/compiler/compiler_test.cpp +++ b/test/compiler/compiler_test.cpp @@ -44,8 +44,14 @@ class CompilerTest : public testing::Test TEST_F(CompilerTest, Constructors) { Engine engine; - Compiler compiler(&engine); - ASSERT_EQ(compiler.engine(), &engine); + Compiler compiler1(&engine); + ASSERT_EQ(compiler1.engine(), &engine); + ASSERT_EQ(compiler1.target(), nullptr); + + Sprite sprite; + Compiler compiler2(&engine, &sprite); + ASSERT_EQ(compiler2.engine(), &engine); + ASSERT_EQ(compiler2.target(), &sprite); } TEST_F(CompilerTest, Block)