mirror of
https://gitlab.freedesktop.org/plymouth/plymouth.git
synced 2026-05-08 07:48:03 +02:00
[script] Move object operating functions to script-object to avoid repetition
This commit is contained in:
parent
a11fac81f6
commit
a99a8a27c9
3 changed files with 309 additions and 299 deletions
|
|
@ -19,304 +19,13 @@
|
|||
static script_obj* script_evaluate (script_state* state, script_exp* exp);
|
||||
static script_return script_execute_function_with_parlist (script_state* state, script_function* function, ply_list_t* parameter_data);
|
||||
|
||||
static script_obj* script_evaluate_plus (script_state* state, script_exp* exp)
|
||||
static script_obj* script_evaluate_apply_function (script_state* state, script_exp* exp, script_obj* (*function) (script_obj*, script_obj*))
|
||||
{
|
||||
script_obj* script_obj_a = script_evaluate (state, exp->data.dual.sub_a);
|
||||
script_obj* script_obj_b = script_evaluate (state, exp->data.dual.sub_b);
|
||||
script_obj* obj = NULL;
|
||||
|
||||
script_obj_deref (&script_obj_a);
|
||||
script_obj_deref (&script_obj_b);
|
||||
|
||||
switch (script_obj_a->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_int (script_obj_a->data.integer + script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.integer + script_obj_b->data.floatpoint);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_STRING:
|
||||
{
|
||||
char* newstring;
|
||||
asprintf(&newstring, "%d%s", script_obj_a->data.integer, script_obj_b->data.string);
|
||||
obj = script_obj_new_string (newstring);
|
||||
free(newstring);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint + script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint + script_obj_b->data.floatpoint);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_STRING:
|
||||
{
|
||||
char* newstring;
|
||||
asprintf(&newstring, "%f%s", script_obj_a->data.floatpoint, script_obj_b->data.string);
|
||||
obj = script_obj_new_string (newstring);
|
||||
free(newstring);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_STRING:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
{
|
||||
char* newstring;
|
||||
asprintf(&newstring, "%s%d", script_obj_a->data.string, script_obj_b->data.integer);
|
||||
obj = script_obj_new_string (newstring); // FIXME these two asprintfs complain about ignored returned values
|
||||
free(newstring);
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
{
|
||||
char* newstring;
|
||||
asprintf(&newstring, "%s%f", script_obj_a->data.string, script_obj_b->data.floatpoint);
|
||||
obj = script_obj_new_string (newstring);
|
||||
free(newstring);
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_STRING:
|
||||
{
|
||||
char* newstring;
|
||||
asprintf(&newstring, "%s%s", script_obj_a->data.string, script_obj_b->data.string);
|
||||
obj = script_obj_new_string (newstring);
|
||||
free(newstring);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
script_obj* obj = function (script_obj_a, script_obj_b);
|
||||
script_obj_unref (script_obj_a);
|
||||
script_obj_unref (script_obj_b);
|
||||
|
||||
if (!obj){
|
||||
obj = script_obj_new_null ();
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
static script_obj* script_evaluate_minus (script_state* state, script_exp* exp)
|
||||
{
|
||||
script_obj* script_obj_a = script_evaluate (state, exp->data.dual.sub_a);
|
||||
script_obj* script_obj_b = script_evaluate (state, exp->data.dual.sub_b);
|
||||
script_obj* obj = NULL;
|
||||
|
||||
script_obj_deref (&script_obj_a);
|
||||
script_obj_deref (&script_obj_b);
|
||||
|
||||
switch (script_obj_a->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_int (script_obj_a->data.integer - script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.integer - script_obj_b->data.floatpoint);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint - script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint - script_obj_b->data.floatpoint);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
script_obj_unref (script_obj_a);
|
||||
script_obj_unref (script_obj_b);
|
||||
if (!obj){
|
||||
obj = script_obj_new_null ();
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
static script_obj* script_evaluate_mul (script_state* state, script_exp* exp)
|
||||
{
|
||||
script_obj* script_obj_a = script_evaluate (state, exp->data.dual.sub_a);
|
||||
script_obj* script_obj_b = script_evaluate (state, exp->data.dual.sub_b);
|
||||
script_obj* obj = NULL;
|
||||
|
||||
script_obj_deref (&script_obj_a);
|
||||
script_obj_deref (&script_obj_b);
|
||||
|
||||
switch (script_obj_a->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_int (script_obj_a->data.integer * script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.integer * script_obj_b->data.floatpoint);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint * script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint * script_obj_b->data.floatpoint);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
script_obj_unref (script_obj_a);
|
||||
script_obj_unref (script_obj_b);
|
||||
if (!obj){
|
||||
obj = script_obj_new_null ();
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
static script_obj* script_evaluate_div (script_state* state, script_exp* exp)
|
||||
{
|
||||
script_obj* script_obj_a = script_evaluate (state, exp->data.dual.sub_a);
|
||||
script_obj* script_obj_b = script_evaluate (state, exp->data.dual.sub_b);
|
||||
script_obj* obj = NULL;
|
||||
|
||||
script_obj_deref (&script_obj_a);
|
||||
script_obj_deref (&script_obj_b);
|
||||
|
||||
switch (script_obj_a->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_float ((float)script_obj_a->data.integer / script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.integer / script_obj_b->data.floatpoint);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint / script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint / script_obj_b->data.floatpoint);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
script_obj_unref (script_obj_a);
|
||||
script_obj_unref (script_obj_b);
|
||||
if (!obj){
|
||||
obj = script_obj_new_null ();
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
static script_obj* script_evaluate_mod (script_state* state, script_exp* exp)
|
||||
{
|
||||
script_obj* script_obj_a = script_evaluate (state, exp->data.dual.sub_a);
|
||||
script_obj* script_obj_b = script_evaluate (state, exp->data.dual.sub_b);
|
||||
script_obj* obj = NULL;
|
||||
|
||||
script_obj_deref (&script_obj_a);
|
||||
script_obj_deref (&script_obj_b);
|
||||
|
||||
switch (script_obj_a->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_int (script_obj_a->data.integer % script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (fmod(script_obj_a->data.integer, script_obj_b->data.floatpoint));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_float (fmod(script_obj_a->data.floatpoint, script_obj_b->data.integer));
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (fmod(script_obj_a->data.floatpoint, script_obj_b->data.floatpoint));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
script_obj_unref (script_obj_a);
|
||||
script_obj_unref (script_obj_b);
|
||||
if (!obj){
|
||||
obj = script_obj_new_null ();
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
|
@ -673,23 +382,23 @@ static script_obj* script_evaluate (script_state* state, script_exp* exp)
|
|||
switch (exp->type){
|
||||
case SCRIPT_EXP_TYPE_PLUS:
|
||||
{
|
||||
return script_evaluate_plus (state, exp);
|
||||
return script_evaluate_apply_function (state, exp, script_obj_plus);
|
||||
}
|
||||
case SCRIPT_EXP_TYPE_MINUS:
|
||||
{
|
||||
return script_evaluate_minus (state, exp);
|
||||
return script_evaluate_apply_function (state, exp, script_obj_minus);
|
||||
}
|
||||
case SCRIPT_EXP_TYPE_MUL:
|
||||
{
|
||||
return script_evaluate_mul (state, exp);
|
||||
return script_evaluate_apply_function (state, exp, script_obj_mul);
|
||||
}
|
||||
case SCRIPT_EXP_TYPE_DIV:
|
||||
{
|
||||
return script_evaluate_div (state, exp);
|
||||
return script_evaluate_apply_function (state, exp, script_obj_div);
|
||||
}
|
||||
case SCRIPT_EXP_TYPE_MOD:
|
||||
{
|
||||
return script_evaluate_mod (state, exp);
|
||||
return script_evaluate_apply_function (state, exp, script_obj_mod);
|
||||
}
|
||||
case SCRIPT_EXP_TYPE_EQ:
|
||||
case SCRIPT_EXP_TYPE_NE:
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "script.h"
|
||||
#include "script-object.h"
|
||||
|
|
@ -437,3 +438,299 @@ void script_obj_hash_add_element (script_obj* hash, script_obj* element, const c
|
|||
script_obj_unref (obj);
|
||||
}
|
||||
|
||||
|
||||
script_obj* script_obj_plus (script_obj* script_obj_a_in, script_obj* script_obj_b_in)
|
||||
{
|
||||
script_obj* script_obj_a = script_obj_deref_direct(script_obj_a_in);
|
||||
script_obj* script_obj_b = script_obj_deref_direct(script_obj_b_in);
|
||||
script_obj* obj = NULL;
|
||||
|
||||
switch (script_obj_a->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_int (script_obj_a->data.integer + script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.integer + script_obj_b->data.floatpoint);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_STRING:
|
||||
{
|
||||
char* newstring;
|
||||
asprintf(&newstring, "%d%s", script_obj_a->data.integer, script_obj_b->data.string);
|
||||
obj = script_obj_new_string (newstring);
|
||||
free(newstring);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint + script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint + script_obj_b->data.floatpoint);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_STRING:
|
||||
{
|
||||
char* newstring;
|
||||
asprintf(&newstring, "%f%s", script_obj_a->data.floatpoint, script_obj_b->data.string);
|
||||
obj = script_obj_new_string (newstring);
|
||||
free(newstring);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_STRING:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
{
|
||||
char* newstring;
|
||||
asprintf(&newstring, "%s%d", script_obj_a->data.string, script_obj_b->data.integer);
|
||||
obj = script_obj_new_string (newstring); // FIXME these two asprintfs complain about ignored returned values
|
||||
free(newstring);
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
{
|
||||
char* newstring;
|
||||
asprintf(&newstring, "%s%f", script_obj_a->data.string, script_obj_b->data.floatpoint);
|
||||
obj = script_obj_new_string (newstring);
|
||||
free(newstring);
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_STRING:
|
||||
{
|
||||
char* newstring;
|
||||
asprintf(&newstring, "%s%s", script_obj_a->data.string, script_obj_b->data.string);
|
||||
obj = script_obj_new_string (newstring);
|
||||
free(newstring);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!obj){
|
||||
obj = script_obj_new_null ();
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
script_obj* script_obj_minus (script_obj* script_obj_a_in, script_obj* script_obj_b_in)
|
||||
{
|
||||
script_obj* script_obj_a = script_obj_deref_direct(script_obj_a_in);
|
||||
script_obj* script_obj_b = script_obj_deref_direct(script_obj_b_in);
|
||||
script_obj* obj = NULL;
|
||||
|
||||
switch (script_obj_a->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_int (script_obj_a->data.integer - script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.integer - script_obj_b->data.floatpoint);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint - script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint - script_obj_b->data.floatpoint);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!obj){
|
||||
obj = script_obj_new_null ();
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
script_obj* script_obj_mul (script_obj* script_obj_a_in, script_obj* script_obj_b_in)
|
||||
{
|
||||
script_obj* script_obj_a = script_obj_deref_direct(script_obj_a_in);
|
||||
script_obj* script_obj_b = script_obj_deref_direct(script_obj_b_in);
|
||||
script_obj* obj = NULL;
|
||||
|
||||
switch (script_obj_a->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_int (script_obj_a->data.integer * script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.integer * script_obj_b->data.floatpoint);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint * script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint * script_obj_b->data.floatpoint);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!obj){
|
||||
obj = script_obj_new_null ();
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
script_obj* script_obj_div (script_obj* script_obj_a_in, script_obj* script_obj_b_in)
|
||||
{
|
||||
script_obj* script_obj_a = script_obj_deref_direct(script_obj_a_in);
|
||||
script_obj* script_obj_b = script_obj_deref_direct(script_obj_b_in);
|
||||
script_obj* obj = NULL;
|
||||
|
||||
switch (script_obj_a->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_float ((float)script_obj_a->data.integer / script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.integer / script_obj_b->data.floatpoint);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint / script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (script_obj_a->data.floatpoint / script_obj_b->data.floatpoint);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!obj){
|
||||
obj = script_obj_new_null ();
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
|
||||
script_obj* script_obj_mod (script_obj* script_obj_a_in, script_obj* script_obj_b_in)
|
||||
{
|
||||
script_obj* script_obj_a = script_obj_deref_direct(script_obj_a_in);
|
||||
script_obj* script_obj_b = script_obj_deref_direct(script_obj_b_in);
|
||||
script_obj* obj = NULL;
|
||||
|
||||
switch (script_obj_a->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_int (script_obj_a->data.integer % script_obj_b->data.integer);
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (fmod(script_obj_a->data.integer, script_obj_b->data.floatpoint));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
{
|
||||
switch (script_obj_b->type){
|
||||
case SCRIPT_OBJ_TYPE_INT:
|
||||
obj = script_obj_new_float (fmod(script_obj_a->data.floatpoint, script_obj_b->data.integer));
|
||||
break;
|
||||
case SCRIPT_OBJ_TYPE_FLOAT:
|
||||
obj = script_obj_new_float (fmod(script_obj_a->data.floatpoint, script_obj_b->data.floatpoint));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!obj){
|
||||
obj = script_obj_new_null ();
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,11 @@ char* script_obj_as_string (script_obj* obj);
|
|||
void script_obj_assign (script_obj* obj_a, script_obj* obj_b);
|
||||
script_obj* script_obj_hash_get_element (script_obj* hash, const char* name);
|
||||
void script_obj_hash_add_element (script_obj* hash, script_obj* element, const char* name);
|
||||
|
||||
script_obj* script_obj_plus (script_obj* script_obj_a_in, script_obj* script_obj_b_in);
|
||||
script_obj* script_obj_minus (script_obj* script_obj_a_in, script_obj* script_obj_b_in);
|
||||
script_obj* script_obj_mul (script_obj* script_obj_a_in, script_obj* script_obj_b_in);
|
||||
script_obj* script_obj_div (script_obj* script_obj_a_in, script_obj* script_obj_b_in);
|
||||
script_obj* script_obj_mod (script_obj* script_obj_a_in, script_obj* script_obj_b_in);
|
||||
|
||||
|
||||
#endif /* SCRIPT_OBJECT */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue