Explorar el Código

feat: 添加magic_func.h头文件用于记录魔法函数名

SongZihuan hace 3 años
padre
commit
b10b3da214
Se han modificado 4 ficheros con 20 adiciones y 5 borrados
  1. 1 0
      include/aFun.h
  2. 14 0
      include/magic_func.h
  3. 2 2
      src/core/gc.c
  4. 3 3
      src/main.c

+ 1 - 0
include/aFun.h

@@ -10,6 +10,7 @@
 #include "env.h"
 #include "run.h"
 #include "gc.h"
+#include "magic_func.h"
 
 // Init系列函数
 void aFunInit(void);

+ 14 - 0
include/magic_func.h

@@ -0,0 +1,14 @@
+/*
+ * 文件名: magic_func.h
+ * 目标: 定义魔法函数的名字
+ */
+#ifndef AFUN__MAGIC_FUNC_H
+#define AFUN__MAGIC_FUNC_H
+
+#define MAGIC_NAME_BASE(type) "magic-" #type ":"
+#define MAGIC_NAME(type, job) (MAGIC_NAME_BASE(type) #job)
+
+/* gc模块 */
+#define gc_destruct MAGIC_NAME(gc, destruct)
+
+#endif //AFUN__MAGIC_FUNC_H

+ 2 - 2
src/core/gc.c

@@ -341,7 +341,7 @@ static void freeValue(af_Environment *env) {
 static pgc_Analyzed checkDestruct(af_Environment *env, pgc_DestructList *pdl, pgc_Analyzed plist) {
     for (af_ObjectData *od = env->core->gc_ObjectData; od != NULL; od = od->gc.next) {
         if (!od->gc.info.reachable && !od->gc.done_destruct) {
-            af_Object *func = findObjectAttributesByObjectData("magic-gc:destruct", od);
+            af_Object *func = findObjectAttributesByObjectData(gc_destruct, od);
             if (func == NULL)
                 continue;
             od->gc.done_destruct = true;
@@ -374,7 +374,7 @@ void gc_RunGC(af_Environment *env) {
 pgc_DestructList checkAllDestruct(af_Environment *env, pgc_DestructList pdl) {
     for (af_ObjectData *od = env->core->gc_ObjectData; od != NULL; od = od->gc.next) {
         if (!od->gc.done_destruct) {
-            af_Object *func = findObjectAttributesByObjectData("magic-gc:destruct", od);
+            af_Object *func = findObjectAttributesByObjectData(gc_destruct, od);
             if (func == NULL)
                 continue;
             od->gc.done_destruct = true;

+ 3 - 3
src/main.c

@@ -265,7 +265,7 @@ void testFunc6(int *mark, af_Environment *env) {  // 测试用函数
         FREE_SYMBOL(freeData_2);
     }
 
-    setObjectAttributes("magic-gc:destruct", 3, 3, des, obj, env);
+    setObjectAttributes(gc_destruct, 3, 3, des, obj, env);
     pushMessageDown(makeNORMALMessage(obj), env);
     printf("testFunc6[des](%p, %p): I am testFunc6\n", obj, des);
 }
@@ -316,7 +316,7 @@ void testFunc5(int *mark, af_Environment *env) {  // 测试用函数
         FREE_SYMBOL(freeData_2);
     }
 
-    setObjectAttributes("magic-gc:destruct", 3, 3, des, obj, env);
+    setObjectAttributes(gc_destruct, 3, 3, des, obj, env);
     pushMessageDown(makeNORMALMessage(obj), env);
     printf("testFunc5(%p, %p): I am testFunc5\n", obj, des);
 }
@@ -659,7 +659,7 @@ int main() {
             FREE_SYMBOL(freeData_2);
         }
 
-        setObjectAttributes("magic-gc:destruct", 3, 3, des, obj, env);
+        setObjectAttributes(gc_destruct, 3, 3, des, obj, env);
         addVarToProtectVarSpace(makeVar("func6", 3, 3, obj, env), env);
         printf("func6(%p)\n", obj);
     }