#pragma once #include "name_tree.hpp" #include "statement_nodes.hpp" #include "tree_sitter_wrapper.hpp" #include namespace builders { // statements (copies of statements are in name_tree) returned to print / // translate them in required order std::vector build_source_file(parser::ParseTree::Node parser_node, nodes::ExpressionStorage &expression_storage, nodes::TypeStorage &type_storage, names::NameTree &name_tree); // copy of statement inserted into name_tree nodes::Statement build_statement(parser::ParseTree::Node parser_node, std::optional &previous_defined_type_name, nodes::ExpressionStorage &expression_storage, nodes::TypeStorage &type_storage, names::NameTree &name_tree); nodes::Import build_import(parser::ParseTree::Node parser_node); nodes::Constraint build_constraint(parser::ParseTree::Node parser_node, nodes::ExpressionStorage &expression_storage, nodes::TypeStorage &type_storage); nodes::TypeDefinition build_type_definition(parser::ParseTree::Node parser_node, nodes::TypeStorage &type_storage); nodes::FunctionDefinition build_function_definition( parser::ParseTree::Node parser_node, const std::optional &previous_defined_type_name, nodes::ExpressionStorage &expression_storage, nodes::TypeStorage &type_storage); } // namespace builders