diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2023-08-02 15:33:30 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-08-03 09:52:15 -0700 |
| commit | ea0e6e737bb658bb6353ad6d3ab3c8cff61e051a (patch) | |
| tree | 976371251fe6a651c82d8fbf5663a21b7c0be252 /src/main.zig | |
| parent | 469af6780408cf3f2d7ce0c16e2d3b797dd525f1 (diff) | |
| download | zig-ea0e6e737bb658bb6353ad6d3ab3c8cff61e051a.tar.gz zig-ea0e6e737bb658bb6353ad6d3ab3c8cff61e051a.zip | |
CLI: reduce code size bloat
Make a bunch of ArrayList objects use arena instead of gpa, eliminating
the `defer` expressions, which reduces code size of zig1.wasm by 1%
Diffstat (limited to 'src/main.zig')
| -rw-r--r-- | src/main.zig | 68 |
1 files changed, 24 insertions, 44 deletions
diff --git a/src/main.zig b/src/main.zig index ebbe67e353..87db5c80ea 100644 --- a/src/main.zig +++ b/src/main.zig @@ -746,6 +746,18 @@ const SystemLib = struct { } }; +const CliModule = struct { + mod: *Package, + /// still in CLI arg format + deps_str: []const u8, +}; + +fn cleanupModules(modules: *std.StringArrayHashMap(CliModule)) void { + var it = modules.iterator(); + while (it.next()) |kv| kv.value_ptr.mod.destroy(modules.allocator); + modules.deinit(); +} + fn buildOutputType( gpa: Allocator, arena: Allocator, @@ -893,62 +905,30 @@ fn buildOutputType( var error_tracing: ?bool = null; var pdb_out_path: ?[]const u8 = null; var dwarf_format: ?std.dwarf.Format = null; - // e.g. -m3dnow or -mno-outline-atomics. They correspond to std.Target llvm cpu feature names. // This array is populated by zig cc frontend and then has to be converted to zig-style // CPU features. - var llvm_m_args = std.ArrayList([]const u8).init(gpa); - defer llvm_m_args.deinit(); - + var llvm_m_args = std.ArrayList([]const u8).init(arena); var system_libs = std.StringArrayHashMap(SystemLib).init(arena); - - var wasi_emulated_libs = std.ArrayList(wasi_libc.CRTFile).init(gpa); - defer wasi_emulated_libs.deinit(); - - var clang_argv = std.ArrayList([]const u8).init(gpa); - defer clang_argv.deinit(); - - var extra_cflags = std.ArrayList([]const u8).init(gpa); - defer extra_cflags.deinit(); - + var wasi_emulated_libs = std.ArrayList(wasi_libc.CRTFile).init(arena); + var clang_argv = std.ArrayList([]const u8).init(arena); + var extra_cflags = std.ArrayList([]const u8).init(arena); // These are before resolving sysroot. var lib_dir_args = std.ArrayList([]const u8).init(arena); - - var rpath_list = std.ArrayList([]const u8).init(gpa); - defer rpath_list.deinit(); - + var rpath_list = std.ArrayList([]const u8).init(arena); var symbol_wrap_set: std.StringArrayHashMapUnmanaged(void) = .{}; - - var c_source_files = std.ArrayList(Compilation.CSourceFile).init(gpa); - defer c_source_files.deinit(); - - var link_objects = std.ArrayList(Compilation.LinkObject).init(gpa); - defer link_objects.deinit(); - - var framework_dirs = std.ArrayList([]const u8).init(gpa); - defer framework_dirs.deinit(); - + var c_source_files = std.ArrayList(Compilation.CSourceFile).init(arena); + var link_objects = std.ArrayList(Compilation.LinkObject).init(arena); + var framework_dirs = std.ArrayList([]const u8).init(arena); var frameworks: std.StringArrayHashMapUnmanaged(Compilation.Framework) = .{}; - // null means replace with the test executable binary - var test_exec_args = std.ArrayList(?[]const u8).init(gpa); - defer test_exec_args.deinit(); - - var linker_export_symbol_names = std.ArrayList([]const u8).init(gpa); - defer linker_export_symbol_names.deinit(); - + var test_exec_args = std.ArrayList(?[]const u8).init(arena); + var linker_export_symbol_names = std.ArrayList([]const u8).init(arena); // Contains every module specified via --mod. The dependencies are added // after argument parsing is completed. We use a StringArrayHashMap to make // error output consistent. - var modules = std.StringArrayHashMap(struct { - mod: *Package, - deps_str: []const u8, // still in CLI arg format - }).init(gpa); - defer { - var it = modules.iterator(); - while (it.next()) |kv| kv.value_ptr.mod.destroy(gpa); - modules.deinit(); - } + var modules = std.StringArrayHashMap(CliModule).init(gpa); + defer cleanupModules(&modules); // The dependency string for the root package var root_deps_str: ?[]const u8 = null; |
