| #include <isl_int.h> |
| #include <isl/stream.h> |
| #include <isl_yaml.h> |
| |
| struct isl_token { |
| int type; |
| |
| unsigned int on_new_line : 1; |
| unsigned is_keyword : 1; |
| int line; |
| int col; |
| |
| union { |
| isl_int v; |
| char *s; |
| isl_map *map; |
| isl_pw_aff *pwaff; |
| } u; |
| }; |
| |
| struct isl_token *isl_token_new(isl_ctx *ctx, |
| int line, int col, unsigned on_new_line); |
| |
| /* An input stream that may be either a file or a string. |
| * |
| * line and col are the line and column number of the next character (1-based). |
| * start_line and start_col are set by isl_stream_getc to point |
| * to the position of the returned character. |
| * last_line is the line number of the previous token. |
| * |
| * yaml_state and yaml_indent keep track of the currently active YAML |
| * elements. yaml_size is the size of these arrays, while yaml_depth |
| * is the number of elements currently in use. |
| * yaml_state and yaml_indent may be NULL if no YAML parsing is being |
| * performed. |
| * yaml_state keeps track of what is expected next at each level. |
| * yaml_indent keeps track of the indentation at each level, with |
| * ISL_YAML_INDENT_FLOW meaning that the element is in flow format |
| * (such that the indentation is not relevant). |
| */ |
| struct isl_stream { |
| struct isl_ctx *ctx; |
| FILE *file; |
| const char *str; |
| int line; |
| int col; |
| int start_line; |
| int start_col; |
| int last_line; |
| int eof; |
| |
| char *buffer; |
| size_t size; |
| size_t len; |
| int c; |
| int un[5]; |
| int n_un; |
| |
| struct isl_token *tokens[5]; |
| int n_token; |
| |
| struct isl_hash_table *keywords; |
| enum isl_token_type next_type; |
| |
| int yaml_depth; |
| int yaml_size; |
| enum isl_yaml_state *yaml_state; |
| int *yaml_indent; |
| }; |