Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals

lex.c

Go to the documentation of this file.
00001 /* C code produced by gperf version 2.7.2 */
00002 /* Command-line: gperf -p -j1 -i 1 -g -o -t -N rb_reserved_word -k'1,3,$' ./keywords  */
00003 struct kwtable {char *name; int id[2]; enum lex_state state;};
00004 
00005 #define TOTAL_KEYWORDS 40
00006 #define MIN_WORD_LENGTH 2
00007 #define MAX_WORD_LENGTH 8
00008 #define MIN_HASH_VALUE 6
00009 #define MAX_HASH_VALUE 55
00010 /* maximum key range = 50, duplicates = 0 */
00011 
00012 #ifdef __GNUC__
00013 __inline
00014 #else
00015 #ifdef __cplusplus
00016 inline
00017 #endif
00018 #endif
00019 static unsigned int
00020 hash (str, len)
00021      register const char *str;
00022      register unsigned int len;
00023 {
00024   static unsigned char asso_values[] =
00025     {
00026       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00027       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00028       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00029       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00030       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00031       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00032       56, 56, 56, 11, 56, 56, 36, 56,  1, 37,
00033       31,  1, 56, 56, 56, 56, 29, 56,  1, 56,
00034       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00035       56, 56, 56, 56, 56,  1, 56, 32,  1,  2,
00036        1,  1,  4, 23, 56, 17, 56, 20,  9,  2,
00037        9, 26, 14, 56,  5,  1,  1, 16, 56, 21,
00038       20,  9, 56, 56, 56, 56, 56, 56, 56, 56,
00039       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00040       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00041       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00042       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00043       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00044       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00045       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00046       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00047       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00048       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00049       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00050       56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
00051       56, 56, 56, 56, 56, 56
00052     };
00053   register int hval = len;
00054 
00055   switch (hval)
00056     {
00057       default:
00058       case 3:
00059         hval += asso_values[(unsigned char)str[2]];
00060       case 2:
00061       case 1:
00062         hval += asso_values[(unsigned char)str[0]];
00063         break;
00064     }
00065   return hval + asso_values[(unsigned char)str[len - 1]];
00066 }
00067 
00068 #ifdef __GNUC__
00069 __inline
00070 #endif
00071 struct kwtable *
00072 rb_reserved_word (str, len)
00073      register const char *str;
00074      register unsigned int len;
00075 {
00076   static struct kwtable wordlist[] =
00077     {
00078       {""}, {""}, {""}, {""}, {""}, {""},
00079       {"end", {kEND, kEND}, EXPR_END},
00080       {"else", {kELSE, kELSE}, EXPR_BEG},
00081       {"case", {kCASE, kCASE}, EXPR_BEG},
00082       {"ensure", {kENSURE, kENSURE}, EXPR_BEG},
00083       {"module", {kMODULE, kMODULE}, EXPR_BEG},
00084       {"elsif", {kELSIF, kELSIF}, EXPR_BEG},
00085       {"def", {kDEF, kDEF}, EXPR_FNAME},
00086       {"rescue", {kRESCUE, kRESCUE_MOD}, EXPR_MID},
00087       {"not", {kNOT, kNOT}, EXPR_BEG},
00088       {"then", {kTHEN, kTHEN}, EXPR_BEG},
00089       {"yield", {kYIELD, kYIELD}, EXPR_ARG},
00090       {"for", {kFOR, kFOR}, EXPR_BEG},
00091       {"self", {kSELF, kSELF}, EXPR_END},
00092       {"false", {kFALSE, kFALSE}, EXPR_END},
00093       {"retry", {kRETRY, kRETRY}, EXPR_END},
00094       {"return", {kRETURN, kRETURN}, EXPR_MID},
00095       {"true", {kTRUE, kTRUE}, EXPR_END},
00096       {"if", {kIF, kIF_MOD}, EXPR_BEG},
00097       {"defined?", {kDEFINED, kDEFINED}, EXPR_ARG},
00098       {"super", {kSUPER, kSUPER}, EXPR_ARG},
00099       {"undef", {kUNDEF, kUNDEF}, EXPR_FNAME},
00100       {"break", {kBREAK, kBREAK}, EXPR_MID},
00101       {"in", {kIN, kIN}, EXPR_BEG},
00102       {"do", {kDO, kDO}, EXPR_BEG},
00103       {"nil", {kNIL, kNIL}, EXPR_END},
00104       {"until", {kUNTIL, kUNTIL_MOD}, EXPR_BEG},
00105       {"unless", {kUNLESS, kUNLESS_MOD}, EXPR_BEG},
00106       {"or", {kOR, kOR}, EXPR_BEG},
00107       {"next", {kNEXT, kNEXT}, EXPR_MID},
00108       {"when", {kWHEN, kWHEN}, EXPR_BEG},
00109       {"redo", {kREDO, kREDO}, EXPR_END},
00110       {"and", {kAND, kAND}, EXPR_BEG},
00111       {"begin", {kBEGIN, kBEGIN}, EXPR_BEG},
00112       {"__LINE__", {k__LINE__, k__LINE__}, EXPR_END},
00113       {"class", {kCLASS, kCLASS}, EXPR_CLASS},
00114       {"__FILE__", {k__FILE__, k__FILE__}, EXPR_END},
00115       {"END", {klEND, klEND}, EXPR_END},
00116       {"BEGIN", {klBEGIN, klBEGIN}, EXPR_END},
00117       {"while", {kWHILE, kWHILE_MOD}, EXPR_BEG},
00118       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
00119       {""},
00120       {"alias", {kALIAS, kALIAS}, EXPR_FNAME}
00121     };
00122 
00123   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
00124     {
00125       register int key = hash (str, len);
00126 
00127       if (key <= MAX_HASH_VALUE && key >= 0)
00128         {
00129           register const char *s = wordlist[key].name;
00130 
00131           if (*str == *s && !strcmp (str + 1, s + 1))
00132             return &wordlist[key];
00133         }
00134     }
00135   return 0;
00136 }
00137 

Generated on Wed Jan 18 23:32:03 2006 for Ruby by doxygen 1.3.5