Просмотр исходного кода

feat: 声明函数时, 复制形参表

SongZihuan 4 лет назад
Родитель
Сommit
e43ba6dd2f
2 измененных файлов с 3 добавлено и 3 удалено
  1. 1 1
      src/statement.c
  2. 2 2
      src/value.c

+ 1 - 1
src/statement.c

@@ -197,7 +197,7 @@ void freeStatement(Statement *st){
             case set_function:
                 freeStatement(st->u.set_function.name);
                 freeStatement(st->u.set_function.function);
-                // Parameter 在 value 的地方free掉
+                freeParameter(st->u.set_function.parameter, true);
                 break;
             case call_function:
                 freeStatement(st->u.call_function.function);

+ 2 - 2
src/value.c

@@ -42,7 +42,7 @@ Value *makeFunctionValue(Statement *st, Parameter *pt, VarList *var_list, Inter
     tmp = makeValue(inter);
     tmp->type = function;
     tmp->data.function.function = st;
-    tmp->data.function.pt = pt;
+    tmp->data.function.pt = copyParameter(pt);
     tmp->data.function.var = copyVarList(var_list, false, inter);
     return tmp;
 }
@@ -97,7 +97,7 @@ void freeValue(Value *value, Inter *inter){
             break;
         case function: {
             VarList *tmp = value->data.function.var;
-            freeParameter(value->data.function.pt, true);
+            freeParameter(value->data.function.pt, false);
             while (tmp != NULL)
                 tmp = freeVarList(tmp, true);
             break;