extract_key.c revision 1.1.1.1
1/* 2 * Copyright 2013 Ecole Normale Superieure 3 * 4 * Use of this software is governed by the MIT license 5 * 6 * Written by Sven Verdoolaege, 7 * Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France 8 */ 9 10#include <string.h> 11 12/* Extract a mapping key from the token "tok". 13 * Return KEY_ERROR on error, i.e., if "tok" does not 14 * correspond to any known key. 15 */ 16static KEY KEY_EXTRACT(__isl_keep isl_stream *s, struct isl_token *tok) 17{ 18 isl_bool has_string; 19 char *name; 20 KEY key; 21 isl_ctx *ctx; 22 23 has_string = isl_token_has_str(tok); 24 if (has_string < 0) 25 return KEY_ERROR; 26 if (!has_string) { 27 isl_stream_error(s, tok, "expecting key"); 28 return KEY_ERROR; 29 } 30 31 ctx = isl_stream_get_ctx(s); 32 name = isl_token_get_str(ctx, tok); 33 if (!name) 34 return KEY_ERROR; 35 36 for (key = 0; key < KEY_END; ++key) { 37 if (KEY_STR[key] && !strcmp(name, KEY_STR[key])) 38 break; 39 } 40 free(name); 41 42 if (key >= KEY_END) 43 isl_die(ctx, isl_error_invalid, "unknown key", 44 return KEY_ERROR); 45 return key; 46} 47 48/* Read a key from "s" and return the corresponding enum. 49 * Return KEY_ERROR on error, i.e., if the first token 50 * on the stream does not correspond to any known key. 51 */ 52static KEY KEY_GET(__isl_keep isl_stream *s) 53{ 54 struct isl_token *tok; 55 KEY key; 56 57 tok = isl_stream_next_token(s); 58 key = KEY_EXTRACT(s, tok); 59 isl_token_free(tok); 60 61 return key; 62} 63