commit 3a2913ce082faadf64d1086d9893f7e1575e0036 (tree)
parent 3991c4bf41d9aeb07d034f3f24c1bbb2b0c9f3a5
Author: Motiejus <motiejus@jakstys.lt>
Date: Sat, 7 Mar 2026 07:26:38 +0000
sema: split zirTyOpCast into zirIntCast + zirTruncate
Add zirIntCast() and zirTruncate() as named entry points matching
src/Sema.zig's decomposition. Rename shared implementation to
analyzeTyOpCast(). Update dispatch and call sites.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Diffstat:
1 file changed, 18 insertions(+), 9 deletions(-)
diff --git a/stage0/sema.c b/stage0/sema.c
@@ -1573,10 +1573,9 @@ static AirInstRef zirBitcast(Sema* sema, SemaBlock* block, uint32_t inst) {
return semaAddInst(block, AIR_INST_BITCAST, data);
}
-// zirTyOpCast: generic handler for type-changing cast ZIR instructions
-// that produce a ty_op AIR instruction (intcast, truncate, etc.).
+// analyzeTyOpCast: shared worker for type-changing cast ZIR instructions.
// Ported from src/Sema.zig zirIntCast / zirTruncate (simplified).
-static AirInstRef zirTyOpCast(
+static AirInstRef analyzeTyOpCast(
Sema* sema, SemaBlock* block, uint32_t inst, AirInstTag air_tag) {
uint32_t payload_index = sema->code.inst_datas[inst].pl_node.payload_index;
ZirInstRef dest_ty_ref = sema->code.extra[payload_index];
@@ -1604,6 +1603,18 @@ static AirInstRef zirTyOpCast(
return semaAddInst(block, air_tag, data);
}
+// zirIntCast: handle int_cast ZIR instruction (@intCast).
+// Ported from src/Sema.zig zirIntCast.
+static AirInstRef zirIntCast(Sema* sema, SemaBlock* block, uint32_t inst) {
+ return analyzeTyOpCast(sema, block, inst, AIR_INST_INTCAST);
+}
+
+// zirTruncate: handle truncate ZIR instruction (@truncate).
+// Ported from src/Sema.zig zirTruncate.
+static AirInstRef zirTruncate(Sema* sema, SemaBlock* block, uint32_t inst) {
+ return analyzeTyOpCast(sema, block, inst, AIR_INST_TRUNC);
+}
+
// floatBits: get the bit width of a float type from its IP index.
static uint16_t floatBits(TypeIndex ty) {
switch (ty) {
@@ -11353,29 +11364,27 @@ bool analyzeBodyInner(
// @intCast.
case ZIR_INST_INT_CAST:
- instMapPut(&sema->inst_map, inst,
- zirTyOpCast(sema, block, inst, AIR_INST_INTCAST));
+ instMapPut(&sema->inst_map, inst, zirIntCast(sema, block, inst));
i++;
continue;
// @truncate.
case ZIR_INST_TRUNCATE:
- instMapPut(&sema->inst_map, inst,
- zirTyOpCast(sema, block, inst, AIR_INST_TRUNC));
+ instMapPut(&sema->inst_map, inst, zirTruncate(sema, block, inst));
i++;
continue;
// @intFromFloat.
case ZIR_INST_INT_FROM_FLOAT:
instMapPut(&sema->inst_map, inst,
- zirTyOpCast(sema, block, inst, AIR_INST_INT_FROM_FLOAT));
+ analyzeTyOpCast(sema, block, inst, AIR_INST_INT_FROM_FLOAT));
i++;
continue;
// @floatFromInt.
case ZIR_INST_FLOAT_FROM_INT:
instMapPut(&sema->inst_map, inst,
- zirTyOpCast(sema, block, inst, AIR_INST_FLOAT_FROM_INT));
+ analyzeTyOpCast(sema, block, inst, AIR_INST_FLOAT_FROM_INT));
i++;
continue;