authorgravatar for vallahor91@gmail.comVallahor <vallahor91@gmail.com> 2022-06-03 20:11:18-03:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-19 19:10:12-07:00
logf13db1ce18cb7626b664b14606223e16357416b4
tree78430dc309193d959d678d614419741f7cdc1adb
parent4530b446b1c0cd18e4f91f45aec8f314e563175f

autodoc: add cmpxchg_strong/weak


2 files changed, 112 insertions(+), 0 deletions(-)

lib/docs/main.js+38
...@@ -1113,6 +1113,44 @@ var zigAnalysis;...@@ -1113,6 +1113,44 @@ var zigAnalysis;
1113 const sliceIndex = zigAnalysis.exprs[expr.sliceIndex];1113 const sliceIndex = zigAnalysis.exprs[expr.sliceIndex];
1114 return exprName(sliceIndex, opts);1114 return exprName(sliceIndex, opts);
1115 }1115 }
1116 case "cmpxchg":{
1117 console.log(expr);
1118 const typeIndex = zigAnalysis.exprs[expr.cmpxchg.type];
1119 const ptrIndex = zigAnalysis.exprs[expr.cmpxchg.ptr];
1120 const expectedValueIndex = zigAnalysis.exprs[expr.cmpxchg.expected_value];
1121 const newValueIndex = zigAnalysis.exprs[expr.cmpxchg.new_value];
1122 const successOrderIndex = zigAnalysis.exprs[expr.cmpxchg.success_order];
1123 const failureOrderIndex = zigAnalysis.exprs[expr.cmpxchg.failure_order];
1124
1125 const type = exprName(typeIndex, opts);
1126 const ptr = exprName(ptrIndex, opts);
1127 const expectedValue = exprName(expectedValueIndex, opts);
1128 const newValue = exprName(newValueIndex, opts);
1129 const successOrder = exprName(successOrderIndex, opts);
1130 const failureOrder = exprName(failureOrderIndex, opts);
1131
1132 let fnName = "@";
1133
1134 switch (expr.cmpxchg.name) {
1135 case "cmpxchg_strong": {
1136 fnName += "cmpxchgStrong"
1137 break;
1138 }
1139 case "cmpxchg_weak": {
1140 fnName += "cmpxchgWeak"
1141 break;
1142 }
1143 default: {
1144 console.log("There's only cmpxchg_strong and cmpxchg_weak");
1145 }
1146 }
1147
1148 return fnName + "(" + type + ", " + ptr + ", " + expectedValue + ", "+ newValue + ", "+"." +successOrder + ", "+ "." +failureOrder + ")";
1149 }
1150 case "cmpxchgIndex": {
1151 const cmpxchgIndex = zigAnalysis.exprs[expr.cmpxchgIndex];
1152 return exprName(cmpxchgIndex, opts);
1153 }
1116 case "switchOp":{1154 case "switchOp":{
1117 let condExpr = zigAnalysis.exprs[expr.switchOp.cond_index];1155 let condExpr = zigAnalysis.exprs[expr.switchOp.cond_index];
1118 let node_name_ = expr.switchOp.node_name;1156 let node_name_ = expr.switchOp.node_name;
src/Autodoc.zig+74
...@@ -675,6 +675,8 @@ const DocData = struct {...@@ -675,6 +675,8 @@ const DocData = struct {
675 string: []const u8, // direct value675 string: []const u8, // direct value
676 sliceIndex: usize,676 sliceIndex: usize,
677 slice: Slice,677 slice: Slice,
678 cmpxchgIndex: usize,
679 cmpxchg: Cmpxchg,
678 builtin: Builtin,680 builtin: Builtin,
679 builtinIndex: usize,681 builtinIndex: usize,
680 builtinBin: BuiltinBin,682 builtinBin: BuiltinBin,
...@@ -709,6 +711,7 @@ const DocData = struct {...@@ -709,6 +711,7 @@ const DocData = struct {
709 end: ?usize = null,711 end: ?usize = null,
710 sentinel: ?usize = null, // index in `exprs`712 sentinel: ?usize = null, // index in `exprs`
711 };713 };
714 const Cmpxchg = struct { name: []const u8, type: usize, ptr: usize, expected_value: usize, new_value: usize, success_order: usize, failure_order: usize };
712 const As = struct {715 const As = struct {
713 typeRefArg: ?usize, // index in `exprs`716 typeRefArg: ?usize, // index in `exprs`
714 exprArg: usize, // index in `exprs`717 exprArg: usize, // index in `exprs`
...@@ -814,6 +817,16 @@ const DocData = struct {...@@ -814,6 +817,16 @@ const DocData = struct {
814 options,817 options,
815 w,818 w,
816 ),819 ),
820 .cmpxchg => |v| try std.json.stringify(
821 struct { cmpxchg: Cmpxchg }{ .cmpxchg = v },
822 options,
823 w,
824 ),
825 .cmpxchgIndex => |v| try std.json.stringify(
826 struct { cmpxchgIndex: usize }{ .cmpxchgIndex = v },
827 options,
828 w,
829 ),
817 .binOp => |v| try std.json.stringify(830 .binOp => |v| try std.json.stringify(
818 struct { binOp: BinOp }{ .binOp = v },831 struct { binOp: BinOp }{ .binOp = v },
819 options,832 options,
...@@ -990,6 +1003,67 @@ fn walkInstruction(...@@ -990,6 +1003,67 @@ fn walkInstruction(
990 need_type,1003 need_type,
991 );1004 );
992 },1005 },
1006 .cmpxchg_strong, .cmpxchg_weak => {
1007 const pl_node = data[inst_index].pl_node;
1008 const extra = file.zir.extraData(Zir.Inst.Cmpxchg, pl_node.payload_index);
1009
1010 const last_type_index = self.exprs.items.len;
1011 const last_type = self.exprs.items[last_type_index - 1];
1012 const type_index = self.exprs.items.len;
1013 try self.exprs.append(self.arena, last_type);
1014
1015 const ptr_index = self.exprs.items.len;
1016 var ptr: DocData.WalkResult = try self.walkRef(
1017 file,
1018 parent_scope,
1019 extra.data.ptr,
1020 false,
1021 );
1022 try self.exprs.append(self.arena, ptr.expr);
1023
1024 const expected_value_index = self.exprs.items.len;
1025 var expected_value: DocData.WalkResult = try self.walkRef(
1026 file,
1027 parent_scope,
1028 extra.data.expected_value,
1029 false,
1030 );
1031 try self.exprs.append(self.arena, expected_value.expr);
1032
1033 const new_value_index = self.exprs.items.len;
1034 var new_value: DocData.WalkResult = try self.walkRef(
1035 file,
1036 parent_scope,
1037 extra.data.new_value,
1038 false,
1039 );
1040 try self.exprs.append(self.arena, new_value.expr);
1041
1042 const success_order_index = self.exprs.items.len;
1043 var success_order: DocData.WalkResult = try self.walkRef(
1044 file,
1045 parent_scope,
1046 extra.data.success_order,
1047 false,
1048 );
1049 try self.exprs.append(self.arena, success_order.expr);
1050
1051 const failure_order_index = self.exprs.items.len;
1052 var failure_order: DocData.WalkResult = try self.walkRef(
1053 file,
1054 parent_scope,
1055 extra.data.failure_order,
1056 false,
1057 );
1058 try self.exprs.append(self.arena, failure_order.expr);
1059
1060 const cmpxchg_index = self.exprs.items.len;
1061 try self.exprs.append(self.arena, .{ .cmpxchg = .{ .name = @tagName(tags[inst_index]), .type = type_index, .ptr = ptr_index, .expected_value = expected_value_index, .new_value = new_value_index, .success_order = success_order_index, .failure_order = failure_order_index } });
1062 return DocData.WalkResult{
1063 .typeRef = .{ .type = @enumToInt(Ref.type_type) },
1064 .expr = .{ .cmpxchgIndex = cmpxchg_index },
1065 };
1066 },
993 .str => {1067 .str => {
994 const str = data[inst_index].str.get(file.zir);1068 const str = data[inst_index].str.get(file.zir);
9951069