#include #include #include // Binary math operations gen_res_t gen_math(fzl_gen_t *gen, fzl_node_t *node) { if (!gen || !node) return gen_error; gen_res_t lres = gen_common(gen, node->binary_op.left); if (lres.error) return lres; gen_res_t rres = gen_common(gen, node->binary_op.right); if (rres.error) return rres; if (lres.type < FZL_TYPE_INT8 || rres.type < FZL_TYPE_INT8) return gen_error; switch (node->type) { case FZL_NODETYPE_ADD: gen_op(gen, FZL_OPCODE_ADD); break; case FZL_NODETYPE_SUB: gen_op(gen, FZL_OPCODE_SUB); break; case FZL_NODETYPE_MUL: gen_op(gen, FZL_OPCODE_MUL); break; case FZL_NODETYPE_DIV: gen_op(gen, FZL_OPCODE_DIV); break; case FZL_NODETYPE_POW: gen_op(gen, FZL_OPCODE_POW); break; case FZL_NODETYPE_MOD: gen_op(gen, FZL_OPCODE_MOD); break; default: return gen_error; } return (gen_res_t){.error = false, .type = lres.type, .classname = NULL}; }