authorgravatar for vallahor91@gmail.comVallahor <vallahor91@gmail.com> 2022-06-03 00:53:20-03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-19 19:10:12-07:00
log5e52666c83e667c452c9ba0c1c69df68b5492a34
treed3789771c86a15d3080b4f888ae3982c8301ed4e
parent9613aca417e5cc97ee17bc3f4e5036a8438e7673

autodoc: add some builtin functions and float128


2 files changed, 91 insertions(+), 44 deletions(-)

lib/docs/main.js+42-17
...@@ -1159,7 +1159,6 @@ var zigAnalysis;...@@ -1159,7 +1159,6 @@ var zigAnalysis;
11591159
1160 let payloadHtml = "@";1160 let payloadHtml = "@";
1161 switch (expr.builtin.name) {1161 switch (expr.builtin.name) {
1162
1163 case "align_of": {1162 case "align_of": {
1164 payloadHtml += "alignOf";1163 payloadHtml += "alignOf";
1165 break;1164 break;
...@@ -1264,6 +1263,29 @@ var zigAnalysis;...@@ -1264,6 +1263,29 @@ var zigAnalysis;
1264 payloadHtml += "frameSize";1263 payloadHtml += "frameSize";
1265 break;1264 break;
1266 }1265 }
1266 case "ptr_to_int": {
1267 payloadHtml += "ptrToInt";
1268 break;
1269 }
1270 case "error_to_int": {
1271 payloadHtml += "errorToInt";
1272 break;
1273 }
1274 case "int_to_error": {
1275 payloadHtml += "intToError";
1276 break;
1277 }
1278 case "maximum": {
1279 payloadHtml += "maximum";
1280 break;
1281 }
1282 case "minimum": {
1283 payloadHtml += "minimum";
1284 break;
1285 }
1286 case "bit_not": {
1287 return "~" + param;
1288 }
1267 default: console.log("builtin function not handled yet or doesn't exist!");1289 default: console.log("builtin function not handled yet or doesn't exist!");
1268 };1290 };
1269 return payloadHtml + "(" + param + ")";1291 return payloadHtml + "(" + param + ")";
...@@ -1325,22 +1347,6 @@ var zigAnalysis;...@@ -1325,22 +1347,6 @@ var zigAnalysis;
1325 payloadHtml += "hasField";1347 payloadHtml += "hasField";
1326 break;1348 break;
1327 }1349 }
1328 case "clz": {
1329 payloadHtml += "clz";
1330 break;
1331 }
1332 case "ctz": {
1333 payloadHtml += "ctz";
1334 break;
1335 }
1336 case "pop_count": {
1337 payloadHtml += "popCount";
1338 break;
1339 }
1340 case "byte_swap": {
1341 payloadHtml += "byteSwap";
1342 break;
1343 }
1344 case "bit_reverse": {1350 case "bit_reverse": {
1345 payloadHtml += "bitReverse";1351 payloadHtml += "bitReverse";
1346 break;1352 break;
...@@ -1389,6 +1395,22 @@ var zigAnalysis;...@@ -1389,6 +1395,22 @@ var zigAnalysis;
1389 payloadHtml += "Vector"; 1395 payloadHtml += "Vector";
1390 break;1396 break;
1391 }1397 }
1398 case "reduce": {
1399 payloadHtml += "reduce";
1400 break;
1401 }
1402 case "splat": {
1403 payloadHtml += "splat";
1404 break;
1405 }
1406 case "offset_of": {
1407 payloadHtml += "offsetOf";
1408 break;
1409 }
1410 case "bit_offset_of": {
1411 payloadHtml += "bitOffsetOf";
1412 break;
1413 }
1392 default: console.log("builtin function not handled yet or doesn't exist!");1414 default: console.log("builtin function not handled yet or doesn't exist!");
1393 };1415 };
1394 return payloadHtml + "(" + lhs + ", " + rhs + ")";1416 return payloadHtml + "(" + lhs + ", " + rhs + ")";
...@@ -1610,6 +1632,9 @@ var zigAnalysis;...@@ -1610,6 +1632,9 @@ var zigAnalysis;
1610 case "float": {1632 case "float": {
1611 return "" + expr.float.toFixed(2);1633 return "" + expr.float.toFixed(2);
1612 }1634 }
1635 case "float128": {
1636 return "" + expr.float128.toFixed(2);
1637 }
1613 case "undefined": {1638 case "undefined": {
1614 return "undefined";1639 return "undefined";
1615 }1640 }
src/Autodoc.zig+49-27
...@@ -653,7 +653,12 @@ const DocData = struct {...@@ -653,7 +653,12 @@ const DocData = struct {
653 value: usize, // direct value653 value: usize, // direct value
654 negated: bool = false,654 negated: bool = false,
655 },655 },
656 int_big: struct {
657 value: []const u8, // direct value
658 negated: bool = false,
659 },
656 float: f64, // direct value660 float: f64, // direct value
661 float128: f128, // direct value
657 array: []usize, // index in `exprs`662 array: []usize, // index in `exprs`
658 call: usize, // index in `calls`663 call: usize, // index in `calls`
659 enumLiteral: []const u8, // direct value664 enumLiteral: []const u8, // direct value
...@@ -740,11 +745,22 @@ const DocData = struct {...@@ -740,11 +745,22 @@ const DocData = struct {
740 \\{{ "int": {s}{} }}745 \\{{ "int": {s}{} }}
741 , .{ neg, v.value });746 , .{ neg, v.value });
742 },747 },
748 .int_big => |v| {
749 const neg = if (v.negated) "-" else "";
750 try w.print(
751 \\{{ "int_big": {s}{s} }}
752 , .{ neg, v.value });
753 },
743 .float => |v| {754 .float => |v| {
744 try w.print(755 try w.print(
745 \\{{ "float": {} }}756 \\{{ "float": {} }}
746 , .{v});757 , .{v});
747 },758 },
759 .float128 => |v| {
760 try w.print(
761 \\{{ "float128": {} }}
762 , .{v});
763 },
748 .bool => |v| {764 .bool => |v| {
749 try w.print(765 try w.print(
750 \\{{ "bool":{} }}766 \\{{ "bool":{} }}
...@@ -1048,6 +1064,18 @@ fn walkInstruction(...@@ -1048,6 +1064,18 @@ fn walkInstruction(
1048 .expr = .{ .int = .{ .value = int } },1064 .expr = .{ .int = .{ .value = int } },
1049 };1065 };
1050 },1066 },
1067 .int_big => {
1068 // @check
1069 const str = data[inst_index].str.get(file.zir);
1070 _ = str;
1071 printWithContext(
1072 file,
1073 inst_index,
1074 "TODO: implement `{s}` for walkInstruction\n\n",
1075 .{@tagName(tags[inst_index])},
1076 );
1077 return self.cteTodo(@tagName(tags[inst_index]));
1078 },
10511079
1052 .slice_start => {1080 .slice_start => {
1053 const pl_node = data[inst_index].pl_node;1081 const pl_node = data[inst_index].pl_node;
...@@ -1231,6 +1259,12 @@ fn walkInstruction(...@@ -1231,6 +1259,12 @@ fn walkInstruction(
1231 .type_name,1259 .type_name,
1232 .frame_type,1260 .frame_type,
1233 .frame_size,1261 .frame_size,
1262 .ptr_to_int,
1263 .error_to_int,
1264 .int_to_error,
1265 .minimum,
1266 .maximum,
1267 .bit_not,
1234 => {1268 => {
1235 const un_node = data[inst_index].un_node;1269 const un_node = data[inst_index].un_node;
1236 const bin_index = self.exprs.items.len;1270 const bin_index = self.exprs.items.len;
...@@ -1247,8 +1281,7 @@ fn walkInstruction(...@@ -1247,8 +1281,7 @@ fn walkInstruction(
1247 .expr = .{ .builtinIndex = bin_index },1281 .expr = .{ .builtinIndex = bin_index },
1248 };1282 };
1249 },1283 },
1250 // @check1284
1251 // .clz, .ctz, .pop_count, .byte_swap, .bit_reverse
1252 .float_to_int,1285 .float_to_int,
1253 .int_to_float,1286 .int_to_float,
1254 .int_to_ptr,1287 .int_to_ptr,
...@@ -1270,6 +1303,11 @@ fn walkInstruction(...@@ -1270,6 +1303,11 @@ fn walkInstruction(
1270 .shr_exact,1303 .shr_exact,
1271 .bitcast,1304 .bitcast,
1272 .vector_type,1305 .vector_type,
1306 // @check
1307 .bit_offset_of,
1308 .offset_of,
1309 .splat,
1310 .reduce,
1273 => {1311 => {
1274 const pl_node = data[inst_index].pl_node;1312 const pl_node = data[inst_index].pl_node;
1275 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);1313 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
...@@ -1518,14 +1556,6 @@ fn walkInstruction(...@@ -1518,14 +1556,6 @@ fn walkInstruction(
1518 array_data[idx] = wr.expr.as.exprArg;1556 array_data[idx] = wr.expr.as.exprArg;
1519 }1557 }
15201558
1521 // @check
1522 // not working with
1523 // const value_slice_float = []f32{42.0};
1524 // const value_slice_float2: []f32 = .{42.0};
1525 // rendering [][]f32
1526 // the reason for that is it's initialized as a pointer
1527 // in this case getting the last type index works fine
1528 // but when it's not after a pointer it's thrown an error in js.
1529 const type_slot_index = self.types.items.len;1559 const type_slot_index = self.types.items.len;
1530 try self.types.append(self.arena, .{ .Pointer = .{1560 try self.types.append(self.arena, .{ .Pointer = .{
1531 .size = .Slice,1561 .size = .Slice,
...@@ -1721,6 +1751,15 @@ fn walkInstruction(...@@ -1721,6 +1751,15 @@ fn walkInstruction(
1721 .expr = .{ .float = float },1751 .expr = .{ .float = float },
1722 };1752 };
1723 },1753 },
1754 // @check: In frontend I'm handling float128 with `.toFixed(2)`
1755 .float128 => {
1756 const pl_node = data[inst_index].pl_node;
1757 const extra = file.zir.extraData(Zir.Inst.Float128, pl_node.payload_index);
1758 return DocData.WalkResult{
1759 .typeRef = .{ .type = @enumToInt(Ref.comptime_float_type) },
1760 .expr = .{ .float128 = extra.data.get() },
1761 };
1762 },
1724 .negate => {1763 .negate => {
1725 const un_node = data[inst_index].un_node;1764 const un_node = data[inst_index].un_node;
1726 var operand: DocData.WalkResult = try self.walkRef(1765 var operand: DocData.WalkResult = try self.walkRef(
...@@ -2018,23 +2057,6 @@ fn walkInstruction(...@@ -2018,23 +2057,6 @@ fn walkInstruction(
2018 .expr = .{ .type = self.types.items.len - 1 },2057 .expr = .{ .type = self.types.items.len - 1 },
2019 };2058 };
2020 },2059 },
2021 .float128 => {
2022 const pl_node = data[inst_index].pl_node;
2023 const extra = file.zir.extraData(Zir.Inst.Float128, pl_node.payload_index);
2024 _ = extra;
2025 // const sep = "=" ** 200;
2026 // std.debug.print("{s}\n", .{sep});
2027 // std.debug.print("pl_node = {any}\n", .{pl_node});
2028 // std.debug.print("extra = {any}\n", .{extra});
2029 // std.debug.print("{s}\n", .{sep});
2030 // printWithContext(
2031 // file,
2032 // inst_index,
2033 // "TODO: implement `{s}` for walkInstruction\n\n",
2034 // .{@tagName(tags[inst_index])},
2035 // );
2036 return self.cteTodo(@tagName(tags[inst_index]));
2037 },
2038 .block => {2060 .block => {
2039 const res = DocData.WalkResult{ .expr = .{2061 const res = DocData.WalkResult{ .expr = .{
2040 .comptimeExpr = self.comptime_exprs.items.len,2062 .comptimeExpr = self.comptime_exprs.items.len,