1 | #include <isl_int.h> |
2 | #include <isl/stream.h> |
3 | #include <isl_yaml.h> |
4 | |
5 | struct isl_token { |
6 | int type; |
7 | |
8 | unsigned int on_new_line : 1; |
9 | unsigned is_keyword : 1; |
10 | int line; |
11 | int col; |
12 | |
13 | union { |
14 | isl_int v; |
15 | char *s; |
16 | isl_map *map; |
17 | isl_pw_aff *pwaff; |
18 | } u; |
19 | }; |
20 | |
21 | struct isl_token *isl_token_new(isl_ctx *ctx, |
22 | int line, int col, unsigned on_new_line); |
23 | |
24 | /* An input stream that may be either a file or a string. |
25 | * |
26 | * line and col are the line and column number of the next character (1-based). |
27 | * start_line and start_col are set by isl_stream_getc to point |
28 | * to the position of the returned character. |
29 | * last_line is the line number of the previous token. |
30 | * |
31 | * yaml_state and yaml_indent keep track of the currently active YAML |
32 | * elements. yaml_size is the size of these arrays, while yaml_depth |
33 | * is the number of elements currently in use. |
34 | * yaml_state and yaml_indent may be NULL if no YAML parsing is being |
35 | * performed. |
36 | * yaml_state keeps track of what is expected next at each level. |
37 | * yaml_indent keeps track of the indentation at each level, with |
38 | * ISL_YAML_INDENT_FLOW meaning that the element is in flow format |
39 | * (such that the indentation is not relevant). |
40 | */ |
41 | struct isl_stream { |
42 | struct isl_ctx *ctx; |
43 | FILE *file; |
44 | const char *str; |
45 | int line; |
46 | int col; |
47 | int start_line; |
48 | int start_col; |
49 | int last_line; |
50 | int eof; |
51 | |
52 | char *buffer; |
53 | size_t size; |
54 | size_t len; |
55 | int c; |
56 | int un[5]; |
57 | int n_un; |
58 | |
59 | struct isl_token *tokens[5]; |
60 | int n_token; |
61 | |
62 | struct isl_hash_table *keywords; |
63 | enum isl_token_type next_type; |
64 | |
65 | int yaml_depth; |
66 | int yaml_size; |
67 | enum isl_yaml_state *yaml_state; |
68 | int *yaml_indent; |
69 | }; |
70 | |