25 static const size_t kModuleTags[] = { eCtuTagModules, eCtuTagImports };
26 static const size_t kDeclTags[] = { eCtuTagTypes };
30 .module_count =
sizeof(kModuleTags) /
sizeof(
size_t),
32 .decl_tags = kDeclTags,
33 .decl_count =
sizeof(kDeclTags) /
sizeof(
size_t)
55 for (
size_t i = 0; i < len; i++)
83 size_t v = mpz_get_ui(value);
93 result->
quals |= eQualConst;
116 tree_t *result = sema_type_inner(sema, type);
CT_PUREFN CT_TREE_API const char * tree_get_name(const tree_t *tree)
CT_PUREFN CT_TREE_API bool tree_is(const tree_t *self, tree_kind_t kind)
tree_t * ctu_sema_rvalue(ctu_sema_t *sema, const ctu_t *expr, const tree_t *implicit_type)
tree_t * ctu_get_int_type(digit_t digit, sign_t sign)
logger_t * ctu_sema_reports(ctu_sema_t *sema)
CT_MEMORY_API arena_t * get_global_arena(void)
get the global memory arena
CT_NODISCARD CT_ARENA_API void * arena_memdup(STA_READS(size) const void *ptr, size_t size, arena_t *arena)
duplicate a memory region from a custom allocator duplicate a region of memory and return a pointer t...
CT_NOTIFY_API event_builder_t msg_notify(INOUT_NOTNULL logger_t *logs, const diagnostic_t *diagnostic, const node_t *node, STA_FORMAT_STRING const char *fmt,...)
notify the logger of a new message
#define CT_NEVER(...)
assert that a code path is never reached
#define CTASSERT(expr)
assert a condition, prints the condition as a message
CT_UTIL_API bool util_eval_digit(mpz_t value, const tree_t *expr)
evaluate a digit expression
CT_UTIL_API tree_t * util_search_path(tree_t *sema, const decl_search_t *search, const node_t *node, vector_t *path)
search for a decl given a path
CT_TREE_API tree_t * tree_type_closure(const node_t *node, const char *name, const tree_t *result, const vector_t *params, tree_arity_t arity)
create a function pointer type
CT_TREE_API tree_t * tree_type_pointer(const node_t *node, const char *name, const tree_t *pointer, size_t length)
create a pointer type
CT_TREE_API tree_cookie_t * tree_get_cookie(tree_t *sema)
return a resolution cookie
CT_TREE_API tree_t * tree_decl_param(const node_t *node, const char *name, const tree_t *type)
CT_TREE_API tree_t * tree_resolve_type(tree_cookie_t *cookie, const tree_t *decl)
CT_TREE_API tree_t * tree_type_array(const node_t *node, const char *name, const tree_t *array, size_t length)
create a new array type
CT_NODISCARD CT_PUREFN CT_STD_API void * vector_get(const vector_t *vector, size_t index)
get a value from a vector
CT_NODISCARD CT_STD_API vector_t * vector_of(size_t len, arena_t *arena)
create a new vector with a specified length
CT_STD_API void vector_set(vector_t *vector, size_t index, void *value)
set a value in a vector
CT_NODISCARD CT_PUREFN CT_STD_API size_t vector_len(const vector_t *vector)
get the length of a vector
tree_t * ctu_sema_type(ctu_sema_t *sema, const ctu_t *type)
STA_DECL char * str_format(arena_t *arena, const char *fmt,...)
tree_t * sema
current scope
const size_t * module_tags
a generic vector of pointers