mirror of
https://github.com/ziglang/zig.git
synced 2026-02-15 13:58:27 +00:00
binOp now showing better it's need a better struture, right now it's has a hack one
This commit is contained in:
parent
9f6bdc4bbe
commit
462f751902
@ -1078,6 +1078,10 @@ var zigAnalysis;
|
||||
|
||||
let print_lhs = "";
|
||||
let print_rhs = "";
|
||||
|
||||
console.log(lhsOp)
|
||||
console.log(rhsOp)
|
||||
|
||||
if (lhsOp['binOpIndex']) {
|
||||
print_lhs = "(" + lhs + ")";
|
||||
} else {
|
||||
@ -1119,27 +1123,29 @@ var zigAnalysis;
|
||||
return print_div + print_lhs + ", " + print_rhs + ")";
|
||||
}
|
||||
case 4: {
|
||||
operator += "mod"
|
||||
break;
|
||||
return "@mod(" + print_lhs + ", " + print_rhs + ")";
|
||||
}
|
||||
case 5: {
|
||||
operator += "rem"
|
||||
break;
|
||||
return "@rem(" + print_lhs + ", " + print_rhs + ")";
|
||||
}
|
||||
case 6: {
|
||||
// rem_mod
|
||||
return "@rem(" + print_lhs + ", " + print_rhs + ")";
|
||||
}
|
||||
case 7: {
|
||||
if (expr.binOp.exact) {
|
||||
let print_shl = "@shlExact(";
|
||||
return print_shl + print_lhs + ", " + print_rhs + ")";
|
||||
}
|
||||
operator += "<<";
|
||||
break;
|
||||
}
|
||||
case 7: {
|
||||
operator += ">>";
|
||||
break;
|
||||
}
|
||||
case 8: {
|
||||
operator += "&";
|
||||
break;
|
||||
}
|
||||
case 7: {
|
||||
operator += "|";
|
||||
if (expr.binOp.exact) {
|
||||
let print_shr = "@shrExact(";
|
||||
return print_shr + print_lhs + ", " + print_rhs + ")";
|
||||
}
|
||||
operator += ">>";
|
||||
break;
|
||||
}
|
||||
default: console.log("operator not handled yet or doesn't exist!");
|
||||
|
||||
273
src/Autodoc.zig
273
src/Autodoc.zig
@ -667,7 +667,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: shl, 7: shr, 8: bitwise_and, 9: bitwise_or
|
||||
// 0: add, 1: sub, 2: mul, 3: div, 4: mod, 5: rem, 6: rem_mod, 7: shl, 8: shr
|
||||
// Others binOp are not handled yet
|
||||
opKind: usize = 0,
|
||||
// flags to operations
|
||||
@ -1342,6 +1342,260 @@ fn walkInstruction(
|
||||
.expr = .{ .binOpIndex = binop_index },
|
||||
};
|
||||
},
|
||||
|
||||
.mod => {
|
||||
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 = 4 } };
|
||||
|
||||
return DocData.WalkResult{
|
||||
.typeRef = .{ .type = @enumToInt(Ref.type_type) },
|
||||
.expr = .{ .binOpIndex = binop_index },
|
||||
};
|
||||
},
|
||||
.rem => {
|
||||
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, .floor = true, .opKind = 5 } };
|
||||
|
||||
return DocData.WalkResult{
|
||||
.typeRef = .{ .type = @enumToInt(Ref.type_type) },
|
||||
.expr = .{ .binOpIndex = binop_index },
|
||||
};
|
||||
},
|
||||
|
||||
// @check how to test it
|
||||
.mod_rem => {
|
||||
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, .floor = true, .opKind = 6 } };
|
||||
|
||||
return DocData.WalkResult{
|
||||
.typeRef = .{ .type = @enumToInt(Ref.type_type) },
|
||||
.expr = .{ .binOpIndex = binop_index },
|
||||
};
|
||||
},
|
||||
|
||||
.shl => {
|
||||
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 = 7 } };
|
||||
|
||||
return DocData.WalkResult{
|
||||
.typeRef = .{ .type = @enumToInt(Ref.type_type) },
|
||||
.expr = .{ .binOpIndex = binop_index },
|
||||
};
|
||||
},
|
||||
.shl_exact => {
|
||||
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 = 7 } };
|
||||
|
||||
return DocData.WalkResult{
|
||||
.typeRef = .{ .type = @enumToInt(Ref.type_type) },
|
||||
.expr = .{ .binOpIndex = binop_index },
|
||||
};
|
||||
},
|
||||
.shl_sat => {
|
||||
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, .sat = true, .opKind = 7 } };
|
||||
|
||||
return DocData.WalkResult{
|
||||
.typeRef = .{ .type = @enumToInt(Ref.type_type) },
|
||||
.expr = .{ .binOpIndex = binop_index },
|
||||
};
|
||||
},
|
||||
|
||||
.shr => {
|
||||
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 = 8 } };
|
||||
|
||||
return DocData.WalkResult{
|
||||
.typeRef = .{ .type = @enumToInt(Ref.type_type) },
|
||||
.expr = .{ .binOpIndex = binop_index },
|
||||
};
|
||||
},
|
||||
.shr_exact => {
|
||||
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 = 8 } };
|
||||
|
||||
return DocData.WalkResult{
|
||||
.typeRef = .{ .type = @enumToInt(Ref.type_type) },
|
||||
.expr = .{ .binOpIndex = 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);
|
||||
@ -1846,14 +2100,6 @@ fn walkInstruction(
|
||||
const dest_type_idx = self.exprs.items.len;
|
||||
try self.exprs.append(self.arena, dest_type_walk.expr);
|
||||
|
||||
const sep = "=" ** 200;
|
||||
std.debug.print("{s}\n", .{sep});
|
||||
std.debug.print("AS NODE\n", .{});
|
||||
std.debug.print("extra = {any}\n", .{extra});
|
||||
std.debug.print("desty_type_walk = {any}\n", .{dest_type_walk});
|
||||
std.debug.print("operand = {any}\n", .{operand});
|
||||
std.debug.print("{s}\n", .{sep});
|
||||
|
||||
// TODO: there's something wrong with how both `as` and `WalkrResult`
|
||||
// try to store type information.
|
||||
return DocData.WalkResult{
|
||||
@ -3305,14 +3551,7 @@ fn analyzeFunctionExtended(
|
||||
if (extra.data.bits.has_align) {
|
||||
const align_ref = @intToEnum(Zir.Inst.Ref, file.zir.extra[extra_index]);
|
||||
align_index = self.exprs.items.len;
|
||||
const result = try self.walkRef(file, scope, align_ref, false);
|
||||
|
||||
const sep = "=" ** 200;
|
||||
std.debug.print("{s}\n", .{sep});
|
||||
std.debug.print("ALIGN\n", .{});
|
||||
std.debug.print("align_ref = {any}\n", .{align_ref});
|
||||
std.debug.print("result = {any}\n", .{result});
|
||||
std.debug.print("{s}\n", .{sep});
|
||||
_ = try self.walkRef(file, scope, align_ref, false);
|
||||
}
|
||||
|
||||
self.types.items[type_slot_index] = .{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user