#ifndef __SMCC_SYMTABL_H__ #define __SMCC_SYMTABL_H__ #include #include #include // FIXME 架构上可能有更好的方式解决 typedef struct symtab_key { const char* strp_name; int uid; } symtab_key_t; typedef struct scope { int uid; struct scope* parent; hash_table_t table; } scope_t; typedef struct symtab { hash_table_t global_table; hash_table_t local_table; scope_t* cur_scope; int gid; // global id for generating unique scope id } symtab_t; void init_symtab(symtab_t* symtab); void symtab_destroy(symtab_t* symtab); void symtab_enter_scope(symtab_t* symtab); void symtab_leave_scope(symtab_t* symtab); void* symtab_get(symtab_t* symtab, symtab_key_t* key); // WARNING key and val need you save, especially val void* symtab_add(symtab_t* symtab, symtab_key_t* key, void* val); #endif