wip: begin writer impl for externs
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user