Zig 0.17.0-dev (Split by item) This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig standard library.
std › start › callMain Private Function callMain Doc Source 786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838 inline fn callMain (args : std .process .Args .Vector , environ : std .process .Environ .Block ) u8 {
const fn_info = @typeInfo (@TypeOf (root .main )).@"fn" ;
if (fn_info .param_types .len == 0 ) return wrapMain (root .main ());
if (fn_info .param_types [0 ].? == std .process .Init .Minimal ) return wrapMain (root .main (.{
.args = .{ .vector = args },
.environ = .{ .block = environ },
}));
const gpa = if (use_safe_allocator )
safe_allocator .allocator ()
else if (builtin .link_libc )
std .heap .c_allocator
else if (is_wasm )
std .heap .wasm_allocator
else if (!builtin .single_threaded )
std .heap .smp_allocator
else
comptime unreachable ;
defer if (use_safe_allocator ) {
_ = safe_allocator .deinit (); // Leaks do not affect return code.
};
const arena_backing_allocator = if (is_wasm ) gpa else std .heap .page_allocator ;
var arena_allocator = std .heap .ArenaAllocator .init (arena_backing_allocator );
defer arena_allocator .deinit ();
var threaded : std .Io .Threaded = .init (gpa , .{
.argv0 = .init (.{ .vector = args }),
.environ = .{ .block = environ },
});
defer threaded .deinit ();
var environ_map = std .process .Environ .createMap (.{ .block = environ }, gpa ) catch |err |
std .process .fatal ("failed to parse environment variables: {t}" , .{err });
defer environ_map .deinit ();
const preopens = std .process .Preopens .init (arena_allocator .allocator ()) catch |err |
std .process .fatal ("failed to init preopens: {t}" , .{err });
return wrapMain (root .main (.{
.minimal = .{
.args = .{ .vector = args },
.environ = .{ .block = environ },
},
.arena = &arena_allocator ,
.gpa = gpa ,
.io = threaded .io (),
.environ_map = &environ_map ,
.preopens = preopens ,
}));
}