diff --git a/lib/docs/main.js b/lib/docs/main.js index 5d9c25d140..254869ac58 100644 --- a/lib/docs/main.js +++ b/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"; } diff --git a/src/Autodoc.zig b/src/Autodoc.zig index fcc954bea0..e25dd3f579 100644 --- a/src/Autodoc.zig +++ b/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,