#ifndef __SCC_HIR_MODULE_H__ #define __SCC_HIR_MODULE_H__ #include "hir_def.h" #include #include typedef struct { scc_cfg_module_t cfg_module; scc_cfg_id_t value_uid; scc_cfg_id_t type_uid; SCC_VEC(scc_hir_value_t) values; SCC_VEC(scc_hir_type_t) types; // UID -> ref index scc_hashtable_t uid2value; scc_hashtable_t uid2type; SCC_VEC(scc_hir_bblock_meta_t *) bblock_meta; SCC_VEC(scc_hir_func_meta_t *) funcs_meta; } scc_hir_module_t; void scc_hir_module_init(scc_hir_module_t *ctx); void scc_hir_module_drop(scc_hir_module_t *ctx); scc_hir_type_ref_t scc_hir_module_add_type(scc_hir_module_t *ctx, const scc_hir_type_t *type); scc_hir_value_ref_t scc_hir_module_add_value(scc_hir_module_t *ctx, const scc_hir_value_t *node); scc_hir_bblock_ref_t scc_hir_module_add_bblock(scc_hir_module_t *ctx, const scc_hir_bblock_t *bblock); scc_hir_func_ref_t scc_hir_module_add_func(scc_hir_module_t *ctx, const scc_hir_func_t *func); scc_hir_type_t *scc_hir_module_get_type(scc_hir_module_t *ctx, scc_hir_type_ref_t ref); scc_hir_value_t *scc_hir_module_get_value(scc_hir_module_t *ctx, scc_hir_value_ref_t ref); scc_hir_bblock_t *scc_hir_module_get_bblock(scc_hir_module_t *ctx, scc_hir_bblock_ref_t ref); scc_hir_func_t *scc_hir_module_get_func(scc_hir_module_t *ctx, scc_hir_func_ref_t ref); static inline scc_hir_type_t * scc_hir_module_get_type_by_value(scc_hir_module_t *ctx, scc_hir_value_ref_t ref) { scc_hir_value_t *value = scc_hir_module_get_value(ctx, ref); Assert(value != nullptr); return scc_hir_module_get_type(ctx, value->type); } #endif /* __SCC_HIR_MODULE_H__ */