瀏覽代碼

feat: isInfixFunc检查是否字面量

SongZihuan 3 年之前
父節點
當前提交
a73a7a83f4
共有 1 個文件被更改,包括 8 次插入4 次删除
  1. 8 4
      src/core/env.c

+ 8 - 4
src/core/env.c

@@ -684,10 +684,12 @@ static void newActivity(af_Code *bt, const af_Code *next, bool return_first, af_
  * 目标: 检查是否中缀调用函数
  * 目标: 检查是否中缀调用函数
  */
  */
 static bool isInfixFunc(af_Code *code, af_Environment *env) {
 static bool isInfixFunc(af_Code *code, af_Environment *env) {
-    if (code == NULL || code->type != code_element || code->prefix == getPrefix(E_QUOTE, env))
+    if (code == NULL || code->type != code_element || code->prefix == getPrefix(E_QUOTE, env))  // 检查是否element, 且无引用前缀
+        return false;
+
+    if (checkLiteralCode(code->element.data, NULL, NULL, env))  // 检查是否字面量
         return false;
         return false;
 
 
-    // TODO-szh 检查是否变量
     af_Var *var = findVarFromVarList(code->element.data, env->activity->belong, env->activity->var_list);
     af_Var *var = findVarFromVarList(code->element.data, env->activity->belong, env->activity->var_list);
     if (var == NULL)
     if (var == NULL)
         return false;
         return false;
@@ -1162,8 +1164,10 @@ bool pushLiteralRegex(char *pattern, char *func, bool in_protect, af_Environment
 bool checkLiteralCode(char *literal, char **func, bool *in_protect, af_Environment *env) {
 bool checkLiteralCode(char *literal, char **func, bool *in_protect, af_Environment *env) {
     for (af_LiteralRegex *lr = env->core->lr; lr != NULL; lr = lr->next) {
     for (af_LiteralRegex *lr = env->core->lr; lr != NULL; lr = lr->next) {
         if (matchRegex(literal, lr->rg) == 1) {
         if (matchRegex(literal, lr->rg) == 1) {
-            *func = lr->func;  // 不使用复制
-            *in_protect = lr->in_protect;
+            if (func != NULL)
+                *func = lr->func;  // 不使用复制
+            if (in_protect != NULL)
+                *in_protect = lr->in_protect;
             return true;
             return true;
         }
         }
     }
     }