2023-07-20 14:38:44 +03:00
|
|
|
#pragma once
|
|
|
|
|
|
2023-07-22 13:33:33 +03:00
|
|
|
#include "expression_nodes.hpp"
|
|
|
|
|
#include "tree_sitter_wrapper.hpp"
|
|
|
|
|
|
|
|
|
|
namespace builders {
|
|
|
|
|
|
|
|
|
|
// --- flow control
|
|
|
|
|
|
|
|
|
|
nodes::ExpressionProxy
|
2023-07-23 19:40:27 +03:00
|
|
|
build_expression(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
2023-07-23 19:40:27 +03:00
|
|
|
nodes::Match build_match(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
2023-07-23 19:40:27 +03:00
|
|
|
nodes::Condition build_condition(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
2023-07-23 19:40:27 +03:00
|
|
|
nodes::Loop build_loop(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
|
|
|
|
// --- operators
|
|
|
|
|
|
|
|
|
|
nodes::NameExpression
|
2023-07-23 19:40:27 +03:00
|
|
|
build_comma_expression(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
|
|
|
|
nodes::NameExpression
|
2023-07-23 19:40:27 +03:00
|
|
|
build_operator_expression(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
|
|
|
|
// --- continers
|
|
|
|
|
|
2023-07-23 19:40:27 +03:00
|
|
|
nodes::Container build_block(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
2023-07-23 19:40:27 +03:00
|
|
|
nodes::Container build_array(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
|
|
|
|
// --- modifiers
|
|
|
|
|
|
2023-07-23 19:40:27 +03:00
|
|
|
nodes::Return build_return(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
2023-07-23 19:40:27 +03:00
|
|
|
nodes::NameDefinition
|
|
|
|
|
build_name_definition(parser::ParseTree::Node parser_node);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
2023-07-23 19:40:27 +03:00
|
|
|
nodes::Access build_array_access(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
2023-07-23 19:40:27 +03:00
|
|
|
nodes::Access build_tuple_access(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
2023-07-23 19:40:27 +03:00
|
|
|
nodes::LoopControl build_loop_control(parser::ParseTree::Node parser_node);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
|
|
|
|
nodes::ModifierExpression
|
2023-07-23 19:40:27 +03:00
|
|
|
build_reference_expression(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
|
|
|
|
nodes::ModifierExpression
|
2023-07-23 19:40:27 +03:00
|
|
|
build_suffix_expression(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
|
|
|
|
// --- other
|
|
|
|
|
|
|
|
|
|
nodes::NameExpression
|
2023-07-23 19:40:27 +03:00
|
|
|
build_name_expression(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
|
|
|
|
nodes::Constructor
|
2023-07-23 19:40:27 +03:00
|
|
|
build_constructor(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
2023-07-23 19:40:27 +03:00
|
|
|
nodes::Lambda build_lambda(parser::ParseTree::Node parser_node,
|
2023-07-22 16:44:32 +03:00
|
|
|
nodes::ExpressionStorage &expression_storage,
|
|
|
|
|
nodes::TypeStorage &type_storage);
|
2023-07-22 13:33:33 +03:00
|
|
|
|
|
|
|
|
} // namespace builders
|