104 lines
1.8 KiB
C
104 lines
1.8 KiB
C
#include "tysy.h"
|
|
|
|
void tysy_init(tysy_t* tysy)
|
|
{
|
|
assert(tysy);
|
|
tysy->size = 0;
|
|
|
|
// num
|
|
{
|
|
type_t* ty = malloc(sizeof(type_t));
|
|
type_init(ty, TYPE_NUM);
|
|
tysy_register_new_type(tysy, "num", ty);
|
|
}
|
|
|
|
// bool
|
|
{
|
|
type_t* ty = malloc(sizeof(type_t));
|
|
type_init(ty, TYPE_BOOL);
|
|
tysy_register_new_type(tysy, "bool", ty);
|
|
}
|
|
|
|
// str
|
|
{
|
|
type_t* ty = malloc(sizeof(type_t));
|
|
type_init(ty, TYPE_STR);
|
|
tysy_register_new_type(tysy, "str", ty);
|
|
}
|
|
}
|
|
|
|
void tysy_free(tysy_t* tysy)
|
|
{
|
|
assert(tysy);
|
|
|
|
for (size_t i=0; i<tysy->size; i++)
|
|
{
|
|
type_free(tysy->types[i]);
|
|
free(tysy->types[i]);
|
|
free(tysy->names[i]);
|
|
}
|
|
|
|
tysy->size = 0;
|
|
}
|
|
|
|
void tysy_register_new_type(tysy_t* tysy, char* name, type_t* type)
|
|
{
|
|
assert(tysy);
|
|
assert(name);
|
|
assert(type);
|
|
assert(tysy->size + 1 < RZ_MAX_TYPES);
|
|
|
|
tysy->types[tysy->size] = type;
|
|
tysy->names[tysy->size] = strdup(name);
|
|
tysy->size++;
|
|
}
|
|
|
|
type_t* tysy_try_find_type(tysy_t* tysy, char* name)
|
|
{
|
|
assert(tysy);
|
|
assert(name);
|
|
|
|
for (size_t i=0; i<tysy->size; i++)
|
|
{
|
|
if (strcmp(name, tysy->names[i]) == 0)
|
|
{
|
|
return tysy->types[i];
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
value_t* tysy_new_num(tysy_t* tysy, double value)
|
|
{
|
|
assert(tysy);
|
|
|
|
value_t* val = malloc(sizeof(value_t));
|
|
value_init(val, tysy_try_find_type(tysy, "num"));
|
|
val->value.num = value;
|
|
|
|
return val;
|
|
}
|
|
|
|
value_t* tysy_new_bool(tysy_t* tysy, int value)
|
|
{
|
|
assert(tysy);
|
|
|
|
value_t* val = malloc(sizeof(value_t));
|
|
value_init(val, tysy_try_find_type(tysy, "bool"));
|
|
val->value.bool = value;
|
|
|
|
return val;
|
|
}
|
|
|
|
value_t* tysy_new_str(tysy_t* tysy, char* value)
|
|
{
|
|
assert(tysy);
|
|
|
|
value_t* val = malloc(sizeof(value_t));
|
|
value_init(val, tysy_try_find_type(tysy, "str"));
|
|
val->value.str = strdup(value);
|
|
|
|
return val;
|
|
}
|