+def generate_if_else_statement(counters, statement):
+ if_counter = counters['if']
+ counters['if'] += 1
+
+ referenced_entry_list_list = []
+
+ if_instruction_list_list = []
+ for if_statement in statement.if_statement_list:
+ referenced_entry_list, instruction_list = generate_statement(counters, if_statement)
+ referenced_entry_list_list.append(referenced_entry_list)
+ if_instruction_list_list.append(instruction_list)
+
+ else_instruction_list_list = []
+
+ for else_statement in statement.else_statement_list:
+ referenced_entry_list, instruction_list = generate_statement(counters, else_statement)
+ referenced_entry_list_list.append(referenced_entry_list)
+ else_instruction_list_list.append(instruction_list)
+
+ if_label = '__if${}__'.format(if_counter)
+ else_label = '__else${}__'.format(if_counter)
+ endif_label = '__endif${}__'.format(if_counter)
+
+ return (
+ referenced_entry_list_list,
+ generate_expression(statement.condition_expression) + (
+ CIRInstruction(
+ instruction='jump_if_false',
+ argument=else_label,
+ ),
+ CIRLabel(label=if_label),
+ ) + flatten(if_instruction_list_list) + (
+ CIRInstruction(
+ instruction='jump',
+ argument=endif_label,
+ ),
+ CIRLabel(label=else_label),
+ ) + flatten(else_instruction_list_list) + (
+ CIRLabel(label=endif_label),
+ ),
+ )