Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › compiler/ › translate-c/ › Translator.zig › transIntCast
transIntCast
Translator.transIntCast
fn transIntCast (t : *Translator , operand : ZigNode , src_qt : QualType , dest_qt : QualType ) !ZigNode
File
Code
fn transIntCast (t : *Translator , operand : ZigNode , src_qt : QualType , dest_qt : QualType ) !ZigNode {
const src_dest_order = src_qt .intRankOrder (dest_qt , t .comp );
const different_sign = t .signedness (src_qt ) != t .signedness (dest_qt );
const needs_bitcast = different_sign and !(t .signedness (src_qt ) == .unsigned and src_dest_order == .lt );
var casted = operand ;
if (casted .isBoolRes ()) {
casted = try ZigTag .int_from_bool .create (t .arena , casted );
} else if (src_dest_order == .gt ) {
casted = try ZigTag .truncate .create (t .arena , casted );
}
if (needs_bitcast ) {
if (src_dest_order != .eq ) {
casted = try ZigTag .as .create (t .arena , .{
.lhs = try t .transTypeIntWidthOf (dest_qt , t .signedness (src_qt ) == .signed ),
.rhs = casted ,
});
}
return ZigTag .bit_cast .create (t .arena , casted );
}
return casted ;
}