forked from KPGPMC/furlang
Forward furc ast
Signed-off-by: CHatingPython <chatingpython@gmail.com>
This commit is contained in:
@@ -27,8 +27,6 @@ protected:
|
|||||||
bool equal(const node& rhs) const override;
|
bool equal(const node& rhs) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
using declaration_node_h = node_handle<declaration_node>;
|
|
||||||
|
|
||||||
class function_declaration_node : public declaration_node {
|
class function_declaration_node : public declaration_node {
|
||||||
public:
|
public:
|
||||||
function_declaration_node(front::token name)
|
function_declaration_node(front::token name)
|
||||||
@@ -45,8 +43,6 @@ protected:
|
|||||||
front::token m_name;
|
front::token m_name;
|
||||||
};
|
};
|
||||||
|
|
||||||
using function_declaration_node_h = node_handle<function_declaration_node>;
|
|
||||||
|
|
||||||
struct function_body {
|
struct function_body {
|
||||||
location begin, end;
|
location begin, end;
|
||||||
std::vector<node_handle<statement_node>> statements;
|
std::vector<node_handle<statement_node>> statements;
|
||||||
@@ -76,8 +72,6 @@ private:
|
|||||||
function_body_h m_body;
|
function_body_h m_body;
|
||||||
};
|
};
|
||||||
|
|
||||||
using function_definition_node_h = node_handle<function_definition_node>;
|
|
||||||
|
|
||||||
} // namespace ast
|
} // namespace ast
|
||||||
} // namespace furc
|
} // namespace furc
|
||||||
|
|
||||||
|
|||||||
@@ -27,8 +27,6 @@ protected:
|
|||||||
bool equal(const node& rhs) const override;
|
bool equal(const node& rhs) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
using expression_node_h = node_handle<expression_node>;
|
|
||||||
|
|
||||||
class var_read_expression_node : public expression_node {
|
class var_read_expression_node : public expression_node {
|
||||||
public:
|
public:
|
||||||
var_read_expression_node(handle<std::string_view>&& name)
|
var_read_expression_node(handle<std::string_view>&& name)
|
||||||
@@ -46,8 +44,6 @@ private:
|
|||||||
handle<std::string_view> m_name;
|
handle<std::string_view> m_name;
|
||||||
};
|
};
|
||||||
|
|
||||||
using var_read_expression_node_h = node_handle<var_read_expression_node>;
|
|
||||||
|
|
||||||
enum class unaryop_expression_node_t {
|
enum class unaryop_expression_node_t {
|
||||||
Positive,
|
Positive,
|
||||||
Negative,
|
Negative,
|
||||||
@@ -79,8 +75,6 @@ private:
|
|||||||
expression_node_h m_node;
|
expression_node_h m_node;
|
||||||
};
|
};
|
||||||
|
|
||||||
using unaryop_expression_node_h = node_handle<unaryop_expression_node>;
|
|
||||||
|
|
||||||
enum class binop_expression_node_t {
|
enum class binop_expression_node_t {
|
||||||
None = 0,
|
None = 0,
|
||||||
Add,
|
Add,
|
||||||
@@ -121,8 +115,6 @@ private:
|
|||||||
expression_node_h m_rhs;
|
expression_node_h m_rhs;
|
||||||
};
|
};
|
||||||
|
|
||||||
using binop_expression_node_h = node_handle<binop_expression_node>;
|
|
||||||
|
|
||||||
class var_assign_expression_node : public expression_node {
|
class var_assign_expression_node : public expression_node {
|
||||||
public:
|
public:
|
||||||
var_assign_expression_node(expression_node_h&& lhs, expression_node_h&& rhs)
|
var_assign_expression_node(expression_node_h&& lhs, expression_node_h&& rhs)
|
||||||
@@ -146,8 +138,6 @@ private:
|
|||||||
expression_node_h m_rhs;
|
expression_node_h m_rhs;
|
||||||
};
|
};
|
||||||
|
|
||||||
using var_assign_expression_node_h = node_handle<var_assign_expression_node>;
|
|
||||||
|
|
||||||
} // namespace ast
|
} // namespace ast
|
||||||
} // namespace furc
|
} // namespace furc
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
#ifndef FURC_AST_FWD_HPP
|
||||||
|
#define FURC_AST_FWD_HPP
|
||||||
|
|
||||||
|
#include "furc/handle.hpp"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace furc {
|
||||||
|
namespace ast {
|
||||||
|
|
||||||
|
class node;
|
||||||
|
|
||||||
|
template <typename T, typename Error = std::string>
|
||||||
|
using node_handle = handle<T*, Error>;
|
||||||
|
|
||||||
|
class literal_node;
|
||||||
|
using literal_node_h = node_handle<literal_node>;
|
||||||
|
class expression_node;
|
||||||
|
using expression_node_h = node_handle<expression_node>;
|
||||||
|
class declaration_node;
|
||||||
|
using declaration_node_h = node_handle<declaration_node>;
|
||||||
|
class statement_node;
|
||||||
|
using statement_node_h = node_handle<statement_node>;
|
||||||
|
class program_node;
|
||||||
|
using program_node_h = node_handle<program_node>;
|
||||||
|
|
||||||
|
class string_literal_node;
|
||||||
|
using string_literal_node_h = node_handle<string_literal_node>;
|
||||||
|
class integer_literal_node;
|
||||||
|
using integer_literal_node_h = node_handle<integer_literal_node>;
|
||||||
|
|
||||||
|
class var_read_expression_node;
|
||||||
|
using var_read_expression_node_h = node_handle<var_read_expression_node>;
|
||||||
|
class unaryop_expression_node;
|
||||||
|
using unaryop_expression_node_h = node_handle<unaryop_expression_node>;
|
||||||
|
class binop_expression_node;
|
||||||
|
using binop_expression_node_h = node_handle<binop_expression_node>;
|
||||||
|
class var_assign_expression_node;
|
||||||
|
using var_assign_expression_node_h = node_handle<var_assign_expression_node>;
|
||||||
|
|
||||||
|
class function_declaration_node;
|
||||||
|
using function_declaration_node_h = node_handle<function_declaration_node>;
|
||||||
|
class function_definition_node;
|
||||||
|
using function_definition_node_h = node_handle<function_definition_node>;
|
||||||
|
|
||||||
|
class return_statement_node;
|
||||||
|
using return_statement_node_h = node_handle<return_statement_node>;
|
||||||
|
|
||||||
|
} // namespace ast
|
||||||
|
} // namespace furc
|
||||||
|
|
||||||
|
#endif // FURC_AST_FWD_HPP
|
||||||
@@ -24,8 +24,6 @@ protected:
|
|||||||
bool equal(const node& rhs) const override;
|
bool equal(const node& rhs) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
using literal_node_h = node_handle<literal_node>;
|
|
||||||
|
|
||||||
class string_literal_node : public literal_node {
|
class string_literal_node : public literal_node {
|
||||||
public:
|
public:
|
||||||
string_literal_node(handle<std::string_view>&& value)
|
string_literal_node(handle<std::string_view>&& value)
|
||||||
@@ -42,8 +40,6 @@ private:
|
|||||||
handle<std::string_view> m_value;
|
handle<std::string_view> m_value;
|
||||||
};
|
};
|
||||||
|
|
||||||
using string_literal_node_h = node_handle<string_literal_node>;
|
|
||||||
|
|
||||||
class integer_literal_node : public literal_node {
|
class integer_literal_node : public literal_node {
|
||||||
public:
|
public:
|
||||||
integer_literal_node(handle<front::integer_token>&& value)
|
integer_literal_node(handle<front::integer_token>&& value)
|
||||||
@@ -62,8 +58,6 @@ private:
|
|||||||
handle<front::integer_token> m_value;
|
handle<front::integer_token> m_value;
|
||||||
};
|
};
|
||||||
|
|
||||||
using integer_literal_node_h = node_handle<integer_literal_node>;
|
|
||||||
|
|
||||||
} // namespace ast
|
} // namespace ast
|
||||||
} // namespace furc
|
} // namespace furc
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
#ifndef FURC_AST_NODE_HPP
|
#ifndef FURC_AST_NODE_HPP
|
||||||
#define FURC_AST_NODE_HPP
|
#define FURC_AST_NODE_HPP
|
||||||
|
|
||||||
#include "furc/handle.hpp"
|
#include "furc/ast/fwd.hpp"
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
namespace furc {
|
namespace furc {
|
||||||
namespace ast {
|
namespace ast {
|
||||||
@@ -48,9 +46,6 @@ protected:
|
|||||||
virtual bool equal(const node& rhs) const = 0;
|
virtual bool equal(const node& rhs) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename Error = std::string>
|
|
||||||
using node_handle = handle<T*, Error>;
|
|
||||||
|
|
||||||
} // namespace ast
|
} // namespace ast
|
||||||
} // namespace furc
|
} // namespace furc
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,6 @@ private:
|
|||||||
std::vector<node_handle<declaration_node>> m_declarations;
|
std::vector<node_handle<declaration_node>> m_declarations;
|
||||||
};
|
};
|
||||||
|
|
||||||
using program_node_h = node_handle<program_node>;
|
|
||||||
|
|
||||||
} // namespace ast
|
} // namespace ast
|
||||||
} // namespace furc
|
} // namespace furc
|
||||||
|
|
||||||
|
|||||||
@@ -21,9 +21,6 @@ protected:
|
|||||||
bool equal(const node& rhs) const override;
|
bool equal(const node& rhs) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
using statement_node_h = node_handle<statement_node>;
|
|
||||||
|
|
||||||
class expression_node;
|
|
||||||
class return_statement_node : public statement_node {
|
class return_statement_node : public statement_node {
|
||||||
public:
|
public:
|
||||||
return_statement_node() = default;
|
return_statement_node() = default;
|
||||||
@@ -42,8 +39,6 @@ private:
|
|||||||
node_handle<expression_node> m_value;
|
node_handle<expression_node> m_value;
|
||||||
};
|
};
|
||||||
|
|
||||||
using return_statement_node_h = node_handle<return_statement_node>;
|
|
||||||
|
|
||||||
} // namespace ast
|
} // namespace ast
|
||||||
} // namespace furc
|
} // namespace furc
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user