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;
11591159
11601160 let payloadHtml = "@";
11611161 switch (expr.builtin.name) {
1162
11631162 case "align_of": {
11641163 payloadHtml += "alignOf";
11651164 break;
......@@ -1264,6 +1263,29 @@ var zigAnalysis;
12641263 payloadHtml += "frameSize";
12651264 break;
12661265 }
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 }
12671289 default: console.log("builtin function not handled yet or doesn't exist!");
12681290 };
12691291 return payloadHtml + "(" + param + ")";
......@@ -1325,22 +1347,6 @@ var zigAnalysis;
13251347 payloadHtml += "hasField";
13261348 break;
13271349 }
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 }
13441350 case "bit_reverse": {
13451351 payloadHtml += "bitReverse";
13461352 break;
......@@ -1389,6 +1395,22 @@ var zigAnalysis;
13891395 payloadHtml += "Vector";
13901396 break;
13911397 }
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 }
13921414 default: console.log("builtin function not handled yet or doesn't exist!");
13931415 };
13941416 return payloadHtml + "(" + lhs + ", " + rhs + ")";
......@@ -1610,6 +1632,9 @@ var zigAnalysis;
16101632 case "float": {
16111633 return "" + expr.float.toFixed(2);
16121634 }
1635 case "float128": {
1636 return "" + expr.float128.toFixed(2);
1637 }
16131638 case "undefined": {
16141639 return "undefined";
16151640 }
src/Autodoc.zig+49-27
......@@ -653,7 +653,12 @@ const DocData = struct {
653653 value: usize, // direct value
654654 negated: bool = false,
655655 },
656 int_big: struct {
657 value: []const u8, // direct value
658 negated: bool = false,
659 },
656660 float: f64, // direct value
661 float128: f128, // direct value
657662 array: []usize, // index in `exprs`
658663 call: usize, // index in `calls`
659664 enumLiteral: []const u8, // direct value
......@@ -740,11 +745,22 @@ const DocData = struct {
740745 \\{{ "int": {s}{} }}
741746 , .{ neg, v.value });
742747 },
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 },
743754 .float => |v| {
744755 try w.print(
745756 \\{{ "float": {} }}
746757 , .{v});
747758 },
759 .float128 => |v| {
760 try w.print(
761 \\{{ "float128": {} }}
762 , .{v});
763 },
748764 .bool => |v| {
749765 try w.print(
750766 \\{{ "bool":{} }}
......@@ -1048,6 +1064,18 @@ fn walkInstruction(
10481064 .expr = .{ .int = .{ .value = int } },
10491065 };
10501066 },
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
10521080 .slice_start => {
10531081 const pl_node = data[inst_index].pl_node;
......@@ -1231,6 +1259,12 @@ fn walkInstruction(
12311259 .type_name,
12321260 .frame_type,
12331261 .frame_size,
1262 .ptr_to_int,
1263 .error_to_int,
1264 .int_to_error,
1265 .minimum,
1266 .maximum,
1267 .bit_not,
12341268 => {
12351269 const un_node = data[inst_index].un_node;
12361270 const bin_index = self.exprs.items.len;
......@@ -1247,8 +1281,7 @@ fn walkInstruction(
12471281 .expr = .{ .builtinIndex = bin_index },
12481282 };
12491283 },
1250 // @check
1251 // .clz, .ctz, .pop_count, .byte_swap, .bit_reverse
1284
12521285 .float_to_int,
12531286 .int_to_float,
12541287 .int_to_ptr,
......@@ -1270,6 +1303,11 @@ fn walkInstruction(
12701303 .shr_exact,
12711304 .bitcast,
12721305 .vector_type,
1306 // @check
1307 .bit_offset_of,
1308 .offset_of,
1309 .splat,
1310 .reduce,
12731311 => {
12741312 const pl_node = data[inst_index].pl_node;
12751313 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
......@@ -1518,14 +1556,6 @@ fn walkInstruction(
15181556 array_data[idx] = wr.expr.as.exprArg;
15191557 }
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.
15291559 const type_slot_index = self.types.items.len;
15301560 try self.types.append(self.arena, .{ .Pointer = .{
15311561 .size = .Slice,
......@@ -1721,6 +1751,15 @@ fn walkInstruction(
17211751 .expr = .{ .float = float },
17221752 };
17231753 },
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 },
17241763 .negate => {
17251764 const un_node = data[inst_index].un_node;
17261765 var operand: DocData.WalkResult = try self.walkRef(
......@@ -2018,23 +2057,6 @@ fn walkInstruction(
20182057 .expr = .{ .type = self.types.items.len - 1 },
20192058 };
20202059 },
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 },
20382060 .block => {
20392061 const res = DocData.WalkResult{ .expr = .{
20402062 .comptimeExpr = self.comptime_exprs.items.len,