#ifndef RZ_SYM_H #define RZ_SYM_H #include "commons.h" #include "tysy.h" #include "err.h" #include "node.h" typedef enum { SYM_PRE = 1<<1, SYM_DECL = 1<<2, } sym_state_t; typedef struct { int id; char* name; type_t* type; int scope; sym_state_t state; node_t* node; } sym_entry_t; typedef struct sym { tysy_t* tysy; err_t* err; struct sym* parent; struct { int id_counter; size_t size; size_t cap; sym_entry_t** data; } entries; } sym_t; void sym_init(sym_t* sym, tysy_t* tysy, err_t* err); void sym_free(sym_t* sym); int sym_declare(sym_t* sym, int id, char* name, type_t* type, int scope, int state_flag, node_t* node); sym_entry_t* sym_try_find_by_name(sym_t* sym, char* name, int scope, int state_flag, node_t* node); size_t sym_str(sym_t* sym, char* buffer, size_t size); #endif