From 7ede77c1d274cb207b36926bcbf6013408988907 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 20 Feb 2016 12:27:43 +0100 Subject: [PATCH] - fixed a few occurences where ACTION_RETURN_* eliminated the side effect of its argument when no return value was requested. This macro should not be used on function calls that actually perform an action aside from calculating the return value! --- src/thingdef/thingdef_codeptr.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/thingdef/thingdef_codeptr.cpp b/src/thingdef/thingdef_codeptr.cpp index 7b5f338751..e0d0fa5419 100644 --- a/src/thingdef/thingdef_codeptr.cpp +++ b/src/thingdef/thingdef_codeptr.cpp @@ -2008,13 +2008,15 @@ static bool DoGiveInventory(AActor *receiver, bool orresult, VM_ARGS) DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_GiveInventory) { PARAM_ACTION_PROLOGUE; - ACTION_RETURN_BOOL(DoGiveInventory(self, false, VM_ARGS_NAMES)); + bool result = DoGiveInventory(self, false, VM_ARGS_NAMES); + ACTION_RETURN_BOOL(result); } DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_GiveToTarget) { PARAM_ACTION_PROLOGUE; - ACTION_RETURN_BOOL(DoGiveInventory(self->target, false, VM_ARGS_NAMES)); + bool result = DoGiveInventory(self->target, false, VM_ARGS_NAMES); + ACTION_RETURN_BOOL(result); } DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_GiveToChildren) @@ -2094,13 +2096,15 @@ bool DoTakeInventory(AActor *receiver, bool orresult, VM_ARGS) DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_TakeInventory) { PARAM_ACTION_PROLOGUE; - ACTION_RETURN_BOOL(DoTakeInventory(self, false, VM_ARGS_NAMES)); + bool result = DoTakeInventory(self, false, VM_ARGS_NAMES); + ACTION_RETURN_BOOL(result); } DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_TakeFromTarget) { PARAM_ACTION_PROLOGUE; - ACTION_RETURN_BOOL(DoTakeInventory(self->target, false, VM_ARGS_NAMES)); + bool result = DoTakeInventory(self->target, false, VM_ARGS_NAMES); + ACTION_RETURN_BOOL(result); } DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_TakeFromChildren) @@ -2401,7 +2405,8 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SpawnItem) AActor *mo = Spawn( missile, self->Vec3Angle(distance, self->angle, -self->floorclip + self->GetBobOffset() + zheight), ALLOW_REPLACE); int flags = (transfer_translation ? SIXF_TRANSFERTRANSLATION : 0) + (useammo ? SIXF_SETMASTER : 0); - ACTION_RETURN_BOOL(InitSpawnedItem(self, mo, flags)); // for an inventory item's use state + bool result = InitSpawnedItem(self, mo, flags); + ACTION_RETURN_BOOL(result); // for an inventory item's use state } //=========================================================================== @@ -3250,7 +3255,8 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_JumpIf) PARAM_BOOL (condition); PARAM_STATE (jump); - ACTION_RETURN_STATE(condition ? jump : NULL); + if (!condition) jump = NULL; + ACTION_RETURN_STATE(jump); } //===========================================================================