- Feat: stabilize extern header - Feat: add externs to walker - Feat: add extern node walking logic
87 lines
1.3 KiB
C
87 lines
1.3 KiB
C
#ifndef FZL_EXTERN_H
|
|
#define FZL_EXTERN_H
|
|
|
|
#include <common/fzl_types.h>
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
|
|
typedef enum
|
|
{
|
|
FZL_EXTERN_KIND_HANDLE,
|
|
FZL_EXTERN_KIND_STRUCT,
|
|
FZL_EXTERN_KIND_REF,
|
|
FZL_EXTERN_KIND_ALIAS,
|
|
} fzl_extern_kind_t;
|
|
|
|
// Type reference descriptor
|
|
typedef struct
|
|
{
|
|
bool is_primitive;
|
|
union
|
|
{
|
|
fzl_type_t primitive;
|
|
size_t type_slot;
|
|
};
|
|
} fzl_extern_type_ref_t;
|
|
|
|
// Structure field descriptor
|
|
typedef struct
|
|
{
|
|
char *name;
|
|
fzl_extern_type_ref_t type;
|
|
} fzl_extern_struct_field_t;
|
|
|
|
// Type descriptor
|
|
typedef struct
|
|
{
|
|
size_t lib_slot;
|
|
char *name;
|
|
fzl_extern_kind_t kind;
|
|
|
|
union
|
|
{
|
|
// Structure
|
|
struct
|
|
{
|
|
fzl_extern_struct_field_t *fields;
|
|
size_t fields_count;
|
|
} structure;
|
|
|
|
// Pointer (ref)
|
|
fzl_extern_type_ref_t ref_target;
|
|
|
|
// Alias
|
|
fzl_extern_type_ref_t alias_target;
|
|
};
|
|
} fzl_extern_type_t;
|
|
|
|
// Function argument descriptor
|
|
typedef struct
|
|
{
|
|
char *name;
|
|
fzl_extern_type_ref_t type;
|
|
bool is_out;
|
|
} fzl_extern_arg_t;
|
|
|
|
// Function descriptor
|
|
typedef struct
|
|
{
|
|
size_t lib_slot;
|
|
char *symbol_name;
|
|
char *used_name;
|
|
|
|
bool has_return;
|
|
fzl_extern_type_ref_t ret_type;
|
|
|
|
fzl_extern_arg_t *args;
|
|
size_t args_count;
|
|
} fzl_extern_fn_t;
|
|
|
|
// Library descriptor
|
|
typedef struct
|
|
{
|
|
char *name;
|
|
} fzl_extern_lib_t;
|
|
|
|
#endif // FZL_EXTERN_H
|