/* For each node, maintain a mapping of variables to * * { UNINITIALIZED, INITIALIZED, INITIALIZED_IF_TRUE, INITIALIZED_IF_FALSE } * */ #include "ast.h" static void compute_initialized (ast_t *ast, gboolean *changed) { } static gboolean check_uses (ast_t *ast) { GList *list; for (list = ast->common.children->head; list; list = list->next) { if (!check_uses (list->data)) return FALSE; } return TRUE; } gboolean new_init_check (ast_program_t *program) { gboolean changed = FALSE; do { changed = FALSE; compute_initialized ((ast_t *)program->statement, &changed); } while (changed); return check_uses ((ast_t *)program->statement); }