@@ -783,7 +783,48 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
783
783
= > {
784
784
var buf : [2 ]Ast.Node.Index = undefined ;
785
785
const params = tree .builtinCallParams (& buf , node ).? ;
786
- return renderBuiltinCall (r , tree .nodeMainToken (node ), params , space );
786
+ var builtin_token = tree .nodeMainToken (node );
787
+
788
+ canonicalize : {
789
+ if (params .len != 1 ) break :canonicalize ;
790
+
791
+ const CastKind = enum {
792
+ ptrCast ,
793
+ alignCast ,
794
+ addrSpaceCast ,
795
+ constCast ,
796
+ volatileCast ,
797
+ };
798
+ const kind = meta .stringToEnum (CastKind , tree .tokenSlice (builtin_token )[1.. ]) orelse break :canonicalize ;
799
+
800
+ var cast_map = std .EnumMap (CastKind , Ast .TokenIndex ).init (.{});
801
+ cast_map .put (kind , builtin_token );
802
+
803
+ var casts_before : usize = 0 ;
804
+ if (builtin_token >= 2 ) {
805
+ var prev_builtin_token = builtin_token - 2 ;
806
+ while (tree .tokenTag (prev_builtin_token ) == .builtin ) : (prev_builtin_token -= 2 ) {
807
+ const prev_kind = meta .stringToEnum (CastKind , tree .tokenSlice (prev_builtin_token )[1.. ]) orelse break ;
808
+ if (cast_map .contains (prev_kind )) break :canonicalize ;
809
+ cast_map .put (prev_kind , prev_builtin_token );
810
+ casts_before += 1 ;
811
+ }
812
+ }
813
+
814
+ var next_builtin_token = builtin_token + 2 ;
815
+ while (tree .tokenTag (next_builtin_token ) == .builtin ) : (next_builtin_token += 2 ) {
816
+ const next_kind = meta .stringToEnum (CastKind , tree .tokenSlice (next_builtin_token )[1.. ]) orelse break ;
817
+ if (cast_map .contains (next_kind )) break :canonicalize ;
818
+ cast_map .put (next_kind , next_builtin_token );
819
+ }
820
+
821
+ var it = cast_map .iterator ();
822
+ builtin_token = it .next ().? .value .* ;
823
+ while (casts_before > 0 ) : (casts_before -= 1 ) {
824
+ builtin_token = it .next ().? .value .* ;
825
+ }
826
+ }
827
+ return renderBuiltinCall (r , builtin_token , params , space );
787
828
},
788
829
789
830
.fn_proto_simple ,
0 commit comments