home *** CD-ROM | disk | FTP | other *** search
/ OpenStep (Enterprise) / OpenStepENTCD.toast / OEDEV / GNUSRC.Z / hash.h < prev    next >
C/C++ Source or Header  |  1996-06-14  |  7KB  |  226 lines

  1. #if defined (_WIN32) && defined (NEXT_PDO)
  2. #include "hash-winntpdo.h"
  3. #else
  4. /* C code produced by gperf version 2.5 (GNU C++ version) */
  5. /* Command-line: gperf -p -j1 -g -o -t -N is_reserved_word -k1,4,7,$ ../../../devo/gcc/cp/gxx.gperf  */
  6. /* Command-line: gperf -p -j1 -g -o -t -N is_reserved_word -k1,4,$,7 gplus.gperf  */
  7. struct resword { char *name; short token; enum rid rid;};
  8.  
  9. #define TOTAL_KEYWORDS 97
  10. #define MIN_WORD_LENGTH 2
  11. #define MAX_WORD_LENGTH 16
  12. #define MIN_HASH_VALUE 4
  13. #define MAX_HASH_VALUE 219
  14. /* maximum key range = 216, duplicates = 0 */
  15.  
  16. #ifdef __GNUC__
  17. inline
  18. #endif
  19. static unsigned int
  20. hash (str, len)
  21.      register char *str;
  22.      register int unsigned len;
  23. {
  24.   static unsigned char asso_values[] =
  25.     {
  26.      220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
  27.      220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
  28.      220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
  29.      220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
  30.      220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
  31.      220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
  32.      220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
  33.      220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
  34.      220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
  35.      220, 220, 220, 220, 220,   0, 220,  88,  16,  19,
  36.       52,   0,   9,  72,   1,  77, 220,   0,   0,  38,
  37.       13,  44,  38,  30,  27,  57,   1,  14,   0,   2,
  38.        2,   7, 220, 220, 220, 220, 220, 220,
  39.     };
  40.   register int hval = len;
  41.  
  42.   switch (hval)
  43.     {
  44.       default:
  45.       case 7:
  46.         hval += asso_values[str[6]];
  47.       case 6:
  48.       case 5:
  49.       case 4:
  50.         hval += asso_values[str[3]];
  51.       case 3:
  52.       case 2:
  53.       case 1:
  54.         hval += asso_values[str[0]];
  55.     }
  56.   return hval + asso_values[str[len - 1]];
  57. }
  58.  
  59. #ifdef __GNUC__
  60. inline
  61. #endif
  62. struct resword *
  63. is_reserved_word (str, len)
  64.      register char *str;
  65.      register unsigned int len;
  66. {
  67.   static struct resword wordlist[] =
  68.     {
  69.       {"",}, {"",}, {"",}, {"",}, 
  70.       {"else",  ELSE, NORID,},
  71.       {"true",  CXX_TRUE, NORID,},
  72.       {"",}, 
  73.       {"while",  WHILE, NORID,},
  74.       {"virtual",  SCSPEC, RID_VIRTUAL,},
  75.       {"",}, {"",}, 
  76.       {"try",  TRY, NORID,},
  77.       {"",}, {"",}, {"",}, {"",}, 
  78.       {"typeof",  TYPEOF, NORID,},
  79.       {"not",  '!', NORID,},
  80.       {"new",  NEW, NORID,},
  81.       {"extern",  SCSPEC, RID_EXTERN,},
  82.       {"bool",  TYPESPEC, RID_BOOL,},
  83.       {"",}, {"",}, 
  84.       {"case",  CASE, NORID,},
  85.       {"__alignof__",  ALIGNOF, NORID},
  86.       {"",}, 
  87.       {"typedef",  SCSPEC, RID_TYPEDEF,},
  88.       {"",}, 
  89.       {"__extension__",  EXTENSION, NORID},
  90.       {"",}, {"",}, 
  91.       {"__alignof",  ALIGNOF, NORID},
  92.       {"xor",  '^', NORID,},
  93.       {"",}, 
  94.       {"__inline",  SCSPEC, RID_INLINE},
  95.       {"",}, 
  96.       {"__inline__",  SCSPEC, RID_INLINE},
  97.       {"",}, 
  98.       {"xor_eq",  ASSIGN, NORID,},
  99.       {"for",  FOR, NORID,},
  100.       {"",}, {"",}, 
  101.       {"continue",  CONTINUE, NORID,},
  102.       {"",}, 
  103.       {"catch",  CATCH, NORID,},
  104.       {"private",  VISSPEC, RID_PRIVATE,},
  105.       {"",}, 
  106.       {"typename",  TYPENAME_KEYWORD, NORID,},
  107.       {"template",  TEMPLATE, RID_TEMPLATE,},
  108.       {"not_eq",  EQCOMPARE, NORID,},
  109.       {"",}, {"",}, 
  110.       {"throw",  THROW, NORID,},
  111.       {"__const",  TYPE_QUAL, RID_CONST},
  112.       {"__const__",  TYPE_QUAL, RID_CONST},
  113.       {"__volatile",  TYPE_QUAL, RID_VOLATILE},
  114.       {"__wchar_t",  TYPESPEC, RID_WCHAR  /* Unique to ANSI C++ */,},
  115.       {"__volatile__",  TYPE_QUAL, RID_VOLATILE},
  116.       {"delete",  DELETE, NORID,},
  117.       {"typeid",  TYPEID, NORID,},
  118.       {"return",  RETURN, NORID,},
  119.       {"__typeof__",  TYPEOF, NORID},
  120.       {"compl",  '~', NORID,},
  121.       {"public",  VISSPEC, RID_PUBLIC,},
  122.       {"__asm__",  GCC_ASM_KEYWORD, NORID},
  123.       {"switch",  SWITCH, NORID,},
  124.       {"",}, 
  125.       {"friend",  SCSPEC, RID_FRIEND,},
  126.       {"__typeof",  TYPEOF, NORID},
  127.       {"",}, 
  128.       {"static_cast",  STATIC_CAST, NORID,},
  129.       {"false",  CXX_FALSE, NORID,},
  130.       {"sizeof",  SIZEOF, NORID,},
  131.       {"or",  OROR, NORID,},
  132.       {"double",  TYPESPEC, RID_DOUBLE,},
  133.       {"",}, 
  134.       {"union",  AGGR, RID_UNION,},
  135.       {"char",  TYPESPEC, RID_CHAR,},
  136.       {"struct",  AGGR, RID_RECORD,},
  137.       {"or_eq",  ASSIGN, NORID,},
  138.       {"enum",  ENUM, NORID,},
  139.       {"int",  TYPESPEC, RID_INT,},
  140.       {"const",  TYPE_QUAL, RID_CONST,},
  141.       {"static",  SCSPEC, RID_STATIC,},
  142.       {"reinterpret_cast",  REINTERPRET_CAST, NORID,},
  143.       {"",}, 
  144.       {"explicit",  SCSPEC, RID_EXPLICIT,},
  145.       {"__signed__",  TYPESPEC, RID_SIGNED},
  146.       {"if",  IF, NORID,},
  147.       {"__attribute",  ATTRIBUTE, NORID},
  148.       {"short",  TYPESPEC, RID_SHORT,},
  149.       {"__attribute__",  ATTRIBUTE, NORID},
  150.       {"bitor",  '|', NORID,},
  151.       {"signature",  AGGR, RID_SIGNATURE    /* Extension */,},
  152.       {"",}, 
  153.       {"__sigof__",  SIGOF, NORID        /* Extension */,},
  154.       {"volatile",  TYPE_QUAL, RID_VOLATILE,},
  155.       {"__label__",  LABEL, NORID},
  156.       {"do",  DO, NORID,},
  157.       {"",}, 
  158.       {"__asm",  GCC_ASM_KEYWORD, NORID},
  159.       {"protected",  VISSPEC, RID_PROTECTED,},
  160.       {"",}, 
  161.       {"float",  TYPESPEC, RID_FLOAT,},
  162.       {"using",  USING, NORID,},
  163.       {"",}, 
  164.       {"const_cast",  CONST_CAST, NORID,},
  165.       {"",}, 
  166.       {"void",  TYPESPEC, RID_VOID,},
  167.       {"break",  BREAK, NORID,},
  168.       {"namespace",  NAMESPACE, NORID,},
  169.       {"",}, {"",}, {"",}, {"",}, 
  170.       {"sigof",  SIGOF, NORID        /* Extension */,},
  171.       {"",}, {"",}, {"",}, 
  172.       {"this",  THIS, NORID,},
  173.       {"",}, {"",}, {"",}, {"",}, 
  174.       {"and_eq",  ASSIGN, NORID,},
  175.       {"",}, {"",}, {"",}, 
  176.       {"signed",  TYPESPEC, RID_SIGNED,},
  177.       {"asm",  ASM_KEYWORD, NORID,},
  178.       {"",}, {"",}, {"",}, 
  179.       {"mutable",  SCSPEC, RID_MUTABLE,},
  180.       {"",}, {"",}, {"",}, 
  181.       {"__signed",  TYPESPEC, RID_SIGNED},
  182.       {"class",  AGGR, RID_CLASS,},
  183.       {"register",  SCSPEC, RID_REGISTER,},
  184.       {"",}, {"",}, {"",}, 
  185.       {"and",  ANDAND, NORID,},
  186.       {"",}, {"",}, {"",}, {"",}, 
  187.       {"long",  TYPESPEC, RID_LONG,},
  188.       {"default",  DEFAULT, NORID,},
  189.       {"operator",  OPERATOR, NORID,},
  190.       {"unsigned",  TYPESPEC, RID_UNSIGNED,},
  191.       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
  192.       {"inline",  SCSPEC, RID_INLINE,},
  193.       {"",}, 
  194.       {"bitand",  '&', NORID,},
  195.       {"",}, 
  196.       {"goto",  GOTO, NORID,},
  197.       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
  198.       {"dynamic_cast",  DYNAMIC_CAST, NORID,},
  199.       {"",}, {"",}, {"",}, {"",}, {"",}, 
  200.       {"__signature__",  AGGR, RID_SIGNATURE    /* Extension */,},
  201.       {"",}, 
  202.       {"auto",  SCSPEC, RID_AUTO,},
  203.       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
  204.       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
  205.       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
  206.       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
  207.       {"",}, {"",}, 
  208.       {"overload",  OVERLOAD, NORID,},
  209.     };
  210.  
  211.   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  212.     {
  213.       register int key = hash (str, len);
  214.  
  215.       if (key <= MAX_HASH_VALUE && key >= 0)
  216.         {
  217.           register char *s = wordlist[key].name;
  218.  
  219.           if (*s == *str && !strcmp (str + 1, s + 1))
  220.             return &wordlist[key];
  221.         }
  222.     }
  223.   return 0;
  224. }
  225. #endif /* ! _WIN32 */
  226.