#ifndef MK_VALUE_H #define MK_VALUE_H #include "commons.h" #define TYPE_KIND(G) \ G(TY_INT), G(TY_FLOAT), G(TY_BOOL), \ G(TY_STRING), G(TY_SYMBOL) MK_ENUM_H(TypeKind, TYPE_KIND); union value_data { int integer; float real; bool boolean; char* str; char* sym; }; struct value { union value_data data; TypeKind type; int line; }; void value_init_int(struct value* self, int value, int line); void value_init_float(struct value* self, float value, int line); void value_init_bool(struct value* self, bool value, int line); void value_init_string(struct value* self, char const* value, int line); void value_init_symbol(struct value* self, char const* value, int line); void value_free(struct value* self); #endif