first iteration of find_symbols_visitor

This commit is contained in:
ProgramSnail 2023-04-12 13:31:39 +03:00
parent 87bd815bbb
commit 399631b9ca
13 changed files with 92065 additions and 92399 deletions

View file

@ -15,29 +15,22 @@ public:
namespace_stack.push_back(&global_namespace_);
}
template<typename T>
void AddImport(T&& import_info) {
if (waiting_usage.has_value()) {
usages_[waiting_usage.value()] = std::forward(import_info);
waiting_usage = std::nullopt;
void AddImport(ImportInfo&& import_info, const std::optional<std::string>& name = std::nullopt) {
if (name.has_value()) {
usages_[name.value()] = std::move(import_info);
} else {
imports_.push_back(std::forward(import_info));
imports_.push_back(std::move(import_info));
}
}
void AddUsageForNextImport(const std::string& name) {
if (waiting_usage.has_value()) {
// error
}
waiting_usage = name;
}
void AddEnterNamespace(const std::optional<std::string>& var,
const std::string& type) {
void AddEnterNamespace(const std::string& type,
const std::optional<NamespaceInfo::Modifier>& modifier = std::nullopt,
const std::optional<std::string>& variable = std::nullopt) {
NamespaceInfo* namespace_info = &namespace_stack.back()->namespaces[type].emplace_back();
namespace_stack.push_back(namespace_info);
namespace_info->var = var;
namespace_info->modifier = modifier;
namespace_info->variable = variable;
namespace_info->type_name = type;
}
@ -55,36 +48,30 @@ public:
namespace_stack.push_back(&global_namespace_);
}
template<typename T>
void AddFunctionDeclaration(const std::string& name,
T&& function_declaration_info) {
FunctionDeclarationInfo&& function_declaration_info) {
FunctionInfo* function_info = &namespace_stack.back()->functions[name];
function_info->declaration = std::forward(function_declaration_info);
function_info->declaration = std::move(function_declaration_info);
}
template<typename T>
void AddFunctionDefinition(const std::string& name,
T&& function_definition_info) {
FunctionDefinitionInfo&& function_definition_info) {
FunctionInfo* function_info = &namespace_stack.back()->functions[name];
function_info->definition = std::forward(function_definition_info);
function_info->definition = std::move(function_definition_info);
}
template<typename T>
void AddType(const std::string& type,
T&& type_info) {
&namespace_stack.back()->types[type] = std::forward(type_info);
TypeInfo&& type_info) {
namespace_stack.back()->types[type] = std::move(type_info);
}
template<typename T>
void AddTypeclass(const std::string& typeclass,
T&& typeclass_info) {
namespace_stack.back()->typeclasses[typeclass] = std::forward(typeclass_info);
TypeclassInfo&& typeclass_info) {
namespace_stack.back()->typeclasses[typeclass] = std::move(typeclass_info);
}
// AddVar ?? // TODO: decide
// FindFunction
// FindType
@ -92,7 +79,6 @@ public:
private:
std::vector<NamespaceInfo*> namespace_stack;
std::optional<std::string> waiting_usage;
NamespaceInfo global_namespace_;
std::vector<ImportInfo> imports_;