From 1cf26c43f39df5b7a361c4943c263c4fae4dbc2f Mon Sep 17 00:00:00 2001 From: ZZY <2450266535@qq.com> Date: Tue, 1 Apr 2025 23:28:15 +0800 Subject: [PATCH] =?UTF-8?q?bugfix=20=E6=B7=BB=E5=8A=A0lib=E7=9A=84?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/Makefile | 2 +- lib/utils/ds/vector.h | 1 + lib/utils/symtab/symtab.c | 62 --------------------------------------- lib/utils/symtab/symtab.h | 39 ------------------------ lib/utils/utils.h | 1 - 5 files changed, 2 insertions(+), 103 deletions(-) delete mode 100644 lib/utils/symtab/symtab.c delete mode 100644 lib/utils/symtab/symtab.h diff --git a/lib/Makefile b/lib/Makefile index e0669cd..1b6cc55 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -25,7 +25,7 @@ TOKBUF_DIR = $(UTILS_DIR)/tokbuf SRCS += \ $(DS_DIR)/hashtable.c \ $(STRPOOL_DIR)/strpool.c \ - $(SYMTAB_DIR)/symtab.c \ + # $(SYMTAB_DIR)/symtab.c \ # $(TOKBUF_DIR)/tokbuf.c # 生成目标文件列表 diff --git a/lib/utils/ds/vector.h b/lib/utils/ds/vector.h index ae411f6..c4ecf5b 100644 --- a/lib/utils/ds/vector.h +++ b/lib/utils/ds/vector.h @@ -11,6 +11,7 @@ type *data; \ } name \ +// You can't malloc at init function becase some user just need a header #define vector_init(vec) \ do { \ (vec).size = 0, \ diff --git a/lib/utils/symtab/symtab.c b/lib/utils/symtab/symtab.c deleted file mode 100644 index 8a53194..0000000 --- a/lib/utils/symtab/symtab.c +++ /dev/null @@ -1,62 +0,0 @@ -#include "symtab.h" - -static u32_t hash_func(const void* _key) { - const symtab_key_t* key = (symtab_key_t*)_key; - return rt_strhash(key->strp_name); -} - -static int key_cmp(const void* _key1, const void* _key2) { - const symtab_key_t* key1 = (symtab_key_t*)_key1; - const symtab_key_t* key2 = (symtab_key_t*)_key2; - if (rt_strcmp(key1->strp_name, key2->strp_name) == 0) { - return 0; - } - return 1; -} - -void init_symtab(symtab_t* symtab) { - symtab->cur_scope = NULL; - symtab->gid = 1; - init_hashtable(&symtab->global_table); - symtab->global_table.hash_func = hash_func; - symtab->global_table.key_cmp = key_cmp; - init_hashtable(&symtab->local_table); - symtab->local_table.hash_func = hash_func; - symtab->local_table.key_cmp = key_cmp; -} - -void symtab_destroy(symtab_t* symtab) { - // TODO -} - -void symtab_enter_scope(symtab_t* symtab) { - scope_t *scope = (scope_t*)salloc_alloc(sizeof(scope_t)); - scope->parent = symtab->cur_scope; - scope->uid = symtab->gid++; - init_hashtable(&scope->table); - - scope->table.hash_func = hash_func; - scope->table.key_cmp = key_cmp; - symtab->cur_scope = scope; -} - -void symtab_leave_scope(symtab_t* symtab) { - Assert(symtab->cur_scope != NULL); - scope_t *parent = symtab->cur_scope->parent; - hashtable_destory(&symtab->cur_scope->table); - salloc_free(symtab->cur_scope); - symtab->cur_scope = parent; -} - -void* symtab_get(symtab_t* symtab, symtab_key_t* key) { - for (scope_t* scope = symtab->cur_scope; scope != NULL; scope = scope->parent) { - void* val = hashtable_get(&scope->table, key); - if (val != NULL) { - return val; - } - } - return NULL; -} -void* symtab_add(symtab_t* symtab, symtab_key_t* key, void* val) { - return hashtable_set(&symtab->cur_scope->table, key, val); -} diff --git a/lib/utils/symtab/symtab.h b/lib/utils/symtab/symtab.h deleted file mode 100644 index 176dd7f..0000000 --- a/lib/utils/symtab/symtab.h +++ /dev/null @@ -1,39 +0,0 @@ -#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 diff --git a/lib/utils/utils.h b/lib/utils/utils.h index 8d10737..96a3393 100644 --- a/lib/utils/utils.h +++ b/lib/utils/utils.h @@ -2,7 +2,6 @@ #define __SMCC_LIB_UTILS_H__ #include "strpool/strpool.h" -#include "symtab/symtab.h" #include "tokbuf/tokbuf.h" #endif