mirror of
https://github.com/ziglang/zig.git
synced 2026-01-21 06:45:24 +00:00
add: slice_start, slice_end and slice_sentinel
This commit is contained in:
parent
b9fa91002e
commit
1f5df0e034
@ -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 + ")";
|
||||
|
||||
138
src/Autodoc.zig
138
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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user