Commit 1f5df0e034
Changed files (2)
lib
docs
src
lib/docs/main.js
@@ -1086,7 +1086,33 @@ var zigAnalysis;
return literal;
}
case "void": {
- return "VOID WIP";
+ return "void";
+ }
+ case "slice":{
+ let payloadHtml = "";
+ const lhsExpr = zigAnalysis.exprs[expr.slice.lhs];
+ const startExpr = zigAnalysis.exprs[expr.slice.start];
+ console.log(expr)
+ let decl = exprName(lhsExpr);
+ let start = exprName(startExpr);
+ let end = "";
+ let sentinel = "";
+ if (expr.slice['end']) {
+ const endExpr = zigAnalysis.exprs[expr.slice.end];
+ let end_ = exprName(endExpr);
+ end += end_;
+ }
+ if (expr.slice['sentinel']) {
+ const sentinelExpr = zigAnalysis.exprs[expr.slice.sentinel];
+ let sentinel_ = exprName(sentinelExpr);
+ sentinel += " :" + sentinel_;
+ }
+ payloadHtml += decl + "["+ start + ".." + end + sentinel + "]";
+ return payloadHtml;
+ }
+ case "sliceIndex": {
+ const sliceIndex = zigAnalysis.exprs[expr.sliceIndex];
+ return exprName(sliceIndex, opts);
}
case "switchOp":{
let payloadHtml = "switch() {</br>";
@@ -1257,6 +1283,7 @@ var zigAnalysis;
}
case "builtinBinIndex" : {
const builtinBinIndex = zigAnalysis.exprs[expr.builtinBinIndex];
+ console.log(expr)
return exprName(builtinBinIndex, opts);
}
case "builtinBin": {
@@ -1265,6 +1292,8 @@ var zigAnalysis;
let lhs = exprName(lhsOp, opts);
let rhs = exprName(rhsOp, opts);
+ console.log(expr);
+
let payloadHtml = "@";
switch (expr.builtinBin.name) {
case "float_to_int": {
@@ -1311,6 +1340,26 @@ 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;
+ }
default: console.log("builtin function not handled yet or doesn't exist!");
};
return payloadHtml + "(" + lhs + ", " + rhs + ")";
src/Autodoc.zig
@@ -668,6 +668,8 @@ const DocData = struct {
compileError: []const u8,
errorSets: usize,
string: []const u8, // direct value
+ sliceIndex: usize,
+ slice: Slice,
builtin: Builtin,
builtinIndex: usize,
builtinBin: BuiltinBin,
@@ -709,6 +711,12 @@ const DocData = struct {
name: []const u8 = "", // fn name
param: usize, // index in `exprs`
};
+ const Slice = struct {
+ lhs: usize, // index in `exprs`
+ start: usize,
+ end: ?usize = null,
+ sentinel: ?usize = null, // index in `exprs`
+ };
const As = struct {
typeRefArg: ?usize, // index in `exprs`
exprArg: usize, // index in `exprs`
@@ -833,6 +841,16 @@ const DocData = struct {
options,
w,
),
+ .slice => |v| try std.json.stringify(
+ struct { slice: Slice }{ .slice = v },
+ options,
+ w,
+ ),
+ .sliceIndex => |v| try std.json.stringify(
+ struct { sliceIndex: usize }{ .sliceIndex = v },
+ options,
+ w,
+ ),
.typeOf_peer => |v| try std.json.stringify(
struct { typeOf_peer: []usize }{ .typeOf_peer = v },
options,
@@ -1106,6 +1124,123 @@ fn walkInstruction(
// .expr = .{ .binOpIndex = binop_index },
// };
// },
+ .slice_start => {
+ const pl_node = data[inst_index].pl_node;
+ const extra = file.zir.extraData(Zir.Inst.SliceStart, pl_node.payload_index);
+
+ const slice_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, .{ .slice = .{ .lhs = 0, .start = 0 } });
+
+ var lhs: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.lhs,
+ false,
+ );
+ var start: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.start,
+ false,
+ );
+
+ const lhs_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, lhs.expr);
+ const start_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, start.expr);
+ self.exprs.items[slice_index] = .{ .slice = .{ .lhs = lhs_index, .start = start_index } };
+
+ return DocData.WalkResult{
+ .typeRef = .{ .type = @enumToInt(Ref.type_type) },
+ .expr = .{ .sliceIndex = slice_index },
+ };
+ },
+ .slice_end => {
+ const pl_node = data[inst_index].pl_node;
+ const extra = file.zir.extraData(Zir.Inst.SliceEnd, pl_node.payload_index);
+
+ const slice_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, .{ .slice = .{ .lhs = 0, .start = 0 } });
+
+ var lhs: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.lhs,
+ false,
+ );
+ var start: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.start,
+ false,
+ );
+ var end: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.end,
+ false,
+ );
+
+ const lhs_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, lhs.expr);
+ const start_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, start.expr);
+ const end_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, end.expr);
+ self.exprs.items[slice_index] = .{ .slice = .{ .lhs = lhs_index, .start = start_index, .end = end_index } };
+
+ return DocData.WalkResult{
+ .typeRef = .{ .type = @enumToInt(Ref.type_type) },
+ .expr = .{ .sliceIndex = slice_index },
+ };
+ },
+ .slice_sentinel => {
+ const pl_node = data[inst_index].pl_node;
+ const extra = file.zir.extraData(Zir.Inst.SliceSentinel, pl_node.payload_index);
+
+ const slice_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, .{ .slice = .{ .lhs = 0, .start = 0 } });
+
+ var lhs: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.lhs,
+ false,
+ );
+ var start: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.start,
+ false,
+ );
+ var end: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.end,
+ false,
+ );
+ var sentinel: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.sentinel,
+ false,
+ );
+
+ const lhs_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, lhs.expr);
+ const start_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, start.expr);
+ const end_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, end.expr);
+ const sentinel_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, sentinel.expr);
+ self.exprs.items[slice_index] = .{ .slice = .{ .lhs = lhs_index, .start = start_index, .end = end_index, .sentinel = sentinel_index } };
+
+ return DocData.WalkResult{
+ .typeRef = .{ .type = @enumToInt(Ref.type_type) },
+ .expr = .{ .sliceIndex = slice_index },
+ };
+ },
.bit_or => {
const pl_node = data[inst_index].pl_node;
const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
@@ -1924,6 +2059,7 @@ fn walkInstruction(
};
},
+ // builtin functions
.align_of,
.bool_to_int,
.embed_file,
@@ -1966,6 +2102,8 @@ fn walkInstruction(
.expr = .{ .builtinIndex = bin_index },
};
},
+ // @check
+ // .clz, .ctz, .pop_count, .byte_swap, .bit_reverse
.float_to_int, .int_to_float, .int_to_ptr, .int_to_enum, .float_cast, .int_cast, .ptr_cast, .truncate, .align_cast, .has_decl, .has_field => {
const pl_node = data[inst_index].pl_node;
const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);