|
@@ -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;
|
|
|
}
|