aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2023-04-12 21:03:36 -0700
committerAndrew Kelley <andrew@ziglang.org>2023-04-13 02:47:16 -0400
commite2fe1907ecac075e4d4a37776359144318b6055a (patch)
treefa8289bc558540dfe7fcfdc0d06eb99f0e189396 /lib/std
parent856a9c2e3120d9ffa1166eed13641600230946da (diff)
downloadzig-e2fe1907ecac075e4d4a37776359144318b6055a.tar.gz
zig-e2fe1907ecac075e4d4a37776359144318b6055a.zip
add c_char type
closes #875
Diffstat (limited to 'lib/std')
-rw-r--r--lib/std/start.zig4
-rw-r--r--lib/std/target.zig20
-rw-r--r--lib/std/zig/primitives.zig1
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"},