diff options
author | rtk0c <[email protected]> | 2022-06-03 23:30:01 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2022-06-03 23:30:01 -0700 |
commit | 791b3f354b378769bffe623b05f1305c91b77101 (patch) | |
tree | 5409b311e6232eb4a6d3f8259b780d76b8ee1c59 /source/CodegenCompiler/CodegenInput.cpp | |
parent | 60ccc62f4934e44ad5b905fdbcf458302b8d8a09 (diff) |
Changeset: 64 [WIP] Rename directoriesmaster-switch-to-build2
Diffstat (limited to 'source/CodegenCompiler/CodegenInput.cpp')
-rw-r--r-- | source/CodegenCompiler/CodegenInput.cpp | 99 |
1 files changed, 0 insertions, 99 deletions
diff --git a/source/CodegenCompiler/CodegenInput.cpp b/source/CodegenCompiler/CodegenInput.cpp deleted file mode 100644 index 0dced0e..0000000 --- a/source/CodegenCompiler/CodegenInput.cpp +++ /dev/null @@ -1,99 +0,0 @@ -#include "CodegenInput.hpp" - -#include <Macros.hpp> -#include <Utils.hpp> - -#include <robin_hood.h> -#include <variant> - -struct SomeDecl { - std::variant<DeclStruct, DeclFunction, DeclEnum> v; -}; - -class CodegenInput::Private { -public: - // We want address stability for everything - robin_hood::unordered_node_map<std::string, SomeDecl, StringHash, StringEqual> decls; - robin_hood::unordered_node_map<std::string, DeclNamespace, StringHash, StringEqual> namespaces; -}; - -CodegenInput::CodegenInput() - : m{ new Private() } // -{ -} - -CodegenInput::~CodegenInput() { - delete m; -} - -#define STORE_DECL_OF_TYPE(DeclType, fullname, decl) \ - auto [iter, success] = m->decls.try_emplace(std::move(fullname), SomeDecl{ .v = std::move(decl) }); \ - auto& key = iter->first; \ - auto& val = iter->second; \ - auto& declRef = std::get<DeclType>(val.v); \ - declRef.fullname = key; \ - return &declRef - -DeclEnum* CodegenInput::AddEnum(std::string fullname, DeclEnum decl) { -#if CODEGEN_DEBUG_PRINT - printf("Committed enum '%s'\n", decl.name.c_str()); - for (auto& elm : decl.elements) { - printf(" - element %s = %" PRId64 "\n", elm.name.c_str(), elm.value); - } -#endif - - STORE_DECL_OF_TYPE(DeclEnum, fullname, decl); -} - -DeclStruct* CodegenInput::AddStruct(std::string fullname, DeclStruct decl) { -#if CODEGEN_DEBUG_PRINT - printf("Committed struct '%s'\n", decl.name.c_str()); - printf(" Base classes:\n"); - for (auto& base : decl.baseClasses) { - printf(" - %.*s\n", PRINTF_STRING_VIEW(base->name)); - } -#endif - - STORE_DECL_OF_TYPE(DeclStruct, fullname, decl); -} - -#define FIND_DECL_OF_TYPE(DeclType) \ - auto iter = m->decls.find(name); \ - if (iter != m->decls.end()) { \ - auto& some = iter->second.v; \ - if (auto decl = std::get_if<DeclType>(&some)) { \ - return decl; \ - } \ - } \ - return nullptr - -const DeclEnum* CodegenInput::FindEnum(std::string_view name) const { - FIND_DECL_OF_TYPE(DeclEnum); -} - -const DeclStruct* CodegenInput::FindStruct(std::string_view name) const { - FIND_DECL_OF_TYPE(DeclStruct); -} - -DeclNamespace* CodegenInput::AddNamespace(DeclNamespace ns) { - auto path = Utils::MakeFullName(""sv, &ns); - auto [iter, success] = m->namespaces.try_emplace(std::move(path), std::move(ns)); - auto& nsRef = iter->second; - if (success) { - nsRef.fullname = iter->first; - } - return &nsRef; -} - -const DeclNamespace* CodegenInput::FindNamespace(std::string_view fullname) const { - auto iter = m->namespaces.find(fullname); - if (iter != m->namespaces.end()) { - return &iter->second; - } else { - return nullptr; - } -} - -DeclNamespace* CodegenInput::FindNamespace(std::string_view name) { - return const_cast<DeclNamespace*>(const_cast<const CodegenInput*>(this)->FindNamespace(name)); -} |