]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
[script] Create new objects when incrementing/decrementing
authorCharlie Brej <cbrej@cs.man.ac.uk>
Wed, 9 Sep 2009 16:35:36 +0000 (17:35 +0100)
committerCharlie Brej <cbrej@cs.man.ac.uk>
Wed, 9 Sep 2009 20:17:08 +0000 (21:17 +0100)
It is dangerous to directly edit a number as it may be referenced from multiple
places.

src/plugins/splash/script/script-execute.c

index 731f6714aafa061f24a3ededc95e04a3587a0031..0a0edad999ad0fc24b5c9424df480b420c5b3d8c 100644 (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
     {