Merge both node and array information at array degrade time.
[smatch.git] / parse.h
blob26bcdaaa74a9bca1e1421b9d34358df88c5deb68
1 #ifndef PARSE_H
2 #define PARSE_H
3 /*
4 * Basic parsing data structures. Statements and symbols.
6 * Copyright (C) 2003 Transmeta Corp, all rights reserved.
7 */
9 #include "symbol.h"
11 enum statement_type {
12 STMT_NONE,
13 STMT_EXPRESSION,
14 STMT_COMPOUND,
15 STMT_IF,
16 STMT_RETURN,
17 STMT_CASE,
18 STMT_SWITCH,
19 STMT_ITERATOR,
20 STMT_LABEL,
21 STMT_GOTO,
22 STMT_ASM,
25 struct statement {
26 enum statement_type type;
27 struct position pos;
28 struct statement *next;
29 union {
30 struct label_arg {
31 struct symbol *label;
32 struct statement *label_statement;
34 struct expression *expression;
35 struct if_statement {
36 struct expression *if_conditional;
37 struct statement *if_true;
38 struct statement *if_false;
40 struct compound_struct {
41 struct symbol_list *syms;
42 struct statement_list *stmts;
44 struct labeled_struct {
45 struct symbol *label_identifier;
46 struct statement *label_statement;
48 struct case_struct {
49 struct expression *case_expression;
50 struct expression *case_to;
51 struct statement *case_statement;
53 struct switch_struct {
54 struct expression *switch_expression;
55 struct statement *switch_statement;
56 struct symbol *switch_break;
58 struct iterator_struct {
59 struct symbol *iterator_break;
60 struct symbol *iterator_continue;
61 struct statement *iterator_pre_statement;
62 struct expression *iterator_pre_condition;
64 struct statement *iterator_statement;
66 struct statement *iterator_post_statement;
67 struct expression *iterator_post_condition;
69 struct goto_struct {
70 struct symbol *goto_label;
71 struct expression *goto_expression;
76 extern struct token *parse_expression(struct token *, struct expression **);
77 extern struct token *statement_list(struct token *, struct statement_list **);
79 extern int show_statement(struct statement *);
80 extern void show_statement_list(struct statement_list *, const char *);
81 extern int show_expression(struct expression *);
82 extern void translation_unit(struct token *, struct symbol_list **);
84 extern struct symbol *ctype_integer(unsigned int spec);
85 extern struct symbol *ctype_fp(unsigned int spec);
87 extern int match_string_ident(struct ident *, const char *);
89 #endif /* PARSE_H */