| 1 | // vtest build: !linux && !windows |
| 2 | module cleanc |
| 3 | |
| 4 | import os |
| 5 | import v2.markused |
| 6 | import v2.parser |
| 7 | import v2.pref as vpref |
| 8 | import v2.token |
| 9 | import v2.transformer |
| 10 | import v2.types |
| 11 | |
| 12 | fn generate_parallel_worker_c_with_cached_init_for_test(code string, cached_init_calls []string) string { |
| 13 | tmp_file := os.join_path(os.temp_dir(), 'v2_parallel_cache_init_test_${os.getpid()}.v') |
| 14 | os.write_file(tmp_file, code) or { panic('failed to write temp file') } |
| 15 | defer { |
| 16 | os.rm(tmp_file) or {} |
| 17 | } |
| 18 | prefs := &vpref.Preferences{ |
| 19 | backend: .cleanc |
| 20 | no_parallel: false |
| 21 | } |
| 22 | mut file_set := token.FileSet.new() |
| 23 | mut par := parser.Parser.new(prefs) |
| 24 | files := par.parse_files([tmp_file], mut file_set) |
| 25 | env := types.Environment.new() |
| 26 | mut checker := types.Checker.new(prefs, file_set, env) |
| 27 | checker.check_files(files) |
| 28 | mut trans := transformer.Transformer.new_with_pref(env, prefs) |
| 29 | gen_files := trans.transform_files(files) |
| 30 | used := markused.mark_used(gen_files, env) |
| 31 | mut gen := Gen.new_with_env_and_pref(gen_files, env, prefs) |
| 32 | gen.set_used_fn_keys(used) |
| 33 | gen.set_cached_init_calls(cached_init_calls) |
| 34 | gen.gen_passes_1_to_4() |
| 35 | emit_indices := gen.gen_pass5_pre() |
| 36 | mut worker := gen.new_pass5_worker(emit_indices, 0) |
| 37 | worker.gen_pass5_files(emit_indices) |
| 38 | gen.merge_pass5_worker(worker) |
| 39 | gen.gen_pass5_post() |
| 40 | return gen.gen_finalize() |
| 41 | } |
| 42 | |
| 43 | fn test_parallel_worker_preserves_cached_init_calls_in_main() { |
| 44 | csrc := generate_parallel_worker_c_with_cached_init_for_test(' |
| 45 | fn main() { |
| 46 | } |
| 47 | ', [ |
| 48 | '__v2_cached_init_imports', |
| 49 | ]) |
| 50 | assert csrc.contains('__v2_cached_init_imports();') |
| 51 | } |
| 52 | |