[script] Create new objects when incrementing/decrementing

It is dangerous to directly edit a number as it may be referenced from multiple
places.
This commit is contained in:
Charlie Brej 2009-09-09 17:35:36 +01:00
parent bdc31288c2
commit 771cf20a49

View file

@ -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
{