diff --git a/src/ScriptResolving/AngelScript/AngelScripResolver.cpp b/src/ScriptResolving/AngelScript/AngelScripResolver.cpp index 161ec6c..47f1a42 100644 --- a/src/ScriptResolving/AngelScript/AngelScripResolver.cpp +++ b/src/ScriptResolving/AngelScript/AngelScripResolver.cpp @@ -196,20 +196,23 @@ void AngelScripResolver::CreateScript(const char* name, const char* script) { _builder.AddSectionFromMemory(name, script); } void AngelScripResolver::WriteByteCodeToFile(const char* file, bool stripDebugInfo) { - FILE* wFile = fopen(file, "w"); + FILE* wFile = nullptr; + wFile = fopen(file, "wb"); + AssertNotNull(wFile); auto stream = new FileByteCodeStream(wFile); _mainModule->SaveByteCode(stream, stripDebugInfo); - fclose(wFile); + Assert(fclose(wFile) == 0); delete stream; } void AngelScripResolver::LoadByteCodeFromFile( const char* file, const Dictionary>& types) { - FILE* rFile = fopen(file, "r"); + FILE* rFile = nullptr; + rFile = fopen(file, "rb"); + AssertNotNull(rFile); auto stream = new FileByteCodeStream(rFile); - LoadByteCode(stream, types); - fclose(rFile); + InitializeByteCode(stream, types); + Assert(fclose(rFile) == 0); delete stream; - //_typeDatabase = types; } uint8_t* AngelScripResolver::WriteByteCodeToMemory(size_t& size, bool stripDebugInfo) { auto stream = new MemoryByteCodeStream(); @@ -223,12 +226,14 @@ uint8_t* AngelScripResolver::WriteByteCodeToMemory(size_t& size, bool stripDebug } void AngelScripResolver::LoadByteCodeFromMemory( uint8_t* byte, size_t size, const Dictionary>& types) { + std::cout << "Loading from RAM" << std::endl; auto stream = new MemoryByteCodeStream(byte, size); - LoadByteCode(stream, types); + InitializeByteCode(stream, types); delete stream; } -void AngelScripResolver::LoadByteCode(asIBinaryStream* stream, +void AngelScripResolver::InitializeByteCode(asIBinaryStream* stream, const Dictionary>& types) { + std::cout << "Loading byte code" << std::endl; int result = _mainModule->LoadByteCode(stream); Assert(result == asSUCCESS); diff --git a/src/ScriptResolving/AngelScript/AngelScripResolver.hpp b/src/ScriptResolving/AngelScript/AngelScripResolver.hpp index d2495de..9ac1fcf 100644 --- a/src/ScriptResolving/AngelScript/AngelScripResolver.hpp +++ b/src/ScriptResolving/AngelScript/AngelScripResolver.hpp @@ -24,7 +24,7 @@ private: Dictionary> _typeDatabase; void RegisterTypes(); - void LoadByteCode(asIBinaryStream* stream, + void InitializeByteCode(asIBinaryStream* stream, const Dictionary>& types); public: diff --git a/tests/ScriptTests/ScriptResolverTests.cpp b/tests/ScriptTests/ScriptResolverTests.cpp index f53fd09..e37ebc1 100644 --- a/tests/ScriptTests/ScriptResolverTests.cpp +++ b/tests/ScriptTests/ScriptResolverTests.cpp @@ -30,7 +30,7 @@ TEST_CASE("Get a script resolver, initialize it, then delete it") { TEST_CASE("Get a script resolver, set script load function, load script, then build module") { auto lib = dynamic_cast(PkmnLib::Battling::BattleLibrary::CreateScriptResolver()); lib->Initialize(TestLibrary::GetLibrary()); - lib->CreateScript("testScript1" , _scripts["testScript1"]); + lib->CreateScript("testScript1", _scripts["testScript1"]); lib->FinalizeModule(); delete lib; } @@ -38,7 +38,7 @@ TEST_CASE("Get a script resolver, set script load function, load script, then bu TEST_CASE("Build script resolver, then create object") { auto lib = dynamic_cast(PkmnLib::Battling::BattleLibrary::CreateScriptResolver()); lib->Initialize(TestLibrary::GetLibrary()); - lib->CreateScript("testScript1" , _scripts["testScript1"]); + lib->CreateScript("testScript1", _scripts["testScript1"]); lib->FinalizeModule(); auto obj = lib->LoadScript(ScriptCategory::Creature, "testScript1"_cnc); @@ -50,11 +50,10 @@ TEST_CASE("Build script resolver, then create object") { TEST_CASE("Build script resolver, create object, invoke addition method") { auto lib = dynamic_cast(PkmnLib::Battling::BattleLibrary::CreateScriptResolver()); lib->Initialize(TestLibrary::GetLibrary()); - lib->CreateScript("testScript1" , _scripts["testScript1"]); + lib->CreateScript("testScript1", _scripts["testScript1"]); lib->FinalizeModule(); - auto obj = - dynamic_cast(lib->LoadScript(ScriptCategory::Creature, "testScript1"_cnc)); + auto obj = dynamic_cast(lib->LoadScript(ScriptCategory::Creature, "testScript1"_cnc)); REQUIRE(obj != nullptr); auto ctxPool = obj->GetContextPool(); auto ctx = ctxPool->RequestContext(); @@ -82,16 +81,16 @@ TEST_CASE("Build script resolver, create object, invoke addition method") { TEST_CASE("Get a script resolver, save the byte code to memory, create new script resolver from it") { auto originLib = dynamic_cast(PkmnLib::Battling::BattleLibrary::CreateScriptResolver()); originLib->Initialize(TestLibrary::GetLibrary()); - originLib->CreateScript("testScript1" , _scripts["testScript1"]); + originLib->CreateScript("testScript1", _scripts["testScript1"]); originLib->FinalizeModule(); size_t size; auto byteCode = originLib->WriteByteCodeToMemory(size); auto typeDatabase = originLib->GetTypeDatabase(); Dictionary> types; - for (auto& innerDb: typeDatabase){ + for (auto& innerDb : typeDatabase) { Dictionary newInnerDb; - for (auto& kv : innerDb.second){ + for (auto& kv : innerDb.second) { INFO(kv.second->GetDecl()); newInnerDb.Insert(kv.first, kv.second->GetDecl()); } @@ -101,46 +100,11 @@ TEST_CASE("Get a script resolver, save the byte code to memory, create new scrip auto newLib = dynamic_cast(PkmnLib::Battling::BattleLibrary::CreateScriptResolver()); newLib->Initialize(TestLibrary::GetLibrary()); newLib->LoadByteCodeFromMemory(byteCode, size, types); - auto obj = - dynamic_cast(newLib->LoadScript(ScriptCategory::Creature, "testScript1"_cnc)); + auto obj = dynamic_cast(newLib->LoadScript(ScriptCategory::Creature, "testScript1"_cnc)); REQUIRE(obj != nullptr); delete obj; delete originLib; delete newLib; free(byteCode); } - -TEST_CASE("Get a script resolver, save the byte code to file, create new script resolver from it") { - const char* TestFileName = "compiledAngelScriptTestFile.bin"; - auto originLib = dynamic_cast(PkmnLib::Battling::BattleLibrary::CreateScriptResolver()); - originLib->Initialize(TestLibrary::GetLibrary()); - originLib->CreateScript("testScript1" , _scripts["testScript1"]); - originLib->FinalizeModule(); - originLib->WriteByteCodeToFile(TestFileName); - auto typeDatabase = originLib->GetTypeDatabase(); - - Dictionary> types; - for (auto& innerDb: typeDatabase){ - Dictionary newInnerDb; - for (auto& kv : innerDb.second){ - INFO(kv.second->GetDecl()); - newInnerDb.Insert(kv.first, kv.second->GetDecl()); - } - types.Insert(innerDb.first, newInnerDb); - } - - auto newLib = dynamic_cast(PkmnLib::Battling::BattleLibrary::CreateScriptResolver()); - newLib->Initialize(TestLibrary::GetLibrary()); - newLib->LoadByteCodeFromFile(TestFileName, types); - auto obj = - dynamic_cast(newLib->LoadScript(ScriptCategory::Creature, "testScript1"_cnc)); - REQUIRE(obj != nullptr); - delete obj; - delete originLib; - delete newLib; - remove(TestFileName); -} - - - #endif \ No newline at end of file