mirror of
https://github.com/ziglang/zig.git
synced 2025-12-18 12:13:20 +00:00
Merge branch 'root-import' of https://github.com/emekoi/zig into emekoi-root-import
This commit is contained in:
commit
fe2d89007b
@ -180,6 +180,8 @@ CodeGen *codegen_create(Buf *main_pkg_path, Buf *root_src_path, const ZigTarget
|
|||||||
g->root_package = new_package(".", "", "");
|
g->root_package = new_package(".", "", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g->root_package->package_table.put(buf_create_from_str("@root"), g->root_package);
|
||||||
|
|
||||||
g->zig_std_special_dir = buf_alloc();
|
g->zig_std_special_dir = buf_alloc();
|
||||||
os_path_join(g->zig_std_dir, buf_sprintf("special"), g->zig_std_special_dir);
|
os_path_join(g->zig_std_dir, buf_sprintf("special"), g->zig_std_special_dir);
|
||||||
|
|
||||||
@ -8520,10 +8522,8 @@ static ZigType *add_special_code(CodeGen *g, ZigPackage *package, const char *ba
|
|||||||
return add_source_file(g, package, resolved_path, import_code, SourceKindPkgMain);
|
return add_source_file(g, package, resolved_path, import_code, SourceKindPkgMain);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ZigPackage *create_bootstrap_pkg(CodeGen *g, ZigPackage *pkg_with_main) {
|
static ZigPackage *create_bootstrap_pkg(CodeGen *g) {
|
||||||
ZigPackage *package = codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "bootstrap.zig", "std.special");
|
return codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "bootstrap.zig", "std.special");
|
||||||
package->package_table.put(buf_create_from_str("@root"), pkg_with_main);
|
|
||||||
return package;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static ZigPackage *create_test_runner_pkg(CodeGen *g) {
|
static ZigPackage *create_test_runner_pkg(CodeGen *g) {
|
||||||
@ -8647,12 +8647,12 @@ static void gen_root_source(CodeGen *g) {
|
|||||||
!g->have_c_main && !g->have_winmain && !g->have_winmain_crt_startup &&
|
!g->have_c_main && !g->have_winmain && !g->have_winmain_crt_startup &&
|
||||||
((g->have_pub_main && g->out_type == OutTypeObj) || g->out_type == OutTypeExe))
|
((g->have_pub_main && g->out_type == OutTypeObj) || g->out_type == OutTypeExe))
|
||||||
{
|
{
|
||||||
g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g, g->root_package), "bootstrap.zig");
|
g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g), "bootstrap.zig");
|
||||||
}
|
}
|
||||||
if (g->zig_target->os == OsWindows && !g->have_dllmain_crt_startup &&
|
if (g->zig_target->os == OsWindows && !g->have_dllmain_crt_startup &&
|
||||||
g->out_type == OutTypeLib && g->is_dynamic)
|
g->out_type == OutTypeLib && g->is_dynamic)
|
||||||
{
|
{
|
||||||
g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g, g->root_package), "bootstrap_lib.zig");
|
g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g), "bootstrap_lib.zig");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!g->error_during_imports) {
|
if (!g->error_during_imports) {
|
||||||
@ -8660,7 +8660,7 @@ static void gen_root_source(CodeGen *g) {
|
|||||||
}
|
}
|
||||||
if (g->is_test_build) {
|
if (g->is_test_build) {
|
||||||
create_test_compile_var_and_add_test_runner(g);
|
create_test_compile_var_and_add_test_runner(g);
|
||||||
g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g, g->test_runner_package), "bootstrap.zig");
|
g->bootstrap_import = add_special_code(g, create_bootstrap_pkg(g), "bootstrap.zig");
|
||||||
|
|
||||||
if (!g->error_during_imports) {
|
if (!g->error_during_imports) {
|
||||||
semantic_analyze(g);
|
semantic_analyze(g);
|
||||||
@ -9389,6 +9389,8 @@ static void add_cache_pkg(CodeGen *g, CacheHash *ch, ZigPackage *pkg) {
|
|||||||
// TODO: I think we need a more sophisticated detection of
|
// TODO: I think we need a more sophisticated detection of
|
||||||
// packages we have already seen
|
// packages we have already seen
|
||||||
if (entry->value != pkg) {
|
if (entry->value != pkg) {
|
||||||
|
auto root = pkg->package_table.maybe_get(buf_create_from_str("@root"));
|
||||||
|
if (root != nullptr && entry->value == root->value) continue;
|
||||||
cache_buf(ch, entry->key);
|
cache_buf(ch, entry->key);
|
||||||
add_cache_pkg(g, ch, entry->value);
|
add_cache_pkg(g, ch, entry->value);
|
||||||
}
|
}
|
||||||
@ -9645,6 +9647,13 @@ ZigPackage *codegen_create_package(CodeGen *g, const char *root_src_dir, const c
|
|||||||
if (g->std_package != nullptr) {
|
if (g->std_package != nullptr) {
|
||||||
assert(g->compile_var_package != nullptr);
|
assert(g->compile_var_package != nullptr);
|
||||||
pkg->package_table.put(buf_create_from_str("std"), g->std_package);
|
pkg->package_table.put(buf_create_from_str("std"), g->std_package);
|
||||||
|
|
||||||
|
if (g->is_test_build) {
|
||||||
|
pkg->package_table.put(buf_create_from_str("@root"), g->test_runner_package);
|
||||||
|
} else {
|
||||||
|
pkg->package_table.put(buf_create_from_str("@root"), g->root_package);
|
||||||
|
}
|
||||||
|
|
||||||
pkg->package_table.put(buf_create_from_str("builtin"), g->compile_var_package);
|
pkg->package_table.put(buf_create_from_str("builtin"), g->compile_var_package);
|
||||||
}
|
}
|
||||||
return pkg;
|
return pkg;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user