#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; isize; 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; isize; 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; }