authorgravatar for vallahor91@gmail.comVallahor <vallahor91@gmail.com> 2022-06-01 01:24:29-03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-19 19:10:12-07:00
logb9fa91002eeec00312b55a1412476deb84a627c3
tree25e3e169e070d0cf793a40b467213341ed947299
parenta0ec87be717094b080a98595cfd4ceb0aec38cdf

add: builtins functions


2 files changed, 446 insertions(+), 58 deletions(-)

lib/docs/main.js+205-6
...@@ -1085,6 +1085,9 @@ var zigAnalysis;...@@ -1085,6 +1085,9 @@ var zigAnalysis;
1085 let literal = expr.enumLiteral;1085 let literal = expr.enumLiteral;
1086 return literal;1086 return literal;
1087 }1087 }
1088 case "void": {
1089 return "VOID WIP";
1090 }
1088 case "switchOp":{1091 case "switchOp":{
1089 let payloadHtml = "switch() {</br>";1092 let payloadHtml = "switch() {</br>";
1090 for (let i = 0; i < expr.switchOp.cases.length; i++) {1093 for (let i = 0; i < expr.switchOp.cases.length; i++) {
...@@ -1115,13 +1118,12 @@ var zigAnalysis;...@@ -1115,13 +1118,12 @@ var zigAnalysis;
1115 // const fieldRef = zigAnalysis.decls[expr.fieldRef.index];1118 // const fieldRef = zigAnalysis.decls[expr.fieldRef.index];
1116 // const struct_name = zigAnalysis.decls[expr.struct[0].val.typeRef.refPath[0].declRef].name;1119 // const struct_name = zigAnalysis.decls[expr.struct[0].val.typeRef.refPath[0].declRef].name;
1117 console.log(expr)1120 console.log(expr)
1118 console.log(fieldRef)1121 // console.log(fieldRef)
1119 // return "@enumToInt(" + exprName(enumToInt, opts) + ")";1122 // return "@enumToInt(" + exprName(enumToInt, opts) + ")";
1120 // return exprName(fieldRef,opts);1123 // return exprName(fieldRef,opts);
1121 return "WIP"1124 return "WIP"
1122 }1125 }
1123 case "enumToInt" : {1126 case "enumToInt" : {
1124 console.log(expr);
1125 const enumToInt = zigAnalysis.exprs[expr.enumToInt];1127 const enumToInt = zigAnalysis.exprs[expr.enumToInt];
1126 return "@enumToInt(" + exprName(enumToInt, opts) + ")";1128 return "@enumToInt(" + exprName(enumToInt, opts) + ")";
1127 }1129 }
...@@ -1133,6 +1135,187 @@ var zigAnalysis;...@@ -1133,6 +1135,187 @@ var zigAnalysis;
1133 const sizeOf = zigAnalysis.exprs[expr.sizeOf];1135 const sizeOf = zigAnalysis.exprs[expr.sizeOf];
1134 return "@sizeOf(" + exprName(sizeOf, opts) + ")";1136 return "@sizeOf(" + exprName(sizeOf, opts) + ")";
1135 }1137 }
1138 case "builtinIndex" : {
1139 const builtinIndex = zigAnalysis.exprs[expr.builtinIndex];
1140 return exprName(builtinIndex, opts);
1141 }
1142 case "builtin": {
1143 const param_expr = zigAnalysis.exprs[expr.builtin.param];
1144 let param = exprName(param_expr, opts);
1145
1146 let payloadHtml = "@";
1147 switch (expr.builtin.name) {
1148
1149 case "align_of": {
1150 payloadHtml += "alignOf";
1151 break;
1152 }
1153 case "bool_to_int": {
1154 payloadHtml += "boolToInt";
1155 break;
1156 }
1157 case "embed_file": {
1158 payloadHtml += "embedFile";
1159 break;
1160 }
1161 case "error_name": {
1162 payloadHtml += "errorName";
1163 break;
1164 }
1165 case "panic": {
1166 payloadHtml += "panic";
1167 break;
1168 }
1169 case "set_cold": {
1170 payloadHtml += "setCold";
1171 break;
1172 }
1173 case "set_runtime_safety": {
1174 payloadHtml += "setRuntimeSafety";
1175 break;
1176 }
1177 case "sqrt": {
1178 payloadHtml += "sqrt";
1179 break;
1180 }
1181 case "sin": {
1182 payloadHtml += "sin";
1183 break;
1184 }
1185 case "cos": {
1186 payloadHtml += "cos";
1187 break;
1188 }
1189 case "tan": {
1190 payloadHtml += "tan";
1191 break;
1192 }
1193 case "exp": {
1194 payloadHtml += "exp";
1195 break;
1196 }
1197 case "exp2": {
1198 payloadHtml += "exp2";
1199 break;
1200 }
1201 case "log": {
1202 payloadHtml += "log";
1203 break;
1204 }
1205 case "log2": {
1206 payloadHtml += "log2";
1207 break;
1208 }
1209 case "log10": {
1210 payloadHtml += "log10";
1211 break;
1212 }
1213 case "fabs": {
1214 payloadHtml += "fabs";
1215 break;
1216 }
1217 case "floor": {
1218 payloadHtml += "floor";
1219 break;
1220 }
1221 case "ceil": {
1222 payloadHtml += "ceil";
1223 break;
1224 }
1225 case "trunc": {
1226 payloadHtml += "trunc";
1227 break;
1228 }
1229 case "round": {
1230 payloadHtml += "round";
1231 break;
1232 }
1233 case "tag_name": {
1234 payloadHtml += "tagName";
1235 break;
1236 }
1237 case "reify": {
1238 payloadHtml += "Type";
1239 break;
1240 }
1241 case "type_name": {
1242 payloadHtml += "typeName";
1243 break;
1244 }
1245 case "frame_type": {
1246 payloadHtml += "Frame";
1247 break;
1248 }
1249 case "frame_size": {
1250 payloadHtml += "frameSize";
1251 break;
1252 }
1253 default: console.log("builtin function not handled yet or doesn't exist!");
1254 };
1255 return payloadHtml + "(" + param + ")";
1256
1257 }
1258 case "builtinBinIndex" : {
1259 const builtinBinIndex = zigAnalysis.exprs[expr.builtinBinIndex];
1260 return exprName(builtinBinIndex, opts);
1261 }
1262 case "builtinBin": {
1263 const lhsOp = zigAnalysis.exprs[expr.builtinBin.lhs];
1264 const rhsOp = zigAnalysis.exprs[expr.builtinBin.rhs];
1265 let lhs = exprName(lhsOp, opts);
1266 let rhs = exprName(rhsOp, opts);
1267
1268 let payloadHtml = "@";
1269 switch (expr.builtinBin.name) {
1270 case "float_to_int": {
1271 payloadHtml += "floatToInt";
1272 break;
1273 }
1274 case "int_to_float": {
1275 payloadHtml += "intToFloat";
1276 break;
1277 }
1278 case "int_to_ptr": {
1279 payloadHtml += "intToPtr";
1280 break;
1281 }
1282 case "int_to_enum": {
1283 payloadHtml += "intToEnum";
1284 break;
1285 }
1286 case "float_cast": {
1287 payloadHtml += "floatCast";
1288 break;
1289 }
1290 case "int_cast": {
1291 payloadHtml += "intCast";
1292 break;
1293 }
1294 case "ptr_cast": {
1295 payloadHtml += "ptrCast";
1296 break;
1297 }
1298 case "truncate": {
1299 payloadHtml += "truncate";
1300 break;
1301 }
1302 case "align_cast": {
1303 payloadHtml += "alignCast";
1304 break;
1305 }
1306 case "has_decl": {
1307 payloadHtml += "hasDecl";
1308 break;
1309 }
1310 case "has_field": {
1311 payloadHtml += "hasField";
1312 break;
1313 }
1314 default: console.log("builtin function not handled yet or doesn't exist!");
1315 };
1316 return payloadHtml + "(" + lhs + ", " + rhs + ")";
1317
1318 }
1136 case "binOpIndex" : {1319 case "binOpIndex" : {
1137 const binOpIndex = zigAnalysis.exprs[expr.binOpIndex];1320 const binOpIndex = zigAnalysis.exprs[expr.binOpIndex];
1138 return exprName(binOpIndex, opts);1321 return exprName(binOpIndex, opts);
...@@ -1146,9 +1329,6 @@ var zigAnalysis;...@@ -1146,9 +1329,6 @@ var zigAnalysis;
1146 let print_lhs = "";1329 let print_lhs = "";
1147 let print_rhs = "";1330 let print_rhs = "";
11481331
1149 console.log(lhsOp)
1150 console.log(rhsOp)
1151
1152 if (lhsOp['binOpIndex']) {1332 if (lhsOp['binOpIndex']) {
1153 print_lhs = "(" + lhs + ")";1333 print_lhs = "(" + lhs + ")";
1154 } else {1334 } else {
...@@ -1229,6 +1409,21 @@ var zigAnalysis;...@@ -1229,6 +1409,21 @@ var zigAnalysis;
1229 case 11 : {1409 case 11 : {
1230 return "@alignCast(" + print_lhs + ", " + print_rhs + ")";1410 return "@alignCast(" + print_lhs + ", " + print_rhs + ")";
1231 }1411 }
1412 case 12 : {
1413 operator += "&";
1414 break;
1415 }
1416 case 13 : {
1417 operator += "++";
1418 break;
1419 }
1420 case 14 : {
1421 operator += "**";
1422 break;
1423 }
1424 case 15 : {
1425 return "@Vector(" + print_lhs + ", " + print_rhs + ")";
1426 }
1232 default: console.log("operator not handled yet or doesn't exist!");1427 default: console.log("operator not handled yet or doesn't exist!");
1233 };1428 };
1234 if (expr.binOp.wrap) {1429 if (expr.binOp.wrap) {
...@@ -1723,7 +1918,11 @@ var zigAnalysis;...@@ -1723,7 +1918,11 @@ var zigAnalysis;
1723 linkFnNameDecl: opts.linkFnNameDecl,1918 linkFnNameDecl: opts.linkFnNameDecl,
1724 });1919 });
1725 payloadHtml += '<span class="tok-kw">' + escapeHtml(name) + '</span>';1920 payloadHtml += '<span class="tok-kw">' + escapeHtml(name) + '</span>';
1726 } else if ("comptimeExpr" in value) {1921 } else if ("binOpIndex" in value) {
1922 payloadHtml += exprName(value, opts);
1923 console.log(value);
1924 console.log(payloadHtml);
1925 }else if ("comptimeExpr" in value) {
1727 let comptimeExpr = zigAnalysis.comptimeExprs[value.comptimeExpr].code;1926 let comptimeExpr = zigAnalysis.comptimeExprs[value.comptimeExpr].code;
1728 if (opts.wantHtml) {1927 if (opts.wantHtml) {
1729 payloadHtml += '<span class="tok-kw">' + comptimeExpr + '</span>';1928 payloadHtml += '<span class="tok-kw">' + comptimeExpr + '</span>';
src/Autodoc.zig+241-52
...@@ -668,6 +668,10 @@ const DocData = struct {...@@ -668,6 +668,10 @@ 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 builtin: Builtin,
672 builtinIndex: usize,
673 builtinBin: BuiltinBin,
674 builtinBinIndex: usize,
671 switchIndex: usize, // index in `exprs`675 switchIndex: usize, // index in `exprs`
672 switchOp: SwitchOp,676 switchOp: SwitchOp,
673 // Index a `type` like struct with expressions677 // Index a `type` like struct with expressions
...@@ -682,7 +686,7 @@ const DocData = struct {...@@ -682,7 +686,7 @@ const DocData = struct {
682 rhs: usize, // index in `exprs`686 rhs: usize, // index in `exprs`
683 // opKind687 // opKind
684 // Identify the operator in js688 // Identify the operator in js
685 // 0: add, 1: sub, 2: mul, 3: div, 4: mod, 5: rem, 6: rem_mod, 7: shl, 8: shr, 9: bitcast, 10: bit_or, 11: align_cast689 // 0: add, 1: sub, 2: mul, 3: div, 4: mod, 5: rem, 6: rem_mod, 7: shl, 8: shr, 9: bitcast, 10: bit_or, 11: align_cast, 12: bit_and, 13: array_cat, 14: array_mul, 15: vector
686 // Others binOp are not handled yet690 // Others binOp are not handled yet
687 opKind: usize = 0,691 opKind: usize = 0,
688 // flags to operations692 // flags to operations
...@@ -696,6 +700,15 @@ const DocData = struct {...@@ -696,6 +700,15 @@ const DocData = struct {
696 cases: []usize,700 cases: []usize,
697 else_index: ?usize,701 else_index: ?usize,
698 };702 };
703 const BuiltinBin = struct {
704 name: []const u8 = "", // fn name
705 lhs: usize, // index in `exprs`
706 rhs: usize, // index in `exprs`
707 };
708 const Builtin = struct {
709 name: []const u8 = "", // fn name
710 param: usize, // index in `exprs`
711 };
699 const As = struct {712 const As = struct {
700 typeRefArg: ?usize, // index in `exprs`713 typeRefArg: ?usize, // index in `exprs`
701 exprArg: usize, // index in `exprs`714 exprArg: usize, // index in `exprs`
...@@ -800,6 +813,26 @@ const DocData = struct {...@@ -800,6 +813,26 @@ const DocData = struct {
800 options,813 options,
801 w,814 w,
802 ),815 ),
816 .builtin => |v| try std.json.stringify(
817 struct { builtin: Builtin }{ .builtin = v },
818 options,
819 w,
820 ),
821 .builtinIndex => |v| try std.json.stringify(
822 struct { builtinIndex: usize }{ .builtinIndex = v },
823 options,
824 w,
825 ),
826 .builtinBin => |v| try std.json.stringify(
827 struct { builtinBin: BuiltinBin }{ .builtinBin = v },
828 options,
829 w,
830 ),
831 .builtinBinIndex => |v| try std.json.stringify(
832 struct { builtinBinIndex: usize }{ .builtinBinIndex = v },
833 options,
834 w,
835 ),
803 .typeOf_peer => |v| try std.json.stringify(836 .typeOf_peer => |v| try std.json.stringify(
804 struct { typeOf_peer: []usize }{ .typeOf_peer = v },837 struct { typeOf_peer: []usize }{ .typeOf_peer = v },
805 options,838 options,
...@@ -1041,7 +1074,39 @@ fn walkInstruction(...@@ -1041,7 +1074,39 @@ fn walkInstruction(
1041 .expr = .{ .binOpIndex = binop_index },1074 .expr = .{ .binOpIndex = binop_index },
1042 };1075 };
1043 },1076 },
1044 .align_cast => {1077 // implementing in builtinBin @check if it's ok to delete it
1078 // .align_cast => {
1079 // const pl_node = data[inst_index].pl_node;
1080 // const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
1081 //
1082 // const binop_index = self.exprs.items.len;
1083 // try self.exprs.append(self.arena, .{ .binOp = .{ .lhs = 0, .rhs = 0 } });
1084 //
1085 // var lhs: DocData.WalkResult = try self.walkRef(
1086 // file,
1087 // parent_scope,
1088 // extra.data.lhs,
1089 // false,
1090 // );
1091 // var rhs: DocData.WalkResult = try self.walkRef(
1092 // file,
1093 // parent_scope,
1094 // extra.data.rhs,
1095 // false,
1096 // );
1097 //
1098 // const lhs_index = self.exprs.items.len;
1099 // try self.exprs.append(self.arena, lhs.expr);
1100 // const rhs_index = self.exprs.items.len;
1101 // try self.exprs.append(self.arena, rhs.expr);
1102 // self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .opKind = 11 } };
1103 //
1104 // return DocData.WalkResult{
1105 // .typeRef = .{ .type = @enumToInt(Ref.type_type) },
1106 // .expr = .{ .binOpIndex = binop_index },
1107 // };
1108 // },
1109 .bit_or => {
1045 const pl_node = data[inst_index].pl_node;1110 const pl_node = data[inst_index].pl_node;
1046 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);1111 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
10471112
...@@ -1065,14 +1130,14 @@ fn walkInstruction(...@@ -1065,14 +1130,14 @@ fn walkInstruction(
1065 try self.exprs.append(self.arena, lhs.expr);1130 try self.exprs.append(self.arena, lhs.expr);
1066 const rhs_index = self.exprs.items.len;1131 const rhs_index = self.exprs.items.len;
1067 try self.exprs.append(self.arena, rhs.expr);1132 try self.exprs.append(self.arena, rhs.expr);
1068 self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .opKind = 11 } };1133 self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .opKind = 10 } };
10691134
1070 return DocData.WalkResult{1135 return DocData.WalkResult{
1071 .typeRef = .{ .type = @enumToInt(Ref.type_type) },1136 .typeRef = .{ .type = @enumToInt(Ref.type_type) },
1072 .expr = .{ .binOpIndex = binop_index },1137 .expr = .{ .binOpIndex = binop_index },
1073 };1138 };
1074 },1139 },
1075 .bit_or => {1140 .bit_and => {
1076 const pl_node = data[inst_index].pl_node;1141 const pl_node = data[inst_index].pl_node;
1077 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);1142 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
10781143
...@@ -1096,7 +1161,7 @@ fn walkInstruction(...@@ -1096,7 +1161,7 @@ fn walkInstruction(
1096 try self.exprs.append(self.arena, lhs.expr);1161 try self.exprs.append(self.arena, lhs.expr);
1097 const rhs_index = self.exprs.items.len;1162 const rhs_index = self.exprs.items.len;
1098 try self.exprs.append(self.arena, rhs.expr);1163 try self.exprs.append(self.arena, rhs.expr);
1099 self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .opKind = 10 } };1164 self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .opKind = 12 } };
11001165
1101 return DocData.WalkResult{1166 return DocData.WalkResult{
1102 .typeRef = .{ .type = @enumToInt(Ref.type_type) },1167 .typeRef = .{ .type = @enumToInt(Ref.type_type) },
...@@ -1763,6 +1828,175 @@ fn walkInstruction(...@@ -1763,6 +1828,175 @@ fn walkInstruction(
1763 };1828 };
1764 },1829 },
17651830
1831 // throwing this TODO
1832 // TODO: handle `Array` in tryResolveDeclPath.type
1833 // .array_cat => {
1834 // const pl_node = data[inst_index].pl_node;
1835 // const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
1836 //
1837 // const binop_index = self.exprs.items.len;
1838 // try self.exprs.append(self.arena, .{ .binOp = .{ .lhs = 0, .rhs = 0 } });
1839 //
1840 // var lhs: DocData.WalkResult = try self.walkRef(
1841 // file,
1842 // parent_scope,
1843 // extra.data.lhs,
1844 // false,
1845 // );
1846 // var rhs: DocData.WalkResult = try self.walkRef(
1847 // file,
1848 // parent_scope,
1849 // extra.data.rhs,
1850 // false,
1851 // );
1852 //
1853 // const lhs_index = self.exprs.items.len;
1854 // try self.exprs.append(self.arena, lhs.expr);
1855 // const rhs_index = self.exprs.items.len;
1856 // try self.exprs.append(self.arena, rhs.expr);
1857 // self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .exact = true, .opKind = 13 } };
1858 //
1859 // return DocData.WalkResult{
1860 // .typeRef = .{ .type = @enumToInt(Ref.type_type) },
1861 // .expr = .{ .binOpIndex = binop_index },
1862 // };
1863 // },
1864 // .array_mul => {
1865 // const pl_node = data[inst_index].pl_node;
1866 // const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
1867 //
1868 // const binop_index = self.exprs.items.len;
1869 // try self.exprs.append(self.arena, .{ .binOp = .{ .lhs = 0, .rhs = 0 } });
1870 //
1871 // var lhs: DocData.WalkResult = try self.walkRef(
1872 // file,
1873 // parent_scope,
1874 // extra.data.lhs,
1875 // false,
1876 // );
1877 // var rhs: DocData.WalkResult = try self.walkRef(
1878 // file,
1879 // parent_scope,
1880 // extra.data.rhs,
1881 // false,
1882 // );
1883 //
1884 // const lhs_index = self.exprs.items.len;
1885 // try self.exprs.append(self.arena, lhs.expr);
1886 // const rhs_index = self.exprs.items.len;
1887 // try self.exprs.append(self.arena, rhs.expr);
1888 // self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .exact = true, .opKind = 14 } };
1889 //
1890 // return DocData.WalkResult{
1891 // .typeRef = .{ .type = @enumToInt(Ref.type_type) },
1892 // .expr = .{ .binOpIndex = binop_index },
1893 // };
1894 // },
1895 .vector_type => {
1896 const pl_node = data[inst_index].pl_node;
1897 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
1898
1899 const binop_index = self.exprs.items.len;
1900 try self.exprs.append(self.arena, .{ .binOp = .{ .lhs = 0, .rhs = 0 } });
1901
1902 var lhs: DocData.WalkResult = try self.walkRef(
1903 file,
1904 parent_scope,
1905 extra.data.lhs,
1906 false,
1907 );
1908 var rhs: DocData.WalkResult = try self.walkRef(
1909 file,
1910 parent_scope,
1911 extra.data.rhs,
1912 false,
1913 );
1914
1915 const lhs_index = self.exprs.items.len;
1916 try self.exprs.append(self.arena, lhs.expr);
1917 const rhs_index = self.exprs.items.len;
1918 try self.exprs.append(self.arena, rhs.expr);
1919 self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .exact = true, .opKind = 15 } };
1920
1921 return DocData.WalkResult{
1922 .typeRef = .{ .type = @enumToInt(Ref.type_type) },
1923 .expr = .{ .binOpIndex = binop_index },
1924 };
1925 },
1926
1927 .align_of,
1928 .bool_to_int,
1929 .embed_file,
1930 .error_name,
1931 .panic,
1932 .set_cold, // @check
1933 .set_runtime_safety, // @check
1934 .sqrt,
1935 .sin,
1936 .cos,
1937 .tan,
1938 .exp,
1939 .exp2,
1940 .log,
1941 .log2,
1942 .log10,
1943 .fabs,
1944 .floor,
1945 .ceil,
1946 .trunc,
1947 .round,
1948 .tag_name,
1949 .reify,
1950 .type_name,
1951 .frame_type,
1952 .frame_size,
1953 => {
1954 const un_node = data[inst_index].un_node;
1955 const bin_index = self.exprs.items.len;
1956 try self.exprs.append(self.arena, .{ .builtin = .{ .param = 0 } });
1957 const param = try self.walkRef(file, parent_scope, un_node.operand, false);
1958
1959 const param_index = self.exprs.items.len;
1960 try self.exprs.append(self.arena, param.expr);
1961
1962 self.exprs.items[bin_index] = .{ .builtin = .{ .name = @tagName(tags[inst_index]), .param = param_index } };
1963
1964 return DocData.WalkResult{
1965 .typeRef = param.typeRef,
1966 .expr = .{ .builtinIndex = bin_index },
1967 };
1968 },
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 => {
1970 const pl_node = data[inst_index].pl_node;
1971 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
1972
1973 const binop_index = self.exprs.items.len;
1974 try self.exprs.append(self.arena, .{ .builtinBin = .{ .lhs = 0, .rhs = 0 } });
1975
1976 var lhs: DocData.WalkResult = try self.walkRef(
1977 file,
1978 parent_scope,
1979 extra.data.lhs,
1980 false,
1981 );
1982 var rhs: DocData.WalkResult = try self.walkRef(
1983 file,
1984 parent_scope,
1985 extra.data.rhs,
1986 false,
1987 );
1988
1989 const lhs_index = self.exprs.items.len;
1990 try self.exprs.append(self.arena, lhs.expr);
1991 const rhs_index = self.exprs.items.len;
1992 try self.exprs.append(self.arena, rhs.expr);
1993 self.exprs.items[binop_index] = .{ .builtinBin = .{ .name = @tagName(tags[inst_index]), .lhs = lhs_index, .rhs = rhs_index } };
1994
1995 return DocData.WalkResult{
1996 .typeRef = .{ .type = @enumToInt(Ref.type_type) },
1997 .expr = .{ .builtinBinIndex = binop_index },
1998 };
1999 },
1766 .error_union_type => {2000 .error_union_type => {
1767 const pl_node = data[inst_index].pl_node;2001 const pl_node = data[inst_index].pl_node;
1768 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);2002 const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
...@@ -2398,26 +2632,6 @@ fn walkInstruction(...@@ -2398,26 +2632,6 @@ fn walkInstruction(
2398 .expr = .{ .typeOf = operand_index },2632 .expr = .{ .typeOf = operand_index },
2399 };2633 };
2400 },2634 },
2401 .align_of => {
2402 // WIP
2403 // not fully working
2404 // @alignOf() with some pointer type it's not even called in js
2405 // @alignOf([*]u8) are being rendered as [*]u8
2406 const un_node = data[inst_index].un_node;
2407 const operand = try self.walkRef(
2408 file,
2409 parent_scope,
2410 un_node.operand,
2411 need_type,
2412 );
2413 const operand_index = self.exprs.items.len;
2414 try self.exprs.append(self.arena, operand.expr);
2415
2416 return DocData.WalkResult{
2417 .typeRef = operand.typeRef,
2418 .expr = .{ .alignOf = operand_index },
2419 };
2420 },
2421 .typeof_builtin => {2635 .typeof_builtin => {
2422 const pl_node = data[inst_index].pl_node;2636 const pl_node = data[inst_index].pl_node;
2423 const extra = file.zir.extraData(Zir.Inst.Block, pl_node.payload_index);2637 const extra = file.zir.extraData(Zir.Inst.Block, pl_node.payload_index);
...@@ -2438,31 +2652,6 @@ fn walkInstruction(...@@ -2438,31 +2652,6 @@ fn walkInstruction(
2438 .expr = .{ .typeOf = operand_index },2652 .expr = .{ .typeOf = operand_index },
2439 };2653 };
2440 },2654 },
2441 .typeof_log2_int_type => {
2442 // @check
2443 const un_node = data[inst_index].un_node;
2444 const operand = try self.walkRef(
2445 file,
2446 parent_scope,
2447 un_node.operand,
2448 need_type,
2449 );
2450
2451 // WIP
2452 // const sep = "=" ** 200;
2453 // std.debug.print("{s}\n", .{sep});
2454 // std.debug.print("un_node = {any}\n", .{un_node});
2455 // std.debug.print("operand = {any}\n", .{operand});
2456 // std.debug.print("{s}\n", .{sep});
2457
2458 const operand_index = self.exprs.items.len;
2459 try self.exprs.append(self.arena, operand.expr);
2460
2461 return DocData.WalkResult{
2462 .typeRef = operand.typeRef,
2463 .expr = .{ .typeOf = operand_index },
2464 };
2465 },
2466 .type_info => {2655 .type_info => {
2467 // @check2656 // @check
2468 const un_node = data[inst_index].un_node;2657 const un_node = data[inst_index].un_node;
...@@ -3681,8 +3870,8 @@ fn tryResolveRefPath(...@@ -3681,8 +3870,8 @@ fn tryResolveRefPath(
3681 panicWithContext(3870 panicWithContext(
3682 file,3871 file,
3683 inst_index,3872 inst_index,
3684 "TODO: handle `{s}` in tryResolveDeclPath.type\n",3873 "TODO: handle `{s}` in tryResolveDeclPath.type\nInfo: {}",
3685 .{@tagName(self.types.items[t_index])},3874 .{ @tagName(self.types.items[t_index]), resolved_parent },
3686 );3875 );
3687 },3876 },
3688 .Unanalyzed => {3877 .Unanalyzed => {