From fec26df01c5fe7350e3332bb1f8518c66a420daa Mon Sep 17 00:00:00 2001 From: Charlie Brej Date: Wed, 26 Aug 2009 18:07:48 +0100 Subject: [PATCH] [script] Remove integer objects and rename floats "numbers" Integers were upgraded to floats during many operations and there was no real advantage to keep them. --- src/plugins/splash/script/script-execute.c | 34 ++-- src/plugins/splash/script/script-lib-image.c | 10 +- src/plugins/splash/script/script-lib-math.c | 63 +++---- .../splash/script/script-lib-plymouth.c | 10 +- .../splash/script/script-lib-plymouth.h | 4 +- src/plugins/splash/script/script-lib-sprite.c | 18 +- src/plugins/splash/script/script-lib-sprite.h | 4 +- src/plugins/splash/script/script-object.c | 164 ++++-------------- src/plugins/splash/script/script-object.h | 14 +- src/plugins/splash/script/script-parse.c | 19 +- src/plugins/splash/script/script-scan.c | 52 +++--- src/plugins/splash/script/script-scan.h | 32 ++-- src/plugins/splash/script/script.h | 14 +- 13 files changed, 149 insertions(+), 289 deletions(-) diff --git a/src/plugins/splash/script/script-execute.c b/src/plugins/splash/script/script-execute.c index 03369566..f5e97d5a 100644 --- a/src/plugins/splash/script/script-execute.c +++ b/src/plugins/splash/script/script-execute.c @@ -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); diff --git a/src/plugins/splash/script/script-lib-image.c b/src/plugins/splash/script/script-lib-image.c index 5ea2f0f6..5903fac5 100644 --- a/src/plugins/splash/script/script-lib-image.c +++ b/src/plugins/splash/script/script-lib-image.c @@ -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) { diff --git a/src/plugins/splash/script/script-lib-math.c b/src/plugins/splash/script/script-lib-math.c index ecc1a90f..3b63b2a5 100644 --- a/src/plugins/splash/script/script-lib-math.c +++ b/src/plugins/splash/script/script-lib-math.c @@ -36,38 +36,29 @@ #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); diff --git a/src/plugins/splash/script/script-lib-plymouth.c b/src/plugins/splash/script/script-lib-plymouth.c index be8275ab..d3b5f4cb 100644 --- a/src/plugins/splash/script/script-lib-plymouth.c +++ b/src/plugins/splash/script/script-lib-plymouth.c @@ -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, diff --git a/src/plugins/splash/script/script-lib-plymouth.h b/src/plugins/splash/script/script-lib-plymouth.h index 062a3482..649f5ea1 100644 --- a/src/plugins/splash/script/script-lib-plymouth.h +++ b/src/plugins/splash/script/script-lib-plymouth.h @@ -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, diff --git a/src/plugins/splash/script/script-lib-sprite.c b/src/plugins/splash/script/script-lib-sprite.c index d6c1773f..b883e684 100644 --- a/src/plugins/splash/script/script-lib-sprite.c +++ b/src/plugins/splash/script/script-lib-sprite.c @@ -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; } diff --git a/src/plugins/splash/script/script-lib-sprite.h b/src/plugins/splash/script/script-lib-sprite.h index b365418c..8c9cbbc9 100644 --- a/src/plugins/splash/script/script-lib-sprite.h +++ b/src/plugins/splash/script/script-lib-sprite.h @@ -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; diff --git a/src/plugins/splash/script/script-object.c b/src/plugins/splash/script/script-object.c index 3a9ef4c7..041255cc 100644 --- a/src/plugins/splash/script/script-object.c +++ b/src/plugins/splash/script/script-object.c @@ -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; diff --git a/src/plugins/splash/script/script-object.h b/src/plugins/splash/script/script-object.h index 4740cccf..af166825 100644 --- a/src/plugins/splash/script/script-object.h +++ b/src/plugins/splash/script/script-object.h @@ -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, diff --git a/src/plugins/splash/script/script-parse.c b/src/plugins/splash/script/script-parse.c index ab5a0c29..cebf4f95 100644 --- a/src/plugins/splash/script/script-parse.c +++ b/src/plugins/splash/script/script-parse.c @@ -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; diff --git a/src/plugins/splash/script/script-scan.c b/src/plugins/splash/script/script-scan.c index 5910b187..7c59c385 100644 --- a/src/plugins/splash/script/script-scan.c +++ b/src/plugins/splash/script/script-scan.c @@ -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); } diff --git a/src/plugins/splash/script/script-scan.h b/src/plugins/splash/script/script-scan.h index 355bf687..971292f1 100644 --- a/src/plugins/splash/script/script-scan.h +++ b/src/plugins/splash/script/script-scan.h @@ -27,15 +27,15 @@ 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) diff --git a/src/plugins/splash/script/script.h b/src/plugins/splash/script/script.h index e568a2ba..96ad203b 100644 --- a/src/plugins/splash/script/script.h +++ b/src/plugins/splash/script/script.h @@ -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; -- 2.47.3