wip: begin writer impl for externs

This commit is contained in:
samsonium
2026-11-05 04:01:23 +03:00
parent 66f31ab865
commit de0e88f2e9
3 changed files with 10 additions and 15 deletions
+5
View File
@@ -39,6 +39,9 @@ int fzl_write(fzl_writer_t *writer, fzl_gen_t *gen)
const char hdr[5] = {'F', 'Z', 'L', 0x0, 0x1};
fwrite(hdr, sizeof(char), 5, fp);
fwrite(&gen->consts->size, sizeof(size_t), 1, fp);
fwrite(&gen->extern_libs_count, sizeof(size_t), 1, fp);
fwrite(&gen->extern_types_count, sizeof(size_t), 1, fp);
fwrite(&gen->extern_fns_count, sizeof(size_t), 1, fp);
fwrite(&gen->ops_count, sizeof(size_t), 1, fp);
for (size_t i = 0; i < gen->consts->size; i++)
@@ -54,6 +57,8 @@ int fzl_write(fzl_writer_t *writer, fzl_gen_t *gen)
}
}
// TODO: write libs, types and functions
if (gen->ops_count > 0)
fwrite(gen->ops, sizeof(uint64_t), gen->ops_count, fp);
+4 -5
View File
@@ -32,9 +32,6 @@ gen_res_t gen_externfn(fzl_gen_t *gen, fzl_node_t *node)
for (size_t i = 0; i < node->ext_fn.args_count; i++)
{
fzl_node_t *argnode = node->ext_fn.args[i];
if (gen_common(gen, argnode).error)
return gen_error;
if (args_count >= args_remainder)
{
args_remainder *= 2;
@@ -105,7 +102,8 @@ gen_res_t gen_externfn(fzl_gen_t *gen, fzl_node_t *node)
return gen_error;
}
if (ret != FZL_TYPE_NULL)
if (ret == FZL_TYPE_OBJECT || ret == FZL_TYPE_STRUCT ||
ret == FZL_TYPE_HANDLE)
{
res = fzl_symt_setobjclass(gen->syms[0], node->ext_fn.name, ex_retcn);
if (res != FZL_SYMTABLE_RESULT_OK)
@@ -130,7 +128,8 @@ gen_res_t gen_externfn(fzl_gen_t *gen, fzl_node_t *node)
result->args_count = args_count;
result->has_return = ret != FZL_TYPE_NULL;
result->used_name = node->ext_fn.name;
result->symbol_name = node->ext_fn.original_name;
result->symbol_name = node->ext_fn.original_name ? node->ext_fn.original_name
: node->ext_fn.name;
return gen_ok_null;
}
+1 -10
View File
@@ -17,10 +17,7 @@ gen_res_t gen_struct(fzl_gen_t *gen, fzl_node_t *node)
if (!gen || !node)
return gen_error;
type_buf.kind = FZL_EXTERN_KIND_STRUCT;
fzl_gen_ctx_t *ctx = gen_ctx(gen, FZL_GEN_CTX_TYPE_UNECCESSARY, node);
if (!ctx)
return gen_error;
type_buf.kind = FZL_EXTERN_KIND_STRUCT;
size_t remainder = 2;
size_t count = 0;
@@ -32,12 +29,6 @@ gen_res_t gen_struct(fzl_gen_t *gen, fzl_node_t *node)
for (size_t i = 0; i < node->structure.entries_count; i++)
{
fzl_node_t *fnode = node->structure.entries[i];
if (gen_common(gen, fnode).error)
{
free(fields);
return gen_error;
}
if (count >= remainder)
{
remainder *= 2;