Files
fz-lang/src/compiler/generator/gen_condition.c
T
2026-11-05 00:04:12 +03:00

38 lines
825 B
C

#include <compiler/internals/gen.h>
// Conditional operation
gen_res_t gen_condition(fzl_gen_t *gen, fzl_node_t *node)
{
if (!gen || !node)
return gen_error;
gen_res_t cres = gen_common(gen, node->cond.condition);
if (cres.error)
return gen_error;
gen_op(gen, FZL_OPCODE_JZ);
size_t jz_if = gen->ops_count;
gen_word(gen, (uint64_t)0);
gen_res_t tblock_res = gen_common(gen, node->cond.true_block);
if (tblock_res.error)
return gen_error;
gen_op(gen, FZL_OPCODE_JMP);
size_t jmp_else = gen->ops_count;
gen_word(gen, (uint64_t)0);
gen->ops[jz_if] = gen->ops_count;
if (node->cond.else_block)
{
gen_res_t fblock_res = gen_common(gen, node->cond.else_block);
if (fblock_res.error)
return gen_error;
}
gen->ops[jmp_else] = gen->ops_count;
return gen_ok_null;
}