-
Notifications
You must be signed in to change notification settings - Fork 0
/
parse_result.hsp
46 lines (42 loc) · 1.54 KB
/
parse_result.hsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#ifndef parse_result_hsp_included
#define parse_result_hsp_included
#module
/*
stdoutから結果をパースする
引数
stdout: hspランタイムから出力された文字列
result: 結果("PASS"または"FAIL")を格納する変数
error_line: エラーが発生した行数を格納する変数
error_file: エラーが発生したファイル名を格納する変数
error_message: エラーメッセージを格納する変数
callstack: コールスタック情報を格納する配列
removed_stdout: 特殊フォーマット文字列を全て取り除いた標準出力が格納される変数
*/
#deffunc parse_result_format str stdout, var result, var error_line, var error_file, var error_message, array callstack, var removed_stdout
buf = stdout
result_pattern = "&RESULT&\\{(PASS|FAIL);(-?[0-9]+);([^;]+);(.+)\\}\n"
callstack_pattern = "&CALLSTACK&\\{([^;]+);([0-9]+);([0-9]+)\\}\n"
matches result_match, stdout, result_pattern, 1, 1, 0
matched_num = stat
buf = replace(buf, result_pattern, "", 1)
if matched_num {
result = result_match(0, 1)
error_line = result_match(0, 2)
error_file = result_match(0, 3)
error_message = result_match(0, 4)
} else {
result = "FAIL"
error_line = "-1"
error_file = "?"
error_message = "HSP3 runtime crashed!!!"
}
matches callstack_match, stdout, callstack_pattern, 1, 0, 0
matched_num = stat
buf = replace(buf, callstack_pattern, "", 1)
repeat matched_num
callstack(int(callstack_match(cnt, 3))) = callstack_match(cnt, 1) + ";" + callstack_match(cnt, 2)
loop
removed_stdout = buf
return
#global
#endif