1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /*
- * Copyright 2013 Ecole Normale Superieure
- *
- * Use of this software is governed by the MIT license
- *
- * Written by Sven Verdoolaege,
- * Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France
- */
- #include <string.h>
- /* Extract a mapping key from the token "tok".
- * Return KEY_ERROR on error, i.e., if "tok" does not
- * correspond to any known key.
- */
- static KEY extract_key(__isl_keep isl_stream *s, struct isl_token *tok)
- {
- int type;
- char *name;
- KEY key;
- isl_ctx *ctx;
- if (!tok)
- return KEY_ERROR;
- type = isl_token_get_type(tok);
- if (type != ISL_TOKEN_IDENT && type != ISL_TOKEN_STRING) {
- isl_stream_error(s, tok, "expecting key");
- return KEY_ERROR;
- }
- ctx = isl_stream_get_ctx(s);
- name = isl_token_get_str(ctx, tok);
- if (!name)
- return KEY_ERROR;
- for (key = 0; key < KEY_END; ++key) {
- if (!strcmp(name, key_str[key]))
- break;
- }
- free(name);
- if (key >= KEY_END)
- isl_die(ctx, isl_error_invalid, "unknown key",
- return KEY_ERROR);
- return key;
- }
- /* Read a key from "s" and return the corresponding enum.
- * Return KEY_ERROR on error, i.e., if the first token
- * on the stream does not correspond to any known key.
- */
- static KEY get_key(__isl_keep isl_stream *s)
- {
- struct isl_token *tok;
- KEY key;
- tok = isl_stream_next_token(s);
- key = extract_key(s, tok);
- isl_token_free(tok);
- return key;
- }
|