lang/lang/builders/include/statement_builders.hpp
2024-08-25 15:41:20 +03:00

72 lines
2.2 KiB
C++

#pragma once
#include "builders_utils.hpp"
#include "statement_nodes.hpp"
#include <vector>
// TODO: move to nodes
namespace nodes {
using Statements = std::vector<nodes::Statement>;
} // namespace nodes
namespace builders {
// statements (copies of statements are in name_tree) returned to print /
// translate them in required order
template <>
struct BuilderTask<nodes::Statements>
: public BuilderTaskBase<nodes::Statements> {
using BuilderTaskBase<nodes::Statements>::BuilderTaskBase;
nodes::Statements operator()(const ParserNode &parser_node,
const Arguments &args) override;
};
// copy of statement inserted into name_tree
template <>
struct BuilderTask<nodes::Statement>
: public BuilderTaskBase<nodes::Statement> {
using BuilderTaskBase<nodes::Statement>::BuilderTaskBase;
nodes::Statement operator()(const ParserNode &parser_node,
const Arguments &args) override;
};
template <>
struct BuilderTask<nodes::Import> : public BuilderTaskBase<nodes::Import> {
using BuilderTaskBase<nodes::Import>::BuilderTaskBase;
nodes::Import operator()(const ParserNode &parser_node,
const Arguments &args) override;
};
template <>
struct BuilderTask<nodes::Constraint>
: public BuilderTaskBase<nodes::Constraint> {
using BuilderTaskBase<nodes::Constraint>::BuilderTaskBase;
nodes::Constraint operator()(const ParserNode &parser_node,
const Arguments &args) override;
};
template <>
struct BuilderTask<nodes::TypeDefinition>
: public BuilderTaskBase<nodes::TypeDefinition> {
using BuilderTaskBase<nodes::TypeDefinition>::BuilderTaskBase;
nodes::TypeDefinition operator()(const ParserNode &parser_node,
const Arguments &args) override;
};
template <>
struct BuilderTask<nodes::FunctionDefinition>
: public BuilderTaskBase<nodes::FunctionDefinition> {
using BuilderTaskBase<nodes::FunctionDefinition>::BuilderTaskBase;
nodes::FunctionDefinition operator()(const ParserNode &parser_node,
const Arguments &args) override;
};
// const std::optional<nodes::Identifier> &previous_defined_type_name, // TODO
} // namespace builders