forked from OSchip/llvm-project
63 lines
1.3 KiB
C
63 lines
1.3 KiB
C
/*
|
|
* 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;
|
|
}
|