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,
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;
}
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;
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
{
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:
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);
"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 ();
}
"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 ();
}
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)
{
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)
{
#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)
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);
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,
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,
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,
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 ();
}
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 ();
}
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 ();
}
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 ();
}
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,
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;
}
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;
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:
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;
}
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;
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:
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:
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)
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:
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;
}
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 ();
}
{
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 ();
}
{
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 ();
}
{
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 ();
}
{
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 ();
}
{
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;
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);
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);
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);
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,
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;
}
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,
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:
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;
{
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;
}
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';
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';
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 == '\\')
token->data.string[index + 1] = '\0';
index++;
}
- token->type = script_scan_TOKEN_TYPE_COMMENT;
+ token->type = SCRIPT_SCAN_TOKEN_TYPE_COMMENT;
return;
}
}
{
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 == '*'))
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;
}
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];
}
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);
}
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
#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)
void *user_data;
} script_obj_native_class_t;
+typedef double script_number_t;
+
typedef struct
{
void *object_data;
{
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,
int refcount;
union
{
- int integer;
- float floatpoint;
+ script_number_t number;
char *string;
struct script_obj_t *obj;
script_function_t *function;
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,
} dual;
struct script_exp_t *sub;
char *string;
- int integer;
- float floatpoint;
+ script_number_t number;
struct
{
struct script_exp_t *name;