📄 fincapp.c
字号:
#include <fincapp.h>#include <finclang.h>#include <fincsys.h>#include <fincyacc.h>#include <malloc.h>#include <errno.h>FinCApp* g_finc_app_global = NULL;Bool g_finc_app_continue = FALSE;Bool g_finc_app_break = FALSE;Bool g_finc_app_in_cycle = FALSE;FinCApp* finc_app_new (){ FinCApp *self; self = (FinCApp*)mem_new(sizeof(FinCApp)); object_init_object (OBJECT (self), finc_app_destroy); self->hash_global = hash_table_new (string_hash, string_equal); self->hash_local = NULL; self->hash_functions = hash_table_new (string_hash, string_equal); self->hash_struct = hash_table_new (string_hash, string_equal); return self;}void finc_app_destroy (Object* self){ unref ( ((FinCApp*)self)->hash_global); unref ( ((FinCApp*)self)->hash_local); unref ( ((FinCApp*)self)->hash_functions); unref ( ((FinCApp*)self)->hash_struct); mem_destroy (self);}FinCFunc* finc_app_add_func_sys (FinCApp* self, unsigned char* p_name, FinCFuncSys p_sys){ FinCFunc* l_func; String* l_name; l_func = finc_func_new (); l_name = string_new (); string_set_str (l_name, p_name); finc_func_set_sys (l_func, l_name, p_sys); hash_table_insert(self->hash_functions, (void*)l_func->name, OBJECT(l_func)); unref (l_func); unref (l_name); return l_func;}FinCFunc* finc_app_add_func_native (FinCApp* self, unsigned char* p_name, void* p_native){ FinCFunc* l_func; String* l_name; l_func = finc_func_new (); l_name = string_new (); string_set_str (l_name, p_name); finc_func_set_native (l_func, l_name, p_native); hash_table_insert(self->hash_functions, (void*)l_func->name, OBJECT(l_func)); unref (l_func); unref (l_name); return l_func;}FinCFunc* finc_app_add_func_node (FinCApp* self, unsigned char* p_name, FinCNode* p_node){ FinCFunc* l_func; String* l_name; l_func = finc_func_new (); l_name = string_new (); string_set_str (l_name, p_name); finc_func_set_node (l_func, l_name, p_node); hash_table_insert(self->hash_functions, (void*)l_func->name, OBJECT(l_func)); unref (l_func); unref (l_name); return l_func;}FinCFunc* finc_app_get_func (FinCApp* self, String* p_name){ return hash_table_find(self->hash_functions, (void*)p_name);}void finc_app_add_var (FinCApp* self, FinCVar* p_var, Bool p_global){ if ((self->hash_local) && !p_global) hash_table_insert(self->hash_local, (void*)p_var->name, OBJECT(p_var)); else hash_table_insert (self->hash_global, (void*)p_var->name, OBJECT (p_var));}FinCVar* finc_app_get_var (FinCApp* self, String* p_name){ if (self->hash_local) { FinCVar* l_var = hash_table_find(self->hash_local, p_name); if (l_var) return l_var; } return hash_table_find(self->hash_global, p_name);}void finc_app_add_struct (FinCApp* self, FinCStruct* p_struct ){ hash_table_insert(self->hash_struct, (ADT)p_struct->name, OBJECT(p_struct));}FinCStruct* finc_app_get_struct (FinCApp* self, String* p_name){ return hash_table_find(self->hash_struct, (void*)p_name);}HashTable* finc_app_func_enter (FinCApp* self){ HashTable* l_list; l_list = self->hash_local; self->hash_local = hash_table_new(string_hash, string_equal); return l_list;}void finc_app_func_leave (FinCApp* self, HashTable* p_hash){ unref (self->hash_local); self->hash_local = p_hash;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -