Viewing file: extract_key.c (1.32 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* * 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; }
|