#ifndef CCM_SYM_H #define CCM_SYM_H #include "commons.h" #include "vec.h" #include "value.h" typedef struct { char* name; int local_addr; } sym_entry_t; typedef struct env { vec_t entries; struct env* parent; } env_t; typedef struct { env_t* env; } sym_t; void sym_init(sym_t* self); void sym_free(sym_t* self); void sym_free_env(sym_t* self, env_t* env); void sym_open_scope(sym_t* self); void sym_close_scope(sym_t* self); int sym_declare(sym_t* self, char const* name, int addr); int sym_try_assign(sym_t* self, char const* name, int addr); sym_entry_t* sym_try_get_value(sym_t* self, char const* name); sym_entry_t* sym_try_get_env_value(sym_t* self, env_t* env, char const* name); #endif