Commit b9fa91002e
Changed files (2)
lib
docs
src
lib/docs/main.js
@@ -1085,6 +1085,9 @@ var zigAnalysis;
let literal = expr.enumLiteral;
return literal;
}
+ case "void": {
+ return "VOID WIP";
+ }
case "switchOp":{
let payloadHtml = "switch() {</br>";
for (let i = 0; i < expr.switchOp.cases.length; i++) {
@@ -1115,13 +1118,12 @@ var zigAnalysis;
// const fieldRef = zigAnalysis.decls[expr.fieldRef.index];
// const struct_name = zigAnalysis.decls[expr.struct[0].val.typeRef.refPath[0].declRef].name;
console.log(expr)
- console.log(fieldRef)
+ // console.log(fieldRef)
// return "@enumToInt(" + exprName(enumToInt, opts) + ")";
// return exprName(fieldRef,opts);
return "WIP"
}
case "enumToInt" : {
- console.log(expr);
const enumToInt = zigAnalysis.exprs[expr.enumToInt];
return "@enumToInt(" + exprName(enumToInt, opts) + ")";
}
@@ -1133,6 +1135,187 @@ var zigAnalysis;
const sizeOf = zigAnalysis.exprs[expr.sizeOf];
return "@sizeOf(" + exprName(sizeOf, opts) + ")";
}
+ case "builtinIndex" : {
+ const builtinIndex = zigAnalysis.exprs[expr.builtinIndex];
+ return exprName(builtinIndex, opts);
+ }
+ case "builtin": {
+ const param_expr = zigAnalysis.exprs[expr.builtin.param];
+ let param = exprName(param_expr, opts);
+
+ let payloadHtml = "@";
+ switch (expr.builtin.name) {
+
+ case "align_of": {
+ payloadHtml += "alignOf";
+ break;
+ }
+ case "bool_to_int": {
+ payloadHtml += "boolToInt";
+ break;
+ }
+ case "embed_file": {
+ payloadHtml += "embedFile";
+ break;
+ }
+ case "error_name": {
+ payloadHtml += "errorName";
+ break;
+ }
+ case "panic": {
+ payloadHtml += "panic";
+ break;
+ }
+ case "set_cold": {
+ payloadHtml += "setCold";
+ break;
+ }
+ case "set_runtime_safety": {
+ payloadHtml += "setRuntimeSafety";
+ break;
+ }
+ case "sqrt": {
+ payloadHtml += "sqrt";
+ break;
+ }
+ case "sin": {
+ payloadHtml += "sin";
+ break;
+ }
+ case "cos": {
+ payloadHtml += "cos";
+ break;
+ }
+ case "tan": {
+ payloadHtml += "tan";
+ break;
+ }
+ case "exp": {
+ payloadHtml += "exp";
+ break;
+ }
+ case "exp2": {
+ payloadHtml += "exp2";
+ break;
+ }
+ case "log": {
+ payloadHtml += "log";
+ break;
+ }
+ case "log2": {
+ payloadHtml += "log2";
+ break;
+ }
+ case "log10": {
+ payloadHtml += "log10";
+ break;
+ }
+ case "fabs": {
+ payloadHtml += "fabs";
+ break;
+ }
+ case "floor": {
+ payloadHtml += "floor";
+ break;
+ }
+ case "ceil": {
+ payloadHtml += "ceil";
+ break;
+ }
+ case "trunc": {
+ payloadHtml += "trunc";
+ break;
+ }
+ case "round": {
+ payloadHtml += "round";
+ break;
+ }
+ case "tag_name": {
+ payloadHtml += "tagName";
+ break;
+ }
+ case "reify": {
+ payloadHtml += "Type";
+ break;
+ }
+ case "type_name": {
+ payloadHtml += "typeName";
+ break;
+ }
+ case "frame_type": {
+ payloadHtml += "Frame";
+ break;
+ }
+ case "frame_size": {
+ payloadHtml += "frameSize";
+ break;
+ }
+ default: console.log("builtin function not handled yet or doesn't exist!");
+ };
+ return payloadHtml + "(" + param + ")";
+
+ }
+ case "builtinBinIndex" : {
+ const builtinBinIndex = zigAnalysis.exprs[expr.builtinBinIndex];
+ return exprName(builtinBinIndex, opts);
+ }
+ case "builtinBin": {
+ const lhsOp = zigAnalysis.exprs[expr.builtinBin.lhs];
+ const rhsOp = zigAnalysis.exprs[expr.builtinBin.rhs];
+ let lhs = exprName(lhsOp, opts);
+ let rhs = exprName(rhsOp, opts);
+
+ let payloadHtml = "@";
+ switch (expr.builtinBin.name) {
+ case "float_to_int": {
+ payloadHtml += "floatToInt";
+ break;
+ }
+ case "int_to_float": {
+ payloadHtml += "intToFloat";
+ break;
+ }
+ case "int_to_ptr": {
+ payloadHtml += "intToPtr";
+ break;
+ }
+ case "int_to_enum": {
+ payloadHtml += "intToEnum";
+ break;
+ }
+ case "float_cast": {
+ payloadHtml += "floatCast";
+ break;
+ }
+ case "int_cast": {
+ payloadHtml += "intCast";
+ break;
+ }
+ case "ptr_cast": {
+ payloadHtml += "ptrCast";
+ break;
+ }
+ case "truncate": {
+ payloadHtml += "truncate";
+ break;
+ }
+ case "align_cast": {
+ payloadHtml += "alignCast";
+ break;
+ }
+ case "has_decl": {
+ payloadHtml += "hasDecl";
+ break;
+ }
+ case "has_field": {
+ payloadHtml += "hasField";
+ break;
+ }
+ default: console.log("builtin function not handled yet or doesn't exist!");
+ };
+ return payloadHtml + "(" + lhs + ", " + rhs + ")";
+
+ }
case "binOpIndex" : {
const binOpIndex = zigAnalysis.exprs[expr.binOpIndex];
return exprName(binOpIndex, opts);
@@ -1146,9 +1329,6 @@ var zigAnalysis;
let print_lhs = "";
let print_rhs = "";
- console.log(lhsOp)
- console.log(rhsOp)
-
if (lhsOp['binOpIndex']) {
print_lhs = "(" + lhs + ")";
} else {
@@ -1229,6 +1409,21 @@ var zigAnalysis;
case 11 : {
return "@alignCast(" + print_lhs + ", " + print_rhs + ")";
}
+ case 12 : {
+ operator += "&";
+ break;
+ }
+ case 13 : {
+ operator += "++";
+ break;
+ }
+ case 14 : {
+ operator += "**";
+ break;
+ }
+ case 15 : {
+ return "@Vector(" + print_lhs + ", " + print_rhs + ")";
+ }
default: console.log("operator not handled yet or doesn't exist!");
};
if (expr.binOp.wrap) {
@@ -1723,7 +1918,11 @@ var zigAnalysis;
linkFnNameDecl: opts.linkFnNameDecl,
});
payloadHtml += '<span class="tok-kw">' + escapeHtml(name) + '</span>';
- } else if ("comptimeExpr" in value) {
+ } else if ("binOpIndex" in value) {
+ payloadHtml += exprName(value, opts);
+ console.log(value);
+ console.log(payloadHtml);
+ }else if ("comptimeExpr" in value) {
let comptimeExpr = zigAnalysis.comptimeExprs[value.comptimeExpr].code;
if (opts.wantHtml) {
payloadHtml += '<span class="tok-kw">' + comptimeExpr + '</span>';
src/Autodoc.zig
@@ -668,6 +668,10 @@ const DocData = struct {
compileError: []const u8,
errorSets: usize,
string: []const u8, // direct value
+ builtin: Builtin,
+ builtinIndex: usize,
+ builtinBin: BuiltinBin,
+ builtinBinIndex: usize,
switchIndex: usize, // index in `exprs`
switchOp: SwitchOp,
// Index a `type` like struct with expressions
@@ -682,7 +686,7 @@ const DocData = struct {
rhs: usize, // index in `exprs`
// opKind
// Identify the operator in js
- // 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
+ // 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
// Others binOp are not handled yet
opKind: usize = 0,
// flags to operations
@@ -696,6 +700,15 @@ const DocData = struct {
cases: []usize,
else_index: ?usize,
};
+ const BuiltinBin = struct {
+ name: []const u8 = "", // fn name
+ lhs: usize, // index in `exprs`
+ rhs: usize, // index in `exprs`
+ };
+ const Builtin = struct {
+ name: []const u8 = "", // fn name
+ param: usize, // index in `exprs`
+ };
const As = struct {
typeRefArg: ?usize, // index in `exprs`
exprArg: usize, // index in `exprs`
@@ -800,6 +813,26 @@ const DocData = struct {
options,
w,
),
+ .builtin => |v| try std.json.stringify(
+ struct { builtin: Builtin }{ .builtin = v },
+ options,
+ w,
+ ),
+ .builtinIndex => |v| try std.json.stringify(
+ struct { builtinIndex: usize }{ .builtinIndex = v },
+ options,
+ w,
+ ),
+ .builtinBin => |v| try std.json.stringify(
+ struct { builtinBin: BuiltinBin }{ .builtinBin = v },
+ options,
+ w,
+ ),
+ .builtinBinIndex => |v| try std.json.stringify(
+ struct { builtinBinIndex: usize }{ .builtinBinIndex = v },
+ options,
+ w,
+ ),
.typeOf_peer => |v| try std.json.stringify(
struct { typeOf_peer: []usize }{ .typeOf_peer = v },
options,
@@ -1041,7 +1074,39 @@ fn walkInstruction(
.expr = .{ .binOpIndex = binop_index },
};
},
- .align_cast => {
+ // implementing in builtinBin @check if it's ok to delete it
+ // .align_cast => {
+ // const pl_node = data[inst_index].pl_node;
+ // const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
+ //
+ // const binop_index = self.exprs.items.len;
+ // try self.exprs.append(self.arena, .{ .binOp = .{ .lhs = 0, .rhs = 0 } });
+ //
+ // var lhs: DocData.WalkResult = try self.walkRef(
+ // file,
+ // parent_scope,
+ // extra.data.lhs,
+ // false,
+ // );
+ // var rhs: DocData.WalkResult = try self.walkRef(
+ // file,
+ // parent_scope,
+ // extra.data.rhs,
+ // false,
+ // );
+ //
+ // const lhs_index = self.exprs.items.len;
+ // try self.exprs.append(self.arena, lhs.expr);
+ // const rhs_index = self.exprs.items.len;
+ // try self.exprs.append(self.arena, rhs.expr);
+ // self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .opKind = 11 } };
+ //
+ // return DocData.WalkResult{
+ // .typeRef = .{ .type = @enumToInt(Ref.type_type) },
+ // .expr = .{ .binOpIndex = binop_index },
+ // };
+ // },
+ .bit_or => {
const pl_node = data[inst_index].pl_node;
const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
@@ -1065,14 +1130,14 @@ fn walkInstruction(
try self.exprs.append(self.arena, lhs.expr);
const rhs_index = self.exprs.items.len;
try self.exprs.append(self.arena, rhs.expr);
- self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .opKind = 11 } };
+ self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .opKind = 10 } };
return DocData.WalkResult{
.typeRef = .{ .type = @enumToInt(Ref.type_type) },
.expr = .{ .binOpIndex = binop_index },
};
},
- .bit_or => {
+ .bit_and => {
const pl_node = data[inst_index].pl_node;
const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
@@ -1096,7 +1161,7 @@ fn walkInstruction(
try self.exprs.append(self.arena, lhs.expr);
const rhs_index = self.exprs.items.len;
try self.exprs.append(self.arena, rhs.expr);
- self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .opKind = 10 } };
+ self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .opKind = 12 } };
return DocData.WalkResult{
.typeRef = .{ .type = @enumToInt(Ref.type_type) },
@@ -1763,6 +1828,175 @@ fn walkInstruction(
};
},
+ // throwing this TODO
+ // TODO: handle `Array` in tryResolveDeclPath.type
+ // .array_cat => {
+ // const pl_node = data[inst_index].pl_node;
+ // const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
+ //
+ // const binop_index = self.exprs.items.len;
+ // try self.exprs.append(self.arena, .{ .binOp = .{ .lhs = 0, .rhs = 0 } });
+ //
+ // var lhs: DocData.WalkResult = try self.walkRef(
+ // file,
+ // parent_scope,
+ // extra.data.lhs,
+ // false,
+ // );
+ // var rhs: DocData.WalkResult = try self.walkRef(
+ // file,
+ // parent_scope,
+ // extra.data.rhs,
+ // false,
+ // );
+ //
+ // const lhs_index = self.exprs.items.len;
+ // try self.exprs.append(self.arena, lhs.expr);
+ // const rhs_index = self.exprs.items.len;
+ // try self.exprs.append(self.arena, rhs.expr);
+ // self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .exact = true, .opKind = 13 } };
+ //
+ // return DocData.WalkResult{
+ // .typeRef = .{ .type = @enumToInt(Ref.type_type) },
+ // .expr = .{ .binOpIndex = binop_index },
+ // };
+ // },
+ // .array_mul => {
+ // const pl_node = data[inst_index].pl_node;
+ // const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
+ //
+ // const binop_index = self.exprs.items.len;
+ // try self.exprs.append(self.arena, .{ .binOp = .{ .lhs = 0, .rhs = 0 } });
+ //
+ // var lhs: DocData.WalkResult = try self.walkRef(
+ // file,
+ // parent_scope,
+ // extra.data.lhs,
+ // false,
+ // );
+ // var rhs: DocData.WalkResult = try self.walkRef(
+ // file,
+ // parent_scope,
+ // extra.data.rhs,
+ // false,
+ // );
+ //
+ // const lhs_index = self.exprs.items.len;
+ // try self.exprs.append(self.arena, lhs.expr);
+ // const rhs_index = self.exprs.items.len;
+ // try self.exprs.append(self.arena, rhs.expr);
+ // self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .exact = true, .opKind = 14 } };
+ //
+ // return DocData.WalkResult{
+ // .typeRef = .{ .type = @enumToInt(Ref.type_type) },
+ // .expr = .{ .binOpIndex = binop_index },
+ // };
+ // },
+ .vector_type => {
+ const pl_node = data[inst_index].pl_node;
+ const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
+
+ const binop_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, .{ .binOp = .{ .lhs = 0, .rhs = 0 } });
+
+ var lhs: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.lhs,
+ false,
+ );
+ var rhs: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.rhs,
+ false,
+ );
+
+ const lhs_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, lhs.expr);
+ const rhs_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, rhs.expr);
+ self.exprs.items[binop_index] = .{ .binOp = .{ .lhs = lhs_index, .rhs = rhs_index, .exact = true, .opKind = 15 } };
+
+ return DocData.WalkResult{
+ .typeRef = .{ .type = @enumToInt(Ref.type_type) },
+ .expr = .{ .binOpIndex = binop_index },
+ };
+ },
+
+ .align_of,
+ .bool_to_int,
+ .embed_file,
+ .error_name,
+ .panic,
+ .set_cold, // @check
+ .set_runtime_safety, // @check
+ .sqrt,
+ .sin,
+ .cos,
+ .tan,
+ .exp,
+ .exp2,
+ .log,
+ .log2,
+ .log10,
+ .fabs,
+ .floor,
+ .ceil,
+ .trunc,
+ .round,
+ .tag_name,
+ .reify,
+ .type_name,
+ .frame_type,
+ .frame_size,
+ => {
+ const un_node = data[inst_index].un_node;
+ const bin_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, .{ .builtin = .{ .param = 0 } });
+ const param = try self.walkRef(file, parent_scope, un_node.operand, false);
+
+ const param_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, param.expr);
+
+ self.exprs.items[bin_index] = .{ .builtin = .{ .name = @tagName(tags[inst_index]), .param = param_index } };
+
+ return DocData.WalkResult{
+ .typeRef = param.typeRef,
+ .expr = .{ .builtinIndex = bin_index },
+ };
+ },
+ .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);
+
+ const binop_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, .{ .builtinBin = .{ .lhs = 0, .rhs = 0 } });
+
+ var lhs: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.lhs,
+ false,
+ );
+ var rhs: DocData.WalkResult = try self.walkRef(
+ file,
+ parent_scope,
+ extra.data.rhs,
+ false,
+ );
+
+ const lhs_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, lhs.expr);
+ const rhs_index = self.exprs.items.len;
+ try self.exprs.append(self.arena, rhs.expr);
+ self.exprs.items[binop_index] = .{ .builtinBin = .{ .name = @tagName(tags[inst_index]), .lhs = lhs_index, .rhs = rhs_index } };
+
+ return DocData.WalkResult{
+ .typeRef = .{ .type = @enumToInt(Ref.type_type) },
+ .expr = .{ .builtinBinIndex = binop_index },
+ };
+ },
.error_union_type => {
const pl_node = data[inst_index].pl_node;
const extra = file.zir.extraData(Zir.Inst.Bin, pl_node.payload_index);
@@ -2398,26 +2632,6 @@ fn walkInstruction(
.expr = .{ .typeOf = operand_index },
};
},
- .align_of => {
- // WIP
- // not fully working
- // @alignOf() with some pointer type it's not even called in js
- // @alignOf([*]u8) are being rendered as [*]u8
- const un_node = data[inst_index].un_node;
- const operand = try self.walkRef(
- file,
- parent_scope,
- un_node.operand,
- need_type,
- );
- const operand_index = self.exprs.items.len;
- try self.exprs.append(self.arena, operand.expr);
-
- return DocData.WalkResult{
- .typeRef = operand.typeRef,
- .expr = .{ .alignOf = operand_index },
- };
- },
.typeof_builtin => {
const pl_node = data[inst_index].pl_node;
const extra = file.zir.extraData(Zir.Inst.Block, pl_node.payload_index);
@@ -2438,31 +2652,6 @@ fn walkInstruction(
.expr = .{ .typeOf = operand_index },
};
},
- .typeof_log2_int_type => {
- // @check
- const un_node = data[inst_index].un_node;
- const operand = try self.walkRef(
- file,
- parent_scope,
- un_node.operand,
- need_type,
- );
-
- // WIP
- // const sep = "=" ** 200;
- // std.debug.print("{s}\n", .{sep});
- // std.debug.print("un_node = {any}\n", .{un_node});
- // std.debug.print("operand = {any}\n", .{operand});
- // std.debug.print("{s}\n", .{sep});
-
- const operand_index = self.exprs.items.len;
- try self.exprs.append(self.arena, operand.expr);
-
- return DocData.WalkResult{
- .typeRef = operand.typeRef,
- .expr = .{ .typeOf = operand_index },
- };
- },
.type_info => {
// @check
const un_node = data[inst_index].un_node;
@@ -3681,8 +3870,8 @@ fn tryResolveRefPath(
panicWithContext(
file,
inst_index,
- "TODO: handle `{s}` in tryResolveDeclPath.type\n",
- .{@tagName(self.types.items[t_index])},
+ "TODO: handle `{s}` in tryResolveDeclPath.type\nInfo: {}",
+ .{ @tagName(self.types.items[t_index]), resolved_parent },
);
},
.Unanalyzed => {