70 lines · c
1#include <isl_int.h>2#include <isl/stream.h>3#include <isl_yaml.h>4 5struct 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 21struct 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 point28 * 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 YAML32 * elements. yaml_size is the size of these arrays, while yaml_depth33 * is the number of elements currently in use.34 * yaml_state and yaml_indent may be NULL if no YAML parsing is being35 * 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, with38 * ISL_YAML_INDENT_FLOW meaning that the element is in flow format39 * (such that the indentation is not relevant).40 */41struct 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