String literals, proper compound statement parsing.
[mcc.git] / stree.h
bloba3df8ede13638231587e3ba38afed7559a76cff6
1 #ifndef MCC_STREE_H
2 #define MCC_STREE_H
4 #include "cc.h"
5 #include "stdio.h"
7 struct stree;
9 #include "const.h"
10 #include "c_btypes.h"
12 enum stree_form {
13 // stree node 'form's
14 STF_NONE,
15 STF_BINOP,
16 STF_UNOP,
17 STF_FACTOR,
18 STF_TAG, // tag (struct/union/enum)
19 STF_ATOM, // atom (identifier, eg. member name)
20 STF_TYPE, // type information, NOT a typedef
21 STF_FUNCTION,
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!
30 struct stree {
31 struct stree *parent, *prev, *next, *child;
32 int id; // unique id for debugging
33 struct sloc sloc; // location of definition
34 enum stree_form form;
35 tok_t tok;
36 struct btype btype;
37 struct const_value cv;
40 // used for recursion
41 struct stree_stack {
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
55 // symbol searching
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);
59 #endif