• Home
  • Raw
  • Download

Lines Matching full:node

44 struct cil_tree_node *cil_tree_get_next_path(struct cil_tree_node *node, char **info_kind, uint32_t…  in cil_tree_get_next_path()  argument
48 if (!node) { in cil_tree_get_next_path()
52 node = node->parent; in cil_tree_get_next_path()
54 while (node) { in cil_tree_get_next_path()
55 if (node->flavor == CIL_NODE && node->data == NULL) { in cil_tree_get_next_path()
56 if (node->cl_head && node->cl_head->data == CIL_KEY_SRC_INFO) { in cil_tree_get_next_path()
57 if (!node->cl_head->next || !node->cl_head->next->next || !node->cl_head->next->next->next) { in cil_tree_get_next_path()
61 *info_kind = node->cl_head->next->data; in cil_tree_get_next_path()
62 rc = cil_string_to_uint32(node->cl_head->next->next->data, hll_line, 10); in cil_tree_get_next_path()
66 *path = node->cl_head->next->next->next->data; in cil_tree_get_next_path()
67 return node; in cil_tree_get_next_path()
69 node = node->parent; in cil_tree_get_next_path()
70 } else if (node->flavor == CIL_SRC_INFO) { in cil_tree_get_next_path()
72 struct cil_src_info *info = node->data; in cil_tree_get_next_path()
76 return node; in cil_tree_get_next_path()
78 if (node->flavor == CIL_CALL) { in cil_tree_get_next_path()
79 struct cil_call *call = node->data; in cil_tree_get_next_path()
80 node = NODE(call->macro); in cil_tree_get_next_path()
81 } else if (node->flavor == CIL_BLOCKINHERIT) { in cil_tree_get_next_path()
82 struct cil_blockinherit *inherit = node->data; in cil_tree_get_next_path()
83 node = NODE(inherit->block); in cil_tree_get_next_path()
85 node = node->parent; in cil_tree_get_next_path()
97 char *cil_tree_get_cil_path(struct cil_tree_node *node) in cil_tree_get_cil_path() argument
103 while (node) { in cil_tree_get_cil_path()
104 node = cil_tree_get_next_path(node, &info_kind, &hll_line, &path); in cil_tree_get_cil_path()
105 if (node && info_kind == CIL_KEY_SRC_CIL) { in cil_tree_get_cil_path()
113 __attribute__((format (printf, 3, 4))) void cil_tree_log(struct cil_tree_node *node, enum cil_log_l… in cil_tree_log() argument
121 if (node) { in cil_tree_log()
123 uint32_t hll_offset = node->hll_offset; in cil_tree_log()
125 path = cil_tree_get_cil_path(node); in cil_tree_log()
128 cil_log(lvl, " at %s:%u", path, node->line); in cil_tree_log()
131 while (node) { in cil_tree_log()
136 node = cil_tree_get_next_path(node, &info_kind, &hll_line, &path); in cil_tree_log()
137 if (!node || info_kind == CIL_KEY_SRC_CIL) { in cil_tree_log()
141 hll_line += hll_offset - node->hll_offset - 1; in cil_tree_log()
152 int cil_tree_subtree_has_decl(struct cil_tree_node *node) in cil_tree_subtree_has_decl() argument
154 while (node) { in cil_tree_subtree_has_decl()
155 if (node->flavor >= CIL_MIN_DECLARATIVE) { in cil_tree_subtree_has_decl()
158 if (node->cl_head != NULL) { in cil_tree_subtree_has_decl()
159 if (cil_tree_subtree_has_decl(node->cl_head)) in cil_tree_subtree_has_decl()
162 node = node->next; in cil_tree_subtree_has_decl()
190 void cil_tree_subtree_destroy(struct cil_tree_node *node) in cil_tree_subtree_destroy() argument
192 cil_tree_children_destroy(node); in cil_tree_subtree_destroy()
193 cil_tree_node_destroy(&node); in cil_tree_subtree_destroy()
196 void cil_tree_children_destroy(struct cil_tree_node *node) in cil_tree_children_destroy() argument
200 if (!node) { in cil_tree_children_destroy()
204 curr = node->cl_head; in cil_tree_children_destroy()
211 node->cl_head = NULL; in cil_tree_children_destroy()
212 node->cl_tail = NULL; in cil_tree_children_destroy()
215 void cil_tree_node_init(struct cil_tree_node **node) in cil_tree_node_init() argument
227 *node = new_node; in cil_tree_node_init()
230 void cil_tree_node_destroy(struct cil_tree_node **node) in cil_tree_node_destroy() argument
234 if (node == NULL || *node == NULL) { in cil_tree_node_destroy()
238 if ((*node)->flavor >= CIL_MIN_DECLARATIVE) { in cil_tree_node_destroy()
239 datum = (*node)->data; in cil_tree_node_destroy()
240 cil_symtab_datum_remove_node(datum, *node); in cil_tree_node_destroy()
242 cil_destroy_data(&(*node)->data, (*node)->flavor); in cil_tree_node_destroy()
245 cil_destroy_data(&(*node)->data, (*node)->flavor); in cil_tree_node_destroy()
247 free(*node); in cil_tree_node_destroy()
248 *node = NULL; in cil_tree_node_destroy()
253 start_node: root node to start walking from
254 process_node: function to call when visiting a node
256 node: node being visited
261 node: node of first child
263 last_child: Function to call when finished with the last child of a node's children
267 static int cil_tree_walk_core(struct cil_tree_node *node, in cil_tree_walk_core() argument
268 int (*process_node)(struct cil_tree_node *node, uint32_t *finished, void *extra_args), in cil_tree_walk_core() argument
269 int (*first_child)(struct cil_tree_node *node, void *extra_args), in cil_tree_walk_core() argument
270 int (*last_child)(struct cil_tree_node *node, void *extra_args), in cil_tree_walk_core() argument
275 while (node) { in cil_tree_walk_core()
279 rc = (*process_node)(node, &finished, extra_args); in cil_tree_walk_core()
281 cil_tree_log(node, CIL_INFO, "Problem"); in cil_tree_walk_core()
290 if (node->cl_head != NULL && !(finished & CIL_TREE_SKIP_HEAD)) { in cil_tree_walk_core()
291 rc = cil_tree_walk(node, process_node, first_child, last_child, extra_args); in cil_tree_walk_core()
297 node = node->next; in cil_tree_walk_core()
303 int cil_tree_walk(struct cil_tree_node *node, in cil_tree_walk() argument
304 int (*process_node)(struct cil_tree_node *node, uint32_t *finished, void *extra_args), in cil_tree_walk() argument
305 int (*first_child)(struct cil_tree_node *node, void *extra_args), in cil_tree_walk() argument
306 int (*last_child)(struct cil_tree_node *node, void *extra_args), in cil_tree_walk() argument
311 if (!node || !node->cl_head) { in cil_tree_walk()
316 rc = (*first_child)(node->cl_head, extra_args); in cil_tree_walk()
318 cil_tree_log(node, CIL_INFO, "Problem"); in cil_tree_walk()
323 rc = cil_tree_walk_core(node->cl_head, process_node, first_child, last_child, extra_args); in cil_tree_walk()
329 rc = (*last_child)(node->cl_tail, extra_args); in cil_tree_walk()
331 cil_tree_log(node, CIL_INFO, "Problem"); in cil_tree_walk()