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

48 lines
1.1 KiB
C

#include <common/fzl_types.h>
#include <compiler/internals/gen.h>
#include <stdio.h>
// 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};
}