fix: fix parser/generator issues
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user