1 /* tree.h - declarations for tree.c */
2 #ifndef TREE_H
3 #define TREE_H
4 
5 #include "tree_types.h"
6 
7 ELEMENT *new_element (enum element_type type);
8 void add_to_element_contents (ELEMENT *parent, ELEMENT *e);
9 void add_to_contents_as_array (ELEMENT *parent, ELEMENT *e);
10 void add_to_element_args (ELEMENT *parent, ELEMENT *e);
11 void insert_into_contents (ELEMENT *parent, ELEMENT *e, int where);
12 void insert_into_args (ELEMENT *parent, ELEMENT *e, int where);
13 void insert_slice_into_contents (ELEMENT *to, int idx, ELEMENT *from,
14                                  int start, int end);
15 ELEMENT *remove_from_contents (ELEMENT *parent, int where);
16 ELEMENT *last_args_child (ELEMENT *current);
17 ELEMENT *last_contents_child (ELEMENT *current);
18 ELEMENT *pop_element_from_args (ELEMENT *parent);
19 ELEMENT *pop_element_from_contents (ELEMENT *parent);
20 ELEMENT *contents_child_by_index (ELEMENT *e, int index);
21 ELEMENT *args_child_by_index (ELEMENT *e, int index);
22 void destroy_element (ELEMENT *e);
23 void destroy_element_and_children (ELEMENT *e);
24 
25 #define element_contents_number(e) ((e)->contents.number)
26 #define element_args_number(e) ((e)->args.number)
27 #define element_text(e) (text_base (&(e)->text))
28 
29 #endif
30