/* C code produced by gperf version 2.3 (GNU C++ version) */
/* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf  */
/* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf  */ 
struct resword { char *name; short token; enum rid rid; };

#define TOTAL_KEYWORDS 53
#define MIN_WORD_LENGTH 2
#define MAX_WORD_LENGTH 13
#define MIN_HASH_VALUE 6
#define MAX_HASH_VALUE 98
/* maximum key range = 93, duplicates = 0 */

#ifdef __GNUC__
inline
#endif
static unsigned int
hash (str, len)
     register char *str;
     register int unsigned len;
{
  static unsigned char asso_values[] =
    {
     99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
     99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
     99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
     99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
     99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
     99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
     99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
     99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
     99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
     99, 99, 99, 99, 99,  1, 99, 16,  6, 30,
      8,  8,  1, 40,  3,  4, 99,  1, 24, 12,
     30, 39, 44, 99,  1,  2,  1, 40, 21,  1,
     99, 99,  3, 99, 99, 99, 99, 99,
    };
  register int hval = len;

  switch (hval)
    {
      default:
      case 3:
        hval += asso_values[str[2]];
      case 2:
      case 1:
        hval += asso_values[str[0]];
    }
  return hval + asso_values[str[len - 1]];
}

#ifdef __GNUC__
inline
#endif
struct resword *
is_reserved_word (str, len)
     register char *str;
     register unsigned int len;
{

  static struct resword wordlist[] =
    {
      {"for",  FOR, NORID},
      {"if",  IF, NORID},
      {"",}, 
      {"int",  TYPESPEC, RID_INT},
      {"struct",  STRUCT, NORID},
      {"__typeof",  TYPEOF, NORID},
      {"sizeof",  SIZEOF, NORID},
      {"__typeof__",  TYPEOF, NORID},
      {"__signed__",  TYPESPEC, RID_SIGNED},
      {"switch",  SWITCH, NORID},
      {"__inline__",  SCSPEC, RID_INLINE},
      {"default",  DEFAULT, NORID},
      {"while",  WHILE, NORID},
      {"__signed",  TYPESPEC, RID_SIGNED},
      {"break",  BREAK, NORID},
      {"__inline",  SCSPEC, RID_INLINE},
      {"else",  ELSE, NORID},
      {"",}, {"",}, 
      {"__asm__",  ASM, NORID},
      {"",}, 
      {"__alignof",  ALIGNOF, NORID},
      {"",}, 
      {"__alignof__",  ALIGNOF, NORID},
      {"",}, 
      {"__attribute__",  ATTRIBUTE, NORID},
      {"shared",  TYPE_QUAL, RID_SHARED},
      {"",}, 
      {"__asm",  ASM, NORID},
      {"__volatile__",  TYPE_QUAL, RID_VOLATILE},
      {"__attribute",  ATTRIBUTE, NORID},
      {"void",  TYPESPEC, RID_VOID},
      {"return",  RETURN, NORID},
      {"__const",  TYPE_QUAL, RID_CONST},
      {"__volatile",  TYPE_QUAL, RID_VOLATILE},
      {"__const__",  TYPE_QUAL, RID_CONST},
      {"inline",  SCSPEC, RID_INLINE},
      {"asm",  ASM, NORID},
      {"case",  CASE, NORID},
      {"extern",  SCSPEC, RID_EXTERN},
      {"float",  TYPESPEC, RID_FLOAT},
      {"short",  TYPESPEC, RID_SHORT},
      {"",}, 
      {"do",  DO, NORID},
      {"register",  SCSPEC, RID_REGISTER},
      {"char",  TYPESPEC, RID_CHAR},
      {"typeof",  TYPEOF, NORID},
      {"typedef",  SCSPEC, RID_TYPEDEF},
      {"static",  SCSPEC, RID_STATIC},
      {"",}, 
      {"signed",  TYPESPEC, RID_SIGNED},
      {"",}, 
      {"unsigned",  TYPESPEC, RID_UNSIGNED},
      {"",}, 
      {"auto",  SCSPEC, RID_AUTO},
      {"volatile",  TYPE_QUAL, RID_VOLATILE},
      {"double",  TYPESPEC, RID_DOUBLE},
      {"private",  TYPE_QUAL, RID_PRIVATE},
      {"enum",  ENUM, NORID},
      {"",}, 
      {"const",  TYPE_QUAL, RID_CONST},
      {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
      {"continue",  CONTINUE, NORID},
      {"",}, {"",}, 
      {"union",  UNION, NORID},
      {"",}, {"",}, {"",}, {"",}, 
      {"goto",  GOTO, NORID},
      {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
      {"",}, {"",}, {"",}, {"",}, 
      {"long",  TYPESPEC, RID_LONG},
    };

  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
    {
      register int key = hash (str, len) - MIN_HASH_VALUE;

      if (key <= (MAX_HASH_VALUE - MIN_HASH_VALUE) && key >= 0)
        {
          register char *s = wordlist[key].name;

          if (*s == *str && !strcmp (str + 1, s + 1))
            return &wordlist[key];
        }
    }
  return 0;
}
