@@ -369,7 +369,56 @@ def _handle_and_op(func, builder, expr, local_sym_tab, map_sym_tab, structs_sym_
369369
370370
371371def _handle_or_op (func , builder , expr , local_sym_tab , map_sym_tab , structs_sym_tab ):
372- pass
372+ """Handle `or` boolean operations."""
373+
374+ logger .debug (f"Handling 'or' operator with { len (expr .values )} operands" )
375+
376+ merge_block = func .append_basic_block (name = "or.merge" )
377+ true_block = func .append_basic_block (name = "or.true" )
378+
379+ incoming_values = []
380+
381+ for i , value in enumerate (expr .values ):
382+ is_last = i == len (expr .values ) - 1
383+
384+ # Evaluate current operand
385+ operand_result = eval_expr (
386+ func , None , builder , value , local_sym_tab , map_sym_tab , structs_sym_tab
387+ )
388+ if operand_result is None :
389+ logger .error (f"Failed to evaluate operand { i } in 'or' expression" )
390+ return None
391+
392+ operand_val , operand_type = operand_result
393+
394+ # Convert to boolean if needed
395+ operand_bool = convert_to_bool (builder , operand_val )
396+ current_block = builder .block
397+
398+ if is_last :
399+ # Last operand: result is this value
400+ builder .branch (merge_block )
401+ incoming_values .append ((operand_bool , current_block ))
402+ else :
403+ # Not last: check if false, continue or short-circuit
404+ next_check = func .append_basic_block (name = f"or.check_{ i + 1 } " )
405+ builder .cbranch (operand_bool , true_block , next_check )
406+ builder .position_at_end (next_check )
407+
408+ # True block: short-circuit with true
409+ builder .position_at_end (true_block )
410+ builder .branch (merge_block )
411+ true_value = ir .Constant (ir .IntType (1 ), 1 )
412+ incoming_values .append ((true_value , true_block ))
413+
414+ # Merge block: phi node
415+ builder .position_at_end (merge_block )
416+ phi = builder .phi (ir .IntType (1 ), name = "or.result" )
417+ for val , block in incoming_values :
418+ phi .add_incoming (val , block )
419+
420+ logger .debug (f"Generated 'or' with { len (incoming_values )} incoming values" )
421+ return phi , ir .IntType (1 )
373422
374423
375424def _handle_boolean_op (
0 commit comments