Skip to content
Snippets Groups Projects
Commit b59052a2 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Move ExecUntilBreakOrContinue and INodeProcessor to their own files

parent be4ce7ae
No related branches found
No related tags found
1 merge request!37Feature/language
...@@ -7,64 +7,13 @@ ...@@ -7,64 +7,13 @@
#include <ASTNodeDataType.hpp> #include <ASTNodeDataType.hpp>
#include <ASTNodeDataVariant.hpp> #include <ASTNodeDataVariant.hpp>
#include <ExecUntilBreakOrContinue.hpp>
#include <INodeProcessor.hpp>
#include <pegtl/contrib/parse_tree.hpp> #include <pegtl/contrib/parse_tree.hpp>
using namespace TAO_PEGTL_NAMESPACE; using namespace TAO_PEGTL_NAMESPACE;
struct ExecUntilBreakOrContinue
{
enum class JumpType
{
no_jump,
break_jump,
continue_jump
};
private:
JumpType m_jump_type{JumpType::no_jump};
bool m_exec{true};
public:
PUGS_INLINE
bool
exec() const
{
return m_exec;
}
PUGS_INLINE
JumpType
jumpType() const
{
return m_jump_type;
}
ExecUntilBreakOrContinue& operator=(const ExecUntilBreakOrContinue&) = delete;
ExecUntilBreakOrContinue& operator=(ExecUntilBreakOrContinue&&) = default;
ExecUntilBreakOrContinue() = default;
constexpr ExecUntilBreakOrContinue(const JumpType& jump_type)
: m_jump_type(jump_type), m_exec((jump_type == JumpType::no_jump))
{
;
}
};
class INodeProcessor
{
public:
virtual void execute(ExecUntilBreakOrContinue& exec_policy) = 0;
virtual std::string describe() const = 0;
INodeProcessor(const INodeProcessor&) = delete;
INodeProcessor() = default;
virtual ~INodeProcessor() = default;
};
class SymbolTable; class SymbolTable;
struct ASTNode : public parse_tree::basic_node<ASTNode> struct ASTNode : public parse_tree::basic_node<ASTNode>
...@@ -72,6 +21,9 @@ struct ASTNode : public parse_tree::basic_node<ASTNode> ...@@ -72,6 +21,9 @@ struct ASTNode : public parse_tree::basic_node<ASTNode>
std::shared_ptr<SymbolTable> m_symbol_table; std::shared_ptr<SymbolTable> m_symbol_table;
std::unique_ptr<INodeProcessor> m_node_processor; std::unique_ptr<INodeProcessor> m_node_processor;
ASTNodeDataType m_data_type{ASTNodeDataType::undefined_t};
ASTNodeDataVariant m_value;
PUGS_INLINE PUGS_INLINE
void void
execute(ExecUntilBreakOrContinue& exec_policy) execute(ExecUntilBreakOrContinue& exec_policy)
...@@ -81,9 +33,6 @@ struct ASTNode : public parse_tree::basic_node<ASTNode> ...@@ -81,9 +33,6 @@ struct ASTNode : public parse_tree::basic_node<ASTNode>
m_node_processor->execute(exec_policy); m_node_processor->execute(exec_policy);
} }
} }
ASTNodeDataType m_data_type{ASTNodeDataType::undefined_t};
ASTNodeDataVariant m_value;
}; };
#endif // AST_NODE_HPP #endif // AST_NODE_HPP
#ifndef EXEC_UNTIL_BREAK_OR_CONTINUE_HPP
#define EXEC_UNTIL_BREAK_OR_CONTINUE_HPP
struct ExecUntilBreakOrContinue
{
enum class JumpType
{
no_jump,
break_jump,
continue_jump
};
private:
JumpType m_jump_type{JumpType::no_jump};
bool m_exec{true};
public:
PUGS_INLINE
bool
exec() const
{
return m_exec;
}
PUGS_INLINE
JumpType
jumpType() const
{
return m_jump_type;
}
ExecUntilBreakOrContinue& operator=(const ExecUntilBreakOrContinue&) = delete;
ExecUntilBreakOrContinue& operator=(ExecUntilBreakOrContinue&&) = default;
ExecUntilBreakOrContinue() = default;
constexpr ExecUntilBreakOrContinue(const JumpType& jump_type)
: m_jump_type(jump_type), m_exec((jump_type == JumpType::no_jump))
{
;
}
};
#endif // EXEC_UNTIL_BREAK_OR_CONTINUE_HPP
#ifndef I_NODE_PROCESSOR_HPP
#define I_NODE_PROCESSOR_HPP
class ExecUntilBreakOrContinue;
struct INodeProcessor
{
virtual void execute(ExecUntilBreakOrContinue& exec_policy) = 0;
virtual std::string describe() const = 0;
INodeProcessor(const INodeProcessor&) = delete;
INodeProcessor() = default;
virtual ~INodeProcessor() = default;
};
#endif // I_NODE_PROCESSOR_HPP
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment