فهرست منبع

refactor: 取消泛型宏匹配

SongZihuan 3 سال پیش
والد
کامیت
854d4dc212

+ 1 - 1
include/core/func.h

@@ -46,7 +46,7 @@ AFUN_CORE_EXPORT af_ArgCodeList *makeArgCodeList(af_Code *code, size_t size, boo
 AFUN_CORE_EXPORT void freeAllArgCodeList(af_ArgCodeList *acl, af_Environment *env);
 
 /* af_ArgList 创建与释放 */
-AFUN_CORE_EXPORT af_ArgList *makeArgList(char *name, af_Object *obj, af_Environment *env);
+AFUN_CORE_EXPORT af_ArgList *makeArgList(char *name, af_Object *obj);
 AFUN_CORE_EXPORT void freeAllArgList(af_ArgList *al, af_Environment *env);
 AFUN_CORE_EXPORT af_ArgList *makeArgListFromArgCodeList(char *name, af_ArgCodeList *acl, af_Environment *env);
 

+ 0 - 12
include/core/gc.h

@@ -13,18 +13,6 @@ enum af_GcListType {
     glt_vsl,
 };
 
-/* gc 引用计数管理函数 */
-#define gc_addReference(obj, env) ((_Generic((obj), \
-                               af_Object *:gc_addObjectReference, \
-                               af_Var *: gc_addVarReference, \
-                               af_VarSpace *: gc_addVarSpaceReference))((obj), (env)))
-
-#define gc_delReference(obj, env) ((_Generic((obj), \
-                               af_Object *: gc_delObjectReference, \
-                               af_Var *: gc_delVarReference, \
-                               af_VarSpace *: gc_delVarSpaceReference, \
-                               af_VarList *: gc_delVarListReference))((obj), (env)))
-
 /* GcList 创建与释放 */
 AFUN_CORE_EXPORT af_GcList *makeGcList(enum af_GcListType type, void *data);
 AFUN_CORE_EXPORT void freeAllGcList(af_GcList *gl);

+ 0 - 16
src/core/__gc.h

@@ -74,22 +74,6 @@ struct gc_Factory {
     struct af_VarSpace *gc_VarSpace;
 };
 
-/* 重新定义包括af_ObjectData的 gc Reference 函数 */
-#undef gc_addReference
-#undef gc_delReference
-#define gc_addReference(obj, env) ((_Generic((obj), \
-                               af_ObjectData *: gc_addObjectDataReference, \
-                               af_Object *: gc_addObjectReference, \
-                               af_Var *: gc_addVarReference, \
-                               af_VarSpace *: gc_addVarSpaceReference))((obj), (env)))
-
-#define gc_delReference(obj, env) ((_Generic((obj), \
-                               af_ObjectData *: gc_delObjectDataReference, \
-                               af_Object *: gc_delObjectReference, \
-                               af_Var *: gc_delVarReference, \
-                               af_VarSpace *: gc_delVarSpaceReference, \
-                               af_VarList *: gc_delVarListReference))((obj), (env)))
-
 /* gc_Factory 创建与释放 */
 AFUN_CORE_NO_EXPORT gc_Factory *makegGcFactory(void);
 AFUN_CORE_NO_EXPORT void freeGcFactory(gc_Factory *factory);

+ 18 - 18
src/core/env.c

@@ -767,7 +767,7 @@ static void mp_NORMAL(af_Message *msg, bool is_top, af_Environment *env) {
     }
     if (is_top)
         writeDebugLog(aFunCoreLogger, "NORMAL Point: %p", *(af_Object **)msg->msg);
-    gc_delReference(*(af_Object **)msg->msg, env);
+    gc_delObjectReference(*(af_Object **)msg->msg, env);
     *(af_Object **)msg->msg = NULL;
 }
 
@@ -782,7 +782,7 @@ static void mp_NORMALThread(af_Message *msg, bool is_top, af_Environment *env) {
 
     pthread_mutex_lock(&env->thread_lock);
     env->result = *(af_Object **)msg->msg;
-    gc_delReference(env->result, env);
+    gc_delObjectReference(env->result, env);
     *(af_Object **)msg->msg = NULL;
     pthread_mutex_unlock(&env->thread_lock);
 }
@@ -875,8 +875,8 @@ af_Environment *makeEnvironment(enum GcRunTime grt) {
 
     makeVarToProtectVarSpace("global", 3, 3, 3, env->global, env);
 
-    gc_delReference(env->protect, env);
-    gc_delReference(env->global, env);
+    gc_delVarSpaceReference(env->protect, env);
+    gc_delObjectReference(env->global, env);
     return env;
 }
 
@@ -1129,12 +1129,12 @@ static bool isInfixFunc(af_Code *code, af_Environment *env) {
     af_Object *obj = findVarNode(var, NULL, env);
     obj_isInfixFunc *func = findAPI("obj_isInfixFunc", getObjectAPI(obj));
     if (func == NULL) {
-        gc_delReference(obj, env);
+        gc_delObjectReference(obj, env);
         return false;
     }
 
     bool res = func(getObjectID(obj), obj);
-    gc_delReference(obj, env);
+    gc_delObjectReference(obj, env);
     return res;
 }
 
@@ -1294,7 +1294,7 @@ bool pushImportActivity(af_Code *bt, af_Object **obj, char *mark, af_Environment
     if (obj != NULL)
         *obj = tmp;
     else
-        gc_delReference(tmp, env);
+        gc_delObjectReference(tmp, env);
 
     return true;
 }
@@ -1410,7 +1410,7 @@ bool setFuncActivityAddVar(af_Environment *env){
         /* 新层的变量空间应该属于belong而不是func */
         env->activity->run_varlist = pushNewVarList(env->activity->belong, env->activity->run_varlist, env);;
         env->activity->count_run_varlist++;
-        gc_delReference(env->activity->run_varlist, env);
+        gc_delVarListReference(env->activity->run_varlist, env);
     }
     pthread_mutex_unlock(env->activity->gc_lock);
 
@@ -1578,14 +1578,14 @@ void popActivity(bool is_normal, af_Message *msg, af_Environment *env) {
     if (env->activity->type == act_func || env->activity->type == act_top || env->activity->type == act_top_import) {
         if (msg != NULL && env->activity->return_first) {  // msg有内容, 并且设定了返回首位, 则清除msg内容, 并压入首位(压入的代码在下面)
             if (EQ_STR(msg->type, "NORMAL")) {
-                gc_delReference(*(af_Object **) msg->msg, env);
+                gc_delObjectReference(*(af_Object **) msg->msg, env);
                 freeMessage(msg);
                 msg = NULL;
             }
         } else if (env->activity->return_first) {  // msg无内容, 并且设定了返回首位, 则检查msg_down是否有normal, 有则清除
             if (env->activity->msg_down != NULL && EQ_STR(env->activity->msg_down->type, "NORMAL")) {
                 af_Message *tmp = getFirstMessage(env);
-                gc_delReference(*(af_Object **) (tmp->msg), env);
+                gc_delObjectReference(*(af_Object **) (tmp->msg), env);
                 freeMessage(tmp);
             }
         }
@@ -1594,7 +1594,7 @@ void popActivity(bool is_normal, af_Message *msg, af_Environment *env) {
             if (env->activity->return_obj == NULL)
                 msg = makeERRORMessage(RUN_ERROR, RETURN_OBJ_NOT_FOUND_INFO, env);
             else {
-                gc_addReference(env->activity->return_obj, env);
+                gc_addObjectReference(env->activity->return_obj, env);
                 msg = makeNORMALMessage(env->activity->return_obj, env);
                 env->activity->return_obj = NULL;
             }
@@ -1607,7 +1607,7 @@ void popActivity(bool is_normal, af_Message *msg, af_Environment *env) {
     if (env->activity->type == act_top_import && /* import模式, 并且msg_down中有normal, 则把normal替换为belong */
         env->activity->msg_down != NULL && EQ_STR(env->activity->msg_down->type, "NORMAL")) {
         af_Message *tmp = getFirstMessage(env);
-        gc_addReference(env->activity->belong, env);
+        gc_addObjectReference(env->activity->belong, env);
         pushMessageDown(makeIMPORTMessage(env->activity->import_mark, env->activity->belong, env), env);  // 压入belong作为msg
         pushMessageDown(tmp, env);
     }
@@ -1749,7 +1749,7 @@ void freeErrorInfo(af_ErrorInfo *ei, af_Environment *env){
     free(ei->error_type);
     free(ei->error);
     if (ei->obj != NULL)
-        gc_delReference(ei->obj, env);
+        gc_delObjectReference(ei->obj, env);
     freeAllErrorBacktracking(ei->track);
     free(ei);
 }
@@ -1985,7 +1985,7 @@ af_ImportInfo *makeImportInfo(char *mark, af_Object *obj, af_Environment *env){
 void freeImportInfo(af_ImportInfo *ii, af_Environment *env){
     free(ii->mark);
     if (ii->obj != NULL)
-        gc_delReference(ii->obj, env);
+        gc_delObjectReference(ii->obj, env);
     free(ii);
 }
 
@@ -2007,8 +2007,8 @@ static af_GuardianList *makeGuardianList(af_Object *obj, af_Object *func, af_Env
 static af_GuardianList *freeGuardianList(af_GuardianList *gl, af_Environment *env){
     af_GuardianList *next = gl->next;
     if (gl->obj != NULL)
-        gc_delReference(gl->obj, env);
-    gc_delReference(gl->func, env);
+        gc_delObjectReference(gl->obj, env);
+    gc_delObjectReference(gl->func, env);
     free(gl);
     return next;
 }
@@ -2097,12 +2097,12 @@ af_Object *getGlobal(af_Environment *env) {
     af_Activity *activity = env->activity;
     for (NULL; activity != NULL; activity = activity->prev) {
         if (activity->type == act_top || activity->type == act_top_import) {
-            gc_addReference(activity->belong, env);
+            gc_addObjectReference(activity->belong, env);
             return activity->belong;
         }
     }
 
-    gc_addReference(env->global, env);
+    gc_addObjectReference(env->global, env);
     return env->global;
 }
 

+ 5 - 5
src/core/func.c

@@ -22,7 +22,7 @@ static af_ArgCodeList *freeArgCodeList(af_ArgCodeList *acl, af_Environment *env)
     if (acl->free_code)
         freeAllCode(acl->code);
     if (acl->result != NULL)
-        gc_delReference(acl->result, env);
+        gc_delObjectReference(acl->result, env);
     free(acl);
     return next;
 }
@@ -50,7 +50,7 @@ af_Object *getArgCodeListResult(af_ArgCodeList *acl) {
     return acl->result;
 }
 
-af_ArgList *makeArgList(char *name, af_Object *obj, af_Environment *env){
+af_ArgList *makeArgList(char *name, af_Object *obj){
     af_ArgList *arg_list = calloc(1, sizeof(af_ArgList));
     arg_list->name = strCopy(name);
     arg_list->obj = obj;
@@ -61,7 +61,7 @@ static af_ArgList *freeArgList(af_ArgList *al, af_Environment *env){
     af_ArgList *next = al->next;
     free(al->name);
     if (al->obj != NULL)
-        gc_delReference(al->obj, env);
+        gc_delObjectReference(al->obj, env);
     free(al);
     return next;
 }
@@ -90,9 +90,9 @@ af_ArgList **pushArgList(af_ArgList **base, af_ArgList *new) {
  */
 af_ArgList *makeArgListFromArgCodeList(char *name, af_ArgCodeList *acl, af_Environment *env) {
     af_Object *obj = getArgCodeListResult(acl);
-    gc_addReference(obj, env);
+    gc_addObjectReference(obj, env);
 
-    af_ArgList *al = makeArgList(name, obj, env);
+    af_ArgList *al = makeArgList(name, obj);
     return al;
 }
 

+ 2 - 2
src/core/gc.c

@@ -534,7 +534,7 @@ static pgc_Analyzed checkDestruct(af_Environment *env, paf_GuardianList *pgl, pg
             pthread_rwlock_rdlock(&od->lock);
             af_Object *base = od->base;
             pthread_rwlock_unlock(&od->lock);
-            gc_addReference(base, env);
+            gc_addObjectReference(base, env);
 
             *pgl = pushGuardianList(base, func, *pgl, env);
             plist = reachableObjectData(od, plist);
@@ -593,7 +593,7 @@ paf_GuardianList checkAllDestruct(af_Environment *env, paf_GuardianList pgl) {
             pthread_rwlock_rdlock(&od->lock);
             af_Object *base_obj = od->base;
             pthread_rwlock_unlock(&od->lock);
-            gc_addReference(base_obj, env);
+            gc_addObjectReference(base_obj, env);
             pgl = pushGuardianList(base_obj, func, pgl, env);
         }
     }

+ 1 - 1
src/core/global_obj.c

@@ -10,7 +10,7 @@ static char *global_id = "global-object";
 
 static void initGOD(af_Object *obj, GlobalObjectData *data, af_Environment *env) {
     data->share = makeVarSpace(obj, 3, 2, 0, env);
-    gc_delReference(data->share, env);
+    gc_delVarSpaceReference(data->share, env);
 }
 
 static void freeGOD(GlobalObjectData *god, af_Object  *obj, af_Environment *env) {

+ 2 - 4
src/core/object.c

@@ -1,6 +1,4 @@
 #include "__object.h"
-#include "__env.h"
-#include "__gc.h"
 #include "tool.h"
 #include "core_init.h"
 
@@ -89,8 +87,8 @@ af_Object *makeObject(char *id, bool free_api, af_ObjectAPI *api, bool allow_inh
             init(id, obj, obj->data->data, env);
     }
 
-    gc_delReference(od->var_space, env);
-    gc_delReference(od, env);
+    gc_delVarSpaceReference(od->var_space, env);
+    gc_delObjectDataReference(od, env);
     return obj;
 }
 

+ 8 - 9
src/core/run.c

@@ -1,7 +1,6 @@
 #include "aFunCore.h"
 #include "__run.h"
 #include "__env.h"
-#include "__monitor.h"
 
 /* 工具函数: 初始化类型 */
 static bool iterCodeInit(af_Code *code, int mode, af_Environment *env);
@@ -50,7 +49,7 @@ static bool checkLiteral(af_Message **msg, af_Environment *env) {
     af_Object *obj = *(af_Object **)((*msg)->msg);
     obj_literalSetting *func = findAPI("obj_literalSetting", getObjectAPI(obj));
     if (func == NULL) {
-        gc_delReference(obj, env);
+        gc_delObjectReference(obj, env);
         freeMessage(*msg);
         *msg = makeERRORMessage(TYPE_ERROR, API_NOT_FOUND_INFO(obj_literalSetting), env);
         return false;
@@ -82,7 +81,7 @@ static int checkMacro(af_Message *msg, af_Environment *env) {
 
     af_Object *obj = *(af_Object **)(msg->msg);
     bool re = pushMacroFuncActivity(obj, env);
-    gc_delReference(obj, env);
+    gc_delObjectReference(obj, env);
     freeMessage(msg);
     if (re)
         return 1;
@@ -177,7 +176,7 @@ static bool codeElement(af_Code *code, af_Environment *env) {
         af_Object *obj = findVarNode(var, NULL, env);
         writeTrackLog(aFunCoreLogger, "Get literal %s : %p", code->element.data, obj);
         bool res = pushLiteralActivity(code, code->element.data, obj, env);
-        gc_delReference(obj, env);
+        gc_delObjectReference(obj, env);
         return res;
     }
 
@@ -198,13 +197,13 @@ static bool codeElement(af_Code *code, af_Environment *env) {
         char *id = getObjectID(obj);
         if ((is_obj = findAPI("obj_isObjFunc", api)) != NULL && is_obj(id, obj)) {
             bool res = pushVariableActivity(code, obj, env);  // 对象函数
-            gc_delReference(obj, env);
+            gc_delObjectReference(obj, env);
             return res;
         } else if (env->activity->status != act_func_get && // 在act_func_get 模式下不检查是否为is_infix函数 因为本来就要将其作为函数调用
                  (is_infix = findAPI("obj_isInfixFunc", api)) != NULL && is_infix(id, obj)) {
             pushMessageDown(makeERRORMessageFormat(INFIX_PROTECT, env,
                                                    "Infix protect variable: %s.", code->element.data), env);
-            gc_delReference(obj, env);
+            gc_delObjectReference(obj, env);
             return false;
         }
     }
@@ -313,7 +312,7 @@ bool checkNormalEnd(af_Message *msg, af_Environment *env) {
             pushMessageDown(msg, env);
             return true;
         } else if (msg != NULL) {
-            gc_delReference(*(af_Object **) (msg->msg), env);  // msg->msg是一个指针, 这个指针的内容是一个af_Object *
+            gc_delObjectReference(*(af_Object **) (msg->msg), env);  // msg->msg是一个指针, 这个指针的内容是一个af_Object *
             freeMessage(msg);
         }
     } else if (msg != NULL) {
@@ -323,7 +322,7 @@ bool checkNormalEnd(af_Message *msg, af_Environment *env) {
             env->activity->parentheses_call = *(af_Object **) (msg->msg);  // 类前缀调用
             pthread_mutex_unlock(env->activity->gc_lock);
         }
-        gc_delReference(*(af_Object **)(msg->msg), env);  // msg->msg是一个指针, 这个指针的内容是一个af_Object *
+        gc_delObjectReference(*(af_Object **)(msg->msg), env);  // msg->msg是一个指针, 这个指针的内容是一个af_Object *
         freeMessage(msg);
     }
     return false;
@@ -491,7 +490,7 @@ bool iterCode(af_Code *code, int mode, af_Environment *env){
                 af_Object *func = *(af_Object **) (msg->msg);  // func仍保留了msg的gc计数
                 if (!setFuncActivityToArg(func, env))
                     popActivity(false, NULL, env);
-                gc_delReference(func, env);  // 释放计数 (setFuncActivityToArg 不需要计数)
+                gc_delObjectReference(func, env);  // 释放计数 (setFuncActivityToArg 不需要计数)
                 freeMessage(msg);
                 break;
             }

+ 2 - 2
src/core/thread.c

@@ -26,12 +26,12 @@ af_Environment *startRunThread(af_Environment *env, af_VarSpace *vs, af_Code *co
     if (vs == NULL) {
         af_Object *obj = getGlobal(env);
         vs = makeVarSpace(obj, 3, 3, 3, env);
-        gc_delReference(obj, env);
+        gc_delObjectReference(obj, env);
     }
 
     new->activity->run_varlist = pushVarList(vs, new->activity->run_varlist);
     new->activity->count_run_varlist++;
-    gc_delReference(vs, base);
+    gc_delVarSpaceReference(vs, base);
 
     if (enable)  // 如果未Enable, 则暂时不启动线程
         startRunThread_(new, code, not_copy_code);

+ 5 - 5
src/core/var.c

@@ -106,7 +106,7 @@ af_Object *findVarNode(af_Var *var, char *id, af_Environment *env){
     af_Object *obj = NULL;
     if (vn != NULL) {
         obj = vn->obj;
-        gc_addReference(obj, env);
+        gc_addObjectReference(obj, env);
     }
     pthread_rwlock_unlock(&var->lock);
     return obj;
@@ -254,7 +254,7 @@ bool addVarToVarSpace(af_Var *var, af_Object *visitor, af_VarSpace *vs, af_Envir
     *pCup = makeVarCup(var);
     pthread_rwlock_unlock(&vs->lock);
     pthread_rwlock_unlock(&var->lock);
-    gc_delReference(var, env);
+    gc_delVarReference(var, env);
     return true;
 
 RETURN_FALSE:
@@ -275,7 +275,7 @@ bool makeVarToVarSpace(char *name, char p_self, char p_posterity, char p_externa
     af_Var *var = makeVar(name, p_self, p_posterity, p_external, obj, env);
     if (addVarToVarSpace(var, visitor, vs, env))
         return true;
-    gc_delReference(var, env);
+    gc_delVarReference(var, env);
     return false;
 }
 
@@ -304,7 +304,7 @@ bool makeVarToVarSpaceList(char *name, char p_self, char p_posterity, char p_ext
     af_Var *var = makeVar(name, p_self, p_posterity, p_external, obj, env);
     if (addVarToVarSpaceList(var, visitor, vsl, env))
         return true;
-    gc_delReference(var, env);
+    gc_delVarReference(var, env);
     return false;
 }
 
@@ -323,7 +323,7 @@ bool makeVarToProtectVarSpace(char *name, char p_self, char p_posterity, char p_
     af_Var *var = makeVar(name, p_self, p_posterity, p_external, obj, env);
     bool ret = addVarToVarSpace(var, env->activity->belong, env->protect, env);
     if (!ret)
-        gc_delReference(var, env);
+        gc_delVarReference(var, env);
 
     pthread_rwlock_wrlock(&env->protect->lock);
     env->protect->is_protect = is_protect;

+ 1 - 1
src/main.c

@@ -91,7 +91,7 @@ int main(int argc, char **argv) {
 
     aFunInitInfo info = {.base_dir=base_path,
 #ifdef aFunDEBUG
-                         .level=log_track,
+                         .level=log_debug,
 #else
                          .level=log_info,
 #endif

+ 2 - 2
src/runtime/aFunlang.c

@@ -124,7 +124,7 @@ static af_GuardianList *guardian_Signal(char *type, bool is_guard, void *data, a
             af_Message *msg;
             if (EQ_STR("NORMAL", env->activity->msg_down->type)) {
                 msg = getFirstMessage(env);
-                gc_delReference(*(af_Object **)msg->msg, env);
+                gc_delObjectReference(*(af_Object **)msg->msg, env);
                 freeMessage(msg);
             } else if (EQ_STR("ERROR", env->activity->msg_down->type)) {
                 msg = getFirstMessage(env);
@@ -169,7 +169,7 @@ af_Environment *creatAFunEnvironment(int argc, char **argv){
 
     af_Object *cycle = makeCycleObject(env);  // gc 使用的函数
     makeVarToProtectVarSpace(mg_sys_cycle, 3, 3, 3, cycle, env);
-    gc_delReference(cycle, env);
+    gc_delObjectReference(cycle, env);
 
     enableEnvironment(env);
     if (!env->is_derive) {  // 派生 gc 线程

+ 1 - 1
src/runtime/base/str_obj.c

@@ -49,7 +49,7 @@ static void strFuncInit(char *id, af_Object *obj, ObjectStrFunc *data, af_Enviro
     data->func_var_list = copyVarSpaceList(getRunVarSpaceList(env));
     data->share_vs = makeVarSpace(obj, 3, 2, 0, env);
     data->api = makeAPIFromList(api_list);
-    gc_delReference(data->share_vs, env);
+    gc_delVarSpaceReference(data->share_vs, env);
 }
 
 static bool strFuncArgCodeList(char *id, af_Object *obj, af_ArgCodeList **acl, af_Code *code, void **mark, af_Environment *env) {

+ 1 - 1
src/runtime/runtime.c

@@ -84,7 +84,7 @@ void makeObjectFromList(const ObjectDefineList obj_def[], af_Object *visitor, af
         if (od->save != NULL)
             *(od->save) = obj;
         else
-            gc_delReference(obj, env);
+            gc_delObjectReference(obj, env);
     }
 }
 

+ 0 - 3
test/CMakeLists.txt

@@ -1,10 +1,7 @@
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
 include(function)
 
-add_subdirectory(cmake)  # cmake配置时测试 必须进行
-
 include(export/export.cmake)  # 添加export的测试
-
 if (_build_test)
     add_subdirectory(lib)
     add_subdirectory(src)

+ 0 - 1
test/cmake/CMakeLists.txt

@@ -1 +0,0 @@
-include(generic.cmake)  # 添加泛型宏的测试

+ 0 - 5
test/cmake/README

@@ -1,5 +0,0 @@
-目录: cmake
-CMake在配置期间运行的测试
-CMakeTest使用的模块
-
-generic  测试泛型宏

+ 0 - 3
test/cmake/generic.c

@@ -1,3 +0,0 @@
-// 测试 generic 编译
-
-int main() {int a; _Generic((a), int : 0, default : 0); return 0;}

+ 0 - 13
test/cmake/generic.cmake

@@ -1,13 +0,0 @@
-try_compile(generic-test ${CMAKE_BINARY_DIR}/try
-            SOURCES ${CMAKE_CURRENT_LIST_DIR}/generic.c
-            OUTPUT_VARIABLE re
-            C_STANDARD 11
-            C_STANDARD_REQUIRED TRUE
-            C_EXTENSIONS FALSE)
-
-if (NOT generic-test)
-    file(WRITE "${CMAKE_BINARY_DIR}/try.txt" ${re})
-    message(FATAL_ERROR "C cannot use _Generic exp.\n${re}")
-else()
-    message(STATUS "C can use _Generic exp.")
-endif()

+ 17 - 17
test/src/run_code.c

@@ -192,7 +192,7 @@ size_t getSize3(char *id, af_Object *obj) {
 
 void initData3(char *id, af_Object *obj, af_VarSpace **data, af_Environment *env) {
     *data = makeVarSpace(obj, 3, 2, 0, env);
-    gc_delReference(*data, env);
+    gc_delVarSpaceReference(*data, env);
 }
 
 void freeData3(char *id, af_Object *obj, af_VarSpace **data, af_Environment *env) {
@@ -291,7 +291,7 @@ af_FuncBody *testFunc_GcDestruct_a(af_CallFuncInfo *cfi, af_Environment *env) {
     setObjectAttributes(mg_gc_destruct, 3, 3, 3, des, obj, obj, env);
     pushMessageDown(makeNORMALMessage(obj, env), env);
     printf("testFunc_GcDestruct_a[des](%p, %p): I am testFunc_GcDestruct_a\n", obj, des);
-    gc_delReference(des, env);  // obj不需要 delReference, 因为他存在于NORMAL_Message中
+    gc_delObjectReference(des, env);  // obj不需要 delReference, 因为他存在于NORMAL_Message中
     return NULL;
 }
 
@@ -345,7 +345,7 @@ af_FuncBody *testFunc_Gc(af_CallFuncInfo *cfi, af_Environment *env) {  // 测试
     setObjectAttributes(mg_gc_destruct, 3, 3, 3, des, obj, obj, env);
     pushMessageDown(makeNORMALMessage(obj, env), env);
     printf("testFunc_Gc(%p, %p): I am testFunc_Gc\n", obj, des);
-    gc_delReference(des, env);
+    gc_delObjectReference(des, env);
     return NULL;
 }
 
@@ -387,14 +387,14 @@ af_GuardianList *gd_func(char *type, bool is_guard, struct GDData *data, af_Envi
 
     af_GuardianList *gd = NULL;
     data->no_first = true;
-    gc_addReference(data->func, env);  // data->func 本身有一次gc引用, 此次再使用一次gc引用, gd_destruct和freeGuardianList时各释放一次
+    gc_addObjectReference(data->func, env);  // data->func 本身有一次gc引用, 此次再使用一次gc引用, gd_destruct和freeGuardianList时各释放一次
 
     pushGuardianList(NULL, data->func, &gd, env);
     return gd;
 }
 
 void gd_destruct(char *type, struct GDData *data, af_Environment *env) {
-    gc_delReference(data->func, env);
+    gc_delObjectReference(data->func, env);
 }
 
 int main(int argc, char **argv) {
@@ -459,7 +459,7 @@ INIT_ERROR:
         FREE_SYMBOL(getShareVS_);
         FREE_SYMBOL(get_gl3);
         printf("object(%p)\n", obj);
-        gc_delReference(obj, env);
+        gc_delObjectReference(obj, env);
     }
 
     af_Object *af_func = NULL;
@@ -507,7 +507,7 @@ INIT_ERROR:
         FREE_SYMBOL(initData_2);
         FREE_SYMBOL(freeData_2);
         af_func = obj;
-        gc_delReference(obj, env);
+        gc_delObjectReference(obj, env);
         printf("func-normal(%p)\n", obj);
     }
 
@@ -554,7 +554,7 @@ INIT_ERROR:
         FREE_SYMBOL(initData_2);
         FREE_SYMBOL(freeData_2);
         printf("macro(%p)\n", obj);
-        gc_delReference(obj, env);
+        gc_delObjectReference(obj, env);
     }
 
     {
@@ -600,7 +600,7 @@ INIT_ERROR:
         FREE_SYMBOL(initData_2);
         FREE_SYMBOL(freeData_2);
         printf("func-tail(%p)\n", obj);
-        gc_delReference(obj, env);
+        gc_delObjectReference(obj, env);
     }
 
     {
@@ -650,7 +650,7 @@ INIT_ERROR:
         FREE_SYMBOL(initData_2);
         FREE_SYMBOL(freeData_2);
         printf("func-obj(%p)\n", obj);
-        gc_delReference(obj, env);
+        gc_delObjectReference(obj, env);
     }
 
     {
@@ -696,7 +696,7 @@ INIT_ERROR:
         FREE_SYMBOL(initData_2);
         FREE_SYMBOL(freeData_2);
         printf("func-gc(%p)\n", obj);
-        gc_delReference(obj, env);
+        gc_delObjectReference(obj, env);
     }
 
     {
@@ -742,7 +742,7 @@ INIT_ERROR:
         FREE_SYMBOL(initData_2);
         FREE_SYMBOL(freeData_2);
         printf("func-body-dynamic(%p)\n", obj);
-        gc_delReference(obj, env);
+        gc_delObjectReference(obj, env);
     }
 
     {
@@ -792,7 +792,7 @@ INIT_ERROR:
         FREE_SYMBOL(freeData_2);
         FREE_SYMBOL(infix_func);
         printf("func-brackets(%p)\n", obj);
-        gc_delReference(obj, env);
+        gc_delObjectReference(obj, env);
     }
 
     {
@@ -838,7 +838,7 @@ INIT_ERROR:
         FREE_SYMBOL(initData_2);
         FREE_SYMBOL(freeData_2);
         printf("func-no-var(%p)\n", obj);
-        gc_delReference(obj, env);
+        gc_delObjectReference(obj, env);
     }
 
     {
@@ -884,13 +884,13 @@ INIT_ERROR:
         FREE_SYMBOL(initData_2);
         FREE_SYMBOL(freeData_2);
         printf("func-import(%p)\n", obj);
-        gc_delReference(obj, env);
+        gc_delObjectReference(obj, env);
     }
 
     {
         af_Object *obj = getGlobal(env);
         printf("global(%p)\n", obj);
-        gc_delReference(obj, env);
+        gc_delObjectReference(obj, env);
     }
 
     {  // 正常程序
@@ -1099,7 +1099,7 @@ INIT_ERROR:
         struct GDData *data = NULL;
         addGuardian("test", false, true, sizeof(struct GDData), func, des, (void **) &data, env);
         data->func = af_func;
-        gc_addReference(af_func, env);
+        gc_addObjectReference(af_func, env);
         FREE_SYMBOL(func);
         FREE_SYMBOL(des);