• 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()
251 void cil_tree_node_remove(struct cil_tree_node *node) in cil_tree_node_remove() argument
255 if (node == NULL || node->parent == NULL) { in cil_tree_node_remove()
259 parent = node->parent; in cil_tree_node_remove()
261 if (parent->cl_head == node) { in cil_tree_node_remove()
262 if (parent->cl_tail == node) { in cil_tree_node_remove()
265 parent->cl_head = node->next; in cil_tree_node_remove()
266 cil_tree_node_destroy(&node); in cil_tree_node_remove()
271 while (curr && curr->next != node) { in cil_tree_node_remove()
279 if (parent->cl_tail == node) { in cil_tree_node_remove()
282 curr->next = node->next; in cil_tree_node_remove()
283 cil_tree_node_destroy(&node); in cil_tree_node_remove()
288 start_node: root node to start walking from
289 process_node: function to call when visiting a node
291 node: node being visited
296 node: node of first child
298 last_child: Function to call when finished with the last child of a node's children
302 static int cil_tree_walk_core(struct cil_tree_node *node, in cil_tree_walk_core() argument
303 int (*process_node)(struct cil_tree_node *node, uint32_t *finished, void *extra_args), in cil_tree_walk_core() argument
304 int (*first_child)(struct cil_tree_node *node, void *extra_args), in cil_tree_walk_core() argument
305 int (*last_child)(struct cil_tree_node *node, void *extra_args), in cil_tree_walk_core() argument
310 while (node) { in cil_tree_walk_core()
314 rc = (*process_node)(node, &finished, extra_args); in cil_tree_walk_core()
316 cil_tree_log(node, CIL_INFO, "Problem"); in cil_tree_walk_core()
325 if (node->cl_head != NULL && !(finished & CIL_TREE_SKIP_HEAD)) { in cil_tree_walk_core()
326 rc = cil_tree_walk(node, process_node, first_child, last_child, extra_args); in cil_tree_walk_core()
332 node = node->next; in cil_tree_walk_core()
338 int cil_tree_walk(struct cil_tree_node *node, in cil_tree_walk() argument
339 int (*process_node)(struct cil_tree_node *node, uint32_t *finished, void *extra_args), in cil_tree_walk() argument
340 int (*first_child)(struct cil_tree_node *node, void *extra_args), in cil_tree_walk() argument
341 int (*last_child)(struct cil_tree_node *node, void *extra_args), in cil_tree_walk() argument
346 if (!node || !node->cl_head) { in cil_tree_walk()
351 rc = (*first_child)(node->cl_head, extra_args); in cil_tree_walk()
353 cil_tree_log(node, CIL_INFO, "Problem"); in cil_tree_walk()
358 rc = cil_tree_walk_core(node->cl_head, process_node, first_child, last_child, extra_args); in cil_tree_walk()
364 rc = (*last_child)(node->cl_tail, extra_args); in cil_tree_walk()
366 cil_tree_log(node, CIL_INFO, "Problem"); in cil_tree_walk()