Merge pull request #1844 from jrw972/monterey
[ACE_TAO.git] / TAO / TAO_IDL / fe / idl.yy.cpp
blob9c7808d96cf0f25261bca229b807ebc1cc748527
1 #line 2 "fe/idl.yy.cpp"
3 #line 4 "fe/idl.yy.cpp"
5 #define YY_INT_ALIGNED short int
7 /* A lexical scanner generated by flex */
9 #define yy_create_buffer tao_yy_create_buffer
10 #define yy_delete_buffer tao_yy_delete_buffer
11 #define yy_scan_buffer tao_yy_scan_buffer
12 #define yy_scan_string tao_yy_scan_string
13 #define yy_scan_bytes tao_yy_scan_bytes
14 #define yy_init_buffer tao_yy_init_buffer
15 #define yy_flush_buffer tao_yy_flush_buffer
16 #define yy_load_buffer_state tao_yy_load_buffer_state
17 #define yy_switch_to_buffer tao_yy_switch_to_buffer
18 #define yypush_buffer_state tao_yypush_buffer_state
19 #define yypop_buffer_state tao_yypop_buffer_state
20 #define yyensure_buffer_stack tao_yyensure_buffer_stack
21 #define yy_flex_debug tao_yy_flex_debug
22 #define yyin tao_yyin
23 #define yyleng tao_yyleng
24 #define yylex tao_yylex
25 #define yylineno tao_yylineno
26 #define yyout tao_yyout
27 #define yyrestart tao_yyrestart
28 #define yytext tao_yytext
29 #define yywrap tao_yywrap
30 #define yyalloc tao_yyalloc
31 #define yyrealloc tao_yyrealloc
32 #define yyfree tao_yyfree
34 #define FLEX_SCANNER
35 #define YY_FLEX_MAJOR_VERSION 2
36 #define YY_FLEX_MINOR_VERSION 6
37 #define YY_FLEX_SUBMINOR_VERSION 4
38 #if YY_FLEX_SUBMINOR_VERSION > 0
39 #define FLEX_BETA
40 #endif
42 #ifdef yy_create_buffer
43 #define tao_yy_create_buffer_ALREADY_DEFINED
44 #else
45 #define yy_create_buffer tao_yy_create_buffer
46 #endif
48 #ifdef yy_delete_buffer
49 #define tao_yy_delete_buffer_ALREADY_DEFINED
50 #else
51 #define yy_delete_buffer tao_yy_delete_buffer
52 #endif
54 #ifdef yy_scan_buffer
55 #define tao_yy_scan_buffer_ALREADY_DEFINED
56 #else
57 #define yy_scan_buffer tao_yy_scan_buffer
58 #endif
60 #ifdef yy_scan_string
61 #define tao_yy_scan_string_ALREADY_DEFINED
62 #else
63 #define yy_scan_string tao_yy_scan_string
64 #endif
66 #ifdef yy_scan_bytes
67 #define tao_yy_scan_bytes_ALREADY_DEFINED
68 #else
69 #define yy_scan_bytes tao_yy_scan_bytes
70 #endif
72 #ifdef yy_init_buffer
73 #define tao_yy_init_buffer_ALREADY_DEFINED
74 #else
75 #define yy_init_buffer tao_yy_init_buffer
76 #endif
78 #ifdef yy_flush_buffer
79 #define tao_yy_flush_buffer_ALREADY_DEFINED
80 #else
81 #define yy_flush_buffer tao_yy_flush_buffer
82 #endif
84 #ifdef yy_load_buffer_state
85 #define tao_yy_load_buffer_state_ALREADY_DEFINED
86 #else
87 #define yy_load_buffer_state tao_yy_load_buffer_state
88 #endif
90 #ifdef yy_switch_to_buffer
91 #define tao_yy_switch_to_buffer_ALREADY_DEFINED
92 #else
93 #define yy_switch_to_buffer tao_yy_switch_to_buffer
94 #endif
96 #ifdef yypush_buffer_state
97 #define tao_yypush_buffer_state_ALREADY_DEFINED
98 #else
99 #define yypush_buffer_state tao_yypush_buffer_state
100 #endif
102 #ifdef yypop_buffer_state
103 #define tao_yypop_buffer_state_ALREADY_DEFINED
104 #else
105 #define yypop_buffer_state tao_yypop_buffer_state
106 #endif
108 #ifdef yyensure_buffer_stack
109 #define tao_yyensure_buffer_stack_ALREADY_DEFINED
110 #else
111 #define yyensure_buffer_stack tao_yyensure_buffer_stack
112 #endif
114 #ifdef yylex
115 #define tao_yylex_ALREADY_DEFINED
116 #else
117 #define yylex tao_yylex
118 #endif
120 #ifdef yyrestart
121 #define tao_yyrestart_ALREADY_DEFINED
122 #else
123 #define yyrestart tao_yyrestart
124 #endif
126 #ifdef yylex_init
127 #define tao_yylex_init_ALREADY_DEFINED
128 #else
129 #define yylex_init tao_yylex_init
130 #endif
132 #ifdef yylex_init_extra
133 #define tao_yylex_init_extra_ALREADY_DEFINED
134 #else
135 #define yylex_init_extra tao_yylex_init_extra
136 #endif
138 #ifdef yylex_destroy
139 #define tao_yylex_destroy_ALREADY_DEFINED
140 #else
141 #define yylex_destroy tao_yylex_destroy
142 #endif
144 #ifdef yyget_debug
145 #define tao_yyget_debug_ALREADY_DEFINED
146 #else
147 #define yyget_debug tao_yyget_debug
148 #endif
150 #ifdef yyset_debug
151 #define tao_yyset_debug_ALREADY_DEFINED
152 #else
153 #define yyset_debug tao_yyset_debug
154 #endif
156 #ifdef yyget_extra
157 #define tao_yyget_extra_ALREADY_DEFINED
158 #else
159 #define yyget_extra tao_yyget_extra
160 #endif
162 #ifdef yyset_extra
163 #define tao_yyset_extra_ALREADY_DEFINED
164 #else
165 #define yyset_extra tao_yyset_extra
166 #endif
168 #ifdef yyget_in
169 #define tao_yyget_in_ALREADY_DEFINED
170 #else
171 #define yyget_in tao_yyget_in
172 #endif
174 #ifdef yyset_in
175 #define tao_yyset_in_ALREADY_DEFINED
176 #else
177 #define yyset_in tao_yyset_in
178 #endif
180 #ifdef yyget_out
181 #define tao_yyget_out_ALREADY_DEFINED
182 #else
183 #define yyget_out tao_yyget_out
184 #endif
186 #ifdef yyset_out
187 #define tao_yyset_out_ALREADY_DEFINED
188 #else
189 #define yyset_out tao_yyset_out
190 #endif
192 #ifdef yyget_leng
193 #define tao_yyget_leng_ALREADY_DEFINED
194 #else
195 #define yyget_leng tao_yyget_leng
196 #endif
198 #ifdef yyget_text
199 #define tao_yyget_text_ALREADY_DEFINED
200 #else
201 #define yyget_text tao_yyget_text
202 #endif
204 #ifdef yyget_lineno
205 #define tao_yyget_lineno_ALREADY_DEFINED
206 #else
207 #define yyget_lineno tao_yyget_lineno
208 #endif
210 #ifdef yyset_lineno
211 #define tao_yyset_lineno_ALREADY_DEFINED
212 #else
213 #define yyset_lineno tao_yyset_lineno
214 #endif
216 #ifdef yywrap
217 #define tao_yywrap_ALREADY_DEFINED
218 #else
219 #define yywrap tao_yywrap
220 #endif
222 #ifdef yyalloc
223 #define tao_yyalloc_ALREADY_DEFINED
224 #else
225 #define yyalloc tao_yyalloc
226 #endif
228 #ifdef yyrealloc
229 #define tao_yyrealloc_ALREADY_DEFINED
230 #else
231 #define yyrealloc tao_yyrealloc
232 #endif
234 #ifdef yyfree
235 #define tao_yyfree_ALREADY_DEFINED
236 #else
237 #define yyfree tao_yyfree
238 #endif
240 #ifdef yytext
241 #define tao_yytext_ALREADY_DEFINED
242 #else
243 #define yytext tao_yytext
244 #endif
246 #ifdef yyleng
247 #define tao_yyleng_ALREADY_DEFINED
248 #else
249 #define yyleng tao_yyleng
250 #endif
252 #ifdef yyin
253 #define tao_yyin_ALREADY_DEFINED
254 #else
255 #define yyin tao_yyin
256 #endif
258 #ifdef yyout
259 #define tao_yyout_ALREADY_DEFINED
260 #else
261 #define yyout tao_yyout
262 #endif
264 #ifdef yy_flex_debug
265 #define tao_yy_flex_debug_ALREADY_DEFINED
266 #else
267 #define yy_flex_debug tao_yy_flex_debug
268 #endif
270 #ifdef yylineno
271 #define tao_yylineno_ALREADY_DEFINED
272 #else
273 #define yylineno tao_yylineno
274 #endif
276 /* First, we deal with platform-specific or compiler-specific issues. */
278 /* begin standard C headers. */
279 #include "ace/OS_NS_stdio.h"
280 #include "ace/OS_NS_errno.h"
282 /* end standard C headers. */
284 /* flex integer type definitions */
286 #ifndef FLEXINT_H
287 #define FLEXINT_H
289 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
291 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L || defined (__HP_aCC)
293 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
294 * if you want the limit (max/min) macros for int types.
296 #ifndef __STDC_LIMIT_MACROS
297 #define __STDC_LIMIT_MACROS 1
298 #endif
300 #include <inttypes.h>
301 typedef int8_t flex_int8_t;
302 typedef uint8_t flex_uint8_t;
303 typedef int16_t flex_int16_t;
304 typedef uint16_t flex_uint16_t;
305 typedef int32_t flex_int32_t;
306 typedef uint32_t flex_uint32_t;
307 #else
308 typedef signed char flex_int8_t;
309 typedef short int flex_int16_t;
310 typedef int flex_int32_t;
311 typedef unsigned char flex_uint8_t;
312 typedef unsigned short int flex_uint16_t;
313 typedef unsigned int flex_uint32_t;
315 /* Limits of integral types. */
316 #ifndef INT8_MIN
317 #define INT8_MIN (-128)
318 #endif
319 #ifndef INT16_MIN
320 #define INT16_MIN (-32767-1)
321 #endif
322 #ifndef INT32_MIN
323 #define INT32_MIN (-2147483647-1)
324 #endif
325 #ifndef INT8_MAX
326 #define INT8_MAX (127)
327 #endif
328 #ifndef INT16_MAX
329 #define INT16_MAX (32767)
330 #endif
331 #ifndef INT32_MAX
332 #define INT32_MAX (2147483647)
333 #endif
334 #ifndef UINT8_MAX
335 #define UINT8_MAX (255U)
336 #endif
337 #ifndef UINT16_MAX
338 #define UINT16_MAX (65535U)
339 #endif
340 #ifndef UINT32_MAX
341 #define UINT32_MAX (4294967295U)
342 #endif
344 #ifndef SIZE_MAX
345 #define SIZE_MAX (~(size_t)0)
346 #endif
348 #endif /* ! C99 */
350 #endif /* ! FLEXINT_H */
352 /* begin standard C++ headers. */
354 /* TODO: this is always defined, so inline it */
355 #define yyconst const
357 #if defined(__GNUC__) && __GNUC__ >= 3
358 #define yynoreturn __attribute__((__noreturn__))
359 #else
360 #define yynoreturn
361 #endif
363 /* Returned upon end-of-file. */
364 #define YY_NULL 0
366 /* Promotes a possibly negative, possibly signed char to an
367 * integer in range [0..255] for use as an array index.
369 #define YY_SC_TO_UI(c) ((YY_CHAR) (c))
371 /* Enter a start condition. This macro really ought to take a parameter,
372 * but we do it the disgusting crufty way forced on us by the ()-less
373 * definition of BEGIN.
375 #define BEGIN (yy_start) = 1 + 2 *
376 /* Translate the current start state into a value that can be later handed
377 * to BEGIN to return to the state. The YYSTATE alias is for lex
378 * compatibility.
380 #define YY_START (((yy_start) - 1) / 2)
381 #define YYSTATE YY_START
382 /* Action number for EOF rule of a given start state. */
383 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
384 /* Special action meaning "start processing a new file". */
385 #define YY_NEW_FILE yyrestart( yyin )
386 #define YY_END_OF_BUFFER_CHAR 0
388 /* Size of default input buffer. */
389 #ifndef YY_BUF_SIZE
390 #ifdef __ia64__
391 /* On IA-64, the buffer size is 16k, not 8k.
392 * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
393 * Ditto for the __ia64__ case accordingly.
395 #define YY_BUF_SIZE 32768
396 #else
397 #define YY_BUF_SIZE 16384
398 #endif /* __ia64__ */
399 #endif
401 /* The state buf must be large enough to hold one state per character in the main buffer.
403 #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
405 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
406 #define YY_TYPEDEF_YY_BUFFER_STATE
407 typedef struct yy_buffer_state *YY_BUFFER_STATE;
408 #endif
410 #ifndef YY_TYPEDEF_YY_SIZE_T
411 #define YY_TYPEDEF_YY_SIZE_T
412 typedef size_t yy_size_t;
413 #endif
415 extern int yyleng;
417 extern FILE *yyin, *yyout;
419 #define EOB_ACT_CONTINUE_SCAN 0
420 #define EOB_ACT_END_OF_FILE 1
421 #define EOB_ACT_LAST_MATCH 2
423 #define YY_LESS_LINENO(n)
424 #define YY_LINENO_REWIND_TO(ptr)
426 /* Return all but the first "n" matched characters back to the input stream. */
427 #define yyless(n) \
428 do \
430 /* Undo effects of setting up yytext. */ \
431 int yyless_macro_arg = (n); \
432 YY_LESS_LINENO(yyless_macro_arg);\
433 *yy_cp = (yy_hold_char); \
434 YY_RESTORE_YY_MORE_OFFSET \
435 (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
436 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
438 while ( 0 )
439 #define unput(c) yyunput( c, (yytext_ptr) )
441 #ifndef YY_STRUCT_YY_BUFFER_STATE
442 #define YY_STRUCT_YY_BUFFER_STATE
443 struct yy_buffer_state
445 FILE *yy_input_file;
447 char *yy_ch_buf; /* input buffer */
448 char *yy_buf_pos; /* current position in input buffer */
450 /* Size of input buffer in bytes, not including room for EOB
451 * characters.
453 int yy_buf_size;
455 /* Number of characters read into yy_ch_buf, not including EOB
456 * characters.
458 int yy_n_chars;
460 /* Whether we "own" the buffer - i.e., we know we created it,
461 * and can realloc() it to grow it, and should free() it to
462 * delete it.
464 int yy_is_our_buffer;
466 /* Whether this is an "interactive" input source; if so, and
467 * if we're using stdio for input, then we want to use getc()
468 * instead of fread(), to make sure we stop fetching input after
469 * each newline.
471 int yy_is_interactive;
473 /* Whether we're considered to be at the beginning of a line.
474 * If so, '^' rules will be active on the next match, otherwise
475 * not.
477 int yy_at_bol;
479 int yy_bs_lineno; /**< The line count. */
480 int yy_bs_column; /**< The column count. */
482 /* Whether to try to fill the input buffer when we reach the
483 * end of it.
485 int yy_fill_buffer;
487 int yy_buffer_status;
489 #define YY_BUFFER_NEW 0
490 #define YY_BUFFER_NORMAL 1
491 /* When an EOF's been seen but there's still some text to process
492 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
493 * shouldn't try reading from the input source any more. We might
494 * still have a bunch of tokens to match, though, because of
495 * possible backing-up.
497 * When we actually see the EOF, we change the status to "new"
498 * (via yyrestart()), so that the user can continue scanning by
499 * just pointing yyin at a new input file.
501 #define YY_BUFFER_EOF_PENDING 2
504 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
506 /* Stack of input buffers. */
507 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
508 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
509 static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
511 /* We provide macros for accessing buffer states in case in the
512 * future we want to put the buffer states in a more general
513 * "scanner state".
515 * Returns the top of the stack, or 0.
517 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
518 ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
519 : 0)
520 /* Same as previous macro, but useful when we know that the buffer stack is not
521 * 0 or when we need an lvalue. For internal use only.
523 #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
525 /* yy_hold_char holds the character lost when yytext is formed. */
526 static char yy_hold_char;
527 static int yy_n_chars; /* number of characters read into yy_ch_buf */
528 int yyleng;
530 /* Points to current character in buffer. */
531 static char *yy_c_buf_p = 0;
532 static int yy_init = 0; /* whether we need to initialize */
533 static int yy_start = 0; /* start state number */
535 /* Flag which is used to allow yywrap()'s to do buffer switches
536 * instead of setting up a fresh yyin. A bit of a hack ...
538 static int yy_did_buffer_switch_on_eof;
540 void yyrestart ( FILE *input_file );
541 void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer );
542 YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size );
543 void yy_delete_buffer ( YY_BUFFER_STATE b );
544 void yy_flush_buffer ( YY_BUFFER_STATE b );
545 void yypush_buffer_state ( YY_BUFFER_STATE new_buffer );
546 void yypop_buffer_state ( void );
548 static void yyensure_buffer_stack ( void );
549 static void yy_load_buffer_state ( void );
550 static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file );
551 #define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )
553 YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size );
554 YY_BUFFER_STATE yy_scan_string ( const char *yy_str );
555 YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len );
557 void *yyalloc ( yy_size_t );
558 void *yyrealloc ( void *, yy_size_t );
559 void yyfree ( void * );
561 #define yy_new_buffer yy_create_buffer
562 #define yy_set_interactive(is_interactive) \
564 if ( ! YY_CURRENT_BUFFER ){ \
565 yyensure_buffer_stack (); \
566 YY_CURRENT_BUFFER_LVALUE = \
567 yy_create_buffer( yyin, YY_BUF_SIZE ); \
569 YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
571 #define yy_set_bol(at_bol) \
573 if ( ! YY_CURRENT_BUFFER ){\
574 yyensure_buffer_stack (); \
575 YY_CURRENT_BUFFER_LVALUE = \
576 yy_create_buffer( yyin, YY_BUF_SIZE ); \
578 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
580 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
582 /* Begin user sect3 */
583 typedef flex_uint8_t YY_CHAR;
585 FILE *yyin = 0, *yyout = 0;
587 typedef int yy_state_type;
589 extern int yylineno;
590 int yylineno = 1;
592 extern char yytext[];
594 static yy_state_type yy_get_previous_state ( void );
595 static yy_state_type yy_try_NUL_trans ( yy_state_type current_state );
596 static int yy_get_next_buffer ( void );
597 static void yynoreturn yy_fatal_error ( const char* msg );
599 /* Done after the current pattern has been matched and before the
600 * corresponding action - sets up yytext.
602 #define YY_DO_BEFORE_ACTION \
603 (yytext_ptr) = yy_bp; \
604 yyleng = (int) (yy_cp - yy_bp); \
605 (yy_hold_char) = *yy_cp; \
606 *yy_cp = '\0'; \
607 if ( yyleng >= YYLMAX ) \
608 YY_FATAL_ERROR( "token too large, exceeds YYLMAX" ); \
609 yy_flex_strncpy( yytext, (yytext_ptr), yyleng + 1 ); \
610 (yy_c_buf_p) = yy_cp;
611 #define YY_NUM_RULES 121
612 #define YY_END_OF_BUFFER 122
613 /* This struct is not used in this scanner,
614 but its presence is necessary. */
615 struct yy_trans_info
617 flex_int32_t yy_verify;
618 flex_int32_t yy_nxt;
620 static const flex_int16_t yy_acclist[626] =
621 { 0,
622 118, 118, 122, 120, 121, 118, 120, 121, 119, 121,
623 119, 120, 121, 120, 121, 120, 121, 120, 121, 120,
624 121, 120, 121, 93, 120, 121, 89, 120, 121, 120,
625 121, 120, 121, 120, 121, 83, 120, 121, 84, 120,
626 121, 84, 120, 121, 84, 120, 121, 84, 120, 121,
627 84, 120, 121, 84, 120, 121, 84, 120, 121, 84,
628 120, 121, 84, 120, 121, 84, 120, 121, 84, 120,
629 121, 84, 120, 121, 84, 120, 121, 84, 120, 121,
630 84, 120, 121, 84, 120, 121, 84, 120, 121, 84,
631 120, 121, 84, 120, 121, 84, 120, 121, 84, 120,
633 121, 84, 120, 121, 84, 120, 121, 84, 120, 121,
634 84, 120, 121, 118, 120, 121, 120, 121, 119, 120,
635 121, 118, 94, 92, 88, 85, 117, 85, 93, 87,
636 89, 81, 79, 80, 84, 84, 84, 84, 84, 84,
637 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
638 84, 84, 84, 84, 84, 84, 84, 84, 84, 76,
639 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
640 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
641 84, 84, 84, 84, 84, 84, 84, 84, 84, 118,
642 112, 94, 96, 96, 92, 88, 85, 116, 116, 85,
644 86, 91, 84, 95, 84, 84, 84, 84, 1, 84,
645 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
646 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
647 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
648 84, 77, 84, 84, 84, 84, 84, 84, 84, 84,
649 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
650 84, 84, 84, 84, 84, 99, 97, 99, 90, 85,
651 86, 84, 95, 100, 84, 73, 84, 84, 84, 84,
652 84, 20, 84, 27, 84, 84, 84, 84, 84, 84,
653 84, 84, 84, 13, 84, 84, 84, 84, 84, 84,
655 84, 84, 56, 84, 84, 84, 84, 84, 84, 35,
656 84, 84, 84, 24, 84, 84, 84, 84, 84, 84,
657 84, 84, 68, 84, 84, 84, 84, 84, 84, 84,
658 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
659 84, 84, 65, 84, 84, 31, 84, 84, 84, 113,
660 97, 98, 74, 84, 84, 84, 72, 84, 84, 84,
661 84, 84, 10, 84, 84, 84, 84, 84, 84, 52,
662 84, 84, 84, 84, 84, 18, 84, 22, 84, 84,
663 84, 75, 84, 37, 84, 39, 84, 41, 84, 84,
664 33, 84, 84, 84, 84, 84, 84, 30, 84, 84,
666 84, 84, 84, 84, 84, 84, 84, 84, 84, 25,
667 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
668 84, 84, 84, 36, 84, 17, 84, 84, 84, 28,
669 84, 84, 108, 101, 2, 84, 84, 84, 84, 84,
670 84, 84, 84, 43, 84, 84, 23, 84, 84, 84,
671 84, 54, 84, 84, 57, 84, 84, 84, 84, 3,
672 84, 84, 32, 84, 78, 84, 84, 84, 84, 84,
673 46, 84, 84, 4, 84, 84, 84, 84, 14, 84,
674 12, 84, 84, 19, 84, 84, 84, 63, 84, 84,
675 84, 38, 84, 40, 84, 42, 84, 84, 84, 84,
677 106, 84, 84, 29, 84, 84, 84, 84, 8, 84,
678 21, 84, 84, 84, 44, 84, 84, 84, 66, 84,
679 84, 84, 84, 84, 45, 84, 84, 84, 84, 84,
680 84, 84, 84, 11, 84, 84, 84, 84, 84, 15,
681 84, 104, 104, 110, 109, 34, 84, 84, 84, 84,
682 51, 84, 84, 84, 84, 84, 84, 58, 84, 70,
683 84, 84, 60, 84, 84, 5, 84, 16, 84, 84,
684 47, 84, 84, 67, 84, 84, 26, 84, 84, 114,
685 114, 107, 6, 84, 50, 84, 71, 84, 53, 84,
686 7, 84, 55, 84, 9, 84, 84, 84, 61, 84,
688 62, 84, 84, 84, 49, 84, 102, 102, 105, 105,
689 69, 84, 59, 84, 84, 64, 84, 115, 115, 48,
690 84, 111, 103, 103, 82
693 static const flex_int16_t yy_accept[623] =
694 { 0,
695 1, 2, 3, 4, 6, 9, 11, 14, 16, 18,
696 20, 22, 24, 27, 30, 32, 34, 36, 39, 42,
697 45, 48, 51, 54, 57, 60, 63, 66, 69, 72,
698 75, 78, 81, 84, 87, 90, 93, 96, 99, 102,
699 105, 108, 111, 114, 117, 119, 122, 123, 123, 124,
700 124, 124, 124, 124, 125, 126, 127, 128, 128, 129,
701 130, 130, 131, 131, 131, 132, 133, 134, 135, 135,
702 136, 137, 137, 137, 138, 139, 140, 141, 142, 143,
703 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
704 154, 155, 156, 157, 158, 159, 160, 162, 163, 164,
706 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
707 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
708 185, 186, 187, 188, 189, 190, 191, 191, 191, 192,
709 192, 192, 192, 192, 192, 192, 192, 193, 193, 193,
710 193, 194, 194, 195, 195, 195, 196, 196, 197, 197,
711 198, 198, 199, 200, 201, 201, 202, 203, 203, 204,
712 204, 205, 205, 205, 205, 206, 207, 208, 209, 211,
713 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
714 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
715 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
717 242, 244, 245, 246, 247, 248, 249, 250, 251, 252,
718 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
719 263, 264, 265, 266, 266, 266, 266, 266, 266, 266,
720 266, 266, 267, 269, 269, 269, 270, 270, 271, 272,
721 272, 273, 274, 274, 274, 274, 274, 275, 275, 276,
722 278, 279, 280, 281, 282, 284, 286, 287, 288, 289,
723 290, 291, 292, 293, 294, 296, 297, 298, 299, 300,
724 301, 302, 303, 305, 306, 307, 308, 309, 310, 312,
725 313, 314, 316, 317, 318, 319, 320, 321, 322, 323,
726 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
728 335, 336, 337, 338, 339, 340, 341, 342, 343, 345,
729 346, 348, 349, 350, 350, 350, 350, 350, 350, 350,
730 350, 351, 351, 351, 351, 351, 351, 351, 351, 352,
731 352, 353, 353, 353, 355, 355, 355, 355, 356, 357,
732 359, 360, 361, 362, 363, 365, 366, 367, 368, 369,
733 370, 372, 373, 374, 375, 376, 378, 380, 381, 382,
734 384, 386, 388, 390, 391, 393, 394, 395, 396, 397,
735 398, 400, 401, 402, 403, 404, 405, 406, 407, 408,
736 409, 410, 412, 413, 414, 415, 416, 417, 418, 419,
737 420, 421, 422, 423, 424, 426, 428, 429, 430, 432,
739 433, 434, 434, 434, 434, 434, 434, 434, 434, 434,
740 434, 434, 434, 434, 434, 434, 435, 435, 437, 438,
741 439, 440, 441, 442, 443, 444, 446, 447, 449, 450,
742 451, 452, 454, 455, 457, 458, 459, 460, 462, 463,
743 465, 467, 468, 469, 470, 471, 473, 474, 476, 477,
744 478, 479, 481, 483, 484, 486, 487, 488, 490, 491,
745 492, 494, 496, 498, 499, 500, 501, 501, 502, 502,
746 502, 502, 502, 502, 502, 502, 502, 502, 502, 502,
747 502, 502, 502, 502, 503, 504, 506, 507, 508, 509,
748 511, 513, 514, 515, 517, 518, 519, 521, 522, 523,
750 524, 525, 527, 528, 529, 530, 531, 532, 533, 534,
751 536, 537, 538, 539, 540, 542, 542, 542, 543, 544,
752 544, 544, 545, 545, 545, 546, 546, 546, 546, 546,
753 546, 546, 546, 546, 548, 549, 550, 551, 553, 554,
754 555, 556, 557, 558, 560, 562, 563, 565, 566, 568,
755 570, 571, 573, 574, 576, 577, 579, 580, 580, 581,
756 582, 582, 582, 582, 582, 583, 583, 583, 583, 583,
757 583, 583, 583, 583, 585, 587, 589, 591, 593, 595,
758 597, 598, 599, 601, 603, 604, 605, 607, 607, 607,
759 607, 608, 609, 609, 609, 610, 611, 611, 611, 611,
761 611, 611, 613, 615, 616, 618, 618, 618, 619, 620,
762 620, 620, 620, 620, 622, 622, 623, 623, 624, 625,
763 626, 626
766 static const YY_CHAR yy_ec[256] =
767 { 0,
768 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
769 1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
770 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
771 1, 5, 1, 6, 7, 1, 1, 1, 8, 1,
772 1, 9, 10, 1, 11, 12, 13, 14, 15, 16,
773 17, 18, 19, 20, 19, 21, 22, 23, 1, 24,
774 25, 26, 27, 28, 29, 30, 30, 31, 32, 33,
775 34, 34, 34, 34, 34, 35, 34, 34, 36, 34,
776 34, 37, 38, 39, 40, 34, 34, 41, 34, 34,
777 1, 42, 1, 1, 34, 1, 43, 44, 45, 46,
779 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
780 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
781 67, 34, 1, 1, 1, 1, 1, 1, 1, 1,
782 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
783 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
784 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
785 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
786 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
787 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
788 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
790 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
791 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
792 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
793 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
794 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
795 1, 1, 1, 1, 1
798 static const YY_CHAR yy_meta[68] =
799 { 0,
800 1, 2, 3, 4, 2, 5, 1, 6, 1, 7,
801 7, 8, 1, 9, 9, 9, 9, 9, 9, 9,
802 10, 10, 1, 1, 1, 1, 11, 1, 12, 12,
803 13, 13, 12, 14, 14, 14, 14, 14, 14, 14,
804 14, 5, 15, 15, 12, 13, 13, 15, 14, 14,
805 14, 14, 14, 14, 14, 16, 14, 14, 14, 16,
806 14, 16, 17, 16, 14, 16, 14
809 static const flex_int16_t yy_base[664] =
810 { 0,
811 0, 66, 1500, 1501, 67, 1501, 1501, 64, 1457, 62,
812 80, 76, 95, 91, 1475, 1473, 1470, 1452, 0, 1465,
813 80, 1449, 1455, 77, 1434, 97, 61, 64, 81, 1443,
814 1432, 35, 1431, 100, 1444, 89, 93, 82, 108, 99,
815 111, 121, 104, 172, 178, 1459, 182, 162, 183, 192,
816 1477, 205, 223, 260, 202, 313, 1501, 224, 354, 103,
817 223, 1501, 94, 0, 252, 1501, 1501, 1501, 1428, 0,
818 1448, 210, 1440, 1429, 1440, 1418, 1427, 1410, 1414, 1418,
819 1413, 1430, 120, 1411, 1423, 1407, 1418, 1405, 1420, 1421,
820 1420, 135, 1407, 1401, 1407, 1403, 30, 202, 1404, 1399,
822 1412, 1403, 1394, 1393, 1407, 1391, 1392, 199, 1407, 1399,
823 1406, 156, 1391, 1387, 1388, 1394, 1381, 1385, 1386, 202,
824 1394, 1386, 1388, 1388, 1375, 255, 0, 211, 1501, 255,
825 345, 1385, 1389, 1383, 1373, 1407, 283, 224, 225, 296,
826 1501, 1423, 1422, 396, 1421, 227, 0, 293, 192, 1501,
827 291, 1501, 293, 0, 403, 344, 0, 1372, 1389, 280,
828 347, 412, 1418, 279, 1378, 1392, 1361, 1379, 0, 1361,
829 1366, 1372, 1358, 1359, 295, 1354, 1372, 1370, 1351, 1357,
830 1355, 1363, 1347, 1362, 1360, 1363, 1345, 1357, 1346, 1339,
831 418, 1358, 1351, 1356, 1338, 1334, 1334, 1344, 1347, 1328,
833 0, 1330, 253, 1327, 1336, 1328, 1342, 1324, 1326, 1325,
834 290, 1326, 1321, 1326, 1334, 1318, 1322, 1327, 1316, 1313,
835 1329, 1331, 1313, 1366, 1365, 1316, 1322, 1312, 1324, 474,
836 428, 1501, 1501, 441, 1358, 0, 488, 488, 1501, 1308,
837 1332, 360, 1357, 294, 529, 0, 1501, 0, 1317, 0,
838 1301, 1299, 1308, 1311, 0, 0, 1300, 1309, 301, 1308,
839 1297, 1290, 1298, 1290, 0, 1288, 1291, 1291, 1300, 1300,
840 1283, 1301, 0, 1283, 1280, 1321, 1324, 1321, 0, 1278,
841 1283, 0, 1287, 1278, 1280, 1282, 1268, 1269, 1287, 1267,
842 1285, 1284, 1275, 1274, 1277, 1266, 1275, 1278, 1258, 1263,
844 1273, 1260, 1271, 1270, 332, 447, 1258, 1264, 0, 1264,
845 0, 1250, 1230, 1274, 447, 1232, 1222, 1173, 1170, 1164,
846 1501, 267, 479, 1166, 1147, 1141, 1131, 352, 1501, 1182,
847 1501, 1176, 1121, 0, 544, 581, 1174, 1119, 1137, 0,
848 1135, 1131, 1117, 1127, 0, 1116, 1066, 1074, 1072, 1078,
849 0, 1041, 1040, 1041, 1040, 0, 0, 1044, 1030, 0,
850 0, 0, 0, 1041, 0, 1041, 1007, 1019, 1007, 1017,
851 0, 996, 995, 997, 994, 1009, 336, 993, 993, 990,
852 992, 0, 993, 977, 976, 982, 986, 978, 976, 976,
853 958, 976, 979, 976, 0, 0, 936, 928, 0, 933,
855 1501, 511, 404, 922, 435, 926, 972, 968, 917, 921,
856 911, 908, 887, 399, 616, 1501, 919, 0, 877, 856,
857 862, 849, 833, 830, 810, 0, 809, 0, 803, 817,
858 799, 0, 804, 0, 813, 791, 793, 0, 779, 0,
859 0, 754, 744, 763, 762, 0, 758, 0, 753, 760,
860 743, 0, 0, 740, 0, 738, 750, 0, 741, 747,
861 0, 0, 0, 746, 719, 736, 549, 1501, 563, 514,
862 461, 467, 577, 722, 738, 588, 693, 680, 687, 680,
863 665, 651, 718, 663, 652, 0, 653, 651, 646, 0,
864 0, 635, 619, 0, 628, 613, 0, 600, 596, 595,
866 587, 0, 578, 575, 542, 560, 559, 544, 551, 0,
867 542, 540, 524, 499, 0, 614, 581, 1501, 617, 647,
868 650, 1501, 550, 478, 1501, 683, 480, 478, 495, 484,
869 473, 513, 512, 0, 465, 449, 427, 0, 439, 417,
870 410, 407, 393, 0, 0, 389, 0, 346, 0, 0,
871 330, 0, 340, 0, 329, 0, 319, 675, 1501, 686,
872 337, 701, 688, 714, 1501, 718, 697, 524, 529, 567,
873 732, 294, 266, 0, 0, 0, 0, 0, 0, 0,
874 257, 237, 0, 0, 236, 151, 0, 728, 572, 708,
875 1501, 735, 754, 739, 1501, 757, 760, 184, 180, 573,
877 92, 0, 0, 99, 0, 765, 768, 1501, 770, 69,
878 772, 774, 0, 0, 786, 1501, 776, 1501, 779, 1501,
879 1501, 813, 830, 840, 845, 858, 874, 884, 897, 907,
880 914, 916, 931, 948, 960, 967, 976, 982, 999, 1011,
881 1018, 1025, 1035, 1049, 1059, 1069, 1081, 1095, 1106, 1118,
882 1133, 1150, 1166, 1176, 1185, 1196, 1212, 1223, 1240, 1257,
883 1273, 1284, 1301
886 static const flex_int16_t yy_def[664] =
887 { 0,
888 621, 1, 621, 621, 621, 621, 621, 622, 623, 621,
889 621, 621, 621, 624, 621, 621, 621, 621, 625, 625,
890 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
891 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
892 625, 625, 625, 621, 621, 621, 621, 622, 621, 626,
893 621, 627, 621, 621, 628, 621, 621, 629, 621, 13,
894 630, 621, 631, 632, 624, 621, 621, 621, 621, 625,
895 625, 633, 634, 625, 625, 625, 625, 625, 625, 625,
896 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
897 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
899 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
900 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
901 625, 625, 625, 625, 625, 621, 45, 45, 621, 45,
902 45, 621, 621, 621, 621, 621, 621, 622, 622, 622,
903 621, 621, 621, 621, 635, 54, 636, 628, 637, 621,
904 629, 621, 629, 59, 621, 631, 632, 621, 625, 633,
905 621, 638, 621, 621, 625, 625, 625, 625, 625, 625,
906 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
907 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
908 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
910 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
911 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
912 625, 625, 625, 639, 621, 621, 621, 621, 621, 621,
913 622, 621, 621, 621, 640, 636, 621, 637, 621, 621,
914 625, 621, 621, 633, 633, 641, 621, 642, 625, 625,
915 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
916 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
917 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
918 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
919 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
921 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
922 625, 625, 625, 639, 621, 621, 621, 621, 621, 230,
923 621, 230, 230, 621, 621, 621, 621, 622, 621, 621,
924 621, 621, 621, 625, 633, 633, 643, 625, 625, 625,
925 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
926 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
927 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
928 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
929 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
930 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
932 621, 644, 621, 621, 645, 621, 646, 621, 621, 621,
933 621, 621, 621, 633, 336, 621, 647, 625, 625, 625,
934 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
935 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
936 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
937 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
938 625, 625, 625, 625, 625, 625, 648, 621, 644, 649,
939 621, 645, 645, 621, 646, 621, 621, 621, 621, 621,
940 621, 336, 650, 625, 625, 625, 625, 625, 625, 625,
941 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
943 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
944 625, 625, 625, 625, 625, 648, 649, 621, 649, 651,
945 621, 621, 652, 621, 621, 653, 621, 621, 654, 621,
946 621, 633, 621, 625, 625, 625, 625, 625, 625, 625,
947 625, 625, 625, 625, 625, 625, 625, 625, 625, 625,
948 625, 625, 625, 625, 625, 625, 625, 651, 621, 651,
949 652, 655, 656, 657, 621, 653, 658, 621, 654, 654,
950 621, 621, 621, 625, 625, 625, 625, 625, 625, 625,
951 625, 625, 625, 625, 625, 625, 625, 655, 588, 656,
952 621, 656, 657, 658, 621, 658, 659, 660, 621, 621,
954 621, 625, 625, 625, 625, 661, 659, 621, 659, 660,
955 621, 662, 663, 625, 661, 621, 662, 621, 662, 621,
956 0, 621, 621, 621, 621, 621, 621, 621, 621, 621,
957 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
958 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
959 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
960 621, 621, 621
963 static const flex_int16_t yy_nxt[1569] =
964 { 0,
965 4, 5, 6, 7, 5, 8, 4, 9, 4, 4,
966 10, 11, 12, 13, 14, 14, 14, 14, 14, 14,
967 14, 14, 15, 16, 4, 17, 7, 18, 19, 19,
968 19, 19, 20, 19, 21, 22, 19, 19, 23, 19,
969 19, 4, 24, 25, 26, 27, 28, 29, 30, 31,
970 32, 19, 19, 33, 34, 35, 36, 37, 19, 38,
971 39, 40, 41, 42, 43, 19, 19, 44, 47, 49,
972 44, 47, 45, 53, 611, 54, 55, 55, 55, 55,
973 55, 55, 55, 55, 57, 72, 190, 73, 58, 96,
974 97, 191, 46, 56, 56, 56, 56, 56, 56, 56,
976 56, 56, 59, 155, 155, 50, 59, 85, 60, 60,
977 60, 60, 60, 60, 60, 61, 61, 86, 87, 88,
978 76, 62, 63, 91, 110, 62, 63, 89, 111, 90,
979 77, 92, 78, 104, 93, 64, 62, 63, 79, 81,
980 62, 63, 99, 621, 105, 614, 82, 613, 124, 107,
981 100, 106, 108, 83, 112, 109, 101, 113, 117, 84,
982 64, 119, 102, 122, 125, 118, 120, 49, 621, 114,
983 115, 121, 116, 126, 174, 175, 126, 123, 127, 128,
984 129, 129, 130, 47, 137, 598, 47, 137, 138, 611,
985 184, 131, 131, 131, 131, 131, 131, 131, 131, 131,
987 185, 237, 237, 50, 129, 140, 140, 140, 140, 140,
988 140, 140, 143, 59, 208, 161, 605, 209, 144, 144,
989 144, 144, 144, 144, 144, 132, 152, 153, 133, 49,
990 49, 134, 62, 63, 59, 135, 56, 56, 56, 56,
991 56, 56, 56, 56, 56, 145, 192, 62, 63, 203,
992 153, 162, 217, 62, 63, 204, 126, 193, 621, 126,
993 224, 127, 218, 59, 621, 50, 50, 621, 62, 63,
994 145, 59, 407, 146, 146, 146, 146, 146, 146, 146,
995 61, 61, 62, 63, 137, 161, 247, 137, 138, 604,
996 62, 63, 621, 152, 153, 152, 153, 62, 63, 161,
998 147, 49, 621, 603, 59, 62, 63, 291, 621, 231,
999 231, 231, 231, 231, 231, 231, 292, 153, 602, 153,
1000 621, 162, 601, 62, 63, 147, 56, 56, 56, 56,
1001 56, 56, 56, 56, 56, 162, 600, 50, 62, 63,
1002 300, 248, 562, 62, 149, 150, 621, 150, 242, 225,
1003 258, 242, 301, 621, 621, 259, 260, 49, 62, 149,
1004 150, 242, 345, 346, 242, 587, 150, 154, 154, 154,
1005 154, 154, 154, 154, 154, 154, 239, 388, 239, 586,
1006 446, 243, 389, 585, 62, 149, 150, 390, 150, 391,
1007 584, 239, 621, 50, 243, 621, 447, 239, 621, 62,
1009 149, 150, 621, 233, 161, 470, 583, 150, 470, 234,
1010 234, 234, 234, 234, 234, 234, 156, 156, 156, 156,
1011 156, 156, 156, 156, 156, 245, 245, 245, 245, 245,
1012 245, 245, 276, 49, 277, 582, 472, 278, 279, 472,
1013 162, 328, 328, 328, 328, 328, 328, 328, 329, 401,
1014 401, 402, 581, 580, 330, 330, 330, 330, 330, 330,
1015 330, 392, 520, 393, 280, 520, 394, 395, 472, 50,
1016 579, 472, 578, 401, 246, 320, 321, 321, 322, 563,
1017 621, 567, 563, 408, 567, 577, 576, 323, 323, 323,
1018 323, 323, 323, 323, 323, 323, 569, 621, 621, 570,
1020 321, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1021 575, 574, 467, 468, 468, 467, 518, 519, 161, 416,
1022 150, 324, 150, 573, 325, 597, 621, 326, 597, 621,
1023 569, 327, 621, 570, 161, 150, 621, 468, 572, 568,
1024 519, 150, 335, 335, 335, 335, 335, 335, 335, 161,
1025 467, 468, 468, 467, 162, 562, 557, 414, 414, 414,
1026 414, 414, 414, 414, 467, 468, 468, 467, 569, 556,
1027 162, 570, 598, 606, 612, 468, 606, 612, 521, 522,
1028 522, 521, 523, 518, 519, 162, 161, 555, 554, 468,
1029 525, 525, 526, 553, 415, 415, 415, 415, 415, 415,
1031 415, 415, 415, 522, 552, 551, 550, 519, 549, 415,
1032 415, 415, 415, 415, 525, 467, 468, 468, 467, 518,
1033 519, 548, 162, 415, 415, 415, 415, 415, 415, 482,
1034 482, 482, 482, 482, 482, 482, 482, 482, 547, 546,
1035 468, 545, 544, 519, 482, 482, 482, 482, 482, 559,
1036 560, 521, 522, 522, 521, 523, 543, 542, 482, 482,
1037 482, 482, 482, 482, 532, 532, 532, 532, 532, 532,
1038 532, 532, 532, 560, 541, 540, 522, 559, 560, 532,
1039 532, 532, 532, 532, 564, 565, 565, 564, 559, 560,
1040 591, 592, 539, 532, 532, 532, 532, 532, 532, 595,
1042 596, 560, 588, 522, 522, 588, 538, 537, 536, 565,
1043 591, 592, 560, 535, 592, 564, 565, 565, 564, 564,
1044 565, 565, 564, 596, 534, 416, 531, 522, 530, 588,
1045 522, 522, 588, 529, 592, 528, 599, 591, 592, 527,
1046 565, 595, 596, 476, 565, 571, 571, 571, 571, 571,
1047 571, 571, 571, 571, 522, 621, 565, 565, 621, 595,
1048 596, 592, 608, 609, 524, 596, 606, 522, 522, 606,
1049 608, 609, 608, 609, 616, 616, 618, 619, 618, 619,
1050 565, 618, 619, 596, 515, 514, 609, 621, 522, 522,
1051 621, 522, 513, 512, 609, 511, 609, 510, 616, 509,
1053 619, 508, 619, 507, 506, 619, 505, 504, 503, 502,
1054 501, 500, 522, 48, 48, 48, 48, 48, 48, 48,
1055 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
1056 51, 51, 499, 51, 51, 51, 51, 51, 51, 51,
1057 51, 51, 51, 51, 51, 51, 51, 65, 65, 65,
1058 498, 497, 65, 70, 70, 496, 70, 70, 70, 70,
1059 70, 70, 139, 139, 495, 494, 139, 493, 139, 492,
1060 491, 490, 139, 139, 142, 142, 489, 142, 142, 142,
1061 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
1062 142, 148, 148, 148, 488, 487, 148, 151, 151, 151,
1064 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1065 151, 151, 151, 151, 61, 61, 61, 486, 485, 61,
1066 156, 484, 156, 156, 157, 157, 416, 157, 157, 481,
1067 157, 160, 160, 160, 160, 160, 160, 160, 160, 160,
1068 160, 160, 160, 160, 160, 160, 160, 160, 163, 163,
1069 480, 163, 163, 163, 163, 163, 163, 163, 163, 163,
1070 163, 163, 163, 163, 163, 235, 479, 478, 235, 235,
1071 477, 235, 235, 407, 235, 236, 236, 476, 236, 236,
1072 474, 236, 238, 471, 238, 238, 244, 244, 466, 465,
1073 244, 464, 244, 463, 462, 461, 244, 244, 244, 314,
1075 314, 314, 314, 314, 314, 314, 314, 314, 314, 314,
1076 314, 314, 314, 314, 314, 314, 332, 460, 459, 332,
1077 332, 458, 332, 332, 457, 332, 336, 336, 456, 336,
1078 336, 455, 336, 337, 337, 454, 337, 337, 453, 337,
1079 417, 452, 451, 417, 417, 450, 417, 417, 449, 417,
1080 469, 469, 469, 448, 445, 444, 443, 469, 469, 469,
1081 473, 442, 441, 440, 439, 438, 437, 473, 473, 475,
1082 475, 475, 475, 475, 475, 475, 475, 475, 475, 475,
1083 475, 475, 475, 475, 475, 475, 483, 436, 435, 483,
1084 483, 434, 483, 483, 433, 483, 516, 516, 516, 432,
1086 431, 430, 429, 516, 516, 516, 517, 517, 517, 517,
1087 517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
1088 517, 517, 517, 533, 428, 427, 533, 533, 426, 533,
1089 533, 425, 533, 558, 558, 558, 558, 558, 558, 558,
1090 558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
1091 561, 561, 561, 561, 561, 561, 561, 561, 561, 561,
1092 561, 561, 561, 561, 561, 561, 561, 566, 566, 566,
1093 424, 423, 422, 421, 566, 566, 566, 571, 420, 419,
1094 418, 416, 413, 331, 571, 571, 589, 589, 589, 329,
1095 412, 411, 410, 589, 589, 589, 590, 590, 590, 590,
1097 590, 590, 590, 590, 590, 590, 590, 590, 590, 590,
1098 590, 590, 590, 593, 593, 593, 409, 621, 406, 405,
1099 593, 593, 593, 594, 594, 594, 594, 594, 594, 594,
1100 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
1101 607, 607, 607, 607, 607, 607, 607, 607, 607, 607,
1102 607, 607, 607, 607, 607, 607, 607, 610, 610, 610,
1103 610, 610, 610, 610, 610, 610, 610, 610, 610, 610,
1104 610, 610, 610, 610, 615, 615, 615, 404, 403, 315,
1105 400, 615, 615, 615, 617, 617, 617, 617, 617, 617,
1106 617, 617, 617, 617, 617, 617, 617, 617, 617, 617,
1108 617, 620, 620, 620, 620, 620, 620, 620, 620, 399,
1109 398, 620, 397, 396, 387, 386, 385, 384, 383, 382,
1110 381, 380, 379, 378, 377, 376, 375, 374, 373, 372,
1111 371, 370, 369, 368, 367, 366, 365, 364, 363, 362,
1112 361, 360, 359, 358, 357, 356, 355, 354, 353, 352,
1113 351, 350, 349, 348, 347, 344, 343, 342, 341, 340,
1114 339, 338, 72, 334, 333, 331, 319, 318, 317, 316,
1115 224, 315, 313, 312, 311, 310, 309, 308, 307, 306,
1116 305, 304, 303, 302, 299, 298, 297, 296, 295, 294,
1117 293, 290, 289, 288, 287, 286, 285, 284, 283, 282,
1119 281, 275, 274, 273, 272, 271, 270, 269, 268, 267,
1120 266, 265, 264, 263, 262, 261, 257, 256, 255, 254,
1121 253, 252, 251, 250, 249, 247, 241, 240, 232, 232,
1122 232, 230, 229, 228, 227, 226, 223, 222, 221, 220,
1123 219, 216, 215, 214, 213, 212, 211, 210, 207, 206,
1124 205, 202, 201, 200, 199, 198, 197, 196, 195, 194,
1125 189, 188, 187, 186, 183, 182, 181, 180, 179, 178,
1126 177, 176, 173, 172, 171, 170, 169, 168, 167, 166,
1127 165, 164, 159, 158, 141, 136, 103, 98, 95, 94,
1128 80, 75, 74, 71, 69, 68, 67, 66, 52, 621,
1130 3, 621, 621, 621, 621, 621, 621, 621, 621, 621,
1131 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
1132 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
1133 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
1134 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
1135 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
1136 621, 621, 621, 621, 621, 621, 621, 621
1139 static const flex_int16_t yy_chk[1569] =
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, 1, 1, 1,
1147 1, 1, 1, 1, 1, 1, 1, 2, 5, 8,
1148 2, 5, 2, 10, 610, 10, 10, 10, 10, 10,
1149 10, 10, 10, 10, 12, 21, 97, 21, 12, 32,
1150 32, 97, 2, 11, 11, 11, 11, 11, 11, 11,
1152 11, 11, 14, 63, 63, 8, 13, 27, 13, 13,
1153 13, 13, 13, 13, 13, 13, 13, 27, 28, 28,
1154 24, 14, 14, 29, 38, 13, 13, 28, 38, 28,
1155 24, 29, 24, 36, 29, 13, 14, 14, 24, 26,
1156 13, 13, 34, 60, 36, 604, 26, 601, 43, 37,
1157 34, 36, 37, 26, 39, 37, 34, 39, 40, 26,
1158 13, 41, 34, 42, 43, 40, 41, 48, 60, 39,
1159 39, 41, 39, 44, 83, 83, 44, 42, 44, 45,
1160 45, 45, 45, 47, 49, 599, 47, 49, 49, 598,
1161 92, 45, 45, 45, 45, 45, 45, 45, 45, 45,
1163 92, 149, 149, 48, 45, 50, 50, 50, 50, 50,
1164 50, 50, 52, 55, 112, 72, 586, 112, 52, 52,
1165 52, 52, 52, 52, 52, 45, 58, 58, 45, 138,
1166 139, 45, 55, 55, 61, 45, 53, 53, 53, 53,
1167 53, 53, 53, 53, 53, 52, 98, 55, 55, 108,
1168 58, 72, 120, 61, 61, 108, 126, 98, 128, 126,
1169 130, 126, 120, 65, 128, 138, 139, 146, 61, 61,
1170 52, 54, 322, 54, 54, 54, 54, 54, 54, 54,
1171 54, 54, 65, 65, 137, 160, 164, 137, 137, 585,
1172 54, 54, 146, 151, 151, 153, 153, 65, 65, 244,
1174 54, 140, 130, 582, 148, 54, 54, 203, 130, 140,
1175 140, 140, 140, 140, 140, 140, 203, 151, 581, 153,
1176 322, 160, 573, 148, 148, 54, 56, 56, 56, 56,
1177 56, 56, 56, 56, 56, 244, 572, 140, 148, 148,
1178 211, 164, 561, 56, 56, 56, 131, 56, 161, 131,
1179 175, 161, 211, 156, 156, 175, 175, 328, 56, 56,
1180 56, 242, 259, 259, 242, 557, 56, 59, 59, 59,
1181 59, 59, 59, 59, 59, 59, 156, 305, 156, 555,
1182 377, 161, 305, 553, 59, 59, 59, 305, 59, 305,
1183 551, 156, 131, 328, 242, 131, 377, 156, 131, 59,
1185 59, 59, 131, 144, 414, 403, 548, 59, 403, 144,
1186 144, 144, 144, 144, 144, 144, 155, 155, 155, 155,
1187 155, 155, 155, 155, 155, 162, 162, 162, 162, 162,
1188 162, 162, 191, 231, 191, 546, 405, 191, 191, 405,
1189 414, 231, 231, 231, 231, 231, 231, 231, 234, 315,
1190 315, 315, 543, 542, 234, 234, 234, 234, 234, 234,
1191 234, 306, 471, 306, 191, 471, 306, 306, 472, 231,
1192 541, 472, 540, 315, 162, 230, 230, 230, 230, 524,
1193 323, 527, 524, 323, 527, 539, 537, 230, 230, 230,
1194 230, 230, 230, 230, 230, 230, 529, 238, 238, 529,
1196 230, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1197 536, 535, 402, 402, 402, 402, 470, 470, 532, 533,
1198 238, 230, 238, 531, 230, 568, 323, 230, 568, 323,
1199 569, 230, 323, 569, 245, 238, 323, 402, 530, 528,
1200 470, 238, 245, 245, 245, 245, 245, 245, 245, 335,
1201 467, 467, 467, 467, 532, 523, 514, 335, 335, 335,
1202 335, 335, 335, 335, 469, 469, 469, 469, 570, 513,
1203 245, 570, 570, 589, 600, 467, 589, 600, 473, 473,
1204 473, 473, 473, 517, 517, 335, 336, 512, 511, 469,
1205 476, 476, 476, 509, 336, 336, 336, 336, 336, 336,
1207 336, 336, 336, 473, 508, 507, 506, 517, 505, 336,
1208 336, 336, 336, 336, 476, 516, 516, 516, 516, 519,
1209 519, 504, 336, 336, 336, 336, 336, 336, 336, 415,
1210 415, 415, 415, 415, 415, 415, 415, 415, 503, 501,
1211 516, 500, 499, 519, 415, 415, 415, 415, 415, 520,
1212 520, 521, 521, 521, 521, 521, 498, 496, 415, 415,
1213 415, 415, 415, 415, 482, 482, 482, 482, 482, 482,
1214 482, 482, 482, 520, 495, 493, 521, 558, 558, 482,
1215 482, 482, 482, 482, 526, 526, 526, 526, 560, 560,
1216 563, 563, 492, 482, 482, 482, 482, 482, 482, 567,
1218 567, 558, 562, 562, 562, 562, 489, 488, 487, 526,
1219 590, 590, 560, 485, 563, 564, 564, 564, 564, 566,
1220 566, 566, 566, 567, 484, 483, 481, 562, 480, 588,
1221 588, 588, 588, 479, 590, 478, 571, 592, 592, 477,
1222 564, 594, 594, 475, 566, 571, 571, 571, 571, 571,
1223 571, 571, 571, 571, 588, 593, 593, 593, 593, 596,
1224 596, 592, 597, 597, 474, 594, 606, 606, 606, 606,
1225 607, 607, 609, 609, 611, 611, 612, 612, 617, 617,
1226 593, 619, 619, 596, 466, 465, 597, 615, 615, 615,
1227 615, 606, 464, 460, 607, 459, 609, 457, 611, 456,
1229 612, 454, 617, 451, 450, 619, 449, 447, 445, 444,
1230 443, 442, 615, 622, 622, 622, 622, 622, 622, 622,
1231 622, 622, 622, 622, 622, 622, 622, 622, 622, 622,
1232 623, 623, 439, 623, 623, 623, 623, 623, 623, 623,
1233 623, 623, 623, 623, 623, 623, 623, 624, 624, 624,
1234 437, 436, 624, 625, 625, 435, 625, 625, 625, 625,
1235 625, 625, 626, 626, 433, 431, 626, 430, 626, 429,
1236 427, 425, 626, 626, 627, 627, 424, 627, 627, 627,
1237 627, 627, 627, 627, 627, 627, 627, 627, 627, 627,
1238 627, 628, 628, 628, 423, 422, 628, 629, 629, 629,
1240 629, 629, 629, 629, 629, 629, 629, 629, 629, 629,
1241 629, 629, 629, 629, 630, 630, 630, 421, 420, 630,
1242 631, 419, 631, 631, 632, 632, 417, 632, 632, 413,
1243 632, 633, 633, 633, 633, 633, 633, 633, 633, 633,
1244 633, 633, 633, 633, 633, 633, 633, 633, 634, 634,
1245 412, 634, 634, 634, 634, 634, 634, 634, 634, 634,
1246 634, 634, 634, 634, 634, 635, 411, 410, 635, 635,
1247 409, 635, 635, 408, 635, 636, 636, 407, 636, 636,
1248 406, 636, 637, 404, 637, 637, 638, 638, 400, 398,
1249 638, 397, 638, 394, 393, 392, 638, 638, 638, 639,
1251 639, 639, 639, 639, 639, 639, 639, 639, 639, 639,
1252 639, 639, 639, 639, 639, 639, 640, 391, 390, 640,
1253 640, 389, 640, 640, 388, 640, 641, 641, 387, 641,
1254 641, 386, 641, 642, 642, 385, 642, 642, 384, 642,
1255 643, 383, 381, 643, 643, 380, 643, 643, 379, 643,
1256 644, 644, 644, 378, 376, 375, 374, 644, 644, 644,
1257 645, 373, 372, 370, 369, 368, 367, 645, 645, 646,
1258 646, 646, 646, 646, 646, 646, 646, 646, 646, 646,
1259 646, 646, 646, 646, 646, 646, 647, 366, 364, 647,
1260 647, 359, 647, 647, 358, 647, 648, 648, 648, 355,
1262 354, 353, 352, 648, 648, 648, 649, 649, 649, 649,
1263 649, 649, 649, 649, 649, 649, 649, 649, 649, 649,
1264 649, 649, 649, 650, 350, 349, 650, 650, 348, 650,
1265 650, 347, 650, 651, 651, 651, 651, 651, 651, 651,
1266 651, 651, 651, 651, 651, 651, 651, 651, 651, 651,
1267 652, 652, 652, 652, 652, 652, 652, 652, 652, 652,
1268 652, 652, 652, 652, 652, 652, 652, 653, 653, 653,
1269 346, 344, 343, 342, 653, 653, 653, 654, 341, 339,
1270 338, 337, 333, 332, 654, 654, 655, 655, 655, 330,
1271 327, 326, 325, 655, 655, 655, 656, 656, 656, 656,
1273 656, 656, 656, 656, 656, 656, 656, 656, 656, 656,
1274 656, 656, 656, 657, 657, 657, 324, 320, 319, 318,
1275 657, 657, 657, 658, 658, 658, 658, 658, 658, 658,
1276 658, 658, 658, 658, 658, 658, 658, 658, 658, 658,
1277 659, 659, 659, 659, 659, 659, 659, 659, 659, 659,
1278 659, 659, 659, 659, 659, 659, 659, 660, 660, 660,
1279 660, 660, 660, 660, 660, 660, 660, 660, 660, 660,
1280 660, 660, 660, 660, 661, 661, 661, 317, 316, 314,
1281 313, 661, 661, 661, 662, 662, 662, 662, 662, 662,
1282 662, 662, 662, 662, 662, 662, 662, 662, 662, 662,
1284 662, 663, 663, 663, 663, 663, 663, 663, 663, 312,
1285 310, 663, 308, 307, 304, 303, 302, 301, 300, 299,
1286 298, 297, 296, 295, 294, 293, 292, 291, 290, 289,
1287 288, 287, 286, 285, 284, 283, 281, 280, 278, 277,
1288 276, 275, 274, 272, 271, 270, 269, 268, 267, 266,
1289 264, 263, 262, 261, 260, 258, 257, 254, 253, 252,
1290 251, 249, 243, 241, 240, 235, 229, 228, 227, 226,
1291 225, 224, 223, 222, 221, 220, 219, 218, 217, 216,
1292 215, 214, 213, 212, 210, 209, 208, 207, 206, 205,
1293 204, 202, 200, 199, 198, 197, 196, 195, 194, 193,
1295 192, 190, 189, 188, 187, 186, 185, 184, 183, 182,
1296 181, 180, 179, 178, 177, 176, 174, 173, 172, 171,
1297 170, 168, 167, 166, 165, 163, 159, 158, 145, 143,
1298 142, 136, 135, 134, 133, 132, 125, 124, 123, 122,
1299 121, 119, 118, 117, 116, 115, 114, 113, 111, 110,
1300 109, 107, 106, 105, 104, 103, 102, 101, 100, 99,
1301 96, 95, 94, 93, 91, 90, 89, 88, 87, 86,
1302 85, 84, 82, 81, 80, 79, 78, 77, 76, 75,
1303 74, 73, 71, 69, 51, 46, 35, 33, 31, 30,
1304 25, 23, 22, 20, 18, 17, 16, 15, 9, 3,
1306 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
1307 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
1308 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
1309 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
1310 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
1311 621, 621, 621, 621, 621, 621, 621, 621, 621, 621,
1312 621, 621, 621, 621, 621, 621, 621, 621
1315 extern int yy_flex_debug;
1316 int yy_flex_debug = 0;
1318 static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
1319 static char *yy_full_match;
1320 static int yy_lp;
1321 #define REJECT \
1323 *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ \
1324 yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
1325 ++(yy_lp); \
1326 goto find_rule; \
1329 #define yymore() yymore_used_but_not_detected
1330 #define YY_MORE_ADJ 0
1331 #define YY_RESTORE_YY_MORE_OFFSET
1332 #ifndef YYLMAX
1333 #define YYLMAX 8192
1334 #endif
1336 char yytext[YYLMAX];
1337 char *yytext_ptr;
1338 #line 1 "fe/idl.ll"
1339 #line 2 "fe/idl.ll"
1342 COPYRIGHT
1344 Copyright 1992, 1993, 1994 Sun Microsystems, Inc. Printed in the United
1345 States of America. All Rights Reserved.
1347 This product is protected by copyright and distributed under the following
1348 license restricting its use.
1350 The Interface Definition Language Compiler Front End (CFE) is made
1351 available for your use provided that you include this license and copyright
1352 notice on all media and documentation and the software program in which
1353 this product is incorporated in whole or part. You may copy and extend
1354 functionality (but may not remove functionality) of the Interface
1355 Definition Language CFE without charge, but you are not authorized to
1356 license or distribute it to anyone else except as part of a product or
1357 program developed by you or with the express written consent of Sun
1358 Microsystems, Inc. ("Sun").
1360 The names of Sun Microsystems, Inc. and any of its subsidiaries or
1361 affiliates may not be used in advertising or publicity pertaining to
1362 distribution of Interface Definition Language CFE as permitted herein.
1364 This license is effective until terminated by Sun for failure to comply
1365 with this license. Upon termination, you shall destroy or return all code
1366 and documentation for the Interface Definition Language CFE.
1368 IDL_INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
1369 IDL_ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
1370 FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
1371 DEALING, USAGE OR TRADE PRACTICE.
1373 IDL_INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
1374 IDL_ANY OBLIGATION ON THE PART OF Sun OR IDL_ANY OF ITS SUBSIDIARIES OR AFFILIATES
1375 TO ASSIST IDL_IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
1377 SUN OR IDL_ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
1378 RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR IDL_ANY PATENTS BY
1379 IDL_INTERFACE DEFINITION LANGUAGE CFE OR IDL_ANY PART THEREOF.
1381 IDL_IN NO EVENT WILL SUN OR IDL_ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
1382 IDL_ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
1383 DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
1385 Use, duplication, or disclosure by the government is subject to
1386 restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
1387 Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
1388 52.227-19.
1390 Sun, Sun Microsystems and the Sun logo are trademarks or registered
1391 trademarks of Sun Microsystems, Inc.
1393 SunSoft, Inc.
1394 2550 Garcia Avenue
1395 Mountain View, California 94043
1397 NOTE:
1399 SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
1400 trademarks or registered trademarks of Sun Microsystems, Inc.
1405 * idl.ll - Lexical scanner for IDL
1408 #include "global_extern.h"
1409 #include "nr_extern.h"
1410 #include "utl_strlist.h"
1411 #include "utl_exprlist.h"
1412 #include "utl_labellist.h"
1413 #include "utl_decllist.h"
1414 #include "utl_string.h"
1415 #include "utl_err.h"
1416 #include "ast_union_label.h"
1417 #include "ast_field.h"
1418 #include "ast_expression.h"
1419 #include "ast_argument.h"
1420 #include "ast_operation.h"
1421 #include "ast_root.h"
1422 #include "fe_interface_header.h"
1423 #include "fe_obv_header.h"
1424 #include "fe_component_header.h"
1425 #include "fe_home_header.h"
1426 #include "fe_private.h"
1427 #include "fe_extern.h"
1428 #include "ast_annotation_appl.h"
1429 #include "idl.tab.hpp"
1431 static char * idl_wstring_escape_reader (char *);
1432 static ACE_CDR::WChar idl_wchar_escape_reader (char *);
1433 static ACE_CDR::Char idl_escape_reader (char *);
1434 static ACE_CDR::Double idl_atof (char *);
1435 static ACE_CDR::LongLong idl_atoi (char *, long);
1436 static ACE_CDR::ULongLong idl_atoui (char *, long);
1437 static void idl_parse_line_and_file (char *);
1438 static void idl_store_pragma (char *);
1439 static char * idl_get_pragma_string (char *);
1440 static bool idl_valid_version (char *);
1441 static AST_Decl * idl_find_node (const char *);
1443 #define ace_yytext yytext
1445 #ifdef USE_MCPP_BUFFER_LEXING
1446 #include "mcpp_yyinput.h"
1447 #endif /*USE_MCPP_BUFFER_LEXING*/
1449 #if defined __ANDROID__ && defined ECHO
1450 #undef ECHO
1451 #endif
1453 #line 1456 "fe/idl.yy.cpp"
1454 /* SO we don't choke on files that use \r\n */
1455 #line 1458 "fe/idl.yy.cpp"
1457 #define INITIAL 0
1459 #ifndef YY_NO_UNISTD_H
1460 /* Special case for "unistd.h", since it is non-ANSI. We include it way
1461 * down here because we want the user's section 1 to have been scanned first.
1462 * The user has a chance to override it with an option.
1464 #include "ace/os_include/os_ctype.h"
1465 #endif
1467 #ifndef YY_EXTRA_TYPE
1468 #define YY_EXTRA_TYPE void *
1469 #endif
1471 static int yy_init_globals ( void );
1473 /* Accessor methods to globals.
1474 These are made visible to non-reentrant scanners for convenience. */
1476 int yylex_destroy ( void );
1478 int yyget_debug ( void );
1480 void yyset_debug ( int debug_flag );
1482 YY_EXTRA_TYPE yyget_extra ( void );
1484 void yyset_extra ( YY_EXTRA_TYPE user_defined );
1486 FILE *yyget_in ( void );
1488 void yyset_in ( FILE * _in_str );
1490 FILE *yyget_out ( void );
1492 void yyset_out ( FILE * _out_str );
1494 int yyget_leng ( void );
1496 char *yyget_text ( void );
1498 int yyget_lineno ( void );
1500 void yyset_lineno ( int _line_number );
1502 /* Macros after this point can all be overridden by user definitions in
1503 * section 1.
1506 #ifndef YY_SKIP_YYWRAP
1507 #ifdef __cplusplus
1508 extern "C" int yywrap ( void );
1509 #else
1510 extern int yywrap ( void );
1511 #endif
1512 #endif
1514 #ifndef YY_NO_UNPUT
1516 static void yyunput ( int c, char *buf_ptr );
1518 #endif
1520 #ifndef yytext_ptr
1521 static void yy_flex_strncpy ( char *, const char *, int );
1522 #endif
1524 #ifdef YY_NEED_STRLEN
1525 static int yy_flex_strlen ( const char * );
1526 #endif
1528 #ifndef YY_NO_INPUT
1529 #ifdef __cplusplus
1530 static int yyinput ( void );
1531 #else
1532 static int input ( void );
1533 #endif
1535 #endif
1537 /* Amount of stuff to slurp up with each read. */
1538 #ifndef YY_READ_BUF_SIZE
1539 #ifdef __ia64__
1540 /* On IA-64, the buffer size is 16k, not 8k */
1541 #define YY_READ_BUF_SIZE 16384
1542 #else
1543 #define YY_READ_BUF_SIZE 8192
1544 #endif /* __ia64__ */
1545 #endif
1547 /* Copy whatever the last rule matched to the standard output. */
1548 #ifndef ECHO
1549 /* This used to be an fputs(), but since the string might contain NUL's,
1550 * we now use fwrite().
1552 #define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
1553 #endif
1555 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
1556 * is returned in "result".
1558 #ifndef YY_INPUT
1559 #define YY_INPUT(buf,result,max_size) \
1560 if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
1562 int c = '*'; \
1563 int n; \
1564 for ( n = 0; n < max_size && \
1565 (c = ACE_OS::getc( yyin )) != EOF && c != '\n'; ++n ) \
1566 buf[n] = (char) c; \
1567 if ( c == '\n' ) \
1568 buf[n++] = (char) c; \
1569 if ( c == EOF && ferror( yyin ) ) \
1570 YY_FATAL_ERROR( "input in flex scanner failed" ); \
1571 result = n; \
1573 else \
1575 errno=0; \
1576 while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
1578 if( errno != EINTR) \
1580 YY_FATAL_ERROR( "input in flex scanner failed" ); \
1581 break; \
1583 errno=0; \
1584 clearerr(yyin); \
1589 #endif
1591 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1592 * we don't want an extra ';' after the "return" because that will cause
1593 * some compilers to complain about unreachable statements.
1595 #ifndef yyterminate
1596 #define yyterminate() return YY_NULL
1597 #endif
1599 /* Number of entries by which start-condition stack grows. */
1600 #ifndef YY_START_STACK_INCR
1601 #define YY_START_STACK_INCR 25
1602 #endif
1604 /* Report a fatal error. */
1605 #ifndef YY_FATAL_ERROR
1606 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
1607 #endif
1609 /* end tables serialization structures and prototypes */
1611 /* Default declaration of generated scanner - a define so the user can
1612 * easily add parameters.
1614 #ifndef YY_DECL
1615 #define YY_DECL_IS_OURS 1
1617 extern int yylex (void);
1619 #define YY_DECL int yylex (void)
1620 #endif /* !YY_DECL */
1622 /* Code executed at the beginning of each rule, after yytext and yyleng
1623 * have been set up.
1625 #ifndef YY_USER_ACTION
1626 #define YY_USER_ACTION
1627 #endif
1629 /* Code executed at the end of each rule. */
1630 #ifndef YY_BREAK
1631 #define YY_BREAK /*LINTED*/break;
1632 #endif
1634 #define YY_RULE_SETUP \
1635 if ( yyleng > 0 ) \
1636 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
1637 (yytext[yyleng - 1] == '\n'); \
1638 YY_USER_ACTION
1640 /** The main scanner function which does all the work.
1642 YY_DECL
1644 yy_state_type yy_current_state;
1645 char *yy_cp, *yy_bp;
1646 int yy_act;
1648 if ( !(yy_init) )
1650 (yy_init) = 1;
1652 #ifdef YY_USER_INIT
1653 YY_USER_INIT;
1654 #endif
1656 /* Create the reject buffer large enough to save one state per allowed character. */
1657 if ( ! (yy_state_buf) )
1658 (yy_state_buf) = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE );
1659 if ( ! (yy_state_buf) )
1660 YY_FATAL_ERROR( "out of dynamic memory in yylex()" );
1662 if ( ! (yy_start) )
1663 (yy_start) = 1; /* first start state */
1665 if ( ! yyin )
1666 yyin = stdin;
1668 if ( ! yyout )
1669 yyout = stdout;
1671 if ( ! YY_CURRENT_BUFFER ) {
1672 yyensure_buffer_stack ();
1673 YY_CURRENT_BUFFER_LVALUE =
1674 yy_create_buffer( yyin, YY_BUF_SIZE );
1677 yy_load_buffer_state( );
1681 #line 123 "fe/idl.ll"
1684 #line 1687 "fe/idl.yy.cpp"
1686 while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
1688 yy_cp = (yy_c_buf_p);
1690 /* Support of yytext. */
1691 *yy_cp = (yy_hold_char);
1693 /* yy_bp points to the position in yy_ch_buf of the start of
1694 * the current run.
1696 yy_bp = yy_cp;
1698 yy_current_state = (yy_start);
1699 yy_current_state += YY_AT_BOL();
1701 (yy_state_ptr) = (yy_state_buf);
1702 *(yy_state_ptr)++ = yy_current_state;
1704 yy_match:
1707 YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
1708 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1710 yy_current_state = (int) yy_def[yy_current_state];
1711 if ( yy_current_state >= 622 )
1712 yy_c = yy_meta[yy_c];
1714 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
1715 *(yy_state_ptr)++ = yy_current_state;
1716 ++yy_cp;
1718 while ( yy_current_state != 621 );
1720 yy_find_action:
1721 yy_current_state = *--(yy_state_ptr);
1722 (yy_lp) = yy_accept[yy_current_state];
1724 find_rule: /* we branch to this label when backing up */
1726 for ( ; ; ) /* until we find what rule we matched */
1728 if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
1730 yy_act = yy_acclist[(yy_lp)];
1732 (yy_full_match) = yy_cp;
1733 break;
1736 --yy_cp;
1737 yy_current_state = *--(yy_state_ptr);
1738 (yy_lp) = yy_accept[yy_current_state];
1741 YY_DO_BEFORE_ACTION;
1743 do_action: /* This label is used only to access EOF actions. */
1745 switch ( yy_act )
1746 { /* beginning of action switch */
1747 case 1:
1748 YY_RULE_SETUP
1749 #line 125 "fe/idl.ll"
1750 return IDL_ANY;
1751 YY_BREAK
1752 case 2:
1753 YY_RULE_SETUP
1754 #line 126 "fe/idl.ll"
1755 return IDL_OBJECT;
1756 YY_BREAK
1757 case 3:
1758 YY_RULE_SETUP
1759 #line 127 "fe/idl.ll"
1760 return IDL_MODULE;
1761 YY_BREAK
1762 case 4:
1763 YY_RULE_SETUP
1764 #line 128 "fe/idl.ll"
1765 return IDL_RAISES;
1766 YY_BREAK
1767 case 5:
1768 YY_RULE_SETUP
1769 #line 129 "fe/idl.ll"
1770 return IDL_READONLY;
1771 YY_BREAK
1772 case 6:
1773 YY_RULE_SETUP
1774 #line 130 "fe/idl.ll"
1775 return IDL_ATTRIBUTE;
1776 YY_BREAK
1777 case 7:
1778 YY_RULE_SETUP
1779 #line 131 "fe/idl.ll"
1780 return IDL_EXCEPTION;
1781 YY_BREAK
1782 case 8:
1783 YY_RULE_SETUP
1784 #line 132 "fe/idl.ll"
1785 return IDL_CONTEXT;
1786 YY_BREAK
1787 case 9:
1788 YY_RULE_SETUP
1789 #line 133 "fe/idl.ll"
1790 return IDL_INTERFACE;
1791 YY_BREAK
1792 case 10:
1793 YY_RULE_SETUP
1794 #line 134 "fe/idl.ll"
1795 return IDL_CONST;
1796 YY_BREAK
1797 case 11:
1798 YY_RULE_SETUP
1799 #line 135 "fe/idl.ll"
1800 return IDL_TYPEDEF;
1801 YY_BREAK
1802 case 12:
1803 YY_RULE_SETUP
1804 #line 136 "fe/idl.ll"
1805 return IDL_STRUCT;
1806 YY_BREAK
1807 case 13:
1808 YY_RULE_SETUP
1809 #line 137 "fe/idl.ll"
1810 return IDL_ENUM;
1811 YY_BREAK
1812 case 14:
1813 YY_RULE_SETUP
1814 #line 138 "fe/idl.ll"
1815 return IDL_STRING;
1816 YY_BREAK
1817 case 15:
1818 YY_RULE_SETUP
1819 #line 139 "fe/idl.ll"
1820 return IDL_WSTRING;
1821 YY_BREAK
1822 case 16:
1823 YY_RULE_SETUP
1824 #line 140 "fe/idl.ll"
1825 return IDL_SEQUENCE;
1826 YY_BREAK
1827 case 17:
1828 YY_RULE_SETUP
1829 #line 141 "fe/idl.ll"
1830 return IDL_UNION;
1831 YY_BREAK
1832 case 18:
1833 YY_RULE_SETUP
1834 #line 142 "fe/idl.ll"
1835 return IDL_FIXED;
1836 YY_BREAK
1837 case 19:
1838 YY_RULE_SETUP
1839 #line 143 "fe/idl.ll"
1840 return IDL_SWITCH;
1841 YY_BREAK
1842 case 20:
1843 YY_RULE_SETUP
1844 #line 144 "fe/idl.ll"
1845 return IDL_CASE;
1846 YY_BREAK
1847 case 21:
1848 YY_RULE_SETUP
1849 #line 145 "fe/idl.ll"
1850 return IDL_DEFAULT;
1851 YY_BREAK
1852 case 22:
1853 YY_RULE_SETUP
1854 #line 146 "fe/idl.ll"
1855 return IDL_FLOAT;
1856 YY_BREAK
1857 case 23:
1858 YY_RULE_SETUP
1859 #line 147 "fe/idl.ll"
1860 return IDL_DOUBLE;
1861 YY_BREAK
1862 case 24:
1863 YY_RULE_SETUP
1864 #line 148 "fe/idl.ll"
1865 return IDL_LONG;
1866 YY_BREAK
1867 case 25:
1868 YY_RULE_SETUP
1869 #line 149 "fe/idl.ll"
1870 return IDL_SHORT;
1871 YY_BREAK
1872 case 26:
1873 YY_RULE_SETUP
1874 #line 150 "fe/idl.ll"
1875 return IDL_UNSIGNED;
1876 YY_BREAK
1877 case 27:
1878 YY_RULE_SETUP
1879 #line 151 "fe/idl.ll"
1880 return IDL_CHAR;
1881 YY_BREAK
1882 case 28:
1883 YY_RULE_SETUP
1884 #line 152 "fe/idl.ll"
1885 return IDL_WCHAR;
1886 YY_BREAK
1887 case 29:
1888 YY_RULE_SETUP
1889 #line 153 "fe/idl.ll"
1890 return IDL_BOOLEAN;
1891 YY_BREAK
1892 case 30:
1893 YY_RULE_SETUP
1894 #line 154 "fe/idl.ll"
1895 return IDL_OCTET;
1896 YY_BREAK
1897 case 31:
1898 YY_RULE_SETUP
1899 #line 155 "fe/idl.ll"
1900 return IDL_VOID;
1901 YY_BREAK
1902 case 32:
1903 YY_RULE_SETUP
1904 #line 156 "fe/idl.ll"
1905 return IDL_NATIVE;
1906 YY_BREAK
1907 case 33:
1908 YY_RULE_SETUP
1909 #line 157 "fe/idl.ll"
1910 return IDL_LOCAL;
1911 YY_BREAK
1912 case 34:
1913 YY_RULE_SETUP
1914 #line 158 "fe/idl.ll"
1915 return IDL_ABSTRACT;
1916 YY_BREAK
1917 case 35:
1918 YY_RULE_SETUP
1919 #line 160 "fe/idl.ll"
1921 if (idl_global->idl_version_ >= IDL_VERSION_4)
1922 return IDL_INT8;
1923 else
1925 REJECT;
1928 YY_BREAK
1929 case 36:
1930 YY_RULE_SETUP
1931 #line 168 "fe/idl.ll"
1933 if (idl_global->idl_version_ >= IDL_VERSION_4)
1934 return IDL_UINT8;
1935 else
1937 REJECT;
1940 YY_BREAK
1941 case 37:
1942 YY_RULE_SETUP
1943 #line 176 "fe/idl.ll"
1945 if (idl_global->idl_version_ >= IDL_VERSION_4)
1946 return IDL_INT16;
1947 else
1949 REJECT;
1952 YY_BREAK
1953 case 38:
1954 YY_RULE_SETUP
1955 #line 184 "fe/idl.ll"
1957 if (idl_global->idl_version_ >= IDL_VERSION_4)
1958 return IDL_UINT16;
1959 else
1961 REJECT;
1964 YY_BREAK
1965 case 39:
1966 YY_RULE_SETUP
1967 #line 192 "fe/idl.ll"
1969 if (idl_global->idl_version_ >= IDL_VERSION_4)
1970 return IDL_INT32;
1971 else
1973 REJECT;
1976 YY_BREAK
1977 case 40:
1978 YY_RULE_SETUP
1979 #line 200 "fe/idl.ll"
1981 if (idl_global->idl_version_ >= IDL_VERSION_4)
1982 return IDL_UINT32;
1983 else
1985 REJECT;
1988 YY_BREAK
1989 case 41:
1990 YY_RULE_SETUP
1991 #line 208 "fe/idl.ll"
1993 if (idl_global->idl_version_ >= IDL_VERSION_4)
1994 return IDL_INT64;
1995 else
1997 REJECT;
2000 YY_BREAK
2001 case 42:
2002 YY_RULE_SETUP
2003 #line 216 "fe/idl.ll"
2005 if (idl_global->idl_version_ >= IDL_VERSION_4)
2006 return IDL_UINT64;
2007 else
2009 REJECT;
2012 YY_BREAK
2013 case 43:
2014 YY_RULE_SETUP
2015 #line 225 "fe/idl.ll"
2016 return IDL_CUSTOM;
2017 YY_BREAK
2018 case 44:
2019 YY_RULE_SETUP
2020 #line 226 "fe/idl.ll"
2021 return IDL_FACTORY;
2022 YY_BREAK
2023 case 45:
2024 YY_RULE_SETUP
2025 #line 227 "fe/idl.ll"
2026 return IDL_PRIVATE;
2027 YY_BREAK
2028 case 46:
2029 YY_RULE_SETUP
2030 #line 228 "fe/idl.ll"
2031 return IDL_PUBLIC;
2032 YY_BREAK
2033 case 47:
2034 YY_RULE_SETUP
2035 #line 229 "fe/idl.ll"
2036 return IDL_SUPPORTS;
2037 YY_BREAK
2038 case 48:
2039 YY_RULE_SETUP
2040 #line 230 "fe/idl.ll"
2041 return IDL_TRUNCATABLE;
2042 YY_BREAK
2043 case 49:
2044 YY_RULE_SETUP
2045 #line 231 "fe/idl.ll"
2046 return IDL_VALUETYPE;
2047 YY_BREAK
2048 case 50:
2049 YY_RULE_SETUP
2050 #line 233 "fe/idl.ll"
2051 return IDL_COMPONENT;
2052 YY_BREAK
2053 case 51:
2054 YY_RULE_SETUP
2055 #line 234 "fe/idl.ll"
2056 return IDL_CONSUMES;
2057 YY_BREAK
2058 case 52:
2059 YY_RULE_SETUP
2060 #line 235 "fe/idl.ll"
2061 return IDL_EMITS;
2062 YY_BREAK
2063 case 53:
2064 YY_RULE_SETUP
2065 #line 236 "fe/idl.ll"
2066 return IDL_EVENTTYPE;
2067 YY_BREAK
2068 case 54:
2069 YY_RULE_SETUP
2070 #line 237 "fe/idl.ll"
2071 return IDL_FINDER;
2072 YY_BREAK
2073 case 55:
2074 YY_RULE_SETUP
2075 #line 238 "fe/idl.ll"
2076 return IDL_GETRAISES;
2077 YY_BREAK
2078 case 56:
2079 YY_RULE_SETUP
2080 #line 239 "fe/idl.ll"
2081 return IDL_HOME;
2082 YY_BREAK
2083 case 57:
2084 YY_RULE_SETUP
2085 #line 240 "fe/idl.ll"
2086 return IDL_IMPORT;
2087 YY_BREAK
2088 case 58:
2089 YY_RULE_SETUP
2090 #line 241 "fe/idl.ll"
2091 return IDL_MULTIPLE;
2092 YY_BREAK
2093 case 59:
2094 YY_RULE_SETUP
2095 #line 242 "fe/idl.ll"
2096 return IDL_PRIMARYKEY;
2097 YY_BREAK
2098 case 60:
2099 YY_RULE_SETUP
2100 #line 243 "fe/idl.ll"
2101 return IDL_PROVIDES;
2102 YY_BREAK
2103 case 61:
2104 YY_RULE_SETUP
2105 #line 244 "fe/idl.ll"
2106 return IDL_PUBLISHES;
2107 YY_BREAK
2108 case 62:
2109 YY_RULE_SETUP
2110 #line 245 "fe/idl.ll"
2111 return IDL_SETRAISES;
2112 YY_BREAK
2113 case 63:
2114 YY_RULE_SETUP
2115 #line 246 "fe/idl.ll"
2116 return IDL_TYPEID;
2117 YY_BREAK
2118 case 64:
2119 YY_RULE_SETUP
2120 #line 247 "fe/idl.ll"
2121 return IDL_TYPEPREFIX;
2122 YY_BREAK
2123 case 65:
2124 YY_RULE_SETUP
2125 #line 248 "fe/idl.ll"
2126 return IDL_USES;
2127 YY_BREAK
2128 case 66:
2129 YY_RULE_SETUP
2130 #line 249 "fe/idl.ll"
2131 return IDL_MANAGES;
2132 YY_BREAK
2133 case 67:
2134 YY_RULE_SETUP
2135 #line 251 "fe/idl.ll"
2136 return IDL_TYPENAME;
2137 YY_BREAK
2138 case 68:
2139 YY_RULE_SETUP
2140 #line 252 "fe/idl.ll"
2141 return IDL_PORT;
2142 YY_BREAK
2143 case 69:
2144 YY_RULE_SETUP
2145 #line 253 "fe/idl.ll"
2146 return IDL_MIRRORPORT;
2147 YY_BREAK
2148 case 70:
2149 YY_RULE_SETUP
2150 #line 254 "fe/idl.ll"
2151 return IDL_PORTTYPE;
2152 YY_BREAK
2153 case 71:
2154 YY_RULE_SETUP
2155 #line 255 "fe/idl.ll"
2156 return IDL_CONNECTOR;
2157 YY_BREAK
2158 case 72:
2159 YY_RULE_SETUP
2160 #line 256 "fe/idl.ll"
2161 return IDL_ALIAS;
2162 YY_BREAK
2163 case 73:
2164 YY_RULE_SETUP
2165 #line 258 "fe/idl.ll"
2166 return IDL_TRUETOK;
2167 YY_BREAK
2168 case 74:
2169 YY_RULE_SETUP
2170 #line 259 "fe/idl.ll"
2171 return IDL_FALSETOK;
2172 YY_BREAK
2173 case 75:
2174 YY_RULE_SETUP
2175 #line 261 "fe/idl.ll"
2176 return IDL_INOUT;
2177 YY_BREAK
2178 case 76:
2179 YY_RULE_SETUP
2180 #line 262 "fe/idl.ll"
2181 return IDL_IN;
2182 YY_BREAK
2183 case 77:
2184 YY_RULE_SETUP
2185 #line 263 "fe/idl.ll"
2186 return IDL_OUT;
2187 YY_BREAK
2188 case 78:
2189 YY_RULE_SETUP
2190 #line 264 "fe/idl.ll"
2191 return IDL_ONEWAY;
2192 YY_BREAK
2193 case 79:
2194 YY_RULE_SETUP
2195 #line 266 "fe/idl.ll"
2196 return IDL_LEFT_SHIFT;
2197 YY_BREAK
2198 case 80:
2199 YY_RULE_SETUP
2200 #line 267 "fe/idl.ll"
2201 return IDL_RIGHT_SHIFT;
2202 YY_BREAK
2203 case 81:
2204 YY_RULE_SETUP
2205 #line 268 "fe/idl.ll"
2207 tao_yylval.strval = ACE::strnew ("::");
2208 return IDL_SCOPE_DELIMITOR;
2210 YY_BREAK
2211 case 82:
2212 /* rule 82 can match eol */
2213 YY_RULE_SETUP
2214 #line 273 "fe/idl.ll"
2215 return IDL_ANNOTATION_DECL; // Allow annotation names that start with "annotation"
2216 YY_BREAK
2217 case 83:
2218 YY_RULE_SETUP
2219 #line 274 "fe/idl.ll"
2220 return IDL_ANNOTATION_SYMBOL;
2221 YY_BREAK
2222 case 84:
2223 YY_RULE_SETUP
2224 #line 276 "fe/idl.ll"
2226 // Make sure that this identifier is not a C++ keyword. If it is,
2227 // prepend it with a _cxx_. Lookup in the perfect hash table for C++
2228 // keyword and grab the mapping. BTW, the reason for the odd
2229 // regular expression is to handle EBCDIC, as well as ASCII.
2231 TAO_IDL_CPP_Keyword_Table cpp_key_tbl;
2232 const TAO_IDL_CPP_Keyword_Entry *entry = 0;
2233 if (!idl_global->preserve_cpp_keywords())
2235 // This check will ensure that escaped C++ keywords will be
2236 // caught and prepended with '_cxx' as non-escaped keywords
2237 // are now prepended with '_cxx_'.
2238 const char *tmp =
2239 ace_yytext[0] == '_' ? ace_yytext + 1 : ace_yytext;
2241 entry =
2242 cpp_key_tbl.lookup (tmp,
2243 static_cast<unsigned int> (ACE_OS::strlen (tmp)));
2246 if (entry)
2248 tao_yylval.strval = ACE::strnew (entry->mapping_);
2250 else
2252 tao_yylval.strval = ACE::strnew (ace_yytext);
2255 return IDENTIFIER;
2257 YY_BREAK
2258 case 85:
2259 YY_RULE_SETUP
2260 #line 309 "fe/idl.ll"
2262 tao_yylval.dval = idl_atof (ace_yytext);
2263 return IDL_FLOATING_PT_LITERAL;
2265 YY_BREAK
2266 case 86:
2267 YY_RULE_SETUP
2268 #line 313 "fe/idl.ll"
2270 tao_yylval.dval = idl_atof (ace_yytext);
2271 return IDL_FLOATING_PT_LITERAL;
2273 YY_BREAK
2274 case 87:
2275 YY_RULE_SETUP
2276 #line 318 "fe/idl.ll"
2278 tao_yylval.fixval = ACE_CDR::Fixed::from_string (ace_yytext);
2279 return IDL_FIXED_PT_LITERAL;
2281 YY_BREAK
2282 case 88:
2283 YY_RULE_SETUP
2284 #line 323 "fe/idl.ll"
2286 tao_yylval.ival = idl_atoi (ace_yytext, 10);
2287 return IDL_INTEGER_LITERAL;
2289 YY_BREAK
2290 case 89:
2291 YY_RULE_SETUP
2292 #line 327 "fe/idl.ll"
2294 tao_yylval.uival = idl_atoui (ace_yytext, 10);
2295 return IDL_UINTEGER_LITERAL;
2297 YY_BREAK
2298 case 90:
2299 YY_RULE_SETUP
2300 #line 331 "fe/idl.ll"
2302 tao_yylval.ival = idl_atoi (ace_yytext, 16);
2303 return IDL_INTEGER_LITERAL;
2305 YY_BREAK
2306 case 91:
2307 YY_RULE_SETUP
2308 #line 335 "fe/idl.ll"
2310 tao_yylval.uival = idl_atoui (ace_yytext, 16);
2311 return IDL_UINTEGER_LITERAL;
2313 YY_BREAK
2314 case 92:
2315 YY_RULE_SETUP
2316 #line 339 "fe/idl.ll"
2318 tao_yylval.ival = idl_atoi (ace_yytext, 8);
2319 return IDL_INTEGER_LITERAL;
2321 YY_BREAK
2322 case 93:
2323 YY_RULE_SETUP
2324 #line 343 "fe/idl.ll"
2326 tao_yylval.uival = idl_atoui (ace_yytext, 8);
2327 return IDL_UINTEGER_LITERAL;
2329 YY_BREAK
2330 case 94:
2331 /* rule 94 can match eol */
2332 YY_RULE_SETUP
2333 #line 348 "fe/idl.ll"
2335 /* Skip the quotes */
2336 char * const tmp = ace_yytext;
2337 for (size_t i = ACE_OS::strlen (tmp); i-- != 0; )
2339 if (isspace (tmp[i]))
2341 tmp[i] = '\0';
2343 else
2345 break;
2348 tmp[ACE_OS::strlen (tmp) - 1] = '\0';
2349 ACE_NEW_RETURN (tao_yylval.sval,
2350 UTL_String (tmp + 1, true),
2351 IDL_STRING_LITERAL);
2352 return IDL_STRING_LITERAL;
2354 YY_BREAK
2355 case 95:
2356 /* rule 95 can match eol */
2357 YY_RULE_SETUP
2358 #line 368 "fe/idl.ll"
2360 /* Skip the bookends */
2361 char * const tmp = ACE_OS::strdup (ace_yytext);
2362 for (size_t i = ACE_OS::strlen (tmp); i-- != 0; )
2364 if (isspace (tmp[i]))
2366 tmp[i] = '\0';
2368 else
2370 break;
2373 tmp[ACE_OS::strlen (tmp) - 1] = '\0';
2374 tao_yylval.wsval = ACE_OS::strdup (idl_wstring_escape_reader (tmp + 2));
2375 ACE_OS::free (tmp);
2376 return IDL_WSTRING_LITERAL;
2378 YY_BREAK
2379 case 96:
2380 YY_RULE_SETUP
2381 #line 387 "fe/idl.ll"
2383 tao_yylval.cval = ace_yytext[1];
2384 return IDL_CHARACTER_LITERAL;
2386 YY_BREAK
2387 case 97:
2388 YY_RULE_SETUP
2389 #line 391 "fe/idl.ll"
2391 // octal character constant
2392 tao_yylval.cval = idl_escape_reader (ace_yytext + 1);
2393 return IDL_CHARACTER_LITERAL;
2395 YY_BREAK
2396 case 98:
2397 YY_RULE_SETUP
2398 #line 396 "fe/idl.ll"
2400 // hexadecimal character constant
2401 tao_yylval.cval = idl_escape_reader (ace_yytext + 1);
2402 return IDL_CHARACTER_LITERAL;
2404 YY_BREAK
2405 case 99:
2406 YY_RULE_SETUP
2407 #line 401 "fe/idl.ll"
2409 tao_yylval.cval = idl_escape_reader (ace_yytext + 1);
2410 return IDL_CHARACTER_LITERAL;
2412 YY_BREAK
2413 case 100:
2414 YY_RULE_SETUP
2415 #line 405 "fe/idl.ll"
2417 // wide character constant
2418 tao_yylval.wcval = ace_yytext[2];
2419 return IDL_WCHAR_LITERAL;
2421 YY_BREAK
2422 case 101:
2423 YY_RULE_SETUP
2424 #line 410 "fe/idl.ll"
2426 // hexadecimal wide character constant
2427 tao_yylval.wcval = idl_wchar_escape_reader (ace_yytext + 2);
2428 return IDL_WCHAR_LITERAL;
2430 YY_BREAK
2431 case 102:
2432 /* rule 102 can match eol */
2433 #line 416 "fe/idl.ll"
2434 case 103:
2435 /* rule 103 can match eol */
2436 YY_RULE_SETUP
2437 #line 416 "fe/idl.ll"
2438 {/* remember pragma */
2439 idl_global->set_lineno (idl_global->lineno () + 1);
2440 idl_store_pragma (ace_yytext);
2441 break;
2443 YY_BREAK
2444 case 104:
2445 /* rule 104 can match eol */
2446 #line 422 "fe/idl.ll"
2447 case 105:
2448 /* rule 105 can match eol */
2449 YY_RULE_SETUP
2450 #line 422 "fe/idl.ll"
2451 {/* ignore file */
2452 idl_global->set_lineno(idl_global->lineno () + 1);
2453 break;
2455 YY_BREAK
2456 case 106:
2457 /* rule 106 can match eol */
2458 #line 427 "fe/idl.ll"
2459 case 107:
2460 /* rule 107 can match eol */
2461 YY_RULE_SETUP
2462 #line 427 "fe/idl.ll"
2464 idl_parse_line_and_file (ace_yytext);
2465 break;
2467 YY_BREAK
2468 case 108:
2469 /* rule 108 can match eol */
2470 #line 432 "fe/idl.ll"
2471 case 109:
2472 /* rule 109 can match eol */
2473 YY_RULE_SETUP
2474 #line 432 "fe/idl.ll"
2476 idl_parse_line_and_file (ace_yytext);
2477 break;
2479 YY_BREAK
2480 case 110:
2481 /* rule 110 can match eol */
2482 #line 437 "fe/idl.ll"
2483 case 111:
2484 /* rule 111 can match eol */
2485 YY_RULE_SETUP
2486 #line 437 "fe/idl.ll"
2488 idl_parse_line_and_file (ace_yytext);
2489 break;
2491 YY_BREAK
2492 case 112:
2493 /* rule 112 can match eol */
2494 #line 442 "fe/idl.ll"
2495 case 113:
2496 /* rule 113 can match eol */
2497 YY_RULE_SETUP
2498 #line 442 "fe/idl.ll"
2500 idl_parse_line_and_file (ace_yytext);
2501 break;
2503 YY_BREAK
2504 case 114:
2505 /* rule 114 can match eol */
2506 #line 447 "fe/idl.ll"
2507 case 115:
2508 /* rule 115 can match eol */
2509 YY_RULE_SETUP
2510 #line 447 "fe/idl.ll"
2512 /* ignore cpp ident */
2513 idl_global->set_lineno (idl_global->lineno () + 1);
2514 break;
2516 YY_BREAK
2517 case 116:
2518 /* rule 116 can match eol */
2519 YY_RULE_SETUP
2520 #line 452 "fe/idl.ll"
2522 /* ignore comments */
2523 idl_global->set_lineno(idl_global->lineno () + 1);
2524 break;
2526 YY_BREAK
2527 case 117:
2528 YY_RULE_SETUP
2529 #line 457 "fe/idl.ll"
2531 for (;;)
2533 char const c = yyinput ();
2534 if (c == '*')
2536 char const next = yyinput ();
2537 if (next == '/')
2538 break;
2539 else
2540 yyunput (c, 0);
2542 else if (c == '\n')
2544 idl_global->set_lineno (idl_global->lineno () + 1);
2547 break;
2549 YY_BREAK
2550 case 118:
2551 YY_RULE_SETUP
2552 #line 476 "fe/idl.ll"
2553 break;
2554 YY_BREAK
2555 case 119:
2556 /* rule 119 can match eol */
2557 YY_RULE_SETUP
2558 #line 477 "fe/idl.ll"
2560 idl_global->set_lineno (idl_global->lineno () + 1);
2561 break;
2563 YY_BREAK
2564 case 120:
2565 YY_RULE_SETUP
2566 #line 481 "fe/idl.ll"
2567 return ace_yytext[0];
2568 YY_BREAK
2569 case 121:
2570 YY_RULE_SETUP
2571 #line 483 "fe/idl.ll"
2572 ECHO;
2573 YY_BREAK
2574 #line 2577 "fe/idl.yy.cpp"
2575 case YY_STATE_EOF(INITIAL):
2576 yyterminate();
2578 case YY_END_OF_BUFFER:
2580 /* Amount of text matched not including the EOB char. */
2581 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
2583 /* Undo the effects of YY_DO_BEFORE_ACTION. */
2584 *yy_cp = (yy_hold_char);
2585 YY_RESTORE_YY_MORE_OFFSET
2587 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
2589 /* We're scanning a new file or input source. It's
2590 * possible that this happened because the user
2591 * just pointed yyin at a new source and called
2592 * yylex(). If so, then we have to assure
2593 * consistency between YY_CURRENT_BUFFER and our
2594 * globals. Here is the right place to do so, because
2595 * this is the first action (other than possibly a
2596 * back-up) that will match for the new input source.
2598 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
2599 YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
2600 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
2603 /* Note that here we test for yy_c_buf_p "<=" to the position
2604 * of the first EOB in the buffer, since yy_c_buf_p will
2605 * already have been incremented past the NUL character
2606 * (since all states make transitions on EOB to the
2607 * end-of-buffer state). Contrast this with the test
2608 * in input().
2610 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
2611 { /* This was really a NUL. */
2612 yy_state_type yy_next_state;
2614 (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
2616 yy_current_state = yy_get_previous_state( );
2618 /* Okay, we're now positioned to make the NUL
2619 * transition. We couldn't have
2620 * yy_get_previous_state() go ahead and do it
2621 * for us because it doesn't know how to deal
2622 * with the possibility of jamming (and we don't
2623 * want to build jamming into it because then it
2624 * will run more slowly).
2627 yy_next_state = yy_try_NUL_trans( yy_current_state );
2629 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
2631 if ( yy_next_state )
2633 /* Consume the NUL. */
2634 yy_cp = ++(yy_c_buf_p);
2635 yy_current_state = yy_next_state;
2636 goto yy_match;
2639 else
2641 yy_cp = (yy_c_buf_p);
2642 goto yy_find_action;
2646 else switch ( yy_get_next_buffer( ) )
2648 case EOB_ACT_END_OF_FILE:
2650 (yy_did_buffer_switch_on_eof) = 0;
2652 if ( yywrap( ) )
2654 /* Note: because we've taken care in
2655 * yy_get_next_buffer() to have set up
2656 * yytext, we can now set up
2657 * yy_c_buf_p so that if some total
2658 * hoser (like flex itself) wants to
2659 * call the scanner after we return the
2660 * YY_NULL, it'll still work - another
2661 * YY_NULL will get returned.
2663 (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
2665 yy_act = YY_STATE_EOF(YY_START);
2666 goto do_action;
2669 else
2671 if ( ! (yy_did_buffer_switch_on_eof) )
2672 YY_NEW_FILE;
2674 break;
2677 case EOB_ACT_CONTINUE_SCAN:
2678 (yy_c_buf_p) =
2679 (yytext_ptr) + yy_amount_of_matched_text;
2681 yy_current_state = yy_get_previous_state( );
2683 yy_cp = (yy_c_buf_p);
2684 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
2685 goto yy_match;
2687 case EOB_ACT_LAST_MATCH:
2688 (yy_c_buf_p) =
2689 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
2691 yy_current_state = yy_get_previous_state( );
2693 yy_cp = (yy_c_buf_p);
2694 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
2695 goto yy_find_action;
2697 break;
2700 default:
2701 YY_FATAL_ERROR(
2702 "fatal flex scanner internal error--no action found" );
2703 } /* end of action switch */
2704 } /* end of scanning one token */
2705 } /* end of user's declarations */
2706 } /* end of yylex */
2708 /* yy_get_next_buffer - try to read in a new buffer
2710 * Returns a code representing an action:
2711 * EOB_ACT_LAST_MATCH -
2712 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2713 * EOB_ACT_END_OF_FILE - end of file
2715 static int yy_get_next_buffer (void)
2717 char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
2718 char *source = (yytext_ptr);
2719 int number_to_move, i;
2720 int ret_val;
2722 if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
2723 YY_FATAL_ERROR(
2724 "fatal flex scanner internal error--end of buffer missed" );
2726 if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
2727 { /* Don't try to fill the buffer, so this is an EOF. */
2728 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
2730 /* We matched a single character, the EOB, so
2731 * treat this as a final EOF.
2733 return EOB_ACT_END_OF_FILE;
2736 else
2738 /* We matched some text prior to the EOB, first
2739 * process it.
2741 return EOB_ACT_LAST_MATCH;
2745 /* Try to read more data. */
2747 /* First move last chars to start of buffer. */
2748 number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
2750 for ( i = 0; i < number_to_move; ++i )
2751 *(dest++) = *(source++);
2753 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
2754 /* don't do the read, it's not guaranteed to return an EOF,
2755 * just force an EOF
2757 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
2759 else
2761 int num_to_read =
2762 YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
2764 while ( num_to_read <= 0 )
2765 { /* Not enough room in the buffer - grow it. */
2767 YY_FATAL_ERROR(
2768 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
2772 if ( num_to_read > YY_READ_BUF_SIZE )
2773 num_to_read = YY_READ_BUF_SIZE;
2775 /* Read in more data. */
2776 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
2777 (yy_n_chars), num_to_read );
2779 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
2782 if ( (yy_n_chars) == 0 )
2784 if ( number_to_move == YY_MORE_ADJ )
2786 ret_val = EOB_ACT_END_OF_FILE;
2787 yyrestart( yyin );
2790 else
2792 ret_val = EOB_ACT_LAST_MATCH;
2793 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
2794 YY_BUFFER_EOF_PENDING;
2798 else
2799 ret_val = EOB_ACT_CONTINUE_SCAN;
2801 if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
2802 /* Extend the array by 50%, plus the number we really need. */
2803 int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
2804 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
2805 (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size );
2806 if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
2807 YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
2808 /* "- 2" to take care of EOB's */
2809 YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
2812 (yy_n_chars) += number_to_move;
2813 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
2814 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
2816 (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
2818 return ret_val;
2821 /* yy_get_previous_state - get the state just before the EOB char was reached */
2823 static yy_state_type yy_get_previous_state (void)
2825 yy_state_type yy_current_state;
2826 char *yy_cp;
2828 yy_current_state = (yy_start);
2829 yy_current_state += YY_AT_BOL();
2831 (yy_state_ptr) = (yy_state_buf);
2832 *(yy_state_ptr)++ = yy_current_state;
2834 for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
2836 YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
2837 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2839 yy_current_state = (int) yy_def[yy_current_state];
2840 if ( yy_current_state >= 622 )
2841 yy_c = yy_meta[yy_c];
2843 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
2844 *(yy_state_ptr)++ = yy_current_state;
2847 return yy_current_state;
2850 /* yy_try_NUL_trans - try to make a transition on the NUL character
2852 * synopsis
2853 * next_state = yy_try_NUL_trans( current_state );
2855 static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
2857 int yy_is_jam;
2859 YY_CHAR yy_c = 1;
2860 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2862 yy_current_state = (int) yy_def[yy_current_state];
2863 if ( yy_current_state >= 622 )
2864 yy_c = yy_meta[yy_c];
2866 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
2867 yy_is_jam = (yy_current_state == 621);
2868 if ( ! yy_is_jam )
2869 *(yy_state_ptr)++ = yy_current_state;
2871 return yy_is_jam ? 0 : yy_current_state;
2874 #ifndef YY_NO_UNPUT
2876 static void yyunput (int c, char * yy_bp )
2878 char *yy_cp;
2880 yy_cp = (yy_c_buf_p);
2882 /* undo effects of setting up yytext */
2883 *yy_cp = (yy_hold_char);
2885 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
2886 { /* need to shift things up to make room */
2887 /* +2 for EOB chars. */
2888 int number_to_move = (yy_n_chars) + 2;
2889 char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
2890 YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
2891 char *source =
2892 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
2894 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
2895 *--dest = *--source;
2897 yy_cp += (int) (dest - source);
2898 yy_bp += (int) (dest - source);
2899 YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
2900 (yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
2902 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
2903 YY_FATAL_ERROR( "flex scanner push-back overflow" );
2906 *--yy_cp = (char) c;
2908 (yytext_ptr) = yy_bp;
2909 (yy_hold_char) = *yy_cp;
2910 (yy_c_buf_p) = yy_cp;
2913 #endif
2915 #ifndef YY_NO_INPUT
2916 #ifdef __cplusplus
2917 static int yyinput (void)
2918 #else
2919 static int input (void)
2920 #endif
2923 int c;
2925 *(yy_c_buf_p) = (yy_hold_char);
2927 if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
2929 /* yy_c_buf_p now points to the character we want to return.
2930 * If this occurs *before* the EOB characters, then it's a
2931 * valid NUL; if not, then we've hit the end of the buffer.
2933 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
2934 /* This was really a NUL. */
2935 *(yy_c_buf_p) = '\0';
2937 else
2938 { /* need more input */
2939 int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
2940 ++(yy_c_buf_p);
2942 switch ( yy_get_next_buffer( ) )
2944 case EOB_ACT_LAST_MATCH:
2945 /* This happens because yy_g_n_b()
2946 * sees that we've accumulated a
2947 * token and flags that we need to
2948 * try matching the token before
2949 * proceeding. But for input(),
2950 * there's no matching to consider.
2951 * So convert the EOB_ACT_LAST_MATCH
2952 * to EOB_ACT_END_OF_FILE.
2955 /* Reset buffer status. */
2956 yyrestart( yyin );
2958 /*FALLTHROUGH*/
2960 case EOB_ACT_END_OF_FILE:
2962 if ( yywrap( ) )
2963 return 0;
2965 if ( ! (yy_did_buffer_switch_on_eof) )
2966 YY_NEW_FILE;
2967 #ifdef __cplusplus
2968 return yyinput();
2969 #else
2970 return input();
2971 #endif
2974 case EOB_ACT_CONTINUE_SCAN:
2975 (yy_c_buf_p) = (yytext_ptr) + offset;
2976 break;
2981 c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
2982 *(yy_c_buf_p) = '\0'; /* preserve yytext */
2983 (yy_hold_char) = *++(yy_c_buf_p);
2985 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
2987 return c;
2989 #endif /* ifndef YY_NO_INPUT */
2991 /** Immediately switch to a different input stream.
2992 * @param input_file A readable stream.
2994 * @note This function does not reset the start condition to @c INITIAL .
2996 void yyrestart (FILE * input_file )
2999 if ( ! YY_CURRENT_BUFFER ){
3000 yyensure_buffer_stack ();
3001 YY_CURRENT_BUFFER_LVALUE =
3002 yy_create_buffer( yyin, YY_BUF_SIZE );
3005 yy_init_buffer( YY_CURRENT_BUFFER, input_file );
3006 yy_load_buffer_state( );
3009 /** Switch to a different input buffer.
3010 * @param new_buffer The new input buffer.
3013 void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
3016 /* TODO. We should be able to replace this entire function body
3017 * with
3018 * yypop_buffer_state();
3019 * yypush_buffer_state(new_buffer);
3021 yyensure_buffer_stack ();
3022 if ( YY_CURRENT_BUFFER == new_buffer )
3023 return;
3025 if ( YY_CURRENT_BUFFER )
3027 /* Flush out information for old buffer. */
3028 *(yy_c_buf_p) = (yy_hold_char);
3029 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
3030 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
3033 YY_CURRENT_BUFFER_LVALUE = new_buffer;
3034 yy_load_buffer_state( );
3036 /* We don't actually know whether we did this switch during
3037 * EOF (yywrap()) processing, but the only time this flag
3038 * is looked at is after yywrap() is called, so it's safe
3039 * to go ahead and always set it.
3041 (yy_did_buffer_switch_on_eof) = 1;
3044 static void yy_load_buffer_state (void)
3046 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
3047 (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
3048 yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
3049 (yy_hold_char) = *(yy_c_buf_p);
3052 /** Allocate and initialize an input buffer state.
3053 * @param file A readable stream.
3054 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
3056 * @return the allocated buffer state.
3058 YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
3060 YY_BUFFER_STATE b;
3062 b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) );
3063 if ( ! b )
3064 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3066 b->yy_buf_size = size;
3068 /* yy_ch_buf has to be 2 characters longer than the size given because
3069 * we need to put in 2 end-of-buffer characters.
3071 b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) );
3072 if ( ! b->yy_ch_buf )
3073 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3075 b->yy_is_our_buffer = 1;
3077 yy_init_buffer( b, file );
3079 return b;
3082 /** Destroy the buffer.
3083 * @param b a buffer created with yy_create_buffer()
3086 void yy_delete_buffer (YY_BUFFER_STATE b )
3089 if ( ! b )
3090 return;
3092 if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
3093 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
3095 if ( b->yy_is_our_buffer )
3096 yyfree( (void *) b->yy_ch_buf );
3098 yyfree( (void *) b );
3101 /* Initializes or reinitializes a buffer.
3102 * This function is sometimes called more than once on the same buffer,
3103 * such as during a yyrestart() or at EOF.
3105 static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
3108 int oerrno = errno;
3110 yy_flush_buffer( b );
3112 b->yy_input_file = file;
3113 b->yy_fill_buffer = 1;
3115 /* If b is the current buffer, then yy_init_buffer was _probably_
3116 * called from yyrestart() or through yy_get_next_buffer.
3117 * In that case, we don't want to reset the lineno or column.
3119 if (b != YY_CURRENT_BUFFER){
3120 b->yy_bs_lineno = 1;
3121 b->yy_bs_column = 0;
3124 b->yy_is_interactive = 0;
3126 errno = oerrno;
3129 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
3130 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
3133 void yy_flush_buffer (YY_BUFFER_STATE b )
3135 if ( ! b )
3136 return;
3138 b->yy_n_chars = 0;
3140 /* We always need two end-of-buffer characters. The first causes
3141 * a transition to the end-of-buffer state. The second causes
3142 * a jam in that state.
3144 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
3145 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
3147 b->yy_buf_pos = &b->yy_ch_buf[0];
3149 b->yy_at_bol = 1;
3150 b->yy_buffer_status = YY_BUFFER_NEW;
3152 if ( b == YY_CURRENT_BUFFER )
3153 yy_load_buffer_state( );
3156 /** Pushes the new state onto the stack. The new state becomes
3157 * the current state. This function will allocate the stack
3158 * if necessary.
3159 * @param new_buffer The new state.
3162 void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
3164 if (new_buffer == 0)
3165 return;
3167 yyensure_buffer_stack();
3169 /* This block is copied from yy_switch_to_buffer. */
3170 if ( YY_CURRENT_BUFFER )
3172 /* Flush out information for old buffer. */
3173 *(yy_c_buf_p) = (yy_hold_char);
3174 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
3175 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
3178 /* Only push if top exists. Otherwise, replace top. */
3179 if (YY_CURRENT_BUFFER)
3180 (yy_buffer_stack_top)++;
3181 YY_CURRENT_BUFFER_LVALUE = new_buffer;
3183 /* copied from yy_switch_to_buffer. */
3184 yy_load_buffer_state( );
3185 (yy_did_buffer_switch_on_eof) = 1;
3188 /** Removes and deletes the top of the stack, if present.
3189 * The next element becomes the new top.
3192 void yypop_buffer_state (void)
3194 if (!YY_CURRENT_BUFFER)
3195 return;
3197 yy_delete_buffer(YY_CURRENT_BUFFER );
3198 YY_CURRENT_BUFFER_LVALUE = 0;
3199 if ((yy_buffer_stack_top) > 0)
3200 --(yy_buffer_stack_top);
3202 if (YY_CURRENT_BUFFER) {
3203 yy_load_buffer_state( );
3204 (yy_did_buffer_switch_on_eof) = 1;
3208 /* Allocates the stack if it does not exist.
3209 * Guarantees space for at least one push.
3211 static void yyensure_buffer_stack (void)
3213 yy_size_t num_to_alloc;
3215 if (!(yy_buffer_stack)) {
3217 /* First allocation is just for 2 elements, since we don't know if this
3218 * scanner will even need a stack. We use 2 instead of 1 to avoid an
3219 * immediate realloc on the next call.
3221 num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
3222 (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
3223 (num_to_alloc * sizeof(struct yy_buffer_state*)
3225 if ( ! (yy_buffer_stack) )
3226 YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
3228 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
3230 (yy_buffer_stack_max) = num_to_alloc;
3231 (yy_buffer_stack_top) = 0;
3232 return;
3235 if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
3237 /* Increase the buffer to prepare for a possible push. */
3238 yy_size_t grow_size = 8 /* arbitrary grow size */;
3240 num_to_alloc = (yy_buffer_stack_max) + grow_size;
3241 (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
3242 ((yy_buffer_stack),
3243 num_to_alloc * sizeof(struct yy_buffer_state*)
3245 if ( ! (yy_buffer_stack) )
3246 YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
3248 /* zero only the new slots.*/
3249 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
3250 (yy_buffer_stack_max) = num_to_alloc;
3254 /** Setup the input buffer state to scan directly from a user-specified character buffer.
3255 * @param base the character buffer
3256 * @param size the size in bytes of the character buffer
3258 * @return the newly allocated buffer state object.
3260 YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
3262 YY_BUFFER_STATE b;
3264 if ( size < 2 ||
3265 base[size-2] != YY_END_OF_BUFFER_CHAR ||
3266 base[size-1] != YY_END_OF_BUFFER_CHAR )
3267 /* They forgot to leave room for the EOB's. */
3268 return 0;
3270 b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) );
3271 if ( ! b )
3272 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
3274 b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */
3275 b->yy_buf_pos = b->yy_ch_buf = base;
3276 b->yy_is_our_buffer = 0;
3277 b->yy_input_file = 0;
3278 b->yy_n_chars = b->yy_buf_size;
3279 b->yy_is_interactive = 0;
3280 b->yy_at_bol = 1;
3281 b->yy_fill_buffer = 0;
3282 b->yy_buffer_status = YY_BUFFER_NEW;
3284 yy_switch_to_buffer( b );
3286 return b;
3289 /** Setup the input buffer state to scan a string. The next call to yylex() will
3290 * scan from a @e copy of @a str.
3291 * @param yystr a NUL-terminated string to scan
3293 * @return the newly allocated buffer state object.
3294 * @note If you want to scan bytes that may contain NUL values, then use
3295 * yy_scan_bytes() instead.
3297 YY_BUFFER_STATE yy_scan_string (const char * yystr )
3300 return yy_scan_bytes( yystr, (int) strlen(yystr) );
3303 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
3304 * scan from a @e copy of @a bytes.
3305 * @param yybytes the byte buffer to scan
3306 * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
3308 * @return the newly allocated buffer state object.
3310 YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len )
3312 YY_BUFFER_STATE b;
3313 char *buf;
3314 yy_size_t n;
3315 int i;
3317 /* Get memory for full buffer, including space for trailing EOB's. */
3318 n = (yy_size_t) (_yybytes_len + 2);
3319 buf = (char *) yyalloc( n );
3320 if ( ! buf )
3321 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
3323 for ( i = 0; i < _yybytes_len; ++i )
3324 buf[i] = yybytes[i];
3326 buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
3328 b = yy_scan_buffer( buf, n );
3329 if ( ! b )
3330 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
3332 /* It's okay to grow etc. this buffer, and we should throw it
3333 * away when we're done.
3335 b->yy_is_our_buffer = 1;
3337 return b;
3340 #ifndef YY_EXIT_FAILURE
3341 #define YY_EXIT_FAILURE 2
3342 #endif
3344 static void yynoreturn yy_fatal_error (const char* msg )
3346 fprintf( stderr, "%s\n", msg );
3347 exit( YY_EXIT_FAILURE );
3350 /* Redefine yyless() so it works in section 3 code. */
3352 #undef yyless
3353 #define yyless(n) \
3354 do \
3356 /* Undo effects of setting up yytext. */ \
3357 int yyless_macro_arg = (n); \
3358 YY_LESS_LINENO(yyless_macro_arg);\
3359 yytext[yyleng] = (yy_hold_char); \
3360 (yy_c_buf_p) = yytext + yyless_macro_arg; \
3361 (yy_hold_char) = *(yy_c_buf_p); \
3362 *(yy_c_buf_p) = '\0'; \
3363 yyleng = yyless_macro_arg; \
3365 while ( 0 )
3367 /* Accessor methods (get/set functions) to struct members. */
3369 /** Get the current line number.
3372 int yyget_lineno (void)
3375 return yylineno;
3378 /** Get the input stream.
3381 FILE *yyget_in (void)
3383 return yyin;
3386 /** Get the output stream.
3389 FILE *yyget_out (void)
3391 return yyout;
3394 /** Get the length of the current token.
3397 int yyget_leng (void)
3399 return yyleng;
3402 /** Get the current token.
3406 char *yyget_text (void)
3408 return yytext;
3411 /** Set the current line number.
3412 * @param _line_number line number
3415 void yyset_lineno (int _line_number )
3418 yylineno = _line_number;
3421 /** Set the input stream. This does not discard the current
3422 * input buffer.
3423 * @param _in_str A readable stream.
3425 * @see yy_switch_to_buffer
3427 void yyset_in (FILE * _in_str )
3429 yyin = _in_str ;
3432 void yyset_out (FILE * _out_str )
3434 yyout = _out_str ;
3437 int yyget_debug (void)
3439 return yy_flex_debug;
3442 void yyset_debug (int _bdebug )
3444 yy_flex_debug = _bdebug ;
3447 static int yy_init_globals (void)
3449 /* Initialization is the same as for the non-reentrant scanner.
3450 * This function is called from yylex_destroy(), so don't allocate here.
3453 (yy_buffer_stack) = 0;
3454 (yy_buffer_stack_top) = 0;
3455 (yy_buffer_stack_max) = 0;
3456 (yy_c_buf_p) = 0;
3457 (yy_init) = 0;
3458 (yy_start) = 0;
3460 (yy_state_buf) = 0;
3461 (yy_state_ptr) = 0;
3462 (yy_full_match) = 0;
3463 (yy_lp) = 0;
3465 /* Defined in main.c */
3466 #ifdef YY_STDINIT
3467 yyin = stdin;
3468 yyout = stdout;
3469 #else
3470 yyin = 0;
3471 yyout = 0;
3472 #endif
3474 /* For future reference: Set errno on error, since we are called by
3475 * yylex_init()
3477 return 0;
3480 /* yylex_destroy is for both reentrant and non-reentrant scanners. */
3481 int yylex_destroy (void)
3484 /* Pop the buffer stack, destroying each element. */
3485 while(YY_CURRENT_BUFFER){
3486 yy_delete_buffer( YY_CURRENT_BUFFER );
3487 YY_CURRENT_BUFFER_LVALUE = 0;
3488 yypop_buffer_state();
3491 /* Destroy the stack itself. */
3492 yyfree((yy_buffer_stack) );
3493 (yy_buffer_stack) = 0;
3495 yyfree ( (yy_state_buf) );
3496 (yy_state_buf) = 0;
3498 /* Reset the globals. This is important in a non-reentrant scanner so the next time
3499 * yylex() is called, initialization will occur. */
3500 yy_init_globals( );
3502 return 0;
3506 * Internal utility routines.
3509 #ifndef yytext_ptr
3510 static void yy_flex_strncpy (char* s1, const char * s2, int n )
3513 int i;
3514 for ( i = 0; i < n; ++i )
3515 s1[i] = s2[i];
3517 #endif
3519 #ifdef YY_NEED_STRLEN
3520 static int yy_flex_strlen (const char * s )
3522 int n;
3523 for ( n = 0; s[n]; ++n )
3526 return n;
3528 #endif
3530 void *yyalloc (yy_size_t size )
3532 return malloc(size);
3535 void *yyrealloc (void * ptr, yy_size_t size )
3538 /* The cast to (char *) in the following accommodates both
3539 * implementations that use char* generic pointers, and those
3540 * that use void* generic pointers. It works with the latter
3541 * because both ANSI C and C++ allow castless assignment from
3542 * any pointer type to void*, and deal with argument conversions
3543 * as though doing an assignment.
3545 return realloc(ptr, size);
3548 void yyfree (void * ptr )
3550 free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
3553 #define YYTABLES_NAME "yytables"
3555 #line 483 "fe/idl.ll"
3557 /* subroutines */
3559 static bool
3560 same_file (char *path1, char *path2)
3562 char fullpath1 [MAXPATHLEN + 1] = {0};
3563 char fullpath2 [MAXPATHLEN + 1] = {0};
3565 char *fp1 = ACE_OS::realpath (path1, fullpath1);
3566 char *fp2 = ACE_OS::realpath (path2, fullpath2);
3568 return
3569 (fp1 == 0 || fp2 == 0)
3570 ? false
3571 : FE_Utils::path_cmp (fullpath1,fullpath2) == 0;
3574 // Parse a #line statement generated by the C preprocessor
3575 static void
3576 idl_parse_line_and_file (char *buf)
3578 char *r = buf;
3579 char *h = 0;
3580 UTL_String *nm = 0;
3582 // Skip initial '#'.
3583 if (*r != '#')
3585 return;
3587 else
3589 ++r;
3592 // Check to see if we're running under the screwy Microsoft scheme
3593 // of putting #line num instead of #num.
3595 if (ACE_OS::strncmp (r, "line", 4) == 0)
3597 r += 5;
3600 // Find line number.
3601 while (isspace (*r))
3603 ++r;
3606 h = r;
3608 for (; isdigit (*r); ++r)
3610 continue;
3613 *r++ = 0;
3614 idl_global->set_lineno ((long) idl_atoui (h, 10));
3616 // Find file name, if present.
3617 for (; *r != '"'; ++r)
3619 if (*r == '\n' || *r == '\0')
3621 return;
3625 h = ++r;
3627 for (; *r != '"'; ++r)
3629 continue;
3632 *r = 0;
3633 UTL_String *tmp = 0;
3635 if (*h == '\0')
3637 ACE_ERROR ((LM_ERROR,
3638 ACE_TEXT ("IDL: No input files\n")));
3640 throw Bailout ();
3642 else
3644 long i;
3645 long j;
3647 // Put Microsoft-style pathnames into a canonical form.
3648 for (i = 0, j = 0; h[j] != '\0'; i++, j++)
3650 if (h[j] == '\\' && h[j + 1] == '\\')
3652 j++;
3655 h[i] = h[j];
3658 h[i] = '\0';
3659 #if defined (ACE_OPENVMS)
3660 // translate this into *nix format as the OpenVMS preprocessor
3661 // possibly produced VMS-style paths here.
3662 char trans_path[MAXPATHLEN] = "";
3663 char *temp_h = IDL_GlobalData::translateName (h, trans_path);
3664 if (temp_h)
3665 h = temp_h;
3666 else
3668 ACE_ERROR ((LM_ERROR,
3669 ACE_TEXT ("Unable to construct full file pathname\n")));
3670 throw Bailout ();
3672 #endif
3673 ACE_NEW (tmp,
3674 UTL_String (h, true));
3675 idl_global->update_prefix (tmp->get_string ());
3676 idl_global->set_filename (tmp);
3679 UTL_String *fname = idl_global->filename ();
3680 bool in_main_file = false;
3682 bool is_real_filename =
3683 fname->compare (idl_global->real_filename ())
3684 || same_file (fname->get_string(),
3685 idl_global->real_filename ()->get_string ());
3687 bool is_main_filename = false;
3689 if (!is_real_filename)
3691 #if defined (ACE_OPENVMS)
3692 char full_path[MAXPATHLEN] = "";
3693 char *full_fname = ACE_OS::realpath (fname->get_string (), full_path);
3694 // I don't see the benefit of using ->compare since this is targeted at IDL identifiers
3695 // not at filenames and in the case of OpenVMS (case-insensitive filesystem) gets really
3696 // problematic as filenames retrieved through different mechanisms may give different
3697 // casing.
3698 is_main_filename = FE_Utils::path_cmp (idl_global->main_filename ()->get_string (),
3699 full_fname) == 0;
3700 #else
3701 is_main_filename =
3702 fname->compare (idl_global->main_filename ())
3703 || same_file (fname->get_string (),
3704 idl_global->main_filename ()->get_string ());
3705 #endif
3708 if (is_real_filename || is_main_filename)
3710 in_main_file = true;
3713 idl_global->set_in_main_file (in_main_file);
3715 // Strip off any command line -I prefix that may have been added
3716 // by the preprocessor.
3717 if (!(idl_global->in_main_file ()) && idl_global->import ())
3719 ACE_NEW (nm,
3720 UTL_String (
3721 FE_Utils::stripped_preproc_include (
3722 fname->get_string ()), true));
3724 // This call also manages the #pragma prefix.
3725 idl_global->store_include_file_name (nm);
3729 // Store a #pragma line into the list of pragmas
3730 static void
3731 idl_store_pragma (char *buf)
3733 char *sp = buf + 1;
3734 int crunched = 0;
3736 // Remove all the blanks between the '#' and the 'pragma'.
3737 while (*sp != 'p')
3739 ++sp;
3740 ++crunched;
3743 char *tp = buf + 1;
3745 // This copies the crunched string back to the original, and
3746 // also compensates for the behavior of the Sun preprocessor,
3747 // which put spaces around the double colons of a non-quoted
3748 // scoped name, a case which is possible in #pragma version.
3749 // Also eats whitespace, which some preprocessors (for example
3750 // Intel) don't automatically do.
3751 while (*sp != '\n')
3753 if (*sp == ' ' && (*(sp + 1) == ':' || *(sp + 1) == ' '))
3755 ++crunched;
3757 else if (*sp == ':' && *(sp + 1) == ' ')
3759 *tp = *sp;
3760 ++crunched;
3761 ++sp;
3762 ++tp;
3764 else
3766 *tp = *sp;
3767 ++tp;
3770 ++sp;
3773 // The '\n' is still <crunched> spaces too far away, with
3774 // garbage characters in between.
3775 sp -= crunched;
3776 *sp = '\0';
3778 if (ACE_OS::strstr (buf + 8, "import") != 0)
3780 idl_global->set_import (true);
3781 return;
3784 if (ACE_OS::strstr (buf + 8, "include") != 0)
3786 idl_global->set_import (false);
3787 return;
3790 if (ACE_OS::strncmp (buf + 8, "prefix", 6) == 0)
3792 char *new_prefix = idl_get_pragma_string (buf);
3794 if (new_prefix != 0)
3796 unsigned long depth = idl_global->scopes ().depth ();
3798 // We replace the prefix only if there is a prefix already
3799 // associated with this file, otherwise we add the prefix.
3800 char *ext_id = idl_global->filename ()->get_string ();
3801 ACE_Hash_Map_Entry<char *, char *> *entry = 0;
3802 int const status =
3803 idl_global->file_prefixes ().find (ext_id, entry);
3805 if (status == 0)
3807 if (ACE_OS::strcmp (entry->int_id_, "") != 0)
3809 char *trash = 0;
3810 idl_global->pragma_prefixes ().pop (trash);
3811 delete [] trash;
3813 else if (depth == 1)
3815 // Remove the default "" and bind the new prefix.
3816 ACE::strdelete (entry->ext_id_);
3817 ACE::strdelete (entry->int_id_);
3818 (void) idl_global->file_prefixes ().unbind (entry);
3819 (void) idl_global->file_prefixes ().bind (ACE::strnew (ext_id),
3820 ACE::strnew (new_prefix));
3824 UTL_Scope *top_scope = idl_global->scopes ().top ();
3826 if (depth > 1)
3828 top_scope->has_prefix (true);
3829 ScopeAsDecl (top_scope)->prefix_scope (top_scope);
3832 idl_global->pragma_prefixes ().push (new_prefix);
3834 if (depth == 1)
3836 idl_global->root ()->prefix (new_prefix);
3839 if (idl_global->in_main_file ())
3841 idl_global->root ()->set_imported (false);
3842 top_scope->has_prefix (true);
3845 if (status != 0)
3847 (void) idl_global->file_prefixes ().bind (ACE::strnew (ext_id),
3848 ACE::strnew (new_prefix));
3852 else if (ACE_OS::strncmp (buf + 8, "version", 7) == 0)
3854 char *tmp = buf + 16;
3856 while (*tmp == ' ' || *tmp == '\t')
3858 ++tmp;
3861 char *number = ACE_OS::strchr (tmp, ' ');
3863 if (number == 0)
3865 number = ACE_OS::strchr (tmp, '\t');
3868 // Used later to trim the type string.
3869 ptrdiff_t cutoff = number - tmp;
3871 // Most likely this means there is only a version number
3872 // without an identifier to apply it to.
3873 if (number == 0)
3875 const char *msg = "no identifier or scoped name";
3876 idl_global->err ()->version_syntax_error (msg);
3877 return;
3880 while (*number == ' ' || *number == '\t')
3882 ++number;
3885 size_t len = ACE_OS::strlen (number);
3887 // For some reason, the SunCC preprocessor adds a trailing space, which
3888 // messes with idl_valid_version() below, so we check and remove.
3889 while (number[len - 1] == ' ')
3891 number[len - 1] = '\0';
3892 len = ACE_OS::strlen (number);
3895 // Trim the type string after trimming the number string.
3896 tmp[cutoff] = '\0';
3898 // This call adds a proper null terminator to tmp, so no need to
3899 // do it here.
3900 AST_Decl *d = idl_find_node (tmp);
3902 if (d == 0)
3904 return;
3907 if (!idl_valid_version (number))
3909 idl_global->err ()->version_number_error (number);
3910 return;
3913 d->version (ACE::strnew (number));
3915 else if (ACE_OS::strncmp (buf + 8, "ident", 5) == 0)
3917 idl_global->ident_string (buf + 8);
3919 else if (ACE_OS::strncmp (buf + 8, "ID", 2) == 0)
3921 char *tmp = buf + 11;
3923 while (*tmp == ' ')
3925 ++tmp;
3928 ACE_CString work (tmp);
3929 work = work.substr (0, work.find (' '));
3931 AST_Decl *d = idl_find_node (work.c_str ());
3933 if (d == 0)
3935 return;
3938 char *new_id = idl_get_pragma_string (buf);
3940 if (new_id != 0)
3942 if (d->typeid_set ())
3944 idl_global->err ()->id_reset_error (d->repoID (),
3945 new_id);
3946 return;
3949 d->repoID (new_id);
3950 d->typeid_set (true);
3953 else if (ACE_OS::strncmp (buf + 8, "DCPS_DATA_TYPE", 14) == 0)
3955 char *sample_type = idl_get_pragma_string (buf);
3956 idl_global->add_dcps_data_type (sample_type);
3958 // Delete sample_type since add_dcps_data_type() doesn't take its ownership.
3959 delete [] sample_type;
3961 else if (ACE_OS::strncmp (buf + 8, "DCPS_DATA_KEY", 13) == 0)
3963 char *tmp = idl_get_pragma_string (buf);
3965 // Split up data type and key strings
3966 char *sample_type = tmp;
3968 while (*tmp && !isspace (*tmp))
3970 ++tmp;
3973 while (isspace (*tmp))
3975 *tmp = '\0';
3976 tmp++;
3979 char *key = tmp;
3981 if (!idl_global->add_dcps_data_key (sample_type, key))
3983 ACE_ERROR((LM_ERROR, "DCPS_DATA_TYPE \"%C\" not found for key \"%C\"\n",
3984 sample_type, key));
3987 // Delete sample_type since add_dcps_data_key() doesn't take its ownership.
3988 delete [] sample_type;
3990 else if (ACE_OS::strncmp (buf + 8, "DCPS_DATA_SEQUENCE_TYPE", 23) == 0)
3992 char *seq_type = idl_get_pragma_string (buf);
3993 idl_global->set_dcps_sequence_type (seq_type);
3995 delete [] seq_type;
3997 else if (ACE_OS::strncmp (buf + 8, "DCPS_SUPPORT_ZERO_COPY_READ", 27) == 0)
3999 idl_global->dcps_support_zero_copy_read (true);
4001 else if (ACE_OS::strncmp (buf + 8, "DCPS_GEN_ZERO_COPY_READ", 23) == 0)
4003 idl_global->dcps_gen_zero_copy_read (true);
4005 else if (ACE_OS::strncmp (buf + 8, "ciao lem", 8) == 0)
4007 char *tmp = idl_get_pragma_string (buf);
4008 idl_global->add_ciao_lem_file_names (tmp);
4010 // Delete tmp since add_ciao_lem_file_names() doesn't take its ownership.
4011 delete [] tmp;
4013 else if (ACE_OS::strncmp (buf + 8, "ndds typesupport", 16) == 0)
4015 char *tmp = idl_get_pragma_string (buf);
4016 idl_global->add_ciao_rti_ts_file_names (tmp);
4018 // Delete tmp since add_ciao_rti_ts_file_names() doesn't take its ownership.
4019 delete [] tmp;
4021 else if (ACE_OS::strncmp (buf + 8, "coredx typesupport", 18) == 0)
4023 char *tmp = idl_get_pragma_string (buf);
4024 idl_global->add_ciao_coredx_ts_file_names (tmp);
4026 // Delete tmp since add_ciao_coredx_ts_file_names() doesn't take its ownership.
4027 delete [] tmp;
4029 else if (ACE_OS::strncmp (buf + 8, "opendds typesupport", 19) == 0)
4031 char *tmp = idl_get_pragma_string (buf);
4032 idl_global->add_ciao_oci_ts_file_names (tmp);
4034 // Delete tmp since add_ciao_oci_ts_file_names() doesn't take its ownership.
4035 delete [] tmp;
4037 else if (ACE_OS::strncmp (buf + 8, "splice typesupport", 18) == 0)
4039 char *tmp = idl_get_pragma_string (buf);
4040 idl_global->add_ciao_spl_ts_file_names (tmp);
4042 // Delete tmp since add_ciao_spl_ts_file_names() doesn't take its ownership.
4043 delete [] tmp;
4045 else if ((ACE_OS::strncmp (buf + 8, "ciao ami4ccm interface", 22) == 0) ||
4046 (ACE_OS::strncmp (buf + 8, "ami4ccm interface", 17) == 0))
4048 if (idl_global->in_main_file ())
4050 char *tmp = idl_get_pragma_string (buf);
4051 idl_global->add_ciao_ami_iface_names (tmp);
4053 // Delete tmp since add_ciao_ami_iface_names() doesn't take its ownership.
4054 delete [] tmp;
4057 else if ((ACE_OS::strncmp (buf + 8, "ciao ami4ccm receptacle", 23) == 0) ||
4058 (ACE_OS::strncmp (buf + 8, "ami4ccm receptacle", 18) == 0))
4060 char *tmp = idl_get_pragma_string (buf);
4062 if (idl_global->in_main_file ())
4064 idl_global->add_ciao_ami_recep_names (tmp);
4066 else
4068 /// This is intended for the executor IDL file,
4069 /// when a pragma is seen in the main file, but
4070 /// it will do no harm in other cases.
4071 idl_global->add_included_ami_recep_names (tmp);
4074 // Delete tmp since add_ciao_spl_ts_file_names() doesn't take its ownership.
4075 delete [] tmp;
4077 else if ((ACE_OS::strncmp (buf + 8, "ciao ami4ccm idl", 16) == 0) ||
4078 (ACE_OS::strncmp (buf + 8, "ami4ccm idl", 11) == 0))
4080 char *tmp = idl_get_pragma_string (buf);
4082 /// These pragmas are found in the file where the interface
4083 /// that has a AMI4CCM_* counterpart in the *A.idl file
4084 /// is declared. We add the filename to the list in all
4085 /// IDL files *except* the one where it is found, to
4086 /// eliminate a circular include of xxxC.h and xxxAC.h.
4087 if (!idl_global->in_main_file ())
4089 idl_global->add_ciao_ami_idl_fnames (tmp);
4092 // Delete tmp since add_ciao_ami_idl_fnames() doesn't take its ownership.
4093 delete [] tmp;
4095 else if (ACE_OS::strncmp (buf + 8, "dds4ccm impl", 12) == 0)
4097 char *tmp = idl_get_pragma_string (buf);
4099 idl_global->add_dds4ccm_impl_fnames (tmp);
4101 // Delete tmp since add_dds4ccm_impl_fnames() doesn't take its ownership.
4102 delete [] tmp;
4107 * idl_atoi - Convert a string of digits into a negative integer according to base b
4109 static ACE_CDR::LongLong
4110 idl_atoi (char *s, long b)
4112 ACE_CDR::LongLong r = 0;
4114 // Skip over the dash and possibly spaces after the dash
4115 while (*s == '-' || *s == ' ' || *s == '\t')
4117 ++s;
4120 if (b == 8 && *s == '0')
4122 ++s;
4124 else if (b == 16 && *s == '0' && (*(s + 1) == 'x' || *(s + 1) == 'X'))
4126 s += 2;
4129 for (; *s; ++s)
4131 if (*s <= '9' && *s >= '0')
4133 r = (r * b) + (*s - '0');
4135 else if (b > 10 && *s <= 'f' && *s >= 'a')
4137 r = (r * b) + (*s - 'a' + 10);
4139 else if (b > 10 && *s <= 'F' && *s >= 'A')
4141 r = (r * b) + (*s - 'A' + 10);
4143 else
4145 break;
4149 return -r;
4153 * idl_atoui - Convert a string of digits into an unsigned integer according to base b
4155 static ACE_CDR::ULongLong
4156 idl_atoui (char *s, long b)
4158 ACE_CDR::ULongLong r = 0;
4160 if (b == 8 && *s == '0')
4162 ++s;
4164 else if (b == 16 && *s == '0' && (*(s + 1) == 'x' || *(s + 1) == 'X'))
4166 s += 2;
4169 for (; *s; ++s)
4171 if (*s <= '9' && *s >= '0')
4173 r = (r * b) + (*s - '0');
4175 else if (b > 10 && *s <= 'f' && *s >= 'a')
4177 r = (r * b) + (*s - 'a' + 10);
4179 else if (b > 10 && *s <= 'F' && *s >= 'A')
4181 r = (r * b) + (*s - 'A' + 10);
4183 else
4185 break;
4189 return r;
4193 * Convert a string to a float; atof doesn't seem to work, always.
4195 static ACE_CDR::Double
4196 idl_atof (char *s)
4198 double d = 0.0;
4199 double e, k;
4200 long neg = 0, negexp = 0;
4202 if (*s == '-')
4204 neg = 1;
4206 // Skip over the dash and possibly spaces after the dash
4207 while (*s == '-' || *s == ' ' || *s == '\t')
4209 ++s;
4213 while (*s >= '0' && *s <= '9')
4215 d = (d * 10) + *s - '0';
4216 ++s;
4219 if (*s == '.')
4221 ++s;
4222 e = 10;
4224 while (*s >= '0' && *s <= '9')
4226 d += (*s - '0') / (e * 1.0);
4227 e *= 10;
4228 ++s;
4232 if (*s == 'e' || *s == 'E')
4234 ++s;
4236 if (*s == '-')
4238 negexp = 1;
4239 s++;
4241 else if (*s == '+')
4243 ++s;
4246 e = 0;
4248 while (*s >= '0' && *s <= '9')
4250 e = (e * 10) + *s - '0';
4251 ++s;
4254 if (e > 0)
4256 for (k = 1; e > 0; k *= 10, e--) ;
4258 if (negexp)
4260 d /= k;
4262 else
4264 d *= k;
4269 if (neg)
4271 d *= -1.0;
4274 return d;
4278 * Convert (some) escaped characters into their ascii values
4280 static char
4281 idl_escape_reader (char *str)
4283 if (str[0] != '\\')
4285 return str[0];
4288 switch (str[1])
4290 case 'n':
4291 return '\n';
4292 case 't':
4293 return '\t';
4294 case 'v':
4295 return '\v';
4296 case 'b':
4297 return '\b';
4298 case 'r':
4299 return '\r';
4300 case 'f':
4301 return '\f';
4302 case 'a':
4303 return '\a';
4304 case '\\':
4305 return '\\';
4306 case '\?':
4307 return '?';
4308 case '\'':
4309 return '\'';
4310 case '"':
4311 return '"';
4312 case 'x':
4314 int i;
4316 // hex value
4317 for (i = 2; str[i] != '\0' && isxdigit (str[i]); ++i)
4319 continue;
4322 char save = str[i];
4323 str[i] = '\0';
4324 char out = (char)idl_atoui(&str[2], 16);
4325 str[i] = save;
4326 return out;
4328 ACE_NOTREACHED (break;)
4329 default:
4330 // check for octal value
4331 if (str[1] >= '0' && str[1] <= '7')
4333 int i;
4335 for (i = 1; str[i] >= '0' && str[i] <= '7'; ++i)
4337 continue;
4340 char save = str[i];
4341 str[i] = '\0';
4342 char out = (char)idl_atoui(&str[1], 8);
4343 str[i] = save;
4344 return out;
4346 else
4348 return str[1] - 'a';
4350 ACE_NOTREACHED (break;)
4354 * Convert escaped hex digits into a wchar
4356 static ACE_CDR::WChar
4357 idl_wchar_escape_reader (char *str)
4359 if (str[0] != '\\' || str[1] != 'u')
4361 return 0;
4364 int i;
4365 // get the hex digits
4366 for (i = 2; str[i] != '\0' && isxdigit (str[i]); i++)
4368 continue;
4370 char save = str[i];
4371 str[i] = '\0';
4372 ACE_CDR::WChar out = (ACE_CDR::WChar) idl_atoui (&str[2], 16);
4373 str[i] = save;
4374 return out;
4378 * Checks wstring for validity
4380 static char *
4381 idl_wstring_escape_reader (char *str)
4383 return str;
4386 static char *
4387 idl_get_pragma_string (char *pragma)
4389 // Get pointers to each end of the substring between the quotes.
4390 const char *firstquote = ACE_OS::strchr (pragma, '"');
4392 if (firstquote == 0)
4394 idl_global->err ()->syntax_error (
4395 IDL_GlobalData::PS_PragmaPrefixSyntax
4398 return 0;
4401 const char *start = firstquote + 1;
4402 const char *end = ACE_OS::strchr (start, '"');
4404 if (end == 0)
4406 idl_global->err ()->syntax_error (
4407 IDL_GlobalData::PS_PragmaPrefixSyntax
4410 return 0;
4413 int len = static_cast<int> (end - start);
4414 char *retval = 0;
4416 ACE_NEW_RETURN (retval,
4417 char[len + 1],
4420 ACE_OS::strncpy (retval,
4421 start,
4422 len);
4424 retval[len] = '\0';
4425 return retval;
4428 static bool
4429 idl_valid_version (char *s)
4431 // Nothing preceding decimal point.
4432 if (*s == '.')
4434 return 0;
4437 char *minor = ACE_OS::strchr (s, '.');
4438 int i;
4440 if (minor == 0)
4442 // No decimal point.
4443 return 0;
4446 if (*(minor + 1) == '\0')
4448 // Nothing following decimal point.
4449 return 0;
4452 char *tmp = minor + 1;
4454 for (i = 0; tmp[i] != '\0'; ++i)
4456 if (!isdigit (tmp[i]))
4458 return 0;
4462 ptrdiff_t const len = minor - s;
4464 for (i = 0; i < len; ++i)
4466 if (!isdigit (s[i]))
4468 return 0;
4472 // Major and minor version numbers must be unsigned shorts.
4473 if (ACE_OS::atoi (minor + 1) > ACE_UINT16_MAX
4474 || ACE_OS::atoi (s) > ACE_UINT16_MAX)
4476 return 0;
4479 return 1;
4482 static AST_Decl *
4483 idl_find_node (const char *s)
4485 UTL_ScopedName * node = FE_Utils::string_to_scoped_name (s);
4486 AST_Decl * d = 0;
4488 if (node != 0)
4490 d = idl_global->scopes ().top_non_null ()->lookup_by_name (node);
4492 if (d == 0)
4494 idl_global->err ()->lookup_error (node);
4497 node->destroy ();
4498 delete node;
4501 return d;