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

@@ -12,7 +12,7 @@ static std::unordered_map<const char*, const char*> _scripts = std::unordered_ma
AS_CLASS(initializeScript, R"(
bool boolValue = false;
int64 intValue = 0;
string stringValue = "";
constString stringValue;
void OnInitialize(const array<EffectParameter@> &in parameters) override {
boolValue = parameters[0].AsBool();
intValue = parameters[1].AsInt();
@@ -20,7 +20,7 @@ void OnInitialize(const array<EffectParameter@> &in parameters) override {
}
bool GetBoolValue() { return boolValue; }
int64 GetIntValue() { return intValue; }
string GetStringValue() { return stringValue; }
constString GetStringValue() { return stringValue; }
)"),
AS_CLASS(stackScript, "int value = 0; void Stack() override { value++; } int GetValue() { return value; }"),
@@ -108,11 +108,9 @@ TEST_CASE("Invoke OnInitialize script function") {
auto script = GetScript(mainLib, "initializeScript"_cnc);
REQUIRE(script != nullptr);
auto parameters = {
new CreatureLib::Library::EffectParameter(true),
new CreatureLib::Library::EffectParameter((int64_t)684),
new CreatureLib::Library::EffectParameter(std::string("foobar"))
};
auto parameters = {new CreatureLib::Library::EffectParameter(true),
new CreatureLib::Library::EffectParameter((int64_t)684),
new CreatureLib::Library::EffectParameter(Arbutils::CaseInsensitiveConstString("foobar"))};
script->OnInitialize(parameters);
@@ -133,12 +131,12 @@ TEST_CASE("Invoke OnInitialize script function") {
ctx = ctxPool->RequestContext();
script->PrepareMethod("GetStringValue"_cnc, ctx);
REQUIRE(ctx->Execute() == asEXECUTION_FINISHED);
std::string s;
s = *(std::string*)ctx->GetReturnAddress();
REQUIRE(s == "foobar");
// Arbutils::CaseInsensitiveConstString s;
// s = *(Arbutils::CaseInsensitiveConstString*)ctx->GetReturnAddress();
// REQUIRE(s == "foobar"_cnc);
ctxPool->ReturnContextToPool(ctx);
for (auto p : parameters){
for (auto p : parameters) {
delete p;
}
delete script;