diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2023-04-12 21:03:36 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-04-13 02:47:16 -0400 |
| commit | e2fe1907ecac075e4d4a37776359144318b6055a (patch) | |
| tree | fa8289bc558540dfe7fcfdc0d06eb99f0e189396 /lib/std | |
| parent | 856a9c2e3120d9ffa1166eed13641600230946da (diff) | |
| download | zig-e2fe1907ecac075e4d4a37776359144318b6055a.tar.gz zig-e2fe1907ecac075e4d4a37776359144318b6055a.zip | |
add c_char type
closes #875
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/start.zig | 4 | ||||
| -rw-r--r-- | lib/std/target.zig | 20 | ||||
| -rw-r--r-- | lib/std/zig/primitives.zig | 1 |
3 files changed, 23 insertions, 2 deletions
diff --git a/lib/std/start.zig b/lib/std/start.zig index 5beabe8958..40b499039b 100644 --- a/lib/std/start.zig +++ b/lib/std/start.zig @@ -512,7 +512,7 @@ fn callMainWithArgs(argc: usize, argv: [*][*:0]u8, envp: [][*:0]u8) u8 { return initEventLoopAndCallMain(); } -fn main(c_argc: c_int, c_argv: [*][*:0]u8, c_envp: [*:null]?[*:0]u8) callconv(.C) c_int { +fn main(c_argc: c_int, c_argv: [*][*:0]c_char, c_envp: [*:null]?[*:0]c_char) callconv(.C) c_int { var env_count: usize = 0; while (c_envp[env_count] != null) : (env_count += 1) {} const envp = @ptrCast([*][*:0]u8, c_envp)[0..env_count]; @@ -527,7 +527,7 @@ fn main(c_argc: c_int, c_argv: [*][*:0]u8, c_envp: [*:null]?[*:0]u8) callconv(.C return @call(.always_inline, callMainWithArgs, .{ @intCast(usize, c_argc), @ptrCast([*][*:0]u8, c_argv), envp }); } -fn mainWithoutEnv(c_argc: c_int, c_argv: [*][*:0]u8) callconv(.C) c_int { +fn mainWithoutEnv(c_argc: c_int, c_argv: [*][*:0]c_char) callconv(.C) c_int { std.os.argv = @ptrCast([*][*:0]u8, c_argv)[0..@intCast(usize, c_argc)]; return @call(.always_inline, callMain, .{}); } diff --git a/lib/std/target.zig b/lib/std/target.zig index fba399f02c..d9214f7be6 100644 --- a/lib/std/target.zig +++ b/lib/std/target.zig @@ -1905,6 +1905,7 @@ pub const Target = struct { } pub const CType = enum { + char, short, ushort, int, @@ -1920,6 +1921,7 @@ pub const Target = struct { pub fn c_type_byte_size(t: Target, c_type: CType) u16 { return switch (c_type) { + .char, .short, .ushort, .int, @@ -1948,21 +1950,25 @@ pub const Target = struct { switch (target.os.tag) { .freestanding, .other => switch (target.cpu.arch) { .msp430 => switch (c_type) { + .char => return 8, .short, .ushort, .int, .uint => return 16, .float, .long, .ulong => return 32, .longlong, .ulonglong, .double, .longdouble => return 64, }, .avr => switch (c_type) { + .char => return 8, .short, .ushort, .int, .uint => return 16, .long, .ulong, .float, .double, .longdouble => return 32, .longlong, .ulonglong => return 64, }, .tce, .tcele => switch (c_type) { + .char => return 8, .short, .ushort => return 16, .int, .uint, .long, .ulong, .longlong, .ulonglong => return 32, .float, .double, .longdouble => return 32, }, .mips64, .mips64el => switch (c_type) { + .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => return if (target.abi != .gnuabin32) 64 else 32, @@ -1970,6 +1976,7 @@ pub const Target = struct { .longdouble => return 128, }, .x86_64 => switch (c_type) { + .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => switch (target.abi) { @@ -1980,6 +1987,7 @@ pub const Target = struct { .longdouble => return 80, }, else => switch (c_type) { + .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => return target.cpu.arch.ptrBitWidth(), @@ -2036,21 +2044,25 @@ pub const Target = struct { .minix, => switch (target.cpu.arch) { .msp430 => switch (c_type) { + .char => return 8, .short, .ushort, .int, .uint => return 16, .long, .ulong, .float => return 32, .longlong, .ulonglong, .double, .longdouble => return 64, }, .avr => switch (c_type) { + .char => return 8, .short, .ushort, .int, .uint => return 16, .long, .ulong, .float, .double, .longdouble => return 32, .longlong, .ulonglong => return 64, }, .tce, .tcele => switch (c_type) { + .char => return 8, .short, .ushort => return 16, .int, .uint, .long, .ulong, .longlong, .ulonglong => return 32, .float, .double, .longdouble => return 32, }, .mips64, .mips64el => switch (c_type) { + .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => return if (target.abi != .gnuabin32) 64 else 32, @@ -2058,6 +2070,7 @@ pub const Target = struct { .longdouble => if (target.os.tag == .freebsd) return 64 else return 128, }, .x86_64 => switch (c_type) { + .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => switch (target.abi) { @@ -2068,6 +2081,7 @@ pub const Target = struct { .longdouble => return 80, }, else => switch (c_type) { + .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => return target.cpu.arch.ptrBitWidth(), @@ -2128,6 +2142,7 @@ pub const Target = struct { .windows, .uefi => switch (target.cpu.arch) { .x86 => switch (c_type) { + .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => return 32, @@ -2138,6 +2153,7 @@ pub const Target = struct { }, }, .x86_64 => switch (c_type) { + .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => switch (target.abi) { @@ -2151,6 +2167,7 @@ pub const Target = struct { }, }, else => switch (c_type) { + .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => return 32, @@ -2160,6 +2177,7 @@ pub const Target = struct { }, .macos, .ios, .tvos, .watchos => switch (c_type) { + .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => switch (target.cpu.arch) { @@ -2182,6 +2200,7 @@ pub const Target = struct { }, .nvcl, .cuda => switch (c_type) { + .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => switch (target.cpu.arch) { @@ -2194,6 +2213,7 @@ pub const Target = struct { }, .amdhsa, .amdpal => switch (c_type) { + .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong, .longlong, .ulonglong, .double => return 64, diff --git a/lib/std/zig/primitives.zig b/lib/std/zig/primitives.zig index 4198c9f31c..11d519e365 100644 --- a/lib/std/zig/primitives.zig +++ b/lib/std/zig/primitives.zig @@ -11,6 +11,7 @@ pub const names = std.ComptimeStringMap(void, .{ .{"c_long"}, .{"c_longdouble"}, .{"c_longlong"}, + .{"c_char"}, .{"c_short"}, .{"c_uint"}, .{"c_ulong"}, |
