aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/openvic-dataloader/v2script/AbstractSyntaxTree.hpp47
1 files changed, 22 insertions, 25 deletions
diff --git a/include/openvic-dataloader/v2script/AbstractSyntaxTree.hpp b/include/openvic-dataloader/v2script/AbstractSyntaxTree.hpp
index 32e7e42..689ab6e 100644
--- a/include/openvic-dataloader/v2script/AbstractSyntaxTree.hpp
+++ b/include/openvic-dataloader/v2script/AbstractSyntaxTree.hpp
@@ -30,9 +30,9 @@ namespace ovdl::v2script {
constexpr std::string_view get_type() const override { return ::ovdl::detail::type_name<std::decay_t<decltype(*this)>>(); }
// defines type for self-class referencing
-#define OVDL_TYPE_DEFINE_SELF \
- struct _self_type_tag {}; \
- constexpr auto _self_type_helper()->decltype(::ovdl::detail::Writer<_self_type_tag, decltype(this)> {}); \
+#define OVDL_TYPE_DEFINE_SELF \
+ struct _self_type_tag {}; \
+ constexpr auto _self_type_helper() -> decltype(::ovdl::detail::Writer<_self_type_tag, decltype(this)> {}); \
using type = ::ovdl::detail::Read<_self_type_tag>;
namespace ovdl::v2script::ast {
@@ -248,37 +248,35 @@ namespace ovdl::v2script::ast {
#undef OVDL_AST_LIST_NODE
- struct EventNode final : public Node {
+#define OVDL_AST_LIST_EXTEND(NAME) \
+ NAME(lexy::nullopt); \
+ NAME(NodeLocation location, lexy::nullopt); \
+ OVDL_TYPE_DEFINE_SELF; \
+ OVDL_RT_TYPE_DEF; \
+ OVDL_PRINT_FUNC_DEF
+
+ struct EventNode final : public AbstractListNode {
+ OVDL_AST_LIST_EXTEND(EventNode);
enum class Type {
Country,
Province
} _type;
- std::vector<NodeUPtr> _statements;
EventNode(Type type, const std::vector<NodePtr>& statements = {});
EventNode(NodeLocation location, Type type, const std::vector<NodePtr>& statements = {});
- OVDL_TYPE_DEFINE_SELF;
- OVDL_RT_TYPE_DEF;
- OVDL_PRINT_FUNC_DEF;
};
- struct DecisionNode final : public Node {
+ struct DecisionNode final : public AbstractListNode {
+ OVDL_AST_LIST_EXTEND(DecisionNode);
NodeUPtr _name;
- std::vector<NodeUPtr> _statements;
DecisionNode(NodePtr name, const std::vector<NodePtr>& statements = {});
DecisionNode(NodeLocation location, NodePtr name, const std::vector<NodePtr>& statements = {});
- OVDL_TYPE_DEFINE_SELF;
- OVDL_RT_TYPE_DEF;
- OVDL_PRINT_FUNC_DEF;
};
- struct EventMtthModifierNode final : public Node {
+ struct EventMtthModifierNode final : public AbstractListNode {
+ OVDL_AST_LIST_EXTEND(EventMtthModifierNode);
NodeUPtr _factor_value;
- std::vector<NodeUPtr> _statements;
- EventMtthModifierNode() : Node({}) {}
- EventMtthModifierNode(NodeLocation location) : Node(location) {}
- OVDL_TYPE_DEFINE_SELF;
- OVDL_RT_TYPE_DEF;
- OVDL_PRINT_FUNC_DEF;
+ EventMtthModifierNode() : AbstractListNode() {}
+ EventMtthModifierNode(NodeLocation location) : AbstractListNode(location) {}
};
// Packed single case
@@ -296,16 +294,15 @@ namespace ovdl::v2script::ast {
OVDL_PRINT_FUNC_DEF;
};
- struct ExecutionListNode final : public Node {
+ struct ExecutionListNode final : public AbstractListNode {
+ OVDL_AST_LIST_EXTEND(ExecutionListNode);
ExecutionNode::Type _type;
- std::vector<NodeUPtr> _statements;
ExecutionListNode(ExecutionNode::Type type, const std::vector<NodePtr>& statements);
ExecutionListNode(NodeLocation location, ExecutionNode::Type type, const std::vector<NodePtr>& statements);
- OVDL_TYPE_DEFINE_SELF;
- OVDL_RT_TYPE_DEF;
- OVDL_PRINT_FUNC_DEF;
};
+#undef OVDL_AST_LIST_EXTEND
+
}
#undef OVDL_PRINT_FUNC_DECL