Преглед изворни кода

fix: 修复assert执行模块中遗漏释放result的问题

SongZihuan пре 4 година
родитељ
комит
73ee0ba394
3 измењених фајлова са 9 додато и 2 уклоњено
  1. 1 0
      vmcore/include/__macro.h
  2. 7 1
      vmcore/src/runbranch.c
  3. 1 1
      vmcore/src/value.c

+ 1 - 0
vmcore/include/__macro.h

@@ -44,4 +44,5 @@ typedef long double vdou;
 typedef unsigned long long vhashn;
 typedef unsigned long long fline;
 
+
 #endif //VIRTUALMATH___MACRO_H

+ 7 - 1
vmcore/src/runbranch.c

@@ -1057,6 +1057,7 @@ ResultType raiseCode(FUNC){
 
 ResultType assertCode(FUNC){
     bool result_;
+    LinkValue *opt;
     setResultCore(result);
 
     if (inter->data.assert_run == assert_ignore) {  // 不执行断言
@@ -1067,7 +1068,12 @@ ResultType assertCode(FUNC){
     if (operationSafeInterStatement(CFUNC(st->u.raise_code.value, var_list, result, belong)) || inter->data.assert_run == assert_run)
         return result->type;
 
-    result_ = checkBool(result->value, st->line, st->code_file, CNEXT_NT);
+    opt = result->value;  // TODO-szh封装为宏
+    result->value = NULL;
+    freeResult(result);
+
+    result_ = checkBool(opt, st->line, st->code_file, CNEXT_NT);
+    gc_freeTmpLink(&opt->gc_status);
     if (!CHECK_RESULT(result))
         return result->type;
     else if (result_)

+ 1 - 1
vmcore/src/value.c

@@ -75,7 +75,7 @@ Value *makeIntValue(vint num, fline line, char *file, FUNC_NT) {
 Value *makeDouValue(vdou num, fline line, char *file, FUNC_NT) {
     Value *tmp = NULL;
     setResultCore(result);
-    if (isnanl(num) || isinfl(num)) {
+    if (isnan(num) || isinf(num)) {
         setResultError(E_TypeException, L"decimal exception / [inf/nan]", LINEFILE, true, CNEXT_NT);
         return NULL;
     }