diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 85df234..ecddf1b 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -34,3 +34,4 @@ jobs: ./generate.sh ./build.sh ./build/bb test + ./build/bb reproduce diff --git a/src/compiler.bbb b/src/compiler.bbb index e1099b8..a4d87be 100644 --- a/src/compiler.bbb +++ b/src/compiler.bbb @@ -984,6 +984,7 @@ CompilerCommand = enum { compile, test, + reproduce, } BuildMode = enum @@ -18656,6 +18657,43 @@ names: [_][]u8 = } } }, + .reproduce => + { + for (build_mode: #enum_values(BuildMode)) + { + for (has_debug_info: debug_info_array) + { + >position = arena.position; + + // Produce the compiler + >relative_file_path = "src/compiler.bbb"; + >executable_path = compile_file(arena, { + .relative_file_path = relative_file_path, + .build_mode = build_mode, + .has_debug_info = has_debug_info, + .silent = 1, + }, envp); + + // Test the compiler + >arguments: [_]&u8 = [ + executable_path.pointer, + "test", + zero, + ]; + >args = arguments[..arguments.length - 1]; + >execution = os_execute(arena, args, envp, zero); + + >success = execution.termination_kind == .exit and execution.termination_code == 0; + + if (!success) + { + #trap(); + } + + arena.position = position; + } + } + }, } return 0;