| ... | ... | @@ -180,7 +180,7 @@ CodeGen *codegen_create(Buf *main_pkg_path, Buf *root_src_path, const ZigTarget |
| 180 | 180 | g->root_package = new_package(".", "", ""); |
| 181 | 181 | } |
| 182 | 182 | |
| 183 | | g->root_package->package_table.put(buf_create_from_str("@root"), g->root_package); |
| 183 | g->root_package->package_table.put(buf_create_from_str("root"), g->root_package); |
| 184 | 184 | |
| 185 | 185 | g->zig_std_special_dir = buf_alloc(); |
| 186 | 186 | os_path_join(g->zig_std_dir, buf_sprintf("special"), g->zig_std_special_dir); |
| ... | ... | @@ -8055,6 +8055,8 @@ static Error define_builtin_compile_vars(CodeGen *g) { |
| 8055 | 8055 | g->root_package->package_table.put(buf_create_from_str("builtin"), g->compile_var_package); |
| 8056 | 8056 | g->std_package->package_table.put(buf_create_from_str("builtin"), g->compile_var_package); |
| 8057 | 8057 | g->std_package->package_table.put(buf_create_from_str("std"), g->std_package); |
| 8058 | g->std_package->package_table.put(buf_create_from_str("root"), |
| 8059 | g->is_test_build ? g->test_runner_package : g->root_package); |
| 8058 | 8060 | g->compile_var_import = add_source_file(g, g->compile_var_package, builtin_zig_path, contents, |
| 8059 | 8061 | SourceKindPkgMain); |
| 8060 | 8062 | |
| ... | ... | @@ -8522,8 +8524,10 @@ static ZigType *add_special_code(CodeGen *g, ZigPackage *package, const char *ba |
| 8522 | 8524 | return add_source_file(g, package, resolved_path, import_code, SourceKindPkgMain); |
| 8523 | 8525 | } |
| 8524 | 8526 | |
| 8525 | | static ZigPackage *create_bootstrap_pkg(CodeGen *g) { |
| 8526 | | return codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "bootstrap.zig", "std.special"); |
| 8527 | static ZigPackage *create_bootstrap_pkg(CodeGen *g, ZigPackage *pkg_with_main) { |
| 8528 | ZigPackage *package = codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "bootstrap.zig", "std.special"); |
| 8529 | package->package_table.put(buf_create_from_str("root"), pkg_with_main); |
| 8530 | return package; |
| 8527 | 8531 | } |
| 8528 | 8532 | |
| 8529 | 8533 | static ZigPackage *create_test_runner_pkg(CodeGen *g) { |
| ... | ... | @@ -8647,12 +8651,12 @@ static void gen_root_source(CodeGen *g) { |
| 8647 | 8651 | !g->have_c_main && !g->have_winmain && !g->have_winmain_crt_startup && |
| 8648 | 8652 | ((g->have_pub_main && g->out_type == OutTypeObj) || g->out_type == OutTypeExe)) |
| 8649 | 8653 | { |
| 8650 | | g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g), "bootstrap.zig"); |
| 8654 | g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g, g->root_package), "bootstrap.zig"); |
| 8651 | 8655 | } |
| 8652 | 8656 | if (g->zig_target->os == OsWindows && !g->have_dllmain_crt_startup && |
| 8653 | 8657 | g->out_type == OutTypeLib && g->is_dynamic) |
| 8654 | 8658 | { |
| 8655 | | g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g), "bootstrap_lib.zig"); |
| 8659 | g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g, g->root_package), "bootstrap_lib.zig"); |
| 8656 | 8660 | } |
| 8657 | 8661 | |
| 8658 | 8662 | if (!g->error_during_imports) { |
| ... | ... | @@ -8660,7 +8664,7 @@ static void gen_root_source(CodeGen *g) { |
| 8660 | 8664 | } |
| 8661 | 8665 | if (g->is_test_build) { |
| 8662 | 8666 | create_test_compile_var_and_add_test_runner(g); |
| 8663 | | g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g), "bootstrap.zig"); |
| 8667 | g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g, g->test_runner_package), "bootstrap.zig"); |
| 8664 | 8668 | |
| 8665 | 8669 | if (!g->error_during_imports) { |
| 8666 | 8670 | semantic_analyze(g); |
| ... | ... | @@ -9375,6 +9379,7 @@ void codegen_add_time_event(CodeGen *g, const char *name) { |
| 9375 | 9379 | static void add_cache_pkg(CodeGen *g, CacheHash *ch, ZigPackage *pkg) { |
| 9376 | 9380 | if (buf_len(&pkg->root_src_path) == 0) |
| 9377 | 9381 | return; |
| 9382 | pkg->added_to_cache = true; |
| 9378 | 9383 | |
| 9379 | 9384 | Buf *rel_full_path = buf_alloc(); |
| 9380 | 9385 | os_path_join(&pkg->root_src_dir, &pkg->root_src_path, rel_full_path); |
| ... | ... | @@ -9386,11 +9391,7 @@ static void add_cache_pkg(CodeGen *g, CacheHash *ch, ZigPackage *pkg) { |
| 9386 | 9391 | if (!entry) |
| 9387 | 9392 | break; |
| 9388 | 9393 | |
| 9389 | | // TODO: I think we need a more sophisticated detection of |
| 9390 | | // packages we have already seen |
| 9391 | | if (entry->value != pkg) { |
| 9392 | | auto root = pkg->package_table.maybe_get(buf_create_from_str("@root")); |
| 9393 | | if (root != nullptr && entry->value == root->value) continue; |
| 9394 | if (!pkg->added_to_cache) { |
| 9394 | 9395 | cache_buf(ch, entry->key); |
| 9395 | 9396 | add_cache_pkg(g, ch, entry->value); |
| 9396 | 9397 | } |
| ... | ... | @@ -9648,11 +9649,8 @@ ZigPackage *codegen_create_package(CodeGen *g, const char *root_src_dir, const c |
| 9648 | 9649 | assert(g->compile_var_package != nullptr); |
| 9649 | 9650 | pkg->package_table.put(buf_create_from_str("std"), g->std_package); |
| 9650 | 9651 | |
| 9651 | | if (g->is_test_build) { |
| 9652 | | pkg->package_table.put(buf_create_from_str("@root"), g->test_runner_package); |
| 9653 | | } else { |
| 9654 | | pkg->package_table.put(buf_create_from_str("@root"), g->root_package); |
| 9655 | | } |
| 9652 | ZigPackage *main_pkg = g->is_test_build ? g->test_runner_package : g->root_package; |
| 9653 | pkg->package_table.put(buf_create_from_str("root"), main_pkg); |
| 9656 | 9654 | |
| 9657 | 9655 | pkg->package_table.put(buf_create_from_str("builtin"), g->compile_var_package); |
| 9658 | 9656 | } |