浏览代码

feat: 错误回溯时, 不打印代码

SongZihuan 3 年之前
父节点
当前提交
e4ca89bfc4
共有 1 个文件被更改,包括 10 次插入28 次删除
  1. 10 28
      src/core/env.c

+ 10 - 28
src/core/env.c

@@ -52,7 +52,7 @@ static af_ErrorBacktracking *freeErrorBacktracking(af_ErrorBacktracking *ebt);
 static void freeAllErrorBacktracking(af_ErrorBacktracking *ebt);
 
 /* af_ErrorBacktracking 相关函数 */
-static char *getActivityInfoToBacktracking(af_Activity *activity, bool print_bt_top);
+static char *getActivityInfoToBacktracking(af_Activity *activity);
 static void fprintfNote(FILE *file, char *note);
 
 /* 内置顶层消息处理器 */
@@ -255,12 +255,10 @@ static af_Activity *freeActivity(af_Activity *activity) {
 static void freeActivityTop(af_Activity *activity) {
     freeAllMessage(activity->msg_down);  // msg转移后需要将对应成员设置为NULL
     freeMessageCount(activity->msg_up_count, activity->msg_up);
-    free(activity->file);
-    activity->line = 0;
 
-    activity->bt_top = NULL;
-    activity->bt_start = NULL;
-    activity->bt_next = NULL;
+    setActivityBtTop(NULL, activity);
+    setActivityBtStart(NULL, activity);
+    free(activity->file);
 }
 
 static void freeAllActivity(af_Activity *activity) {
@@ -278,9 +276,8 @@ static void clearActivity(af_Activity *activity) {
     /* acl在FuncBody暂时不释放 */
 
     activity->func_var_list = NULL;
-    activity->bt_top = NULL;
-    activity->bt_start = NULL;
-    activity->bt_next = NULL;
+    setActivityBtTop(NULL, activity);
+    setActivityBtStart(NULL, activity);
 
     /* acl_start 在 setFuncActivityAddVar 时被释放 */
     activity->acl_start = NULL;
@@ -481,12 +478,12 @@ af_Message *makeNORMALMessage(af_Object *obj) {
 }
 
 af_Message *makeERRORMessage(char *type, char *error, af_Environment *env) {
-    char *info = getActivityInfoToBacktracking(env->activity, false);
+    char *info = getActivityInfoToBacktracking(env->activity);
     af_ErrorInfo *ei = makeErrorInfo(type, error, info, env->activity->line, env->activity->file);
     free(info);
 
     for (af_Activity *activity = env->activity->prev; activity != NULL; activity = activity->prev) {
-        info = getActivityInfoToBacktracking(activity, true);
+        info = getActivityInfoToBacktracking(activity);
         pushErrorBacktracking(activity->line, activity->file, info, ei);
         free(info);
     }
@@ -1321,7 +1318,7 @@ void pushErrorBacktracking(FileLine line, FilePath file, char *note, af_ErrorInf
     ei->track = ebt;
 }
 
-static char *getActivityInfoToBacktracking(af_Activity *activity, bool print_bt_top){
+static char *getActivityInfoToBacktracking(af_Activity *activity){
     char *info = NULL;
     if (activity->type == act_gc) {
         info = strJoin(info, "gc-activity;", true, false);
@@ -1365,22 +1362,7 @@ static char *getActivityInfoToBacktracking(af_Activity *activity, bool print_bt_
         info = strJoin(info, "\nobject-function-call;", true, false);
 
     if (activity->optimization)
-        info = strJoin(info, "\ntail-call-Optimization;", true, false);
-
-    info = strJoin(info, "\n", true, false);
-    char *print_code = NULL;
-    if (!print_bt_top && activity->bt_next != NULL)
-        print_code = codeToStr(activity->bt_next, 1);
-    else if (activity->bt_top != NULL)
-        print_code = codeToStr(activity->bt_top, 1);
-    else if (activity->prev == NULL && activity->bt_start != NULL)
-        print_code = codeToStr(activity->bt_start, -1);
-
-    if (print_code != NULL) {
-        info = strJoin(info, "code: ", true, false);
-        info = strJoin(info, print_code, true, true);
-    } else
-        info = strJoin(info, "sys-err non-code", true, false);
+        info = strJoin(info, "\ntail-call-optimization;", true, false);
 
     return info;
 }