From 73e9dbbf8c4a68dc6c512eb2de568d59df046494 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 13 Oct 2018 11:07:56 +0100 Subject: switch on typeid with type cases --- src/ir.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/ir.cpp') diff --git a/src/ir.cpp b/src/ir.cpp index ffd9f4f67..b51b9c184 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -7145,7 +7145,14 @@ void ir_build_stmt_internal(irProcedure *proc, Ast *node) { irValue *cond_rhs = ir_emit_comp(proc, op, tag, rhs); cond = ir_emit_arith(proc, Token_And, cond_lhs, cond_rhs, t_bool); } else { - cond = ir_emit_comp(proc, Token_CmpEq, tag, ir_build_expr(proc, expr)); + if (expr->tav.mode == Addressing_Type) { + GB_ASSERT(is_type_typeid(ir_type(tag))); + irValue *e = ir_typeid(proc->module, expr->tav.type); + e = ir_emit_conv(proc, e, ir_type(tag)); + cond = ir_emit_comp(proc, Token_CmpEq, tag, e); + } else { + cond = ir_emit_comp(proc, Token_CmpEq, tag, ir_build_expr(proc, expr)); + } } ir_emit_if(proc, cond, body, next_cond); ir_start_block(proc, next_cond); -- cgit v1.2.3