From b823f011412fdb3e168c5c093bbb5c47983e74bf Mon Sep 17 00:00:00 2001 From: Vallahor Date: Sat, 28 May 2022 19:47:12 -0300 Subject: [PATCH] add: extra information in extendedFn --- lib/docs/main.js | 14 ++++++++++++-- src/Autodoc.zig | 34 ++++++++++++++++++++++------------ 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/lib/docs/main.js b/lib/docs/main.js index 22f9b36382..7dfa4714fa 100644 --- a/lib/docs/main.js +++ b/lib/docs/main.js @@ -1374,7 +1374,10 @@ var zigAnalysis; let payloadHtml = ""; if (opts.wantHtml) { if (fnObj.is_extern) { - payloadHtml += "pub \"extern\" "; + payloadHtml += "pub extern "; + } + if (fnObj.has_lib_name) { + payloadHtml += "\"" + fnObj.lib_name +"\" "; } payloadHtml += 'fn'; if (opts.fnDecl) { @@ -1523,9 +1526,16 @@ var zigAnalysis; } payloadHtml += ') '; + + if (fnObj.has_align) { + let align = zigAnalysis.exprs[fnObj.align] + payloadHtml += "align(" + exprName(align, opts) + ") "; + } if (fnObj.has_cc) { let cc = zigAnalysis.exprs[fnObj.cc] - payloadHtml += "callconv(." + cc.enumLiteral + ") "; + if (cc) { + payloadHtml += "callconv(." + cc.enumLiteral + ") "; + } } if (fnObj.is_inferred_error) { diff --git a/src/Autodoc.zig b/src/Autodoc.zig index a278b53209..f5767f9d47 100644 --- a/src/Autodoc.zig +++ b/src/Autodoc.zig @@ -467,11 +467,13 @@ const DocData = struct { src: ?usize = null, // index into astNodes ret: Expr, params: ?[]Expr = null, // (use src->fields to find names) + lib_name: []const u8 = "", is_var_args: bool = false, is_inferred_error: bool = false, has_lib_name: bool = false, has_cc: bool = false, cc: ?usize = null, + @"align": ?usize = null, has_align: bool = false, is_test: bool = false, is_extern: bool = false, @@ -2771,27 +2773,35 @@ fn analyzeFunctionExtended( }; self.ast_nodes.items[self_ast_node_index].fields = param_ast_indexes.items; - const inst_data = data[inst_index].pl_node; + const inst_data = data[inst_index].pl_node; const extra = file.zir.extraData(Zir.Inst.ExtendedFunc, inst_data.payload_index); + + var extra_index: usize = extra.end; + + var lib_name: []const u8 = ""; + if (extra.data.bits.has_lib_name) { + lib_name = file.zir.nullTerminatedString(file.zir.extra[extra_index]); + extra_index += 1; + } + var cc_index: ?usize = null; + var align_index: ?usize = null; if (extra.data.bits.has_cc) { - const cc_ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra.end]); + const cc_ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]); cc_index = self.exprs.items.len; _ = try self.walkRef(file, scope, cc_ref, false); + extra_index += 1; + } + + if (extra.data.bits.has_align) { + const align_ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]); + align_index = self.exprs.items.len; + _ = try self.walkRef(file, scope, align_ref, false); } self.types.items[type_slot_index] = .{ - .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, - .is_inferred_error = extra.data.bits.is_inferred_error, - .cc = cc_index, - }, + .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 }, }; return DocData.WalkResult{