2
0
SongZihuan 3 жил өмнө
parent
commit
093fb58655

+ 13 - 3
include/code.h

@@ -4,23 +4,33 @@
 
 typedef struct af_Code af_Code;
 
+/* 括号类型 */
 enum af_BlockType {
     parentheses = 0,  // 小括号
     brackets,  // 中括号
     curly,  // 大括号
 };
 
+/* 代码块创建函数 */
 af_Code *makeLiteralCode(char *literal_data, char *func, bool in_protect, char prefix, FileLine line, FilePath path);
 af_Code *makeVariableCode(char *var, char prefix, FileLine line, FilePath path);
 af_Code *makeBlockCode(enum af_BlockType type, af_Code *element, char prefix, FileLine line, FilePath path, af_Code **next);
-af_Code *connectCode(af_Code **base, af_Code *next);
-af_Code *copyCode(af_Code *base, FilePath *path);
+
+/* 代码块释放函数 */
 af_Code *freeCode(af_Code *bt);
 bool freeCodeWithElement(af_Code *bt, af_Code **next);
 void freeAllCode(af_Code *bt);
+
+/* 代码块操作函数 */
+af_Code *connectCode(af_Code **base, af_Code *next);
+af_Code *copyCode(af_Code *base, FilePath *path);
+
+/* 代码块属性获取函数 */
 bool getCodeBlockNext(af_Code *bt, af_Code **next);
+void printCode(af_Code *bt);
+
+/* 代码块IO函数 */
 bool writeAllCode(af_Code *bt, FILE *file);
 bool readAllCode(af_Code **bt, FILE *file);
-void printCode(af_Code *bt);
 
 #endif //AFUN__BYTECODE_H_PUBLIC

+ 16 - 5
include/env.h

@@ -7,37 +7,48 @@
 typedef struct af_Environment af_Environment;
 typedef struct af_Message af_Message;
 
+/* 顶层消息处理器的处理函数 DLC */
 DEFINE_DLC_SYMBOL(TopMsgProcessFunc, TopMsgProcessFunc);
 
 #include "code.h"
 #include "object.h"
 #include "var.h"
 
+/* 前缀管理函数 */
 char getPrefix(size_t name, af_Environment *env);
 char setPrefix(size_t name, char prefix, af_Environment *env);
-af_Object *getBaseObject(char *name, af_Environment *env);
 
+/* 运行环境函数 */
 af_Environment *makeEnvironment(void);
-bool addTopActivity(af_Code *code, af_Environment *env);
 bool enableEnvironment(af_Environment *env);
 void freeEnvironment(af_Environment *env);
+
+/* 保护空间管理函数 */
 bool addVarToProtectVarSpace(af_Var *var, af_Environment *env);
+af_Object *getBaseObject(char *name, af_Environment *env);
 
+/* 消息创建与释放函数 */
 af_Message *makeMessage(char *type, size_t size);
 af_Message *freeMessage(af_Message *msg);
 void freeAllMessage(af_Message *msg);
+void *getMessageData(af_Message *msg);
+void connectMessage(af_Message **base, af_Message *msg);
+
+/* 消息管理函数 */
 void pushMessageUp(af_Message *msg, af_Environment *env);
-void pushMessageDown(af_Message *msg, af_Environment *env);
 void *popMessageUpData(char *type, af_Environment *env);
 af_Message *popMessageUp(af_Environment *env);
-void *getMessageData(af_Message *msg);
+
+/* 下行消息表管理函数 */
+void pushMessageDown(af_Message *msg, af_Environment *env);
 af_Message *popMessageDown(char *type, af_Environment *env);
 af_Message *getFirstMessage(af_Environment *env);
-void connectMessage(af_Message **base, af_Message *msg);
 
+/* 环境变量管理函数 */
 void setEnvVar(char *name, char *data, af_Environment *env);
 char *findEnvVar(char *name, af_Environment *env);
 
+/* 顶层消息处理器管理函数 */
 void addTopMsgProcess(char *type, DLC_SYMBOL(TopMsgProcessFunc) func,
                       af_Environment *env);
 bool changeTopMsgProcess(char *type, DLC_SYMBOL(TopMsgProcessFunc) func,

+ 3 - 0
include/gc.h

@@ -3,13 +3,16 @@
 #include "object.h"
 #include "var.h"
 
+/* gc 引用计数管理函数 */
 #define gc_addReference(obj) ((obj)->gc.info.reference++)
 #define gc_delReference(obj) ((obj)->gc.info.reference--)
 
+/* gc 对象新增函数 */
 void gc_addObject(af_Object *obj, af_Environment *env);
 void gc_addVar(af_Var *obj, af_Environment *env);
 void gc_addVarSpace(af_VarSpace *obj, af_Environment *env);
 
+/* gc 运行时函数 */
 bool resetGC(af_Environment *env);
 
 #endif //AFUN__GC_H_PUBLIC

+ 1 - 0
include/mem.h

@@ -11,6 +11,7 @@
 
 #if BUILD_MEM
 
+/* 取代calloc函数 */
 static void *safeCalloc(size_t n, size_t size);
 static void *safeCalloc(size_t n, size_t size) {
     void *re = calloc(n, size);

+ 7 - 2
include/object.h

@@ -5,21 +5,26 @@
 typedef struct af_Object af_Object;
 typedef struct af_Inherit af_Inherit;
 
+/* 对象API函数 DLC */
 DEFINE_DLC_SYMBOL(pValueAPI, pAPIFUNC);
 
 #include "env.h"
 #include "tool.h"
 
+/* 对象创建与释放函数 */
 af_Object *makeObject(char *id, size_t data_size, bool inherit_api, bool allow_iherit, af_Object *belong,
                       af_Inherit *iherit, af_Environment *env);
 void freeObject(af_Object *obj);
+
+/* 对象属性获取函数 */
 af_Object *getBelongObject(af_Object *object, af_Environment *env);
 
+/* 对象继承关系函数 */
 af_Inherit *makeIherit(af_Object *obj);
 af_Inherit *freeIherit(af_Inherit *ih);
 void freeAllIherit(af_Inherit *ih);
 
+/* 对象API函数 */
 void *findObjectAPI(char *api_name, af_Object *obj);
-int addAPIToObject(DLC_SYMBOL(pAPIFUNC) func, char *api_name,
-                   af_Object *obj);
+int addAPIToObject(DLC_SYMBOL(pAPIFUNC) func, char *api_name, af_Object *obj);
 #endif //AFUN__OBJECT_H_PUBLIC

+ 1 - 0
include/run.h

@@ -3,5 +3,6 @@
 #include "macro.h"
 #include "code.h"
 
+/* 代码运行工具 */
 bool iterCode(af_Code *code, af_Environment *env);
 #endif //AFUN_RUN_H

+ 8 - 7
include/tool.h

@@ -12,20 +12,20 @@
 #include <dlfcn.h>
 #include "macro.h"
 
-// md5 工具
+/* md5计算工具 */
 #define READ_DATA_SIZE	(1024)
 #define MD5_SIZE (16)
 #define MD5_STR_LEN (MD5_SIZE * 2)
 #define MD5_STRING (MD5_STR_LEN + 1)
 int getFileMd5(const char *path, char *md5str);
 
-// hash 工具
+/* 哈希工具 */
 typedef long int time33_t;
 
 time33_t time33(char *str);
 time33_t w_time33(wchar_t *str);
 
-// string 工具
+/* 字符串工具 */
 #define EQ_STR(str1, str2) (!strcmp((str1), (str2)))
 #define EQ_WSTR(wid1, wid2) (!wcscmp((wid1), (wid2)))
 
@@ -50,7 +50,7 @@ wchar_t *wstrReverse(wchar_t *str);
 wchar_t *convertToWstr(char *str, bool free_old);
 char *convertToStr(wchar_t *wstr, bool free_old);
 
-// file 工具
+/* 路径工具 */
 #ifdef __linux__
 
 #define SEP "/"
@@ -65,12 +65,13 @@ char *convertToStr(wchar_t *wstr, bool free_old);
 
 #endif
 
+/* 文件处理工具 */
 int checkFile(char *path);
 char *getFileName(char *path_1);
 char *fileNameToVar(char *name, bool need_free);
 char *findPath(char *path, char *env, bool need_free);
 
-// signal 工具
+/* 信号处理工具 */
 typedef int vsignal;
 typedef struct SignalTag SignalTag;
 struct SignalTag{
@@ -84,10 +85,10 @@ struct SignalTag{
 extern volatile struct SignalTag signal_tag;  // 在tool.c中定义
 void afSignalHandler(int signum);
 
-// time 工具
+/* 时间工具 */
 void safeSleep(double ms);
 
-// dlc 工具
+/* 动态库工具(dlc): 处理动态库的使用 */
 
 /*
  * NEW_DLC_SYMBOL: 用于定义指定类型的symbol结构体

+ 15 - 4
include/var.h

@@ -8,20 +8,24 @@ typedef struct af_VarSpaceListNode af_VarSpaceListNode;
 #include "macro.h"
 #include "object.h"
 
+/* 变量创建与释放 */
 af_Var *makeVar(char *name, char p_self, char p_posterity, char p_external, af_Object *obj);
 void freeVar(af_Var *var);
+
+/* 变量值管理 */
 void addVarNode(af_Var var, af_Object *obj, char *id);
 
+/* 变量空间创建与释放 */
 af_VarSpace *makeVarSpace(void);
 void freeVarSpace(af_VarSpace *vs);
 
-af_VarSpaceListNode *makeVarSpaceList(af_VarSpace *vs);
-af_VarSpaceListNode *freeVarSpaceList(af_VarSpaceListNode *vsl);
-void freeAllVarSpaceList(af_VarSpaceListNode *vsl);
-
+/* 变量的GC管理工具
+ * 注意: 变量和变量空间默认是非GC管理的
+ */
 void addVarSpaceGC(af_VarSpace *vs, af_Environment *env);
 void addVarGC(af_Var *var, af_Environment *env);
 
+/* 变量赋值类函数 */
 bool addVarToVarSpace(af_Var *var, af_VarSpace *vs);
 bool makeVarToVarSpace(char *name, char p_self, char p_posterity, char p_external, af_Object *obj,
                        af_VarSpace *vs);
@@ -30,9 +34,16 @@ bool addVarToVarSpaceList(af_Var *var, af_VarSpaceListNode *vsl);
 bool makeVarToVarSpaceList(char *name, char p_self, char p_posterity, char p_external, af_Object *obj,
                            af_VarSpaceListNode *vsl);
 
+/* 变量寻值类函数 */
 af_Var *findVarFromVarSpace(char *name, af_VarSpace *vs);
 af_Var *findVarFromVarList(char *name, af_VarSpaceListNode *vsl);
 
+/* 变量空间链的创建与释放 */
+af_VarSpaceListNode *makeVarSpaceList(af_VarSpace *vs);
+af_VarSpaceListNode *freeVarSpaceList(af_VarSpaceListNode *vsl);
+void freeAllVarSpaceList(af_VarSpaceListNode *vsl);
+
+/* 变量空间链管理 */
 af_VarSpaceListNode *pushNewVarList(af_VarSpaceListNode *base);
 af_VarSpaceListNode *popLastVarList(af_VarSpaceListNode *base);
 

+ 8 - 0
src/core/__env.h

@@ -101,10 +101,18 @@ struct af_Environment {  // 运行环境
     struct af_TopMsgProcess *process;
 };
 
+/* Core管理寒素 */
 af_Object *getBaseObjectFromCore(char *name, af_Core *core);
+
+/* Activity运行初始化函数 */
+bool addTopActivity(af_Code *code, af_Environment *env);
+
+/* 运行时Activity设置函数 (新增Activity) */
 bool pushExecutionActivity(af_Code *bt, bool return_first, af_Environment *env);
 bool pushFuncActivity(af_Code *bt, af_Environment *env);
 void popActivity(af_Message *msg, af_Environment *env);
+
+/* 运行时Activity设置函数 (设置Activity) */
 bool setFuncActivityToArg(af_Object *func, af_Environment *env);
 bool setFuncActivityAddVar(af_VarSpaceListNode *vsl, bool new_vsl, bool is_protect, char **msg_type, af_Environment *env);
 bool setFuncActivityToNormal(af_Code *bt, af_Environment *env);

+ 5 - 1
src/core/__gc.h

@@ -48,12 +48,16 @@ struct GC_VarSpace {
 #include "__env.h"  // 这部分内容依赖上面的定义
 #include "gc.h"
 
-void gc_addObjectData(struct af_ObjectData *obj, af_Environment *env);  // af_ObjectData 不对外公开
+/* gc 对象新增函数 : 涉及af_ObjectData 不对外公开 */
+void gc_addObjectData(struct af_ObjectData *obj, af_Environment *env);
+
+/* gc 对象新增函数 : 涉及af_Core不对外公开 */
 void gc_addObjectDataByCore(struct af_ObjectData *obj, af_Core *core);
 void gc_addObjectByCore(struct af_Object *obj, af_Core *core);
 void gc_addVarByCore(struct af_Var *obj, af_Core *core);
 void gc_addVarSpaceByCore(struct af_VarSpace *obj, af_Core *core);
 
+/* gc启动函数 : gc的启动由解释器完全管理 */
 bool gc_RunGC(af_Environment *env);
 void gc_freeAllValue(af_Core *core);
 

+ 1 - 3
src/core/__object.h

@@ -60,9 +60,7 @@ struct af_Inherit {
     struct af_Inherit *next;
 };
 
+/* ObjectData的释放函数 */
 void freeObjectData(af_ObjectData *od);  // gc使用
-int addAPIToObjectData(DLC_SYMBOL(pAPIFUNC) func, char *api_name,
-                       af_ObjectData *od);
-af_ObjectAPINode *findObjectDataAPINode(char *api_name, af_ObjectData *od);
 
 #endif //AFUN__OBJECT_H

+ 1 - 0
src/core/__var.h

@@ -40,6 +40,7 @@ struct af_VarSpaceListNode {  // 变量链
     struct af_VarSpaceListNode *next;
 };
 
+/* 变量(变量空间)托管gc函数 :  内部使用 gc 对象新增函数 (涉及af_Core不对外公开) */
 void addVarSpaceGCByCore(af_VarSpace *vs, af_Core *core);
 void addVarGCByCore(af_Var *var, af_Core *core);
 

+ 9 - 1
src/core/env.c

@@ -1,24 +1,32 @@
 #include "__env.h"
 
+/* 核心创建和释放 */
 static af_Core *makeCore(void);
 static void freeCore(af_Core *core);
+
+/* 核心初始化 */
+static bool enableCore(af_Core *core);
 static bool checkInheritAPI(af_ObjectData *od);
 static void checkInherit(af_Inherit **ih, af_Object *obj);
-static bool enableCore(af_Core *core);
 
+/* 活动记录器创建和释放 */
 static af_Activity *makeActivity(af_Code *bt_top, af_Code *bt_start, bool return_first, af_Message *msg_up,
                                  af_VarSpaceListNode *vsl, af_Object *belong, af_Object *func);
 static af_Activity *freeActivity(af_Activity *activity);
 static void freeAllActivity(af_Activity *activity);
 
+/* 环境变量创建与释放 */
 static af_EnvVar *makeEnvVar(char *name, char *data);
 static af_EnvVar *freeEnvVar(af_EnvVar *var);
 static void freeAllEnvVar(af_EnvVar *var);
 static void freeEnvVarSpace(af_EnvVarSpace *evs);
 
+/* 顶层消息处理器创建与释放 */
 static af_TopMsgProcess *makeTopMsgProcess(char *type, DLC_SYMBOL(TopMsgProcessFunc) func);
 static af_TopMsgProcess *freeTopMsgProcess(af_TopMsgProcess *mp);
 static void freeAllTopMsgProcess(af_TopMsgProcess *mp);
+
+/* 顶层消息处理器 处理函数 */
 static void *findTopMsgProcessFunc(char *type, af_Environment *env);
 static void runTopMessageProcess(af_Environment *env);
 

+ 5 - 3
src/core/gc.c

@@ -4,8 +4,7 @@
 #include "__gc.h"
 #include "__env.h"
 
-typedef struct gc_Analyzed gc_Analyzed;
-typedef struct gc_Analyzed **pgc_Analyzed;
+typedef struct gc_Analyzed gc_Analyzed, **pgc_Analyzed;
 struct gc_Analyzed {
     enum gc_AnalyzedType {
         gc_ObjectData,
@@ -25,25 +24,28 @@ struct gc_Analyzed {
     struct gc_Analyzed *next;
 };
 
+/* 分析记录器创建与释放函数 */
 static gc_Analyzed *makeAnalyzed(enum gc_AnalyzedType type, void *data);
 static gc_Analyzed *freeAnalyzed(gc_Analyzed *base);
 
+/* 指定都西昂的分析记录器创建与释放函数 : 调用分析记录器创建与释放函数 */
 static pgc_Analyzed newObjectDataAnalyzed(struct af_ObjectData *od, pgc_Analyzed plist);
 static pgc_Analyzed newObjectAnalyzed(struct af_Object *obj, pgc_Analyzed plist);
 static pgc_Analyzed newVarAnalyzed(struct af_Var *var, pgc_Analyzed plist);
 static pgc_Analyzed newVarSpaceAnalyzed(struct af_VarSpace *vs, pgc_Analyzed plist);
 
+/* 可达性分析函数 */
 static pgc_Analyzed reachableVar(struct af_Var *var, pgc_Analyzed plist);
 static pgc_Analyzed reachableVarSpace(struct af_VarSpace *vs, pgc_Analyzed plist);
 static pgc_Analyzed reachableObjectData(struct af_ObjectData *od, pgc_Analyzed plist);
 static pgc_Analyzed reachableObject(struct af_Object *od, pgc_Analyzed plist);
 
+/* gc运行函数 */
 static void freeValue(af_Core *core);
 static pgc_Analyzed reachable(af_Activity *active, pgc_Analyzed plist);
 static pgc_Analyzed iterLinker(af_Core *core, pgc_Analyzed plist);
 static void freeAllAnalyzed(gc_Analyzed *base);
 
-
 static gc_Analyzed *makeAnalyzed(enum gc_AnalyzedType type, void *data) {
     gc_Analyzed *analyzed = calloc(sizeof(gc_Analyzed), 1);
     analyzed->type = type;

+ 10 - 2
src/core/object.c

@@ -2,12 +2,20 @@
 #include "__env.h"
 #include "tool.h"
 
+/* ObjectData 创建与释放 */
 static af_ObjectData *makeObjectData_Pri(char *id, size_t data_size, bool inherit_api, bool allow_iherit);
 static af_Object *makeObject_Pri(char *id, size_t data_size, bool inherit_api, bool allow_iherit);
 
+/* ObjectData API 创建与释放 */
 static af_ObjectAPINode *makeObjectAPINode(DLC_SYMBOL(pAPIFUNC) func, char *api_name);
 static af_ObjectAPINode *freeObjectAPINode(af_ObjectAPINode *apin);
 static void freeAllObjectAPINode(af_ObjectAPINode *apin);
+
+/* ObjectData API 管理函数 */
+static af_ObjectAPINode *findObjectDataAPINode(char *api_name, af_ObjectData *od);
+static int addAPIToObjectData(DLC_SYMBOL(pAPIFUNC) func, char *api_name, af_ObjectData *od);
+
+/* ObjectData API表 管理函数 */
 static af_ObjectAPI *makeObjectAPI(void);
 static void freeObjectAPI(af_ObjectAPI *api);
 
@@ -164,7 +172,7 @@ static void freeObjectAPI(af_ObjectAPI *api) {
  * 若dlc中不存在指定函数则返回-1且不作修改
  * 操作成功返回1
  */
-int addAPIToObjectData(DLC_SYMBOL(pAPIFUNC) func, char *api_name,
+static int addAPIToObjectData(DLC_SYMBOL(pAPIFUNC) func, char *api_name,
                         af_ObjectData *od) {
     time33_t index = time33(api_name) % API_HASHTABLE_SIZE;
     af_ObjectAPINode **pNode = &od->api->node[index];
@@ -178,7 +186,7 @@ int addAPIToObjectData(DLC_SYMBOL(pAPIFUNC) func, char *api_name,
     return *pNode == NULL ? -1 : 1;
 }
 
-af_ObjectAPINode *findObjectDataAPINode(char *api_name, af_ObjectData *od) {
+static af_ObjectAPINode *findObjectDataAPINode(char *api_name, af_ObjectData *od) {
     time33_t index = time33(api_name) % API_HASHTABLE_SIZE;
     for (af_ObjectAPINode *node = od->api->node[index]; node != NULL; node = node->next) {
         if (EQ_STR(node->name, api_name))

+ 24 - 15
src/core/run.c

@@ -7,6 +7,15 @@
 #include "__gc.h"
 #include "__code.h"
 
+/* Code 执行函数 */
+static af_Code *codeVariable(af_Code *code, af_Environment *env);
+static af_Code *codeLiteral(af_Code *code, af_Environment *env);
+static void codeBlock(af_Code *bt, af_Environment *env);
+
+/* 工具函数 */
+static bool checkInMsgType(char *type, af_Environment *env);
+static void popLastActivity(af_Message *msg, af_Environment *env) ;
+
 static af_Code *codeVariable(af_Code *code, af_Environment *env) {
     af_Var *var = findVarFromVarList(code->variable.name, env->activity->var_list);
     af_Message *msg;
@@ -37,6 +46,20 @@ static af_Code *codeLiteral(af_Code *code, af_Environment *env) {
     return code->next;
 }
 
+static void codeBlock(af_Code *bt, af_Environment *env) {
+    if (bt->prefix == env->core->prefix[B_EXEC] && bt->block.type == parentheses)  // 顺序执行, 返回尾项
+        pushExecutionActivity(bt, false, env);
+    else if (bt->prefix == env->core->prefix[B_EXEC_FIRST] && bt->block.type == brackets)  // 顺序执行, 返回首项
+        pushExecutionActivity(bt, true, env);
+    else {
+        pushFuncActivity(env->activity->bt_next, env);
+        if (bt->prefix == env->core->prefix[B_MUST_COMMON_ARG])
+            env->activity->must_common_arg = true;
+        else if (bt->prefix == env->core->prefix[B_NOT_STRICT])
+            env->activity->not_strict = true;
+    }
+}
+
 static bool checkInMsgType(char *type, af_Environment *env) {
     if (env->activity->msg_type == NULL)
         return false;
@@ -47,7 +70,7 @@ static bool checkInMsgType(char *type, af_Environment *env) {
     return false;
 }
 
-static void popLastActivity(af_Message *msg, af_Environment *env){
+static void popLastActivity(af_Message *msg, af_Environment *env) {
     do {  // 如果返回一级后仍是执行完成则继续返回
         if (env->activity->prev == NULL)
             printf("top finished\n");
@@ -70,20 +93,6 @@ static void popLastActivity(af_Message *msg, af_Environment *env){
     } while (env->activity != NULL && env->activity->bt_next == NULL);
 }
 
-static void codeBlock(af_Code *bt, af_Environment *env) {
-    if (bt->prefix == env->core->prefix[B_EXEC] && bt->block.type == parentheses)  // 顺序执行, 返回尾项
-        pushExecutionActivity(bt, false, env);
-    else if (bt->prefix == env->core->prefix[B_EXEC_FIRST] && bt->block.type == brackets)  // 顺序执行, 返回首项
-        pushExecutionActivity(bt, true, env);
-    else {
-        pushFuncActivity(env->activity->bt_next, env);
-        if (bt->prefix == env->core->prefix[B_MUST_COMMON_ARG])
-            env->activity->must_common_arg = true;
-        else if (bt->prefix == env->core->prefix[B_NOT_STRICT])
-            env->activity->not_strict = true;
-    }
-}
-
 bool iterCode(af_Code *code, af_Environment *env) {
     if (!addTopActivity(code, env))
        return false;

+ 4 - 0
src/core/var.c

@@ -2,13 +2,17 @@
 #include "__env.h"
 #include "tool.h"
 
+/* VarNode 创建与释放 */
 static af_VarNode *makeVarNode(af_Object *obj, char *id);
 static af_VarNode *freeVarNode(af_VarNode *vn);
 static void freeAllVarNode(af_VarNode *vn);
 
+/* VarCup 创建与释放 */
 static af_VarCup *makeVarCup(af_Var *var);
 static af_VarCup *freeVarCup(af_VarCup *vp);
 static void freeAllVarCup(af_VarCup *vp);
+
+/* VarSpace 寻值函数 */
 static af_Var *findVarFromVarSpaceByIndex(time33_t index, char *name, af_VarSpace *vs);
 
 static af_VarNode *makeVarNode(af_Object *obj, char *id) {

+ 4 - 0
src/tool/byte.c

@@ -6,6 +6,10 @@
 enum af_EndianType endian = little_endian;
 enum af_EndianType save_as = little_endian;  // 默认以小端序存储
 
+/*
+ * 函数名: getEndian
+ * 目标: 获取机器字节序
+ */
 void getEndian() {
     union {
         int16_t a;//元素a,占2个字节

+ 2 - 0
src/tool/dlc.c

@@ -5,6 +5,8 @@
 #define GC_SZIE (0)
 #endif
 
+static bool freeLibary_(struct DlcHandle *dlc, bool f);
+
 struct DlcSymbol_ {
     void *symbol;
     struct DlcHandle *dlc;

+ 1 - 1
test/test_byte_code.c

@@ -3,7 +3,7 @@
 #include "aFun.h"
 
 int main() {
-    af_Code *bt1 = makeLiteralCode("data", "func", false, ',', 0, "Unknow");
+    af_Code *bt1 = makeLiteralCode("data", "func", false, ',', 0, "Unknown");
     af_Code *bt2 = makeVariableCode("var1", 0, 1, NULL);
 
     af_Code *bt3 = makeLiteralCode("data2", "func", false, 0, 0, NULL);