Skip to content
This repository has been archived by the owner on Jun 29, 2024. It is now read-only.

Commit

Permalink
feat: Add AbstractPosition
Browse files Browse the repository at this point in the history
Part of #67

All position class must heritate from AbstractPosition class
  • Loading branch information
Gashmob committed Nov 29, 2023
1 parent 245d6b0 commit 13d01ed
Show file tree
Hide file tree
Showing 13 changed files with 45 additions and 34 deletions.
26 changes: 13 additions & 13 deletions src/lib/ast/AST.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ namespace filc::ast {
public:
virtual ~AbstractExpression();

auto setPosition(filc::utils::Position *position) -> void;
auto setPosition(filc::utils::AbstractPosition *position) -> void;

AbstractExpression(const AbstractExpression &other) = default;

Expand All @@ -89,7 +89,7 @@ namespace filc::ast {

auto setExported(bool exported) -> void;

[[nodiscard]] auto getPosition() const -> filc::utils::Position *;
[[nodiscard]] auto getPosition() const -> filc::utils::AbstractPosition *;

[[nodiscard]] auto getExpressionType() const -> std::shared_ptr<AbstractType>;

Expand All @@ -107,7 +107,7 @@ namespace filc::ast {

private:
bool _exported{false};
filc::utils::Position *_position{nullptr};
filc::utils::AbstractPosition *_position{nullptr};
std::shared_ptr<AbstractType> _expression_type;

protected:
Expand Down Expand Up @@ -446,12 +446,12 @@ namespace filc::ast {
[[nodiscard]] virtual auto dumpPreLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> = 0;
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> = 0;

[[nodiscard]] virtual auto dumpPostLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> = 0;
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> = 0;

protected:
Operator() = default;
Expand Down Expand Up @@ -490,12 +490,12 @@ namespace filc::ast {
[[nodiscard]] auto dumpPreLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> override;
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> override;

[[nodiscard]] auto dumpPostLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> override;
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> override;

private:
OPERATOR _operator;
Expand All @@ -514,12 +514,12 @@ namespace filc::ast {
[[nodiscard]] auto dumpPreLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> override;
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> override;

[[nodiscard]] auto dumpPostLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> override;
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> override;

private:
AbstractExpression *_expression;
Expand All @@ -538,12 +538,12 @@ namespace filc::ast {
[[nodiscard]] auto dumpPreLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> override;
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> override;

[[nodiscard]] auto dumpPostLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> override;
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> override;

private:
std::vector<AbstractExpression *> _expressions;
Expand All @@ -562,12 +562,12 @@ namespace filc::ast {
[[nodiscard]] auto dumpPreLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> override;
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> override;

[[nodiscard]] auto dumpPostLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> override;
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> override;

private:
Operator *_inner_operator;
Expand Down
7 changes: 4 additions & 3 deletions src/lib/ast/AbstractExpression.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,11 @@ namespace filc::ast {
_exported = exported;
}

auto AbstractExpression::getPosition() const -> filc::utils::Position * {
auto AbstractExpression::getPosition() const -> filc::utils::AbstractPosition * {
return _position;
}

auto AbstractExpression::setPosition(filc::utils::Position *position) -> void {
auto AbstractExpression::setPosition(filc::utils::AbstractPosition *position) -> void {
_position = position;
}

Expand All @@ -67,8 +67,9 @@ namespace filc::ast {

auto AbstractExpression::addNameToEnvironment(
filc::environment::Environment *environment) const -> void {
auto *position = dynamic_cast<filc::utils::Position *>(getPosition());
auto name = filc::utils::joinString(filc::utils::splitString(environment->getModule(), '.'), "_")
+ "_" + std::to_string(getPosition()->getLine());
+ "_" + std::to_string(position->getLine());
environment->addName(name, getExpressionType());
}

Expand Down
4 changes: 2 additions & 2 deletions src/lib/ast/ArrayOperator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ namespace filc::ast {
auto ArrayOperator::dumpPreLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> {
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> {
collector->addError(new filc::message::DevWarning(
3,
position,
Expand All @@ -56,7 +56,7 @@ namespace filc::ast {
auto ArrayOperator::dumpPostLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> {
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> {
_expression->resolveType(environment, collector, nullptr);
auto expression_type = _expression->getExpressionType();
if (expression_type == nullptr) {
Expand Down
4 changes: 2 additions & 2 deletions src/lib/ast/AssignationOperator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ namespace filc::ast {
auto AssignationOperator::dumpPreLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> {
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> {
collector->addError(new filc::message::DevWarning(
3,
position,
Expand All @@ -56,7 +56,7 @@ namespace filc::ast {
auto AssignationOperator::dumpPostLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> {
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> {
collector->addError(new filc::message::DevWarning(
3,
position,
Expand Down
4 changes: 2 additions & 2 deletions src/lib/ast/ClassicOperator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ namespace filc::ast {
auto ClassicOperator::dumpPreLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> {
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> {
auto ptr = std::make_shared<PointerType>(type);
switch (_operator) {
case PLUSPLUS:
Expand Down Expand Up @@ -118,7 +118,7 @@ namespace filc::ast {
auto ClassicOperator::dumpPostLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> {
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> {
auto ptr = std::make_shared<PointerType>(type);
switch (_operator) {
case PLUSPLUS:
Expand Down
4 changes: 2 additions & 2 deletions src/lib/ast/FunctionOperator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ namespace filc::ast {
auto FunctionOperator::dumpPreLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> {
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> {
collector->addError(new filc::message::DevWarning(
3,
position,
Expand All @@ -58,7 +58,7 @@ namespace filc::ast {
auto FunctionOperator::dumpPostLambdaType(std::shared_ptr<AbstractType> type,
filc::environment::Environment *environment,
filc::message::MessageCollector *collector,
filc::utils::Position *position) const -> std::shared_ptr<LambdaType> {
filc::utils::AbstractPosition *position) const -> std::shared_ptr<LambdaType> {
std::vector<std::shared_ptr<AbstractType>> args_types;
for (const auto &expression: _expressions) {
expression->resolveType(environment, collector, nullptr);
Expand Down
2 changes: 1 addition & 1 deletion src/lib/message/DevWarning.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
#include <utility>

namespace filc::message {
DevWarning::DevWarning(unsigned int code, filc::utils::Position *position, std::string content)
DevWarning::DevWarning(unsigned int code, filc::utils::AbstractPosition *position, std::string content)

Check warning on line 28 in src/lib/message/DevWarning.cpp

View check run for this annotation

Codecov / codecov/patch

src/lib/message/DevWarning.cpp#L28

Added line #L28 was not covered by tests
: Message(ERROR, std::move(content)), _code(code), _position(position) {}

auto DevWarning::print(std::ostream &out) -> std::ostream & {
Expand Down
4 changes: 2 additions & 2 deletions src/lib/message/DevWarning.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@
namespace filc::message {
class DevWarning final : public Message {
public:
DevWarning(unsigned int code, filc::utils::Position *position, std::string content);
DevWarning(unsigned int code, filc::utils::AbstractPosition *position, std::string content);

auto print(std::ostream &out) -> std::ostream & override;

private:
unsigned int _code;
filc::utils::Position *_position;
filc::utils::AbstractPosition *_position;
};
}

Expand Down
2 changes: 1 addition & 1 deletion src/lib/message/Error.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ namespace filc::message {
return out;
}

Error::Error(filc::message::LEVEL level, std::string content, filc::utils::Position *position)
Error::Error(filc::message::LEVEL level, std::string content, filc::utils::AbstractPosition *position)
: Message(level, std::move(content)), _position(position) {}

auto Error::print(std::ostream &out) -> std::ostream & {
Expand Down
4 changes: 2 additions & 2 deletions src/lib/message/Error.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,12 @@ namespace filc::message {

class Error final : public Message {
public:
Error(LEVEL level, std::string content, filc::utils::Position *position);
Error(LEVEL level, std::string content, filc::utils::AbstractPosition *position);

auto print(std::ostream &out) -> std::ostream & override;

private:
filc::utils::Position *_position;
filc::utils::AbstractPosition *_position;
};
}

Expand Down
14 changes: 12 additions & 2 deletions src/lib/utils/Position.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,17 @@
#include <string>

namespace filc::utils {
class Position final {
class AbstractPosition {
public:
[[nodiscard]] virtual auto dump(const std::string &color) const -> std::string = 0;

virtual ~AbstractPosition() = default;

protected:
AbstractPosition() = default;
};

class Position final : public AbstractPosition {
public:
Position(std::string filename, unsigned int line, unsigned int column);

Expand All @@ -42,7 +52,7 @@ namespace filc::utils {

[[nodiscard]] auto getContent() const -> std::string;

[[nodiscard]] auto dump(const std::string &color) const -> std::string;
[[nodiscard]] auto dump(const std::string &color) const -> std::string override;

private:
std::string _filename;
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/ast/AbstractExpressionTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ TEST(AbstractExpression, position) {
ASSERT_EQ(nullptr, obj1.getPosition());

obj1.setPosition(new filc::utils::Position("test.fil", 1, 2));
auto *position = obj1.getPosition();
auto *position = dynamic_cast<filc::utils::Position *>(obj1.getPosition());
ASSERT_STREQ("test.fil", position->getFilename().c_str());
ASSERT_EQ(1, position->getLine());
ASSERT_EQ(2, position->getColumn());
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/grammar/ParserTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ TEST(Parser, position) {
ASSERT_THAT(program->getExpressions(), SizeIs(1));
auto *expression = program->getExpressions()[0];
ASSERT_NE(nullptr, expression);
auto *position = expression->getPosition();
auto *position = dynamic_cast<filc::utils::Position *>(expression->getPosition());
ASSERT_STREQ(FIXTURES_PATH_GRAMMAR "/int1.fil", position->getFilename().c_str());
ASSERT_EQ(3, position->getLine());
ASSERT_EQ(0, position->getColumn());
Expand Down

0 comments on commit 13d01ed

Please sign in to comment.