40 lines
911 B
C
40 lines
911 B
C
#ifndef __SMCC_SYMTABL_H__
|
|
#define __SMCC_SYMTABL_H__
|
|
|
|
#include <lib/core.h>
|
|
#include <lib/utils/ds/hashtable.h>
|
|
#include <lib/utils/strpool/strpool.h>
|
|
|
|
// 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
|