32 lines
769 B
C
32 lines
769 B
C
#include <common/fzl_types.h>
|
|
#include <compiler/internals/gen.h>
|
|
#include <stdbool.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
char alias_typecn[256];
|
|
|
|
// Type aliasing
|
|
gen_res_t gen_alias(fzl_gen_t *gen, fzl_node_t *node)
|
|
{
|
|
if (!gen || !node)
|
|
return gen_error;
|
|
|
|
fzl_type_t type;
|
|
memset(alias_typecn, 0, sizeof(alias_typecn));
|
|
|
|
bool resolved = gen_resolve_type(gen, node->token, &type, alias_typecn);
|
|
if (!resolved)
|
|
return gen_error;
|
|
|
|
ssize_t slot = gen_resolve_extern_type(gen, alias_typecn);
|
|
if (slot == -1)
|
|
type_buf.alias_target =
|
|
(fzl_extern_type_ref_t){.is_primitive = true, .primitive = type};
|
|
else
|
|
type_buf.alias_target =
|
|
(fzl_extern_type_ref_t){.is_primitive = false, .type_slot = slot};
|
|
|
|
return gen_ok_null;
|
|
}
|