authorgravatar for vallahor91@gmail.comVallahor <vallahor91@gmail.com> 2022-05-28 19:47:12-03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-19 19:10:11-07:00
logb823f011412fdb3e168c5c093bbb5c47983e74bf
treed1b58fa03fca085e5ffd8b78a4559edffd52c8a8
parent927f087a406602dfca4f56b71cec378ffbfa2949

add: extra information in extendedFn


2 files changed, 34 insertions(+), 14 deletions(-)

lib/docs/main.js+12-2
...@@ -1374,7 +1374,10 @@ var zigAnalysis;...@@ -1374,7 +1374,10 @@ var zigAnalysis;
1374 let payloadHtml = "";1374 let payloadHtml = "";
1375 if (opts.wantHtml) {1375 if (opts.wantHtml) {
1376 if (fnObj.is_extern) {1376 if (fnObj.is_extern) {
1377 payloadHtml += "pub \"extern\" ";1377 payloadHtml += "pub extern ";
1378 }
1379 if (fnObj.has_lib_name) {
1380 payloadHtml += "\"" + fnObj.lib_name +"\" ";
1378 }1381 }
1379 payloadHtml += '<span class="tok-kw">fn</span>';1382 payloadHtml += '<span class="tok-kw">fn</span>';
1380 if (opts.fnDecl) {1383 if (opts.fnDecl) {
...@@ -1523,9 +1526,16 @@ var zigAnalysis;...@@ -1523,9 +1526,16 @@ var zigAnalysis;
1523 }1526 }
15241527
1525 payloadHtml += ') ';1528 payloadHtml += ') ';
1529
1530 if (fnObj.has_align) {
1531 let align = zigAnalysis.exprs[fnObj.align]
1532 payloadHtml += "align(" + exprName(align, opts) + ") ";
1533 }
1526 if (fnObj.has_cc) {1534 if (fnObj.has_cc) {
1527 let cc = zigAnalysis.exprs[fnObj.cc]1535 let cc = zigAnalysis.exprs[fnObj.cc]
1528 payloadHtml += "callconv(." + cc.enumLiteral + ") ";1536 if (cc) {
1537 payloadHtml += "callconv(." + cc.enumLiteral + ") ";
1538 }
1529 }1539 }
15301540
1531 if (fnObj.is_inferred_error) {1541 if (fnObj.is_inferred_error) {
src/Autodoc.zig+22-12
...@@ -467,11 +467,13 @@ const DocData = struct {...@@ -467,11 +467,13 @@ const DocData = struct {
467 src: ?usize = null, // index into astNodes467 src: ?usize = null, // index into astNodes
468 ret: Expr,468 ret: Expr,
469 params: ?[]Expr = null, // (use src->fields to find names)469 params: ?[]Expr = null, // (use src->fields to find names)
470 lib_name: []const u8 = "",
470 is_var_args: bool = false,471 is_var_args: bool = false,
471 is_inferred_error: bool = false,472 is_inferred_error: bool = false,
472 has_lib_name: bool = false,473 has_lib_name: bool = false,
473 has_cc: bool = false,474 has_cc: bool = false,
474 cc: ?usize = null,475 cc: ?usize = null,
476 @"align": ?usize = null,
475 has_align: bool = false,477 has_align: bool = false,
476 is_test: bool = false,478 is_test: bool = false,
477 is_extern: bool = false,479 is_extern: bool = false,
...@@ -2771,27 +2773,35 @@ fn analyzeFunctionExtended(...@@ -2771,27 +2773,35 @@ fn analyzeFunctionExtended(
2771 };2773 };
27722774
2773 self.ast_nodes.items[self_ast_node_index].fields = param_ast_indexes.items;2775 self.ast_nodes.items[self_ast_node_index].fields = param_ast_indexes.items;
2774 const inst_data = data[inst_index].pl_node;
27752776
2777 const inst_data = data[inst_index].pl_node;
2776 const extra = file.zir.extraData(Zir.Inst.ExtendedFunc, inst_data.payload_index);2778 const extra = file.zir.extraData(Zir.Inst.ExtendedFunc, inst_data.payload_index);
2779
2780 var extra_index: usize = extra.end;
2781
2782 var lib_name: []const u8 = "";
2783 if (extra.data.bits.has_lib_name) {
2784 lib_name = file.zir.nullTerminatedString(file.zir.extra[extra_index]);
2785 extra_index += 1;
2786 }
2787
2777 var cc_index: ?usize = null;2788 var cc_index: ?usize = null;
2789 var align_index: ?usize = null;
2778 if (extra.data.bits.has_cc) {2790 if (extra.data.bits.has_cc) {
2779 const cc_ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra.end]);2791 const cc_ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]);
2780 cc_index = self.exprs.items.len;2792 cc_index = self.exprs.items.len;
2781 _ = try self.walkRef(file, scope, cc_ref, false);2793 _ = try self.walkRef(file, scope, cc_ref, false);
2794 extra_index += 1;
2795 }
2796
2797 if (extra.data.bits.has_align) {
2798 const align_ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]);
2799 align_index = self.exprs.items.len;
2800 _ = try self.walkRef(file, scope, align_ref, false);
2782 }2801 }
27832802
2784 self.types.items[type_slot_index] = .{2803 self.types.items[type_slot_index] = .{
2785 .Fn = .{2804 .Fn = .{ .name = "todo_name func", .src = self_ast_node_index, .params = param_type_refs.items, .ret = ret_type_ref.expr, .is_extern = extra.data.bits.is_extern, .has_cc = extra.data.bits.has_cc, .has_align = extra.data.bits.has_align, .has_lib_name = extra.data.bits.has_lib_name, .lib_name = lib_name, .is_inferred_error = extra.data.bits.is_inferred_error, .cc = cc_index, .@"align" = align_index },
2786 .name = "todo_name func",
2787 .src = self_ast_node_index,
2788 .params = param_type_refs.items,
2789 .ret = ret_type_ref.expr,
2790 .is_extern = extra.data.bits.is_extern,
2791 .has_cc = extra.data.bits.has_cc,
2792 .is_inferred_error = extra.data.bits.is_inferred_error,
2793 .cc = cc_index,
2794 },
2795 };2805 };
27962806
2797 return DocData.WalkResult{2807 return DocData.WalkResult{