#include // 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; }