1 #line 2 "lex.l"
2 /* This file is part of Mailfromd.
3 Copyright (C) 2005-2021 Sergey Poznyakoff
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3, or (at your option)
8 any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17
18 #ifdef HAVE_CONFIG_H
19 # include <config.h>
20 #endif
21
22
23
24 #line 25 "lex.c"
25
26 #define YY_INT_ALIGNED short int
27
28 /* A lexical scanner generated by flex */
29
30 /* %not-for-header */
31
32 /* %if-c-only */
33 /* %if-not-reentrant */
34
35 /* %endif */
36 /* %endif */
37 /* %ok-for-header */
38
39 #define FLEX_SCANNER
40 #define YY_FLEX_MAJOR_VERSION 2
41 #define YY_FLEX_MINOR_VERSION 6
42 #define YY_FLEX_SUBMINOR_VERSION 0
43 #if YY_FLEX_SUBMINOR_VERSION > 0
44 #define FLEX_BETA
45 #endif
46
47 /* %if-c++-only */
48 /* %endif */
49
50 /* %if-c-only */
51
52 /* %endif */
53
54 /* %if-c-only */
55
56 /* %endif */
57
58 /* First, we deal with platform-specific or compiler-specific issues. */
59
60 /* begin standard C headers. */
61 /* %if-c-only */
62 #include <stdio.h>
63 #include <string.h>
64 #include <errno.h>
65 #include <stdlib.h>
66 /* %endif */
67
68 /* %if-tables-serialization */
69 /* %endif */
70 /* end standard C headers. */
71
72 /* %if-c-or-c++ */
73 /* flex integer type definitions */
74
75 #ifndef FLEXINT_H
76 #define FLEXINT_H
77
78 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
79
80 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
81
82 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
83 * if you want the limit (max/min) macros for int types.
84 */
85 #ifndef __STDC_LIMIT_MACROS
86 #define __STDC_LIMIT_MACROS 1
87 #endif
88
89 #include <inttypes.h>
90 typedef int8_t flex_int8_t;
91 typedef uint8_t flex_uint8_t;
92 typedef int16_t flex_int16_t;
93 typedef uint16_t flex_uint16_t;
94 typedef int32_t flex_int32_t;
95 typedef uint32_t flex_uint32_t;
96 #else
97 typedef signed char flex_int8_t;
98 typedef short int flex_int16_t;
99 typedef int flex_int32_t;
100 typedef unsigned char flex_uint8_t;
101 typedef unsigned short int flex_uint16_t;
102 typedef unsigned int flex_uint32_t;
103
104 /* Limits of integral types. */
105 #ifndef INT8_MIN
106 #define INT8_MIN (-128)
107 #endif
108 #ifndef INT16_MIN
109 #define INT16_MIN (-32767-1)
110 #endif
111 #ifndef INT32_MIN
112 #define INT32_MIN (-2147483647-1)
113 #endif
114 #ifndef INT8_MAX
115 #define INT8_MAX (127)
116 #endif
117 #ifndef INT16_MAX
118 #define INT16_MAX (32767)
119 #endif
120 #ifndef INT32_MAX
121 #define INT32_MAX (2147483647)
122 #endif
123 #ifndef UINT8_MAX
124 #define UINT8_MAX (255U)
125 #endif
126 #ifndef UINT16_MAX
127 #define UINT16_MAX (65535U)
128 #endif
129 #ifndef UINT32_MAX
130 #define UINT32_MAX (4294967295U)
131 #endif
132
133 #endif /* ! C99 */
134
135 #endif /* ! FLEXINT_H */
136
137 /* %endif */
138
139 /* %if-c++-only */
140 /* %endif */
141
142 #ifdef __cplusplus
143
144 /* The "const" storage-class-modifier is valid. */
145 #define YY_USE_CONST
146
147 #else /* ! __cplusplus */
148
149 /* C99 requires __STDC__ to be defined as 1. */
150 #if defined (__STDC__)
151
152 #define YY_USE_CONST
153
154 #endif /* defined (__STDC__) */
155 #endif /* ! __cplusplus */
156
157 #ifdef YY_USE_CONST
158 #define yyconst const
159 #else
160 #define yyconst
161 #endif
162
163 /* %not-for-header */
164
165 /* Returned upon end-of-file. */
166 #define YY_NULL 0
167 /* %ok-for-header */
168
169 /* %not-for-header */
170
171 /* Promotes a possibly negative, possibly signed char to an unsigned
172 * integer for use as an array index. If the signed char is negative,
173 * we want to instead treat it as an 8-bit unsigned char, hence the
174 * double cast.
175 */
176 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
177 /* %ok-for-header */
178
179 /* %if-reentrant */
180 /* %endif */
181
182 /* %if-not-reentrant */
183
184 /* %endif */
185
186 /* Enter a start condition. This macro really ought to take a parameter,
187 * but we do it the disgusting crufty way forced on us by the ()-less
188 * definition of BEGIN.
189 */
190 #define BEGIN (yy_start) = 1 + 2 *
191
192 /* Translate the current start state into a value that can be later handed
193 * to BEGIN to return to the state. The YYSTATE alias is for lex
194 * compatibility.
195 */
196 #define YY_START (((yy_start) - 1) / 2)
197 #define YYSTATE YY_START
198
199 /* Action number for EOF rule of a given start state. */
200 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
201
202 /* Special action meaning "start processing a new file". */
203 #define YY_NEW_FILE yyrestart(yyin )
204
205 #define YY_END_OF_BUFFER_CHAR 0
206
207 /* Size of default input buffer. */
208 #ifndef YY_BUF_SIZE
209 #ifdef __ia64__
210 /* On IA-64, the buffer size is 16k, not 8k.
211 * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
212 * Ditto for the __ia64__ case accordingly.
213 */
214 #define YY_BUF_SIZE 32768
215 #else
216 #define YY_BUF_SIZE 16384
217 #endif /* __ia64__ */
218 #endif
219
220 /* The state buf must be large enough to hold one state per character in the main buffer.
221 */
222 #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
223
224 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
225 #define YY_TYPEDEF_YY_BUFFER_STATE
226 typedef struct yy_buffer_state *YY_BUFFER_STATE;
227 #endif
228
229 #ifndef YY_TYPEDEF_YY_SIZE_T
230 #define YY_TYPEDEF_YY_SIZE_T
231 typedef size_t yy_size_t;
232 #endif
233
234 /* %if-not-reentrant */
235 extern yy_size_t yyleng;
236 /* %endif */
237
238 /* %if-c-only */
239 /* %if-not-reentrant */
240 extern FILE *yyin, *yyout;
241 /* %endif */
242 /* %endif */
243
244 #define EOB_ACT_CONTINUE_SCAN 0
245 #define EOB_ACT_END_OF_FILE 1
246 #define EOB_ACT_LAST_MATCH 2
247
248 #define YY_LESS_LINENO(n)
249 #define YY_LINENO_REWIND_TO(ptr)
250
251 /* Return all but the first "n" matched characters back to the input stream. */
252 #define yyless(n) \
253 do \
254 { \
255 /* Undo effects of setting up yytext. */ \
256 int yyless_macro_arg = (n); \
257 YY_LESS_LINENO(yyless_macro_arg);\
258 *yy_cp = (yy_hold_char); \
259 YY_RESTORE_YY_MORE_OFFSET \
260 (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
261 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
262 } \
263 while ( 0 )
264
265 #define unput(c) yyunput( c, (yytext_ptr) )
266
267 #ifndef YY_STRUCT_YY_BUFFER_STATE
268 #define YY_STRUCT_YY_BUFFER_STATE
269 struct yy_buffer_state
270 {
271 /* %if-c-only */
272 FILE *yy_input_file;
273 /* %endif */
274
275 /* %if-c++-only */
276 /* %endif */
277
278 char *yy_ch_buf; /* input buffer */
279 char *yy_buf_pos; /* current position in input buffer */
280
281 /* Size of input buffer in bytes, not including room for EOB
282 * characters.
283 */
284 yy_size_t yy_buf_size;
285
286 /* Number of characters read into yy_ch_buf, not including EOB
287 * characters.
288 */
289 yy_size_t yy_n_chars;
290
291 /* Whether we "own" the buffer - i.e., we know we created it,
292 * and can realloc() it to grow it, and should free() it to
293 * delete it.
294 */
295 int yy_is_our_buffer;
296
297 /* Whether this is an "interactive" input source; if so, and
298 * if we're using stdio for input, then we want to use getc()
299 * instead of fread(), to make sure we stop fetching input after
300 * each newline.
301 */
302 int yy_is_interactive;
303
304 /* Whether we're considered to be at the beginning of a line.
305 * If so, '^' rules will be active on the next match, otherwise
306 * not.
307 */
308 int yy_at_bol;
309
310 int yy_bs_lineno; /**< The line count. */
311 int yy_bs_column; /**< The column count. */
312
313 /* Whether to try to fill the input buffer when we reach the
314 * end of it.
315 */
316 int yy_fill_buffer;
317
318 int yy_buffer_status;
319
320 #define YY_BUFFER_NEW 0
321 #define YY_BUFFER_NORMAL 1
322 /* When an EOF's been seen but there's still some text to process
323 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
324 * shouldn't try reading from the input source any more. We might
325 * still have a bunch of tokens to match, though, because of
326 * possible backing-up.
327 *
328 * When we actually see the EOF, we change the status to "new"
329 * (via yyrestart()), so that the user can continue scanning by
330 * just pointing yyin at a new input file.
331 */
332 #define YY_BUFFER_EOF_PENDING 2
333
334 };
335 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
336
337 /* %if-c-only Standard (non-C++) definition */
338 /* %not-for-header */
339
340 /* %if-not-reentrant */
341
342 /* Stack of input buffers. */
343 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
344 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
345 static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
346 /* %endif */
347 /* %ok-for-header */
348
349 /* %endif */
350
351 /* We provide macros for accessing buffer states in case in the
352 * future we want to put the buffer states in a more general
353 * "scanner state".
354 *
355 * Returns the top of the stack, or NULL.
356 */
357 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
358 ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
359 : NULL)
360
361 /* Same as previous macro, but useful when we know that the buffer stack is not
362 * NULL or when we need an lvalue. For internal use only.
363 */
364 #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
365
366 /* %if-c-only Standard (non-C++) definition */
367
368 /* %if-not-reentrant */
369 /* %not-for-header */
370
371 /* yy_hold_char holds the character lost when yytext is formed. */
372 static char yy_hold_char;
373 static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
374 yy_size_t yyleng;
375
376 /* Points to current character in buffer. */
377 static char *yy_c_buf_p = (char *) 0;
378 static int yy_init = 0; /* whether we need to initialize */
379 static int yy_start = 0; /* start state number */
380
381 /* Flag which is used to allow yywrap()'s to do buffer switches
382 * instead of setting up a fresh yyin. A bit of a hack ...
383 */
384 static int yy_did_buffer_switch_on_eof;
385 /* %ok-for-header */
386
387 /* %endif */
388
389 void yyrestart (FILE *input_file );
390 void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
391 YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
392 void yy_delete_buffer (YY_BUFFER_STATE b );
393 void yy_flush_buffer (YY_BUFFER_STATE b );
394 void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
395 void yypop_buffer_state (void );
396
397 static void yyensure_buffer_stack (void );
398 static void yy_load_buffer_state (void );
399 static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
400
401 #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
402
403 YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
404 YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
405 YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len );
406
407 /* %endif */
408
409 void *yyalloc (yy_size_t );
410 void *yyrealloc (void *,yy_size_t );
411 void yyfree (void * );
412
413 #define yy_new_buffer yy_create_buffer
414
415 #define yy_set_interactive(is_interactive) \
416 { \
417 if ( ! YY_CURRENT_BUFFER ){ \
418 yyensure_buffer_stack (); \
419 YY_CURRENT_BUFFER_LVALUE = \
420 yy_create_buffer(yyin,YY_BUF_SIZE ); \
421 } \
422 YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
423 }
424
425 #define yy_set_bol(at_bol) \
426 { \
427 if ( ! YY_CURRENT_BUFFER ){\
428 yyensure_buffer_stack (); \
429 YY_CURRENT_BUFFER_LVALUE = \
430 yy_create_buffer(yyin,YY_BUF_SIZE ); \
431 } \
432 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
433 }
434
435 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
436
437 /* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
438 /* Begin user sect3 */
439
440 #define FLEX_DEBUG
441
442 typedef unsigned char YY_CHAR;
443
444 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
445
446 typedef int yy_state_type;
447
448 extern int yylineno;
449
450 int yylineno = 1;
451
452 extern char *yytext;
453 #ifdef yytext_ptr
454 #undef yytext_ptr
455 #endif
456 #define yytext_ptr yytext
457
458 /* %% [1.5] DFA */
459
460 /* %if-c-only Standard (non-C++) definition */
461
462 static yy_state_type yy_get_previous_state (void );
463 static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
464 static int yy_get_next_buffer (void );
465 #if defined(__GNUC__) && __GNUC__ >= 3
466 __attribute__((__noreturn__))
467 #endif
468 static void yy_fatal_error (yyconst char msg[] );
469
470 /* %endif */
471
472 /* Done after the current pattern has been matched and before the
473 * corresponding action - sets up yytext.
474 */
475 #define YY_DO_BEFORE_ACTION \
476 (yytext_ptr) = yy_bp; \
477 /* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
478 yyleng = (size_t) (yy_cp - yy_bp); \
479 (yy_hold_char) = *yy_cp; \
480 *yy_cp = '\0'; \
481 /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
482 (yy_c_buf_p) = yy_cp;
483
484 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
485 #define YY_NUM_RULES 152
486 #define YY_END_OF_BUFFER 153
487 /* This struct is not used in this scanner,
488 but its presence is necessary. */
489 struct yy_trans_info
490 {
491 flex_int32_t yy_verify;
492 flex_int32_t yy_nxt;
493 };
494 static yyconst flex_int16_t yy_accept[986] =
495 { 0,
496 0, 0, 2, 2, 0, 0, 0, 0, 0, 0,
497 0, 0, 0, 0, 0, 0, 0, 0, 153, 151,
498 135, 136, 151, 151, 16, 151, 151, 143, 151, 151,
499 151, 103, 103, 139, 137, 141, 105, 151, 145, 105,
500 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
501 105, 105, 105, 105, 105, 105, 105, 144, 146, 135,
502 16, 2, 4, 3, 2, 2, 152, 152, 117, 131,
503 131, 152, 150, 133, 131, 131, 150, 152, 134, 152,
504 150, 127, 20, 18, 19, 20, 17, 152, 8, 152,
505 105, 105, 105, 135, 16, 135, 138, 0, 107, 109,
506
507 109, 16, 15, 90, 94, 92, 95, 0, 0, 0,
508 0, 106, 0, 1, 102, 0, 103, 147, 140, 137,
509 142, 148, 105, 99, 105, 105, 105, 105, 105, 105,
510 105, 105, 105, 105, 105, 105, 105, 34, 105, 105,
511 105, 30, 105, 105, 105, 105, 29, 105, 105, 105,
512 105, 105, 105, 105, 105, 33, 41, 105, 105, 105,
513 105, 105, 105, 105, 105, 105, 105, 105, 105, 135,
514 0, 16, 16, 16, 16, 16, 16, 16, 2, 3,
515 3, 5, 2, 2, 2, 2, 0, 117, 118, 118,
516 91, 130, 93, 96, 0, 88, 88, 0, 124, 116,
517
518 124, 100, 124, 0, 133, 128, 132, 0, 134, 129,
519 0, 127, 18, 17, 0, 8, 0, 83, 105, 105,
520 135, 0, 16, 109, 115, 108, 115, 115, 92, 95,
521 0, 0, 0, 149, 102, 101, 0, 0, 0, 0,
522 99, 105, 105, 105, 105, 105, 105, 105, 105, 105,
523 26, 105, 42, 105, 105, 78, 105, 105, 105, 105,
524 105, 105, 105, 105, 105, 105, 105, 68, 105, 64,
525 105, 105, 105, 105, 105, 105, 0, 105, 43, 105,
526 105, 105, 105, 105, 105, 105, 105, 105, 104, 46,
527 105, 105, 105, 105, 105, 48, 105, 105, 105, 0,
528
529 0, 0, 0, 0, 0, 16, 16, 16, 16, 16,
530 16, 16, 16, 2, 116, 93, 96, 0, 88, 88,
531 0, 0, 123, 122, 100, 0, 0, 7, 105, 105,
532 0, 108, 114, 113, 0, 0, 97, 0, 0, 0,
533 0, 0, 0, 0, 0, 0, 101, 0, 0, 0,
534 0, 125, 0, 105, 105, 105, 105, 105, 105, 105,
535 105, 105, 105, 105, 105, 105, 105, 105, 105, 54,
536 105, 105, 105, 105, 105, 105, 105, 35, 49, 32,
537 31, 105, 74, 52, 105, 62, 105, 105, 0, 0,
538 0, 44, 105, 66, 105, 45, 105, 105, 105, 105,
539
540 105, 105, 105, 105, 105, 105, 105, 40, 105, 0,
541 0, 0, 0, 0, 0, 16, 6, 16, 16, 16,
542 16, 16, 2, 0, 98, 88, 88, 88, 88, 88,
543 88, 88, 88, 0, 89, 0, 121, 122, 120, 82,
544 81, 112, 113, 111, 0, 0, 0, 0, 0, 0,
545 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
546 0, 0, 0, 0, 0, 0, 105, 105, 105, 105,
547 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
548 69, 67, 65, 47, 60, 105, 79, 105, 105, 105,
549 105, 105, 105, 105, 0, 0, 105, 105, 105, 105,
550
551 105, 105, 105, 105, 105, 105, 105, 61, 70, 63,
552 0, 0, 0, 0, 0, 16, 16, 16, 16, 16,
553 16, 2, 88, 88, 88, 88, 88, 88, 88, 88,
554 88, 88, 88, 88, 0, 0, 0, 0, 0, 0,
555 0, 0, 122, 119, 113, 110, 0, 0, 0, 0,
556 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
557 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
558 0, 0, 0, 126, 105, 105, 105, 105, 105, 105,
559 105, 105, 105, 105, 105, 105, 105, 21, 105, 105,
560 28, 105, 105, 73, 105, 77, 0, 0, 59, 105,
561
562 76, 22, 105, 105, 50, 75, 58, 53, 105, 0,
563 0, 0, 0, 0, 0, 16, 9, 16, 16, 16,
564 16, 16, 2, 88, 88, 88, 88, 88, 88, 88,
565 88, 88, 88, 88, 88, 88, 0, 0, 0, 0,
566 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
567 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
568 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
569 0, 0, 0, 0, 105, 105, 80, 105, 105, 105,
570 105, 105, 105, 105, 105, 105, 105, 55, 25, 105,
571 36, 0, 0, 0, 57, 105, 27, 72, 51, 0,
572
573 56, 105, 0, 9, 0, 0, 0, 0, 0, 16,
574 16, 16, 10, 16, 2, 10, 0, 88, 88, 88,
575 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
576 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
577 0, 0, 0, 0, 0, 84, 0, 0, 0, 0,
578 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
579 0, 0, 0, 0, 0, 0, 0, 0, 80, 105,
580 105, 105, 105, 105, 105, 105, 105, 105, 24, 105,
581 0, 0, 71, 23, 0, 0, 0, 16, 12, 16,
582 16, 88, 88, 85, 88, 88, 88, 88, 88, 88,
583
584 88, 88, 88, 0, 0, 0, 0, 0, 0, 0,
585 0, 0, 0, 0, 0, 0, 84, 0, 0, 0,
586 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
587 0, 0, 0, 0, 0, 0, 0, 0, 105, 105,
588 105, 105, 105, 105, 37, 0, 0, 0, 12, 0,
589 0, 16, 16, 16, 11, 85, 88, 88, 88, 88,
590 88, 88, 88, 88, 88, 0, 0, 0, 0, 0,
591 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
592 0, 0, 0, 0, 0, 86, 0, 0, 0, 0,
593 0, 0, 0, 0, 105, 105, 105, 105, 105, 0,
594
595 38, 0, 0, 0, 11, 16, 14, 16, 88, 88,
596 88, 88, 88, 88, 0, 0, 87, 0, 0, 0,
597 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
598 0, 0, 0, 0, 0, 0, 105, 105, 0, 0,
599 14, 0, 16, 88, 88, 88, 88, 88, 0, 0,
600 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
601 0, 39, 0, 16, 88, 88, 0, 0, 0, 0,
602 0, 0, 0, 0, 16, 0, 0, 0, 16, 0,
603 16, 13, 0, 13, 0
604 } ;
605
606 static yyconst YY_CHAR yy_ec[256] =
607 { 0,
608 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
609 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
610 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
611 1, 4, 5, 6, 7, 8, 9, 10, 11, 12,
612 1, 13, 1, 1, 14, 15, 16, 17, 18, 18,
613 18, 18, 18, 18, 18, 19, 19, 1, 1, 20,
614 21, 22, 1, 1, 23, 23, 23, 23, 23, 23,
615 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
616 24, 24, 24, 24, 24, 24, 24, 25, 24, 24,
617 1, 26, 1, 27, 28, 1, 29, 30, 31, 32,
618
619 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
620 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
621 53, 24, 54, 55, 56, 57, 1, 1, 1, 1,
622 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
623 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
624 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
625 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
626 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
627 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
628 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
629
630 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
631 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
632 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
633 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
634 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
635 1, 1, 1, 1, 1
636 } ;
637
638 static yyconst YY_CHAR yy_meta[58] =
639 { 0,
640 1, 1, 2, 1, 1, 1, 3, 4, 5, 1,
641 6, 7, 8, 9, 1, 1, 10, 11, 11, 1,
642 1, 1, 12, 13, 13, 14, 1, 13, 12, 12,
643 12, 12, 12, 12, 13, 13, 13, 13, 13, 13,
644 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
645 13, 13, 13, 15, 1, 16, 1
646 } ;
647
648 static yyconst flex_uint16_t yy_base[1045] =
649 { 0,
650 0, 56, 56, 63, 65, 69, 76, 78, 80, 89,
651 2203, 2202, 115, 0, 2201, 59, 64, 171, 2203, 2207,
652 92, 2207, 2181, 168, 2198, 172, 152, 2207, 2189, 2184,
653 2185, 164, 92, 92, 2176, 164, 0, 174, 2207, 2168,
654 170, 150, 166, 180, 59, 182, 73, 2152, 175, 165,
655 187, 191, 2161, 188, 199, 2164, 2156, 2207, 2207, 239,
656 245, 0, 2207, 238, 251, 240, 251, 2207, 2207, 254,
657 243, 273, 278, 2182, 276, 247, 248, 290, 2207, 251,
658 2187, 2207, 2207, 101, 2207, 2176, 0, 2185, 2207, 227,
659 275, 2144, 280, 317, 329, 195, 2207, 329, 2207, 2207,
660
661 293, 2183, 2207, 2207, 2207, 294, 0, 0, 2157, 2156,
662 2172, 2207, 2167, 2207, 310, 0, 322, 332, 2207, 2207,
663 2207, 2207, 0, 332, 335, 2150, 2148, 2142, 2146, 2142,
664 2143, 2142, 305, 2132, 2133, 280, 2125, 2129, 2134, 307,
665 2137, 0, 2127, 2121, 2123, 2123, 0, 2120, 2120, 2114,
666 2129, 355, 2108, 2111, 2117, 0, 0, 2110, 328, 2126,
667 336, 190, 159, 2118, 2113, 2107, 2099, 2107, 323, 361,
668 384, 427, 374, 389, 369, 276, 299, 380, 0, 381,
669 382, 2207, 397, 385, 407, 2113, 410, 2207, 2207, 2146,
670 2207, 2207, 395, 0, 0, 0, 2120, 2119, 414, 424,
671
672 426, 420, 433, 446, 2137, 2207, 2207, 448, 2207, 2207,
673 2142, 2207, 459, 0, 2141, 2207, 466, 0, 2096, 2102,
674 471, 475, 478, 2138, 457, 476, 481, 478, 499, 0,
675 2084, 489, 2111, 2207, 474, 0, 0, 499, 539, 586,
676 509, 2105, 439, 2100, 2099, 477, 259, 2087, 2101, 2100,
677 0, 2103, 0, 2094, 2101, 0, 2096, 2097, 453, 2094,
678 2097, 2092, 2093, 2090, 2079, 2087, 2087, 0, 2090, 0,
679 2077, 2086, 2073, 2071, 2083, 2064, 597, 2064, 0, 2081,
680 2063, 2078, 2073, 2067, 2073, 2065, 2055, 2054, 0, 0,
681 2054, 2064, 2052, 2055, 2055, 0, 2049, 2054, 2055, 600,
682
683 603, 2048, 2051, 2055, 2045, 595, 2087, 611, 606, 402,
684 506, 492, 424, 2047, 2207, 609, 0, 2032, 0, 607,
685 2031, 578, 2207, 641, 643, 0, 661, 2207, 2038, 2045,
686 651, 2207, 2207, 663, 0, 2028, 2207, 2050, 619, 2045,
687 2044, 648, 600, 2032, 2046, 658, 0, 2067, 668, 2074,
688 671, 2207, 0, 2042, 2035, 2032, 2025, 2030, 2033, 2028,
689 2037, 604, 2035, 2038, 2020, 2021, 2017, 2021, 2023, 0,
690 2025, 2012, 2022, 2006, 2008, 2008, 2026, 0, 0, 0,
691 0, 2006, 0, 0, 2007, 0, 2016, 2011, 699, 2008,
692 2020, 0, 2015, 0, 2010, 0, 2009, 2014, 2015, 2006,
693
694 1996, 2004, 1998, 2008, 2004, 1986, 1990, 0, 2002, 705,
695 702, 1988, 2002, 1990, 2002, 2027, 2207, 529, 600, 673,
696 633, 361, 1996, 1972, 2207, 1994, 663, 1989, 1988, 681,
697 668, 1976, 1990, 1966, 2207, 709, 2207, 708, 719, 0,
698 0, 2207, 721, 728, 1987, 1980, 1977, 1970, 1975, 1978,
699 1973, 1982, 684, 1980, 1983, 1965, 1977, 686, 1972, 1971,
700 723, 702, 1959, 1973, 759, 1994, 639, 1971, 1972, 1974,
701 1968, 1957, 1956, 1949, 1958, 1965, 1951, 1946, 1946, 1944,
702 0, 0, 0, 0, 0, 1949, 0, 1950, 1956, 1942,
703 1956, 1938, 1952, 1951, 1942, 1934, 1935, 1937, 1948, 1930,
704
705 1946, 1930, 1933, 1943, 1938, 1936, 1942, 0, 0, 0,
706 1964, 1926, 1928, 1934, 1931, 752, 761, 459, 629, 766,
707 417, 769, 1931, 1924, 1921, 1914, 1919, 1922, 1917, 1926,
708 726, 1924, 1927, 1909, 739, 738, 740, 741, 747, 752,
709 732, 746, 774, 2207, 783, 2207, 742, 1921, 1922, 1924,
710 1918, 1907, 1906, 1899, 1908, 1915, 1901, 1896, 1896, 1908,
711 1901, 1898, 1891, 1896, 1899, 1894, 1903, 762, 1901, 1904,
712 1886, 1928, 802, 2207, 1884, 1901, 1880, 1899, 1898, 1879,
713 1878, 1883, 1893, 1885, 1874, 1886, 1881, 0, 1868, 1868,
714 0, 1883, 1878, 0, 1866, 0, 1883, 1880, 809, 1861,
715
716 0, 0, 1876, 1875, 1860, 0, 810, 0, 1869, 1899,
717 812, 1858, 1854, 797, 1861, 813, 2207, 814, 821, 613,
718 1898, 693, 397, 782, 1867, 1868, 1870, 1864, 1853, 1852,
719 1845, 1854, 1861, 1847, 1842, 1842, 751, 787, 786, 782,
720 789, 794, 791, 802, 804, 803, 808, 793, 1842, 1859,
721 1838, 1857, 1856, 1837, 1836, 1841, 1851, 1843, 1832, 1844,
722 1839, 797, 1842, 1843, 1845, 1839, 1828, 1827, 1820, 1829,
723 1836, 1822, 1817, 1817, 1835, 1825, 0, 1833, 1832, 1831,
724 1825, 1822, 1828, 1812, 1822, 1810, 1819, 0, 0, 1818,
725 0, 1802, 1813, 844, 2207, 1801, 0, 0, 0, 849,
726
727 2207, 1807, 851, 2207, 859, 864, 1814, 1842, 1815, 1840,
728 837, 1839, 2207, 869, 864, 2207, 1838, 1794, 1811, 1790,
729 1809, 1808, 1789, 1788, 1793, 1803, 1795, 1784, 1796, 1791,
730 831, 830, 824, 841, 843, 836, 838, 482, 835, 851,
731 839, 837, 695, 1799, 1789, 2207, 1797, 1796, 1795, 1789,
732 1786, 1792, 1776, 1786, 1774, 1770, 1787, 1766, 1785, 1784,
733 1765, 1764, 1769, 1779, 1771, 1760, 1772, 1767, 0, 1760,
734 1774, 1773, 1772, 1766, 1770, 1766, 1759, 1753, 0, 1747,
735 1762, 1759, 0, 0, 1788, 1757, 886, 1786, 2207, 898,
736 1785, 1759, 1749, 0, 1757, 1756, 1755, 1749, 1746, 1752,
737
738 1736, 1746, 1734, 850, 856, 855, 861, 876, 852, 859,
739 869, 881, 877, 868, 883, 882, 2207, 1733, 1747, 1746,
740 1745, 1739, 1743, 1739, 1732, 1726, 1739, 1729, 1487, 1461,
741 1460, 1459, 1445, 1442, 1443, 1427, 1413, 1401, 1396, 1406,
742 1405, 1404, 1385, 1399, 0, 1387, 1375, 1418, 2207, 916,
743 1417, 1403, 918, 1402, 2207, 0, 1360, 1374, 1360, 1264,
744 1256, 1260, 1256, 1249, 1243, 894, 886, 1228, 899, 900,
745 901, 897, 26, 903, 891, 904, 892, 1239, 1249, 1248,
746 1247, 1228, 1245, 1216, 1212, 2207, 1211, 1201, 1195, 1170,
747 1172, 1165, 1158, 1152, 1164, 1163, 1162, 1130, 1031, 1025,
748
749 2207, 1054, 1008, 1043, 2207, 1038, 2207, 937, 232, 314,
750 602, 659, 700, 913, 887, 902, 2207, 918, 921, 924,
751 929, 926, 920, 927, 925, 935, 937, 938, 940, 941,
752 928, 943, 944, 945, 929, 950, 956, 958, 940, 985,
753 2207, 947, 987, 963, 964, 965, 966, 967, 954, 969,
754 970, 971, 955, 972, 974, 975, 976, 977, 978, 979,
755 980, 2207, 978, 1009, 985, 986, 987, 988, 989, 991,
756 992, 993, 994, 990, 1027, 996, 1004, 1031, 1031, 1033,
757 1034, 2207, 1035, 2207, 2207, 1060, 1076, 1092, 1108, 1124,
758 1140, 1156, 1172, 1186, 1201, 1208, 1221, 1237, 1253, 1267,
759
760 1278, 1293, 1309, 1325, 1341, 1348, 1361, 1377, 1384, 1027,
761 1388, 1395, 1400, 1037, 1404, 1041, 1414, 1425, 1430, 1437,
762 1043, 1449, 1456, 1463, 1470, 1473, 1480, 1493, 1509, 1525,
763 1541, 1557, 1573, 1589, 1605, 1621, 1637, 1653, 1669, 1685,
764 1701, 1717, 1733, 1749
765 } ;
766
767 static yyconst flex_int16_t yy_def[1045] =
768 { 0,
769 985, 1, 986, 986, 987, 987, 988, 988, 989, 989,
770 990, 990, 985, 13, 991, 991, 1, 1, 985, 985,
771 985, 985, 985, 992, 993, 994, 985, 985, 995, 985,
772 985, 985, 985, 985, 985, 985, 996, 985, 985, 996,
773 996, 996, 996, 996, 996, 996, 996, 996, 996, 996,
774 996, 996, 996, 996, 996, 996, 996, 985, 985, 985,
775 993, 997, 985, 998, 997, 997, 999, 985, 985, 1000,
776 1001, 1002, 1003, 985, 1000, 1001, 1002, 1004, 985, 1002,
777 1005, 985, 985, 985, 985, 985, 1006, 1007, 985, 1007,
778 996, 996, 996, 985, 993, 985, 985, 992, 985, 985,
779
780 1008, 993, 985, 985, 985, 985, 1009, 1010, 985, 985,
781 995, 985, 985, 985, 985, 1011, 985, 1012, 985, 985,
782 985, 985, 996, 985, 996, 996, 996, 996, 996, 996,
783 996, 996, 996, 996, 996, 996, 996, 996, 996, 996,
784 996, 996, 996, 996, 996, 996, 996, 996, 996, 996,
785 996, 996, 996, 996, 996, 996, 996, 996, 996, 996,
786 996, 996, 996, 996, 996, 996, 996, 996, 996, 985,
787 985, 993, 993, 993, 993, 993, 993, 993, 997, 998,
788 998, 985, 997, 997, 997, 997, 999, 985, 985, 985,
789 985, 985, 985, 1013, 1014, 1015, 1015, 1016, 985, 985,
790
791 985, 985, 1017, 1003, 985, 985, 985, 1004, 985, 985,
792 1005, 985, 985, 1006, 1007, 985, 1007, 996, 996, 996,
793 985, 985, 993, 985, 985, 985, 985, 1018, 985, 1009,
794 1019, 985, 985, 985, 985, 1020, 1021, 1012, 985, 1012,
795 985, 996, 996, 996, 996, 996, 996, 996, 996, 996,
796 996, 996, 996, 996, 996, 996, 996, 996, 996, 996,
797 996, 996, 996, 996, 996, 996, 996, 996, 996, 996,
798 996, 996, 996, 996, 996, 996, 985, 996, 996, 996,
799 996, 996, 996, 996, 996, 996, 996, 996, 996, 996,
800 996, 996, 996, 996, 996, 996, 996, 996, 996, 985,
801
802 985, 985, 985, 985, 985, 993, 1022, 993, 993, 993,
803 993, 993, 993, 997, 985, 985, 1013, 1023, 1015, 1015,
804 1024, 1024, 985, 985, 985, 1025, 1007, 985, 996, 996,
805 985, 985, 985, 985, 1026, 1019, 985, 985, 985, 985,
806 985, 985, 985, 985, 985, 985, 1020, 1027, 1012, 1028,
807 1028, 985, 239, 996, 996, 996, 996, 996, 996, 996,
808 996, 996, 996, 996, 996, 996, 996, 996, 996, 996,
809 996, 996, 996, 996, 996, 996, 996, 996, 996, 996,
810 996, 996, 996, 996, 996, 996, 996, 996, 985, 985,
811 985, 996, 996, 996, 996, 996, 996, 996, 996, 996,
812
813 996, 996, 996, 996, 996, 996, 996, 996, 996, 985,
814 985, 985, 985, 985, 985, 1022, 985, 1029, 993, 993,
815 993, 993, 997, 1023, 985, 1015, 1015, 1015, 1015, 1015,
816 1015, 1015, 1015, 1024, 985, 1024, 985, 985, 985, 996,
817 996, 985, 985, 985, 985, 985, 985, 985, 985, 985,
818 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
819 985, 985, 985, 985, 1030, 1027, 996, 996, 996, 996,
820 996, 996, 996, 996, 996, 996, 996, 996, 996, 996,
821 996, 996, 996, 996, 996, 996, 996, 996, 996, 996,
822 996, 996, 996, 996, 985, 985, 996, 996, 996, 996,
823
824 996, 996, 996, 996, 996, 996, 996, 996, 996, 996,
825 1031, 985, 985, 985, 985, 1029, 1032, 993, 993, 993,
826 993, 997, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
827 1015, 1015, 1015, 1015, 1024, 1024, 1024, 1024, 1024, 1024,
828 1024, 1024, 985, 985, 985, 985, 985, 985, 985, 985,
829 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
830 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
831 985, 1030, 1030, 985, 996, 996, 996, 996, 996, 996,
832 996, 996, 996, 996, 996, 996, 996, 996, 996, 996,
833 996, 996, 996, 996, 996, 996, 985, 985, 996, 996,
834
835 996, 996, 996, 996, 996, 996, 996, 996, 996, 1031,
836 1033, 985, 985, 985, 985, 1032, 985, 1032, 993, 993,
837 1034, 993, 1035, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
838 1015, 1015, 1015, 1015, 1015, 1015, 1024, 1024, 1024, 1024,
839 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 985, 985,
840 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
841 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
842 985, 985, 985, 985, 996, 996, 996, 996, 996, 996,
843 996, 996, 996, 996, 996, 996, 996, 996, 996, 996,
844 996, 985, 985, 985, 985, 996, 996, 996, 996, 985,
845
846 985, 996, 1033, 985, 1033, 985, 985, 1036, 985, 1037,
847 993, 1034, 985, 993, 1035, 985, 1036, 1015, 1015, 1015,
848 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
849 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
850 1024, 1024, 1024, 985, 985, 985, 985, 985, 985, 985,
851 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
852 985, 985, 985, 985, 985, 985, 985, 985, 996, 996,
853 996, 996, 996, 996, 996, 996, 996, 996, 996, 996,
854 985, 985, 996, 996, 1038, 985, 985, 1037, 985, 993,
855 1039, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
856
857 1015, 1015, 1015, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
858 1024, 1024, 1024, 1024, 1024, 1024, 985, 985, 985, 985,
859 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
860 985, 985, 985, 985, 985, 985, 985, 985, 996, 996,
861 996, 996, 996, 996, 996, 985, 985, 1038, 985, 985,
862 1040, 1041, 993, 1039, 985, 1015, 1015, 1015, 1015, 1015,
863 1015, 1015, 1015, 1015, 1015, 1024, 1024, 1024, 1024, 1024,
864 1024, 1024, 1024, 1024, 1024, 1024, 1024, 985, 985, 985,
865 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
866 985, 985, 985, 985, 996, 996, 996, 996, 996, 985,
867
868 985, 1042, 985, 1040, 985, 1041, 985, 993, 1015, 1015,
869 1015, 1015, 1015, 1015, 1024, 1024, 985, 1024, 1024, 1024,
870 1024, 1024, 1024, 1024, 1024, 985, 985, 985, 985, 985,
871 985, 985, 985, 985, 985, 985, 996, 996, 985, 1042,
872 985, 985, 993, 1015, 1015, 1015, 1015, 1015, 1024, 1024,
873 1024, 1024, 1024, 1024, 985, 985, 985, 985, 985, 985,
874 985, 985, 985, 993, 1015, 1015, 1024, 1024, 1024, 1024,
875 1024, 985, 985, 985, 993, 1024, 1024, 985, 1043, 1044,
876 1043, 985, 1044, 985, 0, 985, 985, 985, 985, 985,
877 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
878
879 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
880 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
881 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
882 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
883 985, 985, 985, 985
884 } ;
885
886 static yyconst flex_uint16_t yy_nxt[2265] =
887 { 0,
888 20, 21, 22, 21, 23, 24, 25, 26, 27, 28,
889 29, 20, 20, 20, 30, 31, 32, 33, 33, 34,
890 35, 36, 37, 37, 37, 38, 39, 40, 41, 42,
891 43, 44, 45, 46, 37, 37, 47, 37, 37, 48,
892 49, 50, 51, 52, 37, 53, 54, 55, 37, 56,
893 57, 37, 37, 20, 58, 20, 59, 60, 63, 60,
894 921, 89, 61, 90, 65, 63, 65, 68, 64, 66,
895 69, 68, 70, 71, 69, 64, 70, 71, 74, 20,
896 74, 435, 79, 75, 76, 75, 76, 70, 71, 139,
897 72, 79, 91, 96, 72, 96, 70, 71, 140, 92,
898
899 141, 77, 213, 77, 213, 80, 147, 93, 117, 117,
900 117, 118, 119, 148, 80, 83, 84, 85, 84, 83,
901 83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
902 86, 83, 83, 83, 83, 83, 83, 87, 87, 87,
903 83, 83, 87, 87, 87, 87, 87, 87, 87, 87,
904 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
905 87, 87, 87, 87, 87, 87, 87, 87, 83, 83,
906 83, 83, 94, 99, 94, 100, 100, 95, 104, 109,
907 115, 115, 130, 105, 121, 122, 20, 291, 116, 106,
908 106, 124, 124, 101, 133, 131, 96, 153, 96, 91,
909
910 126, 127, 132, 150, 292, 110, 92, 154, 134, 128,
911 135, 129, 136, 155, 93, 116, 137, 151, 142, 158,
912 162, 289, 138, 143, 144, 108, 152, 145, 156, 216,
913 146, 165, 157, 217, 166, 163, 159, 290, 164, 160,
914 170, 185, 170, 185, 167, 171, 172, 103, 172, 173,
915 181, 192, 183, 182, 183, 985, 188, 184, 189, 189,
916 191, 192, 174, 174, 201, 202, 202, 201, 202, 202,
917 197, 193, 193, 944, 197, 200, 190, 175, 103, 186,
918 205, 176, 191, 985, 177, 206, 206, 362, 178, 201,
919 202, 202, 209, 193, 193, 226, 198, 210, 210, 203,
920
921 198, 103, 203, 206, 363, 126, 127, 195, 158, 227,
922 229, 229, 229, 261, 128, 210, 129, 311, 221, 262,
923 221, 218, 220, 222, 203, 159, 235, 235, 160, 195,
924 223, 103, 223, 173, 99, 312, 100, 100, 117, 117,
925 117, 856, 237, 266, 228, 238, 174, 174, 241, 241,
926 241, 257, 258, 267, 224, 298, 277, 240, 277, 299,
927 282, 175, 170, 103, 170, 176, 242, 171, 243, 244,
928 283, 103, 178, 285, 245, 246, 103, 306, 247, 286,
929 287, 248, 103, 288, 249, 300, 185, 300, 185, 307,
930 308, 103, 308, 985, 181, 521, 985, 182, 183, 716,
931
932 183, 301, 301, 184, 103, 309, 309, 309, 185, 717,
933 185, 316, 316, 316, 310, 188, 302, 189, 189, 103,
934 303, 323, 323, 304, 186, 313, 103, 305, 172, 103,
935 172, 323, 323, 323, 323, 190, 325, 325, 325, 323,
936 323, 323, 324, 324, 174, 174, 186, 419, 205, 323,
937 209, 323, 422, 206, 206, 210, 210, 622, 323, 175,
938 213, 103, 213, 176, 333, 333, 177, 327, 328, 327,
939 178, 206, 221, 210, 221, 355, 331, 222, 331, 223,
940 103, 223, 333, 333, 333, 333, 333, 356, 333, 333,
941 235, 235, 301, 301, 103, 174, 174, 334, 334, 372,
942
943 373, 333, 349, 333, 619, 359, 333, 302, 103, 237,
944 175, 303, 985, 360, 176, 229, 229, 229, 305, 361,
945 338, 178, 339, 340, 240, 241, 241, 241, 341, 342,
946 811, 103, 343, 421, 517, 344, 420, 435, 345, 350,
947 351, 352, 351, 350, 350, 350, 350, 350, 350, 350,
948 350, 350, 350, 350, 350, 353, 353, 353, 350, 350,
949 350, 353, 353, 353, 350, 350, 353, 353, 353, 353,
950 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
951 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
952 353, 353, 350, 350, 350, 350, 985, 103, 389, 985,
953
954 389, 300, 103, 300, 410, 436, 410, 308, 103, 308,
955 307, 985, 308, 103, 308, 103, 418, 301, 301, 411,
956 411, 411, 309, 309, 309, 316, 316, 316, 453, 945,
957 390, 103, 302, 435, 475, 103, 303, 391, 426, 304,
958 427, 428, 518, 305, 711, 454, 429, 430, 437, 437,
959 431, 476, 331, 432, 331, 446, 433, 438, 438, 325,
960 325, 325, 327, 328, 327, 520, 437, 447, 301, 301,
961 442, 442, 351, 352, 351, 103, 450, 620, 237, 443,
962 443, 985, 575, 302, 451, 248, 946, 303, 442, 457,
963 452, 458, 459, 240, 305, 103, 531, 460, 461, 524,
964
965 389, 462, 389, 410, 463, 410, 410, 464, 410, 528,
966 511, 525, 519, 532, 555, 437, 437, 529, 411, 411,
967 411, 714, 561, 530, 543, 543, 544, 544, 442, 442,
968 568, 556, 390, 437, 562, 546, 546, 545, 545, 391,
969 535, 816, 536, 537, 544, 947, 442, 569, 538, 539,
970 435, 565, 540, 546, 103, 541, 632, 517, 542, 566,
971 573, 574, 573, 617, 435, 567, 618, 621, 103, 621,
972 623, 637, 623, 633, 638, 642, 640, 641, 648, 647,
973 645, 437, 437, 643, 731, 649, 639, 435, 344, 644,
974 442, 442, 670, 435, 435, 435, 435, 646, 708, 437,
975
976 708, 435, 435, 573, 574, 573, 435, 435, 442, 671,
977 694, 700, 694, 700, 704, 617, 617, 705, 618, 618,
978 695, 701, 710, 103, 710, 718, 732, 733, 432, 734,
979 735, 736, 737, 738, 739, 741, 742, 435, 743, 103,
980 756, 435, 435, 463, 435, 694, 435, 694, 435, 435,
981 700, 740, 700, 704, 806, 695, 705, 435, 435, 435,
982 701, 704, 805, 435, 705, 785, 716, 785, 807, 790,
983 791, 103, 791, 812, 804, 808, 717, 541, 809, 435,
984 810, 813, 814, 866, 815, 435, 435, 851, 868, 851,
985 435, 435, 435, 435, 435, 646, 435, 870, 435, 852,
986
987 103, 852, 867, 869, 871, 435, 435, 435, 872, 873,
988 435, 435, 874, 875, 435, 876, 435, 902, 877, 902,
989 103, 915, 916, 435, 435, 853, 915, 918, 919, 920,
990 922, 435, 435, 923, 925, 924, 435, 435, 435, 103,
991 948, 435, 917, 903, 949, 868, 435, 435, 868, 435,
992 952, 950, 435, 868, 435, 435, 435, 435, 435, 435,
993 908, 951, 955, 953, 746, 817, 954, 956, 746, 957,
994 884, 958, 959, 435, 960, 435, 435, 961, 943, 435,
995 435, 435, 435, 769, 435, 769, 962, 941, 963, 103,
996 965, 794, 856, 966, 794, 967, 915, 968, 969, 971,
997
998 970, 817, 817, 972, 829, 884, 973, 829, 974, 435,
999 435, 103, 856, 856, 976, 868, 915, 964, 977, 868,
1000 884, 884, 978, 915, 435, 435, 435, 435, 979, 103,
1001 979, 915, 980, 982, 980, 984, 982, 984, 231, 231,
1002 907, 975, 435, 435, 435, 905, 435, 435, 318, 318,
1003 942, 435, 321, 321, 348, 348, 941, 939, 677, 435,
1004 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
1005 62, 62, 62, 62, 62, 62, 67, 67, 67, 67,
1006 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
1007 67, 67, 73, 73, 73, 73, 73, 73, 73, 73,
1008
1009 73, 73, 73, 73, 73, 73, 73, 73, 78, 78,
1010 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
1011 78, 78, 78, 78, 81, 81, 81, 81, 81, 81,
1012 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
1013 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
1014 88, 88, 88, 88, 88, 88, 98, 938, 98, 98,
1015 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
1016 98, 98, 102, 102, 102, 102, 102, 102, 102, 102,
1017 102, 102, 102, 102, 102, 102, 102, 102, 107, 769,
1018 677, 937, 107, 936, 935, 934, 107, 107, 107, 829,
1019
1020 107, 111, 933, 111, 111, 111, 111, 111, 111, 111,
1021 111, 111, 111, 111, 111, 111, 111, 123, 123, 123,
1022 123, 179, 932, 179, 179, 179, 179, 179, 829, 179,
1023 179, 179, 179, 179, 179, 179, 179, 180, 829, 180,
1024 180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
1025 180, 180, 180, 187, 931, 187, 187, 187, 187, 187,
1026 187, 187, 187, 187, 187, 187, 187, 187, 187, 194,
1027 194, 886, 930, 929, 928, 927, 817, 194, 194, 194,
1028 926, 194, 196, 917, 914, 913, 912, 794, 911, 196,
1029 196, 910, 196, 199, 199, 199, 199, 199, 199, 199,
1030
1031 199, 199, 199, 199, 199, 199, 199, 199, 199, 204,
1032 204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
1033 204, 204, 204, 204, 204, 208, 208, 208, 208, 208,
1034 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
1035 208, 211, 211, 211, 211, 211, 211, 211, 211, 211,
1036 211, 211, 211, 211, 211, 211, 211, 214, 214, 214,
1037 214, 215, 215, 215, 215, 215, 215, 215, 215, 215,
1038 215, 215, 215, 215, 215, 215, 215, 225, 225, 225,
1039 225, 225, 225, 225, 225, 225, 225, 794, 225, 225,
1040 225, 225, 225, 230, 230, 230, 230, 236, 236, 236,
1041
1042 239, 794, 909, 239, 855, 907, 239, 239, 239, 317,
1043 317, 317, 317, 319, 319, 319, 319, 326, 326, 905,
1044 849, 901, 900, 326, 326, 326, 899, 326, 335, 335,
1045 898, 897, 896, 769, 335, 335, 335, 895, 335, 336,
1046 336, 336, 336, 894, 893, 336, 347, 347, 347, 416,
1047 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,
1048 416, 416, 416, 416, 416, 424, 424, 424, 424, 892,
1049 891, 424, 434, 434, 434, 434, 890, 889, 434, 439,
1050 439, 439, 444, 444, 444, 466, 888, 887, 884, 466,
1051 466, 466, 466, 350, 350, 350, 350, 350, 350, 350,
1052
1053 350, 350, 350, 350, 350, 350, 350, 350, 350, 516,
1054 516, 516, 516, 516, 516, 516, 516, 516, 516, 516,
1055 516, 516, 516, 516, 516, 572, 572, 572, 572, 572,
1056 572, 572, 572, 572, 572, 572, 572, 572, 572, 572,
1057 572, 610, 886, 610, 610, 610, 610, 610, 610, 610,
1058 610, 610, 610, 610, 610, 610, 610, 616, 616, 616,
1059 616, 616, 616, 616, 616, 616, 616, 616, 616, 616,
1060 616, 616, 616, 703, 703, 703, 703, 703, 703, 703,
1061 703, 703, 703, 703, 703, 703, 703, 703, 703, 712,
1062 712, 712, 712, 712, 712, 712, 712, 712, 712, 712,
1063
1064 712, 712, 712, 712, 712, 715, 715, 715, 715, 715,
1065 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
1066 715, 717, 717, 717, 717, 717, 717, 717, 717, 717,
1067 717, 717, 717, 717, 717, 717, 717, 788, 788, 788,
1068 788, 788, 788, 788, 788, 788, 788, 788, 788, 788,
1069 788, 788, 788, 848, 848, 848, 848, 848, 848, 848,
1070 848, 848, 848, 848, 848, 848, 848, 848, 848, 854,
1071 854, 854, 854, 854, 854, 854, 854, 854, 854, 854,
1072 854, 854, 854, 854, 854, 904, 904, 904, 904, 904,
1073 904, 904, 904, 904, 904, 904, 904, 904, 904, 904,
1074
1075 904, 906, 906, 906, 906, 906, 906, 906, 906, 906,
1076 906, 906, 906, 906, 906, 906, 906, 940, 940, 940,
1077 940, 940, 940, 940, 940, 940, 940, 940, 940, 940,
1078 940, 940, 940, 981, 981, 981, 981, 981, 981, 981,
1079 981, 981, 981, 981, 981, 981, 981, 981, 981, 983,
1080 983, 983, 983, 983, 983, 983, 983, 983, 983, 983,
1081 983, 983, 983, 983, 983, 885, 884, 883, 882, 881,
1082 746, 880, 879, 746, 746, 878, 865, 864, 863, 862,
1083 861, 860, 859, 858, 856, 857, 856, 855, 789, 850,
1084 849, 847, 846, 845, 844, 843, 842, 677, 841, 840,
1085
1086 677, 677, 839, 838, 837, 836, 835, 834, 833, 832,
1087 831, 830, 829, 828, 827, 569, 826, 825, 824, 823,
1088 822, 821, 820, 819, 817, 818, 817, 803, 802, 801,
1089 800, 799, 798, 797, 796, 795, 794, 793, 792, 532,
1090 716, 713, 789, 787, 716, 786, 784, 783, 782, 781,
1091 780, 779, 778, 777, 776, 775, 774, 773, 772, 771,
1092 769, 770, 769, 768, 767, 766, 765, 764, 763, 762,
1093 761, 760, 759, 758, 757, 755, 754, 753, 752, 751,
1094 750, 749, 748, 747, 746, 745, 744, 454, 730, 729,
1095 728, 727, 726, 725, 724, 723, 722, 721, 720, 719,
1096
1097 713, 709, 707, 706, 611, 702, 699, 698, 697, 696,
1098 693, 692, 691, 690, 689, 688, 687, 686, 685, 684,
1099 683, 682, 681, 680, 679, 678, 677, 676, 675, 363,
1100 574, 674, 673, 672, 669, 668, 667, 666, 665, 664,
1101 663, 662, 661, 660, 659, 658, 657, 656, 655, 654,
1102 653, 652, 651, 650, 636, 635, 634, 631, 630, 629,
1103 628, 627, 626, 625, 624, 615, 614, 613, 612, 611,
1104 609, 608, 607, 606, 605, 604, 603, 602, 601, 600,
1105 599, 598, 597, 596, 595, 594, 593, 592, 591, 590,
1106 589, 588, 587, 586, 585, 584, 583, 582, 581, 580,
1107
1108 579, 578, 577, 576, 465, 571, 570, 564, 563, 560,
1109 559, 558, 557, 554, 553, 552, 551, 550, 549, 548,
1110 547, 435, 534, 533, 527, 526, 523, 425, 522, 417,
1111 515, 514, 513, 512, 510, 509, 508, 507, 506, 505,
1112 504, 503, 502, 501, 500, 499, 498, 497, 496, 495,
1113 494, 493, 492, 491, 490, 489, 488, 487, 486, 485,
1114 484, 483, 482, 481, 480, 479, 478, 477, 474, 473,
1115 472, 471, 470, 469, 468, 467, 352, 465, 456, 455,
1116 449, 448, 445, 337, 441, 440, 435, 425, 423, 417,
1117 415, 414, 413, 412, 409, 408, 407, 406, 405, 404,
1118
1119 403, 402, 401, 400, 399, 398, 397, 396, 395, 394,
1120 393, 392, 388, 387, 386, 385, 384, 383, 382, 381,
1121 380, 379, 378, 377, 376, 375, 374, 371, 370, 369,
1122 368, 367, 366, 365, 364, 358, 357, 354, 346, 337,
1123 332, 330, 329, 216, 212, 207, 322, 320, 315, 314,
1124 297, 296, 295, 294, 293, 284, 281, 280, 279, 278,
1125 276, 275, 274, 273, 272, 271, 270, 269, 268, 265,
1126 264, 263, 260, 259, 256, 255, 254, 253, 252, 251,
1127 250, 234, 112, 233, 232, 103, 219, 216, 114, 212,
1128 207, 169, 168, 161, 149, 125, 120, 114, 113, 112,
1129
1130 103, 97, 985, 89, 82, 82, 19, 985, 985, 985,
1131 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
1132 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
1133 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
1134 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
1135 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
1136 985, 985, 985, 985
1137 } ;
1138
1139 static yyconst flex_int16_t yy_chk[2265] =
1140 { 0,
1141 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1142 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1143 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1144 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1145 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1146 1, 1, 1, 1, 1, 1, 1, 2, 3, 2,
1147 873, 16, 2, 16, 4, 4, 4, 5, 3, 4,
1148 5, 6, 5, 5, 6, 4, 6, 6, 7, 17,
1149 8, 873, 9, 7, 7, 8, 8, 9, 9, 45,
1150 5, 10, 17, 21, 6, 21, 10, 10, 45, 17,
1151
1152 45, 7, 84, 8, 84, 9, 47, 17, 33, 33,
1153 33, 34, 34, 47, 10, 13, 13, 13, 13, 13,
1154 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
1155 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
1156 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
1157 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
1158 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
1159 13, 13, 18, 24, 18, 24, 24, 18, 26, 27,
1160 32, 32, 42, 26, 36, 36, 18, 163, 32, 26,
1161 26, 38, 38, 24, 43, 42, 96, 50, 96, 18,
1162
1163 41, 41, 42, 49, 163, 27, 18, 50, 43, 41,
1164 44, 41, 44, 50, 18, 32, 44, 49, 46, 52,
1165 54, 162, 44, 46, 46, 26, 49, 46, 51, 90,
1166 46, 55, 51, 90, 55, 54, 52, 162, 54, 52,
1167 60, 66, 60, 66, 55, 60, 61, 61, 61, 61,
1168 64, 71, 65, 64, 65, 76, 67, 65, 67, 67,
1169 70, 70, 61, 61, 77, 77, 77, 80, 80, 80,
1170 71, 70, 70, 909, 76, 72, 67, 61, 176, 66,
1171 73, 61, 75, 75, 61, 73, 73, 247, 61, 72,
1172 72, 72, 78, 75, 75, 101, 71, 78, 78, 77,
1173
1174 76, 177, 80, 73, 247, 91, 91, 70, 93, 101,
1175 106, 106, 106, 136, 91, 78, 91, 176, 94, 136,
1176 94, 91, 93, 94, 72, 93, 115, 115, 93, 75,
1177 95, 95, 95, 95, 98, 177, 98, 98, 117, 117,
1178 117, 910, 118, 140, 101, 118, 95, 95, 124, 124,
1179 124, 133, 133, 140, 98, 169, 152, 118, 152, 169,
1180 159, 95, 170, 422, 170, 95, 125, 170, 125, 125,
1181 159, 175, 95, 161, 125, 125, 173, 173, 125, 161,
1182 161, 125, 178, 161, 125, 171, 184, 171, 184, 173,
1183 174, 174, 174, 180, 181, 422, 180, 181, 183, 623,
1184
1185 183, 171, 171, 183, 310, 174, 174, 174, 185, 623,
1186 185, 193, 193, 193, 175, 187, 171, 187, 187, 521,
1187 171, 199, 199, 171, 184, 178, 313, 171, 172, 172,
1188 172, 200, 200, 201, 201, 187, 202, 202, 202, 199,
1189 203, 203, 201, 201, 172, 172, 185, 310, 204, 200,
1190 208, 201, 313, 204, 204, 208, 208, 521, 203, 172,
1191 213, 518, 213, 172, 225, 225, 172, 217, 217, 217,
1192 172, 204, 221, 208, 221, 243, 222, 221, 222, 223,
1193 223, 223, 225, 226, 226, 228, 228, 243, 227, 227,
1194 235, 235, 222, 222, 312, 223, 223, 227, 227, 259,
1195
1196 259, 226, 238, 228, 518, 246, 227, 222, 311, 238,
1197 223, 222, 238, 246, 223, 229, 229, 229, 222, 246,
1198 232, 223, 232, 232, 238, 241, 241, 241, 232, 232,
1199 738, 418, 232, 312, 418, 232, 311, 738, 232, 239,
1200 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1201 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1202 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1203 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1204 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1205 239, 239, 239, 239, 239, 239, 240, 306, 277, 240,
1206
1207 277, 300, 419, 300, 301, 322, 301, 309, 309, 309,
1208 306, 240, 308, 308, 308, 620, 308, 300, 300, 301,
1209 301, 301, 309, 309, 309, 316, 316, 316, 343, 911,
1210 277, 519, 300, 322, 362, 421, 300, 277, 320, 300,
1211 320, 320, 419, 300, 620, 343, 320, 320, 324, 324,
1212 320, 362, 331, 320, 331, 339, 320, 324, 324, 325,
1213 325, 325, 327, 327, 327, 421, 324, 339, 331, 331,
1214 334, 334, 351, 351, 351, 420, 342, 519, 349, 334,
1215 334, 349, 467, 331, 342, 467, 912, 331, 334, 346,
1216 342, 346, 346, 349, 331, 622, 431, 346, 346, 427,
1217
1218 389, 346, 389, 411, 346, 411, 410, 346, 410, 430,
1219 410, 427, 420, 431, 453, 438, 438, 430, 411, 411,
1220 411, 622, 458, 430, 438, 438, 439, 439, 443, 443,
1221 462, 453, 389, 438, 458, 444, 444, 443, 443, 389,
1222 436, 743, 436, 436, 439, 913, 443, 462, 436, 436,
1223 743, 461, 436, 444, 516, 436, 531, 516, 436, 461,
1224 465, 465, 465, 517, 436, 461, 517, 520, 520, 520,
1225 522, 535, 522, 531, 536, 539, 537, 538, 542, 541,
1226 540, 543, 543, 539, 637, 547, 536, 541, 547, 539,
1227 545, 545, 568, 536, 535, 537, 538, 540, 614, 543,
1228
1229 614, 542, 539, 573, 573, 573, 637, 540, 545, 568,
1230 599, 607, 599, 607, 611, 616, 618, 611, 616, 618,
1231 599, 607, 619, 619, 619, 624, 638, 639, 624, 640,
1232 641, 642, 643, 644, 645, 646, 647, 640, 648, 711,
1233 662, 639, 638, 662, 641, 694, 643, 694, 648, 642,
1234 700, 645, 700, 703, 733, 694, 703, 644, 646, 645,
1235 700, 705, 732, 647, 705, 706, 715, 706, 734, 711,
1236 714, 714, 714, 739, 731, 735, 715, 731, 736, 733,
1237 737, 740, 741, 805, 742, 732, 731, 787, 807, 787,
1238 739, 736, 742, 737, 741, 804, 734, 809, 735, 790,
1239
1240 790, 790, 806, 808, 810, 804, 740, 809, 811, 812,
1241 806, 805, 813, 814, 810, 815, 807, 850, 816, 850,
1242 853, 866, 867, 814, 811, 790, 869, 870, 871, 872,
1243 874, 808, 813, 875, 877, 876, 812, 816, 815, 908,
1244 914, 867, 915, 850, 916, 918, 875, 877, 919, 866,
1245 923, 920, 872, 922, 869, 870, 871, 916, 874, 876,
1246 853, 921, 926, 924, 927, 928, 925, 929, 930, 931,
1247 932, 933, 934, 918, 935, 923, 919, 936, 908, 920,
1248 925, 922, 924, 937, 921, 938, 939, 940, 942, 943,
1249 944, 945, 946, 947, 948, 949, 950, 951, 952, 954,
1250
1251 953, 955, 956, 957, 958, 959, 960, 961, 963, 949,
1252 953, 964, 965, 966, 967, 968, 969, 943, 970, 971,
1253 972, 973, 974, 976, 950, 951, 952, 954, 975, 975,
1254 975, 977, 978, 979, 978, 980, 981, 983, 1010, 1010,
1255 906, 964, 967, 968, 969, 904, 970, 971, 1014, 1014,
1256 903, 976, 1016, 1016, 1021, 1021, 902, 900, 899, 977,
1257 986, 986, 986, 986, 986, 986, 986, 986, 986, 986,
1258 986, 986, 986, 986, 986, 986, 987, 987, 987, 987,
1259 987, 987, 987, 987, 987, 987, 987, 987, 987, 987,
1260 987, 987, 988, 988, 988, 988, 988, 988, 988, 988,
1261
1262 988, 988, 988, 988, 988, 988, 988, 988, 989, 989,
1263 989, 989, 989, 989, 989, 989, 989, 989, 989, 989,
1264 989, 989, 989, 989, 990, 990, 990, 990, 990, 990,
1265 990, 990, 990, 990, 990, 990, 990, 990, 990, 990,
1266 991, 991, 991, 991, 991, 991, 991, 991, 991, 991,
1267 991, 991, 991, 991, 991, 991, 992, 898, 992, 992,
1268 992, 992, 992, 992, 992, 992, 992, 992, 992, 992,
1269 992, 992, 993, 993, 993, 993, 993, 993, 993, 993,
1270 993, 993, 993, 993, 993, 993, 993, 993, 994, 897,
1271 896, 895, 994, 894, 893, 892, 994, 994, 994, 891,
1272
1273 994, 995, 890, 995, 995, 995, 995, 995, 995, 995,
1274 995, 995, 995, 995, 995, 995, 995, 996, 996, 996,
1275 996, 997, 889, 997, 997, 997, 997, 997, 888, 997,
1276 997, 997, 997, 997, 997, 997, 997, 998, 887, 998,
1277 998, 998, 998, 998, 998, 998, 998, 998, 998, 998,
1278 998, 998, 998, 999, 885, 999, 999, 999, 999, 999,
1279 999, 999, 999, 999, 999, 999, 999, 999, 999, 1000,
1280 1000, 884, 883, 882, 881, 880, 879, 1000, 1000, 1000,
1281 878, 1000, 1001, 868, 865, 864, 863, 862, 861, 1001,
1282 1001, 860, 1001, 1002, 1002, 1002, 1002, 1002, 1002, 1002,
1283
1284 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1003,
1285 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
1286 1003, 1003, 1003, 1003, 1003, 1004, 1004, 1004, 1004, 1004,
1287 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
1288 1004, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
1289 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1006, 1006, 1006,
1290 1006, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007,
1291 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1008, 1008, 1008,
1292 1008, 1008, 1008, 1008, 1008, 1008, 1008, 859, 1008, 1008,
1293 1008, 1008, 1008, 1009, 1009, 1009, 1009, 1011, 1011, 1011,
1294
1295 1012, 858, 857, 1012, 854, 852, 1012, 1012, 1012, 1013,
1296 1013, 1013, 1013, 1015, 1015, 1015, 1015, 1017, 1017, 851,
1297 848, 847, 846, 1017, 1017, 1017, 844, 1017, 1018, 1018,
1298 843, 842, 841, 840, 1018, 1018, 1018, 839, 1018, 1019,
1299 1019, 1019, 1019, 838, 837, 1019, 1020, 1020, 1020, 1022,
1300 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
1301 1022, 1022, 1022, 1022, 1022, 1023, 1023, 1023, 1023, 836,
1302 835, 1023, 1024, 1024, 1024, 1024, 834, 833, 1024, 1025,
1303 1025, 1025, 1026, 1026, 1026, 1027, 832, 831, 830, 1027,
1304 1027, 1027, 1027, 1028, 1028, 1028, 1028, 1028, 1028, 1028,
1305
1306 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1029,
1307 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
1308 1029, 1029, 1029, 1029, 1029, 1030, 1030, 1030, 1030, 1030,
1309 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
1310 1030, 1031, 829, 1031, 1031, 1031, 1031, 1031, 1031, 1031,
1311 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1032, 1032, 1032,
1312 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032,
1313 1032, 1032, 1032, 1033, 1033, 1033, 1033, 1033, 1033, 1033,
1314 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1034,
1315 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
1316
1317 1034, 1034, 1034, 1034, 1034, 1035, 1035, 1035, 1035, 1035,
1318 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035,
1319 1035, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
1320 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1037, 1037, 1037,
1321 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037,
1322 1037, 1037, 1037, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
1323 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1039,
1324 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
1325 1039, 1039, 1039, 1039, 1039, 1040, 1040, 1040, 1040, 1040,
1326 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040,
1327
1328 1040, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041,
1329 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1042, 1042, 1042,
1330 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
1331 1042, 1042, 1042, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
1332 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1044,
1333 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044,
1334 1044, 1044, 1044, 1044, 1044, 828, 827, 826, 825, 824,
1335 823, 822, 821, 820, 819, 818, 803, 802, 801, 800,
1336 799, 798, 797, 796, 795, 793, 792, 791, 788, 786,
1337 785, 782, 781, 780, 778, 777, 776, 775, 774, 773,
1338
1339 772, 771, 770, 768, 767, 766, 765, 764, 763, 762,
1340 761, 760, 759, 758, 757, 756, 755, 754, 753, 752,
1341 751, 750, 749, 748, 747, 745, 744, 730, 729, 728,
1342 727, 726, 725, 724, 723, 722, 721, 720, 719, 718,
1343 717, 712, 710, 709, 708, 707, 702, 696, 693, 692,
1344 690, 687, 686, 685, 684, 683, 682, 681, 680, 679,
1345 678, 676, 675, 674, 673, 672, 671, 670, 669, 668,
1346 667, 666, 665, 664, 663, 661, 660, 659, 658, 657,
1347 656, 655, 654, 653, 652, 651, 650, 649, 636, 635,
1348 634, 633, 632, 631, 630, 629, 628, 627, 626, 625,
1349
1350 621, 615, 613, 612, 610, 609, 605, 604, 603, 600,
1351 598, 597, 595, 593, 592, 590, 589, 587, 586, 585,
1352 584, 583, 582, 581, 580, 579, 578, 577, 576, 575,
1353 572, 571, 570, 569, 567, 566, 565, 564, 563, 562,
1354 561, 560, 559, 558, 557, 556, 555, 554, 553, 552,
1355 551, 550, 549, 548, 534, 533, 532, 530, 529, 528,
1356 527, 526, 525, 524, 523, 515, 514, 513, 512, 511,
1357 507, 506, 505, 504, 503, 502, 501, 500, 499, 498,
1358 497, 496, 495, 494, 493, 492, 491, 490, 489, 488,
1359 486, 480, 479, 478, 477, 476, 475, 474, 473, 472,
1360
1361 471, 470, 469, 468, 466, 464, 463, 460, 459, 457,
1362 456, 455, 454, 452, 451, 450, 449, 448, 447, 446,
1363 445, 434, 433, 432, 429, 428, 426, 424, 423, 416,
1364 415, 414, 413, 412, 409, 407, 406, 405, 404, 403,
1365 402, 401, 400, 399, 398, 397, 395, 393, 391, 390,
1366 388, 387, 385, 382, 377, 376, 375, 374, 373, 372,
1367 371, 369, 368, 367, 366, 365, 364, 363, 361, 360,
1368 359, 358, 357, 356, 355, 354, 350, 348, 345, 344,
1369 341, 340, 338, 336, 330, 329, 321, 318, 314, 307,
1370 305, 304, 303, 302, 299, 298, 297, 295, 294, 293,
1371
1372 292, 291, 288, 287, 286, 285, 284, 283, 282, 281,
1373 280, 278, 276, 275, 274, 273, 272, 271, 269, 267,
1374 266, 265, 264, 263, 262, 261, 260, 258, 257, 255,
1375 254, 252, 250, 249, 248, 245, 244, 242, 233, 231,
1376 224, 220, 219, 215, 211, 205, 198, 197, 190, 186,
1377 168, 167, 166, 165, 164, 160, 158, 155, 154, 153,
1378 151, 150, 149, 148, 146, 145, 144, 143, 141, 139,
1379 138, 137, 135, 134, 132, 131, 130, 129, 128, 127,
1380 126, 113, 111, 110, 109, 102, 92, 88, 86, 81,
1381 74, 57, 56, 53, 48, 40, 35, 31, 30, 29,
1382
1383 25, 23, 19, 15, 12, 11, 985, 985, 985, 985,
1384 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
1385 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
1386 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
1387 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
1388 985, 985, 985, 985, 985, 985, 985, 985, 985, 985,
1389 985, 985, 985, 985
1390 } ;
1391
1392 static yy_state_type yy_last_accepting_state;
1393 static char *yy_last_accepting_cpos;
1394
1395 extern int yy_flex_debug;
1396 int yy_flex_debug = 1;
1397
1398 static yyconst flex_int16_t yy_rule_linenum[152] =
1399 { 0,
1400 488, 489, 490, 491, 492, 494, 499, 500, 502, 518,
1401 523, 528, 532, 535, 539, 540, 542, 545, 546, 547,
1402 551, 552, 553, 554, 555, 556, 557, 558, 559, 560,
1403 561, 562, 563, 564, 565, 566, 567, 568, 569, 570,
1404 571, 572, 573, 574, 575, 576, 577, 578, 579, 580,
1405 581, 582, 583, 584, 585, 586, 587, 588, 589, 590,
1406 591, 592, 593, 594, 595, 596, 597, 598, 599, 600,
1407 601, 602, 603, 604, 605, 606, 607, 643, 644, 646,
1408 647, 648, 649, 651, 654, 657, 660, 663, 667, 672,
1409 675, 678, 681, 684, 686, 698, 710, 712, 716, 719,
1410
1411 723, 724, 725, 727, 728, 765, 766, 767, 769, 771,
1412 776, 781, 786, 791, 796, 800, 801, 806, 811, 816,
1413 819, 824, 827, 832, 837, 838, 878, 900, 909, 914,
1414 919, 922, 943, 963, 979, 980, 981, 982, 983, 984,
1415 985, 986, 987, 988, 989, 990, 991, 992, 993, 994,
1416 996
1417 } ;
1418
1419 /* The intent behind this definition is that it'll catch
1420 * any uses of REJECT which flex missed.
1421 */
1422 #define REJECT reject_used_but_not_detected
1423 #define yymore() yymore_used_but_not_detected
1424 #define YY_MORE_ADJ 0
1425 #define YY_RESTORE_YY_MORE_OFFSET
1426 char *yytext;
1427 #line 1 "lex.l"
1428
1429 #line 26 "lex.l"
1430 #include <sys/types.h>
1431 #include <sys/stat.h>
1432 #include "mailfromd.h"
1433 #include <mailutils/yyloc.h>
1434 #include "gram.h"
1435 #include "prog.h"
1436 #include "srvcfg.h"
1437
1438 static mu_linetrack_t trk;
1439
1440 static struct mu_locus_point start_locus; /* Location when the last state switch
1441 occurred */
1442 static mu_opool_t string_pool; /* Opool for constructing string values */
1443 static char *multiline_delimiter; /* End of here-document delimiter */
1444 static size_t multiline_delimiter_len; /* Length of multiline_delimiter_len */
1445 static int multiline_unescape; /* Unescape here-document contents */
1446 static int (*char_to_strip)(char); /* Strip matching characters of each
1447 here-document line */
1448 struct mu_locus_range const *
get_locus(void)1449 get_locus(void)
1450 {
1451 return &yylloc;
1452 }
1453
1454 static int
is_tab(char c)1455 is_tab(char c)
1456 {
1457 return c == '\t';
1458 }
1459
1460 static int
is_space(char c)1461 is_space(char c)
1462 {
1463 return c == '\t' || c == ' ';
1464 }
1465
1466 static unsigned char
c_unescape(unsigned char inc)1467 c_unescape(unsigned char inc)
1468 {
1469 int outc = mu_wordsplit_c_unquote_char(inc);
1470 return outc ? outc : inc;
1471 }
1472
1473 static void
switch_origin(struct mu_locus_point * pt)1474 switch_origin(struct mu_locus_point *pt)
1475 {
1476 mu_linetrack_origin(trk, pt);
1477 mu_locus_point_deinit(pt);
1478 }
1479
1480 #define line_begin string_begin
1481 #define line_add string_add
1482 #define line_add_char string_add_char
1483 static void line_finish(void);
1484 static void string(const char *str, size_t len);
1485 static int isemptystr(char *text);
1486 static int builtin_const(const char *s, size_t len);
1487
1488
1489 /* Input context flags */
1490 #define INCTX_MODULE 0x1 /* current input is a MFL module */
1491 #define INCTX_HADINPUT 0x2 /* some statements has already been processed */
1492 #define INCTX_IGNORE_BYE 0x4 /* ignore eventual `bye' statement, because
1493 this is an #included module */
1494
1495 /* Input context stack */
1496 struct inctx { /* input context structure */
1497 struct inctx *parent; /* parent context */
1498 struct mu_locus_range locus;/* locus where the context was pushed */
1499 mu_linetrack_t trk;
1500 struct input_file_ident id;/* file id structure to prevent recursion */
1501 FILE *file; /* saved yyin */
1502 pid_t pp_pid; /* preprocessor pid, if used */
1503 int inctx_flags; /* input context flags */
1504 YY_BUFFER_STATE buf; /* lex buffer state */
1505 };
1506
1507 struct inctx *inctx_tos; /* stack of input contexts */
1508
1509 /* Current input context: */
1510 static pid_t pp_pid; /* preprocessor pid */
1511 static struct input_file_ident input_file_id;
1512 static int inctx_flags; /* input context flags */
1513
1514 /* If not 0, emit_token keeps a token that yylex must return on the
1515 next call. See YY_USER_ACTION below. */
1516 static int emit_token;
1517
1518 /* Find on stack an input context that matches the given file id.
1519 Return pointer to the context. */
1520 struct inctx *
inctx_locate(struct input_file_ident * id)1521 inctx_locate(struct input_file_ident *id)
1522 {
1523 struct inctx *ctx;
1524
1525 for (ctx = inctx_tos; ctx; ctx = ctx->parent)
1526 if (ctx->id.device == id->device
1527 && ctx->id.i_node == id->i_node)
1528 break;
1529 return ctx;
1530 }
1531
1532 /* Push input context */
1533 static void
inctx_push()1534 inctx_push()
1535 {
1536 struct inctx *ctx = mu_alloc(sizeof(*ctx));
1537
1538 mu_locus_range_init(&ctx->locus);
1539 mu_locus_range_copy(&ctx->locus, &yylloc);
1540 ctx->trk = trk;
1541 ctx->id = input_file_id;
1542 ctx->file = yyin;
1543 ctx->pp_pid = pp_pid;
1544 ctx->inctx_flags = inctx_flags;
1545 ctx->buf = YY_CURRENT_BUFFER;
1546 ctx->parent = inctx_tos;
1547 inctx_tos = ctx;
1548 }
1549
1550 /* Pop input context from the top of the stack into the current
1551 input context. Return 1 if there are no more contexts left. */
1552 int
inctx_pop()1553 inctx_pop()
1554 {
1555 struct inctx *ctx = inctx_tos;
1556
1557 if (!ctx)
1558 return 1;
1559
1560 inctx_tos = ctx->parent;
1561
1562 mu_locus_range_deinit(&ctx->locus);
1563 trk = ctx->trk;
1564 yyin = ctx->file;
1565 input_file_id = ctx->id;
1566 inctx_flags = ctx->inctx_flags;
1567 yy_delete_buffer(YY_CURRENT_BUFFER);
1568 yy_switch_to_buffer(ctx->buf);
1569 pp_pid = ctx->pp_pid;
1570 free(ctx);
1571 return 0;
1572 }
1573
1574 /* Setup the scanner for input from the file NAME. Return 0 on success,
1575 and an appropriate EX_ code on error. See lex_new_source below. */
1576 static int
lex_new_source_0(const char * name)1577 lex_new_source_0(const char *name)
1578 {
1579 if (!yyin)
1580 mu_locus_range_init (&yylloc);
1581 if (ext_pp) {
1582 yyin = pp_extrn_start(name, &pp_pid);
1583 if (!yyin) {
1584 parse_error(_("unable to start external "
1585 "preprocessor `%s': %s"),
1586 ext_pp,
1587 mu_strerror(errno));
1588 return EX_OSFILE;
1589 }
1590 } else {
1591 yyin = fopen(name, "r");
1592 if (!yyin) {
1593 parse_error(_("cannot open %s: %s"), name,
1594 mu_strerror(errno));
1595 return EX_NOINPUT;
1596 }
1597 }
1598 yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE));
1599 MU_ASSERT(mu_linetrack_create(&trk, name, 2));
1600 mu_locus_point_set_file(&yylloc.beg, name);
1601 yylloc.beg.mu_line = 1;
1602 yylloc.beg.mu_col = 1;
1603 mu_locus_point_copy(&yylloc.end, &yylloc.beg);
1604 mu_stream_ioctl(mu_strerr, MU_IOCTL_LOGSTREAM,
1605 MU_IOCTL_LOGSTREAM_SET_LOCUS_RANGE, &yylloc);
1606 return EX_OK;
1607 }
1608
1609 /* Save the current input context on stack and set up the scanner for
1610 input from the file NAME. Return 0 on success,
1611 and an appropriate EX_ code on error. */
1612 int
lex_new_source(const char * name,int flag)1613 lex_new_source(const char *name, int flag)
1614 {
1615 int rc;
1616 struct stat st;
1617 struct input_file_ident id;
1618 struct inctx *pctx;
1619
1620 if (stat(name, &st)) {
1621 parse_error(_("cannot open `%s': %s"),
1622 name, mu_strerror(errno));
1623 return EX_NOINPUT;
1624 } else if (!S_ISREG(st.st_mode)) {
1625 parse_error(_("`%s' is not a regular file"), name);
1626 return EX_NOINPUT;
1627 }
1628
1629 id.device = st.st_dev;
1630 id.i_node = st.st_ino;
1631
1632 pctx = inctx_locate(&id);
1633 if (pctx) {
1634 parse_error(_("recursive inclusion"));
1635 if (pctx->parent)
1636 parse_error_locus(&pctx->parent->locus,
1637 _("`%s' already included here"),
1638 name);
1639 else
1640 parse_error(_("`%s' already included at top level"),
1641 name);
1642 return 1;
1643 }
1644
1645 if (flag == LEX_ONCE && source_lookup(&id))
1646 return 0;
1647
1648 if (yyin)
1649 inctx_push();
1650 rc = lex_new_source_0(name);
1651 if (rc)
1652 inctx_pop();
1653 else {
1654 input_file_id = id;
1655 if (flag == LEX_MODULE) {
1656 inctx_flags = INCTX_MODULE;
1657 emit_token = T_MODBEG;
1658 } else
1659 inctx_flags = 0;
1660 }
1661 return rc;
1662 }
1663
1664
1665 /* Return constant or variable token corresponding to the current
1666 value of yylval.literal->text. */
1667 static int
variable_or_const(void)1668 variable_or_const(void)
1669 {
1670 struct variable *vptr;
1671 const struct constant *cptr;
1672
1673 cptr = constant_lookup(yylval.literal->text);
1674 if (cptr) {
1675 const struct value *value_ptr = &cptr->value;
1676 switch (value_ptr->type) {
1677 case dtype_number:
1678 yylval.number = value_ptr->v.number;
1679 return T_NUMBER;
1680
1681 case dtype_string:
1682 yylval.literal = value_ptr->v.literal;
1683 return T_STRING;
1684
1685 default:
1686 abort();
1687 }
1688 }
1689
1690 vptr = variable_lookup(yylval.literal->text);
1691 if (!vptr) {
1692 parse_error(_("variable %s is not defined"),
1693 yylval.literal->text);
1694 return T_BOGUS;
1695 }
1696 variable_check_initialized(vptr, &yylloc);
1697 add_xref(vptr, &yylloc);
1698 yylval.var = vptr;
1699 return T_VARIABLE;
1700 }
1701
1702 /* Saved lexer state before entering COMMENT */
1703 static int save_state;
1704 /* Same as BEGIN, but also saves the current locus. It is then used
1705 to report unclosed constructs at the end of file. */
1706 #define BEGIN_X(s) \
1707 do { \
1708 BEGIN(s); \
1709 mu_locus_point_copy (&start_locus, &yylloc.beg); \
1710 } while(0)
1711
1712 /* If emit_token is not 0, push back current input and return the value
1713 of emit_token. Clear emit_token before returning. */
1714 #define YY_USER_ACTION \
1715 if (emit_token) { \
1716 int tok = emit_token; \
1717 emit_token = 0; \
1718 if (yy_flex_debug) \
1719 fprintf(stderr, "--emitting %d (module %s)\n", \
1720 tok,top_module->name); \
1721 mu_linetrack_retreat(trk, yyleng); \
1722 yyless(0); \
1723 return tok; \
1724 } else { \
1725 mu_linetrack_advance(trk, &yylloc, yytext, yyleng); \
1726 mu_stream_ioctl(mu_strerr, MU_IOCTL_LOGSTREAM, \
1727 MU_IOCTL_LOGSTREAM_SET_LOCUS_RANGE, &yylloc);\
1728 }
1729
1730 /* Read next input chunk. */
1731 #define YY_INPUT(buf,result,max_size) \
1732 if (yyin == NULL) \
1733 result = YY_NULL; \
1734 else if (((result = fread(buf, 1, max_size, yyin)) == 0) \
1735 && ferror(yyin)) \
1736 YY_FATAL_ERROR("input in flex scanner failed");
1737
1738 /* Redeclare main entry point. Actual yylex is defined in the code section
1739 below. */
1740 #define YY_DECL static int lexscan(void)
1741
1742
1743 /* String composer */
1744 static struct mu_locus_point string_beg;
1745 static NODE *string_head, *string_tail;
1746
1747 static void
compose_add_node(NODE * node)1748 compose_add_node(NODE *node)
1749 {
1750 if (string_tail)
1751 string_tail->next = node;
1752 else
1753 string_head = node;
1754 string_tail = node;
1755 }
1756
1757 static void
compose_start(int state)1758 compose_start(int state)
1759 {
1760 if (string_head) {
1761 parse_error("INTERNAL ERROR: previous composition has not "
1762 "finished when a new one started");
1763 abort();
1764 }
1765 mu_locus_point_copy(&string_beg, &yylloc.beg);
1766 BEGIN_X(state);
1767 }
1768
1769 static int
compose_finish()1770 compose_finish()
1771 {
1772 if (string_tail != string_head) {
1773 while (string_head->next) {
1774 NODE *cat = alloc_node(node_type_concat,
1775 &string_head->locus);
1776 NODE *next = string_head->next;
1777 cat->next = next->next;
1778 cat->v.concat.arg[0] = cast_to(dtype_string,
1779 string_head);
1780 cat->v.concat.arg[1] = cast_to(dtype_string, next);
1781 string_head->next = next->next = NULL;
1782 string_head = cat;
1783 }
1784 }
1785 yylval.node = string_head;
1786 mu_locus_point_copy(&yylloc.beg, &string_beg);
1787 mu_locus_point_deinit(&string_beg);
1788 string_head = string_tail = NULL;
1789 return T_COMPOSE;
1790 }
1791
1792 static void
compose_add_literal(struct literal * lit)1793 compose_add_literal(struct literal *lit)
1794 {
1795 NODE *node = alloc_node(node_type_string, &yylloc);
1796 node->v.literal = lit;
1797 compose_add_node(node);
1798 if (yy_flex_debug)
1799 fprintf(stderr, "--add literal: '%s'\n", lit->text);
1800 }
1801
1802 static void
compose_add_string(const char * text,size_t length)1803 compose_add_string(const char *text, size_t length)
1804 {
1805 compose_add_literal(string_alloc(text, length));
1806 }
1807
1808 static void
compose_add_number(long num)1809 compose_add_number(long num)
1810 {
1811 NODE *node = alloc_node(node_type_number, &yylloc);
1812 node->v.number = num;
1813 compose_add_node(node);
1814 }
1815
1816 void
compose_add_builtin_const(const char * s,size_t len)1817 compose_add_builtin_const(const char *s, size_t len)
1818 {
1819 const char *sval;
1820 long nval;
1821
1822 switch (builtin_const_value(s, len, &sval, &nval)) {
1823 case dtype_number:
1824 compose_add_number(nval);
1825 break;
1826
1827 case dtype_string:
1828 compose_add_string(sval, strlen(sval));
1829 break;
1830
1831 default:
1832 abort();
1833 }
1834 }
1835
1836 void
compose_add_variable_or_const(int what)1837 compose_add_variable_or_const(int what)
1838 {
1839 switch (what) {
1840 case T_NUMBER:
1841 compose_add_number(yylval.number);
1842 break;
1843
1844 case T_STRING:
1845 compose_add_literal(yylval.literal);
1846 break;
1847
1848 case T_VARIABLE:
1849 compose_add_node(create_node_variable(yylval.var, &yylloc));
1850 }
1851 }
1852
1853 /* Exclusive states:
1854
1855 SHELLMAGIC Initial shell-magic boilerplate (#!... !#)
1856 COMMENT Within a C-style comment;
1857 XIDENT Expected identifier;
1858 STR Processing a complex string;
1859 ML Within a multi-line aggregator. The line being built
1860 requires stripping leading whitespace (if requested).
1861 CML Continuation within a multi-line aggregator. The line
1862 being built does not require stripping leading whitespace.
1863 QML Quoted multi-line aggregator. No variable substitution and
1864 unquoting is needed.
1865
1866 Inclusive states:
1867
1868 ONBLOCK Lexical tie-in after an `on' keyword. In ONBLOCK state
1869 the strigns `as', `host', `from', and `poll' are
1870 recognized as keywords. The string `for' also acquires
1871 special meaning.
1872 */
1873
1874
1875 #line 1876 "lex.c"
1876
1877 #define INITIAL 0
1878 #define COMMENT 1
1879 #define STR 2
1880 #define ML 3
1881 #define CML 4
1882 #define QML 5
1883 #define XIDENT 6
1884 #define SHELLMAGIC 7
1885 #define ONBLOCK 8
1886
1887 #ifndef YY_NO_UNISTD_H
1888 /* Special case for "unistd.h", since it is non-ANSI. We include it way
1889 * down here because we want the user's section 1 to have been scanned first.
1890 * The user has a chance to override it with an option.
1891 */
1892 /* %if-c-only */
1893 #include <unistd.h>
1894 /* %endif */
1895 /* %if-c++-only */
1896 /* %endif */
1897 #endif
1898
1899 #ifndef YY_EXTRA_TYPE
1900 #define YY_EXTRA_TYPE void *
1901 #endif
1902
1903 /* %if-c-only Reentrant structure and macros (non-C++). */
1904 /* %if-reentrant */
1905 /* %if-c-only */
1906
1907 static int yy_init_globals (void );
1908
1909 /* %endif */
1910 /* %if-reentrant */
1911 /* %endif */
1912 /* %endif End reentrant structures and macros. */
1913
1914 /* Accessor methods to globals.
1915 These are made visible to non-reentrant scanners for convenience. */
1916
1917 int yylex_destroy (void );
1918
1919 int yyget_debug (void );
1920
1921 void yyset_debug (int debug_flag );
1922
1923 YY_EXTRA_TYPE yyget_extra (void );
1924
1925 void yyset_extra (YY_EXTRA_TYPE user_defined );
1926
1927 FILE *yyget_in (void );
1928
1929 void yyset_in (FILE * _in_str );
1930
1931 FILE *yyget_out (void );
1932
1933 void yyset_out (FILE * _out_str );
1934
1935 yy_size_t yyget_leng (void );
1936
1937 char *yyget_text (void );
1938
1939 int yyget_lineno (void );
1940
1941 void yyset_lineno (int _line_number );
1942
1943 /* %if-bison-bridge */
1944 /* %endif */
1945
1946 /* Macros after this point can all be overridden by user definitions in
1947 * section 1.
1948 */
1949
1950 #ifndef YY_SKIP_YYWRAP
1951 #ifdef __cplusplus
1952 extern "C" int yywrap (void );
1953 #else
1954 extern int yywrap (void );
1955 #endif
1956 #endif
1957
1958 /* %not-for-header */
1959
1960 #ifndef YY_NO_UNPUT
1961
1962 #endif
1963 /* %ok-for-header */
1964
1965 /* %endif */
1966
1967 #ifndef yytext_ptr
1968 static void yy_flex_strncpy (char *,yyconst char *,int );
1969 #endif
1970
1971 #ifdef YY_NEED_STRLEN
1972 static int yy_flex_strlen (yyconst char * );
1973 #endif
1974
1975 #ifndef YY_NO_INPUT
1976 /* %if-c-only Standard (non-C++) definition */
1977 /* %not-for-header */
1978
1979 #ifdef __cplusplus
1980 static int yyinput (void );
1981 #else
1982 static int input (void );
1983 #endif
1984 /* %ok-for-header */
1985
1986 /* %endif */
1987 #endif
1988
1989 /* %if-c-only */
1990
1991 /* %endif */
1992
1993 /* Amount of stuff to slurp up with each read. */
1994 #ifndef YY_READ_BUF_SIZE
1995 #ifdef __ia64__
1996 /* On IA-64, the buffer size is 16k, not 8k */
1997 #define YY_READ_BUF_SIZE 16384
1998 #else
1999 #define YY_READ_BUF_SIZE 8192
2000 #endif /* __ia64__ */
2001 #endif
2002
2003 /* Copy whatever the last rule matched to the standard output. */
2004 #ifndef ECHO
2005 /* %if-c-only Standard (non-C++) definition */
2006 /* This used to be an fputs(), but since the string might contain NUL's,
2007 * we now use fwrite().
2008 */
2009 #define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
2010 /* %endif */
2011 /* %if-c++-only C++ definition */
2012 /* %endif */
2013 #endif
2014
2015 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
2016 * is returned in "result".
2017 */
2018 #ifndef YY_INPUT
2019 #define YY_INPUT(buf,result,max_size) \
2020 /* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\
2021 if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
2022 { \
2023 int c = '*'; \
2024 size_t n; \
2025 for ( n = 0; n < max_size && \
2026 (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
2027 buf[n] = (char) c; \
2028 if ( c == '\n' ) \
2029 buf[n++] = (char) c; \
2030 if ( c == EOF && ferror( yyin ) ) \
2031 YY_FATAL_ERROR( "input in flex scanner failed" ); \
2032 result = n; \
2033 } \
2034 else \
2035 { \
2036 errno=0; \
2037 while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
2038 { \
2039 if( errno != EINTR) \
2040 { \
2041 YY_FATAL_ERROR( "input in flex scanner failed" ); \
2042 break; \
2043 } \
2044 errno=0; \
2045 clearerr(yyin); \
2046 } \
2047 }\
2048 \
2049 /* %if-c++-only C++ definition \ */\
2050 /* %endif */
2051
2052 #endif
2053
2054 /* No semi-colon after return; correct usage is to write "yyterminate();" -
2055 * we don't want an extra ';' after the "return" because that will cause
2056 * some compilers to complain about unreachable statements.
2057 */
2058 #ifndef yyterminate
2059 #define yyterminate() return YY_NULL
2060 #endif
2061
2062 /* Number of entries by which start-condition stack grows. */
2063 #ifndef YY_START_STACK_INCR
2064 #define YY_START_STACK_INCR 25
2065 #endif
2066
2067 /* Report a fatal error. */
2068 #ifndef YY_FATAL_ERROR
2069 /* %if-c-only */
2070 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
2071 /* %endif */
2072 /* %if-c++-only */
2073 /* %endif */
2074 #endif
2075
2076 /* %if-tables-serialization structures and prototypes */
2077 /* %not-for-header */
2078
2079 /* %ok-for-header */
2080
2081 /* %not-for-header */
2082
2083 /* %tables-yydmap generated elements */
2084 /* %endif */
2085 /* end tables serialization structures and prototypes */
2086
2087 /* %ok-for-header */
2088
2089 /* Default declaration of generated scanner - a define so the user can
2090 * easily add parameters.
2091 */
2092 #ifndef YY_DECL
2093 #define YY_DECL_IS_OURS 1
2094 /* %if-c-only Standard (non-C++) definition */
2095
2096 extern int yylex (void);
2097
2098 #define YY_DECL int yylex (void)
2099 /* %endif */
2100 /* %if-c++-only C++ definition */
2101 /* %endif */
2102 #endif /* !YY_DECL */
2103
2104 /* Code executed at the beginning of each rule, after yytext and yyleng
2105 * have been set up.
2106 */
2107 #ifndef YY_USER_ACTION
2108 #define YY_USER_ACTION
2109 #endif
2110
2111 /* Code executed at the end of each rule. */
2112 #ifndef YY_BREAK
2113 #define YY_BREAK /*LINTED*/break;
2114 #endif
2115
2116 /* %% [6.0] YY_RULE_SETUP definition goes here */
2117 #define YY_RULE_SETUP \
2118 if ( yyleng > 0 ) \
2119 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
2120 (yytext[yyleng - 1] == '\n'); \
2121 YY_USER_ACTION
2122
2123 /* %not-for-header */
2124
2125 /** The main scanner function which does all the work.
2126 */
2127 YY_DECL
2128 {
2129 yy_state_type yy_current_state;
2130 char *yy_cp, *yy_bp;
2131 int yy_act;
2132
2133 if ( !(yy_init) )
2134 {
2135 (yy_init) = 1;
2136
2137 #ifdef YY_USER_INIT
2138 YY_USER_INIT;
2139 #endif
2140
2141 if ( ! (yy_start) )
2142 (yy_start) = 1; /* first start state */
2143
2144 if ( ! yyin )
2145 /* %if-c-only */
2146 yyin = stdin;
2147 /* %endif */
2148 /* %if-c++-only */
2149 /* %endif */
2150
2151 if ( ! yyout )
2152 /* %if-c-only */
2153 yyout = stdout;
2154 /* %endif */
2155 /* %if-c++-only */
2156 /* %endif */
2157
2158 if ( ! YY_CURRENT_BUFFER ) {
2159 yyensure_buffer_stack ();
2160 YY_CURRENT_BUFFER_LVALUE =
2161 yy_create_buffer(yyin,YY_BUF_SIZE );
2162 }
2163
2164 yy_load_buffer_state( );
2165 }
2166
2167 {
2168 /* %% [7.0] user's declarations go here */
2169 #line 486 "lex.l"
2170
2171 /* C-style comments */
2172 #line 2173 "lex.c"
2173
2174 while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
2175 {
2176 /* %% [8.0] yymore()-related code goes here */
2177 yy_cp = (yy_c_buf_p);
2178
2179 /* Support of yytext. */
2180 *yy_cp = (yy_hold_char);
2181
2182 /* yy_bp points to the position in yy_ch_buf of the start of
2183 * the current run.
2184 */
2185 yy_bp = yy_cp;
2186
2187 /* %% [9.0] code to set up and find next match goes here */
2188 yy_current_state = (yy_start);
2189 yy_current_state += YY_AT_BOL();
2190 yy_match:
2191 do
2192 {
2193 YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
2194 if ( yy_accept[yy_current_state] )
2195 {
2196 (yy_last_accepting_state) = yy_current_state;
2197 (yy_last_accepting_cpos) = yy_cp;
2198 }
2199 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2200 {
2201 yy_current_state = (int) yy_def[yy_current_state];
2202 if ( yy_current_state >= 986 )
2203 yy_c = yy_meta[(unsigned int) yy_c];
2204 }
2205 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2206 ++yy_cp;
2207 }
2208 while ( yy_base[yy_current_state] != 2207 );
2209
2210 yy_find_action:
2211 /* %% [10.0] code to find the action number goes here */
2212 yy_act = yy_accept[yy_current_state];
2213 if ( yy_act == 0 )
2214 { /* have to back up */
2215 yy_cp = (yy_last_accepting_cpos);
2216 yy_current_state = (yy_last_accepting_state);
2217 yy_act = yy_accept[yy_current_state];
2218 }
2219
2220 YY_DO_BEFORE_ACTION;
2221
2222 /* %% [11.0] code for yylineno update goes here */
2223
2224 do_action: /* This label is used only to access EOF actions. */
2225
2226 /* %% [12.0] debug code goes here */
2227 if ( yy_flex_debug )
2228 {
2229 if ( yy_act == 0 )
2230 fprintf( stderr, "--scanner backing up\n" );
2231 else if ( yy_act < 152 )
2232 fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
2233 (long)yy_rule_linenum[yy_act], yytext );
2234 else if ( yy_act == 152 )
2235 fprintf( stderr, "--accepting default rule (\"%s\")\n",
2236 yytext );
2237 else if ( yy_act == 153 )
2238 fprintf( stderr, "--(end of buffer or a NUL)\n" );
2239 else
2240 fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
2241 }
2242
2243 switch ( yy_act )
2244 { /* beginning of action switch */
2245 /* %% [13.0] actions go here */
2246 case 0: /* must back up */
2247 /* undo the effects of YY_DO_BEFORE_ACTION */
2248 *yy_cp = (yy_hold_char);
2249 yy_cp = (yy_last_accepting_cpos);
2250 yy_current_state = (yy_last_accepting_state);
2251 goto yy_find_action;
2252
2253 case 1:
2254 YY_RULE_SETUP
2255 #line 488 "lex.l"
2256 { save_state = YYSTATE; BEGIN_X(COMMENT); }
2257 YY_BREAK
2258 case 2:
2259 YY_RULE_SETUP
2260 #line 489 "lex.l"
2261 /* eat anything that's not a '*' */
2262 YY_BREAK
2263 case 3:
2264 YY_RULE_SETUP
2265 #line 490 "lex.l"
2266 /* eat up '*'s not followed by '/'s */
2267 YY_BREAK
2268 case 4:
2269 /* rule 4 can match eol */
2270 YY_RULE_SETUP
2271 #line 491 "lex.l"
2272 ;
2273 YY_BREAK
2274 case 5:
2275 YY_RULE_SETUP
2276 #line 492 "lex.l"
2277 BEGIN(save_state);
2278 YY_BREAK
2279 /* Shell magic sequence */
2280 case 6:
2281 /* rule 6 can match eol */
2282 YY_RULE_SETUP
2283 #line 494 "lex.l"
2284 {
2285 if (yylloc.beg.mu_line == 1) {
2286 BEGIN_X(SHELLMAGIC);
2287 }
2288 }
2289 YY_BREAK
2290 case 7:
2291 /* rule 7 can match eol */
2292 YY_RULE_SETUP
2293 #line 499 "lex.l"
2294 { BEGIN(INITIAL); }
2295 YY_BREAK
2296 case 8:
2297 /* rule 8 can match eol */
2298 YY_RULE_SETUP
2299 #line 500 "lex.l"
2300 ;
2301 YY_BREAK
2302 /* Configuration directives */
2303 case 9:
2304 /* rule 9 can match eol */
2305 YY_RULE_SETUP
2306 #line 502 "lex.l"
2307 {
2308 struct mu_locus_point pt;
2309 if (parse_line_cpp(yytext, &pt) == 0)
2310 switch_origin(&pt);
2311 }
2312 YY_BREAK
2313 /* Normally, everything within a comment should be ignored, so
2314 the exclusive condition for the rule below is an error.
2315 Unfortunately, GNU m4 in versions up to 1.4.9 outputs line
2316 synchronisation directives in comments, which makes any decent
2317 compiler lost trace of which input line it is on. To avoid
2318 this, mfd handles #line directives even within a C-comment
2319 block.
2320
2321 This bug was fixed in m4 version 1.4.10. I prefer to keep
2322 this kludge until I am pretty sure there are no 1.4.9 around.
2323 */
2324 case 10:
2325 /* rule 10 can match eol */
2326 YY_RULE_SETUP
2327 #line 518 "lex.l"
2328 {
2329 struct mu_locus_point pt;
2330 if (parse_line(yytext, &pt) == 0)
2331 switch_origin(&pt);
2332 }
2333 YY_BREAK
2334 case 11:
2335 /* rule 11 can match eol */
2336 YY_RULE_SETUP
2337 #line 523 "lex.l"
2338 {
2339 mu_linetrack_retreat(trk, 1);
2340 yyless(yyleng-1);
2341 parse_pragma(yytext);
2342 }
2343 YY_BREAK
2344 case 12:
2345 /* rule 12 can match eol */
2346 YY_RULE_SETUP
2347 #line 528 "lex.l"
2348 {
2349 yytext[yyleng-1] = 0; /* Kill trailing newline */
2350 parse_error("%s", yytext);
2351 }
2352 YY_BREAK
2353 case 13:
2354 /* rule 13 can match eol */
2355 YY_RULE_SETUP
2356 #line 532 "lex.l"
2357 {
2358 parse_include(yytext, 1);
2359 }
2360 YY_BREAK
2361 case 14:
2362 /* rule 14 can match eol */
2363 YY_RULE_SETUP
2364 #line 535 "lex.l"
2365 {
2366 parse_include(yytext, 0);
2367 }
2368 YY_BREAK
2369 /* End-of-line comments */
2370 case 15:
2371 /* rule 15 can match eol */
2372 YY_RULE_SETUP
2373 #line 539 "lex.l"
2374 ;
2375 YY_BREAK
2376 case 16:
2377 YY_RULE_SETUP
2378 #line 540 "lex.l"
2379 /* end-of-file comment */;
2380 YY_BREAK
2381 /* expected identified (after 'require' or initial 'from') */
2382 case 17:
2383 YY_RULE_SETUP
2384 #line 542 "lex.l"
2385 { BEGIN(INITIAL);
2386 string(yytext, yyleng);
2387 return T_IDENTIFIER; }
2388 YY_BREAK
2389 case 18:
2390 YY_RULE_SETUP
2391 #line 545 "lex.l"
2392 ;
2393 YY_BREAK
2394 case 19:
2395 /* rule 19 can match eol */
2396 YY_RULE_SETUP
2397 #line 546 "lex.l"
2398 ;
2399 YY_BREAK
2400 case 20:
2401 YY_RULE_SETUP
2402 #line 547 "lex.l"
2403 { BEGIN(INITIAL);
2404 mu_linetrack_retreat(trk, yyleng);
2405 yyless(0); }
2406 YY_BREAK
2407 /* Reserved words */
2408 case 21:
2409 YY_RULE_SETUP
2410 #line 551 "lex.l"
2411 return T_ACCEPT;
2412 YY_BREAK
2413 case 22:
2414 YY_RULE_SETUP
2415 #line 552 "lex.l"
2416 return T_REJECT;
2417 YY_BREAK
2418 case 23:
2419 YY_RULE_SETUP
2420 #line 553 "lex.l"
2421 return T_TEMPFAIL;
2422 YY_BREAK
2423 case 24:
2424 YY_RULE_SETUP
2425 #line 554 "lex.l"
2426 return T_CONTINUE;
2427 YY_BREAK
2428 case 25:
2429 YY_RULE_SETUP
2430 #line 555 "lex.l"
2431 return T_DISCARD;
2432 YY_BREAK
2433 case 26:
2434 YY_RULE_SETUP
2435 #line 556 "lex.l"
2436 return T_ADD;
2437 YY_BREAK
2438 case 27:
2439 YY_RULE_SETUP
2440 #line 557 "lex.l"
2441 return T_REPLACE;
2442 YY_BREAK
2443 case 28:
2444 YY_RULE_SETUP
2445 #line 558 "lex.l"
2446 return T_DELETE;
2447 YY_BREAK
2448 case 29:
2449 YY_RULE_SETUP
2450 #line 559 "lex.l"
2451 return T_IF;
2452 YY_BREAK
2453 case 30:
2454 YY_RULE_SETUP
2455 #line 560 "lex.l"
2456 return T_FI;
2457 YY_BREAK
2458 case 31:
2459 YY_RULE_SETUP
2460 #line 561 "lex.l"
2461 return T_ELSE;
2462 YY_BREAK
2463 case 32:
2464 YY_RULE_SETUP
2465 #line 562 "lex.l"
2466 return T_ELIF;
2467 YY_BREAK
2468 case 33:
2469 YY_RULE_SETUP
2470 #line 563 "lex.l"
2471 return T_ON;
2472 YY_BREAK
2473 case 34:
2474 YY_RULE_SETUP
2475 #line 564 "lex.l"
2476 return T_DO;
2477 YY_BREAK
2478 case 35:
2479 YY_RULE_SETUP
2480 #line 565 "lex.l"
2481 return T_DONE;
2482 YY_BREAK
2483 case 36:
2484 YY_RULE_SETUP
2485 #line 566 "lex.l"
2486 return T_MATCHES;
2487 YY_BREAK
2488 case 37:
2489 YY_RULE_SETUP
2490 #line 567 "lex.l"
2491 return T_FNMATCHES;
2492 YY_BREAK
2493 case 38:
2494 YY_RULE_SETUP
2495 #line 568 "lex.l"
2496 return T_MXMATCHES;
2497 YY_BREAK
2498 case 39:
2499 YY_RULE_SETUP
2500 #line 569 "lex.l"
2501 return T_MXFNMATCHES;
2502 YY_BREAK
2503 case 40:
2504 YY_RULE_SETUP
2505 #line 570 "lex.l"
2506 return T_WHEN;
2507 YY_BREAK
2508 case 41:
2509 YY_RULE_SETUP
2510 #line 571 "lex.l"
2511 return T_OR;
2512 YY_BREAK
2513 case 42:
2514 YY_RULE_SETUP
2515 #line 572 "lex.l"
2516 return T_AND;
2517 YY_BREAK
2518 case 43:
2519 YY_RULE_SETUP
2520 #line 573 "lex.l"
2521 return T_NOT;
2522 YY_BREAK
2523 case 44:
2524 YY_RULE_SETUP
2525 #line 574 "lex.l"
2526 return T_NEXT;
2527 YY_BREAK
2528 case 45:
2529 YY_RULE_SETUP
2530 #line 575 "lex.l"
2531 return T_PROG;
2532 YY_BREAK
2533 case 46:
2534 YY_RULE_SETUP
2535 #line 576 "lex.l"
2536 return T_SET;
2537 YY_BREAK
2538 case 47:
2539 YY_RULE_SETUP
2540 #line 577 "lex.l"
2541 return T_CATCH;
2542 YY_BREAK
2543 case 48:
2544 YY_RULE_SETUP
2545 #line 578 "lex.l"
2546 return T_TRY;
2547 YY_BREAK
2548 case 49:
2549 YY_RULE_SETUP
2550 #line 579 "lex.l"
2551 return T_ECHO;
2552 YY_BREAK
2553 case 50:
2554 YY_RULE_SETUP
2555 #line 580 "lex.l"
2556 return T_RETURN;
2557 YY_BREAK
2558 case 51:
2559 YY_RULE_SETUP
2560 #line 581 "lex.l"
2561 return T_RETURNS;
2562 YY_BREAK
2563 case 52:
2564 YY_RULE_SETUP
2565 #line 582 "lex.l"
2566 return T_FUNC;
2567 YY_BREAK
2568 case 53:
2569 YY_RULE_SETUP
2570 #line 583 "lex.l"
2571 return T_SWITCH;
2572 YY_BREAK
2573 case 54:
2574 YY_RULE_SETUP
2575 #line 584 "lex.l"
2576 return T_CASE;
2577 YY_BREAK
2578 case 55:
2579 YY_RULE_SETUP
2580 #line 585 "lex.l"
2581 return T_DEFAULT;
2582 YY_BREAK
2583 case 56:
2584 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
2585 (yy_c_buf_p) = yy_cp = yy_bp + 6;
2586 YY_DO_BEFORE_ACTION; /* set up yytext again */
2587 YY_RULE_SETUP
2588 #line 586 "lex.l"
2589 { yylval.type = dtype_string; return T_TYPECAST; }
2590 YY_BREAK
2591 case 57:
2592 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
2593 (yy_c_buf_p) = yy_cp = yy_bp + 6;
2594 YY_DO_BEFORE_ACTION; /* set up yytext again */
2595 YY_RULE_SETUP
2596 #line 587 "lex.l"
2597 { yylval.type = dtype_number; return T_TYPECAST; }
2598 YY_BREAK
2599 case 58:
2600 YY_RULE_SETUP
2601 #line 588 "lex.l"
2602 { yylval.type = dtype_string; return T_TYPE; }
2603 YY_BREAK
2604 case 59:
2605 YY_RULE_SETUP
2606 #line 589 "lex.l"
2607 { yylval.type = dtype_number; return T_TYPE; }
2608 YY_BREAK
2609 case 60:
2610 YY_RULE_SETUP
2611 #line 590 "lex.l"
2612 return T_CONST;
2613 YY_BREAK
2614 case 61:
2615 YY_RULE_SETUP
2616 #line 591 "lex.l"
2617 return T_THROW;
2618 YY_BREAK
2619 case 62:
2620 YY_RULE_SETUP
2621 #line 592 "lex.l"
2622 return T_LOOP;
2623 YY_BREAK
2624 case 63:
2625 YY_RULE_SETUP
2626 #line 593 "lex.l"
2627 return T_WHILE;
2628 YY_BREAK
2629 case 64:
2630 YY_RULE_SETUP
2631 #line 594 "lex.l"
2632 return T_FOR;
2633 YY_BREAK
2634 case 65:
2635 YY_RULE_SETUP
2636 #line 595 "lex.l"
2637 return T_BREAK;
2638 YY_BREAK
2639 case 66:
2640 YY_RULE_SETUP
2641 #line 596 "lex.l"
2642 return T_PASS;
2643 YY_BREAK
2644 case 67:
2645 YY_RULE_SETUP
2646 #line 597 "lex.l"
2647 return T_BEGIN;
2648 YY_BREAK
2649 case 68:
2650 YY_RULE_SETUP
2651 #line 598 "lex.l"
2652 return T_END;
2653 YY_BREAK
2654 case 69:
2655 YY_RULE_SETUP
2656 #line 599 "lex.l"
2657 return T_ALIAS;
2658 YY_BREAK
2659 case 70:
2660 YY_RULE_SETUP
2661 #line 600 "lex.l"
2662 return T_VAPTR;
2663 YY_BREAK
2664 case 71:
2665 YY_RULE_SETUP
2666 #line 601 "lex.l"
2667 return T_PRECIOUS;
2668 YY_BREAK
2669 case 72:
2670 YY_RULE_SETUP
2671 #line 602 "lex.l"
2672 return T_REQUIRE;
2673 YY_BREAK
2674 case 73:
2675 YY_RULE_SETUP
2676 #line 603 "lex.l"
2677 return T_IMPORT;
2678 YY_BREAK
2679 case 74:
2680 YY_RULE_SETUP
2681 #line 604 "lex.l"
2682 return T_FROM;
2683 YY_BREAK
2684 case 75:
2685 YY_RULE_SETUP
2686 #line 605 "lex.l"
2687 return T_STATIC;
2688 YY_BREAK
2689 case 76:
2690 YY_RULE_SETUP
2691 #line 606 "lex.l"
2692 return T_PUBLIC;
2693 YY_BREAK
2694 case 77:
2695 YY_RULE_SETUP
2696 #line 607 "lex.l"
2697 { if (inctx_tos && inctx_flags == 0) {
2698 int c;
2699 int flen;
2700 const char *fname = strrchr(yylloc.beg.mu_file, '/');
2701
2702 if (fname)
2703 fname++;
2704 else
2705 fname = yylloc.beg.mu_file;
2706 flen = strlen(fname);
2707
2708 if (flen > 3 && strcmp(fname + flen - 3, ".mf") == 0)
2709 flen -= 3;
2710 parse_warning_locus(&inctx_tos->locus,
2711 _("including a module file is unreliable and may cause subtle errors"));
2712 /* TRANSLATORS: Do not translate `require %*.*s' */
2713 parse_warning_locus(&inctx_tos->locus,
2714 _("use `require %*.*s' instead"),
2715 flen, flen, fname);
2716 inctx_flags |= INCTX_IGNORE_BYE;
2717 mu_locus_point_copy(&start_locus, &yylloc.beg);
2718 while ((c = input()) != '.') {
2719 if (c == 0) {
2720 mu_diag_at_locus_point(MU_DIAG_ERROR, &start_locus,
2721 "%s",
2722 _("unexpected end of file"));
2723 return 0;
2724 } else {
2725 char ch = c;
2726 mu_linetrack_advance(trk, &yylloc, &ch, 1);
2727 }
2728 }
2729 } else if (inctx_flags & INCTX_HADINPUT)
2730 parse_error(_("misplaced `module'"));
2731 return T_MODULE;
2732 }
2733 YY_BREAK
2734 case 78:
2735 YY_RULE_SETUP
2736 #line 643 "lex.l"
2737 return T_BYE;
2738 YY_BREAK
2739 case 79:
2740 YY_RULE_SETUP
2741 #line 644 "lex.l"
2742 return T_DCLEX;
2743 YY_BREAK
2744 case 80:
2745 YY_RULE_SETUP
2746 #line 646 "lex.l"
2747 { return builtin_const(yytext, yyleng); }
2748 YY_BREAK
2749 case 81:
2750 YY_RULE_SETUP
2751 #line 647 "lex.l"
2752 return T_POLL;
2753 YY_BREAK
2754 case 82:
2755 YY_RULE_SETUP
2756 #line 648 "lex.l"
2757 return T_HOST;
2758 YY_BREAK
2759 case 83:
2760 YY_RULE_SETUP
2761 #line 649 "lex.l"
2762 return T_AS;
2763 YY_BREAK
2764 /* Variables */
2765 case 84:
2766 YY_RULE_SETUP
2767 #line 651 "lex.l"
2768 {
2769 return builtin_const(yytext + 1, yyleng - 1);
2770 }
2771 YY_BREAK
2772 case 85:
2773 YY_RULE_SETUP
2774 #line 654 "lex.l"
2775 {
2776 compose_add_builtin_const(yytext + 1, yyleng - 1);
2777 }
2778 YY_BREAK
2779 case 86:
2780 YY_RULE_SETUP
2781 #line 657 "lex.l"
2782 {
2783 return builtin_const(yytext + 2, yyleng - 3);
2784 }
2785 YY_BREAK
2786 case 87:
2787 YY_RULE_SETUP
2788 #line 660 "lex.l"
2789 {
2790 compose_add_builtin_const(yytext + 2, yyleng - 3);
2791 }
2792 YY_BREAK
2793 case 88:
2794 YY_RULE_SETUP
2795 #line 663 "lex.l"
2796 {
2797 string(yytext + 1, yyleng - 1);
2798 compose_add_variable_or_const(variable_or_const());
2799 }
2800 YY_BREAK
2801 case 89:
2802 YY_RULE_SETUP
2803 #line 667 "lex.l"
2804 {
2805 string(yytext + 2, yyleng - 3);
2806 compose_add_variable_or_const(variable_or_const());
2807 }
2808 YY_BREAK
2809 /* Positional arguments */
2810 case 90:
2811 YY_RULE_SETUP
2812 #line 672 "lex.l"
2813 {
2814 return T_ARGCOUNT;
2815 }
2816 YY_BREAK
2817 case 91:
2818 YY_RULE_SETUP
2819 #line 675 "lex.l"
2820 {
2821 compose_add_node(create_node_argcount(&yylloc));
2822 }
2823 YY_BREAK
2824 case 92:
2825 YY_RULE_SETUP
2826 #line 678 "lex.l"
2827 {
2828 yylval.number = strtol(yytext + 1, NULL, 0);
2829 return T_ARG; }
2830 YY_BREAK
2831 case 93:
2832 YY_RULE_SETUP
2833 #line 681 "lex.l"
2834 {
2835 compose_add_node(create_node_arg(strtol(yytext + 1, NULL, 0), &yylloc));
2836 }
2837 YY_BREAK
2838 case 94:
2839 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
2840 (yy_c_buf_p) = yy_cp = yy_bp + 1;
2841 YY_DO_BEFORE_ACTION; /* set up yytext again */
2842 YY_RULE_SETUP
2843 #line 684 "lex.l"
2844 { return T_ARGX; }
2845 YY_BREAK
2846 /* Sendmail variables */
2847 case 95:
2848 YY_RULE_SETUP
2849 #line 686 "lex.l"
2850 {
2851 if (yyleng == 2)
2852 string(yytext + 1, 1);
2853 else {
2854 line_begin();
2855 line_add("{", 1);
2856 line_add(yytext + 1, yyleng - 1);
2857 line_add("}", 1);
2858 line_finish();
2859 }
2860 return T_SYMBOL;
2861 }
2862 YY_BREAK
2863 case 96:
2864 YY_RULE_SETUP
2865 #line 698 "lex.l"
2866 {
2867 if (yyleng == 2)
2868 string(yytext + 1, 1);
2869 else {
2870 line_begin();
2871 line_add("{", 1);
2872 line_add(yytext + 1, yyleng - 1);
2873 line_add("}", 1);
2874 line_finish();
2875 }
2876 compose_add_node(create_node_symbol(yylval.literal, &yylloc));
2877 }
2878 YY_BREAK
2879 case 97:
2880 YY_RULE_SETUP
2881 #line 710 "lex.l"
2882 {
2883 string(yytext+1, yyleng - 1); return T_SYMBOL; }
2884 YY_BREAK
2885 case 98:
2886 YY_RULE_SETUP
2887 #line 712 "lex.l"
2888 {
2889 string(yytext+1, yyleng - 1);
2890 compose_add_node(create_node_symbol(yylval.literal, &yylloc)); }
2891 YY_BREAK
2892 /* Back-references */
2893 case 99:
2894 YY_RULE_SETUP
2895 #line 716 "lex.l"
2896 {
2897 yylval.number = strtoul(yytext+1, NULL, 0);
2898 return T_BACKREF; }
2899 YY_BREAK
2900 case 100:
2901 YY_RULE_SETUP
2902 #line 719 "lex.l"
2903 {
2904 compose_add_node(create_node_backref(strtoul(yytext+1, NULL, 10),
2905 &yylloc)); }
2906 YY_BREAK
2907 /* Numeric strings */
2908 case 101:
2909 YY_RULE_SETUP
2910 #line 723 "lex.l"
2911 { yylval.number = strtoul(yytext, NULL, 16); return T_NUMBER; };
2912 YY_BREAK
2913 case 102:
2914 YY_RULE_SETUP
2915 #line 724 "lex.l"
2916 { yylval.number = strtoul(yytext, NULL, 8); return T_NUMBER; };
2917 YY_BREAK
2918 case 103:
2919 YY_RULE_SETUP
2920 #line 725 "lex.l"
2921 { yylval.number = strtoul(yytext, NULL, 10); return T_NUMBER; };
2922 YY_BREAK
2923 /* Identifiers */
2924 case 104:
2925 YY_RULE_SETUP
2926 #line 727 "lex.l"
2927 return T_SED;
2928 YY_BREAK
2929 case 105:
2930 YY_RULE_SETUP
2931 #line 728 "lex.l"
2932 {
2933 const struct constant *cptr;
2934
2935 cptr = constant_lookup(yytext);
2936 if (cptr) {
2937 const struct value *value_ptr = &cptr->value;
2938 switch (value_ptr->type) {
2939 case dtype_number:
2940 yylval.number = value_ptr->v.number;
2941 return T_NUMBER;
2942
2943 case dtype_string:
2944 yylval.literal = value_ptr->v.literal;
2945 return T_STRING;
2946
2947 default:
2948 abort();
2949 }
2950 }
2951
2952 if (yylval.builtin = builtin_lookup(yytext))
2953 return T_BUILTIN;
2954 else if (yylval.function = function_lookup(yytext))
2955 return T_FUNCTION;
2956 else {
2957 struct variable *vptr;
2958 string(yytext, yyleng);
2959 vptr = variable_lookup(yylval.literal->text);
2960 if (!vptr) {
2961 return T_IDENTIFIER;
2962 }
2963 add_xref(vptr, &yylloc);
2964 yylval.var = vptr;
2965 return T_VARIABLE;
2966 }
2967 }
2968 YY_BREAK
2969 /* Strings */
2970 case 106:
2971 YY_RULE_SETUP
2972 #line 765 "lex.l"
2973 { string(yytext+1, yyleng-2); return T_STRING; }
2974 YY_BREAK
2975 case 107:
2976 YY_RULE_SETUP
2977 #line 766 "lex.l"
2978 { string(yytext+1, yyleng-2); return T_STRING; }
2979 YY_BREAK
2980 case 108:
2981 /* rule 108 can match eol */
2982 YY_RULE_SETUP
2983 #line 767 "lex.l"
2984 { compose_start(STR);
2985 compose_add_string(yytext + 1, yyleng - 3); }
2986 YY_BREAK
2987 case 109:
2988 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
2989 (yy_c_buf_p) = yy_cp -= 1;
2990 YY_DO_BEFORE_ACTION; /* set up yytext again */
2991 YY_RULE_SETUP
2992 #line 769 "lex.l"
2993 { compose_start(STR);
2994 compose_add_string(yytext+1, yyleng-1); }
2995 YY_BREAK
2996 case 110:
2997 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
2998 (yy_c_buf_p) = yy_cp = yy_bp + 5;
2999 YY_DO_BEFORE_ACTION; /* set up yytext again */
3000 YY_RULE_SETUP
3001 #line 771 "lex.l"
3002 {
3003 compose_start(STR);
3004 line_add_char(strtoul(yytext + 3, NULL, 16));
3005 compose_add_literal(string_finish());
3006 }
3007 YY_BREAK
3008 case 111:
3009 YY_RULE_SETUP
3010 #line 776 "lex.l"
3011 {
3012 compose_start(STR);
3013 line_add_char(strtoul(yytext + 3, NULL, 16));
3014 }
3015 YY_BREAK
3016 case 112:
3017 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
3018 (yy_c_buf_p) = yy_cp -= 1;
3019 YY_DO_BEFORE_ACTION; /* set up yytext again */
3020 YY_RULE_SETUP
3021 #line 781 "lex.l"
3022 {
3023 compose_start(STR);
3024 line_add_char(strtoul(yytext + 3, NULL, 8));
3025 compose_add_literal(string_finish());
3026 }
3027 YY_BREAK
3028 case 113:
3029 YY_RULE_SETUP
3030 #line 786 "lex.l"
3031 {
3032 compose_start(STR);
3033 line_add_char(strtoul(yytext + 3, NULL, 8));
3034 }
3035 YY_BREAK
3036 case 114:
3037 /* rule 114 can match eol */
3038 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
3039 YY_LINENO_REWIND_TO(yy_bp + 3);
3040 (yy_c_buf_p) = yy_cp = yy_bp + 3;
3041 YY_DO_BEFORE_ACTION; /* set up yytext again */
3042 YY_RULE_SETUP
3043 #line 791 "lex.l"
3044 {
3045 compose_start(STR);
3046 line_add_char(c_unescape(yytext[2]));
3047 compose_add_literal(string_finish());
3048 }
3049 YY_BREAK
3050 case 115:
3051 /* rule 115 can match eol */
3052 YY_RULE_SETUP
3053 #line 796 "lex.l"
3054 {
3055 compose_start(STR);
3056 line_add_char(c_unescape(yytext[2]));
3057 }
3058 YY_BREAK
3059 case 116:
3060 /* rule 116 can match eol */
3061 YY_RULE_SETUP
3062 #line 800 "lex.l"
3063 { line_add(yytext, yyleng - 2); }
3064 YY_BREAK
3065 case 117:
3066 YY_RULE_SETUP
3067 #line 801 "lex.l"
3068 { BEGIN(INITIAL);
3069 if (yyleng > 1)
3070 line_add(yytext, yyleng - 1);
3071 compose_add_literal(string_finish());
3072 return compose_finish(); }
3073 YY_BREAK
3074 case 118:
3075 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
3076 (yy_c_buf_p) = yy_cp -= 1;
3077 YY_DO_BEFORE_ACTION; /* set up yytext again */
3078 YY_RULE_SETUP
3079 #line 806 "lex.l"
3080 {
3081 line_add(yytext, yyleng);
3082 compose_add_literal(string_finish());
3083 line_begin();
3084 }
3085 YY_BREAK
3086 case 119:
3087 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
3088 (yy_c_buf_p) = yy_cp = yy_bp + 4;
3089 YY_DO_BEFORE_ACTION; /* set up yytext again */
3090 YY_RULE_SETUP
3091 #line 811 "lex.l"
3092 {
3093 line_add_char(strtoul(yytext + 2, NULL, 16));
3094 compose_add_literal(string_finish());
3095 line_begin();
3096 }
3097 YY_BREAK
3098 case 120:
3099 YY_RULE_SETUP
3100 #line 816 "lex.l"
3101 {
3102 line_add_char(strtoul(yytext + 2, NULL, 16));
3103 }
3104 YY_BREAK
3105 case 121:
3106 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
3107 (yy_c_buf_p) = yy_cp -= 1;
3108 YY_DO_BEFORE_ACTION; /* set up yytext again */
3109 YY_RULE_SETUP
3110 #line 819 "lex.l"
3111 {
3112 line_add_char(strtoul(yytext + 2, NULL, 8));
3113 compose_add_literal(string_finish());
3114 line_begin();
3115 }
3116 YY_BREAK
3117 case 122:
3118 YY_RULE_SETUP
3119 #line 824 "lex.l"
3120 {
3121 line_add_char(strtoul(yytext + 2, NULL, 8));
3122 }
3123 YY_BREAK
3124 case 123:
3125 /* rule 123 can match eol */
3126 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
3127 YY_LINENO_REWIND_TO(yy_bp + 2);
3128 (yy_c_buf_p) = yy_cp = yy_bp + 2;
3129 YY_DO_BEFORE_ACTION; /* set up yytext again */
3130 YY_RULE_SETUP
3131 #line 827 "lex.l"
3132 {
3133 line_add_char(c_unescape(yytext[1]));
3134 compose_add_literal(string_finish());
3135 line_begin();
3136 }
3137 YY_BREAK
3138 case 124:
3139 /* rule 124 can match eol */
3140 YY_RULE_SETUP
3141 #line 832 "lex.l"
3142 {
3143 line_add_char(c_unescape(yytext[1]));
3144 }
3145 YY_BREAK
3146 /* Multi-line strings */
3147 case 125:
3148 /* rule 125 can match eol */
3149 #line 838 "lex.l"
3150 case 126:
3151 /* rule 126 can match eol */
3152 YY_RULE_SETUP
3153 #line 838 "lex.l"
3154 {
3155 char *p;
3156
3157 char_to_strip = NULL;
3158 multiline_unescape = 1;
3159
3160 line_begin();
3161 p = yytext + 2;
3162 if (*p == '-') {
3163 ++p;
3164 if (*p == ' ') {
3165 ++p;
3166 char_to_strip = is_space;
3167 } else
3168 char_to_strip = is_tab;
3169 }
3170
3171 if (*p == '\\') {
3172 p++;
3173 multiline_unescape = 0;
3174 }
3175 if (*p == '\'') {
3176 char *q;
3177
3178 p++;
3179 multiline_unescape = 0;
3180 q = strchr(p, '\'');
3181 multiline_delimiter_len = q - p;
3182 } else
3183 multiline_delimiter_len = strcspn(p, " \t");
3184
3185 multiline_delimiter = mu_alloc(multiline_delimiter_len + 1);
3186 memcpy(multiline_delimiter, p, multiline_delimiter_len);
3187 multiline_delimiter[multiline_delimiter_len] = 0;
3188 if (multiline_unescape)
3189 compose_start(ML);
3190 else
3191 compose_start(QML);
3192 }
3193 YY_BREAK
3194 /* Quoted multilines */
3195 case 127:
3196 /* rule 127 can match eol */
3197 YY_RULE_SETUP
3198 #line 878 "lex.l"
3199 {
3200 char *p;
3201
3202 p = yytext;
3203 if (char_to_strip)
3204 for (; char_to_strip (*p); p++)
3205 ;
3206
3207 if (strlen(p) >= multiline_delimiter_len
3208 && memcmp(p, multiline_delimiter, multiline_delimiter_len) == 0
3209 && isemptystr(p + multiline_delimiter_len)) {
3210 free (multiline_delimiter);
3211 multiline_delimiter = NULL;
3212 multiline_delimiter_len = 0;
3213 BEGIN(INITIAL);
3214 compose_add_literal(string_finish());
3215 return compose_finish();
3216 }
3217 line_add(p, strlen(p));
3218 }
3219 YY_BREAK
3220 /* Unquoted multilines */
3221 case 128:
3222 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
3223 (yy_c_buf_p) = yy_cp -= 1;
3224 YY_DO_BEFORE_ACTION; /* set up yytext again */
3225 YY_RULE_SETUP
3226 #line 900 "lex.l"
3227 {
3228 char *p = yytext;
3229 if (char_to_strip)
3230 for (; char_to_strip (*p); p++)
3231 ;
3232 line_add(p, strlen(p));
3233 compose_add_literal(string_finish());
3234 BEGIN_X(CML);
3235 }
3236 YY_BREAK
3237 case 129:
3238 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
3239 (yy_c_buf_p) = yy_cp -= 1;
3240 YY_DO_BEFORE_ACTION; /* set up yytext again */
3241 YY_RULE_SETUP
3242 #line 909 "lex.l"
3243 {
3244 line_add(yytext, yyleng);
3245 compose_add_literal(string_finish());
3246 line_begin();
3247 }
3248 YY_BREAK
3249 case 130:
3250 YY_RULE_SETUP
3251 #line 914 "lex.l"
3252 {
3253 line_add(yytext, 1);
3254 compose_add_literal(string_finish());
3255 line_begin();
3256 }
3257 YY_BREAK
3258 case 131:
3259 YY_RULE_SETUP
3260 #line 919 "lex.l"
3261 {
3262 line_add(yytext, yyleng);
3263 }
3264 YY_BREAK
3265 case 132:
3266 /* rule 132 can match eol */
3267 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
3268 YY_LINENO_REWIND_TO(yy_cp - 1);
3269 (yy_c_buf_p) = yy_cp -= 1;
3270 YY_DO_BEFORE_ACTION; /* set up yytext again */
3271 YY_RULE_SETUP
3272 #line 922 "lex.l"
3273 {
3274 char *p;
3275
3276 p = yytext;
3277 if (char_to_strip)
3278 for (; char_to_strip (*p); p++)
3279 ;
3280
3281 if (strlen(p) >= multiline_delimiter_len
3282 && memcmp(p, multiline_delimiter, multiline_delimiter_len) == 0
3283 && isemptystr(p + multiline_delimiter_len)) {
3284 free (multiline_delimiter);
3285 multiline_delimiter = NULL;
3286 multiline_delimiter_len = 0;
3287 BEGIN(INITIAL);
3288 compose_add_literal(string_finish());
3289 return compose_finish();
3290 }
3291 line_add(p, strlen(p));
3292 compose_add_literal(string_finish());
3293 }
3294 YY_BREAK
3295 case 133:
3296 /* rule 133 can match eol */
3297 YY_RULE_SETUP
3298 #line 943 "lex.l"
3299 {
3300 char *p;
3301
3302 p = yytext;
3303 if (char_to_strip)
3304 for (; char_to_strip (*p); p++)
3305 ;
3306
3307 if (strlen(p) >= multiline_delimiter_len
3308 && memcmp(p, multiline_delimiter, multiline_delimiter_len) == 0
3309 && isemptystr(p + multiline_delimiter_len)) {
3310 free (multiline_delimiter);
3311 multiline_delimiter = NULL;
3312 multiline_delimiter_len = 0;
3313 BEGIN(INITIAL);
3314 compose_add_literal(string_finish());
3315 return compose_finish();
3316 }
3317 line_add(p, strlen(p));
3318 }
3319 YY_BREAK
3320 case 134:
3321 /* rule 134 can match eol */
3322 YY_RULE_SETUP
3323 #line 963 "lex.l"
3324 {
3325 if (yyleng >= multiline_delimiter_len
3326 && memcmp(yytext, multiline_delimiter,
3327 multiline_delimiter_len) == 0
3328 && isemptystr(yytext + multiline_delimiter_len)) {
3329 free (multiline_delimiter);
3330 multiline_delimiter = NULL;
3331 multiline_delimiter_len = 0;
3332 BEGIN(INITIAL);
3333 compose_add_literal(string_finish());
3334 return compose_finish();
3335 }
3336 line_add(yytext, yyleng);
3337 BEGIN_X(ML);
3338 }
3339 YY_BREAK
3340 /* Other tokens */
3341 case 135:
3342 YY_RULE_SETUP
3343 #line 979 "lex.l"
3344 ;
3345 YY_BREAK
3346 case 136:
3347 /* rule 136 can match eol */
3348 YY_RULE_SETUP
3349 #line 980 "lex.l"
3350 ;
3351 YY_BREAK
3352 case 137:
3353 YY_RULE_SETUP
3354 #line 981 "lex.l"
3355 return T_EQ;
3356 YY_BREAK
3357 case 138:
3358 YY_RULE_SETUP
3359 #line 982 "lex.l"
3360 return T_NE;
3361 YY_BREAK
3362 case 139:
3363 YY_RULE_SETUP
3364 #line 983 "lex.l"
3365 return T_LT;
3366 YY_BREAK
3367 case 140:
3368 YY_RULE_SETUP
3369 #line 984 "lex.l"
3370 return T_LE;
3371 YY_BREAK
3372 case 141:
3373 YY_RULE_SETUP
3374 #line 985 "lex.l"
3375 return T_GT;
3376 YY_BREAK
3377 case 142:
3378 YY_RULE_SETUP
3379 #line 986 "lex.l"
3380 return T_GE;
3381 YY_BREAK
3382 case 143:
3383 YY_RULE_SETUP
3384 #line 987 "lex.l"
3385 return T_LOGAND;
3386 YY_BREAK
3387 case 144:
3388 YY_RULE_SETUP
3389 #line 988 "lex.l"
3390 return T_LOGOR;
3391 YY_BREAK
3392 case 145:
3393 YY_RULE_SETUP
3394 #line 989 "lex.l"
3395 return T_LOGXOR;
3396 YY_BREAK
3397 case 146:
3398 YY_RULE_SETUP
3399 #line 990 "lex.l"
3400 return T_LOGNOT;
3401 YY_BREAK
3402 case 147:
3403 YY_RULE_SETUP
3404 #line 991 "lex.l"
3405 return T_SHL;
3406 YY_BREAK
3407 case 148:
3408 YY_RULE_SETUP
3409 #line 992 "lex.l"
3410 return T_SHR;
3411 YY_BREAK
3412 case 149:
3413 YY_RULE_SETUP
3414 #line 993 "lex.l"
3415 return T_DOTS;
3416 YY_BREAK
3417 case 150:
3418 YY_RULE_SETUP
3419 #line 994 "lex.l"
3420 /* If a here-document is not closed and its next line does not
3421 end with a \n, prevent it from being displayed by ECHO */;
3422 YY_BREAK
3423 case 151:
3424 YY_RULE_SETUP
3425 #line 996 "lex.l"
3426 return yytext[0];
3427 YY_BREAK
3428 case 152:
3429 YY_RULE_SETUP
3430 #line 997 "lex.l"
3431 ECHO;
3432 YY_BREAK
3433 #line 3434 "lex.c"
3434 case YY_STATE_EOF(INITIAL):
3435 case YY_STATE_EOF(COMMENT):
3436 case YY_STATE_EOF(STR):
3437 case YY_STATE_EOF(ML):
3438 case YY_STATE_EOF(CML):
3439 case YY_STATE_EOF(QML):
3440 case YY_STATE_EOF(XIDENT):
3441 case YY_STATE_EOF(SHELLMAGIC):
3442 case YY_STATE_EOF(ONBLOCK):
3443 yyterminate();
3444
3445 case YY_END_OF_BUFFER:
3446 {
3447 /* Amount of text matched not including the EOB char. */
3448 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
3449
3450 /* Undo the effects of YY_DO_BEFORE_ACTION. */
3451 *yy_cp = (yy_hold_char);
3452 YY_RESTORE_YY_MORE_OFFSET
3453
3454 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
3455 {
3456 /* We're scanning a new file or input source. It's
3457 * possible that this happened because the user
3458 * just pointed yyin at a new source and called
3459 * yylex(). If so, then we have to assure
3460 * consistency between YY_CURRENT_BUFFER and our
3461 * globals. Here is the right place to do so, because
3462 * this is the first action (other than possibly a
3463 * back-up) that will match for the new input source.
3464 */
3465 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
3466 /* %if-c-only */
3467 YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
3468 /* %endif */
3469 /* %if-c++-only */
3470 /* %endif */
3471 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
3472 }
3473
3474 /* Note that here we test for yy_c_buf_p "<=" to the position
3475 * of the first EOB in the buffer, since yy_c_buf_p will
3476 * already have been incremented past the NUL character
3477 * (since all states make transitions on EOB to the
3478 * end-of-buffer state). Contrast this with the test
3479 * in input().
3480 */
3481 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
3482 { /* This was really a NUL. */
3483 yy_state_type yy_next_state;
3484
3485 (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
3486
3487 yy_current_state = yy_get_previous_state( );
3488
3489 /* Okay, we're now positioned to make the NUL
3490 * transition. We couldn't have
3491 * yy_get_previous_state() go ahead and do it
3492 * for us because it doesn't know how to deal
3493 * with the possibility of jamming (and we don't
3494 * want to build jamming into it because then it
3495 * will run more slowly).
3496 */
3497
3498 yy_next_state = yy_try_NUL_trans( yy_current_state );
3499
3500 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
3501
3502 if ( yy_next_state )
3503 {
3504 /* Consume the NUL. */
3505 yy_cp = ++(yy_c_buf_p);
3506 yy_current_state = yy_next_state;
3507 goto yy_match;
3508 }
3509
3510 else
3511 {
3512 /* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */
3513 yy_cp = (yy_c_buf_p);
3514 goto yy_find_action;
3515 }
3516 }
3517
3518 else switch ( yy_get_next_buffer( ) )
3519 {
3520 case EOB_ACT_END_OF_FILE:
3521 {
3522 (yy_did_buffer_switch_on_eof) = 0;
3523
3524 if ( yywrap( ) )
3525 {
3526 /* Note: because we've taken care in
3527 * yy_get_next_buffer() to have set up
3528 * yytext, we can now set up
3529 * yy_c_buf_p so that if some total
3530 * hoser (like flex itself) wants to
3531 * call the scanner after we return the
3532 * YY_NULL, it'll still work - another
3533 * YY_NULL will get returned.
3534 */
3535 (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
3536
3537 yy_act = YY_STATE_EOF(YY_START);
3538 goto do_action;
3539 }
3540
3541 else
3542 {
3543 if ( ! (yy_did_buffer_switch_on_eof) )
3544 YY_NEW_FILE;
3545 }
3546 break;
3547 }
3548
3549 case EOB_ACT_CONTINUE_SCAN:
3550 (yy_c_buf_p) =
3551 (yytext_ptr) + yy_amount_of_matched_text;
3552
3553 yy_current_state = yy_get_previous_state( );
3554
3555 yy_cp = (yy_c_buf_p);
3556 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
3557 goto yy_match;
3558
3559 case EOB_ACT_LAST_MATCH:
3560 (yy_c_buf_p) =
3561 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
3562
3563 yy_current_state = yy_get_previous_state( );
3564
3565 yy_cp = (yy_c_buf_p);
3566 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
3567 goto yy_find_action;
3568 }
3569 break;
3570 }
3571
3572 default:
3573 YY_FATAL_ERROR(
3574 "fatal flex scanner internal error--no action found" );
3575 } /* end of action switch */
3576 } /* end of scanning one token */
3577 } /* end of user's declarations */
3578 } /* end of yylex */
3579 /* %ok-for-header */
3580
3581 /* %if-c++-only */
3582 /* %not-for-header */
3583
3584 /* %ok-for-header */
3585
3586 /* %endif */
3587
3588 /* yy_get_next_buffer - try to read in a new buffer
3589 *
3590 * Returns a code representing an action:
3591 * EOB_ACT_LAST_MATCH -
3592 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
3593 * EOB_ACT_END_OF_FILE - end of file
3594 */
3595 /* %if-c-only */
yy_get_next_buffer(void)3596 static int yy_get_next_buffer (void)
3597 /* %endif */
3598 /* %if-c++-only */
3599 /* %endif */
3600 {
3601 char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
3602 char *source = (yytext_ptr);
3603 yy_size_t number_to_move, i;
3604 int ret_val;
3605
3606 if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
3607 YY_FATAL_ERROR(
3608 "fatal flex scanner internal error--end of buffer missed" );
3609
3610 if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
3611 { /* Don't try to fill the buffer, so this is an EOF. */
3612 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
3613 {
3614 /* We matched a single character, the EOB, so
3615 * treat this as a final EOF.
3616 */
3617 return EOB_ACT_END_OF_FILE;
3618 }
3619
3620 else
3621 {
3622 /* We matched some text prior to the EOB, first
3623 * process it.
3624 */
3625 return EOB_ACT_LAST_MATCH;
3626 }
3627 }
3628
3629 /* Try to read more data. */
3630
3631 /* First move last chars to start of buffer. */
3632 number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
3633
3634 for ( i = 0; i < number_to_move; ++i )
3635 *(dest++) = *(source++);
3636
3637 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
3638 /* don't do the read, it's not guaranteed to return an EOF,
3639 * just force an EOF
3640 */
3641 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
3642
3643 else
3644 {
3645 yy_size_t num_to_read =
3646 YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
3647
3648 while ( num_to_read <= 0 )
3649 { /* Not enough room in the buffer - grow it. */
3650
3651 /* just a shorter name for the current buffer */
3652 YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
3653
3654 int yy_c_buf_p_offset =
3655 (int) ((yy_c_buf_p) - b->yy_ch_buf);
3656
3657 if ( b->yy_is_our_buffer )
3658 {
3659 yy_size_t new_size = b->yy_buf_size * 2;
3660
3661 if ( new_size <= 0 )
3662 b->yy_buf_size += b->yy_buf_size / 8;
3663 else
3664 b->yy_buf_size *= 2;
3665
3666 b->yy_ch_buf = (char *)
3667 /* Include room in for 2 EOB chars. */
3668 yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
3669 }
3670 else
3671 /* Can't grow it, we don't own it. */
3672 b->yy_ch_buf = 0;
3673
3674 if ( ! b->yy_ch_buf )
3675 YY_FATAL_ERROR(
3676 "fatal error - scanner input buffer overflow" );
3677
3678 (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
3679
3680 num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
3681 number_to_move - 1;
3682
3683 }
3684
3685 if ( num_to_read > YY_READ_BUF_SIZE )
3686 num_to_read = YY_READ_BUF_SIZE;
3687
3688 /* Read in more data. */
3689 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
3690 (yy_n_chars), num_to_read );
3691
3692 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
3693 }
3694
3695 if ( (yy_n_chars) == 0 )
3696 {
3697 if ( number_to_move == YY_MORE_ADJ )
3698 {
3699 ret_val = EOB_ACT_END_OF_FILE;
3700 yyrestart(yyin );
3701 }
3702
3703 else
3704 {
3705 ret_val = EOB_ACT_LAST_MATCH;
3706 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
3707 YY_BUFFER_EOF_PENDING;
3708 }
3709 }
3710
3711 else
3712 ret_val = EOB_ACT_CONTINUE_SCAN;
3713
3714 if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
3715 /* Extend the array by 50%, plus the number we really need. */
3716 yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
3717 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
3718 if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
3719 YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
3720 }
3721
3722 (yy_n_chars) += number_to_move;
3723 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
3724 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
3725
3726 (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
3727
3728 return ret_val;
3729 }
3730
3731 /* yy_get_previous_state - get the state just before the EOB char was reached */
3732
3733 /* %if-c-only */
3734 /* %not-for-header */
3735
yy_get_previous_state(void)3736 static yy_state_type yy_get_previous_state (void)
3737 /* %endif */
3738 /* %if-c++-only */
3739 /* %endif */
3740 {
3741 yy_state_type yy_current_state;
3742 char *yy_cp;
3743
3744 /* %% [15.0] code to get the start state into yy_current_state goes here */
3745 yy_current_state = (yy_start);
3746 yy_current_state += YY_AT_BOL();
3747
3748 for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
3749 {
3750 /* %% [16.0] code to find the next state goes here */
3751 YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
3752 if ( yy_accept[yy_current_state] )
3753 {
3754 (yy_last_accepting_state) = yy_current_state;
3755 (yy_last_accepting_cpos) = yy_cp;
3756 }
3757 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3758 {
3759 yy_current_state = (int) yy_def[yy_current_state];
3760 if ( yy_current_state >= 986 )
3761 yy_c = yy_meta[(unsigned int) yy_c];
3762 }
3763 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3764 }
3765
3766 return yy_current_state;
3767 }
3768
3769 /* yy_try_NUL_trans - try to make a transition on the NUL character
3770 *
3771 * synopsis
3772 * next_state = yy_try_NUL_trans( current_state );
3773 */
3774 /* %if-c-only */
yy_try_NUL_trans(yy_state_type yy_current_state)3775 static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
3776 /* %endif */
3777 /* %if-c++-only */
3778 /* %endif */
3779 {
3780 int yy_is_jam;
3781 /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
3782 char *yy_cp = (yy_c_buf_p);
3783
3784 YY_CHAR yy_c = 1;
3785 if ( yy_accept[yy_current_state] )
3786 {
3787 (yy_last_accepting_state) = yy_current_state;
3788 (yy_last_accepting_cpos) = yy_cp;
3789 }
3790 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3791 {
3792 yy_current_state = (int) yy_def[yy_current_state];
3793 if ( yy_current_state >= 986 )
3794 yy_c = yy_meta[(unsigned int) yy_c];
3795 }
3796 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3797 yy_is_jam = (yy_current_state == 985);
3798
3799 return yy_is_jam ? 0 : yy_current_state;
3800 }
3801
3802 #ifndef YY_NO_UNPUT
3803 /* %if-c-only */
3804
3805 /* %endif */
3806 #endif
3807
3808 /* %if-c-only */
3809 #ifndef YY_NO_INPUT
3810 #ifdef __cplusplus
yyinput(void)3811 static int yyinput (void)
3812 #else
3813 static int input (void)
3814 #endif
3815
3816 /* %endif */
3817 /* %if-c++-only */
3818 /* %endif */
3819 {
3820 int c;
3821
3822 *(yy_c_buf_p) = (yy_hold_char);
3823
3824 if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
3825 {
3826 /* yy_c_buf_p now points to the character we want to return.
3827 * If this occurs *before* the EOB characters, then it's a
3828 * valid NUL; if not, then we've hit the end of the buffer.
3829 */
3830 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
3831 /* This was really a NUL. */
3832 *(yy_c_buf_p) = '\0';
3833
3834 else
3835 { /* need more input */
3836 yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
3837 ++(yy_c_buf_p);
3838
3839 switch ( yy_get_next_buffer( ) )
3840 {
3841 case EOB_ACT_LAST_MATCH:
3842 /* This happens because yy_g_n_b()
3843 * sees that we've accumulated a
3844 * token and flags that we need to
3845 * try matching the token before
3846 * proceeding. But for input(),
3847 * there's no matching to consider.
3848 * So convert the EOB_ACT_LAST_MATCH
3849 * to EOB_ACT_END_OF_FILE.
3850 */
3851
3852 /* Reset buffer status. */
3853 yyrestart(yyin );
3854
3855 /*FALLTHROUGH*/
3856
3857 case EOB_ACT_END_OF_FILE:
3858 {
3859 if ( yywrap( ) )
3860 return EOF;
3861
3862 if ( ! (yy_did_buffer_switch_on_eof) )
3863 YY_NEW_FILE;
3864 #ifdef __cplusplus
3865 return yyinput();
3866 #else
3867 return input();
3868 #endif
3869 }
3870
3871 case EOB_ACT_CONTINUE_SCAN:
3872 (yy_c_buf_p) = (yytext_ptr) + offset;
3873 break;
3874 }
3875 }
3876 }
3877
3878 c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
3879 *(yy_c_buf_p) = '\0'; /* preserve yytext */
3880 (yy_hold_char) = *++(yy_c_buf_p);
3881
3882 /* %% [19.0] update BOL and yylineno */
3883 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
3884
3885 return c;
3886 }
3887 /* %if-c-only */
3888 #endif /* ifndef YY_NO_INPUT */
3889 /* %endif */
3890
3891 /** Immediately switch to a different input stream.
3892 * @param input_file A readable stream.
3893 *
3894 * @note This function does not reset the start condition to @c INITIAL .
3895 */
3896 /* %if-c-only */
yyrestart(FILE * input_file)3897 void yyrestart (FILE * input_file )
3898 /* %endif */
3899 /* %if-c++-only */
3900 /* %endif */
3901 {
3902
3903 if ( ! YY_CURRENT_BUFFER ){
3904 yyensure_buffer_stack ();
3905 YY_CURRENT_BUFFER_LVALUE =
3906 yy_create_buffer(yyin,YY_BUF_SIZE );
3907 }
3908
3909 yy_init_buffer(YY_CURRENT_BUFFER,input_file );
3910 yy_load_buffer_state( );
3911 }
3912
3913 /* %if-c++-only */
3914 /* %endif */
3915
3916 /** Switch to a different input buffer.
3917 * @param new_buffer The new input buffer.
3918 *
3919 */
3920 /* %if-c-only */
yy_switch_to_buffer(YY_BUFFER_STATE new_buffer)3921 void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
3922 /* %endif */
3923 /* %if-c++-only */
3924 /* %endif */
3925 {
3926
3927 /* TODO. We should be able to replace this entire function body
3928 * with
3929 * yypop_buffer_state();
3930 * yypush_buffer_state(new_buffer);
3931 */
3932 yyensure_buffer_stack ();
3933 if ( YY_CURRENT_BUFFER == new_buffer )
3934 return;
3935
3936 if ( YY_CURRENT_BUFFER )
3937 {
3938 /* Flush out information for old buffer. */
3939 *(yy_c_buf_p) = (yy_hold_char);
3940 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
3941 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
3942 }
3943
3944 YY_CURRENT_BUFFER_LVALUE = new_buffer;
3945 yy_load_buffer_state( );
3946
3947 /* We don't actually know whether we did this switch during
3948 * EOF (yywrap()) processing, but the only time this flag
3949 * is looked at is after yywrap() is called, so it's safe
3950 * to go ahead and always set it.
3951 */
3952 (yy_did_buffer_switch_on_eof) = 1;
3953 }
3954
3955 /* %if-c-only */
yy_load_buffer_state(void)3956 static void yy_load_buffer_state (void)
3957 /* %endif */
3958 /* %if-c++-only */
3959 /* %endif */
3960 {
3961 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
3962 (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
3963 /* %if-c-only */
3964 yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
3965 /* %endif */
3966 /* %if-c++-only */
3967 /* %endif */
3968 (yy_hold_char) = *(yy_c_buf_p);
3969 }
3970
3971 /** Allocate and initialize an input buffer state.
3972 * @param file A readable stream.
3973 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
3974 *
3975 * @return the allocated buffer state.
3976 */
3977 /* %if-c-only */
yy_create_buffer(FILE * file,int size)3978 YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
3979 /* %endif */
3980 /* %if-c++-only */
3981 /* %endif */
3982 {
3983 YY_BUFFER_STATE b;
3984
3985 b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
3986 if ( ! b )
3987 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3988
3989 b->yy_buf_size = (yy_size_t)size;
3990
3991 /* yy_ch_buf has to be 2 characters longer than the size given because
3992 * we need to put in 2 end-of-buffer characters.
3993 */
3994 b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 );
3995 if ( ! b->yy_ch_buf )
3996 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3997
3998 b->yy_is_our_buffer = 1;
3999
4000 yy_init_buffer(b,file );
4001
4002 return b;
4003 }
4004
4005 /* %if-c++-only */
4006 /* %endif */
4007
4008 /** Destroy the buffer.
4009 * @param b a buffer created with yy_create_buffer()
4010 *
4011 */
4012 /* %if-c-only */
yy_delete_buffer(YY_BUFFER_STATE b)4013 void yy_delete_buffer (YY_BUFFER_STATE b )
4014 /* %endif */
4015 /* %if-c++-only */
4016 /* %endif */
4017 {
4018
4019 if ( ! b )
4020 return;
4021
4022 if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
4023 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
4024
4025 if ( b->yy_is_our_buffer )
4026 yyfree((void *) b->yy_ch_buf );
4027
4028 yyfree((void *) b );
4029 }
4030
4031 /* Initializes or reinitializes a buffer.
4032 * This function is sometimes called more than once on the same buffer,
4033 * such as during a yyrestart() or at EOF.
4034 */
4035 /* %if-c-only */
yy_init_buffer(YY_BUFFER_STATE b,FILE * file)4036 static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
4037 /* %endif */
4038 /* %if-c++-only */
4039 /* %endif */
4040
4041 {
4042 int oerrno = errno;
4043
4044 yy_flush_buffer(b );
4045
4046 /* %if-c-only */
4047 b->yy_input_file = file;
4048 /* %endif */
4049 /* %if-c++-only */
4050 /* %endif */
4051 b->yy_fill_buffer = 1;
4052
4053 /* If b is the current buffer, then yy_init_buffer was _probably_
4054 * called from yyrestart() or through yy_get_next_buffer.
4055 * In that case, we don't want to reset the lineno or column.
4056 */
4057 if (b != YY_CURRENT_BUFFER){
4058 b->yy_bs_lineno = 1;
4059 b->yy_bs_column = 0;
4060 }
4061
4062 /* %if-c-only */
4063
4064 b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
4065
4066 /* %endif */
4067 /* %if-c++-only */
4068 /* %endif */
4069 errno = oerrno;
4070 }
4071
4072 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
4073 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
4074 *
4075 */
4076 /* %if-c-only */
yy_flush_buffer(YY_BUFFER_STATE b)4077 void yy_flush_buffer (YY_BUFFER_STATE b )
4078 /* %endif */
4079 /* %if-c++-only */
4080 /* %endif */
4081 {
4082 if ( ! b )
4083 return;
4084
4085 b->yy_n_chars = 0;
4086
4087 /* We always need two end-of-buffer characters. The first causes
4088 * a transition to the end-of-buffer state. The second causes
4089 * a jam in that state.
4090 */
4091 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
4092 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
4093
4094 b->yy_buf_pos = &b->yy_ch_buf[0];
4095
4096 b->yy_at_bol = 1;
4097 b->yy_buffer_status = YY_BUFFER_NEW;
4098
4099 if ( b == YY_CURRENT_BUFFER )
4100 yy_load_buffer_state( );
4101 }
4102
4103 /* %if-c-or-c++ */
4104 /** Pushes the new state onto the stack. The new state becomes
4105 * the current state. This function will allocate the stack
4106 * if necessary.
4107 * @param new_buffer The new state.
4108 *
4109 */
4110 /* %if-c-only */
yypush_buffer_state(YY_BUFFER_STATE new_buffer)4111 void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
4112 /* %endif */
4113 /* %if-c++-only */
4114 /* %endif */
4115 {
4116 if (new_buffer == NULL)
4117 return;
4118
4119 yyensure_buffer_stack();
4120
4121 /* This block is copied from yy_switch_to_buffer. */
4122 if ( YY_CURRENT_BUFFER )
4123 {
4124 /* Flush out information for old buffer. */
4125 *(yy_c_buf_p) = (yy_hold_char);
4126 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
4127 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
4128 }
4129
4130 /* Only push if top exists. Otherwise, replace top. */
4131 if (YY_CURRENT_BUFFER)
4132 (yy_buffer_stack_top)++;
4133 YY_CURRENT_BUFFER_LVALUE = new_buffer;
4134
4135 /* copied from yy_switch_to_buffer. */
4136 yy_load_buffer_state( );
4137 (yy_did_buffer_switch_on_eof) = 1;
4138 }
4139 /* %endif */
4140
4141 /* %if-c-or-c++ */
4142 /** Removes and deletes the top of the stack, if present.
4143 * The next element becomes the new top.
4144 *
4145 */
4146 /* %if-c-only */
yypop_buffer_state(void)4147 void yypop_buffer_state (void)
4148 /* %endif */
4149 /* %if-c++-only */
4150 /* %endif */
4151 {
4152 if (!YY_CURRENT_BUFFER)
4153 return;
4154
4155 yy_delete_buffer(YY_CURRENT_BUFFER );
4156 YY_CURRENT_BUFFER_LVALUE = NULL;
4157 if ((yy_buffer_stack_top) > 0)
4158 --(yy_buffer_stack_top);
4159
4160 if (YY_CURRENT_BUFFER) {
4161 yy_load_buffer_state( );
4162 (yy_did_buffer_switch_on_eof) = 1;
4163 }
4164 }
4165 /* %endif */
4166
4167 /* %if-c-or-c++ */
4168 /* Allocates the stack if it does not exist.
4169 * Guarantees space for at least one push.
4170 */
4171 /* %if-c-only */
yyensure_buffer_stack(void)4172 static void yyensure_buffer_stack (void)
4173 /* %endif */
4174 /* %if-c++-only */
4175 /* %endif */
4176 {
4177 yy_size_t num_to_alloc;
4178
4179 if (!(yy_buffer_stack)) {
4180
4181 /* First allocation is just for 2 elements, since we don't know if this
4182 * scanner will even need a stack. We use 2 instead of 1 to avoid an
4183 * immediate realloc on the next call.
4184 */
4185 num_to_alloc = 1; // After all that talk, this was set to 1 anyways...
4186 (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
4187 (num_to_alloc * sizeof(struct yy_buffer_state*)
4188 );
4189 if ( ! (yy_buffer_stack) )
4190 YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
4191
4192 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
4193
4194 (yy_buffer_stack_max) = num_to_alloc;
4195 (yy_buffer_stack_top) = 0;
4196 return;
4197 }
4198
4199 if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
4200
4201 /* Increase the buffer to prepare for a possible push. */
4202 yy_size_t grow_size = 8 /* arbitrary grow size */;
4203
4204 num_to_alloc = (yy_buffer_stack_max) + grow_size;
4205 (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
4206 ((yy_buffer_stack),
4207 num_to_alloc * sizeof(struct yy_buffer_state*)
4208 );
4209 if ( ! (yy_buffer_stack) )
4210 YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
4211
4212 /* zero only the new slots.*/
4213 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
4214 (yy_buffer_stack_max) = num_to_alloc;
4215 }
4216 }
4217 /* %endif */
4218
4219 /* %if-c-only */
4220 /** Setup the input buffer state to scan directly from a user-specified character buffer.
4221 * @param base the character buffer
4222 * @param size the size in bytes of the character buffer
4223 *
4224 * @return the newly allocated buffer state object.
4225 */
yy_scan_buffer(char * base,yy_size_t size)4226 YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
4227 {
4228 YY_BUFFER_STATE b;
4229
4230 if ( size < 2 ||
4231 base[size-2] != YY_END_OF_BUFFER_CHAR ||
4232 base[size-1] != YY_END_OF_BUFFER_CHAR )
4233 /* They forgot to leave room for the EOB's. */
4234 return 0;
4235
4236 b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
4237 if ( ! b )
4238 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
4239
4240 b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
4241 b->yy_buf_pos = b->yy_ch_buf = base;
4242 b->yy_is_our_buffer = 0;
4243 b->yy_input_file = 0;
4244 b->yy_n_chars = b->yy_buf_size;
4245 b->yy_is_interactive = 0;
4246 b->yy_at_bol = 1;
4247 b->yy_fill_buffer = 0;
4248 b->yy_buffer_status = YY_BUFFER_NEW;
4249
4250 yy_switch_to_buffer(b );
4251
4252 return b;
4253 }
4254 /* %endif */
4255
4256 /* %if-c-only */
4257 /** Setup the input buffer state to scan a string. The next call to yylex() will
4258 * scan from a @e copy of @a str.
4259 * @param yystr a NUL-terminated string to scan
4260 *
4261 * @return the newly allocated buffer state object.
4262 * @note If you want to scan bytes that may contain NUL values, then use
4263 * yy_scan_bytes() instead.
4264 */
yy_scan_string(yyconst char * yystr)4265 YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
4266 {
4267
4268 return yy_scan_bytes(yystr,strlen(yystr) );
4269 }
4270 /* %endif */
4271
4272 /* %if-c-only */
4273 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
4274 * scan from a @e copy of @a bytes.
4275 * @param yybytes the byte buffer to scan
4276 * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
4277 *
4278 * @return the newly allocated buffer state object.
4279 */
yy_scan_bytes(yyconst char * yybytes,yy_size_t _yybytes_len)4280 YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len )
4281 {
4282 YY_BUFFER_STATE b;
4283 char *buf;
4284 yy_size_t n;
4285 yy_size_t i;
4286
4287 /* Get memory for full buffer, including space for trailing EOB's. */
4288 n = _yybytes_len + 2;
4289 buf = (char *) yyalloc(n );
4290 if ( ! buf )
4291 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
4292
4293 for ( i = 0; i < _yybytes_len; ++i )
4294 buf[i] = yybytes[i];
4295
4296 buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
4297
4298 b = yy_scan_buffer(buf,n );
4299 if ( ! b )
4300 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
4301
4302 /* It's okay to grow etc. this buffer, and we should throw it
4303 * away when we're done.
4304 */
4305 b->yy_is_our_buffer = 1;
4306
4307 return b;
4308 }
4309 /* %endif */
4310
4311 #ifndef YY_EXIT_FAILURE
4312 #define YY_EXIT_FAILURE 2
4313 #endif
4314
4315 /* %if-c-only */
yy_fatal_error(yyconst char * msg)4316 static void yy_fatal_error (yyconst char* msg )
4317 {
4318 (void) fprintf( stderr, "%s\n", msg );
4319 exit( YY_EXIT_FAILURE );
4320 }
4321 /* %endif */
4322 /* %if-c++-only */
4323 /* %endif */
4324
4325 /* Redefine yyless() so it works in section 3 code. */
4326
4327 #undef yyless
4328 #define yyless(n) \
4329 do \
4330 { \
4331 /* Undo effects of setting up yytext. */ \
4332 int yyless_macro_arg = (n); \
4333 YY_LESS_LINENO(yyless_macro_arg);\
4334 yytext[yyleng] = (yy_hold_char); \
4335 (yy_c_buf_p) = yytext + yyless_macro_arg; \
4336 (yy_hold_char) = *(yy_c_buf_p); \
4337 *(yy_c_buf_p) = '\0'; \
4338 yyleng = yyless_macro_arg; \
4339 } \
4340 while ( 0 )
4341
4342 /* Accessor methods (get/set functions) to struct members. */
4343
4344 /* %if-c-only */
4345 /* %if-reentrant */
4346 /* %endif */
4347
4348 /** Get the current line number.
4349 *
4350 */
yyget_lineno(void)4351 int yyget_lineno (void)
4352 {
4353
4354 return yylineno;
4355 }
4356
4357 /** Get the input stream.
4358 *
4359 */
yyget_in(void)4360 FILE *yyget_in (void)
4361 {
4362 return yyin;
4363 }
4364
4365 /** Get the output stream.
4366 *
4367 */
yyget_out(void)4368 FILE *yyget_out (void)
4369 {
4370 return yyout;
4371 }
4372
4373 /** Get the length of the current token.
4374 *
4375 */
yyget_leng(void)4376 yy_size_t yyget_leng (void)
4377 {
4378 return yyleng;
4379 }
4380
4381 /** Get the current token.
4382 *
4383 */
4384
yyget_text(void)4385 char *yyget_text (void)
4386 {
4387 return yytext;
4388 }
4389
4390 /* %if-reentrant */
4391 /* %endif */
4392
4393 /** Set the current line number.
4394 * @param _line_number line number
4395 *
4396 */
yyset_lineno(int _line_number)4397 void yyset_lineno (int _line_number )
4398 {
4399
4400 yylineno = _line_number;
4401 }
4402
4403 /** Set the input stream. This does not discard the current
4404 * input buffer.
4405 * @param _in_str A readable stream.
4406 *
4407 * @see yy_switch_to_buffer
4408 */
yyset_in(FILE * _in_str)4409 void yyset_in (FILE * _in_str )
4410 {
4411 yyin = _in_str ;
4412 }
4413
yyset_out(FILE * _out_str)4414 void yyset_out (FILE * _out_str )
4415 {
4416 yyout = _out_str ;
4417 }
4418
yyget_debug(void)4419 int yyget_debug (void)
4420 {
4421 return yy_flex_debug;
4422 }
4423
yyset_debug(int _bdebug)4424 void yyset_debug (int _bdebug )
4425 {
4426 yy_flex_debug = _bdebug ;
4427 }
4428
4429 /* %endif */
4430
4431 /* %if-reentrant */
4432 /* %if-bison-bridge */
4433 /* %endif */
4434 /* %endif if-c-only */
4435
4436 /* %if-c-only */
yy_init_globals(void)4437 static int yy_init_globals (void)
4438 {
4439 /* Initialization is the same as for the non-reentrant scanner.
4440 * This function is called from yylex_destroy(), so don't allocate here.
4441 */
4442
4443 (yy_buffer_stack) = 0;
4444 (yy_buffer_stack_top) = 0;
4445 (yy_buffer_stack_max) = 0;
4446 (yy_c_buf_p) = (char *) 0;
4447 (yy_init) = 0;
4448 (yy_start) = 0;
4449
4450 /* Defined in main.c */
4451 #ifdef YY_STDINIT
4452 yyin = stdin;
4453 yyout = stdout;
4454 #else
4455 yyin = (FILE *) 0;
4456 yyout = (FILE *) 0;
4457 #endif
4458
4459 /* For future reference: Set errno on error, since we are called by
4460 * yylex_init()
4461 */
4462 return 0;
4463 }
4464 /* %endif */
4465
4466 /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
4467 /* yylex_destroy is for both reentrant and non-reentrant scanners. */
yylex_destroy(void)4468 int yylex_destroy (void)
4469 {
4470
4471 /* Pop the buffer stack, destroying each element. */
4472 while(YY_CURRENT_BUFFER){
4473 yy_delete_buffer(YY_CURRENT_BUFFER );
4474 YY_CURRENT_BUFFER_LVALUE = NULL;
4475 yypop_buffer_state();
4476 }
4477
4478 /* Destroy the stack itself. */
4479 yyfree((yy_buffer_stack) );
4480 (yy_buffer_stack) = NULL;
4481
4482 /* Reset the globals. This is important in a non-reentrant scanner so the next time
4483 * yylex() is called, initialization will occur. */
4484 yy_init_globals( );
4485
4486 /* %if-reentrant */
4487 /* %endif */
4488 return 0;
4489 }
4490 /* %endif */
4491
4492 /*
4493 * Internal utility routines.
4494 */
4495
4496 #ifndef yytext_ptr
yy_flex_strncpy(char * s1,yyconst char * s2,int n)4497 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
4498 {
4499
4500 int i;
4501 for ( i = 0; i < n; ++i )
4502 s1[i] = s2[i];
4503 }
4504 #endif
4505
4506 #ifdef YY_NEED_STRLEN
yy_flex_strlen(yyconst char * s)4507 static int yy_flex_strlen (yyconst char * s )
4508 {
4509 int n;
4510 for ( n = 0; s[n]; ++n )
4511 ;
4512
4513 return n;
4514 }
4515 #endif
4516
yyalloc(yy_size_t size)4517 void *yyalloc (yy_size_t size )
4518 {
4519 return (void *) malloc( size );
4520 }
4521
yyrealloc(void * ptr,yy_size_t size)4522 void *yyrealloc (void * ptr, yy_size_t size )
4523 {
4524
4525 /* The cast to (char *) in the following accommodates both
4526 * implementations that use char* generic pointers, and those
4527 * that use void* generic pointers. It works with the latter
4528 * because both ANSI C and C++ allow castless assignment from
4529 * any pointer type to void*, and deal with argument conversions
4530 * as though doing an assignment.
4531 */
4532 return (void *) realloc( (char *) ptr, size );
4533 }
4534
yyfree(void * ptr)4535 void yyfree (void * ptr )
4536 {
4537 free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
4538 }
4539
4540 /* %if-tables-serialization definitions */
4541 /* %define-yytables The name for this specific scanner's tables. */
4542 #define YYTABLES_NAME "yytables"
4543 /* %endif */
4544
4545 /* %ok-for-header */
4546
4547 #line 997 "lex.l"
4548
4549
4550
4551 int
yylex()4552 yylex()
4553 {
4554 int rc = lexscan();
4555 if (rc != T_MODBEG && rc != T_MODEND)
4556 inctx_flags |= INCTX_HADINPUT;
4557 return rc;
4558 }
4559
4560 void
init_string_space()4561 init_string_space()
4562 {
4563 mu_opool_create(&string_pool, MU_OPOOL_ENOMEMABRT);
4564 }
4565
4566 void
free_string_space()4567 free_string_space()
4568 {
4569 mu_opool_destroy(&string_pool);
4570 }
4571
4572 char *
mf_strdup(const char * str)4573 mf_strdup(const char *str)
4574 {
4575 string_add(str, strlen(str) + 1);
4576 return mu_opool_finish(string_pool, NULL);
4577 }
4578
4579 struct literal *
string_alloc(const char * str,size_t len)4580 string_alloc(const char *str, size_t len)
4581 {
4582 string_begin();
4583 string_add(str, len);
4584 return string_finish();
4585 }
4586
4587 static void
string(const char * str,size_t len)4588 string(const char *str, size_t len)
4589 {
4590 yylval.literal = string_alloc(str, len);
4591 }
4592
4593 void
string_begin()4594 string_begin()
4595 {
4596 /* nothing */
4597 }
4598
4599 struct literal *
string_finish()4600 string_finish()
4601 {
4602 char *ptr;
4603 struct literal *lit;
4604 mu_opool_append_char(string_pool, 0);
4605 ptr = mu_opool_finish(string_pool, NULL);
4606 lit = literal_lookup(ptr);
4607 if (lit->text != ptr)
4608 mu_opool_free(string_pool, ptr);
4609 return lit;
4610 }
4611
4612 static void
line_finish()4613 line_finish()
4614 {
4615 yylval.literal = string_finish();
4616 if (yy_flex_debug)
4617 fprintf(stderr, "constructed line: %s\n",
4618 yylval.literal->text);
4619 }
4620
4621 void
string_add(const char * str,size_t len)4622 string_add(const char *str, size_t len)
4623 {
4624 mu_opool_append(string_pool, str, len);
4625 }
4626
4627 void
string_add_char(unsigned char c)4628 string_add_char(unsigned char c)
4629 {
4630 mu_opool_append_char(string_pool, c);
4631 }
4632
4633 void
parse_warning(const char * fmt,...)4634 parse_warning(const char *fmt, ...)
4635 {
4636 va_list ap;
4637 va_start(ap, fmt);
4638 mu_diag_voutput (MU_DIAG_WARNING, fmt, ap);
4639 va_end(ap);
4640 }
4641
4642 void
parse_warning_locus(struct mu_locus_range const * loc,const char * fmt,...)4643 parse_warning_locus(struct mu_locus_range const *loc, const char *fmt, ...)
4644 {
4645 va_list ap;
4646
4647 va_start(ap, fmt);
4648 mu_vdiag_at_locus_range(MU_DIAG_WARNING, loc, fmt, ap);
4649 va_end(ap);
4650 }
4651
4652 void
parse_error(const char * fmt,...)4653 parse_error(const char *fmt, ...)
4654 {
4655 va_list ap;
4656
4657 va_start(ap, fmt);
4658 mu_diag_voutput(MU_DIAG_ERROR, fmt, ap);
4659 va_end(ap);
4660 error_count++;
4661 }
4662
4663 void
parse_error_locus(struct mu_locus_range const * loc,const char * fmt,...)4664 parse_error_locus(struct mu_locus_range const *loc, const char *fmt, ...)
4665 {
4666 va_list ap;
4667
4668 va_start(ap, fmt);
4669 mu_vdiag_at_locus_range(MU_DIAG_ERROR, loc, fmt, ap);
4670 va_end(ap);
4671 error_count++;
4672 }
4673
4674
4675
4676 static int
lex_close_source()4677 lex_close_source()
4678 {
4679 if (!yyin)
4680 return 1;
4681 if (ext_pp)
4682 pp_extrn_shutdown(yyin, pp_pid);
4683 else
4684 fclose(yyin);
4685 yyin = NULL;
4686 mu_linetrack_destroy(&trk);
4687
4688 switch (YYSTATE) {
4689 case INITIAL:
4690 /* ok */
4691 break;
4692
4693 case COMMENT:
4694 mu_diag_at_locus_point (MU_DIAG_ERROR, &start_locus,
4695 "%s", _("end of file in comment"));
4696 break;
4697
4698 case STR:
4699 case ML:
4700 case CML:
4701 case QML:
4702 mu_diag_at_locus_point (MU_DIAG_ERROR, &start_locus,
4703 "%s", _("end of file in string"));
4704 break;
4705
4706 case SHELLMAGIC:
4707 mu_diag_at_locus_point (MU_DIAG_ERROR, &start_locus,
4708 "%s", _("end of file in shell block"));
4709 break;
4710 }
4711 return inctx_pop();
4712 }
4713
4714 void
lex_drain_input()4715 lex_drain_input()
4716 {
4717 while (input() != EOF)
4718 ;
4719 }
4720
4721 void
lex_bye()4722 lex_bye()
4723 {
4724 lex_drain_input();
4725 lex_close_source();
4726 }
4727
4728 int
yywrap()4729 yywrap()
4730 {
4731 if (yy_flex_debug && top_module)
4732 fprintf(stderr, "--eof in module %s\n", top_module->name);
4733 if (inctx_flags & INCTX_MODULE)
4734 emit_token = T_MODEND;
4735 return lex_close_source();
4736 }
4737
4738 static int
isemptystr(char * text)4739 isemptystr(char *text)
4740 {
4741 for (; *text && mu_isspace (*text); text++)
4742 ;
4743 return *text == 0;
4744 }
4745
4746 void
tie_in_onblock(int enable)4747 tie_in_onblock(int enable)
4748 {
4749 if (enable)
4750 BEGIN(ONBLOCK);
4751 else
4752 BEGIN(INITIAL);
4753 }
4754
4755 data_type_t
builtin_const_value(const char * s,size_t len,const char ** sval,long * nval)4756 builtin_const_value(const char *s, size_t len, const char **sval, long *nval)
4757 {
4758 if (strncmp(s, "__file__", len) == 0) {
4759 struct literal *lit = literal_lookup(yylloc.beg.mu_file);
4760 *sval = lit->text;
4761 return dtype_string;
4762 } else if (strncmp(s, "__line__", len) == 0) {
4763 *nval = yylloc.beg.mu_line;
4764 return dtype_number;
4765 } else if (strncmp(s, "__function__", len) == 0) {
4766 *sval = function_name();
4767 return dtype_string;
4768 } else if (strncmp(s, "__package__", len) == 0) {
4769 *sval = PACKAGE_TARNAME;
4770 return dtype_string;
4771 } else if (strncmp(s, "__version__", len) == 0) {
4772 *sval = PACKAGE_VERSION;
4773 return dtype_string;
4774 } else if (strncmp(s, "__major__", len) == 0) {
4775 *nval = MAILFROMD_VERSION_MAJOR;
4776 return dtype_number;
4777 } else if (strncmp(s, "__minor__", len) == 0) {
4778 *nval = MAILFROMD_VERSION_MINOR;
4779 return dtype_number;
4780 } else if (strncmp(s, "__patch__", len) == 0) {
4781 *nval = MAILFROMD_VERSION_PATCH;
4782 return dtype_number;
4783 } else if (strncmp(s, "__git__", len) == 0) {
4784 #ifdef GIT_DESCRIBE
4785 *sval = GIT_DESCRIBE;
4786 #else
4787 *sval = "";
4788 #endif
4789 return dtype_string;
4790 } else if (strncmp(s, "__statedir__", len) == 0) {
4791 *sval = mailfromd_state_dir;
4792 return dtype_string;
4793 } else if (strncmp(s, "__defstatedir__", len) == 0) {
4794 *sval = DEFAULT_STATE_DIR;
4795 return dtype_string;
4796 } else if (strncmp(s, "__preproc__", len) == 0) {
4797 *sval = ext_pp ? ext_pp : "";
4798 return dtype_string;
4799 } else if (strncmp(s, "__defpreproc__", len) == 0) {
4800 *sval = DEF_EXT_PP ? DEF_EXT_PP : "";
4801 return dtype_string;
4802 } else if (strncmp(s, "__module__", len) == 0) {
4803 *sval = top_module->dclname ? top_module->dclname : top_module->name;
4804 return dtype_string;
4805 }
4806 return dtype_unspecified;
4807 }
4808
4809 int
builtin_const(const char * s,size_t len)4810 builtin_const(const char *s, size_t len)
4811 {
4812 const char *sval;
4813 long nval;
4814
4815 switch (builtin_const_value(s, len, &sval, &nval)) {
4816 case dtype_number:
4817 yylval.number = nval;
4818 return T_NUMBER;
4819
4820 case dtype_string:
4821 string(sval, strlen(sval));
4822 return T_STRING;
4823
4824 default:
4825 abort();
4826 }
4827 return T_BOGUS;
4828 }
4829
4830 const char *
symbit_to_qualifier(unsigned f)4831 symbit_to_qualifier(unsigned f)
4832 {
4833 switch (f) {
4834 case SYM_PRECIOUS:
4835 return "precious";
4836 case SYM_STATIC:
4837 return "static";
4838 case SYM_PUBLIC:
4839 return "public";
4840 }
4841 return NULL;
4842 }
4843
4844 /* End of lex.l */
4845
4846