mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 05:44:20 +00:00
zig fmt: canonicalize nested cast builtin order
This commit is contained in:
parent
a5f891d0b3
commit
81219493f8
1 changed files with 42 additions and 1 deletions
|
|
@ -783,7 +783,48 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
|
|||
=> {
|
||||
var buf: [2]Ast.Node.Index = undefined;
|
||||
const params = tree.builtinCallParams(&buf, node).?;
|
||||
return renderBuiltinCall(r, tree.nodeMainToken(node), params, space);
|
||||
var builtin_token = tree.nodeMainToken(node);
|
||||
|
||||
canonicalize: {
|
||||
if (params.len != 1) break :canonicalize;
|
||||
|
||||
const CastKind = enum {
|
||||
ptrCast,
|
||||
alignCast,
|
||||
addrSpaceCast,
|
||||
constCast,
|
||||
volatileCast,
|
||||
};
|
||||
const kind = meta.stringToEnum(CastKind, tree.tokenSlice(builtin_token)[1..]) orelse break :canonicalize;
|
||||
|
||||
var cast_map = std.EnumMap(CastKind, Ast.TokenIndex).init(.{});
|
||||
cast_map.put(kind, builtin_token);
|
||||
|
||||
var casts_before: usize = 0;
|
||||
if (builtin_token >= 2) {
|
||||
var prev_builtin_token = builtin_token - 2;
|
||||
while (tree.tokenTag(prev_builtin_token) == .builtin) : (prev_builtin_token -= 2) {
|
||||
const prev_kind = meta.stringToEnum(CastKind, tree.tokenSlice(prev_builtin_token)[1..]) orelse break;
|
||||
if (cast_map.contains(prev_kind)) break :canonicalize;
|
||||
cast_map.put(prev_kind, prev_builtin_token);
|
||||
casts_before += 1;
|
||||
}
|
||||
}
|
||||
|
||||
var next_builtin_token = builtin_token + 2;
|
||||
while (tree.tokenTag(next_builtin_token) == .builtin) : (next_builtin_token += 2) {
|
||||
const next_kind = meta.stringToEnum(CastKind, tree.tokenSlice(next_builtin_token)[1..]) orelse break;
|
||||
if (cast_map.contains(next_kind)) break :canonicalize;
|
||||
cast_map.put(next_kind, next_builtin_token);
|
||||
}
|
||||
|
||||
var it = cast_map.iterator();
|
||||
builtin_token = it.next().?.value.*;
|
||||
while (casts_before > 0) : (casts_before -= 1) {
|
||||
builtin_token = it.next().?.value.*;
|
||||
}
|
||||
}
|
||||
return renderBuiltinCall(r, builtin_token, params, space);
|
||||
},
|
||||
|
||||
.fn_proto_simple,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue