Bladeren bron

feat: 允许tool.dlc的声明和定义分开

SongZihuan 3 jaren geleden
bovenliggende
commit
4cc63676b2
5 gewijzigde bestanden met toevoegingen van 14 en 8 verwijderingen
  1. 1 2
      include/env.h
  2. 1 2
      include/object.h
  3. 6 4
      include/tool.h
  4. 3 0
      src/core/__env.h
  5. 3 0
      src/core/__object.h

+ 1 - 2
include/env.h

@@ -6,8 +6,7 @@
 typedef struct af_Environment af_Environment;
 typedef struct af_Message af_Message;
 
-typedef void TopMsgProcessFunc(af_Message *msg, af_Environment *env);
-NEW_DLC_SYMBOL(TopMsgProcessFunc, TopMsgProcessFunc);
+DEFINE_DLC_SYMBOL(TopMsgProcessFunc, TopMsgProcessFunc);
 
 #include "code.h"
 #include "object.h"

+ 1 - 2
include/object.h

@@ -5,8 +5,7 @@
 typedef struct af_Object af_Object;
 typedef struct af_Inherit af_Inherit;
 
-typedef void pValueAPI();
-NEW_DLC_SYMBOL(pValueAPI, pAPIFUNC);  // TODO-szh 移动到_object.h
+DEFINE_DLC_SYMBOL(pValueAPI, pAPIFUNC);
 
 #include "env.h"
 #include "tool.h"

+ 6 - 4
include/tool.h

@@ -92,7 +92,7 @@ void safeSleep(double ms);
 /*
  * NEW_DLC_SYMBOL: 用于定义指定类型的symbol结构体
  * DLC_SYMBOL: 指定类型的symbol结构体名
- * GET_SYMBOL: 访问symbol成员
+ * GET_SYMBOL: 访问symbol成员的值
  * MAKE_SYMBOL: 生成一个symbol
  * COPY_SYMBOL: 拷贝一个symbol(拷贝其引用)
  * READ_SYMBOL: 在dlc中获取一个symbol
@@ -102,6 +102,8 @@ void safeSleep(double ms);
  * freeLibary: 释放动态库
  * dlcExit: 释放所有动态库
  */
+
+#define DEFINE_DLC_SYMBOL(TYPE, NAME) typedef struct DLC##NAME##SYMBOL *pDLC##NAME##SYMBOL
 #define NEW_DLC_SYMBOL(TYPE, NAME) typedef struct DLC##NAME##SYMBOL { \
 TYPE *symbol; \
 struct DlcHandle *dlc; \
@@ -109,9 +111,9 @@ struct DlcHandle *dlc; \
 
 #define DLC_SYMBOL(NAME) pDLC##NAME##SYMBOL
 #define GET_SYMBOL(SYMBOL) (*((SYMBOL)->symbol))
-#define MAKE_SYMBOL(symbol, TYPE) ((struct DLC##TYPE##SYMBOL *) (makeSymbol_(symbol)))
-#define COPY_SYMBOL(ds, TYPE) ((struct DLC##TYPE##SYMBOL *) (copySymbol_((DlcSymbol_ *)(ds))))
-#define READ_SYMBOL(dlc, name, TYPE) ((struct DLC##TYPE##SYMBOL *) (getSymbol_((dlc), (name))))
+#define MAKE_SYMBOL(symbol, TYPE) ((pDLC##TYPE##SYMBOL) (makeSymbol_(symbol)))
+#define COPY_SYMBOL(ds, TYPE) ((pDLC##TYPE##SYMBOL) (copySymbol_((DlcSymbol_ *)(ds))))
+#define READ_SYMBOL(dlc, name, TYPE) ((pDLC##TYPE##SYMBOL) (getSymbol_((dlc), (name))))
 #define FREE_SYMBOL(symbol) ((symbol) != NULL ? (freeSymbol_((DlcSymbol_ *)(symbol)), NULL) : NULL)
 
 typedef struct DlcSymbol_ DlcSymbol_;

+ 3 - 0
src/core/__env.h

@@ -18,6 +18,9 @@ typedef struct af_TopMsgProcess af_TopMsgProcess;
 #define ENV_VAR_HASH_SIZE (8)
 typedef uint16_t ActivityCount;
 
+typedef void TopMsgProcessFunc(af_Message *msg, af_Environment *env);
+NEW_DLC_SYMBOL(TopMsgProcessFunc, TopMsgProcessFunc);
+
 struct af_Core {  // 解释器核心
     // GC基本信息
     struct af_ObjectData *gc_ObjectData;

+ 3 - 0
src/core/__object.h

@@ -18,6 +18,9 @@ typedef struct af_ObjectAPI af_ObjectAPI;
 
 #define API_HASHTABLE_SIZE (8)
 
+typedef void pValueAPI();
+NEW_DLC_SYMBOL(pValueAPI, pAPIFUNC);
+
 struct af_ObjectAPINode {
     char *name;  // api名字
     DLC_SYMBOL(pAPIFUNC) api;  // api函数