fix: fix parser/generator issues

This commit is contained in:
samsonium
2026-11-05 03:46:16 +03:00
parent bd8272abc7
commit 66f31ab865
23 changed files with 264 additions and 1721 deletions
+10 -12
View File
@@ -1,10 +1,14 @@
#include <common/fzl_types.h>
#include <compiler/fzl_gen.h>
#include <compiler/internals/gen.h>
#include <compiler/utils/fzl_symtable.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char class_typecn[256];
// Class definition
gen_res_t gen_class(fzl_gen_t *gen, fzl_node_t *node)
{
@@ -17,7 +21,7 @@ gen_res_t gen_class(fzl_gen_t *gen, fzl_node_t *node)
gen->classes[gen->classes_count] = fzl_mkctable(node->class.name->value);
fzl_ctable_t *class = gen->classes[gen->classes_count++];
class->name = node->class.name->value;
class->name = (char *)node->class.name->value;
for (size_t i = 0; i < node->class.fields_count; i++)
{
@@ -29,16 +33,12 @@ gen_res_t gen_class(fzl_gen_t *gen, fzl_node_t *node)
}
fzl_type_t type;
char typecn[256];
memset(typecn, 0, sizeof(typecn));
memset(class_typecn, 0, sizeof(class_typecn));
bool resolved =
gen_resolve_type(gen, node->class.fields[i]->var.type, &type, typecn);
bool resolved = gen_resolve_type(gen, node->class.fields[i]->var.type,
&type, class_typecn);
if (!resolved)
{
free(class->fields);
return gen_error;
}
class->fields[class->fields_count] = (fzl_ctable_field_t){
.name = node->class.fields[i]->var.identifier->token->value,
@@ -65,17 +65,15 @@ gen_res_t gen_class(fzl_gen_t *gen, fzl_node_t *node)
fn->fn.name->value = method_name;
if (gen_common(gen, fn).error)
{
free(class->fields);
free(method_name);
fn->fn.name->value = NULL;
return gen_error;
}
}
ctx = gen_fin_ctx(gen);
if (!ctx)
{
free(class->fields);
return gen_error;
}
return gen_ok_null;
}