Skip to content

Commit

Permalink
Add CompilerContext class
Browse files Browse the repository at this point in the history
  • Loading branch information
adazem009 committed Dec 30, 2024
1 parent e8d2abe commit dde8dad
Show file tree
Hide file tree
Showing 8 changed files with 104 additions and 0 deletions.
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ if (LIBSCRATCHCPP_USE_LLVM)
target_sources(scratchcpp
PUBLIC
include/scratchcpp/dev/compiler.h
include/scratchcpp/dev/compilercontext.h
include/scratchcpp/dev/compilervalue.h
include/scratchcpp/dev/compilerconstant.h
include/scratchcpp/dev/compilerlocalvariable.h
Expand Down
30 changes: 30 additions & 0 deletions include/scratchcpp/dev/compilercontext.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include "../global.h"
#include "../spimpl.h"

namespace libscratchcpp
{

class IEngine;
class Target;
class CompilerContextPrivate;

/*! \brief The CompilerContext represents a context for a specific target which is used with the Compiler class. */
class LIBSCRATCHCPP_EXPORT CompilerContext
{
public:
CompilerContext(IEngine *engine, Target *target);
CompilerContext(const CompilerContext &) = delete;
virtual ~CompilerContext() { }

IEngine *engine() const;
Target *target() const;

private:
spimpl::unique_impl_ptr<CompilerContextPrivate> impl;
};

} // namespace libscratchcpp
3 changes: 3 additions & 0 deletions src/dev/engine/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ target_sources(scratchcpp
compiler.cpp
compiler_p.cpp
compiler_p.h
compilercontext.cpp
compilercontext_p.cpp
compilercontext_p.h
compilervalue.cpp
compilervalue_p.cpp
compilervalue_p.h
Expand Down
25 changes: 25 additions & 0 deletions src/dev/engine/compilercontext.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// SPDX-License-Identifier: Apache-2.0

#include <scratchcpp/dev/compilercontext.h>

#include "compilercontext_p.h"

using namespace libscratchcpp;

/*! Constructs CompilerContext. */
CompilerContext::CompilerContext(IEngine *engine, Target *target) :
impl(spimpl::make_unique_impl<CompilerContextPrivate>(engine, target))
{
}

/*! Returns the engine of the project. */
IEngine *CompilerContext::engine() const
{
return impl->engine;
}

/*! Returns the target of this context. */
Target *CompilerContext::target() const
{
return impl->target;
}
11 changes: 11 additions & 0 deletions src/dev/engine/compilercontext_p.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// SPDX-License-Identifier: Apache-2.0

#include "compilercontext_p.h"

using namespace libscratchcpp;

CompilerContextPrivate::CompilerContextPrivate(IEngine *engine, Target *target) :
engine(engine),
target(target)
{
}
19 changes: 19 additions & 0 deletions src/dev/engine/compilercontext_p.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// SPDX-License-Identifier: Apache-2.0

#pragma once

namespace libscratchcpp
{

class IEngine;
class Target;

struct CompilerContextPrivate
{
CompilerContextPrivate(IEngine *engine, Target *target);

IEngine *engine = nullptr;
Target *target = nullptr;
};

} // namespace libscratchcpp
1 change: 1 addition & 0 deletions test/dev/compiler/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
add_executable(
compiler_test
compiler_test.cpp
compilercontext_test.cpp
compilervalue_test.cpp
compilerconstant_test.cpp
compilerlocalvariable_test.cpp
Expand Down
14 changes: 14 additions & 0 deletions test/dev/compiler/compilercontext_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#include <scratchcpp/dev/compilercontext.h>
#include <enginemock.h>
#include <targetmock.h>

using namespace libscratchcpp;

TEST(CompilerContextTest, Constructors)
{
EngineMock engine;
TargetMock target;
CompilerContext ctx(&engine, &target);
ASSERT_EQ(ctx.engine(), &engine);
ASSERT_EQ(ctx.target(), &target);
}

0 comments on commit dde8dad

Please sign in to comment.