authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2020-11-26 19:14:22+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-01-02 17:12:57-07:00
log1fbe89dc2e204defc18add72efd2bba4dbe728fc
tree2002b7d890016ebff5d7205bcfd4fbb8ccd0749e
parentd2f6fa1608f31cbd7137f81b5dd6df2977766eae

langref: Update langref to use {s}


5 files changed, 80 insertions(+), 81 deletions(-)

doc/docgen.zig+54-54
...@@ -215,9 +215,9 @@ const Tokenizer = struct {...@@ -215,9 +215,9 @@ const Tokenizer = struct {
215fn parseError(tokenizer: *Tokenizer, token: Token, comptime fmt: []const u8, args: anytype) anyerror {215fn parseError(tokenizer: *Tokenizer, token: Token, comptime fmt: []const u8, args: anytype) anyerror {
216 const loc = tokenizer.getTokenLocation(token);216 const loc = tokenizer.getTokenLocation(token);
217 const args_prefix = .{ tokenizer.source_file_name, loc.line + 1, loc.column + 1 };217 const args_prefix = .{ tokenizer.source_file_name, loc.line + 1, loc.column + 1 };
218 print("{}:{}:{}: error: " ++ fmt ++ "\n", args_prefix ++ args);218 print("{s}:{d}:{d}: error: " ++ fmt ++ "\n", args_prefix ++ args);
219 if (loc.line_start <= loc.line_end) {219 if (loc.line_start <= loc.line_end) {
220 print("{}\n", .{tokenizer.buffer[loc.line_start..loc.line_end]});220 print("{s}\n", .{tokenizer.buffer[loc.line_start..loc.line_end]});
221 {221 {
222 var i: usize = 0;222 var i: usize = 0;
223 while (i < loc.column) : (i += 1) {223 while (i < loc.column) : (i += 1) {
...@@ -238,7 +238,7 @@ fn parseError(tokenizer: *Tokenizer, token: Token, comptime fmt: []const u8, arg...@@ -238,7 +238,7 @@ fn parseError(tokenizer: *Tokenizer, token: Token, comptime fmt: []const u8, arg
238238
239fn assertToken(tokenizer: *Tokenizer, token: Token, id: Token.Id) !void {239fn assertToken(tokenizer: *Tokenizer, token: Token, id: Token.Id) !void {
240 if (token.id != id) {240 if (token.id != id) {
241 return parseError(tokenizer, token, "expected {}, found {}", .{ @tagName(id), @tagName(token.id) });241 return parseError(tokenizer, token, "expected {s}, found {s}", .{ @tagName(id), @tagName(token.id) });
242 }242 }
243}243}
244244
...@@ -374,7 +374,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc {...@@ -374,7 +374,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc {
374 return parseError(374 return parseError(
375 tokenizer,375 tokenizer,
376 bracket_tok,376 bracket_tok,
377 "unrecognized header_open param: {}",377 "unrecognized header_open param: {s}",
378 .{param},378 .{param},
379 );379 );
380 }380 }
...@@ -394,7 +394,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc {...@@ -394,7 +394,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc {
394 },394 },
395 });395 });
396 if (try urls.fetchPut(urlized, tag_token)) |entry| {396 if (try urls.fetchPut(urlized, tag_token)) |entry| {
397 parseError(tokenizer, tag_token, "duplicate header url: #{}", .{urlized}) catch {};397 parseError(tokenizer, tag_token, "duplicate header url: #{s}", .{urlized}) catch {};
398 parseError(tokenizer, entry.value, "other tag here", .{}) catch {};398 parseError(tokenizer, entry.value, "other tag here", .{}) catch {};
399 return error.ParseError;399 return error.ParseError;
400 }400 }
...@@ -411,7 +411,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc {...@@ -411,7 +411,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc {
411 }411 }
412 last_columns = columns;412 last_columns = columns;
413 try toc.writeByteNTimes(' ', 4 + header_stack_size * 4);413 try toc.writeByteNTimes(' ', 4 + header_stack_size * 4);
414 try toc.print("<li><a id=\"toc-{}\" href=\"#{}\">{}</a>", .{ urlized, urlized, content });414 try toc.print("<li><a id=\"toc-{s}\" href=\"#{s}\">{s}</a>", .{ urlized, urlized, content });
415 } else if (mem.eql(u8, tag_name, "header_close")) {415 } else if (mem.eql(u8, tag_name, "header_close")) {
416 if (header_stack_size == 0) {416 if (header_stack_size == 0) {
417 return parseError(tokenizer, tag_token, "unbalanced close header", .{});417 return parseError(tokenizer, tag_token, "unbalanced close header", .{});
...@@ -515,7 +515,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc {...@@ -515,7 +515,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc {
515 code_kind_id = Code.Id{ .Obj = null };515 code_kind_id = Code.Id{ .Obj = null };
516 is_inline = true;516 is_inline = true;
517 } else {517 } else {
518 return parseError(tokenizer, code_kind_tok, "unrecognized code kind: {}", .{code_kind_str});518 return parseError(tokenizer, code_kind_tok, "unrecognized code kind: {s}", .{code_kind_str});
519 }519 }
520520
521 var mode: builtin.Mode = .Debug;521 var mode: builtin.Mode = .Debug;
...@@ -559,7 +559,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc {...@@ -559,7 +559,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc {
559 return parseError(559 return parseError(
560 tokenizer,560 tokenizer,
561 end_code_tag,561 end_code_tag,
562 "invalid token inside code_begin: {}",562 "invalid token inside code_begin: {s}",
563 .{end_tag_name},563 .{end_tag_name},
564 );564 );
565 }565 }
...@@ -590,14 +590,14 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc {...@@ -590,14 +590,14 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc {
590 return parseError(590 return parseError(
591 tokenizer,591 tokenizer,
592 end_syntax_tag,592 end_syntax_tag,
593 "invalid token inside syntax: {}",593 "invalid token inside syntax: {s}",
594 .{end_tag_name},594 .{end_tag_name},
595 );595 );
596 }596 }
597 _ = try eatToken(tokenizer, Token.Id.BracketClose);597 _ = try eatToken(tokenizer, Token.Id.BracketClose);
598 try nodes.append(Node{ .Syntax = content_tok });598 try nodes.append(Node{ .Syntax = content_tok });
599 } else {599 } else {
600 return parseError(tokenizer, tag_token, "unrecognized tag name: {}", .{tag_name});600 return parseError(tokenizer, tag_token, "unrecognized tag name: {s}", .{tag_name});
601 }601 }
602 },602 },
603 else => return parseError(tokenizer, token, "invalid token", .{}),603 else => return parseError(tokenizer, token, "invalid token", .{}),
...@@ -744,7 +744,7 @@ fn termColor(allocator: *mem.Allocator, input: []const u8) ![]u8 {...@@ -744,7 +744,7 @@ fn termColor(allocator: *mem.Allocator, input: []const u8) ![]u8 {
744 try out.writeAll("</span>");744 try out.writeAll("</span>");
745 }745 }
746 if (first_number != 0 or second_number != 0) {746 if (first_number != 0 or second_number != 0) {
747 try out.print("<span class=\"t{}_{}\">", .{ first_number, second_number });747 try out.print("<span class=\"t{d}_{d}\">", .{ first_number, second_number });
748 open_span_count += 1;748 open_span_count += 1;
749 }749 }
750 },750 },
...@@ -1004,9 +1004,9 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1004,9 +1004,9 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1004 },1004 },
1005 .Link => |info| {1005 .Link => |info| {
1006 if (!toc.urls.contains(info.url)) {1006 if (!toc.urls.contains(info.url)) {
1007 return parseError(tokenizer, info.token, "url not found: {}", .{info.url});1007 return parseError(tokenizer, info.token, "url not found: {s}", .{info.url});
1008 }1008 }
1009 try out.print("<a href=\"#{}\">{}</a>", .{ info.url, info.name });1009 try out.print("<a href=\"#{s}\">{s}</a>", .{ info.url, info.name });
1010 },1010 },
1011 .Nav => {1011 .Nav => {
1012 try out.writeAll(toc.toc);1012 try out.writeAll(toc.toc);
...@@ -1018,7 +1018,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1018,7 +1018,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1018 },1018 },
1019 .HeaderOpen => |info| {1019 .HeaderOpen => |info| {
1020 try out.print(1020 try out.print(
1021 "<h{} id=\"{}\"><a href=\"#toc-{}\">{}</a> <a class=\"hdr\" href=\"#{}\">§</a></h{}>\n",1021 "<h{d} id=\"{s}\"><a href=\"#toc-{s}\">{s}</a> <a class=\"hdr\" href=\"#{s}\">§</a></h{d}>\n",
1022 .{ info.n, info.url, info.url, info.name, info.url, info.n },1022 .{ info.n, info.url, info.url, info.name, info.url, info.n },
1023 );1023 );
1024 },1024 },
...@@ -1027,9 +1027,9 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1027,9 +1027,9 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1027 for (items) |item| {1027 for (items) |item| {
1028 const url = try urlize(allocator, item.name);1028 const url = try urlize(allocator, item.name);
1029 if (!toc.urls.contains(url)) {1029 if (!toc.urls.contains(url)) {
1030 return parseError(tokenizer, item.token, "url not found: {}", .{url});1030 return parseError(tokenizer, item.token, "url not found: {s}", .{url});
1031 }1031 }
1032 try out.print("<li><a href=\"#{}\">{}</a></li>\n", .{ url, item.name });1032 try out.print("<li><a href=\"#{s}\">{s}</a></li>\n", .{ url, item.name });
1033 }1033 }
1034 try out.writeAll("</ul>\n");1034 try out.writeAll("</ul>\n");
1035 },1035 },
...@@ -1043,12 +1043,12 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1043,12 +1043,12 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1043 const raw_source = tokenizer.buffer[code.source_token.start..code.source_token.end];1043 const raw_source = tokenizer.buffer[code.source_token.start..code.source_token.end];
1044 const trimmed_raw_source = mem.trim(u8, raw_source, " \n");1044 const trimmed_raw_source = mem.trim(u8, raw_source, " \n");
1045 if (!code.is_inline) {1045 if (!code.is_inline) {
1046 try out.print("<p class=\"file\">{}.zig</p>", .{code.name});1046 try out.print("<p class=\"file\">{s}.zig</p>", .{code.name});
1047 }1047 }
1048 try out.writeAll("<pre>");1048 try out.writeAll("<pre>");
1049 try tokenizeAndPrint(tokenizer, out, code.source_token);1049 try tokenizeAndPrint(tokenizer, out, code.source_token);
1050 try out.writeAll("</pre>");1050 try out.writeAll("</pre>");
1051 const name_plus_ext = try std.fmt.allocPrint(allocator, "{}.zig", .{code.name});1051 const name_plus_ext = try std.fmt.allocPrint(allocator, "{s}.zig", .{code.name});
1052 const tmp_source_file_name = try fs.path.join(1052 const tmp_source_file_name = try fs.path.join(
1053 allocator,1053 allocator,
1054 &[_][]const u8{ tmp_dir_name, name_plus_ext },1054 &[_][]const u8{ tmp_dir_name, name_plus_ext },
...@@ -1057,7 +1057,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1057,7 +1057,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
10571057
1058 switch (code.id) {1058 switch (code.id) {
1059 Code.Id.Exe => |expected_outcome| code_block: {1059 Code.Id.Exe => |expected_outcome| code_block: {
1060 const name_plus_bin_ext = try std.fmt.allocPrint(allocator, "{}{}", .{ code.name, exe_ext });1060 const name_plus_bin_ext = try std.fmt.allocPrint(allocator, "{s}{s}", .{ code.name, exe_ext });
1061 var build_args = std.ArrayList([]const u8).init(allocator);1061 var build_args = std.ArrayList([]const u8).init(allocator);
1062 defer build_args.deinit();1062 defer build_args.deinit();
1063 try build_args.appendSlice(&[_][]const u8{1063 try build_args.appendSlice(&[_][]const u8{
...@@ -1066,7 +1066,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1066,7 +1066,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1066 "--color", "on",1066 "--color", "on",
1067 "--enable-cache", tmp_source_file_name,1067 "--enable-cache", tmp_source_file_name,
1068 });1068 });
1069 try out.print("<pre><code class=\"shell\">$ zig build-exe {}.zig", .{code.name});1069 try out.print("<pre><code class=\"shell\">$ zig build-exe {s}.zig", .{code.name});
1070 switch (code.mode) {1070 switch (code.mode) {
1071 .Debug => {},1071 .Debug => {},
1072 else => {1072 else => {
...@@ -1075,7 +1075,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1075,7 +1075,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1075 },1075 },
1076 }1076 }
1077 for (code.link_objects) |link_object| {1077 for (code.link_objects) |link_object| {
1078 const name_with_ext = try std.fmt.allocPrint(allocator, "{}{}", .{ link_object, obj_ext });1078 const name_with_ext = try std.fmt.allocPrint(allocator, "{s}{s}", .{ link_object, obj_ext });
1079 const full_path_object = try fs.path.join(1079 const full_path_object = try fs.path.join(
1080 allocator,1080 allocator,
1081 &[_][]const u8{ tmp_dir_name, name_with_ext },1081 &[_][]const u8{ tmp_dir_name, name_with_ext },
...@@ -1093,7 +1093,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1093,7 +1093,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1093 if (code.target_str) |triple| {1093 if (code.target_str) |triple| {
1094 try build_args.appendSlice(&[_][]const u8{ "-target", triple });1094 try build_args.appendSlice(&[_][]const u8{ "-target", triple });
1095 if (!code.is_inline) {1095 if (!code.is_inline) {
1096 try out.print(" -target {}", .{triple});1096 try out.print(" -target {s}", .{triple});
1097 }1097 }
1098 }1098 }
1099 if (expected_outcome == .BuildFail) {1099 if (expected_outcome == .BuildFail) {
...@@ -1106,20 +1106,20 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1106,20 +1106,20 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1106 switch (result.term) {1106 switch (result.term) {
1107 .Exited => |exit_code| {1107 .Exited => |exit_code| {
1108 if (exit_code == 0) {1108 if (exit_code == 0) {
1109 print("{}\nThe following command incorrectly succeeded:\n", .{result.stderr});1109 print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr});
1110 dumpArgs(build_args.items);1110 dumpArgs(build_args.items);
1111 return parseError(tokenizer, code.source_token, "example incorrectly compiled", .{});1111 return parseError(tokenizer, code.source_token, "example incorrectly compiled", .{});
1112 }1112 }
1113 },1113 },
1114 else => {1114 else => {
1115 print("{}\nThe following command crashed:\n", .{result.stderr});1115 print("{s}\nThe following command crashed:\n", .{result.stderr});
1116 dumpArgs(build_args.items);1116 dumpArgs(build_args.items);
1117 return parseError(tokenizer, code.source_token, "example compile crashed", .{});1117 return parseError(tokenizer, code.source_token, "example compile crashed", .{});
1118 },1118 },
1119 }1119 }
1120 const escaped_stderr = try escapeHtml(allocator, result.stderr);1120 const escaped_stderr = try escapeHtml(allocator, result.stderr);
1121 const colored_stderr = try termColor(allocator, escaped_stderr);1121 const colored_stderr = try termColor(allocator, escaped_stderr);
1122 try out.print("\n{}</code></pre>\n", .{colored_stderr});1122 try out.print("\n{s}</code></pre>\n", .{colored_stderr});
1123 break :code_block;1123 break :code_block;
1124 }1124 }
1125 const exec_result = exec(allocator, &env_map, build_args.items) catch1125 const exec_result = exec(allocator, &env_map, build_args.items) catch
...@@ -1138,7 +1138,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1138,7 +1138,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1138 }1138 }
11391139
1140 const path_to_exe_dir = mem.trim(u8, exec_result.stdout, " \r\n");1140 const path_to_exe_dir = mem.trim(u8, exec_result.stdout, " \r\n");
1141 const path_to_exe_basename = try std.fmt.allocPrint(allocator, "{}{}", .{1141 const path_to_exe_basename = try std.fmt.allocPrint(allocator, "{s}{s}", .{
1142 code.name,1142 code.name,
1143 target.exeFileExt(),1143 target.exeFileExt(),
1144 });1144 });
...@@ -1160,7 +1160,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1160,7 +1160,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1160 switch (result.term) {1160 switch (result.term) {
1161 .Exited => |exit_code| {1161 .Exited => |exit_code| {
1162 if (exit_code == 0) {1162 if (exit_code == 0) {
1163 print("{}\nThe following command incorrectly succeeded:\n", .{result.stderr});1163 print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr});
1164 dumpArgs(run_args);1164 dumpArgs(run_args);
1165 return parseError(tokenizer, code.source_token, "example incorrectly compiled", .{});1165 return parseError(tokenizer, code.source_token, "example incorrectly compiled", .{});
1166 }1166 }
...@@ -1179,7 +1179,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1179,7 +1179,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1179 const colored_stderr = try termColor(allocator, escaped_stderr);1179 const colored_stderr = try termColor(allocator, escaped_stderr);
1180 const colored_stdout = try termColor(allocator, escaped_stdout);1180 const colored_stdout = try termColor(allocator, escaped_stdout);
11811181
1182 try out.print("\n$ ./{}\n{}{}", .{ code.name, colored_stdout, colored_stderr });1182 try out.print("\n$ ./{s}\n{s}{s}", .{ code.name, colored_stdout, colored_stderr });
1183 if (exited_with_signal) {1183 if (exited_with_signal) {
1184 try out.print("(process terminated by signal)", .{});1184 try out.print("(process terminated by signal)", .{});
1185 }1185 }
...@@ -1190,7 +1190,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1190,7 +1190,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1190 defer test_args.deinit();1190 defer test_args.deinit();
11911191
1192 try test_args.appendSlice(&[_][]const u8{ zig_exe, "test", tmp_source_file_name });1192 try test_args.appendSlice(&[_][]const u8{ zig_exe, "test", tmp_source_file_name });
1193 try out.print("<pre><code class=\"shell\">$ zig test {}.zig", .{code.name});1193 try out.print("<pre><code class=\"shell\">$ zig test {s}.zig", .{code.name});
1194 switch (code.mode) {1194 switch (code.mode) {
1195 .Debug => {},1195 .Debug => {},
1196 else => {1196 else => {
...@@ -1204,12 +1204,12 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1204,12 +1204,12 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1204 }1204 }
1205 if (code.target_str) |triple| {1205 if (code.target_str) |triple| {
1206 try test_args.appendSlice(&[_][]const u8{ "-target", triple });1206 try test_args.appendSlice(&[_][]const u8{ "-target", triple });
1207 try out.print(" -target {}", .{triple});1207 try out.print(" -target {s}", .{triple});
1208 }1208 }
1209 const result = exec(allocator, &env_map, test_args.items) catch return parseError(tokenizer, code.source_token, "test failed", .{});1209 const result = exec(allocator, &env_map, test_args.items) catch return parseError(tokenizer, code.source_token, "test failed", .{});
1210 const escaped_stderr = try escapeHtml(allocator, result.stderr);1210 const escaped_stderr = try escapeHtml(allocator, result.stderr);
1211 const escaped_stdout = try escapeHtml(allocator, result.stdout);1211 const escaped_stdout = try escapeHtml(allocator, result.stdout);
1212 try out.print("\n{}{}</code></pre>\n", .{ escaped_stderr, escaped_stdout });1212 try out.print("\n{s}{s}</code></pre>\n", .{ escaped_stderr, escaped_stdout });
1213 },1213 },
1214 Code.Id.TestError => |error_match| {1214 Code.Id.TestError => |error_match| {
1215 var test_args = std.ArrayList([]const u8).init(allocator);1215 var test_args = std.ArrayList([]const u8).init(allocator);
...@@ -1222,7 +1222,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1222,7 +1222,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1222 "on",1222 "on",
1223 tmp_source_file_name,1223 tmp_source_file_name,
1224 });1224 });
1225 try out.print("<pre><code class=\"shell\">$ zig test {}.zig", .{code.name});1225 try out.print("<pre><code class=\"shell\">$ zig test {s}.zig", .{code.name});
1226 switch (code.mode) {1226 switch (code.mode) {
1227 .Debug => {},1227 .Debug => {},
1228 else => {1228 else => {
...@@ -1239,24 +1239,24 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1239,24 +1239,24 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1239 switch (result.term) {1239 switch (result.term) {
1240 .Exited => |exit_code| {1240 .Exited => |exit_code| {
1241 if (exit_code == 0) {1241 if (exit_code == 0) {
1242 print("{}\nThe following command incorrectly succeeded:\n", .{result.stderr});1242 print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr});
1243 dumpArgs(test_args.items);1243 dumpArgs(test_args.items);
1244 return parseError(tokenizer, code.source_token, "example incorrectly compiled", .{});1244 return parseError(tokenizer, code.source_token, "example incorrectly compiled", .{});
1245 }1245 }
1246 },1246 },
1247 else => {1247 else => {
1248 print("{}\nThe following command crashed:\n", .{result.stderr});1248 print("{s}\nThe following command crashed:\n", .{result.stderr});
1249 dumpArgs(test_args.items);1249 dumpArgs(test_args.items);
1250 return parseError(tokenizer, code.source_token, "example compile crashed", .{});1250 return parseError(tokenizer, code.source_token, "example compile crashed", .{});
1251 },1251 },
1252 }1252 }
1253 if (mem.indexOf(u8, result.stderr, error_match) == null) {1253 if (mem.indexOf(u8, result.stderr, error_match) == null) {
1254 print("{}\nExpected to find '{}' in stderr\n", .{ result.stderr, error_match });1254 print("{s}\nExpected to find '{s}' in stderr\n", .{ result.stderr, error_match });
1255 return parseError(tokenizer, code.source_token, "example did not have expected compile error", .{});1255 return parseError(tokenizer, code.source_token, "example did not have expected compile error", .{});
1256 }1256 }
1257 const escaped_stderr = try escapeHtml(allocator, result.stderr);1257 const escaped_stderr = try escapeHtml(allocator, result.stderr);
1258 const colored_stderr = try termColor(allocator, escaped_stderr);1258 const colored_stderr = try termColor(allocator, escaped_stderr);
1259 try out.print("\n{}</code></pre>\n", .{colored_stderr});1259 try out.print("\n{s}</code></pre>\n", .{colored_stderr});
1260 },1260 },
12611261
1262 Code.Id.TestSafety => |error_match| {1262 Code.Id.TestSafety => |error_match| {
...@@ -1294,31 +1294,31 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1294,31 +1294,31 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1294 switch (result.term) {1294 switch (result.term) {
1295 .Exited => |exit_code| {1295 .Exited => |exit_code| {
1296 if (exit_code == 0) {1296 if (exit_code == 0) {
1297 print("{}\nThe following command incorrectly succeeded:\n", .{result.stderr});1297 print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr});
1298 dumpArgs(test_args.items);1298 dumpArgs(test_args.items);
1299 return parseError(tokenizer, code.source_token, "example test incorrectly succeeded", .{});1299 return parseError(tokenizer, code.source_token, "example test incorrectly succeeded", .{});
1300 }1300 }
1301 },1301 },
1302 else => {1302 else => {
1303 print("{}\nThe following command crashed:\n", .{result.stderr});1303 print("{s}\nThe following command crashed:\n", .{result.stderr});
1304 dumpArgs(test_args.items);1304 dumpArgs(test_args.items);
1305 return parseError(tokenizer, code.source_token, "example compile crashed", .{});1305 return parseError(tokenizer, code.source_token, "example compile crashed", .{});
1306 },1306 },
1307 }1307 }
1308 if (mem.indexOf(u8, result.stderr, error_match) == null) {1308 if (mem.indexOf(u8, result.stderr, error_match) == null) {
1309 print("{}\nExpected to find '{}' in stderr\n", .{ result.stderr, error_match });1309 print("{s}\nExpected to find '{s}' in stderr\n", .{ result.stderr, error_match });
1310 return parseError(tokenizer, code.source_token, "example did not have expected runtime safety error message", .{});1310 return parseError(tokenizer, code.source_token, "example did not have expected runtime safety error message", .{});
1311 }1311 }
1312 const escaped_stderr = try escapeHtml(allocator, result.stderr);1312 const escaped_stderr = try escapeHtml(allocator, result.stderr);
1313 const colored_stderr = try termColor(allocator, escaped_stderr);1313 const colored_stderr = try termColor(allocator, escaped_stderr);
1314 try out.print("<pre><code class=\"shell\">$ zig test {}.zig{}\n{}</code></pre>\n", .{1314 try out.print("<pre><code class=\"shell\">$ zig test {s}.zig{s}\n{s}</code></pre>\n", .{
1315 code.name,1315 code.name,
1316 mode_arg,1316 mode_arg,
1317 colored_stderr,1317 colored_stderr,
1318 });1318 });
1319 },1319 },
1320 Code.Id.Obj => |maybe_error_match| {1320 Code.Id.Obj => |maybe_error_match| {
1321 const name_plus_obj_ext = try std.fmt.allocPrint(allocator, "{}{}", .{ code.name, obj_ext });1321 const name_plus_obj_ext = try std.fmt.allocPrint(allocator, "{s}{s}", .{ code.name, obj_ext });
1322 const tmp_obj_file_name = try fs.path.join(1322 const tmp_obj_file_name = try fs.path.join(
1323 allocator,1323 allocator,
1324 &[_][]const u8{ tmp_dir_name, name_plus_obj_ext },1324 &[_][]const u8{ tmp_dir_name, name_plus_obj_ext },
...@@ -1326,7 +1326,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1326,7 +1326,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1326 var build_args = std.ArrayList([]const u8).init(allocator);1326 var build_args = std.ArrayList([]const u8).init(allocator);
1327 defer build_args.deinit();1327 defer build_args.deinit();
13281328
1329 const name_plus_h_ext = try std.fmt.allocPrint(allocator, "{}.h", .{code.name});1329 const name_plus_h_ext = try std.fmt.allocPrint(allocator, "{s}.h", .{code.name});
1330 const output_h_file_name = try fs.path.join(1330 const output_h_file_name = try fs.path.join(
1331 allocator,1331 allocator,
1332 &[_][]const u8{ tmp_dir_name, name_plus_h_ext },1332 &[_][]const u8{ tmp_dir_name, name_plus_h_ext },
...@@ -1345,7 +1345,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1345,7 +1345,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1345 }),1345 }),
1346 });1346 });
1347 if (!code.is_inline) {1347 if (!code.is_inline) {
1348 try out.print("<pre><code class=\"shell\">$ zig build-obj {}.zig", .{code.name});1348 try out.print("<pre><code class=\"shell\">$ zig build-obj {s}.zig", .{code.name});
1349 }1349 }
13501350
1351 switch (code.mode) {1351 switch (code.mode) {
...@@ -1360,7 +1360,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1360,7 +1360,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
13601360
1361 if (code.target_str) |triple| {1361 if (code.target_str) |triple| {
1362 try build_args.appendSlice(&[_][]const u8{ "-target", triple });1362 try build_args.appendSlice(&[_][]const u8{ "-target", triple });
1363 try out.print(" -target {}", .{triple});1363 try out.print(" -target {s}", .{triple});
1364 }1364 }
13651365
1366 if (maybe_error_match) |error_match| {1366 if (maybe_error_match) |error_match| {
...@@ -1373,24 +1373,24 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1373,24 +1373,24 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1373 switch (result.term) {1373 switch (result.term) {
1374 .Exited => |exit_code| {1374 .Exited => |exit_code| {
1375 if (exit_code == 0) {1375 if (exit_code == 0) {
1376 print("{}\nThe following command incorrectly succeeded:\n", .{result.stderr});1376 print("{s}\nThe following command incorrectly succeeded:\n", .{result.stderr});
1377 dumpArgs(build_args.items);1377 dumpArgs(build_args.items);
1378 return parseError(tokenizer, code.source_token, "example build incorrectly succeeded", .{});1378 return parseError(tokenizer, code.source_token, "example build incorrectly succeeded", .{});
1379 }1379 }
1380 },1380 },
1381 else => {1381 else => {
1382 print("{}\nThe following command crashed:\n", .{result.stderr});1382 print("{s}\nThe following command crashed:\n", .{result.stderr});
1383 dumpArgs(build_args.items);1383 dumpArgs(build_args.items);
1384 return parseError(tokenizer, code.source_token, "example compile crashed", .{});1384 return parseError(tokenizer, code.source_token, "example compile crashed", .{});
1385 },1385 },
1386 }1386 }
1387 if (mem.indexOf(u8, result.stderr, error_match) == null) {1387 if (mem.indexOf(u8, result.stderr, error_match) == null) {
1388 print("{}\nExpected to find '{}' in stderr\n", .{ result.stderr, error_match });1388 print("{s}\nExpected to find '{s}' in stderr\n", .{ result.stderr, error_match });
1389 return parseError(tokenizer, code.source_token, "example did not have expected compile error message", .{});1389 return parseError(tokenizer, code.source_token, "example did not have expected compile error message", .{});
1390 }1390 }
1391 const escaped_stderr = try escapeHtml(allocator, result.stderr);1391 const escaped_stderr = try escapeHtml(allocator, result.stderr);
1392 const colored_stderr = try termColor(allocator, escaped_stderr);1392 const colored_stderr = try termColor(allocator, escaped_stderr);
1393 try out.print("\n{}", .{colored_stderr});1393 try out.print("\n{s}", .{colored_stderr});
1394 } else {1394 } else {
1395 _ = exec(allocator, &env_map, build_args.items) catch return parseError(tokenizer, code.source_token, "example failed to compile", .{});1395 _ = exec(allocator, &env_map, build_args.items) catch return parseError(tokenizer, code.source_token, "example failed to compile", .{});
1396 }1396 }
...@@ -1416,7 +1416,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1416,7 +1416,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1416 tmp_dir_name, fs.path.sep_str, bin_basename,1416 tmp_dir_name, fs.path.sep_str, bin_basename,
1417 }),1417 }),
1418 });1418 });
1419 try out.print("<pre><code class=\"shell\">$ zig build-lib {}.zig", .{code.name});1419 try out.print("<pre><code class=\"shell\">$ zig build-lib {s}.zig", .{code.name});
1420 switch (code.mode) {1420 switch (code.mode) {
1421 .Debug => {},1421 .Debug => {},
1422 else => {1422 else => {
...@@ -1426,12 +1426,12 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any...@@ -1426,12 +1426,12 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any
1426 }1426 }
1427 if (code.target_str) |triple| {1427 if (code.target_str) |triple| {
1428 try test_args.appendSlice(&[_][]const u8{ "-target", triple });1428 try test_args.appendSlice(&[_][]const u8{ "-target", triple });
1429 try out.print(" -target {}", .{triple});1429 try out.print(" -target {s}", .{triple});
1430 }1430 }
1431 const result = exec(allocator, &env_map, test_args.items) catch return parseError(tokenizer, code.source_token, "test failed", .{});1431 const result = exec(allocator, &env_map, test_args.items) catch return parseError(tokenizer, code.source_token, "test failed", .{});
1432 const escaped_stderr = try escapeHtml(allocator, result.stderr);1432 const escaped_stderr = try escapeHtml(allocator, result.stderr);
1433 const escaped_stdout = try escapeHtml(allocator, result.stdout);1433 const escaped_stdout = try escapeHtml(allocator, result.stdout);
1434 try out.print("\n{}{}</code></pre>\n", .{ escaped_stderr, escaped_stdout });1434 try out.print("\n{s}{s}</code></pre>\n", .{ escaped_stderr, escaped_stdout });
1435 },1435 },
1436 }1436 }
1437 print("OK\n", .{});1437 print("OK\n", .{});
...@@ -1450,13 +1450,13 @@ fn exec(allocator: *mem.Allocator, env_map: *std.BufMap, args: []const []const u...@@ -1450,13 +1450,13 @@ fn exec(allocator: *mem.Allocator, env_map: *std.BufMap, args: []const []const u
1450 switch (result.term) {1450 switch (result.term) {
1451 .Exited => |exit_code| {1451 .Exited => |exit_code| {
1452 if (exit_code != 0) {1452 if (exit_code != 0) {
1453 print("{}\nThe following command exited with code {}:\n", .{ result.stderr, exit_code });1453 print("{s}\nThe following command exited with code {}:\n", .{ result.stderr, exit_code });
1454 dumpArgs(args);1454 dumpArgs(args);
1455 return error.ChildExitError;1455 return error.ChildExitError;
1456 }1456 }
1457 },1457 },
1458 else => {1458 else => {
1459 print("{}\nThe following command crashed:\n", .{result.stderr});1459 print("{s}\nThe following command crashed:\n", .{result.stderr});
1460 dumpArgs(args);1460 dumpArgs(args);
1461 return error.ChildCrashed;1461 return error.ChildCrashed;
1462 },1462 },
...@@ -1471,7 +1471,7 @@ fn getBuiltinCode(allocator: *mem.Allocator, env_map: *std.BufMap, zig_exe: []co...@@ -1471,7 +1471,7 @@ fn getBuiltinCode(allocator: *mem.Allocator, env_map: *std.BufMap, zig_exe: []co
14711471
1472fn dumpArgs(args: []const []const u8) void {1472fn dumpArgs(args: []const []const u8) void {
1473 for (args) |arg|1473 for (args) |arg|
1474 print("{} ", .{arg})1474 print("{s} ", .{arg})
1475 else1475 else
1476 print("\n", .{});1476 print("\n", .{});
1477}1477}
doc/langref.html.in+21-21
...@@ -236,7 +236,7 @@ const std = @import("std");...@@ -236,7 +236,7 @@ const std = @import("std");
236236
237pub fn main() !void {237pub fn main() !void {
238 const stdout = std.io.getStdOut().writer();238 const stdout = std.io.getStdOut().writer();
239 try stdout.print("Hello, {}!\n", .{"world"});239 try stdout.print("Hello, {s}!\n", .{"world"});
240}240}
241 {#code_end#}241 {#code_end#}
242 <p>242 <p>
...@@ -308,7 +308,7 @@ pub fn main() !void {...@@ -308,7 +308,7 @@ pub fn main() !void {
308 multiple arguments passed to a function, they are separated by commas <code>,</code>.308 multiple arguments passed to a function, they are separated by commas <code>,</code>.
309 </p>309 </p>
310 <p>310 <p>
311 The two arguments passed to the <code>stdout.print()</code> function, <code>"Hello, {}!\n"</code>311 The two arguments passed to the <code>stdout.print()</code> function, <code>"Hello, {s}!\n"</code>
312 and <code>.{"world"}</code>, are evaluated at {#link|compile-time|comptime#}. The code sample is312 and <code>.{"world"}</code>, are evaluated at {#link|compile-time|comptime#}. The code sample is
313 purposely written to show how to perform {#link|string|String Literals and Character Literals#}313 purposely written to show how to perform {#link|string|String Literals and Character Literals#}
314 substitution in the <code>print</code> function. The curly-braces inside of the first argument314 substitution in the <code>print</code> function. The curly-braces inside of the first argument
...@@ -435,7 +435,7 @@ pub fn main() void {...@@ -435,7 +435,7 @@ pub fn main() void {
435 var optional_value: ?[]const u8 = null;435 var optional_value: ?[]const u8 = null;
436 assert(optional_value == null);436 assert(optional_value == null);
437437
438 print("\noptional 1\ntype: {}\nvalue: {}\n", .{438 print("\noptional 1\ntype: {s}\nvalue: {s}\n", .{
439 @typeName(@TypeOf(optional_value)),439 @typeName(@TypeOf(optional_value)),
440 optional_value,440 optional_value,
441 });441 });
...@@ -443,7 +443,7 @@ pub fn main() void {...@@ -443,7 +443,7 @@ pub fn main() void {
443 optional_value = "hi";443 optional_value = "hi";
444 assert(optional_value != null);444 assert(optional_value != null);
445445
446 print("\noptional 2\ntype: {}\nvalue: {}\n", .{446 print("\noptional 2\ntype: {s}\nvalue: {s}\n", .{
447 @typeName(@TypeOf(optional_value)),447 @typeName(@TypeOf(optional_value)),
448 optional_value,448 optional_value,
449 });449 });
...@@ -451,14 +451,14 @@ pub fn main() void {...@@ -451,14 +451,14 @@ pub fn main() void {
451 // error union451 // error union
452 var number_or_error: anyerror!i32 = error.ArgNotFound;452 var number_or_error: anyerror!i32 = error.ArgNotFound;
453453
454 print("\nerror union 1\ntype: {}\nvalue: {}\n", .{454 print("\nerror union 1\ntype: {s}\nvalue: {}\n", .{
455 @typeName(@TypeOf(number_or_error)),455 @typeName(@TypeOf(number_or_error)),
456 number_or_error,456 number_or_error,
457 });457 });
458458
459 number_or_error = 1234;459 number_or_error = 1234;
460460
461 print("\nerror union 2\ntype: {}\nvalue: {}\n", .{461 print("\nerror union 2\ntype: {s}\nvalue: {}\n", .{
462 @typeName(@TypeOf(number_or_error)),462 @typeName(@TypeOf(number_or_error)),
463 number_or_error,463 number_or_error,
464 });464 });
...@@ -2339,7 +2339,7 @@ test "using slices for strings" {...@@ -2339,7 +2339,7 @@ test "using slices for strings" {
2339 // You can use slice syntax on an array to convert an array into a slice.2339 // You can use slice syntax on an array to convert an array into a slice.
2340 const all_together_slice = all_together[0..];2340 const all_together_slice = all_together[0..];
2341 // String concatenation example.2341 // String concatenation example.
2342 const hello_world = try fmt.bufPrint(all_together_slice, "{} {}", .{ hello, world });2342 const hello_world = try fmt.bufPrint(all_together_slice, "{s} {s}", .{ hello, world });
23432343
2344 // Generally, you can use UTF-8 and not worry about whether something is a2344 // Generally, you can use UTF-8 and not worry about whether something is a
2345 // string. If you don't need to deal with individual characters, no need2345 // string. If you don't need to deal with individual characters, no need
...@@ -2772,9 +2772,9 @@ const std = @import("std");...@@ -2772,9 +2772,9 @@ const std = @import("std");
27722772
2773pub fn main() void {2773pub fn main() void {
2774 const Foo = struct {};2774 const Foo = struct {};
2775 std.debug.print("variable: {}\n", .{@typeName(Foo)});2775 std.debug.print("variable: {s}\n", .{@typeName(Foo)});
2776 std.debug.print("anonymous: {}\n", .{@typeName(struct {})});2776 std.debug.print("anonymous: {s}\n", .{@typeName(struct {})});
2777 std.debug.print("function: {}\n", .{@typeName(List(i32))});2777 std.debug.print("function: {s}\n", .{@typeName(List(i32))});
2778}2778}
27792779
2780fn List(comptime T: type) type {2780fn List(comptime T: type) type {
...@@ -6110,7 +6110,7 @@ const a_number: i32 = 1234;...@@ -6110,7 +6110,7 @@ const a_number: i32 = 1234;
6110const a_string = "foobar";6110const a_string = "foobar";
61116111
6112pub fn main() void {6112pub fn main() void {
6113 print("here is a string: '{}' here is a number: {}\n", .{a_string, a_number});6113 print("here is a string: '{s}' here is a number: {}\n", .{a_string, a_number});
6114}6114}
6115 {#code_end#}6115 {#code_end#}
61166116
...@@ -6230,7 +6230,7 @@ const a_number: i32 = 1234;...@@ -6230,7 +6230,7 @@ const a_number: i32 = 1234;
6230const a_string = "foobar";6230const a_string = "foobar";
62316231
6232test "printf too many arguments" {6232test "printf too many arguments" {
6233 print("here is a string: '{}' here is a number: {}\n", .{6233 print("here is a string: '{s}' here is a number: {}\n", .{
6234 a_string,6234 a_string,
6235 a_number,6235 a_number,
6236 a_number,6236 a_number,
...@@ -6249,7 +6249,7 @@ const print = @import("std").debug.print;...@@ -6249,7 +6249,7 @@ const print = @import("std").debug.print;
62496249
6250const a_number: i32 = 1234;6250const a_number: i32 = 1234;
6251const a_string = "foobar";6251const a_string = "foobar";
6252const fmt = "here is a string: '{}' here is a number: {}\n";6252const fmt = "here is a string: '{s}' here is a number: {}\n";
62536253
6254pub fn main() void {6254pub fn main() void {
6255 print(fmt, .{a_string, a_number});6255 print(fmt, .{a_string, a_number});
...@@ -6720,8 +6720,8 @@ fn amain() !void {...@@ -6720,8 +6720,8 @@ fn amain() !void {
6720 const download_text = try await download_frame;6720 const download_text = try await download_frame;
6721 defer allocator.free(download_text);6721 defer allocator.free(download_text);
67226722
6723 std.debug.print("download_text: {}\n", .{download_text});6723 std.debug.print("download_text: {s}\n", .{download_text});
6724 std.debug.print("file_text: {}\n", .{file_text});6724 std.debug.print("file_text: {s}\n", .{file_text});
6725}6725}
67266726
6727var global_download_frame: anyframe = undefined;6727var global_download_frame: anyframe = undefined;
...@@ -6790,8 +6790,8 @@ fn amain() !void {...@@ -6790,8 +6790,8 @@ fn amain() !void {
6790 const download_text = try await download_frame;6790 const download_text = try await download_frame;
6791 defer allocator.free(download_text);6791 defer allocator.free(download_text);
67926792
6793 std.debug.print("download_text: {}\n", .{download_text});6793 std.debug.print("download_text: {s}\n", .{download_text});
6794 std.debug.print("file_text: {}\n", .{file_text});6794 std.debug.print("file_text: {s}\n", .{file_text});
6795}6795}
67966796
6797fn fetchUrl(allocator: *Allocator, url: []const u8) ![]u8 {6797fn fetchUrl(allocator: *Allocator, url: []const u8) ![]u8 {
...@@ -8848,7 +8848,7 @@ pub fn main() !void {...@@ -8848,7 +8848,7 @@ pub fn main() !void {
8848 var byte: u8 = 255;8848 var byte: u8 = 255;
88498849
8850 byte = if (math.add(u8, byte, 1)) |result| result else |err| {8850 byte = if (math.add(u8, byte, 1)) |result| result else |err| {
8851 print("unable to add one: {}\n", .{@errorName(err)});8851 print("unable to add one: {s}\n", .{@errorName(err)});
8852 return err;8852 return err;
8853 };8853 };
88548854
...@@ -9078,7 +9078,7 @@ pub fn main() void {...@@ -9078,7 +9078,7 @@ pub fn main() void {
9078 if (result) |number| {9078 if (result) |number| {
9079 print("got number: {}\n", .{number});9079 print("got number: {}\n", .{number});
9080 } else |err| {9080 } else |err| {
9081 print("got error: {}\n", .{@errorName(err)});9081 print("got error: {s}\n", .{@errorName(err)});
9082 }9082 }
9083}9083}
90849084
...@@ -9135,7 +9135,7 @@ const Foo = enum {...@@ -9135,7 +9135,7 @@ const Foo = enum {
9135pub fn main() void {9135pub fn main() void {
9136 var a: u2 = 3;9136 var a: u2 = 3;
9137 var b = @intToEnum(Foo, a);9137 var b = @intToEnum(Foo, a);
9138 std.debug.print("value: {}\n", .{@tagName(b)});9138 std.debug.print("value: {s}\n", .{@tagName(b)});
9139}9139}
9140 {#code_end#}9140 {#code_end#}
9141 {#header_close#}9141 {#header_close#}
...@@ -10025,7 +10025,7 @@ pub fn main() !void {...@@ -10025,7 +10025,7 @@ pub fn main() !void {
10025 defer std.process.argsFree(gpa, args);10025 defer std.process.argsFree(gpa, args);
1002610026
10027 for (args) |arg, i| {10027 for (args) |arg, i| {
10028 std.debug.print("{}: {}\n", .{ i, arg });10028 std.debug.print("{}: {s}\n", .{ i, arg });
10029 }10029 }
10030}10030}
10031 {#code_end#}10031 {#code_end#}
lib/std/testing.zig+1-2
...@@ -29,8 +29,7 @@ pub var zig_exe_path: []const u8 = undefined;...@@ -29,8 +29,7 @@ pub var zig_exe_path: []const u8 = undefined;
29/// and then aborts when actual_error_union is not expected_error.29/// and then aborts when actual_error_union is not expected_error.
30pub fn expectError(expected_error: anyerror, actual_error_union: anytype) void {30pub fn expectError(expected_error: anyerror, actual_error_union: anytype) void {
31 if (actual_error_union) |actual_payload| {31 if (actual_error_union) |actual_payload| {
32 // std.debug.panic("expected error.{s}, found {}", .{ @errorName(expected_error), actual_payload });32 std.debug.panic("expected error.{s}, found {}", .{ @errorName(expected_error), actual_payload });
33 std.debug.panic("expected error.{s}, found", .{@errorName(expected_error)});
34 } else |actual_error| {33 } else |actual_error| {
35 if (expected_error != actual_error) {34 if (expected_error != actual_error) {
36 std.debug.panic("expected error.{s}, found error.{s}", .{35 std.debug.panic("expected error.{s}, found error.{s}", .{
src/astgen.zig+3-3
...@@ -560,14 +560,14 @@ fn varDecl(...@@ -560,14 +560,14 @@ fn varDecl(
560 .local_val => {560 .local_val => {
561 const local_val = s.cast(Scope.LocalVal).?;561 const local_val = s.cast(Scope.LocalVal).?;
562 if (mem.eql(u8, local_val.name, ident_name)) {562 if (mem.eql(u8, local_val.name, ident_name)) {
563 return mod.fail(scope, name_src, "redefinition of '{}'", .{ident_name});563 return mod.fail(scope, name_src, "redefinition of '{s}'", .{ident_name});
564 }564 }
565 s = local_val.parent;565 s = local_val.parent;
566 },566 },
567 .local_ptr => {567 .local_ptr => {
568 const local_ptr = s.cast(Scope.LocalPtr).?;568 const local_ptr = s.cast(Scope.LocalPtr).?;
569 if (mem.eql(u8, local_ptr.name, ident_name)) {569 if (mem.eql(u8, local_ptr.name, ident_name)) {
570 return mod.fail(scope, name_src, "redefinition of '{}'", .{ident_name});570 return mod.fail(scope, name_src, "redefinition of '{s}'", .{ident_name});
571 }571 }
572 s = local_ptr.parent;572 s = local_ptr.parent;
573 },573 },
...@@ -578,7 +578,7 @@ fn varDecl(...@@ -578,7 +578,7 @@ fn varDecl(
578578
579 // Namespace vars shadowing detection579 // Namespace vars shadowing detection
580 if (mod.lookupDeclName(scope, ident_name)) |_| {580 if (mod.lookupDeclName(scope, ident_name)) |_| {
581 return mod.fail(scope, name_src, "redefinition of '{}'", .{ident_name});581 return mod.fail(scope, name_src, "redefinition of '{s}'", .{ident_name});
582 }582 }
583 const init_node = node.getInitNode() orelse583 const init_node = node.getInitNode() orelse
584 return mod.fail(scope, name_src, "variables must be initialized", .{});584 return mod.fail(scope, name_src, "variables must be initialized", .{});
src/link/MachO.zig+1-1
...@@ -620,7 +620,7 @@ fn linkWithLLD(self: *MachO, comp: *Compilation) !void {...@@ -620,7 +620,7 @@ fn linkWithLLD(self: *MachO, comp: *Compilation) !void {
620 try argv.append(cur_vers);620 try argv.append(cur_vers);
621 }621 }
622622
623 const dylib_install_name = try std.fmt.allocPrint(arena, "@rpath/{}", .{self.base.options.emit.?.sub_path});623 const dylib_install_name = try std.fmt.allocPrint(arena, "@rpath/{s}", .{self.base.options.emit.?.sub_path});
624 try argv.append("-install_name");624 try argv.append("-install_name");
625 try argv.append(dylib_install_name);625 try argv.append(dylib_install_name);
626 }626 }