Commit 5e52666c83

Vallahor <vallahor91@gmail.com>
2022-06-03 05:53:20
autodoc: add some builtin functions and float128
1 parent 9613aca
Changed files (2)
lib
docs
src
lib/docs/main.js
@@ -1159,7 +1159,6 @@ var zigAnalysis;
 
             let payloadHtml = "@";
             switch (expr.builtin.name) {
-
               case "align_of": {
                 payloadHtml += "alignOf";
                 break;
@@ -1264,6 +1263,29 @@ var zigAnalysis;
                 payloadHtml += "frameSize";
                 break;
               }
+              case "ptr_to_int": {
+                payloadHtml += "ptrToInt";
+                break;
+              }
+              case "error_to_int": {
+                payloadHtml += "errorToInt";
+                break;
+              }
+              case "int_to_error": {
+                payloadHtml += "intToError";
+                break;
+              }
+              case "maximum": {
+                payloadHtml += "maximum";
+                break;
+              }
+              case "minimum": {
+                payloadHtml += "minimum";
+                break;
+              }
+              case "bit_not": {
+                return "~" + param;
+              }
               default: console.log("builtin function not handled yet or doesn't exist!");
             };
             return payloadHtml + "(" + param + ")";
@@ -1325,22 +1347,6 @@ var zigAnalysis;
                 payloadHtml += "hasField";
                 break;
               }
-              case "clz": {
-                payloadHtml += "clz";
-                break;
-              }
-              case "ctz": {
-                payloadHtml += "ctz";
-                break;
-              }
-              case "pop_count": {
-                payloadHtml += "popCount";
-                break;
-              }
-              case "byte_swap": {
-                payloadHtml += "byteSwap";
-                break;
-              }
               case "bit_reverse": {
                 payloadHtml += "bitReverse";
                 break;
@@ -1389,6 +1395,22 @@ var zigAnalysis;
                 payloadHtml +=  "Vector"; 
                 break;
               }
+              case "reduce": {
+                payloadHtml +=  "reduce"; 
+                break;
+              }
+              case "splat": {
+                payloadHtml +=  "splat"; 
+                break;
+              }
+              case "offset_of": {
+                payloadHtml +=  "offsetOf"; 
+                break;
+              }
+              case "bit_offset_of": {
+                payloadHtml +=  "bitOffsetOf"; 
+                break;
+              }
               default: console.log("builtin function not handled yet or doesn't exist!");
             };
             return payloadHtml + "(" + lhs + ", " + rhs + ")";
@@ -1610,6 +1632,9 @@ var zigAnalysis;
           case "float": {
               return "" + expr.float.toFixed(2);
           }
+          case "float128": {
+              return "" + expr.float128.toFixed(2);
+          }
           case "undefined": {
               return "undefined";
           }
src/Autodoc.zig
@@ -653,7 +653,12 @@ const DocData = struct {
             value: usize, // direct value
             negated: bool = false,
         },
+        int_big: struct {
+            value: []const u8, // direct value
+            negated: bool = false,
+        },
         float: f64, // direct value
+        float128: f128, // direct value
         array: []usize, // index in `exprs`
         call: usize, // index in `calls`
         enumLiteral: []const u8, // direct value
@@ -740,11 +745,22 @@ const DocData = struct {
                         \\{{ "int": {s}{} }}
                     , .{ neg, v.value });
                 },
+                .int_big => |v| {
+                    const neg = if (v.negated) "-" else "";
+                    try w.print(
+                        \\{{ "int_big": {s}{s} }}
+                    , .{ neg, v.value });
+                },
                 .float => |v| {
                     try w.print(
                         \\{{ "float": {} }}
                     , .{v});
                 },
+                .float128 => |v| {
+                    try w.print(
+                        \\{{ "float128": {} }}
+                    , .{v});
+                },
                 .bool => |v| {
                     try w.print(
                         \\{{ "bool":{} }}
@@ -1048,6 +1064,18 @@ fn walkInstruction(
                 .expr = .{ .int = .{ .value = int } },
             };
         },
+        .int_big => {
+            // @check
+            const str = data[inst_index].str.get(file.zir);
+            _ = str;
+            printWithContext(
+                file,
+                inst_index,
+                "TODO: implement `{s}` for walkInstruction\n\n",
+                .{@tagName(tags[inst_index])},
+            );
+            return self.cteTodo(@tagName(tags[inst_index]));
+        },
 
         .slice_start => {
             const pl_node = data[inst_index].pl_node;
@@ -1231,6 +1259,12 @@ fn walkInstruction(
         .type_name,
         .frame_type,
         .frame_size,
+        .ptr_to_int,
+        .error_to_int,
+        .int_to_error,
+        .minimum,
+        .maximum,
+        .bit_not,
         => {
             const un_node = data[inst_index].un_node;
             const bin_index = self.exprs.items.len;
@@ -1247,8 +1281,7 @@ fn walkInstruction(
                 .expr = .{ .builtinIndex = bin_index },
             };
         },
-        // @check
-        // .clz, .ctz, .pop_count, .byte_swap, .bit_reverse
+
         .float_to_int,
         .int_to_float,
         .int_to_ptr,
@@ -1270,6 +1303,11 @@ fn walkInstruction(
         .shr_exact,
         .bitcast,
         .vector_type,
+        // @check
+        .bit_offset_of,
+        .offset_of,
+        .splat,
+        .reduce,
         => {
             const pl_node = data[inst_index].pl_node;
             const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
@@ -1518,14 +1556,6 @@ fn walkInstruction(
                 array_data[idx] = wr.expr.as.exprArg;
             }
 
-            // @check
-            // not working with
-            // const value_slice_float = []f32{42.0};
-            // const value_slice_float2: []f32 = .{42.0};
-            // rendering [][]f32
-            // the reason for that is it's initialized as a pointer
-            // in this case getting the last type index works fine
-            // but when it's not after a pointer it's thrown an error in js.
             const type_slot_index = self.types.items.len;
             try self.types.append(self.arena, .{ .Pointer = .{
                 .size = .Slice,
@@ -1721,6 +1751,15 @@ fn walkInstruction(
                 .expr = .{ .float = float },
             };
         },
+        // @check: In frontend I'm handling float128 with `.toFixed(2)`
+        .float128 => {
+            const pl_node = data[inst_index].pl_node;
+            const extra = file.zir.extraData(Zir.Inst.Float128, pl_node.payload_index);
+            return DocData.WalkResult{
+                .typeRef = .{ .type = @enumToInt(Ref.comptime_float_type) },
+                .expr = .{ .float128 = extra.data.get() },
+            };
+        },
         .negate => {
             const un_node = data[inst_index].un_node;
             var operand: DocData.WalkResult = try self.walkRef(
@@ -2018,23 +2057,6 @@ fn walkInstruction(
                 .expr = .{ .type = self.types.items.len - 1 },
             };
         },
-        .float128 => {
-            const pl_node = data[inst_index].pl_node;
-            const extra = file.zir.extraData(Zir.Inst.Float128, pl_node.payload_index);
-            _ = extra;
-            // const sep = "=" ** 200;
-            // std.debug.print("{s}\n", .{sep});
-            // std.debug.print("pl_node = {any}\n", .{pl_node});
-            // std.debug.print("extra = {any}\n", .{extra});
-            // std.debug.print("{s}\n", .{sep});
-            // printWithContext(
-            //     file,
-            //     inst_index,
-            //     "TODO: implement `{s}` for walkInstruction\n\n",
-            //     .{@tagName(tags[inst_index])},
-            // );
-            return self.cteTodo(@tagName(tags[inst_index]));
-        },
         .block => {
             const res = DocData.WalkResult{ .expr = .{
                 .comptimeExpr = self.comptime_exprs.items.len,