]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
[script] Remove integer objects and rename floats "numbers"
authorCharlie Brej <cbrej@cs.man.ac.uk>
Wed, 26 Aug 2009 17:07:48 +0000 (18:07 +0100)
committerCharlie Brej <cbrej@cs.man.ac.uk>
Wed, 26 Aug 2009 17:07:48 +0000 (18:07 +0100)
Integers were upgraded to floats during many operations and there was no real
advantage to keep them.

13 files changed:
src/plugins/splash/script/script-execute.c
src/plugins/splash/script/script-lib-image.c
src/plugins/splash/script/script-lib-math.c
src/plugins/splash/script/script-lib-plymouth.c
src/plugins/splash/script/script-lib-plymouth.h
src/plugins/splash/script/script-lib-sprite.c
src/plugins/splash/script/script-lib-sprite.h
src/plugins/splash/script/script-object.c
src/plugins/splash/script/script-object.h
src/plugins/splash/script/script-parse.c
src/plugins/splash/script/script-scan.c
src/plugins/splash/script/script-scan.h
src/plugins/splash/script/script.h

index 033695663f42d2142275ab11d5e7952472372494..f5e97d5a1a909ede33b4cc3a2c300c3e1c5c349d 100644 (file)
@@ -147,8 +147,8 @@ static script_obj_t *script_evaluate_cmp (script_state_t           *state,
   script_obj_unref (script_obj_b);
   
   if (cmp_result & condition)
-    return script_obj_new_int (1);
-  return script_obj_new_int (0);
+    return script_obj_new_number (1);
+  return script_obj_new_number (0);
 }
 
 static script_obj_t *script_evaluate_logic (script_state_t *state,
@@ -173,7 +173,7 @@ static script_obj_t *script_evaluate_unary (script_state_t *state,
 
   if (exp->type == SCRIPT_EXP_TYPE_NOT)
     {
-      new_obj = script_obj_new_int (!script_obj_as_bool (obj));
+      new_obj = script_obj_new_number (!script_obj_as_bool (obj));
       script_obj_unref (obj);
       return new_obj;
     }
@@ -181,10 +181,8 @@ static script_obj_t *script_evaluate_unary (script_state_t *state,
     return obj;                             /* Does nothing, maybe just remove at parse stage */
   if (exp->type == SCRIPT_EXP_TYPE_NEG)
     {
-      if (script_obj_is_int(obj))
-        new_obj = script_obj_new_int (-script_obj_as_int (obj));
-      else if (script_obj_is_float(obj))
-        new_obj = script_obj_new_float (-script_obj_as_float (obj));
+      if (script_obj_is_number(obj))
+        new_obj = script_obj_new_number (-script_obj_as_number (obj));
       else new_obj = script_obj_new_null ();
       script_obj_unref (obj);
       return new_obj;
@@ -201,15 +199,10 @@ static script_obj_t *script_evaluate_unary (script_state_t *state,
     change_pre = 1;
   else if (exp->type == SCRIPT_EXP_TYPE_PRE_DEC)
     change_pre = -1;
-  if (script_obj_is_int(obj))
+  if (script_obj_is_number(obj))
     {
-      new_obj = script_obj_new_int (script_obj_as_int(obj) + change_pre);
-      obj->data.integer += change_post;                     /* FIXME direct access */
-    }
-  else if (script_obj_is_float(obj))
-    {
-      new_obj = script_obj_new_float (script_obj_as_float(obj) + change_pre);
-      obj->data.floatpoint += change_post;
+      new_obj = script_obj_new_number (script_obj_as_number(obj) + change_pre);
+      obj->data.number += change_post;
     }
   else
     {
@@ -338,14 +331,9 @@ static script_obj_t *script_evaluate (script_state_t *state,
           return script_evaluate_unary (state, exp);
         }
 
-      case SCRIPT_EXP_TYPE_TERM_INT:
-        {
-          return script_obj_new_int (exp->data.integer);
-        }
-
-      case SCRIPT_EXP_TYPE_TERM_FLOAT:
+      case SCRIPT_EXP_TYPE_TERM_NUMBER:
         {
-          return script_obj_new_float (exp->data.floatpoint);
+          return script_obj_new_number (exp->data.number);
         }
 
       case SCRIPT_EXP_TYPE_TERM_STRING:
@@ -488,7 +476,7 @@ static script_return_t script_execute_function_with_parlist (script_state_t    *
       node_data = ply_list_get_next_node (parameter_data, node_data);
     }
 
-  script_obj_t *count_obj = script_obj_new_int (index);
+  script_obj_t *count_obj = script_obj_new_number (index);
   script_obj_hash_add_element (arg_obj, count_obj, "count");
   script_obj_hash_add_element (sub_state->local, arg_obj, "_args");
   script_obj_unref (count_obj);
index 5ea2f0f6470c8fa7b6c0b2bcfe2f3a41418a1fc3..5903fac551cad7ee25d1cd783b19e22165008fae 100644 (file)
@@ -89,7 +89,7 @@ static script_return_t image_get_width (script_state_t *state,
                                                             "image",
                                                             data->class);
   if (image)
-    return script_return_obj (script_obj_new_int (ply_image_get_width (image)));
+    return script_return_obj (script_obj_new_number (ply_image_get_width (image)));
   return script_return_obj_null ();
 }
 
@@ -101,7 +101,7 @@ static script_return_t image_get_height (script_state_t *state,
                                                             "image",
                                                             data->class);
   if (image)
-    return script_return_obj (script_obj_new_int (ply_image_get_height (image)));
+    return script_return_obj (script_obj_new_number (ply_image_get_height (image)));
   return script_return_obj_null ();
 }
 
@@ -112,7 +112,7 @@ static script_return_t image_rotate (script_state_t *state,
   ply_image_t *image = script_obj_hash_get_native_of_class (state->local,
                                                             "image",
                                                             data->class);
-  float angle = script_obj_hash_get_float (state->local, "angle");
+  float angle = script_obj_hash_get_number (state->local, "angle");
 
   if (image)
     {
@@ -132,8 +132,8 @@ static script_return_t image_scale (script_state_t *state,
   ply_image_t *image = script_obj_hash_get_native_of_class (state->local,
                                                             "image",
                                                             data->class);
-  int width = script_obj_hash_get_int (state->local, "width");
-  int height = script_obj_hash_get_int (state->local, "height");
+  int width = script_obj_hash_get_number (state->local, "width");
+  int height = script_obj_hash_get_number (state->local, "height");
 
   if (image)
     {
index ecc1a90fc4dcc3ae7a5f6c1a22ca3728cb3eae0e..3b63b2a5be8509c5115b38b996f5374806706409 100644 (file)
 
 #include "script-lib-math.script.h"
 
-static script_return_t script_lib_math_float_from_float_function (script_state_t *state,
-                                                                  void           *user_data)
+static script_return_t script_lib_math_double_from_double_function (script_state_t *state,
+                                                                    void           *user_data)
 {
-  float (*function)(float) = user_data;
-  float value = script_obj_hash_get_float (state->local, "value");
-  float reply_float = function (value);
-  return script_return_obj (script_obj_new_float (reply_float));
+  double (*function)(double) = user_data;
+  double value = script_obj_hash_get_number (state->local, "value");
+  double reply_double = function (value);
+  return script_return_obj (script_obj_new_number (reply_double));
 }
 
 
-static script_return_t script_lib_math_float_from_float_float_function (script_state_t *state,
-                                                                  void           *user_data)
+static script_return_t script_lib_math_double_from_double_double_function (script_state_t *state,
+                                                                           void           *user_data)
 {
-  float (*function)(float, float) = user_data;
-  float value1 = script_obj_hash_get_float (state->local, "value_a");
-  float value2 = script_obj_hash_get_float (state->local, "value_b");
-  float reply_float = function (value1, value2);
-  return script_return_obj (script_obj_new_float (reply_float));
+  double (*function)(double, double) = user_data;
+  double value1 = script_obj_hash_get_number (state->local, "value_a");
+  double value2 = script_obj_hash_get_number (state->local, "value_b");
+  double reply_double = function (value1, value2);
+  return script_return_obj (script_obj_new_number (reply_double));
 }
 
-static script_return_t script_lib_math_int_from_float_function (script_state_t *state,
-                                                                void           *user_data)
+static double double_to_int (double value)
 {
-  int (*function)(float) = user_data;
-  float value = script_obj_hash_get_float (state->local, "value");
-  int reply_int = function (value);
-  return script_return_obj (script_obj_new_int (reply_int));
-}
-
-static int float_to_int (float value)
-{
-  return (int) value;
+  return (double) (int) value;
 }
 
 script_lib_math_data_t *script_lib_math_setup (script_state_t *state)
@@ -76,39 +67,39 @@ script_lib_math_data_t *script_lib_math_setup (script_state_t *state)
 
   script_add_native_function (state->global,
                               "MathCos",
-                              script_lib_math_float_from_float_function,
-                              cosf,
+                              script_lib_math_double_from_double_function,
+                              cos,
                               "value",
                               NULL);
   script_add_native_function (state->global,
                               "MathSin",
-                              script_lib_math_float_from_float_function,
-                              sinf,
+                              script_lib_math_double_from_double_function,
+                              sin,
                               "value",
                               NULL);
   script_add_native_function (state->global,
                               "MathTan",
-                              script_lib_math_float_from_float_function,
-                              tanf,
+                              script_lib_math_double_from_double_function,
+                              tan,
                               "value",
                               NULL);
   script_add_native_function (state->global,
                               "MathATan2",
-                              script_lib_math_float_from_float_float_function,
-                              atan2f,
+                              script_lib_math_double_from_double_double_function,
+                              atan2,
                               "value_a",
                               "value_b",
                               NULL);
   script_add_native_function (state->global,
                               "MathSqrt",
-                              script_lib_math_float_from_float_function,
-                              sqrtf,
+                              script_lib_math_double_from_double_function,
+                              sqrt,
                               "value",
                               NULL);
   script_add_native_function (state->global,
                               "MathInt",
-                              script_lib_math_int_from_float_function,
-                              float_to_int,
+                              script_lib_math_double_from_double_function,
+                              double_to_int,
                               "value",
                               NULL);
 
index be8275abc1c4b5110d3029d6b6f0865288d1702d..d3b5f4cbafeb6212a64ea22388bc28380f929797 100644 (file)
@@ -159,14 +159,14 @@ void script_lib_plymouth_on_refresh (script_state_t             *state,
 
 void script_lib_plymouth_on_boot_progress (script_state_t             *state,
                                            script_lib_plymouth_data_t *data,
-                                           float                       duration,
-                                           float                       progress)
+                                           double                     duration,
+                                           double                     progress)
 {
   script_function_t *function = script_obj_as_function (data->script_boot_progress_func);
   if (function)
     {
-      script_obj_t *duration_obj = script_obj_new_float (duration);
-      script_obj_t *progress_obj = script_obj_new_float (progress);
+      script_obj_t *duration_obj = script_obj_new_number (duration);
+      script_obj_t *progress_obj = script_obj_new_number (progress);
       script_return_t ret = script_execute_function (state,
                                                      function,
                                                      duration_obj,
@@ -247,7 +247,7 @@ void script_lib_plymouth_on_display_password (script_state_t             *state,
   if (function)
     {
       script_obj_t *prompt_obj = script_obj_new_string (prompt);
-      script_obj_t *bullets_obj = script_obj_new_int (bullets);
+      script_obj_t *bullets_obj = script_obj_new_number (bullets);
       script_return_t ret = script_execute_function (state,
                                                      function,
                                                      prompt_obj,
index 062a3482113b5f6acfda068050163f9c2ec31ee3..649f5ea1735ec27e5f6083ba04c7b68f5e943126 100644 (file)
@@ -45,8 +45,8 @@ void script_lib_plymouth_on_refresh (script_state_t             *state,
                                      script_lib_plymouth_data_t *data);
 void script_lib_plymouth_on_boot_progress (script_state_t             *state,
                                            script_lib_plymouth_data_t *data,
-                                           float                       duration,
-                                           float                       progress);
+                                           double                     duration,
+                                           double                     progress);
 void script_lib_plymouth_on_root_mounted (script_state_t             *state,
                                           script_lib_plymouth_data_t *data);
 void script_lib_plymouth_on_keyboard_input (script_state_t             *state,
index d6c1773ff612eb9f703355457a1fc54e9223cfbe..b883e684e9feb682cd729df625fb20d49b69df20 100644 (file)
@@ -105,7 +105,7 @@ static script_return_t sprite_set_x (script_state_t *state,
                                                           data->class);
 
   if (sprite)
-    sprite->x = script_obj_hash_get_int (state->local, "value");
+    sprite->x = script_obj_hash_get_number (state->local, "value");
   return script_return_obj_null ();
 }
 
@@ -118,7 +118,7 @@ static script_return_t sprite_set_y (script_state_t *state,
                                                           data->class);
 
   if (sprite)
-    sprite->y = script_obj_hash_get_int (state->local, "value");
+    sprite->y = script_obj_hash_get_number (state->local, "value");
   return script_return_obj_null ();
 }
 
@@ -131,7 +131,7 @@ static script_return_t sprite_set_z (script_state_t *state,
                                                           data->class);
 
   if (sprite)
-    sprite->z = script_obj_hash_get_int (state->local, "value");
+    sprite->z = script_obj_hash_get_number (state->local, "value");
   return script_return_obj_null ();
 }
 
@@ -144,7 +144,7 @@ static script_return_t sprite_set_opacity (script_state_t *state,
                                                           data->class);
 
   if (sprite)
-    sprite->opacity = script_obj_hash_get_float (state->local, "value");
+    sprite->opacity = script_obj_hash_get_number (state->local, "value");
   return script_return_obj_null ();
 }
 
@@ -156,7 +156,7 @@ static script_return_t sprite_window_get_width (script_state_t *state,
   ply_frame_buffer_area_t area;
 
   ply_frame_buffer_get_size (frame_buffer, &area);
-  return script_return_obj (script_obj_new_int (area.width));
+  return script_return_obj (script_obj_new_number (area.width));
 }
 
 static script_return_t sprite_window_get_height (script_state_t *state,
@@ -167,14 +167,14 @@ static script_return_t sprite_window_get_height (script_state_t *state,
   ply_frame_buffer_area_t area;
 
   ply_frame_buffer_get_size (frame_buffer, &area);
-  return script_return_obj (script_obj_new_int (area.height));
+  return script_return_obj (script_obj_new_number (area.height));
 }
 
 static uint32_t extract_rgb_color (script_state_t *state)
 {
-  uint8_t red =   CLAMP (255 * script_obj_hash_get_float (state->local, "red"),   0, 255);
-  uint8_t green = CLAMP (255 * script_obj_hash_get_float (state->local, "green"), 0, 255);
-  uint8_t blue =  CLAMP (255 * script_obj_hash_get_float (state->local, "blue"),  0, 255);
+  uint8_t red =   CLAMP (255 * script_obj_hash_get_number (state->local, "red"),   0, 255);
+  uint8_t green = CLAMP (255 * script_obj_hash_get_number (state->local, "green"), 0, 255);
+  uint8_t blue =  CLAMP (255 * script_obj_hash_get_number (state->local, "blue"),  0, 255);
 
   return (uint32_t) red << 16 | green << 8 | blue;
 }
index b365418c65192c39955c3a5a2404e37cec1da7dc..8c9cbbc9c3faa4694a05993f39064352dcfb6b0d 100644 (file)
@@ -40,13 +40,13 @@ typedef struct
   int           x;
   int           y;
   int           z;
-  float         opacity;
+  double        opacity;
   int           old_x;
   int           old_y;
   int           old_z;
   int           old_width;
   int           old_height;
-  float         old_opacity;
+  double        old_opacity;
   bool          refresh_me;
   bool          remove_me;
   ply_image_t  *image;
index 3a9ef4c78047eea711e9b711a85886886310d50f..041255cc4d4505d425872cf45e631f7eb2d53c4c 100644 (file)
@@ -78,10 +78,7 @@ void script_obj_reset (script_obj_t *obj)
         script_obj_unref (obj->data.obj);
         break;
 
-      case SCRIPT_OBJ_TYPE_INT:
-        break;
-
-      case SCRIPT_OBJ_TYPE_FLOAT:
+      case SCRIPT_OBJ_TYPE_NUMBER:
         break;
 
       case SCRIPT_OBJ_TYPE_STRING:
@@ -151,23 +148,13 @@ script_obj_t *script_obj_new_null (void)
   return obj;
 }
 
-script_obj_t *script_obj_new_int (int number)
-{
-  script_obj_t *obj = malloc (sizeof (script_obj_t));
-
-  obj->type = SCRIPT_OBJ_TYPE_INT;
-  obj->refcount = 1;
-  obj->data.integer = number;
-  return obj;
-}
-
-script_obj_t *script_obj_new_float (float number)
+script_obj_t *script_obj_new_number (script_number_t number)
 {
   if (isnan (number)) return script_obj_new_null ();
   script_obj_t *obj = malloc (sizeof (script_obj_t));
-  obj->type = SCRIPT_OBJ_TYPE_FLOAT;
+  obj->type = SCRIPT_OBJ_TYPE_NUMBER;
   obj->refcount = 1;
-  obj->data.floatpoint = number;
+  obj->data.number = number;
   return obj;
 }
 
@@ -224,42 +211,13 @@ script_obj_t *script_obj_new_native (void                      *object_data,
   return obj;
 }
 
-int script_obj_as_int (script_obj_t *obj)
-{                                                     /* If in then reply contents, otherwise reply 0 */
-  obj = script_obj_deref_direct (obj);
-  switch (obj->type)
-    {
-      case SCRIPT_OBJ_TYPE_INT:
-        return obj->data.integer;
-
-      case SCRIPT_OBJ_TYPE_FLOAT:
-        return (int) obj->data.floatpoint;
-
-      case SCRIPT_OBJ_TYPE_NULL:
-        return 0;
-
-      case SCRIPT_OBJ_TYPE_REF:
-      case SCRIPT_OBJ_TYPE_HASH:
-      case SCRIPT_OBJ_TYPE_FUNCTION:
-      case SCRIPT_OBJ_TYPE_NATIVE:
-        return 0;
-
-      case SCRIPT_OBJ_TYPE_STRING:
-        return 0;
-    }
-  return 0;
-}
-
-float script_obj_as_float (script_obj_t *obj)
+script_number_t script_obj_as_number (script_obj_t *obj)
 {                                                     /* If in then reply contents, otherwise reply 0 */
   obj = script_obj_deref_direct (obj);
   switch (obj->type)
     {
-      case SCRIPT_OBJ_TYPE_INT:
-        return (float) obj->data.integer;
-
-      case SCRIPT_OBJ_TYPE_FLOAT:
-        return obj->data.floatpoint;
+      case SCRIPT_OBJ_TYPE_NUMBER:
+        return obj->data.number;
 
       case SCRIPT_OBJ_TYPE_NULL:
         return NAN;
@@ -281,12 +239,8 @@ bool script_obj_as_bool (script_obj_t *obj)
   obj = script_obj_deref_direct (obj);
   switch (obj->type)
     {
-      case SCRIPT_OBJ_TYPE_INT:
-        if (obj->data.integer) return true;
-        return false;
-
-      case SCRIPT_OBJ_TYPE_FLOAT:
-        if (fabs (obj->data.floatpoint) > FLT_MIN) return true;
+      case SCRIPT_OBJ_TYPE_NUMBER:
+        if (fabs (obj->data.number) > FLT_MIN) return true;
         return false;
 
       case SCRIPT_OBJ_TYPE_NULL:
@@ -312,12 +266,8 @@ char *script_obj_as_string (script_obj_t *obj)              /* reply is strduppe
 
   switch (obj->type)
     {
-      case SCRIPT_OBJ_TYPE_INT:
-        asprintf (&reply, "%d", obj->data.integer);
-        return reply;
-
-      case SCRIPT_OBJ_TYPE_FLOAT:
-        asprintf (&reply, "%f", obj->data.floatpoint);
+      case SCRIPT_OBJ_TYPE_NUMBER:
+        asprintf (&reply, "%g", obj->data.number);
         return reply;
 
       case SCRIPT_OBJ_TYPE_NULL:
@@ -369,22 +319,10 @@ bool script_obj_is_null (script_obj_t *obj)
   return obj->type == SCRIPT_OBJ_TYPE_NULL;
 }
 
-bool script_obj_is_int (script_obj_t *obj)
-{
-  obj = script_obj_deref_direct (obj);
-  return obj->type == SCRIPT_OBJ_TYPE_INT;
-}
-
-bool script_obj_is_float (script_obj_t *obj)
+bool script_obj_is_number (script_obj_t *obj)
 {
   obj = script_obj_deref_direct (obj);
-  return obj->type == SCRIPT_OBJ_TYPE_FLOAT;
-}
-
-bool script_obj_is_number (script_obj_t *obj)     /* Float or Int */
-{
-  obj = script_obj_deref_direct (obj);
-  return obj->type == SCRIPT_OBJ_TYPE_INT || obj->type == SCRIPT_OBJ_TYPE_FLOAT;
+  return obj->type == SCRIPT_OBJ_TYPE_NUMBER;
 }
 
 bool script_obj_is_string (script_obj_t *obj)
@@ -440,14 +378,9 @@ void script_obj_assign (script_obj_t *obj_a,
         obj_a->type = SCRIPT_OBJ_TYPE_NULL;
         break;
 
-      case SCRIPT_OBJ_TYPE_INT:
-        obj_a->type = SCRIPT_OBJ_TYPE_INT;
-        obj_a->data.integer = obj_b->data.integer;
-        break;
-
-      case SCRIPT_OBJ_TYPE_FLOAT:
-        obj_a->type = SCRIPT_OBJ_TYPE_FLOAT;
-        obj_a->data.floatpoint = obj_b->data.floatpoint;
+      case SCRIPT_OBJ_TYPE_NUMBER:
+        obj_a->type = SCRIPT_OBJ_TYPE_NUMBER;
+        obj_a->data.number = obj_b->data.number;
         break;
 
       case SCRIPT_OBJ_TYPE_STRING:
@@ -490,21 +423,11 @@ script_obj_t *script_obj_hash_get_element (script_obj_t *hash,
   return obj;
 }
 
-int script_obj_hash_get_int (script_obj_t *hash,
-                             const char   *name)
-{
-  script_obj_t *obj = script_obj_hash_get_element (hash, name);
-  int reply = script_obj_as_int (obj);
-
-  script_obj_unref (obj);
-  return reply;
-}
-
-float script_obj_hash_get_float (script_obj_t *hash,
-                                 const char   *name)
+script_number_t script_obj_hash_get_number (script_obj_t *hash,
+                                            const char   *name)
 {
   script_obj_t *obj = script_obj_hash_get_element (hash, name);
-  float reply = script_obj_as_float (obj);
+  script_number_t reply = script_obj_as_number (obj);
 
   script_obj_unref (obj);
   return reply;
@@ -595,13 +518,8 @@ script_obj_t *script_obj_plus (script_obj_t *script_obj_a,
     }
   if (script_obj_is_number (script_obj_a) && script_obj_is_number (script_obj_b))
     {
-      if (script_obj_is_int (script_obj_a) && script_obj_is_int (script_obj_b))
-        {
-          int value = script_obj_as_int (script_obj_a) + script_obj_as_int (script_obj_b);
-          return script_obj_new_int (value);
-        }
-      float value = script_obj_as_float (script_obj_a) + script_obj_as_float (script_obj_b);
-      return script_obj_new_float (value);
+      script_number_t value = script_obj_as_number (script_obj_a) + script_obj_as_number (script_obj_b);
+      return script_obj_new_number (value);
     }
   return script_obj_new_null ();
 }
@@ -611,13 +529,8 @@ script_obj_t *script_obj_minus (script_obj_t *script_obj_a,
 {
   if (script_obj_is_number (script_obj_a) && script_obj_is_number (script_obj_b))
     {
-      if (script_obj_is_int (script_obj_a) && script_obj_is_int (script_obj_b))
-        {
-          int value = script_obj_as_int (script_obj_a) - script_obj_as_int (script_obj_b);
-          return script_obj_new_int (value);
-        }
-      float value = script_obj_as_float (script_obj_a) - script_obj_as_float (script_obj_b);
-      return script_obj_new_float (value);
+      script_number_t value = script_obj_as_number (script_obj_a) - script_obj_as_number (script_obj_b);
+      return script_obj_new_number (value);
     }
   return script_obj_new_null ();
 }
@@ -627,13 +540,8 @@ script_obj_t *script_obj_mul (script_obj_t *script_obj_a,
 {
   if (script_obj_is_number (script_obj_a) && script_obj_is_number (script_obj_b))
     {
-      if (script_obj_is_int (script_obj_a) && script_obj_is_int (script_obj_b))
-        {
-          int value = script_obj_as_int (script_obj_a) * script_obj_as_int (script_obj_b);
-          return script_obj_new_int (value);
-        }
-      float value = script_obj_as_float (script_obj_a) * script_obj_as_float (script_obj_b);
-      return script_obj_new_float (value);
+      script_number_t value = script_obj_as_number (script_obj_a) * script_obj_as_number (script_obj_b);
+      return script_obj_new_number (value);
     }
   return script_obj_new_null ();
 }
@@ -643,15 +551,8 @@ script_obj_t *script_obj_div (script_obj_t *script_obj_a,
 {
   if (script_obj_is_number (script_obj_a) && script_obj_is_number (script_obj_b))
     {
-      if (script_obj_is_int (script_obj_a) && script_obj_is_int (script_obj_b))
-        if (script_obj_as_int (script_obj_a) %
-            script_obj_as_int (script_obj_b) == 0)
-          {
-            int value = script_obj_as_int (script_obj_a) / script_obj_as_int (script_obj_b);
-            return script_obj_new_int (value);
-          }
-      float value = script_obj_as_float (script_obj_a) / script_obj_as_float (script_obj_b);
-      return script_obj_new_float (value);
+      script_number_t value = script_obj_as_number (script_obj_a) / script_obj_as_number (script_obj_b);
+      return script_obj_new_number (value);
     }
   return script_obj_new_null ();
 }
@@ -661,13 +562,8 @@ script_obj_t *script_obj_mod (script_obj_t *script_obj_a,
 {
   if (script_obj_is_number (script_obj_a) && script_obj_is_number (script_obj_b))
     {
-      if (script_obj_is_int (script_obj_a) && script_obj_is_int (script_obj_b))
-        {
-          int value = script_obj_as_int (script_obj_a) % script_obj_as_int (script_obj_b);
-          return script_obj_new_int (value);
-        }
-      float value = fmodf (script_obj_as_float (script_obj_a), script_obj_as_float (script_obj_b));
-      return script_obj_new_float (value);
+      script_number_t value = fmodl (script_obj_as_number (script_obj_a), script_obj_as_number (script_obj_b));
+      return script_obj_new_number (value);
     }
   return script_obj_new_null ();
 }
@@ -684,7 +580,7 @@ script_obj_cmp_result_t script_obj_cmp (script_obj_t *script_obj_a,
     {
       if (script_obj_is_number (script_obj_b))
         {
-          float diff = script_obj_as_float (script_obj_a) - script_obj_as_float (script_obj_b);
+          script_number_t diff = script_obj_as_number (script_obj_a) - script_obj_as_number (script_obj_b);
           if (diff < 0) return SCRIPT_OBJ_CMP_RESULT_LT;
           if (diff > 0) return SCRIPT_OBJ_CMP_RESULT_GT;
           return SCRIPT_OBJ_CMP_RESULT_EQ;
index 4740cccf52b8124bee7395375d8fd956f1455fb9..af166825d606d5915d5efc23bdb433c2db47d3ae 100644 (file)
@@ -39,8 +39,7 @@ void script_obj_unref (script_obj_t *obj);
 void script_obj_reset (script_obj_t *obj);
 script_obj_t *script_obj_deref_direct (script_obj_t *obj);
 void script_obj_deref (script_obj_t **obj_ptr);
-script_obj_t *script_obj_new_int (int number);
-script_obj_t *script_obj_new_float (float number);
+script_obj_t *script_obj_new_number (script_number_t number);
 script_obj_t *script_obj_new_string (const char *string);
 script_obj_t *script_obj_new_null (void);
 script_obj_t *script_obj_new_hash (void);
@@ -49,8 +48,7 @@ script_obj_t *script_obj_new_ref (script_obj_t *sub_obj);
 
 script_obj_t *script_obj_new_native (void                       *object_data,
                                      script_obj_native_class_t  *class );
-int script_obj_as_int (script_obj_t *obj);
-float script_obj_as_float (script_obj_t *obj);
+script_number_t script_obj_as_number (script_obj_t *obj);
 bool script_obj_as_bool (script_obj_t *obj);
 char *script_obj_as_string (script_obj_t *obj);
 script_function_t *script_obj_as_function (script_obj_t *obj);
@@ -59,8 +57,6 @@ void *script_obj_as_native_of_class (script_obj_t              *obj,
 void *script_obj_as_native_of_class_name (script_obj_t *obj,
                                           const char   *class_name);
 bool script_obj_is_null (script_obj_t *obj);
-bool script_obj_is_int (script_obj_t *obj);
-bool script_obj_is_float (script_obj_t *obj);
 bool script_obj_is_number (script_obj_t *obj);
 bool script_obj_is_string (script_obj_t *obj);
 bool script_obj_is_hash (script_obj_t *obj);
@@ -75,10 +71,8 @@ void script_obj_assign (script_obj_t *obj_a,
                         script_obj_t *obj_b);
 script_obj_t *script_obj_hash_get_element (script_obj_t *hash,
                                            const char   *name);
-int script_obj_hash_get_int (script_obj_t *hash,
-                             const char   *name);
-float script_obj_hash_get_float (script_obj_t *hash,
-                                 const char   *name);
+script_number_t script_obj_hash_get_number (script_obj_t *hash,
+                                            const char   *name);
 bool script_obj_hash_get_bool (script_obj_t *hash,
                                const char   *name);
 char *script_obj_hash_get_string (script_obj_t *hash,
index ab5a0c29b76bcc7f24a3dcba7c8e12ecfb5423da..cebf4f95e72c9d98e3d4c79f0117bf2f2e5cfb6c 100644 (file)
@@ -167,16 +167,16 @@ static script_exp_t *script_parse_exp_tm (script_scan_t *scan)
   if (script_scan_token_is_integer (curtoken))
     {
       exp = malloc (sizeof (script_exp_t));
-      exp->type = SCRIPT_EXP_TYPE_TERM_INT;
-      exp->data.integer = curtoken->data.integer;
+      exp->type = SCRIPT_EXP_TYPE_TERM_NUMBER;
+      exp->data.number = curtoken->data.integer;
       script_scan_get_next_token (scan);
       return exp;
     }
   if (script_scan_token_is_float (curtoken))
     {
       exp = malloc (sizeof (script_exp_t));
-      exp->type = SCRIPT_EXP_TYPE_TERM_FLOAT;
-      exp->data.floatpoint = curtoken->data.floatpoint;
+      exp->type = SCRIPT_EXP_TYPE_TERM_NUMBER;
+      exp->data.number = curtoken->data.floatpoint;
       script_scan_get_next_token (scan);
       return exp;
     }
@@ -283,12 +283,6 @@ static script_exp_t *script_parse_exp_pi (script_scan_t *scan)
               key->type = SCRIPT_EXP_TYPE_TERM_STRING;
               key->data.string = strdup (curtoken->data.string);
             }
-          else if (script_scan_token_is_integer (curtoken))       /* errrr, integer keys without being [] bracketed */
-            {
-              key = malloc (sizeof (script_exp_t));                       /* This is broken with floats as obj.10.6 is obj[10.6] and not obj[10][6] */
-              key->type = SCRIPT_EXP_TYPE_TERM_INT;
-              key->data.integer = curtoken->data.integer;
-            }
           else
             {
               script_parse_error (curtoken,
@@ -742,8 +736,7 @@ static void script_parse_exp_free (script_exp_t *exp)
         script_parse_exp_free (exp->data.sub);
         break;
 
-      case SCRIPT_EXP_TYPE_TERM_INT:
-      case SCRIPT_EXP_TYPE_TERM_FLOAT:
+      case SCRIPT_EXP_TYPE_TERM_NUMBER:
       case SCRIPT_EXP_TYPE_TERM_NULL:
       case SCRIPT_EXP_TYPE_TERM_LOCAL:
       case SCRIPT_EXP_TYPE_TERM_GLOBAL:
@@ -875,7 +868,7 @@ script_op_t *script_parse_file (const char *filename)
   ply_list_t *list = script_parse_op_list (scan);
 
   script_scan_token_t *curtoken = script_scan_get_current_token (scan);
-  if (curtoken->type != script_scan_TOKEN_TYPE_EOF)
+  if (curtoken->type != SCRIPT_SCAN_TOKEN_TYPE_EOF)
     {
       script_parse_error (curtoken, "Unparsed characters at end of file");
       return NULL;
index 5910b187d29160f2b8ac78c9146dddbe8dc3d9a9..7c59c385439f16c8b05e07730904f59c25e3fd23 100644 (file)
@@ -83,20 +83,20 @@ void script_scan_token_clean (script_scan_token_t *token)
 {
   switch (token->type)
     {
-      case script_scan_TOKEN_TYPE_EMPTY:
-      case script_scan_TOKEN_TYPE_EOF:
-      case script_scan_TOKEN_TYPE_INTEGER:
-      case script_scan_TOKEN_TYPE_FLOAT:
-      case script_scan_TOKEN_TYPE_SYMBOL:
+      case SCRIPT_SCAN_TOKEN_TYPE_EMPTY:
+      case SCRIPT_SCAN_TOKEN_TYPE_EOF:
+      case SCRIPT_SCAN_TOKEN_TYPE_INTEGER:
+      case SCRIPT_SCAN_TOKEN_TYPE_FLOAT:
+      case SCRIPT_SCAN_TOKEN_TYPE_SYMBOL:
         break;
-      case script_scan_TOKEN_TYPE_IDENTIFIER:
-      case script_scan_TOKEN_TYPE_STRING:
-      case script_scan_TOKEN_TYPE_COMMENT:
-      case script_scan_TOKEN_TYPE_ERROR:
+      case SCRIPT_SCAN_TOKEN_TYPE_IDENTIFIER:
+      case SCRIPT_SCAN_TOKEN_TYPE_STRING:
+      case SCRIPT_SCAN_TOKEN_TYPE_COMMENT:
+      case SCRIPT_SCAN_TOKEN_TYPE_ERROR:
         free (token->data.string);
         break;
     }
-  token->type = script_scan_TOKEN_TYPE_EMPTY;
+  token->type = SCRIPT_SCAN_TOKEN_TYPE_EMPTY;
   token->whitespace = 0;
 }
 
@@ -178,7 +178,7 @@ void script_scan_read_next_token (script_scan_t       *scan,
   if (ply_bitarray_lookup (scan->identifier_1st_char, curchar))
     {
       int index = 1;
-      token->type = script_scan_TOKEN_TYPE_IDENTIFIER;
+      token->type = SCRIPT_SCAN_TOKEN_TYPE_IDENTIFIER;
       token->data.string =  malloc (2 * sizeof (char));
       token->data.string[0] = curchar;
       token->data.string[1] = '\0';
@@ -217,24 +217,24 @@ void script_scan_read_next_token (script_scan_t       *scan,
               floatpoint += scalar * (curchar - '0');
               curchar = script_scan_get_next_char (scan);
             }
-          token->type = script_scan_TOKEN_TYPE_FLOAT;
+          token->type = SCRIPT_SCAN_TOKEN_TYPE_FLOAT;
           token->data.floatpoint = floatpoint;
         }
       else
         {
-          token->type = script_scan_TOKEN_TYPE_INTEGER;
+          token->type = SCRIPT_SCAN_TOKEN_TYPE_INTEGER;
           token->data.integer = int_value;
         }
       return;
     }
   if (!curchar)
     {
-      token->type = script_scan_TOKEN_TYPE_EOF;
+      token->type = SCRIPT_SCAN_TOKEN_TYPE_EOF;
       return;
     }
   if (curchar == '\"')
     {
-      token->type = script_scan_TOKEN_TYPE_STRING;
+      token->type = SCRIPT_SCAN_TOKEN_TYPE_STRING;
       int index = 0;
       token->data.string = malloc (sizeof (char));
       token->data.string[0] = '\0';
@@ -245,13 +245,13 @@ void script_scan_read_next_token (script_scan_t       *scan,
           if (curchar == '\0')
             {
               token->data.string = strdup("End of file before end of string");
-              token->type = script_scan_TOKEN_TYPE_ERROR;
+              token->type = SCRIPT_SCAN_TOKEN_TYPE_ERROR;
               return;
             }
           if (curchar == '\n')
             {
               token->data.string = strdup("Line terminator before end of string");
-              token->type = script_scan_TOKEN_TYPE_ERROR;
+              token->type = SCRIPT_SCAN_TOKEN_TYPE_ERROR;
               return;
             }
           if (curchar == '\\')
@@ -309,7 +309,7 @@ void script_scan_read_next_token (script_scan_t       *scan,
             token->data.string[index + 1] = '\0';
             index++;
           }
-        token->type = script_scan_TOKEN_TYPE_COMMENT;
+        token->type = SCRIPT_SCAN_TOKEN_TYPE_COMMENT;
         return;
       }
   }
@@ -329,7 +329,7 @@ void script_scan_read_next_token (script_scan_t       *scan,
             {
               free (token->data.string);
               token->data.string = strdup("End of file before end of comment");
-              token->type = script_scan_TOKEN_TYPE_ERROR;
+              token->type = SCRIPT_SCAN_TOKEN_TYPE_ERROR;
               return;
             }
           if ((curchar == '/') && (nextchar == '*'))
@@ -348,11 +348,11 @@ void script_scan_read_next_token (script_scan_t       *scan,
           nextchar = script_scan_get_next_char (scan);
         }
       script_scan_get_next_char (scan);
-      token->type = script_scan_TOKEN_TYPE_COMMENT;
+      token->type = SCRIPT_SCAN_TOKEN_TYPE_COMMENT;
       return;
     }
   /* all other */
-  token->type = script_scan_TOKEN_TYPE_SYMBOL;
+  token->type = SCRIPT_SCAN_TOKEN_TYPE_SYMBOL;
   token->data.symbol = curchar;
   return;
 }
@@ -369,20 +369,20 @@ static script_scan_token_t *script_scan_peek_token (script_scan_t *scan,
       for (i = scan->tokencount; i <= n; i++)                                   /* FIXME warning about possibely inifnite loop */
         {
           scan->tokens[i] = malloc (sizeof (script_scan_token_t));
-          scan->tokens[i]->type = script_scan_TOKEN_TYPE_EMPTY;
+          scan->tokens[i]->type = SCRIPT_SCAN_TOKEN_TYPE_EMPTY;
         }
       scan->tokencount = n + 1;
     }
-  if (scan->tokens[n]->type == script_scan_TOKEN_TYPE_EMPTY)
+  if (scan->tokens[n]->type == SCRIPT_SCAN_TOKEN_TYPE_EMPTY)
     {
-      if ((n > 0) && (scan->tokens[n - 1]->type == script_scan_TOKEN_TYPE_EMPTY))
+      if ((n > 0) && (scan->tokens[n - 1]->type == SCRIPT_SCAN_TOKEN_TYPE_EMPTY))
         script_scan_peek_token (scan, n - 1);
       do
         {
           script_scan_token_clean (scan->tokens[n]);
           script_scan_read_next_token (scan, scan->tokens[n]);                     /* FIXME if skipping comments, add whitespace to next token */
         }
-      while (scan->tokens[n]->type == script_scan_TOKEN_TYPE_COMMENT);             /* FIXME optionally pass comments back */
+      while (scan->tokens[n]->type == SCRIPT_SCAN_TOKEN_TYPE_COMMENT);             /* FIXME optionally pass comments back */
     }
   return scan->tokens[n];
 }
@@ -393,7 +393,7 @@ script_scan_token_t *script_scan_get_next_token (script_scan_t *scan)
   script_scan_token_clean (scan->tokens[0]);
   for (i = 0; i < (scan->tokencount - 1); i++)
     *scan->tokens[i] = *scan->tokens[i + 1];
-  scan->tokens[(scan->tokencount - 1)]->type = script_scan_TOKEN_TYPE_EMPTY;
+  scan->tokens[(scan->tokencount - 1)]->type = SCRIPT_SCAN_TOKEN_TYPE_EMPTY;
   return script_scan_peek_token (scan, 0);
 }
 
index 355bf687a4b8fdb2b2bb1a7aa8ac0c2def5967b2..971292f189ec9ba422c95f966a3ffa0974f08f73 100644 (file)
 
 typedef enum
 {
-  script_scan_TOKEN_TYPE_EMPTY,
-  script_scan_TOKEN_TYPE_EOF,
-  script_scan_TOKEN_TYPE_INTEGER,
-  script_scan_TOKEN_TYPE_FLOAT,
-  script_scan_TOKEN_TYPE_IDENTIFIER,
-  script_scan_TOKEN_TYPE_STRING,
-  script_scan_TOKEN_TYPE_SYMBOL,
-  script_scan_TOKEN_TYPE_COMMENT,
-  script_scan_TOKEN_TYPE_ERROR,
+  SCRIPT_SCAN_TOKEN_TYPE_EMPTY,
+  SCRIPT_SCAN_TOKEN_TYPE_EOF,
+  SCRIPT_SCAN_TOKEN_TYPE_INTEGER,
+  SCRIPT_SCAN_TOKEN_TYPE_FLOAT,
+  SCRIPT_SCAN_TOKEN_TYPE_IDENTIFIER,
+  SCRIPT_SCAN_TOKEN_TYPE_STRING,
+  SCRIPT_SCAN_TOKEN_TYPE_SYMBOL,
+  SCRIPT_SCAN_TOKEN_TYPE_COMMENT,
+  SCRIPT_SCAN_TOKEN_TYPE_ERROR,
 } script_scan_token_type_t;
 
 typedef struct
@@ -72,21 +72,21 @@ typedef struct
 
 
 #define script_scan_token_is_symbol(__token) \
-      (__token->type == script_scan_TOKEN_TYPE_SYMBOL)
+      (__token->type == SCRIPT_SCAN_TOKEN_TYPE_SYMBOL)
 #define script_scan_token_is_symbol_of_value(__token,__value) \
-      (__token->type == script_scan_TOKEN_TYPE_SYMBOL \
+      (__token->type == SCRIPT_SCAN_TOKEN_TYPE_SYMBOL \
       && __token->data.symbol == __value)
 #define script_scan_token_is_identifier(__token) \
-      (__token->type == script_scan_TOKEN_TYPE_IDENTIFIER)
+      (__token->type == SCRIPT_SCAN_TOKEN_TYPE_IDENTIFIER)
 #define script_scan_token_is_identifier_of_value(__token,__value) \
-      (__token->type == script_scan_TOKEN_TYPE_IDENTIFIER \
+      (__token->type == SCRIPT_SCAN_TOKEN_TYPE_IDENTIFIER \
       && !strcmp(__token->data.string, __value))
 #define script_scan_token_is_integer(__token) \
-      (__token->type == script_scan_TOKEN_TYPE_INTEGER)
+      (__token->type == SCRIPT_SCAN_TOKEN_TYPE_INTEGER)
 #define script_scan_token_is_string(__token) \
-      (__token->type == script_scan_TOKEN_TYPE_STRING)
+      (__token->type == SCRIPT_SCAN_TOKEN_TYPE_STRING)
 #define script_scan_token_is_float(__token) \
-      (__token->type == script_scan_TOKEN_TYPE_FLOAT)
+      (__token->type == SCRIPT_SCAN_TOKEN_TYPE_FLOAT)
 
 
 
index e568a2badab5826c1f6863f6520918b4ad4307c7..96ad203bd1ecfe08042fc68c45396de07daffc23 100644 (file)
@@ -78,6 +78,8 @@ typedef struct
   void *user_data;
 } script_obj_native_class_t;
 
+typedef double script_number_t;
+
 typedef struct
 {
   void *object_data;
@@ -88,8 +90,7 @@ typedef enum
 {
   SCRIPT_OBJ_TYPE_NULL,
   SCRIPT_OBJ_TYPE_REF,
-  SCRIPT_OBJ_TYPE_INT,
-  SCRIPT_OBJ_TYPE_FLOAT,
+  SCRIPT_OBJ_TYPE_NUMBER,
   SCRIPT_OBJ_TYPE_STRING,
   SCRIPT_OBJ_TYPE_HASH,
   SCRIPT_OBJ_TYPE_FUNCTION,
@@ -102,8 +103,7 @@ typedef struct script_obj_t
   int refcount;
   union
   {
-    int integer;
-    float floatpoint;
+    script_number_t number;
     char *string;
     struct script_obj_t *obj;
     script_function_t *function;
@@ -115,8 +115,7 @@ typedef struct script_obj_t
 typedef enum
 {
   SCRIPT_EXP_TYPE_TERM_NULL,
-  SCRIPT_EXP_TYPE_TERM_INT,
-  SCRIPT_EXP_TYPE_TERM_FLOAT,
+  SCRIPT_EXP_TYPE_TERM_NUMBER,
   SCRIPT_EXP_TYPE_TERM_STRING,
   SCRIPT_EXP_TYPE_TERM_VAR,
   SCRIPT_EXP_TYPE_TERM_LOCAL,
@@ -164,8 +163,7 @@ typedef struct script_exp_t
     } dual;
     struct script_exp_t *sub;
     char *string;
-    int integer;
-    float floatpoint;
+    script_number_t number;
     struct
     {
       struct script_exp_t *name;