diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2024-03-07 18:41:45 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-07 18:41:45 -0800 |
| commit | 97aa5f7b8a059f91b78ce7cd70cba0f3aa2c5118 (patch) | |
| tree | 4e2dc7d8083a24bb01cf8e94e684e3256b7f0a31 /src/main.zig | |
| parent | 377ecc6afb14a112a07c6d2c3570e2b77b12a116 (diff) | |
| parent | 38331b1cabf86586bdf70c80ed98f74c60305160 (diff) | |
| download | zig-97aa5f7b8a059f91b78ce7cd70cba0f3aa2c5118.tar.gz zig-97aa5f7b8a059f91b78ce7cd70cba0f3aa2c5118.zip | |
Merge pull request #19190 from mlugg/struct-equivalence
compiler: namespace type equivalence based on AST node + captures
Diffstat (limited to 'src/main.zig')
| -rw-r--r-- | src/main.zig | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/main.zig b/src/main.zig index 75ed080f9e..05c9149b53 100644 --- a/src/main.zig +++ b/src/main.zig @@ -2708,7 +2708,9 @@ fn buildOutputType( create_module.opts.emit_bin = emit_bin != .no; create_module.opts.any_c_source_files = create_module.c_source_files.items.len != 0; - const main_mod = try createModule(gpa, arena, &create_module, 0, null, zig_lib_directory); + var builtin_modules: std.StringHashMapUnmanaged(*Package.Module) = .{}; + // `builtin_modules` allocated into `arena`, so no deinit + const main_mod = try createModule(gpa, arena, &create_module, 0, null, zig_lib_directory, &builtin_modules); for (create_module.modules.keys(), create_module.modules.values()) |key, cli_mod| { if (cli_mod.resolved == null) fatal("module '{s}' declared but not used", .{key}); @@ -2753,6 +2755,7 @@ fn buildOutputType( .global = create_module.resolved_options, .parent = main_mod, .builtin_mod = main_mod.getBuiltinDependency(), + .builtin_modules = null, // `builtin_mod` is specified }); test_mod.deps = try main_mod.deps.clone(arena); break :test_mod test_mod; @@ -2771,6 +2774,7 @@ fn buildOutputType( .global = create_module.resolved_options, .parent = main_mod, .builtin_mod = main_mod.getBuiltinDependency(), + .builtin_modules = null, // `builtin_mod` is specified }); break :root_mod test_mod; @@ -3479,6 +3483,7 @@ fn createModule( index: usize, parent: ?*Package.Module, zig_lib_directory: Cache.Directory, + builtin_modules: *std.StringHashMapUnmanaged(*Package.Module), ) Allocator.Error!*Package.Module { const cli_mod = &create_module.modules.values()[index]; if (cli_mod.resolved) |m| return m; @@ -3931,6 +3936,7 @@ fn createModule( .global = create_module.resolved_options, .parent = parent, .builtin_mod = null, + .builtin_modules = builtin_modules, }) catch |err| switch (err) { error.ValgrindUnsupportedOnTarget => fatal("unable to create module '{s}': valgrind does not support the selected target CPU architecture", .{name}), error.TargetRequiresSingleThreaded => fatal("unable to create module '{s}': the selected target does not support multithreading", .{name}), @@ -3953,7 +3959,7 @@ fn createModule( for (cli_mod.deps) |dep| { const dep_index = create_module.modules.getIndex(dep.value) orelse fatal("module '{s}' depends on non-existent module '{s}'", .{ name, dep.key }); - const dep_mod = try createModule(gpa, arena, create_module, dep_index, mod, zig_lib_directory); + const dep_mod = try createModule(gpa, arena, create_module, dep_index, mod, zig_lib_directory, builtin_modules); try mod.deps.put(arena, dep.key, dep_mod); } @@ -5249,6 +5255,7 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !void { .global = config, .parent = null, .builtin_mod = null, + .builtin_modules = null, // all modules will inherit this one's builtin }); const builtin_mod = root_mod.getBuiltinDependency(); @@ -5265,6 +5272,7 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !void { .global = config, .parent = root_mod, .builtin_mod = builtin_mod, + .builtin_modules = null, // `builtin_mod` is specified }); var cleanup_build_dir: ?fs.Dir = null; @@ -5399,6 +5407,7 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !void { .global = config, .parent = root_mod, .builtin_mod = builtin_mod, + .builtin_modules = null, // `builtin_mod` is specified }); const hash_cloned = try arena.dupe(u8, &hash); deps_mod.deps.putAssumeCapacityNoClobber(hash_cloned, m); @@ -5648,6 +5657,7 @@ fn jitCmd( .global = config, .parent = null, .builtin_mod = null, + .builtin_modules = null, // all modules will inherit this one's builtin }); if (options.depend_on_aro) { @@ -5670,6 +5680,7 @@ fn jitCmd( .global = config, .parent = null, .builtin_mod = root_mod.getBuiltinDependency(), + .builtin_modules = null, // `builtin_mod` is specified }); try root_mod.deps.put(arena, "aro", aro_mod); } @@ -7216,10 +7227,11 @@ fn createDependenciesModule( }, .fully_qualified_name = "root.@dependencies", .parent = main_mod, - .builtin_mod = builtin_mod, .cc_argv = &.{}, .inherited = .{}, .global = global_options, + .builtin_mod = builtin_mod, + .builtin_modules = null, // `builtin_mod` is specified }); try main_mod.deps.put(arena, "@dependencies", deps_mod); return deps_mod; |
