From 8c2b1bd5bd85667a2ea24ec3aa85cbdd97f9ea1c Mon Sep 17 00:00:00 2001 From: rtk0c Date: Sun, 17 Jul 2022 23:09:00 -0700 Subject: Changeset: 85 Work on codegen (a big blob of changes about various things, giving up on writing a clear commit message) - stuff along the lines of cleaning up store process - remove completed TODOs - move code generation out of parser loop - ^^^ also introduce some weird bugs of DeclXxx::name field disappearing -- maybe fixed, maybe didn't, can't reliably reproduce - add infra to mangle (not included in codegen yet, also not tested) - convert SourceFile storage map to node map, ensuring pointer stability (was broken before) - buildsystem asan and UBsan applying to all targest --- source/20-codegen-compiler/CodegenModel.hpp | 32 ++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) (limited to 'source/20-codegen-compiler/CodegenModel.hpp') diff --git a/source/20-codegen-compiler/CodegenModel.hpp b/source/20-codegen-compiler/CodegenModel.hpp index 31ca04f..99c345d 100644 --- a/source/20-codegen-compiler/CodegenModel.hpp +++ b/source/20-codegen-compiler/CodegenModel.hpp @@ -2,22 +2,25 @@ #include "CodegenConfig.hpp" #include "CodegenDecl.hpp" +#include "CodegenModel.hpp" #include "CodegenUtils.hpp" +#include #include +#include #include #include using namespace std::literals; -class CodegenModel { +class CodegenRuntimeModel { private: class Private; Private* m; public: - CodegenModel(); - ~CodegenModel(); + CodegenRuntimeModel(); + ~CodegenRuntimeModel(); // Implementation detail helper, don't use outside Private& GetPimpl() const { return *m; } @@ -33,3 +36,26 @@ public: const DeclNamespace* FindNamespace(std::string_view fullname) const; DeclNamespace* FindNamespace(std::string_view name); }; + +class CodegenArchiveModel { +private: + class Private; + Private* m; + +public: + CodegenArchiveModel(std::string_view dbPath); + ~CodegenArchiveModel(); + + // Implementation detail helper, don't use outside + Private& GetPimpl() const { return *m; } + + void DeleteDeclsRelatedToFile(std::string_view filename); + + void Store(const CodegenRuntimeModel& model); + void LoadInto(CodegenRuntimeModel& model) const; + CodegenRuntimeModel Load() const; + + void StoreStruct(const DeclStruct& decl); + void StoreFunction(const DeclFunction& decl); + void StoreEnum(const DeclEnum& decl); +}; -- cgit v1.2.3-70-g09d2