diff options
author | rtk0c <[email protected]> | 2022-06-02 21:34:16 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2022-06-02 21:34:16 -0700 |
commit | bd07ae3f4e1bcdedc3e373460671ca9713a03de5 (patch) | |
tree | 15c897891474a97983f247196923f8e4f2184083 /source/20-codegen-compiler/CodegenInput.inl | |
parent | 8a0f2cd0b398ee0b7740e44a0e5fb2f75d090ccb (diff) |
Changeset: 60 Add struct/class scanning to codegen
Diffstat (limited to 'source/20-codegen-compiler/CodegenInput.inl')
-rw-r--r-- | source/20-codegen-compiler/CodegenInput.inl | 69 |
1 files changed, 0 insertions, 69 deletions
diff --git a/source/20-codegen-compiler/CodegenInput.inl b/source/20-codegen-compiler/CodegenInput.inl deleted file mode 100644 index 0809e7f..0000000 --- a/source/20-codegen-compiler/CodegenInput.inl +++ /dev/null @@ -1,69 +0,0 @@ -#pragma once - -#include "CodegenConfig.hpp" -#include "CodegenDecl.hpp" - -#include "CodegenUtils.inl" - -#include <Utils.hpp> - -#include <robin_hood.h> -#include <cinttypes> -#include <string> -#include <string_view> -#include <vector> - -using namespace std::literals; - -class CodegenInput { -private: - std::vector<DeclEnum> mEnums; - robin_hood::unordered_flat_map<std::string, size_t, StringHash, StringEqual> mDeclByName; - robin_hood::unordered_node_map<std::string, DeclNamespace, StringHash, StringEqual> mNamespaces; - -public: - void 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 - - mDeclByName.try_emplace(std::move(fullname), mEnums.size()); - mEnums.push_back(std::move(decl)); - } - - DeclNamespace* AddNamespace(DeclNamespace ns) { - auto path = Utils::MakeFullName(""sv, &ns); - auto [iter, success] = mNamespaces.try_emplace(std::move(path), std::move(ns)); - auto& nsRef = iter->second; - if (success) { - nsRef.fullname = iter->first; - } - return &nsRef; - } - - const DeclEnum* FindEnumByName(std::string_view name) const { - // TODO handle multiple kinds of decl - auto iter = mDeclByName.find(name); - if (iter != mDeclByName.end()) { - return &mEnums[iter->second]; - } else { - return nullptr; - } - } - - const DeclNamespace* FindNamespace(std::string_view fullname) const { - auto iter = mNamespaces.find(fullname); - if (iter != mNamespaces.end()) { - return &iter->second; - } else { - return nullptr; - } - } - - DeclNamespace* FindNamespace(std::string_view name) { - return const_cast<DeclNamespace*>(const_cast<const CodegenInput*>(this)->FindNamespace(name)); - } -}; |