18 STF_TAG
, // tag (struct/union/enum)
19 STF_ATOM
, // atom (identifier, eg. member name)
20 STF_TYPE
, // type information, NOT a typedef
22 STF_VARIABLE
, // variable, field or parameter
23 STF_PARAMETERS
, // function parameter list
24 STF_BLOCK
, // compound statement
25 STF_STAT
, // non-expression statement (if, while...)
26 // WARNING: Add strings to form_strtab in stree.c
27 // when adding constants here!
31 struct stree
*parent
, *prev
, *next
, *child
;
32 int id
; // unique id for debugging
33 struct sloc sloc
; // location of definition
37 struct const_value cv
;
42 struct stree
*st_node
;
43 struct stree_stack
*prev
, *next
;
46 struct stree
*stree_create(void);
47 void stree_append_child(struct stree
*st_parent
, struct stree
*st_child
);
48 void stree_remove_child(struct stree
*st_child
);
49 void stree_destroy(struct stree
*st
); // destroy tree recursively
50 void stree_next_child(struct stree
*st
, struct stree
**pchild
); // set *pchild to next child, or NULL at end
51 void stree_dump(struct cc
*cc
, struct stree
*st_root
, FILE *output
); // dump tree in a textual format
52 struct stree
*stree_right(struct stree
*st
); // return st's last child
53 int stree_child_count(struct stree
*st
); // return number of children that st has
56 struct stree
*stree_find_local(struct stree
*scope
, enum stree_form form
, tok_t tok
);
57 struct stree
*stree_get_child_by_form(struct stree
*st
, enum stree_form form
);