5 #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
6 && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
7 && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
8 && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
9 && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
10 && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
11 && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
12 && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
13 && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
14 && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
15 && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
16 && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
17 && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
18 && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
19 && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
20 && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
21 && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
22 && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
23 && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
24 && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
25 && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
26 && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
27 && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
28 /* The character set is not based on ISO-646. */
29 #error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."
32 #line 1 "../libinterp/parse-tree/octave.gperf"
37 // Copyright (C) 1995-2021 The Octave Project Developers
39 // See the file COPYRIGHT.md in the top-level directory of this
40 // distribution or <https://octave.org/copyright/>.
42 // This file is part of Octave.
44 // Octave is free software: you can redistribute it and/or modify it
45 // under the terms of the GNU General Public License as published by
46 // the Free Software Foundation, either version 3 of the License, or
47 // (at your option) any later version.
49 // Octave is distributed in the hope that it will be useful, but
50 // WITHOUT ANY WARRANTY; without even the implied warranty of
51 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
52 // GNU General Public License for more details.
54 // You should have received a copy of the GNU General Public License
55 // along with Octave; see the file COPYING. If not, see
56 // <https://www.gnu.org/licenses/>.
58 // NOTE: gperf 2.7.2 will silently generate bad code if there are blank
59 // lines following the "%{" marker above. This comment block seems to be
76 end_unwind_protect_kw,
108 unwind_protect_cleanup_kw,
112 #line 82 "../libinterp/parse-tree/octave.gperf"
113 struct octave_kw { const char *name; int tok; octave_kw_id kw_id; };
115 #define TOTAL_KEYWORDS 44
116 #define MIN_WORD_LENGTH 2
117 #define MAX_WORD_LENGTH 22
118 #define MIN_HASH_VALUE 2
119 #define MAX_HASH_VALUE 68
120 /* maximum key range = 67, duplicates = 0 */
125 static inline unsigned int hash (const char *str, size_t len);
127 static const struct octave_kw *in_word_set (const char *str, size_t len);
131 octave_kw_hash::hash (const char *str, size_t len)
133 static const unsigned char asso_values[] =
135 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
136 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
137 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
138 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
139 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
140 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
141 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
142 69, 69, 69, 69, 69, 69, 55, 69, 5, 69,
143 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
144 69, 69, 69, 69, 69, 5, 69, 50, 0, 5,
145 0, 0, 45, 5, 50, 15, 69, 0, 25, 0,
146 0, 20, 5, 69, 25, 30, 10, 35, 10, 15,
147 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
148 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
149 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
150 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
151 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
152 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
153 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
154 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
155 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
156 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
157 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
158 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
159 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
160 69, 69, 69, 69, 69, 69
162 unsigned int hval = len;
167 hval += asso_values[static_cast<unsigned char>(str[4])];
173 hval += asso_values[static_cast<unsigned char>(str[0])];
179 static const struct octave_kw wordlist[] =
181 #line 90 "../libinterp/parse-tree/octave.gperf"
183 #line 93 "../libinterp/parse-tree/octave.gperf"
184 {"end", END, end_kw},
185 #line 91 "../libinterp/parse-tree/octave.gperf"
186 {"else", ELSE, else_kw},
187 #line 85 "../libinterp/parse-tree/octave.gperf"
188 {"break", BREAK, break_kw},
189 #line 111 "../libinterp/parse-tree/octave.gperf"
190 {"get", GET, get_kw},
191 #line 86 "../libinterp/parse-tree/octave.gperf"
192 {"case", CASE, case_kw},
193 #line 102 "../libinterp/parse-tree/octave.gperf"
194 {"endmethods", END, endmethods_kw},
195 #line 107 "../libinterp/parse-tree/octave.gperf"
196 {"enumeration", ENUMERATION, enumeration_kw},
197 #line 122 "../libinterp/parse-tree/octave.gperf"
198 {"try", TRY, try_kw},
199 #line 97 "../libinterp/parse-tree/octave.gperf"
200 {"endenumeration", END, endenumeration_kw},
201 #line 118 "../libinterp/parse-tree/octave.gperf"
202 {"properties", PROPERTIES, properties_kw},
203 #line 108 "../libinterp/parse-tree/octave.gperf"
204 {"events", EVENTS, events_kw},
205 #line 113 "../libinterp/parse-tree/octave.gperf"
207 #line 128 "../libinterp/parse-tree/octave.gperf"
208 {"__LINE__", NUM, magic_line_kw},
209 #line 98 "../libinterp/parse-tree/octave.gperf"
210 {"endevents", END, endevents_kw},
211 #line 126 "../libinterp/parse-tree/octave.gperf"
212 {"while", WHILE, while_kw},
213 #line 92 "../libinterp/parse-tree/octave.gperf"
214 {"elseif", ELSEIF, elseif_kw},
215 #line 94 "../libinterp/parse-tree/octave.gperf"
216 {"end_try_catch", END, end_try_catch_kw},
217 #line 105 "../libinterp/parse-tree/octave.gperf"
218 {"endswitch", END, endswitch_kw},
219 #line 99 "../libinterp/parse-tree/octave.gperf"
220 {"endfor", END, endfor_kw},
221 #line 114 "../libinterp/parse-tree/octave.gperf"
222 {"methods", METHODS, methods_kw},
223 #line 89 "../libinterp/parse-tree/octave.gperf"
224 {"continue", CONTINUE, continue_kw},
225 #line 117 "../libinterp/parse-tree/octave.gperf"
226 {"persistent", PERSISTENT, persistent_kw},
227 #line 116 "../libinterp/parse-tree/octave.gperf"
228 {"parfor", PARFOR, parfor_kw},
229 #line 120 "../libinterp/parse-tree/octave.gperf"
230 {"set", SET, set_kw},
231 #line 96 "../libinterp/parse-tree/octave.gperf"
232 {"endclassdef", END, endclassdef_kw},
233 #line 104 "../libinterp/parse-tree/octave.gperf"
234 {"endproperties", END, endproperties_kw},
235 #line 121 "../libinterp/parse-tree/octave.gperf"
236 {"switch", SWITCH, switch_kw},
237 #line 88 "../libinterp/parse-tree/octave.gperf"
238 {"classdef", CLASSDEF, classdef_kw},
239 #line 100 "../libinterp/parse-tree/octave.gperf"
240 {"endfunction", END, endfunction_kw},
241 #line 109 "../libinterp/parse-tree/octave.gperf"
242 {"for", FOR, for_kw},
243 #line 124 "../libinterp/parse-tree/octave.gperf"
244 {"unwind_protect", UNWIND, unwind_protect_kw},
245 #line 101 "../libinterp/parse-tree/octave.gperf"
246 {"endif", END, endif_kw},
247 #line 95 "../libinterp/parse-tree/octave.gperf"
248 {"end_unwind_protect", END, end_unwind_protect_kw},
249 #line 115 "../libinterp/parse-tree/octave.gperf"
250 {"otherwise", OTHERWISE, otherwise_kw},
251 #line 119 "../libinterp/parse-tree/octave.gperf"
252 {"return", FUNC_RET, return_kw},
253 #line 125 "../libinterp/parse-tree/octave.gperf"
254 {"unwind_protect_cleanup", CLEANUP, unwind_protect_cleanup_kw},
255 #line 106 "../libinterp/parse-tree/octave.gperf"
256 {"endwhile", END, endwhile_kw},
257 #line 103 "../libinterp/parse-tree/octave.gperf"
258 {"endparfor", END, endparfor_kw},
259 #line 87 "../libinterp/parse-tree/octave.gperf"
260 {"catch", CATCH, catch_kw},
261 #line 112 "../libinterp/parse-tree/octave.gperf"
262 {"global", GLOBAL, global_kw},
263 #line 110 "../libinterp/parse-tree/octave.gperf"
264 {"function", FCN, function_kw},
265 #line 123 "../libinterp/parse-tree/octave.gperf"
266 {"until", UNTIL, until_kw},
267 #line 127 "../libinterp/parse-tree/octave.gperf"
268 {"__FILE__", DQ_STRING, magic_file_kw}
271 static const signed char gperf_lookup[] =
273 -1, -1, 0, 1, 2, 3, -1, -1, 4, 5, 6, 7, -1, 8,
274 9, 10, 11, 12, 13, 14, 15, 16, -1, 17, 18, -1, 19, 20,
275 21, -1, 22, 23, -1, 24, -1, -1, 25, -1, 26, -1, -1, 27,
276 -1, 28, -1, -1, 29, -1, 30, 31, 32, -1, -1, 33, 34, -1,
277 35, 36, 37, 38, 39, 40, -1, 41, -1, 42, -1, -1, 43
280 const struct octave_kw *
281 octave_kw_hash::in_word_set (const char *str, size_t len)
283 if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
285 unsigned int key = hash (str, len);
287 if (key <= MAX_HASH_VALUE)
289 int index = gperf_lookup[key];
293 const char *s = wordlist[index].name;
295 if (*str == *s && !strcmp (str + 1, s + 1))
296 return &wordlist[index];