From 5303bb8eff8e84f639baf8ac1623f79c805dbb83 Mon Sep 17 00:00:00 2001 From: Ross Date: Fri, 2 Apr 2021 11:32:04 -0700 Subject: [PATCH 1/3] adds serializer_header api --- include/coreir-c/coreir.h | 6 +++++- src/coreir-c/coreir-c.cpp | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/include/coreir-c/coreir.h b/include/coreir-c/coreir.h index ce8d4d65f..11a118bb1 100644 --- a/include/coreir-c/coreir.h +++ b/include/coreir-c/coreir.h @@ -20,6 +20,7 @@ void* CORENewMap( uint len, COREMapKind kind); + // Context COREreater/deleters extern COREContext* CORENewContext(); extern void COREDeleteContext(COREContext*); @@ -33,7 +34,6 @@ extern COREValueType* COREContextBool(COREContext* context); extern COREValueType* COREContextInt(COREContext* context); extern COREValueType* COREContextBitVector(COREContext* context); extern COREValueType* COREContextString(COREContext* context); -extern COREValueType* COREContextString(COREContext* context); extern bool COREContextRunPasses( COREContext* ctx, @@ -62,6 +62,10 @@ extern void CORESaveContext( COREBool* nocoreir, COREBool* no_default_libs, COREBool* err); + +extern void CORESerializeHeader(COREContext* context, char* filename, void* modules, uint num_modules, COREBool* err); +extern void CORESerializeDefinitions(COREContext* context, char* filename, char** module_names, COREBool* err); + extern CORENamespace* COREGetGlobal(COREContext* c); extern CORENamespace* COREGetNamespace(COREContext* c, char* name); extern CORENamespace* CORENewNamespace(COREContext* c, char* name); diff --git a/src/coreir-c/coreir-c.cpp b/src/coreir-c/coreir-c.cpp index 9468a6503..c5a2adaa9 100644 --- a/src/coreir-c/coreir-c.cpp +++ b/src/coreir-c/coreir-c.cpp @@ -293,6 +293,20 @@ void CORESaveModule(COREModule* module, char* filename, bool* err) { return; } +void CORESerializeHeader(COREContext* cc, char* filename, char** modules, uint num_modules, COREBool* err) { + Context* c = rcast(cc); + string file(filename); + vector vec_modules; + for (uint i=0; i< num_modules; ++i) { + vec_modules.emplace_back(modules[i]); + } + bool correct = serializeHeader(c, file, vec_modules); + *err = !correct; + return; +} +void CORESerializeDefinitions(char* filename, char** module_names, COREBool* err); + + CORENamespace* COREGetGlobal(COREContext* c) { return rcast(rcast(c)->getGlobal()); } From 3b420ea9d0174350881f0efa0867ad7ccb51251a Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 5 Apr 2021 09:08:59 -0700 Subject: [PATCH 2/3] adds loadheader api --- include/coreir-c/coreir.h | 4 ++-- src/coreir-c/coreir-c.cpp | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/include/coreir-c/coreir.h b/include/coreir-c/coreir.h index 11a118bb1..b92560e38 100644 --- a/include/coreir-c/coreir.h +++ b/include/coreir-c/coreir.h @@ -63,8 +63,8 @@ extern void CORESaveContext( COREBool* no_default_libs, COREBool* err); -extern void CORESerializeHeader(COREContext* context, char* filename, void* modules, uint num_modules, COREBool* err); -extern void CORESerializeDefinitions(COREContext* context, char* filename, char** module_names, COREBool* err); +extern void CORESerializeHeader(COREContext* context, char* filename, char** modules, uint num_modules, COREBool* err); +extern void CORESerializeDefinitions(COREContext* cc, char* filename, char** modules, uint num_modules, COREBool* err); extern CORENamespace* COREGetGlobal(COREContext* c); extern CORENamespace* COREGetNamespace(COREContext* c, char* name); diff --git a/src/coreir-c/coreir-c.cpp b/src/coreir-c/coreir-c.cpp index c5a2adaa9..4923b1654 100644 --- a/src/coreir-c/coreir-c.cpp +++ b/src/coreir-c/coreir-c.cpp @@ -304,8 +304,41 @@ void CORESerializeHeader(COREContext* cc, char* filename, char** modules, uint n *err = !correct; return; } -void CORESerializeDefinitions(char* filename, char** module_names, COREBool* err); +void CORESerializeDefinitions(COREContext* cc, char* filename, char** modules, uint num_modules, COREBool* err) { + Context* c = rcast(cc); + string file(filename); + vector vec_modules; + for (uint i = 0; i < num_modules; ++i) { + vec_modules.emplace_back(modules[i]); + } + bool correct = serializeDefinitions(c, file, vec_modules); + *err = !correct; + return; +} + +void CORELoadHeader(COREContext* cc, char* filename, char*** modules, uint* num_modules, COREBool* err) { + Context* c = rcast(cc); + std::string file(filename); + std::vector loaded_modules; + bool correct = loadHeader(c, file, loaded_modules); + *err = !correct; + if (correct) { + *num_modules = loaded_modules.size(); + *modules = c->newStringArray(loaded_modules.size()); + int count = 0; + for (auto m : loaded_modules) { + std::string mref = m->getRefName(); + std::size_t name_length = mref.size(); + (*modules)[count] = c->newStringBuffer(name_length + 1); + memcpy((*modules)[count], mref.c_str(), name_length + 1); + count++; + } + } + else { + *num_modules = 0; + } +} CORENamespace* COREGetGlobal(COREContext* c) { return rcast(rcast(c)->getGlobal()); From cfaa232872970ef2c88b69eaffdd77324e4949e2 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 5 Apr 2021 10:38:18 -0700 Subject: [PATCH 3/3] updates c api for link apis --- include/coreir-c/coreir.h | 6 ++++++ src/coreir-c/coreir-c.cpp | 17 +++++++++++++++++ src/ir/fileWriter.cpp | 17 +++++++++++++++-- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/include/coreir-c/coreir.h b/include/coreir-c/coreir.h index b92560e38..ee7fb1aa9 100644 --- a/include/coreir-c/coreir.h +++ b/include/coreir-c/coreir.h @@ -63,6 +63,12 @@ extern void CORESaveContext( COREBool* no_default_libs, COREBool* err); + +extern void CORESerializeToFile(COREContext* cc, char* filename, COREBool* err); + +extern void CORELoadHeader(COREContext* cc, char* filename, char*** modules, uint* num_modules, COREBool* err); +extern void CORELinkDefinitions(COREContext* cc, char* filename, COREBool* err); + extern void CORESerializeHeader(COREContext* context, char* filename, char** modules, uint num_modules, COREBool* err); extern void CORESerializeDefinitions(COREContext* cc, char* filename, char** modules, uint num_modules, COREBool* err); diff --git a/src/coreir-c/coreir-c.cpp b/src/coreir-c/coreir-c.cpp index 4923b1654..bcc3e4c90 100644 --- a/src/coreir-c/coreir-c.cpp +++ b/src/coreir-c/coreir-c.cpp @@ -284,6 +284,15 @@ void CORESaveContext( return; } +void CORESerializeToFile(COREContext* cc, char* filename, COREBool* err) { + string file(filename); + Context* c = rcast(cc); + bool correct = serializeToFile(c, file); + *err = !correct; + return; +} + + // bool saveToFile(Namespace* ns, string filename,Module* top=nullptr); void CORESaveModule(COREModule* module, char* filename, bool* err) { string file(filename); @@ -340,6 +349,14 @@ void CORELoadHeader(COREContext* cc, char* filename, char*** modules, uint* num_ } } +void CORELinkDefinitions(COREContext* cc, char* filename, COREBool* err) { + Context* c = rcast(cc); + std::string file(filename); + bool correct = linkDefinitions(c, file); + *err = !correct; +} + + CORENamespace* COREGetGlobal(COREContext* c) { return rcast(rcast(c)->getGlobal()); } diff --git a/src/ir/fileWriter.cpp b/src/ir/fileWriter.cpp index 24b0858de..9e487a9d4 100644 --- a/src/ir/fileWriter.cpp +++ b/src/ir/fileWriter.cpp @@ -170,8 +170,21 @@ bool saveToFile( } bool serializeToFile(Context* c, string filename) { - ASSERT(c->hasTop(), "Missing top"); - ASSERT(endsWith(filename, ".json"), filename + "Needs to be a json file"); + if (!c->hasTop()) { + Error e; + e.message("Missing Top " + filename); + e.fatal(); + c->error(e); + return false; + } + if (!endsWith(filename, ".json")) { + Error e; + e.message(filename + "Needs to be a json file"); + e.fatal(); + c->error(e); + return false; + } + std::ofstream file(filename); if (!file.is_open()) { Error e;