blob: b199ec64dc26bdd46d17177a8852a79846b46f60 [file] [log] [blame]
#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;
};