Changes for EffectParameter type in AngelScript, fixes for ConstString memory leak in AngelScript.
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2020-04-16 14:25:20 +02:00
parent 2ab9445b71
commit c11da2d966
8 changed files with 105 additions and 64 deletions

View File

@@ -2,7 +2,6 @@
#include <CreatureLib/Battling/Models/Creature.hpp>
#include <cassert>
#include <regex>
#include "../../../extern/angelscript_addons/scriptarray/scriptarray.h"
#include "../../../extern/angelscript_addons/scripthandle/scripthandle.h"
#include "../../../extern/angelscript_addons/scripthelper/scripthelper.h"
#include "../../../extern/angelscript_addons/scriptstdstring/scriptstdstring.h"
@@ -226,14 +225,12 @@ 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);
InitializeByteCode(stream, types);
delete 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);

View File

@@ -1,9 +1,11 @@
#include "ConstString.hpp"
using ConstString = Arbutils::CaseInsensitiveConstString;
static void ConstructConstString(ConstString* self) { self = new ConstString(); }
static void CopyConstructConstString(const ConstString& other, ConstString* self) { self = new ConstString(other); }
static void DestructConstString(ConstString* self) { self->~ConstString(); }
static void ConstructConstString(void* self) { new (self)ConstString(); }
static void CopyConstructConstString(const ConstString& other, void* self) { new (self)ConstString(other); }
static void DestructConstString(void* self) {
((ConstString*)self)->~ConstString();
}
static bool ConstStringEquality(const ConstString& a, const ConstString& b) { return a == b; }
static bool ConstStringStdStringEquality(const ConstString& a, const std::string& b) { return a == b; }
static ConstString ImplStdStringConstStringConv(const std::string& s) { return ConstString(s); }
@@ -12,7 +14,7 @@ static uint32_t ImplConstStringHashConv(const ConstString& s) { return s.GetHash
void ConstStringRegister::Register(asIScriptEngine* engine) {
auto r = engine->RegisterObjectType("constString", sizeof(Arbutils::CaseInsensitiveConstString),
asOBJ_VALUE | asOBJ_POD | asGetTypeTraits<ConstString>());
asOBJ_VALUE | asOBJ_APP_CLASS_CDAK);
Assert(r >= 0);
r = engine->RegisterObjectBehaviour("constString", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(ConstructConstString),
@@ -27,7 +29,7 @@ void ConstStringRegister::Register(asIScriptEngine* engine) {
asCALL_CDECL_OBJLAST);
Assert(r >= 0);
r = engine->RegisterObjectMethod("string", "constString &opAssign(const constString &in)",
r = engine->RegisterObjectMethod("constString", "constString &opAssign(const constString &in)",
asMETHODPR(ConstString, operator=,(const ConstString&), ConstString&),
asCALL_THISCALL);
Assert(r >= 0);

View File

@@ -4,7 +4,9 @@
static CreatureLib::Library::EffectParameter* Ref_Factory() { return new CreatureLib::Library::EffectParameter(); }
static std::string AsString(const CreatureLib::Library::EffectParameter* p) { return p->AsString(); }
static const Arbutils::CaseInsensitiveConstString& AsString(const CreatureLib::Library::EffectParameter* p) {
return p->AsString();
}
void RegisterEffectParameter::Register(asIScriptEngine* engine) {
[[maybe_unused]] int r = engine->RegisterEnum("EffectParameterType");
@@ -34,8 +36,9 @@ void RegisterEffectParameter::Register(asIScriptEngine* engine) {
r = engine->RegisterObjectMethod("EffectParameter", "float AsFloat() const",
asMETHOD(CreatureLib::Library::EffectParameter, AsFloat), asCALL_THISCALL);
Assert(r >= 0);
r = engine->RegisterObjectMethod(
"EffectParameter", "string AsString() const",
asFUNCTIONPR(AsString, (const CreatureLib::Library::EffectParameter*), std::string), asCALL_CDECL_OBJFIRST);
r = engine->RegisterObjectMethod("EffectParameter", "const constString& AsString() const",
asFUNCTIONPR(AsString, (const CreatureLib::Library::EffectParameter*),
const Arbutils::CaseInsensitiveConstString&),
asCALL_CDECL_OBJFIRST);
Assert(r >= 0);
}