wip: working on extern
- Feat: stabilize extern header - Feat: add externs to walker - Feat: add extern node walking logic
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
#include "common/fzl_extern.h"
|
||||
#include <common/fzl_builtins.h>
|
||||
#include <common/fzl_opcodes.h>
|
||||
#include <common/fzl_types.h>
|
||||
@@ -61,6 +62,14 @@ fzl_walker_t *fzl_mkwalker(fzl_node_t *root)
|
||||
walker->classes_count = 0;
|
||||
memset(walker->classes, 0, sizeof(walker->classes));
|
||||
|
||||
walker->extern_libs_count = 0;
|
||||
walker->extern_types_count = 0;
|
||||
walker->extern_fns_count = 0;
|
||||
|
||||
memset(walker->extern_libs, 0, sizeof(walker->extern_libs));
|
||||
memset(walker->extern_types, 0, sizeof(walker->extern_types));
|
||||
memset(walker->extern_fns, 0, sizeof(walker->extern_fns));
|
||||
|
||||
return walker;
|
||||
}
|
||||
|
||||
@@ -203,7 +212,28 @@ fzl_walk_res_t walk(fzl_walker_t *walker, fzl_node_t *node)
|
||||
{
|
||||
switch (node->type)
|
||||
{
|
||||
case FZL_NODETYPE_EXTERN: // TODO: create meta
|
||||
case FZL_NODETYPE_EXTERN:
|
||||
walker->extern_libs[walker->extern_libs_count++] =
|
||||
(fzl_extern_lib_t){.name = node->ext.libname};
|
||||
|
||||
for (size_t i = 0; i < node->ext.typedefs_count; i++)
|
||||
{
|
||||
fzl_walk_res_t res = walk(walker, node->ext.typedefs[i]);
|
||||
if (res.error)
|
||||
return res;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < node->ext.fns_count; i++)
|
||||
{
|
||||
fzl_walk_res_t res = walk(walker, node->ext.fns[i]);
|
||||
if (res.error)
|
||||
return res;
|
||||
}
|
||||
|
||||
current_res = (fzl_walk_res_t){
|
||||
.error = false, .type = FZL_TYPE_NULL, .classname = NULL};
|
||||
break;
|
||||
|
||||
case FZL_NODETYPE_EXTERN_FN: // TODO: write to meta
|
||||
case FZL_NODETYPE_REFERENCE: // TODO: write to meta
|
||||
case FZL_NODETYPE_STRUCT: // TODO: write to meta
|
||||
|
||||
Reference in New Issue
Block a user