feat: finish generator
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
#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};
|
||||
}
|
||||
Reference in New Issue
Block a user