From 771cf20a49ff368a3560b16f417db15f299ea156 Mon Sep 17 00:00:00 2001 From: Charlie Brej Date: Wed, 9 Sep 2009 17:35:36 +0100 Subject: [PATCH] [script] Create new objects when incrementing/decrementing It is dangerous to directly edit a number as it may be referenced from multiple places. --- src/plugins/splash/script/script-execute.c | 27 ++++++++++++++-------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/plugins/splash/script/script-execute.c b/src/plugins/splash/script/script-execute.c index 731f6714..0a0edad9 100644 --- a/src/plugins/splash/script/script-execute.c +++ b/src/plugins/splash/script/script-execute.c @@ -193,21 +193,30 @@ static script_obj_t *script_evaluate_unary (script_state_t *state, return new_obj; } int change_pre = 0; - int change_post; + int change = -1; if ((exp->type == SCRIPT_EXP_TYPE_PRE_INC) || (exp->type == SCRIPT_EXP_TYPE_POST_INC)) - change_post = 1; - else - change_post = -1; - if (exp->type == SCRIPT_EXP_TYPE_PRE_INC) + change = 1; + if ((exp->type == SCRIPT_EXP_TYPE_PRE_INC) || + (exp->type == SCRIPT_EXP_TYPE_PRE_DEC)) change_pre = 1; - else if (exp->type == SCRIPT_EXP_TYPE_PRE_DEC) - change_pre = -1; + if (script_obj_is_number(obj)) { - new_obj = script_obj_new_number (script_obj_as_number(obj) + change_pre); - obj->data.number += change_post; + if (change_pre) + { + new_obj = script_obj_new_number (script_obj_as_number(obj) + change); + script_obj_assign (obj, new_obj); + } + else + { + new_obj = script_obj_deref_direct (obj); + script_obj_ref (new_obj); + script_obj_t *new_obj2 = script_obj_new_number (script_obj_as_number(obj) + change); + script_obj_assign (obj, new_obj2); + script_obj_unref (new_obj2); + } } else { -- 2.47.3