| ... | @@ -1,5 +1,5 @@ | ... | @@ -1,5 +1,5 @@ |
| 1 | const builtin = @import("builtin"); | | |
| 2 | const std = @import("std"); | 1 | const std = @import("std"); |
| | 2 | const builtin = std.builtin; |
| 3 | const io = std.io; | 3 | const io = std.io; |
| 4 | const fs = std.fs; | 4 | const fs = std.fs; |
| 5 | const process = std.process; | 5 | const process = std.process; |
| ... | @@ -521,7 +521,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { | ... | @@ -521,7 +521,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { |
| 521 | return parseError(tokenizer, code_kind_tok, "unrecognized code kind: {}", .{code_kind_str}); | 521 | return parseError(tokenizer, code_kind_tok, "unrecognized code kind: {}", .{code_kind_str}); |
| 522 | } | 522 | } |
| 523 | | 523 | |
| 524 | var mode = builtin.Mode.Debug; | 524 | var mode: builtin.Mode = .Debug; |
| 525 | var link_objects = std.ArrayList([]const u8).init(allocator); | 525 | var link_objects = std.ArrayList([]const u8).init(allocator); |
| 526 | defer link_objects.deinit(); | 526 | defer link_objects.deinit(); |
| 527 | var target_str: ?[]const u8 = null; | 527 | var target_str: ?[]const u8 = null; |
| ... | @@ -533,9 +533,9 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { | ... | @@ -533,9 +533,9 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { |
| 533 | const end_code_tag = try eatToken(tokenizer, Token.Id.TagContent); | 533 | const end_code_tag = try eatToken(tokenizer, Token.Id.TagContent); |
| 534 | const end_tag_name = tokenizer.buffer[end_code_tag.start..end_code_tag.end]; | 534 | const end_tag_name = tokenizer.buffer[end_code_tag.start..end_code_tag.end]; |
| 535 | if (mem.eql(u8, end_tag_name, "code_release_fast")) { | 535 | if (mem.eql(u8, end_tag_name, "code_release_fast")) { |
| 536 | mode = builtin.Mode.ReleaseFast; | 536 | mode = .ReleaseFast; |
| 537 | } else if (mem.eql(u8, end_tag_name, "code_release_safe")) { | 537 | } else if (mem.eql(u8, end_tag_name, "code_release_safe")) { |
| 538 | mode = builtin.Mode.ReleaseSafe; | 538 | mode = .ReleaseSafe; |
| 539 | } else if (mem.eql(u8, end_tag_name, "code_link_object")) { | 539 | } else if (mem.eql(u8, end_tag_name, "code_link_object")) { |
| 540 | _ = try eatToken(tokenizer, Token.Id.Separator); | 540 | _ = try eatToken(tokenizer, Token.Id.Separator); |
| 541 | const obj_tok = try eatToken(tokenizer, Token.Id.TagContent); | 541 | const obj_tok = try eatToken(tokenizer, Token.Id.TagContent); |
| ... | @@ -1001,30 +1001,30 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var | ... | @@ -1001,30 +1001,30 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var |
| 1001 | | 1001 | |
| 1002 | for (toc.nodes) |node| { | 1002 | for (toc.nodes) |node| { |
| 1003 | switch (node) { | 1003 | switch (node) { |
| 1004 | Node.Content => |data| { | 1004 | .Content => |data| { |
| 1005 | try out.write(data); | 1005 | try out.write(data); |
| 1006 | }, | 1006 | }, |
| 1007 | Node.Link => |info| { | 1007 | .Link => |info| { |
| 1008 | if (!toc.urls.contains(info.url)) { | 1008 | if (!toc.urls.contains(info.url)) { |
| 1009 | return parseError(tokenizer, info.token, "url not found: {}", .{info.url}); | 1009 | return parseError(tokenizer, info.token, "url not found: {}", .{info.url}); |
| 1010 | } | 1010 | } |
| 1011 | try out.print("<a href=\"#{}\">{}</a>", .{ info.url, info.name }); | 1011 | try out.print("<a href=\"#{}\">{}</a>", .{ info.url, info.name }); |
| 1012 | }, | 1012 | }, |
| 1013 | Node.Nav => { | 1013 | .Nav => { |
| 1014 | try out.write(toc.toc); | 1014 | try out.write(toc.toc); |
| 1015 | }, | 1015 | }, |
| 1016 | Node.Builtin => |tok| { | 1016 | .Builtin => |tok| { |
| 1017 | try out.write("<pre>"); | 1017 | try out.write("<pre>"); |
| 1018 | try tokenizeAndPrintRaw(tokenizer, out, tok, builtin_code); | 1018 | try tokenizeAndPrintRaw(tokenizer, out, tok, builtin_code); |
| 1019 | try out.write("</pre>"); | 1019 | try out.write("</pre>"); |
| 1020 | }, | 1020 | }, |
| 1021 | Node.HeaderOpen => |info| { | 1021 | .HeaderOpen => |info| { |
| 1022 | try out.print( | 1022 | try out.print( |
| 1023 | "<h{} id=\"{}\"><a href=\"#toc-{}\">{}</a> <a class=\"hdr\" href=\"#{}\">§</a></h{}>\n", | 1023 | "<h{} id=\"{}\"><a href=\"#toc-{}\">{}</a> <a class=\"hdr\" href=\"#{}\">§</a></h{}>\n", |
| 1024 | .{ info.n, info.url, info.url, info.name, info.url, info.n }, | 1024 | .{ info.n, info.url, info.url, info.name, info.url, info.n }, |
| 1025 | ); | 1025 | ); |
| 1026 | }, | 1026 | }, |
| 1027 | Node.SeeAlso => |items| { | 1027 | .SeeAlso => |items| { |
| 1028 | try out.write("<p>See also:</p><ul>\n"); | 1028 | try out.write("<p>See also:</p><ul>\n"); |
| 1029 | for (items) |item| { | 1029 | for (items) |item| { |
| 1030 | const url = try urlize(allocator, item.name); | 1030 | const url = try urlize(allocator, item.name); |
| ... | @@ -1035,10 +1035,10 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var | ... | @@ -1035,10 +1035,10 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var |
| 1035 | } | 1035 | } |
| 1036 | try out.write("</ul>\n"); | 1036 | try out.write("</ul>\n"); |
| 1037 | }, | 1037 | }, |
| 1038 | Node.Syntax => |content_tok| { | 1038 | .Syntax => |content_tok| { |
| 1039 | try tokenizeAndPrint(tokenizer, out, content_tok); | 1039 | try tokenizeAndPrint(tokenizer, out, content_tok); |
| 1040 | }, | 1040 | }, |
| 1041 | Node.Code => |code| { | 1041 | .Code => |code| { |
| 1042 | code_progress_index += 1; | 1042 | code_progress_index += 1; |
| 1043 | warn("docgen example code {}/{}...", .{ code_progress_index, tokenizer.code_node_count }); | 1043 | warn("docgen example code {}/{}...", .{ code_progress_index, tokenizer.code_node_count }); |
| 1044 | | 1044 | |
| ... | @@ -1075,16 +1075,16 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var | ... | @@ -1075,16 +1075,16 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var |
| 1075 | }); | 1075 | }); |
| 1076 | try out.print("<pre><code class=\"shell\">$ zig build-exe {}.zig", .{code.name}); | 1076 | try out.print("<pre><code class=\"shell\">$ zig build-exe {}.zig", .{code.name}); |
| 1077 | switch (code.mode) { | 1077 | switch (code.mode) { |
| 1078 | builtin.Mode.Debug => {}, | 1078 | .Debug => {}, |
| 1079 | builtin.Mode.ReleaseSafe => { | 1079 | .ReleaseSafe => { |
| 1080 | try build_args.append("--release-safe"); | 1080 | try build_args.append("--release-safe"); |
| 1081 | try out.print(" --release-safe", .{}); | 1081 | try out.print(" --release-safe", .{}); |
| 1082 | }, | 1082 | }, |
| 1083 | builtin.Mode.ReleaseFast => { | 1083 | .ReleaseFast => { |
| 1084 | try build_args.append("--release-fast"); | 1084 | try build_args.append("--release-fast"); |
| 1085 | try out.print(" --release-fast", .{}); | 1085 | try out.print(" --release-fast", .{}); |
| 1086 | }, | 1086 | }, |
| 1087 | builtin.Mode.ReleaseSmall => { | 1087 | .ReleaseSmall => { |
| 1088 | try build_args.append("--release-small"); | 1088 | try build_args.append("--release-small"); |
| 1089 | try out.print(" --release-small", .{}); | 1089 | try out.print(" --release-small", .{}); |
| 1090 | }, | 1090 | }, |
| ... | @@ -1142,13 +1142,14 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var | ... | @@ -1142,13 +1142,14 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var |
| 1142 | try out.print("\n{}</code></pre>\n", .{colored_stderr}); | 1142 | try out.print("\n{}</code></pre>\n", .{colored_stderr}); |
| 1143 | break :code_block; | 1143 | break :code_block; |
| 1144 | } | 1144 | } |
| 1145 | const exec_result = exec(allocator, &env_map, build_args.toSliceConst()) catch return parseError(tokenizer, code.source_token, "example failed to compile", .{}); | 1145 | const exec_result = exec(allocator, &env_map, build_args.toSliceConst()) catch |
| | 1146 | return parseError(tokenizer, code.source_token, "example failed to compile", .{}); |
| 1146 | | 1147 | |
| 1147 | if (code.target_str) |triple| { | 1148 | if (code.target_str) |triple| { |
| 1148 | if (mem.startsWith(u8, triple, "wasm32") or | 1149 | if ((mem.startsWith(u8, triple, "wasm32") or |
| 1149 | mem.startsWith(u8, triple, "riscv64-linux") or | 1150 | mem.startsWith(u8, triple, "riscv64-linux") or |
| 1150 | mem.startsWith(u8, triple, "x86_64-linux") and | 1151 | mem.startsWith(u8, triple, "x86_64-linux")) and |
| 1151 | (builtin.os != .linux or builtin.arch != .x86_64)) | 1152 | (std.Target.current.os.tag != .linux or std.Target.current.cpu.arch != .x86_64)) |
| 1152 | { | 1153 | { |
| 1153 | // skip execution | 1154 | // skip execution |
| 1154 | try out.print("</code></pre>\n", .{}); | 1155 | try out.print("</code></pre>\n", .{}); |
| ... | @@ -1207,16 +1208,16 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var | ... | @@ -1207,16 +1208,16 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var |
| 1207 | }); | 1208 | }); |
| 1208 | try out.print("<pre><code class=\"shell\">$ zig test {}.zig", .{code.name}); | 1209 | try out.print("<pre><code class=\"shell\">$ zig test {}.zig", .{code.name}); |
| 1209 | switch (code.mode) { | 1210 | switch (code.mode) { |
| 1210 | builtin.Mode.Debug => {}, | 1211 | .Debug => {}, |
| 1211 | builtin.Mode.ReleaseSafe => { | 1212 | .ReleaseSafe => { |
| 1212 | try test_args.append("--release-safe"); | 1213 | try test_args.append("--release-safe"); |
| 1213 | try out.print(" --release-safe", .{}); | 1214 | try out.print(" --release-safe", .{}); |
| 1214 | }, | 1215 | }, |
| 1215 | builtin.Mode.ReleaseFast => { | 1216 | .ReleaseFast => { |
| 1216 | try test_args.append("--release-fast"); | 1217 | try test_args.append("--release-fast"); |
| 1217 | try out.print(" --release-fast", .{}); | 1218 | try out.print(" --release-fast", .{}); |
| 1218 | }, | 1219 | }, |
| 1219 | builtin.Mode.ReleaseSmall => { | 1220 | .ReleaseSmall => { |
| 1220 | try test_args.append("--release-small"); | 1221 | try test_args.append("--release-small"); |
| 1221 | try out.print(" --release-small", .{}); | 1222 | try out.print(" --release-small", .{}); |
| 1222 | }, | 1223 | }, |
| ... | @@ -1249,16 +1250,16 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var | ... | @@ -1249,16 +1250,16 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var |
| 1249 | }); | 1250 | }); |
| 1250 | try out.print("<pre><code class=\"shell\">$ zig test {}.zig", .{code.name}); | 1251 | try out.print("<pre><code class=\"shell\">$ zig test {}.zig", .{code.name}); |
| 1251 | switch (code.mode) { | 1252 | switch (code.mode) { |
| 1252 | builtin.Mode.Debug => {}, | 1253 | .Debug => {}, |
| 1253 | builtin.Mode.ReleaseSafe => { | 1254 | .ReleaseSafe => { |
| 1254 | try test_args.append("--release-safe"); | 1255 | try test_args.append("--release-safe"); |
| 1255 | try out.print(" --release-safe", .{}); | 1256 | try out.print(" --release-safe", .{}); |
| 1256 | }, | 1257 | }, |
| 1257 | builtin.Mode.ReleaseFast => { | 1258 | .ReleaseFast => { |
| 1258 | try test_args.append("--release-fast"); | 1259 | try test_args.append("--release-fast"); |
| 1259 | try out.print(" --release-fast", .{}); | 1260 | try out.print(" --release-fast", .{}); |
| 1260 | }, | 1261 | }, |
| 1261 | builtin.Mode.ReleaseSmall => { | 1262 | .ReleaseSmall => { |
| 1262 | try test_args.append("--release-small"); | 1263 | try test_args.append("--release-small"); |
| 1263 | try out.print(" --release-small", .{}); | 1264 | try out.print(" --release-small", .{}); |
| 1264 | }, | 1265 | }, |
| ... | @@ -1306,16 +1307,16 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var | ... | @@ -1306,16 +1307,16 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var |
| 1306 | }); | 1307 | }); |
| 1307 | var mode_arg: []const u8 = ""; | 1308 | var mode_arg: []const u8 = ""; |
| 1308 | switch (code.mode) { | 1309 | switch (code.mode) { |
| 1309 | builtin.Mode.Debug => {}, | 1310 | .Debug => {}, |
| 1310 | builtin.Mode.ReleaseSafe => { | 1311 | .ReleaseSafe => { |
| 1311 | try test_args.append("--release-safe"); | 1312 | try test_args.append("--release-safe"); |
| 1312 | mode_arg = " --release-safe"; | 1313 | mode_arg = " --release-safe"; |
| 1313 | }, | 1314 | }, |
| 1314 | builtin.Mode.ReleaseFast => { | 1315 | .ReleaseFast => { |
| 1315 | try test_args.append("--release-fast"); | 1316 | try test_args.append("--release-fast"); |
| 1316 | mode_arg = " --release-fast"; | 1317 | mode_arg = " --release-fast"; |
| 1317 | }, | 1318 | }, |
| 1318 | builtin.Mode.ReleaseSmall => { | 1319 | .ReleaseSmall => { |
| 1319 | try test_args.append("--release-small"); | 1320 | try test_args.append("--release-small"); |
| 1320 | mode_arg = " --release-small"; | 1321 | mode_arg = " --release-small"; |
| 1321 | }, | 1322 | }, |
| ... | @@ -1386,20 +1387,20 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var | ... | @@ -1386,20 +1387,20 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var |
| 1386 | } | 1387 | } |
| 1387 | | 1388 | |
| 1388 | switch (code.mode) { | 1389 | switch (code.mode) { |
| 1389 | builtin.Mode.Debug => {}, | 1390 | .Debug => {}, |
| 1390 | builtin.Mode.ReleaseSafe => { | 1391 | .ReleaseSafe => { |
| 1391 | try build_args.append("--release-safe"); | 1392 | try build_args.append("--release-safe"); |
| 1392 | if (!code.is_inline) { | 1393 | if (!code.is_inline) { |
| 1393 | try out.print(" --release-safe", .{}); | 1394 | try out.print(" --release-safe", .{}); |
| 1394 | } | 1395 | } |
| 1395 | }, | 1396 | }, |
| 1396 | builtin.Mode.ReleaseFast => { | 1397 | .ReleaseFast => { |
| 1397 | try build_args.append("--release-fast"); | 1398 | try build_args.append("--release-fast"); |
| 1398 | if (!code.is_inline) { | 1399 | if (!code.is_inline) { |
| 1399 | try out.print(" --release-fast", .{}); | 1400 | try out.print(" --release-fast", .{}); |
| 1400 | } | 1401 | } |
| 1401 | }, | 1402 | }, |
| 1402 | builtin.Mode.ReleaseSmall => { | 1403 | .ReleaseSmall => { |
| 1403 | try build_args.append("--release-small"); | 1404 | try build_args.append("--release-small"); |
| 1404 | if (!code.is_inline) { | 1405 | if (!code.is_inline) { |
| 1405 | try out.print(" --release-small", .{}); | 1406 | try out.print(" --release-small", .{}); |
| ... | @@ -1461,16 +1462,16 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var | ... | @@ -1461,16 +1462,16 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var |
| 1461 | }); | 1462 | }); |
| 1462 | try out.print("<pre><code class=\"shell\">$ zig build-lib {}.zig", .{code.name}); | 1463 | try out.print("<pre><code class=\"shell\">$ zig build-lib {}.zig", .{code.name}); |
| 1463 | switch (code.mode) { | 1464 | switch (code.mode) { |
| 1464 | builtin.Mode.Debug => {}, | 1465 | .Debug => {}, |
| 1465 | builtin.Mode.ReleaseSafe => { | 1466 | .ReleaseSafe => { |
| 1466 | try test_args.append("--release-safe"); | 1467 | try test_args.append("--release-safe"); |
| 1467 | try out.print(" --release-safe", .{}); | 1468 | try out.print(" --release-safe", .{}); |
| 1468 | }, | 1469 | }, |
| 1469 | builtin.Mode.ReleaseFast => { | 1470 | .ReleaseFast => { |
| 1470 | try test_args.append("--release-fast"); | 1471 | try test_args.append("--release-fast"); |
| 1471 | try out.print(" --release-fast", .{}); | 1472 | try out.print(" --release-fast", .{}); |
| 1472 | }, | 1473 | }, |
| 1473 | builtin.Mode.ReleaseSmall => { | 1474 | .ReleaseSmall => { |
| 1474 | try test_args.append("--release-small"); | 1475 | try test_args.append("--release-small"); |
| 1475 | try out.print(" --release-small", .{}); | 1476 | try out.print(" --release-small", .{}); |
| 1476 | }, | 1477 | }, |