Move compile result stuff out of specific stages.

This commit is contained in:
2025-08-27 21:55:01 +02:00
parent ab711b5610
commit da87209690
8 changed files with 288 additions and 317 deletions

View File

@@ -174,7 +174,7 @@ run_codegen_test :: (file_path : string, result : *Compile_Result, output_type :
run_codegen_test :: (result : *Compile_Result, output_type : Output_Type = 0) -> Result {
result_data : Result;
result_data.path = result.files[0].file.path;
result_data.path = result.file.path;
result_text : string;
codegen(result);
@@ -185,7 +185,7 @@ run_codegen_test :: (result : *Compile_Result, output_type : Output_Type = 0) ->
return result_data;
}
result_text = result.files[0].codegen_result_text;
result_text = result.codegen_result_text;
if output_type & .StdOut {
result_data.info_text = result_text;
@@ -193,7 +193,7 @@ run_codegen_test :: (result : *Compile_Result, output_type : Output_Type = 0) ->
return result_data;
}
golden_path := get_golden_path(result.files[0].file.path, .Codegen);
golden_path := get_golden_path(result.file.path, .Codegen);
do_golden_comparison(golden_path, result_text, *result_data, output_type);
return result_data;
}
@@ -225,7 +225,7 @@ run_lexer_test :: (file_path : string, result : *Compile_Result, output_type : O
result_data.type = .Failed;
result_text = report_messages(result.messages);
} else {
result_text = pretty_print_tokens(result.files[0].tokens.tokens, *temp);
result_text = pretty_print_tokens(result.tokens.tokens, *temp);
}
if output_type & .StdOut {
@@ -259,14 +259,14 @@ run_parser_test :: (file_path : string, result : *Compile_Result, output_type :
run_parser_test :: (result : *Compile_Result, output_type : Output_Type = 0) -> Result {
parse(result);
result_data : Result;
result_data.path = result.files[0].file.path;
result_data.path = result.file.path;
result_text : string;
if result.had_error {
result_data.type = .Failed;
result_text = report_messages(result.messages,, temp);
} else {
result_text = pretty_print_ast(result.files[0].ast_root, *temp);
result_text = pretty_print_ast(result.root, *temp);
}
if output_type & .StdOut {
@@ -275,14 +275,14 @@ run_parser_test :: (result : *Compile_Result, output_type : Output_Type = 0) ->
return result_data;
}
golden_path := get_golden_path(result.files[0].file.path, .Parser);
golden_path := get_golden_path(result.file.path, .Parser);
do_golden_comparison(golden_path, result_text, *result_data, output_type);
return result_data;
}
run_semantic_analysis_test :: (result : *Compile_Result, output_type : Output_Type = 0) -> Result {
result_data : Result;
result_data.path = result.files[0].file.path;
result_data.path = result.file.path;
result_text : string;
check(result);
@@ -300,7 +300,7 @@ run_semantic_analysis_test :: (result : *Compile_Result, output_type : Output_Ty
return result_data;
}
golden_path := get_golden_path(result.files[0].file.path, .Semantic_Analysis);
golden_path := get_golden_path(result.file.path, .Semantic_Analysis);
do_golden_comparison(golden_path, result_text, *result_data, output_type);
return result_data;
}
@@ -318,7 +318,7 @@ run_semantic_analysis_test :: (file_path : string, result : *Compile_Result, out
return result_data;
}
result_data = run_semantic_analysis_test(result, output_type);;
result_data = run_semantic_analysis_test(result, output_type);
return result_data;
}
@@ -334,6 +334,7 @@ make_test_case :: (path : string, stage_flags : Stage_Flags, allocator := contex
run_test_new :: (file_path : string, stage_flags : Stage_Flags, results : *[..]Result, output_type : Output_Type = 0) {
compile_result : Compile_Result;
add_file(*compile_result, file_path);
result : Result;
if stage_flags & .Lexer {
result = run_lexer_test(file_path, *compile_result, output_type);
@@ -372,8 +373,8 @@ run_test_new :: (file_path : string, stage_flags : Stage_Flags, results : *[..]R
}
}
run_test :: (test_case : Test_Case, results : *[..]Result, output_type : Output_Type = 0, builder : *String_Builder) {
print_to_builder(builder, "%Running test: %......", cyan(), test_case.path);
run_test :: (test_case : Test_Case, results : *[..]Result, output_type : Output_Type = 0) {
print("%Running test: %......", cyan(), test_case.path);
// path 30
// len 35
@@ -387,7 +388,7 @@ run_test :: (test_case : Test_Case, results : *[..]Result, output_type : Output_
len := 50;
rest := len - test_case.path.count;
for i: 0..rest {
append(builder, " ");
print(" ");
}
run_test_new(test_case.path, test_case.stage_flags, results, output_type);
@@ -416,7 +417,7 @@ run_test_suite :: (using suite : *Test_Suite, output_type : Output_Type = 0) {
init_string_builder(*builder,, temp);
for test_case : test_cases {
run_test(test_case, *suite.results, output_type, *builder);
run_test(test_case, *suite.results, output_type);
for < suite.results {
result := suite.results[it_index];
@@ -432,7 +433,7 @@ run_test_suite :: (using suite : *Test_Suite, output_type : Output_Type = 0) {
array_add(*failed_test_paths, .{ result.path, tprint("golden file not found for %", stage_to_string(result.stage)) });
}
}
evaluate_result(result, *builder);
evaluate_result(result);
} else {
break;
}
@@ -530,42 +531,42 @@ stage_to_string :: (stage : Stage_Flags) -> string {
}
}
evaluate_result :: (result : Result, builder : *String_Builder) {
evaluate_result :: (result : Result) {
stage : string = stage_to_string(result.stage);
if #complete result.type == {
case .File_Read_Failed; {
print_to_builder(builder, " %", red());
print_to_builder(builder, "failed with File_Read_Failed\n");
print(" %", red());
print("failed with File_Read_Failed\n");
}
case .Golden_File_Not_Found; {
print_to_builder(builder, " %", red());
print_to_builder(builder, "failed with Golden File Not Found for stage %\n", stage);
print(" %", red());
print("failed with Golden File Not Found for stage %\n", stage);
}
case .StdOut; {
}
case .Golden_Output; {
print_to_builder(builder, " %", yellow());
print_to_builder(builder, "output new golden file at %\n", result.golden_path);
print(" %", yellow());
print("output new golden file at %\n", result.golden_path);
}
case .Passed; {
print_to_builder(builder, " %", green());
print_to_builder(builder, "passed %\n", stage);
print(" %", green());
print("passed %\n", stage);
}
case .Failed; {
print_to_builder(builder, " %", red());
print_to_builder(builder, "failed %\n", stage);
print(" %", red());
print("failed %\n", stage);
}
}
if result.info_text.count > 0 {
print_to_builder(builder, "%", cyan());
print_to_builder(builder, "--- Info text ---\n");
print_to_builder(builder, "%", yellow());
print_to_builder(builder, "%\n", result.info_text);
print("%", cyan());
print("--- Info text ---\n");
print("%", yellow());
print("%\n", result.info_text);
}
print_to_builder(builder, "%", reset_color());
print("%", reset_color());
}
main :: () {