浏览代码

refactor & docx: 添加注释

SongZihuan 3 年之前
父节点
当前提交
4b82e00808
共有 9 个文件被更改,包括 211 次插入38 次删除
  1. 1 3
      include/core/env-var.hpp
  2. 5 1
      include/core/gc.hpp
  3. 0 5
      include/core/inter.hpp
  4. 20 0
      src/core/code.cpp
  5. 28 15
      src/core/env-var.cpp
  6. 5 0
      src/core/init.cpp
  7. 25 13
      src/core/inter.cpp
  8. 24 0
      src/core/msg.cpp
  9. 103 1
      src/core/var.cpp

+ 1 - 3
include/core/env-var.hpp

@@ -5,7 +5,6 @@
 
 namespace aFuncore {
     class EnvVarSpace {  // 环境变量
-    public:
         static const size_t ENV_VAR_HASH_SIZE = 100;  // 环境变量哈希表大小
         struct EnvVar {  // 环境变量
             std::string name;
@@ -13,7 +12,7 @@ namespace aFuncore {
             int32_t num = 0;  // 可以同时记录字符串和数字
             struct EnvVar *next = nullptr;
         };
-    private:
+
         size_t count;
         EnvVar *var[ENV_VAR_HASH_SIZE] {};
         pthread_rwlock_t lock;
@@ -22,7 +21,6 @@ namespace aFuncore {
         AFUN_CORE_EXPORT ~EnvVarSpace();
 
         [[nodiscard]] size_t getCount() const {return count;}
-        [[nodiscard]] EnvVar *findVar(const std::string &name);
         AFUN_CORE_EXPORT bool findString(const std::string &name, std::string &str) const;
         AFUN_CORE_EXPORT bool findNumber(const std::string &name, int32_t &num) const;
 

+ 5 - 1
include/core/gc.hpp

@@ -9,10 +9,14 @@ namespace aFuncore {
 
     class GcObjectBase {
         bool not_clear;  // 不清除
-        GcCount reference;  // 引用计数
         bool reachable;  // 可达标记 [同时标识已迭代]
+        GcCount reference;  // 引用计数
     public:
         GcObjectBase() : not_clear{false}, reference{0}, reachable{false} {}
+        void addReference() {reference++;}
+        void delReference() {reference--;}
+        void setClear(bool clear=false) {not_clear=!clear;}
+        void setReachable(bool is_reference=false) {reachable=is_reference;}
     };
 
     template <class T>

+ 0 - 5
include/core/inter.hpp

@@ -77,11 +77,6 @@ namespace aFuncore {
 
         /* 配置信息记录器 */
         EnvVarSpace *envvar;
-        EnvVarSpace::EnvVar *gc_runtime;
-        EnvVarSpace::EnvVar *prefix;
-        EnvVarSpace::EnvVar *exit_code;  // 退出代码
-        EnvVarSpace::EnvVar *argc;  // 参数个数
-        EnvVarSpace::EnvVar *error_std;  // Error输出的位置 0-stdout 其他-stderr
 
         /* 线程信息 */
     public:

+ 20 - 0
src/core/code.cpp

@@ -356,6 +356,10 @@ Code *Code::read_v1(FILE *f, bool debug, int8_t read_type, bool to_son) {
 
 #undef Done
 
+/**
+ * 计算代码的MD5值(版本:1)
+ * @return md5
+ */
 std::string Code::getMD5_v1() const {
     char md5str[MD5_STR_LEN + 1] {};
     char md5_value[MD5_SIZE];
@@ -383,6 +387,10 @@ std::string Code::getMD5_v1() const {
     return md5str;
 }
 
+/**
+ * 计算代码(子、兄)的MD5值(版本:1)
+ * @return md5
+ */
 std::string Code::getMD5All_v1() const {
     if (this->type != code_start) {
         errorLog(aFunCoreLogger, "Code get md5 all did not with `start`");
@@ -424,6 +432,13 @@ static const std::string ByteCodeHead = "aFunByteCode";  // NOLINT
 static const int MaxByteCodeVersion = 1;  // 字节码版本号, 有别于 aFun 版本号
 
 #define Done(write) do{if(!(write)){goto RETURN_FALSE;}}while(0)
+
+/**
+ * 生成字节码文件(版本: MaxByteCodeVersion)
+ * @param file_path
+ * @param debug
+ * @return
+ */
 bool Code::writeByteCode(ConstFilePath file_path, bool debug) const {
     if (this->type != code_start) {
         errorLog(aFunCoreLogger, "ByteCode write all did not with `start`");
@@ -449,6 +464,11 @@ RETURN_FALSE:
     return false;
 }
 
+/**
+ * 读取字节码文件(版本: 自动识别)
+ * @param file_path
+ * @return
+ */
 bool Code::readByteCode(ConstFilePath file_path){
     if (this->type != code_start) {
         errorLog(aFunCoreLogger, "ByteCode read all did not with `start`");

+ 28 - 15
src/core/env-var.cpp

@@ -2,10 +2,16 @@
 using namespace aFuncore;
 using namespace aFuntool;
 
+/**
+ * 创建环境变量
+ */
 aFuncore::EnvVarSpace::EnvVarSpace() : count {0} {  // NOLINT lock 通过 pthread_rwlock_init 初始化
     pthread_rwlock_init(&lock, nullptr);
 }
 
+/**
+ * 释放全部环境变量
+ */
 aFuncore::EnvVarSpace::~EnvVarSpace() {
     for (auto &i : var) {
         for (EnvVar *tmp = i, *next; tmp != nullptr; tmp = next) {
@@ -16,6 +22,12 @@ aFuncore::EnvVarSpace::~EnvVarSpace() {
     pthread_rwlock_destroy(&lock);
 }
 
+/**
+ * 获取环境变量文本
+ * @param name 变量名
+ * @param str 文本
+ * @return 是否成功
+ */
 bool EnvVarSpace::findString(const std::string &name, std::string &str) const{
     size_t index = time33(name) % ENV_VAR_HASH_SIZE;
     for (auto tmp = var[index]; tmp != nullptr; tmp = tmp->next) {
@@ -27,6 +39,12 @@ bool EnvVarSpace::findString(const std::string &name, std::string &str) const{
     return false;
 }
 
+/**
+ * 获取环境变量数值
+ * @param name 变量名
+ * @param num 文本
+ * @return 是否成功
+ */
 bool EnvVarSpace::findNumber(const std::string &name, int32_t &num) const{
     size_t index = time33(name) % ENV_VAR_HASH_SIZE;
     for (auto tmp = var[index]; tmp != nullptr; tmp = tmp->next) {
@@ -38,6 +56,11 @@ bool EnvVarSpace::findNumber(const std::string &name, int32_t &num) const{
     return false;
 }
 
+/**
+ * 设置环境变量文本
+ * @param name 变量名
+ * @param str 文本
+ */
 void EnvVarSpace::setString(const std::string &name, const std::string &str){
     size_t index = time33(name) % ENV_VAR_HASH_SIZE;
     auto tmp = &var[index];
@@ -53,6 +76,11 @@ void EnvVarSpace::setString(const std::string &name, const std::string &str){
     (*tmp)->str = str;
 }
 
+/**
+ * 设置环境变量数值
+ * @param name 变量名
+ * @param num 数值
+ */
 void EnvVarSpace::setNumber(const std::string &name, int32_t num){
     size_t index = time33(name) % ENV_VAR_HASH_SIZE;
     auto tmp = &var[index];
@@ -68,18 +96,3 @@ void EnvVarSpace::setNumber(const std::string &name, int32_t num){
     (*tmp)->num = num;
 }
 
-EnvVarSpace::EnvVar *EnvVarSpace::findVar(const std::string &name){
-    size_t index = time33(name) % ENV_VAR_HASH_SIZE;
-    auto tmp = &var[index];
-    for (NULL; *tmp != nullptr; tmp = &((*tmp)->next)) {
-        if (name == (*tmp)->name) {
-            return *tmp;
-        }
-    }
-
-    (*tmp) = new EnvVar;
-    (*tmp)->name = name;
-    return (*tmp);
-}
-
-

+ 5 - 0
src/core/init.cpp

@@ -10,6 +10,11 @@ namespace aFuncore {
     aFuntool::Logger *aFunCoreLogger;
 };
 
+/**
+ * 初始化程序
+ * @param info 初始化信息
+ * @return 是否初始化成功
+ */
 bool aFuncore::aFunCoreInit(aFuncore::InitInfo *info) {
     if (info == nullptr) {
         static InitInfo info_default = {.base_dir=".",

+ 25 - 13
src/core/inter.cpp

@@ -1,11 +1,9 @@
 #include "inter.hpp"
 #include "init.hpp"
 #include "__gc.hpp"
-
 using namespace aFuncore;
 using namespace aFuntool;
 
-
 Inter::Inter(int argc, char **argv, ExitMode em)
      : base{this}, is_derive{false}, status_lock{}, monitor{}, monitor_lock{}, monitor_cond{} {
     status = inter_creat;
@@ -20,21 +18,16 @@ Inter::Inter(int argc, char **argv, ExitMode em)
     literal = new std::list<LiteralRegex>;
 
     envvar = new EnvVarSpace();
-    gc_runtime = envvar->findVar("sys:gc-runtime");
-    gc_runtime->num = 2;
-    prefix = envvar->findVar("sys:prefix");
-    exit_code = envvar->findVar("sys:exit-code");
-    exit_code->num = 0;
-    this->argc = envvar->findVar("sys:gc-runtime");
-    this->argc->num = argc;
-    error_std = envvar->findVar("sys:gc-runtime");
-    error_std->num = 0;
+    envvar->setNumber("sys:gc-runtime", 2);
+    envvar->setString("sys:prefix", "''");  // 引用,顺序执行
+    envvar->setNumber("sys:exit-code", 0);
+    envvar->setNumber("sys:argc", argc);
+    envvar->setNumber("sys:error_std", 0);
 
     for (int i = 0; i < argc; i++) {
         char buf[20];
         snprintf(buf, 10, "sys:arg%d", i);
-        auto tmp = envvar->findVar(buf);
-        tmp->str = argv[i];
+        envvar->setString(buf, argv[i]);
     }
 
     result = nullptr;
@@ -71,6 +64,9 @@ Inter::~Inter(){
     }
 }
 
+/**
+ * 使能 (激活解释器)
+ */
 void Inter::enable(){
     if (status == inter_init) {
         protect->setProtect(true);
@@ -78,6 +74,10 @@ void Inter::enable(){
     }
 }
 
+/**
+ * 运行代码(直接运行activation)
+ * @return
+ */
 bool Inter::runCode(){
     while (activation != nullptr) {
         if (isExit()) {
@@ -109,6 +109,11 @@ bool Inter::runCode(){
     return true;
 }
 
+/**
+ * 运行代码
+ * @param code 代码
+ * @return
+ */
 bool Inter::runCode(Code *code){
     if (activation != nullptr) {
         errorLog(aFunCoreLogger, "Run code with activation");
@@ -119,6 +124,13 @@ bool Inter::runCode(Code *code){
     return runCode();
 }
 
+/**
+ * 检查字面量正则匹配
+ * @param element 字面量
+ * @param func 函数
+ * @param in_protect 是否保护空间
+ * @return
+ */
 bool Inter::checkLiteral(const std::string &element, std::string &func, bool &in_protect) const {
     if (literal->empty())
         return false;

+ 24 - 0
src/core/msg.cpp

@@ -25,11 +25,20 @@ MessageStream::~MessageStream(){
     }
 }
 
+/**
+ * 压入 Message
+ * @param msg Message
+ */
 void MessageStream::pushMessage(Message *msg){
     msg->next = stream;
     stream = msg;
 }
 
+/**
+ * 获取 Message
+ * @param type 类型
+ * @return Message
+ */
 Message *MessageStream::_getMessage(const std::string &type) const{
     for (Message *msg = stream; msg != nullptr; msg = msg->next) {
         if (msg->type == type)
@@ -38,6 +47,11 @@ Message *MessageStream::_getMessage(const std::string &type) const{
     return nullptr;
 }
 
+/**
+ * 弹出Message (使Message脱离数据流)
+ * @param type 类型
+ * @return Message
+ */
 Message *MessageStream::popMessage(const std::string &type) {
     for (Message **msg = &stream; *msg != nullptr; msg = &((*msg)->next)) {
         if ((*msg)->type == type) {
@@ -68,6 +82,12 @@ UpMessage::~UpMessage(){
     }
 }
 
+/**
+ * 弹出Message (使Message脱离数据流)
+ * 注意: 不会弹出继承的Message
+ * @param type 类型
+ * @return Message
+ */
 Message *UpMessage::popMessage(const std::string &type){
     for (Message **msg = &stream; *msg != nullptr; msg = &((*msg)->next)) {
         if ((*msg) == old)
@@ -81,6 +101,10 @@ Message *UpMessage::popMessage(const std::string &type){
     return nullptr;
 }
 
+/**
+ * 拼接数据流
+ * @param msg
+ */
 void DownMessage::joinMsg(DownMessage *msg){
     Message *m = stream;
     if (m == nullptr)

+ 103 - 1
src/core/var.cpp

@@ -14,6 +14,11 @@ aFuncore::VarSpace::VarSpace(Inter *inter_) : count{0}, var{}, inter{inter_->bas
     addObject(inter->getGcRecord()->varspace);
 }
 
+/**
+ * 访问指定变量
+ * @param name 变量名
+ * @return
+ */
 Var *aFuncore::VarSpace::findVar(const std::string &name){
     size_t index = time33(name) % VAR_HASH_SIZE;
     for (auto tmp = var[index]; tmp != nullptr; tmp = tmp->next) {
@@ -23,6 +28,12 @@ Var *aFuncore::VarSpace::findVar(const std::string &name){
     return nullptr;
 }
 
+/**
+ * 定义变量
+ * @param name 变量名
+ * @param data 变量(Object)
+ * @return
+ */
 VarOperationFlat aFuncore::VarSpace::defineVar(const std::string &name, Object *data){
     size_t index = time33(name) % VAR_HASH_SIZE;
     auto tmp = &var[index];
@@ -37,6 +48,12 @@ VarOperationFlat aFuncore::VarSpace::defineVar(const std::string &name, Object *
     return vof_success;
 }
 
+/**
+ * 定义变量
+ * @param name 变量名
+ * @param data 变量(Var)
+ * @return
+ */
 VarOperationFlat aFuncore::VarSpace::defineVar(const std::string &name, Var *data){
     size_t index = time33(name) % VAR_HASH_SIZE;
     auto tmp = &var[index];
@@ -51,6 +68,12 @@ VarOperationFlat aFuncore::VarSpace::defineVar(const std::string &name, Var *dat
     return vof_success;
 }
 
+/**
+ * 设定变量的值
+ * @param name 变量名
+ * @param data 变量
+ * @return
+ */
 VarOperationFlat aFuncore::VarSpace::setVar(const std::string &name, Object *data){
     size_t index = time33(name) % VAR_HASH_SIZE;
     for (auto tmp = var[index]; tmp != nullptr; tmp = tmp->next) {
@@ -62,6 +85,11 @@ VarOperationFlat aFuncore::VarSpace::setVar(const std::string &name, Object *dat
     return vof_not_var;
 }
 
+/**
+ * 删除变量
+ * @param name 变量名
+ * @return
+ */
 VarOperationFlat aFuncore::VarSpace::delVar(const std::string &name){
     size_t index = time33(name) % VAR_HASH_SIZE;
     for (auto tmp = var[index]; tmp != nullptr && tmp->next != nullptr; tmp = tmp->next) {
@@ -85,31 +113,67 @@ aFuncore::VarSpace::~VarSpace(){
     }
 }
 
+/**
+ * 定义变量
+ * 若启用保护且变量名存在,则返回错误redefine
+ * 若启用保护则返回错误fail
+ * @param name 变量名
+ * @param data 变量(Object)
+ * @return
+ */
 VarOperationFlat aFuncore::ProtectVarSpace::defineVar(const std::string &name, Object *data){
     if (is_protect)
         return findVar(name) ? vof_redefine_var : vof_fail;
     return VarSpace::defineVar(name, data);
 }
 
+/**
+ * 定义变量
+ * 若启用保护且变量名存在,则返回错误redefine
+ * 若启用保护则返回错误fail
+ * @param name 变量名
+ * @param data 变量(Var)
+ * @return
+ */
 VarOperationFlat aFuncore::ProtectVarSpace::defineVar(const std::string &name, Var *data){
     if (is_protect)
         return findVar(name) ? vof_redefine_var : vof_fail;
     return VarSpace::defineVar(name, data);
 }
 
+/**
+ * 设定变量的值
+ * 若启用保护且变量名存在,则返回错误fail
+ * 若启用保护则返回错误 not_var
+ * @param name 变量名
+ * @param data 变量(Var)
+ * @return
+ */
 VarOperationFlat aFuncore::ProtectVarSpace::setVar(const std::string &name, Object *data){
     if (is_protect)
         return findVar(name) ? vof_fail : vof_not_var;
     return VarSpace::setVar(name, data);
 }
 
+/**
+ * 删除变量
+ * 若启用保护且变量名存在,则返回错误fail
+ * 若启用保护则返回错误 not_var
+ * @param name 变量名
+ * @param data 变量(Var)
+ * @return
+ */
 VarOperationFlat aFuncore::ProtectVarSpace::delVar(const std::string &name){
     if (is_protect)
         return findVar(name) ? vof_fail : vof_not_var;
     return VarSpace::delVar(name);
 }
 
-
+/**
+ * 访问变量
+ * @param name 变量名
+ * @return
+ */
 Var *aFuncore::VarList::findVar(const std::string &name){
     Var *ret = nullptr;
     for (auto tmp = this; tmp != nullptr && ret == nullptr; tmp = tmp->next)
@@ -117,6 +181,14 @@ Var *aFuncore::VarList::findVar(const std::string &name){
     return ret;
 }
 
+/**
+ * 定义变量
+ * 若定义出现redefine则退出报错
+ * 若出现fail则跳到下一个变量空间尝试定义
+ * @param name 变量名
+ * @param data 变量(Object)
+ * @return
+ */
 bool aFuncore::VarList::defineVar(const std::string &name, Object *data){
     VarOperationFlat ret = vof_fail;
     for (auto tmp = this; tmp != nullptr && ret == vof_fail; tmp = tmp->next)
@@ -124,6 +196,14 @@ bool aFuncore::VarList::defineVar(const std::string &name, Object *data){
     return ret == vof_success;
 }
 
+/**
+ * 定义变量
+ * 若定义出现redefine则退出报错
+ * 若出现fail则跳到下一个变量空间尝试定义
+ * @param name 变量名
+ * @param data 变量(Var)
+ * @return
+ */
 bool aFuncore::VarList::defineVar(const std::string &name, Var *data){
     VarOperationFlat ret = vof_fail;
     for (auto tmp = this; tmp != nullptr && ret == vof_fail; tmp = tmp->next)
@@ -131,6 +211,14 @@ bool aFuncore::VarList::defineVar(const std::string &name, Var *data){
     return ret == vof_success;
 }
 
+/**
+ * 设置变量的值
+ * 若not_var则跳到下一个变量空间
+ * 若fail则结束
+ * @param name 变量名
+ * @param data 数据
+ * @return
+ */
 bool aFuncore::VarList::setVar(const std::string &name, Object *data){
     VarOperationFlat ret = vof_not_var;
     for (auto tmp = this; tmp != nullptr && ret == vof_not_var; tmp = tmp->next)
@@ -138,6 +226,13 @@ bool aFuncore::VarList::setVar(const std::string &name, Object *data){
     return ret == vof_success;
 }
 
+/**
+ * 删除变量
+ * 若not_var则跳到下一个变量空间
+ * 若fail则结束
+ * @param name
+ * @return
+ */
 bool aFuncore::VarList::delVar(const std::string &name){
     VarOperationFlat ret = vof_not_var;
     for (auto tmp = this; tmp != nullptr && ret == vof_not_var; tmp = tmp->next)
@@ -145,6 +240,10 @@ bool aFuncore::VarList::delVar(const std::string &name){
     return ret == vof_success;
 }
 
+/**
+ * 在指定位置断开varlist
+ * @param varlist
+ */
 void aFuncore::VarList::disconnect(VarList *varlist){
     for (VarList *tmp = this; tmp != nullptr; tmp = tmp->next) {
         if (tmp->next == varlist) {
@@ -154,6 +253,9 @@ void aFuncore::VarList::disconnect(VarList *varlist){
     }
 }
 
+/**
+ * 删除所有varlist
+ */
 void VarList::destructAll(){
     for (VarList *tmp=this, *n; tmp != nullptr; tmp = n) {
         n = tmp->next;