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