20 for (
size_t i = 0; i < emit->
indent; ++i)
31 static void dbg_emit_tree(
dbg_emit_t *emit,
const tree_t *tree,
const char *name)
52 dbg_emit(dbg,
"length: %zu", storage.
length);
56 static void emit_section(
dbg_emit_t *dbg,
const char *name,
map_t *section)
58 dbg_emit(dbg,
"%s:", name);
89 dbg_emit(dbg,
"type:");
93 dbg_emit(dbg,
"storage:");
98 dbg_emit(dbg,
"value:");
110 dbg_emit(dbg,
"NULL");
117 case eTreeDeclModule:
118 emit_module(dbg, tree);
120 case eTreeDeclGlobal:
121 emit_global(dbg, tree);
131 io_t *io =
fs_open(emit->
fs,
"debug.tree", eOsAccessWrite | eOsAccessTruncate);
135 evt_os_error(runtime->
logger, &kEvent_FailedToCreateOutputFile, err,
"failed to create debug.tree");
144 emit_tree(&dbg, tree);
CT_PUREFN CT_TREE_API tree_kind_t tree_get_kind(const tree_t *tree)
CT_PUREFN CT_TREE_API const char * tree_get_name(const tree_t *tree)
CT_PUREFN CT_TREE_API const tree_t * tree_get_type(const tree_t *tree)
CT_TREE_API tree_storage_t tree_get_storage(const tree_t *tree)
CT_TREE_API const char * tree_to_string(const tree_t *self)
CT_BEGIN_API CT_TREE_API const char * tree_kind_to_string(tree_kind_t kind)
CT_EVENTS_API event_builder_t evt_os_error(logger_t *logger, const diagnostic_t *diagnostic, os_error_t error, const char *msg)
signal that an os error has occurred
CT_NODISCARD CT_FS_API io_t * fs_open(fs_t *fs, const char *path, os_access_t flags)
open a file at a given location in the filesystem
CT_NODISCARD CT_PUREFN CT_STD_API bool map_has_next(const map_iter_t *iter)
check if a map iterator has more elements
CT_NODISCARD CT_PUREFN CT_STD_API map_iter_t map_iter(const map_t *map)
create a new map iterator
CT_NODISCARD CT_NOALIAS CT_STD_API map_entry_t map_next(map_iter_t *iter)
get the next key-value pair from a map iterator
CT_IO_API size_t io_write(io_t *io, STA_READS(size) const void *src, size_t size)
write to an io object
CT_NODISCARD CT_IO_API os_error_t io_error(const io_t *io)
get the last error from the io object
CT_IO_API size_t io_vprintf(io_t *io, const char *fmt, va_list args)
vprintf to an io object
CT_IO_API os_error_t io_close(INOUT_NOTNULL io_t *io)
destroy an IO object
#define CTASSERTF(expr,...)
assert a condition with a message and optional format arguments
CT_NODISCARD STA_FORMAT_STRING const char * fmt
CT_TREE_API const char * quals_string(tree_quals_t quals)
get the name of a set of qualifiers
CT_TREE_API map_t * tree_module_tag(const tree_t *self, size_t tag)
tree_kind_t
all tree node types
a key-value pair in a map
const void * key
the key of this entry
tree_quals_t quals
the qualifiers for the storage
size_t length
the count of elements
const tree_t * storage
the underlying storage type
void debug_tree(target_runtime_t *runtime, const tree_t *tree, target_emit_t *emit)