| ... | ... | @@ -180,6 +180,8 @@ 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); |
| 184 | |
| 183 | 185 | g->zig_std_special_dir = buf_alloc(); |
| 184 | 186 | os_path_join(g->zig_std_dir, buf_sprintf("special"), g->zig_std_special_dir); |
| 185 | 187 | |
| ... | ... | @@ -8520,10 +8522,8 @@ static ZigType *add_special_code(CodeGen *g, ZigPackage *package, const char *ba |
| 8520 | 8522 | return add_source_file(g, package, resolved_path, import_code, SourceKindPkgMain); |
| 8521 | 8523 | } |
| 8522 | 8524 | |
| 8523 | | static ZigPackage *create_bootstrap_pkg(CodeGen *g, ZigPackage *pkg_with_main) { |
| 8524 | | ZigPackage *package = codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "bootstrap.zig", "std.special"); |
| 8525 | | package->package_table.put(buf_create_from_str("@root"), pkg_with_main); |
| 8526 | | return package; |
| 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 | 8527 | } |
| 8528 | 8528 | |
| 8529 | 8529 | static ZigPackage *create_test_runner_pkg(CodeGen *g) { |
| ... | ... | @@ -8647,12 +8647,12 @@ static void gen_root_source(CodeGen *g) { |
| 8647 | 8647 | !g->have_c_main && !g->have_winmain && !g->have_winmain_crt_startup && |
| 8648 | 8648 | ((g->have_pub_main && g->out_type == OutTypeObj) || g->out_type == OutTypeExe)) |
| 8649 | 8649 | { |
| 8650 | | g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g, g->root_package), "bootstrap.zig"); |
| 8650 | g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g), "bootstrap.zig"); |
| 8651 | 8651 | } |
| 8652 | 8652 | if (g->zig_target->os == OsWindows && !g->have_dllmain_crt_startup && |
| 8653 | 8653 | g->out_type == OutTypeLib && g->is_dynamic) |
| 8654 | 8654 | { |
| 8655 | | g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g, g->root_package), "bootstrap_lib.zig"); |
| 8655 | g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g), "bootstrap_lib.zig"); |
| 8656 | 8656 | } |
| 8657 | 8657 | |
| 8658 | 8658 | if (!g->error_during_imports) { |
| ... | ... | @@ -8660,7 +8660,7 @@ static void gen_root_source(CodeGen *g) { |
| 8660 | 8660 | } |
| 8661 | 8661 | if (g->is_test_build) { |
| 8662 | 8662 | create_test_compile_var_and_add_test_runner(g); |
| 8663 | | g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g, g->test_runner_package), "bootstrap.zig"); |
| 8663 | g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g), "bootstrap.zig"); |
| 8664 | 8664 | |
| 8665 | 8665 | if (!g->error_during_imports) { |
| 8666 | 8666 | semantic_analyze(g); |
| ... | ... | @@ -9389,6 +9389,8 @@ static void add_cache_pkg(CodeGen *g, CacheHash *ch, ZigPackage *pkg) { |
| 9389 | 9389 | // TODO: I think we need a more sophisticated detection of |
| 9390 | 9390 | // packages we have already seen |
| 9391 | 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; |
| 9392 | 9394 | cache_buf(ch, entry->key); |
| 9393 | 9395 | add_cache_pkg(g, ch, entry->value); |
| 9394 | 9396 | } |
| ... | ... | @@ -9645,6 +9647,13 @@ ZigPackage *codegen_create_package(CodeGen *g, const char *root_src_dir, const c |
| 9645 | 9647 | if (g->std_package != nullptr) { |
| 9646 | 9648 | assert(g->compile_var_package != nullptr); |
| 9647 | 9649 | pkg->package_table.put(buf_create_from_str("std"), g->std_package); |
| 9650 | |
| 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 | } |
| 9656 | |
| 9648 | 9657 | pkg->package_table.put(buf_create_from_str("builtin"), g->compile_var_package); |
| 9649 | 9658 | } |
| 9650 | 9659 | return pkg; |