Slight tweaks to writing byte code to file.
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
229850257b
commit
499f942104
|
@ -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<ScriptCategory, Dictionary<ConstString, const char*>>& 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<ScriptCategory, Dictionary<ConstString, const char*>>& 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<ScriptCategory, Dictionary<ConstString, const char*>>& types) {
|
||||
std::cout << "Loading byte code" << std::endl;
|
||||
int result = _mainModule->LoadByteCode(stream);
|
||||
Assert(result == asSUCCESS);
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ private:
|
|||
Dictionary<ScriptCategory, Dictionary<ConstString, AngelScriptTypeInfo*>> _typeDatabase;
|
||||
|
||||
void RegisterTypes();
|
||||
void LoadByteCode(asIBinaryStream* stream,
|
||||
void InitializeByteCode(asIBinaryStream* stream,
|
||||
const Dictionary<ScriptCategory, Dictionary<ConstString, const char*>>& types);
|
||||
|
||||
public:
|
||||
|
|
|
@ -53,8 +53,7 @@ TEST_CASE("Build script resolver, create object, invoke addition method") {
|
|||
lib->CreateScript("testScript1", _scripts["testScript1"]);
|
||||
lib->FinalizeModule();
|
||||
|
||||
auto obj =
|
||||
dynamic_cast<AngelScriptScript*>(lib->LoadScript(ScriptCategory::Creature, "testScript1"_cnc));
|
||||
auto obj = dynamic_cast<AngelScriptScript*>(lib->LoadScript(ScriptCategory::Creature, "testScript1"_cnc));
|
||||
REQUIRE(obj != nullptr);
|
||||
auto ctxPool = obj->GetContextPool();
|
||||
auto ctx = ctxPool->RequestContext();
|
||||
|
@ -101,46 +100,11 @@ TEST_CASE("Get a script resolver, save the byte code to memory, create new scrip
|
|||
auto newLib = dynamic_cast<AngelScripResolver*>(PkmnLib::Battling::BattleLibrary::CreateScriptResolver());
|
||||
newLib->Initialize(TestLibrary::GetLibrary());
|
||||
newLib->LoadByteCodeFromMemory(byteCode, size, types);
|
||||
auto obj =
|
||||
dynamic_cast<AngelScriptScript*>(newLib->LoadScript(ScriptCategory::Creature, "testScript1"_cnc));
|
||||
auto obj = dynamic_cast<AngelScriptScript*>(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<AngelScripResolver*>(PkmnLib::Battling::BattleLibrary::CreateScriptResolver());
|
||||
originLib->Initialize(TestLibrary::GetLibrary());
|
||||
originLib->CreateScript("testScript1" , _scripts["testScript1"]);
|
||||
originLib->FinalizeModule();
|
||||
originLib->WriteByteCodeToFile(TestFileName);
|
||||
auto typeDatabase = originLib->GetTypeDatabase();
|
||||
|
||||
Dictionary<ScriptCategory, Dictionary<ConstString, const char*>> types;
|
||||
for (auto& innerDb: typeDatabase){
|
||||
Dictionary<ConstString, const char*> 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<AngelScripResolver*>(PkmnLib::Battling::BattleLibrary::CreateScriptResolver());
|
||||
newLib->Initialize(TestLibrary::GetLibrary());
|
||||
newLib->LoadByteCodeFromFile(TestFileName, types);
|
||||
auto obj =
|
||||
dynamic_cast<AngelScriptScript*>(newLib->LoadScript(ScriptCategory::Creature, "testScript1"_cnc));
|
||||
REQUIRE(obj != nullptr);
|
||||
delete obj;
|
||||
delete originLib;
|
||||
delete newLib;
|
||||
remove(TestFileName);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue