authorgravatar for daniele.cocca@gmail.comDaniele Cocca <daniele.cocca@gmail.com> 2021-04-28 01:13:47+01:00
committergravatar for dcocca@google.comDaniele Cocca <dcocca@google.com> 2021-06-16 22:03:02+01:00
log9be2f767417ef4eb69f35b67348bb3e2ec752d4a
treeec3eb55e45146939458cf801ea07b78080ef81a6
parent171102ea7ca3a11113d2ccfb7206b0eaddab19ac

typeName: amend return type to string literal

This was already the case, but the documentation failed to point out that the returned value is of type `*const [N:0]u8`, i.e. that of a string literal. Also adds a behavioral test to assert that this is the case.

2 files changed, 11 insertions(+), 1 deletions(-)

doc/langref.html.in+1-1
......@@ -8623,7 +8623,7 @@ test "integer truncation" {
86238623 {#header_close#}
86248624
86258625 {#header_open|@typeName#}
8626 <pre>{#syntax#}@typeName(T: type) [N]u8{#endsyntax#}</pre>
8626 <pre>{#syntax#}@typeName(T: type) *const [N:0]u8{#endsyntax#}</pre>
86278627 <p>
86288628 This function returns the string representation of a type, as
86298629 an array. It is equivalent to a string literal of the type name.
test/behavior/bugs/3779.zig+10
......@@ -19,3 +19,13 @@ test "@errorName() returns a string literal" {
1919 try std.testing.expectEqualStrings("TestErrorCode", error_name);
2020 try std.testing.expectEqualStrings("TestErrorCode", ptr_error_name[0..error_name.len]);
2121}
22
23const TestType = struct {};
24const type_name = @typeName(TestType);
25const ptr_type_name: [*:0]const u8 = type_name;
26
27test "@typeName() returns a string literal" {
28 try std.testing.expectEqual(*const [type_name.len:0]u8, @TypeOf(type_name));
29 try std.testing.expectEqualStrings("TestType", type_name);
30 try std.testing.expectEqualStrings("TestType", ptr_type_name[0..type_name.len]);
31}