From 2395ee9977d324140c9d300d79a945462288aba3 Mon Sep 17 00:00:00 2001 From: CHatingPython Date: Sun, 31 May 2026 13:00:33 +0200 Subject: [PATCH] Forward furc ast Signed-off-by: CHatingPython --- furc/include/furc/ast/declaration.hpp | 6 ---- furc/include/furc/ast/expression.hpp | 10 ------ furc/include/furc/ast/fwd.hpp | 52 +++++++++++++++++++++++++++ furc/include/furc/ast/literal.hpp | 6 ---- furc/include/furc/ast/node.hpp | 7 +--- furc/include/furc/ast/program.hpp | 2 -- furc/include/furc/ast/statement.hpp | 5 --- 7 files changed, 53 insertions(+), 35 deletions(-) create mode 100644 furc/include/furc/ast/fwd.hpp diff --git a/furc/include/furc/ast/declaration.hpp b/furc/include/furc/ast/declaration.hpp index 85b9ef3..2f501c0 100644 --- a/furc/include/furc/ast/declaration.hpp +++ b/furc/include/furc/ast/declaration.hpp @@ -27,8 +27,6 @@ protected: bool equal(const node& rhs) const override; }; -using declaration_node_h = node_handle; - class function_declaration_node : public declaration_node { public: function_declaration_node(front::token name) @@ -45,8 +43,6 @@ protected: front::token m_name; }; -using function_declaration_node_h = node_handle; - struct function_body { location begin, end; std::vector> statements; @@ -76,8 +72,6 @@ private: function_body_h m_body; }; -using function_definition_node_h = node_handle; - } // namespace ast } // namespace furc diff --git a/furc/include/furc/ast/expression.hpp b/furc/include/furc/ast/expression.hpp index 2f58df6..a911651 100644 --- a/furc/include/furc/ast/expression.hpp +++ b/furc/include/furc/ast/expression.hpp @@ -27,8 +27,6 @@ protected: bool equal(const node& rhs) const override; }; -using expression_node_h = node_handle; - class var_read_expression_node : public expression_node { public: var_read_expression_node(handle&& name) @@ -46,8 +44,6 @@ private: handle m_name; }; -using var_read_expression_node_h = node_handle; - enum class unaryop_expression_node_t { Positive, Negative, @@ -79,8 +75,6 @@ private: expression_node_h m_node; }; -using unaryop_expression_node_h = node_handle; - enum class binop_expression_node_t { None = 0, Add, @@ -121,8 +115,6 @@ private: expression_node_h m_rhs; }; -using binop_expression_node_h = node_handle; - class var_assign_expression_node : public expression_node { public: var_assign_expression_node(expression_node_h&& lhs, expression_node_h&& rhs) @@ -146,8 +138,6 @@ private: expression_node_h m_rhs; }; -using var_assign_expression_node_h = node_handle; - } // namespace ast } // namespace furc diff --git a/furc/include/furc/ast/fwd.hpp b/furc/include/furc/ast/fwd.hpp new file mode 100644 index 0000000..6c72906 --- /dev/null +++ b/furc/include/furc/ast/fwd.hpp @@ -0,0 +1,52 @@ +#ifndef FURC_AST_FWD_HPP +#define FURC_AST_FWD_HPP + +#include "furc/handle.hpp" + +#include + +namespace furc { +namespace ast { + +class node; + +template +using node_handle = handle; + +class literal_node; +using literal_node_h = node_handle; +class expression_node; +using expression_node_h = node_handle; +class declaration_node; +using declaration_node_h = node_handle; +class statement_node; +using statement_node_h = node_handle; +class program_node; +using program_node_h = node_handle; + +class string_literal_node; +using string_literal_node_h = node_handle; +class integer_literal_node; +using integer_literal_node_h = node_handle; + +class var_read_expression_node; +using var_read_expression_node_h = node_handle; +class unaryop_expression_node; +using unaryop_expression_node_h = node_handle; +class binop_expression_node; +using binop_expression_node_h = node_handle; +class var_assign_expression_node; +using var_assign_expression_node_h = node_handle; + +class function_declaration_node; +using function_declaration_node_h = node_handle; +class function_definition_node; +using function_definition_node_h = node_handle; + +class return_statement_node; +using return_statement_node_h = node_handle; + +} // namespace ast +} // namespace furc + +#endif // FURC_AST_FWD_HPP \ No newline at end of file diff --git a/furc/include/furc/ast/literal.hpp b/furc/include/furc/ast/literal.hpp index 244ee52..1938ee7 100644 --- a/furc/include/furc/ast/literal.hpp +++ b/furc/include/furc/ast/literal.hpp @@ -24,8 +24,6 @@ protected: bool equal(const node& rhs) const override; }; -using literal_node_h = node_handle; - class string_literal_node : public literal_node { public: string_literal_node(handle&& value) @@ -42,8 +40,6 @@ private: handle m_value; }; -using string_literal_node_h = node_handle; - class integer_literal_node : public literal_node { public: integer_literal_node(handle&& value) @@ -62,8 +58,6 @@ private: handle m_value; }; -using integer_literal_node_h = node_handle; - } // namespace ast } // namespace furc diff --git a/furc/include/furc/ast/node.hpp b/furc/include/furc/ast/node.hpp index c6b307e..26c3ba0 100644 --- a/furc/include/furc/ast/node.hpp +++ b/furc/include/furc/ast/node.hpp @@ -1,9 +1,7 @@ #ifndef FURC_AST_NODE_HPP #define FURC_AST_NODE_HPP -#include "furc/handle.hpp" - -#include +#include "furc/ast/fwd.hpp" namespace furc { namespace ast { @@ -48,9 +46,6 @@ protected: virtual bool equal(const node& rhs) const = 0; }; -template -using node_handle = handle; - } // namespace ast } // namespace furc diff --git a/furc/include/furc/ast/program.hpp b/furc/include/furc/ast/program.hpp index 82aad36..1f5b137 100644 --- a/furc/include/furc/ast/program.hpp +++ b/furc/include/furc/ast/program.hpp @@ -26,8 +26,6 @@ private: std::vector> m_declarations; }; -using program_node_h = node_handle; - } // namespace ast } // namespace furc diff --git a/furc/include/furc/ast/statement.hpp b/furc/include/furc/ast/statement.hpp index eb6b1d1..2dfb3cc 100644 --- a/furc/include/furc/ast/statement.hpp +++ b/furc/include/furc/ast/statement.hpp @@ -21,9 +21,6 @@ protected: bool equal(const node& rhs) const override; }; -using statement_node_h = node_handle; - -class expression_node; class return_statement_node : public statement_node { public: return_statement_node() = default; @@ -42,8 +39,6 @@ private: node_handle m_value; }; -using return_statement_node_h = node_handle; - } // namespace ast } // namespace furc