feat: add generators' main entry

This commit is contained in:
samsonium
2026-11-04 17:10:21 +03:00
parent c0bd0d95b2
commit c5c522cde8
2 changed files with 147 additions and 3 deletions
+4 -3
View File
@@ -42,10 +42,11 @@ bool gen_fn(fzl_gen_t *gen, fzl_node_t *node);
bool gen_return(fzl_gen_t *gen, fzl_node_t *node);
bool gen_not(fzl_gen_t *gen, fzl_node_t *node);
bool gen_compare(fzl_gen_t *gen, fzl_node_t *node);
bool gen_or_and(fzl_gen_t *gen, fzl_node_t *node);
bool gen_logical(fzl_gen_t *gen, fzl_node_t *node);
bool gen_unary_logical(fzl_gen_t *gen, fzl_node_t *node);
bool gen_condition(fzl_gen_t *gen, fzl_node_t *node);
bool gen_unary_plus(fzl_gen_t *gen, fzl_node_t *node);
bool gen_unary_minus(fzl_gen_t *gen, fzl_node_t *node);
bool gen_unary_math(fzl_gen_t *gen, fzl_node_t *node);
bool gen_declaration(fzl_gen_t *gen, fzl_node_t *node);
bool gen_identifier(fzl_gen_t *gen, fzl_node_t *node);
bool gen_block(fzl_gen_t *gen, fzl_node_t *node);
bool gen_call(fzl_gen_t *gen, fzl_node_t *node);
+143
View File
@@ -0,0 +1,143 @@
#include <compiler/fzl_gen.h>
#include <compiler/fzl_parser.h>
#include <compiler/internals/gen.h>
#include <stdbool.h>
#include <stdio.h>
typedef bool (*gen_handle_fn)(fzl_gen_t *, fzl_node_t *);
// Common generator entry point
bool gen_common(fzl_gen_t *gen, fzl_node_t *node)
{
if (!gen || !node)
return false;
gen_handle_fn res = NULL;
switch (node->type)
{
case FZL_NODETYPE_ASSIGN:
res = gen_assign;
break;
case FZL_NODETYPE_DECLARATION:
res = gen_declaration;
break;
case FZL_NODETYPE_NOT:
res = gen_unary_logical;
break;
case FZL_NODETYPE_EQUAL:
case FZL_NODETYPE_NEQUAL:
case FZL_NODETYPE_LESS:
case FZL_NODETYPE_LESS_EQUAL:
case FZL_NODETYPE_GREATER:
case FZL_NODETYPE_GREATER_EQUAL:
res = gen_compare;
break;
case FZL_NODETYPE_OR:
case FZL_NODETYPE_AND:
res = gen_logical;
break;
case FZL_NODETYPE_UNARY_PLUS:
case FZL_NODETYPE_UNARY_MINUS:
res = gen_unary_math;
break;
case FZL_NODETYPE_ADD:
case FZL_NODETYPE_SUB:
case FZL_NODETYPE_MUL:
case FZL_NODETYPE_DIV:
case FZL_NODETYPE_POW:
case FZL_NODETYPE_MOD:
res = gen_math;
break;
case FZL_NODETYPE_BREAK:
res = gen_break;
break;
case FZL_NODETYPE_LOOP:
res = gen_loop;
break;
case FZL_NODETYPE_CONSTRUCT:
res = gen_construct;
break;
case FZL_NODETYPE_FIELD:
res = gen_field;
break;
case FZL_NODETYPE_CLASS:
res = gen_class;
break;
case FZL_NODETYPE_CALL:
res = gen_call;
break;
case FZL_NODETYPE_RETURN:
res = gen_return;
break;
case FZL_NODETYPE_FUNCTION:
res = gen_fn;
break;
case FZL_NODETYPE_CONDITIONAL:
res = gen_condition;
break;
case FZL_NODETYPE_IDENTIFIER:
res = gen_identifier;
break;
case FZL_NODETYPE_FMT_STRING:
res = gen_fmtstr;
break;
case FZL_NODETYPE_LITERAL:
res = gen_literal;
break;
case FZL_NODETYPE_BLOCK:
res = gen_block;
break;
case FZL_NODETYPE_EXTERN:
res = gen_extern;
break;
case FZL_NODETYPE_TYPEDEF:
res = gen_typedef;
break;
case FZL_NODETYPE_HANDLE:
res = gen_handle;
break;
case FZL_NODETYPE_ALIAS:
res = gen_alias;
break;
case FZL_NODETYPE_STRUCT:
res = gen_struct;
break;
case FZL_NODETYPE_REFERENCE:
res = gen_reference;
break;
case FZL_NODETYPE_EXTERN_FN:
res = gen_externfn;
break;
}
if (!res)
return false;
return res(gen, node);
}