mirror of
https://codeberg.org/ProgramSnail/lang.git
synced 2026-01-25 21:17:11 +00:00
types for typecheck, sources manager
This commit is contained in:
parent
4714a05467
commit
ef88e6af86
9 changed files with 353 additions and 104 deletions
85
include/sources_manager.hpp
Normal file
85
include/sources_manager.hpp
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
#pragma once
|
||||
|
||||
#include "basic_printers.hpp"
|
||||
#include "error_handling.hpp"
|
||||
#include "expression_nodes.hpp"
|
||||
#include "name_tree.hpp"
|
||||
#include "statement_builders.hpp"
|
||||
#include "statement_nodes.hpp"
|
||||
#include "statement_printers.hpp"
|
||||
#include "tree_sitter_wrapper.hpp"
|
||||
#include "type_nodes.hpp"
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
class SourcesManager {
|
||||
public:
|
||||
void add_file(const std::string &filename) {
|
||||
std::ifstream in;
|
||||
in.open(filename);
|
||||
|
||||
std::stringstream source_stream;
|
||||
|
||||
source_stream << in.rdbuf();
|
||||
|
||||
in.close();
|
||||
|
||||
std::string source = source_stream.str();
|
||||
|
||||
parser::ParseTree parse_tree(source);
|
||||
|
||||
if (!parse_tree.is_properly_parsed()) {
|
||||
error_handling::handle_parsing_error(
|
||||
"There are some parsing errors in file", parse_tree.get_root());
|
||||
}
|
||||
|
||||
auto new_statements = builders::build_source_file(
|
||||
parse_tree.get_root(), expression_storage_, type_storage_, name_tree_);
|
||||
|
||||
statements_.reserve(statements_.size() + new_statements.size());
|
||||
for (auto &new_statement : new_statements) {
|
||||
statements_.push_back(std::move(new_statement));
|
||||
}
|
||||
|
||||
new_statements.clear();
|
||||
}
|
||||
|
||||
void print(std::ostream &out) {
|
||||
printers::Printer printer(out, 2, 80, true);
|
||||
printers::print_source_file(statements_, printer);
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
nodes::ExpressionStorage *get_expression_storage() {
|
||||
return &expression_storage_;
|
||||
}
|
||||
|
||||
const nodes::ExpressionStorage *get_expression_storage() const {
|
||||
return &expression_storage_;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
nodes::TypeStorage *get_type_storage() { return &type_storage_; }
|
||||
|
||||
const nodes::TypeStorage *get_type_storage() const { return &type_storage_; }
|
||||
|
||||
//
|
||||
|
||||
size_t get_statements_size() const { return statements_.size(); }
|
||||
|
||||
nodes::Statement *get_statement(size_t id) { return &statements_.at(id); }
|
||||
|
||||
const nodes::Statement *get_statement(size_t id) const {
|
||||
return &statements_.at(id);
|
||||
}
|
||||
|
||||
private:
|
||||
nodes::ExpressionStorage expression_storage_;
|
||||
nodes::TypeStorage type_storage_;
|
||||
names::NameTree name_tree_;
|
||||
std::vector<nodes::Statement> statements_;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue