mirror of
https://codeberg.org/ProgramSnail/lang.git
synced 2025-12-05 22:48:43 +00:00
72 lines
2.2 KiB
C++
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 utils::None &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 utils::None &args) override;
|
|
};
|
|
|
|
template <>
|
|
struct BuilderTask<nodes::Import> : public BuilderTaskBase<nodes::Import> {
|
|
using BuilderTaskBase<nodes::Import>::BuilderTaskBase;
|
|
|
|
nodes::Import operator()(const ParserNode &parser_node,
|
|
const utils::None &args) override;
|
|
};
|
|
|
|
template <>
|
|
struct BuilderTask<nodes::Constraint>
|
|
: public BuilderTaskBase<nodes::Constraint> {
|
|
using BuilderTaskBase<nodes::Constraint>::BuilderTaskBase;
|
|
|
|
nodes::Constraint operator()(const ParserNode &parser_node,
|
|
const utils::None &args) override;
|
|
};
|
|
|
|
template <>
|
|
struct BuilderTask<nodes::TypeDefinition>
|
|
: public BuilderTaskBase<nodes::TypeDefinition> {
|
|
using BuilderTaskBase<nodes::TypeDefinition>::BuilderTaskBase;
|
|
|
|
nodes::TypeDefinition operator()(const ParserNode &parser_node,
|
|
const utils::None &args) override;
|
|
};
|
|
|
|
template <>
|
|
struct BuilderTask<nodes::FunctionDefinition>
|
|
: public BuilderTaskBase<nodes::FunctionDefinition> {
|
|
using BuilderTaskBase<nodes::FunctionDefinition>::BuilderTaskBase;
|
|
|
|
nodes::FunctionDefinition operator()(const ParserNode &parser_node,
|
|
const utils::None &args) override;
|
|
};
|
|
// const std::optional<nodes::Identifier> &previous_defined_type_name, // TODO
|
|
|
|
} // namespace builders
|