Commit 9be2f76741

Daniele Cocca <daniele.cocca@gmail.com>
2021-04-28 02:13:47
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.
1 parent 171102e
Changed files (2)
doc
test
behavior
doc/langref.html.in
@@ -8623,7 +8623,7 @@ test "integer truncation" {
       {#header_close#}
 
       {#header_open|@typeName#}
-      <pre>{#syntax#}@typeName(T: type) [N]u8{#endsyntax#}</pre>
+      <pre>{#syntax#}@typeName(T: type) *const [N:0]u8{#endsyntax#}</pre>
       <p>
       This function returns the string representation of a type, as
       an array. It is equivalent to a string literal of the type name.
test/behavior/bugs/3779.zig
@@ -19,3 +19,13 @@ test "@errorName() returns a string literal" {
     try std.testing.expectEqualStrings("TestErrorCode", error_name);
     try std.testing.expectEqualStrings("TestErrorCode", ptr_error_name[0..error_name.len]);
 }
+
+const TestType = struct {};
+const type_name = @typeName(TestType);
+const ptr_type_name: [*:0]const u8 = type_name;
+
+test "@typeName() returns a string literal" {
+    try std.testing.expectEqual(*const [type_name.len:0]u8, @TypeOf(type_name));
+    try std.testing.expectEqualStrings("TestType", type_name);
+    try std.testing.expectEqualStrings("TestType", ptr_type_name[0..type_name.len]);
+}