authorgravatar for vallahor91@gmail.comVallahor <vallahor91@gmail.com> 2022-06-01 16:06:49-03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-19 19:10:12-07:00
log1f5df0e03401be36e68dd31f4704ebdc03141986
treedb79ad4e3d173f83239c4a16ea3dce525768b043
parentb9fa91002eeec00312b55a1412476deb84a627c3

add: slice_start, slice_end and slice_sentinel


2 files changed, 188 insertions(+), 1 deletions(-)

lib/docs/main.js+50-1
...@@ -1086,7 +1086,33 @@ var zigAnalysis;...@@ -1086,7 +1086,33 @@ var zigAnalysis;
1086 return literal;1086 return literal;
1087 }1087 }
1088 case "void": {1088 case "void": {
1089 return "VOID WIP";1089 return "void";
1090 }
1091 case "slice":{
1092 let payloadHtml = "";
1093 const lhsExpr = zigAnalysis.exprs[expr.slice.lhs];
1094 const startExpr = zigAnalysis.exprs[expr.slice.start];
1095 console.log(expr)
1096 let decl = exprName(lhsExpr);
1097 let start = exprName(startExpr);
1098 let end = "";
1099 let sentinel = "";
1100 if (expr.slice['end']) {
1101 const endExpr = zigAnalysis.exprs[expr.slice.end];
1102 let end_ = exprName(endExpr);
1103 end += end_;
1104 }
1105 if (expr.slice['sentinel']) {
1106 const sentinelExpr = zigAnalysis.exprs[expr.slice.sentinel];
1107 let sentinel_ = exprName(sentinelExpr);
1108 sentinel += " :" + sentinel_;
1109 }
1110 payloadHtml += decl + "["+ start + ".." + end + sentinel + "]";
1111 return payloadHtml;
1112 }
1113 case "sliceIndex": {
1114 const sliceIndex = zigAnalysis.exprs[expr.sliceIndex];
1115 return exprName(sliceIndex, opts);
1090 }1116 }
1091 case "switchOp":{1117 case "switchOp":{
1092 let payloadHtml = "switch() {</br>";1118 let payloadHtml = "switch() {</br>";
...@@ -1257,6 +1283,7 @@ var zigAnalysis;...@@ -1257,6 +1283,7 @@ var zigAnalysis;
1257 }1283 }
1258 case "builtinBinIndex" : {1284 case "builtinBinIndex" : {
1259 const builtinBinIndex = zigAnalysis.exprs[expr.builtinBinIndex];1285 const builtinBinIndex = zigAnalysis.exprs[expr.builtinBinIndex];
1286 console.log(expr)
1260 return exprName(builtinBinIndex, opts);1287 return exprName(builtinBinIndex, opts);
1261 }1288 }
1262 case "builtinBin": {1289 case "builtinBin": {
...@@ -1265,6 +1292,8 @@ var zigAnalysis;...@@ -1265,6 +1292,8 @@ var zigAnalysis;
1265 let lhs = exprName(lhsOp, opts);1292 let lhs = exprName(lhsOp, opts);
1266 let rhs = exprName(rhsOp, opts);1293 let rhs = exprName(rhsOp, opts);
12671294
1295 console.log(expr);
1296
1268 let payloadHtml = "@";1297 let payloadHtml = "@";
1269 switch (expr.builtinBin.name) {1298 switch (expr.builtinBin.name) {
1270 case "float_to_int": {1299 case "float_to_int": {
...@@ -1311,6 +1340,26 @@ var zigAnalysis;...@@ -1311,6 +1340,26 @@ var zigAnalysis;
1311 payloadHtml += "hasField";1340 payloadHtml += "hasField";
1312 break;1341 break;
1313 }1342 }
1343 case "clz": {
1344 payloadHtml += "clz";
1345 break;
1346 }
1347 case "ctz": {
1348 payloadHtml += "ctz";
1349 break;
1350 }
1351 case "pop_count": {
1352 payloadHtml += "popCount";
1353 break;
1354 }
1355 case "byte_swap": {
1356 payloadHtml += "byteSwap";
1357 break;
1358 }
1359 case "bit_reverse": {
1360 payloadHtml += "bitReverse";
1361 break;
1362 }
1314 default: console.log("builtin function not handled yet or doesn't exist!");1363 default: console.log("builtin function not handled yet or doesn't exist!");
1315 };1364 };
1316 return payloadHtml + "(" + lhs + ", " + rhs + ")";1365 return payloadHtml + "(" + lhs + ", " + rhs + ")";
src/Autodoc.zig+138
...@@ -668,6 +668,8 @@ const DocData = struct {...@@ -668,6 +668,8 @@ const DocData = struct {
668 compileError: []const u8,668 compileError: []const u8,
669 errorSets: usize,669 errorSets: usize,
670 string: []const u8, // direct value670 string: []const u8, // direct value
671 sliceIndex: usize,
672 slice: Slice,
671 builtin: Builtin,673 builtin: Builtin,
672 builtinIndex: usize,674 builtinIndex: usize,
673 builtinBin: BuiltinBin,675 builtinBin: BuiltinBin,
...@@ -709,6 +711,12 @@ const DocData = struct {...@@ -709,6 +711,12 @@ const DocData = struct {
709 name: []const u8 = "", // fn name711 name: []const u8 = "", // fn name
710 param: usize, // index in `exprs`712 param: usize, // index in `exprs`
711 };713 };
714 const Slice = struct {
715 lhs: usize, // index in `exprs`
716 start: usize,
717 end: ?usize = null,
718 sentinel: ?usize = null, // index in `exprs`
719 };
712 const As = struct {720 const As = struct {
713 typeRefArg: ?usize, // index in `exprs`721 typeRefArg: ?usize, // index in `exprs`
714 exprArg: usize, // index in `exprs`722 exprArg: usize, // index in `exprs`
...@@ -833,6 +841,16 @@ const DocData = struct {...@@ -833,6 +841,16 @@ const DocData = struct {
833 options,841 options,
834 w,842 w,
835 ),843 ),
844 .slice => |v| try std.json.stringify(
845 struct { slice: Slice }{ .slice = v },
846 options,
847 w,
848 ),
849 .sliceIndex => |v| try std.json.stringify(
850 struct { sliceIndex: usize }{ .sliceIndex = v },
851 options,
852 w,
853 ),
836 .typeOf_peer => |v| try std.json.stringify(854 .typeOf_peer => |v| try std.json.stringify(
837 struct { typeOf_peer: []usize }{ .typeOf_peer = v },855 struct { typeOf_peer: []usize }{ .typeOf_peer = v },
838 options,856 options,
...@@ -1106,6 +1124,123 @@ fn walkInstruction(...@@ -1106,6 +1124,123 @@ fn walkInstruction(
1106 // .expr = .{ .binOpIndex = binop_index },1124 // .expr = .{ .binOpIndex = binop_index },
1107 // };1125 // };
1108 // },1126 // },
1127 .slice_start => {
1128 const pl_node = data[inst_index].pl_node;
1129 const extra = file.zir.extraData(Zir.Inst.SliceStart, pl_node.payload_index);
1130
1131 const slice_index = self.exprs.items.len;
1132 try self.exprs.append(self.arena, .{ .slice = .{ .lhs = 0, .start = 0 } });
1133
1134 var lhs: DocData.WalkResult = try self.walkRef(
1135 file,
1136 parent_scope,
1137 extra.data.lhs,
1138 false,
1139 );
1140 var start: DocData.WalkResult = try self.walkRef(
1141 file,
1142 parent_scope,
1143 extra.data.start,
1144 false,
1145 );
1146
1147 const lhs_index = self.exprs.items.len;
1148 try self.exprs.append(self.arena, lhs.expr);
1149 const start_index = self.exprs.items.len;
1150 try self.exprs.append(self.arena, start.expr);
1151 self.exprs.items[slice_index] = .{ .slice = .{ .lhs = lhs_index, .start = start_index } };
1152
1153 return DocData.WalkResult{
1154 .typeRef = .{ .type = @enumToInt(Ref.type_type) },
1155 .expr = .{ .sliceIndex = slice_index },
1156 };
1157 },
1158 .slice_end => {
1159 const pl_node = data[inst_index].pl_node;
1160 const extra = file.zir.extraData(Zir.Inst.SliceEnd, pl_node.payload_index);
1161
1162 const slice_index = self.exprs.items.len;
1163 try self.exprs.append(self.arena, .{ .slice = .{ .lhs = 0, .start = 0 } });
1164
1165 var lhs: DocData.WalkResult = try self.walkRef(
1166 file,
1167 parent_scope,
1168 extra.data.lhs,
1169 false,
1170 );
1171 var start: DocData.WalkResult = try self.walkRef(
1172 file,
1173 parent_scope,
1174 extra.data.start,
1175 false,
1176 );
1177 var end: DocData.WalkResult = try self.walkRef(
1178 file,
1179 parent_scope,
1180 extra.data.end,
1181 false,
1182 );
1183
1184 const lhs_index = self.exprs.items.len;
1185 try self.exprs.append(self.arena, lhs.expr);
1186 const start_index = self.exprs.items.len;
1187 try self.exprs.append(self.arena, start.expr);
1188 const end_index = self.exprs.items.len;
1189 try self.exprs.append(self.arena, end.expr);
1190 self.exprs.items[slice_index] = .{ .slice = .{ .lhs = lhs_index, .start = start_index, .end = end_index } };
1191
1192 return DocData.WalkResult{
1193 .typeRef = .{ .type = @enumToInt(Ref.type_type) },
1194 .expr = .{ .sliceIndex = slice_index },
1195 };
1196 },
1197 .slice_sentinel => {
1198 const pl_node = data[inst_index].pl_node;
1199 const extra = file.zir.extraData(Zir.Inst.SliceSentinel, pl_node.payload_index);
1200
1201 const slice_index = self.exprs.items.len;
1202 try self.exprs.append(self.arena, .{ .slice = .{ .lhs = 0, .start = 0 } });
1203
1204 var lhs: DocData.WalkResult = try self.walkRef(
1205 file,
1206 parent_scope,
1207 extra.data.lhs,
1208 false,
1209 );
1210 var start: DocData.WalkResult = try self.walkRef(
1211 file,
1212 parent_scope,
1213 extra.data.start,
1214 false,
1215 );
1216 var end: DocData.WalkResult = try self.walkRef(
1217 file,
1218 parent_scope,
1219 extra.data.end,
1220 false,
1221 );
1222 var sentinel: DocData.WalkResult = try self.walkRef(
1223 file,
1224 parent_scope,
1225 extra.data.sentinel,
1226 false,
1227 );
1228
1229 const lhs_index = self.exprs.items.len;
1230 try self.exprs.append(self.arena, lhs.expr);
1231 const start_index = self.exprs.items.len;
1232 try self.exprs.append(self.arena, start.expr);
1233 const end_index = self.exprs.items.len;
1234 try self.exprs.append(self.arena, end.expr);
1235 const sentinel_index = self.exprs.items.len;
1236 try self.exprs.append(self.arena, sentinel.expr);
1237 self.exprs.items[slice_index] = .{ .slice = .{ .lhs = lhs_index, .start = start_index, .end = end_index, .sentinel = sentinel_index } };
1238
1239 return DocData.WalkResult{
1240 .typeRef = .{ .type = @enumToInt(Ref.type_type) },
1241 .expr = .{ .sliceIndex = slice_index },
1242 };
1243 },
1109 .bit_or => {1244 .bit_or => {
1110 const pl_node = data[inst_index].pl_node;1245 const pl_node = data[inst_index].pl_node;
1111 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);1246 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
...@@ -1924,6 +2059,7 @@ fn walkInstruction(...@@ -1924,6 +2059,7 @@ fn walkInstruction(
1924 };2059 };
1925 },2060 },
19262061
2062 // builtin functions
1927 .align_of,2063 .align_of,
1928 .bool_to_int,2064 .bool_to_int,
1929 .embed_file,2065 .embed_file,
...@@ -1966,6 +2102,8 @@ fn walkInstruction(...@@ -1966,6 +2102,8 @@ fn walkInstruction(
1966 .expr = .{ .builtinIndex = bin_index },2102 .expr = .{ .builtinIndex = bin_index },
1967 };2103 };
1968 },2104 },
2105 // @check
2106 // .clz, .ctz, .pop_count, .byte_swap, .bit_reverse
1969 .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 => {2107 .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 => {
1970 const pl_node = data[inst_index].pl_node;2108 const pl_node = data[inst_index].pl_node;
1971 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);2109 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);