Isolated as much as possible IDL wrapping logic.
Introduced flag SALOME_PARAVIS_MINIMAL_CORBA to turn the wrapping off.
+++ /dev/null
-#line 2 "lex.yy.c"
-
-#line 4 "lex.yy.c"
-
-#define YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 35
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
-
-/* First, we deal with platform-specific or compiler-specific issues. */
-
-/* begin standard C headers. */
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-
-/* end standard C headers. */
-
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-
-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types.
- */
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS 1
-#endif
-
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t;
-typedef unsigned short int flex_uint16_t;
-typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
-
-/* Limits of integral types. */
-#ifndef INT8_MIN
-#define INT8_MIN (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX (4294967295U)
-#endif
-
-#endif /* ! FLEXINT_H */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else /* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif /* defined (__STDC__) */
-#endif /* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index. If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-/* Enter a start condition. This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN (yy_start) = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state. The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START (((yy_start) - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart(yyin )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
-#define YY_BUF_SIZE 16384
-#endif
-
-/* The state buf must be large enough to hold one state per character in the main buffer.
- */
-#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-extern yy_size_t yyleng;
-
-extern FILE *yyin, *yyout;
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
- /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
- * access to the local variable yy_act. Since yyless() is a macro, it would break
- * existing scanners that call yyless() from OUTSIDE yylex.
- * One obvious solution it to make yy_act a global. I tried that, and saw
- * a 5% performance hit in a non-yylineno scanner, because yy_act is
- * normally declared as a register variable-- so it is not worth it.
- */
- #define YY_LESS_LINENO(n) \
- do { \
- yy_size_t yyl;\
- for ( yyl = n; yyl < yyleng; ++yyl )\
- if ( yytext[yyl] == '\n' )\
- --yylineno;\
- }while(0)
-
-/* Return all but the first "n" matched characters back to the input stream. */
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up yytext. */ \
- int yyless_macro_arg = (n); \
- YY_LESS_LINENO(yyless_macro_arg);\
- *yy_cp = (yy_hold_char); \
- YY_RESTORE_YY_MORE_OFFSET \
- (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
- YY_DO_BEFORE_ACTION; /* set up yytext again */ \
- } \
- while ( 0 )
-
-#define unput(c) yyunput( c, (yytext_ptr) )
-
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
-struct yy_buffer_state
- {
- FILE *yy_input_file;
-
- char *yy_ch_buf; /* input buffer */
- char *yy_buf_pos; /* current position in input buffer */
-
- /* Size of input buffer in bytes, not including room for EOB
- * characters.
- */
- yy_size_t yy_buf_size;
-
- /* Number of characters read into yy_ch_buf, not including EOB
- * characters.
- */
- yy_size_t yy_n_chars;
-
- /* Whether we "own" the buffer - i.e., we know we created it,
- * and can realloc() it to grow it, and should free() it to
- * delete it.
- */
- int yy_is_our_buffer;
-
- /* Whether this is an "interactive" input source; if so, and
- * if we're using stdio for input, then we want to use getc()
- * instead of fread(), to make sure we stop fetching input after
- * each newline.
- */
- int yy_is_interactive;
-
- /* Whether we're considered to be at the beginning of a line.
- * If so, '^' rules will be active on the next match, otherwise
- * not.
- */
- int yy_at_bol;
-
- int yy_bs_lineno; /**< The line count. */
- int yy_bs_column; /**< The column count. */
-
- /* Whether to try to fill the input buffer when we reach the
- * end of it.
- */
- int yy_fill_buffer;
-
- int yy_buffer_status;
-
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
- /* When an EOF's been seen but there's still some text to process
- * then we mark the buffer as YY_EOF_PENDING, to indicate that we
- * shouldn't try reading from the input source any more. We might
- * still have a bunch of tokens to match, though, because of
- * possible backing-up.
- *
- * When we actually see the EOF, we change the status to "new"
- * (via yyrestart()), so that the user can continue scanning by
- * just pointing yyin at a new input file.
- */
-#define YY_BUFFER_EOF_PENDING 2
-
- };
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-/* Stack of input buffers. */
-static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
-static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- *
- * Returns the top of the stack, or NULL.
- */
-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
- ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
- : NULL)
-
-/* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-
-/* yy_hold_char holds the character lost when yytext is formed. */
-static char yy_hold_char;
-static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
-yy_size_t yyleng;
-
-/* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 0; /* whether we need to initialize */
-static int yy_start = 0; /* start state number */
-
-/* Flag which is used to allow yywrap()'s to do buffer switches
- * instead of setting up a fresh yyin. A bit of a hack ...
- */
-static int yy_did_buffer_switch_on_eof;
-
-void yyrestart (FILE *input_file );
-void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
-YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
-void yy_delete_buffer (YY_BUFFER_STATE b );
-void yy_flush_buffer (YY_BUFFER_STATE b );
-void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
-void yypop_buffer_state (void );
-
-static void yyensure_buffer_stack (void );
-static void yy_load_buffer_state (void );
-static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
-
-#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
-
-YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
-YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
-YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len );
-
-void *yyalloc (yy_size_t );
-void *yyrealloc (void *,yy_size_t );
-void yyfree (void * );
-
-#define yy_new_buffer yy_create_buffer
-
-#define yy_set_interactive(is_interactive) \
- { \
- if ( ! YY_CURRENT_BUFFER ){ \
- yyensure_buffer_stack (); \
- YY_CURRENT_BUFFER_LVALUE = \
- yy_create_buffer(yyin,YY_BUF_SIZE ); \
- } \
- YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
- }
-
-#define yy_set_bol(at_bol) \
- { \
- if ( ! YY_CURRENT_BUFFER ){\
- yyensure_buffer_stack (); \
- YY_CURRENT_BUFFER_LVALUE = \
- yy_create_buffer(yyin,YY_BUF_SIZE ); \
- } \
- YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
- }
-
-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-
-/* Begin user sect3 */
-
-typedef unsigned char YY_CHAR;
-
-FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
-
-typedef int yy_state_type;
-
-extern int yylineno;
-
-int yylineno = 1;
-
-extern char *yytext;
-#define yytext_ptr yytext
-
-static yy_state_type yy_get_previous_state (void );
-static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
-static int yy_get_next_buffer (void );
-static void yy_fatal_error (yyconst char msg[] );
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
- */
-#define YY_DO_BEFORE_ACTION \
- (yytext_ptr) = yy_bp; \
- yyleng = (size_t) (yy_cp - yy_bp); \
- (yy_hold_char) = *yy_cp; \
- *yy_cp = '\0'; \
- (yy_c_buf_p) = yy_cp;
-
-#define YY_NUM_RULES 173
-#define YY_END_OF_BUFFER 174
-/* This struct is not used in this scanner,
- but its presence is necessary. */
-struct yy_trans_info
- {
- flex_int32_t yy_verify;
- flex_int32_t yy_nxt;
- };
-static yyconst flex_int16_t yy_accept[1116] =
- { 0,
- 0, 0, 174, 172, 142, 143, 143, 171, 172, 171,
- 171, 172, 171, 171, 171, 171, 171, 171, 171, 140,
- 139, 171, 171, 171, 171, 133, 133, 133, 133, 133,
- 133, 169, 172, 170, 171, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 171, 142, 11, 11, 14, 171,
- 172, 142, 164, 0, 15, 0, 157, 161, 158, 0,
- 0, 0, 116, 117, 0, 0, 0, 0, 155, 151,
- 153, 152, 154, 149, 147, 0, 134, 1, 13, 156,
- 135, 138, 0, 0, 139, 139, 139, 168, 146, 165,
-
- 163, 166, 150, 133, 133, 133, 133, 133, 133, 133,
- 133, 141, 0, 160, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 70, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 159, 162, 142, 11, 14,
- 0, 0, 14, 14, 12, 0, 15, 16, 16, 0,
- 0, 0, 0, 0, 148, 167, 134, 134, 13, 135,
- 135, 138, 138, 0, 136, 137, 144, 145, 133, 133,
- 133, 133, 0, 133, 133, 133, 133, 133, 133, 133,
-
- 133, 133, 68, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 25,
- 133, 133, 133, 133, 58, 72, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 74, 12, 14, 12, 12, 12, 12, 0, 0,
- 0, 0, 0, 0, 0, 134, 0, 135, 136, 137,
- 133, 133, 133, 133, 0, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 66, 133, 133, 29,
- 24, 133, 133, 133, 133, 133, 133, 42, 133, 133,
-
- 133, 133, 133, 133, 23, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 0, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 28, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 12, 12, 12, 12,
- 12, 12, 12, 12, 0, 0, 0, 0, 0, 133,
- 133, 133, 133, 128, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 77, 37,
- 78, 45, 133, 133, 133, 133, 133, 20, 133, 133,
- 133, 133, 133, 133, 133, 71, 133, 133, 133, 133,
-
- 133, 133, 22, 133, 133, 133, 133, 133, 0, 133,
- 133, 133, 61, 133, 133, 43, 133, 57, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 12, 12, 12, 12, 12, 12,
- 12, 2, 3, 0, 0, 0, 0, 0, 133, 133,
- 133, 133, 128, 133, 133, 133, 121, 133, 133, 133,
- 133, 133, 133, 133, 133, 69, 76, 133, 59, 19,
- 133, 133, 52, 49, 50, 133, 133, 133, 73, 133,
- 133, 133, 133, 39, 133, 133, 133, 27, 30, 133,
- 51, 0, 0, 0, 133, 38, 133, 133, 133, 133,
-
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 75, 12, 12, 12, 2,
- 3, 12, 12, 12, 2, 3, 0, 0, 0, 0,
- 0, 133, 133, 133, 133, 133, 133, 133, 120, 133,
- 131, 133, 133, 133, 21, 133, 133, 133, 133, 133,
- 133, 47, 133, 133, 133, 40, 133, 0, 133, 133,
- 133, 31, 133, 0, 0, 0, 124, 124, 133, 55,
- 133, 133, 44, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 0, 12, 12, 12, 2, 3, 12,
-
- 12, 12, 0, 0, 0, 0, 0, 118, 119, 121,
- 17, 121, 32, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 60, 123, 123, 133, 48, 122,
- 122, 0, 133, 0, 67, 133, 0, 36, 133, 0,
- 0, 0, 53, 54, 26, 46, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 12,
- 12, 12, 5, 12, 12, 0, 0, 0, 0, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 56, 0,
- 41, 0, 133, 133, 0, 0, 0, 133, 133, 133,
-
- 133, 133, 133, 133, 79, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 5, 12, 12, 5, 12, 12, 0, 0, 133, 132,
- 133, 133, 130, 64, 133, 0, 0, 0, 133, 133,
- 0, 0, 0, 133, 133, 133, 133, 133, 133, 133,
- 18, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 5, 12, 12, 12, 12,
- 0, 4, 133, 133, 133, 133, 0, 0, 0, 133,
- 62, 0, 0, 0, 133, 133, 133, 81, 133, 133,
- 133, 133, 80, 133, 133, 133, 133, 133, 133, 133,
-
- 133, 106, 133, 133, 133, 133, 133, 133, 12, 12,
- 12, 12, 0, 133, 133, 133, 63, 0, 0, 0,
- 133, 0, 0, 133, 127, 133, 133, 133, 133, 133,
- 133, 133, 133, 125, 133, 108, 110, 112, 102, 133,
- 133, 133, 133, 107, 133, 133, 133, 12, 12, 12,
- 12, 0, 133, 133, 129, 0, 0, 0, 33, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 109, 111, 113, 133, 133, 133, 12, 12, 12, 12,
- 12, 12, 12, 0, 133, 133, 0, 34, 0, 133,
-
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 114, 115, 133,
- 133, 133, 133, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 0, 133, 104, 0, 133, 87, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 133, 133, 133, 133, 133, 133, 133, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 6, 133,
- 0, 35, 65, 133, 133, 133, 133, 133, 133, 133,
- 133, 133, 84, 133, 133, 133, 133, 133, 133, 133,
- 133, 126, 133, 133, 12, 12, 12, 12, 6, 12,
-
- 12, 12, 12, 6, 133, 133, 133, 86, 83, 133,
- 133, 133, 133, 97, 85, 82, 133, 133, 133, 133,
- 96, 133, 133, 133, 12, 12, 12, 12, 6, 12,
- 12, 12, 12, 105, 133, 133, 92, 93, 94, 95,
- 88, 89, 90, 91, 133, 133, 133, 12, 12, 12,
- 12, 12, 12, 12, 12, 133, 133, 133, 133, 133,
- 12, 12, 12, 12, 10, 12, 12, 12, 100, 133,
- 103, 133, 133, 10, 12, 12, 12, 10, 12, 8,
- 9, 133, 133, 133, 10, 12, 8, 9, 12, 8,
- 9, 133, 133, 133, 12, 8, 9, 12, 133, 133,
-
- 99, 12, 7, 133, 133, 7, 7, 133, 133, 7,
- 133, 98, 133, 101, 0
- } ;
-
-static yyconst flex_int32_t yy_ec[256] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
- 4, 4, 5, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 6, 7, 8, 9, 1, 10, 11, 12, 13,
- 14, 15, 16, 14, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 25, 27, 25, 28, 14, 29,
- 30, 31, 1, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 40,
- 58, 59, 60, 61, 62, 1, 63, 64, 65, 66,
-
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 14, 89, 14, 14, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1
- } ;
-
-static yyconst flex_int32_t yy_meta[90] =
- { 0,
- 1, 2, 3, 1, 2, 2, 1, 1, 1, 1,
- 2, 4, 1, 1, 2, 1, 1, 5, 1, 6,
- 6, 6, 6, 6, 6, 6, 6, 7, 1, 1,
- 1, 1, 8, 8, 8, 8, 8, 8, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 1, 1, 1,
- 1, 9, 8, 8, 8, 8, 8, 8, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 1
- } ;
-
-static yyconst flex_int16_t yy_base[1153] =
- { 0,
- 0, 88, 2594, 2595, 90, 2595, 2595, 2563, 87, 2562,
- 87, 2532, 97, 2595, 2560, 85, 88, 113, 91, 133,
- 151, 2561, 84, 2558, 92, 63, 2525, 83, 42, 128,
- 85, 2595, 124, 2595, 2556, 2523, 103, 120, 122, 136,
- 119, 87, 125, 86, 79, 145, 147, 131, 148, 159,
- 164, 162, 171, 106, 113, 252, 2595, 2595, 2525, 217,
- 2512, 214, 2595, 158, 2595, 186, 2595, 2595, 2595, 223,
- 227, 257, 2595, 2595, 116, 2554, 216, 209, 2595, 2595,
- 2595, 2595, 2595, 2566, 2595, 2562, 254, 2595, 0, 2595,
- 273, 293, 311, 0, 321, 341, 353, 2595, 2549, 2595,
-
- 2595, 2595, 2548, 2515, 205, 227, 208, 335, 241, 142,
- 239, 2595, 2573, 2595, 344, 221, 226, 240, 247, 203,
- 242, 323, 321, 267, 324, 322, 339, 325, 332, 334,
- 244, 328, 329, 352, 351, 356, 287, 2513, 357, 358,
- 261, 361, 360, 362, 371, 378, 372, 366, 381, 383,
- 386, 387, 389, 393, 390, 2595, 2595, 466, 2595, 2515,
- 2554, 2501, 2512, 471, 447, 276, 248, 2595, 444, 2542,
- 2541, 437, 433, 434, 2595, 2595, 466, 484, 0, 492,
- 511, 521, 533, 541, 549, 557, 2595, 2595, 458, 417,
- 478, 462, 2540, 2505, 461, 420, 523, 459, 293, 421,
-
- 524, 80, 2504, 525, 536, 526, 534, 545, 539, 546,
- 542, 541, 330, 553, 556, 549, 569, 567, 548, 2503,
- 571, 573, 574, 576, 2502, 2501, 577, 603, 579, 582,
- 585, 584, 583, 586, 588, 587, 593, 437, 590, 625,
- 602, 599, 594, 607, 613, 617, 616, 614, 291, 618,
- 661, 2500, 683, 679, 0, 665, 2509, 2508, 2481, 2476,
- 716, 656, 666, 658, 723, 731, 739, 747, 755, 763,
- 662, 663, 670, 664, 0, 758, 743, 647, 666, 731,
- 672, 741, 732, 637, 668, 770, 2495, 742, 744, 2494,
- 2493, 753, 747, 754, 757, 761, 750, 2492, 746, 771,
-
- 776, 778, 779, 673, 2491, 780, 781, 808, 784, 786,
- 674, 787, 790, 797, 791, 794, 798, 804, 2490, 802,
- 811, 2523, 801, 816, 812, 467, 817, 822, 823, 825,
- 826, 2488, 828, 827, 833, 829, 835, 837, 839, 838,
- 844, 845, 846, 849, 850, 876, 0, 900, 2497, 2496,
- 868, 2480, 2490, 2489, 2470, 2476, 894, 895, 896, 873,
- 880, 895, 893, 0, 877, 896, 887, 900, 883, 885,
- 886, 890, 884, 927, 894, 892, 898, 899, 2480, 2479,
- 2478, 2477, 905, 907, 908, 906, 914, 2476, 916, 913,
- 921, 919, 923, 924, 925, 2475, 929, 926, 932, 933,
-
- 934, 937, 2474, 938, 940, 968, 2473, 948, 938, 949,
- 952, 958, 2472, 955, 961, 2471, 963, 2470, 964, 966,
- 967, 969, 970, 971, 983, 974, 976, 980, 979, 978,
- 985, 981, 993, 992, 1014, 2464, 2474, 2473, 2495, 2490,
- 2445, 0, 0, 2458, 2444, 1034, 1035, 1036, 1016, 1017,
- 1034, 1035, 0, 1020, 1036, 1040, 1026, 1014, 1018, 1021,
- 1019, 1025, 1065, 1031, 1039, 2461, 2460, 1054, 2459, 2458,
- 1041, 1037, 2457, 2456, 2455, 1043, 1045, 1047, 2454, 1049,
- 1053, 1055, 1051, 1118, 1063, 1052, 1067, 2453, 2452, 1094,
- 2451, 2431, 2430, 2428, 1180, 2447, 1072, 1073, 1074, 1075,
-
- 1076, 1077, 1078, 1081, 1083, 1108, 1084, 1104, 1181, 1096,
- 1101, 1099, 1151, 1103, 1186, 2446, 2474, 2469, 2424, 0,
- 0, 2459, 2468, 2437, 0, 0, 2426, 2432, 1187, 1139,
- 1216, 1116, 1117, 1184, 1168, 1187, 1190, 1185, 2437, 1189,
- 2436, 1155, 1172, 1192, 2435, 1183, 1196, 1198, 2434, 1194,
- 1276, 2433, 1110, 1247, 1365, 1260, 1205, 1268, 1248, 1251,
- 1336, 2432, 1278, 2411, 2410, 2411, 2595, 2428, 1249, 2427,
- 1250, 1252, 2426, 1257, 1258, 1288, 1264, 1268, 1283, 1270,
- 1284, 1337, 1338, 1286, 1291, 1293, 1339, 1294, 1340, 1367,
- 1341, 1349, 1296, 2459, 2441, 2450, 2419, 0, 0, 2446,
-
- 2430, 2401, 2413, 2416, 1376, 1385, 1429, 2595, 2450, 1368,
- 2415, 1388, 2414, 2413, 1375, 2412, 1376, 1377, 1347, 1378,
- 1379, 1381, 1380, 1408, 2411, 2595, 2410, 1395, 2409, 2595,
- 2408, 1461, 1297, 2395, 2406, 1385, 1466, 2595, 1344, 2387,
- 2386, 2394, 2402, 2401, 2400, 2399, 1386, 1394, 1396, 1414,
- 1261, 1413, 1415, 1419, 1420, 1421, 1423, 1427, 1428, 1430,
- 1429, 1436, 1384, 1434, 1438, 1460, 1440, 1441, 1469, 2423,
- 2407, 2378, 0, 2416, 2385, 2379, 2389, 1509, 1523, 1470,
- 1473, 1479, 1451, 1455, 1465, 1472, 1461, 1482, 2391, 2378,
- 1547, 2374, 1492, 1474, 2383, 2382, 2372, 1485, 1478, 1498,
-
- 1486, 1500, 1501, 1494, 2385, 1502, 1507, 1508, 1511, 1512,
- 1513, 1515, 1517, 1518, 1519, 1523, 1525, 1529, 1528, 1527,
- 0, 2405, 2374, 0, 2397, 2365, 2360, 2374, 1213, 2378,
- 1536, 1535, 2377, 2376, 1531, 2360, 1608, 2354, 1537, 1541,
- 2372, 2371, 2364, 1560, 1553, 1555, 1556, 1562, 1544, 1563,
- 2370, 1564, 1566, 1567, 1568, 1569, 1572, 1573, 1624, 1575,
- 1587, 1577, 1590, 1591, 1592, 0, 2384, 2352, 2383, 2346,
- 2364, 2595, 1605, 1608, 2364, 1595, 2343, 2350, 2342, 2360,
- 2359, 2345, 2344, 0, 1599, 1601, 1612, 2356, 1603, 1606,
- 1604, 1631, 2355, 1609, 1610, 1616, 1618, 1619, 1656, 1661,
-
- 1666, 2354, 1630, 1632, 1676, 1633, 1663, 1642, 2369, 2332,
- 2407, 2341, 2329, 1652, 1668, 1669, 2348, 2328, 2331, 1706,
- 1679, 0, 0, 1655, 2345, 1648, 1674, 1681, 1723, 1670,
- 1692, 1694, 1729, 2344, 1698, 2343, 2342, 2341, 2340, 1686,
- 1701, 1707, 1716, 2339, 1696, 1688, 1700, 2394, 2328, 1735,
- 2321, 2326, 2334, 1711, 1705, 1777, 2313, 1787, 2595, 1725,
- 1697, 1719, 1732, 1736, 1739, 1751, 1755, 1757, 1741, 1710,
- 1744, 1746, 1765, 1766, 1767, 1769, 1758, 1796, 1798, 1761,
- 2332, 2331, 2330, 1762, 1763, 1764, 1801, 2314, 2327, 2322,
- 2321, 2320, 2310, 2308, 1805, 1784, 1842, 2595, 2303, 1770,
-
- 1772, 1788, 1791, 1792, 1799, 1801, 1803, 1806, 1809, 1797,
- 1810, 1811, 1816, 1818, 1821, 1823, 1825, 2321, 2320, 1826,
- 1827, 1829, 1830, 2318, 2313, 2312, 2311, 2301, 2292, 2294,
- 2307, 2306, 2344, 2295, 1856, 2308, 1892, 1834, 2307, 1855,
- 1839, 1842, 1845, 1846, 1850, 1859, 1851, 1837, 1861, 1863,
- 1864, 1865, 1870, 1871, 1866, 1889, 1875, 1777, 1876, 2284,
- 2286, 2299, 2298, 2336, 2296, 2297, 2355, 2354, 0, 1905,
- 1947, 2595, 2297, 1885, 1892, 1880, 1883, 1893, 1894, 1896,
- 1899, 1900, 2296, 1901, 1903, 1902, 1904, 1906, 1907, 1908,
- 1909, 2295, 1919, 1921, 2289, 2290, 2348, 2341, 0, 2275,
-
- 2249, 2287, 2248, 0, 1944, 1927, 1929, 2240, 2231, 1931,
- 1932, 1933, 1934, 2222, 2213, 2204, 1935, 1937, 1938, 1939,
- 2174, 1940, 1942, 1955, 2164, 2138, 2176, 2137, 0, 2109,
- 2115, 2102, 2097, 2105, 1945, 1957, 2097, 2093, 2089, 2084,
- 2076, 2071, 2059, 2054, 1958, 1961, 1981, 2030, 2036, 2032,
- 2031, 2023, 2018, 2000, 1999, 1959, 1965, 1967, 1968, 1969,
- 1998, 2000, 1996, 1995, 0, 1992, 1995, 1994, 2007, 1971,
- 2005, 1972, 1975, 0, 1916, 1687, 1442, 0, 1154, 0,
- 0, 1979, 1990, 1983, 0, 1024, 0, 0, 784, 0,
- 0, 1985, 1986, 1989, 733, 0, 0, 629, 2008, 1992,
-
- 550, 313, 0, 1996, 1993, 0, 0, 2000, 1998, 0,
- 2002, 211, 2006, 47, 2595, 2083, 2092, 2100, 2105, 2109,
- 2118, 2122, 2126, 2135, 2139, 2144, 2148, 2156, 2160, 2164,
- 2173, 2175, 2179, 2188, 2197, 2206, 2215, 2224, 2233, 2242,
- 2249, 2256, 2263, 2272, 2281, 2290, 2299, 2308, 2317, 2326,
- 2335, 2344
- } ;
-
-static yyconst flex_int16_t yy_def[1153] =
- { 0,
- 1115, 1, 1115, 1115, 1115, 1115, 1115, 1115, 1116, 1115,
- 1115, 1117, 1118, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1119, 1115, 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120,
- 1120, 1115, 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1115, 1115, 1115, 1115, 1121, 1115,
- 1115, 1115, 1115, 1116, 1115, 1116, 1115, 1115, 1115, 1117,
- 1117, 1118, 1115, 1115, 1122, 1122, 1122, 1122, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1123, 1115, 1124, 1115,
- 1125, 1126, 1115, 1127, 1119, 1119, 1119, 1115, 1115, 1115,
-
- 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1115, 1115, 1115, 1115, 1121,
- 1115, 1115, 1121, 1121, 1128, 1115, 1116, 1115, 1117, 1122,
- 1115, 1122, 1122, 1122, 1115, 1115, 1123, 1123, 1124, 1125,
- 1125, 1126, 1126, 1115, 1129, 1130, 1115, 1115, 1120, 1120,
- 1120, 1120, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
-
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1131, 1121, 1128, 1128, 1128, 1128, 1115, 1115,
- 1118, 1122, 1122, 1122, 1115, 1123, 1115, 1125, 1129, 1130,
- 1120, 1120, 1120, 1120, 1132, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
-
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131, 1131, 1131,
- 1128, 1128, 1128, 1128, 1115, 1115, 1122, 1122, 1122, 1120,
- 1120, 1120, 1120, 1133, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
-
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1115, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1131, 1131, 1131, 1131, 1128, 1128,
- 1128, 1134, 1135, 1115, 1115, 1122, 1122, 1122, 1120, 1120,
- 1120, 1120, 1133, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120,
-
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131, 1131, 1136,
- 1137, 1128, 1128, 1128, 1134, 1135, 1115, 1115, 1122, 1122,
- 1122, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 495, 1120, 1120, 1120, 495, 1120, 1120, 1115, 1120, 1120,
- 1120, 1120, 1120, 1115, 1115, 1115, 1115, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1115, 1131, 1131, 1131, 1136, 1137, 1128,
-
- 1128, 1128, 1115, 1115, 1122, 1122, 1115, 1115, 1122, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1115, 1120, 1120, 1120, 1115,
- 1120, 1115, 1120, 1115, 1120, 1120, 1115, 1115, 1120, 1115,
- 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1131,
- 1131, 1131, 1138, 1128, 1128, 1115, 1115, 1122, 1122, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1115,
- 1120, 1115, 1120, 1120, 1115, 1115, 1115, 1120, 1120, 1120,
-
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1139, 1131, 1131, 1138, 1128, 1128, 1115, 1115, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1115, 1115, 1115, 1120, 1120,
- 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1139, 1131, 1131, 1128, 1128,
- 1115, 1115, 1120, 1120, 1120, 1120, 1115, 1115, 1115, 1120,
- 1120, 1115, 1115, 1140, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
-
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131,
- 1128, 1128, 1115, 1120, 1120, 1120, 1120, 1115, 1115, 1115,
- 1120, 1141, 1142, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131, 1128,
- 1128, 1115, 1120, 1120, 1120, 1115, 1115, 1115, 1115, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131, 1128, 1128,
- 1128, 1128, 1128, 1115, 1120, 1120, 1115, 1115, 1115, 1120,
-
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1131, 1131, 1131, 1131, 1131, 1128, 1128,
- 1128, 1128, 1128, 1115, 1120, 1120, 1115, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1131,
- 1131, 1131, 1131, 1131, 1128, 1128, 1128, 1128, 1143, 1120,
- 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1131, 1131, 1131, 1131, 1144, 1128,
-
- 1128, 1128, 1128, 1143, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1131, 1131, 1131, 1131, 1144, 1128,
- 1128, 1128, 1128, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131, 1131,
- 1131, 1128, 1128, 1128, 1128, 1120, 1120, 1120, 1120, 1120,
- 1131, 1131, 1131, 1131, 1145, 1128, 1128, 1128, 1120, 1120,
- 1120, 1120, 1120, 1146, 1131, 1131, 1131, 1145, 1128, 1147,
- 1148, 1120, 1120, 1120, 1146, 1131, 1149, 1150, 1128, 1147,
- 1148, 1120, 1120, 1120, 1131, 1149, 1150, 1128, 1120, 1120,
-
- 1120, 1131, 1151, 1120, 1120, 1152, 1151, 1120, 1120, 1152,
- 1120, 1120, 1120, 1120, 0, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115
- } ;
-
-static yyconst flex_int16_t yy_nxt[2685] =
- { 0,
- 4, 5, 6, 7, 7, 5, 8, 9, 4, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 21, 21, 21, 21, 21, 21, 22, 23, 24,
- 25, 4, 26, 27, 28, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 27, 29, 27,
- 27, 27, 27, 30, 31, 27, 27, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 27, 27,
- 43, 27, 27, 44, 45, 46, 47, 48, 27, 49,
- 50, 51, 52, 53, 27, 54, 27, 27, 55, 56,
- 57, 62, 58, 56, 65, 62, 59, 68, 72, 72,
-
- 80, 72, 72, 108, 82, 88, 60, 73, 106, 89,
- 105, 74, 99, 100, 81, 107, 69, 83, 84, 61,
- 90, 102, 103, 109, 106, 111, 112, 85, 113, 75,
- 86, 77, 87, 87, 87, 87, 87, 87, 87, 87,
- 106, 106, 156, 171, 106, 66, 106, 106, 106, 285,
- 91, 78, 92, 92, 92, 92, 92, 92, 92, 92,
- 128, 133, 132, 172, 106, 65, 129, 106, 91, 93,
- 95, 95, 95, 95, 95, 95, 95, 95, 116, 110,
- 106, 106, 155, 106, 194, 117, 106, 97, 94, 106,
- 118, 120, 106, 167, 126, 121, 119, 106, 122, 93,
-
- 130, 157, 123, 106, 127, 131, 106, 134, 106, 106,
- 140, 135, 124, 141, 142, 62, 66, 97, 94, 62,
- 106, 136, 125, 106, 137, 106, 138, 139, 143, 144,
- 147, 88, 106, 148, 168, 165, 171, 150, 169, 145,
- 146, 152, 151, 171, 66, 189, 90, 153, 173, 174,
- 149, 191, 154, 158, 159, 65, 159, 158, 72, 72,
- 160, 72, 72, 190, 106, 207, 106, 73, 193, 106,
- 161, 74, 106, 87, 87, 87, 87, 87, 87, 87,
- 87, 71, 106, 162, 195, 71, 203, 106, 106, 75,
- 178, 77, 87, 87, 87, 87, 87, 87, 87, 87,
-
- 106, 106, 106, 106, 208, 106, 66, 204, 106, 181,
- 91, 78, 92, 92, 92, 92, 92, 92, 92, 92,
- 178, 205, 106, 206, 232, 221, 184, 184, 106, 183,
- 185, 185, 185, 185, 185, 185, 185, 185, 91, 181,
- 95, 95, 95, 95, 95, 95, 95, 95, 106, 212,
- 259, 260, 106, 227, 106, 282, 332, 97, 1115, 183,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 184, 184,
- 1115, 190, 185, 185, 185, 185, 185, 185, 185, 185,
- 190, 192, 106, 106, 106, 106, 106, 97, 1106, 106,
- 106, 106, 297, 106, 211, 106, 106, 209, 210, 213,
-
- 106, 217, 218, 222, 214, 106, 196, 219, 197, 198,
- 223, 199, 106, 106, 200, 220, 215, 106, 106, 106,
- 216, 106, 106, 106, 201, 202, 224, 106, 230, 233,
- 236, 234, 106, 106, 231, 225, 235, 226, 229, 106,
- 239, 238, 106, 240, 106, 243, 242, 106, 106, 237,
- 106, 106, 256, 245, 106, 168, 247, 241, 244, 249,
- 171, 171, 250, 246, 171, 251, 248, 158, 159, 252,
- 159, 158, 272, 163, 160, 254, 263, 262, 106, 264,
- 257, 106, 106, 258, 161, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 277, 271, 274, 283, 162, 106, 265,
-
- 265, 278, 71, 266, 266, 266, 266, 266, 266, 266,
- 266, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 106,
- 106, 273, 106, 106, 320, 281, 267, 267, 106, 164,
- 268, 268, 268, 268, 268, 268, 268, 268, 1115, 106,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 184, 184,
- 1115, 413, 185, 185, 185, 185, 185, 185, 185, 185,
- 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
- 185, 185, 185, 185, 185, 185, 186, 186, 186, 186,
- 186, 186, 186, 186, 106, 106, 106, 106, 279, 186,
- 186, 186, 186, 186, 186, 106, 280, 106, 288, 290,
-
- 106, 287, 106, 106, 296, 284, 106, 106, 295, 106,
- 106, 106, 289, 291, 106, 300, 293, 106, 303, 186,
- 186, 186, 186, 186, 186, 292, 294, 298, 106, 299,
- 106, 301, 106, 302, 106, 106, 306, 106, 106, 190,
- 106, 305, 307, 106, 106, 106, 106, 106, 106, 106,
- 304, 106, 322, 315, 106, 106, 309, 314, 311, 319,
- 106, 316, 318, 106, 106, 312, 313, 317, 106, 310,
- 326, 321, 323, 327, 106, 106, 325, 106, 106, 106,
- 333, 163, 351, 171, 324, 171, 106, 329, 348, 328,
- 359, 330, 357, 171, 334, 331, 335, 336, 106, 337,
-
- 352, 338, 375, 362, 1103, 363, 339, 360, 106, 358,
- 361, 340, 341, 342, 343, 344, 349, 1115, 1115, 350,
- 1115, 1115, 106, 106, 106, 106, 73, 106, 369, 106,
- 74, 106, 370, 106, 106, 106, 372, 164, 376, 391,
- 397, 345, 266, 266, 266, 266, 266, 266, 266, 266,
- 266, 266, 266, 266, 266, 266, 266, 266, 268, 268,
- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
- 268, 268, 268, 268, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 368, 365, 106, 106, 190, 1115, 1115, 1115, 1115, 1115,
-
- 1115, 366, 106, 106, 106, 106, 190, 106, 106, 1102,
- 371, 106, 367, 374, 106, 106, 386, 378, 106, 106,
- 381, 373, 106, 379, 385, 1115, 1115, 1115, 1115, 1115,
- 1115, 106, 106, 380, 384, 382, 377, 106, 383, 106,
- 106, 106, 106, 392, 190, 106, 395, 106, 106, 398,
- 387, 106, 106, 389, 390, 106, 399, 388, 106, 106,
- 1098, 393, 106, 106, 396, 106, 404, 400, 407, 106,
- 405, 401, 106, 106, 394, 402, 410, 106, 106, 403,
- 411, 408, 414, 106, 106, 412, 106, 106, 106, 106,
- 106, 417, 415, 418, 106, 422, 106, 416, 106, 106,
-
- 106, 424, 425, 421, 427, 106, 106, 106, 419, 420,
- 106, 106, 190, 439, 423, 426, 431, 435, 440, 428,
- 430, 171, 171, 171, 449, 432, 450, 451, 447, 452,
- 429, 433, 455, 454, 106, 436, 456, 106, 106, 446,
- 457, 106, 434, 448, 106, 106, 106, 106, 106, 459,
- 460, 106, 463, 106, 106, 106, 106, 106, 464, 106,
- 106, 106, 458, 461, 467, 462, 106, 106, 106, 106,
- 472, 469, 465, 470, 106, 106, 466, 106, 471, 475,
- 106, 474, 106, 476, 106, 106, 106, 106, 106, 473,
- 106, 481, 477, 106, 106, 106, 483, 484, 106, 106,
-
- 478, 106, 479, 486, 190, 488, 480, 482, 492, 106,
- 106, 487, 491, 106, 493, 485, 106, 495, 494, 106,
- 497, 498, 106, 499, 106, 106, 501, 106, 106, 106,
- 106, 106, 106, 496, 507, 106, 502, 106, 500, 106,
- 106, 106, 106, 503, 106, 510, 106, 505, 512, 489,
- 504, 513, 506, 106, 106, 508, 511, 509, 515, 517,
- 514, 171, 171, 171, 518, 532, 533, 530, 534, 535,
- 516, 536, 538, 539, 537, 106, 531, 106, 106, 106,
- 106, 106, 106, 542, 540, 529, 106, 106, 545, 544,
- 190, 541, 106, 546, 1095, 106, 106, 106, 106, 543,
-
- 106, 106, 106, 547, 106, 549, 106, 550, 106, 553,
- 106, 552, 106, 106, 106, 106, 106, 551, 548, 558,
- 558, 556, 558, 558, 106, 554, 106, 555, 106, 559,
- 190, 560, 557, 106, 106, 106, 106, 106, 106, 106,
- 570, 572, 106, 576, 106, 106, 589, 561, 571, 573,
- 574, 575, 578, 569, 579, 106, 583, 106, 580, 577,
- 106, 581, 106, 591, 106, 106, 171, 590, 611, 106,
- 582, 106, 610, 606, 628, 562, 593, 106, 106, 106,
- 567, 567, 567, 567, 567, 567, 567, 567, 567, 567,
- 567, 567, 567, 567, 567, 567, 567, 567, 567, 568,
-
- 568, 568, 568, 568, 568, 568, 568, 567, 567, 567,
- 567, 567, 106, 594, 171, 584, 106, 607, 607, 613,
- 607, 607, 615, 614, 1089, 585, 612, 586, 618, 106,
- 608, 587, 616, 106, 588, 592, 605, 567, 567, 567,
- 567, 106, 106, 171, 106, 106, 106, 106, 106, 619,
- 106, 106, 617, 106, 620, 106, 621, 106, 622, 106,
- 623, 632, 632, 609, 632, 632, 106, 773, 567, 558,
- 558, 633, 558, 558, 106, 625, 626, 626, 626, 626,
- 626, 626, 626, 626, 626, 626, 626, 626, 626, 626,
- 626, 626, 626, 626, 626, 627, 627, 627, 627, 627,
-
- 627, 627, 627, 626, 626, 626, 626, 626, 106, 106,
- 106, 106, 106, 106, 190, 643, 644, 645, 106, 106,
- 648, 106, 106, 646, 647, 106, 629, 635, 636, 106,
- 650, 106, 702, 626, 626, 626, 626, 637, 637, 106,
- 637, 637, 639, 649, 106, 106, 651, 106, 634, 106,
- 653, 652, 106, 657, 106, 106, 658, 106, 106, 656,
- 660, 669, 691, 638, 626, 630, 630, 630, 630, 630,
- 630, 630, 630, 630, 630, 630, 630, 630, 630, 630,
- 630, 630, 630, 630, 631, 631, 631, 631, 631, 631,
- 631, 631, 630, 630, 630, 630, 630, 106, 106, 106,
-
- 106, 106, 106, 171, 662, 106, 694, 663, 106, 681,
- 106, 664, 171, 684, 654, 539, 665, 667, 655, 666,
- 659, 661, 630, 630, 630, 630, 668, 679, 106, 106,
- 607, 607, 678, 607, 607, 539, 106, 106, 106, 106,
- 106, 106, 106, 608, 190, 106, 106, 106, 698, 106,
- 541, 685, 541, 630, 686, 106, 106, 106, 683, 714,
- 687, 689, 632, 632, 693, 632, 632, 637, 637, 106,
- 637, 637, 688, 699, 106, 106, 106, 700, 701, 704,
- 106, 106, 106, 707, 106, 705, 706, 708, 106, 106,
- 106, 106, 703, 638, 711, 106, 715, 106, 709, 106,
-
- 717, 106, 106, 720, 716, 718, 190, 710, 712, 713,
- 607, 607, 106, 607, 607, 731, 106, 719, 1088, 733,
- 729, 106, 106, 608, 607, 607, 106, 607, 607, 730,
- 106, 106, 732, 106, 106, 106, 171, 608, 541, 106,
- 106, 690, 734, 106, 735, 541, 106, 106, 737, 737,
- 171, 737, 737, 106, 740, 106, 609, 745, 739, 106,
- 744, 106, 106, 106, 746, 747, 748, 751, 106, 106,
- 609, 749, 106, 106, 106, 750, 106, 754, 106, 106,
- 106, 752, 755, 760, 106, 757, 106, 753, 106, 106,
- 106, 774, 106, 758, 756, 763, 106, 106, 106, 759,
-
- 762, 775, 106, 765, 785, 106, 761, 764, 106, 737,
- 737, 776, 737, 737, 106, 786, 106, 106, 780, 790,
- 787, 106, 781, 106, 106, 106, 789, 106, 106, 106,
- 106, 794, 788, 106, 106, 798, 106, 814, 106, 791,
- 806, 792, 793, 795, 799, 796, 800, 797, 106, 801,
- 802, 106, 106, 106, 803, 361, 106, 804, 805, 815,
- 106, 824, 106, 826, 106, 106, 106, 106, 808, 106,
- 106, 106, 807, 106, 828, 830, 817, 106, 832, 106,
- 106, 836, 837, 829, 827, 106, 834, 825, 778, 838,
- 831, 106, 106, 106, 106, 833, 841, 846, 842, 853,
-
- 835, 843, 844, 106, 854, 190, 839, 858, 858, 106,
- 858, 858, 840, 106, 845, 190, 106, 106, 863, 861,
- 878, 847, 106, 879, 106, 864, 881, 106, 882, 106,
- 855, 106, 870, 859, 862, 106, 871, 106, 872, 883,
- 106, 190, 106, 860, 865, 866, 867, 106, 868, 106,
- 873, 874, 875, 106, 876, 106, 880, 106, 106, 106,
- 896, 106, 106, 1087, 885, 886, 106, 869, 106, 889,
- 890, 106, 106, 877, 910, 884, 901, 106, 897, 897,
- 106, 897, 897, 905, 106, 891, 106, 900, 858, 858,
- 106, 858, 858, 106, 903, 906, 902, 106, 904, 907,
-
- 106, 908, 106, 909, 898, 106, 911, 106, 912, 913,
- 914, 915, 106, 916, 859, 892, 106, 918, 106, 106,
- 917, 919, 106, 106, 106, 106, 106, 106, 106, 936,
- 106, 106, 921, 106, 923, 924, 925, 920, 106, 922,
- 935, 190, 993, 897, 897, 106, 897, 897, 939, 106,
- 938, 926, 106, 106, 940, 941, 942, 106, 106, 106,
- 106, 943, 106, 944, 106, 945, 106, 106, 946, 898,
- 106, 106, 106, 947, 949, 950, 948, 106, 951, 106,
- 952, 927, 106, 953, 106, 954, 106, 106, 106, 955,
- 106, 106, 970, 971, 971, 106, 971, 971, 106, 974,
-
- 106, 956, 957, 106, 975, 959, 106, 106, 958, 978,
- 979, 106, 106, 983, 980, 973, 106, 106, 976, 972,
- 106, 977, 106, 981, 106, 106, 106, 106, 986, 987,
- 982, 106, 106, 991, 988, 989, 106, 106, 994, 1005,
- 984, 106, 985, 992, 106, 990, 106, 1006, 971, 971,
- 106, 971, 971, 106, 106, 106, 1008, 106, 1007, 1009,
- 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
- 106, 1022, 1010, 1011, 972, 1012, 1014, 1015, 1013, 1016,
- 106, 1017, 106, 1018, 1021, 1019, 1020, 1034, 106, 1023,
- 106, 1035, 106, 106, 106, 106, 106, 1086, 106, 106,
-
- 106, 106, 1024, 106, 1045, 106, 106, 1037, 1038, 1039,
- 1040, 1041, 1036, 1042, 1043, 1044, 106, 1046, 106, 106,
- 106, 1047, 106, 1059, 1056, 1060, 106, 1057, 106, 106,
- 106, 1073, 106, 106, 1093, 1069, 106, 1058, 1083, 1084,
- 106, 1082, 106, 1071, 106, 1070, 106, 106, 1100, 1072,
- 106, 106, 1104, 106, 106, 1092, 1105, 106, 1108, 106,
- 1099, 106, 1094, 106, 1111, 1101, 106, 106, 106, 106,
- 1081, 1080, 1109, 1079, 1112, 1077, 1076, 1075, 1074, 1068,
- 1067, 1113, 1114, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 70, 70, 70, 1066, 70, 70, 70, 70,
-
- 70, 76, 76, 1065, 1064, 1063, 1062, 76, 76, 96,
- 96, 1061, 96, 96, 104, 106, 104, 104, 163, 163,
- 106, 163, 163, 163, 163, 163, 163, 170, 170, 170,
- 170, 177, 106, 177, 177, 179, 179, 106, 179, 179,
- 179, 179, 179, 179, 180, 106, 180, 180, 182, 182,
- 106, 182, 182, 186, 106, 186, 255, 255, 106, 255,
- 255, 255, 255, 255, 255, 269, 106, 269, 269, 270,
- 1055, 270, 270, 347, 347, 1054, 347, 347, 347, 347,
- 347, 347, 364, 364, 453, 1053, 453, 453, 525, 525,
- 1052, 525, 525, 525, 525, 525, 525, 526, 526, 1051,
-
- 526, 526, 526, 526, 526, 526, 598, 598, 1050, 598,
- 598, 598, 598, 598, 598, 599, 599, 1049, 599, 599,
- 599, 599, 599, 599, 724, 724, 1048, 724, 724, 724,
- 724, 724, 724, 766, 766, 106, 766, 766, 766, 766,
- 766, 766, 567, 567, 567, 567, 567, 567, 567, 626,
- 626, 626, 626, 626, 626, 626, 630, 630, 630, 630,
- 630, 630, 630, 1004, 1004, 106, 1004, 1004, 1004, 1004,
- 1004, 1004, 1029, 1029, 106, 1029, 1029, 1029, 1029, 1029,
- 1029, 1078, 1078, 106, 1078, 1078, 1078, 1078, 1078, 1078,
- 1085, 1085, 106, 1085, 1085, 1085, 1085, 1085, 1085, 1090,
-
- 1090, 106, 1090, 1090, 1090, 1090, 1090, 1090, 1091, 1091,
- 1033, 1091, 1091, 1091, 1091, 1091, 1091, 1096, 1096, 1032,
- 1096, 1096, 1096, 1096, 1096, 1096, 1097, 1097, 1031, 1097,
- 1097, 1097, 1097, 1097, 1097, 1107, 1107, 1030, 1107, 1107,
- 1107, 1107, 1107, 1107, 1110, 1110, 1028, 1110, 1110, 1110,
- 1110, 1110, 1110, 1027, 1026, 1025, 106, 106, 106, 1003,
- 1002, 1001, 1000, 999, 998, 997, 996, 995, 106, 106,
- 772, 969, 968, 967, 966, 965, 964, 963, 962, 961,
- 960, 106, 106, 937, 934, 933, 932, 931, 930, 929,
- 928, 106, 106, 106, 899, 895, 894, 893, 888, 887,
-
- 106, 106, 106, 106, 106, 106, 106, 857, 856, 106,
- 852, 851, 850, 849, 848, 106, 106, 106, 823, 822,
- 106, 821, 820, 819, 818, 816, 813, 812, 811, 810,
- 809, 106, 784, 783, 782, 779, 777, 106, 106, 106,
- 772, 771, 770, 769, 768, 767, 106, 743, 742, 741,
- 738, 736, 106, 728, 727, 726, 725, 723, 722, 721,
- 106, 106, 106, 106, 697, 696, 695, 106, 692, 106,
- 106, 106, 106, 682, 680, 106, 106, 171, 677, 676,
- 675, 674, 673, 672, 671, 670, 409, 106, 106, 106,
- 642, 641, 640, 106, 106, 624, 106, 106, 106, 604,
-
- 603, 602, 601, 600, 597, 596, 595, 106, 106, 566,
- 565, 564, 563, 106, 106, 106, 106, 106, 106, 106,
- 106, 106, 106, 528, 527, 524, 523, 522, 521, 520,
- 519, 106, 106, 106, 490, 106, 106, 106, 468, 106,
- 106, 106, 445, 444, 443, 442, 441, 438, 437, 106,
- 409, 406, 106, 106, 106, 106, 106, 356, 355, 354,
- 353, 346, 308, 106, 106, 286, 276, 275, 261, 171,
- 164, 166, 253, 164, 228, 112, 106, 188, 187, 176,
- 175, 171, 166, 164, 115, 114, 106, 101, 98, 79,
- 71, 67, 63, 1115, 3, 1115, 1115, 1115, 1115, 1115,
-
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115
- } ;
-
-static yyconst flex_int16_t yy_chk[2685] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 2, 5, 2, 2, 9, 5, 2, 11, 13, 13,
-
- 16, 13, 13, 29, 17, 19, 2, 13, 1114, 19,
- 26, 13, 23, 23, 16, 28, 11, 17, 17, 2,
- 19, 25, 25, 29, 26, 31, 33, 18, 33, 13,
- 18, 13, 18, 18, 18, 18, 18, 18, 18, 18,
- 45, 202, 55, 75, 28, 9, 31, 44, 42, 202,
- 20, 13, 20, 20, 20, 20, 20, 20, 20, 20,
- 42, 45, 44, 75, 37, 64, 42, 54, 21, 20,
- 21, 21, 21, 21, 21, 21, 21, 21, 37, 30,
- 41, 38, 54, 39, 110, 37, 43, 21, 20, 30,
- 38, 39, 48, 66, 41, 39, 38, 40, 39, 20,
-
- 43, 55, 40, 110, 41, 43, 46, 46, 47, 49,
- 48, 46, 40, 48, 49, 62, 64, 21, 20, 62,
- 50, 46, 40, 52, 47, 51, 47, 47, 50, 50,
- 51, 60, 53, 51, 70, 60, 78, 52, 71, 50,
- 50, 53, 52, 77, 66, 105, 60, 53, 77, 78,
- 51, 107, 53, 56, 56, 167, 56, 56, 72, 72,
- 56, 72, 72, 106, 120, 120, 105, 72, 109, 107,
- 56, 72, 1112, 87, 87, 87, 87, 87, 87, 87,
- 87, 70, 116, 56, 111, 71, 116, 117, 106, 72,
- 87, 72, 91, 91, 91, 91, 91, 91, 91, 91,
-
- 111, 118, 109, 121, 121, 131, 167, 117, 119, 91,
- 92, 72, 92, 92, 92, 92, 92, 92, 92, 92,
- 87, 118, 141, 119, 141, 131, 93, 93, 124, 92,
- 93, 93, 93, 93, 93, 93, 93, 93, 95, 91,
- 95, 95, 95, 95, 95, 95, 95, 95, 137, 124,
- 166, 166, 249, 137, 199, 199, 249, 95, 96, 92,
- 96, 96, 96, 96, 96, 96, 96, 96, 97, 97,
- 97, 108, 97, 97, 97, 97, 97, 97, 97, 97,
- 115, 108, 123, 126, 122, 125, 128, 95, 1102, 132,
- 133, 213, 213, 129, 123, 130, 108, 122, 122, 125,
-
- 127, 128, 129, 132, 126, 115, 115, 130, 115, 115,
- 133, 115, 135, 134, 115, 130, 127, 136, 139, 140,
- 127, 143, 142, 144, 115, 115, 134, 148, 140, 142,
- 144, 142, 145, 147, 140, 135, 143, 136, 139, 146,
- 146, 145, 149, 146, 150, 148, 147, 151, 152, 144,
- 153, 155, 165, 150, 154, 169, 151, 146, 149, 153,
- 173, 174, 153, 150, 172, 154, 152, 158, 158, 155,
- 158, 158, 190, 164, 158, 164, 173, 172, 190, 174,
- 165, 196, 200, 165, 158, 177, 177, 177, 177, 177,
- 177, 177, 177, 195, 189, 192, 200, 158, 238, 178,
-
- 178, 196, 169, 178, 178, 178, 178, 178, 178, 178,
- 178, 180, 180, 180, 180, 180, 180, 180, 180, 189,
- 198, 191, 195, 192, 238, 198, 181, 181, 326, 164,
- 181, 181, 181, 181, 181, 181, 181, 181, 182, 191,
- 182, 182, 182, 182, 182, 182, 182, 182, 183, 183,
- 183, 326, 183, 183, 183, 183, 183, 183, 183, 183,
- 184, 184, 184, 184, 184, 184, 184, 184, 185, 185,
- 185, 185, 185, 185, 185, 185, 186, 186, 186, 186,
- 186, 186, 186, 186, 197, 201, 204, 206, 197, 186,
- 186, 186, 186, 186, 186, 207, 197, 205, 205, 206,
-
- 209, 204, 212, 211, 212, 201, 208, 210, 211, 219,
- 216, 1101, 205, 207, 214, 216, 209, 215, 219, 186,
- 186, 186, 186, 186, 186, 208, 210, 214, 218, 215,
- 217, 217, 221, 218, 222, 223, 223, 224, 227, 228,
- 229, 222, 224, 230, 233, 232, 231, 234, 236, 235,
- 221, 239, 240, 233, 237, 243, 227, 232, 229, 237,
- 242, 234, 236, 241, 228, 230, 231, 235, 244, 228,
- 243, 239, 241, 244, 245, 248, 242, 247, 246, 250,
- 250, 254, 256, 262, 241, 264, 240, 246, 253, 245,
- 264, 247, 262, 263, 251, 248, 251, 251, 284, 251,
-
- 256, 251, 284, 273, 1098, 274, 251, 271, 278, 263,
- 272, 251, 251, 251, 251, 251, 253, 261, 261, 253,
- 261, 261, 251, 271, 272, 274, 261, 279, 278, 285,
- 261, 273, 279, 281, 304, 311, 281, 254, 285, 304,
- 311, 251, 265, 265, 265, 265, 265, 265, 265, 265,
- 266, 266, 266, 266, 266, 266, 266, 266, 267, 267,
- 267, 267, 267, 267, 267, 267, 268, 268, 268, 268,
- 268, 268, 268, 268, 269, 269, 269, 269, 269, 269,
- 269, 269, 270, 270, 270, 270, 270, 270, 270, 270,
- 277, 276, 280, 283, 276, 270, 270, 270, 270, 270,
-
- 270, 276, 282, 288, 277, 289, 286, 299, 293, 1095,
- 280, 297, 276, 283, 292, 294, 299, 288, 295, 276,
- 293, 282, 296, 289, 297, 270, 270, 270, 270, 270,
- 270, 286, 300, 292, 296, 294, 286, 301, 295, 302,
- 303, 306, 307, 306, 308, 309, 309, 310, 312, 312,
- 300, 313, 315, 302, 303, 316, 313, 301, 314, 317,
- 1089, 307, 323, 320, 310, 318, 318, 314, 320, 308,
- 318, 315, 321, 325, 308, 316, 323, 324, 327, 317,
- 324, 321, 327, 328, 329, 325, 330, 331, 334, 333,
- 336, 329, 327, 330, 335, 335, 337, 328, 338, 340,
-
- 339, 337, 338, 334, 340, 341, 342, 343, 331, 333,
- 344, 345, 346, 351, 336, 339, 343, 348, 351, 340,
- 342, 357, 358, 359, 360, 344, 361, 362, 358, 363,
- 341, 345, 366, 365, 360, 348, 367, 346, 365, 357,
- 368, 361, 346, 359, 369, 373, 370, 371, 367, 370,
- 371, 372, 374, 376, 363, 375, 362, 366, 375, 377,
- 378, 368, 369, 372, 378, 373, 383, 386, 384, 385,
- 386, 383, 376, 384, 390, 387, 377, 389, 385, 390,
- 392, 389, 391, 391, 393, 394, 395, 398, 374, 387,
- 397, 397, 392, 399, 400, 401, 399, 400, 402, 404,
-
- 393, 405, 394, 402, 406, 405, 395, 398, 409, 408,
- 410, 404, 408, 411, 409, 401, 414, 410, 409, 412,
- 412, 414, 415, 415, 417, 419, 419, 420, 421, 406,
- 422, 423, 424, 411, 425, 426, 420, 427, 417, 430,
- 429, 428, 432, 421, 425, 428, 431, 423, 430, 406,
- 422, 431, 424, 434, 433, 426, 429, 427, 433, 435,
- 432, 446, 447, 448, 435, 449, 450, 447, 451, 452,
- 434, 454, 456, 457, 455, 458, 448, 449, 450, 459,
- 461, 454, 460, 460, 458, 446, 462, 457, 463, 462,
- 468, 459, 464, 464, 1086, 451, 452, 455, 472, 461,
-
- 465, 456, 471, 465, 476, 471, 477, 472, 478, 478,
- 480, 477, 483, 486, 481, 468, 482, 476, 468, 484,
- 484, 482, 484, 484, 485, 480, 463, 481, 487, 485,
- 490, 486, 483, 497, 498, 499, 500, 501, 502, 503,
- 498, 500, 504, 504, 505, 507, 510, 487, 499, 501,
- 502, 503, 506, 497, 506, 490, 508, 510, 506, 505,
- 512, 506, 511, 512, 514, 508, 530, 511, 533, 506,
- 507, 553, 532, 530, 553, 490, 514, 532, 533, 484,
- 495, 495, 495, 495, 495, 495, 495, 495, 495, 495,
- 495, 495, 495, 495, 495, 495, 495, 495, 495, 495,
-
- 495, 495, 495, 495, 495, 495, 495, 495, 495, 495,
- 495, 495, 513, 515, 529, 509, 542, 531, 531, 535,
- 531, 531, 537, 536, 1079, 509, 534, 509, 542, 535,
- 531, 509, 538, 543, 509, 513, 529, 495, 495, 495,
- 495, 495, 509, 531, 546, 534, 538, 515, 536, 543,
- 540, 537, 540, 544, 544, 550, 546, 547, 547, 548,
- 548, 556, 556, 531, 556, 556, 557, 729, 495, 558,
- 558, 557, 558, 558, 729, 550, 551, 551, 551, 551,
- 551, 551, 551, 551, 551, 551, 551, 551, 551, 551,
- 551, 551, 551, 551, 551, 551, 551, 551, 551, 551,
-
- 551, 551, 551, 551, 551, 551, 551, 551, 554, 559,
- 569, 571, 560, 572, 563, 569, 571, 572, 574, 575,
- 576, 556, 651, 574, 575, 577, 554, 559, 560, 578,
- 578, 580, 651, 551, 551, 551, 551, 561, 561, 563,
- 561, 561, 563, 577, 579, 581, 579, 584, 558, 576,
- 581, 580, 585, 585, 586, 588, 586, 593, 633, 584,
- 588, 593, 633, 561, 551, 555, 555, 555, 555, 555,
- 555, 555, 555, 555, 555, 555, 555, 555, 555, 555,
- 555, 555, 555, 555, 555, 555, 555, 555, 555, 555,
- 555, 555, 555, 555, 555, 555, 555, 561, 582, 583,
-
- 587, 589, 591, 605, 590, 639, 639, 590, 619, 615,
- 592, 590, 606, 619, 582, 610, 590, 591, 583, 590,
- 587, 589, 555, 555, 555, 555, 592, 606, 590, 610,
- 607, 607, 605, 607, 607, 612, 615, 617, 618, 620,
- 621, 623, 622, 607, 624, 663, 636, 647, 647, 612,
- 618, 620, 621, 555, 622, 648, 628, 649, 617, 663,
- 623, 628, 632, 632, 636, 632, 632, 637, 637, 624,
- 637, 637, 624, 648, 652, 650, 653, 649, 650, 653,
- 654, 655, 656, 656, 657, 654, 655, 657, 658, 659,
- 661, 660, 652, 637, 660, 664, 664, 662, 658, 665,
-
- 666, 667, 668, 669, 665, 667, 680, 659, 661, 662,
- 678, 678, 683, 678, 678, 682, 684, 668, 1077, 684,
- 680, 666, 687, 678, 679, 679, 685, 679, 679, 681,
- 669, 680, 683, 686, 681, 694, 678, 679, 685, 699,
- 682, 632, 687, 688, 688, 686, 698, 701, 691, 691,
- 679, 691, 691, 693, 694, 704, 678, 699, 693, 700,
- 698, 702, 703, 706, 700, 701, 702, 706, 707, 708,
- 679, 703, 709, 710, 711, 704, 712, 709, 713, 714,
- 715, 707, 710, 715, 716, 712, 717, 708, 720, 719,
- 718, 731, 735, 713, 711, 718, 732, 731, 739, 714,
-
- 717, 732, 740, 720, 744, 749, 716, 719, 691, 737,
- 737, 735, 737, 737, 745, 745, 746, 747, 739, 749,
- 746, 744, 740, 748, 750, 752, 748, 753, 754, 755,
- 756, 754, 747, 757, 758, 758, 760, 773, 762, 750,
- 763, 752, 753, 755, 759, 756, 759, 757, 761, 759,
- 759, 763, 764, 765, 760, 774, 776, 761, 762, 774,
- 785, 785, 786, 787, 789, 791, 773, 790, 765, 774,
- 794, 795, 764, 787, 790, 792, 776, 796, 795, 797,
- 798, 799, 800, 791, 789, 759, 797, 786, 737, 801,
- 794, 803, 792, 804, 806, 796, 805, 807, 805, 814,
-
- 798, 805, 805, 808, 815, 816, 803, 820, 820, 826,
- 820, 820, 804, 814, 806, 821, 824, 799, 827, 824,
- 835, 808, 800, 835, 807, 828, 841, 801, 842, 815,
- 816, 830, 830, 820, 826, 827, 831, 805, 832, 843,
- 821, 855, 828, 821, 829, 829, 829, 840, 829, 846,
- 833, 833, 833, 831, 833, 832, 840, 845, 861, 835,
- 854, 847, 841, 1076, 846, 847, 855, 829, 842, 850,
- 850, 870, 854, 833, 870, 845, 861, 843, 856, 856,
- 862, 856, 856, 865, 829, 850, 860, 860, 858, 858,
- 833, 858, 858, 863, 863, 866, 862, 864, 864, 867,
-
- 865, 868, 869, 869, 856, 871, 871, 872, 872, 873,
- 874, 875, 866, 876, 858, 850, 867, 878, 868, 877,
- 877, 879, 880, 884, 885, 886, 873, 874, 875, 896,
- 876, 900, 884, 901, 886, 887, 887, 880, 958, 885,
- 895, 895, 958, 897, 897, 896, 897, 897, 901, 902,
- 900, 887, 903, 904, 902, 903, 904, 878, 910, 879,
- 905, 905, 906, 906, 907, 907, 895, 908, 908, 897,
- 909, 911, 912, 909, 911, 912, 910, 913, 913, 914,
- 914, 887, 915, 915, 916, 916, 917, 920, 921, 917,
- 922, 923, 935, 937, 937, 938, 937, 937, 948, 940,
-
- 941, 920, 921, 942, 940, 923, 943, 944, 922, 943,
- 944, 945, 947, 948, 945, 938, 940, 935, 941, 937,
- 946, 942, 949, 946, 950, 951, 952, 955, 951, 952,
- 947, 953, 954, 956, 953, 954, 957, 959, 959, 970,
- 949, 976, 950, 957, 977, 955, 974, 974, 971, 971,
- 956, 971, 971, 975, 978, 979, 976, 980, 975, 977,
- 981, 982, 984, 986, 985, 987, 970, 988, 989, 990,
- 991, 991, 978, 979, 971, 980, 982, 984, 981, 985,
- 993, 986, 994, 987, 990, 988, 989, 1005, 1006, 993,
- 1007, 1006, 1010, 1011, 1012, 1013, 1017, 1075, 1018, 1019,
-
- 1020, 1022, 994, 1023, 1022, 1005, 1035, 1010, 1011, 1012,
- 1013, 1017, 1007, 1018, 1019, 1020, 1024, 1023, 1036, 1045,
- 1056, 1024, 1046, 1046, 1035, 1047, 1057, 1036, 1058, 1059,
- 1060, 1060, 1070, 1072, 1083, 1056, 1073, 1045, 1072, 1073,
- 1082, 1070, 1047, 1058, 1084, 1057, 1092, 1093, 1093, 1059,
- 1094, 1083, 1099, 1100, 1105, 1082, 1100, 1104, 1104, 1109,
- 1092, 1108, 1084, 1111, 1108, 1094, 1071, 1113, 1069, 1099,
- 1068, 1067, 1105, 1066, 1109, 1064, 1063, 1062, 1061, 1055,
- 1054, 1111, 1113, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
- 1116, 1116, 1117, 1117, 1117, 1053, 1117, 1117, 1117, 1117,
-
- 1117, 1118, 1118, 1052, 1051, 1050, 1049, 1118, 1118, 1119,
- 1119, 1048, 1119, 1119, 1120, 1044, 1120, 1120, 1121, 1121,
- 1043, 1121, 1121, 1121, 1121, 1121, 1121, 1122, 1122, 1122,
- 1122, 1123, 1042, 1123, 1123, 1124, 1124, 1041, 1124, 1124,
- 1124, 1124, 1124, 1124, 1125, 1040, 1125, 1125, 1126, 1126,
- 1039, 1126, 1126, 1127, 1038, 1127, 1128, 1128, 1037, 1128,
- 1128, 1128, 1128, 1128, 1128, 1129, 1034, 1129, 1129, 1130,
- 1033, 1130, 1130, 1131, 1131, 1032, 1131, 1131, 1131, 1131,
- 1131, 1131, 1132, 1132, 1133, 1031, 1133, 1133, 1134, 1134,
- 1030, 1134, 1134, 1134, 1134, 1134, 1134, 1135, 1135, 1028,
-
- 1135, 1135, 1135, 1135, 1135, 1135, 1136, 1136, 1027, 1136,
- 1136, 1136, 1136, 1136, 1136, 1137, 1137, 1026, 1137, 1137,
- 1137, 1137, 1137, 1137, 1138, 1138, 1025, 1138, 1138, 1138,
- 1138, 1138, 1138, 1139, 1139, 1021, 1139, 1139, 1139, 1139,
- 1139, 1139, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1141,
- 1141, 1141, 1141, 1141, 1141, 1141, 1142, 1142, 1142, 1142,
- 1142, 1142, 1142, 1143, 1143, 1016, 1143, 1143, 1143, 1143,
- 1143, 1143, 1144, 1144, 1015, 1144, 1144, 1144, 1144, 1144,
- 1144, 1145, 1145, 1014, 1145, 1145, 1145, 1145, 1145, 1145,
- 1146, 1146, 1009, 1146, 1146, 1146, 1146, 1146, 1146, 1147,
-
- 1147, 1008, 1147, 1147, 1147, 1147, 1147, 1147, 1148, 1148,
- 1003, 1148, 1148, 1148, 1148, 1148, 1148, 1149, 1149, 1002,
- 1149, 1149, 1149, 1149, 1149, 1149, 1150, 1150, 1001, 1150,
- 1150, 1150, 1150, 1150, 1150, 1151, 1151, 1000, 1151, 1151,
- 1151, 1151, 1151, 1151, 1152, 1152, 998, 1152, 1152, 1152,
- 1152, 1152, 1152, 997, 996, 995, 992, 983, 973, 968,
- 967, 966, 965, 964, 963, 962, 961, 960, 939, 936,
- 934, 933, 932, 931, 930, 929, 928, 927, 926, 925,
- 924, 919, 918, 899, 894, 893, 892, 891, 890, 889,
- 888, 883, 882, 881, 857, 853, 852, 851, 849, 848,
-
- 844, 839, 838, 837, 836, 834, 825, 819, 818, 817,
- 813, 812, 811, 810, 809, 802, 793, 788, 783, 782,
- 781, 780, 779, 778, 777, 775, 771, 770, 769, 768,
- 767, 751, 743, 742, 741, 738, 736, 734, 733, 730,
- 728, 727, 726, 725, 723, 722, 705, 697, 696, 695,
- 692, 690, 689, 677, 676, 675, 674, 672, 671, 670,
- 646, 645, 644, 643, 642, 641, 640, 635, 634, 631,
- 629, 627, 625, 616, 614, 613, 611, 609, 604, 603,
- 602, 601, 600, 597, 596, 595, 594, 573, 570, 568,
- 566, 565, 564, 562, 552, 549, 545, 541, 539, 528,
-
- 527, 524, 523, 522, 519, 518, 517, 516, 496, 494,
- 493, 492, 491, 489, 488, 479, 475, 474, 473, 470,
- 469, 467, 466, 445, 444, 441, 440, 439, 438, 437,
- 436, 418, 416, 413, 407, 403, 396, 388, 382, 381,
- 380, 379, 356, 355, 354, 353, 352, 350, 349, 332,
- 322, 319, 305, 298, 291, 290, 287, 260, 259, 258,
- 257, 252, 226, 225, 220, 203, 194, 193, 171, 170,
- 163, 162, 161, 160, 138, 113, 104, 103, 99, 86,
- 84, 76, 61, 59, 36, 35, 27, 24, 22, 15,
- 12, 10, 8, 3, 1115, 1115, 1115, 1115, 1115, 1115,
-
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
- 1115, 1115, 1115, 1115
- } ;
-
-/* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[174] =
- { 0,
-0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
- 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
-
-static yy_state_type yy_last_accepting_state;
-static char *yy_last_accepting_cpos;
-
-extern int yy_flex_debug;
-int yy_flex_debug = 0;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() yymore_used_but_not_detected
-#define YY_MORE_ADJ 0
-#define YY_RESTORE_YY_MORE_OFFSET
-char *yytext;
-#line 1 "vtkParse.l"
-#line 3 "vtkParse.l"
-
-/*
-
-This file must be translated to C and modified to build everywhere.
-
-Run flex like this:
-
- flex --nodefault -olex.yy.c vtkParse.l
-
-Modify lex.yy.c:
- - convert tabs to spaces (8 spaces per tab)
- - remove extra space from end of lines
- - remove blank lines from end of file
- - replace "int yyl" with "yy_size_t yyl"
- - compile with gcc and "-Wsign-compare", there should be no warnings
-
-*/
-
-/* We do not care of interactive mode */
-#define YY_NEVER_INTERACTIVE 1
-
-/* Do not include unistd.h in generated source. */
-#define YY_NO_UNISTD_H
-
-/* Skip declaring this function. It is a macro. */
-#define YY_SKIP_YYWRAP
-
-#ifdef _WIN32
-#pragma warning ( disable : 4018 )
-#pragma warning ( disable : 4127 )
-#pragma warning ( disable : 4131 )
-#pragma warning ( disable : 4244 )
-#pragma warning ( disable : 4251 )
-#pragma warning ( disable : 4267 )
-#pragma warning ( disable : 4305 )
-#pragma warning ( disable : 4309 )
-#pragma warning ( disable : 4706 )
-#pragma warning ( disable : 4786 )
-#endif
-
-#define SKIP_MATCH_MAXLEN 15
-
-/*
- * Skip ahead until one of the strings is found,
- * then skip to the end of the line.
- * Return 0 if no match found.
- */
-static int skip_comment();
-static int skip_trailing_comment(const char *text, size_t l);
-static int skip_ahead_multi(const char *strings[]);
-static int skip_ahead_until(const char *text);
-static int skip_to_next_directive();
-static int skip_conditional_block();
-
-static void preprocessor_directive(const char *text, size_t l);
-static void print_preprocessor_error(int result, const char *cp, size_t n);
-static const char *get_macro_arguments();
-
-static void push_buffer();
-static int pop_buffer();
-
-static void push_include(const char *filename);
-static void pop_include();
-
-static void push_macro(MacroInfo *macro);
-static void pop_macro();
-static int in_macro();
-
-#line 1515 "lex.yy.c"
-
-#define INITIAL 0
-
-#ifndef YY_NO_UNISTD_H
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-#include <unistd.h>
-#endif
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-static int yy_init_globals (void );
-
-/* Accessor methods to globals.
- These are made visible to non-reentrant scanners for convenience. */
-
-int yylex_destroy (void );
-
-int yyget_debug (void );
-
-void yyset_debug (int debug_flag );
-
-YY_EXTRA_TYPE yyget_extra (void );
-
-void yyset_extra (YY_EXTRA_TYPE user_defined );
-
-FILE *yyget_in (void );
-
-void yyset_in (FILE * in_str );
-
-FILE *yyget_out (void );
-
-void yyset_out (FILE * out_str );
-
-yy_size_t yyget_leng (void );
-
-char *yyget_text (void );
-
-int yyget_lineno (void );
-
-void yyset_lineno (int line_number );
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
- */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int yywrap (void );
-#else
-extern int yywrap (void );
-#endif
-#endif
-
- static void yyunput (int c,char *buf_ptr );
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
-#endif
-
-#ifndef YY_NO_INPUT
-
-#ifdef __cplusplus
-static int yyinput (void );
-#else
-static int input (void );
-#endif
-
-#endif
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-#ifndef ECHO
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO fwrite( yytext, yyleng, 1, yyout )
-#endif
-
-/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
- if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
- { \
- int c = '*'; \
- yy_size_t n; \
- for ( n = 0; n < max_size && \
- (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
- buf[n] = (char) c; \
- if ( c == '\n' ) \
- buf[n++] = (char) c; \
- if ( c == EOF && ferror( yyin ) ) \
- YY_FATAL_ERROR( "input in flex scanner failed" ); \
- result = n; \
- } \
- else \
- { \
- errno=0; \
- while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
- { \
- if( errno != EINTR) \
- { \
- YY_FATAL_ERROR( "input in flex scanner failed" ); \
- break; \
- } \
- errno=0; \
- clearerr(yyin); \
- } \
- }\
-\
-
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-#endif
-
-/* end tables serialization structures and prototypes */
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
-
-extern int yylex (void);
-
-#define YY_DECL int yylex (void)
-#endif /* !YY_DECL */
-
-/* Code executed at the beginning of each rule, after yytext and yyleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-#define YY_RULE_SETUP \
- if ( yyleng > 0 ) \
- YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
- (yytext[yyleng - 1] == '\n'); \
- YY_USER_ACTION
-
-/** The main scanner function which does all the work.
- */
-YY_DECL
-{
- register yy_state_type yy_current_state;
- register char *yy_cp, *yy_bp;
- register int yy_act;
-
-#line 77 "vtkParse.l"
-
-
-#line 1703 "lex.yy.c"
-
- if ( !(yy_init) )
- {
- (yy_init) = 1;
-
-#ifdef YY_USER_INIT
- YY_USER_INIT;
-#endif
-
- if ( ! (yy_start) )
- (yy_start) = 1; /* first start state */
-
- if ( ! yyin )
- yyin = stdin;
-
- if ( ! yyout )
- yyout = stdout;
-
- if ( ! YY_CURRENT_BUFFER ) {
- yyensure_buffer_stack ();
- YY_CURRENT_BUFFER_LVALUE =
- yy_create_buffer(yyin,YY_BUF_SIZE );
- }
-
- yy_load_buffer_state( );
- }
-
- while ( 1 ) /* loops until end-of-file is reached */
- {
- yy_cp = (yy_c_buf_p);
-
- /* Support of yytext. */
- *yy_cp = (yy_hold_char);
-
- /* yy_bp points to the position in yy_ch_buf of the start of
- * the current run.
- */
- yy_bp = yy_cp;
-
- yy_current_state = (yy_start);
- yy_current_state += YY_AT_BOL();
-yy_match:
- do
- {
- register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
- if ( yy_accept[yy_current_state] )
- {
- (yy_last_accepting_state) = yy_current_state;
- (yy_last_accepting_cpos) = yy_cp;
- }
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 1116 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- ++yy_cp;
- }
- while ( yy_base[yy_current_state] != 2595 );
-
-yy_find_action:
- yy_act = yy_accept[yy_current_state];
- if ( yy_act == 0 )
- { /* have to back up */
- yy_cp = (yy_last_accepting_cpos);
- yy_current_state = (yy_last_accepting_state);
- yy_act = yy_accept[yy_current_state];
- }
-
- YY_DO_BEFORE_ACTION;
-
- if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
- {
- yy_size_t yyl;
- for ( yyl = 0; yyl < yyleng; ++yyl )
- if ( yytext[yyl] == '\n' )
-
- yylineno++;
-;
- }
-
-do_action: /* This label is used only to access EOF actions. */
-
- switch ( yy_act )
- { /* beginning of action switch */
- case 0: /* must back up */
- /* undo the effects of YY_DO_BEFORE_ACTION */
- *yy_cp = (yy_hold_char);
- yy_cp = (yy_last_accepting_cpos);
- yy_current_state = (yy_last_accepting_state);
- goto yy_find_action;
-
-case 1:
-YY_RULE_SETUP
-#line 79 "vtkParse.l"
-{ skip_comment(); }
- YY_BREAK
-case 2:
-YY_RULE_SETUP
-#line 81 "vtkParse.l"
-{
- if (!IgnoreBTX) {
- skip_ahead_until("//ETX");
- }
- }
- YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 87 "vtkParse.l"
-/* eat mismatched ETX */
- YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 89 "vtkParse.l"
-{
- skip_ahead_until("@end");
- }
- YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 93 "vtkParse.l"
-{
- size_t pos = 1;
- while (yytext[pos-1] != 'M' || yytext[pos] != 'E')
- {
- pos++;
- }
- data->NameComment = vtkstrndup(&yytext[pos + 1], yyleng - pos - 1);
- }
- YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 102 "vtkParse.l"
-{ setCommentState(1); }
- YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 103 "vtkParse.l"
-{ setCommentState(2); }
- YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 104 "vtkParse.l"
-{ setCommentState(3); }
- YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 105 "vtkParse.l"
-{ setCommentState(3); }
- YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 106 "vtkParse.l"
-{ setCommentState(4); }
- YY_BREAK
-case 11:
-/* rule 11 can match eol */
-YY_RULE_SETUP
-#line 107 "vtkParse.l"
-{ closeOrClearComment(); }
- YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 108 "vtkParse.l"
-{
- size_t pos = 2;
- while (yytext[pos-2] != '/' || yytext[pos-1] != '/') pos++;
- addCommentLine(&yytext[pos], yyleng - pos);
- }
- YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 114 "vtkParse.l"
-/* eat C++ comments */
- YY_BREAK
-case 14:
-/* rule 14 can match eol */
-YY_RULE_SETUP
-#line 116 "vtkParse.l"
-{
- skip_trailing_comment(yytext, yyleng);
- preprocessor_directive(yytext, yyleng);
- }
- YY_BREAK
-case 15:
-/* rule 15 can match eol */
-YY_RULE_SETUP
-#line 121 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(STRING_LITERAL);
- }
- YY_BREAK
-case 16:
-/* rule 16 can match eol */
-YY_RULE_SETUP
-#line 126 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(CHAR_LITERAL);
- }
- YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 131 "vtkParse.l"
-/* ignore EXPORT macros */
- YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 133 "vtkParse.l"
-{ /* let the wrappers see the parameter */
- const char *args = NULL;
- const char *cp;
- size_t l = 0;
- args = get_macro_arguments();
- if (args)
- {
- cp = args;
- if (*cp == '(') { cp++; }
- while (*cp == ' ' || *cp == '\t') { cp++; }
- l = vtkidlen(cp);
- if (l)
- {
- yylval.str = vtkstrndup(cp, l);
- free((char *)args);
- return(ID);
- }
- free((char *)args);
- }
- }
- YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 154 "vtkParse.l"
-return(DOUBLE);
- YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 155 "vtkParse.l"
-return(FLOAT);
- YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 156 "vtkParse.l"
-return(INT64__);
- YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 157 "vtkParse.l"
-return(SHORT);
- YY_BREAK
-case 23:
-YY_RULE_SETUP
-#line 158 "vtkParse.l"
-return(LONG);
- YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 159 "vtkParse.l"
-return(CHAR);
- YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 160 "vtkParse.l"
-return(INT);
- YY_BREAK
-case 26:
-YY_RULE_SETUP
-#line 162 "vtkParse.l"
-return(UNSIGNED);
- YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 163 "vtkParse.l"
-return(SIGNED);
- YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 165 "vtkParse.l"
-return(VOID);
- YY_BREAK
-case 29:
-YY_RULE_SETUP
-#line 166 "vtkParse.l"
-return(BOOL);
- YY_BREAK
-case 30:
-YY_RULE_SETUP
-#line 168 "vtkParse.l"
-return(SIZE_T);
- YY_BREAK
-case 31:
-YY_RULE_SETUP
-#line 169 "vtkParse.l"
-return(SSIZE_T);
- YY_BREAK
-case 32:
-YY_RULE_SETUP
-#line 171 "vtkParse.l"
-/* ignore the Q_OBJECT macro from Qt */
- YY_BREAK
-case 33:
-/* rule 33 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
-YY_RULE_SETUP
-#line 172 "vtkParse.l"
-return(PUBLIC);
- YY_BREAK
-case 34:
-/* rule 34 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
-YY_RULE_SETUP
-#line 173 "vtkParse.l"
-return(PRIVATE);
- YY_BREAK
-case 35:
-/* rule 35 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
-YY_RULE_SETUP
-#line 174 "vtkParse.l"
-return(PROTECTED);
- YY_BREAK
-case 36:
-/* rule 36 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
-YY_RULE_SETUP
-#line 175 "vtkParse.l"
-return(PROTECTED);
- YY_BREAK
-case 37:
-YY_RULE_SETUP
-#line 177 "vtkParse.l"
-return(CLASS);
- YY_BREAK
-case 38:
-YY_RULE_SETUP
-#line 178 "vtkParse.l"
-return(STRUCT);
- YY_BREAK
-case 39:
-YY_RULE_SETUP
-#line 179 "vtkParse.l"
-return(PUBLIC);
- YY_BREAK
-case 40:
-YY_RULE_SETUP
-#line 180 "vtkParse.l"
-return(PRIVATE);
- YY_BREAK
-case 41:
-YY_RULE_SETUP
-#line 181 "vtkParse.l"
-return(PROTECTED);
- YY_BREAK
-case 42:
-YY_RULE_SETUP
-#line 182 "vtkParse.l"
-return(ENUM);
- YY_BREAK
-case 43:
-YY_RULE_SETUP
-#line 183 "vtkParse.l"
-return(UNION);
- YY_BREAK
-case 44:
-YY_RULE_SETUP
-#line 184 "vtkParse.l"
-return(VIRTUAL);
- YY_BREAK
-case 45:
-YY_RULE_SETUP
-#line 185 "vtkParse.l"
-return(CONST);
- YY_BREAK
-case 46:
-YY_RULE_SETUP
-#line 186 "vtkParse.l"
-return(VOLATILE);
- YY_BREAK
-case 47:
-YY_RULE_SETUP
-#line 187 "vtkParse.l"
-return(MUTABLE);
- YY_BREAK
-case 48:
-YY_RULE_SETUP
-#line 188 "vtkParse.l"
-return(OPERATOR);
- YY_BREAK
-case 49:
-YY_RULE_SETUP
-#line 189 "vtkParse.l"
-return(FRIEND);
- YY_BREAK
-case 50:
-YY_RULE_SETUP
-#line 190 "vtkParse.l"
-return(INLINE);
- YY_BREAK
-case 51:
-YY_RULE_SETUP
-#line 191 "vtkParse.l"
-return(STATIC);
- YY_BREAK
-case 52:
-YY_RULE_SETUP
-#line 192 "vtkParse.l"
-return(EXTERN);
- YY_BREAK
-case 53:
-YY_RULE_SETUP
-#line 193 "vtkParse.l"
-return(TEMPLATE);
- YY_BREAK
-case 54:
-YY_RULE_SETUP
-#line 194 "vtkParse.l"
-return(TYPENAME);
- YY_BREAK
-case 55:
-YY_RULE_SETUP
-#line 195 "vtkParse.l"
-return(TYPEDEF);
- YY_BREAK
-case 56:
-YY_RULE_SETUP
-#line 196 "vtkParse.l"
-return(NAMESPACE);
- YY_BREAK
-case 57:
-YY_RULE_SETUP
-#line 197 "vtkParse.l"
-return(USING);
- YY_BREAK
-case 58:
-YY_RULE_SETUP
-#line 198 "vtkParse.l"
-return(NEW);
- YY_BREAK
-case 59:
-YY_RULE_SETUP
-#line 199 "vtkParse.l"
-return(DELETE);
- YY_BREAK
-case 60:
-YY_RULE_SETUP
-#line 200 "vtkParse.l"
-return(EXPLICIT);
- YY_BREAK
-case 61:
-YY_RULE_SETUP
-#line 201 "vtkParse.l"
-return(THROW);
- YY_BREAK
-case 62:
-YY_RULE_SETUP
-#line 203 "vtkParse.l"
-return(STATIC_CAST);
- YY_BREAK
-case 63:
-YY_RULE_SETUP
-#line 204 "vtkParse.l"
-return(DYNAMIC_CAST);
- YY_BREAK
-case 64:
-YY_RULE_SETUP
-#line 205 "vtkParse.l"
-return(CONST_CAST);
- YY_BREAK
-case 65:
-YY_RULE_SETUP
-#line 206 "vtkParse.l"
-return(REINTERPRET_CAST);
- YY_BREAK
-case 66:
-YY_RULE_SETUP
-#line 208 "vtkParse.l"
-/* irrelevant to wrappers */
- YY_BREAK
-case 67:
-YY_RULE_SETUP
-#line 209 "vtkParse.l"
-/* irrelevant to wrappers */
- YY_BREAK
-case 68:
-YY_RULE_SETUP
-#line 211 "vtkParse.l"
-return(OP_LOGIC_AND);
- YY_BREAK
-case 69:
-YY_RULE_SETUP
-#line 212 "vtkParse.l"
-return(OP_AND_EQ);
- YY_BREAK
-case 70:
-YY_RULE_SETUP
-#line 213 "vtkParse.l"
-return(OP_LOGIC_OR);
- YY_BREAK
-case 71:
-YY_RULE_SETUP
-#line 214 "vtkParse.l"
-return(OP_OR_EQ);
- YY_BREAK
-case 72:
-YY_RULE_SETUP
-#line 215 "vtkParse.l"
-return('!');
- YY_BREAK
-case 73:
-YY_RULE_SETUP
-#line 216 "vtkParse.l"
-return(OP_LOGIC_NEQ);
- YY_BREAK
-case 74:
-YY_RULE_SETUP
-#line 217 "vtkParse.l"
-return('^');
- YY_BREAK
-case 75:
-YY_RULE_SETUP
-#line 218 "vtkParse.l"
-return(OP_XOR_EQ);
- YY_BREAK
-case 76:
-YY_RULE_SETUP
-#line 219 "vtkParse.l"
-return('&');
- YY_BREAK
-case 77:
-YY_RULE_SETUP
-#line 220 "vtkParse.l"
-return('|');
- YY_BREAK
-case 78:
-YY_RULE_SETUP
-#line 221 "vtkParse.l"
-return('~');
- YY_BREAK
-case 79:
-YY_RULE_SETUP
-#line 223 "vtkParse.l"
-return(IdType);
- YY_BREAK
-case 80:
-YY_RULE_SETUP
-#line 224 "vtkParse.l"
-return(SetMacro);
- YY_BREAK
-case 81:
-YY_RULE_SETUP
-#line 225 "vtkParse.l"
-return(GetMacro);
- YY_BREAK
-case 82:
-YY_RULE_SETUP
-#line 226 "vtkParse.l"
-return(SetStringMacro);
- YY_BREAK
-case 83:
-YY_RULE_SETUP
-#line 227 "vtkParse.l"
-return(GetStringMacro);
- YY_BREAK
-case 84:
-YY_RULE_SETUP
-#line 228 "vtkParse.l"
-return(SetClampMacro);
- YY_BREAK
-case 85:
-YY_RULE_SETUP
-#line 229 "vtkParse.l"
-return(SetObjectMacro);
- YY_BREAK
-case 86:
-YY_RULE_SETUP
-#line 230 "vtkParse.l"
-return(GetObjectMacro);
- YY_BREAK
-case 87:
-YY_RULE_SETUP
-#line 231 "vtkParse.l"
-return(BooleanMacro);
- YY_BREAK
-case 88:
-YY_RULE_SETUP
-#line 232 "vtkParse.l"
-return(SetVector2Macro);
- YY_BREAK
-case 89:
-YY_RULE_SETUP
-#line 233 "vtkParse.l"
-return(SetVector3Macro);
- YY_BREAK
-case 90:
-YY_RULE_SETUP
-#line 234 "vtkParse.l"
-return(SetVector4Macro);
- YY_BREAK
-case 91:
-YY_RULE_SETUP
-#line 235 "vtkParse.l"
-return(SetVector6Macro);
- YY_BREAK
-case 92:
-YY_RULE_SETUP
-#line 236 "vtkParse.l"
-return(GetVector2Macro);
- YY_BREAK
-case 93:
-YY_RULE_SETUP
-#line 237 "vtkParse.l"
-return(GetVector3Macro);
- YY_BREAK
-case 94:
-YY_RULE_SETUP
-#line 238 "vtkParse.l"
-return(GetVector4Macro);
- YY_BREAK
-case 95:
-YY_RULE_SETUP
-#line 239 "vtkParse.l"
-return(GetVector6Macro);
- YY_BREAK
-case 96:
-YY_RULE_SETUP
-#line 240 "vtkParse.l"
-return(SetVectorMacro);
- YY_BREAK
-case 97:
-YY_RULE_SETUP
-#line 241 "vtkParse.l"
-return(GetVectorMacro);
- YY_BREAK
-case 98:
-YY_RULE_SETUP
-#line 242 "vtkParse.l"
-return(ViewportCoordinateMacro);
- YY_BREAK
-case 99:
-YY_RULE_SETUP
-#line 243 "vtkParse.l"
-return(WorldCoordinateMacro);
- YY_BREAK
-case 100:
-YY_RULE_SETUP
-#line 244 "vtkParse.l"
-return(TypeMacro);
- YY_BREAK
-case 101:
-YY_RULE_SETUP
-#line 245 "vtkParse.l"
-return(TypeMacro);
- YY_BREAK
-case 102:
-YY_RULE_SETUP
-#line 246 "vtkParse.l"
-return(TypeMacro);
- YY_BREAK
-case 103:
-YY_RULE_SETUP
-#line 247 "vtkParse.l"
-return(TypeMacro);
- YY_BREAK
-case 104:
-YY_RULE_SETUP
-#line 248 "vtkParse.l"
-;
- YY_BREAK
-case 105:
-YY_RULE_SETUP
-#line 249 "vtkParse.l"
-return(VTK_BYTE_SWAP_DECL);
- YY_BREAK
-case 106:
-YY_RULE_SETUP
-#line 250 "vtkParse.l"
-return(TypeInt8);
- YY_BREAK
-case 107:
-YY_RULE_SETUP
-#line 251 "vtkParse.l"
-return(TypeUInt8);
- YY_BREAK
-case 108:
-YY_RULE_SETUP
-#line 252 "vtkParse.l"
-return(TypeInt16);
- YY_BREAK
-case 109:
-YY_RULE_SETUP
-#line 253 "vtkParse.l"
-return(TypeUInt16);
- YY_BREAK
-case 110:
-YY_RULE_SETUP
-#line 254 "vtkParse.l"
-return(TypeInt32);
- YY_BREAK
-case 111:
-YY_RULE_SETUP
-#line 255 "vtkParse.l"
-return(TypeUInt32);
- YY_BREAK
-case 112:
-YY_RULE_SETUP
-#line 256 "vtkParse.l"
-return(TypeInt64);
- YY_BREAK
-case 113:
-YY_RULE_SETUP
-#line 257 "vtkParse.l"
-return(TypeUInt64);
- YY_BREAK
-case 114:
-YY_RULE_SETUP
-#line 258 "vtkParse.l"
-return(TypeFloat32);
- YY_BREAK
-case 115:
-YY_RULE_SETUP
-#line 259 "vtkParse.l"
-return(TypeFloat64);
- YY_BREAK
-case 116:
-/* rule 116 can match eol */
-YY_RULE_SETUP
-#line 261 "vtkParse.l"
-{
- size_t i = 1;
- size_t j;
- while (yytext[i]==' ' || yytext[i]=='\t' ||
- yytext[i]=='\r' || yytext[i]=='\n') { i++; }
- j = i;
- while (yytext[j]!='&') { j++; }
- yylval.str = vtkstrndup(&yytext[i], j-i);
- return(LA);
- }
- YY_BREAK
-case 117:
-/* rule 117 can match eol */
-YY_RULE_SETUP
-#line 272 "vtkParse.l"
-{
- size_t i = 1;
- size_t j;
- while (yytext[i]==' ' || yytext[i]=='\t' ||
- yytext[i]=='\r' || yytext[i]=='\n') { i++; }
- j = i;
- while (yytext[j]!='*') { j++; }
- yylval.str = vtkstrndup(&yytext[i], j-i);
- return(LP);
- }
- YY_BREAK
-case 118:
-/* rule 118 can match eol */
-YY_RULE_SETUP
-#line 283 "vtkParse.l"
-{
- yylval.str = "";
- return(LP);
- }
- YY_BREAK
-case 119:
-/* rule 119 can match eol */
-YY_RULE_SETUP
-#line 288 "vtkParse.l"
-{
- yylval.str = "";
- return(LP);
- }
- YY_BREAK
-case 120:
-YY_RULE_SETUP
-#line 293 "vtkParse.l"
-return('*');
- YY_BREAK
-case 121:
-YY_RULE_SETUP
-#line 295 "vtkParse.l"
-/* misc unused win32 macros */
- YY_BREAK
-case 122:
-/* rule 122 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
-YY_RULE_SETUP
-#line 297 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(OSTREAM);
- }
- YY_BREAK
-case 123:
-/* rule 123 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
-YY_RULE_SETUP
-#line 302 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(ISTREAM);
- }
- YY_BREAK
-case 124:
-/* rule 124 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
-YY_RULE_SETUP
-#line 307 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(StdString);
- }
- YY_BREAK
-case 125:
-YY_RULE_SETUP
-#line 312 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(StdString);
- }
- YY_BREAK
-case 126:
-YY_RULE_SETUP
-#line 317 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(UnicodeString);
- }
- YY_BREAK
-case 127:
-YY_RULE_SETUP
-#line 322 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(VTK_ID);
- }
- YY_BREAK
-case 128:
-YY_RULE_SETUP
-#line 327 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(QT_ID);
- }
- YY_BREAK
-case 129:
-YY_RULE_SETUP
-#line 332 "vtkParse.l"
-get_macro_arguments(); /* gcc attributes */
- YY_BREAK
-case 130:
-YY_RULE_SETUP
-#line 334 "vtkParse.l"
-get_macro_arguments(); /* Windows linkage */
- YY_BREAK
-case 131:
-YY_RULE_SETUP
-#line 336 "vtkParse.l"
-/* Windows */
- YY_BREAK
-case 132:
-YY_RULE_SETUP
-#line 338 "vtkParse.l"
-{
- const char *args = get_macro_arguments();
- if (args && args[0] != '\0' && args[1] != '\0')
- {
- size_t l = strlen(args);
- push_macro(NULL);
- push_buffer();
- macroName = "VTK_LEGACY";
- macroUsed = 0;
- macroEnded = 0;
- yy_switch_to_buffer(yy_scan_bytes(&args[1],l-2));
- }
- free((char *)args);
- }
- YY_BREAK
-case 133:
-YY_RULE_SETUP
-#line 353 "vtkParse.l"
-{
- const char *name = vtkstrndup(yytext, yyleng);
- MacroInfo *macro = vtkParsePreprocess_GetMacro(preprocessor, name);
- int expanded = 0;
- if (macro)
- {
- const char *args = NULL;
- const char *emacro = NULL;
-
- /* make sure that vtkNotUsed is never expanded */
- MacroInfo *ex;
- ex = vtkParsePreprocess_GetMacro(preprocessor, "vtkNotUsed");
- if (ex)
- {
- ex->IsExcluded = 1;
- }
-
- if (macro->IsFunction)
- {
- args = get_macro_arguments();
- if (args)
- {
- emacro = vtkParsePreprocess_ExpandMacro(preprocessor, macro, args);
- if (!emacro)
- {
- print_preprocessor_error(VTK_PARSE_MACRO_NUMARGS, NULL, 0);
- }
- free((char *)args);
- }
- }
- else if (macro->Definition && macro->Definition[0])
- {
- /* first see if macro evaluates to a constant value */
- preproc_int_t val;
- int is_unsigned;
- int r;
- macro->IsExcluded = 1;
- r = vtkParsePreprocess_EvaluateExpression(
- preprocessor, macro->Definition, &val, &is_unsigned);
- macro->IsExcluded = 0;
- /* if it isn't a constant expression, then expand it */
- if (r >= VTK_PARSE_MACRO_UNDEFINED)
- {
- emacro = vtkParsePreprocess_ExpandMacro(preprocessor, macro, NULL);
- if (!emacro)
- {
- print_preprocessor_error(r, NULL, 0);
- }
- }
- }
- else
- {
- /* macros with no definition expand to nothing */
- expanded = 1;
- }
- if (emacro)
- {
- /* invoke the parser on any expanded macros */
- push_macro(macro);
- push_buffer();
- yy_switch_to_buffer(yy_scan_string(emacro));
- vtkParsePreprocess_FreeMacroExpansion(preprocessor, macro, emacro);
- expanded = 1;
- }
- }
- if (!expanded)
- {
- /* if no macro expansion occurred, return the ID */
- yylval.str = name;
- if (yyleng > 3 && name[0] == 'v' && name[1] == 't' && name[2] == 'k')
- {
- return(VTK_ID);
- }
- else if (name[0] == 'Q')
- {
- return(QT_ID);
- }
- else
- {
- return(ID);
- }
- }
- }
- YY_BREAK
-case 134:
-YY_RULE_SETUP
-#line 437 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(FLOAT_LITERAL);
- }
- YY_BREAK
-case 135:
-YY_RULE_SETUP
-#line 442 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(FLOAT_LITERAL);
- }
- YY_BREAK
-case 136:
-YY_RULE_SETUP
-#line 447 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(FLOAT_LITERAL);
- }
- YY_BREAK
-case 137:
-YY_RULE_SETUP
-#line 452 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(HEX_LITERAL);
- }
- YY_BREAK
-case 138:
-YY_RULE_SETUP
-#line 457 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(OCT_LITERAL);
- }
- YY_BREAK
-case 139:
-YY_RULE_SETUP
-#line 462 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(INT_LITERAL);
- }
- YY_BREAK
-case 140:
-YY_RULE_SETUP
-#line 467 "vtkParse.l"
-{
- yylval.str = vtkstrndup(yytext, yyleng);
- return(ZERO);
- }
- YY_BREAK
-case 141:
-/* rule 141 can match eol */
-YY_RULE_SETUP
-#line 472 "vtkParse.l"
-/* escaped newlines */
- YY_BREAK
-case 142:
-YY_RULE_SETUP
-#line 473 "vtkParse.l"
-/* whitespace */
- YY_BREAK
-case 143:
-/* rule 143 can match eol */
-YY_RULE_SETUP
-#line 474 "vtkParse.l"
-/* whitespace */
- YY_BREAK
-case 144:
-YY_RULE_SETUP
-#line 476 "vtkParse.l"
-return(OP_LSHIFT_EQ);
- YY_BREAK
-case 145:
-YY_RULE_SETUP
-#line 477 "vtkParse.l"
-return(OP_RSHIFT_EQ);
- YY_BREAK
-case 146:
-YY_RULE_SETUP
-#line 478 "vtkParse.l"
-return(OP_LSHIFT);
- YY_BREAK
-case 147:
-YY_RULE_SETUP
-#line 479 "vtkParse.l"
-return(OP_DOT_POINTER);
- YY_BREAK
-case 148:
-YY_RULE_SETUP
-#line 480 "vtkParse.l"
-return(OP_ARROW_POINTER);
- YY_BREAK
-case 149:
-YY_RULE_SETUP
-#line 481 "vtkParse.l"
-return(OP_ARROW);
- YY_BREAK
-case 150:
-YY_RULE_SETUP
-#line 482 "vtkParse.l"
-return(OP_RSHIFT);
- YY_BREAK
-case 151:
-YY_RULE_SETUP
-#line 483 "vtkParse.l"
-return(OP_INCR);
- YY_BREAK
-case 152:
-YY_RULE_SETUP
-#line 484 "vtkParse.l"
-return(OP_DECR);
- YY_BREAK
-case 153:
-YY_RULE_SETUP
-#line 485 "vtkParse.l"
-return(OP_PLUS_EQ);
- YY_BREAK
-case 154:
-YY_RULE_SETUP
-#line 486 "vtkParse.l"
-return(OP_MINUS_EQ);
- YY_BREAK
-case 155:
-YY_RULE_SETUP
-#line 487 "vtkParse.l"
-return(OP_TIMES_EQ);
- YY_BREAK
-case 156:
-YY_RULE_SETUP
-#line 488 "vtkParse.l"
-return(OP_DIVIDE_EQ);
- YY_BREAK
-case 157:
-YY_RULE_SETUP
-#line 489 "vtkParse.l"
-return(OP_REMAINDER_EQ);
- YY_BREAK
-case 158:
-YY_RULE_SETUP
-#line 490 "vtkParse.l"
-return(OP_AND_EQ);
- YY_BREAK
-case 159:
-YY_RULE_SETUP
-#line 491 "vtkParse.l"
-return(OP_OR_EQ);
- YY_BREAK
-case 160:
-YY_RULE_SETUP
-#line 492 "vtkParse.l"
-return(OP_XOR_EQ);
- YY_BREAK
-case 161:
-YY_RULE_SETUP
-#line 493 "vtkParse.l"
-return(OP_LOGIC_AND);
- YY_BREAK
-case 162:
-YY_RULE_SETUP
-#line 494 "vtkParse.l"
-return(OP_LOGIC_OR);
- YY_BREAK
-case 163:
-YY_RULE_SETUP
-#line 495 "vtkParse.l"
-return(OP_LOGIC_EQ);
- YY_BREAK
-case 164:
-YY_RULE_SETUP
-#line 496 "vtkParse.l"
-return(OP_LOGIC_NEQ);
- YY_BREAK
-case 165:
-YY_RULE_SETUP
-#line 497 "vtkParse.l"
-return(OP_LOGIC_LEQ);
- YY_BREAK
-case 166:
-YY_RULE_SETUP
-#line 498 "vtkParse.l"
-return(OP_LOGIC_GEQ);
- YY_BREAK
-case 167:
-YY_RULE_SETUP
-#line 499 "vtkParse.l"
-return(ELLIPSIS);
- YY_BREAK
-case 168:
-YY_RULE_SETUP
-#line 500 "vtkParse.l"
-return(DOUBLE_COLON);
- YY_BREAK
-case 169:
-YY_RULE_SETUP
-#line 502 "vtkParse.l"
-return('[');
- YY_BREAK
-case 170:
-YY_RULE_SETUP
-#line 503 "vtkParse.l"
-return(']');
- YY_BREAK
-case 171:
-YY_RULE_SETUP
-#line 505 "vtkParse.l"
-return(yytext[0]);
- YY_BREAK
-case YY_STATE_EOF(INITIAL):
-#line 507 "vtkParse.l"
-{ if (!pop_buffer()) { yyterminate(); } }
- YY_BREAK
-case 172:
-YY_RULE_SETUP
-#line 509 "vtkParse.l"
-{ return(OTHER); }
- YY_BREAK
-case 173:
-YY_RULE_SETUP
-#line 511 "vtkParse.l"
-YY_FATAL_ERROR( "flex scanner jammed" );
- YY_BREAK
-#line 2910 "lex.yy.c"
-
- case YY_END_OF_BUFFER:
- {
- /* Amount of text matched not including the EOB char. */
- int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
-
- /* Undo the effects of YY_DO_BEFORE_ACTION. */
- *yy_cp = (yy_hold_char);
- YY_RESTORE_YY_MORE_OFFSET
-
- if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
- {
- /* We're scanning a new file or input source. It's
- * possible that this happened because the user
- * just pointed yyin at a new source and called
- * yylex(). If so, then we have to assure
- * consistency between YY_CURRENT_BUFFER and our
- * globals. Here is the right place to do so, because
- * this is the first action (other than possibly a
- * back-up) that will match for the new input source.
- */
- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
- YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
- YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
- }
-
- /* Note that here we test for yy_c_buf_p "<=" to the position
- * of the first EOB in the buffer, since yy_c_buf_p will
- * already have been incremented past the NUL character
- * (since all states make transitions on EOB to the
- * end-of-buffer state). Contrast this with the test
- * in input().
- */
- if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
- { /* This was really a NUL. */
- yy_state_type yy_next_state;
-
- (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
-
- yy_current_state = yy_get_previous_state( );
-
- /* Okay, we're now positioned to make the NUL
- * transition. We couldn't have
- * yy_get_previous_state() go ahead and do it
- * for us because it doesn't know how to deal
- * with the possibility of jamming (and we don't
- * want to build jamming into it because then it
- * will run more slowly).
- */
-
- yy_next_state = yy_try_NUL_trans( yy_current_state );
-
- yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-
- if ( yy_next_state )
- {
- /* Consume the NUL. */
- yy_cp = ++(yy_c_buf_p);
- yy_current_state = yy_next_state;
- goto yy_match;
- }
-
- else
- {
- yy_cp = (yy_c_buf_p);
- goto yy_find_action;
- }
- }
-
- else switch ( yy_get_next_buffer( ) )
- {
- case EOB_ACT_END_OF_FILE:
- {
- (yy_did_buffer_switch_on_eof) = 0;
-
- if ( yywrap( ) )
- {
- /* Note: because we've taken care in
- * yy_get_next_buffer() to have set up
- * yytext, we can now set up
- * yy_c_buf_p so that if some total
- * hoser (like flex itself) wants to
- * call the scanner after we return the
- * YY_NULL, it'll still work - another
- * YY_NULL will get returned.
- */
- (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
-
- yy_act = YY_STATE_EOF(YY_START);
- goto do_action;
- }
-
- else
- {
- if ( ! (yy_did_buffer_switch_on_eof) )
- YY_NEW_FILE;
- }
- break;
- }
-
- case EOB_ACT_CONTINUE_SCAN:
- (yy_c_buf_p) =
- (yytext_ptr) + yy_amount_of_matched_text;
-
- yy_current_state = yy_get_previous_state( );
-
- yy_cp = (yy_c_buf_p);
- yy_bp = (yytext_ptr) + YY_MORE_ADJ;
- goto yy_match;
-
- case EOB_ACT_LAST_MATCH:
- (yy_c_buf_p) =
- &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
-
- yy_current_state = yy_get_previous_state( );
-
- yy_cp = (yy_c_buf_p);
- yy_bp = (yytext_ptr) + YY_MORE_ADJ;
- goto yy_find_action;
- }
- break;
- }
-
- default:
- YY_FATAL_ERROR(
- "fatal flex scanner internal error--no action found" );
- } /* end of action switch */
- } /* end of scanning one token */
-} /* end of yylex */
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- * EOB_ACT_LAST_MATCH -
- * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- * EOB_ACT_END_OF_FILE - end of file
- */
-static int yy_get_next_buffer (void)
-{
- register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
- register char *source = (yytext_ptr);
- register int number_to_move, i;
- int ret_val;
-
- if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
- YY_FATAL_ERROR(
- "fatal flex scanner internal error--end of buffer missed" );
-
- if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
- { /* Don't try to fill the buffer, so this is an EOF. */
- if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
- {
- /* We matched a single character, the EOB, so
- * treat this as a final EOF.
- */
- return EOB_ACT_END_OF_FILE;
- }
-
- else
- {
- /* We matched some text prior to the EOB, first
- * process it.
- */
- return EOB_ACT_LAST_MATCH;
- }
- }
-
- /* Try to read more data. */
-
- /* First move last chars to start of buffer. */
- number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
-
- for ( i = 0; i < number_to_move; ++i )
- *(dest++) = *(source++);
-
- if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
- /* don't do the read, it's not guaranteed to return an EOF,
- * just force an EOF
- */
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
-
- else
- {
- yy_size_t num_to_read =
- YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-
- while ( num_to_read <= 0 )
- { /* Not enough room in the buffer - grow it. */
-
- /* just a shorter name for the current buffer */
- YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
-
- int yy_c_buf_p_offset =
- (int) ((yy_c_buf_p) - b->yy_ch_buf);
-
- if ( b->yy_is_our_buffer )
- {
- yy_size_t new_size = b->yy_buf_size * 2;
-
- if ( new_size <= 0 )
- b->yy_buf_size += b->yy_buf_size / 8;
- else
- b->yy_buf_size *= 2;
-
- b->yy_ch_buf = (char *)
- /* Include room in for 2 EOB chars. */
- yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
- }
- else
- /* Can't grow it, we don't own it. */
- b->yy_ch_buf = 0;
-
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR(
- "fatal error - scanner input buffer overflow" );
-
- (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
-
- num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
- number_to_move - 1;
-
- }
-
- if ( num_to_read > YY_READ_BUF_SIZE )
- num_to_read = YY_READ_BUF_SIZE;
-
- /* Read in more data. */
- YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
- (yy_n_chars), num_to_read );
-
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
- }
-
- if ( (yy_n_chars) == 0 )
- {
- if ( number_to_move == YY_MORE_ADJ )
- {
- ret_val = EOB_ACT_END_OF_FILE;
- yyrestart(yyin );
- }
-
- else
- {
- ret_val = EOB_ACT_LAST_MATCH;
- YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
- YY_BUFFER_EOF_PENDING;
- }
- }
-
- else
- ret_val = EOB_ACT_CONTINUE_SCAN;
-
- if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
- /* Extend the array by 50%, plus the number we really need. */
- yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
- if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
- }
-
- (yy_n_chars) += number_to_move;
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
- (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-
- return ret_val;
-}
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
- static yy_state_type yy_get_previous_state (void)
-{
- register yy_state_type yy_current_state;
- register char *yy_cp;
-
- yy_current_state = (yy_start);
- yy_current_state += YY_AT_BOL();
-
- for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
- {
- register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
- if ( yy_accept[yy_current_state] )
- {
- (yy_last_accepting_state) = yy_current_state;
- (yy_last_accepting_cpos) = yy_cp;
- }
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 1116 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- }
-
- return yy_current_state;
-}
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- * next_state = yy_try_NUL_trans( current_state );
- */
- static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
-{
- register int yy_is_jam;
- register char *yy_cp = (yy_c_buf_p);
-
- register YY_CHAR yy_c = 1;
- if ( yy_accept[yy_current_state] )
- {
- (yy_last_accepting_state) = yy_current_state;
- (yy_last_accepting_cpos) = yy_cp;
- }
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 1116 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 1115);
-
- return yy_is_jam ? 0 : yy_current_state;
-}
-
- static void yyunput (int c, register char * yy_bp )
-{
- register char *yy_cp;
-
- yy_cp = (yy_c_buf_p);
-
- /* undo effects of setting up yytext */
- *yy_cp = (yy_hold_char);
-
- if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
- { /* need to shift things up to make room */
- /* +2 for EOB chars. */
- register yy_size_t number_to_move = (yy_n_chars) + 2;
- register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
- YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
- register char *source =
- &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
-
- while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
- *--dest = *--source;
-
- yy_cp += (int) (dest - source);
- yy_bp += (int) (dest - source);
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
-
- if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
- YY_FATAL_ERROR( "flex scanner push-back overflow" );
- }
-
- *--yy_cp = (char) c;
-
- if ( c == '\n' ){
- --yylineno;
- }
-
- (yytext_ptr) = yy_bp;
- (yy_hold_char) = *yy_cp;
- (yy_c_buf_p) = yy_cp;
-}
-
-#ifndef YY_NO_INPUT
-#ifdef __cplusplus
- static int yyinput (void)
-#else
- static int input (void)
-#endif
-
-{
- int c;
-
- *(yy_c_buf_p) = (yy_hold_char);
-
- if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
- {
- /* yy_c_buf_p now points to the character we want to return.
- * If this occurs *before* the EOB characters, then it's a
- * valid NUL; if not, then we've hit the end of the buffer.
- */
- if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
- /* This was really a NUL. */
- *(yy_c_buf_p) = '\0';
-
- else
- { /* need more input */
- yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
- ++(yy_c_buf_p);
-
- switch ( yy_get_next_buffer( ) )
- {
- case EOB_ACT_LAST_MATCH:
- /* This happens because yy_g_n_b()
- * sees that we've accumulated a
- * token and flags that we need to
- * try matching the token before
- * proceeding. But for input(),
- * there's no matching to consider.
- * So convert the EOB_ACT_LAST_MATCH
- * to EOB_ACT_END_OF_FILE.
- */
-
- /* Reset buffer status. */
- yyrestart(yyin );
-
- /*FALLTHROUGH*/
-
- case EOB_ACT_END_OF_FILE:
- {
- if ( yywrap( ) )
- return 0;
-
- if ( ! (yy_did_buffer_switch_on_eof) )
- YY_NEW_FILE;
-#ifdef __cplusplus
- return yyinput();
-#else
- return input();
-#endif
- }
-
- case EOB_ACT_CONTINUE_SCAN:
- (yy_c_buf_p) = (yytext_ptr) + offset;
- break;
- }
- }
- }
-
- c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
- *(yy_c_buf_p) = '\0'; /* preserve yytext */
- (yy_hold_char) = *++(yy_c_buf_p);
-
- YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
- if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol )
-
- yylineno++;
-;
-
- return c;
-}
-#endif /* ifndef YY_NO_INPUT */
-
-/** Immediately switch to a different input stream.
- * @param input_file A readable stream.
- *
- * @note This function does not reset the start condition to @c INITIAL .
- */
- void yyrestart (FILE * input_file )
-{
-
- if ( ! YY_CURRENT_BUFFER ){
- yyensure_buffer_stack ();
- YY_CURRENT_BUFFER_LVALUE =
- yy_create_buffer(yyin,YY_BUF_SIZE );
- }
-
- yy_init_buffer(YY_CURRENT_BUFFER,input_file );
- yy_load_buffer_state( );
-}
-
-/** Switch to a different input buffer.
- * @param new_buffer The new input buffer.
- *
- */
- void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
-{
-
- /* TODO. We should be able to replace this entire function body
- * with
- * yypop_buffer_state();
- * yypush_buffer_state(new_buffer);
- */
- yyensure_buffer_stack ();
- if ( YY_CURRENT_BUFFER == new_buffer )
- return;
-
- if ( YY_CURRENT_BUFFER )
- {
- /* Flush out information for old buffer. */
- *(yy_c_buf_p) = (yy_hold_char);
- YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
- }
-
- YY_CURRENT_BUFFER_LVALUE = new_buffer;
- yy_load_buffer_state( );
-
- /* We don't actually know whether we did this switch during
- * EOF (yywrap()) processing, but the only time this flag
- * is looked at is after yywrap() is called, so it's safe
- * to go ahead and always set it.
- */
- (yy_did_buffer_switch_on_eof) = 1;
-}
-
-static void yy_load_buffer_state (void)
-{
- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
- (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
- yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
- (yy_hold_char) = *(yy_c_buf_p);
-}
-
-/** Allocate and initialize an input buffer state.
- * @param file A readable stream.
- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- *
- * @return the allocated buffer state.
- */
- YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
-{
- YY_BUFFER_STATE b;
-
- b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
- b->yy_buf_size = size;
-
- /* yy_ch_buf has to be 2 characters longer than the size given because
- * we need to put in 2 end-of-buffer characters.
- */
- b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 );
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
- b->yy_is_our_buffer = 1;
-
- yy_init_buffer(b,file );
-
- return b;
-}
-
-/** Destroy the buffer.
- * @param b a buffer created with yy_create_buffer()
- *
- */
- void yy_delete_buffer (YY_BUFFER_STATE b )
-{
-
- if ( ! b )
- return;
-
- if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
- YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
-
- if ( b->yy_is_our_buffer )
- yyfree((void *) b->yy_ch_buf );
-
- yyfree((void *) b );
-}
-
-#ifndef __cplusplus
-extern int isatty (int );
-#endif /* __cplusplus */
-
-/* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a yyrestart() or at EOF.
- */
- static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
-
-{
- int oerrno = errno;
-
- yy_flush_buffer(b );
-
- b->yy_input_file = file;
- b->yy_fill_buffer = 1;
-
- /* If b is the current buffer, then yy_init_buffer was _probably_
- * called from yyrestart() or through yy_get_next_buffer.
- * In that case, we don't want to reset the lineno or column.
- */
- if (b != YY_CURRENT_BUFFER){
- b->yy_bs_lineno = 1;
- b->yy_bs_column = 0;
- }
-
- b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-
- errno = oerrno;
-}
-
-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- *
- */
- void yy_flush_buffer (YY_BUFFER_STATE b )
-{
- if ( ! b )
- return;
-
- b->yy_n_chars = 0;
-
- /* We always need two end-of-buffer characters. The first causes
- * a transition to the end-of-buffer state. The second causes
- * a jam in that state.
- */
- b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
- b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
- b->yy_buf_pos = &b->yy_ch_buf[0];
-
- b->yy_at_bol = 1;
- b->yy_buffer_status = YY_BUFFER_NEW;
-
- if ( b == YY_CURRENT_BUFFER )
- yy_load_buffer_state( );
-}
-
-/** Pushes the new state onto the stack. The new state becomes
- * the current state. This function will allocate the stack
- * if necessary.
- * @param new_buffer The new state.
- *
- */
-void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
-{
- if (new_buffer == NULL)
- return;
-
- yyensure_buffer_stack();
-
- /* This block is copied from yy_switch_to_buffer. */
- if ( YY_CURRENT_BUFFER )
- {
- /* Flush out information for old buffer. */
- *(yy_c_buf_p) = (yy_hold_char);
- YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
- }
-
- /* Only push if top exists. Otherwise, replace top. */
- if (YY_CURRENT_BUFFER)
- (yy_buffer_stack_top)++;
- YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
- /* copied from yy_switch_to_buffer. */
- yy_load_buffer_state( );
- (yy_did_buffer_switch_on_eof) = 1;
-}
-
-/** Removes and deletes the top of the stack, if present.
- * The next element becomes the new top.
- *
- */
-void yypop_buffer_state (void)
-{
- if (!YY_CURRENT_BUFFER)
- return;
-
- yy_delete_buffer(YY_CURRENT_BUFFER );
- YY_CURRENT_BUFFER_LVALUE = NULL;
- if ((yy_buffer_stack_top) > 0)
- --(yy_buffer_stack_top);
-
- if (YY_CURRENT_BUFFER) {
- yy_load_buffer_state( );
- (yy_did_buffer_switch_on_eof) = 1;
- }
-}
-
-/* Allocates the stack if it does not exist.
- * Guarantees space for at least one push.
- */
-static void yyensure_buffer_stack (void)
-{
- yy_size_t num_to_alloc;
-
- if (!(yy_buffer_stack)) {
-
- /* First allocation is just for 2 elements, since we don't know if this
- * scanner will even need a stack. We use 2 instead of 1 to avoid an
- * immediate realloc on the next call.
- */
- num_to_alloc = 1;
- (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
- (num_to_alloc * sizeof(struct yy_buffer_state*)
- );
- if ( ! (yy_buffer_stack) )
- YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
- memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-
- (yy_buffer_stack_max) = num_to_alloc;
- (yy_buffer_stack_top) = 0;
- return;
- }
-
- if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
- /* Increase the buffer to prepare for a possible push. */
- int grow_size = 8 /* arbitrary grow size */;
-
- num_to_alloc = (yy_buffer_stack_max) + grow_size;
- (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
- ((yy_buffer_stack),
- num_to_alloc * sizeof(struct yy_buffer_state*)
- );
- if ( ! (yy_buffer_stack) )
- YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
- /* zero only the new slots.*/
- memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
- (yy_buffer_stack_max) = num_to_alloc;
- }
-}
-
-/** Setup the input buffer state to scan directly from a user-specified character buffer.
- * @param base the character buffer
- * @param size the size in bytes of the character buffer
- *
- * @return the newly allocated buffer state object.
- */
-YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
-{
- YY_BUFFER_STATE b;
-
- if ( size < 2 ||
- base[size-2] != YY_END_OF_BUFFER_CHAR ||
- base[size-1] != YY_END_OF_BUFFER_CHAR )
- /* They forgot to leave room for the EOB's. */
- return 0;
-
- b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
-
- b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
- b->yy_buf_pos = b->yy_ch_buf = base;
- b->yy_is_our_buffer = 0;
- b->yy_input_file = 0;
- b->yy_n_chars = b->yy_buf_size;
- b->yy_is_interactive = 0;
- b->yy_at_bol = 1;
- b->yy_fill_buffer = 0;
- b->yy_buffer_status = YY_BUFFER_NEW;
-
- yy_switch_to_buffer(b );
-
- return b;
-}
-
-/** Setup the input buffer state to scan a string. The next call to yylex() will
- * scan from a @e copy of @a str.
- * @param yystr a NUL-terminated string to scan
- *
- * @return the newly allocated buffer state object.
- * @note If you want to scan bytes that may contain NUL values, then use
- * yy_scan_bytes() instead.
- */
-YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
-{
-
- return yy_scan_bytes(yystr,strlen(yystr) );
-}
-
-/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
- * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
- *
- * @return the newly allocated buffer state object.
- */
-YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len )
-{
- YY_BUFFER_STATE b;
- char *buf;
- yy_size_t n, i;
-
- /* Get memory for full buffer, including space for trailing EOB's. */
- n = _yybytes_len + 2;
- buf = (char *) yyalloc(n );
- if ( ! buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
-
- for ( i = 0; i < _yybytes_len; ++i )
- buf[i] = yybytes[i];
-
- buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
-
- b = yy_scan_buffer(buf,n );
- if ( ! b )
- YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
-
- /* It's okay to grow etc. this buffer, and we should throw it
- * away when we're done.
- */
- b->yy_is_our_buffer = 1;
-
- return b;
-}
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-static void yy_fatal_error (yyconst char* msg )
-{
- (void) fprintf( stderr, "%s\n", msg );
- exit( YY_EXIT_FAILURE );
-}
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up yytext. */ \
- int yyless_macro_arg = (n); \
- YY_LESS_LINENO(yyless_macro_arg);\
- yytext[yyleng] = (yy_hold_char); \
- (yy_c_buf_p) = yytext + yyless_macro_arg; \
- (yy_hold_char) = *(yy_c_buf_p); \
- *(yy_c_buf_p) = '\0'; \
- yyleng = yyless_macro_arg; \
- } \
- while ( 0 )
-
-/* Accessor methods (get/set functions) to struct members. */
-
-/** Get the current line number.
- *
- */
-int yyget_lineno (void)
-{
-
- return yylineno;
-}
-
-/** Get the input stream.
- *
- */
-FILE *yyget_in (void)
-{
- return yyin;
-}
-
-/** Get the output stream.
- *
- */
-FILE *yyget_out (void)
-{
- return yyout;
-}
-
-/** Get the length of the current token.
- *
- */
-yy_size_t yyget_leng (void)
-{
- return yyleng;
-}
-
-/** Get the current token.
- *
- */
-
-char *yyget_text (void)
-{
- return yytext;
-}
-
-/** Set the current line number.
- * @param line_number
- *
- */
-void yyset_lineno (int line_number )
-{
-
- yylineno = line_number;
-}
-
-/** Set the input stream. This does not discard the current
- * input buffer.
- * @param in_str A readable stream.
- *
- * @see yy_switch_to_buffer
- */
-void yyset_in (FILE * in_str )
-{
- yyin = in_str ;
-}
-
-void yyset_out (FILE * out_str )
-{
- yyout = out_str ;
-}
-
-int yyget_debug (void)
-{
- return yy_flex_debug;
-}
-
-void yyset_debug (int bdebug )
-{
- yy_flex_debug = bdebug ;
-}
-
-static int yy_init_globals (void)
-{
- /* Initialization is the same as for the non-reentrant scanner.
- * This function is called from yylex_destroy(), so don't allocate here.
- */
-
- /* We do not touch yylineno unless the option is enabled. */
- yylineno = 1;
-
- (yy_buffer_stack) = 0;
- (yy_buffer_stack_top) = 0;
- (yy_buffer_stack_max) = 0;
- (yy_c_buf_p) = (char *) 0;
- (yy_init) = 0;
- (yy_start) = 0;
-
-/* Defined in main.c */
-#ifdef YY_STDINIT
- yyin = stdin;
- yyout = stdout;
-#else
- yyin = (FILE *) 0;
- yyout = (FILE *) 0;
-#endif
-
- /* For future reference: Set errno on error, since we are called by
- * yylex_init()
- */
- return 0;
-}
-
-/* yylex_destroy is for both reentrant and non-reentrant scanners. */
-int yylex_destroy (void)
-{
-
- /* Pop the buffer stack, destroying each element. */
- while(YY_CURRENT_BUFFER){
- yy_delete_buffer(YY_CURRENT_BUFFER );
- YY_CURRENT_BUFFER_LVALUE = NULL;
- yypop_buffer_state();
- }
-
- /* Destroy the stack itself. */
- yyfree((yy_buffer_stack) );
- (yy_buffer_stack) = NULL;
-
- /* Reset the globals. This is important in a non-reentrant scanner so the next time
- * yylex() is called, initialization will occur. */
- yy_init_globals( );
-
- return 0;
-}
-
-/*
- * Internal utility routines.
- */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
-{
- register int i;
- for ( i = 0; i < n; ++i )
- s1[i] = s2[i];
-}
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
-{
- register int n;
- for ( n = 0; s[n]; ++n )
- ;
-
- return n;
-}
-#endif
-
-void *yyalloc (yy_size_t size )
-{
- return (void *) malloc( size );
-}
-
-void *yyrealloc (void * ptr, yy_size_t size )
-{
- /* The cast to (char *) in the following accommodates both
- * implementations that use char* generic pointers, and those
- * that use void* generic pointers. It works with the latter
- * because both ANSI C and C++ allow castless assignment from
- * any pointer type to void*, and deal with argument conversions
- * as though doing an assignment.
- */
- return (void *) realloc( (char *) ptr, size );
-}
-
-void yyfree (void * ptr )
-{
- free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
-}
-
-#define YYTABLES_NAME "yytables"
-
-#line 511 "vtkParse.l"
-
-
-
-/*
- * Return a parenthetical macro arg list as a new string.
- */
-const char *get_macro_arguments()
-{
- char *cp = NULL;
- size_t i = 0;
- int depth;
- int ws = 0;
- int sl = 0;
- int c1 = input();
-
- if (c1 == '\0')
- {
- if (pop_buffer() == 0)
- {
- return NULL;
- }
- }
-
- while (c1 == ' ' || c1 == '\t' || c1 == '\r' || c1 == '\n')
- {
- c1 = input();
- }
-
- cp = (char *)malloc(4);
-
- if (c1 != '(')
- {
- unput(c1);
- return NULL;
- }
-
- cp[i++] = '(';
- depth = 1;
- c1 = input();
-
- for (;;)
- {
- ws = 0;
- sl = 0;
- /* skip all whitespace */
- while (c1 == ' ' || c1 == '\t' || c1 == '\r' || c1 == '\n')
- {
- ws = 1;
- c1 = input();
- }
- if (c1 == '/')
- {
- c1 = input();
- if (c1 == '*')
- {
- /* skip a C style comment */
- ws = 1;
- if (skip_comment() == 0)
- {
- return NULL;
- }
- c1 = input();
- }
- else if (c1 == '/')
- {
- /* skip a C++ style comment */
- ws = 1;
- do { c1 = input(); }
- while (c1 != '\n' && c1 != '\0');
- if (c1 == '\0')
- {
- return NULL;
- }
- c1 = input();
- }
- else
- {
- sl = 1;
- }
- }
- if (ws)
- {
- /* add a single space to replace any whitespace */
- cp[i++] = ' ';
- if (i >= 4 && (i & (i-1)) == 0)
- {
- cp = (char *)realloc(cp, 2*i);
- }
- }
- if (sl)
- {
- /* add a single space to replace any whitespace */
- cp[i++] = '/';
- if (i >= 4 && (i & (i-1)) == 0)
- {
- cp = (char *)realloc(cp, 2*i);
- }
- }
- if (c1 == '\"' || c1 == '\'')
- {
- int c2 = c1;
- int escaped = 2;
- int firstloop = 1;
- do
- {
- if (escaped)
- {
- --escaped;
- }
- if (!firstloop)
- {
- c1 = input();
- }
- firstloop = 0;
- if (c1 == '\0')
- {
- break;
- }
- if (escaped == 0 && c1 == '\\')
- {
- escaped = 2;
- }
- cp[i++] = (char)c1;
- if (i >= 4 && (i & (i-1)) == 0)
- {
- cp = (char *)realloc(cp, 2*i);
- }
- }
- while (c1 != c2 || escaped);
- }
- else if (c1 != '\0')
- {
- cp[i++] = (char)c1;
- if (i >= 4 && (i & (i-1)) == 0)
- {
- cp = (char *)realloc(cp, 2*i);
- }
- cp[i] = '\0';
- if (c1 == '(')
- {
- depth++;
- }
- if (c1 == ')')
- {
- if (--depth == 0)
- {
- break;
- }
- }
- }
- else
- {
- return NULL;
- }
- c1 = input();
- }
-
- return cp;
-}
-
-/*
- * Skip a C-style comment, return 0 if unterminated.
- */
-int skip_comment()
-{
- int c1 = 0, c2 = input();
- for (;;)
- {
- if (c2 == 0)
- {
- print_preprocessor_error(VTK_PARSE_SYNTAX_ERROR,
- "Cannot find end of comment.", 27);
- return 0;
- }
- if (c1 == '*' && c2 == '/') break;
- c1 = c2; c2 = input();
- }
- return 1;
-}
-
-/*
- * If token contains a comment, make sure whole comment is skipped.
- */
-int skip_trailing_comment(const char *text, size_t l)
-{
- const char *cp = text;
- const char *ep = text + l;
- int incomment = 0;
-
- while (cp < ep)
- {
- while (cp < ep && *cp != '/' && *cp != '\"') { cp++; };
- if (cp >= ep)
- {
- break;
- }
- else if (cp[0] == '/' && cp[1] == '*')
- {
- incomment = 1;
- cp += 2;
- while (cp < ep && *cp != '*') { cp++; };
- if (cp[0] == '*' && cp[1] == '/')
- {
- incomment = 0;
- cp += 2;
- }
- else
- {
- cp++;
- }
- }
- else if (cp[0] == '\"')
- {
- cp++;
- while (cp < ep)
- {
- while (cp < ep && *cp != '\\' && *cp != '\"') { cp++; };
- if (cp >= ep)
- {
- break;
- }
- else if (*cp == '\"')
- {
- cp++;
- break;
- }
- else /* if (*cp == '\\') */
- {
- cp += 2;
- }
- }
- }
- else
- {
- cp++;
- }
- }
-
- if (incomment)
- {
- return skip_comment();
- }
-
- return 1;
-}
-
-/*
- * Skip ahead until the next preprocessor directive.
- * This will eat the '#' that starts the directive.
- * Return 0 if none found.
- */
-int skip_to_next_directive()
-{
- /* state == 0 at the start of a line */
- int state = 0;
- int c;
-
- c = input();
-
- while (c != 0)
- {
- /* whitespace */
- if (c == ' ' || c == '\t')
- {
- c = input();
- }
- /* newline renews the start-of-line state */
- else if (c == '\n')
- {
- state = 0;
- c = input();
- }
- /* skip comments */
- else if (c == '/')
- {
- state = 1;
- if ( (c = input()) == '*')
- {
- if (skip_comment() == 0)
- {
- return 0;
- }
- c = input();
- }
- }
- /* skip escaped characters */
- else if (c == '\\')
- {
- state = 1;
- if ( (c = input()) == '\r')
- {
- if ( (c = input()) == '\n')
- {
- c = input();
- }
- }
- else if (c != 0)
- {
- c = input();
- }
- }
- /* any other chars except '#' at start of line */
- else if (c != '#' || state != 0)
- {
- state = 1;
- c = input();
- }
- else
- {
- break;
- }
- }
-
- return c;
-}
-
-/*
- * Skip to the next #else or #elif or #endif
- */
-int skip_conditional_block()
-{
- static char *linebuf = NULL;
- static size_t linemaxlen = 80;
- size_t i;
- int c;
- int result;
-
- if (linebuf == 0)
- {
- linebuf = (char *)malloc(linemaxlen);
- }
-
- for (;;)
- {
- if (skip_to_next_directive() == 0)
- {
- return 0;
- }
- c = input();
- while (c == ' ' || c == '\t')
- {
- c = input();
- }
- if (c == 0)
- {
- return 0;
- }
-
- /* eat the whole line */
- i = 0;
- linebuf[i++] = '#';
- while (c != 0 && c != '\n')
- {
- if (i >= linemaxlen-5)
- {
- linemaxlen += i+5;
- linebuf = (char *)realloc(linebuf, linemaxlen);
- }
- linebuf[i++] = c;
- /* be sure to skip escaped newlines */
- if (c == '\\')
- {
- c = input();
- linebuf[i++] = c;
- if (c == '\r')
- {
- c = input();
- linebuf[i++] = c;
- }
- }
- c = input();
- }
- linebuf[i++] = c;
-
- result = vtkParsePreprocess_HandleDirective(preprocessor, linebuf);
- if (result != VTK_PARSE_SKIP && result != VTK_PARSE_OK)
- {
- print_preprocessor_error(result, linebuf, i);
- }
- else if (result != VTK_PARSE_SKIP)
- {
- break;
- }
- }
-
- return 1;
-}
-
-/*
- * Skip ahead until one of the strings is found,
- * then skip to the end of the line.
- */
-int skip_ahead_multi(const char *strings[])
-{
- char textbuf[SKIP_MATCH_MAXLEN+1];
- char c = 0;
- size_t i;
-
- for (i = 0; i < (SKIP_MATCH_MAXLEN+1); i++)
- {
- textbuf[i] = '\0';
- }
-
- for (;;)
- {
- for (i = 0; i < SKIP_MATCH_MAXLEN; i++)
- {
- textbuf[i] = textbuf[i+1];
- }
-
- if ((c = (char)input()) == '\0')
- {
- print_preprocessor_error(VTK_PARSE_SYNTAX_ERROR, NULL, 0);
- return 0;
- }
-
- textbuf[SKIP_MATCH_MAXLEN-1] = c;
-
- for (i = 0; strings[i]; i++)
- {
- if (strcmp(&textbuf[SKIP_MATCH_MAXLEN-strlen(strings[i])],
- strings[i]) == 0)
- {
- break;
- }
- }
- if (strings[i])
- {
- break;
- }
- }
-
- while (c != '\0' && c != '\n')
- {
- c = (char)input();
- }
-
- return 1;
-}
-
-/*
- * Skip ahead until the string is found.
- */
-int skip_ahead_until(const char *text)
-{
- const char *strings[2];
- strings[0] = text;
- strings[1] = NULL;
-
- return skip_ahead_multi(strings);
-}
-
-/*
- * buffer stack, used for macro expansion and include files
- */
-static size_t buffer_stack_size = 0;
-static YY_BUFFER_STATE *buffer_stack = NULL;
-
-/*
- * push the current buffer onto the buffer stack.
- */
-void push_buffer()
-{
- size_t n = buffer_stack_size;
- if (buffer_stack == NULL)
- {
- buffer_stack = (YY_BUFFER_STATE *)malloc(4*sizeof(YY_BUFFER_STATE));
- }
- /* grow the stack whenever size reaches a power of two */
- else if (n >= 4 && (n & (n-1)) == 0)
- {
- buffer_stack = (YY_BUFFER_STATE *)realloc(
- buffer_stack, 2*n*sizeof(YY_BUFFER_STATE));
- }
- buffer_stack[buffer_stack_size++] = YY_CURRENT_BUFFER;
-}
-
-/*
- * pop the buffer stack and restore the previous buffer
- */
-int pop_buffer()
-{
- if (in_macro())
- {
- pop_macro();
- }
- else
- {
- pop_include();
- }
- if (buffer_stack_size == 0)
- {
- return 0;
- }
- yy_delete_buffer(YY_CURRENT_BUFFER);
- yy_switch_to_buffer(buffer_stack[--buffer_stack_size]);
- return 1;
-}
-
-/*
- * include stack, to tell what include is being evaluated
- */
-static size_t include_stack_size = 0;
-static FileInfo **include_stack = NULL;
-static int *lineno_stack = NULL;
-
-/*
- * push the current include onto the include stack.
- */
-void push_include(const char *filename)
-{
- FileInfo *file_info = NULL;
- int same_file = 0;
- size_t n = include_stack_size;
-
- if (include_stack == NULL)
- {
- include_stack = (FileInfo **)malloc(4*sizeof(FileInfo *));
- lineno_stack = (int *)malloc(4*sizeof(int));
- }
-
- /* grow the stack whenever size reaches a power of two */
- else if (n >= 4 && (n & (n-1)) == 0)
- {
- include_stack = (FileInfo **)realloc(
- include_stack, 2*n*sizeof(FileInfo *));
- lineno_stack = (int *)realloc(
- lineno_stack, 2*n*sizeof(int));
- }
-
- lineno_stack[include_stack_size] = yyget_lineno();
- yyset_lineno(0);
- include_stack[include_stack_size++] = data;
-
- /* if the file is including itself */
- if (filename == data->FileName ||
- (filename != 0 && data->FileName != 0 &&
- strcmp(filename, data->FileName) == 0))
- {
- same_file = 1;
- }
-
- /* make a new fileinfo, but only if we are in the base namespace
- * and only if the only items added so far are constants */
- if (!same_file && currentNamespace == data->Contents &&
- data->Contents->NumberOfItems == data->Contents->NumberOfConstants)
- {
- file_info = (FileInfo *)malloc(sizeof(FileInfo));
- vtkParse_InitFile(file_info);
- file_info->FileName = vtkstrdup(filename);
- file_info->Contents = (NamespaceInfo *)malloc(sizeof(NamespaceInfo));
- vtkParse_InitNamespace(file_info->Contents);
- vtkParse_AddIncludeToFile(data, file_info);
- file_info->Strings = data->Strings;
- data = file_info;
- currentNamespace = file_info->Contents;
- }
-}
-
-/*
- * pop the include stack
- */
-void pop_include()
-{
- if (include_stack_size > 0)
- {
- --include_stack_size;
- fclose(yyin);
- yyset_lineno(lineno_stack[include_stack_size]);
- if (data != include_stack[include_stack_size])
- {
- data = include_stack[include_stack_size];
- currentNamespace = data->Contents;
- }
- }
-}
-
-
-/*
- * macro stack, to tell what macro is being evaluated
- */
-static size_t macro_stack_size = 0;
-static MacroInfo **macro_stack = NULL;
-
-/*
- * push the current macro onto the macro stack.
- */
-void push_macro(MacroInfo *macro)
-{
- size_t n = macro_stack_size;
- if (macro_stack == NULL)
- {
- macro_stack = (MacroInfo **)malloc(4*sizeof(MacroInfo *));
- }
- /* grow the stack whenever size reaches a power of two */
- else if (n >= 4 && (n & (n-1)) == 0)
- {
- macro_stack = (MacroInfo **)realloc(
- macro_stack, 2*n*sizeof(MacroInfo *));
- }
- macro_stack[macro_stack_size++] = macro;
- if (macro)
- {
- macro->IsExcluded = 1;
- if (macro_stack_size == 1)
- {
- macroName = macro->Name;
- macroUsed = 0;
- macroEnded = 0;
- }
- }
-}
-
-/*
- * pop the macro stack
- */
-void pop_macro()
-{
- MacroInfo *macro;
-
- if (macro_stack_size > 0)
- {
- macro = macro_stack[--macro_stack_size];
- if (macro)
- {
- macro->IsExcluded = 0;
- }
- }
- macroEnded = 1;
-}
-
-/*
- * are we currently processing a macro?
- */
-int in_macro()
-{
- return (macro_stack_size > 0);
-}
-
-/*
- * print a preprocessor error code with filename and line number.
- */
-void print_preprocessor_error(int result, const char *cp, size_t n)
-{
- const char *text = "";
-
- switch (result)
- {
- case VTK_PARSE_OK:
- case VTK_PARSE_SKIP:
- return;
- case VTK_PARSE_PREPROC_DOUBLE:
- text = "double in preprocessor conditional";
- break;
- case VTK_PARSE_PREPROC_FLOAT:
- text = "float in preprocessor conditional";
- break;
- case VTK_PARSE_PREPROC_STRING:
- text = "string in preprocessor conditional";
- break;
- case VTK_PARSE_MACRO_UNDEFINED:
- text = "undefined macro";
- break;
- case VTK_PARSE_MACRO_REDEFINED:
- text = "redefined macro";
- break;
- case VTK_PARSE_FILE_NOT_FOUND:
- text = "file not found";
- break;
- case VTK_PARSE_FILE_OPEN_ERROR:
- text = "can\'t open file";
- break;
- case VTK_PARSE_FILE_READ_ERROR:
- text = "input/output error";
- break;
- case VTK_PARSE_MACRO_NUMARGS:
- text = "wrong number of macro args";
- break;
- case VTK_PARSE_SYNTAX_ERROR:
- text = "syntax error";
- break;
- }
-
- /* be silent about missing include files */
- if (result == VTK_PARSE_FILE_NOT_FOUND)
- {
- return;
- }
-
- print_parser_error(text, cp, n);
-}
-
-/*
- * print an error with filename and line number.
- */
-void print_parser_error(const char *text, const char *cp, size_t n)
-{
- size_t j = 0;
- const char *fn = "(none)";
-
- if (data->FileName)
- {
- fn = data->FileName;
- }
- fprintf(yyout, "In %s:", fn);
- for (j = 0; j < include_stack_size; j++)
- {
- fprintf(yyout, "%i:\nIn %s:",
- lineno_stack[j], include_stack[j]->FileName);
- }
- fprintf(yyout, "%i:\n", yylineno);
-
- if (cp)
- {
- fprintf(yyout, "%s: %*.*s\n", text, (int)n, (int)n, cp);
- }
- else if (text)
- {
- fprintf(yyout, "%s.\n", text);
- }
-}
-
-/*
- * Execute a preprocessor directive.
- */
-void preprocessor_directive(const char *text, size_t l)
-{
- int result = 0;
- size_t n = 0;
- const char *cp = text;
- const char *ep = text + l;
- const char *directive = NULL;
-
- /* find the directive, store its length in "n" */
- while (*cp == ' ' || *cp == '\t') { cp++; }
- if (*cp == '#') { cp++; }
- while ((*cp == ' ' || *cp == '\t') && cp < ep) { cp++; }
- directive = cp;
- while (*cp >= 'a' && *cp <= 'z' && cp < ep) { cp++; }
- n = cp - directive;
- while ((*cp == ' ' || *cp == '\t') && cp < ep) { cp++; }
-
- if (n == 7 && strncmp(directive, "include", n) == 0)
- {
- /* include files */
- int already_loaded = 0;
- if (*cp == '<' || *cp == '\"')
- {
- /* if asked to recurse into header files */
- if (Recursive && ep - cp > 3)
- {
- const char *dp;
- dp = vtkParsePreprocess_FindIncludeFile(preprocessor,
- &cp[1], (*cp != '\"'), &already_loaded);
- if (dp)
- {
- yyin = fopen(dp, "r");
- if (yyin)
- {
- push_include(dp);
- push_buffer();
- yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE));
- return;
- }
- }
- }
- }
- }
-
- /* let the preprocessor handle the directive */
- result = vtkParsePreprocess_HandleDirective(preprocessor, text);
-
- if (result == VTK_PARSE_SKIP)
- {
- skip_conditional_block();
- }
- else if (result != VTK_PARSE_OK)
- {
- print_preprocessor_error(result, text, l);
- }
- else if (n == 6 && strncmp(directive, "define", n) == 0 &&
- ep - cp > 4 && strncmp(cp, "VTK", 3) == 0)
- {
- /* macros that start with "VTK" */
- MacroInfo *macro;
-
- macro = vtkParsePreprocess_GetMacro(preprocessor, cp);
- if (macro && macro->Definition && !macro->IsFunction)
- {
- /* if macro evaluates to a constant, add it as a constant */
- macro->IsExcluded = 1;
- if (guess_constant_type(macro->Definition) == 0)
- {
- result = VTK_PARSE_MACRO_UNDEFINED;
- }
- macro->IsExcluded = 0;
- if (result < VTK_PARSE_MACRO_UNDEFINED)
- {
- add_constant(
- vtkstrdup(macro->Name), vtkstrdup(macro->Definition), 0, NULL, 1);
- }
- }
- }
-}
+++ /dev/null
-These files are pure copy from Paraview sources.
-They need for extractor building.
-Them has to be updated if the corresponded files in paraview will be changed
\ No newline at end of file
+++ /dev/null
-
-/* A Bison parser, made by GNU Bison 2.4.1. */
-
-/* Skeleton implementation for Bison's Yacc-like parsers in C
-
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-/* As a special exception, you may create a larger work that contains
- part or all of the Bison parser skeleton and distribute that work
- under terms of your choice, so long as that work isn't itself a
- parser generator using the skeleton or a modified version thereof
- as a parser skeleton. Alternatively, if you modify or redistribute
- the parser skeleton itself, you may (at your option) remove this
- special exception, which will cause the skeleton and the resulting
- Bison output files to be licensed under the GNU General Public
- License without this special exception.
-
- This special exception was added by the Free Software Foundation in
- version 2.2 of Bison. */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
- simplifying the original so-called "semantic" parser. */
-
-/* All symbols defined below should begin with yy or YY, to avoid
- infringing on user name space. This should be done even for local
- variables, as they might otherwise be expanded by user macros.
- There are some unavoidable exceptions within include files to
- define necessary library symbols; they are noted "INFRINGES ON
- USER NAME SPACE" below. */
-
-/* Identify Bison output. */
-#define YYBISON 1
-
-/* Bison version. */
-#define YYBISON_VERSION "2.4.1"
-
-/* Skeleton name. */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers. */
-#define YYPURE 0
-
-/* Push parsers. */
-#define YYPUSH 0
-
-/* Pull parsers. */
-#define YYPULL 1
-
-/* Using locations. */
-#define YYLSP_NEEDED 0
-
-
-
-/* Copy the first part of user declarations. */
-
-/* Line 189 of yacc.c */
-#line 15 "vtkParse.y"
-
-
-/*
-
-This file must be translated to C and modified to build everywhere.
-
-Run yacc like this:
-
- yacc -b vtkParse vtkParse.y
-
-Modify vtkParse.tab.c:
- - convert TABs to spaces (eight per tab)
- - remove spaces from ends of lines, s/ *$//g
- - remove the "goto yyerrlab1;" that appears right before yyerrlab1:
- - remove the #defined constants that appear right after the anonymous_enums
-
-*/
-
-/*
-The purpose of this parser is to read C++ header files in order to
-generate data structures that describe the C++ interface of a library,
-one header file at a time. As such, it is not a complete C++ parser.
-It only parses what is relevant to the interface and skips the rest.
-
-While the parser reads method definitions, type definitions, and
-template definitions it generates a "signature" which is a string
-that matches (apart from whitespace) the text that was parsed.
-
-While parsing types, the parser creates an unsigned int that describes
-the type as well as creating other data structures for arrays, function
-pointers, etc. The parser also creates a typeId string, which is either
-a simple id that gives the class name or type name, or is "function" for
-function pointer types, or "method" for method pointer types.
-*/
-
-/*
-Conformance Notes:
-
-This parser was designed empirically and incrementally. It has been
-refactored to make it more similar to the ANSI C++ 1996 BNF grammar,
-but there are still many very significant differences.
-
-The most significant difference between this parser and a "standard"
-parser is that it only parses declarations in detail. All other
-statements and expressions are parsed as arbitrary sequences of symbols,
-without any syntactic analysis.
-
-The "unqualified_id" does not directly include "operator_function_id" or
-"conversion_function_id" (e.g. ids like "operator=" or "operator int*").
-Instead, these two id types are used to allow operator functions to be
-handled by their own rules, rather than by the generic function rules.
-These ids can only be used in function declarations and using declarations.
-
-Types are handled quite differently from the ANSI BNF. These differences
-represent a prolonged (and ultimately successful) attempt to empirically
-create a yacc parser without any shift/reduce conflicts. The rules for
-types are organized according to the way that types are usually defined
-in working code, rather than strictly according to C++ grammar.
-
-The declaration specifiers "friend" and "typedef" can only appear at the
-beginning of a declaration sequence. There are also restrictions on
-where class and enum specifiers can be used: you can declare a new struct
-within a variable declaration, but not within a parameter declaration.
-
-The lexer returns each of "(scope::*", "(*", "(a::b::*", etc. as single
-tokens. The ANSI BNF, in contrast, would consider these to be a "("
-followed by a "ptr_operator". The lexer concatenates these tokens in
-order to eliminate shift/reduce conflicts in the parser. However, this
-means that this parser will only recognize "scope::*" as valid if it is
-preceded by "(", e.g. as part of a member function pointer specification.
-
-An odd bit of C++ ambiguity is that y(x); can be interpreted variously
-as declaration of variable "x" of type "y", as a function call if "y"
-is the name of a function, or as a constructor if "y" is the name of
-a class. This parser always interprets this pattern as a constructor
-declaration, because function calls are ignored by the parser, and
-variable declarations of the form y(x); are exceedingly rare compared
-to the more usual form y x; without parentheses.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#define yyerror(a) fprintf(stderr,"%s\n",a)
-#define yywrap() 1
-
-/* Make sure yacc-generated code knows we have included stdlib.h. */
-#ifndef _STDLIB_H
-# define _STDLIB_H
-#endif
-#define YYINCLUDED_STDLIB_H
-
-/* Borland and MSVC do not define __STDC__ properly. */
-#if !defined(__STDC__)
-# if (defined(_MSC_VER) && _MSC_VER >= 1200) || defined(__BORLANDC__)
-# define __STDC__ 1
-# endif
-#endif
-
-/* Disable warnings in generated code. */
-#if defined(_MSC_VER)
-# pragma warning (disable: 4127) /* conditional expression is constant */
-# pragma warning (disable: 4244) /* conversion to smaller integer type */
-#endif
-#if defined(__BORLANDC__)
-# pragma warn -8004 /* assigned a value that is never used */
-# pragma warn -8008 /* conditional is always true */
-# pragma warn -8066 /* unreachable code */
-#endif
-
-/* Map from the type anonymous_enumeration in vtkType.h to the
- VTK wrapping type system number for the type. */
-
-#include "vtkParse.h"
-#include "vtkParsePreprocess.h"
-#include "vtkParseData.h"
-#include "vtkType.h"
-
-static unsigned int vtkParseTypeMap[] =
- {
- VTK_PARSE_VOID, /* VTK_VOID 0 */
- 0, /* VTK_BIT 1 */
- VTK_PARSE_CHAR, /* VTK_CHAR 2 */
- VTK_PARSE_UNSIGNED_CHAR, /* VTK_UNSIGNED_CHAR 3 */
- VTK_PARSE_SHORT, /* VTK_SHORT 4 */
- VTK_PARSE_UNSIGNED_SHORT, /* VTK_UNSIGNED_SHORT 5 */
- VTK_PARSE_INT, /* VTK_INT 6 */
- VTK_PARSE_UNSIGNED_INT, /* VTK_UNSIGNED_INT 7 */
- VTK_PARSE_LONG, /* VTK_LONG 8 */
- VTK_PARSE_UNSIGNED_LONG, /* VTK_UNSIGNED_LONG 9 */
- VTK_PARSE_FLOAT, /* VTK_FLOAT 10 */
- VTK_PARSE_DOUBLE, /* VTK_DOUBLE 11 */
- VTK_PARSE_ID_TYPE, /* VTK_ID_TYPE 12 */
- VTK_PARSE_STRING, /* VTK_STRING 13 */
- 0, /* VTK_OPAQUE 14 */
- VTK_PARSE_SIGNED_CHAR, /* VTK_SIGNED_CHAR 15 */
- VTK_PARSE_LONG_LONG, /* VTK_LONG_LONG 16 */
- VTK_PARSE_UNSIGNED_LONG_LONG, /* VTK_UNSIGNED_LONG_LONG 17 */
- VTK_PARSE___INT64, /* VTK___INT64 18 */
- VTK_PARSE_UNSIGNED___INT64, /* VTK_UNSIGNED___INT64 19 */
- 0, /* VTK_VARIANT 20 */
- 0, /* VTK_OBJECT 21 */
- VTK_PARSE_UNICODE_STRING /* VTK_UNICODE_STRING 22 */
- };
-
-/* Define some constants to simplify references to the table lookup in
- the primitive_type production rule code. */
-#define VTK_PARSE_INT8 vtkParseTypeMap[VTK_TYPE_INT8]
-#define VTK_PARSE_UINT8 vtkParseTypeMap[VTK_TYPE_UINT8]
-#define VTK_PARSE_INT16 vtkParseTypeMap[VTK_TYPE_INT16]
-#define VTK_PARSE_UINT16 vtkParseTypeMap[VTK_TYPE_UINT16]
-#define VTK_PARSE_INT32 vtkParseTypeMap[VTK_TYPE_INT32]
-#define VTK_PARSE_UINT32 vtkParseTypeMap[VTK_TYPE_UINT32]
-#define VTK_PARSE_INT64 vtkParseTypeMap[VTK_TYPE_INT64]
-#define VTK_PARSE_UINT64 vtkParseTypeMap[VTK_TYPE_UINT64]
-#define VTK_PARSE_FLOAT32 vtkParseTypeMap[VTK_TYPE_FLOAT32]
-#define VTK_PARSE_FLOAT64 vtkParseTypeMap[VTK_TYPE_FLOAT64]
-
-#define vtkParseDebug(s1, s2) \
- if ( parseDebug ) { fprintf(stderr, " %s %s\n", s1, s2); }
-
-/* the tokenizer */
-int yylex(void);
-
-/* global variables */
-FileInfo *data = NULL;
-int parseDebug;
-
-/* the "preprocessor" */
-PreprocessInfo *preprocessor = NULL;
-
-/* include dirs specified on the command line */
-int NumberOfIncludeDirectories= 0;
-const char **IncludeDirectories;
-
-/* macros specified on the command line */
-int NumberOfDefinitions = 0;
-const char **Definitions;
-
-/* options that can be set by the programs that use the parser */
-int IgnoreBTX = 0;
-int Recursive = 0;
-
-/* various state variables */
-NamespaceInfo *currentNamespace = NULL;
-ClassInfo *currentClass = NULL;
-FunctionInfo *currentFunction = NULL;
-TemplateInfo *currentTemplate = NULL;
-const char *currentEnumName = NULL;
-const char *currentEnumValue = NULL;
-parse_access_t access_level = VTK_ACCESS_PUBLIC;
-
-/* functions from vtkParse.l */
-void print_parser_error(const char *text, const char *cp, size_t n);
-
-/* helper functions */
-const char *type_class(unsigned int type, const char *classname);
-void start_class(const char *classname, int is_struct_or_union);
-void reject_class(const char *classname, int is_struct_or_union);
-void end_class();
-void add_base_class(ClassInfo *cls, const char *name, int access_lev,
- int is_virtual);
-void output_friend_function(void);
-void output_function(void);
-void reject_function(void);
-void set_return(FunctionInfo *func, unsigned int type,
- const char *typeclass, int count);
-void add_parameter(FunctionInfo *func, unsigned int type,
- const char *classname, int count);
-void add_template_parameter(unsigned int datatype,
- unsigned int extra, const char *funcSig);
-void add_using(const char *name, int is_namespace);
-void start_enum(const char *enumname);
-void add_enum(const char *name, const char *value);
-void end_enum();
-unsigned int guess_constant_type(const char *value);
-void add_constant(const char *name, const char *value,
- unsigned int type, const char *typeclass, int global);
-const char *add_const_scope(const char *name);
-void prepend_scope(char *cp, const char *arg);
-unsigned int guess_id_type(const char *cp);
-unsigned int add_indirection(unsigned int tval, unsigned int ptr);
-unsigned int add_indirection_to_array(unsigned int ptr);
-void handle_complex_type(ValueInfo *val, unsigned int datatype,
- unsigned int extra, const char *funcSig);
-void handle_function_type(ValueInfo *param, const char *name,
- const char *funcSig);
-void add_legacy_parameter(FunctionInfo *func, ValueInfo *param);
-
-void outputSetVectorMacro(const char *var, unsigned int paramType,
- const char *typeText, int n);
-void outputGetVectorMacro(const char *var, unsigned int paramType,
- const char *typeText, int n);
-
-/*----------------------------------------------------------------
- * String utility methods
- *
- * Strings are centrally allocated and are const, and they are not
- * freed until the program exits. If they need to be freed before
- * then, vtkParse_FreeStringCache() can be called.
- */
-
-/* duplicate the first n bytes of a string and terminate */
-static const char *vtkstrndup(const char *in, size_t n)
-{
- return vtkParse_CacheString(data->Strings, in, n);
-}
-
-/* duplicate a string */
-static const char *vtkstrdup(const char *in)
-{
- if (in)
- {
- in = vtkParse_CacheString(data->Strings, in, strlen(in));
- }
-
- return in;
-}
-
-/* helper function for concatenating strings */
-static const char *vtkstrncat(size_t n, const char **str)
-{
- char *cp;
- size_t i;
- size_t j[8];
- size_t m = 0;
-
- for (i = 0; i < n; i++)
- {
- j[i] = 0;
- if (str[i])
- {
- j[i] = strlen(str[i]);
- m += j[i];
- }
- }
- cp = vtkParse_NewString(data->Strings, m);
- m = 0;
- for (i = 0; i < n; i++)
- {
- if (j[i])
- {
- strncpy(&cp[m], str[i], j[i]);
- m += j[i];
- }
- }
- cp[m] = '\0';
-
- return cp;
-}
-
-/* concatenate strings */
-static const char *vtkstrcat(const char *str1, const char *str2)
-{
- const char *cp[2];
-
- cp[0] = str1;
- cp[1] = str2;
- return vtkstrncat(2, cp);
-}
-
-static const char *vtkstrcat3(const char *str1, const char *str2,
- const char *str3)
-{
- const char *cp[3];
-
- cp[0] = str1;
- cp[1] = str2;
- cp[2] = str3;
- return vtkstrncat(3, cp);
-}
-
-static const char *vtkstrcat4(const char *str1, const char *str2,
- const char *str3, const char *str4)
-{
- const char *cp[4];
-
- cp[0] = str1;
- cp[1] = str2;
- cp[2] = str3;
- cp[3] = str4;
- return vtkstrncat(4, cp);
-}
-
-static const char *vtkstrcat5(const char *str1, const char *str2,
- const char *str3, const char *str4,
- const char *str5)
-{
- const char *cp[5];
-
- cp[0] = str1;
- cp[1] = str2;
- cp[2] = str3;
- cp[3] = str4;
- cp[4] = str5;
- return vtkstrncat(5, cp);
-}
-
-static const char *vtkstrcat7(const char *str1, const char *str2,
- const char *str3, const char *str4,
- const char *str5, const char *str6,
- const char *str7)
-{
- const char *cp[7];
-
- cp[0] = str1;
- cp[1] = str2;
- cp[2] = str3;
- cp[3] = str4;
- cp[4] = str5;
- cp[5] = str6;
- cp[6] = str7;
- return vtkstrncat(7, cp);
-}
-
-static size_t vtkidlen(const char *text)
-{
- size_t i = 0;
- char c = text[0];
-
- if ((c >= 'a' && c <= 'z') ||
- (c >= 'A' && c <= 'Z') ||
- c == '_')
- {
- do
- {
- c = text[++i];
- }
- while ((c >= 'a' && c <= 'z') ||
- (c >= 'A' && c <= 'Z') ||
- (c >= '0' && c <= '9') ||
- c == '_');
- }
-
- return i;
-}
-
-/*----------------------------------------------------------------
- * Comments
- */
-
-/* "private" variables */
-char *commentText = NULL;
-size_t commentLength = 0;
-size_t commentAllocatedLength = 0;
-int commentState = 0;
-
-const char *getComment()
-{
- if (commentState != 0)
- {
- return commentText;
- }
- return NULL;
-}
-
-void clearComment()
-{
- commentLength = 0;
- if (commentText)
- {
- commentText[commentLength] = '\0';
- }
- commentState = 0;
-}
-
-void addCommentLine(const char *line, size_t n)
-{
- if (commentState <= 0)
- {
- clearComment();
- return;
- }
-
- if (commentText == NULL)
- {
- commentAllocatedLength = n+80;
- commentText = (char *)malloc(commentAllocatedLength);
- commentLength = 0;
- commentText[0] = '\0';
- }
- else if (commentLength + n + 2 > commentAllocatedLength)
- {
- commentAllocatedLength = commentAllocatedLength + commentLength + n + 2;
- commentText = (char *)realloc(commentText, commentAllocatedLength);
- }
-
- if (n > 0)
- {
- memcpy(&commentText[commentLength], line, n);
- }
- commentLength += n;
- commentText[commentLength++] = '\n';
- commentText[commentLength] = '\0';
-}
-
-void closeComment()
-{
- switch (commentState)
- {
- case 1:
- /* Make comment persist until a new comment starts */
- commentState = -1;
- break;
- case 2:
- data->Description = vtkstrdup(getComment());
- clearComment();
- break;
- case 3:
- data->SeeAlso = vtkstrdup(getComment());
- clearComment();
- break;
- case 4:
- data->Caveats = vtkstrdup(getComment());
- clearComment();
- break;
- }
-}
-
-void closeOrClearComment()
-{
- if (commentState < 0)
- {
- clearComment();
- }
- else
- {
- closeComment();
- }
-}
-
-void setCommentState(int state)
-{
- switch (state)
- {
- case 0:
- closeComment();
- break;
- default:
- closeComment();
- clearComment();
- break;
- }
-
- commentState = state;
-}
-
-
-/*----------------------------------------------------------------
- * Macros
- */
-
-/* "private" variables */
-const char *macroName = NULL;
-int macroUsed = 0;
-int macroEnded = 0;
-
-const char *getMacro()
-{
- if (macroUsed == 0)
- {
- macroUsed = macroEnded;
- return macroName;
- }
- return NULL;
-}
-
-
-/*----------------------------------------------------------------
- * Namespaces
- *
- * operates on: currentNamespace
- */
-
-/* "private" variables */
-NamespaceInfo *namespaceStack[10];
-int namespaceDepth = 0;
-
-/* enter a namespace */
-void pushNamespace(const char *name)
-{
- int i;
- NamespaceInfo *oldNamespace = currentNamespace;
-
- for (i = 0; i < oldNamespace->NumberOfNamespaces; i++)
- {
- /* see if the namespace already exists */
- if (strcmp(name, oldNamespace->Namespaces[i]->Name) == 0)
- {
- currentNamespace = oldNamespace->Namespaces[i];
- }
- }
-
- /* create a new namespace */
- if (i == oldNamespace->NumberOfNamespaces)
- {
- currentNamespace = (NamespaceInfo *)malloc(sizeof(NamespaceInfo));
- vtkParse_InitNamespace(currentNamespace);
- currentNamespace->Name = name;
- vtkParse_AddNamespaceToNamespace(oldNamespace, currentNamespace);
- }
-
- namespaceStack[namespaceDepth++] = oldNamespace;
-}
-
-/* leave the namespace */
-void popNamespace()
-{
- currentNamespace = namespaceStack[--namespaceDepth];
-}
-
-
-/*----------------------------------------------------------------
- * Classes
- *
- * operates on: currentClass, access_level
- */
-
-/* "private" variables */
-ClassInfo *classStack[10];
-parse_access_t classAccessStack[10];
-int classDepth = 0;
-
-/* start an internal class definition */
-void pushClass()
-{
- classAccessStack[classDepth] = access_level;
- classStack[classDepth++] = currentClass;
-}
-
-/* leave the internal class */
-void popClass()
-{
- currentClass = classStack[--classDepth];
- access_level = classAccessStack[classDepth];
-}
-
-
-/*----------------------------------------------------------------
- * Templates
- *
- * operates on: currentTemplate
- */
-
-/* "private" variables */
-TemplateInfo *templateStack[10];
-int templateDepth = 0;
-
-/* begin a template */
-void startTemplate()
-{
- currentTemplate = (TemplateInfo *)malloc(sizeof(TemplateInfo));
- vtkParse_InitTemplate(currentTemplate);
-}
-
-/* clear a template, if set */
-void clearTemplate()
-{
- if (currentTemplate)
- {
- free(currentTemplate);
- }
- currentTemplate = NULL;
-}
-
-/* push the template onto the stack, and start a new one */
-void pushTemplate()
-{
- templateStack[templateDepth++] = currentTemplate;
- startTemplate();
-}
-
-/* pop a template off the stack */
-void popTemplate()
-{
- currentTemplate = templateStack[--templateDepth];
-}
-
-/*----------------------------------------------------------------
- * Function signatures
- *
- * operates on: currentFunction
- */
-
-/* "private" variables */
-int sigClosed = 0;
-size_t sigMark[10];
-size_t sigLength = 0;
-size_t sigAllocatedLength = 0;
-int sigMarkDepth = 0;
-char *signature = NULL;
-
-/* start a new signature */
-void startSig()
-{
- signature = NULL;
- sigLength = 0;
- sigAllocatedLength = 0;
- sigClosed = 0;
- sigMarkDepth = 0;
- sigMark[0] = 0;
-}
-
-/* get the signature */
-const char *getSig()
-{
- return signature;
-}
-
-/* get the signature length */
-size_t getSigLength()
-{
- return sigLength;
-}
-
-/* reset the sig to the specified length */
-void resetSig(size_t n)
-{
- if (n < sigLength)
- {
- sigLength = n;
- }
-}
-
-/* reallocate Signature if n chars cannot be appended */
-void checkSigSize(size_t n)
-{
- const char *ccp;
-
- if (sigAllocatedLength == 0)
- {
- sigLength = 0;
- sigAllocatedLength = 80 + n;
- signature = vtkParse_NewString(data->Strings, sigAllocatedLength);
- signature[0] = '\0';
- }
- else if (sigLength + n > sigAllocatedLength)
- {
- sigAllocatedLength += sigLength + n;
- ccp = signature;
- signature = vtkParse_NewString(data->Strings, sigAllocatedLength);
- strncpy(signature, ccp, sigLength);
- signature[sigLength] = '\0';
- }
-}
-
-/* close the signature, i.e. allow no more additions to it */
-void closeSig()
-{
- sigClosed = 1;
-}
-
-/* re-open the signature */
-void openSig()
-{
- sigClosed = 0;
-}
-
-/* insert text at the beginning of the signature */
-void preSig(const char *arg)
-{
- if (!sigClosed)
- {
- size_t n = strlen(arg);
- checkSigSize(n);
- if (n > 0)
- {
- memmove(&signature[n], signature, sigLength);
- strncpy(signature, arg, n);
- sigLength += n;
- }
- signature[sigLength] = '\0';
- }
-}
-
-/* append text to the end of the signature */
-void postSig(const char *arg)
-{
- if (!sigClosed)
- {
- size_t n = strlen(arg);
- checkSigSize(n);
- if (n > 0)
- {
- strncpy(&signature[sigLength], arg, n);
- sigLength += n;
- }
- signature[sigLength] = '\0';
- }
-}
-
-/* set a mark in the signature for later operations */
-void markSig()
-{
- sigMark[sigMarkDepth] = 0;
- if (signature)
- {
- sigMark[sigMarkDepth] = sigLength;
- }
- sigMarkDepth++;
-}
-
-/* get the contents of the sig from the mark, and clear the mark */
-const char *copySig()
-{
- const char *cp = NULL;
- if (sigMarkDepth > 0)
- {
- sigMarkDepth--;
- }
- if (signature)
- {
- cp = &signature[sigMark[sigMarkDepth]];
- }
- return vtkstrdup(cp);
-}
-
-/* swap the signature text using the mark as the radix */
-void swapSig()
-{
- if (sigMarkDepth > 0)
- {
- sigMarkDepth--;
- }
- if (signature && sigMark[sigMarkDepth] > 0)
- {
- size_t i, m, n, nn;
- char c;
- char *cp;
- cp = signature;
- n = sigLength;
- m = sigMark[sigMarkDepth];
- nn = m/2;
- for (i = 0; i < nn; i++)
- {
- c = cp[i]; cp[i] = cp[m-i-1]; cp[m-i-1] = c;
- }
- nn = (n-m)/2;
- for (i = 0; i < nn; i++)
- {
- c = cp[i+m]; cp[i+m] = cp[n-i-1]; cp[n-i-1] = c;
- }
- nn = n/2;
- for (i = 0; i < nn; i++)
- {
- c = cp[i]; cp[i] = cp[n-i-1]; cp[n-i-1] = c;
- }
- }
-}
-
-/* chop the last space from the signature */
-void chopSig(void)
-{
- if (signature)
- {
- size_t n = sigLength;
- if (n > 0 && signature[n-1] == ' ')
- {
- signature[n-1] = '\0';
- sigLength--;
- }
- }
-}
-
-/*----------------------------------------------------------------
- * Subroutines for building a type
- */
-
-/* "private" variables */
-unsigned int storedType;
-unsigned int typeStack[10];
-int typeDepth = 0;
-
-/* save the type on the stack */
-void pushType()
-{
- typeStack[typeDepth++] = storedType;
-}
-
-/* pop the type stack */
-void popType()
-{
- storedType = typeStack[--typeDepth];
-}
-
-/* clear the storage type */
-void clearType()
-{
- storedType = 0;
-}
-
-/* save the type */
-void setTypeBase(unsigned int base)
-{
- storedType &= ~(unsigned int)(VTK_PARSE_BASE_TYPE);
- storedType |= base;
-}
-
-/* set a type modifier bit */
-void setTypeMod(unsigned int mod)
-{
- storedType |= mod;
-}
-
-/* modify the indirection (pointers, refs) in the storage type */
-void setTypePtr(unsigned int ind)
-{
- storedType &= ~(unsigned int)(VTK_PARSE_INDIRECT);
- ind &= VTK_PARSE_INDIRECT;
- storedType |= ind;
-}
-
-/* retrieve the storage type */
-unsigned int getType()
-{
- return storedType;
-}
-
-/* combine two primitive type parts, e.g. "long int" */
-unsigned int buildTypeBase(unsigned int a, unsigned int b)
-{
- unsigned int base = (a & VTK_PARSE_BASE_TYPE);
- unsigned int basemod = (b & VTK_PARSE_BASE_TYPE);
-
- switch (base)
- {
- case 0:
- base = basemod;
- break;
- case VTK_PARSE_UNSIGNED_INT:
- base = (basemod | VTK_PARSE_UNSIGNED);
- break;
- case VTK_PARSE_INT:
- base = basemod;
- if (base == VTK_PARSE_CHAR)
- {
- base = VTK_PARSE_SIGNED_CHAR;
- }
- break;
- case VTK_PARSE_CHAR:
- if (basemod == VTK_PARSE_INT)
- {
- base = VTK_PARSE_SIGNED_CHAR;
- }
- else if (basemod == VTK_PARSE_UNSIGNED_INT)
- {
- base = VTK_PARSE_UNSIGNED_CHAR;
- }
- break;
- case VTK_PARSE_SHORT:
- if (basemod == VTK_PARSE_UNSIGNED_INT)
- {
- base = VTK_PARSE_UNSIGNED_SHORT;
- }
- break;
- case VTK_PARSE_LONG:
- if (basemod == VTK_PARSE_UNSIGNED_INT)
- {
- base = VTK_PARSE_UNSIGNED_LONG;
- }
- else if (basemod == VTK_PARSE_LONG)
- {
- base = VTK_PARSE_LONG_LONG;
- }
- else if (basemod == VTK_PARSE_DOUBLE)
- {
- base = VTK_PARSE_LONG_DOUBLE;
- }
- break;
- case VTK_PARSE_UNSIGNED_LONG:
- if (basemod == VTK_PARSE_LONG)
- {
- base = VTK_PARSE_UNSIGNED_LONG_LONG;
- }
- break;
- case VTK_PARSE_LONG_LONG:
- if (basemod == VTK_PARSE_UNSIGNED_INT)
- {
- base = VTK_PARSE_UNSIGNED_LONG_LONG;
- }
- break;
- case VTK_PARSE___INT64:
- if (basemod == VTK_PARSE_UNSIGNED_INT)
- {
- base = VTK_PARSE_UNSIGNED___INT64;
- }
- break;
- case VTK_PARSE_DOUBLE:
- if (basemod == VTK_PARSE_LONG)
- {
- base = VTK_PARSE_LONG_DOUBLE;
- }
- break;
- }
-
- return ((a & ~(unsigned int)(VTK_PARSE_BASE_TYPE)) | base);
-}
-
-
-/*----------------------------------------------------------------
- * Array information
- */
-
-/* "private" variables */
-int numberOfDimensions = 0;
-const char **arrayDimensions = NULL;
-
-/* clear the array counter */
-void clearArray(void)
-{
- numberOfDimensions = 0;
- arrayDimensions = NULL;
-}
-
-/* add another dimension */
-void pushArraySize(const char *size)
-{
- vtkParse_AddStringToArray(&arrayDimensions, &numberOfDimensions,
- size);
-}
-
-/* add another dimension to the front */
-void pushArrayFront(const char *size)
-{
- int i;
-
- vtkParse_AddStringToArray(&arrayDimensions, &numberOfDimensions, 0);
-
- for (i = numberOfDimensions-1; i > 0; i--)
- {
- arrayDimensions[i] = arrayDimensions[i-1];
- }
-
- arrayDimensions[0] = size;
-}
-
-/* get the number of dimensions */
-int getArrayNDims()
-{
- return numberOfDimensions;
-}
-
-/* get the whole array */
-const char **getArray()
-{
- if (numberOfDimensions > 0)
- {
- return arrayDimensions;
- }
- return NULL;
-}
-
-/*----------------------------------------------------------------
- * Variables and Parameters
- */
-
-/* "private" variables */
-const char *currentVarName = 0;
-const char *currentVarValue = 0;
-const char *currentId = 0;
-
-/* clear the var Id */
-void clearVarName(void)
-{
- currentVarName = NULL;
-}
-
-/* set the var Id */
-void setVarName(const char *text)
-{
- currentVarName = text;
-}
-
-/* return the var id */
-const char *getVarName()
-{
- return currentVarName;
-}
-
-/* variable value -------------- */
-
-/* clear the var value */
-void clearVarValue(void)
-{
- currentVarValue = NULL;
-}
-
-/* set the var value */
-void setVarValue(const char *text)
-{
- currentVarValue = text;
-}
-
-/* return the var value */
-const char *getVarValue()
-{
- return currentVarValue;
-}
-
-/* variable type -------------- */
-
-/* clear the current Id */
-void clearTypeId(void)
-{
- currentId = NULL;
-}
-
-/* set the current Id, it is sticky until cleared */
-void setTypeId(const char *text)
-{
- if (currentId == NULL)
- {
- currentId = text;
- }
-}
-
-/* set the signature and type together */
-void typeSig(const char *text)
-{
- postSig(text);
- postSig(" ");
-
- if (currentId == 0)
- {
- setTypeId(text);
- }
-}
-
-/* return the current Id */
-const char *getTypeId()
-{
- return currentId;
-}
-
-/*----------------------------------------------------------------
- * Specifically for function pointers, the scope (i.e. class) that
- * the function is a method of.
- */
-
-const char *pointerScopeStack[10];
-int pointerScopeDepth = 0;
-
-/* save the scope for scoped method pointers */
-void scopeSig(const char *scope)
-{
- if (scope && scope[0] != '\0')
- {
- postSig(scope);
- }
- else
- {
- scope = NULL;
- }
- pointerScopeStack[pointerScopeDepth++] = vtkstrdup(scope);
-}
-
-/* get the scope back */
-const char *getScope()
-{
- return pointerScopeStack[--pointerScopeDepth];
-}
-
-/*----------------------------------------------------------------
- * Function stack
- *
- * operates on: currentFunction
- */
-
-/* "private" variables */
-FunctionInfo *functionStack[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-const char *functionVarNameStack[10];
-const char *functionTypeIdStack[10];
-int functionDepth = 0;
-
-void pushFunction()
-{
- functionStack[functionDepth] = currentFunction;
- currentFunction = (FunctionInfo *)malloc(sizeof(FunctionInfo));
- vtkParse_InitFunction(currentFunction);
- if (!functionStack[functionDepth])
- {
- startSig();
- }
- functionVarNameStack[functionDepth] = getVarName();
- functionTypeIdStack[functionDepth] = getTypeId();
- pushType();
- clearType();
- clearVarName();
- clearTypeId();
- functionDepth++;
- functionStack[functionDepth] = 0;
-}
-
-void popFunction()
-{
- FunctionInfo *newFunction = currentFunction;
-
- --functionDepth;
- currentFunction = functionStack[functionDepth];
- clearVarName();
- if (functionVarNameStack[functionDepth])
- {
- setVarName(functionVarNameStack[functionDepth]);
- }
- clearTypeId();
- if (functionTypeIdStack[functionDepth])
- {
- setTypeId(functionTypeIdStack[functionDepth]);
- }
- popType();
-
- functionStack[functionDepth+1] = newFunction;
-}
-
-FunctionInfo *getFunction()
-{
- return functionStack[functionDepth+1];
-}
-
-/*----------------------------------------------------------------
- * Utility methods
- */
-
-/* prepend a scope:: to a name */
-void prepend_scope(char *cp, const char *arg)
-{
- size_t i, j, m, n;
- int depth;
-
- m = strlen(cp);
- n = strlen(arg);
- i = m;
- while (i > 0 &&
- ((cp[i-1] >= 'a' && cp[i-1] <= 'z') ||
- (cp[i-1] >= 'A' && cp[i-1] <= 'Z') ||
- (cp[i-1] >= '0' && cp[i-1] <= '9') ||
- cp[i-1] == '_' || cp[i-1] == ':' ||
- cp[i-1] == '>'))
- {
- i--;
- if (cp[i] == '>')
- {
- depth = 1;
- while (i > 0)
- {
- i--;
- if (cp[i] == '<')
- {
- if (--depth == 0)
- {
- break;
- }
- }
- if (cp[i] == '>')
- {
- depth++;
- }
- }
- }
- }
-
- for (j = m; j > i; j--)
- {
- cp[j+n+1] = cp[j-1];
- }
- for (j = 0; j < n; j++)
- {
- cp[j+i] = arg[j];
- }
- cp[n+i] = ':'; cp[n+i+1] = ':';
- cp[m+n+2] = '\0';
-}
-
-/* expand a type by including pointers from another */
-unsigned int add_indirection(unsigned int type1, unsigned int type2)
-{
- unsigned int ptr1 = (type1 & VTK_PARSE_POINTER_MASK);
- unsigned int ptr2 = (type2 & VTK_PARSE_POINTER_MASK);
- unsigned int reverse = 0;
- unsigned int result;
-
- /* one of type1 or type2 will only have VTK_PARSE_INDIRECT, but
- * we don't know which one. */
- result = ((type1 & ~VTK_PARSE_POINTER_MASK) |
- (type2 & ~VTK_PARSE_POINTER_MASK));
-
- while (ptr2)
- {
- reverse = ((reverse << 2) | (ptr2 & VTK_PARSE_POINTER_LOWMASK));
- ptr2 = ((ptr2 >> 2) & VTK_PARSE_POINTER_MASK);
- }
-
- while (reverse)
- {
- ptr1 = ((ptr1 << 2) | (reverse & VTK_PARSE_POINTER_LOWMASK));
- reverse = ((reverse >> 2) & VTK_PARSE_POINTER_MASK);
-
- /* make sure we don't exceed the VTK_PARSE_POINTER bitfield */
- if ((ptr1 & VTK_PARSE_POINTER_MASK) != ptr1)
- {
- ptr1 = VTK_PARSE_BAD_INDIRECT;
- break;
- }
- }
-
- return (ptr1 | result);
-}
-
-/* There is only one array, so add any parenthetical indirection to it */
-unsigned int add_indirection_to_array(unsigned int type)
-{
- unsigned int ptrs = (type & VTK_PARSE_POINTER_MASK);
- unsigned int result = (type & ~VTK_PARSE_POINTER_MASK);
- unsigned int reverse = 0;
-
- if ((type & VTK_PARSE_INDIRECT) == VTK_PARSE_BAD_INDIRECT)
- {
- return (result | VTK_PARSE_BAD_INDIRECT);
- }
-
- while (ptrs)
- {
- reverse = ((reverse << 2) | (ptrs & VTK_PARSE_POINTER_LOWMASK));
- ptrs = ((ptrs >> 2) & VTK_PARSE_POINTER_MASK);
- }
-
- /* I know the reversal makes no difference, but it is still
- * nice to add the pointers in the correct order, just in
- * case const pointers are thrown into the mix. */
- while (reverse)
- {
- pushArrayFront("");
- reverse = ((reverse >> 2) & VTK_PARSE_POINTER_MASK);
- }
-
- return result;
-}
-
-
-
-/* Line 189 of yacc.c */
-#line 1354 "vtkParse.tab.c"
-
-/* Enabling traces. */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages. */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table. */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
-
-/* Tokens. */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
- /* Put the tokens into the symbol table, so that GDB and other debuggers
- know about them. */
- enum yytokentype {
- ID = 258,
- VTK_ID = 259,
- QT_ID = 260,
- StdString = 261,
- UnicodeString = 262,
- OSTREAM = 263,
- ISTREAM = 264,
- LP = 265,
- LA = 266,
- STRING_LITERAL = 267,
- INT_LITERAL = 268,
- HEX_LITERAL = 269,
- OCT_LITERAL = 270,
- FLOAT_LITERAL = 271,
- CHAR_LITERAL = 272,
- ZERO = 273,
- STRUCT = 274,
- CLASS = 275,
- UNION = 276,
- ENUM = 277,
- PUBLIC = 278,
- PRIVATE = 279,
- PROTECTED = 280,
- CONST = 281,
- VOLATILE = 282,
- MUTABLE = 283,
- STATIC = 284,
- VIRTUAL = 285,
- EXPLICIT = 286,
- INLINE = 287,
- FRIEND = 288,
- EXTERN = 289,
- OPERATOR = 290,
- TEMPLATE = 291,
- THROW = 292,
- TYPENAME = 293,
- TYPEDEF = 294,
- NAMESPACE = 295,
- USING = 296,
- NEW = 297,
- DELETE = 298,
- STATIC_CAST = 299,
- DYNAMIC_CAST = 300,
- CONST_CAST = 301,
- REINTERPRET_CAST = 302,
- OP_LSHIFT_EQ = 303,
- OP_RSHIFT_EQ = 304,
- OP_LSHIFT = 305,
- OP_RSHIFT = 306,
- OP_DOT_POINTER = 307,
- OP_ARROW_POINTER = 308,
- OP_ARROW = 309,
- OP_INCR = 310,
- OP_DECR = 311,
- OP_PLUS_EQ = 312,
- OP_MINUS_EQ = 313,
- OP_TIMES_EQ = 314,
- OP_DIVIDE_EQ = 315,
- OP_REMAINDER_EQ = 316,
- OP_AND_EQ = 317,
- OP_OR_EQ = 318,
- OP_XOR_EQ = 319,
- OP_LOGIC_AND = 320,
- OP_LOGIC_OR = 321,
- OP_LOGIC_EQ = 322,
- OP_LOGIC_NEQ = 323,
- OP_LOGIC_LEQ = 324,
- OP_LOGIC_GEQ = 325,
- ELLIPSIS = 326,
- DOUBLE_COLON = 327,
- OTHER = 328,
- VOID = 329,
- BOOL = 330,
- FLOAT = 331,
- DOUBLE = 332,
- INT = 333,
- SHORT = 334,
- LONG = 335,
- INT64__ = 336,
- CHAR = 337,
- SIGNED = 338,
- UNSIGNED = 339,
- SSIZE_T = 340,
- SIZE_T = 341,
- IdType = 342,
- TypeInt8 = 343,
- TypeUInt8 = 344,
- TypeInt16 = 345,
- TypeUInt16 = 346,
- TypeInt32 = 347,
- TypeUInt32 = 348,
- TypeInt64 = 349,
- TypeUInt64 = 350,
- TypeFloat32 = 351,
- TypeFloat64 = 352,
- SetMacro = 353,
- GetMacro = 354,
- SetStringMacro = 355,
- GetStringMacro = 356,
- SetClampMacro = 357,
- SetObjectMacro = 358,
- GetObjectMacro = 359,
- BooleanMacro = 360,
- SetVector2Macro = 361,
- SetVector3Macro = 362,
- SetVector4Macro = 363,
- SetVector6Macro = 364,
- GetVector2Macro = 365,
- GetVector3Macro = 366,
- GetVector4Macro = 367,
- GetVector6Macro = 368,
- SetVectorMacro = 369,
- GetVectorMacro = 370,
- ViewportCoordinateMacro = 371,
- WorldCoordinateMacro = 372,
- TypeMacro = 373,
- VTK_BYTE_SWAP_DECL = 374
- };
-#endif
-
-
-
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-{
-
-/* Line 222 of yacc.c */
-#line 1302 "vtkParse.y"
-
- const char *str;
- unsigned int integer;
-
-
-
-/* Line 222 of yacc.c */
-#line 1635 "vtkParse.tab.c"
-} YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-/* Copy the second part of user declarations. */
-
-
-/* Line 264 of yacc.c */
-#line 1647 "vtkParse.tab.c"
-
-#ifdef short
-# undef short
-#endif
-
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
-#endif
-
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
-#else
-typedef short int yytype_int8;
-#endif
-
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
-#else
-typedef short int yytype_int16;
-#endif
-
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-# define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-# define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-# define YYSIZE_T size_t
-# else
-# define YYSIZE_T unsigned int
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-
-#ifndef YY_
-# if YYENABLE_NLS
-# if ENABLE_NLS
-# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-# define YY_(msgid) dgettext ("bison-runtime", msgid)
-# endif
-# endif
-# ifndef YY_
-# define YY_(msgid) msgid
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E. */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
-#else
-# define YYUSE(e) /* empty */
-#endif
-
-/* Identity function, used to suppress warnings about constant conditions. */
-#ifndef lint
-# define YYID(n) (n)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
-#else
-static int
-YYID (yyi)
- int yyi;
-#endif
-{
- return yyi;
-}
-#endif
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols. */
-
-# ifdef YYSTACK_USE_ALLOCA
-# if YYSTACK_USE_ALLOCA
-# ifdef __GNUC__
-# define YYSTACK_ALLOC __builtin_alloca
-# elif defined __BUILTIN_VA_ARG_INCR
-# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-# elif defined _AIX
-# define YYSTACK_ALLOC __alloca
-# elif defined _MSC_VER
-# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-# define alloca _alloca
-# else
-# define YYSTACK_ALLOC alloca
-# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-# ifndef _STDLIB_H
-# define _STDLIB_H 1
-# endif
-# endif
-# endif
-# endif
-# endif
-
-# ifdef YYSTACK_ALLOC
- /* Pacify GCC's `empty if-body' warning. */
-# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
-# ifndef YYSTACK_ALLOC_MAXIMUM
- /* The OS might guarantee only one guard page at the bottom of the stack,
- and a page size can be as small as 4096 bytes. So we cannot safely
- invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
- to allow for a few compiler-allocated temporary stack slots. */
-# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-# endif
-# else
-# define YYSTACK_ALLOC YYMALLOC
-# define YYSTACK_FREE YYFREE
-# ifndef YYSTACK_ALLOC_MAXIMUM
-# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-# endif
-# if (defined __cplusplus && ! defined _STDLIB_H \
- && ! ((defined YYMALLOC || defined malloc) \
- && (defined YYFREE || defined free)))
-# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-# ifndef _STDLIB_H
-# define _STDLIB_H 1
-# endif
-# endif
-# ifndef YYMALLOC
-# define YYMALLOC malloc
-# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-# endif
-# endif
-# ifndef YYFREE
-# define YYFREE free
-# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-# endif
-# endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
- && (! defined __cplusplus \
- || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member. */
-union yyalloc
-{
- yytype_int16 yyss_alloc;
- YYSTYPE yyvs_alloc;
-};
-
-/* The size of the maximum gap between one aligned stack and the next. */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
- N elements. */
-# define YYSTACK_BYTES(N) \
- ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
- + YYSTACK_GAP_MAXIMUM)
-
-/* Copy COUNT objects from FROM to TO. The source and destination do
- not overlap. */
-# ifndef YYCOPY
-# if defined __GNUC__ && 1 < __GNUC__
-# define YYCOPY(To, From, Count) \
- __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-# else
-# define YYCOPY(To, From, Count) \
- do \
- { \
- YYSIZE_T yyi; \
- for (yyi = 0; yyi < (Count); yyi++) \
- (To)[yyi] = (From)[yyi]; \
- } \
- while (YYID (0))
-# endif
-# endif
-
-/* Relocate STACK from its old location to the new one. The
- local variables YYSIZE and YYSTACKSIZE give the old and new number of
- elements in the stack, and YYPTR gives the new location of the
- stack. Advance YYPTR to a properly aligned location for the next
- stack. */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
- do \
- { \
- YYSIZE_T yynewbytes; \
- YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
- Stack = &yyptr->Stack_alloc; \
- yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
- yyptr += yynewbytes / sizeof (*yyptr); \
- } \
- while (YYID (0))
-
-#endif
-
-/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 3
-/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 5657
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 143
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 240
-/* YYNRULES -- Number of rules. */
-#define YYNRULES 603
-/* YYNRULES -- Number of states. */
-#define YYNSTATES 968
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
-#define YYUNDEFTOK 2
-#define YYMAXUTOK 374
-
-#define YYTRANSLATE(YYX) \
- ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
-static const yytype_uint8 yytranslate[] =
-{
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 139, 2, 2, 2, 135, 133, 2,
- 126, 127, 134, 138, 125, 137, 142, 136, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 124, 120,
- 128, 123, 129, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 130, 2, 131, 141, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 121, 140, 122, 132, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
- 115, 116, 117, 118, 119
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
- YYRHS. */
-static const yytype_uint16 yyprhs[] =
-{
- 0, 0, 3, 5, 6, 7, 11, 13, 15, 17,
- 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
- 40, 42, 45, 48, 51, 54, 60, 65, 66, 73,
- 79, 81, 84, 88, 93, 98, 104, 105, 111, 112,
- 117, 118, 122, 124, 126, 128, 129, 130, 134, 138,
- 140, 142, 144, 146, 148, 150, 152, 154, 156, 158,
- 160, 162, 164, 167, 170, 172, 175, 178, 181, 185,
- 188, 192, 193, 195, 198, 200, 204, 206, 210, 214,
- 215, 217, 218, 220, 222, 224, 226, 231, 237, 238,
- 244, 247, 249, 250, 252, 254, 257, 261, 263, 264,
- 269, 276, 280, 285, 288, 292, 298, 302, 304, 307,
- 313, 319, 326, 332, 339, 342, 343, 347, 350, 352,
- 354, 355, 356, 364, 366, 370, 372, 375, 378, 381,
- 385, 389, 394, 398, 399, 405, 407, 408, 413, 414,
- 415, 421, 422, 423, 429, 430, 431, 432, 440, 442,
- 444, 445, 447, 448, 452, 454, 457, 460, 463, 466,
- 469, 472, 476, 479, 483, 486, 490, 494, 497, 501,
- 506, 509, 511, 513, 516, 518, 521, 524, 525, 526,
- 534, 537, 538, 542, 543, 549, 552, 554, 557, 558,
- 561, 562, 566, 568, 571, 575, 577, 578, 584, 586,
- 588, 589, 590, 596, 597, 603, 604, 607, 609, 613,
- 616, 617, 618, 621, 623, 624, 629, 633, 634, 635,
- 641, 642, 644, 645, 649, 654, 657, 658, 661, 662,
- 663, 668, 671, 672, 674, 677, 678, 684, 687, 688,
- 694, 696, 698, 700, 702, 704, 705, 706, 707, 714,
- 716, 717, 720, 723, 727, 729, 732, 734, 737, 738,
- 740, 742, 746, 748, 750, 752, 753, 755, 756, 759,
- 761, 764, 765, 770, 771, 772, 775, 777, 779, 781,
- 783, 786, 789, 792, 795, 798, 802, 806, 807, 813,
- 815, 817, 818, 824, 826, 828, 830, 832, 834, 836,
- 838, 841, 844, 847, 850, 853, 856, 859, 861, 863,
- 865, 867, 869, 871, 873, 875, 877, 879, 881, 883,
- 885, 887, 889, 891, 893, 895, 897, 899, 900, 903,
- 905, 907, 909, 911, 913, 916, 918, 920, 922, 924,
- 926, 929, 931, 933, 935, 937, 939, 941, 943, 946,
- 949, 950, 954, 955, 960, 962, 963, 967, 969, 971,
- 974, 977, 980, 981, 985, 986, 991, 993, 995, 997,
- 1000, 1003, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020,
- 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040,
- 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060,
- 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1079, 1081,
- 1083, 1084, 1088, 1090, 1093, 1094, 1102, 1103, 1104, 1105,
- 1115, 1116, 1122, 1123, 1129, 1130, 1131, 1142, 1143, 1151,
- 1152, 1153, 1154, 1164, 1171, 1172, 1180, 1181, 1189, 1190,
- 1198, 1199, 1207, 1208, 1216, 1217, 1225, 1226, 1234, 1235,
- 1243, 1244, 1254, 1255, 1265, 1270, 1275, 1283, 1284, 1286,
- 1289, 1292, 1296, 1300, 1302, 1304, 1306, 1308, 1310, 1312,
- 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332,
- 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348, 1350, 1352,
- 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372,
- 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392,
- 1394, 1396, 1398, 1400, 1402, 1404, 1406, 1408, 1410, 1412,
- 1414, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1430, 1432,
- 1434, 1436, 1438, 1440, 1443, 1445, 1447, 1449, 1451, 1453,
- 1455, 1457, 1459, 1461, 1463, 1465, 1466, 1469, 1471, 1473,
- 1475, 1477, 1479, 1481, 1483, 1485, 1486, 1489, 1490, 1493,
- 1495, 1497, 1499, 1501, 1503, 1504, 1509, 1510, 1515, 1516,
- 1521, 1522, 1527, 1528, 1533, 1534, 1539, 1540, 1543, 1544,
- 1547, 1549, 1551, 1553, 1555, 1557, 1559, 1561, 1563, 1565,
- 1567, 1569, 1571, 1573, 1575, 1577, 1579, 1581, 1583, 1587,
- 1591, 1595, 1597, 1599
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yytype_int16 yyrhs[] =
-{
- 144, 0, -1, 145, -1, -1, -1, 145, 146, 147,
- -1, 198, -1, 196, -1, 153, -1, 150, -1, 152,
- -1, 149, -1, 186, -1, 259, -1, 175, -1, 155,
- -1, 216, -1, 148, -1, 327, -1, 289, 120, -1,
- 120, -1, 199, 155, -1, 199, 216, -1, 199, 183,
- -1, 199, 148, -1, 34, 12, 121, 145, 122, -1,
- 40, 121, 375, 122, -1, -1, 40, 299, 151, 121,
- 145, 122, -1, 40, 299, 123, 291, 120, -1, 154,
- -1, 199, 154, -1, 161, 289, 120, -1, 302, 161,
- 289, 120, -1, 156, 300, 261, 120, -1, 302, 156,
- 300, 261, 120, -1, -1, 158, 157, 121, 162, 122,
- -1, -1, 161, 289, 159, 168, -1, -1, 161, 160,
- 168, -1, 20, -1, 19, -1, 21, -1, -1, -1,
- 162, 163, 165, -1, 162, 164, 124, -1, 23, -1,
- 24, -1, 25, -1, 196, -1, 153, -1, 167, -1,
- 186, -1, 259, -1, 175, -1, 155, -1, 220, -1,
- 166, -1, 327, -1, 119, 381, -1, 289, 120, -1,
- 120, -1, 199, 155, -1, 199, 220, -1, 33, 184,
- -1, 33, 199, 184, -1, 33, 153, -1, 33, 221,
- 237, -1, -1, 169, -1, 124, 170, -1, 171, -1,
- 170, 125, 171, -1, 289, -1, 30, 173, 289, -1,
- 174, 172, 289, -1, -1, 30, -1, -1, 174, -1,
- 23, -1, 24, -1, 25, -1, 176, 300, 261, 120,
- -1, 302, 176, 300, 261, 120, -1, -1, 178, 121,
- 177, 179, 122, -1, 22, 289, -1, 22, -1, -1,
- 180, -1, 181, -1, 180, 125, -1, 180, 125, 181,
- -1, 298, -1, -1, 298, 123, 182, 355, -1, 308,
- 292, 298, 123, 376, 120, -1, 161, 289, 185, -1,
- 302, 161, 289, 185, -1, 161, 185, -1, 302, 161,
- 185, -1, 121, 375, 122, 376, 120, -1, 124, 376,
- 120, -1, 187, -1, 302, 187, -1, 39, 308, 195,
- 189, 120, -1, 39, 156, 300, 188, 120, -1, 39,
- 302, 156, 300, 188, 120, -1, 39, 176, 300, 188,
- 120, -1, 39, 302, 176, 300, 188, 120, -1, 190,
- 189, -1, -1, 189, 125, 190, -1, 265, 195, -1,
- 268, -1, 192, -1, -1, -1, 279, 126, 193, 249,
- 127, 194, 275, -1, 191, -1, 41, 197, 120, -1,
- 289, -1, 38, 289, -1, 292, 231, -1, 292, 226,
- -1, 295, 292, 231, -1, 295, 292, 226, -1, 41,
- 40, 289, 120, -1, 36, 128, 129, -1, -1, 36,
- 128, 200, 201, 129, -1, 203, -1, -1, 201, 125,
- 202, 203, -1, -1, -1, 204, 314, 266, 205, 212,
- -1, -1, -1, 206, 211, 266, 207, 212, -1, -1,
- -1, -1, 208, 199, 20, 209, 266, 210, 212, -1,
- 20, -1, 38, -1, -1, 213, -1, -1, 123, 214,
- 215, -1, 363, -1, 215, 363, -1, 217, 237, -1,
- 222, 237, -1, 218, 237, -1, 219, 237, -1, 308,
- 233, -1, 308, 292, 233, -1, 292, 241, -1, 302,
- 292, 241, -1, 292, 223, -1, 302, 292, 223, -1,
- 308, 292, 227, -1, 221, 237, -1, 292, 231, 120,
- -1, 302, 292, 231, 120, -1, 308, 233, -1, 222,
- -1, 241, -1, 302, 241, -1, 223, -1, 302, 223,
- -1, 308, 227, -1, -1, -1, 226, 126, 224, 249,
- 127, 225, 234, -1, 232, 308, -1, -1, 229, 228,
- 234, -1, -1, 231, 126, 230, 249, 127, -1, 232,
- 351, -1, 35, -1, 238, 234, -1, -1, 234, 235,
- -1, -1, 37, 236, 369, -1, 26, -1, 123, 18,
- -1, 121, 375, 122, -1, 120, -1, -1, 240, 126,
- 239, 249, 127, -1, 298, -1, 296, -1, -1, -1,
- 244, 242, 246, 243, 234, -1, -1, 240, 126, 245,
- 249, 127, -1, -1, 124, 247, -1, 248, -1, 247,
- 125, 248, -1, 289, 381, -1, -1, -1, 250, 251,
- -1, 253, -1, -1, 251, 125, 252, 253, -1, 251,
- 125, 71, -1, -1, -1, 254, 308, 266, 255, 256,
- -1, -1, 257, -1, -1, 123, 258, 355, -1, 308,
- 260, 262, 120, -1, 268, 256, -1, -1, 264, 262,
- -1, -1, -1, 262, 125, 263, 264, -1, 265, 260,
- -1, -1, 322, -1, 278, 281, -1, -1, 270, 276,
- 127, 267, 272, -1, 279, 281, -1, -1, 271, 277,
- 127, 269, 272, -1, 126, -1, 10, -1, 11, -1,
- 10, -1, 11, -1, -1, -1, -1, 126, 273, 249,
- 127, 274, 275, -1, 282, -1, -1, 275, 28, -1,
- 275, 26, -1, 275, 37, 381, -1, 266, -1, 322,
- 266, -1, 268, -1, 322, 268, -1, -1, 279, -1,
- 298, -1, 298, 124, 280, -1, 15, -1, 13, -1,
- 14, -1, -1, 282, -1, -1, 283, 284, -1, 285,
- -1, 284, 285, -1, -1, 130, 286, 287, 131, -1,
- -1, -1, 288, 355, -1, 290, -1, 291, -1, 298,
- -1, 296, -1, 292, 290, -1, 295, 290, -1, 295,
- 291, -1, 294, 295, -1, 296, 295, -1, 292, 294,
- 295, -1, 292, 296, 295, -1, -1, 292, 36, 293,
- 296, 295, -1, 299, -1, 72, -1, -1, 299, 128,
- 297, 361, 129, -1, 4, -1, 5, -1, 3, -1,
- 9, -1, 8, -1, 6, -1, 7, -1, 132, 4,
- -1, 132, 5, -1, 132, 3, -1, 132, 9, -1,
- 132, 8, -1, 132, 6, -1, 132, 7, -1, 86,
- -1, 85, -1, 88, -1, 89, -1, 90, -1, 91,
- -1, 92, -1, 93, -1, 94, -1, 95, -1, 96,
- -1, 97, -1, 87, -1, 3, -1, 5, -1, 4,
- -1, 9, -1, 8, -1, 6, -1, 7, -1, -1,
- 300, 301, -1, 303, -1, 321, -1, 39, -1, 33,
- -1, 303, -1, 302, 303, -1, 304, -1, 305, -1,
- 306, -1, 28, -1, 34, -1, 34, 12, -1, 29,
- -1, 32, -1, 30, -1, 31, -1, 26, -1, 27,
- -1, 306, -1, 307, 306, -1, 309, 265, -1, -1,
- 312, 310, 300, -1, -1, 302, 312, 311, 300, -1,
- 319, -1, -1, 38, 313, 289, -1, 296, -1, 291,
- -1, 161, 289, -1, 22, 289, -1, 315, 265, -1,
- -1, 318, 316, 300, -1, -1, 302, 312, 317, 300,
- -1, 319, -1, 296, -1, 291, -1, 19, 289, -1,
- 21, 289, -1, 22, 289, -1, 321, -1, 320, -1,
- 6, -1, 7, -1, 8, -1, 9, -1, 3, -1,
- 4, -1, 5, -1, 85, -1, 86, -1, 88, -1,
- 89, -1, 90, -1, 91, -1, 92, -1, 93, -1,
- 94, -1, 95, -1, 96, -1, 97, -1, 87, -1,
- 74, -1, 75, -1, 76, -1, 77, -1, 82, -1,
- 78, -1, 79, -1, 80, -1, 81, -1, 83, -1,
- 84, -1, 323, -1, 326, -1, 326, 323, -1, 133,
- -1, 134, -1, -1, 134, 325, 307, -1, 324, -1,
- 326, 324, -1, -1, 98, 126, 298, 125, 328, 308,
- 127, -1, -1, -1, -1, 99, 126, 329, 298, 125,
- 330, 308, 331, 127, -1, -1, 100, 126, 332, 298,
- 127, -1, -1, 101, 126, 333, 298, 127, -1, -1,
- -1, 102, 126, 298, 125, 334, 308, 335, 125, 376,
- 127, -1, -1, 103, 126, 298, 125, 336, 308, 127,
- -1, -1, -1, -1, 104, 126, 337, 298, 125, 338,
- 308, 339, 127, -1, 105, 126, 298, 125, 308, 127,
- -1, -1, 106, 126, 298, 125, 340, 308, 127, -1,
- -1, 110, 126, 298, 125, 341, 308, 127, -1, -1,
- 107, 126, 298, 125, 342, 308, 127, -1, -1, 111,
- 126, 298, 125, 343, 308, 127, -1, -1, 108, 126,
- 298, 125, 344, 308, 127, -1, -1, 112, 126, 298,
- 125, 345, 308, 127, -1, -1, 109, 126, 298, 125,
- 346, 308, 127, -1, -1, 113, 126, 298, 125, 347,
- 308, 127, -1, -1, 114, 126, 298, 125, 348, 308,
- 125, 13, 127, -1, -1, 115, 126, 298, 125, 349,
- 308, 125, 13, 127, -1, 116, 126, 298, 127, -1,
- 117, 126, 298, 127, -1, 118, 126, 298, 125, 298,
- 350, 127, -1, -1, 125, -1, 126, 127, -1, 130,
- 131, -1, 42, 130, 131, -1, 43, 130, 131, -1,
- 128, -1, 129, -1, 125, -1, 123, -1, 352, -1,
- 135, -1, 134, -1, 136, -1, 137, -1, 138, -1,
- 139, -1, 132, -1, 133, -1, 140, -1, 141, -1,
- 42, -1, 43, -1, 48, -1, 49, -1, 50, -1,
- 51, -1, 52, -1, 53, -1, 54, -1, 57, -1,
- 58, -1, 59, -1, 60, -1, 61, -1, 55, -1,
- 56, -1, 62, -1, 63, -1, 64, -1, 65, -1,
- 66, -1, 67, -1, 68, -1, 69, -1, 70, -1,
- 39, -1, 38, -1, 20, -1, 19, -1, 21, -1,
- 36, -1, 23, -1, 25, -1, 24, -1, 26, -1,
- 29, -1, 32, -1, 30, -1, 34, -1, 40, -1,
- 35, -1, 22, -1, 37, -1, 46, -1, 45, -1,
- 44, -1, 47, -1, 15, -1, 13, -1, 14, -1,
- 16, -1, 17, -1, 12, -1, 18, -1, 358, -1,
- 355, 358, -1, 367, -1, 369, -1, 373, -1, 352,
- -1, 124, -1, 142, -1, 72, -1, 353, -1, 354,
- -1, 321, -1, 320, -1, -1, 357, 359, -1, 356,
- -1, 128, -1, 129, -1, 358, -1, 123, -1, 125,
- -1, 359, -1, 120, -1, -1, 361, 364, -1, -1,
- 362, 360, -1, 365, -1, 356, -1, 363, -1, 123,
- -1, 125, -1, -1, 128, 366, 361, 129, -1, -1,
- 130, 368, 357, 131, -1, -1, 126, 370, 357, 127,
- -1, -1, 10, 371, 357, 127, -1, -1, 11, 372,
- 357, 127, -1, -1, 121, 374, 362, 122, -1, -1,
- 375, 377, -1, -1, 376, 378, -1, 378, -1, 120,
- -1, 379, -1, 381, -1, 380, -1, 72, -1, 71,
- -1, 352, -1, 124, -1, 142, -1, 128, -1, 129,
- -1, 123, -1, 125, -1, 353, -1, 354, -1, 319,
- -1, 73, -1, 121, 375, 122, -1, 130, 375, 131,
- -1, 382, 375, 127, -1, 126, -1, 10, -1, 11,
- -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const yytype_uint16 yyrline[] =
-{
- 0, 1460, 1460, 1462, 1464, 1463, 1474, 1475, 1476, 1477,
- 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487,
- 1488, 1491, 1492, 1493, 1494, 1501, 1508, 1509, 1509, 1513,
- 1520, 1521, 1524, 1525, 1528, 1529, 1532, 1532, 1546, 1546,
- 1548, 1548, 1552, 1553, 1554, 1556, 1558, 1557, 1566, 1570,
- 1571, 1572, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582,
- 1583, 1584, 1585, 1586, 1587, 1590, 1591, 1594, 1595, 1596,
- 1597, 1599, 1600, 1603, 1606, 1607, 1610, 1612, 1614, 1618,
- 1619, 1622, 1623, 1626, 1627, 1628, 1639, 1640, 1644, 1644,
- 1657, 1658, 1660, 1661, 1664, 1665, 1666, 1669, 1670, 1670,
- 1678, 1681, 1682, 1683, 1684, 1687, 1688, 1696, 1697, 1700,
- 1701, 1703, 1705, 1707, 1711, 1713, 1714, 1717, 1720, 1721,
- 1724, 1725, 1724, 1729, 1763, 1766, 1767, 1768, 1770, 1772,
- 1774, 1778, 1785, 1788, 1787, 1805, 1807, 1806, 1811, 1813,
- 1811, 1815, 1817, 1815, 1819, 1820, 1822, 1819, 1833, 1834,
- 1836, 1837, 1840, 1840, 1850, 1851, 1859, 1860, 1861, 1862,
- 1865, 1868, 1869, 1870, 1873, 1874, 1875, 1878, 1879, 1880,
- 1883, 1884, 1885, 1886, 1889, 1890, 1891, 1895, 1899, 1894,
- 1911, 1915, 1915, 1926, 1925, 1934, 1938, 1941, 1950, 1951,
- 1954, 1954, 1955, 1956, 1964, 1965, 1969, 1968, 1976, 1977,
- 1985, 1986, 1985, 2004, 2004, 2007, 2008, 2011, 2012, 2015,
- 2021, 2022, 2022, 2025, 2026, 2026, 2028, 2032, 2034, 2032,
- 2058, 2059, 2062, 2062, 2070, 2073, 2132, 2133, 2135, 2136,
- 2136, 2139, 2142, 2143, 2147, 2148, 2148, 2167, 2168, 2168,
- 2186, 2187, 2189, 2193, 2195, 2198, 2199, 2200, 2199, 2205,
- 2207, 2208, 2209, 2210, 2213, 2214, 2218, 2219, 2223, 2224,
- 2227, 2228, 2231, 2232, 2233, 2236, 2237, 2240, 2240, 2243,
- 2244, 2247, 2247, 2250, 2251, 2251, 2258, 2259, 2262, 2263,
- 2266, 2268, 2270, 2274, 2276, 2278, 2280, 2282, 2282, 2287,
- 2290, 2293, 2293, 2308, 2309, 2310, 2311, 2312, 2313, 2314,
- 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324,
- 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334,
- 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2354, 2355, 2358,
- 2359, 2361, 2362, 2365, 2366, 2369, 2370, 2371, 2374, 2375,
- 2376, 2377, 2380, 2381, 2382, 2385, 2386, 2389, 2390, 2399,
- 2402, 2402, 2404, 2404, 2408, 2409, 2409, 2411, 2413, 2415,
- 2417, 2421, 2424, 2424, 2426, 2426, 2430, 2431, 2433, 2435,
- 2437, 2439, 2443, 2444, 2447, 2448, 2449, 2450, 2451, 2452,
- 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462,
- 2463, 2464, 2465, 2466, 2469, 2470, 2471, 2472, 2473, 2474,
- 2475, 2476, 2477, 2478, 2479, 2499, 2500, 2501, 2504, 2507,
- 2508, 2508, 2523, 2524, 2541, 2541, 2551, 2552, 2552, 2551,
- 2561, 2561, 2571, 2571, 2580, 2580, 2580, 2613, 2612, 2623,
- 2624, 2624, 2623, 2633, 2651, 2651, 2656, 2656, 2661, 2661,
- 2666, 2666, 2671, 2671, 2676, 2676, 2681, 2681, 2686, 2686,
- 2691, 2691, 2708, 2708, 2722, 2759, 2797, 2834, 2835, 2842,
- 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2853, 2854,
- 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864,
- 2865, 2866, 2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874,
- 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884,
- 2885, 2886, 2887, 2890, 2891, 2892, 2893, 2894, 2895, 2896,
- 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, 2905, 2906,
- 2907, 2908, 2909, 2910, 2911, 2914, 2915, 2916, 2917, 2918,
- 2919, 2920, 2927, 2928, 2931, 2932, 2933, 2934, 2965, 2965,
- 2966, 2967, 2968, 2969, 2970, 2993, 2994, 2996, 2997, 2998,
- 3000, 3001, 3002, 3004, 3005, 3007, 3008, 3010, 3011, 3014,
- 3015, 3018, 3019, 3020, 3024, 3023, 3037, 3037, 3041, 3041,
- 3043, 3043, 3045, 3045, 3049, 3049, 3054, 3055, 3057, 3058,
- 3061, 3062, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3071,
- 3071, 3071, 3071, 3071, 3072, 3072, 3073, 3074, 3077, 3080,
- 3083, 3086, 3086, 3086
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
- First, the terminals, then, starting at YYNTOKENS, nonterminals. */
-static const char *const yytname[] =
-{
- "$end", "error", "$undefined", "ID", "VTK_ID", "QT_ID", "StdString",
- "UnicodeString", "OSTREAM", "ISTREAM", "LP", "LA", "STRING_LITERAL",
- "INT_LITERAL", "HEX_LITERAL", "OCT_LITERAL", "FLOAT_LITERAL",
- "CHAR_LITERAL", "ZERO", "STRUCT", "CLASS", "UNION", "ENUM", "PUBLIC",
- "PRIVATE", "PROTECTED", "CONST", "VOLATILE", "MUTABLE", "STATIC",
- "VIRTUAL", "EXPLICIT", "INLINE", "FRIEND", "EXTERN", "OPERATOR",
- "TEMPLATE", "THROW", "TYPENAME", "TYPEDEF", "NAMESPACE", "USING", "NEW",
- "DELETE", "STATIC_CAST", "DYNAMIC_CAST", "CONST_CAST",
- "REINTERPRET_CAST", "OP_LSHIFT_EQ", "OP_RSHIFT_EQ", "OP_LSHIFT",
- "OP_RSHIFT", "OP_DOT_POINTER", "OP_ARROW_POINTER", "OP_ARROW", "OP_INCR",
- "OP_DECR", "OP_PLUS_EQ", "OP_MINUS_EQ", "OP_TIMES_EQ", "OP_DIVIDE_EQ",
- "OP_REMAINDER_EQ", "OP_AND_EQ", "OP_OR_EQ", "OP_XOR_EQ", "OP_LOGIC_AND",
- "OP_LOGIC_OR", "OP_LOGIC_EQ", "OP_LOGIC_NEQ", "OP_LOGIC_LEQ",
- "OP_LOGIC_GEQ", "ELLIPSIS", "DOUBLE_COLON", "OTHER", "VOID", "BOOL",
- "FLOAT", "DOUBLE", "INT", "SHORT", "LONG", "INT64__", "CHAR", "SIGNED",
- "UNSIGNED", "SSIZE_T", "SIZE_T", "IdType", "TypeInt8", "TypeUInt8",
- "TypeInt16", "TypeUInt16", "TypeInt32", "TypeUInt32", "TypeInt64",
- "TypeUInt64", "TypeFloat32", "TypeFloat64", "SetMacro", "GetMacro",
- "SetStringMacro", "GetStringMacro", "SetClampMacro", "SetObjectMacro",
- "GetObjectMacro", "BooleanMacro", "SetVector2Macro", "SetVector3Macro",
- "SetVector4Macro", "SetVector6Macro", "GetVector2Macro",
- "GetVector3Macro", "GetVector4Macro", "GetVector6Macro",
- "SetVectorMacro", "GetVectorMacro", "ViewportCoordinateMacro",
- "WorldCoordinateMacro", "TypeMacro", "VTK_BYTE_SWAP_DECL", "';'", "'{'",
- "'}'", "'='", "':'", "','", "'('", "')'", "'<'", "'>'", "'['", "']'",
- "'~'", "'&'", "'*'", "'%'", "'/'", "'-'", "'+'", "'!'", "'|'", "'^'",
- "'.'", "$accept", "translation_unit", "opt_declaration_seq", "$@1",
- "declaration", "template_declaration", "linkage_specification",
- "namespace_definition", "$@2", "namespace_alias_definition",
- "forward_declaration", "simple_forward_declaration", "class_definition",
- "class_specifier", "$@3", "class_head", "$@4", "$@5", "class_key",
- "member_specification", "$@6", "member_access_specifier",
- "member_declaration", "template_member_declaration",
- "friend_declaration", "opt_base_clause", "base_clause",
- "base_specifier_list", "base_specifier", "opt_virtual",
- "opt_access_specifier", "access_specifier", "enum_definition",
- "enum_specifier", "$@7", "enum_head", "opt_enumerator_list",
- "enumerator_list", "enumerator_definition", "$@8",
- "nested_variable_initialization", "ignored_class", "ignored_class_body",
- "typedef_declaration", "basic_typedef_declaration",
- "typedef_declarator_list", "typedef_declarator_list_cont",
- "typedef_declarator", "typedef_direct_declarator",
- "function_direct_declarator", "$@9", "$@10", "typedef_declarator_id",
- "using_declaration", "using_id", "using_directive", "template_head",
- "$@11", "template_parameter_list", "$@12", "template_parameter", "$@13",
- "$@14", "$@15", "$@16", "$@17", "$@18", "$@19", "class_or_typename",
- "opt_template_parameter_initializer", "template_parameter_initializer",
- "$@20", "template_parameter_value", "function_definition",
- "function_declaration", "nested_method_declaration",
- "nested_operator_declaration", "method_definition", "method_declaration",
- "operator_declaration", "conversion_function", "$@21", "$@22",
- "conversion_function_id", "operator_function_nr", "$@23",
- "operator_function_sig", "$@24", "operator_function_id", "operator_sig",
- "function_nr", "function_trailer_clause", "function_trailer", "$@25",
- "function_body", "function_sig", "$@26", "function_name",
- "structor_declaration", "$@27", "$@28", "structor_sig", "$@29",
- "opt_ctor_initializer", "mem_initializer_list", "mem_initializer",
- "parameter_declaration_clause", "$@30", "parameter_list", "$@31",
- "parameter_declaration", "$@32", "$@33", "opt_initializer",
- "initializer", "$@34", "variable_declaration", "init_declarator_id",
- "opt_declarator_list", "declarator_list_cont", "$@35", "init_declarator",
- "opt_ptr_operator_seq", "direct_abstract_declarator", "$@36",
- "direct_declarator", "$@37", "p_or_lp_or_la", "lp_or_la",
- "opt_array_or_parameters", "$@38", "$@39", "function_qualifiers",
- "abstract_declarator", "declarator", "opt_declarator_id",
- "declarator_id", "bitfield_size", "opt_array_decorator_seq",
- "array_decorator_seq", "$@40", "array_decorator_seq_impl",
- "array_decorator", "$@41", "array_size_specifier", "$@42",
- "id_expression", "unqualified_id", "qualified_id",
- "nested_name_specifier", "$@43", "identifier_sig", "scope_operator_sig",
- "template_id", "$@44", "simple_id", "identifier",
- "opt_decl_specifier_seq", "decl_specifier2", "decl_specifier_seq",
- "decl_specifier", "storage_class_specifier", "function_specifier",
- "cv_qualifier", "cv_qualifier_seq", "store_type", "store_type_specifier",
- "$@45", "$@46", "type_specifier", "$@47", "tparam_type",
- "tparam_type_specifier2", "$@48", "$@49", "tparam_type_specifier",
- "simple_type_specifier", "type_name", "primitive_type",
- "ptr_operator_seq", "reference", "pointer", "$@50", "pointer_seq",
- "declaration_macro", "$@51", "$@52", "$@53", "$@54", "$@55", "$@56",
- "$@57", "$@58", "$@59", "$@60", "$@61", "$@62", "$@63", "$@64", "$@65",
- "$@66", "$@67", "$@68", "$@69", "$@70", "$@71", "$@72", "opt_comma",
- "operator_id", "operator_id_no_delim", "keyword", "literal",
- "constant_expression", "common_bracket_item", "any_bracket_contents",
- "bracket_pitem", "any_bracket_item", "braces_item",
- "angle_bracket_contents", "braces_contents", "angle_bracket_pitem",
- "angle_bracket_item", "angle_brackets_sig", "$@73", "brackets_sig",
- "$@74", "parentheses_sig", "$@75", "$@76", "$@77", "braces_sig", "$@78",
- "ignored_items", "ignored_expression", "ignored_item",
- "ignored_item_no_semi", "ignored_braces", "ignored_brackets",
- "ignored_parentheses", "ignored_left_parenthesis", 0
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
- token YYLEX-NUM. */
-static const yytype_uint16 yytoknum[] =
-{
- 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
- 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
- 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
- 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
- 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
- 59, 123, 125, 61, 58, 44, 40, 41, 60, 62,
- 91, 93, 126, 38, 42, 37, 47, 45, 43, 33,
- 124, 94, 46
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const yytype_uint16 yyr1[] =
-{
- 0, 143, 144, 145, 146, 145, 147, 147, 147, 147,
- 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
- 147, 148, 148, 148, 148, 149, 150, 151, 150, 152,
- 153, 153, 154, 154, 155, 155, 157, 156, 159, 158,
- 160, 158, 161, 161, 161, 162, 163, 162, 162, 164,
- 164, 164, 165, 165, 165, 165, 165, 165, 165, 165,
- 165, 165, 165, 165, 165, 166, 166, 167, 167, 167,
- 167, 168, 168, 169, 170, 170, 171, 171, 171, 172,
- 172, 173, 173, 174, 174, 174, 175, 175, 177, 176,
- 178, 178, 179, 179, 180, 180, 180, 181, 182, 181,
- 183, 184, 184, 184, 184, 185, 185, 186, 186, 187,
- 187, 187, 187, 187, 188, 189, 189, 190, 191, 191,
- 193, 194, 192, 195, 196, 197, 197, 197, 197, 197,
- 197, 198, 199, 200, 199, 201, 202, 201, 204, 205,
- 203, 206, 207, 203, 208, 209, 210, 203, 211, 211,
- 212, 212, 214, 213, 215, 215, 216, 216, 216, 216,
- 217, 218, 218, 218, 219, 219, 219, 220, 220, 220,
- 221, 221, 221, 221, 222, 222, 222, 224, 225, 223,
- 226, 228, 227, 230, 229, 231, 232, 233, 234, 234,
- 236, 235, 235, 235, 237, 237, 239, 238, 240, 240,
- 242, 243, 241, 245, 244, 246, 246, 247, 247, 248,
- 249, 250, 249, 251, 252, 251, 251, 254, 255, 253,
- 256, 256, 258, 257, 259, 260, 261, 261, 262, 263,
- 262, 264, 265, 265, 266, 267, 266, 268, 269, 268,
- 270, 270, 270, 271, 271, 272, 273, 274, 272, 272,
- 275, 275, 275, 275, 276, 276, 277, 277, 278, 278,
- 279, 279, 280, 280, 280, 281, 281, 283, 282, 284,
- 284, 286, 285, 287, 288, 287, 289, 289, 290, 290,
- 291, 291, 291, 292, 292, 292, 292, 293, 292, 294,
- 295, 297, 296, 298, 298, 298, 298, 298, 298, 298,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
- 299, 299, 299, 299, 299, 299, 299, 300, 300, 301,
- 301, 301, 301, 302, 302, 303, 303, 303, 304, 304,
- 304, 304, 305, 305, 305, 306, 306, 307, 307, 308,
- 310, 309, 311, 309, 312, 313, 312, 312, 312, 312,
- 312, 314, 316, 315, 317, 315, 318, 318, 318, 318,
- 318, 318, 319, 319, 320, 320, 320, 320, 320, 320,
- 320, 320, 320, 320, 320, 320, 320, 320, 320, 320,
- 320, 320, 320, 320, 321, 321, 321, 321, 321, 321,
- 321, 321, 321, 321, 321, 322, 322, 322, 323, 324,
- 325, 324, 326, 326, 328, 327, 329, 330, 331, 327,
- 332, 327, 333, 327, 334, 335, 327, 336, 327, 337,
- 338, 339, 327, 327, 340, 327, 341, 327, 342, 327,
- 343, 327, 344, 327, 345, 327, 346, 327, 347, 327,
- 348, 327, 349, 327, 327, 327, 327, 350, 350, 351,
- 351, 351, 351, 351, 351, 351, 351, 351, 352, 352,
- 352, 352, 352, 352, 352, 352, 352, 352, 352, 352,
- 352, 352, 352, 352, 352, 352, 352, 352, 352, 352,
- 352, 352, 352, 352, 352, 352, 352, 352, 352, 352,
- 352, 352, 352, 353, 353, 353, 353, 353, 353, 353,
- 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
- 353, 353, 353, 353, 353, 354, 354, 354, 354, 354,
- 354, 354, 355, 355, 356, 356, 356, 356, 356, 356,
- 356, 356, 356, 356, 356, 357, 357, 358, 358, 358,
- 359, 359, 359, 360, 360, 361, 361, 362, 362, 363,
- 363, 364, 364, 364, 366, 365, 368, 367, 370, 369,
- 371, 369, 372, 369, 374, 373, 375, 375, 376, 376,
- 377, 377, 378, 378, 378, 378, 378, 378, 378, 378,
- 378, 378, 378, 378, 378, 378, 378, 378, 379, 380,
- 381, 382, 382, 382
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const yytype_uint8 yyr2[] =
-{
- 0, 2, 1, 0, 0, 3, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 1, 2, 2, 2, 2, 5, 4, 0, 6, 5,
- 1, 2, 3, 4, 4, 5, 0, 5, 0, 4,
- 0, 3, 1, 1, 1, 0, 0, 3, 3, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 2, 2, 1, 2, 2, 2, 3, 2,
- 3, 0, 1, 2, 1, 3, 1, 3, 3, 0,
- 1, 0, 1, 1, 1, 1, 4, 5, 0, 5,
- 2, 1, 0, 1, 1, 2, 3, 1, 0, 4,
- 6, 3, 4, 2, 3, 5, 3, 1, 2, 5,
- 5, 6, 5, 6, 2, 0, 3, 2, 1, 1,
- 0, 0, 7, 1, 3, 1, 2, 2, 2, 3,
- 3, 4, 3, 0, 5, 1, 0, 4, 0, 0,
- 5, 0, 0, 5, 0, 0, 0, 7, 1, 1,
- 0, 1, 0, 3, 1, 2, 2, 2, 2, 2,
- 2, 3, 2, 3, 2, 3, 3, 2, 3, 4,
- 2, 1, 1, 2, 1, 2, 2, 0, 0, 7,
- 2, 0, 3, 0, 5, 2, 1, 2, 0, 2,
- 0, 3, 1, 2, 3, 1, 0, 5, 1, 1,
- 0, 0, 5, 0, 5, 0, 2, 1, 3, 2,
- 0, 0, 2, 1, 0, 4, 3, 0, 0, 5,
- 0, 1, 0, 3, 4, 2, 0, 2, 0, 0,
- 4, 2, 0, 1, 2, 0, 5, 2, 0, 5,
- 1, 1, 1, 1, 1, 0, 0, 0, 6, 1,
- 0, 2, 2, 3, 1, 2, 1, 2, 0, 1,
- 1, 3, 1, 1, 1, 0, 1, 0, 2, 1,
- 2, 0, 4, 0, 0, 2, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 3, 3, 0, 5, 1,
- 1, 0, 5, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 0, 2, 1,
- 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
- 2, 1, 1, 1, 1, 1, 1, 1, 2, 2,
- 0, 3, 0, 4, 1, 0, 3, 1, 1, 2,
- 2, 2, 0, 3, 0, 4, 1, 1, 1, 2,
- 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 2, 1, 1,
- 0, 3, 1, 2, 0, 7, 0, 0, 0, 9,
- 0, 5, 0, 5, 0, 0, 10, 0, 7, 0,
- 0, 0, 9, 6, 0, 7, 0, 7, 0, 7,
- 0, 7, 0, 7, 0, 7, 0, 7, 0, 7,
- 0, 9, 0, 9, 4, 4, 7, 0, 1, 2,
- 2, 3, 3, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 2, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 0, 2, 1, 1, 1,
- 1, 1, 1, 1, 1, 0, 2, 0, 2, 1,
- 1, 1, 1, 1, 0, 4, 0, 4, 0, 4,
- 0, 4, 0, 4, 0, 4, 0, 2, 0, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 3, 3,
- 3, 1, 1, 1
-};
-
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
- STATE-NUM when YYTABLE doesn't specify something else to do. Zero
- means the default is an error. */
-static const yytype_uint16 yydefact[] =
-{
- 3, 0, 4, 1, 0, 378, 379, 380, 374, 375,
- 376, 377, 43, 42, 44, 91, 345, 346, 338, 341,
- 343, 344, 342, 339, 186, 0, 355, 0, 0, 0,
- 290, 394, 395, 396, 397, 399, 400, 401, 402, 398,
- 403, 404, 381, 382, 393, 383, 384, 385, 386, 387,
- 388, 389, 390, 391, 392, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 20, 0, 5, 17,
- 11, 9, 10, 8, 30, 15, 327, 36, 40, 14,
- 327, 0, 12, 107, 7, 6, 0, 16, 0, 0,
- 0, 0, 174, 0, 0, 13, 0, 276, 358, 0,
- 0, 0, 357, 278, 289, 0, 333, 335, 336, 337,
- 0, 232, 350, 354, 373, 372, 18, 295, 293, 294,
- 298, 299, 297, 296, 308, 307, 319, 309, 310, 311,
- 312, 313, 314, 315, 316, 317, 318, 360, 277, 0,
- 279, 340, 133, 0, 378, 379, 380, 374, 375, 376,
- 377, 339, 381, 382, 393, 383, 384, 385, 386, 387,
- 388, 389, 390, 391, 392, 327, 40, 327, 358, 357,
- 0, 0, 320, 322, 321, 325, 326, 324, 323, 576,
- 27, 0, 0, 0, 125, 0, 0, 0, 416, 420,
- 422, 0, 0, 429, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 302, 300,
- 301, 305, 306, 304, 303, 232, 0, 71, 359, 232,
- 88, 0, 24, 31, 21, 23, 0, 22, 0, 0,
- 195, 576, 156, 158, 159, 157, 177, 0, 0, 180,
- 19, 287, 164, 0, 162, 200, 280, 0, 279, 278,
- 283, 281, 282, 284, 291, 327, 40, 327, 108, 175,
- 0, 334, 352, 243, 244, 176, 181, 0, 0, 160,
- 188, 0, 228, 220, 0, 265, 0, 199, 260, 408,
- 409, 349, 233, 405, 412, 406, 327, 279, 3, 132,
- 138, 356, 340, 232, 359, 232, 327, 327, 295, 293,
- 294, 298, 299, 297, 296, 123, 119, 115, 118, 265,
- 260, 0, 0, 0, 126, 0, 124, 128, 127, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 332, 331, 0, 228, 0, 328, 329, 330,
- 45, 0, 41, 72, 32, 71, 0, 92, 360, 0,
- 0, 198, 0, 211, 359, 0, 203, 205, 285, 286,
- 555, 232, 359, 232, 165, 163, 327, 188, 183, 478,
- 479, 480, 481, 482, 483, 484, 485, 486, 492, 493,
- 487, 488, 489, 490, 491, 494, 495, 496, 497, 498,
- 499, 500, 501, 502, 466, 465, 0, 463, 464, 0,
- 474, 475, 469, 468, 470, 471, 472, 473, 476, 477,
- 185, 467, 187, 196, 0, 222, 225, 221, 256, 0,
- 0, 237, 266, 0, 166, 161, 199, 0, 0, 407,
- 413, 351, 4, 0, 135, 0, 0, 0, 0, 115,
- 0, 0, 232, 232, 0, 120, 378, 379, 380, 374,
- 375, 376, 377, 602, 603, 530, 526, 527, 525, 528,
- 529, 531, 506, 505, 507, 519, 509, 511, 510, 512,
- 513, 515, 514, 516, 518, 508, 520, 504, 503, 517,
- 478, 479, 523, 522, 521, 524, 586, 585, 597, 581,
- 576, 26, 592, 588, 593, 601, 590, 591, 576, 589,
- 596, 587, 594, 595, 577, 580, 582, 584, 583, 576,
- 0, 0, 3, 131, 130, 129, 414, 0, 0, 0,
- 424, 427, 0, 0, 434, 438, 442, 446, 436, 440,
- 444, 448, 450, 452, 454, 455, 0, 34, 227, 231,
- 46, 83, 84, 85, 81, 73, 74, 79, 76, 39,
- 86, 0, 93, 94, 97, 198, 194, 0, 217, 0,
- 0, 211, 0, 201, 0, 0, 33, 0, 353, 182,
- 211, 0, 0, 459, 460, 192, 190, 0, 189, 211,
- 224, 229, 0, 238, 257, 271, 268, 269, 263, 264,
- 262, 261, 347, 411, 25, 136, 134, 0, 0, 0,
- 368, 367, 0, 258, 232, 362, 366, 148, 149, 258,
- 0, 110, 114, 117, 112, 0, 0, 109, 232, 211,
- 0, 0, 0, 29, 4, 0, 417, 421, 423, 0,
- 0, 430, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 457, 49, 50, 51, 37, 0, 0,
- 0, 82, 0, 80, 0, 89, 95, 98, 578, 178,
- 212, 213, 0, 288, 0, 206, 207, 0, 188, 570,
- 572, 540, 574, 562, 538, 563, 568, 564, 292, 566,
- 539, 544, 543, 537, 541, 542, 560, 561, 556, 559,
- 534, 535, 536, 35, 87, 0, 461, 462, 0, 193,
- 0, 232, 548, 549, 223, 547, 532, 245, 274, 270,
- 348, 138, 369, 370, 371, 364, 241, 242, 240, 139,
- 258, 265, 259, 361, 327, 142, 145, 111, 113, 116,
- 0, 598, 599, 600, 28, 0, 0, 425, 0, 0,
- 433, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 458, 0, 0, 0, 0, 64, 53, 58, 47,
- 60, 54, 57, 55, 52, 0, 59, 0, 171, 172,
- 56, 0, 0, 357, 0, 0, 61, 48, 77, 75,
- 78, 96, 0, 0, 188, 214, 258, 204, 0, 209,
- 202, 545, 545, 557, 545, 555, 545, 184, 191, 197,
- 230, 533, 246, 239, 249, 0, 0, 137, 327, 150,
- 254, 0, 258, 234, 363, 150, 258, 121, 415, 418,
- 0, 428, 431, 435, 439, 443, 447, 437, 441, 445,
- 449, 0, 0, 456, 69, 0, 67, 0, 0, 357,
- 0, 0, 62, 65, 66, 0, 167, 63, 0, 173,
- 0, 170, 199, 99, 100, 579, 179, 216, 217, 218,
- 208, 0, 0, 0, 0, 0, 0, 211, 272, 275,
- 365, 152, 140, 151, 235, 255, 143, 146, 250, 0,
- 578, 0, 0, 0, 576, 578, 103, 359, 0, 68,
- 0, 70, 0, 168, 0, 215, 220, 551, 552, 571,
- 550, 546, 573, 554, 575, 553, 558, 569, 565, 567,
- 0, 0, 245, 150, 122, 419, 0, 432, 451, 453,
- 0, 0, 101, 0, 0, 104, 359, 169, 219, 247,
- 153, 154, 236, 147, 252, 251, 0, 426, 578, 106,
- 0, 102, 250, 155, 253, 0, 248, 105
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yytype_int16 yydefgoto[] =
-{
- -1, 1, 2, 4, 78, 232, 80, 81, 323, 82,
- 83, 84, 234, 86, 226, 87, 365, 227, 247, 560,
- 668, 669, 779, 780, 781, 362, 363, 565, 566, 674,
- 670, 567, 89, 90, 367, 91, 571, 572, 573, 802,
- 235, 856, 906, 92, 93, 458, 464, 459, 315, 316,
- 639, 898, 317, 94, 193, 95, 236, 300, 453, 731,
- 454, 455, 829, 456, 835, 457, 836, 933, 629, 892,
- 893, 931, 950, 237, 98, 99, 100, 786, 787, 101,
- 102, 373, 804, 103, 275, 387, 276, 590, 277, 104,
- 279, 432, 598, 718, 242, 280, 599, 253, 789, 377,
- 688, 255, 581, 583, 685, 686, 577, 578, 680, 878,
- 681, 682, 916, 436, 437, 602, 105, 282, 354, 434,
- 721, 355, 356, 739, 932, 283, 727, 740, 284, 823,
- 887, 962, 934, 831, 439, 741, 742, 611, 441, 442,
- 443, 606, 607, 728, 825, 826, 194, 107, 178, 149,
- 375, 110, 111, 179, 380, 113, 114, 225, 357, 248,
- 116, 117, 118, 119, 613, 239, 121, 296, 386, 122,
- 153, 623, 624, 744, 828, 625, 123, 124, 125, 292,
- 293, 294, 448, 295, 126, 645, 332, 756, 899, 333,
- 334, 649, 840, 650, 337, 759, 901, 653, 657, 654,
- 658, 655, 659, 656, 660, 661, 662, 772, 430, 703,
- 704, 705, 724, 725, 881, 920, 921, 926, 584, 883,
- 707, 708, 709, 815, 710, 816, 711, 814, 811, 812,
- 712, 813, 321, 803, 524, 525, 526, 527, 528, 529
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -872
-static const yytype_int16 yypact[] =
-{
- -872, 77, 87, -872, 4255, 167, 191, 227, 280, 300,
- 301, 304, -872, -872, -872, 4899, -872, -872, -872, -872,
- -872, -872, -872, 98, -872, -8, -872, 5429, 383, 4624,
- -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- -872, -872, -38, 106, 121, 122, 133, 158, 171, 186,
- 196, 203, 210, 228, 243, -3, 36, 43, 45, 90,
- 114, 130, 138, 151, 179, 183, 187, 202, 215, 233,
- 235, 249, 258, 267, 269, 271, -872, 438, -872, -872,
- -872, -872, -872, -872, -872, -872, -872, -872, 4899, -872,
- -872, 21, -872, -872, -872, -872, 5144, -872, -71, -71,
- -71, -71, -872, 281, 5524, -872, 54, -872, 284, 4742,
- 350, 4899, -25, -872, 297, 5239, -872, -872, -872, -872,
- 4672, 276, -872, -872, -872, -872, -872, -10, 9, 18,
- 50, 52, 148, 166, -872, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, -872, 310, -872, 4921,
- 350, 312, 321, 4899, -10, 9, 18, 50, 52, 148,
- 166, 441, -872, -872, -872, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, 4899, -872, -872, 350,
- 5429, 4790, -872, -872, -872, -872, -872, -872, -872, -872,
- 332, 4899, 4899, 337, -872, 4742, 4899, 4529, -872, -872,
- -872, 4529, 4529, -872, 4529, 4529, 4529, 4529, 4529, 4529,
- 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529, -872, -872,
- -872, -872, -872, -872, -872, 1286, 343, 348, 259, 1286,
- -872, 4899, -872, -872, -872, -872, 5144, -872, 5334, 4947,
- -872, -872, -872, -872, -872, -872, -872, 4899, 5524, -872,
- -872, -872, -872, 360, -872, -872, -872, 350, -13, 362,
- -872, -872, -872, -872, -872, -872, 4899, -872, -872, -872,
- 4742, -872, -872, -872, -872, -872, -872, 363, 5071, -872,
- -872, 370, -872, 377, 1478, 372, 4742, 350, 15, -872,
- 435, -872, -872, -872, -872, 276, -872, 350, -872, -872,
- 73, -872, -872, 5028, 177, 5028, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, -872, -872, -872, 107,
- 379, 1212, 409, 384, -872, 386, -872, -872, -872, 1383,
- 4742, 387, 4529, 4529, 4529, 388, 389, 4529, 390, 391,
- 392, 393, 397, 398, 399, 401, 402, 403, 405, 404,
- 406, 407, -872, -872, 414, -872, 4790, -872, -872, -872,
- -872, 1111, -872, -872, -872, 348, 415, 4529, -872, 5334,
- 4742, -872, 1617, 424, -872, 471, -872, 412, -872, -872,
- -872, 1286, 278, 1286, -872, -872, -872, -872, -872, 381,
- 423, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, 428, -872, -872, 411,
- -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- -872, -872, 41, -872, 212, -872, -872, -872, -872, 429,
- 4790, -872, -872, 427, -872, -872, 350, 470, 440, -872,
- -872, 4121, 436, 11, -872, 5560, 88, 524, 442, -872,
- 4790, 443, 5028, 5028, 224, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- 444, 350, -872, -872, -872, -872, -872, 445, 434, 439,
- -872, -872, 446, 5524, -872, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, 4529, -872, 447, -872,
- 48, -872, -872, -872, 485, 448, -872, 535, -872, -872,
- -872, 452, 451, -872, 456, 457, -872, 454, -872, 350,
- 297, 424, 4899, -872, 3577, 449, -872, 462, 4121, 41,
- 424, 437, 453, -872, -872, -872, -872, 549, -872, 424,
- -872, -872, 3857, -872, -872, -872, 427, -872, -872, -872,
- -872, -872, -872, 440, -872, -872, -872, 4899, 4899, 4899,
- -872, 350, 5524, 4694, 276, -872, -872, -872, -872, 4694,
- 563, -872, 461, -872, -872, 467, 468, -872, 276, 424,
- 1757, 1897, 2037, -872, 472, 5524, -872, -872, -872, 5524,
- 5524, -872, 463, 5524, 5524, 5524, 5524, 5524, 5524, 5524,
- 5524, 5524, 5524, 464, -872, -872, -872, -872, 4137, 469,
- 4899, -872, 1111, -872, 4899, -872, 4529, -872, -872, -872,
- 473, -872, 5524, -872, 474, 475, -872, 58, -872, -872,
- -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, 477, -872, -872, 92, -872,
- 478, 276, -872, -872, 3857, -872, -872, 160, 465, -872,
- -872, 73, -872, -872, -872, -872, -872, -872, -872, -872,
- 969, 372, -872, -872, -872, -872, -872, -872, -872, -872,
- 479, -872, -872, -872, -872, 480, 5524, -872, 481, 5524,
- -872, 482, 483, 484, 489, 490, 491, 492, 496, 487,
- 499, -872, 498, 4373, 4851, 58, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, 4563, -872, -71, -872, -872,
- -872, 506, 4742, 129, 4468, 4672, -872, -872, -872, -872,
- -872, -872, 3857, 2317, -872, 526, 4694, -872, 4899, -872,
- 41, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, 497, 3857, -872, -872, 504,
- -872, 502, 4694, -872, 4121, 504, 4694, -872, -872, -872,
- 508, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- -872, 622, 623, -872, -872, 4720, -872, 518, -71, -13,
- 4563, 4947, -872, -872, -872, 4563, -872, -872, 520, -872,
- 4742, -872, -872, 3857, -872, -872, 41, -872, -872, -872,
- -872, 3017, 3157, 2877, 3297, 3717, 3437, 424, -872, 3857,
- 4121, -872, -872, -872, -872, -872, -872, -872, -872, 514,
- -872, 515, 516, 519, -872, -872, -872, 328, 4720, -872,
- 518, -872, 4720, -872, 527, -872, 377, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- 521, 3997, 160, 504, 93, -872, 2457, -872, -872, -872,
- 2177, 2597, -872, 328, 4720, -872, 339, -872, -872, -872,
- 3997, -872, -872, -872, -872, -872, 58, -872, -872, -872,
- 339, -872, -872, -872, -872, 2737, 93, -872
-};
-
-/* YYPGOTO[NTERM-NUM]. */
-static const yytype_int16 yypgoto[] =
-{
- -872, -872, -260, -872, -872, 645, -872, -872, -872, -872,
- -613, -94, 1, -26, -872, -872, -872, -872, 16, -872,
- -872, -872, -872, -872, -872, 285, -872, -872, -20, -872,
- -872, 89, -17, -21, -872, -872, -872, -872, -22, -872,
- -872, -202, -473, -9, -102, -249, 199, 22, -872, -872,
- -872, -872, 201, -6, -872, -872, -1, -872, -872, -872,
- -66, -872, -872, -872, -872, -872, -872, -872, -872, -770,
- -872, -872, -872, 668, -872, -872, -872, -111, -97, -576,
- -80, -872, -872, -154, -241, -872, -872, -872, -155, 35,
- -270, -364, -872, -872, -91, -872, -872, -105, -67, -872,
- -872, -872, -872, -872, -872, -129, -542, -872, -872, -872,
- -198, -872, -872, -230, -872, -872, 20, 333, -166, 338,
- -872, -5, -95, -575, -872, -157, -872, -872, -872, -237,
- -872, -872, -261, -872, -872, -872, -98, -872, -29, -696,
- -872, -872, 112, -872, -872, -872, 13, -45, 3, 32,
- -872, -63, 23, -4, -872, 754, -24, 8, -872, 10,
- -81, -872, -872, -415, -872, 49, -872, -872, -872, -19,
- -872, -872, -872, -872, -872, -872, -121, -391, 194, -272,
- 425, 430, -872, -872, 51, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
- -872, -872, -872, -872, -872, -872, -872, -872, -872, -204,
- -302, 82, -751, -554, -456, -581, -153, -872, -89, -872,
- -871, -872, -872, -872, -872, -872, 17, -872, -872, -872,
- -872, -872, -183, -820, -872, -759, -872, -872, -660, -872
-};
-
-/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
- positive, shift that token. If negative, reduce the rule which
- number is the opposite. If zero, do what YYDEFACT says.
- If YYTABLE_NINF, syntax error. */
-#define YYTABLE_NINF -411
-static const yytype_int16 yytable[] =
-{
- 112, 175, 233, 96, 190, 85, 177, 108, 243, 244,
- 245, 150, 440, 268, 115, 281, 445, 106, 148, 522,
- 88, 726, 285, 589, 318, 150, 291, 809, 147, 252,
- 706, 824, 148, 612, 271, 269, 109, 180, 452, 684,
- 328, 327, 254, 176, 875, 444, 257, 30, 715, 240,
- 241, 873, 196, 120, 745, 777, 461, 720, 372, 30,
- 951, 195, -320, 366, 256, 896, 261, 595, 473, 474,
- 522, 664, 665, 666, 431, 889, 181, 3, 596, 963,
- 936, -322, -308, 319, 150, 941, 257, -2, -308, 265,
- -321, 148, 788, -141, 267, -279, 272, 750, 229, 271,
- 445, 228, 689, 690, 256, 258, 238, 150, 627, -144,
- 151, -141, 88, -199, 262, 862, 287, 521, -320, 954,
- 152, 955, -325, 197, -326, 431, 628, 438, 109, 444,
- 956, 266, 257, 260, 281, 263, 615, -322, 965, 447,
- 616, -198, 230, 821, 358, 297, -321, 270, 358, 150,
- 256, 261, 286, 249, 306, 278, 148, 271, 269, 307,
- 854, 272, 198, 953, 597, 830, 301, 271, 521, 199,
- 667, 200, 150, 263, 250, 535, 534, 875, -325, 148,
- -326, 281, 875, 303, 515, 305, 285, 150, 150, 304,
- 384, 297, 150, 701, 148, 148, 176, 788, 730, 262,
- 520, 30, 263, 385, 324, 325, 875, 257, 460, 788,
- 460, 701, 265, 635, 636, 585, 201, 587, 696, 272,
- -324, 726, 358, 257, 358, 256, -307, 150, 330, 272,
- 329, 879, -307, 465, 148, 287, 824, -267, -323, -320,
- 202, -319, -309, 150, 368, 726, 369, -319, -309, -279,
- 148, 520, 176, -310, 266, -199, 203, 895, 285, -310,
- 374, 897, 150, -322, 204, 281, 258, 257, 109, 148,
- 270, 370, 644, 381, 278, 383, -324, 205, -311, 382,
- 378, 379, 446, 604, -311, 256, 822, -295, 271, 269,
- -267, -312, 821, -295, -323, -320, 964, -312, -38, -321,
- 358, -38, 358, 318, 451, 206, -313, 257, 821, 207,
- 263, -293, -313, 208, 462, 463, -314, -293, 531, -322,
- 379, 278, -314, -315, 810, 530, 297, 640, 209, -315,
- -316, 706, 600, 701, 626, 641, -316, 601, 522, 522,
- 522, 210, 285, 265, 637, 930, 642, -294, -317, 638,
- 272, 580, -325, -294, -317, -321, 882, 150, 884, 211,
- 886, 212, 319, -318, 148, 329, 446, 460, 460, -318,
- 358, 579, -326, -324, 568, 213, -323, 706, 249, 364,
- -38, 358, 358, -38, 214, 176, 182, 183, 184, 185,
- 186, 187, 188, 215, 588, 216, 706, 217, 586, -38,
- -298, 270, -38, 523, -277, 278, -298, 246, -325, 289,
- 290, 701, 182, 183, 184, 185, 186, 187, 188, 359,
- -299, -297, 30, 359, -296, 264, -299, -297, -326, -324,
- -296, -90, -323, 298, 942, 701, 521, 521, 521, 945,
- 876, 218, 219, 220, 221, 222, 223, 224, 364, 904,
- 299, 621, 905, 302, 523, 322, 630, 326, 620, 586,
- 904, -410, -410, 905, 360, 622, 16, 17, 832, 379,
- 942, 945, 361, 961, 182, 183, 184, 185, 186, 187,
- 188, 30, 701, 608, 609, 610, 376, 961, -198, 388,
- 701, 701, 701, 701, 701, 701, 433, 359, 701, 359,
- 435, 522, -267, 447, 189, 532, 533, 358, 561, 562,
- 563, 591, 536, 540, 541, 543, 544, 545, 546, 520,
- 520, 520, 547, 548, 549, 871, 550, 551, 552, 743,
- 553, 554, 556, 555, 557, 570, 582, 12, 13, 14,
- 701, 271, 594, 460, 16, 17, 18, 19, 20, 21,
- 22, -210, 161, 592, 263, 593, 603, 605, 614, 701,
- 25, 647, 631, 634, 643, 673, 648, 719, 716, 713,
- 646, 651, 601, 672, 675, 359, 676, 359, 150, 677,
- 678, 679, 714, 746, 717, 148, 638, 747, 748, 771,
- 760, 871, 652, 797, 754, 687, -273, 877, 805, 521,
- 808, 807, 683, 735, 817, 819, 837, 838, 841, 843,
- 844, 845, 851, 150, 150, 150, 846, 847, 848, 849,
- 148, 148, 148, 850, 852, 853, 867, 891, 888, 894,
- 732, 733, 734, 900, 522, 902, 903, 868, 522, 522,
- 913, 935, 937, 938, 263, 359, 939, 947, 949, 79,
- 569, 782, 799, 671, 801, 909, 359, 359, 632, 783,
- 749, 633, 784, 522, 793, 827, 150, 785, 150, 778,
- 150, 108, 97, 148, 864, 148, 858, 148, 794, 880,
- 915, 791, 520, 798, 88, 568, 948, 800, 790, 559,
- 281, 233, 268, 558, 755, 952, 866, 285, 757, 758,
- 792, 966, 761, 762, 763, 764, 765, 766, 767, 768,
- 769, 770, 833, 271, 269, 914, 820, 795, 729, 796,
- 449, 940, 523, 523, 523, 450, 885, 869, 0, 257,
- 925, 806, 521, 0, 0, 818, 521, 521, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 256, 0, 0,
- 0, 0, 834, 358, 0, 0, 281, 0, 0, 0,
- 0, 521, 0, 233, 0, 0, 0, 911, 265, 859,
- 150, 580, 857, 267, 0, 272, 0, 148, 702, 271,
- 269, 859, 359, 860, 271, 269, 863, 0, 297, 855,
- 859, 872, 0, 869, 0, 865, 702, 196, 869, 0,
- 0, 88, 0, 0, 150, 839, 195, 257, 842, 358,
- 266, 148, 0, 0, 0, 520, 263, 792, 0, 520,
- 520, 687, 861, 0, 0, 256, 870, 278, 0, 271,
- 278, 0, 0, 0, 861, 0, 890, 580, 0, 265,
- 0, 272, 0, 0, 520, 0, 272, 0, 0, 0,
- 0, 150, 0, 0, 0, 0, 859, 872, 148, 0,
- 0, 859, 0, 259, 0, 0, 297, 910, 907, 0,
- 0, 0, 0, 908, 288, 0, 912, 0, 0, 0,
- 0, 266, 263, 0, 0, 523, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 278, 870, 0, 0,
- 0, 0, 0, 0, 150, 278, 0, 0, 150, 0,
- 0, 148, 0, 0, 0, 148, 0, 0, 702, 0,
- 0, 943, 0, 0, 0, 946, 944, 0, 0, 0,
- 0, 0, 0, 0, 0, 320, 0, 0, 0, 0,
- 150, 0, 0, 0, 0, 0, 0, 148, 0, 0,
- 0, 331, 0, 0, 0, 335, 336, 960, 338, 339,
- 340, 341, 342, 343, 344, 345, 346, 347, 348, 349,
- 350, 351, 308, 309, 310, 311, 312, 313, 314, 736,
- 737, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 371, 0, 0, 702, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 523, 0,
- 702, 0, 523, 523, 259, 0, 0, 0, 359, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 320, 0,
- 371, 0, 0, 0, 0, 0, 0, 523, 0, 0,
- 0, 0, 0, 0, 134, 135, 136, 137, 138, 139,
- 140, 141, 142, 143, 144, 145, 146, 702, 0, 0,
- 0, 0, 0, 0, 0, 702, 702, 702, 702, 702,
- 702, 0, 0, 702, 359, 0, 537, 538, 539, 0,
- 0, 542, 0, 0, 0, 738, 0, 0, 0, 0,
- 0, 77, 289, 290, 0, 0, 0, 0, 0, 0,
- 320, 0, 0, 0, 127, 128, 129, 130, 131, 132,
- 133, 574, 0, 0, 575, 702, 0, 0, 0, 0,
- 0, 0, 0, 0, 561, 562, 563, 0, 0, 0,
- 0, 564, 0, 0, 702, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 30, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 320, 0, 134, 135, 136, 137,
- 138, 139, 140, 141, 142, 143, 144, 145, 146, 0,
- 0, 0, 0, 0, 320, 466, 467, 468, 469, 470,
- 471, 472, 473, 474, 475, 476, 477, 478, 479, 480,
- 481, 482, 483, 484, 485, 486, 487, 488, 489, 0,
- 0, 490, 491, 77, 492, 0, 493, 494, 495, 496,
- 497, 498, 499, 0, 500, 501, 502, 503, 504, 505,
- 391, 392, 393, 394, 395, 396, 397, 398, 399, 400,
- 401, 402, 403, 404, 405, 406, 407, 408, 409, 410,
- 411, 412, 413, 506, 507, 508, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
- 663, 0, 16, 17, 18, 19, 20, 21, 22, 352,
- 161, 0, 0, 0, 0, 353, 0, 0, 0, 0,
- 0, 0, 509, 510, 511, 512, 513, 514, 515, 0,
- 516, 517, 518, 0, 420, 421, 422, 423, 424, 425,
- 426, 427, 428, 429, 519, 0, 0, 0, 0, 0,
- 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 0, 0, 0, 0, 0, 0, 320, 0, 0,
- 0, 0, 0, 320, 0, 0, 154, 155, 156, 157,
- 158, 159, 160, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 12, 13, 14, 231, -226, 0, 0, 16,
- 17, 18, 19, 20, 21, 22, 0, 161, 0, 289,
- 290, 26, 259, 0, 0, 389, 390, 0, 0, 0,
- 574, 391, 392, 393, 394, 395, 396, 397, 398, 399,
- 400, 401, 402, 403, 404, 405, 406, 407, 408, 409,
- 410, 411, 412, 413, 0, 30, 0, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 162, 163,
- 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
- 174, 308, 309, 310, 311, 312, 313, 314, 273, 274,
- 0, 0, 0, 0, 320, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 414, 0, 415, 416,
- 0, 417, 418, 419, 0, 420, 421, 422, 423, 424,
- 425, 426, 427, 428, 429, 0, 0, 371, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 371,
- 0, 0, 0, 0, 0, 0, 0, 0, 371, 288,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 320, 0, 0, 134, 135, 136, 137, 138, 139, 140,
- 141, 142, 143, 144, 145, 146, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 320, 0, 0, 0,
- 320, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 77, 289, 290, 0, 371, 371, 0, 0, 0, 371,
- 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
- 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 509, 510, 576,
- 512, 513, 514, 515, 0, 516, 517, 518, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
- 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
- 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 509, 510, 751,
- 512, 513, 514, 515, 0, 516, 517, 518, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
- 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
- 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 509, 510, 0,
- 512, 513, 514, 515, 0, 516, 517, 518, 752, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
- 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
- 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 509, 510, 0,
- 512, 513, 514, 515, 753, 516, 517, 518, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
- 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
- 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 509, 510, 958,
- 512, 513, 514, 515, 0, 516, 517, 518, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
- 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
- 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 874, 510, 0,
- 512, 513, 514, 515, 0, 516, 517, 518, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
- 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
- 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 510, 0,
- 512, 513, 514, 515, 957, 516, 517, 518, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
- 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
- 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 959, 510, 0,
- 512, 513, 514, 515, 0, 516, 517, 518, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
- 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
- 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 967, 510, 0,
- 512, 513, 514, 515, 0, 516, 517, 518, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
- 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
- 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 923, 692, 924,
- 917, 694, 918, 696, 0, 722, 723, 699, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
- 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
- 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
- 917, 694, 918, 696, 919, 722, 723, 699, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
- 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
- 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
- 917, 694, 918, 696, 922, 722, 723, 699, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
- 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
- 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
- 917, 694, 918, 696, 927, 722, 723, 699, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
- 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
- 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
- 917, 694, 918, 696, 0, 722, 723, 699, 929, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
- 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
- 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
- 693, 694, 695, 696, 0, 697, 698, 699, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
- 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
- 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
- 693, 694, 695, 696, 0, 697, 928, 699, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
- 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
- 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
- 0, 694, 0, 696, 0, 722, 723, 699, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
- 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
- 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
- 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
- 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
- 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
- 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
- 0, 694, 0, 696, 0, 697, 0, 699, 0, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
- 5, 6, 7, 8, 9, 10, 11, 16, 17, 18,
- 19, 20, 21, 22, 352, 161, 12, 13, 14, 15,
- 353, 0, 0, 16, 17, 18, 19, 20, 21, 22,
- 773, 161, 24, 25, 0, 26, 27, 0, 774, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 31, 32, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 0, 0, 0, 30,
- 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, 775, 776, 5, 6,
- 7, 8, 9, 10, 11, 0, 0, 0, 0, 77,
- 0, 0, 0, 0, 12, 13, 14, 15, 0, 0,
- 0, 16, 17, 18, 19, 20, 21, 22, 0, 23,
- 24, 25, 0, 26, 27, 28, 29, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 30, 0, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 0, 76, 5, 6, 7, 8,
- 9, 10, 11, 0, 0, 0, 0, 77, 0, 0,
- 0, 0, 12, 13, 14, 231, 0, 0, 0, 16,
- 17, 18, 19, 20, 21, 22, 0, 161, 24, 25,
- 0, 26, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 30, 0, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 54, 5, 6, 7, 8, 9, 10, 11, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 12, 13, 14,
- 15, 0, 0, 0, 16, 17, 18, 19, 20, 21,
- 22, 0, 161, 24, 0, 77, 26, 27, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 308, 309, 310, 311, 312, 313, 314, 0,
- 30, 0, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 5, 6, 7, 8,
- 9, 10, 11, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 12, 13, 14, 231, 0, 0, 0, 16,
- 17, 18, 19, 20, 21, 22, 0, 161, 24, 0,
- 77, 26, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 134, 135, 136, 137, 138, 139,
- 140, 141, 142, 143, 144, 145, 146, 127, 128, 129,
- 130, 131, 132, 133, 0, 30, 0, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 54, 77, 191, 0, 192, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 127, 128, 129, 130, 131,
- 132, 133, 273, 274, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 77, 30, 308, 309, 310,
- 311, 312, 313, 314, 736, 737, 0, 24, 0, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 0, 127, 128, 129, 130, 131, 132, 133,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 127, 128, 129, 130, 131,
- 132, 133, 0, 0, 0, 0, 77, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
- 0, 0, 0, 0, 0, 0, 0, 24, 251, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 30, 308, 309, 310, 311, 312, 313, 314,
- 273, 274, 0, 0, 77, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 0, 0,
- 738, 0, 0, 0, 0, 0, 77, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
- 0, 904, 0, 0, 905, 0, 0, 0, 0, 0,
- 0, 0, 77, 0, 127, 128, 129, 130, 131, 132,
- 133, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 77, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 0, 191,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 127, 128, 129, 130, 131, 132, 133, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 77, 30, 127, 128, 129, 130, 131, 132,
- 133, 0, 0, 0, 0, 0, 134, 135, 136, 137,
- 138, 139, 140, 141, 142, 143, 144, 145, 146, 0,
- 127, 128, 129, 130, 131, 132, 133, 251, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 30, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 24, 77, 134, 135, 136, 137, 138, 139,
- 140, 141, 142, 143, 144, 145, 146, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 134, 135, 136, 137,
- 138, 139, 140, 141, 142, 143, 144, 145, 146, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 77, 134, 135, 136, 137, 138, 139, 140, 141,
- 142, 143, 144, 145, 146, 0, 0, 0, 0, 0,
- 0, 0, 0, 77, 16, 17, 18, 19, 20, 21,
- 22, 352, 161, 0, 0, 0, 0, 353, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 389, 390, 0, 0, 0, 0, 391,
- 392, 393, 394, 395, 396, 397, 398, 399, 400, 401,
- 402, 403, 404, 405, 406, 407, 408, 409, 410, 411,
- 412, 413, 0, 0, 0, 0, 0, 154, 155, 156,
- 157, 158, 159, 160, 0, 0, 0, 0, 0, 0,
- 0, 289, 290, 12, 13, 14, 231, 0, 0, 0,
- 16, 17, 18, 19, 20, 21, 22, 0, 161, 24,
- 25, 0, 26, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 414, 0, 415, 416, 0, 417,
- 418, 419, 0, 420, 421, 422, 423, 424, 425, 426,
- 427, 428, 429, 0, 0, 0, 30, 0, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 162,
- 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
- 173, 174, 154, 155, 156, 157, 158, 159, 160, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 12, 13,
- 14, 15, 0, 0, 0, 16, 17, 18, 19, 20,
- 21, 22, 0, 161, 24, 0, 0, 26, 27, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 30, 0, 31, 32, 33, 34, 35, 36, 37,
- 38, 39, 40, 41, 162, 163, 164, 165, 166, 167,
- 168, 169, 170, 171, 172, 173, 174, 154, 155, 156,
- 157, 158, 159, 160, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 12, 13, 14, 231, 0, 0, 0,
- 16, 17, 18, 19, 20, 21, 22, 0, 161, 24,
- 0, 0, 26, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 30, 0, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 162,
- 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
- 173, 174, 154, 155, 156, 157, 158, 159, 160, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 12, 13,
- 14, 15, 0, 0, 0, 16, 17, 18, 19, 20,
- 21, 22, 0, 161, 0, 0, 0, 26, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 30, 0, 31, 32, 33, 34, 35, 36, 37,
- 38, 39, 40, 41, 162, 163, 164, 165, 166, 167,
- 168, 169, 170, 171, 172, 173, 174, 154, 155, 156,
- 157, 158, 159, 160, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 12, 13, 14, 231, 0, 0, 0,
- 16, 17, 18, 19, 20, 21, 22, 0, 161, 0,
- 0, 0, 26, 154, 155, 156, 157, 158, 159, 160,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 617,
- 0, 618, 619, 0, 0, 0, 16, 17, 18, 19,
- 20, 21, 22, 0, 161, 0, 30, 0, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 162,
- 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
- 173, 174, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 30, 0, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 162, 163, 164, 165, 166,
- 167, 168, 169, 170, 171, 172, 173, 174
-};
-
-static const yytype_int16 yycheck[] =
-{
- 4, 27, 96, 4, 28, 4, 27, 4, 99, 100,
- 101, 15, 284, 115, 4, 120, 286, 4, 15, 321,
- 4, 602, 120, 387, 181, 29, 121, 687, 15, 109,
- 584, 727, 29, 448, 115, 115, 4, 27, 298, 581,
- 195, 195, 109, 27, 803, 286, 109, 72, 590, 120,
- 121, 802, 29, 4, 629, 668, 305, 599, 241, 72,
- 931, 29, 72, 229, 109, 835, 111, 26, 10, 11,
- 372, 23, 24, 25, 278, 826, 27, 0, 37, 950,
- 900, 72, 120, 181, 88, 905, 149, 0, 126, 115,
- 72, 88, 668, 20, 115, 120, 115, 639, 90, 180,
- 370, 88, 10, 11, 149, 109, 96, 111, 20, 36,
- 12, 38, 96, 126, 111, 775, 120, 321, 128, 26,
- 128, 28, 72, 126, 72, 329, 38, 284, 96, 370,
- 37, 115, 195, 110, 239, 112, 125, 128, 958, 124,
- 129, 126, 121, 724, 225, 149, 128, 115, 229, 153,
- 195, 196, 120, 104, 180, 120, 153, 238, 238, 180,
- 773, 180, 126, 933, 123, 740, 153, 248, 372, 126,
- 122, 126, 176, 150, 120, 330, 330, 936, 128, 176,
- 128, 286, 941, 175, 126, 177, 284, 191, 192, 176,
- 270, 195, 196, 584, 191, 192, 180, 773, 613, 196,
- 321, 72, 179, 270, 191, 192, 965, 270, 303, 785,
- 305, 602, 238, 462, 463, 381, 126, 383, 126, 238,
- 72, 802, 303, 286, 305, 270, 120, 231, 196, 248,
- 195, 806, 126, 126, 231, 239, 932, 130, 72, 72,
- 126, 120, 120, 247, 231, 826, 236, 126, 126, 120,
- 247, 372, 236, 120, 238, 126, 126, 832, 356, 126,
- 247, 836, 266, 72, 126, 370, 270, 330, 236, 266,
- 238, 239, 532, 265, 239, 267, 128, 126, 120, 266,
- 257, 258, 286, 440, 126, 330, 126, 120, 369, 369,
- 130, 120, 873, 126, 128, 128, 956, 126, 121, 72,
- 381, 124, 383, 460, 296, 126, 120, 370, 889, 126,
- 287, 120, 126, 126, 306, 307, 120, 126, 322, 128,
- 297, 286, 126, 120, 688, 322, 330, 510, 126, 126,
- 120, 885, 120, 724, 455, 518, 126, 125, 640, 641,
- 642, 126, 440, 369, 120, 887, 529, 120, 120, 125,
- 369, 375, 72, 126, 126, 128, 812, 361, 814, 126,
- 816, 126, 460, 120, 361, 330, 370, 462, 463, 126,
- 451, 375, 72, 72, 361, 126, 72, 931, 329, 120,
- 121, 462, 463, 124, 126, 369, 3, 4, 5, 6,
- 7, 8, 9, 126, 386, 126, 950, 126, 120, 121,
- 120, 369, 124, 321, 120, 370, 126, 126, 128, 133,
- 134, 802, 3, 4, 5, 6, 7, 8, 9, 225,
- 120, 120, 72, 229, 120, 128, 126, 126, 128, 128,
- 126, 121, 128, 121, 907, 826, 640, 641, 642, 912,
- 804, 3, 4, 5, 6, 7, 8, 9, 120, 121,
- 129, 455, 124, 12, 372, 123, 457, 120, 455, 120,
- 121, 26, 27, 124, 121, 455, 26, 27, 740, 446,
- 943, 944, 124, 946, 3, 4, 5, 6, 7, 8,
- 9, 72, 873, 13, 14, 15, 126, 960, 126, 126,
- 881, 882, 883, 884, 885, 886, 126, 303, 889, 305,
- 123, 803, 130, 124, 121, 121, 120, 588, 23, 24,
- 25, 130, 125, 125, 125, 125, 125, 125, 125, 640,
- 641, 642, 125, 125, 125, 795, 125, 125, 125, 624,
- 125, 127, 125, 127, 120, 120, 124, 19, 20, 21,
- 931, 622, 131, 638, 26, 27, 28, 29, 30, 31,
- 32, 127, 34, 130, 531, 127, 127, 130, 122, 950,
- 36, 127, 120, 120, 120, 30, 127, 18, 131, 120,
- 125, 125, 125, 125, 122, 381, 125, 383, 582, 123,
- 123, 127, 120, 20, 131, 582, 125, 120, 120, 125,
- 127, 861, 543, 124, 122, 582, 131, 71, 125, 803,
- 125, 127, 579, 622, 127, 127, 127, 127, 127, 127,
- 127, 127, 125, 617, 618, 619, 127, 127, 127, 127,
- 617, 618, 619, 127, 125, 127, 120, 123, 131, 127,
- 617, 618, 619, 125, 936, 13, 13, 792, 940, 941,
- 120, 127, 127, 127, 621, 451, 127, 120, 127, 4,
- 365, 668, 672, 564, 676, 857, 462, 463, 459, 668,
- 638, 460, 668, 965, 668, 731, 670, 668, 672, 668,
- 674, 668, 4, 670, 785, 672, 773, 674, 668, 808,
- 878, 668, 803, 670, 668, 672, 916, 674, 668, 356,
- 795, 785, 794, 355, 645, 932, 787, 795, 649, 650,
- 668, 962, 653, 654, 655, 656, 657, 658, 659, 660,
- 661, 662, 741, 794, 794, 870, 721, 668, 606, 668,
- 295, 904, 640, 641, 642, 295, 815, 794, -1, 792,
- 883, 682, 936, -1, -1, 718, 940, 941, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 792, -1, -1,
- -1, -1, 744, 834, -1, -1, 861, -1, -1, -1,
- -1, 965, -1, 857, -1, -1, -1, 858, 794, 773,
- 774, 795, 773, 794, -1, 794, -1, 774, 584, 860,
- 860, 785, 588, 773, 865, 865, 785, -1, 792, 773,
- 794, 795, -1, 860, -1, 785, 602, 774, 865, -1,
- -1, 785, -1, -1, 808, 756, 774, 870, 759, 890,
- 794, 808, -1, -1, -1, 936, 793, 785, -1, 940,
- 941, 808, 773, -1, -1, 870, 794, 792, -1, 910,
- 795, -1, -1, -1, 785, -1, 828, 861, -1, 865,
- -1, 860, -1, -1, 965, -1, 865, -1, -1, -1,
- -1, 855, -1, -1, -1, -1, 860, 861, 855, -1,
- -1, 865, -1, 109, -1, -1, 870, 857, 855, -1,
- -1, -1, -1, 857, 120, -1, 860, -1, -1, -1,
- -1, 865, 859, -1, -1, 803, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 861, 865, -1, -1,
- -1, -1, -1, -1, 908, 870, -1, -1, 912, -1,
- -1, 908, -1, -1, -1, 912, -1, -1, 724, -1,
- -1, 908, -1, -1, -1, 912, 910, -1, -1, -1,
- -1, -1, -1, -1, -1, 181, -1, -1, -1, -1,
- 944, -1, -1, -1, -1, -1, -1, 944, -1, -1,
- -1, 197, -1, -1, -1, 201, 202, 944, 204, 205,
- 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
- 216, 217, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 239, -1, -1, 802, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 936, -1,
- 826, -1, 940, 941, 270, -1, -1, -1, 834, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 284, -1,
- 286, -1, -1, -1, -1, -1, -1, 965, -1, -1,
- -1, -1, -1, -1, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 873, -1, -1,
- -1, -1, -1, -1, -1, 881, 882, 883, 884, 885,
- 886, -1, -1, 889, 890, -1, 332, 333, 334, -1,
- -1, 337, -1, -1, -1, 126, -1, -1, -1, -1,
- -1, 132, 133, 134, -1, -1, -1, -1, -1, -1,
- 356, -1, -1, -1, 3, 4, 5, 6, 7, 8,
- 9, 367, -1, -1, 370, 931, -1, -1, -1, -1,
- -1, -1, -1, -1, 23, 24, 25, -1, -1, -1,
- -1, 30, -1, -1, 950, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 72, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 440, -1, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, -1,
- -1, -1, -1, -1, 460, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
- 18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
- -1, 29, 30, 132, 32, -1, 34, 35, 36, 37,
- 38, 39, 40, -1, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
- 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
- 556, -1, 26, 27, 28, 29, 30, 31, 32, 33,
- 34, -1, -1, -1, -1, 39, -1, -1, -1, -1,
- -1, -1, 120, 121, 122, 123, 124, 125, 126, -1,
- 128, 129, 130, -1, 132, 133, 134, 135, 136, 137,
- 138, 139, 140, 141, 142, -1, -1, -1, -1, -1,
- 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
- 84, -1, -1, -1, -1, -1, -1, 623, -1, -1,
- -1, -1, -1, 629, -1, -1, 3, 4, 5, 6,
- 7, 8, 9, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 19, 20, 21, 22, 120, -1, -1, 26,
- 27, 28, 29, 30, 31, 32, -1, 34, -1, 133,
- 134, 38, 668, -1, -1, 42, 43, -1, -1, -1,
- 676, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, -1, 72, -1, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- -1, -1, -1, -1, 740, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 123, -1, 125, 126,
- -1, 128, 129, 130, -1, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, -1, -1, 773, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 785,
- -1, -1, -1, -1, -1, -1, -1, -1, 794, 795,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 806, -1, -1, 85, 86, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 96, 97, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 832, -1, -1, -1,
- 836, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 132, 133, 134, -1, 860, 861, -1, -1, -1, 865,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 120, 121, 122,
- 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 120, 121, 122,
- 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 120, 121, -1,
- 123, 124, 125, 126, -1, 128, 129, 130, 131, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 120, 121, -1,
- 123, 124, 125, 126, 127, 128, 129, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 120, 121, 122,
- 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 120, 121, -1,
- 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
- 123, 124, 125, 126, 127, 128, 129, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 120, 121, -1,
- 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 120, 121, -1,
- 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
- -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 120, 121, 122,
- 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
- -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
- 123, 124, 125, 126, 127, 128, 129, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
- -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
- 123, 124, 125, 126, 127, 128, 129, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
- -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
- 123, 124, 125, 126, 127, 128, 129, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
- -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
- 123, 124, 125, 126, -1, 128, 129, 130, 131, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
- -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
- 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
- -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
- 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
- -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
- -1, 124, -1, 126, -1, 128, 129, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
- -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
- -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
- -1, 124, -1, 126, -1, 128, -1, 130, -1, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 3, 4, 5, 6, 7, 8, 9, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 19, 20, 21, 22,
- 39, -1, -1, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, -1, 38, 39, -1, 41, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, -1, -1, -1, 72,
- -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- 113, 114, 115, 116, 117, 118, 119, 120, 3, 4,
- 5, 6, 7, 8, 9, -1, -1, -1, -1, 132,
- -1, -1, -1, -1, 19, 20, 21, 22, -1, -1,
- -1, 26, 27, 28, 29, 30, 31, 32, -1, 34,
- 35, 36, -1, 38, 39, 40, 41, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 72, -1, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
- 115, 116, 117, 118, -1, 120, 3, 4, 5, 6,
- 7, 8, 9, -1, -1, -1, -1, 132, -1, -1,
- -1, -1, 19, 20, 21, 22, -1, -1, -1, 26,
- 27, 28, 29, 30, 31, 32, -1, 34, 35, 36,
- -1, 38, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 72, -1, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 3, 4, 5, 6, 7, 8, 9, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 19, 20, 21,
- 22, -1, -1, -1, 26, 27, 28, 29, 30, 31,
- 32, -1, 34, 35, -1, 132, 38, 39, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 3, 4, 5, 6, 7, 8, 9, -1,
- 72, -1, 74, 75, 76, 77, 78, 79, 80, 81,
- 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
- 92, 93, 94, 95, 96, 97, 3, 4, 5, 6,
- 7, 8, 9, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 19, 20, 21, 22, -1, -1, -1, 26,
- 27, 28, 29, 30, 31, 32, -1, 34, 35, -1,
- 132, 38, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 3, 4, 5,
- 6, 7, 8, 9, -1, 72, -1, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 132, 38, -1, 40, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 132, 72, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, -1, 35, -1, 85,
- 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, -1, 3, 4, 5, 6, 7, 8, 9,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 3, 4, 5, 6, 7,
- 8, 9, -1, -1, -1, -1, 132, 85, 86, 87,
- 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
- -1, -1, -1, -1, -1, -1, -1, 35, 36, 85,
- 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, 72, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, -1, -1, 132, 85, 86, 87, 88, 89,
- 90, 91, 92, 93, 94, 95, 96, 97, -1, -1,
- 126, -1, -1, -1, -1, -1, 132, 85, 86, 87,
- 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
- -1, 121, -1, -1, 124, -1, -1, -1, -1, -1,
- -1, -1, 132, -1, 3, 4, 5, 6, 7, 8,
- 9, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 132, 85, 86, 87, 88, 89,
- 90, 91, 92, 93, 94, 95, 96, 97, -1, 38,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 3, 4, 5, 6, 7, 8, 9, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 132, 72, 3, 4, 5, 6, 7, 8,
- 9, -1, -1, -1, -1, -1, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, -1,
- 3, 4, 5, 6, 7, 8, 9, 36, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 72, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 35, 132, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 132, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
- -1, -1, -1, 132, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, -1, -1, -1, -1, 39, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 132,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 74, 75, 76, 77, 78, 79, 80, 81,
- 82, 83, 84, 42, 43, -1, -1, -1, -1, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, -1, -1, -1, -1, -1, 3, 4, 5,
- 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
- -1, 133, 134, 19, 20, 21, 22, -1, -1, -1,
- 26, 27, 28, 29, 30, 31, 32, -1, 34, 35,
- 36, -1, 38, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 123, -1, 125, 126, -1, 128,
- 129, 130, -1, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, -1, -1, -1, 72, -1, 74, 75,
- 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
- 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, 3, 4, 5, 6, 7, 8, 9, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 19, 20,
- 21, 22, -1, -1, -1, 26, 27, 28, 29, 30,
- 31, 32, -1, 34, 35, -1, -1, 38, 39, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 72, -1, 74, 75, 76, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 3, 4, 5,
- 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 19, 20, 21, 22, -1, -1, -1,
- 26, 27, 28, 29, 30, 31, 32, -1, 34, 35,
- -1, -1, 38, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 72, -1, 74, 75,
- 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
- 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, 3, 4, 5, 6, 7, 8, 9, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 19, 20,
- 21, 22, -1, -1, -1, 26, 27, 28, 29, 30,
- 31, 32, -1, 34, -1, -1, -1, 38, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 72, -1, 74, 75, 76, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 3, 4, 5,
- 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 19, 20, 21, 22, -1, -1, -1,
- 26, 27, 28, 29, 30, 31, 32, -1, 34, -1,
- -1, -1, 38, 3, 4, 5, 6, 7, 8, 9,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 19,
- -1, 21, 22, -1, -1, -1, 26, 27, 28, 29,
- 30, 31, 32, -1, 34, -1, 72, -1, 74, 75,
- 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
- 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 72, -1, 74, 75, 76, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
- 90, 91, 92, 93, 94, 95, 96, 97
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
-static const yytype_uint16 yystos[] =
-{
- 0, 144, 145, 0, 146, 3, 4, 5, 6, 7,
- 8, 9, 19, 20, 21, 22, 26, 27, 28, 29,
- 30, 31, 32, 34, 35, 36, 38, 39, 40, 41,
- 72, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- 113, 114, 115, 116, 117, 118, 120, 132, 147, 148,
- 149, 150, 152, 153, 154, 155, 156, 158, 161, 175,
- 176, 178, 186, 187, 196, 198, 199, 216, 217, 218,
- 219, 222, 223, 226, 232, 259, 289, 290, 291, 292,
- 294, 295, 296, 298, 299, 302, 303, 304, 305, 306,
- 308, 309, 312, 319, 320, 321, 327, 3, 4, 5,
- 6, 7, 8, 9, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 289, 291, 292,
- 296, 12, 128, 313, 3, 4, 5, 6, 7, 8,
- 9, 34, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 156, 161, 176, 291, 296,
- 302, 308, 3, 4, 5, 6, 7, 8, 9, 121,
- 299, 38, 40, 197, 289, 292, 295, 126, 126, 126,
- 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
- 126, 126, 126, 126, 126, 126, 126, 126, 3, 4,
- 5, 6, 7, 8, 9, 300, 157, 160, 289, 300,
- 121, 22, 148, 154, 155, 183, 199, 216, 302, 308,
- 120, 121, 237, 237, 237, 237, 126, 161, 302, 308,
- 120, 36, 223, 240, 241, 244, 290, 294, 296, 298,
- 295, 290, 291, 295, 128, 156, 161, 176, 187, 223,
- 292, 303, 312, 10, 11, 227, 229, 231, 232, 233,
- 238, 240, 260, 268, 271, 279, 292, 296, 298, 133,
- 134, 265, 322, 323, 324, 326, 310, 296, 121, 129,
- 200, 289, 12, 300, 289, 300, 156, 176, 3, 4,
- 5, 6, 7, 8, 9, 191, 192, 195, 268, 279,
- 298, 375, 123, 151, 289, 289, 120, 226, 231, 232,
- 292, 298, 329, 332, 333, 298, 298, 337, 298, 298,
- 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
- 298, 298, 33, 39, 261, 264, 265, 301, 303, 321,
- 121, 124, 168, 169, 120, 159, 261, 177, 289, 302,
- 292, 298, 375, 224, 289, 293, 126, 242, 295, 295,
- 297, 300, 289, 300, 223, 241, 311, 228, 126, 42,
- 43, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 123, 125, 126, 128, 129, 130,
- 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
- 351, 352, 234, 126, 262, 123, 256, 257, 268, 277,
- 322, 281, 282, 283, 227, 233, 296, 124, 325, 323,
- 324, 300, 145, 201, 203, 204, 206, 208, 188, 190,
- 265, 188, 300, 300, 189, 126, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 29, 30, 32, 34, 35, 36, 37, 38, 39, 40,
- 42, 43, 44, 45, 46, 47, 71, 72, 73, 120,
- 121, 122, 123, 124, 125, 126, 128, 129, 130, 142,
- 319, 352, 353, 354, 377, 378, 379, 380, 381, 382,
- 291, 296, 121, 120, 226, 231, 125, 298, 298, 298,
- 125, 125, 298, 125, 125, 125, 125, 125, 125, 125,
- 125, 125, 125, 125, 127, 127, 125, 120, 262, 260,
- 162, 23, 24, 25, 30, 170, 171, 174, 289, 168,
- 120, 179, 180, 181, 298, 298, 122, 249, 250, 296,
- 299, 245, 124, 246, 361, 261, 120, 261, 300, 234,
- 230, 130, 130, 127, 131, 26, 37, 123, 235, 239,
- 120, 125, 258, 127, 268, 130, 284, 285, 13, 14,
- 15, 280, 306, 307, 122, 125, 129, 19, 21, 22,
- 291, 296, 302, 314, 315, 318, 319, 20, 38, 211,
- 199, 120, 189, 195, 120, 188, 188, 120, 125, 193,
- 375, 375, 375, 120, 145, 328, 125, 127, 127, 334,
- 336, 125, 308, 340, 342, 344, 346, 341, 343, 345,
- 347, 348, 349, 298, 23, 24, 25, 122, 163, 164,
- 173, 174, 125, 30, 172, 122, 125, 123, 123, 127,
- 251, 253, 254, 295, 249, 247, 248, 289, 243, 10,
- 11, 72, 121, 123, 124, 125, 126, 128, 129, 130,
- 142, 320, 321, 352, 353, 354, 356, 363, 364, 365,
- 367, 369, 373, 120, 120, 249, 131, 131, 236, 18,
- 249, 263, 128, 129, 355, 356, 358, 269, 286, 285,
- 306, 202, 289, 289, 289, 312, 10, 11, 126, 266,
- 270, 278, 279, 265, 316, 266, 20, 120, 120, 190,
- 249, 122, 131, 127, 122, 308, 330, 308, 308, 338,
- 127, 308, 308, 308, 308, 308, 308, 308, 308, 308,
- 308, 125, 350, 33, 41, 119, 120, 153, 155, 165,
- 166, 167, 175, 186, 196, 199, 220, 221, 222, 241,
- 259, 289, 292, 296, 302, 308, 327, 124, 289, 171,
- 289, 181, 182, 376, 225, 125, 308, 127, 125, 381,
- 234, 371, 372, 374, 370, 366, 368, 127, 369, 127,
- 264, 358, 126, 272, 282, 287, 288, 203, 317, 205,
- 266, 276, 322, 281, 300, 207, 209, 127, 127, 308,
- 335, 127, 308, 127, 127, 127, 127, 127, 127, 127,
- 127, 125, 125, 127, 153, 161, 184, 199, 221, 296,
- 302, 308, 381, 155, 220, 302, 237, 120, 231, 241,
- 292, 233, 296, 355, 120, 378, 234, 71, 252, 266,
- 248, 357, 357, 362, 357, 361, 357, 273, 131, 355,
- 300, 123, 212, 213, 127, 266, 212, 266, 194, 331,
- 125, 339, 13, 13, 121, 124, 185, 289, 161, 184,
- 302, 237, 161, 120, 231, 253, 255, 123, 125, 127,
- 358, 359, 127, 120, 122, 359, 360, 127, 129, 131,
- 249, 214, 267, 210, 275, 127, 376, 127, 127, 127,
- 375, 376, 185, 289, 161, 185, 289, 120, 256, 127,
- 215, 363, 272, 212, 26, 28, 37, 127, 122, 120,
- 289, 185, 274, 363, 381, 376, 275, 120
-};
-
-#define yyerrok (yyerrstatus = 0)
-#define yyclearin (yychar = YYEMPTY)
-#define YYEMPTY (-2)
-#define YYEOF 0
-
-#define YYACCEPT goto yyacceptlab
-#define YYABORT goto yyabortlab
-#define YYERROR goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror. This remains here temporarily
- to ease the transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. */
-
-#define YYFAIL goto yyerrlab
-
-#define YYRECOVERING() (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value) \
-do \
- if (yychar == YYEMPTY && yylen == 1) \
- { \
- yychar = (Token); \
- yylval = (Value); \
- yytoken = YYTRANSLATE (yychar); \
- YYPOPSTACK (1); \
- goto yybackup; \
- } \
- else \
- { \
- yyerror (YY_("syntax error: cannot back up")); \
- YYERROR; \
- } \
-while (YYID (0))
-
-
-#define YYTERROR 1
-#define YYERRCODE 256
-
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
- If N is 0, then set CURRENT to the empty location which ends
- the previous symbol: RHS[0] (always defined). */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N) \
- do \
- if (YYID (N)) \
- { \
- (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
- (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
- (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
- (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
- } \
- else \
- { \
- (Current).first_line = (Current).last_line = \
- YYRHSLOC (Rhs, 0).last_line; \
- (Current).first_column = (Current).last_column = \
- YYRHSLOC (Rhs, 0).last_column; \
- } \
- while (YYID (0))
-#endif
-
-
-/* YY_LOCATION_PRINT -- Print the location on the stream.
- This macro was not mandated originally: define only if we know
- we won't break user code: when these are the locations we know. */
-
-#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-# define YY_LOCATION_PRINT(File, Loc) \
- fprintf (File, "%d.%d-%d.%d", \
- (Loc).first_line, (Loc).first_column, \
- (Loc).last_line, (Loc).last_column)
-# else
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments. */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
-
-/* Enable debugging if requested. */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-# define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args) \
-do { \
- if (yydebug) \
- YYFPRINTF Args; \
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
-do { \
- if (yydebug) \
- { \
- YYFPRINTF (stderr, "%s ", Title); \
- yy_symbol_print (stderr, \
- Type, Value); \
- YYFPRINTF (stderr, "\n"); \
- } \
-} while (YYID (0))
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
-#endif
-{
- if (!yyvaluep)
- return;
-# ifdef YYPRINT
- if (yytype < YYNTOKENS)
- YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
- YYUSE (yyoutput);
-# endif
- switch (yytype)
- {
- default:
- break;
- }
-}
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
-#endif
-{
- if (yytype < YYNTOKENS)
- YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
- else
- YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
- yy_symbol_value_print (yyoutput, yytype, yyvaluep);
- YYFPRINTF (yyoutput, ")");
-}
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included). |
-`------------------------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
- yytype_int16 *yybottom;
- yytype_int16 *yytop;
-#endif
-{
- YYFPRINTF (stderr, "Stack now");
- for (; yybottom <= yytop; yybottom++)
- {
- int yybot = *yybottom;
- YYFPRINTF (stderr, " %d", yybot);
- }
- YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top) \
-do { \
- if (yydebug) \
- yy_stack_print ((Bottom), (Top)); \
-} while (YYID (0))
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced. |
-`------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule)
- YYSTYPE *yyvsp;
- int yyrule;
-#endif
-{
- int yynrhs = yyr2[yyrule];
- int yyi;
- unsigned long int yylno = yyrline[yyrule];
- YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
- yyrule - 1, yylno);
- /* The symbols being reduced. */
- for (yyi = 0; yyi < yynrhs; yyi++)
- {
- YYFPRINTF (stderr, " $%d = ", yyi + 1);
- yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
- &(yyvsp[(yyi + 1) - (yynrhs)])
- );
- YYFPRINTF (stderr, "\n");
- }
-}
-
-# define YY_REDUCE_PRINT(Rule) \
-do { \
- if (yydebug) \
- yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
-
-/* Nonzero means print parse trace. It is left uninitialized so that
- multiple parsers can coexist. */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks. */
-#ifndef YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
- if the built-in stack extension method is used).
-
- Do not make this value too large; the results are undefined if
- YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
- evaluated with infinite-precision integer arithmetic. */
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-\f
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-# if defined __GLIBC__ && defined _STRING_H
-# define yystrlen strlen
-# else
-/* Return the length of YYSTR. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static YYSIZE_T
-yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
- const char *yystr;
-#endif
-{
- YYSIZE_T yylen;
- for (yylen = 0; yystr[yylen]; yylen++)
- continue;
- return yylen;
-}
-# endif
-# endif
-
-# ifndef yystpcpy
-# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-# define yystpcpy stpcpy
-# else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
- YYDEST. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
- char *yydest;
- const char *yysrc;
-#endif
-{
- char *yyd = yydest;
- const char *yys = yysrc;
-
- while ((*yyd++ = *yys++) != '\0')
- continue;
-
- return yyd - 1;
-}
-# endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
- quotes and backslashes, so that it's suitable for yyerror. The
- heuristic is that double-quoting is unnecessary unless the string
- contains an apostrophe, a comma, or backslash (other than
- backslash-backslash). YYSTR is taken from yytname. If YYRES is
- null, do not copy; instead, return the length of what the result
- would have been. */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
- if (*yystr == '"')
- {
- YYSIZE_T yyn = 0;
- char const *yyp = yystr;
-
- for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- /* Fall through. */
- default:
- if (yyres)
- yyres[yyn] = *yyp;
- yyn++;
- break;
-
- case '"':
- if (yyres)
- yyres[yyn] = '\0';
- return yyn;
- }
- do_not_strip_quotes: ;
- }
-
- if (! yyres)
- return yystrlen (yystr);
-
- return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into YYRESULT an error message about the unexpected token
- YYCHAR while in state YYSTATE. Return the number of bytes copied,
- including the terminating null byte. If YYRESULT is null, do not
- copy anything; just return the number of bytes that would be
- copied. As a special case, return 0 if an ordinary "syntax error"
- message will do. Return YYSIZE_MAXIMUM if overflow occurs during
- size calculation. */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
-{
- int yyn = yypact[yystate];
-
- if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
- return 0;
- else
- {
- int yytype = YYTRANSLATE (yychar);
- YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
- YYSIZE_T yysize = yysize0;
- YYSIZE_T yysize1;
- int yysize_overflow = 0;
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
- int yyx;
-
-# if 0
- /* This is so xgettext sees the translatable formats that are
- constructed on the fly. */
- YY_("syntax error, unexpected %s");
- YY_("syntax error, unexpected %s, expecting %s");
- YY_("syntax error, unexpected %s, expecting %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
- char *yyfmt;
- char const *yyf;
- static char const yyunexpected[] = "syntax error, unexpected %s";
- static char const yyexpecting[] = ", expecting %s";
- static char const yyor[] = " or %s";
- char yyformat[sizeof yyunexpected
- + sizeof yyexpecting - 1
- + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
- * (sizeof yyor - 1))];
- char const *yyprefix = yyexpecting;
-
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
-
- /* Stay within bounds of both yycheck and yytname. */
- int yychecklim = YYLAST - yyn + 1;
- int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
- int yycount = 1;
-
- yyarg[0] = yytname[yytype];
- yyfmt = yystpcpy (yyformat, yyunexpected);
-
- for (yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- yysize = yysize0;
- yyformat[sizeof yyunexpected - 1] = '\0';
- break;
- }
- yyarg[yycount++] = yytname[yyx];
- yysize1 = yysize + yytnamerr (0, yytname[yyx]);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
- yyfmt = yystpcpy (yyfmt, yyprefix);
- yyprefix = yyor;
- }
-
- yyf = YY_(yyformat);
- yysize1 = yysize + yystrlen (yyf);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
-
- if (yysize_overflow)
- return YYSIZE_MAXIMUM;
-
- if (yyresult)
- {
- /* Avoid sprintf, as that infringes on the user's name space.
- Don't have undefined behavior even if the translation
- produced a string with the wrong number of "%s"s. */
- char *yyp = yyresult;
- int yyi = 0;
- while ((*yyp = *yyf) != '\0')
- {
- if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
- {
- yyp += yytnamerr (yyp, yyarg[yyi++]);
- yyf += 2;
- }
- else
- {
- yyp++;
- yyf++;
- }
- }
- }
- return yysize;
- }
-}
-#endif /* YYERROR_VERBOSE */
-\f
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol. |
-`-----------------------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
- const char *yymsg;
- int yytype;
- YYSTYPE *yyvaluep;
-#endif
-{
- YYUSE (yyvaluep);
-
- if (!yymsg)
- yymsg = "Deleting";
- YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
- switch (yytype)
- {
-
- default:
- break;
- }
-}
-
-/* Prevent warnings from -Wmissing-prototypes. */
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
-
-/* The lookahead symbol. */
-int yychar;
-
-/* The semantic value of the lookahead symbol. */
-YYSTYPE yylval;
-
-/* Number of syntax errors so far. */
-int yynerrs;
-
-
-
-/*-------------------------.
-| yyparse or yypush_parse. |
-`-------------------------*/
-
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
- void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
-{
-
-
- int yystate;
- /* Number of tokens to shift before error messages enabled. */
- int yyerrstatus;
-
- /* The stacks and their tools:
- `yyss': related to states.
- `yyvs': related to semantic values.
-
- Refer to the stacks thru separate pointers, to allow yyoverflow
- to reallocate them elsewhere. */
-
- /* The state stack. */
- yytype_int16 yyssa[YYINITDEPTH];
- yytype_int16 *yyss;
- yytype_int16 *yyssp;
-
- /* The semantic value stack. */
- YYSTYPE yyvsa[YYINITDEPTH];
- YYSTYPE *yyvs;
- YYSTYPE *yyvsp;
-
- YYSIZE_T yystacksize;
-
- int yyn;
- int yyresult;
- /* Lookahead token as an internal (translated) token number. */
- int yytoken;
- /* The variables used to return semantic value and location from the
- action routines. */
- YYSTYPE yyval;
-
-#if YYERROR_VERBOSE
- /* Buffer for error messages, and its allocated size. */
- char yymsgbuf[128];
- char *yymsg = yymsgbuf;
- YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
-#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
-
- /* The number of symbols on the RHS of the reduced rule.
- Keep to zero when no symbol should be popped. */
- int yylen = 0;
-
- yytoken = 0;
- yyss = yyssa;
- yyvs = yyvsa;
- yystacksize = YYINITDEPTH;
-
- YYDPRINTF ((stderr, "Starting parse\n"));
-
- yystate = 0;
- yyerrstatus = 0;
- yynerrs = 0;
- yychar = YYEMPTY; /* Cause a token to be read. */
-
- /* Initialize stack pointers.
- Waste one element of value and location stack
- so that they stay on the same level as the state stack.
- The wasted elements are never initialized. */
- yyssp = yyss;
- yyvsp = yyvs;
-
- goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate. |
-`------------------------------------------------------------*/
- yynewstate:
- /* In all cases, when you get here, the value and location stacks
- have just been pushed. So pushing a state here evens the stacks. */
- yyssp++;
-
- yysetstate:
- *yyssp = yystate;
-
- if (yyss + yystacksize - 1 <= yyssp)
- {
- /* Get the current used size of the three stacks, in elements. */
- YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
- {
- /* Give user a chance to reallocate the stack. Use copies of
- these so that the &'s don't force the real ones into
- memory. */
- YYSTYPE *yyvs1 = yyvs;
- yytype_int16 *yyss1 = yyss;
-
- /* Each stack pointer address is followed by the size of the
- data in use in that stack, in bytes. This used to be a
- conditional around just the two extra args, but that might
- be undefined if yyoverflow is a macro. */
- yyoverflow (YY_("memory exhausted"),
- &yyss1, yysize * sizeof (*yyssp),
- &yyvs1, yysize * sizeof (*yyvsp),
- &yystacksize);
-
- yyss = yyss1;
- yyvs = yyvs1;
- }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
- goto yyexhaustedlab;
-# else
- /* Extend the stack our own way. */
- if (YYMAXDEPTH <= yystacksize)
- goto yyexhaustedlab;
- yystacksize *= 2;
- if (YYMAXDEPTH < yystacksize)
- yystacksize = YYMAXDEPTH;
-
- {
- yytype_int16 *yyss1 = yyss;
- union yyalloc *yyptr =
- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
- if (! yyptr)
- goto yyexhaustedlab;
- YYSTACK_RELOCATE (yyss_alloc, yyss);
- YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-# undef YYSTACK_RELOCATE
- if (yyss1 != yyssa)
- YYSTACK_FREE (yyss1);
- }
-# endif
-#endif /* no yyoverflow */
-
- yyssp = yyss + yysize - 1;
- yyvsp = yyvs + yysize - 1;
-
- YYDPRINTF ((stderr, "Stack size increased to %lu\n",
- (unsigned long int) yystacksize));
-
- if (yyss + yystacksize - 1 <= yyssp)
- YYABORT;
- }
-
- YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
- if (yystate == YYFINAL)
- YYACCEPT;
-
- goto yybackup;
-
-/*-----------.
-| yybackup. |
-`-----------*/
-yybackup:
-
- /* Do appropriate processing given the current state. Read a
- lookahead token if we need one and don't already have one. */
-
- /* First try to decide what to do without reference to lookahead token. */
- yyn = yypact[yystate];
- if (yyn == YYPACT_NINF)
- goto yydefault;
-
- /* Not known => get a lookahead token if don't already have one. */
-
- /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
- if (yychar == YYEMPTY)
- {
- YYDPRINTF ((stderr, "Reading a token: "));
- yychar = YYLEX;
- }
-
- if (yychar <= YYEOF)
- {
- yychar = yytoken = YYEOF;
- YYDPRINTF ((stderr, "Now at end of input.\n"));
- }
- else
- {
- yytoken = YYTRANSLATE (yychar);
- YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
- }
-
- /* If the proper action on seeing token YYTOKEN is to reduce or to
- detect an error, take that action. */
- yyn += yytoken;
- if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
- goto yydefault;
- yyn = yytable[yyn];
- if (yyn <= 0)
- {
- if (yyn == 0 || yyn == YYTABLE_NINF)
- goto yyerrlab;
- yyn = -yyn;
- goto yyreduce;
- }
-
- /* Count tokens shifted since error; after three, turn off error
- status. */
- if (yyerrstatus)
- yyerrstatus--;
-
- /* Shift the lookahead token. */
- YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
- /* Discard the shifted token. */
- yychar = YYEMPTY;
-
- yystate = yyn;
- *++yyvsp = yylval;
-
- goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state. |
-`-----------------------------------------------------------*/
-yydefault:
- yyn = yydefact[yystate];
- if (yyn == 0)
- goto yyerrlab;
- goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction. |
-`-----------------------------*/
-yyreduce:
- /* yyn is the number of a rule to reduce with. */
- yylen = yyr2[yyn];
-
- /* If YYLEN is nonzero, implement the default value of the action:
- `$$ = $1'.
-
- Otherwise, the following line sets YYVAL to garbage.
- This behavior is undocumented and Bison
- users should not rely upon it. Assigning to YYVAL
- unconditionally makes the parser a bit smaller, and it avoids a
- GCC warning that YYVAL may be used uninitialized. */
- yyval = yyvsp[1-yylen];
-
-
- YY_REDUCE_PRINT (yyn);
- switch (yyn)
- {
- case 4:
-
-/* Line 1455 of yacc.c */
-#line 1464 "vtkParse.y"
- {
- startSig();
- clearType();
- clearTypeId();
- clearTemplate();
- closeComment();
- }
- break;
-
- case 27:
-
-/* Line 1455 of yacc.c */
-#line 1509 "vtkParse.y"
- { pushNamespace((yyvsp[(2) - (2)].str)); }
- break;
-
- case 28:
-
-/* Line 1455 of yacc.c */
-#line 1510 "vtkParse.y"
- { popNamespace(); }
- break;
-
- case 36:
-
-/* Line 1455 of yacc.c */
-#line 1532 "vtkParse.y"
- { pushType(); }
- break;
-
- case 37:
-
-/* Line 1455 of yacc.c */
-#line 1533 "vtkParse.y"
- {
- const char *name = (currentClass ? currentClass->Name : NULL);
- popType();
- clearTypeId();
- if (name)
- {
- setTypeId(name);
- setTypeBase(guess_id_type(name));
- }
- end_class();
- }
- break;
-
- case 38:
-
-/* Line 1455 of yacc.c */
-#line 1546 "vtkParse.y"
- { start_class((yyvsp[(2) - (2)].str), (yyvsp[(1) - (2)].integer)); }
- break;
-
- case 40:
-
-/* Line 1455 of yacc.c */
-#line 1548 "vtkParse.y"
- { start_class(NULL, (yyvsp[(1) - (1)].integer)); }
- break;
-
- case 42:
-
-/* Line 1455 of yacc.c */
-#line 1552 "vtkParse.y"
- { (yyval.integer) = 0; }
- break;
-
- case 43:
-
-/* Line 1455 of yacc.c */
-#line 1553 "vtkParse.y"
- { (yyval.integer) = 1; }
- break;
-
- case 44:
-
-/* Line 1455 of yacc.c */
-#line 1554 "vtkParse.y"
- { (yyval.integer) = 2; }
- break;
-
- case 46:
-
-/* Line 1455 of yacc.c */
-#line 1558 "vtkParse.y"
- {
- startSig();
- clearType();
- clearTypeId();
- clearTemplate();
- closeComment();
- }
- break;
-
- case 49:
-
-/* Line 1455 of yacc.c */
-#line 1570 "vtkParse.y"
- { access_level = VTK_ACCESS_PUBLIC; }
- break;
-
- case 50:
-
-/* Line 1455 of yacc.c */
-#line 1571 "vtkParse.y"
- { access_level = VTK_ACCESS_PRIVATE; }
- break;
-
- case 51:
-
-/* Line 1455 of yacc.c */
-#line 1572 "vtkParse.y"
- { access_level = VTK_ACCESS_PROTECTED; }
- break;
-
- case 70:
-
-/* Line 1455 of yacc.c */
-#line 1597 "vtkParse.y"
- { output_friend_function(); }
- break;
-
- case 76:
-
-/* Line 1455 of yacc.c */
-#line 1611 "vtkParse.y"
- { add_base_class(currentClass, (yyvsp[(1) - (1)].str), access_level, 0); }
- break;
-
- case 77:
-
-/* Line 1455 of yacc.c */
-#line 1613 "vtkParse.y"
- { add_base_class(currentClass, (yyvsp[(3) - (3)].str), (yyvsp[(2) - (3)].integer), 1); }
- break;
-
- case 78:
-
-/* Line 1455 of yacc.c */
-#line 1615 "vtkParse.y"
- { add_base_class(currentClass, (yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].integer), (yyvsp[(2) - (3)].integer)); }
- break;
-
- case 79:
-
-/* Line 1455 of yacc.c */
-#line 1618 "vtkParse.y"
- { (yyval.integer) = 0; }
- break;
-
- case 80:
-
-/* Line 1455 of yacc.c */
-#line 1619 "vtkParse.y"
- { (yyval.integer) = 1; }
- break;
-
- case 81:
-
-/* Line 1455 of yacc.c */
-#line 1622 "vtkParse.y"
- { (yyval.integer) = access_level; }
- break;
-
- case 83:
-
-/* Line 1455 of yacc.c */
-#line 1626 "vtkParse.y"
- { (yyval.integer) = VTK_ACCESS_PUBLIC; }
- break;
-
- case 84:
-
-/* Line 1455 of yacc.c */
-#line 1627 "vtkParse.y"
- { (yyval.integer) = VTK_ACCESS_PRIVATE; }
- break;
-
- case 85:
-
-/* Line 1455 of yacc.c */
-#line 1628 "vtkParse.y"
- { (yyval.integer) = VTK_ACCESS_PROTECTED; }
- break;
-
- case 88:
-
-/* Line 1455 of yacc.c */
-#line 1644 "vtkParse.y"
- { pushType(); start_enum((yyvsp[(1) - (2)].str)); }
- break;
-
- case 89:
-
-/* Line 1455 of yacc.c */
-#line 1645 "vtkParse.y"
- {
- popType();
- clearTypeId();
- if ((yyvsp[(1) - (5)].str) != NULL)
- {
- setTypeId((yyvsp[(1) - (5)].str));
- setTypeBase(guess_id_type((yyvsp[(1) - (5)].str)));
- }
- end_enum();
- }
- break;
-
- case 90:
-
-/* Line 1455 of yacc.c */
-#line 1657 "vtkParse.y"
- { (yyval.str) = (yyvsp[(2) - (2)].str); }
- break;
-
- case 91:
-
-/* Line 1455 of yacc.c */
-#line 1658 "vtkParse.y"
- { (yyval.str) = NULL; }
- break;
-
- case 97:
-
-/* Line 1455 of yacc.c */
-#line 1669 "vtkParse.y"
- { add_enum((yyvsp[(1) - (1)].str), NULL); }
- break;
-
- case 98:
-
-/* Line 1455 of yacc.c */
-#line 1670 "vtkParse.y"
- { postSig("="); markSig(); }
- break;
-
- case 99:
-
-/* Line 1455 of yacc.c */
-#line 1671 "vtkParse.y"
- { chopSig(); add_enum((yyvsp[(1) - (4)].str), copySig()); }
- break;
-
- case 120:
-
-/* Line 1455 of yacc.c */
-#line 1724 "vtkParse.y"
- { pushFunction(); postSig("("); }
- break;
-
- case 121:
-
-/* Line 1455 of yacc.c */
-#line 1725 "vtkParse.y"
- { postSig(")"); }
- break;
-
- case 122:
-
-/* Line 1455 of yacc.c */
-#line 1726 "vtkParse.y"
- { (yyval.integer) = VTK_PARSE_FUNCTION; popFunction(); }
- break;
-
- case 123:
-
-/* Line 1455 of yacc.c */
-#line 1730 "vtkParse.y"
- {
- ValueInfo *item = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_InitValue(item);
- item->ItemType = VTK_TYPEDEF_INFO;
- item->Access = access_level;
-
- handle_complex_type(item, getType(), (yyvsp[(1) - (1)].integer), getSig());
-
- if (getVarName())
- {
- item->Name = getVarName();
- }
-
- if (item->Class == NULL)
- {
- vtkParse_FreeValue(item);
- }
- else if (currentClass)
- {
- vtkParse_AddTypedefToClass(currentClass, item);
- }
- else
- {
- vtkParse_AddTypedefToNamespace(currentNamespace, item);
- }
- }
- break;
-
- case 124:
-
-/* Line 1455 of yacc.c */
-#line 1763 "vtkParse.y"
- { add_using((yyvsp[(2) - (3)].str), 0); }
- break;
-
- case 126:
-
-/* Line 1455 of yacc.c */
-#line 1767 "vtkParse.y"
- { (yyval.str) = (yyvsp[(2) - (2)].str); }
- break;
-
- case 127:
-
-/* Line 1455 of yacc.c */
-#line 1769 "vtkParse.y"
- { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
- break;
-
- case 128:
-
-/* Line 1455 of yacc.c */
-#line 1771 "vtkParse.y"
- { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
- break;
-
- case 129:
-
-/* Line 1455 of yacc.c */
-#line 1773 "vtkParse.y"
- { (yyval.str) = vtkstrcat3((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)); }
- break;
-
- case 130:
-
-/* Line 1455 of yacc.c */
-#line 1775 "vtkParse.y"
- { (yyval.str) = vtkstrcat3((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)); }
- break;
-
- case 131:
-
-/* Line 1455 of yacc.c */
-#line 1778 "vtkParse.y"
- { add_using((yyvsp[(3) - (4)].str), 1); }
- break;
-
- case 132:
-
-/* Line 1455 of yacc.c */
-#line 1786 "vtkParse.y"
- { postSig("template<> "); clearTypeId(); }
- break;
-
- case 133:
-
-/* Line 1455 of yacc.c */
-#line 1788 "vtkParse.y"
- {
- postSig("template<");
- pushType();
- clearType();
- clearTypeId();
- startTemplate();
- }
- break;
-
- case 134:
-
-/* Line 1455 of yacc.c */
-#line 1796 "vtkParse.y"
- {
- chopSig();
- if (getSig()[getSigLength()-1] == '>') { postSig(" "); }
- postSig("> ");
- clearTypeId();
- popType();
- }
- break;
-
- case 136:
-
-/* Line 1455 of yacc.c */
-#line 1807 "vtkParse.y"
- { chopSig(); postSig(", "); clearType(); clearTypeId(); }
- break;
-
- case 138:
-
-/* Line 1455 of yacc.c */
-#line 1811 "vtkParse.y"
- { markSig(); }
- break;
-
- case 139:
-
-/* Line 1455 of yacc.c */
-#line 1813 "vtkParse.y"
- { add_template_parameter(getType(), (yyvsp[(3) - (3)].integer), copySig()); }
- break;
-
- case 141:
-
-/* Line 1455 of yacc.c */
-#line 1815 "vtkParse.y"
- { markSig(); }
- break;
-
- case 142:
-
-/* Line 1455 of yacc.c */
-#line 1817 "vtkParse.y"
- { add_template_parameter(0, (yyvsp[(3) - (3)].integer), copySig()); }
- break;
-
- case 144:
-
-/* Line 1455 of yacc.c */
-#line 1819 "vtkParse.y"
- { pushTemplate(); markSig(); }
- break;
-
- case 145:
-
-/* Line 1455 of yacc.c */
-#line 1820 "vtkParse.y"
- { postSig("class "); }
- break;
-
- case 146:
-
-/* Line 1455 of yacc.c */
-#line 1822 "vtkParse.y"
- {
- int i;
- TemplateInfo *newTemplate = currentTemplate;
- popTemplate();
- add_template_parameter(0, (yyvsp[(5) - (5)].integer), copySig());
- i = currentTemplate->NumberOfParameters-1;
- currentTemplate->Parameters[i]->Template = newTemplate;
- }
- break;
-
- case 148:
-
-/* Line 1455 of yacc.c */
-#line 1833 "vtkParse.y"
- { postSig("class "); }
- break;
-
- case 149:
-
-/* Line 1455 of yacc.c */
-#line 1834 "vtkParse.y"
- { postSig("typename "); }
- break;
-
- case 152:
-
-/* Line 1455 of yacc.c */
-#line 1840 "vtkParse.y"
- { postSig("="); markSig(); }
- break;
-
- case 153:
-
-/* Line 1455 of yacc.c */
-#line 1842 "vtkParse.y"
- {
- int i = currentTemplate->NumberOfParameters-1;
- ValueInfo *param = currentTemplate->Parameters[i];
- chopSig();
- param->Value = copySig();
- }
- break;
-
- case 156:
-
-/* Line 1455 of yacc.c */
-#line 1859 "vtkParse.y"
- { output_function(); }
- break;
-
- case 157:
-
-/* Line 1455 of yacc.c */
-#line 1860 "vtkParse.y"
- { output_function(); }
- break;
-
- case 158:
-
-/* Line 1455 of yacc.c */
-#line 1861 "vtkParse.y"
- { reject_function(); }
- break;
-
- case 159:
-
-/* Line 1455 of yacc.c */
-#line 1862 "vtkParse.y"
- { reject_function(); }
- break;
-
- case 167:
-
-/* Line 1455 of yacc.c */
-#line 1878 "vtkParse.y"
- { output_function(); }
- break;
-
- case 177:
-
-/* Line 1455 of yacc.c */
-#line 1895 "vtkParse.y"
- {
- postSig("(");
- set_return(currentFunction, getType(), getTypeId(), 0);
- }
- break;
-
- case 178:
-
-/* Line 1455 of yacc.c */
-#line 1899 "vtkParse.y"
- { postSig(")"); }
- break;
-
- case 179:
-
-/* Line 1455 of yacc.c */
-#line 1901 "vtkParse.y"
- {
- postSig(";");
- closeSig();
- currentFunction->IsOperator = 1;
- currentFunction->Name = "operator typecast";
- currentFunction->Comment = vtkstrdup(getComment());
- vtkParseDebug("Parsed operator", "operator typecast");
- }
- break;
-
- case 180:
-
-/* Line 1455 of yacc.c */
-#line 1912 "vtkParse.y"
- { (yyval.str) = copySig(); }
- break;
-
- case 181:
-
-/* Line 1455 of yacc.c */
-#line 1915 "vtkParse.y"
- { postSig(")"); }
- break;
-
- case 182:
-
-/* Line 1455 of yacc.c */
-#line 1916 "vtkParse.y"
- {
- postSig(";");
- closeSig();
- currentFunction->Name = (yyvsp[(1) - (3)].str);
- currentFunction->Comment = vtkstrdup(getComment());
- vtkParseDebug("Parsed operator", currentFunction->Name);
- }
- break;
-
- case 183:
-
-/* Line 1455 of yacc.c */
-#line 1926 "vtkParse.y"
- {
- postSig("(");
- currentFunction->IsOperator = 1;
- set_return(currentFunction, getType(), getTypeId(), 0);
- }
- break;
-
- case 185:
-
-/* Line 1455 of yacc.c */
-#line 1935 "vtkParse.y"
- { chopSig(); (yyval.str) = vtkstrcat(copySig(), (yyvsp[(2) - (2)].str)); postSig((yyvsp[(2) - (2)].str)); }
- break;
-
- case 186:
-
-/* Line 1455 of yacc.c */
-#line 1938 "vtkParse.y"
- { markSig(); postSig("operator "); }
- break;
-
- case 187:
-
-/* Line 1455 of yacc.c */
-#line 1942 "vtkParse.y"
- {
- postSig(";");
- closeSig();
- currentFunction->Name = (yyvsp[(1) - (2)].str);
- currentFunction->Comment = vtkstrdup(getComment());
- vtkParseDebug("Parsed func", currentFunction->Name);
- }
- break;
-
- case 190:
-
-/* Line 1455 of yacc.c */
-#line 1954 "vtkParse.y"
- { postSig(" throw "); }
- break;
-
- case 191:
-
-/* Line 1455 of yacc.c */
-#line 1954 "vtkParse.y"
- { chopSig(); }
- break;
-
- case 192:
-
-/* Line 1455 of yacc.c */
-#line 1955 "vtkParse.y"
- { postSig(" const"); currentFunction->IsConst = 1; }
- break;
-
- case 193:
-
-/* Line 1455 of yacc.c */
-#line 1957 "vtkParse.y"
- {
- postSig(" = 0");
- currentFunction->IsPureVirtual = 1;
- if (currentClass) { currentClass->IsAbstract = 1; }
- }
- break;
-
- case 196:
-
-/* Line 1455 of yacc.c */
-#line 1969 "vtkParse.y"
- {
- postSig("(");
- set_return(currentFunction, getType(), getTypeId(), 0);
- }
- break;
-
- case 197:
-
-/* Line 1455 of yacc.c */
-#line 1973 "vtkParse.y"
- { postSig(")"); }
- break;
-
- case 200:
-
-/* Line 1455 of yacc.c */
-#line 1985 "vtkParse.y"
- { closeSig(); }
- break;
-
- case 201:
-
-/* Line 1455 of yacc.c */
-#line 1986 "vtkParse.y"
- { openSig(); }
- break;
-
- case 202:
-
-/* Line 1455 of yacc.c */
-#line 1987 "vtkParse.y"
- {
- postSig(";");
- closeSig();
- if (getType() & VTK_PARSE_VIRTUAL)
- {
- currentFunction->IsVirtual = 1;
- }
- if (getType() & VTK_PARSE_EXPLICIT)
- {
- currentFunction->IsExplicit = 1;
- }
- currentFunction->Name = (yyvsp[(1) - (5)].str);
- currentFunction->Comment = vtkstrdup(getComment());
- vtkParseDebug("Parsed func", currentFunction->Name);
- }
- break;
-
- case 203:
-
-/* Line 1455 of yacc.c */
-#line 2004 "vtkParse.y"
- { pushType(); postSig("("); }
- break;
-
- case 204:
-
-/* Line 1455 of yacc.c */
-#line 2005 "vtkParse.y"
- { popType(); postSig(")"); }
- break;
-
- case 211:
-
-/* Line 1455 of yacc.c */
-#line 2022 "vtkParse.y"
- { clearType(); clearTypeId(); }
- break;
-
- case 213:
-
-/* Line 1455 of yacc.c */
-#line 2025 "vtkParse.y"
- { clearType(); clearTypeId(); }
- break;
-
- case 214:
-
-/* Line 1455 of yacc.c */
-#line 2026 "vtkParse.y"
- { clearType(); clearTypeId(); postSig(", "); }
- break;
-
- case 216:
-
-/* Line 1455 of yacc.c */
-#line 2029 "vtkParse.y"
- { currentFunction->IsVariadic = 1; postSig(", ..."); }
- break;
-
- case 217:
-
-/* Line 1455 of yacc.c */
-#line 2032 "vtkParse.y"
- { markSig(); }
- break;
-
- case 218:
-
-/* Line 1455 of yacc.c */
-#line 2034 "vtkParse.y"
- {
- ValueInfo *param = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_InitValue(param);
-
- handle_complex_type(param, getType(), (yyvsp[(3) - (3)].integer), copySig());
- add_legacy_parameter(currentFunction, param);
-
- if (getVarName())
- {
- param->Name = getVarName();
- }
-
- vtkParse_AddParameterToFunction(currentFunction, param);
- }
- break;
-
- case 219:
-
-/* Line 1455 of yacc.c */
-#line 2049 "vtkParse.y"
- {
- int i = currentFunction->NumberOfParameters-1;
- if (getVarValue())
- {
- currentFunction->Parameters[i]->Value = getVarValue();
- }
- }
- break;
-
- case 220:
-
-/* Line 1455 of yacc.c */
-#line 2058 "vtkParse.y"
- { clearVarValue(); }
- break;
-
- case 222:
-
-/* Line 1455 of yacc.c */
-#line 2062 "vtkParse.y"
- { postSig("="); clearVarValue(); markSig(); }
- break;
-
- case 223:
-
-/* Line 1455 of yacc.c */
-#line 2063 "vtkParse.y"
- { chopSig(); setVarValue(copySig()); }
- break;
-
- case 225:
-
-/* Line 1455 of yacc.c */
-#line 2074 "vtkParse.y"
- {
- unsigned int type = getType();
- ValueInfo *var = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_InitValue(var);
- var->ItemType = VTK_VARIABLE_INFO;
- var->Access = access_level;
-
- handle_complex_type(var, type, (yyvsp[(1) - (2)].integer), getSig());
-
- var->Name = getVarName();
-
- if (getVarValue())
- {
- var->Value = getVarValue();
- }
-
- /* Is this a typedef? */
- if ((type & VTK_PARSE_TYPEDEF) != 0)
- {
- var->ItemType = VTK_TYPEDEF_INFO;
- if (currentClass)
- {
- vtkParse_AddVariableToClass(currentClass, var);
- }
- else
- {
- vtkParse_AddVariableToNamespace(currentNamespace, var);
- }
- }
- /* Is this a constant? */
- else if (((type & VTK_PARSE_CONST) != 0) && var->Value != NULL &&
- (((type & VTK_PARSE_INDIRECT) == 0) ||
- ((type & VTK_PARSE_INDIRECT) == VTK_PARSE_ARRAY)))
- {
- var->ItemType = VTK_CONSTANT_INFO;
- if (currentClass)
- {
- vtkParse_AddConstantToClass(currentClass, var);
- }
- else
- {
- vtkParse_AddConstantToNamespace(currentNamespace, var);
- }
- }
- /* This is a true variable i.e. not constant */
- else
- {
- if (currentClass)
- {
- vtkParse_AddVariableToClass(currentClass, var);
- }
- else
- {
- vtkParse_AddVariableToNamespace(currentNamespace, var);
- }
- }
- }
- break;
-
- case 229:
-
-/* Line 1455 of yacc.c */
-#line 2136 "vtkParse.y"
- { postSig(", "); }
- break;
-
- case 232:
-
-/* Line 1455 of yacc.c */
-#line 2142 "vtkParse.y"
- { setTypePtr(0); }
- break;
-
- case 233:
-
-/* Line 1455 of yacc.c */
-#line 2143 "vtkParse.y"
- { setTypePtr((yyvsp[(1) - (1)].integer)); }
- break;
-
- case 234:
-
-/* Line 1455 of yacc.c */
-#line 2147 "vtkParse.y"
- { (yyval.integer) = 0; }
- break;
-
- case 235:
-
-/* Line 1455 of yacc.c */
-#line 2148 "vtkParse.y"
- { postSig(")"); }
- break;
-
- case 236:
-
-/* Line 1455 of yacc.c */
-#line 2150 "vtkParse.y"
- {
- const char *scope = getScope();
- unsigned int parens = add_indirection((yyvsp[(1) - (5)].integer), (yyvsp[(2) - (5)].integer));
- if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_FUNCTION)
- {
- if (scope) { scope = vtkstrndup(scope, strlen(scope) - 2); }
- getFunction()->Class = scope;
- (yyval.integer) = (parens | VTK_PARSE_FUNCTION);
- }
- else if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_ARRAY)
- {
- (yyval.integer) = add_indirection_to_array(parens);
- }
- }
- break;
-
- case 237:
-
-/* Line 1455 of yacc.c */
-#line 2167 "vtkParse.y"
- { (yyval.integer) = 0; }
- break;
-
- case 238:
-
-/* Line 1455 of yacc.c */
-#line 2168 "vtkParse.y"
- { postSig(")"); }
- break;
-
- case 239:
-
-/* Line 1455 of yacc.c */
-#line 2170 "vtkParse.y"
- {
- const char *scope = getScope();
- unsigned int parens = add_indirection((yyvsp[(1) - (5)].integer), (yyvsp[(2) - (5)].integer));
- if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_FUNCTION)
- {
- if (scope) { scope = vtkstrndup(scope, strlen(scope) - 2); }
- getFunction()->Class = scope;
- (yyval.integer) = (parens | VTK_PARSE_FUNCTION);
- }
- else if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_ARRAY)
- {
- (yyval.integer) = add_indirection_to_array(parens);
- }
- }
- break;
-
- case 240:
-
-/* Line 1455 of yacc.c */
-#line 2186 "vtkParse.y"
- { postSig("("); scopeSig(""); (yyval.integer) = 0; }
- break;
-
- case 241:
-
-/* Line 1455 of yacc.c */
-#line 2187 "vtkParse.y"
- { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("*");
- (yyval.integer) = VTK_PARSE_POINTER; }
- break;
-
- case 242:
-
-/* Line 1455 of yacc.c */
-#line 2189 "vtkParse.y"
- { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("&");
- (yyval.integer) = VTK_PARSE_REF; }
- break;
-
- case 243:
-
-/* Line 1455 of yacc.c */
-#line 2193 "vtkParse.y"
- { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("*");
- (yyval.integer) = VTK_PARSE_POINTER; }
- break;
-
- case 244:
-
-/* Line 1455 of yacc.c */
-#line 2195 "vtkParse.y"
- { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("&");
- (yyval.integer) = VTK_PARSE_REF; }
- break;
-
- case 245:
-
-/* Line 1455 of yacc.c */
-#line 2198 "vtkParse.y"
- { (yyval.integer) = 0; }
- break;
-
- case 246:
-
-/* Line 1455 of yacc.c */
-#line 2199 "vtkParse.y"
- { pushFunction(); postSig("("); }
- break;
-
- case 247:
-
-/* Line 1455 of yacc.c */
-#line 2200 "vtkParse.y"
- { postSig(")"); }
- break;
-
- case 248:
-
-/* Line 1455 of yacc.c */
-#line 2201 "vtkParse.y"
- {
- (yyval.integer) = VTK_PARSE_FUNCTION;
- popFunction();
- }
- break;
-
- case 249:
-
-/* Line 1455 of yacc.c */
-#line 2205 "vtkParse.y"
- { (yyval.integer) = VTK_PARSE_ARRAY; }
- break;
-
- case 252:
-
-/* Line 1455 of yacc.c */
-#line 2209 "vtkParse.y"
- { currentFunction->IsConst = 1; }
- break;
-
- case 255:
-
-/* Line 1455 of yacc.c */
-#line 2215 "vtkParse.y"
- { (yyval.integer) = add_indirection((yyvsp[(1) - (2)].integer), (yyvsp[(2) - (2)].integer)); }
- break;
-
- case 257:
-
-/* Line 1455 of yacc.c */
-#line 2220 "vtkParse.y"
- { (yyval.integer) = add_indirection((yyvsp[(1) - (2)].integer), (yyvsp[(2) - (2)].integer)); }
- break;
-
- case 258:
-
-/* Line 1455 of yacc.c */
-#line 2223 "vtkParse.y"
- { clearVarName(); chopSig(); }
- break;
-
- case 260:
-
-/* Line 1455 of yacc.c */
-#line 2227 "vtkParse.y"
- { setVarName((yyvsp[(1) - (1)].str)); }
- break;
-
- case 261:
-
-/* Line 1455 of yacc.c */
-#line 2228 "vtkParse.y"
- { setVarName((yyvsp[(1) - (3)].str)); }
- break;
-
- case 265:
-
-/* Line 1455 of yacc.c */
-#line 2236 "vtkParse.y"
- { clearArray(); }
- break;
-
- case 267:
-
-/* Line 1455 of yacc.c */
-#line 2240 "vtkParse.y"
- { clearArray(); }
- break;
-
- case 271:
-
-/* Line 1455 of yacc.c */
-#line 2247 "vtkParse.y"
- { postSig("["); }
- break;
-
- case 272:
-
-/* Line 1455 of yacc.c */
-#line 2247 "vtkParse.y"
- { postSig("]"); }
- break;
-
- case 273:
-
-/* Line 1455 of yacc.c */
-#line 2250 "vtkParse.y"
- { pushArraySize(""); }
- break;
-
- case 274:
-
-/* Line 1455 of yacc.c */
-#line 2251 "vtkParse.y"
- { markSig(); }
- break;
-
- case 275:
-
-/* Line 1455 of yacc.c */
-#line 2251 "vtkParse.y"
- { chopSig(); pushArraySize(copySig()); }
- break;
-
- case 280:
-
-/* Line 1455 of yacc.c */
-#line 2267 "vtkParse.y"
- { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
- break;
-
- case 281:
-
-/* Line 1455 of yacc.c */
-#line 2269 "vtkParse.y"
- { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
- break;
-
- case 282:
-
-/* Line 1455 of yacc.c */
-#line 2271 "vtkParse.y"
- { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
- break;
-
- case 283:
-
-/* Line 1455 of yacc.c */
-#line 2275 "vtkParse.y"
- { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
- break;
-
- case 284:
-
-/* Line 1455 of yacc.c */
-#line 2277 "vtkParse.y"
- { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
- break;
-
- case 285:
-
-/* Line 1455 of yacc.c */
-#line 2279 "vtkParse.y"
- { (yyval.str) = vtkstrcat3((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)); }
- break;
-
- case 286:
-
-/* Line 1455 of yacc.c */
-#line 2281 "vtkParse.y"
- { (yyval.str) = vtkstrcat3((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)); }
- break;
-
- case 287:
-
-/* Line 1455 of yacc.c */
-#line 2282 "vtkParse.y"
- { postSig("template "); }
- break;
-
- case 288:
-
-/* Line 1455 of yacc.c */
-#line 2284 "vtkParse.y"
- { (yyval.str) = vtkstrcat4((yyvsp[(1) - (5)].str), "template ", (yyvsp[(4) - (5)].str), (yyvsp[(5) - (5)].str)); }
- break;
-
- case 289:
-
-/* Line 1455 of yacc.c */
-#line 2287 "vtkParse.y"
- { postSig((yyvsp[(1) - (1)].str)); }
- break;
-
- case 290:
-
-/* Line 1455 of yacc.c */
-#line 2290 "vtkParse.y"
- { (yyval.str) = "::"; postSig((yyval.str)); }
- break;
-
- case 291:
-
-/* Line 1455 of yacc.c */
-#line 2293 "vtkParse.y"
- { markSig(); postSig((yyvsp[(1) - (2)].str)); postSig("<"); }
- break;
-
- case 292:
-
-/* Line 1455 of yacc.c */
-#line 2295 "vtkParse.y"
- {
- chopSig(); if (getSig()[getSigLength()-1] == '>') { postSig(" "); }
- postSig(">"); (yyval.str) = copySig(); clearTypeId();
- }
- break;
-
- case 293:
-
-/* Line 1455 of yacc.c */
-#line 2308 "vtkParse.y"
- { postSig((yyvsp[(1) - (1)].str)); }
- break;
-
- case 294:
-
-/* Line 1455 of yacc.c */
-#line 2309 "vtkParse.y"
- { postSig((yyvsp[(1) - (1)].str)); }
- break;
-
- case 295:
-
-/* Line 1455 of yacc.c */
-#line 2310 "vtkParse.y"
- { postSig((yyvsp[(1) - (1)].str)); }
- break;
-
- case 296:
-
-/* Line 1455 of yacc.c */
-#line 2311 "vtkParse.y"
- { postSig((yyvsp[(1) - (1)].str)); }
- break;
-
- case 297:
-
-/* Line 1455 of yacc.c */
-#line 2312 "vtkParse.y"
- { postSig((yyvsp[(1) - (1)].str)); }
- break;
-
- case 298:
-
-/* Line 1455 of yacc.c */
-#line 2313 "vtkParse.y"
- { postSig((yyvsp[(1) - (1)].str)); }
- break;
-
- case 299:
-
-/* Line 1455 of yacc.c */
-#line 2314 "vtkParse.y"
- { postSig((yyvsp[(1) - (1)].str)); }
- break;
-
- case 300:
-
-/* Line 1455 of yacc.c */
-#line 2315 "vtkParse.y"
- { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
- break;
-
- case 301:
-
-/* Line 1455 of yacc.c */
-#line 2316 "vtkParse.y"
- { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
- break;
-
- case 302:
-
-/* Line 1455 of yacc.c */
-#line 2317 "vtkParse.y"
- { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
- break;
-
- case 303:
-
-/* Line 1455 of yacc.c */
-#line 2318 "vtkParse.y"
- { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
- break;
-
- case 304:
-
-/* Line 1455 of yacc.c */
-#line 2319 "vtkParse.y"
- { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
- break;
-
- case 305:
-
-/* Line 1455 of yacc.c */
-#line 2320 "vtkParse.y"
- { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
- break;
-
- case 306:
-
-/* Line 1455 of yacc.c */
-#line 2321 "vtkParse.y"
- { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
- break;
-
- case 307:
-
-/* Line 1455 of yacc.c */
-#line 2322 "vtkParse.y"
- { (yyval.str) = "size_t"; postSig((yyval.str)); }
- break;
-
- case 308:
-
-/* Line 1455 of yacc.c */
-#line 2323 "vtkParse.y"
- { (yyval.str) = "ssize_t"; postSig((yyval.str)); }
- break;
-
- case 309:
-
-/* Line 1455 of yacc.c */
-#line 2324 "vtkParse.y"
- { (yyval.str) = "vtkTypeInt8"; postSig((yyval.str)); }
- break;
-
- case 310:
-
-/* Line 1455 of yacc.c */
-#line 2325 "vtkParse.y"
- { (yyval.str) = "vtkTypeUInt8"; postSig((yyval.str)); }
- break;
-
- case 311:
-
-/* Line 1455 of yacc.c */
-#line 2326 "vtkParse.y"
- { (yyval.str) = "vtkTypeInt16"; postSig((yyval.str)); }
- break;
-
- case 312:
-
-/* Line 1455 of yacc.c */
-#line 2327 "vtkParse.y"
- { (yyval.str) = "vtkTypeUInt16"; postSig((yyval.str)); }
- break;
-
- case 313:
-
-/* Line 1455 of yacc.c */
-#line 2328 "vtkParse.y"
- { (yyval.str) = "vtkTypeInt32"; postSig((yyval.str)); }
- break;
-
- case 314:
-
-/* Line 1455 of yacc.c */
-#line 2329 "vtkParse.y"
- { (yyval.str) = "vtkTypeUInt32"; postSig((yyval.str)); }
- break;
-
- case 315:
-
-/* Line 1455 of yacc.c */
-#line 2330 "vtkParse.y"
- { (yyval.str) = "vtkTypeInt64"; postSig((yyval.str)); }
- break;
-
- case 316:
-
-/* Line 1455 of yacc.c */
-#line 2331 "vtkParse.y"
- { (yyval.str) = "vtkTypeUInt64"; postSig((yyval.str)); }
- break;
-
- case 317:
-
-/* Line 1455 of yacc.c */
-#line 2332 "vtkParse.y"
- { (yyval.str) = "vtkTypeFloat32"; postSig((yyval.str)); }
- break;
-
- case 318:
-
-/* Line 1455 of yacc.c */
-#line 2333 "vtkParse.y"
- { (yyval.str) = "vtkTypeFloat64"; postSig((yyval.str)); }
- break;
-
- case 319:
-
-/* Line 1455 of yacc.c */
-#line 2334 "vtkParse.y"
- { (yyval.str) = "vtkIdType"; postSig((yyval.str)); }
- break;
-
- case 330:
-
-/* Line 1455 of yacc.c */
-#line 2360 "vtkParse.y"
- { setTypeBase(buildTypeBase(getType(), (yyvsp[(1) - (1)].integer))); }
- break;
-
- case 331:
-
-/* Line 1455 of yacc.c */
-#line 2361 "vtkParse.y"
- { setTypeMod(VTK_PARSE_TYPEDEF); }
- break;
-
- case 332:
-
-/* Line 1455 of yacc.c */
-#line 2362 "vtkParse.y"
- { setTypeMod(VTK_PARSE_FRIEND); }
- break;
-
- case 335:
-
-/* Line 1455 of yacc.c */
-#line 2369 "vtkParse.y"
- { setTypeMod((yyvsp[(1) - (1)].integer)); }
- break;
-
- case 336:
-
-/* Line 1455 of yacc.c */
-#line 2370 "vtkParse.y"
- { setTypeMod((yyvsp[(1) - (1)].integer)); }
- break;
-
- case 337:
-
-/* Line 1455 of yacc.c */
-#line 2371 "vtkParse.y"
- { setTypeMod((yyvsp[(1) - (1)].integer)); }
- break;
-
- case 338:
-
-/* Line 1455 of yacc.c */
-#line 2374 "vtkParse.y"
- { postSig("mutable "); (yyval.integer) = VTK_PARSE_MUTABLE; }
- break;
-
- case 339:
-
-/* Line 1455 of yacc.c */
-#line 2375 "vtkParse.y"
- { (yyval.integer) = 0; }
- break;
-
- case 340:
-
-/* Line 1455 of yacc.c */
-#line 2376 "vtkParse.y"
- { (yyval.integer) = 0; }
- break;
-
- case 341:
-
-/* Line 1455 of yacc.c */
-#line 2377 "vtkParse.y"
- { postSig("static "); (yyval.integer) = VTK_PARSE_STATIC; }
- break;
-
- case 342:
-
-/* Line 1455 of yacc.c */
-#line 2380 "vtkParse.y"
- { (yyval.integer) = 0; }
- break;
-
- case 343:
-
-/* Line 1455 of yacc.c */
-#line 2381 "vtkParse.y"
- { postSig("virtual "); (yyval.integer) = VTK_PARSE_VIRTUAL; }
- break;
-
- case 344:
-
-/* Line 1455 of yacc.c */
-#line 2382 "vtkParse.y"
- { postSig("explicit "); (yyval.integer) = VTK_PARSE_EXPLICIT; }
- break;
-
- case 345:
-
-/* Line 1455 of yacc.c */
-#line 2385 "vtkParse.y"
- { postSig("const "); (yyval.integer) = VTK_PARSE_CONST; }
- break;
-
- case 346:
-
-/* Line 1455 of yacc.c */
-#line 2386 "vtkParse.y"
- { postSig("volatile "); (yyval.integer) = VTK_PARSE_VOLATILE; }
- break;
-
- case 348:
-
-/* Line 1455 of yacc.c */
-#line 2391 "vtkParse.y"
- { (yyval.integer) = ((yyvsp[(1) - (2)].integer) | (yyvsp[(2) - (2)].integer)); }
- break;
-
- case 350:
-
-/* Line 1455 of yacc.c */
-#line 2402 "vtkParse.y"
- { setTypeBase((yyvsp[(1) - (1)].integer)); }
- break;
-
- case 352:
-
-/* Line 1455 of yacc.c */
-#line 2404 "vtkParse.y"
- { setTypeBase((yyvsp[(2) - (2)].integer)); }
- break;
-
- case 355:
-
-/* Line 1455 of yacc.c */
-#line 2409 "vtkParse.y"
- { postSig("typename "); }
- break;
-
- case 356:
-
-/* Line 1455 of yacc.c */
-#line 2410 "vtkParse.y"
- { postSig(" "); setTypeId((yyvsp[(3) - (3)].str)); (yyval.integer) = guess_id_type((yyvsp[(3) - (3)].str)); }
- break;
-
- case 357:
-
-/* Line 1455 of yacc.c */
-#line 2412 "vtkParse.y"
- { postSig(" "); setTypeId((yyvsp[(1) - (1)].str)); (yyval.integer) = guess_id_type((yyvsp[(1) - (1)].str)); }
- break;
-
- case 358:
-
-/* Line 1455 of yacc.c */
-#line 2414 "vtkParse.y"
- { postSig(" "); setTypeId((yyvsp[(1) - (1)].str)); (yyval.integer) = guess_id_type((yyvsp[(1) - (1)].str)); }
- break;
-
- case 359:
-
-/* Line 1455 of yacc.c */
-#line 2416 "vtkParse.y"
- { postSig(" "); setTypeId((yyvsp[(2) - (2)].str)); (yyval.integer) = guess_id_type((yyvsp[(2) - (2)].str)); }
- break;
-
- case 360:
-
-/* Line 1455 of yacc.c */
-#line 2418 "vtkParse.y"
- { postSig(" "); setTypeId((yyvsp[(2) - (2)].str)); (yyval.integer) = guess_id_type((yyvsp[(2) - (2)].str)); }
- break;
-
- case 362:
-
-/* Line 1455 of yacc.c */
-#line 2424 "vtkParse.y"
- { setTypeBase((yyvsp[(1) - (1)].integer)); }
- break;
-
- case 364:
-
-/* Line 1455 of yacc.c */
-#line 2426 "vtkParse.y"
- { setTypeBase((yyvsp[(2) - (2)].integer)); }
- break;
-
- case 367:
-
-/* Line 1455 of yacc.c */
-#line 2432 "vtkParse.y"
- { postSig(" "); setTypeId((yyvsp[(1) - (1)].str)); (yyval.integer) = guess_id_type((yyvsp[(1) - (1)].str)); }
- break;
-
- case 368:
-
-/* Line 1455 of yacc.c */
-#line 2434 "vtkParse.y"
- { postSig(" "); setTypeId((yyvsp[(1) - (1)].str)); (yyval.integer) = guess_id_type((yyvsp[(1) - (1)].str)); }
- break;
-
- case 369:
-
-/* Line 1455 of yacc.c */
-#line 2436 "vtkParse.y"
- { postSig(" "); setTypeId((yyvsp[(2) - (2)].str)); (yyval.integer) = guess_id_type((yyvsp[(2) - (2)].str)); }
- break;
-
- case 370:
-
-/* Line 1455 of yacc.c */
-#line 2438 "vtkParse.y"
- { postSig(" "); setTypeId((yyvsp[(2) - (2)].str)); (yyval.integer) = guess_id_type((yyvsp[(2) - (2)].str)); }
- break;
-
- case 371:
-
-/* Line 1455 of yacc.c */
-#line 2440 "vtkParse.y"
- { postSig(" "); setTypeId((yyvsp[(2) - (2)].str)); (yyval.integer) = guess_id_type((yyvsp[(2) - (2)].str)); }
- break;
-
- case 372:
-
-/* Line 1455 of yacc.c */
-#line 2443 "vtkParse.y"
- { setTypeId(""); }
- break;
-
- case 374:
-
-/* Line 1455 of yacc.c */
-#line 2447 "vtkParse.y"
- { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_STRING; }
- break;
-
- case 375:
-
-/* Line 1455 of yacc.c */
-#line 2448 "vtkParse.y"
- { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_UNICODE_STRING;}
- break;
-
- case 376:
-
-/* Line 1455 of yacc.c */
-#line 2449 "vtkParse.y"
- { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_OSTREAM; }
- break;
-
- case 377:
-
-/* Line 1455 of yacc.c */
-#line 2450 "vtkParse.y"
- { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_ISTREAM; }
- break;
-
- case 378:
-
-/* Line 1455 of yacc.c */
-#line 2451 "vtkParse.y"
- { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_UNKNOWN; }
- break;
-
- case 379:
-
-/* Line 1455 of yacc.c */
-#line 2452 "vtkParse.y"
- { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_OBJECT; }
- break;
-
- case 380:
-
-/* Line 1455 of yacc.c */
-#line 2453 "vtkParse.y"
- { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_QOBJECT; }
- break;
-
- case 381:
-
-/* Line 1455 of yacc.c */
-#line 2454 "vtkParse.y"
- { typeSig("ssize_t"); (yyval.integer) = VTK_PARSE_SSIZE_T; }
- break;
-
- case 382:
-
-/* Line 1455 of yacc.c */
-#line 2455 "vtkParse.y"
- { typeSig("size_t"); (yyval.integer) = VTK_PARSE_SIZE_T; }
- break;
-
- case 383:
-
-/* Line 1455 of yacc.c */
-#line 2456 "vtkParse.y"
- { typeSig("vtkTypeInt8"); (yyval.integer) = VTK_PARSE_INT8; }
- break;
-
- case 384:
-
-/* Line 1455 of yacc.c */
-#line 2457 "vtkParse.y"
- { typeSig("vtkTypeUInt8"); (yyval.integer) = VTK_PARSE_UINT8; }
- break;
-
- case 385:
-
-/* Line 1455 of yacc.c */
-#line 2458 "vtkParse.y"
- { typeSig("vtkTypeInt16"); (yyval.integer) = VTK_PARSE_INT16; }
- break;
-
- case 386:
-
-/* Line 1455 of yacc.c */
-#line 2459 "vtkParse.y"
- { typeSig("vtkTypeUInt16"); (yyval.integer) = VTK_PARSE_UINT16; }
- break;
-
- case 387:
-
-/* Line 1455 of yacc.c */
-#line 2460 "vtkParse.y"
- { typeSig("vtkTypeInt32"); (yyval.integer) = VTK_PARSE_INT32; }
- break;
-
- case 388:
-
-/* Line 1455 of yacc.c */
-#line 2461 "vtkParse.y"
- { typeSig("vtkTypeUInt32"); (yyval.integer) = VTK_PARSE_UINT32; }
- break;
-
- case 389:
-
-/* Line 1455 of yacc.c */
-#line 2462 "vtkParse.y"
- { typeSig("vtkTypeInt64"); (yyval.integer) = VTK_PARSE_INT64; }
- break;
-
- case 390:
-
-/* Line 1455 of yacc.c */
-#line 2463 "vtkParse.y"
- { typeSig("vtkTypeUInt64"); (yyval.integer) = VTK_PARSE_UINT64; }
- break;
-
- case 391:
-
-/* Line 1455 of yacc.c */
-#line 2464 "vtkParse.y"
- { typeSig("vtkTypeFloat32"); (yyval.integer) = VTK_PARSE_FLOAT32; }
- break;
-
- case 392:
-
-/* Line 1455 of yacc.c */
-#line 2465 "vtkParse.y"
- { typeSig("vtkTypeFloat64"); (yyval.integer) = VTK_PARSE_FLOAT64; }
- break;
-
- case 393:
-
-/* Line 1455 of yacc.c */
-#line 2466 "vtkParse.y"
- { typeSig("vtkIdType"); (yyval.integer) = VTK_PARSE_ID_TYPE; }
- break;
-
- case 394:
-
-/* Line 1455 of yacc.c */
-#line 2469 "vtkParse.y"
- { postSig("void "); (yyval.integer) = VTK_PARSE_VOID; }
- break;
-
- case 395:
-
-/* Line 1455 of yacc.c */
-#line 2470 "vtkParse.y"
- { postSig("bool "); (yyval.integer) = VTK_PARSE_BOOL; }
- break;
-
- case 396:
-
-/* Line 1455 of yacc.c */
-#line 2471 "vtkParse.y"
- { postSig("float "); (yyval.integer) = VTK_PARSE_FLOAT; }
- break;
-
- case 397:
-
-/* Line 1455 of yacc.c */
-#line 2472 "vtkParse.y"
- { postSig("double "); (yyval.integer) = VTK_PARSE_DOUBLE; }
- break;
-
- case 398:
-
-/* Line 1455 of yacc.c */
-#line 2473 "vtkParse.y"
- { postSig("char "); (yyval.integer) = VTK_PARSE_CHAR; }
- break;
-
- case 399:
-
-/* Line 1455 of yacc.c */
-#line 2474 "vtkParse.y"
- { postSig("int "); (yyval.integer) = VTK_PARSE_INT; }
- break;
-
- case 400:
-
-/* Line 1455 of yacc.c */
-#line 2475 "vtkParse.y"
- { postSig("short "); (yyval.integer) = VTK_PARSE_SHORT; }
- break;
-
- case 401:
-
-/* Line 1455 of yacc.c */
-#line 2476 "vtkParse.y"
- { postSig("long "); (yyval.integer) = VTK_PARSE_LONG; }
- break;
-
- case 402:
-
-/* Line 1455 of yacc.c */
-#line 2477 "vtkParse.y"
- { postSig("__int64 "); (yyval.integer) = VTK_PARSE___INT64; }
- break;
-
- case 403:
-
-/* Line 1455 of yacc.c */
-#line 2478 "vtkParse.y"
- { postSig("signed "); (yyval.integer) = VTK_PARSE_INT; }
- break;
-
- case 404:
-
-/* Line 1455 of yacc.c */
-#line 2479 "vtkParse.y"
- { postSig("unsigned "); (yyval.integer) = VTK_PARSE_UNSIGNED_INT; }
- break;
-
- case 407:
-
-/* Line 1455 of yacc.c */
-#line 2501 "vtkParse.y"
- { (yyval.integer) = ((yyvsp[(1) - (2)].integer) | (yyvsp[(2) - (2)].integer)); }
- break;
-
- case 408:
-
-/* Line 1455 of yacc.c */
-#line 2504 "vtkParse.y"
- { postSig("&"); (yyval.integer) = VTK_PARSE_REF; }
- break;
-
- case 409:
-
-/* Line 1455 of yacc.c */
-#line 2507 "vtkParse.y"
- { postSig("*"); (yyval.integer) = VTK_PARSE_POINTER; }
- break;
-
- case 410:
-
-/* Line 1455 of yacc.c */
-#line 2508 "vtkParse.y"
- { postSig("*"); }
- break;
-
- case 411:
-
-/* Line 1455 of yacc.c */
-#line 2509 "vtkParse.y"
- {
- if (((yyvsp[(3) - (3)].integer) & VTK_PARSE_CONST) != 0)
- {
- (yyval.integer) = VTK_PARSE_CONST_POINTER;
- }
- if (((yyvsp[(3) - (3)].integer) & VTK_PARSE_VOLATILE) != 0)
- {
- (yyval.integer) = VTK_PARSE_BAD_INDIRECT;
- }
- }
- break;
-
- case 413:
-
-/* Line 1455 of yacc.c */
-#line 2525 "vtkParse.y"
- {
- unsigned int n;
- n = (((yyvsp[(1) - (2)].integer) << 2) | (yyvsp[(2) - (2)].integer));
- if ((n & VTK_PARSE_INDIRECT) != n)
- {
- n = VTK_PARSE_BAD_INDIRECT;
- }
- (yyval.integer) = n;
- }
- break;
-
- case 414:
-
-/* Line 1455 of yacc.c */
-#line 2541 "vtkParse.y"
- {preSig("void Set"); postSig("(");}
- break;
-
- case 415:
-
-/* Line 1455 of yacc.c */
-#line 2542 "vtkParse.y"
- {
- postSig("a);");
- currentFunction->Macro = "vtkSetMacro";
- currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (7)].str));
- currentFunction->Comment = vtkstrdup(getComment());
- add_parameter(currentFunction, getType(), getTypeId(), 0);
- set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
- output_function();
- }
- break;
-
- case 416:
-
-/* Line 1455 of yacc.c */
-#line 2551 "vtkParse.y"
- {postSig("Get");}
- break;
-
- case 417:
-
-/* Line 1455 of yacc.c */
-#line 2552 "vtkParse.y"
- {markSig();}
- break;
-
- case 418:
-
-/* Line 1455 of yacc.c */
-#line 2552 "vtkParse.y"
- {swapSig();}
- break;
-
- case 419:
-
-/* Line 1455 of yacc.c */
-#line 2553 "vtkParse.y"
- {
- postSig("();");
- currentFunction->Macro = "vtkGetMacro";
- currentFunction->Name = vtkstrcat("Get", (yyvsp[(4) - (9)].str));
- currentFunction->Comment = vtkstrdup(getComment());
- set_return(currentFunction, getType(), getTypeId(), 0);
- output_function();
- }
- break;
-
- case 420:
-
-/* Line 1455 of yacc.c */
-#line 2561 "vtkParse.y"
- {preSig("void Set");}
- break;
-
- case 421:
-
-/* Line 1455 of yacc.c */
-#line 2562 "vtkParse.y"
- {
- postSig("(char *);");
- currentFunction->Macro = "vtkSetStringMacro";
- currentFunction->Name = vtkstrcat("Set", (yyvsp[(4) - (5)].str));
- currentFunction->Comment = vtkstrdup(getComment());
- add_parameter(currentFunction, VTK_PARSE_CHAR_PTR, "char", 0);
- set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
- output_function();
- }
- break;
-
- case 422:
-
-/* Line 1455 of yacc.c */
-#line 2571 "vtkParse.y"
- {preSig("char *Get");}
- break;
-
- case 423:
-
-/* Line 1455 of yacc.c */
-#line 2572 "vtkParse.y"
- {
- postSig("();");
- currentFunction->Macro = "vtkGetStringMacro";
- currentFunction->Name = vtkstrcat("Get", (yyvsp[(4) - (5)].str));
- currentFunction->Comment = vtkstrdup(getComment());
- set_return(currentFunction, VTK_PARSE_CHAR_PTR, "char", 0);
- output_function();
- }
- break;
-
- case 424:
-
-/* Line 1455 of yacc.c */
-#line 2580 "vtkParse.y"
- {startSig(); markSig();}
- break;
-
- case 425:
-
-/* Line 1455 of yacc.c */
-#line 2580 "vtkParse.y"
- {closeSig();}
- break;
-
- case 426:
-
-/* Line 1455 of yacc.c */
-#line 2582 "vtkParse.y"
- {
- const char *typeText;
- chopSig();
- typeText = copySig();
-
- currentFunction->Macro = "vtkSetClampMacro";
- currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (10)].str));
- currentFunction->Signature =
- vtkstrcat5("void ", currentFunction->Name, "(", typeText, ");");
- currentFunction->Comment = vtkstrdup(getComment());
- add_parameter(currentFunction, getType(), getTypeId(), 0);
- set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
- output_function();
-
- currentFunction->Macro = "vtkSetClampMacro";
- currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (10)].str), "MinValue");
- currentFunction->Signature =
- vtkstrcat4(typeText, " ", currentFunction->Name, "();");
- currentFunction->Comment = vtkstrdup(getComment());
- set_return(currentFunction, getType(), getTypeId(), 0);
- output_function();
-
- currentFunction->Macro = "vtkSetClampMacro";
- currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (10)].str), "MaxValue");
- currentFunction->Signature =
- vtkstrcat4(typeText, " ", currentFunction->Name, "();");
- currentFunction->Comment = vtkstrdup(getComment());
- set_return(currentFunction, getType(), getTypeId(), 0);
- output_function();
- }
- break;
-
- case 427:
-
-/* Line 1455 of yacc.c */
-#line 2613 "vtkParse.y"
- {preSig("void Set"); postSig("("); }
- break;
-
- case 428:
-
-/* Line 1455 of yacc.c */
-#line 2614 "vtkParse.y"
- {
- postSig("*);");
- currentFunction->Macro = "vtkSetObjectMacro";
- currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (7)].str));
- currentFunction->Comment = vtkstrdup(getComment());
- add_parameter(currentFunction, VTK_PARSE_OBJECT_PTR, getTypeId(), 0);
- set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
- output_function();
- }
- break;
-
- case 429:
-
-/* Line 1455 of yacc.c */
-#line 2623 "vtkParse.y"
- {postSig("*Get");}
- break;
-
- case 430:
-
-/* Line 1455 of yacc.c */
-#line 2624 "vtkParse.y"
- {markSig();}
- break;
-
- case 431:
-
-/* Line 1455 of yacc.c */
-#line 2624 "vtkParse.y"
- {swapSig();}
- break;
-
- case 432:
-
-/* Line 1455 of yacc.c */
-#line 2625 "vtkParse.y"
- {
- postSig("();");
- currentFunction->Macro = "vtkGetObjectMacro";
- currentFunction->Name = vtkstrcat("Get", (yyvsp[(4) - (9)].str));
- currentFunction->Comment = vtkstrdup(getComment());
- set_return(currentFunction, VTK_PARSE_OBJECT_PTR, getTypeId(), 0);
- output_function();
- }
- break;
-
- case 433:
-
-/* Line 1455 of yacc.c */
-#line 2634 "vtkParse.y"
- {
- currentFunction->Macro = "vtkBooleanMacro";
- currentFunction->Name = vtkstrcat((yyvsp[(3) - (6)].str), "On");
- currentFunction->Comment = vtkstrdup(getComment());
- currentFunction->Signature =
- vtkstrcat3("void ", currentFunction->Name, "();");
- set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
- output_function();
-
- currentFunction->Macro = "vtkBooleanMacro";
- currentFunction->Name = vtkstrcat((yyvsp[(3) - (6)].str), "Off");
- currentFunction->Comment = vtkstrdup(getComment());
- currentFunction->Signature =
- vtkstrcat3("void ", currentFunction->Name, "();");
- set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
- output_function();
- }
- break;
-
- case 434:
-
-/* Line 1455 of yacc.c */
-#line 2651 "vtkParse.y"
- {startSig(); markSig();}
- break;
-
- case 435:
-
-/* Line 1455 of yacc.c */
-#line 2652 "vtkParse.y"
- {
- chopSig();
- outputSetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 2);
- }
- break;
-
- case 436:
-
-/* Line 1455 of yacc.c */
-#line 2656 "vtkParse.y"
- {startSig(); markSig();}
- break;
-
- case 437:
-
-/* Line 1455 of yacc.c */
-#line 2657 "vtkParse.y"
- {
- chopSig();
- outputGetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 2);
- }
- break;
-
- case 438:
-
-/* Line 1455 of yacc.c */
-#line 2661 "vtkParse.y"
- {startSig(); markSig();}
- break;
-
- case 439:
-
-/* Line 1455 of yacc.c */
-#line 2662 "vtkParse.y"
- {
- chopSig();
- outputSetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 3);
- }
- break;
-
- case 440:
-
-/* Line 1455 of yacc.c */
-#line 2666 "vtkParse.y"
- {startSig(); markSig();}
- break;
-
- case 441:
-
-/* Line 1455 of yacc.c */
-#line 2667 "vtkParse.y"
- {
- chopSig();
- outputGetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 3);
- }
- break;
-
- case 442:
-
-/* Line 1455 of yacc.c */
-#line 2671 "vtkParse.y"
- {startSig(); markSig();}
- break;
-
- case 443:
-
-/* Line 1455 of yacc.c */
-#line 2672 "vtkParse.y"
- {
- chopSig();
- outputSetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 4);
- }
- break;
-
- case 444:
-
-/* Line 1455 of yacc.c */
-#line 2676 "vtkParse.y"
- {startSig(); markSig();}
- break;
-
- case 445:
-
-/* Line 1455 of yacc.c */
-#line 2677 "vtkParse.y"
- {
- chopSig();
- outputGetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 4);
- }
- break;
-
- case 446:
-
-/* Line 1455 of yacc.c */
-#line 2681 "vtkParse.y"
- {startSig(); markSig();}
- break;
-
- case 447:
-
-/* Line 1455 of yacc.c */
-#line 2682 "vtkParse.y"
- {
- chopSig();
- outputSetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 6);
- }
- break;
-
- case 448:
-
-/* Line 1455 of yacc.c */
-#line 2686 "vtkParse.y"
- {startSig(); markSig();}
- break;
-
- case 449:
-
-/* Line 1455 of yacc.c */
-#line 2687 "vtkParse.y"
- {
- chopSig();
- outputGetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 6);
- }
- break;
-
- case 450:
-
-/* Line 1455 of yacc.c */
-#line 2691 "vtkParse.y"
- {startSig(); markSig();}
- break;
-
- case 451:
-
-/* Line 1455 of yacc.c */
-#line 2693 "vtkParse.y"
- {
- const char *typeText;
- chopSig();
- typeText = copySig();
- currentFunction->Macro = "vtkSetVectorMacro";
- currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (9)].str));
- currentFunction->Signature =
- vtkstrcat7("void ", currentFunction->Name, "(", typeText,
- " a[", (yyvsp[(8) - (9)].str), "]);");
- currentFunction->Comment = vtkstrdup(getComment());
- add_parameter(currentFunction, (VTK_PARSE_POINTER | getType()),
- getTypeId(), (int)strtol((yyvsp[(8) - (9)].str), NULL, 0));
- set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
- output_function();
- }
- break;
-
- case 452:
-
-/* Line 1455 of yacc.c */
-#line 2708 "vtkParse.y"
- {startSig();}
- break;
-
- case 453:
-
-/* Line 1455 of yacc.c */
-#line 2710 "vtkParse.y"
- {
- chopSig();
- currentFunction->Macro = "vtkGetVectorMacro";
- currentFunction->Name = vtkstrcat("Get", (yyvsp[(3) - (9)].str));
- postSig(" *");
- postSig(currentFunction->Name);
- postSig("();");
- currentFunction->Comment = vtkstrdup(getComment());
- set_return(currentFunction, (VTK_PARSE_POINTER | getType()),
- getTypeId(), (int)strtol((yyvsp[(8) - (9)].str), NULL, 0));
- output_function();
- }
- break;
-
- case 454:
-
-/* Line 1455 of yacc.c */
-#line 2723 "vtkParse.y"
- {
- currentFunction->Macro = "vtkViewportCoordinateMacro";
- currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (4)].str), "Coordinate");
- currentFunction->Signature =
- vtkstrcat3("vtkCoordinate *", currentFunction->Name, "();");
- currentFunction->Comment = vtkstrdup(getComment());
- set_return(currentFunction, VTK_PARSE_OBJECT_PTR, "vtkCoordinate", 0);
- output_function();
-
- currentFunction->Macro = "vtkViewportCoordinateMacro";
- currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
- currentFunction->Signature =
- vtkstrcat3("void ", currentFunction->Name, "(double, double);");
- currentFunction->Comment = vtkstrdup(getComment());
- add_parameter(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
- add_parameter(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
- set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
- output_function();
-
- currentFunction->Macro = "vtkViewportCoordinateMacro";
- currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
- currentFunction->Signature =
- vtkstrcat3("void ", currentFunction->Name, "(double a[2]);");
- currentFunction->Comment = vtkstrdup(getComment());
- add_parameter(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 2);
- set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
- output_function();
-
- currentFunction->Macro = "vtkViewportCoordinateMacro";
- currentFunction->Name = vtkstrcat("Get", (yyvsp[(3) - (4)].str));
- currentFunction->Signature =
- vtkstrcat3("double *", currentFunction->Name, "();");
- currentFunction->Comment = vtkstrdup(getComment());
- set_return(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 2);
- output_function();
- }
- break;
-
- case 455:
-
-/* Line 1455 of yacc.c */
-#line 2760 "vtkParse.y"
- {
- currentFunction->Macro = "vtkWorldCoordinateMacro";
- currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (4)].str), "Coordinate");
- currentFunction->Signature =
- vtkstrcat3("vtkCoordinate *", currentFunction->Name, "();");
- currentFunction->Comment = vtkstrdup(getComment());
- set_return(currentFunction, VTK_PARSE_OBJECT_PTR, "vtkCoordinate", 0);
- output_function();
-
- currentFunction->Macro = "vtkWorldCoordinateMacro";
- currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
- currentFunction->Signature =
- vtkstrcat3("void ", currentFunction->Name, "(double, double, double);");
- currentFunction->Comment = vtkstrdup(getComment());
- add_parameter(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
- add_parameter(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
- add_parameter(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
- set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
- output_function();
-
- currentFunction->Macro = "vtkWorldCoordinateMacro";
- currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
- currentFunction->Signature =
- vtkstrcat3("void ", currentFunction->Name, "(double a[3]);");
- currentFunction->Comment = vtkstrdup(getComment());
- add_parameter(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 3);
- set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
- output_function();
-
- currentFunction->Macro = "vtkWorldCoordinateMacro";
- currentFunction->Name = vtkstrcat("Get", (yyvsp[(3) - (4)].str));
- currentFunction->Signature =
- vtkstrcat3("double *", currentFunction->Name, "();");
- currentFunction->Comment = vtkstrdup(getComment());
- set_return(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 3);
- output_function();
- }
- break;
-
- case 456:
-
-/* Line 1455 of yacc.c */
-#line 2798 "vtkParse.y"
- {
- currentFunction->Macro = "vtkTypeMacro";
- currentFunction->Name = "GetClassName";
- currentFunction->Signature = "const char *GetClassName();";
- currentFunction->Comment = vtkstrdup(getComment());
- set_return(currentFunction, (VTK_PARSE_CONST | VTK_PARSE_CHAR_PTR),
- "char", 0);
- output_function();
-
- currentFunction->Macro = "vtkTypeMacro";
- currentFunction->Name = "IsA";
- currentFunction->Signature = "int IsA(const char *name);";
- currentFunction->Comment = vtkstrdup(getComment());
- add_parameter(currentFunction, (VTK_PARSE_CONST | VTK_PARSE_CHAR_PTR),
- "char", 0);
- set_return(currentFunction, VTK_PARSE_INT, "int", 0);
- output_function();
-
- currentFunction->Macro = "vtkTypeMacro";
- currentFunction->Name = "NewInstance";
- currentFunction->Signature = vtkstrcat((yyvsp[(3) - (7)].str), " *NewInstance();");
- currentFunction->Comment = vtkstrdup(getComment());
- set_return(currentFunction, VTK_PARSE_OBJECT_PTR, (yyvsp[(3) - (7)].str), 0);
- output_function();
-
- currentFunction->Macro = "vtkTypeMacro";
- currentFunction->Name = "SafeDownCast";
- currentFunction->Signature =
- vtkstrcat((yyvsp[(3) - (7)].str), " *SafeDownCast(vtkObject* o);");
- currentFunction->Comment = vtkstrdup(getComment());
- add_parameter(currentFunction, VTK_PARSE_OBJECT_PTR, "vtkObject", 0);
- set_return(currentFunction, (VTK_PARSE_STATIC | VTK_PARSE_OBJECT_PTR),
- (yyvsp[(3) - (7)].str), 0);
- output_function();
- }
- break;
-
- case 459:
-
-/* Line 1455 of yacc.c */
-#line 2842 "vtkParse.y"
- { (yyval.str) = "()"; }
- break;
-
- case 460:
-
-/* Line 1455 of yacc.c */
-#line 2843 "vtkParse.y"
- { (yyval.str) = "[]"; }
- break;
-
- case 461:
-
-/* Line 1455 of yacc.c */
-#line 2844 "vtkParse.y"
- { (yyval.str) = " new[]"; }
- break;
-
- case 462:
-
-/* Line 1455 of yacc.c */
-#line 2845 "vtkParse.y"
- { (yyval.str) = " delete[]"; }
- break;
-
- case 463:
-
-/* Line 1455 of yacc.c */
-#line 2846 "vtkParse.y"
- { (yyval.str) = "<"; }
- break;
-
- case 464:
-
-/* Line 1455 of yacc.c */
-#line 2847 "vtkParse.y"
- { (yyval.str) = ">"; }
- break;
-
- case 465:
-
-/* Line 1455 of yacc.c */
-#line 2848 "vtkParse.y"
- { (yyval.str) = ","; }
- break;
-
- case 466:
-
-/* Line 1455 of yacc.c */
-#line 2849 "vtkParse.y"
- { (yyval.str) = "="; }
- break;
-
- case 468:
-
-/* Line 1455 of yacc.c */
-#line 2853 "vtkParse.y"
- { (yyval.str) = "%"; }
- break;
-
- case 469:
-
-/* Line 1455 of yacc.c */
-#line 2854 "vtkParse.y"
- { (yyval.str) = "*"; }
- break;
-
- case 470:
-
-/* Line 1455 of yacc.c */
-#line 2855 "vtkParse.y"
- { (yyval.str) = "/"; }
- break;
-
- case 471:
-
-/* Line 1455 of yacc.c */
-#line 2856 "vtkParse.y"
- { (yyval.str) = "-"; }
- break;
-
- case 472:
-
-/* Line 1455 of yacc.c */
-#line 2857 "vtkParse.y"
- { (yyval.str) = "+"; }
- break;
-
- case 473:
-
-/* Line 1455 of yacc.c */
-#line 2858 "vtkParse.y"
- { (yyval.str) = "!"; }
- break;
-
- case 474:
-
-/* Line 1455 of yacc.c */
-#line 2859 "vtkParse.y"
- { (yyval.str) = "~"; }
- break;
-
- case 475:
-
-/* Line 1455 of yacc.c */
-#line 2860 "vtkParse.y"
- { (yyval.str) = "&"; }
- break;
-
- case 476:
-
-/* Line 1455 of yacc.c */
-#line 2861 "vtkParse.y"
- { (yyval.str) = "|"; }
- break;
-
- case 477:
-
-/* Line 1455 of yacc.c */
-#line 2862 "vtkParse.y"
- { (yyval.str) = "^"; }
- break;
-
- case 478:
-
-/* Line 1455 of yacc.c */
-#line 2863 "vtkParse.y"
- { (yyval.str) = " new"; }
- break;
-
- case 479:
-
-/* Line 1455 of yacc.c */
-#line 2864 "vtkParse.y"
- { (yyval.str) = " delete"; }
- break;
-
- case 480:
-
-/* Line 1455 of yacc.c */
-#line 2865 "vtkParse.y"
- { (yyval.str) = "<<="; }
- break;
-
- case 481:
-
-/* Line 1455 of yacc.c */
-#line 2866 "vtkParse.y"
- { (yyval.str) = ">>="; }
- break;
-
- case 482:
-
-/* Line 1455 of yacc.c */
-#line 2867 "vtkParse.y"
- { (yyval.str) = "<<"; }
- break;
-
- case 483:
-
-/* Line 1455 of yacc.c */
-#line 2868 "vtkParse.y"
- { (yyval.str) = ">>"; }
- break;
-
- case 484:
-
-/* Line 1455 of yacc.c */
-#line 2869 "vtkParse.y"
- { (yyval.str) = ".*"; }
- break;
-
- case 485:
-
-/* Line 1455 of yacc.c */
-#line 2870 "vtkParse.y"
- { (yyval.str) = "->*"; }
- break;
-
- case 486:
-
-/* Line 1455 of yacc.c */
-#line 2871 "vtkParse.y"
- { (yyval.str) = "->"; }
- break;
-
- case 487:
-
-/* Line 1455 of yacc.c */
-#line 2872 "vtkParse.y"
- { (yyval.str) = "+="; }
- break;
-
- case 488:
-
-/* Line 1455 of yacc.c */
-#line 2873 "vtkParse.y"
- { (yyval.str) = "-="; }
- break;
-
- case 489:
-
-/* Line 1455 of yacc.c */
-#line 2874 "vtkParse.y"
- { (yyval.str) = "*="; }
- break;
-
- case 490:
-
-/* Line 1455 of yacc.c */
-#line 2875 "vtkParse.y"
- { (yyval.str) = "/="; }
- break;
-
- case 491:
-
-/* Line 1455 of yacc.c */
-#line 2876 "vtkParse.y"
- { (yyval.str) = "%="; }
- break;
-
- case 492:
-
-/* Line 1455 of yacc.c */
-#line 2877 "vtkParse.y"
- { (yyval.str) = "++"; }
- break;
-
- case 493:
-
-/* Line 1455 of yacc.c */
-#line 2878 "vtkParse.y"
- { (yyval.str) = "--"; }
- break;
-
- case 494:
-
-/* Line 1455 of yacc.c */
-#line 2879 "vtkParse.y"
- { (yyval.str) = "&="; }
- break;
-
- case 495:
-
-/* Line 1455 of yacc.c */
-#line 2880 "vtkParse.y"
- { (yyval.str) = "|="; }
- break;
-
- case 496:
-
-/* Line 1455 of yacc.c */
-#line 2881 "vtkParse.y"
- { (yyval.str) = "^="; }
- break;
-
- case 497:
-
-/* Line 1455 of yacc.c */
-#line 2882 "vtkParse.y"
- { (yyval.str) = "&&"; }
- break;
-
- case 498:
-
-/* Line 1455 of yacc.c */
-#line 2883 "vtkParse.y"
- { (yyval.str) = "||"; }
- break;
-
- case 499:
-
-/* Line 1455 of yacc.c */
-#line 2884 "vtkParse.y"
- { (yyval.str) = "=="; }
- break;
-
- case 500:
-
-/* Line 1455 of yacc.c */
-#line 2885 "vtkParse.y"
- { (yyval.str) = "!="; }
- break;
-
- case 501:
-
-/* Line 1455 of yacc.c */
-#line 2886 "vtkParse.y"
- { (yyval.str) = "<="; }
- break;
-
- case 502:
-
-/* Line 1455 of yacc.c */
-#line 2887 "vtkParse.y"
- { (yyval.str) = ">="; }
- break;
-
- case 503:
-
-/* Line 1455 of yacc.c */
-#line 2890 "vtkParse.y"
- { (yyval.str) = "typedef"; }
- break;
-
- case 504:
-
-/* Line 1455 of yacc.c */
-#line 2891 "vtkParse.y"
- { (yyval.str) = "typename"; }
- break;
-
- case 505:
-
-/* Line 1455 of yacc.c */
-#line 2892 "vtkParse.y"
- { (yyval.str) = "class"; }
- break;
-
- case 506:
-
-/* Line 1455 of yacc.c */
-#line 2893 "vtkParse.y"
- { (yyval.str) = "struct"; }
- break;
-
- case 507:
-
-/* Line 1455 of yacc.c */
-#line 2894 "vtkParse.y"
- { (yyval.str) = "union"; }
- break;
-
- case 508:
-
-/* Line 1455 of yacc.c */
-#line 2895 "vtkParse.y"
- { (yyval.str) = "template"; }
- break;
-
- case 509:
-
-/* Line 1455 of yacc.c */
-#line 2896 "vtkParse.y"
- { (yyval.str) = "public"; }
- break;
-
- case 510:
-
-/* Line 1455 of yacc.c */
-#line 2897 "vtkParse.y"
- { (yyval.str) = "protected"; }
- break;
-
- case 511:
-
-/* Line 1455 of yacc.c */
-#line 2898 "vtkParse.y"
- { (yyval.str) = "private"; }
- break;
-
- case 512:
-
-/* Line 1455 of yacc.c */
-#line 2899 "vtkParse.y"
- { (yyval.str) = "const"; }
- break;
-
- case 513:
-
-/* Line 1455 of yacc.c */
-#line 2900 "vtkParse.y"
- { (yyval.str) = "static"; }
- break;
-
- case 514:
-
-/* Line 1455 of yacc.c */
-#line 2901 "vtkParse.y"
- { (yyval.str) = "inline"; }
- break;
-
- case 515:
-
-/* Line 1455 of yacc.c */
-#line 2902 "vtkParse.y"
- { (yyval.str) = "virtual"; }
- break;
-
- case 516:
-
-/* Line 1455 of yacc.c */
-#line 2903 "vtkParse.y"
- { (yyval.str) = "extern"; }
- break;
-
- case 517:
-
-/* Line 1455 of yacc.c */
-#line 2904 "vtkParse.y"
- { (yyval.str) = "namespace"; }
- break;
-
- case 518:
-
-/* Line 1455 of yacc.c */
-#line 2905 "vtkParse.y"
- { (yyval.str) = "operator"; }
- break;
-
- case 519:
-
-/* Line 1455 of yacc.c */
-#line 2906 "vtkParse.y"
- { (yyval.str) = "enum"; }
- break;
-
- case 520:
-
-/* Line 1455 of yacc.c */
-#line 2907 "vtkParse.y"
- { (yyval.str) = "throw"; }
- break;
-
- case 521:
-
-/* Line 1455 of yacc.c */
-#line 2908 "vtkParse.y"
- { (yyval.str) = "const_cast"; }
- break;
-
- case 522:
-
-/* Line 1455 of yacc.c */
-#line 2909 "vtkParse.y"
- { (yyval.str) = "dynamic_cast"; }
- break;
-
- case 523:
-
-/* Line 1455 of yacc.c */
-#line 2910 "vtkParse.y"
- { (yyval.str) = "static_cast"; }
- break;
-
- case 524:
-
-/* Line 1455 of yacc.c */
-#line 2911 "vtkParse.y"
- { (yyval.str) = "reinterpret_cast"; }
- break;
-
- case 537:
-
-/* Line 1455 of yacc.c */
-#line 2935 "vtkParse.y"
- {
- if ((((yyvsp[(1) - (1)].str))[0] == '+' || ((yyvsp[(1) - (1)].str))[0] == '-' ||
- ((yyvsp[(1) - (1)].str))[0] == '*' || ((yyvsp[(1) - (1)].str))[0] == '&') &&
- ((yyvsp[(1) - (1)].str))[1] == '\0')
- {
- int c1 = 0;
- size_t l;
- const char *cp;
- chopSig();
- cp = getSig();
- l = getSigLength();
- if (l != 0) { c1 = cp[l-1]; }
- if (c1 != 0 && c1 != '(' && c1 != '[' && c1 != '=')
- {
- postSig(" ");
- }
- postSig((yyvsp[(1) - (1)].str));
- if ((c1 >= 'A' && c1 <= 'Z') || (c1 >= 'a' && c1 <= 'z') ||
- (c1 >= '0' && c1 <= '9') || c1 == '_' || c1 == '\'' ||
- c1 == '\"' || c1 == ')' || c1 == ']')
- {
- postSig(" ");
- }
- }
- else
- {
- postSig((yyvsp[(1) - (1)].str));
- postSig(" ");
- }
- }
- break;
-
- case 538:
-
-/* Line 1455 of yacc.c */
-#line 2965 "vtkParse.y"
- { postSig(":"); postSig(" "); }
- break;
-
- case 539:
-
-/* Line 1455 of yacc.c */
-#line 2965 "vtkParse.y"
- { postSig("."); }
- break;
-
- case 540:
-
-/* Line 1455 of yacc.c */
-#line 2966 "vtkParse.y"
- { chopSig(); postSig("::"); }
- break;
-
- case 541:
-
-/* Line 1455 of yacc.c */
-#line 2967 "vtkParse.y"
- { postSig((yyvsp[(1) - (1)].str)); postSig(" "); }
- break;
-
- case 542:
-
-/* Line 1455 of yacc.c */
-#line 2968 "vtkParse.y"
- { postSig((yyvsp[(1) - (1)].str)); postSig(" "); }
- break;
-
- case 544:
-
-/* Line 1455 of yacc.c */
-#line 2971 "vtkParse.y"
- {
- int c1 = 0;
- size_t l;
- const char *cp;
- chopSig();
- cp = getSig();
- l = getSigLength();
- if (l != 0) { c1 = cp[l-1]; }
- while (((c1 >= 'A' && c1 <= 'Z') || (c1 >= 'a' && c1 <= 'z') ||
- (c1 >= '0' && c1 <= '9') || c1 == '_') && l != 0)
- {
- --l;
- c1 = cp[l-1];
- }
- if (l < 2 || cp[l-1] != ':' || cp[l-2] != ':')
- {
- cp = add_const_scope(&cp[l]);
- resetSig(l);
- postSig(cp);
- }
- }
- break;
-
- case 548:
-
-/* Line 1455 of yacc.c */
-#line 2997 "vtkParse.y"
- { postSig("< "); }
- break;
-
- case 549:
-
-/* Line 1455 of yacc.c */
-#line 2998 "vtkParse.y"
- { postSig("> "); }
- break;
-
- case 551:
-
-/* Line 1455 of yacc.c */
-#line 3001 "vtkParse.y"
- { postSig("= "); }
- break;
-
- case 552:
-
-/* Line 1455 of yacc.c */
-#line 3002 "vtkParse.y"
- { chopSig(); postSig(", "); }
- break;
-
- case 554:
-
-/* Line 1455 of yacc.c */
-#line 3005 "vtkParse.y"
- { chopSig(); postSig(";"); }
- break;
-
- case 562:
-
-/* Line 1455 of yacc.c */
-#line 3019 "vtkParse.y"
- { postSig("= "); }
- break;
-
- case 563:
-
-/* Line 1455 of yacc.c */
-#line 3020 "vtkParse.y"
- { chopSig(); postSig(", "); }
- break;
-
- case 564:
-
-/* Line 1455 of yacc.c */
-#line 3024 "vtkParse.y"
- {
- chopSig();
- if (getSig()[getSigLength()-1] == '<') { postSig(" "); }
- postSig("<");
- }
- break;
-
- case 565:
-
-/* Line 1455 of yacc.c */
-#line 3030 "vtkParse.y"
- {
- chopSig();
- if (getSig()[getSigLength()-1] == '>') { postSig(" "); }
- postSig("> ");
- }
- break;
-
- case 566:
-
-/* Line 1455 of yacc.c */
-#line 3037 "vtkParse.y"
- { postSig("["); }
- break;
-
- case 567:
-
-/* Line 1455 of yacc.c */
-#line 3038 "vtkParse.y"
- { chopSig(); postSig("] "); }
- break;
-
- case 568:
-
-/* Line 1455 of yacc.c */
-#line 3041 "vtkParse.y"
- { postSig("("); }
- break;
-
- case 569:
-
-/* Line 1455 of yacc.c */
-#line 3042 "vtkParse.y"
- { chopSig(); postSig(") "); }
- break;
-
- case 570:
-
-/* Line 1455 of yacc.c */
-#line 3043 "vtkParse.y"
- { postSig("("); postSig((yyvsp[(1) - (1)].str)); postSig("*"); }
- break;
-
- case 571:
-
-/* Line 1455 of yacc.c */
-#line 3044 "vtkParse.y"
- { chopSig(); postSig(") "); }
- break;
-
- case 572:
-
-/* Line 1455 of yacc.c */
-#line 3045 "vtkParse.y"
- { postSig("("); postSig((yyvsp[(1) - (1)].str)); postSig("&"); }
- break;
-
- case 573:
-
-/* Line 1455 of yacc.c */
-#line 3046 "vtkParse.y"
- { chopSig(); postSig(") "); }
- break;
-
- case 574:
-
-/* Line 1455 of yacc.c */
-#line 3049 "vtkParse.y"
- { postSig("{ "); }
- break;
-
- case 575:
-
-/* Line 1455 of yacc.c */
-#line 3049 "vtkParse.y"
- { postSig("} "); }
- break;
-
-
-
-/* Line 1455 of yacc.c */
-#line 7941 "vtkParse.tab.c"
- default: break;
- }
- YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
- YYPOPSTACK (yylen);
- yylen = 0;
- YY_STACK_PRINT (yyss, yyssp);
-
- *++yyvsp = yyval;
-
- /* Now `shift' the result of the reduction. Determine what state
- that goes to, based on the state we popped back to and the rule
- number reduced by. */
-
- yyn = yyr1[yyn];
-
- yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
- if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTOKENS];
-
- goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
- /* If not already recovering from an error, report this error. */
- if (!yyerrstatus)
- {
- ++yynerrs;
-#if ! YYERROR_VERBOSE
- yyerror (YY_("syntax error"));
-#else
- {
- YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
- if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
- {
- YYSIZE_T yyalloc = 2 * yysize;
- if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
- yyalloc = YYSTACK_ALLOC_MAXIMUM;
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
- yymsg = (char *) YYSTACK_ALLOC (yyalloc);
- if (yymsg)
- yymsg_alloc = yyalloc;
- else
- {
- yymsg = yymsgbuf;
- yymsg_alloc = sizeof yymsgbuf;
- }
- }
-
- if (0 < yysize && yysize <= yymsg_alloc)
- {
- (void) yysyntax_error (yymsg, yystate, yychar);
- yyerror (yymsg);
- }
- else
- {
- yyerror (YY_("syntax error"));
- if (yysize != 0)
- goto yyexhaustedlab;
- }
- }
-#endif
- }
-
-
-
- if (yyerrstatus == 3)
- {
- /* If just tried and failed to reuse lookahead token after an
- error, discard it. */
-
- if (yychar <= YYEOF)
- {
- /* Return failure if at end of input. */
- if (yychar == YYEOF)
- YYABORT;
- }
- else
- {
- yydestruct ("Error: discarding",
- yytoken, &yylval);
- yychar = YYEMPTY;
- }
- }
-
- /* Else will try to reuse lookahead token after shifting the error
- token. */
- goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR. |
-`---------------------------------------------------*/
-yyerrorlab:
-
- /* Pacify compilers like GCC when the user code never invokes
- YYERROR and the label yyerrorlab therefore never appears in user
- code. */
- if (/*CONSTCOND*/ 0)
- goto yyerrorlab;
-
- /* Do not reclaim the symbols of the rule which action triggered
- this YYERROR. */
- YYPOPSTACK (yylen);
- yylen = 0;
- YY_STACK_PRINT (yyss, yyssp);
- yystate = *yyssp;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR. |
-`-------------------------------------------------------------*/
-yyerrlab1:
- yyerrstatus = 3; /* Each real token shifted decrements this. */
-
- for (;;)
- {
- yyn = yypact[yystate];
- if (yyn != YYPACT_NINF)
- {
- yyn += YYTERROR;
- if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
- {
- yyn = yytable[yyn];
- if (0 < yyn)
- break;
- }
- }
-
- /* Pop the current state because it cannot handle the error token. */
- if (yyssp == yyss)
- YYABORT;
-
-
- yydestruct ("Error: popping",
- yystos[yystate], yyvsp);
- YYPOPSTACK (1);
- yystate = *yyssp;
- YY_STACK_PRINT (yyss, yyssp);
- }
-
- *++yyvsp = yylval;
-
-
- /* Shift the error token. */
- YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
- yystate = yyn;
- goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here. |
-`-------------------------------------*/
-yyacceptlab:
- yyresult = 0;
- goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here. |
-`-----------------------------------*/
-yyabortlab:
- yyresult = 1;
- goto yyreturn;
-
-#if !defined(yyoverflow) || YYERROR_VERBOSE
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here. |
-`-------------------------------------------------*/
-yyexhaustedlab:
- yyerror (YY_("memory exhausted"));
- yyresult = 2;
- /* Fall through. */
-#endif
-
-yyreturn:
- if (yychar != YYEMPTY)
- yydestruct ("Cleanup: discarding lookahead",
- yytoken, &yylval);
- /* Do not reclaim the symbols of the rule which action triggered
- this YYABORT or YYACCEPT. */
- YYPOPSTACK (yylen);
- YY_STACK_PRINT (yyss, yyssp);
- while (yyssp != yyss)
- {
- yydestruct ("Cleanup: popping",
- yystos[*yyssp], yyvsp);
- YYPOPSTACK (1);
- }
-#ifndef yyoverflow
- if (yyss != yyssa)
- YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
-#endif
- /* Make sure YYID is used. */
- return YYID (yyresult);
-}
-
-
-
-/* Line 1675 of yacc.c */
-#line 3088 "vtkParse.y"
-
-#include <string.h>
-#include "lex.yy.c"
-
-/* fill in the type name if none given */
-const char *type_class(unsigned int type, const char *classname)
-{
- if (classname)
- {
- if (classname[0] == '\0')
- {
- switch ((type & VTK_PARSE_BASE_TYPE))
- {
- case VTK_PARSE_VOID:
- classname = "void";
- break;
- case VTK_PARSE_BOOL:
- classname = "bool";
- break;
- case VTK_PARSE_FLOAT:
- classname = "float";
- break;
- case VTK_PARSE_DOUBLE:
- classname = "double";
- break;
- case VTK_PARSE_LONG_DOUBLE:
- classname = "long double";
- break;
- case VTK_PARSE_CHAR:
- classname = "char";
- break;
- case VTK_PARSE_UNSIGNED_CHAR:
- classname = "unsigned char";
- break;
- case VTK_PARSE_SIGNED_CHAR:
- classname = "signed char";
- break;
- case VTK_PARSE_SHORT:
- classname = "short";
- break;
- case VTK_PARSE_UNSIGNED_SHORT:
- classname = "unsigned short";
- break;
- case VTK_PARSE_INT:
- classname = "int";
- break;
- case VTK_PARSE_UNSIGNED_INT:
- classname = "unsigned int";
- break;
- case VTK_PARSE_LONG:
- classname = "long";
- break;
- case VTK_PARSE_UNSIGNED_LONG:
- classname = "unsigned long";
- break;
- case VTK_PARSE_LONG_LONG:
- classname = "long long";
- break;
- case VTK_PARSE_UNSIGNED_LONG_LONG:
- classname = "unsigned long long";
- break;
- case VTK_PARSE___INT64:
- classname = "__int64";
- break;
- case VTK_PARSE_UNSIGNED___INT64:
- classname = "unsigned __int64";
- break;
- }
- }
- }
-
- return classname;
-}
-
-/* check whether this is the class we are looking for */
-void start_class(const char *classname, int is_struct_or_union)
-{
- ClassInfo *outerClass = currentClass;
- pushClass();
- currentClass = (ClassInfo *)malloc(sizeof(ClassInfo));
- vtkParse_InitClass(currentClass);
- currentClass->Name = classname;
- if (is_struct_or_union == 1)
- {
- currentClass->ItemType = VTK_STRUCT_INFO;
- }
- if (is_struct_or_union == 2)
- {
- currentClass->ItemType = VTK_UNION_INFO;
- }
-
- if (classname && classname[strlen(classname)-1] != '>')
- {
- if (outerClass)
- {
- vtkParse_AddClassToClass(outerClass, currentClass);
- }
- else
- {
- vtkParse_AddClassToNamespace(currentNamespace, currentClass);
- }
- }
-
- /* template information */
- if (currentTemplate)
- {
- currentClass->Template = currentTemplate;
- currentTemplate = NULL;
- }
-
- /* comment, if any */
- currentClass->Comment = vtkstrdup(getComment());
-
- access_level = VTK_ACCESS_PRIVATE;
- if (is_struct_or_union)
- {
- access_level = VTK_ACCESS_PUBLIC;
- }
-
- vtkParse_InitFunction(currentFunction);
- startSig();
- clearComment();
-}
-
-/* reject the class */
-void reject_class(const char *classname, int is_struct_or_union)
-{
- static ClassInfo static_class;
-
- pushClass();
- currentClass = &static_class;
- currentClass->Name = classname;
- vtkParse_InitClass(currentClass);
-
- access_level = VTK_ACCESS_PRIVATE;
- if (is_struct_or_union)
- {
- access_level = VTK_ACCESS_PUBLIC;
- }
-
- vtkParse_InitFunction(currentFunction);
- startSig();
- clearComment();
-}
-
-/* reached the end of a class definition */
-void end_class()
-{
- /* add default constructors */
- vtkParse_AddDefaultConstructors(currentClass, data->Strings);
-
- popClass();
-}
-
-/* add a base class to the specified class */
-void add_base_class(ClassInfo *cls, const char *name, int al, int virt)
-{
- if (cls && al == VTK_ACCESS_PUBLIC && virt == 0)
- {
- vtkParse_AddStringToArray(&cls->SuperClasses,
- &cls->NumberOfSuperClasses,
- name);
- }
-}
-
-/* add a using declaration or directive */
-void add_using(const char *name, int is_namespace)
-{
- size_t i;
- UsingInfo *item;
-
- item = (UsingInfo *)malloc(sizeof(UsingInfo));
- vtkParse_InitUsing(item);
- if (is_namespace)
- {
- item->Name = NULL;
- item->Scope = name;
- }
- else
- {
- i = strlen(name);
- while (i > 0 && name[i-1] != ':') { i--; }
- item->Name = vtkstrdup(&name[i]);
- while (i > 0 && name[i-1] == ':') { i--; }
- item->Scope = vtkstrndup(name, i);
- }
-
- if (currentClass)
- {
- vtkParse_AddUsingToClass(currentClass, item);
- }
- else
- {
- vtkParse_AddUsingToNamespace(currentNamespace, item);
- }
-}
-
-/* start a new enum */
-void start_enum(const char *name)
-{
- EnumInfo *item;
-
- currentEnumName = "int";
- currentEnumValue = NULL;
- if (name)
- {
- currentEnumName = name;
- item = (EnumInfo *)malloc(sizeof(EnumInfo));
- vtkParse_InitEnum(item);
- item->Name = name;
- item->Access = access_level;
- if (currentClass)
- {
- vtkParse_AddEnumToClass(currentClass, item);
- }
- else
- {
- vtkParse_AddEnumToNamespace(currentNamespace, item);
- }
- }
-}
-
-/* finish the enum */
-void end_enum()
-{
- currentEnumName = NULL;
- currentEnumValue = NULL;
-}
-
-/* add a constant to the enum */
-void add_enum(const char *name, const char *value)
-{
- static char text[2048];
- int i;
- long j;
-
- if (value)
- {
- strcpy(text, value);
- currentEnumValue = value;
- }
- else if (currentEnumValue)
- {
- i = strlen(text);
- while (i > 0 && text[i-1] >= '0' &&
- text[i-1] <= '9') { i--; }
-
- if (i == 0 || text[i-1] == ' ' ||
- (i > 1 && text[i-2] == ' ' &&
- (text[i-1] == '-' || text[i-1] == '+')))
- {
- if (i > 0 && text[i-1] != ' ')
- {
- i--;
- }
- j = (int)strtol(&text[i], NULL, 10);
- sprintf(&text[i], "%li", j+1);
- }
- else
- {
- i = strlen(text);
- strcpy(&text[i], " + 1");
- }
- currentEnumValue = vtkstrdup(text);
- }
- else
- {
- strcpy(text, "0");
- currentEnumValue = "0";
- }
-
- add_constant(name, currentEnumValue, VTK_PARSE_INT, currentEnumName, 2);
-}
-
-/* for a macro constant, guess the constant type, doesn't do any math */
-unsigned int guess_constant_type(const char *valstring)
-{
- unsigned int valtype = 0;
- size_t k;
- int i;
- int is_name = 0;
-
- if (valstring == NULL || valstring[0] == '\0')
- {
- return 0;
- }
-
- if (valstring[0] < '0' || valstring[0] > '9')
- {
- k = 0;
- while ((valstring[k] >= '0' && valstring[k] <= '9') ||
- (valstring[k] >= 'a' && valstring[k] <= 'z') ||
- (valstring[k] >= 'A' && valstring[k] <= 'Z') ||
- valstring[k] == '_') { k++; }
-
- if (valstring[k] == '\0')
- {
- is_name = 1;
- }
- }
-
- if (strcmp(valstring, "true") == 0 || strcmp(valstring, "false") == 0)
- {
- return VTK_PARSE_BOOL;
- }
-
- if (valstring[0] == '\'')
- {
- return VTK_PARSE_CHAR;
- }
-
- if (strncmp(valstring, "VTK_TYPE_CAST(", 14) == 0 ||
- strncmp(valstring, "static_cast<", 12) == 0 ||
- strncmp(valstring, "const_cast<", 11) == 0 ||
- strncmp(valstring, "(", 1) == 0)
- {
- const char *cp;
- size_t n;
- int is_unsigned = 0;
-
- cp = &valstring[1];
- if (valstring[0] == 'c')
- {
- cp = &valstring[11];
- }
- else if (valstring[0] == 's')
- {
- cp = &valstring[12];
- }
- else if (valstring[0] == 'V')
- {
- cp = &valstring[14];
- }
-
- if (strncmp(cp, "unsigned ", 9) == 0)
- {
- is_unsigned = 1;
- cp += 9;
- }
-
- n = strlen(cp);
- for (k = 0; k < n && cp[k] != ',' &&
- cp[k] != '>' && cp[k] != ')'; k++) { ; };
-
- if (strncmp(cp, "long long", k) == 0)
- { valtype = VTK_PARSE_LONG_LONG; }
- else if (strncmp(cp, "__int64", k) == 0)
- { valtype = VTK_PARSE___INT64; }
- else if (strncmp(cp, "long", k) == 0)
- { valtype = VTK_PARSE_LONG; }
- else if (strncmp(cp, "short", k) == 0)
- { valtype = VTK_PARSE_SHORT; }
- else if (strncmp(cp, "signed char", k) == 0)
- { valtype = VTK_PARSE_SIGNED_CHAR; }
- else if (strncmp(cp, "char", k) == 0)
- { valtype = VTK_PARSE_CHAR; }
- else if (strncmp(cp, "int", k) == 0 ||
- strncmp(cp, "signed", k) == 0)
- { valtype = VTK_PARSE_INT; }
- else if (strncmp(cp, "float", k) == 0)
- { valtype = VTK_PARSE_FLOAT; }
- else if (strncmp(cp, "double", k) == 0)
- { valtype = VTK_PARSE_DOUBLE; }
- else if (strncmp(cp, "char *", k) == 0)
- { valtype = VTK_PARSE_CHAR_PTR; }
-
- if (is_unsigned)
- {
- if (valtype == 0) { valtype = VTK_PARSE_INT; }
- valtype = (valtype | VTK_PARSE_UNSIGNED);
- }
-
- if (valtype != 0)
- {
- return valtype;
- }
- }
-
- /* check the current scope */
- if (is_name)
- {
- NamespaceInfo *scope = currentNamespace;
- if (namespaceDepth > 0)
- {
- scope = namespaceStack[0];
- }
-
- for (i = 0; i < scope->NumberOfConstants; i++)
- {
- if (strcmp(scope->Constants[i]->Name, valstring) == 0)
- {
- return scope->Constants[i]->Type;
- }
- }
- }
-
- /* check for preprocessor macros */
- if (is_name)
- {
- MacroInfo *macro = vtkParsePreprocess_GetMacro(
- preprocessor, valstring);
-
- if (macro && !macro->IsFunction)
- {
- return guess_constant_type(macro->Definition);
- }
- }
-
- /* fall back to the preprocessor to evaluate the constant */
- {
- preproc_int_t val;
- int is_unsigned;
- int result = vtkParsePreprocess_EvaluateExpression(
- preprocessor, valstring, &val, &is_unsigned);
-
- if (result == VTK_PARSE_PREPROC_DOUBLE)
- {
- return VTK_PARSE_DOUBLE;
- }
- else if (result == VTK_PARSE_PREPROC_FLOAT)
- {
- return VTK_PARSE_FLOAT;
- }
- else if (result == VTK_PARSE_PREPROC_STRING)
- {
- return VTK_PARSE_CHAR_PTR;
- }
- else if (result == VTK_PARSE_OK)
- {
- if (is_unsigned)
- {
- if ((preproc_uint_t)val <= VTK_UNSIGNED_INT_MAX)
- {
- return VTK_PARSE_UNSIGNED_INT;
- }
- else
- {
-#if defined(VTK_TYPE_USE_LONG_LONG)
- return VTK_PARSE_UNSIGNED_LONG_LONG;
-#elif defined(VTK_TYPE_USE___INT64)
- return VTK_PARSE_UNSIGNED___INT64;
-#else
- return VTK_PARSE_UNSIGNED_LONG;
-#endif
- }
- }
- else
- {
- if (val >= VTK_INT_MIN && val <= VTK_INT_MAX)
- {
- return VTK_PARSE_INT;
- }
- else
- {
-#if defined(VTK_TYPE_USE_LONG_LONG)
- return VTK_PARSE_LONG_LONG;
-#elif defined(VTK_TYPE_USE___INT64)
- return VTK_PARSE___INT64;
-#else
- return VTK_PARSE_LONG;
-#endif
- }
- }
- }
- }
-
- return 0;
-}
-
-/* add a constant to the current class or namespace */
-void add_constant(const char *name, const char *value,
- unsigned int type, const char *typeclass, int flag)
-{
- ValueInfo *con = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_InitValue(con);
- con->ItemType = VTK_CONSTANT_INFO;
- con->Name = name;
- con->Value = value;
- con->Type = type;
- con->Class = type_class(type, typeclass);
-
- if (flag == 2)
- {
- con->IsEnum = 1;
- }
-
- if (flag == 1)
- {
- /* actually a macro, need to guess the type */
- ValueInfo **cptr = data->Contents->Constants;
- int n = data->Contents->NumberOfConstants;
- int i;
-
- con->Access = VTK_ACCESS_PUBLIC;
- if (con->Type == 0)
- {
- con->Type = guess_constant_type(con->Value);
- }
-
- for (i = 0; i < n; i++)
- {
- if (strcmp(cptr[i]->Name, con->Name) == 0)
- {
- break;
- }
- }
-
- if (i == n)
- {
- vtkParse_AddConstantToNamespace(data->Contents, con);
- }
- else
- {
- vtkParse_FreeValue(con);
- }
- }
- else if (currentClass)
- {
- con->Access = access_level;
- vtkParse_AddConstantToClass(currentClass, con);
- }
- else
- {
- con->Access = VTK_ACCESS_PUBLIC;
- vtkParse_AddConstantToNamespace(currentNamespace, con);
- }
-}
-
-/* if the name is a const in this namespace, the scope it */
-const char *add_const_scope(const char *name)
-{
- static char text[256];
- NamespaceInfo *scope = currentNamespace;
- int i, j;
- int addscope = 0;
-
- strcpy(text, name);
-
- if (currentClass)
- {
- for (j = 0; j < currentClass->NumberOfConstants; j++)
- {
- if (strcmp(currentClass->Constants[j]->Name, text) == 0)
- {
- prepend_scope(text, currentClass->Name);
- addscope = 1;
- }
- }
- }
- i = namespaceDepth;
- while (scope && scope->Name)
- {
- if (addscope)
- {
- prepend_scope(text, scope->Name);
- }
- else
- {
- for (j = 0; j < scope->NumberOfConstants; j++)
- {
- if (strcmp(scope->Constants[j]->Name, text) == 0)
- {
- prepend_scope(text, scope->Name);
- addscope = 1;
- }
- }
- }
-
- scope = 0;
- if (i > 0)
- {
- scope = namespaceStack[--i];
- }
- }
-
- return text;
-}
-
-/* guess the type from the ID */
-unsigned int guess_id_type(const char *cp)
-{
- unsigned int t = 0;
-
- if (cp)
- {
- size_t i;
- const char *dp;
-
- i = strlen(cp);
- while (i > 0 && cp[i-1] != ':') { i--; }
- dp = &cp[i];
-
- if (strcmp(dp, "vtkStdString") == 0 ||
- strcmp(cp, "std::string") == 0)
- {
- t = VTK_PARSE_STRING;
- }
- else if (strcmp(dp, "vtkUnicodeString") == 0)
- {
- t = VTK_PARSE_UNICODE_STRING;
- }
- else if (strncmp(dp, "vtk", 3) == 0)
- {
- t = VTK_PARSE_OBJECT;
- }
- else if (strncmp(dp, "Q", 1) == 0 ||
- strncmp(cp, "Qt::", 4) == 0)
- {
- t = VTK_PARSE_QOBJECT;
- }
- else
- {
- t = VTK_PARSE_UNKNOWN;
- }
- }
-
- return t;
-}
-
-/* add a template parameter to the current template */
-void add_template_parameter(
- unsigned int datatype, unsigned int extra, const char *funcSig)
-{
- ValueInfo *param = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_InitValue(param);
- handle_complex_type(param, datatype, extra, funcSig);
- param->Name = getVarName();
- vtkParse_AddParameterToTemplate(currentTemplate, param);
-}
-
-/* add a parameter to a function */
-void add_parameter(FunctionInfo *func, unsigned int type,
- const char *typeclass, int count)
-{
- char text[64];
- ValueInfo *param = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_InitValue(param);
-
- param->Type = type;
- param->Class = type_class(type, typeclass);
-
- if (count)
- {
- param->Count = count;
- sprintf(text, "%i", count);
- vtkParse_AddStringToArray(¶m->Dimensions, ¶m->NumberOfDimensions,
- vtkstrdup(text));
- }
-
- add_legacy_parameter(func, param);
-
- vtkParse_AddParameterToFunction(func, param);
-}
-
-/* set the return type for the current function */
-void set_return(FunctionInfo *func, unsigned int type,
- const char *typeclass, int count)
-{
- char text[64];
- ValueInfo *val = (ValueInfo *)malloc(sizeof(ValueInfo));
-
- vtkParse_InitValue(val);
- val->Type = type;
- val->Class = type_class(type, typeclass);
-
- if (count)
- {
- val->Count = count;
- sprintf(text, "%i", count);
- vtkParse_AddStringToArray(&val->Dimensions, &val->NumberOfDimensions,
- vtkstrdup(text));
- }
-
- func->ReturnValue = val;
-
-#ifndef VTK_PARSE_LEGACY_REMOVE
- func->ReturnType = val->Type;
- func->ReturnClass = val->Class;
- func->HaveHint = (count > 0);
- func->HintSize = count;
-#endif
-}
-
-int count_from_dimensions(ValueInfo *val)
-{
- int count, i, n;
- const char *cp;
-
- /* count is the product of the dimensions */
- count = 0;
- if (val->NumberOfDimensions)
- {
- count = 1;
- for (i = 0; i < val->NumberOfDimensions; i++)
- {
- n = 0;
- cp = val->Dimensions[i];
- if (cp[0] != '\0')
- {
- while (*cp != '\0' && *cp >= '0' && *cp <= '9') { cp++; }
- while (*cp != '\0' && (*cp == 'u' || *cp == 'l' ||
- *cp == 'U' || *cp == 'L')) { cp++; }
- if (*cp == '\0')
- {
- n = (int)strtol(val->Dimensions[i], NULL, 0);
- }
- }
- count *= n;
- }
- }
-
- return count;
-}
-
-/* deal with types that include function pointers or arrays */
-void handle_complex_type(
- ValueInfo *val, unsigned int datatype, unsigned int extra,
- const char *funcSig)
-{
- FunctionInfo *func = 0;
-
- /* remove specifiers like "friend" and "typedef" */
- datatype &= VTK_PARSE_QUALIFIED_TYPE;
-
- /* if "extra" was set, parentheses were involved */
- if ((extra & VTK_PARSE_BASE_TYPE) == VTK_PARSE_FUNCTION)
- {
- /* the current type becomes the function return type */
- func = getFunction();
- func->ReturnValue = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_InitValue(func->ReturnValue);
- func->ReturnValue->Type = datatype;
- func->ReturnValue->Class = type_class(datatype, getTypeId());
- if (funcSig) { func->Signature = vtkstrdup(funcSig); }
- val->Function = func;
-
-#ifndef VTK_PARSE_LEGACY_REMOVE
- func->ReturnType = func->ReturnValue->Type;
- func->ReturnClass = func->ReturnValue->Class;
-#endif
-
- /* the val type is whatever was inside the parentheses */
- clearTypeId();
- setTypeId(func->Class ? "method" : "function");
- datatype = (extra & VTK_PARSE_UNQUALIFIED_TYPE);
- }
- else if ((extra & VTK_PARSE_INDIRECT) == VTK_PARSE_BAD_INDIRECT)
- {
- datatype = (datatype | VTK_PARSE_BAD_INDIRECT);
- }
- else if ((extra & VTK_PARSE_INDIRECT) != 0)
- {
- extra = (extra & VTK_PARSE_INDIRECT);
-
- if ((extra & VTK_PARSE_REF) != 0)
- {
- datatype = (datatype | VTK_PARSE_REF);
- extra = (extra & ~VTK_PARSE_REF);
- }
-
- if (extra != 0 && getArrayNDims() > 0)
- {
- /* pointer represents an unsized array bracket */
- datatype = add_indirection(datatype, VTK_PARSE_ARRAY);
- extra = ((extra >> 2) & VTK_PARSE_POINTER_MASK);
- }
-
- datatype = add_indirection(datatype, extra);
- }
-
- if (getArrayNDims() == 1)
- {
- if ((datatype & VTK_PARSE_POINTER_LOWMASK) != VTK_PARSE_ARRAY)
- {
- /* turn the first set of brackets into a pointer */
- datatype = add_indirection(datatype, VTK_PARSE_POINTER);
- }
- else
- {
- pushArrayFront("");
- }
- }
- else if (getArrayNDims() > 1)
- {
- if ((datatype & VTK_PARSE_POINTER_LOWMASK) != VTK_PARSE_ARRAY)
- {
- /* turn the first set of brackets into a pointer */
- datatype = add_indirection(datatype, VTK_PARSE_ARRAY);
- }
- else
- {
- pushArrayFront("");
- }
- }
-
- /* get the data type */
- val->Type = datatype;
- val->Class = type_class(datatype, getTypeId());
-
- /* copy contents of all brackets to the ArgDimensions */
- val->NumberOfDimensions = getArrayNDims();
- val->Dimensions = getArray();
- clearArray();
-
- /* count is the product of the dimensions */
- val->Count = count_from_dimensions(val);
-}
-
-/* add a parameter to the legacy part of the FunctionInfo struct */
-void add_legacy_parameter(FunctionInfo *func, ValueInfo *param)
-{
-#ifndef VTK_PARSE_LEGACY_REMOVE
- int i = func->NumberOfArguments;
-
- if (i < MAX_ARGS)
- {
- func->NumberOfArguments = i + 1;
- func->ArgTypes[i] = param->Type;
- func->ArgClasses[i] = param->Class;
- func->ArgCounts[i] = param->Count;
-
- /* legacy wrappers need VTK_PARSE_FUNCTION without POINTER */
- if (param->Type == VTK_PARSE_FUNCTION_PTR)
- {
- /* check for signature "void (*func)(void *)" */
- if (param->Function->NumberOfParameters == 1 &&
- param->Function->Parameters[0]->Type == VTK_PARSE_VOID_PTR &&
- param->Function->Parameters[0]->NumberOfDimensions == 0 &&
- param->Function->ReturnValue->Type == VTK_PARSE_VOID)
- {
- func->ArgTypes[i] = VTK_PARSE_FUNCTION;
- }
- }
- }
- else
- {
- func->ArrayFailure = 1;
- }
-#endif
-}
-
-
-/* reject the function, do not output it */
-void reject_function()
-{
- vtkParse_InitFunction(currentFunction);
- startSig();
- getMacro();
-}
-
-/* a simple routine that updates a few variables */
-void output_function()
-{
- const char *macro = getMacro();
- size_t n;
- int i, j;
- int match;
-
- /* reject template specializations */
- n = strlen(currentFunction->Name);
- if (currentFunction->Name[n-1] == '>')
- {
- /* make sure there is a matching angle bracket */
- while (n > 0 && currentFunction->Name[n-1] != '<') { n--; }
- if (n > 0)
- {
- reject_function();
- return;
- }
- }
-
- /* static */
- if (currentFunction->ReturnValue &&
- currentFunction->ReturnValue->Type & VTK_PARSE_STATIC)
- {
- currentFunction->IsStatic = 1;
- }
-
- /* virtual */
- if (currentFunction->ReturnValue &&
- currentFunction->ReturnValue->Type & VTK_PARSE_VIRTUAL)
- {
- currentFunction->IsVirtual = 1;
- }
-
- /* the signature */
- if (!currentFunction->Signature)
- {
- currentFunction->Signature = getSig();
- }
-
- /* template information */
- if (currentTemplate)
- {
- currentFunction->Template = currentTemplate;
- currentTemplate = NULL;
- }
-
- /* a void argument is the same as no parameters */
- if (currentFunction->NumberOfParameters == 1 &&
- (currentFunction->Parameters[0]->Type & VTK_PARSE_UNQUALIFIED_TYPE) ==
- VTK_PARSE_VOID)
- {
- currentFunction->NumberOfParameters = 0;
- }
-
- /* is it defined in a legacy macro? */
- if (macro && strcmp(macro, "VTK_LEGACY") == 0)
- {
- currentFunction->IsLegacy = 1;
- }
-
- /* set public, protected */
- if (currentClass)
- {
- currentFunction->Access = access_level;
- }
- else
- {
- currentFunction->Access = VTK_ACCESS_PUBLIC;
- }
-
-#ifndef VTK_PARSE_LEGACY_REMOVE
- /* a void argument is the same as no parameters */
- if (currentFunction->NumberOfArguments == 1 &&
- (currentFunction->ArgTypes[0] & VTK_PARSE_UNQUALIFIED_TYPE) ==
- VTK_PARSE_VOID)
- {
- currentFunction->NumberOfArguments = 0;
- }
-
- /* if return type is void, set return class to void */
- if (currentFunction->ReturnClass == NULL &&
- (currentFunction->ReturnType & VTK_PARSE_UNQUALIFIED_TYPE) ==
- VTK_PARSE_VOID)
- {
- currentFunction->ReturnClass = "void";
- }
-
- /* set legacy flags */
- if (currentClass)
- {
- currentFunction->IsPublic = (access_level == VTK_ACCESS_PUBLIC);
- currentFunction->IsProtected = (access_level == VTK_ACCESS_PROTECTED);
- }
- else
- {
- currentFunction->IsPublic = 1;
- currentFunction->IsProtected = 0;
- }
-
- /* check for too many parameters */
- if (currentFunction->NumberOfParameters > MAX_ARGS)
- {
- currentFunction->ArrayFailure = 1;
- }
-
- for (i = 0; i < currentFunction->NumberOfParameters; i++)
- {
- ValueInfo *param = currentFunction->Parameters[i];
- /* tell old wrappers that multi-dimensional arrays are bad */
- if ((param->Type & VTK_PARSE_POINTER_MASK) != 0)
- {
- if (((param->Type & VTK_PARSE_INDIRECT) == VTK_PARSE_BAD_INDIRECT) ||
- ((param->Type & VTK_PARSE_POINTER_LOWMASK) != VTK_PARSE_POINTER))
- {
- currentFunction->ArrayFailure = 1;
- }
- }
-
- /* allow only "void (*func)(void *)" as a valid function pointer */
- if ((param->Type & VTK_PARSE_BASE_TYPE) == VTK_PARSE_FUNCTION)
- {
- if (i != 0 || param->Type != VTK_PARSE_FUNCTION_PTR ||
- currentFunction->NumberOfParameters != 2 ||
- currentFunction->Parameters[1]->Type != VTK_PARSE_VOID_PTR ||
- param->Function->NumberOfParameters != 1 ||
- param->Function->Parameters[0]->Type != VTK_PARSE_VOID_PTR ||
- param->Function->Parameters[0]->NumberOfDimensions != 0 ||
- param->Function->ReturnValue->Type != VTK_PARSE_VOID)
- {
- currentFunction->ArrayFailure = 1;
- }
- }
- }
-#endif /* VTK_PARSE_LEGACY_REMOVE */
-
- if (currentClass)
- {
- /* is it a delete function */
- if (currentFunction->Name && !strcmp("Delete",currentFunction->Name))
- {
- currentClass->HasDelete = 1;
- }
-
- currentFunction->Class = currentClass->Name;
- vtkParse_AddFunctionToClass(currentClass, currentFunction);
-
- currentFunction = (FunctionInfo *)malloc(sizeof(FunctionInfo));
- }
- else
- {
- /* make sure this function isn't a repeat */
- match = 0;
- for (i = 0; i < currentNamespace->NumberOfFunctions; i++)
- {
- if (currentNamespace->Functions[i]->Name &&
- strcmp(currentNamespace->Functions[i]->Name,
- currentFunction->Name) == 0)
- {
- if (currentNamespace->Functions[i]->NumberOfParameters ==
- currentFunction->NumberOfParameters)
- {
- for (j = 0; j < currentFunction->NumberOfParameters; j++)
- {
- if (currentNamespace->Functions[i]->Parameters[j]->Type ==
- currentFunction->Parameters[j]->Type)
- {
- if (currentFunction->Parameters[j]->Type == VTK_PARSE_OBJECT &&
- strcmp(currentNamespace->Functions[i]->Parameters[j]->Class,
- currentFunction->Parameters[j]->Class) == 0)
- {
- break;
- }
- }
- }
- if (j == currentFunction->NumberOfParameters)
- {
- match = 1;
- break;
- }
- }
- }
- }
-
- if (!match)
- {
- vtkParse_AddFunctionToNamespace(currentNamespace, currentFunction);
-
- currentFunction = (FunctionInfo *)malloc(sizeof(FunctionInfo));
- }
- }
-
- vtkParse_InitFunction(currentFunction);
- startSig();
-}
-
-/* output a function that is not a method of the current class */
-void output_friend_function()
-{
- ClassInfo *tmpc = currentClass;
- currentClass = NULL;
- output_function();
- currentClass = tmpc;
-}
-
-void outputSetVectorMacro(const char *var, unsigned int paramType,
- const char *typeText, int n)
-{
- static const char *mnames[] = {
- NULL, NULL,
- "vtkSetVector2Macro", "vtkSetVector3Macro", "vtkSetVector4Macro",
- NULL,
- "vtkSetVector6Macro",
- NULL };
- char ntext[32];
- int i, m;
- m = (n > 7 ? 0 : n);
-
- sprintf(ntext, "%i", n);
-
- currentFunction->Macro = mnames[m];
- currentFunction->Name = vtkstrcat("Set", var);
- startSig();
- postSig("void ");
- postSig(currentFunction->Name);
- postSig("(");
- postSig(typeText);
- for (i = 1; i < n; i++)
- {
- postSig(", ");
- postSig(typeText);
- }
- postSig(");");
- for (i = 0; i < n; i++)
- {
- add_parameter(currentFunction, paramType, getTypeId(), 0);
- }
- set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
- output_function();
-
- currentFunction->Macro = mnames[m];
- currentFunction->Name = vtkstrcat("Set", var);
- currentFunction->Signature =
- vtkstrcat7("void ", currentFunction->Name, "(", typeText,
- " a[", ntext, "]);");
- add_parameter(currentFunction, (VTK_PARSE_POINTER | paramType),
- getTypeId(), n);
- set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
- output_function();
-}
-
-void outputGetVectorMacro(const char *var, unsigned int paramType,
- const char *typeText, int n)
-{
- static const char *mnames[] = {
- NULL, NULL,
- "vtkGetVector2Macro", "vtkGetVector3Macro", "vtkGetVector4Macro",
- NULL,
- "vtkGetVector6Macro",
- NULL };
- int m;
- m = (n > 7 ? 0 : n);
-
- currentFunction->Macro = mnames[m];
- currentFunction->Name = vtkstrcat("Get", var);
- currentFunction->Signature =
- vtkstrcat4(typeText, " *", currentFunction->Name, "();");
- set_return(currentFunction, (VTK_PARSE_POINTER | paramType), getTypeId(), n);
- output_function();
-}
-
-/* Set a flag to ignore BTX/ETX markers in the files */
-void vtkParse_SetIgnoreBTX(int option)
-{
- if (option)
- {
- IgnoreBTX = 1;
- }
- else
- {
- IgnoreBTX = 0;
- }
-}
-
-/* Set a flag to recurse into included files */
-void vtkParse_SetRecursive(int option)
-{
- if (option)
- {
- Recursive = 1;
- }
- else
- {
- Recursive = 0;
- }
-}
-
-/* Parse a header file and return a FileInfo struct */
-FileInfo *vtkParse_ParseFile(
- const char *filename, FILE *ifile, FILE *errfile)
-{
- int i, j;
- int ret;
- FileInfo *file_info;
- char *main_class;
-
- /* "data" is a global variable used by the parser */
- data = (FileInfo *)malloc(sizeof(FileInfo));
- vtkParse_InitFile(data);
- data->Strings = (StringCache *)malloc(sizeof(StringCache));
- vtkParse_InitStringCache(data->Strings);
-
- /* "preprocessor" is a global struct used by the parser */
- preprocessor = (PreprocessInfo *)malloc(sizeof(PreprocessInfo));
- vtkParsePreprocess_Init(preprocessor, filename);
- vtkParsePreprocess_AddStandardMacros(preprocessor, VTK_PARSE_NATIVE);
-
- /* add include files specified on the command line */
- for (i = 0; i < NumberOfIncludeDirectories; i++)
- {
- vtkParsePreprocess_IncludeDirectory(preprocessor, IncludeDirectories[i]);
- }
-
- /* add macros specified on the command line */
- for (i = 0; i < NumberOfDefinitions; i++)
- {
- const char *cp = Definitions[i];
-
- if (*cp == 'U')
- {
- vtkParsePreprocess_RemoveMacro(preprocessor, &cp[1]);
- }
- else if (*cp == 'D')
- {
- const char *definition = &cp[1];
- while (*definition != '=' && *definition != '\0')
- {
- definition++;
- }
- if (*definition == '=')
- {
- definition++;
- }
- else
- {
- definition = NULL;
- }
- vtkParsePreprocess_AddMacro(preprocessor, &cp[1], definition);
- }
- }
-
- /* should explicitly check for vtkConfigure.h, or even explicitly load it */
-#ifdef VTK_USE_64BIT_IDS
- vtkParsePreprocess_AddMacro(preprocessor, "VTK_USE_64BIT_IDS", NULL);
-#endif
-
- data->FileName = vtkstrdup(filename);
-
- clearComment();
-
- namespaceDepth = 0;
- currentNamespace = (NamespaceInfo *)malloc(sizeof(NamespaceInfo));
- vtkParse_InitNamespace(currentNamespace);
- data->Contents = currentNamespace;
-
- templateDepth = 0;
- currentTemplate = NULL;
-
- currentFunction = (FunctionInfo *)malloc(sizeof(FunctionInfo));
- vtkParse_InitFunction(currentFunction);
- startSig();
-
- parseDebug = 0;
- if (getenv("DEBUG") != NULL)
- {
- parseDebug = 1;
- }
-
- yyset_in(ifile);
- yyset_out(errfile);
- ret = yyparse();
-
- if (ret)
- {
- print_parser_error("syntax error", NULL, 0);
- return NULL;
- }
-
- free(currentFunction);
- yylex_destroy();
-
- /* The main class name should match the file name */
- i = strlen(filename);
- j = i;
- while (i > 0)
- {
- --i;
- if (filename[i] == '.')
- {
- j = i;
- }
- if (filename[i] == '/' || filename[i] == '\\')
- {
- i++;
- break;
- }
- }
- main_class = (char *)malloc(j-i+1);
- strncpy(main_class, &filename[i], j-i);
- main_class[j-i] = '\0';
-
- /* special treatment of the main class in the file */
- for (i = 0; i < currentNamespace->NumberOfClasses; i++)
- {
- if (strcmp(currentNamespace->Classes[i]->Name, main_class) == 0)
- {
- data->MainClass = currentNamespace->Classes[i];
- break;
- }
- }
- free(main_class);
-
- vtkParsePreprocess_Free(preprocessor);
- preprocessor = NULL;
- macroName = NULL;
-
- file_info = data;
- data = NULL;
-
- return file_info;
-}
-
-/* Read a hints file and update the FileInfo */
-int vtkParse_ReadHints(FileInfo *file_info, FILE *hfile, FILE *errfile)
-{
- char h_cls[512];
- char h_func[512];
- unsigned int h_type, type;
- int h_value;
- FunctionInfo *func_info;
- ClassInfo *class_info;
- NamespaceInfo *contents;
- int i, j;
- int lineno = 0;
- int n;
-
- contents = file_info->Contents;
-
- /* read each hint line in succession */
- while ((n = fscanf(hfile,"%s %s %x %i", h_cls, h_func, &h_type, &h_value))
- != EOF)
- {
- lineno++;
- if (n < 4)
- {
- fprintf(errfile, "Wrapping: error parsing hints file line %i\n", lineno);
- exit(1);
- }
-
- /* erase "ref" and qualifiers from hint type */
- type = ((h_type & VTK_PARSE_BASE_TYPE) |
- (h_type & VTK_PARSE_POINTER_LOWMASK));
-
- /* find the matching class */
- for (i = 0; i < contents->NumberOfClasses; i++)
- {
- class_info = contents->Classes[i];
-
- if (strcmp(h_cls, class_info->Name) == 0)
- {
- /* find the matching function */
- for (j = 0; j < class_info->NumberOfFunctions; j++)
- {
- func_info = class_info->Functions[j];
-
- if ((strcmp(h_func, func_info->Name) == 0) &&
- func_info->ReturnValue &&
- (type == ((func_info->ReturnValue->Type & ~VTK_PARSE_REF) &
- VTK_PARSE_UNQUALIFIED_TYPE)))
- {
- /* types that hints are accepted for */
- switch (func_info->ReturnValue->Type & VTK_PARSE_UNQUALIFIED_TYPE)
- {
- case VTK_PARSE_FLOAT_PTR:
- case VTK_PARSE_VOID_PTR:
- case VTK_PARSE_DOUBLE_PTR:
- case VTK_PARSE_ID_TYPE_PTR:
- case VTK_PARSE_LONG_LONG_PTR:
- case VTK_PARSE_UNSIGNED_LONG_LONG_PTR:
- case VTK_PARSE___INT64_PTR:
- case VTK_PARSE_UNSIGNED___INT64_PTR:
- case VTK_PARSE_INT_PTR:
- case VTK_PARSE_UNSIGNED_INT_PTR:
- case VTK_PARSE_SHORT_PTR:
- case VTK_PARSE_UNSIGNED_SHORT_PTR:
- case VTK_PARSE_LONG_PTR:
- case VTK_PARSE_UNSIGNED_LONG_PTR:
- case VTK_PARSE_SIGNED_CHAR_PTR:
- case VTK_PARSE_UNSIGNED_CHAR_PTR:
- case VTK_PARSE_CHAR_PTR:
- {
- if (func_info->ReturnValue->NumberOfDimensions == 0)
- {
- char text[64];
- sprintf(text, "%i", h_value);
- func_info->ReturnValue->Count = h_value;
- vtkParse_AddStringToArray(
- &func_info->ReturnValue->Dimensions,
- &func_info->ReturnValue->NumberOfDimensions,
- vtkParse_CacheString(
- file_info->Strings, text, strlen(text)));
-#ifndef VTK_PARSE_LEGACY_REMOVE
- func_info->HaveHint = 1;
- func_info->HintSize = h_value;
-#endif
- }
- break;
- }
- default:
- {
- fprintf(errfile,
- "Wrapping: unhandled hint type %#x\n", h_type);
- }
- }
- }
- }
- }
- }
- }
-
- return 1;
-}
-
-/* Free the FileInfo struct returned by vtkParse_ParseFile() */
-void vtkParse_Free(FileInfo *file_info)
-{
- vtkParse_FreeFile(file_info);
- vtkParse_FreeStringCache(file_info->Strings);
- free(file_info->Strings);
- free(file_info);
-}
-
-/** Define a preprocessor macro. Function macros are not supported. */
-void vtkParse_DefineMacro(const char *name, const char *definition)
-{
- size_t n = vtkidlen(name);
- size_t l;
- char *cp;
-
- if (definition == NULL)
- {
- definition = "";
- }
-
- l = n + strlen(definition) + 3;
- cp = (char *)malloc(l);
- cp[0] = 'D';
- strncpy(&cp[1], name, n);
- cp[n+1] = '\0';
- if (definition[0] != '\0')
- {
- cp[n+1] = '=';
- strcpy(&cp[n+2], definition);
- }
- cp[l] = '\0';
-
- vtkParse_AddStringToArray(&Definitions, &NumberOfDefinitions, cp);
-}
-
-/** Undefine a preprocessor macro. */
-void vtkParse_UndefineMacro(const char *name)
-{
- size_t n = vtkidlen(name);
- char *cp;
-
- cp = (char *)malloc(n+2);
- cp[0] = 'U';
- strncpy(&cp[1], name, n);
- cp[n+1] = '\0';
-
- vtkParse_AddStringToArray(&Definitions, &NumberOfDefinitions, cp);
-}
-
-/** Add an include directory, for use with the "-I" option. */
-void vtkParse_IncludeDirectory(const char *dirname)
-{
- size_t n = strlen(dirname);
- char *cp;
- int i;
-
- for (i = 0; i < NumberOfIncludeDirectories; i++)
- {
- if (strncmp(IncludeDirectories[i], dirname, n) == 0 &&
- IncludeDirectories[i][n] == '\0')
- {
- return;
- }
- }
-
- cp = (char *)malloc(n+1);
- strcpy(cp, dirname);
-
- vtkParse_AddStringToArray(
- &IncludeDirectories, &NumberOfIncludeDirectories, cp);
-}
-
-/** Return the full path to a header file. */
-const char *vtkParse_FindIncludeFile(const char *filename)
-{
- static PreprocessInfo info = {0, 0, 0, 0, 0, 0, 0, 0, 0};
- int val;
- int i;
-
- /* add include files specified on the command line */
- for (i = 0; i < NumberOfIncludeDirectories; i++)
- {
- vtkParsePreprocess_IncludeDirectory(&info, IncludeDirectories[i]);
- }
-
- return vtkParsePreprocess_FindIncludeFile(&info, filename, 0, &val);
-}
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkParseData.c
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-/*-------------------------------------------------------------------------
- Copyright (c) 2010 David Gobbi.
-
- Contributed to the VisualizationToolkit by the author in May 2010
- under the terms of the Visualization Toolkit 2008 copyright.
--------------------------------------------------------------------------*/
-
-#include "vtkParseData.h"
-#include <stdlib.h>
-#include <string.h>
-
-/* Initialize the FileInfo struct */
-void vtkParse_InitFile(FileInfo *file_info)
-{
- /* file info */
- file_info->FileName = NULL;
- file_info->NameComment = NULL;
- file_info->Description = NULL;
- file_info->Caveats = NULL;
- file_info->SeeAlso = NULL;
-
- file_info->NumberOfIncludes = 0;
- file_info->Includes = NULL;
- file_info->MainClass = NULL;
- file_info->Contents = NULL;
-
- file_info->Strings = NULL;
-}
-
-/* Free the FileInfo struct */
-void vtkParse_FreeFile(FileInfo *file_info)
-{
- int i, n;
-
- n = file_info->NumberOfIncludes;
- for (i = 0; i < n; i++)
- {
- vtkParse_FreeFile(file_info->Includes[i]);
- free(file_info->Includes[i]);
- }
- if (file_info->Includes)
- {
- free(file_info->Includes);
- }
-
- vtkParse_FreeNamespace(file_info->Contents);
- file_info->Contents = NULL;
-}
-
-/* Initialize a TemplateInfo struct */
-void vtkParse_InitTemplate(TemplateInfo *info)
-{
- info->NumberOfParameters = 0;
- info->Parameters = NULL;
-}
-
-/* Copy a TemplateInfo struct */
-void vtkParse_CopyTemplate(TemplateInfo *info, const TemplateInfo *orig)
-{
- int i, n;
-
- n = orig->NumberOfParameters;
- info->NumberOfParameters = n;
- info->Parameters = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
-
- for (i = 0; i < n; i++)
- {
- info->Parameters[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_CopyValue(info->Parameters[i], orig->Parameters[i]);
- }
-}
-
-/* Free a TemplateInfo struct */
-void vtkParse_FreeTemplate(TemplateInfo *template_info)
-{
- int j, m;
-
- m = template_info->NumberOfParameters;
- for (j = 0; j < m; j++)
- {
- vtkParse_FreeValue(template_info->Parameters[j]);
- }
-
- free(template_info);
-}
-
-
-/* Initialize a Function struct */
-void vtkParse_InitFunction(FunctionInfo *func)
-{
-#ifndef VTK_PARSE_LEGACY_REMOVE
- int i;
-#endif
-
- func->ItemType = VTK_FUNCTION_INFO;
- func->Access = VTK_ACCESS_PUBLIC;
- func->Name = NULL;
- func->Comment = NULL;
- func->Class = NULL;
- func->Signature = NULL;
- func->Template = NULL;
- func->NumberOfParameters = 0;
- func->Parameters = NULL;
- func->ReturnValue = NULL;
- func->Macro = NULL;
- func->SizeHint = NULL;
- func->IsStatic = 0;
- func->IsVirtual = 0;
- func->IsPureVirtual = 0;
- func->IsOperator = 0;
- func->IsVariadic = 0;
- func->IsConst = 0;
- func->IsExplicit = 0;
- func->IsLegacy = 0;
-
-#ifndef VTK_PARSE_LEGACY_REMOVE
- /* everything below here is legacy information, *
- * maintained only for backwards compatibility */
- func->NumberOfArguments = 0;
- func->ReturnType = VTK_PARSE_VOID;
- func->ReturnClass = NULL;
- func->HaveHint = 0;
- func->HintSize = 0;
- func->ArrayFailure = 0;
- func->IsPublic = 0;
- func->IsProtected = 0;
-
- for (i = 0; i < MAX_ARGS; i++)
- {
- func->ArgTypes[i] = 0;
- func->ArgClasses[i] = 0;
- func->ArgCounts[i] = 0;
- }
-#endif
-}
-
-/* Copy a Function struct */
-void vtkParse_CopyFunction(FunctionInfo *func, const FunctionInfo *orig)
-{
- int i, n;
-
- func->ItemType = orig->ItemType;
- func->Access = orig->Access;
- func->Name = orig->Name;
- func->Comment = orig->Comment;
- func->Class = orig->Class;
- func->Signature = orig->Signature;
- func->Template = NULL;
-
- if (orig->Template)
- {
- func->Template = (TemplateInfo *)malloc(sizeof(TemplateInfo));
- vtkParse_CopyTemplate(func->Template, orig->Template);
- }
-
- n = orig->NumberOfParameters;
- func->NumberOfParameters = n;
- if (n)
- {
- func->Parameters = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
- for (i = 0; i < n; i++)
- {
- func->Parameters[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_CopyValue(func->Parameters[i], orig->Parameters[i]);
- }
- }
-
- func->ReturnValue = NULL;
- if (orig->ReturnValue)
- {
- func->ReturnValue = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_CopyValue(func->ReturnValue, orig->ReturnValue);
- }
-
- func->Macro = orig->Macro;
- func->SizeHint = orig->SizeHint;
- func->IsStatic = orig->IsStatic;
- func->IsVirtual = orig->IsVirtual;
- func->IsPureVirtual = orig->IsPureVirtual;
- func->IsOperator = orig->IsOperator;
- func->IsVariadic = orig->IsVariadic;
- func->IsConst = orig->IsConst;
- func->IsExplicit = orig->IsExplicit;
- func->IsLegacy = orig->IsLegacy;
-
-#ifndef VTK_PARSE_LEGACY_REMOVE
- /* everything below here is legacy information, *
- * maintained only for backwards compatibility */
- func->NumberOfArguments = orig->NumberOfArguments;
- func->ReturnType = orig->ReturnType;
- func->ReturnClass = orig->ReturnClass;
- func->HaveHint = orig->HaveHint;
- func->HintSize = orig->HintSize;
- func->ArrayFailure = orig->ArrayFailure;
- func->IsPublic = orig->IsPublic;
- func->IsProtected = orig->IsProtected;
-
- for (i = 0; i < MAX_ARGS; i++)
- {
- func->ArgTypes[i] = orig->ArgTypes[i];
- func->ArgClasses[i] = orig->ArgClasses[i];
- func->ArgCounts[i] = orig->ArgCounts[i];
- }
-#endif
-}
-
-/* Free a Function struct */
-void vtkParse_FreeFunction(FunctionInfo *function_info)
-{
- int j, m;
-
- if (function_info->Template)
- {
- vtkParse_FreeTemplate(function_info->Template);
- }
-
- m = function_info->NumberOfParameters;
- for (j = 0; j < m; j++) { vtkParse_FreeValue(function_info->Parameters[j]); }
- if (m > 0) { free(function_info->Parameters); }
-
- if (function_info->ReturnValue)
- {
- vtkParse_FreeValue(function_info->ReturnValue);
- }
-
- free(function_info);
-}
-
-
-/* Initialize a Value struct */
-void vtkParse_InitValue(ValueInfo *val)
-{
- val->ItemType = VTK_VARIABLE_INFO;
- val->Access = VTK_ACCESS_PUBLIC;
- val->Name = NULL;
- val->Comment = NULL;
- val->Value = NULL;
- val->Type = 0;
- val->Class = NULL;
- val->Count = 0;
- val->CountHint = NULL;
- val->NumberOfDimensions = 0;
- val->Dimensions = NULL;
- val->Function = NULL;
- val->Template = NULL;
- val->IsStatic = 0;
- val->IsEnum = 0;
-}
-
-/* Copy a Value struct */
-void vtkParse_CopyValue(ValueInfo *val, const ValueInfo *orig)
-{
- int i, n;
-
- val->ItemType = orig->ItemType;
- val->Access = orig->Access;
- val->Name = orig->Name;
- val->Comment = orig->Comment;
- val->Value = orig->Value;
- val->Type = orig->Type;
- val->Class = orig->Class;
- val->Count = orig->Count;
- val->CountHint = orig->CountHint;
-
- n = orig->NumberOfDimensions;
- val->NumberOfDimensions = n;
- if (n)
- {
- val->Dimensions = (const char **)malloc(n*sizeof(char *));
- for (i = 0; i < n; i++)
- {
- val->Dimensions[i] = orig->Dimensions[i];
- }
- }
-
- val->Function = NULL;
- if (orig->Function)
- {
- val->Function = (FunctionInfo *)malloc(sizeof(FunctionInfo));
- vtkParse_CopyFunction(val->Function, orig->Function);
- }
-
- val->Template = NULL;
- if (orig->Template)
- {
- val->Template = (TemplateInfo *)malloc(sizeof(TemplateInfo));
- vtkParse_CopyTemplate(val->Template, orig->Template);
- }
-
- val->IsStatic = orig->IsStatic;
- val->IsEnum = orig->IsEnum;
-}
-
-/* Free a Value struct */
-void vtkParse_FreeValue(ValueInfo *value_info)
-{
- if (value_info->NumberOfDimensions)
- {
- free((char **)value_info->Dimensions);
- }
- if (value_info->Function)
- {
- vtkParse_FreeFunction(value_info->Function);
- }
- if (value_info->Template)
- {
- vtkParse_FreeTemplate(value_info->Template);
- }
-
- free(value_info);
-}
-
-
-/* Initialize an Enum struct */
-void vtkParse_InitEnum(EnumInfo *item)
-{
- item->ItemType = VTK_ENUM_INFO;
- item->Access = VTK_ACCESS_PUBLIC;
- item->Name = NULL;
- item->Comment = NULL;
-}
-
-/* Copy an Enum struct */
-void vtkParse_CopyEnum(EnumInfo *item, const EnumInfo *orig)
-{
- item->ItemType = orig->ItemType;
- item->Access = orig->Access;
- item->Name = orig->Name;
- item->Comment = orig->Comment;
-}
-
-/* Free an Enum struct */
-void vtkParse_FreeEnum(EnumInfo *enum_info)
-{
- free(enum_info);
-}
-
-
-/* Initialize a Using struct */
-void vtkParse_InitUsing(UsingInfo *item)
-{
- item->ItemType = VTK_USING_INFO;
- item->Access = VTK_ACCESS_PUBLIC;
- item->Name = NULL;
- item->Comment = NULL;
- item->Scope = NULL;
-}
-
-/* Copy a Using struct */
-void vtkParse_CopyUsing(UsingInfo *item, const UsingInfo *orig)
-{
- item->ItemType = orig->ItemType;
- item->Access = orig->Access;
- item->Name = orig->Name;
- item->Comment = orig->Comment;
- item->Scope = orig->Scope;
-}
-
-/* Free a Using struct */
-void vtkParse_FreeUsing(UsingInfo *using_info)
-{
- free(using_info);
-}
-
-
-/* Initialize a Class struct */
-void vtkParse_InitClass(ClassInfo *cls)
-{
- cls->ItemType = VTK_CLASS_INFO;
- cls->Access = VTK_ACCESS_PUBLIC;
- cls->Name = NULL;
- cls->Comment = NULL;
- cls->Template = NULL;
- cls->NumberOfSuperClasses = 0;
- cls->SuperClasses = NULL;
- cls->NumberOfItems = 0;
- cls->Items = NULL;
- cls->NumberOfClasses = 0;
- cls->Classes = NULL;
- cls->NumberOfFunctions = 0;
- cls->Functions = NULL;
- cls->NumberOfConstants = 0;
- cls->Constants = NULL;
- cls->NumberOfVariables = 0;
- cls->Variables = NULL;
- cls->NumberOfEnums = 0;
- cls->Enums = NULL;
- cls->NumberOfTypedefs = 0;
- cls->Typedefs = NULL;
- cls->NumberOfUsings = 0;
- cls->Usings = NULL;
- cls->NumberOfNamespaces = 0;
- cls->Namespaces = NULL;
- cls->IsAbstract = 0;
- cls->HasDelete = 0;
-}
-
-/* Copy a Class struct */
-void vtkParse_CopyClass(ClassInfo *cls, const ClassInfo *orig)
-{
- int i, n;
-
- cls->ItemType = orig->ItemType;
- cls->Access = orig->Access;
- cls->Name = orig->Name;
- cls->Comment = orig->Comment;
- cls->Template = NULL;
-
- if (orig->Template)
- {
- cls->Template = (TemplateInfo *)malloc(sizeof(TemplateInfo));
- vtkParse_CopyTemplate(cls->Template, orig->Template);
- }
-
- n = orig->NumberOfSuperClasses;
- cls->NumberOfSuperClasses = n;
- if (n)
- {
- cls->SuperClasses = (const char **)malloc(n*sizeof(char *));
- for (i = 0; i < n; i++)
- {
- cls->SuperClasses[i] = orig->SuperClasses[i];
- }
- }
-
- n = orig->NumberOfItems;
- cls->NumberOfItems = n;
- if (n)
- {
- cls->Items = (ItemInfo *)malloc(n*sizeof(ItemInfo));
- for (i = 0; i < n; i++)
- {
- cls->Items[i].Type = orig->Items[i].Type;
- cls->Items[i].Index = orig->Items[i].Index;
- }
- }
-
- n = orig->NumberOfClasses;
- cls->NumberOfClasses = n;
- if (n)
- {
- cls->Classes = (ClassInfo **)malloc(n*sizeof(ClassInfo *));
- for (i = 0; i < n; i++)
- {
- cls->Classes[i] = (ClassInfo *)malloc(sizeof(ClassInfo));
- vtkParse_CopyClass(cls->Classes[i], orig->Classes[i]);
- }
- }
-
- n = orig->NumberOfFunctions;
- cls->NumberOfFunctions = n;
- if (n)
- {
- cls->Functions = (FunctionInfo **)malloc(n*sizeof(FunctionInfo *));
- for (i = 0; i < n; i++)
- {
- cls->Functions[i] = (FunctionInfo *)malloc(sizeof(FunctionInfo));
- vtkParse_CopyFunction(cls->Functions[i], orig->Functions[i]);
- }
- }
-
- n = orig->NumberOfConstants;
- cls->NumberOfConstants = n;
- if (n)
- {
- cls->Constants = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
- for (i = 0; i < n; i++)
- {
- cls->Constants[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_CopyValue(cls->Constants[i], orig->Constants[i]);
- }
- }
-
- n = orig->NumberOfVariables;
- cls->NumberOfVariables = n;
- if (n)
- {
- cls->Variables = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
- for (i = 0; i < n; i++)
- {
- cls->Variables[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_CopyValue(cls->Variables[i], orig->Variables[i]);
- }
- }
-
- n = orig->NumberOfEnums;
- cls->NumberOfEnums = n;
- if (n)
- {
- cls->Enums = (EnumInfo **)malloc(n*sizeof(EnumInfo *));
- for (i = 0; i < n; i++)
- {
- cls->Enums[i] = (EnumInfo *)malloc(sizeof(EnumInfo));
- vtkParse_CopyEnum(cls->Enums[i], orig->Enums[i]);
- }
- }
-
- n = orig->NumberOfTypedefs;
- cls->NumberOfTypedefs = n;
- if (n)
- {
- cls->Typedefs = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
- for (i = 0; i < n; i++)
- {
- cls->Typedefs[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_CopyValue(cls->Typedefs[i], orig->Typedefs[i]);
- }
- }
-
- n = orig->NumberOfUsings;
- cls->NumberOfUsings = n;
- if (n)
- {
- cls->Usings = (UsingInfo **)malloc(n*sizeof(UsingInfo *));
- for (i = 0; i < n; i++)
- {
- cls->Usings[i] = (UsingInfo *)malloc(sizeof(UsingInfo));
- vtkParse_CopyUsing(cls->Usings[i], orig->Usings[i]);
- }
- }
-
- n = orig->NumberOfNamespaces;
- cls->NumberOfNamespaces = n;
- if (n)
- {
- cls->Namespaces = (NamespaceInfo **)malloc(n*sizeof(NamespaceInfo *));
- for (i = 0; i < n; i++)
- {
- cls->Namespaces[i] = (NamespaceInfo *)malloc(sizeof(NamespaceInfo));
- vtkParse_CopyNamespace(cls->Namespaces[i], orig->Namespaces[i]);
- }
- }
-
- cls->IsAbstract = orig->IsAbstract;
- cls->HasDelete = orig->HasDelete;
-}
-
-/* Free a Class struct */
-void vtkParse_FreeClass(ClassInfo *class_info)
-{
- int j, m;
-
- if (class_info->Template) { vtkParse_FreeTemplate(class_info->Template); }
-
- m = class_info->NumberOfSuperClasses;
- if (m > 0) { free((char **)class_info->SuperClasses); }
-
- m = class_info->NumberOfClasses;
- for (j = 0; j < m; j++) { vtkParse_FreeClass(class_info->Classes[j]); }
- if (m > 0) { free(class_info->Classes); }
-
- m = class_info->NumberOfFunctions;
- for (j = 0; j < m; j++) { vtkParse_FreeFunction(class_info->Functions[j]); }
- if (m > 0) { free(class_info->Functions); }
-
- m = class_info->NumberOfConstants;
- for (j = 0; j < m; j++) { vtkParse_FreeValue(class_info->Constants[j]); }
- if (m > 0) { free(class_info->Constants); }
-
- m = class_info->NumberOfVariables;
- for (j = 0; j < m; j++) { vtkParse_FreeValue(class_info->Variables[j]); }
- if (m > 0) { free(class_info->Variables); }
-
- m = class_info->NumberOfEnums;
- for (j = 0; j < m; j++) { vtkParse_FreeEnum(class_info->Enums[j]); }
- if (m > 0) { free(class_info->Enums); }
-
- m = class_info->NumberOfTypedefs;
- for (j = 0; j < m; j++) { vtkParse_FreeValue(class_info->Typedefs[j]); }
- if (m > 0) { free(class_info->Typedefs); }
-
- m = class_info->NumberOfUsings;
- for (j = 0; j < m; j++) { vtkParse_FreeUsing(class_info->Usings[j]); }
- if (m > 0) { free(class_info->Usings); }
-
- m = class_info->NumberOfNamespaces;
- for (j = 0; j < m; j++) { vtkParse_FreeNamespace(class_info->Namespaces[j]); }
- if (m > 0) { free(class_info->Namespaces); }
-
- if (class_info->NumberOfItems > 0) { free(class_info->Items); }
-
- free(class_info);
-}
-
-
-/* Initialize a Namespace struct */
-void vtkParse_InitNamespace(NamespaceInfo *name_info)
-{
- vtkParse_InitClass(name_info);
- name_info->ItemType = VTK_NAMESPACE_INFO;
-}
-
-/* Copy a Namespace struct */
-void vtkParse_CopyNamespace(NamespaceInfo *ninfo, const NamespaceInfo *orig)
-{
- vtkParse_CopyClass(ninfo, orig);
-}
-
-/* Free a Namespace struct */
-void vtkParse_FreeNamespace(NamespaceInfo *namespace_info)
-{
- vtkParse_FreeClass(namespace_info);
-}
-
-
-/* This method is used for extending dynamic arrays in a progression of
- * powers of two. If "n" reaches a power of two, then the array size is
- * doubled so that "n" can be safely incremented. */
-static void *array_size_check(
- void *arraymem, size_t size, int n)
-{
- /* if empty, alloc for the first time */
- if (n == 0)
- {
- return malloc(size);
- }
- /* if count is power of two, reallocate with double size */
- else if ((n & (n-1)) == 0)
- {
- return realloc(arraymem, (n << 1)*size);
- }
-
- /* no reallocation, just return the original array */
- return arraymem;
-}
-
-
-/* Utility method to add an included file to a FileInfo */
-void vtkParse_AddIncludeToFile(
- FileInfo *file_info, FileInfo *include_file)
-{
- file_info->Includes = (FileInfo **)array_size_check(
- (FileInfo **)file_info->Includes, sizeof(FileInfo *),
- file_info->NumberOfIncludes);
-
- file_info->Includes[file_info->NumberOfIncludes++] = include_file;
-
- if (!include_file->Strings)
- {
- include_file->Strings = file_info->Strings;
- }
-}
-
-/* Utility method to add a const char pointer to an array */
-void vtkParse_AddStringToArray(
- const char ***valueArray, int *count, const char *value)
-{
- *valueArray = (const char **)array_size_check(
- (char **)*valueArray, sizeof(const char *), *count);
-
- (*valueArray)[(*count)++] = value;
-}
-
-/* Utility method to add an item to an array */
-void vtkParse_AddItemToArray(
- ItemInfo **valueArray, int *count, parse_item_t type, int idx)
-{
- int n = *count;
- ItemInfo *values = *valueArray;
-
- values = (ItemInfo *)array_size_check(values, sizeof(ItemInfo), n);
-
- values[n].Type = type;
- values[n].Index = idx;
- *count = n+1;
- *valueArray = values;
-}
-
-/* Add a ClassInfo to a ClassInfo */
-void vtkParse_AddClassToClass(ClassInfo *info, ClassInfo *item)
-{
- vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
- item->ItemType, info->NumberOfClasses);
- info->Classes = (ClassInfo **)array_size_check(
- info->Classes, sizeof(ClassInfo *), info->NumberOfClasses);
- info->Classes[info->NumberOfClasses++] = item;
-}
-
-/* Add a FunctionInfo to a ClassInfo */
-void vtkParse_AddFunctionToClass(ClassInfo *info, FunctionInfo *item)
-{
- vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
- item->ItemType, info->NumberOfFunctions);
- info->Functions = (FunctionInfo **)array_size_check(
- info->Functions, sizeof(FunctionInfo *), info->NumberOfFunctions);
- info->Functions[info->NumberOfFunctions++] = item;
-}
-
-/* Add a EnumInfo to a ClassInfo */
-void vtkParse_AddEnumToClass(ClassInfo *info, EnumInfo *item)
-{
- vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
- item->ItemType, info->NumberOfEnums);
- info->Enums = (EnumInfo **)array_size_check(
- info->Enums, sizeof(EnumInfo *), info->NumberOfEnums);
- info->Enums[info->NumberOfEnums++] = item;
-}
-
-/* Add a Constant ValueInfo to a ClassInfo */
-void vtkParse_AddConstantToClass(ClassInfo *info, ValueInfo *item)
-{
- vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
- item->ItemType, info->NumberOfConstants);
- info->Constants = (ValueInfo **)array_size_check(
- info->Constants, sizeof(ValueInfo *), info->NumberOfConstants);
- info->Constants[info->NumberOfConstants++] = item;
-}
-
-/* Add a Variable ValueInfo to a ClassInfo */
-void vtkParse_AddVariableToClass(ClassInfo *info, ValueInfo *item)
-{
- vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
- item->ItemType, info->NumberOfVariables);
- info->Variables = (ValueInfo **)array_size_check(
- info->Variables, sizeof(ValueInfo *), info->NumberOfVariables);
- info->Variables[info->NumberOfVariables++] = item;
-}
-
-/* Add a Typedef ValueInfo to a ClassInfo */
-void vtkParse_AddTypedefToClass(ClassInfo *info, ValueInfo *item)
-{
- vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
- item->ItemType, info->NumberOfTypedefs);
- info->Typedefs = (ValueInfo **)array_size_check(
- info->Typedefs, sizeof(ValueInfo *), info->NumberOfTypedefs);
- info->Typedefs[info->NumberOfTypedefs++] = item;
-}
-
-/* Add a UsingInfo to a ClassInfo */
-void vtkParse_AddUsingToClass(ClassInfo *info, UsingInfo *item)
-{
- vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
- item->ItemType, info->NumberOfUsings);
- info->Usings = (UsingInfo **)array_size_check(
- info->Usings, sizeof(UsingInfo *), info->NumberOfUsings);
- info->Usings[info->NumberOfUsings++] = item;
-}
-
-
-/* Add a NamespaceInfo to a NamespaceInfo */
-void vtkParse_AddNamespaceToNamespace(NamespaceInfo *info, NamespaceInfo *item)
-{
- vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
- item->ItemType, info->NumberOfNamespaces);
- info->Namespaces = (NamespaceInfo **)array_size_check(
- info->Namespaces, sizeof(NamespaceInfo *), info->NumberOfNamespaces);
- info->Namespaces[info->NumberOfNamespaces++] = item;
-}
-
-/* Add a ClassInfo to a NamespaceInfo */
-void vtkParse_AddClassToNamespace(NamespaceInfo *info, ClassInfo *item)
-{
- vtkParse_AddClassToClass(info, item);
-}
-
-/* Add a FunctionInfo to a NamespaceInfo */
-void vtkParse_AddFunctionToNamespace(NamespaceInfo *info, FunctionInfo *item)
-{
- vtkParse_AddFunctionToClass(info, item);
-}
-
-/* Add a EnumInfo to a NamespaceInfo */
-void vtkParse_AddEnumToNamespace(NamespaceInfo *info, EnumInfo *item)
-{
- vtkParse_AddEnumToClass(info, item);
-}
-
-/* Add a Constant ValueInfo to a NamespaceInfo */
-void vtkParse_AddConstantToNamespace(NamespaceInfo *info, ValueInfo *item)
-{
- vtkParse_AddConstantToClass(info, item);
-}
-
-/* Add a Variable ValueInfo to a NamespaceInfo */
-void vtkParse_AddVariableToNamespace(NamespaceInfo *info, ValueInfo *item)
-{
- vtkParse_AddVariableToClass(info, item);
-}
-
-/* Add a Typedef ValueInfo to a NamespaceInfo */
-void vtkParse_AddTypedefToNamespace(NamespaceInfo *info, ValueInfo *item)
-{
- vtkParse_AddTypedefToClass(info, item);
-}
-
-/* Add a UsingInfo to a NamespaceInfo */
-void vtkParse_AddUsingToNamespace(NamespaceInfo *info, UsingInfo *item)
-{
- vtkParse_AddUsingToClass(info, item);
-}
-
-
-/* Add a ValueInfo parameter to a FunctionInfo */
-void vtkParse_AddParameterToFunction(FunctionInfo *info, ValueInfo *item)
-{
- info->Parameters = (ValueInfo **)array_size_check(
- info->Parameters, sizeof(ValueInfo *), info->NumberOfParameters);
- info->Parameters[info->NumberOfParameters++] = item;
-}
-
-
-/* Add a ValueInfo to a TemplateInfo */
-void vtkParse_AddParameterToTemplate(TemplateInfo *info, ValueInfo *item)
-{
- info->Parameters = (ValueInfo **)array_size_check(
- info->Parameters, sizeof(ValueInfo *), info->NumberOfParameters);
- info->Parameters[info->NumberOfParameters++] = item;
-}
-
-
-/* Add default constructors if they do not already exist */
-void vtkParse_AddDefaultConstructors(ClassInfo *cls, StringCache *cache)
-{
- FunctionInfo *func;
- ValueInfo *param;
- size_t k, l;
- int i, n;
- int default_constructor = 1;
- int copy_constructor = 1;
- char *tname;
- const char *ccname;
-
- if (cls == NULL || cls->Name == NULL)
- {
- return;
- }
-
- n = cls->NumberOfFunctions;
- for (i = 0; i < n; i++)
- {
- func = cls->Functions[i];
- if (func->Name && strcmp(func->Name, cls->Name) == 0)
- {
- default_constructor = 0;
-
- if (func->NumberOfParameters == 1)
- {
- param = func->Parameters[0];
- if (param->Class &&
- strcmp(param->Class, cls->Name) == 0 &&
- (param->Type & VTK_PARSE_POINTER_MASK) == 0)
- {
- copy_constructor = 0;
- }
- }
- }
- }
-
- if (default_constructor)
- {
- func = (FunctionInfo *)malloc(sizeof(FunctionInfo));
- vtkParse_InitFunction(func);
- func->Class = cls->Name;
- func->Name = cls->Name;
- k = strlen(cls->Name);
- tname = vtkParse_NewString(cache, k + 2);
- strcpy(tname, cls->Name);
- strcpy(&tname[k], "()");
- func->Signature = tname;
- vtkParse_AddFunctionToClass(cls, func);
- }
-
- if (copy_constructor)
- {
- ccname = cls->Name;
-
- if (cls->Template)
- {
- /* specialize the name */
- n = cls->Template->NumberOfParameters;
-
- k = strlen(cls->Name) + 2;
- for (i = 0; i < n; i++)
- {
- if (cls->Template->Parameters[i]->Name)
- {
- k += strlen(cls->Template->Parameters[i]->Name) + 2;
- }
- }
- tname = vtkParse_NewString(cache, k);
- strcpy(tname, cls->Name);
- k = strlen(tname);
- tname[k++] = '<';
- for (i = 0; i < n; i++)
- {
- if (cls->Template->Parameters[i]->Name)
- {
- strcpy(&tname[k], cls->Template->Parameters[i]->Name);
- k += strlen(cls->Template->Parameters[i]->Name);
- }
- if (i+1 < n)
- {
- tname[k++] = ',';
- tname[k++] = ' ';
- }
- }
- tname[k++] = '>';
- tname[k] = '\0';
- ccname = tname;
- }
-
- func = (FunctionInfo *)malloc(sizeof(FunctionInfo));
- vtkParse_InitFunction(func);
- func->Class = cls->Name;
- func->Name = cls->Name;
- k = strlen(cls->Name);
- l = strlen(ccname);
- tname = vtkParse_NewString(cache, k + l + 9);
- strcpy(tname, cls->Name);
- strcpy(&tname[k], "(const &");
- strcpy(&tname[k+8], ccname);
- strcpy(&tname[k+8+l], ")");
- func->Signature = tname;
- param = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_InitValue(param);
- param->Type = (VTK_PARSE_OBJECT_REF | VTK_PARSE_CONST);
- param->Class = ccname;
- vtkParse_AddParameterToFunction(func, param);
- vtkParse_AddFunctionToClass(cls, func);
- }
-}
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkParseData.h
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-/*-------------------------------------------------------------------------
- Copyright (c) 2010 David Gobbi.
-
- Contributed to the VisualizationToolkit by the author in May 2010
- under the terms of the Visualization Toolkit 2008 copyright.
--------------------------------------------------------------------------*/
-
-/*
- Data structures used by vtkParse.
-*/
-
-#ifndef VTK_PARSE_DATA_H
-#define VTK_PARSE_DATA_H
-
-#include "vtkParseType.h"
-#include "vtkParseString.h"
-
-/* legacy */
-#ifndef VTK_PARSE_LEGACY_REMOVE
-#define MAX_ARGS 20
-#endif
-
-/**
- * Access flags
- */
-typedef enum _parse_access_t
-{
- VTK_ACCESS_PUBLIC = 0,
- VTK_ACCESS_PROTECTED = 1,
- VTK_ACCESS_PRIVATE = 2
-} parse_access_t;
-
-/**
- * ItemType constants
- */
-typedef enum _parse_item_t
-{
- VTK_NAMESPACE_INFO = 1,
- VTK_CLASS_INFO = 2,
- VTK_STRUCT_INFO = 3,
- VTK_UNION_INFO = 4,
- VTK_ENUM_INFO = 5,
- VTK_FUNCTION_INFO = 6,
- VTK_VARIABLE_INFO = 7,
- VTK_CONSTANT_INFO = 8,
- VTK_TYPEDEF_INFO = 9,
- VTK_USING_INFO = 10
-} parse_item_t;
-
-/**
- * ItemInfo just contains an index
- */
-typedef struct _ItemInfo
-{
- parse_item_t Type;
- int Index;
-} ItemInfo;
-
-/* forward declarations */
-struct _ValueInfo;
-struct _FunctionInfo;
-struct _FileInfo;
-typedef struct _ValueInfo ValueInfo;
-typedef struct _FunctionInfo FunctionInfo;
-typedef struct _FileInfo FileInfo;
-
-/**
- * TemplateInfo holds template definitions
- */
-typedef struct _TemplateInfo
-{
- int NumberOfParameters;
- ValueInfo **Parameters;
-} TemplateInfo;
-
-/**
- * ValueInfo is for typedefs, constants, variables,
- * function parameters, and return values
- *
- * Note that Dimensions is an array of char pointers, in
- * order to support dimensions that are sized according to
- * template parameter values or according to named constants.
- */
-struct _ValueInfo
-{
- parse_item_t ItemType;
- parse_access_t Access;
- const char *Name;
- const char *Comment;
- const char *Value; /* for vars or default paramter values */
- unsigned int Type; /* as defined in vtkParseType.h */
- const char *Class; /* classname for type */
- int Count; /* total number of values, if known */
- const char *CountHint; /* hint about how to get the count */
- int NumberOfDimensions; /* dimensionality for arrays */
- const char **Dimensions; /* dimensions for arrays */
- FunctionInfo *Function; /* for function pointer values */
- TemplateInfo *Template; /* template parameters, or NULL */
- int IsStatic; /* for class variables only */
- int IsEnum; /* for constants only */
-};
-
-/**
- * FunctionInfo is for functions and methods
- */
-struct _FunctionInfo
-{
- parse_item_t ItemType;
- parse_access_t Access;
- const char *Name;
- const char *Comment;
- const char *Class; /* class name for methods */
- const char *Signature; /* function signature as text */
- TemplateInfo *Template; /* template parameters, or NULL */
- int NumberOfParameters;
- ValueInfo **Parameters;
- ValueInfo *ReturnValue; /* NULL for constructors and destructors */
- const char *Macro; /* the macro that defined this function */
- const char *SizeHint; /* hint the size e.g. for operator[] */
- int IsOperator;
- int IsVariadic;
- int IsLegacy; /* marked as a legacy method or function */
- int IsStatic; /* methods only */
- int IsVirtual; /* methods only */
- int IsPureVirtual; /* methods only */
- int IsConst; /* methods only */
- int IsExplicit; /* constructors only */
-#ifndef VTK_PARSE_LEGACY_REMOVE
- int NumberOfArguments; /* legacy */
- unsigned int ArgTypes[MAX_ARGS]; /* legacy */
- const char *ArgClasses[MAX_ARGS];/* legacy */
- int ArgCounts[MAX_ARGS]; /* legacy */
- unsigned int ReturnType; /* legacy */
- const char *ReturnClass; /* legacy */
- int HaveHint; /* legacy */
- int HintSize; /* legacy */
- int ArrayFailure;/* legacy */
- int IsPublic; /* legacy */
- int IsProtected; /* legacy */
-#endif
-};
-
-/**
- * EnumInfo is for enums
- * Constants are at the same level as the Enum, not inside it.
- */
-typedef struct _EnumInfo
-{
- parse_item_t ItemType;
- parse_access_t Access;
- const char *Name;
- const char *Comment;
-} EnumInfo;
-
-/**
- * UsingInfo is for using directives
- */
-typedef struct _UsingInfo
-{
- parse_item_t ItemType;
- parse_access_t Access;
- const char *Name; /* null for using whole namespace */
- const char *Comment;
- const char *Scope; /* the namespace or class */
-} UsingInfo;
-
-/**
- * ClassInfo is for classes, structs, unions, and namespaces
- */
-typedef struct _ClassInfo
-{
- parse_item_t ItemType;
- parse_access_t Access;
- const char *Name;
- const char *Comment;
- TemplateInfo *Template;
- int NumberOfSuperClasses;
- const char **SuperClasses;
- int NumberOfItems;
- ItemInfo *Items;
- int NumberOfClasses;
- struct _ClassInfo **Classes;
- int NumberOfFunctions;
- FunctionInfo **Functions;
- int NumberOfConstants;
- ValueInfo **Constants;
- int NumberOfVariables;
- ValueInfo **Variables;
- int NumberOfEnums;
- EnumInfo **Enums;
- int NumberOfTypedefs;
- ValueInfo **Typedefs;
- int NumberOfUsings;
- UsingInfo **Usings;
- int NumberOfNamespaces;
- struct _ClassInfo **Namespaces;
- int IsAbstract;
- int HasDelete;
-} ClassInfo;
-
-/**
- * Namespace is for namespaces
- */
-typedef struct _ClassInfo NamespaceInfo;
-
-/**
- * FileInfo is for header files
- */
-struct _FileInfo
-{
- const char *FileName;
- const char *NameComment;
- const char *Description;
- const char *Caveats;
- const char *SeeAlso;
-
- int NumberOfIncludes;
- struct _FileInfo **Includes;
- ClassInfo *MainClass;
- NamespaceInfo *Contents;
- StringCache *Strings;
-};
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Initializer methods
- */
-/*@{*/
-void vtkParse_InitFile(FileInfo *file_info);
-void vtkParse_InitNamespace(NamespaceInfo *namespace_info);
-void vtkParse_InitClass(ClassInfo *cls);
-void vtkParse_InitFunction(FunctionInfo *func);
-void vtkParse_InitValue(ValueInfo *val);
-void vtkParse_InitEnum(EnumInfo *item);
-void vtkParse_InitUsing(UsingInfo *item);
-void vtkParse_InitTemplate(TemplateInfo *arg);
-/*@}*/
-
-/**
- * Copy methods
- *
- * Strings are not deep-copied, they are assumed to be persistent.
- */
-/*@{*/
-void vtkParse_CopyNamespace(NamespaceInfo *data, const NamespaceInfo *orig);
-void vtkParse_CopyClass(ClassInfo *data, const ClassInfo *orig);
-void vtkParse_CopyFunction(FunctionInfo *data, const FunctionInfo *orig);
-void vtkParse_CopyValue(ValueInfo *data, const ValueInfo *orig);
-void vtkParse_CopyEnum(EnumInfo *data, const EnumInfo *orig);
-void vtkParse_CopyUsing(UsingInfo *data, const UsingInfo *orig);
-void vtkParse_CopyTemplate(TemplateInfo *data, const TemplateInfo *orig);
-/*@}*/
-
-/**
- * Free methods
- *
- * Strings are not freed, they are assumed to be persistent.
- */
-/*@{*/
-void vtkParse_FreeFile(FileInfo *file_info);
-void vtkParse_FreeNamespace(NamespaceInfo *namespace_info);
-void vtkParse_FreeClass(ClassInfo *cls);
-void vtkParse_FreeFunction(FunctionInfo *func);
-void vtkParse_FreeValue(ValueInfo *val);
-void vtkParse_FreeEnum(EnumInfo *item);
-void vtkParse_FreeUsing(UsingInfo *item);
-void vtkParse_FreeTemplate(TemplateInfo *arg);
-/*@}*/
-
-
-/**
- * Add a string to an array of strings, grow array as necessary.
- */
-void vtkParse_AddStringToArray(
- const char ***valueArray, int *count, const char *value);
-
-/**
- * Expand the Item array for classes and namespaces.
- */
-void vtkParse_AddItemToArray(
- ItemInfo **valueArray, int *count, parse_item_t type, int idx);
-
-
-/**
- * Add various items to the structs.
- */
-/*@{*/
-void vtkParse_AddIncludeToFile(FileInfo *info, FileInfo *item);
-void vtkParse_AddClassToClass(ClassInfo *info, ClassInfo *item);
-void vtkParse_AddFunctionToClass(ClassInfo *info, FunctionInfo *item);
-void vtkParse_AddEnumToClass(ClassInfo *info, EnumInfo *item);
-void vtkParse_AddConstantToClass(ClassInfo *info, ValueInfo *item);
-void vtkParse_AddVariableToClass(ClassInfo *info, ValueInfo *item);
-void vtkParse_AddTypedefToClass(ClassInfo *info, ValueInfo *item);
-void vtkParse_AddUsingToClass(ClassInfo *info, UsingInfo *item);
-void vtkParse_AddNamespaceToNamespace(NamespaceInfo *info,NamespaceInfo *item);
-void vtkParse_AddClassToNamespace(NamespaceInfo *info, ClassInfo *item);
-void vtkParse_AddFunctionToNamespace(NamespaceInfo *info, FunctionInfo *item);
-void vtkParse_AddEnumToNamespace(NamespaceInfo *info, EnumInfo *item);
-void vtkParse_AddConstantToNamespace(NamespaceInfo *info, ValueInfo *item);
-void vtkParse_AddVariableToNamespace(NamespaceInfo *info, ValueInfo *item);
-void vtkParse_AddTypedefToNamespace(NamespaceInfo *info, ValueInfo *item);
-void vtkParse_AddUsingToNamespace(NamespaceInfo *info, UsingInfo *item);
-void vtkParse_AddParameterToFunction(FunctionInfo *info, ValueInfo *item);
-void vtkParse_AddParameterToTemplate(TemplateInfo *info, ValueInfo *item);
-/*@}*/
-
-/**
- * Add default constructors to a class if they do not already exist
- */
-void vtkParse_AddDefaultConstructors(ClassInfo *data, StringCache *cache);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkParseExtras.c
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-/*-------------------------------------------------------------------------
- Copyright (c) 2011 David Gobbi.
-
- Contributed to the VisualizationToolkit by the author in May 2011
- under the terms of the Visualization Toolkit 2008 copyright.
--------------------------------------------------------------------------*/
-
-#include "vtkParseExtras.h"
-#include "vtkParseString.h"
-#include "vtkType.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <assert.h>
-
-/* skip over an identifier */
-static size_t vtkparse_id_len(const char *text)
-{
- size_t i = 0;
- char c = text[0];
-
- if ((c >= 'a' && c <= 'z') ||
- (c >= 'A' && c <= 'Z') ||
- c == '_')
- {
- do
- {
- c = text[++i];
- }
- while ((c >= 'a' && c <= 'z') ||
- (c >= 'A' && c <= 'Z') ||
- (c >= '0' && c <= '9') ||
- c == '_');
- }
-
- return i;
-}
-
-/* skip over numbers, int or float, including suffixes */
-static size_t vtkparse_number_len(const char *text)
-{
- size_t i = 0;
- char c = text[0];
-
- if (c == '.')
- {
- c = text[1];
- }
-
- if (c >= '0' && c <= '9')
- {
- do
- {
- do
- {
- c = text[++i];
- }
- while ((c >= '0' && c <= '9') ||
- (c >= 'a' && c <= 'z') ||
- (c >= 'A' && c <= 'Z') ||
- c == '_' || c == '.');
- }
- while ((c == '-' || c == '+') &&
- (text[i-1] == 'e' || text[i-1] == 'E'));
- }
-
- return i;
-}
-
-/* skip over string and char literals. */
-static size_t vtkparse_quote_len(const char *text)
-{
- size_t i = 0;
- const char qc = text[0];
- char c = text[0];
-
- if (c == '\'' || c == '\"')
- {
- do
- {
- do
- {
- c = text[++i];
- }
- while (c != qc && c != '\n' && c != '\0');
- }
- while (c == qc && text[i-1] == '\\');
-
- if (c == qc)
- {
- ++i;
- }
- }
-
- return i;
-}
-
-/* skip over an expression in brackets */
-static size_t vtkparse_bracket_len(const char *text)
-{
- size_t i = 0;
- size_t j = 1;
- char bc = text[0];
- char tc = 0;
- char semi = ';';
- char c;
-
- if (bc == '(') { tc = ')'; }
- else if (bc == '[') { tc = ']'; }
- else if (bc == '{') { tc = '}'; semi = '\0'; }
- else if (bc == '<') { tc = '>'; }
- else { return 0; }
-
- do
- {
- i += j;
- j = 1;
- c = text[i];
- if (c == '\'' || c == '\"')
- {
- j = vtkparse_quote_len(&text[i]);
- }
- else if (c == bc || c == '(' || c == '[' || c == '{')
- {
- j = vtkparse_bracket_len(&text[i]);
- }
- }
- while (c != tc && c != ')' && c != ']' && c != '}' &&
- c != '\0' && c != '\n' && c != semi && j != 0);
-
- if (c == tc)
- {
- i++;
- }
-
- return i;
-}
-
-/* skip over a name that is neither scoped or templated, return the
- * total number of characters in the name */
-size_t vtkParse_IdentifierLength(const char *text)
-{
- return vtkparse_id_len(text);
-}
-
-/* skip over a name that might be templated, return the
- * total number of characters in the name */
-size_t vtkParse_UnscopedNameLength(const char *text)
-{
- size_t i = 0;
-
- i += vtkparse_id_len(text);
- if (text[i] == '<')
- {
- i += vtkparse_bracket_len(&text[i]);
- if (text[i-1] != '>')
- {
- fprintf(stderr, "Bad template args %*.*s\n", (int)i, (int)i, text);
- assert(text[i-1] == '>');
- return 0;
- }
- }
-
- return i;
-}
-
-/* skip over a name that might be scoped or templated, return the
- * total number of characters in the name */
-size_t vtkParse_NameLength(const char *text)
-{
- size_t i = 0;
- do
- {
- if (text[i] == ':' && text[i+1] == ':') { i += 2; }
- i += vtkParse_UnscopedNameLength(&text[i]);
- }
- while (text[i] == ':' && text[i+1] == ':');
- return i;
-}
-
-/* Search and replace, return the initial string if no replacements
- * occurred, otherwise return a new string. */
-static const char *vtkparse_string_replace(
- StringCache *cache, const char *str1,
- int n, const char *name[], const char *val[])
-{
- const char *cp = str1;
- char result_store[1024];
- size_t resultMaxLen = 1024;
- char *result, *tmp;
- int k;
- size_t i, j, l, m;
- size_t lastPos, nameBegin, nameEnd;
- int replaced = 0;
- int any_replaced = 0;
-
- result = result_store;
-
- if (n == 0)
- {
- return str1;
- }
-
- i = 0;
- j = 0;
- result[j] = '\0';
-
- while (cp[i] != '\0')
- {
- lastPos = i;
-
- /* skip all chars that aren't part of a name */
- while ((cp[i] < 'a' || cp[i] > 'z') &&
- (cp[i] < 'A' || cp[i] > 'Z') &&
- cp[i] != '_' && cp[i] != '\0')
- {
- if (cp[i] == '\'' || cp[i] == '\"')
- {
- i += vtkparse_quote_len(&cp[i]);
- }
- else if (cp[i] >= '0' && cp[i] <= '9')
- {
- i += vtkparse_number_len(&cp[i]);
- }
- else
- {
- i++;
- }
- }
- nameBegin = i;
-
- /* skip all chars that are part of a name */
- i += vtkparse_id_len(&cp[i]);
- nameEnd = i;
-
- /* search through the list of names to replace */
- replaced = 0;
- m = nameEnd - nameBegin;
- for (k = 0; k < n; k++)
- {
- l = strlen(name[k]);
- if (l > 0 && l == m && strncmp(&cp[nameBegin], name[k], l) == 0)
- {
- m = strlen(val[k]);
- replaced = 1;
- any_replaced = 1;
- break;
- }
- }
-
- /* expand the storage space if needed */
- if (j + m + (nameBegin - lastPos) + 1 >= resultMaxLen)
- {
- resultMaxLen *= 2;
- tmp = (char *)malloc(resultMaxLen);
- strcpy(tmp, result);
- if (result != result_store)
- {
- free(result);
- }
- result = tmp;
- }
-
- /* copy the old bits */
- if (nameBegin > lastPos)
- {
- strncpy(&result[j], &cp[lastPos], nameBegin - lastPos);
- j += (nameBegin - lastPos);
- }
-
- /* do the replacement */
- if (replaced)
- {
- strncpy(&result[j], val[k], m);
- j += m;
- /* guard against creating double ">>" */
- if (val[k][m-1] == '>' && cp[nameEnd] == '>')
- {
- result[j++] = ' ';
- }
- }
- else if (nameEnd > nameBegin)
- {
- strncpy(&result[j], &cp[nameBegin], nameEnd - nameBegin);
- j += (nameEnd - nameBegin);
- }
-
- result[j] = '\0';
- }
-
- if (cache)
- {
- if (any_replaced)
- {
- /* use the efficient CacheString method */
- cp = vtkParse_CacheString(cache, result, j);
- if (result != result_store)
- {
- free(result);
- }
- }
- }
- else
- {
- if (any_replaced)
- {
- /* return a string that was allocated with malloc */
- if (result == result_store)
- {
- tmp = (char *)malloc(strlen(result) + 1);
- strcpy(tmp, result);
- result = tmp;
- }
- cp = result;
- }
- }
-
- return cp;
-}
-
-/* Wherever one of the specified names exists inside a Value or inside
- * a Dimension size, replace it with the corresponding val string. */
-void vtkParse_ExpandValues(
- ValueInfo *valinfo, StringCache *cache,
- int n, const char *name[], const char *val[])
-{
- int j, m, dim, count;
- const char *cp;
-
- if (valinfo->Value)
- {
- valinfo->Value = vtkparse_string_replace(
- cache, valinfo->Value, n, name, val);
- }
-
- m = valinfo->NumberOfDimensions;
- if (m)
- {
- count = 1;
- for (j = 0; j < m; j++)
- {
- cp = valinfo->Dimensions[j];
- if (cp)
- {
- cp = vtkparse_string_replace(cache, cp, n, name, val);
- valinfo->Dimensions[j] = cp;
-
- /* check whether dimension has become an integer literal */
- if (cp[0] == '0' && (cp[1] == 'x' || cp[1] == 'X')) { cp += 2; }
- while (*cp >= '0' && *cp <= '9') { cp++; }
- while (*cp == 'u' || *cp == 'l' || *cp == 'U' || *cp == 'L') { cp++; }
- dim = 0;
- if (*cp == '\0')
- {
- dim = (int)strtol(valinfo->Dimensions[j], NULL, 0);
- }
- count *= dim;
- }
- }
-
- /* update count if all values are integer literals */
- if (count)
- {
- valinfo->Count = count;
- }
- }
-}
-
-/* Expand a typedef within a type declaration. */
-void vtkParse_ExpandTypedef(
- ValueInfo *valinfo, ValueInfo *typedefinfo)
-{
- const char *classname;
- unsigned int baseType;
- unsigned int pointers;
- unsigned int refbit;
- unsigned int qualifiers;
- unsigned int tmp1, tmp2;
- int i;
-
- classname = typedefinfo->Class;
- baseType = (typedefinfo->Type & VTK_PARSE_BASE_TYPE);
- pointers = (typedefinfo->Type & VTK_PARSE_POINTER_MASK);
- refbit = (valinfo->Type & VTK_PARSE_REF);
- qualifiers = (typedefinfo->Type & VTK_PARSE_CONST);
-
- /* handle const */
- if ((valinfo->Type & VTK_PARSE_CONST) != 0)
- {
- if ((pointers & VTK_PARSE_POINTER_LOWMASK) != 0)
- {
- if ((pointers & VTK_PARSE_POINTER_LOWMASK) != VTK_PARSE_ARRAY)
- {
- /* const turns into const pointer */
- pointers = (pointers & ~VTK_PARSE_POINTER_LOWMASK);
- pointers = (pointers | VTK_PARSE_CONST_POINTER);
- }
- }
- else
- {
- /* const remains as const value */
- qualifiers = (qualifiers | VTK_PARSE_CONST);
- }
- }
-
- /* make a reversed copy of the pointer bitfield */
- tmp1 = (valinfo->Type & VTK_PARSE_POINTER_MASK);
- tmp2 = 0;
- while (tmp1)
- {
- tmp2 = ((tmp2 << 2) | (tmp1 & VTK_PARSE_POINTER_LOWMASK));
- tmp1 = ((tmp1 >> 2) & VTK_PARSE_POINTER_MASK);
- }
-
- /* turn pointers into zero-element arrays where necessary */
- if ((pointers & VTK_PARSE_POINTER_LOWMASK) == VTK_PARSE_ARRAY)
- {
- tmp2 = ((tmp2 >> 2) & VTK_PARSE_POINTER_MASK);
- while (tmp2)
- {
- vtkParse_AddStringToArray(
- &valinfo->Dimensions, &valinfo->NumberOfDimensions, "");
- tmp2 = ((tmp2 >> 2) & VTK_PARSE_POINTER_MASK);
- }
- }
- else
- {
- /* combine the pointers */
- while (tmp2)
- {
- pointers = ((pointers << 2) | (tmp2 & VTK_PARSE_POINTER_LOWMASK));
- tmp2 = ((tmp2 >> 2) & VTK_PARSE_POINTER_MASK);
- }
- }
-
- /* combine the arrays */
- for (i = 0; i < typedefinfo->NumberOfDimensions; i++)
- {
- vtkParse_AddStringToArray(
- &valinfo->Dimensions, &valinfo->NumberOfDimensions,
- typedefinfo->Dimensions[i]);
- }
- if (valinfo->NumberOfDimensions > 1)
- {
- pointers = ((pointers & ~VTK_PARSE_POINTER_LOWMASK) | VTK_PARSE_ARRAY);
- }
-
- /* put everything together */
- valinfo->Type = (baseType | pointers | refbit | qualifiers);
- valinfo->Class = classname;
- valinfo->Function = typedefinfo->Function;
- valinfo->Count *= typedefinfo->Count;
-}
-
-/* Expand any unrecognized types within a variable, parameter, or typedef
- * that match any of the supplied typedefs. The expansion is done in-place. */
-void vtkParse_ExpandTypedefs(
- ValueInfo *val, StringCache *cache,
- int n, const char *names[], const char *values[],
- ValueInfo *typedefinfo[])
-{
- int i;
-
- if (((val->Type & VTK_PARSE_BASE_TYPE) == VTK_PARSE_OBJECT ||
- (val->Type & VTK_PARSE_BASE_TYPE) == VTK_PARSE_UNKNOWN) &&
- val->Class != 0)
- {
- for (i = 0; i < n; i++)
- {
- if (typedefinfo[i] && strcmp(val->Class, typedefinfo[i]->Name) == 0)
- {
- vtkParse_ExpandTypedef(val, typedefinfo[i]);
- break;
- }
- }
- if (i == n)
- {
- /* in case type appears as a template arg of another type */
- val->Class = vtkparse_string_replace(
- cache, val->Class, n, names, values);
- }
- }
-}
-
-/* Helper struct for VTK-specific types */
-struct vtk_type_struct
-{
- size_t len;
- const char *name;
- unsigned int type;
-};
-
-/* Simple utility for mapping VTK types to VTK_PARSE types */
-unsigned int vtkParse_MapType(int vtktype)
-{
- static unsigned int typemap[] =
- {
- VTK_PARSE_VOID, /* VTK_VOID 0 */
- 0, /* VTK_BIT 1 */
- VTK_PARSE_CHAR, /* VTK_CHAR 2 */
- VTK_PARSE_UNSIGNED_CHAR, /* VTK_UNSIGNED_CHAR 3 */
- VTK_PARSE_SHORT, /* VTK_SHORT 4 */
- VTK_PARSE_UNSIGNED_SHORT, /* VTK_UNSIGNED_SHORT 5 */
- VTK_PARSE_INT, /* VTK_INT 6 */
- VTK_PARSE_UNSIGNED_INT, /* VTK_UNSIGNED_INT 7 */
- VTK_PARSE_LONG, /* VTK_LONG 8 */
- VTK_PARSE_UNSIGNED_LONG, /* VTK_UNSIGNED_LONG 9 */
- VTK_PARSE_FLOAT, /* VTK_FLOAT 10 */
- VTK_PARSE_DOUBLE, /* VTK_DOUBLE 11 */
- VTK_PARSE_ID_TYPE, /* VTK_ID_TYPE 12 */
- VTK_PARSE_STRING, /* VTK_STRING 13 */
- 0, /* VTK_OPAQUE 14 */
- VTK_PARSE_SIGNED_CHAR, /* VTK_SIGNED_CHAR 15 */
- VTK_PARSE_LONG_LONG, /* VTK_LONG_LONG 16 */
- VTK_PARSE_UNSIGNED_LONG_LONG, /* VTK_UNSIGNED_LONG_LONG 17 */
- VTK_PARSE___INT64, /* VTK___INT64 18 */
- VTK_PARSE_UNSIGNED___INT64, /* VTK_UNSIGNED___INT64 19 */
- 0, /* VTK_VARIANT 20 */
- 0, /* VTK_OBJECT 21 */
- VTK_PARSE_UNICODE_STRING /* VTK_UNICODE_STRING 22 */
- };
-
- if (vtktype > 0 && vtktype <= VTK_UNICODE_STRING)
- {
- return typemap[vtktype];
- }
- return 0;
-}
-
-/* Get a type from a type name, and return the number of characters used.
- * If the "classname" argument is not NULL, then it is used to return
- * the short name for the type, e.g. "long int" becomes "long", while
- * typedef names and class names are returned unchanged. If "const"
- * appears in the type name, then the const bit flag is set for the
- * type, but "const" will not appear in the returned classname. */
-size_t vtkParse_BasicTypeFromString(
- const char *text, unsigned int *type_ptr,
- const char **classname_ptr, size_t *len_ptr)
-{
- /* The various typedefs and types specific to VTK */
- static struct vtk_type_struct vtktypes[] = {
- { 9, "vtkIdType", VTK_ID_TYPE },
- { 12, "vtkStdString", VTK_STRING },
- { 16, "vtkUnicodeString", VTK_UNICODE_STRING },
- { 11, "vtkTypeInt8", VTK_TYPE_INT8 },
- { 12, "vtkTypeUInt8", VTK_TYPE_UINT8 },
- { 12, "vtkTypeInt16", VTK_TYPE_INT16 },
- { 13, "vtkTypeUInt16", VTK_TYPE_UINT16 },
- { 12, "vtkTypeInt32", VTK_TYPE_INT32 },
- { 13, "vtkTypeUInt32", VTK_TYPE_UINT32 },
- { 12, "vtkTypeInt64", VTK_TYPE_INT64 },
- { 13, "vtkTypeUInt64", VTK_TYPE_UINT64 },
- { 14, "vtkTypeFloat32", VTK_TYPE_FLOAT32 },
- { 14, "vtkTypeFloat64", VTK_TYPE_FLOAT64 },
- { 0, 0, 0 } };
-
- /* Other typedefs and types */
- static struct vtk_type_struct stdtypes[] = {
- { 6, "size_t", VTK_PARSE_SIZE_T },
- { 7, "ssize_t", VTK_PARSE_SSIZE_T },
- { 7, "ostream", VTK_PARSE_OSTREAM },
- { 7, "istream", VTK_PARSE_ISTREAM },
- { 8, "string", VTK_PARSE_STRING },
- { 0, 0, 0 } };
-
- const char *cp = text;
- const char *tmpcp;
- size_t k, n, m;
- int i;
- unsigned int const_bits = 0;
- unsigned int static_bits = 0;
- unsigned int unsigned_bits = 0;
- unsigned int base_bits = 0;
- const char *classname = NULL;
- size_t len = 0;
-
- while (*cp == ' ' || *cp == '\t') { cp++; }
-
- while ((*cp >= 'a' && *cp <= 'z') ||
- (*cp >= 'A' && *cp <= 'Z') ||
- (*cp == '_') || (cp[0] == ':' && cp[1] == ':'))
- {
- /* skip all chars that are part of a name */
- n = vtkParse_NameLength(cp);
-
- if ((n == 6 && strncmp("static", cp, n) == 0) ||
- (n == 4 && strncmp("auto", cp, n) == 0) ||
- (n == 8 && strncmp("register", cp, n) == 0) ||
- (n == 8 && strncmp("volatile", cp, n) == 0))
- {
- if (strncmp("static", cp, n) == 0)
- {
- static_bits = VTK_PARSE_STATIC;
- }
- }
- else if (n == 5 && strncmp(cp, "const", n) == 0)
- {
- const_bits |= VTK_PARSE_CONST;
- }
- else if (n == 8 && strncmp(cp, "unsigned", n) == 0)
- {
- unsigned_bits |= VTK_PARSE_UNSIGNED;
- if (base_bits == 0)
- {
- classname = "int";
- base_bits = VTK_PARSE_INT;
- }
- }
- else if (n == 6 && strncmp(cp, "signed", n) == 0)
- {
- if (base_bits == VTK_PARSE_CHAR)
- {
- classname = "signed char";
- base_bits = VTK_PARSE_SIGNED_CHAR;
- }
- else
- {
- classname = "int";
- base_bits = VTK_PARSE_INT;
- }
- }
- else if (n == 3 && strncmp(cp, "int", n) == 0)
- {
- if (base_bits == 0)
- {
- classname = "int";
- base_bits = VTK_PARSE_INT;
- }
- }
- else if (n == 4 && strncmp(cp, "long", n) == 0)
- {
- if (base_bits == VTK_PARSE_DOUBLE)
- {
- classname = "long double";
- base_bits = VTK_PARSE_LONG_DOUBLE;
- }
- else if (base_bits == VTK_PARSE_LONG)
- {
- classname = "long long";
- base_bits = VTK_PARSE_LONG_LONG;
- }
- else
- {
- classname = "long";
- base_bits = VTK_PARSE_LONG;
- }
- }
- else if (n == 5 && strncmp(cp, "short", n) == 0)
- {
- classname = "short";
- base_bits = VTK_PARSE_SHORT;
- }
- else if (n == 4 && strncmp(cp, "char", n) == 0)
- {
- if (base_bits == VTK_PARSE_INT && unsigned_bits != VTK_PARSE_UNSIGNED)
- {
- classname = "signed char";
- base_bits = VTK_PARSE_SIGNED_CHAR;
- }
- else
- {
- classname = "char";
- base_bits = VTK_PARSE_CHAR;
- }
- }
- else if (n == 5 && strncmp(cp, "float", n) == 0)
- {
- classname = "float";
- base_bits = VTK_PARSE_FLOAT;
- }
- else if (n == 6 && strncmp(cp, "double", n) == 0)
- {
- if (base_bits == VTK_PARSE_LONG)
- {
- classname = "long double";
- base_bits = VTK_PARSE_LONG_DOUBLE;
- }
- else
- {
- classname = "double";
- base_bits = VTK_PARSE_DOUBLE;
- }
- }
- else if (n == 4 && strncmp(cp, "bool", n) == 0)
- {
- classname = "bool";
- base_bits = VTK_PARSE_BOOL;
- }
- else if (n == 4 && strncmp(cp, "void", n) == 0)
- {
- classname = "void";
- base_bits = VTK_PARSE_VOID;
- }
- else if (n == 7 && strncmp(cp, "__int64", n) == 0)
- {
- classname = "__int64";
- base_bits = VTK_PARSE___INT64;
- }
- else
- {
- /* if type already found, break */
- if (base_bits != 0)
- {
- break;
- }
-
- /* check vtk typedefs */
- if (strncmp(cp, "vtk", 3) == 0)
- {
- for (i = 0; vtktypes[i].len != 0; i++)
- {
- if (n == vtktypes[i].len && strncmp(cp, vtktypes[i].name, n) == 0)
- {
- classname = vtktypes[i].name;
- base_bits = vtkParse_MapType((int)vtktypes[i].type);
- }
- }
- }
-
- /* check standard typedefs */
- if (base_bits == 0)
- {
- m = 0;
- if (strncmp(cp, "::", 2) == 0) { m = 2; }
- else if (strncmp(cp, "std::", 5) == 0) { m = 5; }
- else if (strncmp(cp, "vtkstd::", 8) == 0) { m = 8; }
-
- /* advance past the namespace */
- tmpcp = cp + m;
-
- for (i = 0; stdtypes[i].len != 0; i++)
- {
- if (n == stdtypes[i].len && strncmp(tmpcp, stdtypes[i].name, n) == 0)
- {
- classname = stdtypes[i].name;
- base_bits = stdtypes[i].type;
- }
- }
-
- /* include the namespace if present */
- if (base_bits != 0 && m > 0)
- {
- classname = cp;
- len = n;
- }
- }
-
- /* anything else is assumed to be a class, enum, or who knows */
- if (base_bits == 0)
- {
- base_bits = VTK_PARSE_UNKNOWN;
- classname = cp;
- len = n;
-
- /* VTK classes all start with vtk */
- if (strncmp(classname, "vtk", 3) == 0)
- {
- base_bits = VTK_PARSE_OBJECT;
- /* make sure the "vtk" isn't just part of the namespace */
- for (k = 0; k < n; k++)
- {
- if (cp[k] == ':')
- {
- base_bits = VTK_PARSE_UNKNOWN;
- break;
- }
- }
- }
- /* Qt objects and enums */
- else if (classname[0] == 'Q' &&
- ((classname[1] >= 'A' && classname[2] <= 'Z') ||
- strncmp(classname, "Qt::", 4) == 0))
- {
- base_bits = VTK_PARSE_QOBJECT;
- }
- }
- }
-
- cp += n;
- while (*cp == ' ' || *cp == '\t') { cp++; }
- }
-
- if ((unsigned_bits & VTK_PARSE_UNSIGNED) != 0)
- {
- switch (base_bits)
- {
- case VTK_PARSE_CHAR:
- classname = "unsigned char";
- break;
- case VTK_PARSE_SHORT:
- classname = "unsigned short";
- break;
- case VTK_PARSE_INT:
- classname = "unsigned int";
- break;
- case VTK_PARSE_LONG:
- classname = "unsigned long";
- break;
- case VTK_PARSE_LONG_LONG:
- classname = "unsigned long long";
- break;
- case VTK_PARSE___INT64:
- classname = "unsigned __int64";
- break;
- }
- }
-
- *type_ptr = (static_bits | const_bits | unsigned_bits | base_bits);
-
- if (classname_ptr)
- {
- *classname_ptr = classname;
- if (len == 0)
- {
- len = strlen(classname);
- }
- *len_ptr = len;
- }
-
- return (size_t)(cp - text);
-}
-
-/* Parse a type description in "text" and generate a typedef named "name" */
-size_t vtkParse_ValueInfoFromString(
- ValueInfo *data, StringCache *cache, const char *text)
-{
- const char *cp = text;
- size_t n;
- int m, count;
- unsigned int base_bits = 0;
- unsigned int pointer_bits = 0;
- unsigned int ref_bits = 0;
- const char *classname = NULL;
-
- /* get the basic type with qualifiers */
- cp += vtkParse_BasicTypeFromString(cp, &base_bits, &classname, &n);
-
- data->Class = vtkParse_CacheString(cache, classname, n);
-
- if ((base_bits & VTK_PARSE_STATIC) != 0)
- {
- data->IsStatic = 1;
- }
-
- /* look for pointers (and const pointers) */
- while (*cp == '*')
- {
- cp++;
- pointer_bits = (pointer_bits << 2);
- while (*cp == ' ' || *cp == '\t') { cp++; }
- if (strncmp(cp, "const", 5) == 0 &&
- (cp[5] < 'a' || cp[5] > 'z') &&
- (cp[5] < 'A' || cp[5] > 'Z') &&
- (cp[5] < '0' || cp[5] > '9') &&
- cp[5] != '_')
- {
- cp += 5;
- while (*cp == ' ' || *cp == '\t') { cp++; }
- pointer_bits = (pointer_bits | VTK_PARSE_CONST_POINTER);
- }
- else
- {
- pointer_bits = (pointer_bits | VTK_PARSE_POINTER);
- }
- pointer_bits = (pointer_bits & VTK_PARSE_POINTER_MASK);
- }
-
- /* look for ref */
- if (*cp == '&')
- {
- cp++;
- while (*cp == ' ' || *cp == '\t') { cp++; }
- ref_bits = VTK_PARSE_REF;
- }
-
- /* look for the variable name */
- if ((*cp >= 'a' && *cp <= 'z') ||
- (*cp >= 'A' && *cp <= 'Z') ||
- (*cp == '_'))
- {
- /* skip all chars that are part of a name */
- n = vtkparse_id_len(cp);
- data->Name = vtkParse_CacheString(cache, cp, n);
- cp += n;
- while (*cp == ' ' || *cp == '\t') { cp++; }
- }
-
- /* look for array brackets */
- if (*cp == '[')
- {
- count = 1;
- }
-
- while (*cp == '[')
- {
- n = vtkparse_bracket_len(cp);
- if (n > 1)
- {
- cp++;
- n -= 2;
- }
- while (*cp == ' ' || *cp == '\t') { cp++; n--; }
- while (n > 0 && (cp[n-1] == ' ' || cp[n-1] == '\t')) { n--; }
- vtkParse_AddStringToArray(
- &data->Dimensions,
- &data->NumberOfDimensions,
- vtkParse_CacheString(cache, cp, n));
- m = 0;
- if (*cp >= '0' && *cp <= '9' && vtkparse_number_len(cp) == n)
- {
- m = (int)strtol(cp, NULL, 0);
- }
- count *= m;
-
- cp += n;
- while (*cp == ' ' || *cp == '\t') { cp++; }
- if (*cp == ']') { cp++; }
- while (*cp == ' ' || *cp == '\t') { cp++; }
- }
-
- /* add pointer indirection to correspond to first array dimension */
- if (data->NumberOfDimensions > 1)
- {
- pointer_bits = ((pointer_bits << 2) | VTK_PARSE_ARRAY);
- }
- else if (data->NumberOfDimensions == 1)
- {
- pointer_bits = ((pointer_bits << 2) | VTK_PARSE_POINTER);
- }
- pointer_bits = (pointer_bits & VTK_PARSE_POINTER_MASK);
-
- /* (Add code here to look for "=" followed by a value ) */
-
- data->Type = (pointer_bits | ref_bits | base_bits);
-
- return (cp - text);
-}
-
-/* Generate a C++ declaration string from a ValueInfo struct */
-const char *vtkParse_ValueInfoToString(
- ValueInfo *data, int *needs_free)
-{
- unsigned int pointer_bits = (data->Type & VTK_PARSE_POINTER_MASK);
- unsigned int ref_bits = (data->Type & VTK_PARSE_REF);
- unsigned int qualifier_bits = (data->Type & VTK_PARSE_CONST);
- unsigned int reverse_bits = 0;
- unsigned int pointer_type = 0;
- const char *classname = data->Class;
- const char *name = data->Name;
- char *text = NULL;
- size_t i = 0;
- size_t l;
- int j = 0;
-
- if (pointer_bits == 0 && ref_bits == 0 && qualifier_bits == 0 &&
- name == NULL)
- {
- if (needs_free)
- {
- *needs_free = 0;
- }
- return classname;
- }
-
- /* compute the length of string to allocate */
- l = 6; /* for const */
- l += 4*7; /* for pointers */
- l += 1; /* for ref */
- l += strlen(classname) + 1; /* for type */
- for (j = 0; j < data->NumberOfDimensions; j++)
- {
- l += 2 + strlen(data->Dimensions[j]);
- }
- l++; /* for NULL */
- l += 4; /* for safety */
-
- text = (char *)malloc(l);
-
- if ((qualifier_bits & VTK_PARSE_CONST) != 0)
- {
- strcpy(&text[i], "const ");
- i += 6;
- }
-
- strcpy(&text[i], classname);
- i += strlen(classname);
- text[i++] = ' ';
-
- while (pointer_bits != 0)
- {
- reverse_bits <<= 2;
- reverse_bits |= (pointer_bits & VTK_PARSE_POINTER_LOWMASK);
- pointer_bits = ((pointer_bits >> 2) & VTK_PARSE_POINTER_MASK);
- }
-
- while (reverse_bits != 0)
- {
- pointer_type = (reverse_bits & VTK_PARSE_POINTER_LOWMASK);
- if (pointer_type == VTK_PARSE_ARRAY ||
- (reverse_bits == VTK_PARSE_POINTER &&
- data->NumberOfDimensions > 0))
- {
- break;
- }
- else if (pointer_type == VTK_PARSE_POINTER)
- {
- text[i++] = '*';
- }
- else if (pointer_type == VTK_PARSE_CONST_POINTER)
- {
- strcpy(&text[i], "*const ");
- i += 7;
- }
-
- reverse_bits = ((reverse_bits >> 2) & VTK_PARSE_POINTER_MASK);
- }
-
- if (ref_bits)
- {
- text[i++] = '&';
- }
-
- if (name)
- {
- strcpy(&text[i], name);
- i += strlen(name);
- }
-
- for (j = 0; j < data->NumberOfDimensions; j++)
- {
- text[i++] = '[';
- if (data->Dimensions[j])
- {
- strcpy(&text[i], data->Dimensions[j]);
- i += strlen(data->Dimensions[j]);
- }
- text[i++] = ']';
- }
-
- text[i] = '\0';
-
- /* make sure enough space was allocated */
- assert(i < l);
-
- if (needs_free)
- {
- *needs_free = 1;
- }
-
- return text;
-}
-
-/* Search and replace, return the initial string if no replacements
- * occurred, otherwise return a new string allocated with malloc. */
-const char *vtkParse_StringReplace(
- const char *str1, int n, const char *name[], const char *val[])
-{
- return vtkparse_string_replace(NULL, str1, n, name, val);
-}
-
-/* substitute generic types and values with actual types and values */
-static void func_substitution(
- FunctionInfo *data, StringCache *cache,
- int m, const char *arg_names[],
- const char *arg_values[], ValueInfo *arg_types[]);
-
-static void value_substitution(
- ValueInfo *data, StringCache *cache,
- int m, const char *arg_names[],
- const char *arg_values[], ValueInfo *arg_types[])
-{
- vtkParse_ExpandTypedefs(data, cache, m, arg_names, arg_values, arg_types);
- vtkParse_ExpandValues(data, cache, m, arg_names, arg_values);
-
- if (data->Function)
- {
- func_substitution(
- data->Function, cache, m, arg_names, arg_values, arg_types);
- }
-}
-
-static void func_substitution(
- FunctionInfo *data, StringCache *cache,
- int m, const char *arg_names[],
- const char *arg_values[], ValueInfo *arg_types[])
-{
- int i, n;
-
- n = data->NumberOfParameters;
- for (i = 0; i < n; i++)
- {
- value_substitution(
- data->Parameters[i], cache, m, arg_names, arg_values, arg_types);
- }
-
- if (data->ReturnValue)
- {
- value_substitution(
- data->ReturnValue, cache, m, arg_names, arg_values, arg_types);
- }
-
- if (data->Signature)
- {
- data->Signature =
- vtkparse_string_replace(
- cache, data->Signature, m, arg_names, arg_values);
- }
-
- /* legacy information for old wrappers */
-#ifndef VTK_PARSE_LEGACY_REMOVE
- n = data->NumberOfArguments;
- for (i = 0; i < n; i++)
- {
- data->ArgTypes[i] = data->Parameters[i]->Type;
- data->ArgClasses[i] = data->Parameters[i]->Class;
- if (data->Parameters[i]->NumberOfDimensions == 1 &&
- data->Parameters[i]->Count > 0)
- {
- data->ArgCounts[i] = data->Parameters[i]->Count;
- }
- }
-
- if (data->ReturnValue)
- {
- data->ReturnType = data->ReturnValue->Type;
- data->ReturnClass = data->ReturnValue->Class;
- if (data->ReturnValue->NumberOfDimensions == 1 &&
- data->ReturnValue->Count > 0)
- {
- data->HintSize = data->ReturnValue->Count;
- data->HaveHint = 1;
- }
- }
-#endif /* VTK_PARSE_LEGACY_REMOVE */
-}
-
-static void class_substitution(
- ClassInfo *data, StringCache *cache,
- int m, const char *arg_names[],
- const char *arg_values[], ValueInfo *arg_types[])
-{
- int i, n;
-
- /* superclasses may be templated */
- n = data->NumberOfSuperClasses;
- for (i = 0; i < n; i++)
- {
- data->SuperClasses[i] = vtkparse_string_replace(
- cache, data->SuperClasses[i], m, arg_names, arg_values);
- }
-
- n = data->NumberOfClasses;
- for (i = 0; i < n; i++)
- {
- class_substitution(
- data->Classes[i], cache, m, arg_names, arg_values, arg_types);
- }
-
- n = data->NumberOfFunctions;
- for (i = 0; i < n; i++)
- {
- func_substitution(
- data->Functions[i], cache, m, arg_names, arg_values, arg_types);
- }
-
- n = data->NumberOfConstants;
- for (i = 0; i < n; i++)
- {
- value_substitution(
- data->Constants[i], cache, m, arg_names, arg_values, arg_types);
- }
-
- n = data->NumberOfVariables;
- for (i = 0; i < n; i++)
- {
- value_substitution(
- data->Variables[i], cache, m, arg_names, arg_values, arg_types);
- }
-
- n = data->NumberOfTypedefs;
- for (i = 0; i < n; i++)
- {
- value_substitution(
- data->Typedefs[i], cache, m, arg_names, arg_values, arg_types);
- }
-}
-
-/* Extract template args from a comma-separated list enclosed
- * in angle brackets. Returns zero if no angle brackets found. */
-size_t vtkParse_DecomposeTemplatedType(
- const char *text, const char **classname,
- int nargs, const char ***argp, const char *defaults[])
-{
- size_t i, j, k, n;
- const char *arg;
- char *new_text;
- const char **template_args = NULL;
- int template_arg_count = 0;
-
- n = vtkParse_NameLength(text);
-
- /* is the class templated? */
- for (i = 0; i < n; i++)
- {
- if (text[i] == '<')
- {
- break;
- }
- }
-
- if (classname)
- {
- new_text = (char *)malloc(i + 1);
- strncpy(new_text, text, i);
- new_text[i] = '\0';
- *classname = new_text;
- }
-
- if (text[i] == '<')
- {
- i++;
- /* extract the template arguments */
- for (;;)
- {
- while (text[i] == ' ' || text[i] == '\t') { i++; }
- j = i;
- while (text[j] != ',' && text[j] != '>' &&
- text[j] != '\n' && text[j] != '\0')
- {
- if (text[j] == '<' || text[j] == '(' ||
- text[j] == '[' || text[j] == '{')
- {
- j += vtkparse_bracket_len(&text[j]);
- }
- else if (text[j] == '\'' || text[j] == '\"')
- {
- j += vtkparse_quote_len(&text[j]);
- }
- else
- {
- j++;
- }
- }
-
- k = j;
- while (text[k-1] == ' ' || text[k-1] == '\t') { --k; }
-
- new_text = (char *)malloc(k-i + 1);
- strncpy(new_text, &text[i], k-i);
- new_text[k-i] = '\0';
- vtkParse_AddStringToArray(&template_args, &template_arg_count,
- new_text);
-
- assert(template_arg_count <= nargs);
-
- i = j + 1;
-
- if (text[j] != ',')
- {
- break;
- }
- }
- }
-
- while (template_arg_count < nargs)
- {
- assert(defaults != NULL);
- arg = defaults[template_arg_count];
- assert(arg != NULL);
- new_text = (char *)malloc(strlen(arg + 1));
- strcpy(new_text, arg);
- vtkParse_AddStringToArray(&template_args, &template_arg_count, new_text);
- }
-
- *argp = template_args;
-
- return i;
-}
-
-/* Free the list of strings returned by ExtractTemplateArgs. */
-void vtkParse_FreeTemplateDecomposition(
- const char *name, int n, const char **args)
-{
- int i;
-
- if (name)
- {
- free((char *)name);
- }
-
- if (n > 0)
- {
- for (i = 0; i < n; i++)
- {
- free((char *)args[i]);
- }
-
- free((char **)args);
- }
-}
-
-/* Instantiate a class template by substituting the provided arguments. */
-void vtkParse_InstantiateClassTemplate(
- ClassInfo *data, StringCache *cache, int n, const char *args[])
-{
- TemplateInfo *t = data->Template;
- const char **new_args = NULL;
- const char **arg_names = NULL;
- ValueInfo **arg_types = NULL;
- int i, m;
- char *new_name;
- size_t k;
-
- if (t == NULL)
- {
- fprintf(stderr, "vtkParse_InstantiateClassTemplate: "
- "this class is not templated.\n");
- return;
- }
-
- m = t->NumberOfParameters;
- if (n > m)
- {
- fprintf(stderr, "vtkParse_InstantiateClassTemplate: "
- "too many template args.\n");
- return;
- }
-
- for (i = n; i < m; i++)
- {
- if (t->Parameters[i]->Value == NULL ||
- t->Parameters[i]->Value[0] == '\0')
- {
- fprintf(stderr, "vtkParse_InstantiateClassTemplate: "
- "too few template args.\n");
- return;
- }
- }
-
- new_args = (const char **)malloc(m*sizeof(char **));
- for (i = 0; i < n; i++)
- {
- new_args[i] = args[i];
- }
- for (i = n; i < m; i++)
- {
- new_args[i] = t->Parameters[i]->Value;
- }
- args = new_args;
-
- arg_names = (const char **)malloc(m*sizeof(char **));
- arg_types = (ValueInfo **)malloc(m*sizeof(ValueInfo *));
- for (i = 0; i < m; i++)
- {
- arg_names[i] = t->Parameters[i]->Name;
- arg_types[i] = NULL;
- if (t->Parameters[i]->Type == 0)
- {
- arg_types[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_InitValue(arg_types[i]);
- vtkParse_ValueInfoFromString(arg_types[i], cache, args[i]);
- arg_types[i]->ItemType = VTK_TYPEDEF_INFO;
- arg_types[i]->Name = arg_names[i];
- }
- }
-
- /* no longer a template (has been instantiated) */
- if (data->Template)
- {
- vtkParse_FreeTemplate(data->Template);
- }
- data->Template = NULL;
-
- /* append template args to class name */
- k = strlen(data->Name) + 2;
- for (i = 0; i < m; i++)
- {
- k += strlen(args[i]) + 2;
- }
- new_name = (char *)malloc(k);
- strcpy(new_name, data->Name);
- k = strlen(new_name);
- new_name[k++] = '<';
- for (i = 0; i < m; i++)
- {
- strcpy(&new_name[k], args[i]);
- k += strlen(args[i]);
- if (i+1 < m)
- {
- new_name[k++] = ',';
- new_name[k++] = ' ';
- }
- }
- if (new_name[k-1] == '>')
- {
- new_name[k++] = ' ';
- }
- new_name[k++] = '>';
- new_name[k] = '\0';
-
- data->Name = vtkParse_CacheString(cache, new_name, k);
- free(new_name);
-
- /* do the template arg substitution */
- class_substitution(data, cache, m, arg_names, args, arg_types);
-
- /* free all allocated arrays */
- free((char **)new_args);
- free((char **)arg_names);
-
- for (i = 0; i < m; i++)
- {
- if (arg_types[i])
- {
- vtkParse_FreeValue(arg_types[i]);
- }
- }
- free(arg_types);
-}
-
-/* Get a zero-terminated array of the types in vtkTemplateMacro. */
-const char **vtkParse_GetTemplateMacroTypes()
-{
- static const char *types[] = {
- "char", "signed char", "unsigned char", "short", "unsigned short",
- "int", "unsigned int", "long", "unsigned long",
-#ifdef VTK_TYPE_USE_LONG_LONG
- "long long", "unsigned long long",
-#endif
-#ifdef VTK_TYPE_USE___INT64
- "__int64", "unsigned __int64",
-#endif
- "float", "double", NULL };
-
- return types;
-}
-
-/* Get a zero-terminated array of the types in vtkArray. */
-const char **vtkParse_GetArrayTypes()
-{
- static const char *types[] = {
- "char", "signed char", "unsigned char", "short", "unsigned short",
- "int", "unsigned int", "long", "unsigned long",
-#ifdef VTK_TYPE_USE_LONG_LONG
- "long long", "unsigned long long",
-#endif
-#ifdef VTK_TYPE_USE___INT64
- "__int64", "unsigned __int64",
-#endif
- "float", "double",
- "vtkStdString", "vtkUnicodeString", "vtkVariant", NULL };
-
- return types;
-}
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkParseExtras.h
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-/*-------------------------------------------------------------------------
- Copyright (c) 2011 David Gobbi.
-
- Contributed to the VisualizationToolkit by the author in May 2011
- under the terms of the Visualization Toolkit 2008 copyright.
--------------------------------------------------------------------------*/
-
-/**
- * This file contains extra utilities for parsing and wrapping.
- */
-
-#ifndef VTK_PARSE_EXTRAS_H
-#define VTK_PARSE_EXTRAS_H
-
-#include "vtkParseData.h"
-#include <stddef.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Skip over a sequence of characters that begin with an alphabetic
- * character or an underscore, and include only alphanumeric
- * characters or underscores. Return the number of characters.
- */
-size_t vtkParse_IdentifierLength(const char *text);
-
-/**
- * Skip over a name, including any namespace prefixes and
- * any template arguments. Return the number of characters.
- * Examples are "name", "::name", "name<arg>", "name::name2",
- * "::name::name2<arg1,arg2>".
- */
-size_t vtkParse_NameLength(const char *text);
-
-/**
- * Skip over a name, including any template arguments, but stopping
- * if a '::' is encoutered. Return the number of characters.
- * Examples are "name" and "name<arg>"
- */
-size_t vtkParse_UnscopedNameLength(const char *text);
-
-/**
- * Skip over a literal, which may be a number, a char in single
- * quotes, a string in double quotes, or a name, or a name followed
- * by arguments in parentheses.
- */
-size_t vtkParse_LiteralLength(const char *text);
-
-/**
- * Get a type from a type name, and return the number of characters used.
- * If the "classname" argument is not NULL, then it is used to return
- * the short name for the type, e.g. "long int" becomes "long", while
- * typedef names and class names are returned unchanged. If "const"
- * appears in the type name, then the const bit flag is set for the
- * type, but "const" will not appear in the returned classname.
- */
-size_t vtkParse_BasicTypeFromString(
- const char *text, unsigned int *type,
- const char **classname, size_t *classname_len);
-
-/**
- * Generate a ValueInfo by parsing the type from the provided text.
- * Only simple text strings are supported, e.g. "const T **".
- * Returns the number of characters consumed.
- */
-size_t vtkParse_ValueInfoFromString(
- ValueInfo *val, StringCache *cache, const char *text);
-
-/**
- * Generate a declaration string from a ValueInfo struct. If the
- * "nf" arg is set, the returned string must be freed.
- * Only simple text strings are supported, e.g. "const T **".
- * The variable or typedef name, if present, is ignored.
- */
-const char *vtkParse_ValueInfoToString(ValueInfo *val, int *nf);
-
-/**
- * Expand a typedef within a variable, parameter, or typedef declaration.
- * The expansion is done in-place.
- */
-void vtkParse_ExpandTypedef(ValueInfo *valinfo, ValueInfo *typedefinfo);
-
-/**
- * Expand any unrecognized types within a variable, parameter, or typedef
- * that match any of the supplied typedefs. The expansion is done in-place.
- */
-void vtkParse_ExpandTypedefs(
- ValueInfo *valinfo, StringCache *cache,
- int n, const char *name[], const char *val[],
- ValueInfo *typedefinfo[]);
-
-/**
- * Wherever one of the specified names exists inside a Value or inside
- * a Dimension size, replace it with the corresponding val string.
- * This is used to replace constants with their values.
- */
-void vtkParse_ExpandValues(
- ValueInfo *valinfo, StringCache *cache,
- int n, const char *name[], const char *val[]);
-
-/**
- * Search and replace, return the initial string if no replacements
- * occurred, else return a new string allocated with malloc. */
-const char *vtkParse_StringReplace(
- const char *str1, int n, const char *name[], const char *val[]);
-
-/**
- * Extract the class name and template args from a templated
- * class type ID. Returns the full number of characters that
- * were consumed during the decomposition.
- */
-size_t vtkParse_DecomposeTemplatedType(
- const char *text, const char **classname,
- int n, const char ***args, const char *defaults[]);
-
-/**
- * Free the list of strings returned by ExtractTemplateArgs.
- */
-void vtkParse_FreeTemplateDecomposition(
- const char *classname, int n, const char **args);
-
-/**
- * Instantiate a class template by substituting the provided arguments
- * for the template parameters. If "n" is less than the number of template
- * parameters, then default parameter values (if present) will be used.
- * If an error occurs, the error will be printed to stderr and NULL will
- * be returned.
- */
-void vtkParse_InstantiateClassTemplate(
- ClassInfo *data, StringCache *cache, int n, const char *args[]);
-
-/**
- * Instantiate a function or class method template by substituting the
- * provided arguments for the template parameters. If "n" is less than
- * the number of template parameters, then default parameter values
- * (if present) will be used. If an error occurs, the error will be
- * printed to stderr and NULL will be returned.
- */
-void vtkParse_IntantiateFunctionTemplate(
- FunctionInfo *data, int n, const char *args[]);
-
-/**
- * Get a zero-terminated array of the types in vtkTemplateMacro.
- */
-const char **vtkParse_GetTemplateMacroTypes();
-
-/**
- * Get a zero-terminated array of the types in vtkArray.
- */
-const char **vtkParse_GetArrayTypes();
-
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkParseHierarchy.c
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-/*-------------------------------------------------------------------------
- Copyright (c) 2010 David Gobbi.
-
- Contributed to the VisualizationToolkit by the author in June 2010
- under the terms of the Visualization Toolkit 2008 copyright.
--------------------------------------------------------------------------*/
-
-#include "vtkParseHierarchy.h"
-#include "vtkParseExtras.h"
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <assert.h>
-
-static size_t skip_space(const char *text)
-{
- size_t i = 0;
- while (isspace(text[i]) && text[i] != '\n') { i++; }
- return i;
-}
-
-static size_t skip_expression(const char *text, const char *delims)
-{
- char newdelims[2];
- size_t i = 0;
- size_t j;
- int use_angle = 0;
- char c;
-
- for (j = 0; delims[j] != '\0'; j++)
- {
- if (delims[j] == '>')
- {
- use_angle = 1;
- }
- }
-
- while (text[i] != '\0')
- {
- c = text[i];
- j = 0;
- while (c != delims[j] && delims[j] != '\0') { j++; }
- if (delims[j] != '\0' || c == '\0') { break; }
- if (c == '\"' || c == '\'')
- {
- char d = c;
- i++;
- while (text[i] != d && text[i] != '\0')
- {
- if (text[i] == '\\' && text[i+1] != '\0') { i++; }
- i++;
- }
- c = text[i];
- if (c == '\0') { break; }
- }
- i++;
- if (c == '(' || c == '[' || c == '{' || (use_angle && c == '<'))
- {
- if (c == '(') { newdelims[0] = ')'; }
- if (c == '[') { newdelims[0] = ']'; }
- if (c == '{') { newdelims[0] = '}'; }
- if (c == '<') { newdelims[0] = '>'; }
- newdelims[1] = '\0';
-
- i += skip_expression(&text[i], newdelims);
-
- if (text[i] == newdelims[0]) { i++; } else { break; }
- }
- }
-
- return i;
-}
-
-/* helper: comparison of entries */
-static int compare_hierarchy_entries(const void *vp1, const void *vp2)
-{
- const HierarchyEntry *entry1 = (const HierarchyEntry *)vp1;
- const HierarchyEntry *entry2 = (const HierarchyEntry *)vp2;
-
- return strcmp(entry1->Name, entry2->Name);
-}
-
-/* helper: sort the entries to facilitate searching */
-static void sort_hierarchy_entries(HierarchyInfo *info)
-{
- qsort(info->Entries, info->NumberOfEntries, sizeof(HierarchyEntry),
- &compare_hierarchy_entries);
-}
-
-/* Find an entry with a binary search */
-HierarchyEntry *vtkParseHierarchy_FindEntry(
- const HierarchyInfo *info, const char *classname)
-{
- HierarchyEntry key;
- HierarchyEntry *entry;
- size_t i, n;
- char name[32];
- char *cp;
-
- /* use classname as-is for the search if possible */
- cp = (char *)classname;
-
- /* get portion of name before final template parameters */
- n = vtkParse_UnscopedNameLength(classname);
- i = 0;
- while (classname[i+n] == ':' && classname[i+n+1] == ':')
- {
- i += n + 2;
- n = vtkParse_UnscopedNameLength(&classname[i]);
- }
- i += vtkParse_IdentifierLength(&classname[i]);
-
- /* create a new (shorter) search string if necessary */
- if (classname[i] != '\0')
- {
- /* use stack space if possible */
- cp = name;
- /* otherwise, use malloc */
- if (i > 31)
- {
- cp = (char *)malloc(i+1);
- }
- strncpy(cp, classname, i);
- cp[i] = '\0';
- }
-
- key.Name = cp;
-
- entry = (HierarchyEntry *)bsearch(&key, info->Entries,
- info->NumberOfEntries, sizeof(HierarchyEntry),
- &compare_hierarchy_entries);
-
- if (cp != classname && cp != name)
- {
- free(cp);
- }
-
- return entry;
-}
-
-
-/* read a hierarchy file into a HeirarchyInfo struct, or return NULL */
-HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
-{
- HierarchyInfo *info;
- HierarchyEntry *entry;
- int maxClasses = 500;
- FILE *fp;
- char *line;
- char *cp;
- const char *ccp;
- size_t maxlen = 15;
- size_t i, j, n, m;
- unsigned int bits, pointers;
- static const char *delims = ">,=";
-
- line = (char *)malloc(maxlen);
-
- fp = fopen(filename, "r");
-
- if (fp == NULL)
- {
- return NULL;
- }
-
- info = (HierarchyInfo *)malloc(sizeof(HierarchyInfo));
- info->NumberOfEntries = 0;
- info->Entries = (HierarchyEntry *)malloc(maxClasses*sizeof(HierarchyEntry));
- info->Strings = (StringCache *)malloc(sizeof(StringCache));
- vtkParse_InitStringCache(info->Strings);
-
- while (fgets(line, (int)maxlen, fp))
- {
- n = strlen(line);
-
- /* if buffer not long enough, increase it */
- while (n == maxlen-1 && line[n-1] != '\n' && !feof(fp))
- {
- maxlen *= 2;
- line = (char *)realloc(line, maxlen);
- if (!fgets(&line[n], (int)(maxlen-n), fp)) { break; }
- n += strlen(&line[n]);
- }
-
- while (n > 0 && isspace(line[n-1]))
- {
- n--;
- }
- line[n] = '\0';
-
- if (line[0] == '\0')
- {
- continue;
- }
-
- if (info->NumberOfEntries == maxClasses)
- {
- maxClasses *= 2;
- info->Entries = (HierarchyEntry *)realloc(
- info->Entries, sizeof(HierarchyEntry)*maxClasses*2);
- }
-
- entry = &info->Entries[info->NumberOfEntries++];
- entry->Name = NULL;
- entry->HeaderFile = NULL;
- entry->Module = NULL;
- entry->NumberOfTemplateParameters = 0;
- entry->TemplateParameters = NULL;
- entry->TemplateDefaults = NULL;
- entry->NumberOfProperties = 0;
- entry->Properties = NULL;
- entry->NumberOfSuperClasses = 0;
- entry->SuperClasses = NULL;
- entry->SuperClassIndex = NULL;
- entry->Typedef = NULL;
- entry->IsTypedef = 0;
- entry->IsEnum = 0;
-
- i = skip_space(line);
- n = vtkParse_NameLength(&line[i]);
- for (m = 0; m < n; m++)
- {
- if (line[i+m] == '<') { break; }
- }
-
- entry->Name = vtkParse_CacheString(info->Strings, &line[i], m);
- i += m;
-
- if (line[i] == '<')
- {
- i++;
- i += skip_space(&line[i]);
-
- for (j = 0; line[i] != '>' && line[i] != '\0'; j++)
- {
- if (j == 0)
- {
- entry->TemplateParameters = (const char **)malloc(sizeof(char *));
- entry->TemplateDefaults = (const char **)malloc(sizeof(char *));
- }
- else
- {
- entry->TemplateParameters = (const char **)realloc(
- (char **)entry->TemplateParameters, (j+1)*sizeof(char *));
- entry->TemplateDefaults = (const char **)realloc(
- (char **)entry->TemplateDefaults, (j+1)*sizeof(char *));
- }
- entry->NumberOfTemplateParameters++;
- entry->TemplateDefaults[j] = NULL;
-
- m = skip_expression(&line[i], delims);
- while (m > 0 && (line[i+m-1] == ' ' || line[i+m-1] == '\t'))
- {
- --m;
- }
-
- entry->TemplateParameters[j] =
- vtkParse_CacheString(info->Strings, &line[i], m);
- i += m;
- i += skip_space(&line[i]);
-
- if (line[i] == '=')
- {
- i++;
- i += skip_space(&line[i]);
- m = skip_expression(&line[i], delims);
- while (m > 0 && (line[i+m-1] == ' ' || line[i+m-1] == '\t'))
- {
- --m;
- }
- entry->TemplateDefaults[j] =
- vtkParse_CacheString(info->Strings, &line[i], m);
- i += m;
- i += skip_space(&line[i]);
- }
-
- if (line[i] == ',')
- {
- i++;
- i += skip_space(&line[i]);
- }
- }
-
- if (line[i] == '>')
- {
- i++;
- i += skip_space(&line[i]);
- }
-
- if (line[i] == ':' && line[i+1] == ':')
- {
- i += 2;
- m = vtkParse_NameLength(&line[i]);
- n = strlen(entry->Name);
- cp = vtkParse_NewString(info->Strings, n+m+2);
- strcpy(cp, entry->Name);
- strcpy(&cp[n], "::");
- strncpy(&cp[n+2], &line[i], m);
- i += m;
- cp[n+m+2] = '\0';
- entry->Name = cp;
- }
- }
-
- i += skip_space(&line[i]);
-
- /* classes (and possibly enums) */
- if (line[i] == ':')
- {
- i++;
- i += skip_space(&line[i]);
- n = vtkParse_NameLength(&line[i]);
- /* check for enum indicators */
- if ((n == 3 && strncmp(&line[i], "int", n)) ||
- (n == 4 && strncmp(&line[i], "enum", n)))
- {
- entry->IsEnum = 1;
- i += n;
- i += skip_space(&line[i]);
- }
- /* else check for superclasses */
- else for (j = 0; ; j++)
- {
- if (j == 0)
- {
- entry->SuperClasses = (const char **)malloc(sizeof(char *));
- entry->SuperClassIndex = (int *)malloc(sizeof(int));
- }
- else
- {
- entry->SuperClasses = (const char **)realloc(
- (char **)entry->SuperClasses, (j+1)*sizeof(char *));
- entry->SuperClassIndex = (int *)realloc(
- entry->SuperClassIndex, (j+1)*sizeof(int));
- }
- entry->NumberOfSuperClasses++;
-
- i += skip_space(&line[i]);
- n = vtkParse_NameLength(&line[i]);
- entry->SuperClasses[j] =
- vtkParse_CacheString(info->Strings, &line[i], n);
- entry->SuperClassIndex[j] = -1;
- i += n;
-
- i += skip_space(&line[i]);
- if (line[i] != ',')
- {
- break;
- }
- i++;
- }
- }
-
- /* read typedefs */
- else if (line[i] == '=')
- {
- i++;
- i += skip_space(&line[i]);
- entry->IsTypedef = 1;
- entry->Typedef = (ValueInfo *)malloc(sizeof(ValueInfo));
- vtkParse_InitValue(entry->Typedef);
-
- /* type is a reference (does this ever occur?) */
- if (line[i] == '&')
- {
- i++;
- i += skip_space(&line[i]);
- entry->Typedef->Type |= VTK_PARSE_REF;
- }
-
- /* type has array dimensions */
- if (line[i] == '[')
- {
- entry->Typedef->Count = 1;
- }
-
- while (line[i] == '[')
- {
- i++;
- n = 0;
- while (line[i+n] != ']' && line[i+n] != '\n' && line[i+n] != '\0')
- {
- n++;
- }
- ccp = vtkParse_CacheString(info->Strings, &line[i], n);
- vtkParse_AddStringToArray(&entry->Typedef->Dimensions,
- &entry->Typedef->NumberOfDimensions, ccp);
- if (ccp[0] >= '0' && ccp[0] <= '9')
- {
- entry->Typedef->Count *= (int)strtol(ccp, NULL, 0);
- }
- else
- {
- entry->Typedef->Count = 0;
- }
- i += n;
- if (line[i] == ']')
- {
- i++;
- }
- }
- i += skip_space(&line[i]);
-
- /* look for pointers (and const pointers) */
- bits = 0;
- while (line[i] == '*' || strncmp(&line[i], "const*", 6) == 0)
- {
- bits = (bits << 2);
- if (line[i] == '*')
- {
- bits = (bits | VTK_PARSE_POINTER);
- }
- else
- {
- bits = (bits | VTK_PARSE_CONST_POINTER);
- i += 5;
- }
- bits = (bits & VTK_PARSE_POINTER_MASK);
- i++;
- i += skip_space(&line[i]);
- }
-
- /* need to reverse to get correct pointer order */
- pointers = 0;
- while (bits)
- {
- pointers = (pointers << 2);
- pointers = (pointers | (bits & VTK_PARSE_POINTER_LOWMASK));
- bits = ((bits >> 2) & VTK_PARSE_POINTER_MASK);
- }
-
- /* add pointer indirection to correspond to first array dimension */
- if (entry->Typedef->NumberOfDimensions > 1)
- {
- pointers = ((pointers << 2) | VTK_PARSE_ARRAY);
- }
- else if (entry->Typedef->NumberOfDimensions == 1)
- {
- pointers = ((pointers << 2) | VTK_PARSE_POINTER);
- }
-
- /* include the pointers in the type */
- entry->Typedef->Type |= (pointers & VTK_PARSE_POINTER_MASK);
-
- /* read the base type (and const) */
- bits = 0;
- i += vtkParse_BasicTypeFromString(&line[i], &bits, &ccp, &n);
- entry->Typedef->Class = vtkParse_CacheString(info->Strings, ccp, n);
- entry->Typedef->Type |= bits;
- }
-
- /* get the header file */
- if (line[i] == ';')
- {
- i++;
- i += skip_space(&line[i]);
- n = 0;
- while(line[i+n] != '\0' && line[i+n] != ';' &&
- !isspace(line[i+n])) { n++; };
- entry->HeaderFile = vtkParse_CacheString(info->Strings, &line[i], n);
-
- i += n;
- i += skip_space(&line[i]);
-
- /* get the module */
- if (line[i] == ';')
- {
- i++;
- i += skip_space(&line[i]);
- n = 0;
- while(line[i+n] != '\0' && line[i+n] != ';' &&
- !isspace(line[i+n])) { n++; };
- entry->Module = vtkParse_CacheString(info->Strings, &line[i], n);
-
- i += n;
- i += skip_space(&line[i]);
- }
-
- /* get all flags */
- while (line[i] == ';')
- {
- i++;
- i += skip_space(&line[i]);
- if (entry->NumberOfProperties == 0)
- {
- entry->Properties = (const char **)malloc(sizeof(char **));
- }
- else
- {
- entry->Properties = (const char **)realloc(
- (char **)entry->Properties,
- (entry->NumberOfProperties+1)*sizeof(char **));
- }
- n = 0;
- while (line[i+n] != '\0' && line[i+n] != '\n' && line[i+n] != ';')
- { n++; }
- if (n && skip_space(&line[i]) != n)
- {
- entry->Properties[entry->NumberOfProperties++] =
- vtkParse_CacheString(info->Strings, &line[i], n);
- }
- i += n;
- }
- }
- }
-
- if (!feof(fp))
- {
- vtkParseHierarchy_Free(info);
- info = NULL;
- }
-
- free(line);
-
- sort_hierarchy_entries(info);
-
- return info;
-}
-
-/* free a HierarchyInfo struct */
-void vtkParseHierarchy_Free(HierarchyInfo *info)
-{
- HierarchyEntry *entry;
- int i;
-
- for (i = 0; i < info->NumberOfEntries; i++)
- {
- entry = &info->Entries[i];
- if (entry->NumberOfTemplateParameters)
- {
- free((char **)entry->TemplateParameters);
- free((char **)entry->TemplateDefaults);
- }
- if (entry->NumberOfSuperClasses)
- {
- free((char **)entry->SuperClasses);
- free(entry->SuperClassIndex);
- }
- if (entry->NumberOfProperties)
- {
- free((char **)entry->Properties);
- }
- }
-
- free(info->Entries);
- free(info);
-}
-
-
-/* Check whether class is derived from baseclass. You must supply
- * the entry for the class (returned by FindEntry) as well as the
- * classname. If the class is templated, the classname can include
- * template args in angle brackets. If you provide a pointer for
- * baseclass_with_args, then it will be used to return the name of
- * name of the baseclass with template args in angle brackets. */
-
-int vtkParseHierarchy_IsTypeOfTemplated(
- const HierarchyInfo *info,
- const HierarchyEntry *entry, const char *classname,
- const char *baseclass, const char **baseclass_with_args)
-{
- HierarchyEntry *tmph;
- const char *name;
- const char *supername;
- char *tmp;
- int templated;
- int baseclass_is_template_parameter;
- int supername_needs_free = 0;
- int classname_needs_free = 0;
- int i, j, k;
- int nargs;
- const char **args;
- size_t m;
- int iterating = 1;
- int rval = 0;
-
- while (iterating)
- {
- iterating = 0;
- templated = 0;
- baseclass_is_template_parameter = 0;
- nargs = 0;
- args = NULL;
-
- /* if classname is the same as baseclass, done! */
- if (strcmp(entry->Name, baseclass) == 0)
- {
- if (baseclass_with_args)
- {
- if (!classname_needs_free)
- {
- tmp = (char *)malloc(strlen(classname) + 1);
- strcpy(tmp, classname);
- classname = tmp;
- }
- *baseclass_with_args = classname;
- classname_needs_free = 0;
- }
- rval = 1;
- break;
- }
- else if (entry->NumberOfSuperClasses == 0)
- {
- rval = 0;
- break;
- }
-
- /* if class is templated */
- if (entry->NumberOfTemplateParameters)
- {
- /* check for template args for classname */
- m = strlen(entry->Name);
- if (classname[m] == '<')
- {
- templated = 1;
-
- nargs = entry->NumberOfTemplateParameters;
- vtkParse_DecomposeTemplatedType(classname, &name, nargs, &args,
- entry->TemplateDefaults);
- }
- }
-
- /* check all baseclasses */
- for (j = 0; j < entry->NumberOfSuperClasses && rval == 0; j++)
- {
- supername = entry->SuperClasses[j];
-
- if (templated)
- {
- for (k = 0; k < entry->NumberOfTemplateParameters; k++)
- {
- /* check if the baseclass itself is a template parameter */
- m = strlen(entry->TemplateParameters[k]);
- if (strncmp(entry->TemplateParameters[k], supername, m) == 0 &&
- !isalnum(supername[m]) && supername[m] != '_')
- {
- baseclass_is_template_parameter = 1;
- break;
- }
- }
-
- /* use the class template args to find baseclass template args */
- supername = vtkParse_StringReplace(
- supername, entry->NumberOfTemplateParameters, entry->TemplateParameters, args);
- if (supername != entry->SuperClasses[j])
- {
- supername_needs_free = 1;
- }
- }
-
- /* check the cached index for the baseclass entry */
- i = entry->SuperClassIndex[j];
- if (i == -1)
- {
- /* index was not set yet, so search for the entry */
- tmph = vtkParseHierarchy_FindEntry(info, supername);
- while (tmph && tmph->IsTypedef)
- {
- if (tmph->Typedef->Class)
- {
- tmph = vtkParseHierarchy_FindEntry(info, tmph->Typedef->Class);
- continue;
- }
- break;
- }
-
- if (tmph)
- {
- i = (int)(tmph - info->Entries);
- }
- else
- {
- /* entry not found, don't try again */
- /* i = -2; messes things up for templates */
- /* fprintf(stderr, "not found \"%s\"\n", entry->SuperClasses[j]); */
- }
-
- /* if baseclass is a template parameter, its entry cannot be cached */
- if (!baseclass_is_template_parameter)
- {
- /* cache the position of the baseclass */
- ((HierarchyEntry *)entry)->SuperClassIndex[j] = i;
- }
- }
-
- /* if entry was found, continue down the chain */
- if (i >= 0)
- {
- if (classname_needs_free)
- {
- free((char *)classname);
- }
- classname = supername;
- classname_needs_free = supername_needs_free;
- supername_needs_free = 0;
-
- /* use the iteration loop instead of recursion */
- if (j+1 >= entry->NumberOfSuperClasses)
- {
- entry = &info->Entries[i];
- iterating = 1;
- }
-
- /* recurse for multiple inheritance */
- else
- {
- rval = vtkParseHierarchy_IsTypeOfTemplated(
- info, &info->Entries[i], classname, baseclass,
- baseclass_with_args);
- }
- }
-
- if (supername_needs_free)
- {
- free((char *)supername);
- supername_needs_free = 0;
- }
-
- } /* end of loop over superclasses */
-
- if (templated)
- {
- vtkParse_FreeTemplateDecomposition(name, nargs, args);
- }
-
- } /* end of "while (iterating)" */
-
- if (classname_needs_free)
- {
- free((char *)classname);
- }
-
- if (baseclass_with_args && !rval)
- {
- *baseclass_with_args = NULL;
- }
-
- return rval;
-}
-
-int vtkParseHierarchy_IsTypeOf(
- const HierarchyInfo *info, const HierarchyEntry *entry,
- const char *baseclass)
-{
- return vtkParseHierarchy_IsTypeOfTemplated(
- info, entry, entry->Name, baseclass, NULL);
-}
-
-/* Free args returned by IsTypeOfTemplated */
-void vtkParseHierarchy_FreeTemplateArgs(int n, const char *args[])
-{
- int i;
-
- for (i = 0; i < n; i++)
- {
- free((char *)args[i]);
- }
-
- free((char **)args);
-}
-
-/* Given a classname with template parameters, get the superclass name
- * with corresponding template parameters. Returns null if 'i' is out
- * of range, i.e. greater than or equal to the number of superclasses.
- * The returned classname must be freed with "free()". */
-const char *vtkParseHierarchy_TemplatedSuperClass(
- const HierarchyEntry *entry, const char *classname, int i)
-{
- const char *supername = NULL;
- const char *name;
- const char **args;
- char *cp;
- size_t j;
-
- if (i < entry->NumberOfSuperClasses)
- {
- supername = entry->SuperClasses[i];
- j = vtkParse_IdentifierLength(classname);
-
- if (classname[j] == '<')
- {
- vtkParse_DecomposeTemplatedType(classname, &name,
- entry->NumberOfTemplateParameters, &args, entry->TemplateDefaults);
- supername = vtkParse_StringReplace(entry->SuperClasses[i],
- entry->NumberOfTemplateParameters, entry->TemplateParameters, args);
- vtkParse_FreeTemplateDecomposition(
- name, entry->NumberOfTemplateParameters, args);
- }
-
- if (supername == entry->SuperClasses[i])
- {
- cp = (char *)malloc(strlen(supername) + 1);
- strcpy(cp, supername);
- supername = cp;
- }
- }
-
- return supername;
-}
-
-/* get the specified property, or return NULL */
-const char *vtkParseHierarchy_GetProperty(
- const HierarchyEntry *entry, const char *property)
-{
- int i;
- size_t k;
-
- if (entry)
- {
- for (i = 0; i < entry->NumberOfProperties; i++)
- {
- /* skip the property name, everything after is the property */
- k = vtkParse_NameLength(entry->Properties[i]);
- if (k == strlen(property) &&
- strncmp(entry->Properties[i], property, k) == 0)
- {
- if (entry->Properties[i][k] == ' ' ||
- entry->Properties[i][k] == '=') { k++; }
- return &entry->Properties[i][k];
- }
- }
- }
-
- return NULL;
-}
-
-/* Expand all unrecognized types in a ValueInfo struct by
- * using the typedefs in the HierarchyInfo struct. */
-int vtkParseHierarchy_ExpandTypedefsInValue(
- const HierarchyInfo *info, ValueInfo *val, StringCache *cache,
- const char *scope)
-{
- char text[128];
- char *cp;
- const char *newclass;
- size_t n, m;
- int i;
- HierarchyEntry *entry;
- int scope_needs_free = 0;
- int result = 1;
-
- while (((val->Type & VTK_PARSE_BASE_TYPE) == VTK_PARSE_OBJECT ||
- (val->Type & VTK_PARSE_BASE_TYPE) == VTK_PARSE_UNKNOWN) &&
- val->Class != 0)
- {
- entry = 0;
-
- /* search for the type in the provided scope */
- while (entry == 0 && scope != 0)
- {
- cp = text;
- n = strlen(scope);
- m = strlen(val->Class);
- /* only malloc if more than 128 chars needed */
- if (n + m + 2 >= 128)
- {
- cp = (char *)malloc(n+m+3);
- }
-
- /* scope the name */
- strncpy(cp, scope, n);
- cp[n++] = ':';
- cp[n++] = ':';
- strncpy(&cp[n], val->Class, m);
- cp[n+m] = '\0';
-
- entry = vtkParseHierarchy_FindEntry(info, cp);
-
- if (cp != text) { free(cp); }
-
- /* if not found, try inherited scopes */
- if (entry == 0)
- {
- entry = vtkParseHierarchy_FindEntry(info, scope);
- scope = 0;
- scope_needs_free = 0;
- if (entry && entry->NumberOfSuperClasses)
- {
- for (i = 0; i+1 < entry->NumberOfSuperClasses; i++)
- {
- if (scope_needs_free) { free((char *)scope); }
- scope = vtkParseHierarchy_ExpandTypedefsInName(
- info, entry->SuperClasses[i], NULL);
- scope_needs_free = (scope != entry->SuperClasses[i]);
- /* recurse if more than one superclass */
- if (vtkParseHierarchy_ExpandTypedefsInValue(
- info, val, cache, scope))
- {
- if (scope_needs_free) { free((char *)scope); }
- return 1;
- }
- }
- if (scope_needs_free) { free((char *)scope); }
- scope = vtkParseHierarchy_ExpandTypedefsInName(
- info, entry->SuperClasses[i], NULL);
- scope_needs_free = (scope != entry->SuperClasses[i]);
- }
- entry = 0;
- }
- }
-
- /* if not found, try again with no scope */
- if (entry == 0)
- {
- entry = vtkParseHierarchy_FindEntry(info, val->Class);
- }
-
- if (entry && entry->IsTypedef)
- {
- vtkParse_ExpandTypedef(val, entry->Typedef);
- }
- else if (entry)
- {
- newclass = vtkParseHierarchy_ExpandTypedefsInName(
- info, val->Class, scope);
- if (newclass != val->Class)
- {
- val->Class = vtkParse_CacheString(cache, newclass, strlen(newclass));
- free((char *)newclass);
- }
- result = 1;
- break;
- }
- else
- {
- result = 0;
- break;
- }
- }
-
- if (scope_needs_free) { free((char *)scope); }
-
- return result;
-}
-
-/* Expand typedefs found in an expression stored as a string.
- * The value of "text" will be returned if no expansion occurred,
- * else a new string is returned that must be freed with "free()". */
-const char *vtkParseHierarchy_ExpandTypedefsInName(
- const HierarchyInfo *info, const char *name, const char *scope)
-{
- char text[128];
- char *cp;
- size_t n, m;
- const char *newname = name;
- HierarchyEntry *entry = NULL;
-
- /* note: unlike ExpandTypedefsInValue, this does not yet recurse
- * or look in superclass scopes */
-
- /* doesn't yet handle names that are scoped or templated */
- m = vtkParse_IdentifierLength(name);
- if (name[m] != '\0')
- {
- return name;
- }
-
- if (scope)
- {
- cp = text;
- n = strlen(scope);
- m = strlen(name);
- /* only malloc if more than 128 chars needed */
- if (n + m + 2 >= 128)
- {
- cp = (char *)malloc(n+m+3);
- }
-
- /* scope the name */
- strncpy(cp, scope, n);
- cp[n++] = ':';
- cp[n++] = ':';
- strncpy(&cp[n], name, m);
- cp[n+m] = '\0';
-
- entry = vtkParseHierarchy_FindEntry(info, cp);
-
- if (cp != text) { free(cp); }
- }
-
- if (!entry)
- {
- entry = vtkParseHierarchy_FindEntry(info, name);
- }
-
- newname = NULL;
- if (entry && entry->IsTypedef && entry->Typedef->Class)
- {
- newname = entry->Typedef->Class;
- }
- if (newname)
- {
- cp = (char *)malloc(strlen(newname) + 1);
- strcpy(cp, newname);
- name = cp;
- }
-
- return name;
-}
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkParseHierarchy.h
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-/*-------------------------------------------------------------------------
- Copyright (c) 2010 David Gobbi.
-
- Contributed to the VisualizationToolkit by the author in June 2010
- under the terms of the Visualization Toolkit 2008 copyright.
---------------------------------------------------------------------------*/
-
-/**
- This file contains utility functions for loading and parsing
- a VTK hierarchy file. The file contains entries like the
- following (one per line in the file):
-
- classname [ : superclass ] ; header.h ; vtkKit [; flags]
-
- For each typedef, the output file will have a line like this:
-
- name = &[2][3]* const type ; header.h ; vtkKit [; flags]
-
- For each enum, the output file will have:
-
- enumname : enum ; header.h ; vtkKit [; flags]
-
-*/
-
-#ifndef VTK_PARSE_HIERARCHY_H
-#define VTK_PARSE_HIERARCHY_H
-
-/* Need the ValueInfo struct for typedefs */
-#include "vtkParseData.h"
-
-/**
- * One entry from the hierarchy file.
- * It contains a class name, the superclasses, and the header file.
- */
-typedef struct _HierarchyEntry
-{
- const char *Name; /* the class or type name */
- const char *HeaderFile; /* header file the class is defined in */
- const char *Module; /* library the class is defined in */
- int NumberOfTemplateParameters; /* number of template params */
- const char **TemplateParameters;
- const char **TemplateDefaults;
- int NumberOfProperties; /* number of properties */
- const char **Properties;
- int NumberOfSuperClasses; /* number of superclasses */
- const char **SuperClasses;
- int *SuperClassIndex; /* for internal use only */
- ValueInfo *Typedef; /* for typedefs */
- int IsEnum; /* this entry is for an enum type */
- int IsTypedef; /* this entry is for a typedef */
-} HierarchyEntry;
-
-/**
- * All the entries from a hierarchy file.
- */
-typedef struct _HierarchyInfo
-{
- int NumberOfEntries;
- HierarchyEntry *Entries;
- StringCache *Strings;
-} HierarchyInfo;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Read a hierarchy file into a HeirarchyInfo struct, or return NULL
- */
-HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename);
-
-/**
- * Free a HierarchyInfo struct
- */
-void vtkParseHierarchy_Free(HierarchyInfo *info);
-
-/**
- * Return the entry for a class or type, or null if not found
- */
-HierarchyEntry *vtkParseHierarchy_FindEntry(
- const HierarchyInfo *info, const char *classname);
-
-/**
- * Get properties for the class. Returns NULL if the property
- * is not set, and returns either an empty string or a value string
- * if the property is set. The properties supported are as follows:
- * "WRAP_EXCLUDE", "WRAP_SPECIAL", and "ABSTRACT"
- */
-const char *vtkParseHierarchy_GetProperty(
- const HierarchyEntry *entry, const char *property);
-
-/**
- * Check whether class is derived from baseclass.
- */
-int vtkParseHierarchy_IsTypeOf(const HierarchyInfo *info,
- const HierarchyEntry *entry, const char *baseclass);
-
-/**
- * Check whether class is derived from baseclass. You must supply
- * the entry for the class (returned by FindEntry) as well as the
- * classname. The classname can include template args in angle brackets.
- * The baseclass_with_args parameter, if not set to NULL, will be used
- * to return the name of base class with the template args in angle
- * brackets that classname was derived from. If not set to NULL,
- * this should be freed with free() to avoid a memory leak.
- */
-int vtkParseHierarchy_IsTypeOfTemplated(const HierarchyInfo *info,
- const HierarchyEntry *entry, const char *classname,
- const char *baseclass, const char **baseclass_with_args);
-
-/**
- * Free the template args returned by IsTypeOfTemplated
- */
-void vtkParseHierarchy_FreeTemplateArgs(int n, const char *args[]);
-
-/**
- * Given a classname with template parameters, get the superclass name
- * with corresponding template parameters. Returns null if 'i' is out
- * of range, i.e. greater than or equal to the number of superclasses.
- * The returned classname must be freed with "free()".
- */
-const char *vtkParseHierarchy_TemplatedSuperClass(
- const HierarchyEntry *entry, const char *classname, int i);
-
-/**
- * Expand all unrecognized types in a ValueInfo struct by
- * using the typedefs in the HierarchyInfo struct.
- */
-int vtkParseHierarchy_ExpandTypedefsInValue(
- const HierarchyInfo *info, ValueInfo *data, StringCache *cache,
- const char *scope);
-
-/**
- * Expand typedefs found in a name stored as a string. The value
- * of "text" will be returned if no expansion occurred, else a new
- * string is returned that must be freed with "free()".
- */
-const char *vtkParseHierarchy_ExpandTypedefsInName(
- const HierarchyInfo *info, const char *text, const char *scope);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkParseInternal.h
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-
-/*
- This is an internal header for vtkParse.y, it contains methods for
- manipulating the data structures that are not meant for general
- use by the wrappers, and that are likely to change over time.
-*/
-
-#ifndef VTK_PARSE_PRIVATE_H
-#define VTK_PARSE_PRIVATE_H
-
-#include "vtkParse.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Initializer methods
- */
-/*@{*/
-void vtkParse_InitFile(FileInfo *file_info);
-void vtkParse_InitNamespace(NamespaceInfo *namespace_info);
-void vtkParse_InitClass(ClassInfo *cls);
-void vtkParse_InitFunction(FunctionInfo *func);
-void vtkParse_InitValue(ValueInfo *val);
-void vtkParse_InitEnum(EnumInfo *item);
-void vtkParse_InitUsing(UsingInfo *item);
-void vtkParse_InitTemplateArgs(TemplateArgs *arg);
-void vtkParse_InitTemplateArg(TemplateArg *arg);
-/*@}*/
-
-/**
- * Copy methods
- */
-/*@{*/
-void vtkParse_CopyNamespace(NamespaceInfo *data, const NamespaceInfo *orig);
-void vtkParse_CopyClass(ClassInfo *data, const ClassInfo *orig);
-void vtkParse_CopyFunction(FunctionInfo *data, const FunctionInfo *orig);
-void vtkParse_CopyValue(ValueInfo *data, const ValueInfo *orig);
-void vtkParse_CopyEnum(EnumInfo *data, const EnumInfo *orig);
-void vtkParse_CopyUsing(UsingInfo *data, const UsingInfo *orig);
-void vtkParse_CopyTemplateArgs(TemplateArgs *data, const TemplateArgs *orig);
-void vtkParse_CopyTemplateArg(TemplateArg *data, const TemplateArg *orig);
-/*@}*/
-
-/**
- * Free methods
- */
-/*@{*/
-void vtkParse_FreeFile(FileInfo *file_info);
-void vtkParse_FreeNamespace(NamespaceInfo *namespace_info);
-void vtkParse_FreeClass(ClassInfo *cls);
-void vtkParse_FreeFunction(FunctionInfo *func);
-void vtkParse_FreeValue(ValueInfo *val);
-void vtkParse_FreeEnum(EnumInfo *item);
-void vtkParse_FreeUsing(UsingInfo *item);
-void vtkParse_FreeTemplateArgs(TemplateArgs *arg);
-void vtkParse_FreeTemplateArg(TemplateArg *arg);
-/*@}*/
-
-/**
- * Make a persistent copy of a string for use with AddStringToArray:
- * At most 'n' chars will be copied, and the string will be terminated.
- * If a null pointer is provided, then a null pointer will be returned.
- */
-const char *vtkParse_DuplicateString(const char *cp, size_t n);
-
-/**
- * Add a string to an array of strings, grow array as necessary.
- */
-void vtkParse_AddStringToArray(
- const char ***valueArray, int *count, const char *value);
-
-/**
- * Expand the Item array for classes and namespaces.
- */
-void vtkParse_AddItemToArray(
- ItemInfo **valueArray, int *count, parse_item_t type, int idx);
-
-
-/**
- * Add various items to the structs.
- */
-/*@{*/
-void vtkParse_AddClassToClass(ClassInfo *info, ClassInfo *item);
-void vtkParse_AddFunctionToClass(ClassInfo *info, FunctionInfo *item);
-void vtkParse_AddEnumToClass(ClassInfo *info, EnumInfo *item);
-void vtkParse_AddConstantToClass(ClassInfo *info, ValueInfo *item);
-void vtkParse_AddVariableToClass(ClassInfo *info, ValueInfo *item);
-void vtkParse_AddTypedefToClass(ClassInfo *info, ValueInfo *item);
-void vtkParse_AddUsingToClass(ClassInfo *info, UsingInfo *item);
-void vtkParse_AddNamespaceToNamespace(NamespaceInfo *info,NamespaceInfo *item);
-void vtkParse_AddClassToNamespace(NamespaceInfo *info, ClassInfo *item);
-void vtkParse_AddFunctionToNamespace(NamespaceInfo *info, FunctionInfo *item);
-void vtkParse_AddEnumToNamespace(NamespaceInfo *info, EnumInfo *item);
-void vtkParse_AddConstantToNamespace(NamespaceInfo *info, ValueInfo *item);
-void vtkParse_AddVariableToNamespace(NamespaceInfo *info, ValueInfo *item);
-void vtkParse_AddTypedefToNamespace(NamespaceInfo *info, ValueInfo *item);
-void vtkParse_AddUsingToNamespace(NamespaceInfo *info, UsingInfo *item);
-void vtkParse_AddArgumentToFunction(FunctionInfo *info, ValueInfo *item);
-void vtkParse_AddArgumentToTemplate(TemplateArgs *info, TemplateArg *item);
-/*@}*/
-
-/**
- * Add default constructors if they do not already exist
- */
-void vtkParse_AddDefaultConstructors(ClassInfo *data);
-
-/**
- * Simple utility for mapping VTK types to VTK_PARSE types.
- */
-unsigned int vtkParse_MapType(int vtktype);
-
-/**
- * Ignore BTX/ETX markers
- */
-void vtkParse_SetIgnoreBTX(int option);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkParseMain.c
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-
-/*
-
-This file provides a unified front-end for the wrapper generators.
-
-*/
-
-#include "vtkParse.h"
-#include "vtkParseData.h"
-#include "vtkParseMain.h"
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* This is the struct that contains the options */
-OptionInfo options;
-
-/* Get the base filename */
-static const char *parse_exename(const char *cmd)
-{
- const char *exename;
-
- /* remove directory part of exe name */
- for (exename = cmd + strlen(cmd); exename > cmd; --exename)
- {
- char pc = exename[-1];
- if (pc == ':' || pc == '/' || pc == '\\')
- {
- break;
- }
- }
-
- return exename;
-}
-
-/* Print the help */
-static void parse_print_help(FILE *fp, const char *cmd, int multi)
-{
- fprintf(fp,
- "Usage: %s [options] infile... \n"
- " --help print this help message\n"
- " --version print the VTK version\n"
- " -o <file> the output file\n"
- " -I <dir> add an include directory\n"
- " -D <macro[=def]> define a preprocessor macro\n"
- " -U <macro> undefine a preprocessor macro\n"
- " @<file> read arguments from a file\n",
- parse_exename(cmd));
-
- /* args for describing a singe header file input */
- if (!multi)
- {
- fprintf(fp,
- " --hints <file> the hints file to use\n"
- " --types <file> the type hierarchy file to use\n"
- " --concrete force concrete class (ignored, deprecated)\n"
- " --abstract force abstract class (ignored, deprecated)\n"
- " --vtkobject vtkObjectBase-derived class (ignored, deprecated)\n"
- " --special non-vtkObjectBase class (ignored, deprecated)\n");
- }
-}
-
-/* append an arg to the arglist */
-static void parse_append_arg(int *argn, char ***args, char *arg)
-{
- /* if argn is a power of two, allocate more space */
- if (*argn > 0 && (*argn & (*argn - 1)) == 0)
- {
- *args = (char **)realloc(*args, 2*(*argn)*sizeof(char *));
- }
- /* append argument to list */
- (*args)[*argn] = arg;
- (*argn)++;
-}
-
-/* read options from a file, return zero on error */
-static int read_option_file(
- StringCache *strings, const char *filename, int *argn, char ***args)
-{
- static int option_file_stack_max = 10;
- static int option_file_stack_size = 0;
- static const char *option_file_stack[10];
- FILE *fp;
- char *line;
- const char *ccp;
- char *argstring;
- char *arg;
- size_t maxlen = 15;
- size_t i, n;
- int j;
- int in_string;
-
- line = (char *)malloc(maxlen);
-
- fp = fopen(filename, "r");
-
- if (fp == NULL)
- {
- return 0;
- }
-
- /* read the file line by line */
- while (fgets(line, (int)maxlen, fp))
- {
- n = strlen(line);
-
- /* if buffer not long enough, increase it */
- while (n == maxlen-1 && line[n-1] != '\n' && !feof(fp))
- {
- maxlen *= 2;
- line = (char *)realloc(line, maxlen);
- if (!fgets(&line[n], (int)(maxlen-n), fp)) { break; }
- n += strlen(&line[n]);
- }
-
- /* allocate a string to hold the parsed arguments */
- argstring = vtkParse_NewString(strings, n);
- arg = argstring;
- i = 0;
-
- /* break the line into individual options */
- ccp = line;
- in_string = 0;
- while (*ccp != '\0')
- {
- for (;;)
- {
- if (*ccp == '\\')
- {
- ccp++;
- }
- else if (*ccp == '\"' || *ccp == '\'')
- {
- if (!in_string)
- {
- in_string = *ccp++;
- continue;
- }
- else if (*ccp == in_string)
- {
- in_string = 0;
- ccp++;
- continue;
- }
- }
- else if (!in_string && isspace(*ccp))
- {
- do { ccp++; } while (isspace(*ccp));
- break;
- }
- if (*ccp == '\0')
- {
- break;
- }
- /* append character to argument */
- arg[i++] = *ccp++;
- }
- arg[i++] = '\0';
-
- if (arg[0] == '@')
- {
- /* recursively expand '@file' option */
- if (option_file_stack_size == option_file_stack_max)
- {
- fprintf(stderr, "%s: @file recursion is too deep.\n",
- (*args)[0]);
- exit(1);
- }
- /* avoid reading the same file recursively */
- option_file_stack[option_file_stack_size++] = filename;
- for (j = 0; j < option_file_stack_size; j++)
- {
- if (strcmp(&arg[1], option_file_stack[j]) == 0)
- {
- break;
- }
- }
- if (j < option_file_stack_size)
- {
- parse_append_arg(argn, args, arg);
- }
- else if (read_option_file(strings, &arg[1], argn, args) == 0)
- {
- parse_append_arg(argn, args, arg);
- }
- option_file_stack_size--;
- }
- else if (arg[0] != '\0')
- {
- parse_append_arg(argn, args, arg);
- }
- /* prepare for next arg */
- arg += i;
- i = 0;
- }
- }
-
- return 1;
-}
-
-/* expand any "@file" args that occur in the command-line args */
-static void parse_expand_args(
- StringCache *strings, int argc, char *argv[], int *argn, char ***args)
-{
- int i;
-
- *argn = 0;
- *args = (char **)malloc(sizeof(char *));
-
- for (i = 0; i < argc; i++)
- {
- /* check for "@file" unless this is the command name */
- if (i > 0 || argv[i][0] == '@')
- {
- /* if read_option_file returns null, add "@file" to the args */
- /* (this mimics the way that gcc expands @file arguments) */
- if (read_option_file(strings, &argv[i][1], argn, args) == 0)
- {
- parse_append_arg(argn, args, argv[i]);
- }
- }
- else
- {
- /* append any other arg */
- parse_append_arg(argn, args, argv[i]);
- }
- }
-}
-
-/* Check the options: "multi" should be zero for wrapper tools that
- * only take one input file, or one for wrapper tools that take multiple
- * input files. Returns zero for "--version" or "--help", or returns -1
- * if an error occurred. Otherwise, it returns the number of args
- * that were successfully parsed. */
-static int parse_check_options(int argc, char *argv[], int multi)
-{
- int i;
- size_t j;
- char *cp;
- char c;
-
- options.NumberOfFiles = 0;
- options.Files = NULL;
- options.InputFileName = NULL;
- options.OutputFileName = NULL;
- options.HierarchyFileName = 0;
- options.HintFileName = 0;
-
- for (i = 1; i < argc; i++)
- {
- if (strcmp(argv[i], "--help") == 0)
- {
- parse_print_help(stdout, argv[0], multi);
- return 0;
- }
- else if (strcmp(argv[i], "--version") == 0)
- {
- const char *ver = VTK_PARSE_VERSION;
- fprintf(stdout, "%s %s\n", parse_exename(argv[0]), ver);
- return 0;
- }
- else if (argv[i][0] != '-')
- {
- if (options.NumberOfFiles == 0)
- {
- options.Files = (char **)malloc(sizeof(char *));
- }
- else if ((options.NumberOfFiles & (options.NumberOfFiles - 1)) == 0)
- {
- options.Files = (char **)realloc(
- options.Files, 2*options.NumberOfFiles*sizeof(char *));
- }
- options.Files[options.NumberOfFiles++] = argv[i];
- }
- else if (argv[i][0] == '-' && isalpha(argv[i][1]))
- {
- c = argv[i][1];
- cp = &argv[i][2];
- if (*cp == '\0')
- {
- i++;
- if (i >= argc || argv[i][0] == '-')
- {
- return -1;
- }
- cp = argv[i];
- }
-
- if (c == 'o')
- {
- options.OutputFileName = cp;
- }
- else if (c == 'I')
- {
- vtkParse_IncludeDirectory(cp);
- }
- else if (c == 'D')
- {
- j = 0;
- while (cp[j] != '\0' && cp[j] != '=') { j++; }
- if (cp[j] == '=') { j++; }
- vtkParse_DefineMacro(cp, &cp[j]);
- }
- else if (c == 'U')
- {
- vtkParse_UndefineMacro(cp);
- }
- }
- else if (!multi && strcmp(argv[i], "--hints") == 0)
- {
- i++;
- if (i >= argc || argv[i][0] == '-')
- {
- return -1;
- }
- options.HintFileName = argv[i];
- }
- else if (!multi && strcmp(argv[i], "--types") == 0)
- {
- i++;
- if (i >= argc || argv[i][0] == '-')
- {
- return -1;
- }
- options.HierarchyFileName = argv[i];
- }
- else if (strcmp(argv[i], "--vtkobject") == 0 ||
- strcmp(argv[i], "--special") == 0 ||
- strcmp(argv[i], "--abstract") == 0 ||
- strcmp(argv[i], "--concrete") == 0)
- {
- fprintf(stderr, "Warning: the %s option is deprecated "
- "and will be ignored.\n", argv[i]);
- }
- }
-
- return i;
-}
-
-/* Return a pointer to the static OptionInfo struct */
-OptionInfo *vtkParse_GetCommandLineOptions()
-{
- return &options;
-}
-
-/* Command-line argument handler for wrapper tools */
-FileInfo *vtkParse_Main(int argc, char *argv[])
-{
- int argi;
- int expected_files;
- FILE *ifile;
- FILE *hfile = 0;
- FileInfo *data;
- StringCache strings;
- int argn;
- char **args;
-
- /* expand any "@file" args */
- vtkParse_InitStringCache(&strings);
- parse_expand_args(&strings, argc, argv, &argn, &args);
-
- /* read the args into the static OptionInfo struct */
- argi = parse_check_options(argn, args, 0);
-
- /* was output file already specified by the "-o" option? */
- expected_files = (options.OutputFileName == NULL ? 2 : 1);
-
- /* verify number of args, print usage if not valid */
- if (argi == 0)
- {
- free(args);
- exit(0);
- }
- else if (argi < 0 || options.NumberOfFiles != expected_files)
- {
- parse_print_help(stderr, args[0], 0);
- exit(1);
- }
-
- /* open the input file */
- options.InputFileName = options.Files[0];
-
- if (!(ifile = fopen(options.InputFileName, "r")))
- {
- fprintf(stderr, "Error opening input file %s\n", options.InputFileName);
- exit(1);
- }
-
- if (options.OutputFileName == NULL &&
- options.NumberOfFiles > 1)
- {
- /* allow outfile to be given after infile, if "-o" option not used */
- options.OutputFileName = options.Files[1];
- fprintf(stderr, "Deprecated: specify output file with \"-o\".\n");
- }
-
- /* free the expanded args */
- free(args);
-
- /* open the hint file, if given on the command line */
- if (options.HintFileName && options.HintFileName[0] != '\0')
- {
- if (!(hfile = fopen(options.HintFileName, "r")))
- {
- fprintf(stderr, "Error opening hint file %s\n", options.HintFileName);
- fclose(ifile);
- exit(1);
- }
- }
-
- /* make sure than an output file was given on the command line */
- if (options.OutputFileName == NULL)
- {
- fprintf(stderr, "No output file was specified\n");
- fclose(ifile);
- if (hfile)
- {
- fclose(hfile);
- }
- exit(1);
- }
-
- /* if a hierarchy is was given, then BTX/ETX can be ignored */
- vtkParse_SetIgnoreBTX(0);
- if (options.HierarchyFileName)
- {
- vtkParse_SetIgnoreBTX(1);
- }
-
- /* parse the input file */
- data = vtkParse_ParseFile(options.InputFileName, ifile, stderr);
-
- if (!data)
- {
- exit(1);
- }
-
- /* fill in some blanks by using the hints file */
- if (hfile)
- {
- vtkParse_ReadHints(data, hfile, stderr);
- }
-
- if (data->MainClass)
- {
- /* mark class as abstract unless it has New() method */
- int nfunc = data->MainClass->NumberOfFunctions;
- int ifunc;
- for (ifunc = 0; ifunc < nfunc; ifunc++)
- {
- FunctionInfo *func = data->MainClass->Functions[ifunc];
- if (func && func->Access == VTK_ACCESS_PUBLIC &&
- func->Name && strcmp(func->Name, "New") == 0 &&
- func->NumberOfParameters == 0)
- {
- break;
- }
- }
- data->MainClass->IsAbstract = ((ifunc == nfunc) ? 1 : 0);
- }
-
- return data;
-}
-
-/* Command-line argument handler for wrapper tools */
-void vtkParse_MainMulti(int argc, char *argv[])
-{
- int argi;
- int argn;
- char **args;
- StringCache strings;
-
- /* expand any "@file" args */
- vtkParse_InitStringCache(&strings);
- parse_expand_args(&strings, argc, argv, &argn, &args);
-
- /* read the args into the static OptionInfo struct */
- argi = parse_check_options(argn, args, 1);
- free(args);
-
- if (argi == 0)
- {
- exit(0);
- }
- else if (argi < 0 || options.NumberOfFiles == 0)
- {
- parse_print_help(stderr, argv[0], 1);
- exit(1);
- }
-
- /* the input file */
- options.InputFileName = options.Files[0];
-}
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkParseMain.h
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-
-/**
- vtkParseMain.h provides argument parsing for the wrapper executables.
-
- Usage: vtkWrap [options] infile ...
-
- -D <macro[=def]> add a macro definition
- -U <macro> cancel a macro definition
- -I <dir> add an include directory
- -o <file> specify the output file
- @<file> read arguments from a file
- --help print a help message and exit
- --version print the VTK version number and exit
- --hints <file> hints file
- --types <file> type hierarchy file
-
- Notes:
-
- 1) The "-o" option is needed when there are multiple input files.
- Otherwise, the output file can be given after the input file.
-
- 2) The "@file" option allows arguments to be stored in a file,
- instead of given on the command line. The use of such a file
- is sometimes necessary to avoid overflowing the 8191-character
- command-line limit on Windows. If the file is not found, then
- "@file" will be passed as as a command-line parameter.
-*/
-
-#ifndef VTK_PARSE_MAIN_H
-#define VTK_PARSE_MAIN_H
-
-#include "vtkParseData.h"
-#include <stdio.h>
-
-/**
- * Options for the wrappers
- */
-typedef struct _OptionInfo
-{
- int NumberOfFiles; /* the total number of file arguments */
- char **Files; /* all of the file arguments */
- char *InputFileName; /* the first file argument */
- char *OutputFileName; /* the second file, or the "-o" file */
- char *HintFileName; /* the file preceded by "--hints" */
- char *HierarchyFileName; /* the file preceded by "--types" */
-} OptionInfo;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Return the options provided on the command line
- */
-OptionInfo *vtkParse_GetCommandLineOptions();
-
-/**
- * The main function, parses the file and returns the result.
- */
-FileInfo *vtkParse_Main(int argc, char *argv[]);
-
-/**
- * A main function that can take multiple input files.
- * It does not parse the files. It will exit on error.
- */
-void vtkParse_MainMulti(int argc, char *argv[]);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkParsePreprocess.c
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-/*-------------------------------------------------------------------------
- Copyright (c) 2010 David Gobbi.
-
- Contributed to the VisualizationToolkit by the author in June 2010
- under the terms of the Visualization Toolkit 2008 copyright.
--------------------------------------------------------------------------*/
-
-#include "vtkParsePreprocess.h"
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/stat.h>
-
-/**
- This file handles preprocessor directives via a simple
- recursive-descent parser that only evaluates integers.
-*/
-
-#define PREPROC_DEBUG 0
-
-/** Block size for reading files */
-#define FILE_BUFFER_SIZE 8192
-
-/** Size of hash table must be a power of two */
-#define PREPROC_HASH_TABLE_SIZE 1024u
-
-/** Hashes for preprocessor keywords */
-#define HASH_IFDEF 0x0fa4b283u
-#define HASH_IFNDEF 0x04407ab1u
-#define HASH_IF 0x00597834u
-#define HASH_ELIF 0x7c964b25u
-#define HASH_ELSE 0x7c964c6eu
-#define HASH_ENDIF 0x0f60b40bu
-#define HASH_DEFINED 0x088998d4u
-#define HASH_DEFINE 0xf8804a70u
-#define HASH_UNDEF 0x10823b97u
-#define HASH_INCLUDE 0x9e36af89u
-#define HASH_ERROR 0x0f6321efu
-#define HASH_LINE 0x7c9a15adu
-#define HASH_PRAGMA 0x1566a9fdu
-
-/** Various possible char types */
-#define CPRE_ID 0x01 /* A-Z a-z and _ */
-#define CPRE_DIGIT 0x02 /* 0-9 */
-#define CPRE_IDGIT 0x03 /* 0-9 A-Z a-z and _ */
-#define CPRE_HEX 0x04 /* 0-9A-Fa-f */
-#define CPRE_EXP 0x08 /* EPep (exponents for floats) */
-#define CPRE_SIGN 0x10 /* +- (sign for floats) */
-#define CPRE_QUOTE 0x20 /* " and ' */
-#define CPRE_HSPACE 0x40 /* space, tab, carriage return */
-#define CPRE_VSPACE 0x80 /* newline, vertical tab, form feed */
-#define CPRE_WHITE 0xC0 /* all whitespace characters */
-
-/** Whitespace types.
- * WS_NO_EOL treats newline as end-of-line, instead of whitespace.
- * WS_ALL treats newlines as regular whitespace.
- * WS_COMMENT does not treat comments as whitespace, allowing
- * comments blocks to be returned as tokens. */
-typedef enum _preproc_space_t
-{
- WS_NO_EOL = CPRE_HSPACE, /* skip horizontal whitespace only */
- WS_ALL = CPRE_WHITE, /* skip all whitespace */
- WS_COMMENT = (CPRE_WHITE | 0x100), /* comments as tokens */
-} preproc_space_t;
-
-/** Preprocessor tokens. */
-typedef enum _preproc_token_t
-{
- TOK_OTHER = 257,
- TOK_ID, /* any id */
- TOK_CHAR, /* char literal */
- TOK_STRING, /* string literal */
- TOK_NUMBER, /* any numeric literal */
- TOK_COMMENT, /* C or C++ comment */
- TOK_DBLHASH, /* ## */
- TOK_SCOPE, /* :: */
- TOK_INCR, /* ++ */
- TOK_DECR, /* -- */
- TOK_RSHIFT, /* >> */
- TOK_LSHIFT, /* << */
- TOK_AND, /* && */
- TOK_OR, /* || */
- TOK_EQ, /* == */
- TOK_NE, /* != */
- TOK_GE, /* >= */
- TOK_LE, /* <= */
- TOK_ADD_EQ, /* += */
- TOK_SUB_EQ, /* -= */
- TOK_MUL_EQ, /* *= */
- TOK_DIV_EQ, /* /= */
- TOK_MOD_EQ, /* %= */
- TOK_AND_EQ, /* &= */
- TOK_OR_EQ, /* |= */
- TOK_XOR_EQ, /* ^= */
- TOK_ARROW, /* -> */
- TOK_DOT_STAR, /* .* */
- TOK_ARROW_STAR,/* ->* */
- TOK_RSHIFT_EQ, /* >>= */
- TOK_LSHIFT_EQ, /* <<= */
- TOK_ELLIPSIS, /* ... */
-} preproc_token_t;
-
-/** A struct for going through the input one token at a time. */
-typedef struct _preproc_tokenizer
-{
- int tok;
- unsigned int hash;
- const char *text;
- size_t len;
-} preproc_tokenizer;
-
-/** Extend dynamic arrays in a progression of powers of two.
- * Whenever "n" reaches a power of two, then the array size is
- * doubled so that "n" can be safely incremented. */
-static void *preproc_array_check(
- void *arraymem, size_t size, int n)
-{
- /* if empty, alloc for the first time */
- if (n == 0)
- {
- return malloc(size);
- }
- /* if count is power of two, reallocate with double size */
- else if ((n & (n-1)) == 0)
- {
- return realloc(arraymem, (n << 1)*size);
- }
-
- /* no reallocation, just return the original array */
- return arraymem;
-}
-
-/** Convert string to int. */
-static preproc_int_t string_to_preproc_int(const char *cp, int base)
-{
-#if defined(_WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)
- return _strtoi64(cp, NULL, base);
-#else
- return strtoll(cp, NULL, base);
-#endif
-}
-
-/** Convert string to unsigned int. */
-static preproc_uint_t string_to_preproc_uint(const char *cp, int base)
-{
-#if defined(_WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)
- return _strtoui64(cp, NULL, base);
-#else
- return strtoull(cp, NULL, base);
-#endif
-}
-
-/** Array for quick lookup of char types */
-static unsigned char preproc_charbits[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- CPRE_HSPACE, /* tab */
- CPRE_VSPACE, CPRE_VSPACE, CPRE_VSPACE, /* newline, vtab, form feed */
- CPRE_HSPACE, /* carriage return */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- CPRE_HSPACE, /* ' ' */
- 0, CPRE_QUOTE, 0, 0, 0, 0, CPRE_QUOTE, 0, 0, /* !"#$%&'() */
- 0, CPRE_SIGN, 0, CPRE_SIGN, 0, 0, /* *+,-./ */
- CPRE_DIGIT|CPRE_HEX, /* 0 */
- CPRE_DIGIT|CPRE_HEX, CPRE_DIGIT|CPRE_HEX,
- CPRE_DIGIT|CPRE_HEX, CPRE_DIGIT|CPRE_HEX,
- CPRE_DIGIT|CPRE_HEX, CPRE_DIGIT|CPRE_HEX,
- CPRE_DIGIT|CPRE_HEX, CPRE_DIGIT|CPRE_HEX,
- CPRE_DIGIT|CPRE_HEX, /* 9 */
- 0, 0, 0, 0, 0, 0, 0, /* :;<=>?@ */
- CPRE_ID|CPRE_HEX, /* A */
- CPRE_ID|CPRE_HEX, CPRE_ID|CPRE_HEX, CPRE_ID|CPRE_HEX, /* BCD */
- CPRE_ID|CPRE_HEX|CPRE_EXP, /* E */
- CPRE_ID|CPRE_HEX, CPRE_ID, CPRE_ID, CPRE_ID, /* FGHI */
- CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* JKLM */
- CPRE_ID, CPRE_ID, CPRE_ID|CPRE_EXP, CPRE_ID, /* NOPQ */
- CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* RSTU */
- CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* VWXY */
- CPRE_ID, /* Z */
- 0, 0, 0, 0, /* [\\]^ */
- CPRE_ID, /* _ */
- 0, /* ` */
- CPRE_ID|CPRE_HEX, /* a */
- CPRE_ID|CPRE_HEX, CPRE_ID|CPRE_HEX, CPRE_ID|CPRE_HEX, /* bcd */
- CPRE_ID|CPRE_HEX|CPRE_EXP, /* e */
- CPRE_ID|CPRE_HEX, CPRE_ID, CPRE_ID, CPRE_ID, /* fghi */
- CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* jklm */
- CPRE_ID, CPRE_ID, CPRE_ID|CPRE_EXP, CPRE_ID, /* nopq */
- CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* rstu */
- CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* vwxy */
- CPRE_ID, /* z */
- 0, 0, 0, 0, /* {|}~ */
- 0, /* '\x7f' */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-/** Macro to get char type */
-#define preproc_chartype(c, bits) \
- ((preproc_charbits[(unsigned char)(c)] & bits) != 0)
-
-/** Skip over a comment. */
-static void preproc_skip_comment(const char **cpp)
-{
- const char *cp = *cpp;
-
- if (cp[0] == '/')
- {
- if (cp[1] == '/')
- {
- cp += 2;
- while (*cp != '\n' && *cp != '\0')
- {
- if (cp[0] == '\\')
- {
- if (cp[1] == '\n') { cp++; }
- else if (cp[1] == '\r' && cp[2] == '\n') { cp += 2; }
- }
- cp++;
- }
- }
- else if (cp[1] == '*')
- {
- cp += 2;
- while (*cp != '\0')
- {
- if (cp[0] == '*' && cp[1] == '/') { cp += 2; break; }
- cp++;
- }
- }
- }
-
- *cpp = cp;
-}
-
-/** Skip over whitespace, but not newlines unless preceded by backlash. */
-static void preproc_skip_whitespace(
- const char **cpp, preproc_space_t spacetype)
-{
- const char *cp = *cpp;
-
- for (;;)
- {
- if (preproc_chartype(*cp, spacetype))
- {
- do
- {
- cp++;
- }
- while (preproc_chartype(*cp, spacetype));
- }
- if (cp[0] == '\\')
- {
- if (cp[1] == '\n')
- {
- cp += 2;
- }
- else if (cp[1] == '\r' && cp[2] == '\n')
- {
- cp += 3;
- }
- else
- {
- break;
- }
- }
- else if (cp[0] == '/' && (spacetype & WS_COMMENT) != WS_COMMENT)
- {
- if (cp[1] == '/' || cp[1] == '*')
- {
- preproc_skip_comment(&cp);
- }
- else
- {
- break;
- }
- }
- else
- {
- break;
- }
- }
-
- *cpp = cp;
-}
-
-/** Skip over string and char literals. */
-static void preproc_skip_quotes(const char **cpp)
-{
- const char *cp = *cpp;
- const char qc = *cp;
-
- if (preproc_chartype(*cp, CPRE_QUOTE))
- {
- cp++;
- while (*cp != qc && *cp != '\n' && *cp != '\0')
- {
- if (*cp++ == '\\')
- {
- if (cp[0] == '\r' && cp[1] == '\n') { cp += 2; }
- else if (*cp != '\0') { cp++; }
- }
- }
- }
- if (*cp == qc)
- {
- cp++;
- }
-
- *cpp = cp;
-}
-
-/** Skip over a name. */
-static void preproc_skip_name(const char **cpp)
-{
- const char *cp = *cpp;
-
- if (preproc_chartype(*cp, CPRE_ID))
- {
- do
- {
- cp++;
- }
- while (preproc_chartype(*cp, CPRE_IDGIT));
- }
-
- *cpp = cp;
-}
-
-/** A simple 32-bit hash function based on "djb2". */
-static unsigned int preproc_hash_name(const char **cpp)
-{
- const char *cp = (*cpp);
- int h = 5381;
-
- if (preproc_chartype(*cp, CPRE_ID))
- {
- do { h = (h << 5) + h + (unsigned char)*cp++; }
- while (preproc_chartype(*cp, CPRE_IDGIT));
- }
-
- *cpp = cp;
- return h;
-}
-
-/** Skip over a number. */
-static void preproc_skip_number(const char **cpp)
-{
- const char *cp = *cpp;
-
- if (preproc_chartype(cp[0], CPRE_DIGIT) ||
- (cp[0] == '.' && preproc_chartype(cp[1], CPRE_DIGIT)))
- {
- do
- {
- char c = *cp++;
- if (preproc_chartype(c, CPRE_EXP) &&
- preproc_chartype(*cp, CPRE_SIGN))
- {
- cp++;
- }
- }
- while (preproc_chartype(*cp, CPRE_IDGIT) || *cp == '.');
- }
-
- *cpp = cp;
-}
-
-/** Return the next preprocessor token, or '0' if none left. */
-static int preproc_next(preproc_tokenizer *tokens)
-{
- const char *cp = tokens->text + tokens->len;
- preproc_skip_whitespace(&cp, WS_NO_EOL);
-
- if (preproc_chartype(*cp, CPRE_ID))
- {
- const char *ep = cp;
- unsigned int h = preproc_hash_name(&ep);
- tokens->tok = TOK_ID;
- tokens->hash = h;
- tokens->text = cp;
- tokens->len = ep - cp;
- }
- else if (preproc_chartype(*cp, CPRE_QUOTE))
- {
- const char *ep = cp;
- preproc_skip_quotes(&ep);
- tokens->tok = (*cp == '\"' ? TOK_STRING : TOK_CHAR);
- tokens->hash = 0;
- tokens->text = cp;
- tokens->len = ep - cp;
- }
- else if (preproc_chartype(*cp, CPRE_DIGIT) ||
- (cp[0] == '.' && preproc_chartype(cp[1], CPRE_DIGIT)))
- {
- const char *ep = cp;
- preproc_skip_number(&ep);
- tokens->tok = TOK_NUMBER;
- tokens->hash = 0;
- tokens->text = cp;
- tokens->len = ep - cp;
- }
- else if (cp[0] == '/' && (cp[1] == '/' || cp[1] == '*'))
- {
- const char *ep = cp;
- preproc_skip_comment(&ep);
- tokens->tok = TOK_COMMENT;
- tokens->hash = 0;
- tokens->text = cp;
- tokens->len = ep - cp;
- }
- else
- {
- int t = cp[0];
- size_t l = 1;
-
- switch (cp[0])
- {
- case ':':
- if (cp[1] == ':') { l = 2; t = TOK_SCOPE; }
- break;
- case '.':
- if (cp[1] == '.' && cp[2] == '.') { l = 3; t = TOK_ELLIPSIS; }
- else if (cp[1] == '*') { l = 2; t = TOK_DOT_STAR; }
- break;
- case '=':
- if (cp[1] == '=') { l = 2; t = TOK_EQ; }
- break;
- case '!':
- if (cp[1] == '=') { l = 2; t = TOK_NE; }
- break;
- case '<':
- if (cp[1] == '<' && cp[2] == '=') { l = 3; t = TOK_LSHIFT_EQ; }
- else if (cp[1] == '<') { l = 2; t = TOK_LSHIFT; }
- else if (cp[1] == '=') { l = 2; t = TOK_LE; }
- break;
- case '>':
- if (cp[1] == '>' && cp[2] == '=') { l = 3; t = TOK_RSHIFT_EQ; }
- else if (cp[1] == '>') { l = 2; t = TOK_RSHIFT; }
- else if (cp[1] == '=') { l = 2; t = TOK_GE; }
- break;
- case '&':
- if (cp[1] == '=') { l = 2; t = TOK_AND_EQ; }
- else if (cp[1] == '&') { l = 2; t = TOK_AND; }
- break;
- case '|':
- if (cp[1] == '=') { l = 2; t = TOK_OR_EQ; }
- else if (cp[1] == '|') { l = 2; t = TOK_OR; }
- break;
- case '^':
- if (cp[1] == '=') { l = 2; t = TOK_XOR_EQ; }
- break;
- case '*':
- if (cp[1] == '=') { l = 2; t = TOK_MUL_EQ; }
- break;
- case '/':
- if (cp[1] == '=') { l = 2; t = TOK_DIV_EQ; }
- break;
- case '%':
- if (cp[1] == '=') { l = 2; t = TOK_MOD_EQ; }
- break;
- case '+':
- if (cp[1] == '+') { l = 2; t = TOK_INCR; }
- else if (cp[1] == '=') { l = 2; t = TOK_ADD_EQ; }
- break;
- case '-':
- if (cp[1] == '>' && cp[2] == '*') { l = 3; t = TOK_ARROW_STAR; }
- else if (cp[1] == '>') { l = 2; t = TOK_ARROW; }
- else if (cp[1] == '-') { l = 2; t = TOK_DECR; }
- else if (cp[1] == '=') { l = 2; t = TOK_SUB_EQ; }
- break;
- case '#':
- if (cp[1] == '#') { l = 2; t = TOK_DBLHASH; }
- break;
- case '\n':
- case '\0':
- { l = 0; t = 0; }
- break;
- }
-
- tokens->tok = t;
- tokens->hash = 0;
- tokens->text = cp;
- tokens->len = l;
- }
-
- return tokens->tok;
-}
-
-/** Initialize the tokenizer. */
-static void preproc_init(preproc_tokenizer *tokens, const char *text)
-{
- tokens->tok = 0;
- tokens->hash = 0;
- tokens->text = text;
- tokens->len = 0;
- preproc_next(tokens);
-}
-
-/** Tokenize and compare two strings */
-static int preproc_identical(const char *text1, const char *text2)
-{
- int result = 1;
-
- if (text1 != text2)
- {
- result = 0;
-
- if (text1 && text2)
- {
- preproc_tokenizer t1;
- preproc_tokenizer t2;
-
- preproc_init(&t1, text1);
- preproc_init(&t2, text2);
-
- do
- {
- if (t1.tok != t2.tok ||
- t1.hash != t2.hash ||
- t1.len != t2.len ||
- strncmp(t1.text, t2.text, t1.len) != 0)
- {
- break;
- }
- preproc_next(&t1);
- preproc_next(&t2);
- }
- while (t1.tok && t2.tok);
-
- result = (t1.tok == 0 && t2.tok == 0);
- }
- }
-
- return result;
-}
-
-/** Duplicate the first n bytes of a string. */
-static const char *preproc_strndup(const char *in, size_t n)
-{
- char *res = NULL;
-
- res = (char *)malloc(n+1);
- strncpy(res, in, n);
- res[n] = '\0';
-
- return res;
-}
-
-/** Create a new preprocessor macro. */
-static MacroInfo *preproc_new_macro(
- PreprocessInfo *info, const char *name, const char *definition)
-{
- MacroInfo *macro = (MacroInfo *)malloc(sizeof(MacroInfo));
- vtkParsePreprocess_InitMacro(macro);
-
- if (name)
- {
- size_t n;
- const char *cp = name;
- preproc_skip_name(&cp);
- n = cp - name;
- macro->Name = preproc_strndup(name, n);
- }
-
- if (definition)
- {
- size_t n;
- const char *cp = definition;
- preproc_tokenizer tokens;
- preproc_init(&tokens, cp);
-
- do
- {
- cp = tokens.text + tokens.len;
- }
- while (preproc_next(&tokens));
-
- n = cp - definition;
- macro->Definition = preproc_strndup(definition, n);
- }
-
- macro->IsExternal = info->IsExternal;
-
- return macro;
-}
-
-/** Free a preprocessor macro struct. */
-static void preproc_free_macro(MacroInfo *info)
-{
- free(info);
-}
-
-/** Find a preprocessor macro, return 0 if not found. */
-static MacroInfo *preproc_find_macro(
- PreprocessInfo *info, preproc_tokenizer *token)
-{
- unsigned int m = PREPROC_HASH_TABLE_SIZE - 1;
- unsigned int i = (token->hash & m);
- const char *name = token->text;
- size_t l = token->len;
- MacroInfo ***htable = info->MacroHashTable;
- MacroInfo **hptr;
- const char *mname;
-
- if (htable && ((hptr = htable[i]) != NULL) && *hptr)
- {
- do
- {
- mname = (*hptr)->Name;
- if (mname[0] == name[0] &&
- strncmp(mname, name, l) == 0 &&
- mname[l] == '\0')
- {
- return *hptr;
- }
- hptr++;
- }
- while (*hptr);
- }
-
- return NULL;
-}
-
-/** Return the address of the macro within the hash table.
- * If "insert" is nonzero, add a new location if macro not found. */
-static MacroInfo **preproc_macro_location(
- PreprocessInfo *info, preproc_tokenizer *token, int insert)
-{
- MacroInfo ***htable = info->MacroHashTable;
- unsigned int m = PREPROC_HASH_TABLE_SIZE - 1;
- unsigned int i = (token->hash & m);
- const char *name = token->text;
- size_t l = token->len;
- size_t n;
- MacroInfo **hptr;
- const char *mname;
-
- if (htable == NULL)
- {
- if (!insert)
- {
- return NULL;
- }
-
- m = PREPROC_HASH_TABLE_SIZE;
- htable = (MacroInfo ***)malloc(m*sizeof(MacroInfo **));
- info->MacroHashTable = htable;
- do { *htable++ = NULL; } while (--m);
- htable = info->MacroHashTable;
- }
-
- hptr = htable[i];
-
- if (hptr == NULL)
- {
- if (!insert)
- {
- return NULL;
- }
-
- hptr = (MacroInfo **)malloc(2*sizeof(MacroInfo *));
- hptr[0] = NULL;
- hptr[1] = NULL;
- htable[i] = hptr;
- }
- else if (*hptr)
- {
- /* see if macro is already there */
- n = 0;
- do
- {
- mname = (*hptr)->Name;
- if (mname[0] == name[0] &&
- strncmp(mname, name, l) == 0 &&
- mname[l] == '\0')
- {
- break;
- }
- n++;
- hptr++;
- }
- while (*hptr);
-
- if (*hptr == NULL)
- {
- if (!insert)
- {
- return NULL;
- }
-
- /* if n+1 is a power of two, double allocated space */
- if (n > 0 && (n & (n+1)) == 0)
- {
- hptr = htable[i];
- hptr = (MacroInfo **)realloc(hptr, (2*(n+1))*sizeof(MacroInfo *));
- htable[i] = hptr;
- hptr += n;
- }
-
- /* add a terminating null */
- hptr[1] = NULL;
- }
- }
-
- return hptr;
-}
-
-/** Remove a preprocessor macro. Returns 0 if macro not found. */
-static int preproc_remove_macro(
- PreprocessInfo *info, preproc_tokenizer *token)
-{
- MacroInfo **hptr;
-
- hptr = preproc_macro_location(info, token, 0);
-
- if (hptr && *hptr)
- {
- preproc_free_macro(*hptr);
-
- do
- {
- hptr[0] = hptr[1];
- hptr++;
- }
- while (*hptr);
-
- return 1;
- }
-
- return 0;
-}
-
-/** A simple way to add a preprocessor macro definition. */
-static MacroInfo *preproc_add_macro_definition(
- PreprocessInfo *info, const char *name, const char *definition)
-{
- preproc_tokenizer token;
- MacroInfo *macro;
- MacroInfo **macro_p;
-
- preproc_init(&token, name);
-
- macro = preproc_new_macro(info, name, definition);
- macro_p = preproc_macro_location(info, &token, 1);
-#if PREPROC_DEBUG
- if (*macro_p)
- {
- fprintf(stderr, "duplicate macro definition %s\n", name);
- }
-#endif
- *macro_p = macro;
-
- return macro;
-}
-
-/** Skip over parentheses, return nonzero if not closed. */
-static int preproc_skip_parentheses(preproc_tokenizer *tokens)
-{
- int depth = 0;
-
- if (tokens->tok == '(')
- {
- depth = 1;
-
- while (depth > 0 && preproc_next(tokens))
- {
- if (tokens->tok == '(')
- {
- depth++;
- }
- else if (tokens->tok == ')')
- {
- depth--;
- }
- }
- }
-
- if (tokens->tok == ')')
- {
- preproc_next(tokens);
- return VTK_PARSE_OK;
- }
-
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- return VTK_PARSE_SYNTAX_ERROR;
-}
-
-
-/** Evaluate a char literal to an integer value. */
-static int preproc_evaluate_char(
- const char *cp, preproc_int_t *val, int *is_unsigned)
-{
- if (cp[0] == '\'')
- {
- cp++;
- if (*cp != '\\')
- {
- *val = *cp;
- }
- else if (*cp != '\'' && *cp != '\n' && *cp != '\0')
- {
- cp++;
- if (*cp == 'a') { *val = '\a'; }
- else if (*cp == 'b') { *val = '\b'; }
- else if (*cp == 'f') { *val = '\f'; }
- else if (*cp == 'n') { *val = '\n'; }
- else if (*cp == 'r') { *val = '\r'; }
- else if (*cp == 'b') { *val = '\b'; }
- else if (*cp == 't') { *val = '\t'; }
- else if (*cp == 'v') { *val = '\v'; }
- else if (*cp == '\'') { *val = '\''; }
- else if (*cp == '\"') { *val = '\"'; }
- else if (*cp == '\\') { *val = '\\'; }
- else if (*cp == '\?') { *val = '\?'; }
- else if (*cp == '0')
- {
- *val = string_to_preproc_int(cp, 8);
- do { cp++; } while (*cp >= '0' && *cp <= '7');
- }
- else if (*cp == 'x')
- {
- *val = string_to_preproc_int(cp+1, 16);
- do { cp++; } while (preproc_chartype(*cp, CPRE_HEX));
- }
- }
- if (*cp != '\'')
- {
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- return VTK_PARSE_SYNTAX_ERROR;
- }
- cp++;
- *is_unsigned = 0;
- return VTK_PARSE_OK;
- }
-
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- return VTK_PARSE_SYNTAX_ERROR;
-}
-
-/* Evaluate an integer, ignoring any suffixes except 'u'. */
-static int preproc_evaluate_integer(
- const char *cp, preproc_int_t *val, int *is_unsigned)
-{
- const char *ep;
- int base = 0;
- ep = cp;
-
- if (cp[0] == '0' && (cp[1] == 'x' || cp[1] == 'X'))
- {
- cp += 2;
- base = 16;
- *is_unsigned = 1;
- ep = cp;
- while (preproc_chartype(*ep, CPRE_HEX))
- {
- ep++;
- }
- }
- else if (cp[0] == '0' && preproc_chartype(cp[1], CPRE_DIGIT))
- {
- cp += 1;
- base = 8;
- *is_unsigned = 1;
- ep = cp;
- while (*ep >= '0' && *ep <= '7')
- {
- ep++;
- }
- }
- else
- {
- base = 10;
- *is_unsigned = 0;
- while (preproc_chartype(*ep, CPRE_DIGIT))
- {
- ep++;
- }
- }
-
- for (;;)
- {
- if (ep[0] == 'i' && ep[1] == '6' && ep[2] == '4') { ep += 3; }
- else if (*ep == 'u') { *is_unsigned = 1; ep++; }
- else if (*ep == 'l' || *ep == 'L') { ep++; }
- else { break; }
- }
-
- if (*is_unsigned)
- {
- *val = (preproc_int_t)string_to_preproc_uint(cp, base);
- }
- else
- {
- *val = string_to_preproc_int(cp, base);
- }
-
- if (*ep == '.' || *ep == 'e' || *ep == 'E')
- {
- return VTK_PARSE_PREPROC_DOUBLE;
- }
-
- return VTK_PARSE_OK;
-}
-
-/* forward declaration */
-static int preproc_evaluate_expression(
- PreprocessInfo *info, preproc_tokenizer *tokens,
- preproc_int_t *val, int *is_unsigned);
-
-/** Evaluate a single item in an expression. */
-static int preproc_evaluate_single(
- PreprocessInfo *info, preproc_tokenizer *tokens,
- preproc_int_t *val, int *is_unsigned)
-{
- int result = VTK_PARSE_OK;
-
- while (tokens->tok == TOK_ID)
- {
- /* handle the "defined" keyword */
- if (tokens->hash == HASH_DEFINED && tokens->len == 7 &&
- strncmp("defined", tokens->text, tokens->len) == 0)
- {
- int paren = 0;
- preproc_next(tokens);
-
- if (tokens->tok == '(')
- {
- paren = 1;
- preproc_next(tokens);
- }
- if (tokens->tok != TOK_ID)
- {
- *val = 0;
- *is_unsigned = 0;
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- return VTK_PARSE_SYNTAX_ERROR;
- }
-
- /* do the name lookup */
- *is_unsigned = 0;
- *val = (preproc_find_macro(info, tokens) != 0);
-
- preproc_next(tokens);
- if (paren)
- {
- if (tokens->tok != ')')
- {
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- return VTK_PARSE_SYNTAX_ERROR;
- }
- preproc_next(tokens);
- }
-
- return result;
- }
- else
- {
- /* look up and evaluate the macro */
- MacroInfo *macro = preproc_find_macro(info, tokens);
- const char *args = NULL;
- const char *expansion = NULL;
- const char *cp;
- preproc_next(tokens);
- *val = 0;
- *is_unsigned = 0;
-
- if (macro == NULL || macro->IsExcluded)
- {
- return VTK_PARSE_MACRO_UNDEFINED;
- }
- else if (macro->IsFunction)
- {
- /* expand function macros using the arguments */
- args = tokens->text;
- if (tokens->tok != '(' ||
- preproc_skip_parentheses(tokens) != VTK_PARSE_OK)
- {
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- return VTK_PARSE_SYNTAX_ERROR;
- }
- }
- expansion = vtkParsePreprocess_ExpandMacro(info, macro, args);
- if (expansion == NULL)
- {
- free((char *)args);
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- return (args ? VTK_PARSE_MACRO_NUMARGS : VTK_PARSE_SYNTAX_ERROR);
- }
- cp = expansion;
- preproc_skip_whitespace(&cp, WS_NO_EOL);
- if (*cp != '\0')
- {
- macro->IsExcluded = 1;
- result = vtkParsePreprocess_EvaluateExpression(
- info, expansion, val, is_unsigned);
- macro->IsExcluded = 0;
- vtkParsePreprocess_FreeMacroExpansion(
- info, macro, expansion);
- return result;
- }
- vtkParsePreprocess_FreeMacroExpansion(info, macro, expansion);
- }
- /* if macro expansion was empty, continue */
- }
-
- if (tokens->tok == '(')
- {
- preproc_next(tokens);
- result = preproc_evaluate_expression(info, tokens, val, is_unsigned);
- if ((result & VTK_PARSE_FATAL_ERROR) == 0)
- {
- if (tokens->tok == ')')
- {
- preproc_next(tokens);
- return result;
- }
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- return VTK_PARSE_SYNTAX_ERROR;
- }
- return result;
- }
- else if (tokens->tok == TOK_NUMBER)
- {
- result = preproc_evaluate_integer(tokens->text, val, is_unsigned);
- if (tokens->text[tokens->len-1] == 'f' ||
- tokens->text[tokens->len-1] == 'F')
- {
- result = VTK_PARSE_PREPROC_FLOAT;
- }
- preproc_next(tokens);
- return result;
- }
- else if (tokens->tok == TOK_CHAR)
- {
- result = preproc_evaluate_char(tokens->text, val, is_unsigned);
- preproc_next(tokens);
- return result;
- }
- else if (tokens->tok == TOK_STRING)
- {
- *val = 0;
- *is_unsigned = 0;
- preproc_next(tokens);
- while (tokens->tok == TOK_STRING)
- {
- preproc_next(tokens);
- }
- return VTK_PARSE_PREPROC_STRING;
- }
-
- *val = 0;
- *is_unsigned = 0;
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d \"%*.*s\"\n", __LINE__,
- (int)tokens->len, (int)tokens->len, tokens->text);
-#endif
- return VTK_PARSE_SYNTAX_ERROR;
-}
-
-static int preproc_evaluate_unary(
- PreprocessInfo *info, preproc_tokenizer *tokens,
- preproc_int_t *val, int *is_unsigned)
-{
- int op = tokens->tok;
- int result = VTK_PARSE_OK;
-
- if (op != '+' && op != '-' && op != '~' && op != '!')
- {
- return preproc_evaluate_single(info, tokens, val, is_unsigned);
- }
-
- preproc_next(tokens);
-
- result = preproc_evaluate_unary(info, tokens, val, is_unsigned);
- if ((result & VTK_PARSE_FATAL_ERROR) == 0)
- {
- if (op == '~') { *val = ~(*val); }
- else if (op == '!') { *val = !(*val); *is_unsigned = 0; }
- else if (op == '-') { *val = -(*val); }
- return result;
- }
-
- return result;
-}
-
-static int preproc_evaluate_multiply(
- PreprocessInfo *info, preproc_tokenizer *tokens,
- preproc_int_t *val, int *is_unsigned)
-{
- int op;
- preproc_int_t rval;
- int rtype;
- int result;
-
- result = preproc_evaluate_unary(info, tokens, val, is_unsigned);
- while ((result & VTK_PARSE_FATAL_ERROR) == 0)
- {
- op = tokens->tok;
- if (op != '*' && op != '/' && op != '%')
- {
- return result;
- }
-
- preproc_next(tokens);
-
- result = preproc_evaluate_unary(info, tokens, &rval, &rtype);
-
- *is_unsigned = (*is_unsigned || rtype);
-
- if (*is_unsigned)
- {
- if (op == '*')
- {
- *val = (preproc_int_t)((preproc_uint_t)*val *
- (preproc_uint_t)rval);
- }
- else if (op == '/')
- {
- if (rval != 0)
- {
- *val = (preproc_int_t)((preproc_uint_t)*val /
- (preproc_uint_t)rval);
- }
- else
- {
- *val = 2147483647;
- }
- }
- else if (op == '%')
- {
- if (rval != 0)
- {
- *val = (preproc_int_t)((preproc_uint_t)*val %
- (preproc_uint_t)rval);
- }
- else
- {
- *val = 2147483647;
- }
- }
- }
- else
- {
- if (op == '*')
- {
- *val = *val * rval;
- }
- else if (op == '/')
- {
- if (rval != 0)
- {
- *val = *val / rval;
- }
- else if (*val < 0)
- {
- *val = -2147483647;
- }
- else
- {
- *val = 2147483647;
- }
- }
- else if (op == '%')
- {
- if (rval != 0)
- {
- *val = *val % rval;
- }
- else if (*val < 0)
- {
- *val = -2147483647;
- }
- else
- {
- *val = 2147483647;
- }
- }
- }
- }
-
- return result;
-}
-
-static int preproc_evaluate_add(
- PreprocessInfo *info, preproc_tokenizer *tokens,
- preproc_int_t *val, int *is_unsigned)
-{
- int op;
- preproc_int_t rval;
- int rtype;
- int result;
-
- result = preproc_evaluate_multiply(info, tokens, val, is_unsigned);
- while ((result & VTK_PARSE_FATAL_ERROR) == 0)
- {
- op = tokens->tok;
- if (op != '+' && op != '-')
- {
- return result;
- }
-
- preproc_next(tokens);
-
- result = preproc_evaluate_multiply(info, tokens, &rval, &rtype);
-
- *is_unsigned = (*is_unsigned || rtype);
-
- if (op == '+')
- {
- *val = *val + rval;
- }
- else if (op == '-')
- {
- *val = *val - rval;
- }
- }
-
- return result;
-}
-
-static int preproc_evaluate_bitshift(
- PreprocessInfo *info, preproc_tokenizer *tokens,
- preproc_int_t *val, int *is_unsigned)
-{
- int op;
- preproc_int_t rval;
- int rtype;
- int result;
-
- result = preproc_evaluate_add(info, tokens, val, is_unsigned);
- while ((result & VTK_PARSE_FATAL_ERROR) == 0)
- {
- op = tokens->tok;
-
- if (op != TOK_LSHIFT && op != TOK_RSHIFT)
- {
- return result;
- }
-
- preproc_next(tokens);
-
- result = preproc_evaluate_add(info, tokens, &rval, &rtype);
-
- if (*is_unsigned)
- {
- if (op == TOK_LSHIFT)
- {
- *val = (preproc_int_t)((preproc_uint_t)*val << rval);
- }
- else if (op == TOK_RSHIFT)
- {
- *val = (preproc_int_t)((preproc_uint_t)*val >> rval);
- }
- }
- else
- {
- if (op == TOK_LSHIFT)
- {
- *val = *val << rval;
- }
- else if (op == TOK_RSHIFT)
- {
- *val = *val >> rval;
- }
- }
- }
-
- return result;
-}
-
-static int preproc_evaluate_compare(
- PreprocessInfo *info, preproc_tokenizer *tokens,
- preproc_int_t *val, int *is_unsigned)
-{
- int op;
- preproc_int_t rval;
- int rtype;
- int result;
-
- result = preproc_evaluate_bitshift(info, tokens, val, is_unsigned);
- while ((result & VTK_PARSE_FATAL_ERROR) == 0)
- {
- op = tokens->tok;
- if (op != '<' && op != '>' && op != TOK_LE && op != TOK_GE)
- {
- return result;
- }
-
- preproc_next(tokens);
-
- result = preproc_evaluate_bitshift(info, tokens, &rval, &rtype);
-
- *is_unsigned = (*is_unsigned || rtype);
-
- if (*is_unsigned)
- {
- if (op == TOK_LE)
- {
- *val = ((preproc_uint_t)*val <= (preproc_uint_t)rval);
- }
- else if (op == '<')
- {
- *val = ((preproc_uint_t)*val < (preproc_uint_t)rval);
- }
- else if (op == TOK_GE)
- {
- *val = ((preproc_uint_t)*val >= (preproc_uint_t)rval);
- }
- else if (op == '>')
- {
- *val = ((preproc_uint_t)*val > (preproc_uint_t)rval);
- }
- }
- else
- {
- if (op == TOK_LE)
- {
- *val = (*val <= rval);
- }
- else if (op == '<')
- {
- *val = (*val < rval);
- }
- else if (op == TOK_GE)
- {
- *val = (*val >= rval);
- }
- else if (op == '>')
- {
- *val = (*val > rval);
- }
- }
- *is_unsigned = 0;
- }
-
- return result;
-}
-
-static int preproc_evaluate_equal(
- PreprocessInfo *info, preproc_tokenizer *tokens,
- preproc_int_t *val, int *is_unsigned)
-{
- int op;
- preproc_int_t rval;
- int rtype;
- int result;
-
- result = preproc_evaluate_compare(info, tokens, val, is_unsigned);
- while ((result & VTK_PARSE_FATAL_ERROR) == 0)
- {
- op = tokens->tok;
- if (op != TOK_EQ && op != TOK_NE)
- {
- return result;
- }
-
- preproc_next(tokens);
-
- result = preproc_evaluate_compare(info, tokens, &rval, &rtype);
-
- if (op == TOK_EQ)
- {
- *val = (*val == rval);
- }
- else if (op == TOK_NE)
- {
- *val = (*val != rval);
- }
- *is_unsigned = 0;
- }
-
- return result;
-}
-
-static int preproc_evaluate_and(
- PreprocessInfo *info, preproc_tokenizer *tokens,
- preproc_int_t *val, int *is_unsigned)
-{
- preproc_int_t rval;
- int rtype;
- int result;
-
- result = preproc_evaluate_equal(info, tokens, val, is_unsigned);
- while ((result & VTK_PARSE_FATAL_ERROR) == 0)
- {
- if (tokens->tok != '&')
- {
- return result;
- }
-
- preproc_next(tokens);
-
- result = preproc_evaluate_equal(info, tokens, &rval, &rtype);
-
- *is_unsigned = (*is_unsigned || rtype);
- *val = (*val & rval);
- }
-
- return result;
-}
-
-static int preproc_evaluate_xor(
- PreprocessInfo *info, preproc_tokenizer *tokens,
- preproc_int_t *val, int *is_unsigned)
-{
- preproc_int_t rval;
- int rtype;
- int result;
-
- result = preproc_evaluate_and(info, tokens, val, is_unsigned);
- while ((result & VTK_PARSE_FATAL_ERROR) == 0)
- {
- if (tokens->tok != '^')
- {
- return result;
- }
-
- preproc_next(tokens);
-
- result = preproc_evaluate_and(info, tokens, &rval, &rtype);
-
- *is_unsigned = (*is_unsigned || rtype);
- *val = (*val ^ rval);
- }
-
- return result;
-}
-
-static int preproc_evaluate_or(
- PreprocessInfo *info, preproc_tokenizer *tokens,
- preproc_int_t *val, int *is_unsigned)
-{
- preproc_int_t rval;
- int rtype;
- int result;
-
- result = preproc_evaluate_xor(info, tokens, val, is_unsigned);
- while ((result & VTK_PARSE_FATAL_ERROR) == 0)
- {
- if (tokens->tok != '|')
- {
- return result;
- }
-
- preproc_next(tokens);
-
- result = preproc_evaluate_xor(info, tokens, &rval, &rtype);
-
- *is_unsigned = (*is_unsigned || rtype);
- *val = (*val | rval);
- }
-
- return result;
-}
-
-static int preproc_evaluate_logic_and(
- PreprocessInfo *info, preproc_tokenizer *tokens,
- preproc_int_t *val, int *is_unsigned)
-{
- preproc_int_t rval;
- int rtype;
- int result;
-
- result = preproc_evaluate_or(info, tokens, val, is_unsigned);
- while ((result & VTK_PARSE_FATAL_ERROR) == 0)
- {
- if (tokens->tok != TOK_AND)
- {
- return result;
- }
-
- preproc_next(tokens);
-
- if (*val == 0)
- {
- /* short circuit */
- while (tokens->tok != 0 && tokens->tok != ')' &&
- tokens->tok != ':' && tokens->tok != '?' &&
- tokens->tok != ',' && tokens->tok != TOK_OR)
- {
- if (tokens->tok == '(')
- {
- if (preproc_skip_parentheses(tokens) != VTK_PARSE_OK)
- {
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- result = VTK_PARSE_SYNTAX_ERROR;
- }
- }
- else
- {
- preproc_next(tokens);
- }
- }
-
- *is_unsigned = 0;
-
- return result;
- }
-
- result = preproc_evaluate_or(info, tokens, &rval, &rtype);
-
- *is_unsigned = 0;
- *val = (rval != 0);
- }
-
- return result;
-}
-
-static int preproc_evaluate_logic_or(
- PreprocessInfo *info, preproc_tokenizer *tokens,
- preproc_int_t *val, int *is_unsigned)
-{
- preproc_int_t rval;
- int rtype;
- int result;
-
- result = preproc_evaluate_logic_and(info, tokens, val, is_unsigned);
- while ((result & VTK_PARSE_FATAL_ERROR) == 0)
- {
- if (tokens->tok != TOK_OR)
- {
- return result;
- }
-
- preproc_next(tokens);
-
- if (*val != 0)
- {
- /* short circuit */
- while (tokens->tok != 0 && tokens->tok != ')' &&
- tokens->tok != ':' && tokens->tok != '?' &&
- tokens->tok != ',')
- {
- if (tokens->tok == '(')
- {
- if (preproc_skip_parentheses(tokens) != VTK_PARSE_OK)
- {
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- result = VTK_PARSE_SYNTAX_ERROR;
- }
- }
- else
- {
- preproc_next(tokens);
- }
- }
-
- *is_unsigned = 0;
-
- return result;
- }
-
- result = preproc_evaluate_logic_and(info, tokens, &rval, &rtype);
-
- *is_unsigned = 0;
- *val = (rval != 0);
- }
-
- return result;
-}
-
-/** Evaluate an arimetic *expression. */
-int preproc_evaluate_expression(
- PreprocessInfo *info, preproc_tokenizer *tokens,
- preproc_int_t *val, int *is_unsigned)
-{
- preproc_int_t rval, sval;
- int rtype, stype;
- int result;
-
- result = preproc_evaluate_logic_or(info, tokens, val, is_unsigned);
- if ((result & VTK_PARSE_FATAL_ERROR) == 0)
- {
- if (tokens->tok != '?')
- {
- return result;
- }
-
- preproc_next(tokens);
-
- result = preproc_evaluate_expression(info, tokens, &rval, &rtype);
- if ((result & VTK_PARSE_FATAL_ERROR) != 0)
- {
- return result;
- }
-
- if (tokens->tok != ':')
- {
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- return VTK_PARSE_SYNTAX_ERROR;
- }
-
- preproc_next(tokens);
-
- result = preproc_evaluate_expression(info, tokens, &sval, &stype);
- if ((result & VTK_PARSE_FATAL_ERROR) != 0)
- {
- return result;
- }
-
- if (*val != 0)
- {
- *val = rval;
- *is_unsigned = rtype;
- }
- else
- {
- *val = sval;
- *is_unsigned = stype;
- }
- }
-
- return result;
-}
-
-/** Evaluate a conditional *expression.
- * Returns VTK_PARSE_OK if the expression is true,
- * or VTK_PARSE_SKIP of the expression is false. */
-int preproc_evaluate_conditional(
- PreprocessInfo *info, preproc_tokenizer *tokens)
-{
- preproc_int_t rval;
- int rtype;
- int result;
-
- result = preproc_evaluate_expression(info, tokens, &rval, &rtype);
- if ((result & VTK_PARSE_FATAL_ERROR) == 0)
- {
- if (tokens->tok != 0)
- {
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- return VTK_PARSE_SYNTAX_ERROR;
- }
- return (rval == 0 ? VTK_PARSE_SKIP : VTK_PARSE_OK);
- }
-
- return result;
-}
-
-/**
- * Handle any of the following directives:
- * #if, #ifdef, #ifndef, #elif, #else, #endif
- * A return value of VTK_PARSE_SKIP means that
- * the following code block should be skipped.
- */
-static int preproc_evaluate_if(
- PreprocessInfo *info, preproc_tokenizer *tokens)
-{
- MacroInfo *macro;
- int v1, v2;
- int result = VTK_PARSE_OK;
-
- if (tokens->hash == HASH_IF ||
- tokens->hash == HASH_IFDEF ||
- tokens->hash == HASH_IFNDEF)
- {
- if (info->ConditionalDepth == 0)
- {
- if (tokens->hash == HASH_IF)
- {
- preproc_next(tokens);
- result = preproc_evaluate_conditional(info, tokens);
- }
- else
- {
- v1 = (tokens->hash != HASH_IFNDEF);
- preproc_next(tokens);
- if (tokens->tok != TOK_ID)
- {
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- return VTK_PARSE_SYNTAX_ERROR;
- }
- macro = preproc_find_macro(info, tokens);
- v2 = (macro && !macro->IsExcluded);
- preproc_next(tokens);
- result = ( (v1 ^ v2) ? VTK_PARSE_SKIP : VTK_PARSE_OK);
- }
-
- if (result != VTK_PARSE_SKIP)
- {
- /* mark as done, so that the "else" clause is skipped */
- info->ConditionalDone = 1;
- }
- else
- {
- /* mark as not done, so that "else" clause is not skipped */
- info->ConditionalDone = 0;
- /* skip the "if" clause */
- info->ConditionalDepth = 1;
- }
- }
- else
- {
- /* increase the skip depth */
- info->ConditionalDepth++;
- }
- }
- else if (tokens->hash == HASH_ELIF ||
- tokens->hash == HASH_ELSE)
- {
- if (info->ConditionalDepth == 0)
- {
- /* preceding clause was not skipped, so must skip this one */
- info->ConditionalDepth = 1;
- }
- else if (info->ConditionalDepth == 1 &&
- info->ConditionalDone == 0)
- {
- if (tokens->hash == HASH_ELIF)
- {
- preproc_next(tokens);
- result = preproc_evaluate_conditional(info, tokens);
- }
- else
- {
- preproc_next(tokens);
- }
- if (result != VTK_PARSE_SKIP)
- {
- /* do not skip this clause */
- info->ConditionalDepth = 0;
- /* make sure remaining else/elif clauses are skipped */
- info->ConditionalDone = 1;
- }
- }
- }
- else if (tokens->hash == HASH_ENDIF)
- {
- preproc_next(tokens);
- if (info->ConditionalDepth > 0)
- {
- /* decrease the skip depth */
- info->ConditionalDepth--;
- }
- if (info->ConditionalDepth == 0)
- {
- /* set "done" flag for the context that is being returned to */
- info->ConditionalDone = 1;
- }
- }
-
- return result;
-}
-
-/**
- * Handle the #define and #undef directives.
- */
-static int preproc_evaluate_define(
- PreprocessInfo *info, preproc_tokenizer *tokens)
-{
- MacroInfo **macro_p;
- MacroInfo *macro;
- int is_function;
- const char *name;
- size_t namelen;
- const char *definition = 0;
- int n = 0;
- const char **params = NULL;
-
- if (tokens->hash == HASH_DEFINE)
- {
- preproc_next(tokens);
- if (tokens->tok != TOK_ID)
- {
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- return VTK_PARSE_SYNTAX_ERROR;
- }
-
- macro_p = preproc_macro_location(info, tokens, 1);
- name = tokens->text;
- namelen = tokens->len;
- preproc_next(tokens);
-
- is_function = 0;
- if (name[namelen] == '(')
- {
- is_function = 1;
- preproc_next(tokens);
- while (tokens->tok != 0 && tokens->tok != ')')
- {
- if (tokens->tok != TOK_ID && tokens->tok != TOK_ELLIPSIS)
- {
- if (params) { free((char **)params); }
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- return VTK_PARSE_SYNTAX_ERROR;
- }
-
- /* add to the arg list */
- params = (const char **)preproc_array_check(
- (char **)params, sizeof(char *), n);
- params[n++] = preproc_strndup(tokens->text, tokens->len);
-
- preproc_next(tokens);
- if (tokens->tok == ',')
- {
- preproc_next(tokens);
- }
- else if (tokens->tok != ')')
- {
- if (params) { free((char **)params); }
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- return VTK_PARSE_SYNTAX_ERROR;
- }
- }
- preproc_next(tokens);
- }
-
- if (tokens->tok)
- {
- definition = tokens->text;
- }
-
- macro = *macro_p;
- if (macro)
- {
- if (preproc_identical(macro->Definition, definition))
- {
- return VTK_PARSE_OK;
- }
- if (params) { free((char **)params); }
-#if PREPROC_DEBUG
- fprintf(stderr, "macro redefined %d\n", __LINE__);
-#endif
- return VTK_PARSE_MACRO_REDEFINED;
- }
-
- macro = preproc_new_macro(info, name, definition);
- macro->IsFunction = is_function;
- macro->NumberOfParameters = n;
- macro->Parameters = params;
- *macro_p = macro;
-
- return VTK_PARSE_OK;
- }
- else if (tokens->hash == HASH_UNDEF)
- {
- preproc_next(tokens);
- if (tokens->tok != TOK_ID)
- {
-#if PREPROC_DEBUG
- fprintf(stderr, "syntax error %d\n", __LINE__);
-#endif
- return VTK_PARSE_SYNTAX_ERROR;
- }
- preproc_remove_macro(info, tokens);
- return VTK_PARSE_OK;
- }
-
- return VTK_PARSE_OK;
-}
-
-/**
- * Add an include file to the list. Return 0 if it is already there.
- */
-static int preproc_add_include_file(PreprocessInfo *info, const char *name)
-{
- int i, n;
- char *dp;
-
- n = info->NumberOfIncludeFiles;
- for (i = 0; i < n; i++)
- {
- if (strcmp(info->IncludeFiles[i], name) == 0)
- {
- return 0;
- }
- }
-
- dp = (char *)malloc(strlen(name)+1);
- strcpy(dp, name);
-
- info->IncludeFiles = (const char **)preproc_array_check(
- (char **)info->IncludeFiles, sizeof(char *), info->NumberOfIncludeFiles);
- info->IncludeFiles[info->NumberOfIncludeFiles++] = dp;
-
- return 1;
-}
-
-/**
- * Find an include file. If "cache_only" is set, then do a check to
- * see if the file was previously found without going to the filesystem.
- */
-const char *preproc_find_include_file(
- PreprocessInfo *info, const char *filename, int system_first,
- int cache_only)
-{
- int i, n, ii, nn;
- size_t j, m;
- struct stat fs;
- const char *directory;
- char *output;
- size_t outputsize = 16;
- int count;
-
- /* allow filename to be terminated by quote or bracket */
- m = 0;
- while (filename[m] != '\"' && filename[m] != '>' &&
- filename[m] != '\n' && filename[m] != '\0') { m++; }
-
- /* search file system for the file */
- output = (char *)malloc(outputsize);
-
- if (system_first != 0)
- {
- system_first = 1;
- }
-
- if (cache_only != 0)
- {
- cache_only = 1;
- }
-
- /* check for absolute path of form DRIVE: or /path/to/file */
- j = 0;
- while (preproc_chartype(filename[j], CPRE_IDGIT)) { j++; }
-
- if (filename[j] == ':' || filename[0] == '/' || filename[0] == '\\')
- {
- if (m+1 > outputsize)
- {
- outputsize += m+1;
- output = (char *)realloc(output, outputsize);
- }
- strncpy(output, filename, m);
- output[m] = '\0';
-
- nn = info->NumberOfIncludeFiles;
- for (ii = 0; ii < nn; ii++)
- {
- if (strcmp(output, info->IncludeFiles[ii]) == 0)
- {
- free(output);
- return info->IncludeFiles[ii];
- }
- }
-
- if (cache_only)
- {
- free(output);
- return NULL;
- }
-
- info->IncludeFiles = (const char **)preproc_array_check(
- (char **)info->IncludeFiles, sizeof(char *),
- info->NumberOfIncludeFiles);
- info->IncludeFiles[info->NumberOfIncludeFiles++] = output;
-
- return output;
- }
-
- /* Make sure the current filename is already added */
- if (info->FileName)
- {
- preproc_add_include_file(info, info->FileName);
- }
-
- /* Check twice. First check the cache, then stat the files. */
- for (count = 0; count < (2-cache_only); count++)
- {
- n = info->NumberOfIncludeDirectories;
- for (i = 0; i < (n+1-system_first); i++)
- {
- /* search the directory of the file being processed */
- if (i == 0 && system_first == 0)
- {
- if (info->FileName)
- {
- j = strlen(info->FileName);
- while (j > 0)
- {
- if (info->FileName[j-1] == '/') { break; }
- j--;
- }
- if (m+j+1 > outputsize)
- {
- outputsize += m+j+1;
- output = (char *)realloc(output, outputsize);
- }
- if (j > 0)
- {
- strncpy(output, info->FileName, j);
- }
- strncpy(&output[j], filename, m);
- output[j+m] = '\0';
- }
- else
- {
- if (m+1 > outputsize)
- {
- outputsize += m+1;
- output = (char *)realloc(output, outputsize);
- }
- strncpy(output, filename, m);
- output[m] = '\0';
- }
- }
- /* check all the search paths */
- else
- {
- directory = info->IncludeDirectories[i-1+system_first];
- j = strlen(directory);
- if (j + m + 2 > outputsize)
- {
- outputsize += j+m+2;
- output = (char *)realloc(output, outputsize);
- }
-
- strncpy(output, directory, j);
- if (directory[j-1] != '/') { output[j++] = '/'; }
- strncpy(&output[j], filename, m);
- output[j+m] = '\0';
- }
-
- if (count == 0)
- {
- nn = info->NumberOfIncludeFiles;
- for (ii = 0; ii < nn; ii++)
- {
- if (strcmp(output, info->IncludeFiles[ii]) == 0)
- {
- free(output);
- return info->IncludeFiles[ii];
- }
- }
- }
- else if (stat(output, &fs) == 0)
- {
- info->IncludeFiles = (const char **)preproc_array_check(
- (char **)info->IncludeFiles, sizeof(char *),
- info->NumberOfIncludeFiles);
- info->IncludeFiles[info->NumberOfIncludeFiles++] = output;
-
- return output;
- }
- }
- }
-
- free(output);
- return NULL;
-}
-
-/**
- * Include a file. All macros defined in the included file
- * will have their IsExternal flag set.
- */
-static int preproc_include_file(
- PreprocessInfo *info, const char *filename, int system_first)
-{
- char *tbuf;
- size_t tbuflen = FILE_BUFFER_SIZE;
- char *line;
- size_t linelen = 80;
- size_t i, j, n, r;
- int in_comment = 0;
- int in_quote = 0;
- int result = VTK_PARSE_OK;
- FILE *fp = NULL;
- const char *path = NULL;
- const char *save_filename;
- int save_external;
-
- /* check to see if the file has aleady been included */
- path = preproc_find_include_file(info, filename, system_first, 1);
- if (path != 0)
- {
-#if PREPROC_DEBUG
- int k = 0;
- while (filename[k] != '>' && filename[k] != '\"' &&
- filename[k] != '\n' && filename[k] != '\0') { k++; }
- if (filename[k] == '>')
- fprintf(stderr, "already loaded file <%*.*s>\n", k, k, filename);
- else
- fprintf(stderr, "already loaded file \"%*.*s\"\n", k, k, filename);
-#endif
-
- return VTK_PARSE_OK;
- }
- /* go to the filesystem */
- path = preproc_find_include_file(info, filename, system_first, 0);
- if (path == NULL)
- {
-#if PREPROC_DEBUG
- int k = 0;
- while (filename[k] != '>' && filename[k] != '\"' &&
- filename[k] != '\n' && filename[k] != '\0') { k++; }
- if (filename[k] == '>')
- fprintf(stderr, "couldn't find file <%*.*s>\n", k, k, filename);
- else
- fprintf(stderr, "couldn't find file \"%*.*s\"\n", k, k, filename);
-#endif
- return VTK_PARSE_FILE_NOT_FOUND;
- }
-
-#if PREPROC_DEBUG
- fprintf(stderr, "including file %s\n", path);
-#endif
- fp = fopen(path, "r");
-
- if (fp == NULL)
- {
-#if PREPROC_DEBUG
- fprintf(stderr, "couldn't open file %s\n", path);
-#endif
- return VTK_PARSE_FILE_OPEN_ERROR;
- }
-
- save_external = info->IsExternal;
- save_filename = info->FileName;
- info->IsExternal = 1;
- info->FileName = path;
-
- tbuf = (char *)malloc(tbuflen+4);
- line = (char *)malloc(linelen);
-
- /* the buffer must hold a whole line for it to be processed */
- j = 0;
- i = 0;
- n = 0;
- r = 0;
-
- do
- {
- if (i >= n)
- {
- /* recycle unused lookahead chars */
- if (r)
- {
- r = n + 2 - i;
- if (r == 2)
- {
- tbuf[0] = tbuf[tbuflen-2];
- tbuf[1] = tbuf[tbuflen-1];
- }
- else if (r == 1)
- {
- tbuf[0] = tbuf[tbuflen-1];
- }
- }
-
- /* read the next chunk of the file */
- i = 0;
- if (feof(fp))
- {
- /* still have the lookahead chars left */
- n = r;
- r = 0;
- }
- else
- {
- /* fill the remainder of the buffer */
- errno = 0;
- tbuflen = r + FILE_BUFFER_SIZE;
- while ((n = fread(&tbuf[r], 1, tbuflen-r, fp)) == 0 && ferror(fp))
- {
- if (errno != EINTR)
- {
- fclose(fp);
- free(tbuf);
- free(line);
- info->IsExternal = save_external;
- return VTK_PARSE_FILE_READ_ERROR;
- }
- errno = 0;
- clearerr(fp);
- }
-
- if (n + r < tbuflen)
- {
- /* this only occurs if the final fread does not fill the buffer */
- n += r;
- r = 0;
- }
- else
- {
- /* set a lookahead reserve of two chars */
- n -= (2 - r);
- r = 2;
- }
-
- /* guard against lookahead past last char in file */
- tbuf[n + r] = '\0';
- }
- }
-
- /* copy the characters until end of line is found */
- while (i < n)
- {
- /* expand line buffer as necessary */
- while (j+4 > linelen)
- {
- linelen *= 2;
- line = (char *)realloc(line, linelen);
- }
-
- if (in_comment)
- {
- if (tbuf[i] == '*' && tbuf[i+1] == '/')
- {
- line[j++] = tbuf[i++];
- line[j++] = tbuf[i++];
- in_comment = 0;
- }
- else
- {
- line[j++] = tbuf[i++];
- }
- }
- else if (in_quote)
- {
- if (tbuf[i] == '\"')
- {
- line[j++] = tbuf[i++];
- in_quote = 0;
- }
- else if (tbuf[i] == '\\' && tbuf[i+1] != '\0')
- {
- line[j++] = tbuf[i++];
- line[j++] = tbuf[i++];
- }
- else
- {
- line[j++] = tbuf[i++];
- }
- }
- else if (tbuf[i] == '/' && tbuf[i+1] == '*')
- {
- line[j++] = tbuf[i++];
- line[j++] = tbuf[i++];
- in_comment = 1;
- }
- else if (tbuf[i] == '\"')
- {
- line[j++] = tbuf[i++];
- in_quote = 1;
- }
- else if (tbuf[i] == '\\' && tbuf[i+1] == '\n')
- {
- line[j++] = tbuf[i++];
- line[j++] = tbuf[i++];
- }
- else if (tbuf[i] == '\\' && tbuf[i+1] == '\r' && tbuf[i+2] == '\n')
- {
- line[j++] = tbuf[i++];
- line[j++] = tbuf[i++];
- line[j++] = tbuf[i++];
- }
- else if (tbuf[i] != '\n' && tbuf[i] != '\0')
- {
- line[j++] = tbuf[i++];
- }
- else
- {
- line[j++] = tbuf[i++];
- break;
- }
- }
-
- if (i < n || n == 0)
- {
- const char *cp = line;
- line[j] = '\0';
- j = 0;
- preproc_skip_whitespace(&cp, WS_NO_EOL);
- if (*cp == '#')
- {
- vtkParsePreprocess_HandleDirective(info, line);
- }
- }
- }
- while (n > 0);
-
- free(tbuf);
- free(line);
- fclose(fp);
-
- info->IsExternal = save_external;
- info->FileName = save_filename;
-
- return result;
-}
-
-/**
- * Handle the #include directive. The header file will
- * only go through the preprocessor.
- */
-static int preproc_evaluate_include(
- PreprocessInfo *info, preproc_tokenizer *tokens)
-{
- const char *cp;
- const char *filename;
-
- if (tokens->hash == HASH_INCLUDE)
- {
- preproc_next(tokens);
-
- cp = tokens->text;
-
- if (tokens->tok == TOK_ID)
- {
- MacroInfo *macro = preproc_find_macro(info, tokens);
- if (macro && !macro->IsExcluded && macro->Definition)
- {
- cp = macro->Definition;
- }
- else
- {
-#if PREPROC_DEBUG
- fprintf(stderr, "couldn't find macro %*.*s.\n",
- (int)tokens->len, (int)tokens->len, tokens->text);
-#endif
- return VTK_PARSE_MACRO_UNDEFINED;
- }
- }
-
- if (*cp == '\"')
- {
- filename = cp + 1;
- preproc_skip_quotes(&cp);
- if (cp <= filename + 1 || *(cp-1) != '\"')
- {
- return VTK_PARSE_SYNTAX_ERROR;
- }
-
- return preproc_include_file(info, filename, 0);
- }
- else if (*cp == '<')
- {
- cp++;
- filename = cp;
- while (*cp != '>' && *cp != '\n' && *cp != '\0') { cp++; }
- if (*cp != '>')
- {
- return VTK_PARSE_SYNTAX_ERROR;
- }
-
- return preproc_include_file(info, filename, 1);
- }
- }
-
- return VTK_PARSE_OK;
-}
-
-/**
- * Handle any recognized directive.
- * Unrecognized directives are ignored.
- */
-int vtkParsePreprocess_HandleDirective(
- PreprocessInfo *info, const char *directive)
-{
- int result = VTK_PARSE_OK;
- preproc_tokenizer tokens;
-
- preproc_init(&tokens, directive);
-
- if (tokens.tok != '#')
- {
- return VTK_PARSE_SYNTAX_ERROR;
- }
-
- preproc_next(&tokens);
-
- if (tokens.tok == TOK_ID)
- {
- if ((tokens.hash == HASH_IFDEF && tokens.len == 5 &&
- strncmp("ifdef", tokens.text, tokens.len) == 0) ||
- (tokens.hash == HASH_IFNDEF && tokens.len == 6 &&
- strncmp("ifndef", tokens.text, tokens.len) == 0) ||
- (tokens.hash == HASH_IF && tokens.len == 2 &&
- strncmp("if", tokens.text, tokens.len) == 0) ||
- (tokens.hash == HASH_ELIF && tokens.len == 4 &&
- strncmp("elif", tokens.text, tokens.len) == 0) ||
- (tokens.hash == HASH_ELSE && tokens.len == 4 &&
- strncmp("else", tokens.text, tokens.len) == 0) ||
- (tokens.hash == HASH_ENDIF && tokens.len == 5 &&
- strncmp("endif", tokens.text, tokens.len) == 0))
- {
- result = preproc_evaluate_if(info, &tokens);
- while (tokens.tok) { preproc_next(&tokens); }
-#if PREPROC_DEBUG
- {
- size_t n = tokens.text - directive;
-
- if (result == VTK_PARSE_SKIP)
- {
- fprintf(stderr, "SKIP: ");
- }
- else if (result == VTK_PARSE_OK)
- {
- fprintf(stderr, "READ: ");
- }
- else
- {
- fprintf(stderr, "ERR%-2.2d ", result);
- }
- fprintf(stderr, "%*.*s\n", (int)n, (int)n, directive);
- }
-#endif
- }
- else if (info->ConditionalDepth == 0)
- {
- if ((tokens.hash == HASH_DEFINE && tokens.len == 6 &&
- strncmp("define", tokens.text, tokens.len) == 0) ||
- (tokens.hash == HASH_UNDEF && tokens.len == 5 &&
- strncmp("undef", tokens.text, tokens.len) == 0))
- {
- result = preproc_evaluate_define(info, &tokens);
- }
- else if (tokens.hash == HASH_INCLUDE && tokens.len == 7 &&
- strncmp("include", tokens.text, tokens.len) == 0)
- {
- result = preproc_evaluate_include(info, &tokens);
- }
- }
- }
-
- if (info->ConditionalDepth > 0)
- {
- return VTK_PARSE_SKIP;
- }
-
- return result;
-}
-
-/**
- * Evaluate a preprocessor expression.
- * If no errors occurred, the result will be VTK_PARSE_OK.
- */
-int vtkParsePreprocess_EvaluateExpression(
- PreprocessInfo *info, const char *text,
- preproc_int_t *val, int *is_unsigned)
-{
- preproc_tokenizer tokens;
- preproc_init(&tokens, text);
-
- return preproc_evaluate_expression(info, &tokens, val, is_unsigned);
-}
-
-/** Add a macro for defining a macro */
-#define PREPROC_MACRO_TO_STRING2(x) #x
-#define PREPROC_MACRO_TO_STRING(x) PREPROC_MACRO_TO_STRING2(x)
-#define PREPROC_ADD_MACRO(info, x) \
-preproc_add_macro_definition(info, #x, PREPROC_MACRO_TO_STRING2(x))
-
-/**
- * Add all standard preprocessory macros. Specify the platform.
- */
-void vtkParsePreprocess_AddStandardMacros(
- PreprocessInfo *info, int platform)
-{
- int save_external = info->IsExternal;
- info->IsExternal = 1;
-
- /* a special macro to indicate that this is the wrapper */
- preproc_add_macro_definition(info, "__WRAP__", "1");
-
- /* language macros - assume that we are wrapping C++ code */
- preproc_add_macro_definition(info, "__cplusplus", "1");
-
- /* stdc version macros */
-#ifdef __STDC__
- PREPROC_ADD_MACRO(info, __STDC__);
-#endif
-#ifdef __STDC_VERSION__
- PREPROC_ADD_MACRO(info, __STDC_VERSION__);
-#endif
-#ifdef __STDC_HOSTED__
- PREPROC_ADD_MACRO(info, __STDC_HOSTED__);
-#endif
-
- if (platform == VTK_PARSE_NATIVE)
- {
-#ifdef WIN32
- PREPROC_ADD_MACRO(info, WIN32);
-#endif
-#ifdef _WIN32
- PREPROC_ADD_MACRO(info, _WIN32);
-#endif
-#ifdef _MSC_VER
- PREPROC_ADD_MACRO(info, _MSC_VER);
-#endif
-
-#ifdef __BORLAND__
- PREPROC_ADD_MACRO(info, __BORLAND__);
-#endif
-
-#ifdef __CYGWIN__
- PREPROC_ADD_MACRO(info, __CYGWIN__);
-#endif
-#ifdef MINGW
- PREPROC_ADD_MACRO(info, MINGW);
-#endif
-#ifdef __MINGW32__
- PREPROC_ADD_MACRO(info, __MINGW32__);
-#endif
-
-#ifdef __linux__
- PREPROC_ADD_MACRO(info, __linux__);
-#endif
-#ifdef __LINUX__
- PREPROC_ADD_MACRO(info, __LINUX__);
-#endif
-
-#ifdef __APPLE__
- PREPROC_ADD_MACRO(info, __APPLE__);
-#endif
-#ifdef __MACH__
- PREPROC_ADD_MACRO(info, __MACH__);
-#endif
-#ifdef __DARWIN__
- PREPROC_ADD_MACRO(info, __DARWIN__);
-#endif
-
-#ifdef __GNUC__
- PREPROC_ADD_MACRO(info, __GNUC__);
-#endif
-#ifdef __LP64__
- PREPROC_ADD_MACRO(info, __LP64__);
-#endif
-#ifdef __BIG_ENDIAN__
- PREPROC_ADD_MACRO(info, __BIG_ENDIAN__);
-#endif
-#ifdef __LITTLE_ENDIAN__
- PREPROC_ADD_MACRO(info, __LITTLE_ENDIAN__);
-#endif
- }
-
- info->IsExternal = save_external;
-}
-
-/**
- * Add a preprocessor macro, including a definition.
- */
-int vtkParsePreprocess_AddMacro(
- PreprocessInfo *info, const char *name, const char *definition)
-{
- preproc_tokenizer token;
- MacroInfo **macro_p;
- MacroInfo *macro;
-
- preproc_init(&token, name);
- macro_p = preproc_macro_location(info, &token, 1);
- if (*macro_p)
- {
- macro = *macro_p;
- if (preproc_identical(macro->Definition, definition))
- {
- return VTK_PARSE_OK;
- }
- else
- {
- return VTK_PARSE_MACRO_REDEFINED;
- }
- }
-
- macro = preproc_new_macro(info, name, definition);
- macro->IsExternal = 1;
- *macro_p = macro;
-
- return VTK_PARSE_OK;
-}
-
-/**
- * Return a preprocessor macro struct, or NULL if not found.
- */
-MacroInfo *vtkParsePreprocess_GetMacro(
- PreprocessInfo *info, const char *name)
-{
- preproc_tokenizer token;
- MacroInfo *macro;
-
- preproc_init(&token, name);
- macro = preproc_find_macro(info, &token);
-
- if (macro && !macro->IsExcluded)
- {
- return macro;
- }
-
- return NULL;
-}
-
-/**
- * Remove a preprocessor macro.
- */
-int vtkParsePreprocess_RemoveMacro(
- PreprocessInfo *info, const char *name)
-{
- preproc_tokenizer token;
-
- preproc_init(&token, name);
-
- if (preproc_remove_macro(info, &token))
- {
- return VTK_PARSE_OK;
- }
-
- return VTK_PARSE_MACRO_UNDEFINED;
-}
-
-/**
- * Expand a macro, argstring is ignored if not a function macro
- */
-const char *vtkParsePreprocess_ExpandMacro(
- PreprocessInfo *info, MacroInfo *macro, const char *argstring)
-{
- const char *cp = argstring;
- int n = 0;
- int j = 0;
- const char *stack_values[8];
- const char **values = NULL;
- const char *pp = NULL;
- const char *dp = NULL;
- const char *wp = NULL;
- char stack_rp[128];
- char *rp = NULL;
- size_t rs = 0;
- size_t i = 0;
- size_t l = 0;
- size_t k = 0;
- int stringify = 0;
- int noexpand = 0;
- int depth = 1;
- int c;
-
- if (macro->IsFunction)
- {
- if (argstring == NULL || *cp != '(')
- {
- return NULL;
- }
-
- /* break the string into individual argument values */
- values = stack_values;
-
- cp++;
- values[n++] = cp;
- while (depth > 0 && *cp != '\0')
- {
- while (*cp != '\0')
- {
- if (*cp == '\"' || *cp == '\'')
- {
- preproc_skip_quotes(&cp);
- }
- else if (cp[0] == '/' && (cp[1] == '*' || cp[1] == '/'))
- {
- preproc_skip_comment(&cp);
- }
- else if (*cp == '(')
- {
- cp++;
- depth++;
- }
- else if (*cp == ')')
- {
- cp++;
- if (--depth == 0)
- {
- break;
- }
- }
- else if (*cp == ',')
- {
- cp++;
- if (depth == 1)
- {
- break;
- }
- }
- else if (*cp != '\0')
- {
- cp++;
- }
- }
- if (n >= 8 && (n & (n-1)) == 0)
- {
- if (values != stack_values)
- {
- values = (const char **)realloc(
- (char **)values, 2*n*sizeof(const char **));
- }
- else
- {
- values = (const char **)malloc(2*n*sizeof(const char **));
- memcpy((char **)values, stack_values, 8*sizeof(const char **));
- }
- }
-
- values[n++] = cp;
- }
- --n;
-
- /* diagnostic: print out the values */
-#if PREPROC_DEBUG
- for (j = 0; j < n; j++)
- {
- size_t m = values[j+1] - values[j] - 1;
- fprintf(stderr, "arg %i: %*.*s\n",
- (int)j, (int)m, (int)m, values[j]);
- }
-#endif
-
- if (macro->NumberOfParameters == 0 && n == 1)
- {
- const char *tp = values[0];
- preproc_skip_whitespace(&tp, WS_NO_EOL);
- if (tp + 1 >= values[1])
- {
- n = 0;
- }
- }
-
- if (n != macro->NumberOfParameters)
- {
- if (values != stack_values) { free((char **)values); }
-#if PREPROC_DEBUG
- fprintf(stderr, "wrong number of macro args to %s, %lu != %lu\n",
- macro->Name, n, macro->NumberOfParameters);
-#endif
- return NULL;
- }
- }
-
- cp = macro->Definition;
- cp = (cp ? cp : "");
- dp = cp;
- rp = stack_rp;
- rp[0] = '\0';
- rs = 128;
-
- while (*cp != '\0')
- {
- pp = cp;
- wp = cp;
- stringify = 0;
- noexpand = 0;
- /* skip all chars that aren't part of a name */
- while (!preproc_chartype(*cp, CPRE_ID) && *cp != '\0')
- {
- dp = cp;
- preproc_skip_whitespace(&cp, WS_NO_EOL);
- if (cp > dp)
- {
- dp = cp;
- }
- else if (preproc_chartype(*cp, CPRE_QUOTE))
- {
- preproc_skip_quotes(&cp);
- dp = cp;
- wp = cp;
- noexpand = 0;
- }
- else if (preproc_chartype(*cp, CPRE_DIGIT))
- {
- preproc_skip_number(&cp);
- dp = cp;
- wp = cp;
- noexpand = 0;
- }
- else if (cp[0] == '#' && cp[1] == '#')
- {
- noexpand = 1;
- dp = wp;
- cp += 2;
- wp = cp;
- preproc_skip_whitespace(&cp, WS_NO_EOL);
- break;
- }
- else if (*cp == '#')
- {
- stringify = 1;
- dp = cp;
- wp = cp;
- cp++;
- preproc_skip_whitespace(&cp, WS_NO_EOL);
- break;
- }
- else
- {
- cp++;
- dp = cp;
- wp = cp;
- }
- }
- l = dp - pp;
- if (l > 0)
- {
- if (i + l + 1 >= rs)
- {
- rs += rs + i + l + 1;
- if (rp != stack_rp)
- {
- rp = (char *)realloc(rp, rs);
- }
- else
- {
- rp = (char *)malloc(rs);
- memcpy(rp, stack_rp, i);
- }
- }
- strncpy(&rp[i], pp, l);
- i += l;
- rp[i] = '\0';
- }
-
- /* get the name */
- pp = cp;
- preproc_skip_name(&cp);
- l = cp - pp;
- if (l > 0)
- {
- for (j = 0; j < n; j++)
- {
- /* check whether the name matches a parameter */
- if (strncmp(pp, macro->Parameters[j], l) == 0 &&
- macro->Parameters[j][l] == '\0')
- {
- /* substitute the argument value */
- l = values[j+1] - values[j] - 1;
- pp = values[j];
- /* remove leading whitespace from argument */
- c = *pp;
- while (preproc_chartype(c, CPRE_WHITE))
- {
- c = *(++pp);
- l--;
- }
- /* remove trailing whitespace from argument */
- if (l > 0)
- {
- c = pp[l - 1];
- while (preproc_chartype(c, CPRE_WHITE))
- {
- if (--l == 0)
- {
- break;
- }
- c = pp[l-1];
- }
- }
- /* check if followed by "##" */
- wp = cp;
- preproc_skip_whitespace(&wp, WS_NO_EOL);
- if (wp[0] == '#' && wp[1] == '#')
- {
- noexpand = 1;
- }
- break;
- }
- }
- if (stringify)
- {
- /* compute number of chars that will be added */
- stringify = 2;
- for (k = 0; k < l; k++)
- {
- c = pp[k];
- if (c == '\\' || c == '\"')
- {
- stringify++;
- }
- }
- }
- if (i + l + stringify + 1 >= rs)
- {
- rs += rs + i + l + 1;
- if (rp != stack_rp)
- {
- rp = (char *)realloc(rp, rs);
- }
- else
- {
- rp = (char *)malloc(rs);
- memcpy(rp, stack_rp, i);
- }
- }
- if (stringify)
- {
- rp[i++] = '\"';
- for (k = 0; k < l; k++)
- {
- c = pp[k];
- if (c == '\\' || c == '\"')
- {
- rp[i++] = '\\';
- }
- rp[i++] = c;
- }
- rp[i++] = '\"';
- }
- else if (noexpand)
- {
- strncpy(&rp[i], pp, l);
- i += l;
- }
- else
- {
- /* process the arguments before substituting them */
- const char *text;
- int is_excluded = macro->IsExcluded;
- macro->IsExcluded = 1;
- strncpy(&rp[i], pp, l);
- rp[i + l] = '\0';
- text = vtkParsePreprocess_ProcessString(info, &rp[i]);
- if (text)
- {
- l = strlen(text);
- if (text != &rp[i])
- {
- char *tp = NULL;
- if (i + l + 1 >= rs)
- {
- rs += rs + i + l + 1;
- tp = rp;
- rp = (char *)malloc(rs);
- memcpy(rp, tp, i);
- }
- strncpy(&rp[i], text, l);
- vtkParsePreprocess_FreeProcessedString(info, text);
- if (tp && tp != stack_rp)
- {
- free(tp);
- }
- }
- }
- macro->IsExcluded = is_excluded;
- i += l;
- }
- rp[i] = '\0';
- }
- }
-
- if (values != stack_values) { free((char **)values); }
-
- if (!macro->IsFunction && macro->Definition &&
- strcmp(rp, macro->Definition) == 0)
- {
- if (rp != stack_rp) { free(rp); }
- return macro->Definition;
- }
-
- if (rp == stack_rp)
- {
- rp = (char *)malloc(strlen(stack_rp) + 1);
- strcpy(rp, stack_rp);
- }
-
- return rp;
-}
-
-/**
- * Process a string
- */
-const char *vtkParsePreprocess_ProcessString(
- PreprocessInfo *info, const char *text)
-{
- char stack_rp[128];
- char *rp;
- char *ep;
- size_t i = 0;
- size_t rs = 128;
- int last_tok = 0;
- preproc_tokenizer tokens;
- preproc_init(&tokens, text);
-
- rp = stack_rp;
- rp[0] = '\0';
-
- while (tokens.tok)
- {
- size_t l = tokens.len;
- size_t j;
- const char *cp = tokens.text;
- const char *dp;
-
- if (tokens.tok == TOK_STRING && last_tok == TOK_STRING)
- {
- if (i > 0)
- {
- do { --i; } while (i > 0 && rp[i] != '\"');
- }
- cp++;
- }
-
- if (i + l + 2 >= rs)
- {
- rs += rs + i + l + 2;
- if (rp == stack_rp)
- {
- rp = (char *)malloc(rs);
- memcpy(rp, stack_rp, i);
- }
- else
- {
- rp = (char *)realloc(rp, rs);
- }
- }
-
- /* copy the token, removing backslash-newline */
- dp = cp;
- ep = &rp[i];
- for (j = 0; j < l; j++)
- {
- if (*dp == '\\')
- {
- if (dp[1] == '\n') { dp += 2; }
- else if (dp[1] == '\r' && dp[2] == '\n') { dp += 3; }
- else { *ep++ = *dp++; }
- }
- else
- {
- *ep++ = *dp++;
- }
- }
- l = ep - &rp[i];
-
- if (tokens.tok == TOK_ID)
- {
- MacroInfo *macro = preproc_find_macro(info, &tokens);
- if (macro && !macro->IsExcluded)
- {
- const char *args = NULL;
- int expand = 1;
-
- if (macro->IsFunction)
- {
- /* expand function macros using the arguments */
- preproc_next(&tokens);
- if (tokens.tok == '(')
- {
- int depth = 1;
- args = tokens.text;
- while (depth > 0 && preproc_next(&tokens))
- {
- if (tokens.tok == '(')
- {
- depth++;
- }
- else if (tokens.tok == ')')
- {
- depth--;
- }
- }
- if (tokens.tok != ')')
- {
- if (rp != stack_rp) { free(rp); }
- return NULL;
- }
- }
- else
- {
- /* unput the last token if it isn't "(" */
- tokens.len = l;
- tokens.text = cp;
- expand = 0;
- }
- }
- if (expand)
- {
- const char *expansion;
- const char *processed;
- expansion = vtkParsePreprocess_ExpandMacro(info, macro, args);
- if (expansion == NULL)
- {
- if (rp != stack_rp) { free(rp); }
- return NULL;
- }
- macro->IsExcluded = 1;
- processed = vtkParsePreprocess_ProcessString(info, expansion);
- macro->IsExcluded = 0;
- if (processed == NULL)
- {
- vtkParsePreprocess_FreeMacroExpansion(info, macro, expansion);
- if (rp != stack_rp) { free(rp); }
- return NULL;
- }
- l = strlen(processed);
- if (l > 0)
- {
- if (i + l + 2 >= rs)
- {
- rs += rs + i + l + 2;
- if (rp == stack_rp)
- {
- rp = (char *)malloc(rs);
- memcpy(rp, stack_rp, i);
- }
- else
- {
- rp = (char *)realloc(rp, rs);
- }
- }
- strncpy(&rp[i], processed, l);
- }
- if (processed != expansion)
- {
- vtkParsePreprocess_FreeProcessedString(info, processed);
- }
- vtkParsePreprocess_FreeMacroExpansion(info, macro, expansion);
- }
- }
- }
-
- i += l;
-
- last_tok = tokens.tok;
- l = tokens.len;
- cp = tokens.text;
- if (preproc_next(&tokens) && tokens.text > cp + l)
- {
- rp[i++] = ' ';
- }
- }
- rp[i] = '\0';
-
- if (strcmp(rp, text) == 0)
- {
- /* no change, return */
- if (rp != stack_rp) { free(rp); }
- return text;
- }
- else
- {
- /* string changed, recursively reprocess */
- const char *tp = vtkParsePreprocess_ProcessString(info, rp);
- if (rp != tp)
- {
- if (rp != stack_rp) { free(rp); }
- return tp;
- }
- if (rp == stack_rp)
- {
- rp = (char *)malloc(strlen(stack_rp) + 1);
- strcpy(rp, stack_rp);
- }
- }
-
- return rp;
-}
-
-/**
- * Free a string returned by ExpandMacro
- */
-void vtkParsePreprocess_FreeMacroExpansion(
- PreprocessInfo *info, MacroInfo *macro, const char *text)
-{
- /* only free expansion if it is different from definition */
- if (info && text != macro->Definition)
- {
- free((char *)text);
- }
-}
-
-/**
- * Free a string returned by ProcessString
- */
-void vtkParsePreprocess_FreeProcessedString(
- PreprocessInfo *info, const char *text)
-{
- if (info)
- {
- free((char *)text);
- }
-}
-
-/**
- * Add an include directory.
- */
-void vtkParsePreprocess_IncludeDirectory(
- PreprocessInfo *info, const char *name)
-{
- int i, n;
-
- n = info->NumberOfIncludeDirectories;
- for (i = 0; i < n; i++)
- {
- if (strcmp(name, info->IncludeDirectories[i]) == 0)
- {
- return;
- }
- }
-
- info->IncludeDirectories = (const char **)preproc_array_check(
- (char **)info->IncludeDirectories, sizeof(char *),
- info->NumberOfIncludeDirectories);
- info->IncludeDirectories[info->NumberOfIncludeDirectories++] =
- preproc_strndup(name, strlen(name));
-}
-
-/**
- * Find an include file in the path. If system_first is set,
- * then the current directory is not searched.
- */
-const char *vtkParsePreprocess_FindIncludeFile(
- PreprocessInfo *info, const char *filename, int system_first,
- int *already_loaded)
-{
- const char *cp;
- cp = preproc_find_include_file(info, filename, system_first, 1);
- if (cp)
- {
- *already_loaded = 1;
- return cp;
- }
-
- *already_loaded = 0;
- return preproc_find_include_file(info, filename, system_first, 0);
-}
-
-/**
- * Initialize a preprocessor macro struct
- */
-void vtkParsePreprocess_InitMacro(MacroInfo *macro)
-{
- macro->Name = NULL;
- macro->Definition = NULL;
- macro->Comment = NULL;
- macro->NumberOfParameters = 0;
- macro->Parameters = NULL;
- macro->IsFunction = 0;
- macro->IsExternal = 0;
- macro->IsExcluded = 0;
-}
-
-/**
- * Free a preprocessor macro struct
- */
-void vtkParsePreprocess_FreeMacro(MacroInfo *macro)
-{
- int i, n;
-
- free((char *)macro->Name);
- free((char *)macro->Definition);
- free((char *)macro->Comment);
-
- n = macro->NumberOfParameters;
- for (i = 0; i < n; i++)
- {
- free((char *)macro->Parameters[i]);
- }
- free((char **)macro->Parameters);
-
- free(macro);
-}
-
-/**
- * Initialize a preprocessor struct
- */
-void vtkParsePreprocess_Init(
- PreprocessInfo *info, const char *filename)
-{
- info->FileName = NULL;
- info->MacroHashTable = NULL;
- info->NumberOfIncludeDirectories = 0;
- info->IncludeDirectories = NULL;
- info->NumberOfIncludeFiles = 0;
- info->IncludeFiles = NULL;
- info->IsExternal = 0;
- info->ConditionalDepth = 0;
- info->ConditionalDone = 0;
-
- if (filename)
- {
- info->FileName = preproc_strndup(filename, strlen(filename));
- }
-}
-
-/**
- * Free a preprocessor struct and its contents
- */
-void vtkParsePreprocess_Free(PreprocessInfo *info)
-{
- int i, n;
- MacroInfo **mptr;
-
- free((char *)info->FileName);
-
- if (info->MacroHashTable)
- {
- n = PREPROC_HASH_TABLE_SIZE;
- for (i = 0; i < n; i++)
- {
- mptr = info->MacroHashTable[i];
- if (mptr)
- {
- while (*mptr)
- {
- vtkParsePreprocess_FreeMacro(*mptr++);
- }
- }
- free(info->MacroHashTable[i]);
- }
- free(info->MacroHashTable);
- }
-
- n = info->NumberOfIncludeDirectories;
- for (i = 0; i < n; i++)
- {
- free((char *)info->IncludeDirectories[i]);
- }
- free((char **)info->IncludeDirectories);
-
- n = info->NumberOfIncludeFiles;
- for (i = 0; i < n; i++)
- {
- free((char *)info->IncludeFiles[i]);
- }
- free((char **)info->IncludeFiles);
-
- free(info);
-}
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkParsePreprocess.h
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-/*-------------------------------------------------------------------------
- Copyright (c) 2010 David Gobbi.
-
- Contributed to the VisualizationToolkit by the author in June 2010
- under the terms of the Visualization Toolkit 2008 copyright.
--------------------------------------------------------------------------*/
-
-/**
- This file provides subroutines to assist in preprocessing
- C/C++ header files. It evaluates preprocessor directives
- and stores a list of all preprocessor macros.
-
- The preprocessing is done in-line while the file is being
- parsed. Macros that are defined in the file are stored but
- are not automatically expanded. The parser can query the
- macro definitions, expand them into plain text, or ask the
- preprocessor to evaluate them and return an integer result.
-
- The typical usage of this preprocessor is that the main
- parser will pass any lines that begin with '#' to the
- vtkParsePreprocess_HandleDirective() function, which will
- evaluate the line and provide a return code. The return
- code will tell the main parser if a syntax error or macro
- lookup error occurred, and will also let the parser know
- if an #if or #else directive requires that the next block
- of code be skipped.
-*/
-
-#ifndef VTK_PARSE_PREPROCESS_H
-#define VTK_PARSE_PREPROCESS_H
-
-/**
- * The preprocessor int type. Use the compiler's longest int type.
- */
-#if defined(_WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)
-typedef __int64 preproc_int_t;
-typedef unsigned __int64 preproc_uint_t;
-#else
-typedef long long preproc_int_t;
-typedef unsigned long long preproc_uint_t;
-#endif
-
-/**
- * Struct to describe a preprocessor symbol.
- */
-typedef struct _MacroInfo
-{
- const char *Name;
- const char *Definition;
- const char *Comment; /* unused */
- int NumberOfParameters; /* only if IsFunction == 1 */
- const char **Parameters; /* symbols for parameters */
- int IsFunction; /* this macro requires arguments */
- int IsExternal; /* this macro is from an included file */
- int IsExcluded; /* do not expand this macro */
-} MacroInfo;
-
-/**
- * Contains all symbols defined thus far (including those defined
- * in any included header files).
- */
-typedef struct _PreprocessInfo
-{
- const char *FileName; /* the file that is being parsed */
- MacroInfo ***MacroHashTable; /* hash table for macro lookup */
- int NumberOfIncludeDirectories;
- const char **IncludeDirectories;
- int NumberOfIncludeFiles; /* all included files */
- const char **IncludeFiles;
- int IsExternal; /* label all macros as "external" */
- int ConditionalDepth; /* internal state variable */
- int ConditionalDone; /* internal state variable */
-} PreprocessInfo;
-
-/**
- * Platforms. Always choose native unless crosscompiling.
- */
-enum _preproc_platform_t {
- VTK_PARSE_NATIVE = 0,
-};
-
-/**
- * Directive return values.
- */
-enum _preproc_return_t {
- VTK_PARSE_OK = 0,
- VTK_PARSE_SKIP = 1, /* skip next block */
- VTK_PARSE_PREPROC_DOUBLE = 2, /* encountered a double */
- VTK_PARSE_PREPROC_FLOAT = 3, /* encountered a float */
- VTK_PARSE_PREPROC_STRING = 4, /* encountered a string */
- VTK_PARSE_MACRO_UNDEFINED = 5, /* macro lookup failed */
- VTK_PARSE_MACRO_REDEFINED = 6, /* attempt to redefine a macro */
- VTK_PARSE_FILE_NOT_FOUND = 7, /* include file not found */
- VTK_PARSE_FILE_OPEN_ERROR = 8, /* include file not readable */
- VTK_PARSE_FILE_READ_ERROR = 9, /* error during read */
- VTK_PARSE_MACRO_NUMARGS = 10, /* wrong number of args to func macro */
- VTK_PARSE_SYNTAX_ERROR = 11 /* any and all syntax errors */
-};
-
-/**
- * Bitfield for fatal errors.
- */
-#define VTK_PARSE_FATAL_ERROR 0xF8
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Handle a preprocessor directive. Return value VTK_PARSE_OK
- * means that no errors occurred, while VTK_PARSE_SKIP means that
- * a conditional directive was encountered and the next code
- * block should be skipped. The preprocessor has an internal state
- * machine that keeps track of conditional if/else/endif directives.
- * All other return values indicate errors, and it is up to the
- * parser to decide which errors are fatal. The preprocessor
- * only considers syntax errors and I/O errors to be fatal.
- */
-int vtkParsePreprocess_HandleDirective(
- PreprocessInfo *info, const char *directive);
-
-/**
- * Evaluate a preprocessor expression, providing an integer result
- * in "val", and whether it is unsigned in "is_unsigned". A return
- * value of VTK_PARSE_OK means that no errors occurred, while
- * VTK_PREPROC_DOUBLE, VTK_PREPROC_FLOAT, and VTK_PREPROC_STRING
- * indicate that the preprocessor encountered a non-integer value.
- * Error return values are VTK_PARSE_MACRO_UNDEFINED and
- * VTK_PARSE_SYNTAX_ERRORS. Undefined macros evaluate to zero.
- */
-int vtkParsePreprocess_EvaluateExpression(
- PreprocessInfo *info, const char *text,
- preproc_int_t *val, int *is_unsigned);
-
-/**
- * Add all standard preprocessor symbols. Use VTK_PARSE_NATIVE
- * as the platform. In the future, other platform specifiers
- * might be added to allow crosscompiling.
- */
-void vtkParsePreprocess_AddStandardMacros(
- PreprocessInfo *info, int platform);
-
-/**
- * Add a preprocessor symbol, including a definition. Return
- * values are VTK_PARSE_OK and VTK_PARSE_MACRO_REDEFINED.
- */
-int vtkParsePreprocess_AddMacro(
- PreprocessInfo *info, const char *name, const char *definition);
-
-/**
- * Remove a preprocessor symbol. Return values are VTK_PARSE_OK
- * and VTK_PARSE_MACRO_UNDEFINED.
- */
-int vtkParsePreprocess_RemoveMacro(
- PreprocessInfo *info, const char *name);
-
-/**
- * Return a preprocessor symbol struct, or NULL if not found.
- */
-MacroInfo *vtkParsePreprocess_GetMacro(
- PreprocessInfo *info, const char *name);
-
-/**
- * Expand a macro. A function macro must be given an argstring
- * with args in parentheses, otherwise the argstring can be NULL.
- * returns NULL if the wrong number of arguments were given.
- */
-const char *vtkParsePreprocess_ExpandMacro(
- PreprocessInfo *info, MacroInfo *macro, const char *argstring);
-
-/**
- * Free an expanded macro
- */
-void vtkParsePreprocess_FreeMacroExpansion(
- PreprocessInfo *info, MacroInfo *macro, const char *text);
-
-/**
- * Fully process a string with the preprocessor, and
- * return a new string or NULL if a fatal error occurred.
- */
-const char *vtkParsePreprocess_ProcessString(
- PreprocessInfo *info, const char *text);
-
-/**
- * Free a processed string. Only call this method if
- * the string returned by ProcessString is different from
- * the original string, because ProcessString will just
- * return the original string if no processing was needed.
- */
-void vtkParsePreprocess_FreeProcessedString(
- PreprocessInfo *info, const char *text);
-
-/**
- * Add an include directory. The directories that were added
- * first will be searched first.
- */
-void vtkParsePreprocess_IncludeDirectory(
- PreprocessInfo *info, const char *name);
-
-/**
- * Find an include file in the path. If system_first is set, then
- * the current directory is ignored unless it is explicitly in the
- * path. A null return value indicates that the file was not found.
- * If already_loaded is set, then the file was already loaded. This
- * preprocessor never loads the same file twice.
- */
-const char *vtkParsePreprocess_FindIncludeFile(
- PreprocessInfo *info, const char *filename, int system_first,
- int *already_loaded);
-
-/**
- * Initialize a preprocessor symbol struct.
- */
-void vtkParsePreprocess_InitMacro(MacroInfo *symbol);
-
-/**
- * Free a preprocessor macro struct
- */
-void vtkParsePreprocess_FreeMacro(MacroInfo *macro);
-
-/**
- * Initialize a preprocessor struct.
- */
-void vtkParsePreprocess_Init(
- PreprocessInfo *info, const char *filename);
-
-/**
- * Free a preprocessor struct and its contents;
- */
-void vtkParsePreprocess_Free(PreprocessInfo *info);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkParseString.c
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-/*-------------------------------------------------------------------------
- Copyright (c) 2012 David Gobbi.
-
- Contributed to the VisualizationToolkit by the author in April 2012
- under the terms of the Visualization Toolkit 2008 copyright.
--------------------------------------------------------------------------*/
-
-#include "vtkParseString.h"
-#include <stdlib.h>
-#include <string.h>
-
-/*----------------------------------------------------------------
- * String utility methods
- *
- * Strings are centrally allocated and are const. They should not
- * be freed until the parse is complete and all the data structures
- * generated by the parse have been freed.
- */
-
-/* allocate a string of n+1 bytes */
-void vtkParse_InitStringCache(StringCache *cache)
-{
- cache->NumberOfChunks = 0;
- cache->Chunks = NULL;
- cache->ChunkSize = 0;
- cache->Position = 0;
-}
-
-/* allocate a string of n+1 bytes */
-char *vtkParse_NewString(StringCache *cache, size_t n)
-{
- size_t nextPosition;
- char *cp;
-
- if (cache->ChunkSize == 0)
- {
- cache->ChunkSize = 8176;
- }
-
- // align next start position on an 8-byte boundary
- nextPosition = (((cache->Position + n + 8) | 7 ) - 7);
-
- if (cache->NumberOfChunks == 0 || nextPosition > cache->ChunkSize)
- {
- if (n + 1 > cache->ChunkSize)
- {
- cache->ChunkSize = n + 1;
- }
- cp = (char *)malloc(cache->ChunkSize);
-
- /* if empty, alloc for the first time */
- if (cache->NumberOfChunks == 0)
- {
- cache->Chunks = (char **)malloc(sizeof(char *));
- }
- /* if count is power of two, reallocate with double size */
- else if ((cache->NumberOfChunks & (cache->NumberOfChunks-1)) == 0)
- {
- cache->Chunks = (char **)realloc(
- cache->Chunks, (2*cache->NumberOfChunks)*sizeof(char *));
- }
-
- cache->Chunks[cache->NumberOfChunks++] = cp;
-
- cache->Position = 0;
- nextPosition = (((n + 8) | 7) - 7);
- }
-
- cp = &cache->Chunks[cache->NumberOfChunks-1][cache->Position];
- cp[0] = '\0';
-
- cache->Position = nextPosition;
-
- return cp;
-}
-
-/* free all allocated strings */
-void vtkParse_FreeStringCache(StringCache *cache)
-{
- unsigned long i;
-
- for (i = 0; i < cache->NumberOfChunks; i++)
- {
- free(cache->Chunks[i]);
- }
- if (cache->Chunks)
- {
- free(cache->Chunks);
- }
-
- cache->Chunks = NULL;
- cache->NumberOfChunks = 0;
-}
-
-/* duplicate the first n bytes of a string and terminate it */
-const char *vtkParse_CacheString(StringCache *cache, const char *in, size_t n)
-{
- char *res = NULL;
-
- res = vtkParse_NewString(cache, n);
- strncpy(res, in, n);
- res[n] = '\0';
-
- return res;
-}
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkParseString.h
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-
-/*
- String allocation routines used by vtkParse.
-
- The parser uses "const char *" as its string object type, and expects
- all string objects to persist and be constant for the entire lifetime
- of the data generated by the parse (usually this means until the parser
- executable has exited). All strings that are stored in the parser's
- data objects should either be statically allocated, or allocated with
- the vtkParse_NewString() or vtkParse_CacheString() methods declared here.
-*/
-
-#ifndef VTK_PARSE_STRING_H
-#define VTK_PARSE_STRING_H
-
-#include <stddef.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * StringCache provides a simple way of allocating strings centrally.
- * It eliminates the need to allocate and free each individual strings,
- * which makes the code simpler and more efficient.
- */
-typedef struct _StringCache
-{
- unsigned long NumberOfChunks;
- char **Chunks;
- size_t ChunkSize;
- size_t Position;
-} StringCache;
-
-/**
- * Initialize the string cache.
- */
-void vtkParse_InitStringCache(StringCache *cache);
-
-/**
- * Alocate a new string from the cache.
- * A total of n+1 bytes will be allocated, to leave room for null.
- */
-char *vtkParse_NewString(StringCache *cache, size_t n);
-
-/**
- * Cache a string so that it can then be used in the vtkParse data
- * structures. The string will last until the application exits.
- * At most 'n' chars will be copied, and the string will be terminated.
- * If a null pointer is provided, then a null pointer will be returned.
- */
-const char *vtkParse_CacheString(StringCache *cache, const char *cp, size_t n);
-
-/**
- * Free all strings that were created with vtkParse_NewString() or
- * with vtkParse_CacheString().
- */
-void vtkParse_FreeStringCache(StringCache *cache);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkWrap.c
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-
-#include "vtkWrap.h"
-#include "vtkParseData.h"
-#include "vtkParseExtras.h"
-#include "vtkParseString.h"
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-/* -------------------------------------------------------------------- */
-/* Common types. */
-
-int vtkWrap_IsVoid(ValueInfo *val)
-{
- if (val == 0)
- {
- return 1;
- }
-
- return ((val->Type & VTK_PARSE_UNQUALIFIED_TYPE) == VTK_PARSE_VOID);
-}
-
-int vtkWrap_IsVoidFunction(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_UNQUALIFIED_TYPE);
-
- if (t == VTK_PARSE_FUNCTION_PTR || t == VTK_PARSE_FUNCTION)
- {
- /* check for signature "void (*func)(void *)" */
- if (val->Function->NumberOfParameters == 1 &&
- val->Function->Parameters[0]->Type == VTK_PARSE_VOID_PTR &&
- val->Function->Parameters[0]->NumberOfDimensions == 0 &&
- val->Function->ReturnValue->Type == VTK_PARSE_VOID)
- {
- return 1;
- }
- }
-
- return 0;
-}
-
-int vtkWrap_IsVoidPointer(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
- return (t == VTK_PARSE_VOID && vtkWrap_IsPointer(val));
-}
-
-int vtkWrap_IsCharPointer(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
- return (t == VTK_PARSE_CHAR && vtkWrap_IsPointer(val));
-}
-
-int vtkWrap_IsVTKObject(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_UNQUALIFIED_TYPE);
- return (t == VTK_PARSE_OBJECT_PTR &&
- val->Class[0] == 'v' && strncmp(val->Class, "vtk", 3) == 0);
-}
-
-int vtkWrap_IsSpecialObject(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_UNQUALIFIED_TYPE);
- return ((t == VTK_PARSE_OBJECT ||
- t == VTK_PARSE_OBJECT_REF) &&
- val->Class[0] == 'v' && strncmp(val->Class, "vtk", 3) == 0);
-}
-
-int vtkWrap_IsQtObject(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
- if (t == VTK_PARSE_QOBJECT &&
- val->Class[0] == 'Q' && isupper(val->Class[1]))
- {
- return 1;
- }
- return 0;
-}
-
-int vtkWrap_IsQtEnum(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_UNQUALIFIED_TYPE);
- if ((t == VTK_PARSE_QOBJECT || t == VTK_PARSE_QOBJECT_REF) &&
- val->Class[0] == 'Q' && strncmp("Qt::", val->Class, 4) == 0)
- {
- return 1;
- }
- return 0;
-}
-
-
-/* -------------------------------------------------------------------- */
-/* The base types, all are mutually exclusive. */
-
-int vtkWrap_IsObject(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
- return (t == VTK_PARSE_OBJECT ||
- t == VTK_PARSE_QOBJECT);
-}
-
-int vtkWrap_IsFunction(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
- return (t == VTK_PARSE_FUNCTION);
-}
-
-int vtkWrap_IsStream(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
- return (t == VTK_PARSE_ISTREAM ||
- t == VTK_PARSE_OSTREAM);
-}
-
-int vtkWrap_IsNumeric(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
-
- t = (t & ~VTK_PARSE_UNSIGNED);
- switch (t)
- {
- case VTK_PARSE_FLOAT:
- case VTK_PARSE_DOUBLE:
- case VTK_PARSE_CHAR:
- case VTK_PARSE_SHORT:
- case VTK_PARSE_INT:
- case VTK_PARSE_LONG:
- case VTK_PARSE_ID_TYPE:
- case VTK_PARSE_LONG_LONG:
- case VTK_PARSE___INT64:
- case VTK_PARSE_SIGNED_CHAR:
- case VTK_PARSE_SSIZE_T:
- case VTK_PARSE_BOOL:
- return 1;
- }
-
- return 0;
-}
-
-int vtkWrap_IsString(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
- return (t == VTK_PARSE_STRING ||
- t == VTK_PARSE_UNICODE_STRING);
-}
-
-/* -------------------------------------------------------------------- */
-/* Subcategories */
-
-int vtkWrap_IsBool(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
- return (t == VTK_PARSE_BOOL);
-}
-
-int vtkWrap_IsChar(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
- return (t == VTK_PARSE_CHAR);
-}
-
-int vtkWrap_IsInteger(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
-
- if (t != VTK_PARSE_UNSIGNED_CHAR)
- {
- t = (t & ~VTK_PARSE_UNSIGNED);
- }
- switch (t)
- {
- case VTK_PARSE_SHORT:
- case VTK_PARSE_INT:
- case VTK_PARSE_LONG:
- case VTK_PARSE_ID_TYPE:
- case VTK_PARSE_LONG_LONG:
- case VTK_PARSE___INT64:
- case VTK_PARSE_UNSIGNED_CHAR:
- case VTK_PARSE_SIGNED_CHAR:
- case VTK_PARSE_SSIZE_T:
- return 1;
- }
-
- return 0;
-}
-
-int vtkWrap_IsRealNumber(ValueInfo *val)
-{
- unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
- return (t == VTK_PARSE_FLOAT || t == VTK_PARSE_DOUBLE);
-}
-
-/* -------------------------------------------------------------------- */
-/* These are mutually exclusive, as well. */
-
-int vtkWrap_IsScalar(ValueInfo *val)
-{
- unsigned int i = (val->Type & VTK_PARSE_POINTER_MASK);
- return (i == 0);
-}
-
-int vtkWrap_IsPointer(ValueInfo *val)
-{
- unsigned int i = (val->Type & VTK_PARSE_POINTER_MASK);
- return (i == VTK_PARSE_POINTER && val->Count == 0 &&
- val->CountHint == 0 && val->NumberOfDimensions <= 1);
-}
-
-int vtkWrap_IsArray(ValueInfo *val)
-{
- unsigned int i = (val->Type & VTK_PARSE_POINTER_MASK);
- return (i == VTK_PARSE_POINTER && val->NumberOfDimensions <= 1 &&
- (val->Count != 0 || val->CountHint != 0));
-}
-
-int vtkWrap_IsNArray(ValueInfo *val)
-{
- int j = 0;
- unsigned int i = (val->Type & VTK_PARSE_POINTER_MASK);
- if (i != VTK_PARSE_ARRAY || val->NumberOfDimensions <= 1)
- {
- return 0;
- }
- for (j = 0; j < val->NumberOfDimensions; j++)
- {
- if (val->Dimensions[j] == NULL || val->Dimensions[j][0] == '\0')
- {
- return 0;
- }
- }
- return 1;
-}
-
-
-/* -------------------------------------------------------------------- */
-/* Other type properties, not mutually exclusive. */
-
-int vtkWrap_IsNonConstRef(ValueInfo *val)
-{
- return ((val->Type & VTK_PARSE_REF) != 0 &&
- (val->Type & VTK_PARSE_CONST) == 0);
-}
-
-int vtkWrap_IsConstRef(ValueInfo *val)
-{
- return ((val->Type & VTK_PARSE_REF) != 0 &&
- (val->Type & VTK_PARSE_CONST) != 0);
-}
-
-int vtkWrap_IsRef(ValueInfo *val)
-{
- return ((val->Type & VTK_PARSE_REF) != 0);
-}
-
-int vtkWrap_IsConst(ValueInfo *val)
-{
- return ((val->Type & VTK_PARSE_CONST) != 0);
-}
-
-/* -------------------------------------------------------------------- */
-/* Hints */
-
-int vtkWrap_IsNewInstance(ValueInfo *val)
-{
- return ((val->Type & VTK_PARSE_NEWINSTANCE) != 0);
-}
-
-/* -------------------------------------------------------------------- */
-/* Constructor/Destructor checks */
-
-int vtkWrap_IsConstructor(ClassInfo *c, FunctionInfo *f)
-
-{
- size_t i, m;
- const char *cp = c->Name;
-
- if (cp && f->Name && !vtkWrap_IsDestructor(c, f))
- {
- /* remove namespaces and template parameters from the name */
- m = vtkParse_UnscopedNameLength(cp);
- while (cp[m] == ':' && cp[m+1] == ':')
- {
- cp += m + 2;
- m = vtkParse_UnscopedNameLength(cp);
- }
- for (i = 0; i < m; i++)
- {
- if (cp[i] == '<')
- {
- break;
- }
- }
-
- return (i == strlen(f->Name) && strncmp(cp, f->Name, i) == 0);
- }
-
- return 0;
-}
-
-int vtkWrap_IsDestructor(ClassInfo *c, FunctionInfo *f)
-{
- size_t i;
- const char *cp;
-
- if (c->Name && f->Name)
- {
- cp = f->Signature;
- for (i = 0; cp[i] != '\0' && cp[i] != '('; i++)
- {
- if (cp[i] == '~')
- {
- return 1;
- }
- }
- }
-
- return 0;
-}
-
-int vtkWrap_IsSetVectorMethod(FunctionInfo *f)
-{
- if (f->Macro && strncmp(f->Macro, "vtkSetVector", 12) == 0)
- {
- return 1;
- }
-
- return 0;
-}
-
-int vtkWrap_IsGetVectorMethod(FunctionInfo *f)
-{
- if (f->Macro && strncmp(f->Macro, "vtkGetVector", 12) == 0)
- {
- return 1;
- }
-
- return 0;
-}
-
-/* -------------------------------------------------------------------- */
-/* Argument counting */
-
-int vtkWrap_CountWrappedParameters(FunctionInfo *f)
-{
- int totalArgs = f->NumberOfParameters;
-
- if (totalArgs > 0 &&
- (f->Parameters[0]->Type & VTK_PARSE_BASE_TYPE)
- == VTK_PARSE_FUNCTION)
- {
- totalArgs = 1;
- }
- else if (totalArgs == 1 &&
- (f->Parameters[0]->Type & VTK_PARSE_UNQUALIFIED_TYPE)
- == VTK_PARSE_VOID)
- {
- totalArgs = 0;
- }
-
- return totalArgs;
-}
-
-int vtkWrap_CountRequiredArguments(FunctionInfo *f)
-{
- int requiredArgs = 0;
- int totalArgs;
- int i;
-
- totalArgs = vtkWrap_CountWrappedParameters(f);
-
- for (i = 0; i < totalArgs; i++)
- {
- if (f->Parameters[i]->Value == NULL ||
- vtkWrap_IsArray(f->Parameters[i]) ||
- vtkWrap_IsNArray(f->Parameters[i]))
- {
- requiredArgs = i+1;
- }
- }
-
- return requiredArgs;
-}
-
-/* -------------------------------------------------------------------- */
-/* Check whether the class is derived from vtkObjectBase. */
-
-int vtkWrap_IsVTKObjectBaseType(
- HierarchyInfo *hinfo, const char *classname)
-{
- HierarchyEntry *entry;
-
- if (hinfo)
- {
- entry = vtkParseHierarchy_FindEntry(hinfo, classname);
- if (entry)
- {
- if (vtkParseHierarchy_IsTypeOf(hinfo, entry, "vtkObjectBase"))
- {
- return 1;
- }
- return 0;
- }
- }
-
- /* fallback if no HierarchyInfo */
- if (strncmp("vtk", classname, 3) == 0)
- {
- return 1;
- }
-
- return 0;
-}
-
-/* -------------------------------------------------------------------- */
-/* Check if the WRAP_SPECIAL flag is set for the class. */
-
-int vtkWrap_IsSpecialType(
- HierarchyInfo *hinfo, const char *classname)
-{
- HierarchyEntry *entry;
-
- if (hinfo)
- {
- entry = vtkParseHierarchy_FindEntry(hinfo, classname);
- if (entry && vtkParseHierarchy_GetProperty(entry, "WRAP_SPECIAL"))
- {
- return 1;
- }
- return 0;
- }
-
- /* fallback if no HierarchyInfo */
- if (strncmp("vtk", classname, 3) == 0)
- {
- return -1;
- }
-
- return 0;
-}
-
-/* -------------------------------------------------------------------- */
-/* Check if the class is derived from superclass */
-
-int vtkWrap_IsTypeOf(
- HierarchyInfo *hinfo, const char *classname, const char *superclass)
-{
- HierarchyEntry *entry;
-
- if (strcmp(classname, superclass) == 0)
- {
- return 1;
- }
-
- if (hinfo)
- {
- entry = vtkParseHierarchy_FindEntry(hinfo, classname);
- if (entry && vtkParseHierarchy_IsTypeOf(hinfo, entry, superclass))
- {
- return 1;
- }
- }
-
- return 0;
-}
-
-/* -------------------------------------------------------------------- */
-/* Make a guess about whether a class is wrapped */
-
-int vtkWrap_IsClassWrapped(
- HierarchyInfo *hinfo, const char *classname)
-{
- if (hinfo)
- {
- HierarchyEntry *entry;
- entry = vtkParseHierarchy_FindEntry(hinfo, classname);
-
- if (entry)
- {
- if (!vtkParseHierarchy_GetProperty(entry, "WRAP_EXCLUDE") ||
- vtkParseHierarchy_GetProperty(entry, "WRAP_SPECIAL"))
- {
- return 1;
- }
- }
- }
- else if (strncmp("vtk", classname, 3) == 0)
- {
- return 1;
- }
-
- return 0;
-}
-
-/* -------------------------------------------------------------------- */
-/* Check whether the destructor is public */
-int vtkWrap_HasPublicDestructor(ClassInfo *data)
-{
- FunctionInfo *func;
- int i;
-
- for (i = 0; i < data->NumberOfFunctions; i++)
- {
- func = data->Functions[i];
-
- if (vtkWrap_IsDestructor(data, func) &&
- func->Access != VTK_ACCESS_PUBLIC)
- {
- return 0;
- }
- }
-
- return 1;
-}
-
-/* -------------------------------------------------------------------- */
-/* Check whether the copy constructor is public */
-int vtkWrap_HasPublicCopyConstructor(ClassInfo *data)
-{
- FunctionInfo *func;
- int i;
-
- for (i = 0; i < data->NumberOfFunctions; i++)
- {
- func = data->Functions[i];
-
- if (vtkWrap_IsConstructor(data, func) &&
- func->NumberOfParameters == 1 &&
- func->Parameters[0]->Class &&
- strcmp(func->Parameters[0]->Class, data->Name) == 0 &&
- func->Access != VTK_ACCESS_PUBLIC)
- {
- return 0;
- }
- }
-
- return 1;
-}
-
-/* -------------------------------------------------------------------- */
-/* Get the size for subclasses of vtkTuple */
-int vtkWrap_GetTupleSize(ClassInfo *data, HierarchyInfo *hinfo)
-{
- HierarchyEntry *entry;
- const char *classname = NULL;
- size_t m;
- int size = 0;
-
- entry = vtkParseHierarchy_FindEntry(hinfo, data->Name);
- if (entry && vtkParseHierarchy_IsTypeOfTemplated(
- hinfo, entry, data->Name, "vtkTuple", &classname))
- {
- /* attempt to get count from template parameter */
- if (classname)
- {
- m = strlen(classname);
- if (m > 2 && classname[m - 1] == '>' &&
- isdigit(classname[m-2]) && (classname[m-3] == ' ' ||
- classname[m-3] == ',' || classname[m-3] == '<'))
- {
- size = classname[m-2] - '0';
- }
- free((char *)classname);
- }
- }
-
- return size;
-}
-
-/* -------------------------------------------------------------------- */
-/* This sets the CountHint for vtkDataArray methods where the
- * tuple size is equal to GetNumberOfComponents. */
-void vtkWrap_FindCountHints(
- ClassInfo *data, FileInfo *finfo, HierarchyInfo *hinfo)
-{
- int i;
- int count;
- const char *countMethod;
- FunctionInfo *theFunc;
-
- /* add hints for vtkInformation get methods */
- if (vtkWrap_IsTypeOf(hinfo, data->Name, "vtkInformation"))
- {
- countMethod = "Length(temp0)";
-
- for (i = 0; i < data->NumberOfFunctions; i++)
- {
- theFunc = data->Functions[i];
-
- if (strcmp(theFunc->Name, "Get") == 0 &&
- theFunc->NumberOfParameters >= 1 &&
- theFunc->Parameters[0]->Type == VTK_PARSE_OBJECT_PTR &&
- (strcmp(theFunc->Parameters[0]->Class,
- "vtkInformationIntegerVectorKey") == 0 ||
- strcmp(theFunc->Parameters[0]->Class,
- "vtkInformationDoubleVectorKey") == 0))
- {
- if (theFunc->ReturnValue && theFunc->ReturnValue->Count == 0 &&
- theFunc->NumberOfParameters == 1)
- {
- theFunc->ReturnValue->CountHint = countMethod;
- }
- }
- }
- }
-
- /* add hints for array GetTuple methods */
- if (vtkWrap_IsTypeOf(hinfo, data->Name, "vtkDataArray"))
- {
- countMethod = "GetNumberOfComponents()";
-
- for (i = 0; i < data->NumberOfFunctions; i++)
- {
- theFunc = data->Functions[i];
-
- if ((strcmp(theFunc->Name, "GetTuple") == 0 ||
- strcmp(theFunc->Name, "GetTupleValue") == 0) &&
- theFunc->ReturnValue && theFunc->ReturnValue->Count == 0 &&
- theFunc->NumberOfParameters == 1 &&
- theFunc->Parameters[0]->Type == VTK_PARSE_ID_TYPE)
- {
- theFunc->ReturnValue->CountHint = countMethod;
- }
- else if ((strcmp(theFunc->Name, "SetTuple") == 0 ||
- strcmp(theFunc->Name, "SetTupleValue") == 0 ||
- strcmp(theFunc->Name, "GetTuple") == 0 ||
- strcmp(theFunc->Name, "GetTupleValue") == 0 ||
- strcmp(theFunc->Name, "InsertTuple") == 0 ||
- strcmp(theFunc->Name, "InsertTupleValue") == 0) &&
- theFunc->NumberOfParameters == 2 &&
- theFunc->Parameters[0]->Type == VTK_PARSE_ID_TYPE &&
- theFunc->Parameters[1]->Count == 0)
- {
- theFunc->Parameters[1]->CountHint = countMethod;
- }
- else if ((strcmp(theFunc->Name, "InsertNextTuple") == 0 ||
- strcmp(theFunc->Name, "InsertNextTupleValue") == 0) &&
- theFunc->NumberOfParameters == 1 &&
- theFunc->Parameters[0]->Count == 0)
- {
- theFunc->Parameters[0]->CountHint = countMethod;
- }
- }
- }
-
- /* add hints for interpolator Interpolate methods */
- if (vtkWrap_IsTypeOf(hinfo, data->Name, "vtkAbstractImageInterpolator"))
- {
- countMethod = "GetNumberOfComponents()";
-
- for (i = 0; i < data->NumberOfFunctions; i++)
- {
- theFunc = data->Functions[i];
-
- if (strcmp(theFunc->Name, "Interpolate") == 0 &&
- theFunc->NumberOfParameters == 2 &&
- theFunc->Parameters[0]->Type == (VTK_PARSE_DOUBLE_PTR|VTK_PARSE_CONST) &&
- theFunc->Parameters[0]->Count == 3 &&
- theFunc->Parameters[1]->Type == VTK_PARSE_DOUBLE_PTR &&
- theFunc->Parameters[1]->Count == 0)
- {
- theFunc->Parameters[1]->CountHint = countMethod;
- }
- }
- }
-
- for (i = 0; i < data->NumberOfFunctions; i++)
- {
- theFunc = data->Functions[i];
-
- /* hints for constructors that take arrays */
- if (vtkWrap_IsConstructor(data, theFunc) &&
- theFunc->NumberOfParameters == 1 &&
- vtkWrap_IsPointer(theFunc->Parameters[0]) &&
- vtkWrap_IsNumeric(theFunc->Parameters[0]) &&
- theFunc->Parameters[0]->Count == 0 &&
- hinfo)
- {
- count = vtkWrap_GetTupleSize(data, hinfo);
- if (count)
- {
- char counttext[24];
- sprintf(counttext, "%d", count);
- theFunc->Parameters[0]->Count = count;
- vtkParse_AddStringToArray(
- &theFunc->Parameters[0]->Dimensions,
- &theFunc->Parameters[0]->NumberOfDimensions,
- vtkParse_CacheString(finfo->Strings, counttext, strlen(counttext)));
- }
- }
-
- /* hints for operator[] index range */
- if (theFunc->IsOperator && theFunc->Name &&
- strcmp(theFunc->Name, "operator[]") == 0)
- {
- if (vtkWrap_IsTypeOf(hinfo, data->Name, "vtkTuple"))
- {
- theFunc->SizeHint = "GetSize()";
- }
- else if (vtkWrap_IsTypeOf(hinfo, data->Name, "vtkArrayCoordinates") ||
- vtkWrap_IsTypeOf(hinfo, data->Name, "vtkArrayExtents") ||
- vtkWrap_IsTypeOf(hinfo, data->Name, "vtkArraySort"))
- {
- theFunc->SizeHint = "GetDimensions()";
- }
- else if (vtkWrap_IsTypeOf(hinfo, data->Name, "vtkArrayExtentsList") ||
- vtkWrap_IsTypeOf(hinfo, data->Name, "vtkArrayWeights"))
- {
- theFunc->SizeHint = "GetCount()";
- }
- }
- }
-}
-
-/* -------------------------------------------------------------------- */
-/* This sets the NewInstance hint for generator methods. */
-void vtkWrap_FindNewInstanceMethods(
- ClassInfo *data, HierarchyInfo *hinfo)
-{
- int i;
- FunctionInfo *theFunc;
-
- for (i = 0; i < data->NumberOfFunctions; i++)
- {
- theFunc = data->Functions[i];
- if (theFunc->Name && theFunc->ReturnValue &&
- vtkWrap_IsVTKObject(theFunc->ReturnValue) &&
- vtkWrap_IsVTKObjectBaseType(hinfo, theFunc->ReturnValue->Class))
- {
- if (strcmp(theFunc->Name, "NewInstance") == 0 ||
- strcmp(theFunc->Name, "CreateInstance") == 0 ||
- (strcmp(theFunc->Name, "CreateLookupTable") == 0 &&
- strcmp(data->Name, "vtkColorSeries") == 0) ||
- (strcmp(theFunc->Name, "CreateImageReader2") == 0 &&
- strcmp(data->Name, "vtkImageReader2Factory") == 0) ||
- (strcmp(theFunc->Name, "CreateDataArray") == 0 &&
- strcmp(data->Name, "vtkDataArray") == 0) ||
- (strcmp(theFunc->Name, "CreateArray") == 0 &&
- strcmp(data->Name, "vtkAbstractArray") == 0) ||
- (strcmp(theFunc->Name, "CreateArray") == 0 &&
- strcmp(data->Name, "vtkArray") == 0) ||
- (strcmp(theFunc->Name, "GetQueryInstance") == 0 &&
- strcmp(data->Name, "vtkSQLDatabase") == 0) ||
- (strcmp(theFunc->Name, "CreateFromURL") == 0 &&
- strcmp(data->Name, "vtkSQLDatabase") == 0) ||
- (strcmp(theFunc->Name, "MakeTransform") == 0 &&
- vtkWrap_IsTypeOf(hinfo, data->Name, "vtkAbstractTransform")))
- {
- theFunc->ReturnValue->Type |= VTK_PARSE_NEWINSTANCE;
- }
- }
- }
-}
-
-
-/* -------------------------------------------------------------------- */
-/* Expand all typedef types that are used in function arguments */
-void vtkWrap_ExpandTypedefs(
- ClassInfo *data, FileInfo *finfo, HierarchyInfo *hinfo)
-{
- int i, j, n;
- FunctionInfo *funcInfo;
- const char *newclass;
-
- n = data->NumberOfSuperClasses;
- for (i = 0; i < n; i++)
- {
- newclass = vtkParseHierarchy_ExpandTypedefsInName(
- hinfo, data->SuperClasses[i], NULL);
- if (newclass != data->SuperClasses[i])
- {
- data->SuperClasses[i] =
- vtkParse_CacheString(finfo->Strings, newclass, strlen(newclass));
- free((char *)newclass);
- }
- }
-
- n = data->NumberOfFunctions;
- for (i = 0; i < n; i++)
- {
- funcInfo = data->Functions[i];
- if (funcInfo->Access == VTK_ACCESS_PUBLIC)
- {
- for (j = 0; j < funcInfo->NumberOfParameters; j++)
- {
- vtkParseHierarchy_ExpandTypedefsInValue(
- hinfo, funcInfo->Parameters[j], finfo->Strings, data->Name);
- }
- if (funcInfo->ReturnValue)
- {
- vtkParseHierarchy_ExpandTypedefsInValue(
- hinfo, funcInfo->ReturnValue, finfo->Strings, data->Name);
- }
- }
- }
-}
-
-
-/* -------------------------------------------------------------------- */
-/* get the type name */
-
-const char *vtkWrap_GetTypeName(ValueInfo *val)
-{
- unsigned int aType = val->Type;
- const char *aClass = val->Class;
-
- /* print the type itself */
- switch (aType & VTK_PARSE_BASE_TYPE)
- {
- case VTK_PARSE_FLOAT: return "float";
- case VTK_PARSE_DOUBLE: return "double";
- case VTK_PARSE_INT: return "int";
- case VTK_PARSE_SHORT: return "short";
- case VTK_PARSE_LONG: return "long";
- case VTK_PARSE_VOID: return "void ";
- case VTK_PARSE_CHAR: return "char";
- case VTK_PARSE_UNSIGNED_INT: return "unsigned int";
- case VTK_PARSE_UNSIGNED_SHORT: return "unsigned short";
- case VTK_PARSE_UNSIGNED_LONG: return "unsigned long";
- case VTK_PARSE_UNSIGNED_CHAR: return "unsigned char";
- case VTK_PARSE_ID_TYPE: return "vtkIdType";
- case VTK_PARSE_LONG_LONG: return "long long";
- case VTK_PARSE___INT64: return "__int64";
- case VTK_PARSE_UNSIGNED_LONG_LONG: return "unsigned long long";
- case VTK_PARSE_UNSIGNED___INT64: return "unsigned __int64";
- case VTK_PARSE_SIGNED_CHAR: return "signed char";
- case VTK_PARSE_BOOL: return "bool";
- case VTK_PARSE_UNICODE_STRING: return "vtkUnicodeString";
- case VTK_PARSE_SSIZE_T: return "ssize_t";
- case VTK_PARSE_SIZE_T: return "size_t";
- }
-
- return aClass;
-}
-
-/* -------------------------------------------------------------------- */
-/* variable declarations */
-
-void vtkWrap_DeclareVariable(
- FILE *fp, ValueInfo *val, const char *name, int i, int flags)
-{
- unsigned int aType;
- int j;
-
- if (val == NULL)
- {
- return;
- }
-
- aType = (val->Type & VTK_PARSE_UNQUALIFIED_TYPE);
-
- /* do nothing for void */
- if (aType == VTK_PARSE_VOID ||
- (aType & VTK_PARSE_BASE_TYPE) == VTK_PARSE_FUNCTION)
- {
- return;
- }
-
- /* add a couple spaces */
- fprintf(fp," ");
-
- /* for const * return types, prepend with const */
- if ((flags & VTK_WRAP_RETURN) != 0)
- {
- if ((val->Type & VTK_PARSE_CONST) != 0 &&
- (aType & VTK_PARSE_INDIRECT) != 0)
- {
- fprintf(fp,"const ");
- }
- }
- /* do the same for "const char *" with initializer */
- else
- {
- if ((val->Type & VTK_PARSE_CONST) != 0 &&
- aType == VTK_PARSE_CHAR_PTR &&
- val->Value &&
- strcmp(val->Value, "0") != 0 &&
- strcmp(val->Value, "NULL") != 0)
- {
- fprintf(fp,"const ");
- }
- }
-
- /* print the type name */
- fprintf(fp, "%s ", vtkWrap_GetTypeName(val));
-
- /* indirection */
- if ((flags & VTK_WRAP_RETURN) != 0)
- {
- /* ref and pointer return values are stored as pointers */
- if ((aType & VTK_PARSE_INDIRECT) == VTK_PARSE_POINTER ||
- (aType & VTK_PARSE_INDIRECT) == VTK_PARSE_REF)
- {
- fprintf(fp, "*");
- }
- }
- else
- {
- /* objects refs and pointers are always handled via pointers,
- * other refs are passed by value */
- if (aType == VTK_PARSE_CHAR_PTR ||
- aType == VTK_PARSE_VOID_PTR ||
- aType == VTK_PARSE_OBJECT_PTR ||
- aType == VTK_PARSE_OBJECT_REF ||
- aType == VTK_PARSE_OBJECT ||
- vtkWrap_IsQtObject(val))
- {
- fprintf(fp, "*");
- }
- /* arrays of unknown size are handled via pointers */
- else if (val->CountHint)
- {
- fprintf(fp, "*");
- }
- }
-
- /* the variable name */
- if (i >= 0)
- {
- fprintf(fp,"%s%i", name, i);
- }
- else
- {
- fprintf(fp,"%s", name);
- }
-
- if ((flags & VTK_WRAP_ARG) != 0)
- {
- /* print the array decorators */
- if (((aType & VTK_PARSE_POINTER_MASK) != 0) &&
- aType != VTK_PARSE_CHAR_PTR &&
- aType != VTK_PARSE_VOID_PTR &&
- aType != VTK_PARSE_OBJECT_PTR &&
- !vtkWrap_IsQtObject(val) &&
- val->CountHint == NULL)
- {
- if (val->NumberOfDimensions == 1 && val->Count > 0)
- {
- fprintf(fp, "[%d]", val->Count);
- }
- else
- {
- for (j = 0; j < val->NumberOfDimensions; j++)
- {
- fprintf(fp, "[%s]", val->Dimensions[j]);
- }
- }
- }
-
- /* add a default value */
- else if (val->Value)
- {
- fprintf(fp, " = %s", val->Value);
- }
- else if (aType == VTK_PARSE_CHAR_PTR ||
- aType == VTK_PARSE_VOID_PTR ||
- aType == VTK_PARSE_OBJECT_PTR ||
- aType == VTK_PARSE_OBJECT_REF ||
- aType == VTK_PARSE_OBJECT ||
- vtkWrap_IsQtObject(val))
- {
- fprintf(fp, " = NULL");
- }
- else if (val->CountHint)
- {
- fprintf(fp, " = NULL");
- }
- else if (aType == VTK_PARSE_BOOL)
- {
- fprintf(fp, " = false");
- }
- }
-
- /* finish off with a semicolon */
- if ((flags & VTK_WRAP_NOSEMI) == 0)
- {
- fprintf(fp, ";\n");
- }
-}
-
-void vtkWrap_DeclareVariableSize(
- FILE *fp, ValueInfo *val, const char *name, int i)
-{
- char idx[32];
- int j;
-
- idx[0] = '\0';
- if (i >= 0)
- {
- sprintf(idx, "%d", i);
- }
-
- if (val->NumberOfDimensions > 1)
- {
- fprintf(fp,
- " static int %s%s[%d] = ",
- name, idx, val->NumberOfDimensions);
-
- for (j = 0; j < val->NumberOfDimensions; j++)
- {
- fprintf(fp, "%c %s", ((j == 0) ? '{' : ','), val->Dimensions[j]);
- }
-
- fprintf(fp, " };\n");
- }
- else if (val->Count != 0 || val->CountHint)
- {
- fprintf(fp,
- " %sint %s%s = %d;\n",
- (val->CountHint ? "" : "const "), name, idx,
- (val->CountHint ? 0 : val->Count));
- }
- else if (val->NumberOfDimensions == 1)
- {
- fprintf(fp,
- " const int %s%s = %s;\n",
- name, idx, val->Dimensions[0]);
- }
-}
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkWrap.h
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-
-/**
- * vtkWrap provides useful functions for generating wrapping code.
-*/
-
-#ifndef VTK_WRAP_H
-#define VTK_WRAP_H
-
-#include "vtkParse.h"
-#include "vtkParseHierarchy.h"
-
-/**
- * For use with vtkWrap_DeclareVariable.
- */
-/*@{*/
-#define VTK_WRAP_RETURN 1
-#define VTK_WRAP_ARG 2
-#define VTK_WRAP_NOSEMI 4
-/*@}*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Check for common types.
- */
-/*@{*/
-int vtkWrap_IsVoid(ValueInfo *val);
-int vtkWrap_IsVoidFunction(ValueInfo *val);
-int vtkWrap_IsVoidPointer(ValueInfo *val);
-int vtkWrap_IsCharPointer(ValueInfo *val);
-int vtkWrap_IsVTKObject(ValueInfo *val);
-int vtkWrap_IsSpecialObject(ValueInfo *val);
-int vtkWrap_IsQtObject(ValueInfo *val);
-int vtkWrap_IsQtEnum(ValueInfo *val);
-/*@}*/
-
-/**
- * The basic types, all are mutually exclusive.
- * Note that enums are considered to be objects,
- * bool and char are considered to be numeric.
- */
-/*@{*/
-int vtkWrap_IsObject(ValueInfo *val);
-int vtkWrap_IsFunction(ValueInfo *val);
-int vtkWrap_IsStream(ValueInfo *val);
-int vtkWrap_IsNumeric(ValueInfo *val);
-int vtkWrap_IsString(ValueInfo *val);
-/*@}*/
-
-/**
- * Subcategories of numeric types. In this categorization,
- * bool and char are not considered to be integers.
- */
-/*@{*/
-int vtkWrap_IsBool(ValueInfo *val);
-int vtkWrap_IsChar(ValueInfo *val);
-int vtkWrap_IsInteger(ValueInfo *val);
-int vtkWrap_IsRealNumber(ValueInfo *val);
-/*@}*/
-
-/**
- * Arrays and pointers. These are mutually exclusive.
- * IsPointer() does not include pointers to pointers.
- * IsArray() and IsNArray() do not include unsized arrays.
- * Arrays of pointers are not included in any of these.
- */
-/*@{*/
-int vtkWrap_IsScalar(ValueInfo *val);
-int vtkWrap_IsPointer(ValueInfo *val);
-int vtkWrap_IsArray(ValueInfo *val);
-int vtkWrap_IsNArray(ValueInfo *val);
-/*@}*/
-
-/**
- * Properties that can combine with other properties.
- */
-/*@{*/
-int vtkWrap_IsNonConstRef(ValueInfo *val);
-int vtkWrap_IsConstRef(ValueInfo *val);
-int vtkWrap_IsRef(ValueInfo *val);
-int vtkWrap_IsConst(ValueInfo *val);
-/*@}*/
-
-/**
- * Hints.
- * NewInstance objects must be freed by the caller.
- */
-/*@{*/
-int vtkWrap_IsNewInstance(ValueInfo *val);
-/*@}*/
-
-
-/**
- * Check whether the class is derived from vtkObjectBase.
- * If "hinfo" is NULL, this just checks that the class
- * name starts with "vtk".
- */
-int vtkWrap_IsVTKObjectBaseType(
- HierarchyInfo *hinfo, const char *classname);
-
-/**
- * Check if the WRAP_SPECIAL flag is set for the class.
- * If "hinfo" is NULL, it defaults to just checking if
- * the class starts with "vtk" and returns -1 if so.
- */
-int vtkWrap_IsSpecialType(
- HierarchyInfo *hinfo, const char *classname);
-
-/**
- * Check if the class is derived from superclass.
- * If "hinfo" is NULL, then only an exact match to the
- * superclass will succeed.
- */
-int vtkWrap_IsTypeOf(
- HierarchyInfo *hinfo, const char *classname, const char *superclass);
-
-/**
- * Check whether a class is wrapped. If "hinfo" is NULL,
- * it just checks that the class starts with "vtk".
- */
-int vtkWrap_IsClassWrapped(
- HierarchyInfo *hinfo, const char *classname);
-
-/**
- * Check whether the destructor is public
- */
-int vtkWrap_HasPublicDestructor(ClassInfo *data);
-
-/**
- * Check whether the copy constructor is public
- */
-int vtkWrap_HasPublicCopyConstructor(ClassInfo *data);
-
-/**
- * Expand all typedef types that are used in function arguments.
- * This should be done before any wrapping is done, to make sure
- * that the wrappers see the real types.
- */
-void vtkWrap_ExpandTypedefs(
- ClassInfo *data, FileInfo *finfo, HierarchyInfo *hinfo);
-
-/**
- * Apply any hints about array sizes, e.g. hint that the
- * GetNumberOfComponents() method gives the tuple size.
- */
-void vtkWrap_FindCountHints(
- ClassInfo *data, FileInfo *finfo, HierarchyInfo *hinfo);
-
-/**
- * Get the size of a fixed-size tuple
- */
-int vtkWrap_GetTupleSize(ClassInfo *data, HierarchyInfo *hinfo);
-
-/**
- * Apply any hints about methods that return a new object instance,
- * i.e. factory methods and the like. Reference counts must be
- * handled differently for such returned objects.
- */
-void vtkWrap_FindNewInstanceMethods(
- ClassInfo *data, HierarchyInfo *hinfo);
-
-/**
- * Get the name of a type. The name will not include "const".
- */
-const char *vtkWrap_GetTypeName(ValueInfo *val);
-
-/**
- * True if the method a constructor of the class.
- */
-int vtkWrap_IsConstructor(ClassInfo *c, FunctionInfo *f);
-
-/**
- * True if the method a destructor of the class.
- */
-int vtkWrap_IsDestructor(ClassInfo *c, FunctionInfo *f);
-
-/**
- * Check if a method is from a SetVector method.
- */
-int vtkWrap_IsSetVectorMethod(FunctionInfo *f);
-
-/**
- * Check if a method is from a GetVector method.
- */
-int vtkWrap_IsGetVectorMethod(FunctionInfo *f);
-
-/**
- * Count the number of parameters that are wrapped.
- * This skips the "void *" parameter that follows
- * wrapped function pointer parameters.
- */
-int vtkWrap_CountWrappedParameters(FunctionInfo *f);
-
-/**
- * Count the number of args that are required.
- * This counts to the last argument that does not
- * have a default value. Array args are not allowed
- * to have default values.
- */
-int vtkWrap_CountRequiredArguments(FunctionInfo *f);
-
-/**
- * Write a variable declaration to a file.
- * Void is automatically ignored, and nothing is written for
- * function pointers
- * Set "idx" to -1 to avoid writing an idx.
- * Set "flags" to VTK_WRAP_RETURN to write a return value,
- * or to VTK_WRAP_ARG to write a temp argument variable.
- * The following rules apply:
- * - if VTK_WRAP_NOSEMI is set, then no semicolon/newline is printed
- * - if VTK_WRAP_RETURN is set, then "&" becomes "*"
- * - if VTK_WRAP_ARG is set, "&" becomes "*" only for object
- * types, and is removed for all other types.
- * - "const" is removed except for return values with "&" or "*".
- */
-void vtkWrap_DeclareVariable(
- FILE *fp, ValueInfo *v, const char *name, int idx, int flags);
-
-/**
- * Write an "int" size variable for arrays, initialized to
- * the array size if the size is greater than zero.
- * For N-dimensional arrays, write a static array of ints.
- */
-void vtkWrap_DeclareVariableSize(
- FILE *fp, ValueInfo *v, const char *name, int idx);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkWrapHierarchy.c
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-/*-------------------------------------------------------------------------
- Copyright (c) 2010 David Gobbi.
-
- Contributed to the VisualizationToolkit by the author in June 2010
- under the terms of the Visualization Toolkit 2008 copyright.
--------------------------------------------------------------------------*/
-
-/**
- The vtkWrapHierarchy program builds a text file that describes the
- class hierarchy.
- For each class, the output file will have a line in the following
- format:
-
- classname [ : superclass ] ; header.h ; kit [; flags]
-
- For each enum type,
-
- enumname : enum ; header.h ; kit [; flags]
-
- For each typedef,
-
- name = [2][3]* const int ; header.h ; kit [; flags]
-
-*/
-
-#include "vtkParse.h"
-#include "vtkParseData.h"
-#include "vtkParseMain.h"
-#include "vtkParsePreprocess.h"
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-#ifdef _WIN32
-# include <windows.h>
-#else
-# include <unistd.h>
-#endif
-
-/**
- * Helper to append a text line to an array of lines
- */
-static char **append_unique_line(char **lines, char *line, size_t *np)
-{
- size_t l, n;
-
- n = *np;
-
- /* check to make sure this line isn't a duplicate */
- for (l = 0; l < n; l++)
- {
- if (strcmp(line, lines[l]) == 0)
- {
- break;
- }
- }
- if (l == n)
- {
- /* allocate more memory if n+1 is a power of two */
- if (((n+1) & n) == 0)
- {
- lines = (char **)realloc(lines, (n+1)*2*sizeof(char *));
- }
-
- lines[n] = (char *)malloc(strlen(line)+1);
- strcpy(lines[n++], line);
- lines[n] = NULL;
- }
-
- *np = n;
- return lines;
-}
-
-/**
- * Helper to append to a line, given the end marker
- */
-static char *append_to_line(
- char *line, const char *text, size_t *pos, size_t *maxlen)
-{
- size_t n;
-
- n = strlen(text);
-
- if ((*pos) + n + 1 > (*maxlen))
- {
- *maxlen = ((*pos) + n + 1 + 2*(*maxlen));
- line = (char *)realloc(line, (*maxlen));
- }
-
- strcpy(&line[*pos], text);
- *pos = (*pos) + n;
-
- return line;
-}
-
-/**
- * Append scope to line
- */
-static char *append_scope_to_line(
- char *line, size_t *m, size_t *maxlen, const char *scope)
-{
- if (scope && scope[0] != '\0')
- {
- line = append_to_line(line, scope, m, maxlen);
- line = append_to_line(line, "::", m, maxlen);
- }
-
- return line;
-}
-
-/**
- * Append template info
- */
-static char *append_template_to_line(
- char *line, size_t *m, size_t *maxlen, TemplateInfo *template_args)
-{
- ValueInfo *arg;
- int j;
-
- line = append_to_line(line, "<", m, maxlen);
-
- for (j = 0; j < template_args->NumberOfParameters; j++)
- {
- arg = template_args->Parameters[j];
- if (arg->Name)
- {
- line = append_to_line(line, arg->Name, m, maxlen);
- }
- if (arg->Value && arg->Value[0] != '\n')
- {
- line = append_to_line(line, "=", m, maxlen);
- line = append_to_line(line, arg->Value, m, maxlen);
- }
- if (j+1 < template_args->NumberOfParameters)
- {
- line = append_to_line(line, ",", m, maxlen);
- }
- }
-
- line = append_to_line(line, ">", m, maxlen);
-
- return line;
-}
-
-/**
- * Append class info
- */
-static char *append_class_to_line(
- char *line, size_t *m, size_t *maxlen, ClassInfo *class_info)
-{
- int j;
-
- line = append_to_line(line, class_info->Name, m, maxlen);
-
- if (class_info->Template)
- {
- line = append_template_to_line(line, m, maxlen, class_info->Template);
- }
-
- line = append_to_line(line, " ", m, maxlen);
-
- if (class_info->NumberOfSuperClasses)
- {
- line = append_to_line(line, ": ", m, maxlen);
- }
-
- for (j = 0; j < class_info->NumberOfSuperClasses; j++)
- {
- line = append_to_line(line, class_info->SuperClasses[j], m, maxlen);
- line = append_to_line(line, " ", m, maxlen);
- if (j+1 < class_info->NumberOfSuperClasses)
- {
- line = append_to_line(line, ", ", m, maxlen);
- }
- }
-
- return line;
-}
-
-/**
- * Append enum info
- */
-static char *append_enum_to_line(
- char *line, size_t *m, size_t *maxlen, EnumInfo *enum_info)
-{
- line = append_to_line(line, enum_info->Name, m, maxlen);
- line = append_to_line(line, " : enum ", m, maxlen);
-
- return line;
-}
-
-/**
- * Append the trailer, i.e. the filename and flags
- */
-static char *append_trailer(
- char *line, size_t *m, size_t *maxlen,
- const char *header_file, const char *module_name, const char *flags)
-{
- line = append_to_line(line, "; ", m, maxlen);
- line = append_to_line(line, header_file, m, maxlen);
-
- line = append_to_line(line, " ; ", m, maxlen);
- line = append_to_line(line, module_name, m, maxlen);
-
- if (flags && flags[0] != '\0')
- {
- line = append_to_line(line, " ; ", m, maxlen);
- line = append_to_line(line, flags, m, maxlen);
- }
-
- return line;
-}
-
-/**
- * Append typedef info
- */
-static char *append_typedef_to_line(
- char *line, size_t *m, size_t *maxlen, ValueInfo *typedef_info)
-{
- unsigned int type;
- int ndims;
- int dim;
-
- line = append_to_line(line, typedef_info->Name, m, maxlen);
- line = append_to_line(line, " = ", m, maxlen);
-
- type = typedef_info->Type;
-
- if ((type & VTK_PARSE_REF) != 0)
- {
- line = append_to_line(line, "&", m, maxlen);
- }
-
- ndims = typedef_info->NumberOfDimensions;
-
- for (dim = 0; dim < ndims; dim++)
- {
- line = append_to_line(line, "[", m, maxlen);
- line = append_to_line(line, typedef_info->Dimensions[dim],
- m, maxlen);
- line = append_to_line(line, "]", m, maxlen);
- }
-
- type = (type & VTK_PARSE_POINTER_MASK);
- if (ndims > 0 && (type & VTK_PARSE_POINTER_LOWMASK) == VTK_PARSE_ARRAY)
- {
- type = ((type >> 2) & VTK_PARSE_POINTER_MASK);
- }
- else if (ndims == 1)
- {
- type = ((type >> 2) & VTK_PARSE_POINTER_MASK);
- }
-
- /* pointers are printed after brackets, and are intentionally
- * printed in reverse order as compared to C++ declarations */
- while (type)
- {
- unsigned int bits = (type & VTK_PARSE_POINTER_LOWMASK);
- type = ((type >> 2) & VTK_PARSE_POINTER_MASK);
-
- if (bits == VTK_PARSE_POINTER)
- {
- line = append_to_line(line, "*", m, maxlen);
- }
- else if (bits == VTK_PARSE_CONST_POINTER)
- {
- line = append_to_line(line, "const*", m, maxlen);
- }
- else
- {
- line = append_to_line(line, "[]", m, maxlen);
- }
- }
-
- if (line[*m-1] != ' ')
- {
- line = append_to_line(line, " ", m, maxlen);
- }
-
- if ((type & VTK_PARSE_CONST) != 0)
- {
- line = append_to_line(line, "const ", m, maxlen);
- }
-
- line = append_to_line(line, typedef_info->Class, m, maxlen);
- line = append_to_line(line, " ", m, maxlen);
-
- return line;
-}
-
-/**
- * Append all types in a class
- */
-static char **append_class_contents(
- char **lines, size_t *np, ClassInfo *data,
- const char *scope, const char *header_file, const char *module_name)
-{
- int i;
- const char *tmpflags;
- char *new_scope;
- char *line;
- size_t m, n, maxlen;
- size_t scope_m, scope_maxlen;
-
- /* append the name to the scope */
- new_scope = 0;
- n = 0;
- m = 0;
- if (scope)
- {
- n = strlen(scope);
- }
- if (data->Name)
- {
- m = strlen(data->Name);
- }
- if (m && (n || data->Template))
- {
- scope_maxlen = n + m + 3;
- scope_m = 0;
- new_scope = (char *)malloc(scope_maxlen);
- new_scope[0] = '\0';
- if (n)
- {
- new_scope = append_to_line(new_scope, scope, &scope_m, &scope_maxlen);
- new_scope = append_to_line(new_scope, "::", &scope_m, &scope_maxlen);
- }
- new_scope = append_to_line(new_scope, data->Name, &scope_m, &scope_maxlen);
- if (data->Template)
- {
- new_scope = append_template_to_line(
- new_scope, &scope_m, &scope_maxlen, data->Template);
- }
- scope = new_scope;
- }
- else if (m)
- {
- scope = data->Name;
- }
-
- /* start with a buffer of 15 chars and grow from there */
- maxlen = 15;
- m = 0;
- line = (char *)malloc(maxlen);
-
- /* add a line for each type that is found */
- for (i = 0; i < data->NumberOfItems; i++)
- {
- m = 0;
- line[m] = '\0';
-
- tmpflags = 0;
-
- if (data->Items[i].Type == VTK_CLASS_INFO ||
- data->Items[i].Type == VTK_STRUCT_INFO)
- {
- ClassInfo *class_info =
- data->Classes[data->Items[i].Index];
-
- line = append_scope_to_line(line, &m, &maxlen, scope);
- line = append_class_to_line(line, &m, &maxlen, class_info);
- tmpflags = "WRAP_EXCLUDE";
- }
- else if (data->Items[i].Type == VTK_ENUM_INFO)
- {
- line = append_scope_to_line(line, &m, &maxlen, scope);
- line = append_enum_to_line(line, &m, &maxlen,
- data->Enums[data->Items[i].Index]);
- }
- else if (data->Items[i].Type == VTK_TYPEDEF_INFO)
- {
- line = append_scope_to_line(line, &m, &maxlen, scope);
- line = append_typedef_to_line(line, &m, &maxlen,
- data->Typedefs[data->Items[i].Index]);
- }
- else
- {
- /* unhandled file element */
- continue;
- }
-
- /* append filename and flags */
- line = append_trailer(
- line, &m, &maxlen, header_file, module_name, tmpflags);
-
- /* append the line to the file */
- lines = append_unique_line(lines, line, np);
-
- /* for classes, add all typed defined within the class */
- if ((data->Items[i].Type == VTK_CLASS_INFO ||
- data->Items[i].Type == VTK_STRUCT_INFO) &&
- data->Classes[data->Items[i].Index]->Name)
- {
- lines = append_class_contents(lines, np,
- data->Classes[data->Items[i].Index],
- scope, header_file, module_name);
- }
- }
-
- free(line);
-
- if (new_scope != 0)
- {
- free(new_scope);
- }
-
- return lines;
-}
-
-
-/**
- * Append all types in a namespace
- */
-static char **append_namespace_contents(
- char **lines, size_t *np, NamespaceInfo *data, ClassInfo *main_class,
- const char *scope, const char *header_file, const char *module_name,
- const char *flags)
-{
- int i;
- const char *tmpflags;
- char *line;
- char *new_scope;
- size_t n, m, maxlen;
-
- /* append the name to the scope */
- new_scope = 0;
- n = 0;
- m = 0;
- if (scope)
- {
- n = strlen(scope);
- }
- if (data->Name)
- {
- m = strlen(data->Name);
- }
- if (m && n)
- {
- new_scope = (char *)malloc(m + n + 3);
- if (n)
- {
- strncpy(new_scope, scope, n);
- new_scope[n++] = ':';
- new_scope[n++] = ':';
- }
- strncpy(&new_scope[n], data->Name, m);
- new_scope[n+m] = '\0';
- scope = new_scope;
- }
- else if (m)
- {
- scope = data->Name;
- }
-
- /* start with a buffer of 15 chars and grow from there */
- maxlen = 15;
- m = 0;
- line = (char *)malloc(maxlen);
-
- /* add a line for each type that is found */
- for (i = 0; i < data->NumberOfItems; i++)
- {
- tmpflags = 0;
- m = 0;
- line[m] = '\0';
-
- if (data->Items[i].Type == VTK_CLASS_INFO ||
- data->Items[i].Type == VTK_STRUCT_INFO)
- {
- ClassInfo *class_info =
- data->Classes[data->Items[i].Index];
-
- /* all but the main class in each file is excluded from wrapping */
- tmpflags = "WRAP_EXCLUDE";
- if (class_info == main_class)
- {
- tmpflags = flags;
- }
-
- line = append_scope_to_line(line, &m, &maxlen, scope);
- line = append_class_to_line(line, &m, &maxlen, class_info);
- }
- else if (data->Items[i].Type == VTK_ENUM_INFO)
- {
- line = append_scope_to_line(line, &m, &maxlen, scope);
- line = append_enum_to_line(line, &m, &maxlen,
- data->Enums[data->Items[i].Index]);
- }
- else if (data->Items[i].Type == VTK_TYPEDEF_INFO)
- {
- line = append_scope_to_line(line, &m, &maxlen, scope);
- line = append_typedef_to_line(line, &m, &maxlen,
- data->Typedefs[data->Items[i].Index]);
- }
- else if (data->Items[i].Type != VTK_NAMESPACE_INFO)
- {
- /* unhandled file element */
- continue;
- }
-
- if (data->Items[i].Type != VTK_NAMESPACE_INFO)
- {
- /* append filename and flags */
- line = append_trailer(
- line, &m, &maxlen, header_file, module_name, tmpflags);
-
- /* append the line to the file */
- lines = append_unique_line(lines, line, np);
- }
-
- /* for classes, add all typed defined within the class */
- if ((data->Items[i].Type == VTK_CLASS_INFO ||
- data->Items[i].Type == VTK_STRUCT_INFO) &&
- data->Classes[data->Items[i].Index]->Name)
- {
- lines = append_class_contents(lines, np,
- data->Classes[data->Items[i].Index],
- scope, header_file, module_name);
- }
-
- /* for namespaces, add all types in the namespace */
- if (data->Items[i].Type == VTK_NAMESPACE_INFO &&
- data->Namespaces[data->Items[i].Index]->Name)
- {
- lines = append_namespace_contents(lines, np,
- data->Namespaces[data->Items[i].Index], 0,
- scope, header_file, module_name, "WRAP_EXCLUDE");
- }
- }
-
- free(line);
-
- if (new_scope != 0)
- {
- free(new_scope);
- }
-
- return lines;
-}
-
-/**
- * Read a header file with vtkParse.tab.c
- *
- * If "lines" is provided, the file contents
- * will be appended to them.
- */
-static char **vtkWrapHierarchy_ParseHeaderFile(
- FILE *fp, const char *filename, const char *module_name,
- const char *flags, char **lines)
-{
- FileInfo *data;
- const char *header_file;
- size_t k, n;
-
- /* start with just a single output line and grow from there */
- if (lines == NULL)
- {
- lines = (char **)malloc(sizeof(char *));
- lines[0] = NULL;
- }
-
- /* always ignore BTX markers when building hierarchy files */
- vtkParse_SetIgnoreBTX(1);
-
- /* the "concrete" flag doesn't matter, just set to zero */
- data = vtkParse_ParseFile(filename, fp, stderr);
-
- if (!data)
- {
- free(lines);
- return 0;
- }
-
- /* find the last line in "lines" */
- n = 0;
- while (lines[n] != NULL)
- {
- n++;
- }
-
- k = strlen(data->FileName) - 1;
- while (k > 0 && data->FileName[k-1] != '/' && data->FileName[k-1] != '\\')
- {
- k--;
- }
- header_file = &data->FileName[k];
-
- /* append the file contents to the output */
- lines = append_namespace_contents(
- lines, &n, data->Contents, data->MainClass, 0,
- header_file, module_name, flags);
-
- vtkParse_Free(data);
-
- return lines;
-}
-
-/**
- * Read a hierarchy file into "lines" without duplicating lines
- */
-static char **vtkWrapHierarchy_ReadHierarchyFile(FILE *fp, char **lines)
-{
- char *line;
- size_t maxlen = 15;
- size_t i, n;
-
- line = (char *)malloc(maxlen);
-
- if (lines == NULL)
- {
- lines = (char **)malloc(sizeof(char *));
- lines[0] = NULL;
- }
-
- while (fgets(line, (int)maxlen, fp))
- {
- n = strlen(line);
-
- /* if buffer not long enough, increase it */
- while (n == maxlen-1 && line[n-1] != '\n' && !feof(fp))
- {
- maxlen *= 2;
- line = (char *)realloc(line, maxlen);
- if (!fgets(&line[n], (int)(maxlen-n), fp)) { break; }
- n += strlen(&line[n]);
- }
-
- while (n > 0 && isspace(line[n-1]))
- {
- n--;
- }
- line[n] = '\0';
-
- if (line[0] == '\0')
- {
- continue;
- }
-
- for (i = 0; lines[i] != NULL; i++)
- {
- if (strcmp(line, lines[i]) == 0)
- {
- break;
- }
- }
-
- if (lines[i] == NULL)
- {
- /* allocate more memory if n+1 is a power of two */
- if (((i+1) & i) == 0)
- {
- lines = (char **)realloc(lines, (i+1)*2*sizeof(char *));
- }
-
- lines[i] = (char *)malloc(n+1);
- strcpy(lines[i], line);
- lines[i+1] = NULL;
- }
- }
-
- free(line);
-
- if (!feof(fp))
- {
- free(lines);
- return 0;
- }
-
- return lines;
-}
-
-/**
- * Compare a file to "lines", return 0 if they are different
- */
-static int vtkWrapHierarchy_CompareHierarchyFile(FILE *fp, char *lines[])
-{
- unsigned char *matched;
- char *line;
- size_t maxlen = 15;
- size_t i, n;
-
- line = (char *)malloc(maxlen);
-
- for (i = 0; lines[i] != NULL; i++) { ; };
- matched = (unsigned char *)malloc(i);
- memset(matched, 0, i);
-
- while (fgets(line, (int)maxlen, fp))
- {
- n = strlen(line);
-
- /* if buffer not long enough, increase it */
- while (n == maxlen-1 && line[n-1] != '\n' && !feof(fp))
- {
- maxlen *= 2;
- line = (char *)realloc(line, maxlen);
- if (!fgets(&line[n], (int)(maxlen-n), fp)) { break; }
- n += strlen(&line[n]);
- }
-
- while (n > 0 && isspace(line[n-1]))
- {
- n--;
- }
- line[n] = '\0';
-
- if (line[0] == '\0')
- {
- continue;
- }
-
- for (i = 0; lines[i] != NULL; i++)
- {
- if (strcmp(line, lines[i]) == 0)
- {
- break;
- }
- }
-
- if (lines[i] == NULL)
- {
- free(matched);
- return 0;
- }
-
- matched[i] = 1;
- }
-
- for (i = 0; lines[i] != NULL; i++)
- {
- if (matched[i] == 0)
- {
- free(matched);
- return 0;
- }
- }
-
- free(line);
- free(matched);
-
- if (!feof(fp))
- {
- return 0;
- }
-
- return 1;
-}
-
-/**
- * Write "lines" to a hierarchy file
- */
-static int vtkWrapHierarchy_WriteHierarchyFile(FILE *fp, char *lines[])
-{
- size_t i;
-
- for (i = 0; lines[i] != NULL; i++)
- {
- if (fprintf(fp, "%s\n", lines[i]) < 0)
- {
- return 0;
- }
- }
-
- return 1;
-}
-
-/**
- * Try to parse a header file, print error and exit if fail
- */
-static char **vtkWrapHierarchy_TryParseHeaderFile(
- const char *file_name, const char *module_name,
- const char *flags, char **lines)
-{
- FILE *input_file;
-
- input_file = fopen(file_name, "r");
-
- if (!input_file)
- {
- fprintf(stderr, "vtkWrapHierarchy: couldn't open file %s\n",
- file_name);
- exit(1);
- }
-
- lines = vtkWrapHierarchy_ParseHeaderFile(
- input_file, file_name, module_name, flags, lines);
-
- if (!lines)
- {
- fclose(input_file);
- exit(1);
- }
- fclose(input_file);
-
- return lines;
-}
-
-/**
- * Try to read a file, print error and exit if fail
- */
-static char **vtkWrapHierarchy_TryReadHierarchyFile(
- const char *file_name, char **lines)
-{
- FILE *input_file;
-
- input_file = fopen(file_name, "r");
- if (!input_file)
- {
- fprintf(stderr, "vtkWrapHierarchy: couldn't open file %s\n",
- file_name);
- exit(1);
- }
-
- lines = vtkWrapHierarchy_ReadHierarchyFile(input_file, lines);
- if (!lines)
- {
- fclose(input_file);
- fprintf(stderr, "vtkWrapHierarchy: error reading file %s\n",
- file_name);
- exit(1);
- }
- fclose(input_file);
-
- return lines;
-}
-
-/**
- * Try to write a file, print error and exit if fail
- */
-static int vtkWrapHierarchy_TryWriteHierarchyFile(
- const char *file_name, char *lines[])
-{
- FILE *output_file;
- int matched = 0;
-
- output_file = fopen(file_name, "r");
- if (output_file && vtkWrapHierarchy_CompareHierarchyFile(output_file, lines))
- {
- matched = 1;
- }
- if (output_file)
- {
- fclose(output_file);
- }
-
- if (!matched)
- {
- int tries = 1;
- output_file = fopen(file_name, "w");
- while (!output_file && tries < 5)
- {
- /* There are two CMAKE_CUSTOM_COMMANDS for vtkWrapHierarchy,
- * make sure they do not collide. */
- tries++;
-#ifdef _WIN32
- Sleep(1000);
-#else
- sleep(1);
-#endif
- output_file = fopen(file_name, "r+");
- if (output_file &&
- vtkWrapHierarchy_CompareHierarchyFile(output_file, lines))
- {
- /* if the contents match, no need to write it */
- fclose(output_file);
- return 0;
- }
- if (output_file)
- {
- /* close and open in order to truncate the file */
- fclose(output_file);
- output_file = fopen(file_name, "w");
- }
- }
- if (!output_file)
- {
- fprintf(stderr, "vtkWrapHierarchy: tried %i times to write %s\n",
- tries, file_name);
- exit(1);
- }
- if (!vtkWrapHierarchy_WriteHierarchyFile(output_file, lines))
- {
- fclose(output_file);
- fprintf(stderr, "vtkWrapHierarchy: error writing file %s\n",
- file_name);
- exit(1);
- }
- fclose(output_file);
- }
-
- return 0;
-}
-
-static int string_compare(const void *vp1, const void *vp2)
-{
- return strcmp(*(const char **)vp1, *(const char **)vp2);
-}
-
-int main(int argc, char *argv[])
-{
- OptionInfo *options;
- int i;
- size_t j, n;
- char **lines = 0;
- char **files = 0;
- char *flags;
- char *module_name;
-
- /* parse command-line options */
- vtkParse_MainMulti(argc, argv);
- options = vtkParse_GetCommandLineOptions();
-
- /* make sure than an output file was given on the command line */
- if (options->OutputFileName == NULL)
- {
- fprintf(stderr, "No output file was specified\n");
- exit(1);
- }
-
- /* read the data file */
- files = vtkWrapHierarchy_TryReadHierarchyFile(
- options->InputFileName, files);
-
- /* read in all the prior files */
- for (i = 1; i < options->NumberOfFiles; i++)
- {
- lines = vtkWrapHierarchy_TryReadHierarchyFile(
- options->Files[i], lines);
- }
-
- /* merge the files listed in the data file */
- for (i = 0; files[i] != NULL; i++)
- {
- /* look for semicolon that marks the module name */
- module_name = files[i];
- while(*module_name != ';' && *module_name != '\0') { module_name++; };
- if (*module_name == ';') { *module_name++ = '\0'; }
-
- /* look for semicolon that marks start of flags */
- flags = module_name;
- while(*flags != ';' && *flags != '\0') { flags++; };
- if (*flags == ';') { *flags++ = '\0'; }
-
- lines = vtkWrapHierarchy_TryParseHeaderFile(
- files[i], module_name, flags, lines);
- }
-
- /* sort the lines to ease lookups in the file */
- for (n = 0; lines[n]; n++) { ; };
- qsort(lines, n, sizeof(char *), &string_compare);
-
- /* write the file, if it has changed */
- vtkWrapHierarchy_TryWriteHierarchyFile(options->OutputFileName, lines);
-
- for (j = 0; j < n; j++)
- {
- free(lines[j]);
- }
-
- free(files);
- free(lines);
- return 0;
-}
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkWrapText.c
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-
-#include "vtkWrapText.h"
-#include "vtkWrap.h"
-#include <string.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-/* -------------------------------------------------------------------- */
-/* Convert special characters in a string into their escape codes
- * so that the string can be quoted in a source file. The specified
- * maxlen must be at least 32 chars, and should not be over 2047 since
- * that is the maximum length of a string literal on some systems */
-
-const char *vtkWrapText_QuoteString(
- const char *comment, size_t maxlen)
-{
- static char *result = 0;
- static size_t oldmaxlen = 0;
- size_t i, j, n;
-
- if (maxlen > oldmaxlen)
- {
- if (result)
- {
- free(result);
- }
- result = (char *)malloc((size_t)(maxlen+1));
- oldmaxlen = maxlen;
- }
-
- if (comment == NULL)
- {
- return "";
- }
-
- j = 0;
-
- n = strlen(comment);
- for (i = 0; i < n; i++)
- {
- if (comment[i] == '\"')
- {
- strcpy(&result[j],"\\\"");
- j += 2;
- }
- else if (comment[i] == '\\')
- {
- strcpy(&result[j],"\\\\");
- j += 2;
- }
- else if (comment[i] == '\n')
- {
- strcpy(&result[j],"\\n");
- j += 2;
- }
- else if ((comment[i] & 0x80) != 0 || isprint(comment[i]))
- {
- // all characters in extended-ASCII set are printable. Some compilers (VS
- // 2010, in debug mode) asserts when isprint() is passed a negative value.
- // Hence, we simply skip the check.
- result[j] = comment[i];
- j++;
- }
- else
- {
- sprintf(&result[j],"\\%3.3o",comment[i]);
- j += 4;
- }
- if (j >= maxlen - 21)
- {
- sprintf(&result[j]," ...\\n [Truncated]\\n");
- j += (int)strlen(" ...\\n [Truncated]\\n");
- break;
- }
- }
- result[j] = '\0';
-
- return result;
-}
-
-/* -------------------------------------------------------------------- */
-/* A simple string that grows as necessary. */
-
-struct vtkWPString
-{
- char *str;
- size_t len;
- size_t maxlen;
-};
-
-/* -- append ---------- */
-static void vtkWPString_Append(
- struct vtkWPString *str, const char *text)
-{
- size_t n = strlen(text);
-
- if (str->len + n + 1 > str->maxlen)
- {
- str->maxlen = (str->len + n + 1 + 2*str->maxlen);
- str->str = (char *)realloc(str->str, str->maxlen);
- }
-
- strncpy(&str->str[str->len], text, n);
- str->len += n;
- str->str[str->len] = '\0';
-}
-
-/* -- add a char ---------- */
-static void vtkWPString_PushChar(
- struct vtkWPString *str, char c)
-{
- if (str->len + 2 > str->maxlen)
- {
- str->maxlen = (str->len + 2 + 2*str->maxlen);
- str->str = (char *)realloc(str->str, str->maxlen);
- }
-
- str->str[str->len++] = c;
- str->str[str->len] = '\0';
-}
-
-/* -- strip any of the given chars from the end ---------- */
-static void vtkWPString_Strip(
- struct vtkWPString *str, const char *trailers)
-{
- size_t k = str->len;
- char *cp = str->str;
- size_t j = 0;
- size_t n;
-
- if (cp)
- {
- n = strlen(trailers);
-
- while (k > 0 && j < n)
- {
- for (j = 0; j < n; j++)
- {
- if (cp[k-1] == trailers[j])
- {
- k--;
- break;
- }
- }
- }
-
- str->len = k;
- str->str[k] = '\0';
- }
-}
-
-/* -- Return the last char ---------- */
-static char vtkWPString_LastChar(
- struct vtkWPString *str)
-{
- if (str->str && str->len > 0)
- {
- return str->str[str->len-1];
- }
- return '\0';
-}
-
-/* -- do a linebreak on a method declaration ---------- */
-static void vtkWPString_BreakSignatureLine(
- struct vtkWPString *str, size_t *linestart, size_t indentation)
-{
- size_t i = 0;
- size_t m = 0;
- size_t j = *linestart;
- size_t l = str->len;
- size_t k = str->len;
- char *text = str->str;
- char delim;
-
- if (!text)
- {
- return;
- }
-
- while (l > j && text[l-1] != '\n' && text[l-1] != ',' &&
- text[l-1] != '(' && text[l-1] != ')')
- {
- /* treat each string as a unit */
- if (l > 4 && (text[l-1] == '\'' || text[l-1] == '\"'))
- {
- delim = text[l-1];
- l -= 2;
- while (l > 3 && (text[l-1] != delim || text[l-3] == '\\'))
- {
- l--;
- if (text[l-1] == '\\')
- {
- l--;
- }
- }
- l -= 2;
- }
- else
- {
- l--;
- }
- }
-
- /* if none of these chars was found, split is impossible */
- if (text[l-1] != ',' && text[l-1] != '(' &&
- text[l-1] != ')' && text[l-1] != '\n')
- {
- j++;
- }
-
- else
- {
- /* Append some chars to guarantee size */
- vtkWPString_PushChar(str, '\n');
- vtkWPString_PushChar(str, '\n');
- for (i = 0; i < indentation; i++)
- {
- vtkWPString_PushChar(str, ' ');
- }
- /* re-get the char pointer, it may have been reallocated */
- text = str->str;
-
- if (k > l)
- {
- m = 0;
- while (m < indentation+2 && text[l+m] == ' ')
- {
- m++;
- }
- memmove(&text[l+indentation+2-m], &text[l], k-l);
- k += indentation+2-m;
- }
- else
- {
- k += indentation+2;
- }
- text[l++] = '\\'; text[l++] = 'n';
- j = l;
- for (i = 0; i < indentation; i++)
- {
- text[l++] = ' ';
- }
- }
-
- str->len = k;
-
- /* return the new line start position */
- *linestart = j;
-}
-
-/* -- do a linebreak on regular text ---------- */
-static void vtkWPString_BreakCommentLine(
- struct vtkWPString *str, size_t *linestart, size_t indent)
-{
- size_t i = 0;
- size_t j = *linestart;
- size_t l = str->len;
- char *text = str->str;
-
- if (!text)
- {
- return;
- }
-
- /* try to break the line at a word */
- while (l > 0 && text[l-1] != ' ' && text[l-1] != '\n')
- {
- l--;
- }
- if (l > 0 && text[l-1] != '\n' && l-j > indent)
- {
- /* replace space with newline */
- text[l-1] = '\n';
- j = l;
-
- /* Append some chars to guarantee size */
- vtkWPString_PushChar(str, '\n');
- vtkWPString_PushChar(str, '\n');
- for (i = 0; i < indent; i++)
- {
- vtkWPString_PushChar(str, ' ');
- }
- /* re-get the char pointer, it may have been reallocated */
- text = str->str;
- str->len -= indent+2;
-
- if (str->len > l && indent > 0)
- {
- memmove(&text[l+indent], &text[l], str->len-l);
- memset(&text[l], ' ', indent);
- str->len += indent;
- }
- }
- else
- {
- /* long word, just split the word */
- vtkWPString_PushChar(str, '\n');
- j = str->len;
- for (i = 0; i < indent; i++)
- {
- vtkWPString_PushChar(str, ' ');
- }
- }
-
- /* return the new line start position */
- *linestart = j;
-}
-
-/* -------------------------------------------------------------------- */
-/* Format a signature to a 70 char linewidth and char limit */
-const char *vtkWrapText_FormatSignature(
- const char *signature, size_t width, size_t maxlen)
-{
- static struct vtkWPString staticString = { NULL, 0, 0 };
- struct vtkWPString *text;
- size_t i, j, n;
- const char *cp = signature;
- char delim;
- size_t lastSigStart = 0;
- size_t sigCount = 0;
-
- text = &staticString;
- text->len = 0;
-
- if (signature == 0)
- {
- return "";
- }
-
- i = 0;
- j = 0;
-
- while (cp[i] != '\0')
- {
- while (text->len - j < width && cp[i] != '\n' && cp[i] != '\0')
- {
- /* escape quotes */
- if (cp[i] == '\"' || cp[i] == '\'')
- {
- delim = cp[i];
- vtkWPString_PushChar(text, '\\');
- vtkWPString_PushChar(text, cp[i++]);
- while (cp[i] != delim && cp[i] != '\0')
- {
- if (cp[i] == '\\')
- {
- vtkWPString_PushChar(text, '\\');
- }
- vtkWPString_PushChar(text, cp[i++]);
- }
- if (cp[i] == delim)
- {
- vtkWPString_PushChar(text, '\\');
- vtkWPString_PushChar(text, cp[i++]);
- }
- }
- /* remove items that trail the closing parenthesis */
- else if (cp[i] == ')')
- {
- vtkWPString_PushChar(text, cp[i++]);
- if (strncmp(&cp[i], " const", 6) == 0)
- {
- i += 6;
- }
- if (strncmp(&cp[i], " = 0", 4) == 0)
- {
- i += 4;
- }
- if (cp[i] == ';')
- {
- i++;
- }
- }
- /* anything else */
- else
- {
- vtkWPString_PushChar(text, cp[i++]);
- }
- }
-
- /* break the line (try to break after a comma) */
- if (cp[i] != '\n' && cp[i] != '\0')
- {
- vtkWPString_BreakSignatureLine(text, &j, 4);
- }
- /* reached end of line: do next signature */
- else
- {
- vtkWPString_Strip(text, " \r\t");
- if (cp[i] != '\0')
- {
- sigCount++;
- /* if sig count is even, check length against maxlen */
- if ((sigCount & 1) == 0)
- {
- n = strlen(text->str);
- if (n >= maxlen)
- {
- break;
- }
- lastSigStart = n;
- }
-
- i++;
- vtkWPString_PushChar(text, '\\');
- vtkWPString_PushChar(text, 'n');
- }
- /* mark the position of the start of the line */
- j = text->len;
- }
- }
-
- vtkWPString_Strip(text, " \r\t");
-
- if (strlen(text->str) >= maxlen)
- {
- /* terminate before the current signature */
- text->str[lastSigStart] = '\0';
- }
-
- return text->str;
-}
-
-/* -------------------------------------------------------------------- */
-/* Format a comment to a 70 char linewidth, in several steps:
- * 1) remove html tags, convert <p> and <br> into breaks
- * 2) remove doxygen tags like \em
- * 3) remove extra whitespace (except paragraph breaks)
- * 4) re-break the lines
- */
-
-const char *vtkWrapText_FormatComment(
- const char *comment, size_t width)
-{
- static struct vtkWPString staticString = { NULL, 0, 0 };
- struct vtkWPString *text;
- const char *cp;
- size_t i, j, l;
- size_t indent = 0;
- int nojoin = 0;
- int start;
-
- text = &staticString;
- text->len = 0;
-
- if (comment == 0)
- {
- return "";
- }
-
- i = 0; j = 0; l = 0;
- start = 1;
- cp = comment;
-
- /* skip any leading whitespace */
- while (cp[i] == '\n' || cp[i] == '\r' ||
- cp[i] == '\t' || cp[i] == ' ')
- {
- i++;
- }
-
- while (cp[i] != '\0')
- {
- /* Add characters until the output line is complete */
- while (cp[i] != '\0' && text->len-j < width)
- {
- /* if the end of the line was found, see how next line begins */
- if (start)
- {
- /* eat the leading space */
- if (cp[i] == ' ')
- {
- i++;
- }
-
- /* skip ahead to find any interesting first characters */
- l = i;
- while (cp[l] == ' ' || cp[l] == '\t' || cp[l] == '\r')
- {
- l++;
- }
-
- /* check for new section */
- if (cp[l] == '.' && strncmp(&cp[l], ".SECTION", 8) == 0)
- {
- vtkWPString_Strip(text, "\n");
- if (text->len > 0)
- {
- vtkWPString_PushChar(text, '\n');
- vtkWPString_PushChar(text, '\n');
- }
- i = l+8;
- while (cp[i] == '\r' || cp[i] == '\t' || cp[i] == ' ')
- {
- i++;
- }
- while (cp[i] != '\n' && cp[i] != '\0')
- {
- vtkWPString_PushChar(text, cp[i++]);
- }
- vtkWPString_Strip(text, " \t\r");
-
- if (vtkWPString_LastChar(text) != ':')
- {
- vtkWPString_PushChar(text, ':');
- }
- vtkWPString_PushChar(text, '\n');
- vtkWPString_PushChar(text, '\n');
- j = text->len;
- indent = 0;
- if (cp[i] == '\n')
- {
- i++;
- }
- start = 1;
- continue;
- }
-
- /* handle doxygen tags that appear at start of line */
- if (cp[l] == '\\' || cp[l] == '@')
- {
- if (strncmp(&cp[l+1], "brief", 5) == 0 ||
- strncmp(&cp[l+1], "short", 5) == 0 ||
- strncmp(&cp[l+1], "pre", 3) == 0 ||
- strncmp(&cp[l+1], "post", 4) == 0 ||
- strncmp(&cp[l+1], "param", 5) == 0 ||
- strncmp(&cp[l+1], "tparam", 6) == 0 ||
- strncmp(&cp[l+1], "cmdparam", 8) == 0 ||
- strncmp(&cp[l+1], "exception", 9) == 0 ||
- strncmp(&cp[l+1], "return", 6) == 0 ||
- strncmp(&cp[l+1], "li", 2) == 0)
- {
- nojoin = 2;
- indent = 4;
- if (text->len > 0 && vtkWPString_LastChar(text) != '\n')
- {
- vtkWPString_PushChar(text, '\n');
- }
- j = text->len;
- i = l;
- }
- }
-
- /* handle bullets and numbering */
- else if (cp[l] == '-' || cp[l] == '*' || cp[l] == '#' ||
- (cp[l] >= '0' && cp[l] <= '9' &&
- (cp[l+1] == ')' || cp[l+1] == '.') && cp[l+2] == ' '))
- {
- indent = 0;
- while (indent < 3 && cp[l+indent] != ' ')
- {
- indent++;
- }
- indent++;
- if (text->len > 0 && vtkWPString_LastChar(text) != '\n')
- {
- vtkWPString_PushChar(text, '\n');
- }
- j = text->len;
- i = l;
- }
-
- /* keep paragraph breaks */
- else if (cp[l] == '\n')
- {
- i = l+1;
- vtkWPString_Strip(text, "\n");
- if (text->len > 0)
- {
- vtkWPString_PushChar(text, '\n');
- vtkWPString_PushChar(text, '\n');
- }
- nojoin = 0;
- indent = 0;
- j = text->len;
- start = 1;
- continue;
- }
-
- /* add newline if nojoin is not set */
- else if (nojoin ||
- (cp[i] == ' ' && !indent))
- {
- if (nojoin == 2)
- {
- nojoin = 0;
- indent = 0;
- }
- vtkWPString_PushChar(text, '\n');
- j = text->len;
- }
-
- /* do line joining */
- else if (text->len > 0 && vtkWPString_LastChar(text) != '\n')
- {
- i = l;
- vtkWPString_PushChar(text, ' ');
- }
- }
-
- /* handle quotes */
- if (cp[i] == '\"')
- {
- size_t q = i;
- size_t r = text->len;
-
- /* try to keep the quote whole */
- vtkWPString_PushChar(text, cp[i++]);
- while (cp[i] != '\"' && cp[i] != '\r' &&
- cp[i] != '\n' && cp[i] != '\0')
- {
- vtkWPString_PushChar(text, cp[i++]);
- }
- /* if line ended before quote did, then reset */
- if (cp[i] != '\"')
- {
- i = q;
- text->len = r;
- }
- }
- else if (cp[i] == '\'')
- {
- size_t q = i;
- size_t r = text->len;
-
- /* try to keep the quote whole */
- vtkWPString_PushChar(text, cp[i++]);
- while (cp[i] != '\'' && cp[i] != '\r' &&
- cp[i] != '\n' && cp[i] != '\0')
- {
- vtkWPString_PushChar(text, cp[i++]);
- }
- /* if line ended before quote did, then reset */
- if (cp[i] != '\'')
- {
- i = q;
- text->len = r;
- }
- }
-
- /* handle simple html tags */
- else if (cp[i] == '<')
- {
- l = i+1;
- if (cp[l] == '/') { l++; }
- while ((cp[l] >= 'a' && cp[l] <= 'z') ||
- (cp[l] >= 'a' && cp[l] <= 'z')) { l++; }
- if (cp[l] == '>')
- {
- if (cp[i+1] == 'p' || cp[i+1] == 'P' ||
- (cp[i+1] == 'b' && cp[i+2] == 'r') ||
- (cp[i+1] == 'B' && cp[i+2] == 'R'))
- {
- vtkWPString_Strip(text, " \n");
- vtkWPString_PushChar(text, '\n');
- vtkWPString_PushChar(text, '\n');
- j = text->len;
- indent = 0;
- }
- i = l+1;
- while (cp[i] == '\r' || cp[i] == '\t' || cp[i] == ' ')
- {
- i++;
- }
- }
- }
- else if (cp[i] == '\\' || cp[i] == '@')
- {
- /* handle simple doxygen tags */
- if (strncmp(&cp[i+1], "em ", 3) == 0)
- {
- i += 4;
- }
- else if (strncmp(&cp[i+1], "a ", 2) == 0 ||
- strncmp(&cp[i+1], "e ", 2) == 0 ||
- strncmp(&cp[i+1], "c ", 2) == 0 ||
- strncmp(&cp[i+1], "b ", 2) == 0 ||
- strncmp(&cp[i+1], "p ", 2) == 0 ||
- strncmp(&cp[i+1], "f$", 2) == 0 ||
- strncmp(&cp[i+1], "f[", 2) == 0 ||
- strncmp(&cp[i+1], "f]", 2) == 0)
- {
- if (i > 0 && cp[i-1] != ' ')
- {
- vtkWPString_PushChar(text, ' ');
- }
- if (cp[i+1] == 'f')
- {
- if (cp[i+2] == '$')
- {
- vtkWPString_PushChar(text, '$');
- }
- else
- {
- vtkWPString_PushChar(text, '\\');
- vtkWPString_PushChar(text, cp[i+2]);
- }
- }
- i += 3;
- }
- else if (cp[i+1] == '&' || cp[i+1] == '$' || cp[i+1] == '#' ||
- cp[i+1] == '<' || cp[i+1] == '>' || cp[i+1] == '%' ||
- cp[i+1] == '@' || cp[i+1] == '\\' || cp[i+1] == '\"')
- {
- i++;
- }
- else if (cp[i+1] == 'n')
- {
- vtkWPString_Strip(text, " \n");
- vtkWPString_PushChar(text, '\n');
- vtkWPString_PushChar(text, '\n');
- indent = 0;
- i += 2;
- j = text->len;
- }
- else if (strncmp(&cp[i+1], "code", 4) == 0)
- {
- nojoin = 1;
- i += 5;
- while (cp[i] == ' ' || cp[i] == '\r' ||
- cp[i] == '\t' || cp[i] == '\n')
- {
- i++;
- }
- }
- else if (strncmp(&cp[i+1], "endcode", 7) == 0)
- {
- nojoin = 0;
- i += 8;
- l = i;
- while (cp[l] == ' ' || cp[l] == '\t' || cp[l] == '\r')
- {
- l++;
- }
- if (cp[l] == '\n')
- {
- i = l;
- vtkWPString_PushChar(text, '\n');
- j = text->len;
- }
- }
- else if (strncmp(&cp[i+1], "verbatim", 8) == 0)
- {
- i += 9;
- while (cp[i] != '\0' && ((cp[i] != '@' && cp[i] != '\\') ||
- strncmp(&cp[i+1], "endverbatim", 11) != 0))
- {
- if (cp[i] != '\r')
- {
- vtkWPString_PushChar(text, cp[i]);
- }
- if (cp[i] == '\n')
- {
- j = text->len;
- }
- i++;
- }
- if (cp[i] != '\0')
- {
- i += 12;
- }
- }
- }
-
- /* search for newline */
- start = 0;
- l = i;
- while (cp[l] == ' ' || cp[l] == '\t' || cp[l] == '\r')
- {
- l++;
- }
- if (cp[l] == '\n')
- {
- i = l+1;
- start = 1;
- }
-
- /* append */
- else if (cp[i] != '\0')
- {
- vtkWPString_PushChar(text, cp[i++]);
- }
-
- } /* while (cp[i] != '\0' && text->len-j < width) */
-
- if (cp[i] == '\0')
- {
- break;
- }
-
- vtkWPString_BreakCommentLine(text, &j, indent);
- }
-
- /* remove any trailing blank lines */
- vtkWPString_Strip(text, "\n");
- vtkWPString_PushChar(text, '\n');
-
- return text->str;
-}
-
-/* -------------------------------------------------------------------- */
-/* Create a signature for the python version of a method. */
-
-static void vtkWrapText_PythonTypeSignature(
- struct vtkWPString *result, const char *delims[2], ValueInfo *arg);
-
-static void vtkWrapText_PythonArraySignature(
- struct vtkWPString *result, const char *classname,
- const char *delims[2], int ndim, const char **dims);
-
-const char *vtkWrapText_PythonSignature(
- FunctionInfo *currentFunction)
-{
- /* string is intentionally not freed until the program exits */
- static struct vtkWPString staticString = { NULL, 0, 0 };
- struct vtkWPString *result;
- ValueInfo *arg, *ret;
- const char *parens[2] = { "(", ")" };
- const char *braces[2] = { "[", "]" };
- const char **delims;
- int i, n;
-
- n = vtkWrap_CountWrappedArgs(currentFunction);
-
- result = &staticString;
- result->len = 0;
-
- /* print out the name of the method */
- vtkWPString_Append(result, "V.");
- vtkWPString_Append(result, currentFunction->Name);
-
- /* print the arg list */
- vtkWPString_Append(result, "(");
-
- for (i = 0; i < n; i++)
- {
- arg = currentFunction->Arguments[i];
-
- if (i != 0)
- {
- vtkWPString_Append(result, ", ");
- }
-
- delims = parens;
- if (!vtkWrap_IsConst(arg) &&
- !vtkWrap_IsSetVectorMethod(currentFunction))
- {
- delims = braces;
- }
-
- vtkWrapText_PythonTypeSignature(result, delims, arg);
- }
-
- vtkWPString_Append(result, ")");
-
- /* if this is a void method, we are finished */
- /* otherwise, print "->" and the return type */
- ret = currentFunction->ReturnValue;
- if (ret && (ret->Type & VTK_PARSE_UNQUALIFIED_TYPE) != VTK_PARSE_VOID)
- {
- vtkWPString_Append(result, " -> ");
-
- vtkWrapText_PythonTypeSignature(result, parens, ret);
- }
-
- if (currentFunction->Signature)
- {
- vtkWPString_Append(result, "\nC++: ");
- vtkWPString_Append(result, currentFunction->Signature);
- }
-
- return result->str;
-}
-
-static void vtkWrapText_PythonTypeSignature(
- struct vtkWPString *result, const char *braces[2], ValueInfo *arg)
-{
- char text[32];
- const char *dimension;
- const char *classname = "";
-
- if (vtkWrap_IsVoid(arg))
- {
- classname = "void";
- }
- else if (vtkWrap_IsObject(arg))
- {
- classname = arg->Class;
- }
- else if (vtkWrap_IsFunction(arg))
- {
- classname = "function";
- }
- else if (vtkWrap_IsString(arg) || vtkWrap_IsCharPointer(arg))
- {
- classname = "string";
- if ((arg->Type & VTK_PARSE_BASE_TYPE) == VTK_PARSE_UNICODE_STRING)
- {
- classname = "unicode";
- }
- }
- else if (vtkWrap_IsChar(arg))
- {
- classname = "char";
- }
- else if (vtkWrap_IsBool(arg))
- {
- classname = "bool";
- }
- else if (vtkWrap_IsRealNumber(arg))
- {
- classname = "float";
- }
- else if (vtkWrap_IsInteger(arg))
- {
- classname = "int";
- }
-
- if (vtkWrap_IsArray(arg))
- {
- if (arg->CountHint)
- {
- vtkWPString_Append(result, braces[0]);
- vtkWPString_Append(result, classname);
- vtkWPString_Append(result, ", ...");
- vtkWPString_Append(result, braces[1]);
- }
- else
- {
- sprintf(text, "%d", arg->Count);
- dimension = text;
- vtkWrapText_PythonArraySignature(result, classname, braces,
- 1, &dimension);
- }
- }
- else if (vtkWrap_IsNArray(arg))
- {
- vtkWrapText_PythonArraySignature(result, classname, braces,
- arg->NumberOfDimensions, arg->Dimensions);
- }
- else
- {
- vtkWPString_Append(result, classname);
- }
-}
-
-static void vtkWrapText_PythonArraySignature(
- struct vtkWPString *result, const char *classname,
- const char *braces[2], int ndim, const char **dims)
-{
- int j, n;
-
- vtkWPString_Append(result, braces[0]);
- n = (int)strtoul(dims[0], 0, 0);
- if (ndim > 1)
- {
- for (j = 0; j < n; j++)
- {
- if (j != 0) { vtkWPString_Append(result, ", "); }
- vtkWrapText_PythonArraySignature(result, classname,
- braces, ndim-1, dims+1);
- }
- }
- else
- {
- for (j = 0; j < n; j++)
- {
- if (j != 0) { vtkWPString_Append(result, ", "); }
- vtkWPString_Append(result, classname);
- }
- }
- vtkWPString_Append(result, braces[1]);
-}
+++ /dev/null
-/*=========================================================================
-
- Program: Visualization Toolkit
- Module: vtkWrapText.h
-
- Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
- All rights reserved.
- See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
-
-=========================================================================*/
-
-/**
- * vtkWrap provides useful functions for generating wrapping code.
-*/
-
-#ifndef VTK_WRAP_TEXT_H
-#define VTK_WRAP_TEXT_H
-
-#include "vtkParse.h"
-#include "vtkParseHierarchy.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Quote a string for inclusion in a C string literal. The "maxlen"
- * should be set to a value between 32 and 2047. Values over 2047
- * will result in string literals too long for some compilers. If
- * the string is truncated, a "..." will be appended.
- */
-const char *vtkWrapText_QuoteString(const char *comment, size_t maxlen);
-
-/**
- * Format a doxygen comment for plain text, and word-wrap at
- * the specified width. A 70-char width is recommended.
- */
-const char *vtkWrapText_FormatComment(const char *comment, size_t width);
-
-/**
- * Format a method signature by applying word-wrap at the specified
- * width and taking special care not to split any literals or names.
- * A width of 70 chars is recommended.
- */
-const char *vtkWrapText_FormatSignature(
- const char *signature, size_t width, size_t maxlen);
-
-/**
- * Produce a python signature for a method, for use in documentation.
- */
-const char *vtkWrapText_PythonSignature(FunctionInfo *currentFunction);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
+++ /dev/null
-# Copyright (C) 2010-2013 CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-
-## Generation of the list of VTK classes (to be wrapped into IDLs)
-## =====================================
-IF(NOT SALOME_LIGHT_ONLY)
- # TODO: the below requires ParaView in the PYTHONPATH ... not so nice:
- MESSAGE(STATUS "Generating list of wrapped VTK classes ...")
- LIST(GET PARAVIEW_INCLUDE_DIRS 0 PARAVIEW_INCLUDE_DIR0)
- EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/getwrapclasses.py ${PARAVIEW_INCLUDE_DIR0}
- RESULT_VARIABLE _res)
- IF(NOT _res EQUAL 0)
- MESSAGE(FATAL_ERROR "Unable to run the Python script retrieving the list of VTK classes.")
- ENDIF()
-ENDIF()
-
-INCLUDE(GenerateWrapList.cmake)
-
-## Parser for VTK header files
-## ===========================
-##
-## Everything under the ParaView subdirectory is a pure copy of ParaView source
-## code.
-
-INCLUDE_DIRECTORIES(
- ${CMAKE_CURRENT_SOURCE_DIR}/ParaView
- ${PROJECT_BINARY_DIR}/idl
- ${PROJECT_SOURCE_DIR}/src/PVGUI
- )
-
-# Wrapper executable generating the headers, source files and IDL files
-# corresponding to VTK wrapping:
-SET(_wrap_PROGRAMS
- vtkWrapIDL_HH
- vtkWrapIDL_CC
- vtkWrapIDL
- )
-
-SET(vtkWrapIDL_HH_CPPFLAGS -DIDL_I_HH)
-SET(vtkWrapIDL_CC_CPPFLAGS -DIDL_I_CC)
-SET(vtkWrapIDL_CPPFLAGS)
-
-#VTN TODO: vtkParseData supports two types of structures for wrapping.
-#We use old structures currently, but is is not influent for results of wrapping.
-#It may be necessary to port vtkWrapIDL to new approach in future.
-#IF(VTK_LEGACY_REMOVE)
-# ADD_DEFINITIONS(-DVTK_PARSE_LEGACY_REMOVE)
-#ENDIF()
-
-FOREACH(name ${_wrap_PROGRAMS})
- ADD_EXECUTABLE(${name}
- ParaView/vtkParse.tab.c
- ParaView/vtkParsePreprocess.c
- ParaView/vtkParseHierarchy.c
- ParaView/vtkParseExtras.c
- ParaView/vtkParseMain.c
- ParaView/vtkParseData.c
- ParaView/vtkParseString.c
- ParaView/vtkWrap.c
-# ParaView/vtkWrapText.c
- ${PROJECT_SOURCE_DIR}/idl/vtkWrapIDL.c)
- ADD_DEPENDENCIES(${name} generate_txt)
-
- set_property(SOURCE ParaView/vtkParseMain.c PROPERTY COMPILE_DEFINITIONS
- VTK_PARSE_VERSION="${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}")
-
- SET(flags)
- FOREACH(f ${PARAVIEW_INCLUDES} ${VTK_INCLUDES} ${PLATFORM_CPPFLAGS} ${PTHREAD_CFLAGS} ${${name}_CPPFLAGS})
- SET(flags "${flags} ${f}")
- ENDFOREACH(f ${PARAVIEW_INCLUDES} ${VTK_INCLUDES} ${PLATFORM_CPPFLAGS} ${PTHREAD_CFLAGS} ${${name}_CPPFLAGS})
-
- SET_TARGET_PROPERTIES(${name} PROPERTIES COMPILE_FLAGS "${flags}")
- TARGET_LINK_LIBRARIES(${name} ${PLATFORM_LIBADD})
-
- SET(${name}_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/${name})
- IF(WINDOWS)
- IF(CMAKE_BUILD_TOOL STREQUAL nmake)
- SET(${name}_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/${name}.exe)
- ELSE(CMAKE_BUILD_TOOL STREQUAL nmake)
- SET(${name}_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${name}.exe)
- ENDIF(CMAKE_BUILD_TOOL STREQUAL nmake)
- ENDIF(WINDOWS)
- INSTALL(FILES ${${name}_EXEFILE} DESTINATION bin/salome PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
-ENDFOREACH(name ${_wrap_PROGRAMS})
-
-# Generate headers and sources corresponding to the IDL implementations:
-INCLUDE(wrap.cmake)
-
-## From 2.8.10, we should use:
-## SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
-ADD_LIBRARY(VTK_IDL_Impl OBJECT ${WRAP_IDL_I_CC})
-
-# Make the list of wrapped files visible from the top directory (will be used in PVGUI and idl):
-SET(WRAP_IDL_I_HH "${WRAP_IDL_I_HH}" PARENT_SCOPE)
-SET(WRAP_IDL_I_CC "${WRAP_IDL_I_CC}" PARENT_SCOPE)
+++ /dev/null
-# Copyright (C) 2010-2013 CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-ADD_CUSTOM_COMMAND(
- OUTPUT ${PROJECT_BINARY_DIR}/wrapfiles.txt
- COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/getwrapclasses.py
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/getwrapclasses.py ${PARAVIEW_PYTHON_EXECUTABLE}
-)
+++ /dev/null
-#!/bin/bash
-# Copyright (C) 2010-2013 CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-import sys
-import os
-
-ffile = "PARAVIS_CreateClass.cxx"
-wfile = os.path.join(sys.argv[1], "wrapfiles.txt")
-
-ffile_stream = open(ffile, "w")
-
-ffile_stream.write('#include <iostream>' + '\n')
-ffile_stream.write('#include <QString>' + '\n')
-ffile_stream.write('#include "PARAVIS_Gen_i.hh"' + '\n')
-wfile_stream = open(wfile)
-for line in wfile_stream:
- if line.split()[0] == "vtkWebGLExporter" :
- ffile_stream.write('#ifdef WIN32\n')
- ffile_stream.write(' #ifdef GetObject\n')
- ffile_stream.write(' #undef GetObject\n')
- ffile_stream.write(' #endif\n')
- ffile_stream.write('#endif\n')
- pass
- ffile_stream.write('#include "PARAVIS_Gen_%s_i.hh"'%(line.split()[0]) + '\n')
- pass
-wfile_stream.close()
-ffile_stream.write('' + '\n')
-ffile_stream.write('PARAVIS::PARAVIS_Base_i* CreateInstance(::vtkObjectBase* Inst, const QString& theClassName)' + '\n')
-ffile_stream.write('{' + '\n')
-wfile_stream = open(wfile)
-lst = []
-for line in wfile_stream:
- lst.append(line.split()[0])
- pass
-wfile_stream.close()
-lst.reverse()
-for item in lst:
- ffile_stream.write(' if(theClassName == "%s" || (Inst != NULL && Inst->IsA("%s")))'%(item, item) + '\n')
- ffile_stream.write(' return new PARAVIS::%s_i();'%(item) + '\n')
- pass
-ffile_stream.write('' + '\n')
-ffile_stream.write(' cerr << "The class " << theClassName.toStdString() << " is not created!" << endl;' + '\n')
-ffile_stream.write(' return new PARAVIS::PARAVIS_Base_i();' + '\n')
-ffile_stream.write('}' + '\n')
-ffile_stream.close()
+++ /dev/null
-#!/bin/bash
-# Copyright (C) 2010-2013 CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-file=PARAVIS_CreateClass.cxx
-wfile=$1/wrapfiles.txt
-
-echo '#include <iostream>' > $file
-echo '#include <QString>' >> $file
-echo '#include "PARAVIS_Gen_i.hh"' >> $file
-awk '{print "#include \"PARAVIS_Gen_"$1"_i.hh\"";}' $wfile >> $file
-echo '' >> $file
-echo 'PARAVIS::PARAVIS_Base_i* CreateInstance(::vtkObjectBase* Inst, const QString& theClassName)' >> $file
-echo '{' >> $file
-awk 'BEGIN {lst="";} {lst=lst" "$1;} END{i=split(lst,arr);for(j=i;j>0;j--) {print " if(theClassName == \""arr[j]"\" || (Inst != NULL && Inst->IsA(\""arr[j]"\")))";print " return new PARAVIS::"arr[j]"_i();"}}' $wfile >> $file
-echo '' >> $file
-echo ' cerr << "The class " << theClassName.toStdString() << " is not created!" << endl;' >> $file
-echo ' return new PARAVIS::PARAVIS_Base_i();' >> $file
-echo '}' >> $file
+++ /dev/null
-# Copyright (C) 2010-2013 CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-import paraview, os, sys
-import string
-import re
-
-classeslistsm = []
-classeslistvtk = []
-
-from vtkPVCommonPython import *
-from vtkPVClientServerCoreCorePython import *
-from vtkPVClientServerCoreDefaultPython import *
-from vtkPVClientServerCoreRenderingPython import *
-from vtkPVServerImplementationCorePython import *
-from vtkPVServerImplementationDefaultPython import *
-from vtkPVServerImplementationRenderingPython import *
-from vtkPVServerManagerApplicationPython import *
-from vtkPVServerManagerCorePython import *
-from vtkPVServerManagerDefaultPython import *
-from vtkPVServerManagerRenderingPython import *
-try:
- from vtkPVVTKExtensionsCorePython import *
-except:
- pass
-try:
- from vtkPVVTKExtensionsDefaultPython import *
-except:
- pass
-try:
- from vtkPVVTKExtensionsRenderingPython import *
-except:
- pass
-try:
- from vtkPVVTKExtensionsWebGLExporterPython import *
-except:
- pass
-
-l1 = dir()
-for a in l1:
- if a.startswith("vtk") and (len(a) > 3):
- classeslistsm.append(a)
-
-from paraview.vtk import *
-l2 = dir()
-
-for a in l2:
- if (a not in l1) and a.startswith("vtk"):
- classeslistvtk.append(a)
-
-dic=dict()
-
-non_wrap_list = ["vtkVariant", "vtkTimeStamp"]
-
-pv_classes_new=classeslistsm
-while len(pv_classes_new):
- pv_classes_cur=pv_classes_new
- pv_classes_new=[]
- for c in pv_classes_cur:
- ## ignore non wrappable classes
- if c in non_wrap_list:
- continue
- filename=sys.argv[1]+"/"+c+".h"
- if os.path.isfile(filename):
- c_new=[]
- f=open(filename)
- for line in f:
- if re.match('\s*/',line) is None:
- if re.match('\s*public\s*:',line):
- continue
-
- m=re.match('\s*class\s+(vtk\w+)\s*;',line)
- if m is not None:
- cn=m.group(1)
- if cn not in dic.keys() and cn not in pv_classes_new and cn in classeslistvtk and issubclass(globals()[cn], vtkObjectBase):
- pv_classes_new.append(cn)
- continue
-
- m=re.match('\s*struct\s+(vtk\w+)\s*;',line)
- if m is not None:
- cn=m.group(1)
- if cn not in dic.keys() and cn not in pv_classes_new and cn in classeslistvtk and issubclass(globals()[cn], vtkObjectBase):
- pv_classes_new.append(cn)
- continue
-
- m=re.match('\s*#include\s+"(vtk\w+)\.h"',line)
- if m is not None:
- cn=m.group(1)
- if cn not in dic.keys() and cn not in pv_classes_new and cn in classeslistvtk and issubclass(globals()[cn], vtkObjectBase):
- pv_classes_new.append(cn)
- continue
-
- cm=re.findall('public\s+(vtk\w+)',line)
- if len(cm) == 0:
- continue
- for cn in cm:
- ## do not extract Call Back classes
- if cn.count('vtkClassMemberCallback'):
- continue
- if cn not in dic.keys() and cn not in pv_classes_new:
- pv_classes_new.append(cn)
- if cn not in c_new:
- c_new.append(cn)
- f.close()
- dic[c]=[0, c_new]
-
-
-pv_classes_sort=[]
-
-def collect_dic(cc):
- ret=[]
- for c in cc:
- if c not in dic.keys():
- continue
- if len(dic[c][1]) and dic[c][0] == 0:
- ret+=collect_dic(dic[c][1])
- if dic[c][0] == 0:
- ret.append(c)
- dic[c][0]=1
- return ret
-
-pv_classes_sort=collect_dic(dic.keys())
-
-wf_str=""
-if(os.path.exists('wrapfiles.txt')):
- wf_txt=open('wrapfiles.txt','r')
- strs=wf_txt.readlines()
- wf_txt.close()
- for s in strs:
- wf_str+=s
-str=""
-
-for c in pv_classes_sort:
- str+=c
- for cc in dic[c][1]:
- str+=' '+cc
- str+='\n'
-
-if(str!=wf_str):
- wf_txt=open('wrapfiles.txt','w')
- wf_txt.write(str)
- wf_txt.close()
+++ /dev/null
-The files under the ParaView directory are pure copy from Paraview sources.
-They need for extractor building.
-Them has to be updated if the corresponded files in paraview will be changed
\ No newline at end of file
+++ /dev/null
-# Copyright (C) 2010-2013 CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-LIST(GET PARAVIEW_INCLUDE_DIRS 0 PARAVIEW_INCLUDE_DIR0)
-
-SET(WRAP_IDL_I_HH)
-SET(WRAP_IDL_I_CC)
-
-IF(EXISTS ${CMAKE_BINARY_DIR}/wrapfiles.txt)
- EXECUTE_PROCESS(
- COMMAND ${PYTHON_EXECUTABLE} -c "f = open('${CMAKE_BINARY_DIR}/wrapfiles.txt') ; print f.read(), ; f.close()"
- OUTPUT_VARIABLE WRAP_LIST_FULL
- )
-
- STRING(REGEX MATCHALL "[^\n]+" WRAP_LIST_REG ${WRAP_LIST_FULL})
- FOREACH(_str ${WRAP_LIST_REG})
-
- SEPARATE_ARGUMENTS(_str)
- LIST(LENGTH _str WRAP_LEN)
- SET(DEP_HH)
- SET(DEP_CC)
-
- LIST(GET _str 0 VAL)
-
- IF(WRAP_LEN GREATER 1)
- MATH(EXPR WRAP_LEN1 "${WRAP_LEN} - 1" )
-
- FOREACH(IND RANGE 1 ${WRAP_LEN1})
- LIST(GET _str ${IND} DEP_VAL)
- SET(DEP_HH ${DEP_HH} PARAVIS_Gen_${DEP_VAL}_i.hh)
- SET(DEP_CC ${DEP_CC} PARAVIS_Gen_${DEP_VAL}_i.cc)
- ENDFOREACH(IND RANGE 1 ${WRAP_LEN1})
-
- ENDIF(WRAP_LEN GREATER 1)
-
- LIST(APPEND WRAP_IDL_I_HH PARAVIS_Gen_${VAL}_i.hh)
- LIST(APPEND WRAP_IDL_I_CC PARAVIS_Gen_${VAL}_i.cc)
-
- SET(vtkWrapIDL_HH_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL_HH)
- IF(WINDOWS)
- IF(CMAKE_BUILD_TOOL STREQUAL nmake)
- SET(vtkWrapIDL_HH_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL_HH.exe)
- ELSE(CMAKE_BUILD_TOOL STREQUAL nmake)
- SET(vtkWrapIDL_HH_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/vtkWrapIDL_HH.exe)
- ENDIF(CMAKE_BUILD_TOOL STREQUAL nmake)
- ENDIF(WINDOWS)
-
- ADD_CUSTOM_COMMAND(
- OUTPUT PARAVIS_Gen_${VAL}_i.hh
- COMMAND ${vtkWrapIDL_HH_EXEFILE} -o PARAVIS_Gen_${VAL}_i.hh --hints ${CMAKE_BINARY_DIR}/idl/hints ${PARAVIEW_INCLUDE_DIR0}/${VAL}.h
- DEPENDS vtkWrapIDL_HH ${PARAVIEW_INCLUDE_DIR0}/${VAL}.h ${CMAKE_BINARY_DIR}/idl/hints ${DEP_HH}
- )
-
- SET(vtkWrapIDL_CC_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL_CC)
- IF(WINDOWS)
- IF(CMAKE_BUILD_TOOL STREQUAL nmake)
- SET(vtkWrapIDL_CC_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL_CC.exe)
- ELSE(CMAKE_BUILD_TOOL STREQUAL nmake)
- SET(vtkWrapIDL_CC_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/vtkWrapIDL_CC.exe)
- ENDIF(CMAKE_BUILD_TOOL STREQUAL nmake)
- ENDIF(WINDOWS)
-
- ADD_CUSTOM_COMMAND(
- OUTPUT PARAVIS_Gen_${VAL}_i.cc
- COMMAND ${vtkWrapIDL_CC_EXEFILE} -o PARAVIS_Gen_${VAL}_i.cc --hints ${CMAKE_BINARY_DIR}/idl/hints ${PARAVIEW_INCLUDE_DIR0}/${VAL}.h
- DEPENDS PARAVIS_Gen_${VAL}_i.hh vtkWrapIDL_CC ${PARAVIEW_INCLUDE_DIR0}/${VAL}.h ${CMAKE_BINARY_DIR}/idl/hints ${DEP_CC}
- )
-
- ENDFOREACH(_str ${WRAP_LIST_REG})
-ENDIF(EXISTS ${CMAKE_BINARY_DIR}/wrapfiles.txt)
-
-ADD_CUSTOM_TARGET(generate_implements ALL DEPENDS ${CMAKE_BINARY_DIR}/wrapfiles.txt ${WRAP_IDL_I_HH} ${WRAP_IDL_I_CC})
--- /dev/null
+# Copyright (C) 2010-2013 CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+ADD_CUSTOM_COMMAND(
+ OUTPUT ${PROJECT_BINARY_DIR}/wrapfiles.txt
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/getwrapclasses.py
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/getwrapclasses.py ${PARAVIEW_PYTHON_EXECUTABLE}
+)
--- /dev/null
+#line 2 "lex.yy.c"
+
+#line 4 "lex.yy.c"
+
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index. If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t yyleng;
+
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+ /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
+ * access to the local variable yy_act. Since yyless() is a macro, it would break
+ * existing scanners that call yyless() from OUTSIDE yylex.
+ * One obvious solution it to make yy_act a global. I tried that, and saw
+ * a 5% performance hit in a non-yylineno scanner, because yy_act is
+ * normally declared as a register variable-- so it is not worth it.
+ */
+ #define YY_LESS_LINENO(n) \
+ do { \
+ yy_size_t yyl;\
+ for ( yyl = n; yyl < yyleng; ++yyl )\
+ if ( yytext[yyl] == '\n' )\
+ --yylineno;\
+ }while(0)
+
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = (yy_hold_char); \
+ YY_RESTORE_YY_MORE_OFFSET \
+ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr) )
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ yy_size_t yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via yyrestart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+
+ };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+ : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0; /* whether we need to initialize */
+static int yy_start = 0; /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin. A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart (FILE *input_file );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
+void yy_delete_buffer (YY_BUFFER_STATE b );
+void yy_flush_buffer (YY_BUFFER_STATE b );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
+void yypop_buffer_state (void );
+
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len );
+
+void *yyalloc (yy_size_t );
+void *yyrealloc (void *,yy_size_t );
+void yyfree (void * );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){\
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+typedef unsigned char YY_CHAR;
+
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int yylineno;
+
+int yylineno = 1;
+
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[] );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ (yytext_ptr) = yy_bp; \
+ yyleng = (size_t) (yy_cp - yy_bp); \
+ (yy_hold_char) = *yy_cp; \
+ *yy_cp = '\0'; \
+ (yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 173
+#define YY_END_OF_BUFFER 174
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_accept[1116] =
+ { 0,
+ 0, 0, 174, 172, 142, 143, 143, 171, 172, 171,
+ 171, 172, 171, 171, 171, 171, 171, 171, 171, 140,
+ 139, 171, 171, 171, 171, 133, 133, 133, 133, 133,
+ 133, 169, 172, 170, 171, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 171, 142, 11, 11, 14, 171,
+ 172, 142, 164, 0, 15, 0, 157, 161, 158, 0,
+ 0, 0, 116, 117, 0, 0, 0, 0, 155, 151,
+ 153, 152, 154, 149, 147, 0, 134, 1, 13, 156,
+ 135, 138, 0, 0, 139, 139, 139, 168, 146, 165,
+
+ 163, 166, 150, 133, 133, 133, 133, 133, 133, 133,
+ 133, 141, 0, 160, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 70, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 159, 162, 142, 11, 14,
+ 0, 0, 14, 14, 12, 0, 15, 16, 16, 0,
+ 0, 0, 0, 0, 148, 167, 134, 134, 13, 135,
+ 135, 138, 138, 0, 136, 137, 144, 145, 133, 133,
+ 133, 133, 0, 133, 133, 133, 133, 133, 133, 133,
+
+ 133, 133, 68, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 25,
+ 133, 133, 133, 133, 58, 72, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 74, 12, 14, 12, 12, 12, 12, 0, 0,
+ 0, 0, 0, 0, 0, 134, 0, 135, 136, 137,
+ 133, 133, 133, 133, 0, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 66, 133, 133, 29,
+ 24, 133, 133, 133, 133, 133, 133, 42, 133, 133,
+
+ 133, 133, 133, 133, 23, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 0, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 28, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 12, 12, 12, 12,
+ 12, 12, 12, 12, 0, 0, 0, 0, 0, 133,
+ 133, 133, 133, 128, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 77, 37,
+ 78, 45, 133, 133, 133, 133, 133, 20, 133, 133,
+ 133, 133, 133, 133, 133, 71, 133, 133, 133, 133,
+
+ 133, 133, 22, 133, 133, 133, 133, 133, 0, 133,
+ 133, 133, 61, 133, 133, 43, 133, 57, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 12, 12, 12, 12, 12, 12,
+ 12, 2, 3, 0, 0, 0, 0, 0, 133, 133,
+ 133, 133, 128, 133, 133, 133, 121, 133, 133, 133,
+ 133, 133, 133, 133, 133, 69, 76, 133, 59, 19,
+ 133, 133, 52, 49, 50, 133, 133, 133, 73, 133,
+ 133, 133, 133, 39, 133, 133, 133, 27, 30, 133,
+ 51, 0, 0, 0, 133, 38, 133, 133, 133, 133,
+
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 75, 12, 12, 12, 2,
+ 3, 12, 12, 12, 2, 3, 0, 0, 0, 0,
+ 0, 133, 133, 133, 133, 133, 133, 133, 120, 133,
+ 131, 133, 133, 133, 21, 133, 133, 133, 133, 133,
+ 133, 47, 133, 133, 133, 40, 133, 0, 133, 133,
+ 133, 31, 133, 0, 0, 0, 124, 124, 133, 55,
+ 133, 133, 44, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 0, 12, 12, 12, 2, 3, 12,
+
+ 12, 12, 0, 0, 0, 0, 0, 118, 119, 121,
+ 17, 121, 32, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 60, 123, 123, 133, 48, 122,
+ 122, 0, 133, 0, 67, 133, 0, 36, 133, 0,
+ 0, 0, 53, 54, 26, 46, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 12,
+ 12, 12, 5, 12, 12, 0, 0, 0, 0, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 56, 0,
+ 41, 0, 133, 133, 0, 0, 0, 133, 133, 133,
+
+ 133, 133, 133, 133, 79, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 5, 12, 12, 5, 12, 12, 0, 0, 133, 132,
+ 133, 133, 130, 64, 133, 0, 0, 0, 133, 133,
+ 0, 0, 0, 133, 133, 133, 133, 133, 133, 133,
+ 18, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 5, 12, 12, 12, 12,
+ 0, 4, 133, 133, 133, 133, 0, 0, 0, 133,
+ 62, 0, 0, 0, 133, 133, 133, 81, 133, 133,
+ 133, 133, 80, 133, 133, 133, 133, 133, 133, 133,
+
+ 133, 106, 133, 133, 133, 133, 133, 133, 12, 12,
+ 12, 12, 0, 133, 133, 133, 63, 0, 0, 0,
+ 133, 0, 0, 133, 127, 133, 133, 133, 133, 133,
+ 133, 133, 133, 125, 133, 108, 110, 112, 102, 133,
+ 133, 133, 133, 107, 133, 133, 133, 12, 12, 12,
+ 12, 0, 133, 133, 129, 0, 0, 0, 33, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 109, 111, 113, 133, 133, 133, 12, 12, 12, 12,
+ 12, 12, 12, 0, 133, 133, 0, 34, 0, 133,
+
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 114, 115, 133,
+ 133, 133, 133, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 0, 133, 104, 0, 133, 87, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 6, 133,
+ 0, 35, 65, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 84, 133, 133, 133, 133, 133, 133, 133,
+ 133, 126, 133, 133, 12, 12, 12, 12, 6, 12,
+
+ 12, 12, 12, 6, 133, 133, 133, 86, 83, 133,
+ 133, 133, 133, 97, 85, 82, 133, 133, 133, 133,
+ 96, 133, 133, 133, 12, 12, 12, 12, 6, 12,
+ 12, 12, 12, 105, 133, 133, 92, 93, 94, 95,
+ 88, 89, 90, 91, 133, 133, 133, 12, 12, 12,
+ 12, 12, 12, 12, 12, 133, 133, 133, 133, 133,
+ 12, 12, 12, 12, 10, 12, 12, 12, 100, 133,
+ 103, 133, 133, 10, 12, 12, 12, 10, 12, 8,
+ 9, 133, 133, 133, 10, 12, 8, 9, 12, 8,
+ 9, 133, 133, 133, 12, 8, 9, 12, 133, 133,
+
+ 99, 12, 7, 133, 133, 7, 7, 133, 133, 7,
+ 133, 98, 133, 101, 0
+ } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
+ 4, 4, 5, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 6, 7, 8, 9, 1, 10, 11, 12, 13,
+ 14, 15, 16, 14, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 25, 27, 25, 28, 14, 29,
+ 30, 31, 1, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 55, 56, 57, 40,
+ 58, 59, 60, 61, 62, 1, 63, 64, 65, 66,
+
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
+ 87, 88, 14, 89, 14, 14, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1
+ } ;
+
+static yyconst flex_int32_t yy_meta[90] =
+ { 0,
+ 1, 2, 3, 1, 2, 2, 1, 1, 1, 1,
+ 2, 4, 1, 1, 2, 1, 1, 5, 1, 6,
+ 6, 6, 6, 6, 6, 6, 6, 7, 1, 1,
+ 1, 1, 8, 8, 8, 8, 8, 8, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 1, 1, 1,
+ 1, 9, 8, 8, 8, 8, 8, 8, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 1
+ } ;
+
+static yyconst flex_int16_t yy_base[1153] =
+ { 0,
+ 0, 88, 2594, 2595, 90, 2595, 2595, 2563, 87, 2562,
+ 87, 2532, 97, 2595, 2560, 85, 88, 113, 91, 133,
+ 151, 2561, 84, 2558, 92, 63, 2525, 83, 42, 128,
+ 85, 2595, 124, 2595, 2556, 2523, 103, 120, 122, 136,
+ 119, 87, 125, 86, 79, 145, 147, 131, 148, 159,
+ 164, 162, 171, 106, 113, 252, 2595, 2595, 2525, 217,
+ 2512, 214, 2595, 158, 2595, 186, 2595, 2595, 2595, 223,
+ 227, 257, 2595, 2595, 116, 2554, 216, 209, 2595, 2595,
+ 2595, 2595, 2595, 2566, 2595, 2562, 254, 2595, 0, 2595,
+ 273, 293, 311, 0, 321, 341, 353, 2595, 2549, 2595,
+
+ 2595, 2595, 2548, 2515, 205, 227, 208, 335, 241, 142,
+ 239, 2595, 2573, 2595, 344, 221, 226, 240, 247, 203,
+ 242, 323, 321, 267, 324, 322, 339, 325, 332, 334,
+ 244, 328, 329, 352, 351, 356, 287, 2513, 357, 358,
+ 261, 361, 360, 362, 371, 378, 372, 366, 381, 383,
+ 386, 387, 389, 393, 390, 2595, 2595, 466, 2595, 2515,
+ 2554, 2501, 2512, 471, 447, 276, 248, 2595, 444, 2542,
+ 2541, 437, 433, 434, 2595, 2595, 466, 484, 0, 492,
+ 511, 521, 533, 541, 549, 557, 2595, 2595, 458, 417,
+ 478, 462, 2540, 2505, 461, 420, 523, 459, 293, 421,
+
+ 524, 80, 2504, 525, 536, 526, 534, 545, 539, 546,
+ 542, 541, 330, 553, 556, 549, 569, 567, 548, 2503,
+ 571, 573, 574, 576, 2502, 2501, 577, 603, 579, 582,
+ 585, 584, 583, 586, 588, 587, 593, 437, 590, 625,
+ 602, 599, 594, 607, 613, 617, 616, 614, 291, 618,
+ 661, 2500, 683, 679, 0, 665, 2509, 2508, 2481, 2476,
+ 716, 656, 666, 658, 723, 731, 739, 747, 755, 763,
+ 662, 663, 670, 664, 0, 758, 743, 647, 666, 731,
+ 672, 741, 732, 637, 668, 770, 2495, 742, 744, 2494,
+ 2493, 753, 747, 754, 757, 761, 750, 2492, 746, 771,
+
+ 776, 778, 779, 673, 2491, 780, 781, 808, 784, 786,
+ 674, 787, 790, 797, 791, 794, 798, 804, 2490, 802,
+ 811, 2523, 801, 816, 812, 467, 817, 822, 823, 825,
+ 826, 2488, 828, 827, 833, 829, 835, 837, 839, 838,
+ 844, 845, 846, 849, 850, 876, 0, 900, 2497, 2496,
+ 868, 2480, 2490, 2489, 2470, 2476, 894, 895, 896, 873,
+ 880, 895, 893, 0, 877, 896, 887, 900, 883, 885,
+ 886, 890, 884, 927, 894, 892, 898, 899, 2480, 2479,
+ 2478, 2477, 905, 907, 908, 906, 914, 2476, 916, 913,
+ 921, 919, 923, 924, 925, 2475, 929, 926, 932, 933,
+
+ 934, 937, 2474, 938, 940, 968, 2473, 948, 938, 949,
+ 952, 958, 2472, 955, 961, 2471, 963, 2470, 964, 966,
+ 967, 969, 970, 971, 983, 974, 976, 980, 979, 978,
+ 985, 981, 993, 992, 1014, 2464, 2474, 2473, 2495, 2490,
+ 2445, 0, 0, 2458, 2444, 1034, 1035, 1036, 1016, 1017,
+ 1034, 1035, 0, 1020, 1036, 1040, 1026, 1014, 1018, 1021,
+ 1019, 1025, 1065, 1031, 1039, 2461, 2460, 1054, 2459, 2458,
+ 1041, 1037, 2457, 2456, 2455, 1043, 1045, 1047, 2454, 1049,
+ 1053, 1055, 1051, 1118, 1063, 1052, 1067, 2453, 2452, 1094,
+ 2451, 2431, 2430, 2428, 1180, 2447, 1072, 1073, 1074, 1075,
+
+ 1076, 1077, 1078, 1081, 1083, 1108, 1084, 1104, 1181, 1096,
+ 1101, 1099, 1151, 1103, 1186, 2446, 2474, 2469, 2424, 0,
+ 0, 2459, 2468, 2437, 0, 0, 2426, 2432, 1187, 1139,
+ 1216, 1116, 1117, 1184, 1168, 1187, 1190, 1185, 2437, 1189,
+ 2436, 1155, 1172, 1192, 2435, 1183, 1196, 1198, 2434, 1194,
+ 1276, 2433, 1110, 1247, 1365, 1260, 1205, 1268, 1248, 1251,
+ 1336, 2432, 1278, 2411, 2410, 2411, 2595, 2428, 1249, 2427,
+ 1250, 1252, 2426, 1257, 1258, 1288, 1264, 1268, 1283, 1270,
+ 1284, 1337, 1338, 1286, 1291, 1293, 1339, 1294, 1340, 1367,
+ 1341, 1349, 1296, 2459, 2441, 2450, 2419, 0, 0, 2446,
+
+ 2430, 2401, 2413, 2416, 1376, 1385, 1429, 2595, 2450, 1368,
+ 2415, 1388, 2414, 2413, 1375, 2412, 1376, 1377, 1347, 1378,
+ 1379, 1381, 1380, 1408, 2411, 2595, 2410, 1395, 2409, 2595,
+ 2408, 1461, 1297, 2395, 2406, 1385, 1466, 2595, 1344, 2387,
+ 2386, 2394, 2402, 2401, 2400, 2399, 1386, 1394, 1396, 1414,
+ 1261, 1413, 1415, 1419, 1420, 1421, 1423, 1427, 1428, 1430,
+ 1429, 1436, 1384, 1434, 1438, 1460, 1440, 1441, 1469, 2423,
+ 2407, 2378, 0, 2416, 2385, 2379, 2389, 1509, 1523, 1470,
+ 1473, 1479, 1451, 1455, 1465, 1472, 1461, 1482, 2391, 2378,
+ 1547, 2374, 1492, 1474, 2383, 2382, 2372, 1485, 1478, 1498,
+
+ 1486, 1500, 1501, 1494, 2385, 1502, 1507, 1508, 1511, 1512,
+ 1513, 1515, 1517, 1518, 1519, 1523, 1525, 1529, 1528, 1527,
+ 0, 2405, 2374, 0, 2397, 2365, 2360, 2374, 1213, 2378,
+ 1536, 1535, 2377, 2376, 1531, 2360, 1608, 2354, 1537, 1541,
+ 2372, 2371, 2364, 1560, 1553, 1555, 1556, 1562, 1544, 1563,
+ 2370, 1564, 1566, 1567, 1568, 1569, 1572, 1573, 1624, 1575,
+ 1587, 1577, 1590, 1591, 1592, 0, 2384, 2352, 2383, 2346,
+ 2364, 2595, 1605, 1608, 2364, 1595, 2343, 2350, 2342, 2360,
+ 2359, 2345, 2344, 0, 1599, 1601, 1612, 2356, 1603, 1606,
+ 1604, 1631, 2355, 1609, 1610, 1616, 1618, 1619, 1656, 1661,
+
+ 1666, 2354, 1630, 1632, 1676, 1633, 1663, 1642, 2369, 2332,
+ 2407, 2341, 2329, 1652, 1668, 1669, 2348, 2328, 2331, 1706,
+ 1679, 0, 0, 1655, 2345, 1648, 1674, 1681, 1723, 1670,
+ 1692, 1694, 1729, 2344, 1698, 2343, 2342, 2341, 2340, 1686,
+ 1701, 1707, 1716, 2339, 1696, 1688, 1700, 2394, 2328, 1735,
+ 2321, 2326, 2334, 1711, 1705, 1777, 2313, 1787, 2595, 1725,
+ 1697, 1719, 1732, 1736, 1739, 1751, 1755, 1757, 1741, 1710,
+ 1744, 1746, 1765, 1766, 1767, 1769, 1758, 1796, 1798, 1761,
+ 2332, 2331, 2330, 1762, 1763, 1764, 1801, 2314, 2327, 2322,
+ 2321, 2320, 2310, 2308, 1805, 1784, 1842, 2595, 2303, 1770,
+
+ 1772, 1788, 1791, 1792, 1799, 1801, 1803, 1806, 1809, 1797,
+ 1810, 1811, 1816, 1818, 1821, 1823, 1825, 2321, 2320, 1826,
+ 1827, 1829, 1830, 2318, 2313, 2312, 2311, 2301, 2292, 2294,
+ 2307, 2306, 2344, 2295, 1856, 2308, 1892, 1834, 2307, 1855,
+ 1839, 1842, 1845, 1846, 1850, 1859, 1851, 1837, 1861, 1863,
+ 1864, 1865, 1870, 1871, 1866, 1889, 1875, 1777, 1876, 2284,
+ 2286, 2299, 2298, 2336, 2296, 2297, 2355, 2354, 0, 1905,
+ 1947, 2595, 2297, 1885, 1892, 1880, 1883, 1893, 1894, 1896,
+ 1899, 1900, 2296, 1901, 1903, 1902, 1904, 1906, 1907, 1908,
+ 1909, 2295, 1919, 1921, 2289, 2290, 2348, 2341, 0, 2275,
+
+ 2249, 2287, 2248, 0, 1944, 1927, 1929, 2240, 2231, 1931,
+ 1932, 1933, 1934, 2222, 2213, 2204, 1935, 1937, 1938, 1939,
+ 2174, 1940, 1942, 1955, 2164, 2138, 2176, 2137, 0, 2109,
+ 2115, 2102, 2097, 2105, 1945, 1957, 2097, 2093, 2089, 2084,
+ 2076, 2071, 2059, 2054, 1958, 1961, 1981, 2030, 2036, 2032,
+ 2031, 2023, 2018, 2000, 1999, 1959, 1965, 1967, 1968, 1969,
+ 1998, 2000, 1996, 1995, 0, 1992, 1995, 1994, 2007, 1971,
+ 2005, 1972, 1975, 0, 1916, 1687, 1442, 0, 1154, 0,
+ 0, 1979, 1990, 1983, 0, 1024, 0, 0, 784, 0,
+ 0, 1985, 1986, 1989, 733, 0, 0, 629, 2008, 1992,
+
+ 550, 313, 0, 1996, 1993, 0, 0, 2000, 1998, 0,
+ 2002, 211, 2006, 47, 2595, 2083, 2092, 2100, 2105, 2109,
+ 2118, 2122, 2126, 2135, 2139, 2144, 2148, 2156, 2160, 2164,
+ 2173, 2175, 2179, 2188, 2197, 2206, 2215, 2224, 2233, 2242,
+ 2249, 2256, 2263, 2272, 2281, 2290, 2299, 2308, 2317, 2326,
+ 2335, 2344
+ } ;
+
+static yyconst flex_int16_t yy_def[1153] =
+ { 0,
+ 1115, 1, 1115, 1115, 1115, 1115, 1115, 1115, 1116, 1115,
+ 1115, 1117, 1118, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1119, 1115, 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1115, 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1115, 1115, 1115, 1115, 1121, 1115,
+ 1115, 1115, 1115, 1116, 1115, 1116, 1115, 1115, 1115, 1117,
+ 1117, 1118, 1115, 1115, 1122, 1122, 1122, 1122, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1123, 1115, 1124, 1115,
+ 1125, 1126, 1115, 1127, 1119, 1119, 1119, 1115, 1115, 1115,
+
+ 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1115, 1115, 1115, 1115, 1121,
+ 1115, 1115, 1121, 1121, 1128, 1115, 1116, 1115, 1117, 1122,
+ 1115, 1122, 1122, 1122, 1115, 1115, 1123, 1123, 1124, 1125,
+ 1125, 1126, 1126, 1115, 1129, 1130, 1115, 1115, 1120, 1120,
+ 1120, 1120, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1131, 1121, 1128, 1128, 1128, 1128, 1115, 1115,
+ 1118, 1122, 1122, 1122, 1115, 1123, 1115, 1125, 1129, 1130,
+ 1120, 1120, 1120, 1120, 1132, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131, 1131, 1131,
+ 1128, 1128, 1128, 1128, 1115, 1115, 1122, 1122, 1122, 1120,
+ 1120, 1120, 1120, 1133, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1115, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1131, 1131, 1131, 1131, 1128, 1128,
+ 1128, 1134, 1135, 1115, 1115, 1122, 1122, 1122, 1120, 1120,
+ 1120, 1120, 1133, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120,
+
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131, 1131, 1136,
+ 1137, 1128, 1128, 1128, 1134, 1135, 1115, 1115, 1122, 1122,
+ 1122, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 495, 1120, 1120, 1120, 495, 1120, 1120, 1115, 1120, 1120,
+ 1120, 1120, 1120, 1115, 1115, 1115, 1115, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1115, 1131, 1131, 1131, 1136, 1137, 1128,
+
+ 1128, 1128, 1115, 1115, 1122, 1122, 1115, 1115, 1122, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1115, 1120, 1120, 1120, 1115,
+ 1120, 1115, 1120, 1115, 1120, 1120, 1115, 1115, 1120, 1115,
+ 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1131,
+ 1131, 1131, 1138, 1128, 1128, 1115, 1115, 1122, 1122, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1115,
+ 1120, 1115, 1120, 1120, 1115, 1115, 1115, 1120, 1120, 1120,
+
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1139, 1131, 1131, 1138, 1128, 1128, 1115, 1115, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1115, 1115, 1115, 1120, 1120,
+ 1115, 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1139, 1131, 1131, 1128, 1128,
+ 1115, 1115, 1120, 1120, 1120, 1120, 1115, 1115, 1115, 1120,
+ 1120, 1115, 1115, 1140, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131,
+ 1128, 1128, 1115, 1120, 1120, 1120, 1120, 1115, 1115, 1115,
+ 1120, 1141, 1142, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131, 1128,
+ 1128, 1115, 1120, 1120, 1120, 1115, 1115, 1115, 1115, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131, 1128, 1128,
+ 1128, 1128, 1128, 1115, 1120, 1120, 1115, 1115, 1115, 1120,
+
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1131, 1131, 1131, 1131, 1131, 1128, 1128,
+ 1128, 1128, 1128, 1115, 1120, 1120, 1115, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1131,
+ 1131, 1131, 1131, 1131, 1128, 1128, 1128, 1128, 1143, 1120,
+ 1115, 1115, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1131, 1131, 1131, 1131, 1144, 1128,
+
+ 1128, 1128, 1128, 1143, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1131, 1131, 1131, 1131, 1144, 1128,
+ 1128, 1128, 1128, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
+ 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1131, 1131, 1131,
+ 1131, 1128, 1128, 1128, 1128, 1120, 1120, 1120, 1120, 1120,
+ 1131, 1131, 1131, 1131, 1145, 1128, 1128, 1128, 1120, 1120,
+ 1120, 1120, 1120, 1146, 1131, 1131, 1131, 1145, 1128, 1147,
+ 1148, 1120, 1120, 1120, 1146, 1131, 1149, 1150, 1128, 1147,
+ 1148, 1120, 1120, 1120, 1131, 1149, 1150, 1128, 1120, 1120,
+
+ 1120, 1131, 1151, 1120, 1120, 1152, 1151, 1120, 1120, 1152,
+ 1120, 1120, 1120, 1120, 0, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115
+ } ;
+
+static yyconst flex_int16_t yy_nxt[2685] =
+ { 0,
+ 4, 5, 6, 7, 7, 5, 8, 9, 4, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 21, 21, 21, 21, 21, 21, 22, 23, 24,
+ 25, 4, 26, 27, 28, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 29, 27,
+ 27, 27, 27, 30, 31, 27, 27, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 27, 27,
+ 43, 27, 27, 44, 45, 46, 47, 48, 27, 49,
+ 50, 51, 52, 53, 27, 54, 27, 27, 55, 56,
+ 57, 62, 58, 56, 65, 62, 59, 68, 72, 72,
+
+ 80, 72, 72, 108, 82, 88, 60, 73, 106, 89,
+ 105, 74, 99, 100, 81, 107, 69, 83, 84, 61,
+ 90, 102, 103, 109, 106, 111, 112, 85, 113, 75,
+ 86, 77, 87, 87, 87, 87, 87, 87, 87, 87,
+ 106, 106, 156, 171, 106, 66, 106, 106, 106, 285,
+ 91, 78, 92, 92, 92, 92, 92, 92, 92, 92,
+ 128, 133, 132, 172, 106, 65, 129, 106, 91, 93,
+ 95, 95, 95, 95, 95, 95, 95, 95, 116, 110,
+ 106, 106, 155, 106, 194, 117, 106, 97, 94, 106,
+ 118, 120, 106, 167, 126, 121, 119, 106, 122, 93,
+
+ 130, 157, 123, 106, 127, 131, 106, 134, 106, 106,
+ 140, 135, 124, 141, 142, 62, 66, 97, 94, 62,
+ 106, 136, 125, 106, 137, 106, 138, 139, 143, 144,
+ 147, 88, 106, 148, 168, 165, 171, 150, 169, 145,
+ 146, 152, 151, 171, 66, 189, 90, 153, 173, 174,
+ 149, 191, 154, 158, 159, 65, 159, 158, 72, 72,
+ 160, 72, 72, 190, 106, 207, 106, 73, 193, 106,
+ 161, 74, 106, 87, 87, 87, 87, 87, 87, 87,
+ 87, 71, 106, 162, 195, 71, 203, 106, 106, 75,
+ 178, 77, 87, 87, 87, 87, 87, 87, 87, 87,
+
+ 106, 106, 106, 106, 208, 106, 66, 204, 106, 181,
+ 91, 78, 92, 92, 92, 92, 92, 92, 92, 92,
+ 178, 205, 106, 206, 232, 221, 184, 184, 106, 183,
+ 185, 185, 185, 185, 185, 185, 185, 185, 91, 181,
+ 95, 95, 95, 95, 95, 95, 95, 95, 106, 212,
+ 259, 260, 106, 227, 106, 282, 332, 97, 1115, 183,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 184, 184,
+ 1115, 190, 185, 185, 185, 185, 185, 185, 185, 185,
+ 190, 192, 106, 106, 106, 106, 106, 97, 1106, 106,
+ 106, 106, 297, 106, 211, 106, 106, 209, 210, 213,
+
+ 106, 217, 218, 222, 214, 106, 196, 219, 197, 198,
+ 223, 199, 106, 106, 200, 220, 215, 106, 106, 106,
+ 216, 106, 106, 106, 201, 202, 224, 106, 230, 233,
+ 236, 234, 106, 106, 231, 225, 235, 226, 229, 106,
+ 239, 238, 106, 240, 106, 243, 242, 106, 106, 237,
+ 106, 106, 256, 245, 106, 168, 247, 241, 244, 249,
+ 171, 171, 250, 246, 171, 251, 248, 158, 159, 252,
+ 159, 158, 272, 163, 160, 254, 263, 262, 106, 264,
+ 257, 106, 106, 258, 161, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 277, 271, 274, 283, 162, 106, 265,
+
+ 265, 278, 71, 266, 266, 266, 266, 266, 266, 266,
+ 266, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 106,
+ 106, 273, 106, 106, 320, 281, 267, 267, 106, 164,
+ 268, 268, 268, 268, 268, 268, 268, 268, 1115, 106,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 184, 184,
+ 1115, 413, 185, 185, 185, 185, 185, 185, 185, 185,
+ 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
+ 185, 185, 185, 185, 185, 185, 186, 186, 186, 186,
+ 186, 186, 186, 186, 106, 106, 106, 106, 279, 186,
+ 186, 186, 186, 186, 186, 106, 280, 106, 288, 290,
+
+ 106, 287, 106, 106, 296, 284, 106, 106, 295, 106,
+ 106, 106, 289, 291, 106, 300, 293, 106, 303, 186,
+ 186, 186, 186, 186, 186, 292, 294, 298, 106, 299,
+ 106, 301, 106, 302, 106, 106, 306, 106, 106, 190,
+ 106, 305, 307, 106, 106, 106, 106, 106, 106, 106,
+ 304, 106, 322, 315, 106, 106, 309, 314, 311, 319,
+ 106, 316, 318, 106, 106, 312, 313, 317, 106, 310,
+ 326, 321, 323, 327, 106, 106, 325, 106, 106, 106,
+ 333, 163, 351, 171, 324, 171, 106, 329, 348, 328,
+ 359, 330, 357, 171, 334, 331, 335, 336, 106, 337,
+
+ 352, 338, 375, 362, 1103, 363, 339, 360, 106, 358,
+ 361, 340, 341, 342, 343, 344, 349, 1115, 1115, 350,
+ 1115, 1115, 106, 106, 106, 106, 73, 106, 369, 106,
+ 74, 106, 370, 106, 106, 106, 372, 164, 376, 391,
+ 397, 345, 266, 266, 266, 266, 266, 266, 266, 266,
+ 266, 266, 266, 266, 266, 266, 266, 266, 268, 268,
+ 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 368, 365, 106, 106, 190, 1115, 1115, 1115, 1115, 1115,
+
+ 1115, 366, 106, 106, 106, 106, 190, 106, 106, 1102,
+ 371, 106, 367, 374, 106, 106, 386, 378, 106, 106,
+ 381, 373, 106, 379, 385, 1115, 1115, 1115, 1115, 1115,
+ 1115, 106, 106, 380, 384, 382, 377, 106, 383, 106,
+ 106, 106, 106, 392, 190, 106, 395, 106, 106, 398,
+ 387, 106, 106, 389, 390, 106, 399, 388, 106, 106,
+ 1098, 393, 106, 106, 396, 106, 404, 400, 407, 106,
+ 405, 401, 106, 106, 394, 402, 410, 106, 106, 403,
+ 411, 408, 414, 106, 106, 412, 106, 106, 106, 106,
+ 106, 417, 415, 418, 106, 422, 106, 416, 106, 106,
+
+ 106, 424, 425, 421, 427, 106, 106, 106, 419, 420,
+ 106, 106, 190, 439, 423, 426, 431, 435, 440, 428,
+ 430, 171, 171, 171, 449, 432, 450, 451, 447, 452,
+ 429, 433, 455, 454, 106, 436, 456, 106, 106, 446,
+ 457, 106, 434, 448, 106, 106, 106, 106, 106, 459,
+ 460, 106, 463, 106, 106, 106, 106, 106, 464, 106,
+ 106, 106, 458, 461, 467, 462, 106, 106, 106, 106,
+ 472, 469, 465, 470, 106, 106, 466, 106, 471, 475,
+ 106, 474, 106, 476, 106, 106, 106, 106, 106, 473,
+ 106, 481, 477, 106, 106, 106, 483, 484, 106, 106,
+
+ 478, 106, 479, 486, 190, 488, 480, 482, 492, 106,
+ 106, 487, 491, 106, 493, 485, 106, 495, 494, 106,
+ 497, 498, 106, 499, 106, 106, 501, 106, 106, 106,
+ 106, 106, 106, 496, 507, 106, 502, 106, 500, 106,
+ 106, 106, 106, 503, 106, 510, 106, 505, 512, 489,
+ 504, 513, 506, 106, 106, 508, 511, 509, 515, 517,
+ 514, 171, 171, 171, 518, 532, 533, 530, 534, 535,
+ 516, 536, 538, 539, 537, 106, 531, 106, 106, 106,
+ 106, 106, 106, 542, 540, 529, 106, 106, 545, 544,
+ 190, 541, 106, 546, 1095, 106, 106, 106, 106, 543,
+
+ 106, 106, 106, 547, 106, 549, 106, 550, 106, 553,
+ 106, 552, 106, 106, 106, 106, 106, 551, 548, 558,
+ 558, 556, 558, 558, 106, 554, 106, 555, 106, 559,
+ 190, 560, 557, 106, 106, 106, 106, 106, 106, 106,
+ 570, 572, 106, 576, 106, 106, 589, 561, 571, 573,
+ 574, 575, 578, 569, 579, 106, 583, 106, 580, 577,
+ 106, 581, 106, 591, 106, 106, 171, 590, 611, 106,
+ 582, 106, 610, 606, 628, 562, 593, 106, 106, 106,
+ 567, 567, 567, 567, 567, 567, 567, 567, 567, 567,
+ 567, 567, 567, 567, 567, 567, 567, 567, 567, 568,
+
+ 568, 568, 568, 568, 568, 568, 568, 567, 567, 567,
+ 567, 567, 106, 594, 171, 584, 106, 607, 607, 613,
+ 607, 607, 615, 614, 1089, 585, 612, 586, 618, 106,
+ 608, 587, 616, 106, 588, 592, 605, 567, 567, 567,
+ 567, 106, 106, 171, 106, 106, 106, 106, 106, 619,
+ 106, 106, 617, 106, 620, 106, 621, 106, 622, 106,
+ 623, 632, 632, 609, 632, 632, 106, 773, 567, 558,
+ 558, 633, 558, 558, 106, 625, 626, 626, 626, 626,
+ 626, 626, 626, 626, 626, 626, 626, 626, 626, 626,
+ 626, 626, 626, 626, 626, 627, 627, 627, 627, 627,
+
+ 627, 627, 627, 626, 626, 626, 626, 626, 106, 106,
+ 106, 106, 106, 106, 190, 643, 644, 645, 106, 106,
+ 648, 106, 106, 646, 647, 106, 629, 635, 636, 106,
+ 650, 106, 702, 626, 626, 626, 626, 637, 637, 106,
+ 637, 637, 639, 649, 106, 106, 651, 106, 634, 106,
+ 653, 652, 106, 657, 106, 106, 658, 106, 106, 656,
+ 660, 669, 691, 638, 626, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 630, 630, 630, 630, 630, 630,
+ 630, 630, 630, 630, 631, 631, 631, 631, 631, 631,
+ 631, 631, 630, 630, 630, 630, 630, 106, 106, 106,
+
+ 106, 106, 106, 171, 662, 106, 694, 663, 106, 681,
+ 106, 664, 171, 684, 654, 539, 665, 667, 655, 666,
+ 659, 661, 630, 630, 630, 630, 668, 679, 106, 106,
+ 607, 607, 678, 607, 607, 539, 106, 106, 106, 106,
+ 106, 106, 106, 608, 190, 106, 106, 106, 698, 106,
+ 541, 685, 541, 630, 686, 106, 106, 106, 683, 714,
+ 687, 689, 632, 632, 693, 632, 632, 637, 637, 106,
+ 637, 637, 688, 699, 106, 106, 106, 700, 701, 704,
+ 106, 106, 106, 707, 106, 705, 706, 708, 106, 106,
+ 106, 106, 703, 638, 711, 106, 715, 106, 709, 106,
+
+ 717, 106, 106, 720, 716, 718, 190, 710, 712, 713,
+ 607, 607, 106, 607, 607, 731, 106, 719, 1088, 733,
+ 729, 106, 106, 608, 607, 607, 106, 607, 607, 730,
+ 106, 106, 732, 106, 106, 106, 171, 608, 541, 106,
+ 106, 690, 734, 106, 735, 541, 106, 106, 737, 737,
+ 171, 737, 737, 106, 740, 106, 609, 745, 739, 106,
+ 744, 106, 106, 106, 746, 747, 748, 751, 106, 106,
+ 609, 749, 106, 106, 106, 750, 106, 754, 106, 106,
+ 106, 752, 755, 760, 106, 757, 106, 753, 106, 106,
+ 106, 774, 106, 758, 756, 763, 106, 106, 106, 759,
+
+ 762, 775, 106, 765, 785, 106, 761, 764, 106, 737,
+ 737, 776, 737, 737, 106, 786, 106, 106, 780, 790,
+ 787, 106, 781, 106, 106, 106, 789, 106, 106, 106,
+ 106, 794, 788, 106, 106, 798, 106, 814, 106, 791,
+ 806, 792, 793, 795, 799, 796, 800, 797, 106, 801,
+ 802, 106, 106, 106, 803, 361, 106, 804, 805, 815,
+ 106, 824, 106, 826, 106, 106, 106, 106, 808, 106,
+ 106, 106, 807, 106, 828, 830, 817, 106, 832, 106,
+ 106, 836, 837, 829, 827, 106, 834, 825, 778, 838,
+ 831, 106, 106, 106, 106, 833, 841, 846, 842, 853,
+
+ 835, 843, 844, 106, 854, 190, 839, 858, 858, 106,
+ 858, 858, 840, 106, 845, 190, 106, 106, 863, 861,
+ 878, 847, 106, 879, 106, 864, 881, 106, 882, 106,
+ 855, 106, 870, 859, 862, 106, 871, 106, 872, 883,
+ 106, 190, 106, 860, 865, 866, 867, 106, 868, 106,
+ 873, 874, 875, 106, 876, 106, 880, 106, 106, 106,
+ 896, 106, 106, 1087, 885, 886, 106, 869, 106, 889,
+ 890, 106, 106, 877, 910, 884, 901, 106, 897, 897,
+ 106, 897, 897, 905, 106, 891, 106, 900, 858, 858,
+ 106, 858, 858, 106, 903, 906, 902, 106, 904, 907,
+
+ 106, 908, 106, 909, 898, 106, 911, 106, 912, 913,
+ 914, 915, 106, 916, 859, 892, 106, 918, 106, 106,
+ 917, 919, 106, 106, 106, 106, 106, 106, 106, 936,
+ 106, 106, 921, 106, 923, 924, 925, 920, 106, 922,
+ 935, 190, 993, 897, 897, 106, 897, 897, 939, 106,
+ 938, 926, 106, 106, 940, 941, 942, 106, 106, 106,
+ 106, 943, 106, 944, 106, 945, 106, 106, 946, 898,
+ 106, 106, 106, 947, 949, 950, 948, 106, 951, 106,
+ 952, 927, 106, 953, 106, 954, 106, 106, 106, 955,
+ 106, 106, 970, 971, 971, 106, 971, 971, 106, 974,
+
+ 106, 956, 957, 106, 975, 959, 106, 106, 958, 978,
+ 979, 106, 106, 983, 980, 973, 106, 106, 976, 972,
+ 106, 977, 106, 981, 106, 106, 106, 106, 986, 987,
+ 982, 106, 106, 991, 988, 989, 106, 106, 994, 1005,
+ 984, 106, 985, 992, 106, 990, 106, 1006, 971, 971,
+ 106, 971, 971, 106, 106, 106, 1008, 106, 1007, 1009,
+ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
+ 106, 1022, 1010, 1011, 972, 1012, 1014, 1015, 1013, 1016,
+ 106, 1017, 106, 1018, 1021, 1019, 1020, 1034, 106, 1023,
+ 106, 1035, 106, 106, 106, 106, 106, 1086, 106, 106,
+
+ 106, 106, 1024, 106, 1045, 106, 106, 1037, 1038, 1039,
+ 1040, 1041, 1036, 1042, 1043, 1044, 106, 1046, 106, 106,
+ 106, 1047, 106, 1059, 1056, 1060, 106, 1057, 106, 106,
+ 106, 1073, 106, 106, 1093, 1069, 106, 1058, 1083, 1084,
+ 106, 1082, 106, 1071, 106, 1070, 106, 106, 1100, 1072,
+ 106, 106, 1104, 106, 106, 1092, 1105, 106, 1108, 106,
+ 1099, 106, 1094, 106, 1111, 1101, 106, 106, 106, 106,
+ 1081, 1080, 1109, 1079, 1112, 1077, 1076, 1075, 1074, 1068,
+ 1067, 1113, 1114, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 70, 70, 70, 1066, 70, 70, 70, 70,
+
+ 70, 76, 76, 1065, 1064, 1063, 1062, 76, 76, 96,
+ 96, 1061, 96, 96, 104, 106, 104, 104, 163, 163,
+ 106, 163, 163, 163, 163, 163, 163, 170, 170, 170,
+ 170, 177, 106, 177, 177, 179, 179, 106, 179, 179,
+ 179, 179, 179, 179, 180, 106, 180, 180, 182, 182,
+ 106, 182, 182, 186, 106, 186, 255, 255, 106, 255,
+ 255, 255, 255, 255, 255, 269, 106, 269, 269, 270,
+ 1055, 270, 270, 347, 347, 1054, 347, 347, 347, 347,
+ 347, 347, 364, 364, 453, 1053, 453, 453, 525, 525,
+ 1052, 525, 525, 525, 525, 525, 525, 526, 526, 1051,
+
+ 526, 526, 526, 526, 526, 526, 598, 598, 1050, 598,
+ 598, 598, 598, 598, 598, 599, 599, 1049, 599, 599,
+ 599, 599, 599, 599, 724, 724, 1048, 724, 724, 724,
+ 724, 724, 724, 766, 766, 106, 766, 766, 766, 766,
+ 766, 766, 567, 567, 567, 567, 567, 567, 567, 626,
+ 626, 626, 626, 626, 626, 626, 630, 630, 630, 630,
+ 630, 630, 630, 1004, 1004, 106, 1004, 1004, 1004, 1004,
+ 1004, 1004, 1029, 1029, 106, 1029, 1029, 1029, 1029, 1029,
+ 1029, 1078, 1078, 106, 1078, 1078, 1078, 1078, 1078, 1078,
+ 1085, 1085, 106, 1085, 1085, 1085, 1085, 1085, 1085, 1090,
+
+ 1090, 106, 1090, 1090, 1090, 1090, 1090, 1090, 1091, 1091,
+ 1033, 1091, 1091, 1091, 1091, 1091, 1091, 1096, 1096, 1032,
+ 1096, 1096, 1096, 1096, 1096, 1096, 1097, 1097, 1031, 1097,
+ 1097, 1097, 1097, 1097, 1097, 1107, 1107, 1030, 1107, 1107,
+ 1107, 1107, 1107, 1107, 1110, 1110, 1028, 1110, 1110, 1110,
+ 1110, 1110, 1110, 1027, 1026, 1025, 106, 106, 106, 1003,
+ 1002, 1001, 1000, 999, 998, 997, 996, 995, 106, 106,
+ 772, 969, 968, 967, 966, 965, 964, 963, 962, 961,
+ 960, 106, 106, 937, 934, 933, 932, 931, 930, 929,
+ 928, 106, 106, 106, 899, 895, 894, 893, 888, 887,
+
+ 106, 106, 106, 106, 106, 106, 106, 857, 856, 106,
+ 852, 851, 850, 849, 848, 106, 106, 106, 823, 822,
+ 106, 821, 820, 819, 818, 816, 813, 812, 811, 810,
+ 809, 106, 784, 783, 782, 779, 777, 106, 106, 106,
+ 772, 771, 770, 769, 768, 767, 106, 743, 742, 741,
+ 738, 736, 106, 728, 727, 726, 725, 723, 722, 721,
+ 106, 106, 106, 106, 697, 696, 695, 106, 692, 106,
+ 106, 106, 106, 682, 680, 106, 106, 171, 677, 676,
+ 675, 674, 673, 672, 671, 670, 409, 106, 106, 106,
+ 642, 641, 640, 106, 106, 624, 106, 106, 106, 604,
+
+ 603, 602, 601, 600, 597, 596, 595, 106, 106, 566,
+ 565, 564, 563, 106, 106, 106, 106, 106, 106, 106,
+ 106, 106, 106, 528, 527, 524, 523, 522, 521, 520,
+ 519, 106, 106, 106, 490, 106, 106, 106, 468, 106,
+ 106, 106, 445, 444, 443, 442, 441, 438, 437, 106,
+ 409, 406, 106, 106, 106, 106, 106, 356, 355, 354,
+ 353, 346, 308, 106, 106, 286, 276, 275, 261, 171,
+ 164, 166, 253, 164, 228, 112, 106, 188, 187, 176,
+ 175, 171, 166, 164, 115, 114, 106, 101, 98, 79,
+ 71, 67, 63, 1115, 3, 1115, 1115, 1115, 1115, 1115,
+
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115
+ } ;
+
+static yyconst flex_int16_t yy_chk[2685] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 2, 5, 2, 2, 9, 5, 2, 11, 13, 13,
+
+ 16, 13, 13, 29, 17, 19, 2, 13, 1114, 19,
+ 26, 13, 23, 23, 16, 28, 11, 17, 17, 2,
+ 19, 25, 25, 29, 26, 31, 33, 18, 33, 13,
+ 18, 13, 18, 18, 18, 18, 18, 18, 18, 18,
+ 45, 202, 55, 75, 28, 9, 31, 44, 42, 202,
+ 20, 13, 20, 20, 20, 20, 20, 20, 20, 20,
+ 42, 45, 44, 75, 37, 64, 42, 54, 21, 20,
+ 21, 21, 21, 21, 21, 21, 21, 21, 37, 30,
+ 41, 38, 54, 39, 110, 37, 43, 21, 20, 30,
+ 38, 39, 48, 66, 41, 39, 38, 40, 39, 20,
+
+ 43, 55, 40, 110, 41, 43, 46, 46, 47, 49,
+ 48, 46, 40, 48, 49, 62, 64, 21, 20, 62,
+ 50, 46, 40, 52, 47, 51, 47, 47, 50, 50,
+ 51, 60, 53, 51, 70, 60, 78, 52, 71, 50,
+ 50, 53, 52, 77, 66, 105, 60, 53, 77, 78,
+ 51, 107, 53, 56, 56, 167, 56, 56, 72, 72,
+ 56, 72, 72, 106, 120, 120, 105, 72, 109, 107,
+ 56, 72, 1112, 87, 87, 87, 87, 87, 87, 87,
+ 87, 70, 116, 56, 111, 71, 116, 117, 106, 72,
+ 87, 72, 91, 91, 91, 91, 91, 91, 91, 91,
+
+ 111, 118, 109, 121, 121, 131, 167, 117, 119, 91,
+ 92, 72, 92, 92, 92, 92, 92, 92, 92, 92,
+ 87, 118, 141, 119, 141, 131, 93, 93, 124, 92,
+ 93, 93, 93, 93, 93, 93, 93, 93, 95, 91,
+ 95, 95, 95, 95, 95, 95, 95, 95, 137, 124,
+ 166, 166, 249, 137, 199, 199, 249, 95, 96, 92,
+ 96, 96, 96, 96, 96, 96, 96, 96, 97, 97,
+ 97, 108, 97, 97, 97, 97, 97, 97, 97, 97,
+ 115, 108, 123, 126, 122, 125, 128, 95, 1102, 132,
+ 133, 213, 213, 129, 123, 130, 108, 122, 122, 125,
+
+ 127, 128, 129, 132, 126, 115, 115, 130, 115, 115,
+ 133, 115, 135, 134, 115, 130, 127, 136, 139, 140,
+ 127, 143, 142, 144, 115, 115, 134, 148, 140, 142,
+ 144, 142, 145, 147, 140, 135, 143, 136, 139, 146,
+ 146, 145, 149, 146, 150, 148, 147, 151, 152, 144,
+ 153, 155, 165, 150, 154, 169, 151, 146, 149, 153,
+ 173, 174, 153, 150, 172, 154, 152, 158, 158, 155,
+ 158, 158, 190, 164, 158, 164, 173, 172, 190, 174,
+ 165, 196, 200, 165, 158, 177, 177, 177, 177, 177,
+ 177, 177, 177, 195, 189, 192, 200, 158, 238, 178,
+
+ 178, 196, 169, 178, 178, 178, 178, 178, 178, 178,
+ 178, 180, 180, 180, 180, 180, 180, 180, 180, 189,
+ 198, 191, 195, 192, 238, 198, 181, 181, 326, 164,
+ 181, 181, 181, 181, 181, 181, 181, 181, 182, 191,
+ 182, 182, 182, 182, 182, 182, 182, 182, 183, 183,
+ 183, 326, 183, 183, 183, 183, 183, 183, 183, 183,
+ 184, 184, 184, 184, 184, 184, 184, 184, 185, 185,
+ 185, 185, 185, 185, 185, 185, 186, 186, 186, 186,
+ 186, 186, 186, 186, 197, 201, 204, 206, 197, 186,
+ 186, 186, 186, 186, 186, 207, 197, 205, 205, 206,
+
+ 209, 204, 212, 211, 212, 201, 208, 210, 211, 219,
+ 216, 1101, 205, 207, 214, 216, 209, 215, 219, 186,
+ 186, 186, 186, 186, 186, 208, 210, 214, 218, 215,
+ 217, 217, 221, 218, 222, 223, 223, 224, 227, 228,
+ 229, 222, 224, 230, 233, 232, 231, 234, 236, 235,
+ 221, 239, 240, 233, 237, 243, 227, 232, 229, 237,
+ 242, 234, 236, 241, 228, 230, 231, 235, 244, 228,
+ 243, 239, 241, 244, 245, 248, 242, 247, 246, 250,
+ 250, 254, 256, 262, 241, 264, 240, 246, 253, 245,
+ 264, 247, 262, 263, 251, 248, 251, 251, 284, 251,
+
+ 256, 251, 284, 273, 1098, 274, 251, 271, 278, 263,
+ 272, 251, 251, 251, 251, 251, 253, 261, 261, 253,
+ 261, 261, 251, 271, 272, 274, 261, 279, 278, 285,
+ 261, 273, 279, 281, 304, 311, 281, 254, 285, 304,
+ 311, 251, 265, 265, 265, 265, 265, 265, 265, 265,
+ 266, 266, 266, 266, 266, 266, 266, 266, 267, 267,
+ 267, 267, 267, 267, 267, 267, 268, 268, 268, 268,
+ 268, 268, 268, 268, 269, 269, 269, 269, 269, 269,
+ 269, 269, 270, 270, 270, 270, 270, 270, 270, 270,
+ 277, 276, 280, 283, 276, 270, 270, 270, 270, 270,
+
+ 270, 276, 282, 288, 277, 289, 286, 299, 293, 1095,
+ 280, 297, 276, 283, 292, 294, 299, 288, 295, 276,
+ 293, 282, 296, 289, 297, 270, 270, 270, 270, 270,
+ 270, 286, 300, 292, 296, 294, 286, 301, 295, 302,
+ 303, 306, 307, 306, 308, 309, 309, 310, 312, 312,
+ 300, 313, 315, 302, 303, 316, 313, 301, 314, 317,
+ 1089, 307, 323, 320, 310, 318, 318, 314, 320, 308,
+ 318, 315, 321, 325, 308, 316, 323, 324, 327, 317,
+ 324, 321, 327, 328, 329, 325, 330, 331, 334, 333,
+ 336, 329, 327, 330, 335, 335, 337, 328, 338, 340,
+
+ 339, 337, 338, 334, 340, 341, 342, 343, 331, 333,
+ 344, 345, 346, 351, 336, 339, 343, 348, 351, 340,
+ 342, 357, 358, 359, 360, 344, 361, 362, 358, 363,
+ 341, 345, 366, 365, 360, 348, 367, 346, 365, 357,
+ 368, 361, 346, 359, 369, 373, 370, 371, 367, 370,
+ 371, 372, 374, 376, 363, 375, 362, 366, 375, 377,
+ 378, 368, 369, 372, 378, 373, 383, 386, 384, 385,
+ 386, 383, 376, 384, 390, 387, 377, 389, 385, 390,
+ 392, 389, 391, 391, 393, 394, 395, 398, 374, 387,
+ 397, 397, 392, 399, 400, 401, 399, 400, 402, 404,
+
+ 393, 405, 394, 402, 406, 405, 395, 398, 409, 408,
+ 410, 404, 408, 411, 409, 401, 414, 410, 409, 412,
+ 412, 414, 415, 415, 417, 419, 419, 420, 421, 406,
+ 422, 423, 424, 411, 425, 426, 420, 427, 417, 430,
+ 429, 428, 432, 421, 425, 428, 431, 423, 430, 406,
+ 422, 431, 424, 434, 433, 426, 429, 427, 433, 435,
+ 432, 446, 447, 448, 435, 449, 450, 447, 451, 452,
+ 434, 454, 456, 457, 455, 458, 448, 449, 450, 459,
+ 461, 454, 460, 460, 458, 446, 462, 457, 463, 462,
+ 468, 459, 464, 464, 1086, 451, 452, 455, 472, 461,
+
+ 465, 456, 471, 465, 476, 471, 477, 472, 478, 478,
+ 480, 477, 483, 486, 481, 468, 482, 476, 468, 484,
+ 484, 482, 484, 484, 485, 480, 463, 481, 487, 485,
+ 490, 486, 483, 497, 498, 499, 500, 501, 502, 503,
+ 498, 500, 504, 504, 505, 507, 510, 487, 499, 501,
+ 502, 503, 506, 497, 506, 490, 508, 510, 506, 505,
+ 512, 506, 511, 512, 514, 508, 530, 511, 533, 506,
+ 507, 553, 532, 530, 553, 490, 514, 532, 533, 484,
+ 495, 495, 495, 495, 495, 495, 495, 495, 495, 495,
+ 495, 495, 495, 495, 495, 495, 495, 495, 495, 495,
+
+ 495, 495, 495, 495, 495, 495, 495, 495, 495, 495,
+ 495, 495, 513, 515, 529, 509, 542, 531, 531, 535,
+ 531, 531, 537, 536, 1079, 509, 534, 509, 542, 535,
+ 531, 509, 538, 543, 509, 513, 529, 495, 495, 495,
+ 495, 495, 509, 531, 546, 534, 538, 515, 536, 543,
+ 540, 537, 540, 544, 544, 550, 546, 547, 547, 548,
+ 548, 556, 556, 531, 556, 556, 557, 729, 495, 558,
+ 558, 557, 558, 558, 729, 550, 551, 551, 551, 551,
+ 551, 551, 551, 551, 551, 551, 551, 551, 551, 551,
+ 551, 551, 551, 551, 551, 551, 551, 551, 551, 551,
+
+ 551, 551, 551, 551, 551, 551, 551, 551, 554, 559,
+ 569, 571, 560, 572, 563, 569, 571, 572, 574, 575,
+ 576, 556, 651, 574, 575, 577, 554, 559, 560, 578,
+ 578, 580, 651, 551, 551, 551, 551, 561, 561, 563,
+ 561, 561, 563, 577, 579, 581, 579, 584, 558, 576,
+ 581, 580, 585, 585, 586, 588, 586, 593, 633, 584,
+ 588, 593, 633, 561, 551, 555, 555, 555, 555, 555,
+ 555, 555, 555, 555, 555, 555, 555, 555, 555, 555,
+ 555, 555, 555, 555, 555, 555, 555, 555, 555, 555,
+ 555, 555, 555, 555, 555, 555, 555, 561, 582, 583,
+
+ 587, 589, 591, 605, 590, 639, 639, 590, 619, 615,
+ 592, 590, 606, 619, 582, 610, 590, 591, 583, 590,
+ 587, 589, 555, 555, 555, 555, 592, 606, 590, 610,
+ 607, 607, 605, 607, 607, 612, 615, 617, 618, 620,
+ 621, 623, 622, 607, 624, 663, 636, 647, 647, 612,
+ 618, 620, 621, 555, 622, 648, 628, 649, 617, 663,
+ 623, 628, 632, 632, 636, 632, 632, 637, 637, 624,
+ 637, 637, 624, 648, 652, 650, 653, 649, 650, 653,
+ 654, 655, 656, 656, 657, 654, 655, 657, 658, 659,
+ 661, 660, 652, 637, 660, 664, 664, 662, 658, 665,
+
+ 666, 667, 668, 669, 665, 667, 680, 659, 661, 662,
+ 678, 678, 683, 678, 678, 682, 684, 668, 1077, 684,
+ 680, 666, 687, 678, 679, 679, 685, 679, 679, 681,
+ 669, 680, 683, 686, 681, 694, 678, 679, 685, 699,
+ 682, 632, 687, 688, 688, 686, 698, 701, 691, 691,
+ 679, 691, 691, 693, 694, 704, 678, 699, 693, 700,
+ 698, 702, 703, 706, 700, 701, 702, 706, 707, 708,
+ 679, 703, 709, 710, 711, 704, 712, 709, 713, 714,
+ 715, 707, 710, 715, 716, 712, 717, 708, 720, 719,
+ 718, 731, 735, 713, 711, 718, 732, 731, 739, 714,
+
+ 717, 732, 740, 720, 744, 749, 716, 719, 691, 737,
+ 737, 735, 737, 737, 745, 745, 746, 747, 739, 749,
+ 746, 744, 740, 748, 750, 752, 748, 753, 754, 755,
+ 756, 754, 747, 757, 758, 758, 760, 773, 762, 750,
+ 763, 752, 753, 755, 759, 756, 759, 757, 761, 759,
+ 759, 763, 764, 765, 760, 774, 776, 761, 762, 774,
+ 785, 785, 786, 787, 789, 791, 773, 790, 765, 774,
+ 794, 795, 764, 787, 790, 792, 776, 796, 795, 797,
+ 798, 799, 800, 791, 789, 759, 797, 786, 737, 801,
+ 794, 803, 792, 804, 806, 796, 805, 807, 805, 814,
+
+ 798, 805, 805, 808, 815, 816, 803, 820, 820, 826,
+ 820, 820, 804, 814, 806, 821, 824, 799, 827, 824,
+ 835, 808, 800, 835, 807, 828, 841, 801, 842, 815,
+ 816, 830, 830, 820, 826, 827, 831, 805, 832, 843,
+ 821, 855, 828, 821, 829, 829, 829, 840, 829, 846,
+ 833, 833, 833, 831, 833, 832, 840, 845, 861, 835,
+ 854, 847, 841, 1076, 846, 847, 855, 829, 842, 850,
+ 850, 870, 854, 833, 870, 845, 861, 843, 856, 856,
+ 862, 856, 856, 865, 829, 850, 860, 860, 858, 858,
+ 833, 858, 858, 863, 863, 866, 862, 864, 864, 867,
+
+ 865, 868, 869, 869, 856, 871, 871, 872, 872, 873,
+ 874, 875, 866, 876, 858, 850, 867, 878, 868, 877,
+ 877, 879, 880, 884, 885, 886, 873, 874, 875, 896,
+ 876, 900, 884, 901, 886, 887, 887, 880, 958, 885,
+ 895, 895, 958, 897, 897, 896, 897, 897, 901, 902,
+ 900, 887, 903, 904, 902, 903, 904, 878, 910, 879,
+ 905, 905, 906, 906, 907, 907, 895, 908, 908, 897,
+ 909, 911, 912, 909, 911, 912, 910, 913, 913, 914,
+ 914, 887, 915, 915, 916, 916, 917, 920, 921, 917,
+ 922, 923, 935, 937, 937, 938, 937, 937, 948, 940,
+
+ 941, 920, 921, 942, 940, 923, 943, 944, 922, 943,
+ 944, 945, 947, 948, 945, 938, 940, 935, 941, 937,
+ 946, 942, 949, 946, 950, 951, 952, 955, 951, 952,
+ 947, 953, 954, 956, 953, 954, 957, 959, 959, 970,
+ 949, 976, 950, 957, 977, 955, 974, 974, 971, 971,
+ 956, 971, 971, 975, 978, 979, 976, 980, 975, 977,
+ 981, 982, 984, 986, 985, 987, 970, 988, 989, 990,
+ 991, 991, 978, 979, 971, 980, 982, 984, 981, 985,
+ 993, 986, 994, 987, 990, 988, 989, 1005, 1006, 993,
+ 1007, 1006, 1010, 1011, 1012, 1013, 1017, 1075, 1018, 1019,
+
+ 1020, 1022, 994, 1023, 1022, 1005, 1035, 1010, 1011, 1012,
+ 1013, 1017, 1007, 1018, 1019, 1020, 1024, 1023, 1036, 1045,
+ 1056, 1024, 1046, 1046, 1035, 1047, 1057, 1036, 1058, 1059,
+ 1060, 1060, 1070, 1072, 1083, 1056, 1073, 1045, 1072, 1073,
+ 1082, 1070, 1047, 1058, 1084, 1057, 1092, 1093, 1093, 1059,
+ 1094, 1083, 1099, 1100, 1105, 1082, 1100, 1104, 1104, 1109,
+ 1092, 1108, 1084, 1111, 1108, 1094, 1071, 1113, 1069, 1099,
+ 1068, 1067, 1105, 1066, 1109, 1064, 1063, 1062, 1061, 1055,
+ 1054, 1111, 1113, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
+ 1116, 1116, 1117, 1117, 1117, 1053, 1117, 1117, 1117, 1117,
+
+ 1117, 1118, 1118, 1052, 1051, 1050, 1049, 1118, 1118, 1119,
+ 1119, 1048, 1119, 1119, 1120, 1044, 1120, 1120, 1121, 1121,
+ 1043, 1121, 1121, 1121, 1121, 1121, 1121, 1122, 1122, 1122,
+ 1122, 1123, 1042, 1123, 1123, 1124, 1124, 1041, 1124, 1124,
+ 1124, 1124, 1124, 1124, 1125, 1040, 1125, 1125, 1126, 1126,
+ 1039, 1126, 1126, 1127, 1038, 1127, 1128, 1128, 1037, 1128,
+ 1128, 1128, 1128, 1128, 1128, 1129, 1034, 1129, 1129, 1130,
+ 1033, 1130, 1130, 1131, 1131, 1032, 1131, 1131, 1131, 1131,
+ 1131, 1131, 1132, 1132, 1133, 1031, 1133, 1133, 1134, 1134,
+ 1030, 1134, 1134, 1134, 1134, 1134, 1134, 1135, 1135, 1028,
+
+ 1135, 1135, 1135, 1135, 1135, 1135, 1136, 1136, 1027, 1136,
+ 1136, 1136, 1136, 1136, 1136, 1137, 1137, 1026, 1137, 1137,
+ 1137, 1137, 1137, 1137, 1138, 1138, 1025, 1138, 1138, 1138,
+ 1138, 1138, 1138, 1139, 1139, 1021, 1139, 1139, 1139, 1139,
+ 1139, 1139, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1141,
+ 1141, 1141, 1141, 1141, 1141, 1141, 1142, 1142, 1142, 1142,
+ 1142, 1142, 1142, 1143, 1143, 1016, 1143, 1143, 1143, 1143,
+ 1143, 1143, 1144, 1144, 1015, 1144, 1144, 1144, 1144, 1144,
+ 1144, 1145, 1145, 1014, 1145, 1145, 1145, 1145, 1145, 1145,
+ 1146, 1146, 1009, 1146, 1146, 1146, 1146, 1146, 1146, 1147,
+
+ 1147, 1008, 1147, 1147, 1147, 1147, 1147, 1147, 1148, 1148,
+ 1003, 1148, 1148, 1148, 1148, 1148, 1148, 1149, 1149, 1002,
+ 1149, 1149, 1149, 1149, 1149, 1149, 1150, 1150, 1001, 1150,
+ 1150, 1150, 1150, 1150, 1150, 1151, 1151, 1000, 1151, 1151,
+ 1151, 1151, 1151, 1151, 1152, 1152, 998, 1152, 1152, 1152,
+ 1152, 1152, 1152, 997, 996, 995, 992, 983, 973, 968,
+ 967, 966, 965, 964, 963, 962, 961, 960, 939, 936,
+ 934, 933, 932, 931, 930, 929, 928, 927, 926, 925,
+ 924, 919, 918, 899, 894, 893, 892, 891, 890, 889,
+ 888, 883, 882, 881, 857, 853, 852, 851, 849, 848,
+
+ 844, 839, 838, 837, 836, 834, 825, 819, 818, 817,
+ 813, 812, 811, 810, 809, 802, 793, 788, 783, 782,
+ 781, 780, 779, 778, 777, 775, 771, 770, 769, 768,
+ 767, 751, 743, 742, 741, 738, 736, 734, 733, 730,
+ 728, 727, 726, 725, 723, 722, 705, 697, 696, 695,
+ 692, 690, 689, 677, 676, 675, 674, 672, 671, 670,
+ 646, 645, 644, 643, 642, 641, 640, 635, 634, 631,
+ 629, 627, 625, 616, 614, 613, 611, 609, 604, 603,
+ 602, 601, 600, 597, 596, 595, 594, 573, 570, 568,
+ 566, 565, 564, 562, 552, 549, 545, 541, 539, 528,
+
+ 527, 524, 523, 522, 519, 518, 517, 516, 496, 494,
+ 493, 492, 491, 489, 488, 479, 475, 474, 473, 470,
+ 469, 467, 466, 445, 444, 441, 440, 439, 438, 437,
+ 436, 418, 416, 413, 407, 403, 396, 388, 382, 381,
+ 380, 379, 356, 355, 354, 353, 352, 350, 349, 332,
+ 322, 319, 305, 298, 291, 290, 287, 260, 259, 258,
+ 257, 252, 226, 225, 220, 203, 194, 193, 171, 170,
+ 163, 162, 161, 160, 138, 113, 104, 103, 99, 86,
+ 84, 76, 61, 59, 36, 35, 27, 24, 22, 15,
+ 12, 10, 8, 3, 1115, 1115, 1115, 1115, 1115, 1115,
+
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+ 1115, 1115, 1115, 1115
+ } ;
+
+/* Table of booleans, true if rule could match eol. */
+static yyconst flex_int32_t yy_rule_can_match_eol[174] =
+ { 0,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "vtkParse.l"
+#line 3 "vtkParse.l"
+
+/*
+
+This file must be translated to C and modified to build everywhere.
+
+Run flex like this:
+
+ flex --nodefault -olex.yy.c vtkParse.l
+
+Modify lex.yy.c:
+ - convert tabs to spaces (8 spaces per tab)
+ - remove extra space from end of lines
+ - remove blank lines from end of file
+ - replace "int yyl" with "yy_size_t yyl"
+ - compile with gcc and "-Wsign-compare", there should be no warnings
+
+*/
+
+/* We do not care of interactive mode */
+#define YY_NEVER_INTERACTIVE 1
+
+/* Do not include unistd.h in generated source. */
+#define YY_NO_UNISTD_H
+
+/* Skip declaring this function. It is a macro. */
+#define YY_SKIP_YYWRAP
+
+#ifdef _WIN32
+#pragma warning ( disable : 4018 )
+#pragma warning ( disable : 4127 )
+#pragma warning ( disable : 4131 )
+#pragma warning ( disable : 4244 )
+#pragma warning ( disable : 4251 )
+#pragma warning ( disable : 4267 )
+#pragma warning ( disable : 4305 )
+#pragma warning ( disable : 4309 )
+#pragma warning ( disable : 4706 )
+#pragma warning ( disable : 4786 )
+#endif
+
+#define SKIP_MATCH_MAXLEN 15
+
+/*
+ * Skip ahead until one of the strings is found,
+ * then skip to the end of the line.
+ * Return 0 if no match found.
+ */
+static int skip_comment();
+static int skip_trailing_comment(const char *text, size_t l);
+static int skip_ahead_multi(const char *strings[]);
+static int skip_ahead_until(const char *text);
+static int skip_to_next_directive();
+static int skip_conditional_block();
+
+static void preprocessor_directive(const char *text, size_t l);
+static void print_preprocessor_error(int result, const char *cp, size_t n);
+static const char *get_macro_arguments();
+
+static void push_buffer();
+static int pop_buffer();
+
+static void push_include(const char *filename);
+static void pop_include();
+
+static void push_macro(MacroInfo *macro);
+static void pop_macro();
+static int in_macro();
+
+#line 1515 "lex.yy.c"
+
+#define INITIAL 0
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (void );
+
+int yyget_debug (void );
+
+void yyset_debug (int debug_flag );
+
+YY_EXTRA_TYPE yyget_extra (void );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined );
+
+FILE *yyget_in (void );
+
+void yyset_in (FILE * in_str );
+
+FILE *yyget_out (void );
+
+void yyset_out (FILE * out_str );
+
+yy_size_t yyget_leng (void );
+
+char *yyget_text (void );
+
+int yyget_lineno (void );
+
+void yyset_lineno (int line_number );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (void );
+#else
+extern int yywrap (void );
+#endif
+#endif
+
+ static void yyunput (int c,char *buf_ptr );
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+ { \
+ int c = '*'; \
+ yy_size_t n; \
+ for ( n = 0; n < max_size && \
+ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+ if ( c == '\n' ) \
+ buf[n++] = (char) c; \
+ if ( c == EOF && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ result = n; \
+ } \
+ else \
+ { \
+ errno=0; \
+ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(yyin); \
+ } \
+ }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+ if ( yyleng > 0 ) \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
+ (yytext[yyleng - 1] == '\n'); \
+ YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+
+#line 77 "vtkParse.l"
+
+
+#line 1703 "lex.yy.c"
+
+ if ( !(yy_init) )
+ {
+ (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! (yy_start) )
+ (yy_start) = 1; /* first start state */
+
+ if ( ! yyin )
+ yyin = stdin;
+
+ if ( ! yyout )
+ yyout = stdout;
+
+ if ( ! YY_CURRENT_BUFFER ) {
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_load_buffer_state( );
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+ yy_cp = (yy_c_buf_p);
+
+ /* Support of yytext. */
+ *yy_cp = (yy_hold_char);
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+ yy_current_state = (yy_start);
+ yy_current_state += YY_AT_BOL();
+yy_match:
+ do
+ {
+ register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 1116 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ ++yy_cp;
+ }
+ while ( yy_base[yy_current_state] != 2595 );
+
+yy_find_action:
+ yy_act = yy_accept[yy_current_state];
+ if ( yy_act == 0 )
+ { /* have to back up */
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ yy_act = yy_accept[yy_current_state];
+ }
+
+ YY_DO_BEFORE_ACTION;
+
+ if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
+ {
+ yy_size_t yyl;
+ for ( yyl = 0; yyl < yyleng; ++yyl )
+ if ( yytext[yyl] == '\n' )
+
+ yylineno++;
+;
+ }
+
+do_action: /* This label is used only to access EOF actions. */
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+ case 0: /* must back up */
+ /* undo the effects of YY_DO_BEFORE_ACTION */
+ *yy_cp = (yy_hold_char);
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 79 "vtkParse.l"
+{ skip_comment(); }
+ YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 81 "vtkParse.l"
+{
+ if (!IgnoreBTX) {
+ skip_ahead_until("//ETX");
+ }
+ }
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 87 "vtkParse.l"
+/* eat mismatched ETX */
+ YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 89 "vtkParse.l"
+{
+ skip_ahead_until("@end");
+ }
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 93 "vtkParse.l"
+{
+ size_t pos = 1;
+ while (yytext[pos-1] != 'M' || yytext[pos] != 'E')
+ {
+ pos++;
+ }
+ data->NameComment = vtkstrndup(&yytext[pos + 1], yyleng - pos - 1);
+ }
+ YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 102 "vtkParse.l"
+{ setCommentState(1); }
+ YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 103 "vtkParse.l"
+{ setCommentState(2); }
+ YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 104 "vtkParse.l"
+{ setCommentState(3); }
+ YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 105 "vtkParse.l"
+{ setCommentState(3); }
+ YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 106 "vtkParse.l"
+{ setCommentState(4); }
+ YY_BREAK
+case 11:
+/* rule 11 can match eol */
+YY_RULE_SETUP
+#line 107 "vtkParse.l"
+{ closeOrClearComment(); }
+ YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 108 "vtkParse.l"
+{
+ size_t pos = 2;
+ while (yytext[pos-2] != '/' || yytext[pos-1] != '/') pos++;
+ addCommentLine(&yytext[pos], yyleng - pos);
+ }
+ YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 114 "vtkParse.l"
+/* eat C++ comments */
+ YY_BREAK
+case 14:
+/* rule 14 can match eol */
+YY_RULE_SETUP
+#line 116 "vtkParse.l"
+{
+ skip_trailing_comment(yytext, yyleng);
+ preprocessor_directive(yytext, yyleng);
+ }
+ YY_BREAK
+case 15:
+/* rule 15 can match eol */
+YY_RULE_SETUP
+#line 121 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(STRING_LITERAL);
+ }
+ YY_BREAK
+case 16:
+/* rule 16 can match eol */
+YY_RULE_SETUP
+#line 126 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(CHAR_LITERAL);
+ }
+ YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 131 "vtkParse.l"
+/* ignore EXPORT macros */
+ YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 133 "vtkParse.l"
+{ /* let the wrappers see the parameter */
+ const char *args = NULL;
+ const char *cp;
+ size_t l = 0;
+ args = get_macro_arguments();
+ if (args)
+ {
+ cp = args;
+ if (*cp == '(') { cp++; }
+ while (*cp == ' ' || *cp == '\t') { cp++; }
+ l = vtkidlen(cp);
+ if (l)
+ {
+ yylval.str = vtkstrndup(cp, l);
+ free((char *)args);
+ return(ID);
+ }
+ free((char *)args);
+ }
+ }
+ YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 154 "vtkParse.l"
+return(DOUBLE);
+ YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 155 "vtkParse.l"
+return(FLOAT);
+ YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 156 "vtkParse.l"
+return(INT64__);
+ YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 157 "vtkParse.l"
+return(SHORT);
+ YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 158 "vtkParse.l"
+return(LONG);
+ YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 159 "vtkParse.l"
+return(CHAR);
+ YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 160 "vtkParse.l"
+return(INT);
+ YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 162 "vtkParse.l"
+return(UNSIGNED);
+ YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 163 "vtkParse.l"
+return(SIGNED);
+ YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 165 "vtkParse.l"
+return(VOID);
+ YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 166 "vtkParse.l"
+return(BOOL);
+ YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 168 "vtkParse.l"
+return(SIZE_T);
+ YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 169 "vtkParse.l"
+return(SSIZE_T);
+ YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 171 "vtkParse.l"
+/* ignore the Q_OBJECT macro from Qt */
+ YY_BREAK
+case 33:
+/* rule 33 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 172 "vtkParse.l"
+return(PUBLIC);
+ YY_BREAK
+case 34:
+/* rule 34 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 173 "vtkParse.l"
+return(PRIVATE);
+ YY_BREAK
+case 35:
+/* rule 35 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 174 "vtkParse.l"
+return(PROTECTED);
+ YY_BREAK
+case 36:
+/* rule 36 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 175 "vtkParse.l"
+return(PROTECTED);
+ YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 177 "vtkParse.l"
+return(CLASS);
+ YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 178 "vtkParse.l"
+return(STRUCT);
+ YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 179 "vtkParse.l"
+return(PUBLIC);
+ YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 180 "vtkParse.l"
+return(PRIVATE);
+ YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 181 "vtkParse.l"
+return(PROTECTED);
+ YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 182 "vtkParse.l"
+return(ENUM);
+ YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 183 "vtkParse.l"
+return(UNION);
+ YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 184 "vtkParse.l"
+return(VIRTUAL);
+ YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 185 "vtkParse.l"
+return(CONST);
+ YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 186 "vtkParse.l"
+return(VOLATILE);
+ YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 187 "vtkParse.l"
+return(MUTABLE);
+ YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 188 "vtkParse.l"
+return(OPERATOR);
+ YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 189 "vtkParse.l"
+return(FRIEND);
+ YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 190 "vtkParse.l"
+return(INLINE);
+ YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 191 "vtkParse.l"
+return(STATIC);
+ YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 192 "vtkParse.l"
+return(EXTERN);
+ YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 193 "vtkParse.l"
+return(TEMPLATE);
+ YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 194 "vtkParse.l"
+return(TYPENAME);
+ YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 195 "vtkParse.l"
+return(TYPEDEF);
+ YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 196 "vtkParse.l"
+return(NAMESPACE);
+ YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 197 "vtkParse.l"
+return(USING);
+ YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 198 "vtkParse.l"
+return(NEW);
+ YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 199 "vtkParse.l"
+return(DELETE);
+ YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 200 "vtkParse.l"
+return(EXPLICIT);
+ YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 201 "vtkParse.l"
+return(THROW);
+ YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 203 "vtkParse.l"
+return(STATIC_CAST);
+ YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 204 "vtkParse.l"
+return(DYNAMIC_CAST);
+ YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 205 "vtkParse.l"
+return(CONST_CAST);
+ YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 206 "vtkParse.l"
+return(REINTERPRET_CAST);
+ YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 208 "vtkParse.l"
+/* irrelevant to wrappers */
+ YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 209 "vtkParse.l"
+/* irrelevant to wrappers */
+ YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 211 "vtkParse.l"
+return(OP_LOGIC_AND);
+ YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 212 "vtkParse.l"
+return(OP_AND_EQ);
+ YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 213 "vtkParse.l"
+return(OP_LOGIC_OR);
+ YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 214 "vtkParse.l"
+return(OP_OR_EQ);
+ YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 215 "vtkParse.l"
+return('!');
+ YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 216 "vtkParse.l"
+return(OP_LOGIC_NEQ);
+ YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 217 "vtkParse.l"
+return('^');
+ YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 218 "vtkParse.l"
+return(OP_XOR_EQ);
+ YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 219 "vtkParse.l"
+return('&');
+ YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 220 "vtkParse.l"
+return('|');
+ YY_BREAK
+case 78:
+YY_RULE_SETUP
+#line 221 "vtkParse.l"
+return('~');
+ YY_BREAK
+case 79:
+YY_RULE_SETUP
+#line 223 "vtkParse.l"
+return(IdType);
+ YY_BREAK
+case 80:
+YY_RULE_SETUP
+#line 224 "vtkParse.l"
+return(SetMacro);
+ YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 225 "vtkParse.l"
+return(GetMacro);
+ YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 226 "vtkParse.l"
+return(SetStringMacro);
+ YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 227 "vtkParse.l"
+return(GetStringMacro);
+ YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 228 "vtkParse.l"
+return(SetClampMacro);
+ YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 229 "vtkParse.l"
+return(SetObjectMacro);
+ YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 230 "vtkParse.l"
+return(GetObjectMacro);
+ YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 231 "vtkParse.l"
+return(BooleanMacro);
+ YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 232 "vtkParse.l"
+return(SetVector2Macro);
+ YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 233 "vtkParse.l"
+return(SetVector3Macro);
+ YY_BREAK
+case 90:
+YY_RULE_SETUP
+#line 234 "vtkParse.l"
+return(SetVector4Macro);
+ YY_BREAK
+case 91:
+YY_RULE_SETUP
+#line 235 "vtkParse.l"
+return(SetVector6Macro);
+ YY_BREAK
+case 92:
+YY_RULE_SETUP
+#line 236 "vtkParse.l"
+return(GetVector2Macro);
+ YY_BREAK
+case 93:
+YY_RULE_SETUP
+#line 237 "vtkParse.l"
+return(GetVector3Macro);
+ YY_BREAK
+case 94:
+YY_RULE_SETUP
+#line 238 "vtkParse.l"
+return(GetVector4Macro);
+ YY_BREAK
+case 95:
+YY_RULE_SETUP
+#line 239 "vtkParse.l"
+return(GetVector6Macro);
+ YY_BREAK
+case 96:
+YY_RULE_SETUP
+#line 240 "vtkParse.l"
+return(SetVectorMacro);
+ YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 241 "vtkParse.l"
+return(GetVectorMacro);
+ YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 242 "vtkParse.l"
+return(ViewportCoordinateMacro);
+ YY_BREAK
+case 99:
+YY_RULE_SETUP
+#line 243 "vtkParse.l"
+return(WorldCoordinateMacro);
+ YY_BREAK
+case 100:
+YY_RULE_SETUP
+#line 244 "vtkParse.l"
+return(TypeMacro);
+ YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 245 "vtkParse.l"
+return(TypeMacro);
+ YY_BREAK
+case 102:
+YY_RULE_SETUP
+#line 246 "vtkParse.l"
+return(TypeMacro);
+ YY_BREAK
+case 103:
+YY_RULE_SETUP
+#line 247 "vtkParse.l"
+return(TypeMacro);
+ YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 248 "vtkParse.l"
+;
+ YY_BREAK
+case 105:
+YY_RULE_SETUP
+#line 249 "vtkParse.l"
+return(VTK_BYTE_SWAP_DECL);
+ YY_BREAK
+case 106:
+YY_RULE_SETUP
+#line 250 "vtkParse.l"
+return(TypeInt8);
+ YY_BREAK
+case 107:
+YY_RULE_SETUP
+#line 251 "vtkParse.l"
+return(TypeUInt8);
+ YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 252 "vtkParse.l"
+return(TypeInt16);
+ YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 253 "vtkParse.l"
+return(TypeUInt16);
+ YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 254 "vtkParse.l"
+return(TypeInt32);
+ YY_BREAK
+case 111:
+YY_RULE_SETUP
+#line 255 "vtkParse.l"
+return(TypeUInt32);
+ YY_BREAK
+case 112:
+YY_RULE_SETUP
+#line 256 "vtkParse.l"
+return(TypeInt64);
+ YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 257 "vtkParse.l"
+return(TypeUInt64);
+ YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 258 "vtkParse.l"
+return(TypeFloat32);
+ YY_BREAK
+case 115:
+YY_RULE_SETUP
+#line 259 "vtkParse.l"
+return(TypeFloat64);
+ YY_BREAK
+case 116:
+/* rule 116 can match eol */
+YY_RULE_SETUP
+#line 261 "vtkParse.l"
+{
+ size_t i = 1;
+ size_t j;
+ while (yytext[i]==' ' || yytext[i]=='\t' ||
+ yytext[i]=='\r' || yytext[i]=='\n') { i++; }
+ j = i;
+ while (yytext[j]!='&') { j++; }
+ yylval.str = vtkstrndup(&yytext[i], j-i);
+ return(LA);
+ }
+ YY_BREAK
+case 117:
+/* rule 117 can match eol */
+YY_RULE_SETUP
+#line 272 "vtkParse.l"
+{
+ size_t i = 1;
+ size_t j;
+ while (yytext[i]==' ' || yytext[i]=='\t' ||
+ yytext[i]=='\r' || yytext[i]=='\n') { i++; }
+ j = i;
+ while (yytext[j]!='*') { j++; }
+ yylval.str = vtkstrndup(&yytext[i], j-i);
+ return(LP);
+ }
+ YY_BREAK
+case 118:
+/* rule 118 can match eol */
+YY_RULE_SETUP
+#line 283 "vtkParse.l"
+{
+ yylval.str = "";
+ return(LP);
+ }
+ YY_BREAK
+case 119:
+/* rule 119 can match eol */
+YY_RULE_SETUP
+#line 288 "vtkParse.l"
+{
+ yylval.str = "";
+ return(LP);
+ }
+ YY_BREAK
+case 120:
+YY_RULE_SETUP
+#line 293 "vtkParse.l"
+return('*');
+ YY_BREAK
+case 121:
+YY_RULE_SETUP
+#line 295 "vtkParse.l"
+/* misc unused win32 macros */
+ YY_BREAK
+case 122:
+/* rule 122 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 297 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(OSTREAM);
+ }
+ YY_BREAK
+case 123:
+/* rule 123 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 302 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(ISTREAM);
+ }
+ YY_BREAK
+case 124:
+/* rule 124 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 307 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(StdString);
+ }
+ YY_BREAK
+case 125:
+YY_RULE_SETUP
+#line 312 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(StdString);
+ }
+ YY_BREAK
+case 126:
+YY_RULE_SETUP
+#line 317 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(UnicodeString);
+ }
+ YY_BREAK
+case 127:
+YY_RULE_SETUP
+#line 322 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(VTK_ID);
+ }
+ YY_BREAK
+case 128:
+YY_RULE_SETUP
+#line 327 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(QT_ID);
+ }
+ YY_BREAK
+case 129:
+YY_RULE_SETUP
+#line 332 "vtkParse.l"
+get_macro_arguments(); /* gcc attributes */
+ YY_BREAK
+case 130:
+YY_RULE_SETUP
+#line 334 "vtkParse.l"
+get_macro_arguments(); /* Windows linkage */
+ YY_BREAK
+case 131:
+YY_RULE_SETUP
+#line 336 "vtkParse.l"
+/* Windows */
+ YY_BREAK
+case 132:
+YY_RULE_SETUP
+#line 338 "vtkParse.l"
+{
+ const char *args = get_macro_arguments();
+ if (args && args[0] != '\0' && args[1] != '\0')
+ {
+ size_t l = strlen(args);
+ push_macro(NULL);
+ push_buffer();
+ macroName = "VTK_LEGACY";
+ macroUsed = 0;
+ macroEnded = 0;
+ yy_switch_to_buffer(yy_scan_bytes(&args[1],l-2));
+ }
+ free((char *)args);
+ }
+ YY_BREAK
+case 133:
+YY_RULE_SETUP
+#line 353 "vtkParse.l"
+{
+ const char *name = vtkstrndup(yytext, yyleng);
+ MacroInfo *macro = vtkParsePreprocess_GetMacro(preprocessor, name);
+ int expanded = 0;
+ if (macro)
+ {
+ const char *args = NULL;
+ const char *emacro = NULL;
+
+ /* make sure that vtkNotUsed is never expanded */
+ MacroInfo *ex;
+ ex = vtkParsePreprocess_GetMacro(preprocessor, "vtkNotUsed");
+ if (ex)
+ {
+ ex->IsExcluded = 1;
+ }
+
+ if (macro->IsFunction)
+ {
+ args = get_macro_arguments();
+ if (args)
+ {
+ emacro = vtkParsePreprocess_ExpandMacro(preprocessor, macro, args);
+ if (!emacro)
+ {
+ print_preprocessor_error(VTK_PARSE_MACRO_NUMARGS, NULL, 0);
+ }
+ free((char *)args);
+ }
+ }
+ else if (macro->Definition && macro->Definition[0])
+ {
+ /* first see if macro evaluates to a constant value */
+ preproc_int_t val;
+ int is_unsigned;
+ int r;
+ macro->IsExcluded = 1;
+ r = vtkParsePreprocess_EvaluateExpression(
+ preprocessor, macro->Definition, &val, &is_unsigned);
+ macro->IsExcluded = 0;
+ /* if it isn't a constant expression, then expand it */
+ if (r >= VTK_PARSE_MACRO_UNDEFINED)
+ {
+ emacro = vtkParsePreprocess_ExpandMacro(preprocessor, macro, NULL);
+ if (!emacro)
+ {
+ print_preprocessor_error(r, NULL, 0);
+ }
+ }
+ }
+ else
+ {
+ /* macros with no definition expand to nothing */
+ expanded = 1;
+ }
+ if (emacro)
+ {
+ /* invoke the parser on any expanded macros */
+ push_macro(macro);
+ push_buffer();
+ yy_switch_to_buffer(yy_scan_string(emacro));
+ vtkParsePreprocess_FreeMacroExpansion(preprocessor, macro, emacro);
+ expanded = 1;
+ }
+ }
+ if (!expanded)
+ {
+ /* if no macro expansion occurred, return the ID */
+ yylval.str = name;
+ if (yyleng > 3 && name[0] == 'v' && name[1] == 't' && name[2] == 'k')
+ {
+ return(VTK_ID);
+ }
+ else if (name[0] == 'Q')
+ {
+ return(QT_ID);
+ }
+ else
+ {
+ return(ID);
+ }
+ }
+ }
+ YY_BREAK
+case 134:
+YY_RULE_SETUP
+#line 437 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(FLOAT_LITERAL);
+ }
+ YY_BREAK
+case 135:
+YY_RULE_SETUP
+#line 442 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(FLOAT_LITERAL);
+ }
+ YY_BREAK
+case 136:
+YY_RULE_SETUP
+#line 447 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(FLOAT_LITERAL);
+ }
+ YY_BREAK
+case 137:
+YY_RULE_SETUP
+#line 452 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(HEX_LITERAL);
+ }
+ YY_BREAK
+case 138:
+YY_RULE_SETUP
+#line 457 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(OCT_LITERAL);
+ }
+ YY_BREAK
+case 139:
+YY_RULE_SETUP
+#line 462 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(INT_LITERAL);
+ }
+ YY_BREAK
+case 140:
+YY_RULE_SETUP
+#line 467 "vtkParse.l"
+{
+ yylval.str = vtkstrndup(yytext, yyleng);
+ return(ZERO);
+ }
+ YY_BREAK
+case 141:
+/* rule 141 can match eol */
+YY_RULE_SETUP
+#line 472 "vtkParse.l"
+/* escaped newlines */
+ YY_BREAK
+case 142:
+YY_RULE_SETUP
+#line 473 "vtkParse.l"
+/* whitespace */
+ YY_BREAK
+case 143:
+/* rule 143 can match eol */
+YY_RULE_SETUP
+#line 474 "vtkParse.l"
+/* whitespace */
+ YY_BREAK
+case 144:
+YY_RULE_SETUP
+#line 476 "vtkParse.l"
+return(OP_LSHIFT_EQ);
+ YY_BREAK
+case 145:
+YY_RULE_SETUP
+#line 477 "vtkParse.l"
+return(OP_RSHIFT_EQ);
+ YY_BREAK
+case 146:
+YY_RULE_SETUP
+#line 478 "vtkParse.l"
+return(OP_LSHIFT);
+ YY_BREAK
+case 147:
+YY_RULE_SETUP
+#line 479 "vtkParse.l"
+return(OP_DOT_POINTER);
+ YY_BREAK
+case 148:
+YY_RULE_SETUP
+#line 480 "vtkParse.l"
+return(OP_ARROW_POINTER);
+ YY_BREAK
+case 149:
+YY_RULE_SETUP
+#line 481 "vtkParse.l"
+return(OP_ARROW);
+ YY_BREAK
+case 150:
+YY_RULE_SETUP
+#line 482 "vtkParse.l"
+return(OP_RSHIFT);
+ YY_BREAK
+case 151:
+YY_RULE_SETUP
+#line 483 "vtkParse.l"
+return(OP_INCR);
+ YY_BREAK
+case 152:
+YY_RULE_SETUP
+#line 484 "vtkParse.l"
+return(OP_DECR);
+ YY_BREAK
+case 153:
+YY_RULE_SETUP
+#line 485 "vtkParse.l"
+return(OP_PLUS_EQ);
+ YY_BREAK
+case 154:
+YY_RULE_SETUP
+#line 486 "vtkParse.l"
+return(OP_MINUS_EQ);
+ YY_BREAK
+case 155:
+YY_RULE_SETUP
+#line 487 "vtkParse.l"
+return(OP_TIMES_EQ);
+ YY_BREAK
+case 156:
+YY_RULE_SETUP
+#line 488 "vtkParse.l"
+return(OP_DIVIDE_EQ);
+ YY_BREAK
+case 157:
+YY_RULE_SETUP
+#line 489 "vtkParse.l"
+return(OP_REMAINDER_EQ);
+ YY_BREAK
+case 158:
+YY_RULE_SETUP
+#line 490 "vtkParse.l"
+return(OP_AND_EQ);
+ YY_BREAK
+case 159:
+YY_RULE_SETUP
+#line 491 "vtkParse.l"
+return(OP_OR_EQ);
+ YY_BREAK
+case 160:
+YY_RULE_SETUP
+#line 492 "vtkParse.l"
+return(OP_XOR_EQ);
+ YY_BREAK
+case 161:
+YY_RULE_SETUP
+#line 493 "vtkParse.l"
+return(OP_LOGIC_AND);
+ YY_BREAK
+case 162:
+YY_RULE_SETUP
+#line 494 "vtkParse.l"
+return(OP_LOGIC_OR);
+ YY_BREAK
+case 163:
+YY_RULE_SETUP
+#line 495 "vtkParse.l"
+return(OP_LOGIC_EQ);
+ YY_BREAK
+case 164:
+YY_RULE_SETUP
+#line 496 "vtkParse.l"
+return(OP_LOGIC_NEQ);
+ YY_BREAK
+case 165:
+YY_RULE_SETUP
+#line 497 "vtkParse.l"
+return(OP_LOGIC_LEQ);
+ YY_BREAK
+case 166:
+YY_RULE_SETUP
+#line 498 "vtkParse.l"
+return(OP_LOGIC_GEQ);
+ YY_BREAK
+case 167:
+YY_RULE_SETUP
+#line 499 "vtkParse.l"
+return(ELLIPSIS);
+ YY_BREAK
+case 168:
+YY_RULE_SETUP
+#line 500 "vtkParse.l"
+return(DOUBLE_COLON);
+ YY_BREAK
+case 169:
+YY_RULE_SETUP
+#line 502 "vtkParse.l"
+return('[');
+ YY_BREAK
+case 170:
+YY_RULE_SETUP
+#line 503 "vtkParse.l"
+return(']');
+ YY_BREAK
+case 171:
+YY_RULE_SETUP
+#line 505 "vtkParse.l"
+return(yytext[0]);
+ YY_BREAK
+case YY_STATE_EOF(INITIAL):
+#line 507 "vtkParse.l"
+{ if (!pop_buffer()) { yyterminate(); } }
+ YY_BREAK
+case 172:
+YY_RULE_SETUP
+#line 509 "vtkParse.l"
+{ return(OTHER); }
+ YY_BREAK
+case 173:
+YY_RULE_SETUP
+#line 511 "vtkParse.l"
+YY_FATAL_ERROR( "flex scanner jammed" );
+ YY_BREAK
+#line 2910 "lex.yy.c"
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = (yy_hold_char);
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * yylex(). If so, then we have to assure
+ * consistency between YY_CURRENT_BUFFER and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++(yy_c_buf_p);
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+ yy_cp = (yy_c_buf_p);
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ (yy_did_buffer_switch_on_eof) = 0;
+
+ if ( yywrap( ) )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) =
+ (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ (yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = (yytext_ptr);
+ register int number_to_move, i;
+ int ret_val;
+
+ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+ else
+ {
+ yy_size_t num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+ int yy_c_buf_p_offset =
+ (int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ yy_size_t new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = 0;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+ number_to_move - 1;
+
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ (yy_n_chars), num_to_read );
+
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ if ( (yy_n_chars) == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ yyrestart(yyin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
+
+ (yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+ return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+ static yy_state_type yy_get_previous_state (void)
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+
+ yy_current_state = (yy_start);
+ yy_current_state += YY_AT_BOL();
+
+ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+ {
+ register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 1116 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ }
+
+ return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+{
+ register int yy_is_jam;
+ register char *yy_cp = (yy_c_buf_p);
+
+ register YY_CHAR yy_c = 1;
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 1116 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ yy_is_jam = (yy_current_state == 1115);
+
+ return yy_is_jam ? 0 : yy_current_state;
+}
+
+ static void yyunput (int c, register char * yy_bp )
+{
+ register char *yy_cp;
+
+ yy_cp = (yy_c_buf_p);
+
+ /* undo effects of setting up yytext */
+ *yy_cp = (yy_hold_char);
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ register yy_size_t number_to_move = (yy_n_chars) + 2;
+ register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+ register char *source =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+ if ( c == '\n' ){
+ --yylineno;
+ }
+
+ (yytext_ptr) = yy_bp;
+ (yy_hold_char) = *yy_cp;
+ (yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+ static int yyinput (void)
+#else
+ static int input (void)
+#endif
+
+{
+ int c;
+
+ *(yy_c_buf_p) = (yy_hold_char);
+
+ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ /* This was really a NUL. */
+ *(yy_c_buf_p) = '\0';
+
+ else
+ { /* need more input */
+ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+ ++(yy_c_buf_p);
+
+ switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart(yyin );
+
+ /*FALLTHROUGH*/
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap( ) )
+ return 0;
+
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput();
+#else
+ return input();
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) = (yytext_ptr) + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+ *(yy_c_buf_p) = '\0'; /* preserve yytext */
+ (yy_hold_char) = *++(yy_c_buf_p);
+
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol )
+
+ yylineno++;
+;
+
+ return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void yyrestart (FILE * input_file )
+{
+
+ if ( ! YY_CURRENT_BUFFER ){
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+ yy_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+{
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
+ */
+ yyensure_buffer_stack ();
+ if ( YY_CURRENT_BUFFER == new_buffer )
+ return;
+
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ yy_load_buffer_state( );
+
+ /* We don't actually know whether we did this switch during
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void yy_load_buffer_state (void)
+{
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ (yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
+{
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ yy_init_buffer(b,file );
+
+ return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ *
+ */
+ void yy_delete_buffer (YY_BUFFER_STATE b )
+{
+
+ if ( ! b )
+ return;
+
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yyfree((void *) b->yy_ch_buf );
+
+ yyfree((void *) b );
+}
+
+#ifndef __cplusplus
+extern int isatty (int );
+#endif /* __cplusplus */
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
+
+{
+ int oerrno = errno;
+
+ yy_flush_buffer(b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
+
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+
+ errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+ void yy_flush_buffer (YY_BUFFER_STATE b )
+{
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == YY_CURRENT_BUFFER )
+ yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ *
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+ if (new_buffer == NULL)
+ return;
+
+ yyensure_buffer_stack();
+
+ /* This block is copied from yy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ (yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ *
+ */
+void yypop_buffer_state (void)
+{
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if ((yy_buffer_stack_top) > 0)
+ --(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+ }
+}
+
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+ yy_size_t num_to_alloc;
+
+ if (!(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ (yy_buffer_stack_max) = num_to_alloc;
+ (yy_buffer_stack_top) = 0;
+ return;
+ }
+
+ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+ ((yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ (yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
+{
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = 0;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ yy_switch_to_buffer(b );
+
+ return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+{
+
+ return yy_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len )
+{
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n, i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = _yybytes_len + 2;
+ buf = (char *) yyalloc(n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
+
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = yy_scan_buffer(buf,n );
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ yytext[yyleng] = (yy_hold_char); \
+ (yy_c_buf_p) = yytext + yyless_macro_arg; \
+ (yy_hold_char) = *(yy_c_buf_p); \
+ *(yy_c_buf_p) = '\0'; \
+ yyleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
+
+/* Accessor methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ *
+ */
+int yyget_lineno (void)
+{
+
+ return yylineno;
+}
+
+/** Get the input stream.
+ *
+ */
+FILE *yyget_in (void)
+{
+ return yyin;
+}
+
+/** Get the output stream.
+ *
+ */
+FILE *yyget_out (void)
+{
+ return yyout;
+}
+
+/** Get the length of the current token.
+ *
+ */
+yy_size_t yyget_leng (void)
+{
+ return yyleng;
+}
+
+/** Get the current token.
+ *
+ */
+
+char *yyget_text (void)
+{
+ return yytext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ *
+ */
+void yyset_lineno (int line_number )
+{
+
+ yylineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ *
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE * in_str )
+{
+ yyin = in_str ;
+}
+
+void yyset_out (FILE * out_str )
+{
+ yyout = out_str ;
+}
+
+int yyget_debug (void)
+{
+ return yy_flex_debug;
+}
+
+void yyset_debug (int bdebug )
+{
+ yy_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from yylex_destroy(), so don't allocate here.
+ */
+
+ /* We do not touch yylineno unless the option is enabled. */
+ yylineno = 1;
+
+ (yy_buffer_stack) = 0;
+ (yy_buffer_stack_top) = 0;
+ (yy_buffer_stack_max) = 0;
+ (yy_c_buf_p) = (char *) 0;
+ (yy_init) = 0;
+ (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ yyin = stdin;
+ yyout = stdout;
+#else
+ yyin = (FILE *) 0;
+ yyout = (FILE *) 0;
+#endif
+
+ /* For future reference: Set errno on error, since we are called by
+ * yylex_init()
+ */
+ return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy (void)
+{
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ yypop_buffer_state();
+ }
+
+ /* Destroy the stack itself. */
+ yyfree((yy_buffer_stack) );
+ (yy_buffer_stack) = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * yylex() is called, initialization will occur. */
+ yy_init_globals( );
+
+ return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+}
+#endif
+
+void *yyalloc (yy_size_t size )
+{
+ return (void *) malloc( size );
+}
+
+void *yyrealloc (void * ptr, yy_size_t size )
+{
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+ * because both ANSI C and C++ allow castless assignment from
+ * any pointer type to void*, and deal with argument conversions
+ * as though doing an assignment.
+ */
+ return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr )
+{
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 511 "vtkParse.l"
+
+
+
+/*
+ * Return a parenthetical macro arg list as a new string.
+ */
+const char *get_macro_arguments()
+{
+ char *cp = NULL;
+ size_t i = 0;
+ int depth;
+ int ws = 0;
+ int sl = 0;
+ int c1 = input();
+
+ if (c1 == '\0')
+ {
+ if (pop_buffer() == 0)
+ {
+ return NULL;
+ }
+ }
+
+ while (c1 == ' ' || c1 == '\t' || c1 == '\r' || c1 == '\n')
+ {
+ c1 = input();
+ }
+
+ cp = (char *)malloc(4);
+
+ if (c1 != '(')
+ {
+ unput(c1);
+ return NULL;
+ }
+
+ cp[i++] = '(';
+ depth = 1;
+ c1 = input();
+
+ for (;;)
+ {
+ ws = 0;
+ sl = 0;
+ /* skip all whitespace */
+ while (c1 == ' ' || c1 == '\t' || c1 == '\r' || c1 == '\n')
+ {
+ ws = 1;
+ c1 = input();
+ }
+ if (c1 == '/')
+ {
+ c1 = input();
+ if (c1 == '*')
+ {
+ /* skip a C style comment */
+ ws = 1;
+ if (skip_comment() == 0)
+ {
+ return NULL;
+ }
+ c1 = input();
+ }
+ else if (c1 == '/')
+ {
+ /* skip a C++ style comment */
+ ws = 1;
+ do { c1 = input(); }
+ while (c1 != '\n' && c1 != '\0');
+ if (c1 == '\0')
+ {
+ return NULL;
+ }
+ c1 = input();
+ }
+ else
+ {
+ sl = 1;
+ }
+ }
+ if (ws)
+ {
+ /* add a single space to replace any whitespace */
+ cp[i++] = ' ';
+ if (i >= 4 && (i & (i-1)) == 0)
+ {
+ cp = (char *)realloc(cp, 2*i);
+ }
+ }
+ if (sl)
+ {
+ /* add a single space to replace any whitespace */
+ cp[i++] = '/';
+ if (i >= 4 && (i & (i-1)) == 0)
+ {
+ cp = (char *)realloc(cp, 2*i);
+ }
+ }
+ if (c1 == '\"' || c1 == '\'')
+ {
+ int c2 = c1;
+ int escaped = 2;
+ int firstloop = 1;
+ do
+ {
+ if (escaped)
+ {
+ --escaped;
+ }
+ if (!firstloop)
+ {
+ c1 = input();
+ }
+ firstloop = 0;
+ if (c1 == '\0')
+ {
+ break;
+ }
+ if (escaped == 0 && c1 == '\\')
+ {
+ escaped = 2;
+ }
+ cp[i++] = (char)c1;
+ if (i >= 4 && (i & (i-1)) == 0)
+ {
+ cp = (char *)realloc(cp, 2*i);
+ }
+ }
+ while (c1 != c2 || escaped);
+ }
+ else if (c1 != '\0')
+ {
+ cp[i++] = (char)c1;
+ if (i >= 4 && (i & (i-1)) == 0)
+ {
+ cp = (char *)realloc(cp, 2*i);
+ }
+ cp[i] = '\0';
+ if (c1 == '(')
+ {
+ depth++;
+ }
+ if (c1 == ')')
+ {
+ if (--depth == 0)
+ {
+ break;
+ }
+ }
+ }
+ else
+ {
+ return NULL;
+ }
+ c1 = input();
+ }
+
+ return cp;
+}
+
+/*
+ * Skip a C-style comment, return 0 if unterminated.
+ */
+int skip_comment()
+{
+ int c1 = 0, c2 = input();
+ for (;;)
+ {
+ if (c2 == 0)
+ {
+ print_preprocessor_error(VTK_PARSE_SYNTAX_ERROR,
+ "Cannot find end of comment.", 27);
+ return 0;
+ }
+ if (c1 == '*' && c2 == '/') break;
+ c1 = c2; c2 = input();
+ }
+ return 1;
+}
+
+/*
+ * If token contains a comment, make sure whole comment is skipped.
+ */
+int skip_trailing_comment(const char *text, size_t l)
+{
+ const char *cp = text;
+ const char *ep = text + l;
+ int incomment = 0;
+
+ while (cp < ep)
+ {
+ while (cp < ep && *cp != '/' && *cp != '\"') { cp++; };
+ if (cp >= ep)
+ {
+ break;
+ }
+ else if (cp[0] == '/' && cp[1] == '*')
+ {
+ incomment = 1;
+ cp += 2;
+ while (cp < ep && *cp != '*') { cp++; };
+ if (cp[0] == '*' && cp[1] == '/')
+ {
+ incomment = 0;
+ cp += 2;
+ }
+ else
+ {
+ cp++;
+ }
+ }
+ else if (cp[0] == '\"')
+ {
+ cp++;
+ while (cp < ep)
+ {
+ while (cp < ep && *cp != '\\' && *cp != '\"') { cp++; };
+ if (cp >= ep)
+ {
+ break;
+ }
+ else if (*cp == '\"')
+ {
+ cp++;
+ break;
+ }
+ else /* if (*cp == '\\') */
+ {
+ cp += 2;
+ }
+ }
+ }
+ else
+ {
+ cp++;
+ }
+ }
+
+ if (incomment)
+ {
+ return skip_comment();
+ }
+
+ return 1;
+}
+
+/*
+ * Skip ahead until the next preprocessor directive.
+ * This will eat the '#' that starts the directive.
+ * Return 0 if none found.
+ */
+int skip_to_next_directive()
+{
+ /* state == 0 at the start of a line */
+ int state = 0;
+ int c;
+
+ c = input();
+
+ while (c != 0)
+ {
+ /* whitespace */
+ if (c == ' ' || c == '\t')
+ {
+ c = input();
+ }
+ /* newline renews the start-of-line state */
+ else if (c == '\n')
+ {
+ state = 0;
+ c = input();
+ }
+ /* skip comments */
+ else if (c == '/')
+ {
+ state = 1;
+ if ( (c = input()) == '*')
+ {
+ if (skip_comment() == 0)
+ {
+ return 0;
+ }
+ c = input();
+ }
+ }
+ /* skip escaped characters */
+ else if (c == '\\')
+ {
+ state = 1;
+ if ( (c = input()) == '\r')
+ {
+ if ( (c = input()) == '\n')
+ {
+ c = input();
+ }
+ }
+ else if (c != 0)
+ {
+ c = input();
+ }
+ }
+ /* any other chars except '#' at start of line */
+ else if (c != '#' || state != 0)
+ {
+ state = 1;
+ c = input();
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ return c;
+}
+
+/*
+ * Skip to the next #else or #elif or #endif
+ */
+int skip_conditional_block()
+{
+ static char *linebuf = NULL;
+ static size_t linemaxlen = 80;
+ size_t i;
+ int c;
+ int result;
+
+ if (linebuf == 0)
+ {
+ linebuf = (char *)malloc(linemaxlen);
+ }
+
+ for (;;)
+ {
+ if (skip_to_next_directive() == 0)
+ {
+ return 0;
+ }
+ c = input();
+ while (c == ' ' || c == '\t')
+ {
+ c = input();
+ }
+ if (c == 0)
+ {
+ return 0;
+ }
+
+ /* eat the whole line */
+ i = 0;
+ linebuf[i++] = '#';
+ while (c != 0 && c != '\n')
+ {
+ if (i >= linemaxlen-5)
+ {
+ linemaxlen += i+5;
+ linebuf = (char *)realloc(linebuf, linemaxlen);
+ }
+ linebuf[i++] = c;
+ /* be sure to skip escaped newlines */
+ if (c == '\\')
+ {
+ c = input();
+ linebuf[i++] = c;
+ if (c == '\r')
+ {
+ c = input();
+ linebuf[i++] = c;
+ }
+ }
+ c = input();
+ }
+ linebuf[i++] = c;
+
+ result = vtkParsePreprocess_HandleDirective(preprocessor, linebuf);
+ if (result != VTK_PARSE_SKIP && result != VTK_PARSE_OK)
+ {
+ print_preprocessor_error(result, linebuf, i);
+ }
+ else if (result != VTK_PARSE_SKIP)
+ {
+ break;
+ }
+ }
+
+ return 1;
+}
+
+/*
+ * Skip ahead until one of the strings is found,
+ * then skip to the end of the line.
+ */
+int skip_ahead_multi(const char *strings[])
+{
+ char textbuf[SKIP_MATCH_MAXLEN+1];
+ char c = 0;
+ size_t i;
+
+ for (i = 0; i < (SKIP_MATCH_MAXLEN+1); i++)
+ {
+ textbuf[i] = '\0';
+ }
+
+ for (;;)
+ {
+ for (i = 0; i < SKIP_MATCH_MAXLEN; i++)
+ {
+ textbuf[i] = textbuf[i+1];
+ }
+
+ if ((c = (char)input()) == '\0')
+ {
+ print_preprocessor_error(VTK_PARSE_SYNTAX_ERROR, NULL, 0);
+ return 0;
+ }
+
+ textbuf[SKIP_MATCH_MAXLEN-1] = c;
+
+ for (i = 0; strings[i]; i++)
+ {
+ if (strcmp(&textbuf[SKIP_MATCH_MAXLEN-strlen(strings[i])],
+ strings[i]) == 0)
+ {
+ break;
+ }
+ }
+ if (strings[i])
+ {
+ break;
+ }
+ }
+
+ while (c != '\0' && c != '\n')
+ {
+ c = (char)input();
+ }
+
+ return 1;
+}
+
+/*
+ * Skip ahead until the string is found.
+ */
+int skip_ahead_until(const char *text)
+{
+ const char *strings[2];
+ strings[0] = text;
+ strings[1] = NULL;
+
+ return skip_ahead_multi(strings);
+}
+
+/*
+ * buffer stack, used for macro expansion and include files
+ */
+static size_t buffer_stack_size = 0;
+static YY_BUFFER_STATE *buffer_stack = NULL;
+
+/*
+ * push the current buffer onto the buffer stack.
+ */
+void push_buffer()
+{
+ size_t n = buffer_stack_size;
+ if (buffer_stack == NULL)
+ {
+ buffer_stack = (YY_BUFFER_STATE *)malloc(4*sizeof(YY_BUFFER_STATE));
+ }
+ /* grow the stack whenever size reaches a power of two */
+ else if (n >= 4 && (n & (n-1)) == 0)
+ {
+ buffer_stack = (YY_BUFFER_STATE *)realloc(
+ buffer_stack, 2*n*sizeof(YY_BUFFER_STATE));
+ }
+ buffer_stack[buffer_stack_size++] = YY_CURRENT_BUFFER;
+}
+
+/*
+ * pop the buffer stack and restore the previous buffer
+ */
+int pop_buffer()
+{
+ if (in_macro())
+ {
+ pop_macro();
+ }
+ else
+ {
+ pop_include();
+ }
+ if (buffer_stack_size == 0)
+ {
+ return 0;
+ }
+ yy_delete_buffer(YY_CURRENT_BUFFER);
+ yy_switch_to_buffer(buffer_stack[--buffer_stack_size]);
+ return 1;
+}
+
+/*
+ * include stack, to tell what include is being evaluated
+ */
+static size_t include_stack_size = 0;
+static FileInfo **include_stack = NULL;
+static int *lineno_stack = NULL;
+
+/*
+ * push the current include onto the include stack.
+ */
+void push_include(const char *filename)
+{
+ FileInfo *file_info = NULL;
+ int same_file = 0;
+ size_t n = include_stack_size;
+
+ if (include_stack == NULL)
+ {
+ include_stack = (FileInfo **)malloc(4*sizeof(FileInfo *));
+ lineno_stack = (int *)malloc(4*sizeof(int));
+ }
+
+ /* grow the stack whenever size reaches a power of two */
+ else if (n >= 4 && (n & (n-1)) == 0)
+ {
+ include_stack = (FileInfo **)realloc(
+ include_stack, 2*n*sizeof(FileInfo *));
+ lineno_stack = (int *)realloc(
+ lineno_stack, 2*n*sizeof(int));
+ }
+
+ lineno_stack[include_stack_size] = yyget_lineno();
+ yyset_lineno(0);
+ include_stack[include_stack_size++] = data;
+
+ /* if the file is including itself */
+ if (filename == data->FileName ||
+ (filename != 0 && data->FileName != 0 &&
+ strcmp(filename, data->FileName) == 0))
+ {
+ same_file = 1;
+ }
+
+ /* make a new fileinfo, but only if we are in the base namespace
+ * and only if the only items added so far are constants */
+ if (!same_file && currentNamespace == data->Contents &&
+ data->Contents->NumberOfItems == data->Contents->NumberOfConstants)
+ {
+ file_info = (FileInfo *)malloc(sizeof(FileInfo));
+ vtkParse_InitFile(file_info);
+ file_info->FileName = vtkstrdup(filename);
+ file_info->Contents = (NamespaceInfo *)malloc(sizeof(NamespaceInfo));
+ vtkParse_InitNamespace(file_info->Contents);
+ vtkParse_AddIncludeToFile(data, file_info);
+ file_info->Strings = data->Strings;
+ data = file_info;
+ currentNamespace = file_info->Contents;
+ }
+}
+
+/*
+ * pop the include stack
+ */
+void pop_include()
+{
+ if (include_stack_size > 0)
+ {
+ --include_stack_size;
+ fclose(yyin);
+ yyset_lineno(lineno_stack[include_stack_size]);
+ if (data != include_stack[include_stack_size])
+ {
+ data = include_stack[include_stack_size];
+ currentNamespace = data->Contents;
+ }
+ }
+}
+
+
+/*
+ * macro stack, to tell what macro is being evaluated
+ */
+static size_t macro_stack_size = 0;
+static MacroInfo **macro_stack = NULL;
+
+/*
+ * push the current macro onto the macro stack.
+ */
+void push_macro(MacroInfo *macro)
+{
+ size_t n = macro_stack_size;
+ if (macro_stack == NULL)
+ {
+ macro_stack = (MacroInfo **)malloc(4*sizeof(MacroInfo *));
+ }
+ /* grow the stack whenever size reaches a power of two */
+ else if (n >= 4 && (n & (n-1)) == 0)
+ {
+ macro_stack = (MacroInfo **)realloc(
+ macro_stack, 2*n*sizeof(MacroInfo *));
+ }
+ macro_stack[macro_stack_size++] = macro;
+ if (macro)
+ {
+ macro->IsExcluded = 1;
+ if (macro_stack_size == 1)
+ {
+ macroName = macro->Name;
+ macroUsed = 0;
+ macroEnded = 0;
+ }
+ }
+}
+
+/*
+ * pop the macro stack
+ */
+void pop_macro()
+{
+ MacroInfo *macro;
+
+ if (macro_stack_size > 0)
+ {
+ macro = macro_stack[--macro_stack_size];
+ if (macro)
+ {
+ macro->IsExcluded = 0;
+ }
+ }
+ macroEnded = 1;
+}
+
+/*
+ * are we currently processing a macro?
+ */
+int in_macro()
+{
+ return (macro_stack_size > 0);
+}
+
+/*
+ * print a preprocessor error code with filename and line number.
+ */
+void print_preprocessor_error(int result, const char *cp, size_t n)
+{
+ const char *text = "";
+
+ switch (result)
+ {
+ case VTK_PARSE_OK:
+ case VTK_PARSE_SKIP:
+ return;
+ case VTK_PARSE_PREPROC_DOUBLE:
+ text = "double in preprocessor conditional";
+ break;
+ case VTK_PARSE_PREPROC_FLOAT:
+ text = "float in preprocessor conditional";
+ break;
+ case VTK_PARSE_PREPROC_STRING:
+ text = "string in preprocessor conditional";
+ break;
+ case VTK_PARSE_MACRO_UNDEFINED:
+ text = "undefined macro";
+ break;
+ case VTK_PARSE_MACRO_REDEFINED:
+ text = "redefined macro";
+ break;
+ case VTK_PARSE_FILE_NOT_FOUND:
+ text = "file not found";
+ break;
+ case VTK_PARSE_FILE_OPEN_ERROR:
+ text = "can\'t open file";
+ break;
+ case VTK_PARSE_FILE_READ_ERROR:
+ text = "input/output error";
+ break;
+ case VTK_PARSE_MACRO_NUMARGS:
+ text = "wrong number of macro args";
+ break;
+ case VTK_PARSE_SYNTAX_ERROR:
+ text = "syntax error";
+ break;
+ }
+
+ /* be silent about missing include files */
+ if (result == VTK_PARSE_FILE_NOT_FOUND)
+ {
+ return;
+ }
+
+ print_parser_error(text, cp, n);
+}
+
+/*
+ * print an error with filename and line number.
+ */
+void print_parser_error(const char *text, const char *cp, size_t n)
+{
+ size_t j = 0;
+ const char *fn = "(none)";
+
+ if (data->FileName)
+ {
+ fn = data->FileName;
+ }
+ fprintf(yyout, "In %s:", fn);
+ for (j = 0; j < include_stack_size; j++)
+ {
+ fprintf(yyout, "%i:\nIn %s:",
+ lineno_stack[j], include_stack[j]->FileName);
+ }
+ fprintf(yyout, "%i:\n", yylineno);
+
+ if (cp)
+ {
+ fprintf(yyout, "%s: %*.*s\n", text, (int)n, (int)n, cp);
+ }
+ else if (text)
+ {
+ fprintf(yyout, "%s.\n", text);
+ }
+}
+
+/*
+ * Execute a preprocessor directive.
+ */
+void preprocessor_directive(const char *text, size_t l)
+{
+ int result = 0;
+ size_t n = 0;
+ const char *cp = text;
+ const char *ep = text + l;
+ const char *directive = NULL;
+
+ /* find the directive, store its length in "n" */
+ while (*cp == ' ' || *cp == '\t') { cp++; }
+ if (*cp == '#') { cp++; }
+ while ((*cp == ' ' || *cp == '\t') && cp < ep) { cp++; }
+ directive = cp;
+ while (*cp >= 'a' && *cp <= 'z' && cp < ep) { cp++; }
+ n = cp - directive;
+ while ((*cp == ' ' || *cp == '\t') && cp < ep) { cp++; }
+
+ if (n == 7 && strncmp(directive, "include", n) == 0)
+ {
+ /* include files */
+ int already_loaded = 0;
+ if (*cp == '<' || *cp == '\"')
+ {
+ /* if asked to recurse into header files */
+ if (Recursive && ep - cp > 3)
+ {
+ const char *dp;
+ dp = vtkParsePreprocess_FindIncludeFile(preprocessor,
+ &cp[1], (*cp != '\"'), &already_loaded);
+ if (dp)
+ {
+ yyin = fopen(dp, "r");
+ if (yyin)
+ {
+ push_include(dp);
+ push_buffer();
+ yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE));
+ return;
+ }
+ }
+ }
+ }
+ }
+
+ /* let the preprocessor handle the directive */
+ result = vtkParsePreprocess_HandleDirective(preprocessor, text);
+
+ if (result == VTK_PARSE_SKIP)
+ {
+ skip_conditional_block();
+ }
+ else if (result != VTK_PARSE_OK)
+ {
+ print_preprocessor_error(result, text, l);
+ }
+ else if (n == 6 && strncmp(directive, "define", n) == 0 &&
+ ep - cp > 4 && strncmp(cp, "VTK", 3) == 0)
+ {
+ /* macros that start with "VTK" */
+ MacroInfo *macro;
+
+ macro = vtkParsePreprocess_GetMacro(preprocessor, cp);
+ if (macro && macro->Definition && !macro->IsFunction)
+ {
+ /* if macro evaluates to a constant, add it as a constant */
+ macro->IsExcluded = 1;
+ if (guess_constant_type(macro->Definition) == 0)
+ {
+ result = VTK_PARSE_MACRO_UNDEFINED;
+ }
+ macro->IsExcluded = 0;
+ if (result < VTK_PARSE_MACRO_UNDEFINED)
+ {
+ add_constant(
+ vtkstrdup(macro->Name), vtkstrdup(macro->Definition), 0, NULL, 1);
+ }
+ }
+ }
+}
--- /dev/null
+
+/* A Bison parser, made by GNU Bison 2.4.1. */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "2.4.1"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Push parsers. */
+#define YYPUSH 0
+
+/* Pull parsers. */
+#define YYPULL 1
+
+/* Using locations. */
+#define YYLSP_NEEDED 0
+
+
+
+/* Copy the first part of user declarations. */
+
+/* Line 189 of yacc.c */
+#line 15 "vtkParse.y"
+
+
+/*
+
+This file must be translated to C and modified to build everywhere.
+
+Run yacc like this:
+
+ yacc -b vtkParse vtkParse.y
+
+Modify vtkParse.tab.c:
+ - convert TABs to spaces (eight per tab)
+ - remove spaces from ends of lines, s/ *$//g
+ - remove the "goto yyerrlab1;" that appears right before yyerrlab1:
+ - remove the #defined constants that appear right after the anonymous_enums
+
+*/
+
+/*
+The purpose of this parser is to read C++ header files in order to
+generate data structures that describe the C++ interface of a library,
+one header file at a time. As such, it is not a complete C++ parser.
+It only parses what is relevant to the interface and skips the rest.
+
+While the parser reads method definitions, type definitions, and
+template definitions it generates a "signature" which is a string
+that matches (apart from whitespace) the text that was parsed.
+
+While parsing types, the parser creates an unsigned int that describes
+the type as well as creating other data structures for arrays, function
+pointers, etc. The parser also creates a typeId string, which is either
+a simple id that gives the class name or type name, or is "function" for
+function pointer types, or "method" for method pointer types.
+*/
+
+/*
+Conformance Notes:
+
+This parser was designed empirically and incrementally. It has been
+refactored to make it more similar to the ANSI C++ 1996 BNF grammar,
+but there are still many very significant differences.
+
+The most significant difference between this parser and a "standard"
+parser is that it only parses declarations in detail. All other
+statements and expressions are parsed as arbitrary sequences of symbols,
+without any syntactic analysis.
+
+The "unqualified_id" does not directly include "operator_function_id" or
+"conversion_function_id" (e.g. ids like "operator=" or "operator int*").
+Instead, these two id types are used to allow operator functions to be
+handled by their own rules, rather than by the generic function rules.
+These ids can only be used in function declarations and using declarations.
+
+Types are handled quite differently from the ANSI BNF. These differences
+represent a prolonged (and ultimately successful) attempt to empirically
+create a yacc parser without any shift/reduce conflicts. The rules for
+types are organized according to the way that types are usually defined
+in working code, rather than strictly according to C++ grammar.
+
+The declaration specifiers "friend" and "typedef" can only appear at the
+beginning of a declaration sequence. There are also restrictions on
+where class and enum specifiers can be used: you can declare a new struct
+within a variable declaration, but not within a parameter declaration.
+
+The lexer returns each of "(scope::*", "(*", "(a::b::*", etc. as single
+tokens. The ANSI BNF, in contrast, would consider these to be a "("
+followed by a "ptr_operator". The lexer concatenates these tokens in
+order to eliminate shift/reduce conflicts in the parser. However, this
+means that this parser will only recognize "scope::*" as valid if it is
+preceded by "(", e.g. as part of a member function pointer specification.
+
+An odd bit of C++ ambiguity is that y(x); can be interpreted variously
+as declaration of variable "x" of type "y", as a function call if "y"
+is the name of a function, or as a constructor if "y" is the name of
+a class. This parser always interprets this pattern as a constructor
+declaration, because function calls are ignored by the parser, and
+variable declarations of the form y(x); are exceedingly rare compared
+to the more usual form y x; without parentheses.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#define yyerror(a) fprintf(stderr,"%s\n",a)
+#define yywrap() 1
+
+/* Make sure yacc-generated code knows we have included stdlib.h. */
+#ifndef _STDLIB_H
+# define _STDLIB_H
+#endif
+#define YYINCLUDED_STDLIB_H
+
+/* Borland and MSVC do not define __STDC__ properly. */
+#if !defined(__STDC__)
+# if (defined(_MSC_VER) && _MSC_VER >= 1200) || defined(__BORLANDC__)
+# define __STDC__ 1
+# endif
+#endif
+
+/* Disable warnings in generated code. */
+#if defined(_MSC_VER)
+# pragma warning (disable: 4127) /* conditional expression is constant */
+# pragma warning (disable: 4244) /* conversion to smaller integer type */
+#endif
+#if defined(__BORLANDC__)
+# pragma warn -8004 /* assigned a value that is never used */
+# pragma warn -8008 /* conditional is always true */
+# pragma warn -8066 /* unreachable code */
+#endif
+
+/* Map from the type anonymous_enumeration in vtkType.h to the
+ VTK wrapping type system number for the type. */
+
+#include "vtkParse.h"
+#include "vtkParsePreprocess.h"
+#include "vtkParseData.h"
+#include "vtkType.h"
+
+static unsigned int vtkParseTypeMap[] =
+ {
+ VTK_PARSE_VOID, /* VTK_VOID 0 */
+ 0, /* VTK_BIT 1 */
+ VTK_PARSE_CHAR, /* VTK_CHAR 2 */
+ VTK_PARSE_UNSIGNED_CHAR, /* VTK_UNSIGNED_CHAR 3 */
+ VTK_PARSE_SHORT, /* VTK_SHORT 4 */
+ VTK_PARSE_UNSIGNED_SHORT, /* VTK_UNSIGNED_SHORT 5 */
+ VTK_PARSE_INT, /* VTK_INT 6 */
+ VTK_PARSE_UNSIGNED_INT, /* VTK_UNSIGNED_INT 7 */
+ VTK_PARSE_LONG, /* VTK_LONG 8 */
+ VTK_PARSE_UNSIGNED_LONG, /* VTK_UNSIGNED_LONG 9 */
+ VTK_PARSE_FLOAT, /* VTK_FLOAT 10 */
+ VTK_PARSE_DOUBLE, /* VTK_DOUBLE 11 */
+ VTK_PARSE_ID_TYPE, /* VTK_ID_TYPE 12 */
+ VTK_PARSE_STRING, /* VTK_STRING 13 */
+ 0, /* VTK_OPAQUE 14 */
+ VTK_PARSE_SIGNED_CHAR, /* VTK_SIGNED_CHAR 15 */
+ VTK_PARSE_LONG_LONG, /* VTK_LONG_LONG 16 */
+ VTK_PARSE_UNSIGNED_LONG_LONG, /* VTK_UNSIGNED_LONG_LONG 17 */
+ VTK_PARSE___INT64, /* VTK___INT64 18 */
+ VTK_PARSE_UNSIGNED___INT64, /* VTK_UNSIGNED___INT64 19 */
+ 0, /* VTK_VARIANT 20 */
+ 0, /* VTK_OBJECT 21 */
+ VTK_PARSE_UNICODE_STRING /* VTK_UNICODE_STRING 22 */
+ };
+
+/* Define some constants to simplify references to the table lookup in
+ the primitive_type production rule code. */
+#define VTK_PARSE_INT8 vtkParseTypeMap[VTK_TYPE_INT8]
+#define VTK_PARSE_UINT8 vtkParseTypeMap[VTK_TYPE_UINT8]
+#define VTK_PARSE_INT16 vtkParseTypeMap[VTK_TYPE_INT16]
+#define VTK_PARSE_UINT16 vtkParseTypeMap[VTK_TYPE_UINT16]
+#define VTK_PARSE_INT32 vtkParseTypeMap[VTK_TYPE_INT32]
+#define VTK_PARSE_UINT32 vtkParseTypeMap[VTK_TYPE_UINT32]
+#define VTK_PARSE_INT64 vtkParseTypeMap[VTK_TYPE_INT64]
+#define VTK_PARSE_UINT64 vtkParseTypeMap[VTK_TYPE_UINT64]
+#define VTK_PARSE_FLOAT32 vtkParseTypeMap[VTK_TYPE_FLOAT32]
+#define VTK_PARSE_FLOAT64 vtkParseTypeMap[VTK_TYPE_FLOAT64]
+
+#define vtkParseDebug(s1, s2) \
+ if ( parseDebug ) { fprintf(stderr, " %s %s\n", s1, s2); }
+
+/* the tokenizer */
+int yylex(void);
+
+/* global variables */
+FileInfo *data = NULL;
+int parseDebug;
+
+/* the "preprocessor" */
+PreprocessInfo *preprocessor = NULL;
+
+/* include dirs specified on the command line */
+int NumberOfIncludeDirectories= 0;
+const char **IncludeDirectories;
+
+/* macros specified on the command line */
+int NumberOfDefinitions = 0;
+const char **Definitions;
+
+/* options that can be set by the programs that use the parser */
+int IgnoreBTX = 0;
+int Recursive = 0;
+
+/* various state variables */
+NamespaceInfo *currentNamespace = NULL;
+ClassInfo *currentClass = NULL;
+FunctionInfo *currentFunction = NULL;
+TemplateInfo *currentTemplate = NULL;
+const char *currentEnumName = NULL;
+const char *currentEnumValue = NULL;
+parse_access_t access_level = VTK_ACCESS_PUBLIC;
+
+/* functions from vtkParse.l */
+void print_parser_error(const char *text, const char *cp, size_t n);
+
+/* helper functions */
+const char *type_class(unsigned int type, const char *classname);
+void start_class(const char *classname, int is_struct_or_union);
+void reject_class(const char *classname, int is_struct_or_union);
+void end_class();
+void add_base_class(ClassInfo *cls, const char *name, int access_lev,
+ int is_virtual);
+void output_friend_function(void);
+void output_function(void);
+void reject_function(void);
+void set_return(FunctionInfo *func, unsigned int type,
+ const char *typeclass, int count);
+void add_parameter(FunctionInfo *func, unsigned int type,
+ const char *classname, int count);
+void add_template_parameter(unsigned int datatype,
+ unsigned int extra, const char *funcSig);
+void add_using(const char *name, int is_namespace);
+void start_enum(const char *enumname);
+void add_enum(const char *name, const char *value);
+void end_enum();
+unsigned int guess_constant_type(const char *value);
+void add_constant(const char *name, const char *value,
+ unsigned int type, const char *typeclass, int global);
+const char *add_const_scope(const char *name);
+void prepend_scope(char *cp, const char *arg);
+unsigned int guess_id_type(const char *cp);
+unsigned int add_indirection(unsigned int tval, unsigned int ptr);
+unsigned int add_indirection_to_array(unsigned int ptr);
+void handle_complex_type(ValueInfo *val, unsigned int datatype,
+ unsigned int extra, const char *funcSig);
+void handle_function_type(ValueInfo *param, const char *name,
+ const char *funcSig);
+void add_legacy_parameter(FunctionInfo *func, ValueInfo *param);
+
+void outputSetVectorMacro(const char *var, unsigned int paramType,
+ const char *typeText, int n);
+void outputGetVectorMacro(const char *var, unsigned int paramType,
+ const char *typeText, int n);
+
+/*----------------------------------------------------------------
+ * String utility methods
+ *
+ * Strings are centrally allocated and are const, and they are not
+ * freed until the program exits. If they need to be freed before
+ * then, vtkParse_FreeStringCache() can be called.
+ */
+
+/* duplicate the first n bytes of a string and terminate */
+static const char *vtkstrndup(const char *in, size_t n)
+{
+ return vtkParse_CacheString(data->Strings, in, n);
+}
+
+/* duplicate a string */
+static const char *vtkstrdup(const char *in)
+{
+ if (in)
+ {
+ in = vtkParse_CacheString(data->Strings, in, strlen(in));
+ }
+
+ return in;
+}
+
+/* helper function for concatenating strings */
+static const char *vtkstrncat(size_t n, const char **str)
+{
+ char *cp;
+ size_t i;
+ size_t j[8];
+ size_t m = 0;
+
+ for (i = 0; i < n; i++)
+ {
+ j[i] = 0;
+ if (str[i])
+ {
+ j[i] = strlen(str[i]);
+ m += j[i];
+ }
+ }
+ cp = vtkParse_NewString(data->Strings, m);
+ m = 0;
+ for (i = 0; i < n; i++)
+ {
+ if (j[i])
+ {
+ strncpy(&cp[m], str[i], j[i]);
+ m += j[i];
+ }
+ }
+ cp[m] = '\0';
+
+ return cp;
+}
+
+/* concatenate strings */
+static const char *vtkstrcat(const char *str1, const char *str2)
+{
+ const char *cp[2];
+
+ cp[0] = str1;
+ cp[1] = str2;
+ return vtkstrncat(2, cp);
+}
+
+static const char *vtkstrcat3(const char *str1, const char *str2,
+ const char *str3)
+{
+ const char *cp[3];
+
+ cp[0] = str1;
+ cp[1] = str2;
+ cp[2] = str3;
+ return vtkstrncat(3, cp);
+}
+
+static const char *vtkstrcat4(const char *str1, const char *str2,
+ const char *str3, const char *str4)
+{
+ const char *cp[4];
+
+ cp[0] = str1;
+ cp[1] = str2;
+ cp[2] = str3;
+ cp[3] = str4;
+ return vtkstrncat(4, cp);
+}
+
+static const char *vtkstrcat5(const char *str1, const char *str2,
+ const char *str3, const char *str4,
+ const char *str5)
+{
+ const char *cp[5];
+
+ cp[0] = str1;
+ cp[1] = str2;
+ cp[2] = str3;
+ cp[3] = str4;
+ cp[4] = str5;
+ return vtkstrncat(5, cp);
+}
+
+static const char *vtkstrcat7(const char *str1, const char *str2,
+ const char *str3, const char *str4,
+ const char *str5, const char *str6,
+ const char *str7)
+{
+ const char *cp[7];
+
+ cp[0] = str1;
+ cp[1] = str2;
+ cp[2] = str3;
+ cp[3] = str4;
+ cp[4] = str5;
+ cp[5] = str6;
+ cp[6] = str7;
+ return vtkstrncat(7, cp);
+}
+
+static size_t vtkidlen(const char *text)
+{
+ size_t i = 0;
+ char c = text[0];
+
+ if ((c >= 'a' && c <= 'z') ||
+ (c >= 'A' && c <= 'Z') ||
+ c == '_')
+ {
+ do
+ {
+ c = text[++i];
+ }
+ while ((c >= 'a' && c <= 'z') ||
+ (c >= 'A' && c <= 'Z') ||
+ (c >= '0' && c <= '9') ||
+ c == '_');
+ }
+
+ return i;
+}
+
+/*----------------------------------------------------------------
+ * Comments
+ */
+
+/* "private" variables */
+char *commentText = NULL;
+size_t commentLength = 0;
+size_t commentAllocatedLength = 0;
+int commentState = 0;
+
+const char *getComment()
+{
+ if (commentState != 0)
+ {
+ return commentText;
+ }
+ return NULL;
+}
+
+void clearComment()
+{
+ commentLength = 0;
+ if (commentText)
+ {
+ commentText[commentLength] = '\0';
+ }
+ commentState = 0;
+}
+
+void addCommentLine(const char *line, size_t n)
+{
+ if (commentState <= 0)
+ {
+ clearComment();
+ return;
+ }
+
+ if (commentText == NULL)
+ {
+ commentAllocatedLength = n+80;
+ commentText = (char *)malloc(commentAllocatedLength);
+ commentLength = 0;
+ commentText[0] = '\0';
+ }
+ else if (commentLength + n + 2 > commentAllocatedLength)
+ {
+ commentAllocatedLength = commentAllocatedLength + commentLength + n + 2;
+ commentText = (char *)realloc(commentText, commentAllocatedLength);
+ }
+
+ if (n > 0)
+ {
+ memcpy(&commentText[commentLength], line, n);
+ }
+ commentLength += n;
+ commentText[commentLength++] = '\n';
+ commentText[commentLength] = '\0';
+}
+
+void closeComment()
+{
+ switch (commentState)
+ {
+ case 1:
+ /* Make comment persist until a new comment starts */
+ commentState = -1;
+ break;
+ case 2:
+ data->Description = vtkstrdup(getComment());
+ clearComment();
+ break;
+ case 3:
+ data->SeeAlso = vtkstrdup(getComment());
+ clearComment();
+ break;
+ case 4:
+ data->Caveats = vtkstrdup(getComment());
+ clearComment();
+ break;
+ }
+}
+
+void closeOrClearComment()
+{
+ if (commentState < 0)
+ {
+ clearComment();
+ }
+ else
+ {
+ closeComment();
+ }
+}
+
+void setCommentState(int state)
+{
+ switch (state)
+ {
+ case 0:
+ closeComment();
+ break;
+ default:
+ closeComment();
+ clearComment();
+ break;
+ }
+
+ commentState = state;
+}
+
+
+/*----------------------------------------------------------------
+ * Macros
+ */
+
+/* "private" variables */
+const char *macroName = NULL;
+int macroUsed = 0;
+int macroEnded = 0;
+
+const char *getMacro()
+{
+ if (macroUsed == 0)
+ {
+ macroUsed = macroEnded;
+ return macroName;
+ }
+ return NULL;
+}
+
+
+/*----------------------------------------------------------------
+ * Namespaces
+ *
+ * operates on: currentNamespace
+ */
+
+/* "private" variables */
+NamespaceInfo *namespaceStack[10];
+int namespaceDepth = 0;
+
+/* enter a namespace */
+void pushNamespace(const char *name)
+{
+ int i;
+ NamespaceInfo *oldNamespace = currentNamespace;
+
+ for (i = 0; i < oldNamespace->NumberOfNamespaces; i++)
+ {
+ /* see if the namespace already exists */
+ if (strcmp(name, oldNamespace->Namespaces[i]->Name) == 0)
+ {
+ currentNamespace = oldNamespace->Namespaces[i];
+ }
+ }
+
+ /* create a new namespace */
+ if (i == oldNamespace->NumberOfNamespaces)
+ {
+ currentNamespace = (NamespaceInfo *)malloc(sizeof(NamespaceInfo));
+ vtkParse_InitNamespace(currentNamespace);
+ currentNamespace->Name = name;
+ vtkParse_AddNamespaceToNamespace(oldNamespace, currentNamespace);
+ }
+
+ namespaceStack[namespaceDepth++] = oldNamespace;
+}
+
+/* leave the namespace */
+void popNamespace()
+{
+ currentNamespace = namespaceStack[--namespaceDepth];
+}
+
+
+/*----------------------------------------------------------------
+ * Classes
+ *
+ * operates on: currentClass, access_level
+ */
+
+/* "private" variables */
+ClassInfo *classStack[10];
+parse_access_t classAccessStack[10];
+int classDepth = 0;
+
+/* start an internal class definition */
+void pushClass()
+{
+ classAccessStack[classDepth] = access_level;
+ classStack[classDepth++] = currentClass;
+}
+
+/* leave the internal class */
+void popClass()
+{
+ currentClass = classStack[--classDepth];
+ access_level = classAccessStack[classDepth];
+}
+
+
+/*----------------------------------------------------------------
+ * Templates
+ *
+ * operates on: currentTemplate
+ */
+
+/* "private" variables */
+TemplateInfo *templateStack[10];
+int templateDepth = 0;
+
+/* begin a template */
+void startTemplate()
+{
+ currentTemplate = (TemplateInfo *)malloc(sizeof(TemplateInfo));
+ vtkParse_InitTemplate(currentTemplate);
+}
+
+/* clear a template, if set */
+void clearTemplate()
+{
+ if (currentTemplate)
+ {
+ free(currentTemplate);
+ }
+ currentTemplate = NULL;
+}
+
+/* push the template onto the stack, and start a new one */
+void pushTemplate()
+{
+ templateStack[templateDepth++] = currentTemplate;
+ startTemplate();
+}
+
+/* pop a template off the stack */
+void popTemplate()
+{
+ currentTemplate = templateStack[--templateDepth];
+}
+
+/*----------------------------------------------------------------
+ * Function signatures
+ *
+ * operates on: currentFunction
+ */
+
+/* "private" variables */
+int sigClosed = 0;
+size_t sigMark[10];
+size_t sigLength = 0;
+size_t sigAllocatedLength = 0;
+int sigMarkDepth = 0;
+char *signature = NULL;
+
+/* start a new signature */
+void startSig()
+{
+ signature = NULL;
+ sigLength = 0;
+ sigAllocatedLength = 0;
+ sigClosed = 0;
+ sigMarkDepth = 0;
+ sigMark[0] = 0;
+}
+
+/* get the signature */
+const char *getSig()
+{
+ return signature;
+}
+
+/* get the signature length */
+size_t getSigLength()
+{
+ return sigLength;
+}
+
+/* reset the sig to the specified length */
+void resetSig(size_t n)
+{
+ if (n < sigLength)
+ {
+ sigLength = n;
+ }
+}
+
+/* reallocate Signature if n chars cannot be appended */
+void checkSigSize(size_t n)
+{
+ const char *ccp;
+
+ if (sigAllocatedLength == 0)
+ {
+ sigLength = 0;
+ sigAllocatedLength = 80 + n;
+ signature = vtkParse_NewString(data->Strings, sigAllocatedLength);
+ signature[0] = '\0';
+ }
+ else if (sigLength + n > sigAllocatedLength)
+ {
+ sigAllocatedLength += sigLength + n;
+ ccp = signature;
+ signature = vtkParse_NewString(data->Strings, sigAllocatedLength);
+ strncpy(signature, ccp, sigLength);
+ signature[sigLength] = '\0';
+ }
+}
+
+/* close the signature, i.e. allow no more additions to it */
+void closeSig()
+{
+ sigClosed = 1;
+}
+
+/* re-open the signature */
+void openSig()
+{
+ sigClosed = 0;
+}
+
+/* insert text at the beginning of the signature */
+void preSig(const char *arg)
+{
+ if (!sigClosed)
+ {
+ size_t n = strlen(arg);
+ checkSigSize(n);
+ if (n > 0)
+ {
+ memmove(&signature[n], signature, sigLength);
+ strncpy(signature, arg, n);
+ sigLength += n;
+ }
+ signature[sigLength] = '\0';
+ }
+}
+
+/* append text to the end of the signature */
+void postSig(const char *arg)
+{
+ if (!sigClosed)
+ {
+ size_t n = strlen(arg);
+ checkSigSize(n);
+ if (n > 0)
+ {
+ strncpy(&signature[sigLength], arg, n);
+ sigLength += n;
+ }
+ signature[sigLength] = '\0';
+ }
+}
+
+/* set a mark in the signature for later operations */
+void markSig()
+{
+ sigMark[sigMarkDepth] = 0;
+ if (signature)
+ {
+ sigMark[sigMarkDepth] = sigLength;
+ }
+ sigMarkDepth++;
+}
+
+/* get the contents of the sig from the mark, and clear the mark */
+const char *copySig()
+{
+ const char *cp = NULL;
+ if (sigMarkDepth > 0)
+ {
+ sigMarkDepth--;
+ }
+ if (signature)
+ {
+ cp = &signature[sigMark[sigMarkDepth]];
+ }
+ return vtkstrdup(cp);
+}
+
+/* swap the signature text using the mark as the radix */
+void swapSig()
+{
+ if (sigMarkDepth > 0)
+ {
+ sigMarkDepth--;
+ }
+ if (signature && sigMark[sigMarkDepth] > 0)
+ {
+ size_t i, m, n, nn;
+ char c;
+ char *cp;
+ cp = signature;
+ n = sigLength;
+ m = sigMark[sigMarkDepth];
+ nn = m/2;
+ for (i = 0; i < nn; i++)
+ {
+ c = cp[i]; cp[i] = cp[m-i-1]; cp[m-i-1] = c;
+ }
+ nn = (n-m)/2;
+ for (i = 0; i < nn; i++)
+ {
+ c = cp[i+m]; cp[i+m] = cp[n-i-1]; cp[n-i-1] = c;
+ }
+ nn = n/2;
+ for (i = 0; i < nn; i++)
+ {
+ c = cp[i]; cp[i] = cp[n-i-1]; cp[n-i-1] = c;
+ }
+ }
+}
+
+/* chop the last space from the signature */
+void chopSig(void)
+{
+ if (signature)
+ {
+ size_t n = sigLength;
+ if (n > 0 && signature[n-1] == ' ')
+ {
+ signature[n-1] = '\0';
+ sigLength--;
+ }
+ }
+}
+
+/*----------------------------------------------------------------
+ * Subroutines for building a type
+ */
+
+/* "private" variables */
+unsigned int storedType;
+unsigned int typeStack[10];
+int typeDepth = 0;
+
+/* save the type on the stack */
+void pushType()
+{
+ typeStack[typeDepth++] = storedType;
+}
+
+/* pop the type stack */
+void popType()
+{
+ storedType = typeStack[--typeDepth];
+}
+
+/* clear the storage type */
+void clearType()
+{
+ storedType = 0;
+}
+
+/* save the type */
+void setTypeBase(unsigned int base)
+{
+ storedType &= ~(unsigned int)(VTK_PARSE_BASE_TYPE);
+ storedType |= base;
+}
+
+/* set a type modifier bit */
+void setTypeMod(unsigned int mod)
+{
+ storedType |= mod;
+}
+
+/* modify the indirection (pointers, refs) in the storage type */
+void setTypePtr(unsigned int ind)
+{
+ storedType &= ~(unsigned int)(VTK_PARSE_INDIRECT);
+ ind &= VTK_PARSE_INDIRECT;
+ storedType |= ind;
+}
+
+/* retrieve the storage type */
+unsigned int getType()
+{
+ return storedType;
+}
+
+/* combine two primitive type parts, e.g. "long int" */
+unsigned int buildTypeBase(unsigned int a, unsigned int b)
+{
+ unsigned int base = (a & VTK_PARSE_BASE_TYPE);
+ unsigned int basemod = (b & VTK_PARSE_BASE_TYPE);
+
+ switch (base)
+ {
+ case 0:
+ base = basemod;
+ break;
+ case VTK_PARSE_UNSIGNED_INT:
+ base = (basemod | VTK_PARSE_UNSIGNED);
+ break;
+ case VTK_PARSE_INT:
+ base = basemod;
+ if (base == VTK_PARSE_CHAR)
+ {
+ base = VTK_PARSE_SIGNED_CHAR;
+ }
+ break;
+ case VTK_PARSE_CHAR:
+ if (basemod == VTK_PARSE_INT)
+ {
+ base = VTK_PARSE_SIGNED_CHAR;
+ }
+ else if (basemod == VTK_PARSE_UNSIGNED_INT)
+ {
+ base = VTK_PARSE_UNSIGNED_CHAR;
+ }
+ break;
+ case VTK_PARSE_SHORT:
+ if (basemod == VTK_PARSE_UNSIGNED_INT)
+ {
+ base = VTK_PARSE_UNSIGNED_SHORT;
+ }
+ break;
+ case VTK_PARSE_LONG:
+ if (basemod == VTK_PARSE_UNSIGNED_INT)
+ {
+ base = VTK_PARSE_UNSIGNED_LONG;
+ }
+ else if (basemod == VTK_PARSE_LONG)
+ {
+ base = VTK_PARSE_LONG_LONG;
+ }
+ else if (basemod == VTK_PARSE_DOUBLE)
+ {
+ base = VTK_PARSE_LONG_DOUBLE;
+ }
+ break;
+ case VTK_PARSE_UNSIGNED_LONG:
+ if (basemod == VTK_PARSE_LONG)
+ {
+ base = VTK_PARSE_UNSIGNED_LONG_LONG;
+ }
+ break;
+ case VTK_PARSE_LONG_LONG:
+ if (basemod == VTK_PARSE_UNSIGNED_INT)
+ {
+ base = VTK_PARSE_UNSIGNED_LONG_LONG;
+ }
+ break;
+ case VTK_PARSE___INT64:
+ if (basemod == VTK_PARSE_UNSIGNED_INT)
+ {
+ base = VTK_PARSE_UNSIGNED___INT64;
+ }
+ break;
+ case VTK_PARSE_DOUBLE:
+ if (basemod == VTK_PARSE_LONG)
+ {
+ base = VTK_PARSE_LONG_DOUBLE;
+ }
+ break;
+ }
+
+ return ((a & ~(unsigned int)(VTK_PARSE_BASE_TYPE)) | base);
+}
+
+
+/*----------------------------------------------------------------
+ * Array information
+ */
+
+/* "private" variables */
+int numberOfDimensions = 0;
+const char **arrayDimensions = NULL;
+
+/* clear the array counter */
+void clearArray(void)
+{
+ numberOfDimensions = 0;
+ arrayDimensions = NULL;
+}
+
+/* add another dimension */
+void pushArraySize(const char *size)
+{
+ vtkParse_AddStringToArray(&arrayDimensions, &numberOfDimensions,
+ size);
+}
+
+/* add another dimension to the front */
+void pushArrayFront(const char *size)
+{
+ int i;
+
+ vtkParse_AddStringToArray(&arrayDimensions, &numberOfDimensions, 0);
+
+ for (i = numberOfDimensions-1; i > 0; i--)
+ {
+ arrayDimensions[i] = arrayDimensions[i-1];
+ }
+
+ arrayDimensions[0] = size;
+}
+
+/* get the number of dimensions */
+int getArrayNDims()
+{
+ return numberOfDimensions;
+}
+
+/* get the whole array */
+const char **getArray()
+{
+ if (numberOfDimensions > 0)
+ {
+ return arrayDimensions;
+ }
+ return NULL;
+}
+
+/*----------------------------------------------------------------
+ * Variables and Parameters
+ */
+
+/* "private" variables */
+const char *currentVarName = 0;
+const char *currentVarValue = 0;
+const char *currentId = 0;
+
+/* clear the var Id */
+void clearVarName(void)
+{
+ currentVarName = NULL;
+}
+
+/* set the var Id */
+void setVarName(const char *text)
+{
+ currentVarName = text;
+}
+
+/* return the var id */
+const char *getVarName()
+{
+ return currentVarName;
+}
+
+/* variable value -------------- */
+
+/* clear the var value */
+void clearVarValue(void)
+{
+ currentVarValue = NULL;
+}
+
+/* set the var value */
+void setVarValue(const char *text)
+{
+ currentVarValue = text;
+}
+
+/* return the var value */
+const char *getVarValue()
+{
+ return currentVarValue;
+}
+
+/* variable type -------------- */
+
+/* clear the current Id */
+void clearTypeId(void)
+{
+ currentId = NULL;
+}
+
+/* set the current Id, it is sticky until cleared */
+void setTypeId(const char *text)
+{
+ if (currentId == NULL)
+ {
+ currentId = text;
+ }
+}
+
+/* set the signature and type together */
+void typeSig(const char *text)
+{
+ postSig(text);
+ postSig(" ");
+
+ if (currentId == 0)
+ {
+ setTypeId(text);
+ }
+}
+
+/* return the current Id */
+const char *getTypeId()
+{
+ return currentId;
+}
+
+/*----------------------------------------------------------------
+ * Specifically for function pointers, the scope (i.e. class) that
+ * the function is a method of.
+ */
+
+const char *pointerScopeStack[10];
+int pointerScopeDepth = 0;
+
+/* save the scope for scoped method pointers */
+void scopeSig(const char *scope)
+{
+ if (scope && scope[0] != '\0')
+ {
+ postSig(scope);
+ }
+ else
+ {
+ scope = NULL;
+ }
+ pointerScopeStack[pointerScopeDepth++] = vtkstrdup(scope);
+}
+
+/* get the scope back */
+const char *getScope()
+{
+ return pointerScopeStack[--pointerScopeDepth];
+}
+
+/*----------------------------------------------------------------
+ * Function stack
+ *
+ * operates on: currentFunction
+ */
+
+/* "private" variables */
+FunctionInfo *functionStack[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+const char *functionVarNameStack[10];
+const char *functionTypeIdStack[10];
+int functionDepth = 0;
+
+void pushFunction()
+{
+ functionStack[functionDepth] = currentFunction;
+ currentFunction = (FunctionInfo *)malloc(sizeof(FunctionInfo));
+ vtkParse_InitFunction(currentFunction);
+ if (!functionStack[functionDepth])
+ {
+ startSig();
+ }
+ functionVarNameStack[functionDepth] = getVarName();
+ functionTypeIdStack[functionDepth] = getTypeId();
+ pushType();
+ clearType();
+ clearVarName();
+ clearTypeId();
+ functionDepth++;
+ functionStack[functionDepth] = 0;
+}
+
+void popFunction()
+{
+ FunctionInfo *newFunction = currentFunction;
+
+ --functionDepth;
+ currentFunction = functionStack[functionDepth];
+ clearVarName();
+ if (functionVarNameStack[functionDepth])
+ {
+ setVarName(functionVarNameStack[functionDepth]);
+ }
+ clearTypeId();
+ if (functionTypeIdStack[functionDepth])
+ {
+ setTypeId(functionTypeIdStack[functionDepth]);
+ }
+ popType();
+
+ functionStack[functionDepth+1] = newFunction;
+}
+
+FunctionInfo *getFunction()
+{
+ return functionStack[functionDepth+1];
+}
+
+/*----------------------------------------------------------------
+ * Utility methods
+ */
+
+/* prepend a scope:: to a name */
+void prepend_scope(char *cp, const char *arg)
+{
+ size_t i, j, m, n;
+ int depth;
+
+ m = strlen(cp);
+ n = strlen(arg);
+ i = m;
+ while (i > 0 &&
+ ((cp[i-1] >= 'a' && cp[i-1] <= 'z') ||
+ (cp[i-1] >= 'A' && cp[i-1] <= 'Z') ||
+ (cp[i-1] >= '0' && cp[i-1] <= '9') ||
+ cp[i-1] == '_' || cp[i-1] == ':' ||
+ cp[i-1] == '>'))
+ {
+ i--;
+ if (cp[i] == '>')
+ {
+ depth = 1;
+ while (i > 0)
+ {
+ i--;
+ if (cp[i] == '<')
+ {
+ if (--depth == 0)
+ {
+ break;
+ }
+ }
+ if (cp[i] == '>')
+ {
+ depth++;
+ }
+ }
+ }
+ }
+
+ for (j = m; j > i; j--)
+ {
+ cp[j+n+1] = cp[j-1];
+ }
+ for (j = 0; j < n; j++)
+ {
+ cp[j+i] = arg[j];
+ }
+ cp[n+i] = ':'; cp[n+i+1] = ':';
+ cp[m+n+2] = '\0';
+}
+
+/* expand a type by including pointers from another */
+unsigned int add_indirection(unsigned int type1, unsigned int type2)
+{
+ unsigned int ptr1 = (type1 & VTK_PARSE_POINTER_MASK);
+ unsigned int ptr2 = (type2 & VTK_PARSE_POINTER_MASK);
+ unsigned int reverse = 0;
+ unsigned int result;
+
+ /* one of type1 or type2 will only have VTK_PARSE_INDIRECT, but
+ * we don't know which one. */
+ result = ((type1 & ~VTK_PARSE_POINTER_MASK) |
+ (type2 & ~VTK_PARSE_POINTER_MASK));
+
+ while (ptr2)
+ {
+ reverse = ((reverse << 2) | (ptr2 & VTK_PARSE_POINTER_LOWMASK));
+ ptr2 = ((ptr2 >> 2) & VTK_PARSE_POINTER_MASK);
+ }
+
+ while (reverse)
+ {
+ ptr1 = ((ptr1 << 2) | (reverse & VTK_PARSE_POINTER_LOWMASK));
+ reverse = ((reverse >> 2) & VTK_PARSE_POINTER_MASK);
+
+ /* make sure we don't exceed the VTK_PARSE_POINTER bitfield */
+ if ((ptr1 & VTK_PARSE_POINTER_MASK) != ptr1)
+ {
+ ptr1 = VTK_PARSE_BAD_INDIRECT;
+ break;
+ }
+ }
+
+ return (ptr1 | result);
+}
+
+/* There is only one array, so add any parenthetical indirection to it */
+unsigned int add_indirection_to_array(unsigned int type)
+{
+ unsigned int ptrs = (type & VTK_PARSE_POINTER_MASK);
+ unsigned int result = (type & ~VTK_PARSE_POINTER_MASK);
+ unsigned int reverse = 0;
+
+ if ((type & VTK_PARSE_INDIRECT) == VTK_PARSE_BAD_INDIRECT)
+ {
+ return (result | VTK_PARSE_BAD_INDIRECT);
+ }
+
+ while (ptrs)
+ {
+ reverse = ((reverse << 2) | (ptrs & VTK_PARSE_POINTER_LOWMASK));
+ ptrs = ((ptrs >> 2) & VTK_PARSE_POINTER_MASK);
+ }
+
+ /* I know the reversal makes no difference, but it is still
+ * nice to add the pointers in the correct order, just in
+ * case const pointers are thrown into the mix. */
+ while (reverse)
+ {
+ pushArrayFront("");
+ reverse = ((reverse >> 2) & VTK_PARSE_POINTER_MASK);
+ }
+
+ return result;
+}
+
+
+
+/* Line 189 of yacc.c */
+#line 1354 "vtkParse.tab.c"
+
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table. */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ ID = 258,
+ VTK_ID = 259,
+ QT_ID = 260,
+ StdString = 261,
+ UnicodeString = 262,
+ OSTREAM = 263,
+ ISTREAM = 264,
+ LP = 265,
+ LA = 266,
+ STRING_LITERAL = 267,
+ INT_LITERAL = 268,
+ HEX_LITERAL = 269,
+ OCT_LITERAL = 270,
+ FLOAT_LITERAL = 271,
+ CHAR_LITERAL = 272,
+ ZERO = 273,
+ STRUCT = 274,
+ CLASS = 275,
+ UNION = 276,
+ ENUM = 277,
+ PUBLIC = 278,
+ PRIVATE = 279,
+ PROTECTED = 280,
+ CONST = 281,
+ VOLATILE = 282,
+ MUTABLE = 283,
+ STATIC = 284,
+ VIRTUAL = 285,
+ EXPLICIT = 286,
+ INLINE = 287,
+ FRIEND = 288,
+ EXTERN = 289,
+ OPERATOR = 290,
+ TEMPLATE = 291,
+ THROW = 292,
+ TYPENAME = 293,
+ TYPEDEF = 294,
+ NAMESPACE = 295,
+ USING = 296,
+ NEW = 297,
+ DELETE = 298,
+ STATIC_CAST = 299,
+ DYNAMIC_CAST = 300,
+ CONST_CAST = 301,
+ REINTERPRET_CAST = 302,
+ OP_LSHIFT_EQ = 303,
+ OP_RSHIFT_EQ = 304,
+ OP_LSHIFT = 305,
+ OP_RSHIFT = 306,
+ OP_DOT_POINTER = 307,
+ OP_ARROW_POINTER = 308,
+ OP_ARROW = 309,
+ OP_INCR = 310,
+ OP_DECR = 311,
+ OP_PLUS_EQ = 312,
+ OP_MINUS_EQ = 313,
+ OP_TIMES_EQ = 314,
+ OP_DIVIDE_EQ = 315,
+ OP_REMAINDER_EQ = 316,
+ OP_AND_EQ = 317,
+ OP_OR_EQ = 318,
+ OP_XOR_EQ = 319,
+ OP_LOGIC_AND = 320,
+ OP_LOGIC_OR = 321,
+ OP_LOGIC_EQ = 322,
+ OP_LOGIC_NEQ = 323,
+ OP_LOGIC_LEQ = 324,
+ OP_LOGIC_GEQ = 325,
+ ELLIPSIS = 326,
+ DOUBLE_COLON = 327,
+ OTHER = 328,
+ VOID = 329,
+ BOOL = 330,
+ FLOAT = 331,
+ DOUBLE = 332,
+ INT = 333,
+ SHORT = 334,
+ LONG = 335,
+ INT64__ = 336,
+ CHAR = 337,
+ SIGNED = 338,
+ UNSIGNED = 339,
+ SSIZE_T = 340,
+ SIZE_T = 341,
+ IdType = 342,
+ TypeInt8 = 343,
+ TypeUInt8 = 344,
+ TypeInt16 = 345,
+ TypeUInt16 = 346,
+ TypeInt32 = 347,
+ TypeUInt32 = 348,
+ TypeInt64 = 349,
+ TypeUInt64 = 350,
+ TypeFloat32 = 351,
+ TypeFloat64 = 352,
+ SetMacro = 353,
+ GetMacro = 354,
+ SetStringMacro = 355,
+ GetStringMacro = 356,
+ SetClampMacro = 357,
+ SetObjectMacro = 358,
+ GetObjectMacro = 359,
+ BooleanMacro = 360,
+ SetVector2Macro = 361,
+ SetVector3Macro = 362,
+ SetVector4Macro = 363,
+ SetVector6Macro = 364,
+ GetVector2Macro = 365,
+ GetVector3Macro = 366,
+ GetVector4Macro = 367,
+ GetVector6Macro = 368,
+ SetVectorMacro = 369,
+ GetVectorMacro = 370,
+ ViewportCoordinateMacro = 371,
+ WorldCoordinateMacro = 372,
+ TypeMacro = 373,
+ VTK_BYTE_SWAP_DECL = 374
+ };
+#endif
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+/* Line 222 of yacc.c */
+#line 1302 "vtkParse.y"
+
+ const char *str;
+ unsigned int integer;
+
+
+
+/* Line 222 of yacc.c */
+#line 1635 "vtkParse.tab.c"
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations. */
+
+
+/* Line 264 of yacc.c */
+#line 1647 "vtkParse.tab.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(msgid) dgettext ("bison-runtime", msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+ int yyi;
+#endif
+{
+ return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined _STDLIB_H \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss_alloc;
+ YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 3
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 5657
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 143
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 240
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 603
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 968
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 374
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 139, 2, 2, 2, 135, 133, 2,
+ 126, 127, 134, 138, 125, 137, 142, 136, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 124, 120,
+ 128, 123, 129, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 130, 2, 131, 141, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 121, 140, 122, 132, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
+ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
+ 115, 116, 117, 118, 119
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint16 yyprhs[] =
+{
+ 0, 0, 3, 5, 6, 7, 11, 13, 15, 17,
+ 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
+ 40, 42, 45, 48, 51, 54, 60, 65, 66, 73,
+ 79, 81, 84, 88, 93, 98, 104, 105, 111, 112,
+ 117, 118, 122, 124, 126, 128, 129, 130, 134, 138,
+ 140, 142, 144, 146, 148, 150, 152, 154, 156, 158,
+ 160, 162, 164, 167, 170, 172, 175, 178, 181, 185,
+ 188, 192, 193, 195, 198, 200, 204, 206, 210, 214,
+ 215, 217, 218, 220, 222, 224, 226, 231, 237, 238,
+ 244, 247, 249, 250, 252, 254, 257, 261, 263, 264,
+ 269, 276, 280, 285, 288, 292, 298, 302, 304, 307,
+ 313, 319, 326, 332, 339, 342, 343, 347, 350, 352,
+ 354, 355, 356, 364, 366, 370, 372, 375, 378, 381,
+ 385, 389, 394, 398, 399, 405, 407, 408, 413, 414,
+ 415, 421, 422, 423, 429, 430, 431, 432, 440, 442,
+ 444, 445, 447, 448, 452, 454, 457, 460, 463, 466,
+ 469, 472, 476, 479, 483, 486, 490, 494, 497, 501,
+ 506, 509, 511, 513, 516, 518, 521, 524, 525, 526,
+ 534, 537, 538, 542, 543, 549, 552, 554, 557, 558,
+ 561, 562, 566, 568, 571, 575, 577, 578, 584, 586,
+ 588, 589, 590, 596, 597, 603, 604, 607, 609, 613,
+ 616, 617, 618, 621, 623, 624, 629, 633, 634, 635,
+ 641, 642, 644, 645, 649, 654, 657, 658, 661, 662,
+ 663, 668, 671, 672, 674, 677, 678, 684, 687, 688,
+ 694, 696, 698, 700, 702, 704, 705, 706, 707, 714,
+ 716, 717, 720, 723, 727, 729, 732, 734, 737, 738,
+ 740, 742, 746, 748, 750, 752, 753, 755, 756, 759,
+ 761, 764, 765, 770, 771, 772, 775, 777, 779, 781,
+ 783, 786, 789, 792, 795, 798, 802, 806, 807, 813,
+ 815, 817, 818, 824, 826, 828, 830, 832, 834, 836,
+ 838, 841, 844, 847, 850, 853, 856, 859, 861, 863,
+ 865, 867, 869, 871, 873, 875, 877, 879, 881, 883,
+ 885, 887, 889, 891, 893, 895, 897, 899, 900, 903,
+ 905, 907, 909, 911, 913, 916, 918, 920, 922, 924,
+ 926, 929, 931, 933, 935, 937, 939, 941, 943, 946,
+ 949, 950, 954, 955, 960, 962, 963, 967, 969, 971,
+ 974, 977, 980, 981, 985, 986, 991, 993, 995, 997,
+ 1000, 1003, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020,
+ 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040,
+ 1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060,
+ 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1079, 1081,
+ 1083, 1084, 1088, 1090, 1093, 1094, 1102, 1103, 1104, 1105,
+ 1115, 1116, 1122, 1123, 1129, 1130, 1131, 1142, 1143, 1151,
+ 1152, 1153, 1154, 1164, 1171, 1172, 1180, 1181, 1189, 1190,
+ 1198, 1199, 1207, 1208, 1216, 1217, 1225, 1226, 1234, 1235,
+ 1243, 1244, 1254, 1255, 1265, 1270, 1275, 1283, 1284, 1286,
+ 1289, 1292, 1296, 1300, 1302, 1304, 1306, 1308, 1310, 1312,
+ 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332,
+ 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348, 1350, 1352,
+ 1354, 1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372,
+ 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, 1390, 1392,
+ 1394, 1396, 1398, 1400, 1402, 1404, 1406, 1408, 1410, 1412,
+ 1414, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1430, 1432,
+ 1434, 1436, 1438, 1440, 1443, 1445, 1447, 1449, 1451, 1453,
+ 1455, 1457, 1459, 1461, 1463, 1465, 1466, 1469, 1471, 1473,
+ 1475, 1477, 1479, 1481, 1483, 1485, 1486, 1489, 1490, 1493,
+ 1495, 1497, 1499, 1501, 1503, 1504, 1509, 1510, 1515, 1516,
+ 1521, 1522, 1527, 1528, 1533, 1534, 1539, 1540, 1543, 1544,
+ 1547, 1549, 1551, 1553, 1555, 1557, 1559, 1561, 1563, 1565,
+ 1567, 1569, 1571, 1573, 1575, 1577, 1579, 1581, 1583, 1587,
+ 1591, 1595, 1597, 1599
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int16 yyrhs[] =
+{
+ 144, 0, -1, 145, -1, -1, -1, 145, 146, 147,
+ -1, 198, -1, 196, -1, 153, -1, 150, -1, 152,
+ -1, 149, -1, 186, -1, 259, -1, 175, -1, 155,
+ -1, 216, -1, 148, -1, 327, -1, 289, 120, -1,
+ 120, -1, 199, 155, -1, 199, 216, -1, 199, 183,
+ -1, 199, 148, -1, 34, 12, 121, 145, 122, -1,
+ 40, 121, 375, 122, -1, -1, 40, 299, 151, 121,
+ 145, 122, -1, 40, 299, 123, 291, 120, -1, 154,
+ -1, 199, 154, -1, 161, 289, 120, -1, 302, 161,
+ 289, 120, -1, 156, 300, 261, 120, -1, 302, 156,
+ 300, 261, 120, -1, -1, 158, 157, 121, 162, 122,
+ -1, -1, 161, 289, 159, 168, -1, -1, 161, 160,
+ 168, -1, 20, -1, 19, -1, 21, -1, -1, -1,
+ 162, 163, 165, -1, 162, 164, 124, -1, 23, -1,
+ 24, -1, 25, -1, 196, -1, 153, -1, 167, -1,
+ 186, -1, 259, -1, 175, -1, 155, -1, 220, -1,
+ 166, -1, 327, -1, 119, 381, -1, 289, 120, -1,
+ 120, -1, 199, 155, -1, 199, 220, -1, 33, 184,
+ -1, 33, 199, 184, -1, 33, 153, -1, 33, 221,
+ 237, -1, -1, 169, -1, 124, 170, -1, 171, -1,
+ 170, 125, 171, -1, 289, -1, 30, 173, 289, -1,
+ 174, 172, 289, -1, -1, 30, -1, -1, 174, -1,
+ 23, -1, 24, -1, 25, -1, 176, 300, 261, 120,
+ -1, 302, 176, 300, 261, 120, -1, -1, 178, 121,
+ 177, 179, 122, -1, 22, 289, -1, 22, -1, -1,
+ 180, -1, 181, -1, 180, 125, -1, 180, 125, 181,
+ -1, 298, -1, -1, 298, 123, 182, 355, -1, 308,
+ 292, 298, 123, 376, 120, -1, 161, 289, 185, -1,
+ 302, 161, 289, 185, -1, 161, 185, -1, 302, 161,
+ 185, -1, 121, 375, 122, 376, 120, -1, 124, 376,
+ 120, -1, 187, -1, 302, 187, -1, 39, 308, 195,
+ 189, 120, -1, 39, 156, 300, 188, 120, -1, 39,
+ 302, 156, 300, 188, 120, -1, 39, 176, 300, 188,
+ 120, -1, 39, 302, 176, 300, 188, 120, -1, 190,
+ 189, -1, -1, 189, 125, 190, -1, 265, 195, -1,
+ 268, -1, 192, -1, -1, -1, 279, 126, 193, 249,
+ 127, 194, 275, -1, 191, -1, 41, 197, 120, -1,
+ 289, -1, 38, 289, -1, 292, 231, -1, 292, 226,
+ -1, 295, 292, 231, -1, 295, 292, 226, -1, 41,
+ 40, 289, 120, -1, 36, 128, 129, -1, -1, 36,
+ 128, 200, 201, 129, -1, 203, -1, -1, 201, 125,
+ 202, 203, -1, -1, -1, 204, 314, 266, 205, 212,
+ -1, -1, -1, 206, 211, 266, 207, 212, -1, -1,
+ -1, -1, 208, 199, 20, 209, 266, 210, 212, -1,
+ 20, -1, 38, -1, -1, 213, -1, -1, 123, 214,
+ 215, -1, 363, -1, 215, 363, -1, 217, 237, -1,
+ 222, 237, -1, 218, 237, -1, 219, 237, -1, 308,
+ 233, -1, 308, 292, 233, -1, 292, 241, -1, 302,
+ 292, 241, -1, 292, 223, -1, 302, 292, 223, -1,
+ 308, 292, 227, -1, 221, 237, -1, 292, 231, 120,
+ -1, 302, 292, 231, 120, -1, 308, 233, -1, 222,
+ -1, 241, -1, 302, 241, -1, 223, -1, 302, 223,
+ -1, 308, 227, -1, -1, -1, 226, 126, 224, 249,
+ 127, 225, 234, -1, 232, 308, -1, -1, 229, 228,
+ 234, -1, -1, 231, 126, 230, 249, 127, -1, 232,
+ 351, -1, 35, -1, 238, 234, -1, -1, 234, 235,
+ -1, -1, 37, 236, 369, -1, 26, -1, 123, 18,
+ -1, 121, 375, 122, -1, 120, -1, -1, 240, 126,
+ 239, 249, 127, -1, 298, -1, 296, -1, -1, -1,
+ 244, 242, 246, 243, 234, -1, -1, 240, 126, 245,
+ 249, 127, -1, -1, 124, 247, -1, 248, -1, 247,
+ 125, 248, -1, 289, 381, -1, -1, -1, 250, 251,
+ -1, 253, -1, -1, 251, 125, 252, 253, -1, 251,
+ 125, 71, -1, -1, -1, 254, 308, 266, 255, 256,
+ -1, -1, 257, -1, -1, 123, 258, 355, -1, 308,
+ 260, 262, 120, -1, 268, 256, -1, -1, 264, 262,
+ -1, -1, -1, 262, 125, 263, 264, -1, 265, 260,
+ -1, -1, 322, -1, 278, 281, -1, -1, 270, 276,
+ 127, 267, 272, -1, 279, 281, -1, -1, 271, 277,
+ 127, 269, 272, -1, 126, -1, 10, -1, 11, -1,
+ 10, -1, 11, -1, -1, -1, -1, 126, 273, 249,
+ 127, 274, 275, -1, 282, -1, -1, 275, 28, -1,
+ 275, 26, -1, 275, 37, 381, -1, 266, -1, 322,
+ 266, -1, 268, -1, 322, 268, -1, -1, 279, -1,
+ 298, -1, 298, 124, 280, -1, 15, -1, 13, -1,
+ 14, -1, -1, 282, -1, -1, 283, 284, -1, 285,
+ -1, 284, 285, -1, -1, 130, 286, 287, 131, -1,
+ -1, -1, 288, 355, -1, 290, -1, 291, -1, 298,
+ -1, 296, -1, 292, 290, -1, 295, 290, -1, 295,
+ 291, -1, 294, 295, -1, 296, 295, -1, 292, 294,
+ 295, -1, 292, 296, 295, -1, -1, 292, 36, 293,
+ 296, 295, -1, 299, -1, 72, -1, -1, 299, 128,
+ 297, 361, 129, -1, 4, -1, 5, -1, 3, -1,
+ 9, -1, 8, -1, 6, -1, 7, -1, 132, 4,
+ -1, 132, 5, -1, 132, 3, -1, 132, 9, -1,
+ 132, 8, -1, 132, 6, -1, 132, 7, -1, 86,
+ -1, 85, -1, 88, -1, 89, -1, 90, -1, 91,
+ -1, 92, -1, 93, -1, 94, -1, 95, -1, 96,
+ -1, 97, -1, 87, -1, 3, -1, 5, -1, 4,
+ -1, 9, -1, 8, -1, 6, -1, 7, -1, -1,
+ 300, 301, -1, 303, -1, 321, -1, 39, -1, 33,
+ -1, 303, -1, 302, 303, -1, 304, -1, 305, -1,
+ 306, -1, 28, -1, 34, -1, 34, 12, -1, 29,
+ -1, 32, -1, 30, -1, 31, -1, 26, -1, 27,
+ -1, 306, -1, 307, 306, -1, 309, 265, -1, -1,
+ 312, 310, 300, -1, -1, 302, 312, 311, 300, -1,
+ 319, -1, -1, 38, 313, 289, -1, 296, -1, 291,
+ -1, 161, 289, -1, 22, 289, -1, 315, 265, -1,
+ -1, 318, 316, 300, -1, -1, 302, 312, 317, 300,
+ -1, 319, -1, 296, -1, 291, -1, 19, 289, -1,
+ 21, 289, -1, 22, 289, -1, 321, -1, 320, -1,
+ 6, -1, 7, -1, 8, -1, 9, -1, 3, -1,
+ 4, -1, 5, -1, 85, -1, 86, -1, 88, -1,
+ 89, -1, 90, -1, 91, -1, 92, -1, 93, -1,
+ 94, -1, 95, -1, 96, -1, 97, -1, 87, -1,
+ 74, -1, 75, -1, 76, -1, 77, -1, 82, -1,
+ 78, -1, 79, -1, 80, -1, 81, -1, 83, -1,
+ 84, -1, 323, -1, 326, -1, 326, 323, -1, 133,
+ -1, 134, -1, -1, 134, 325, 307, -1, 324, -1,
+ 326, 324, -1, -1, 98, 126, 298, 125, 328, 308,
+ 127, -1, -1, -1, -1, 99, 126, 329, 298, 125,
+ 330, 308, 331, 127, -1, -1, 100, 126, 332, 298,
+ 127, -1, -1, 101, 126, 333, 298, 127, -1, -1,
+ -1, 102, 126, 298, 125, 334, 308, 335, 125, 376,
+ 127, -1, -1, 103, 126, 298, 125, 336, 308, 127,
+ -1, -1, -1, -1, 104, 126, 337, 298, 125, 338,
+ 308, 339, 127, -1, 105, 126, 298, 125, 308, 127,
+ -1, -1, 106, 126, 298, 125, 340, 308, 127, -1,
+ -1, 110, 126, 298, 125, 341, 308, 127, -1, -1,
+ 107, 126, 298, 125, 342, 308, 127, -1, -1, 111,
+ 126, 298, 125, 343, 308, 127, -1, -1, 108, 126,
+ 298, 125, 344, 308, 127, -1, -1, 112, 126, 298,
+ 125, 345, 308, 127, -1, -1, 109, 126, 298, 125,
+ 346, 308, 127, -1, -1, 113, 126, 298, 125, 347,
+ 308, 127, -1, -1, 114, 126, 298, 125, 348, 308,
+ 125, 13, 127, -1, -1, 115, 126, 298, 125, 349,
+ 308, 125, 13, 127, -1, 116, 126, 298, 127, -1,
+ 117, 126, 298, 127, -1, 118, 126, 298, 125, 298,
+ 350, 127, -1, -1, 125, -1, 126, 127, -1, 130,
+ 131, -1, 42, 130, 131, -1, 43, 130, 131, -1,
+ 128, -1, 129, -1, 125, -1, 123, -1, 352, -1,
+ 135, -1, 134, -1, 136, -1, 137, -1, 138, -1,
+ 139, -1, 132, -1, 133, -1, 140, -1, 141, -1,
+ 42, -1, 43, -1, 48, -1, 49, -1, 50, -1,
+ 51, -1, 52, -1, 53, -1, 54, -1, 57, -1,
+ 58, -1, 59, -1, 60, -1, 61, -1, 55, -1,
+ 56, -1, 62, -1, 63, -1, 64, -1, 65, -1,
+ 66, -1, 67, -1, 68, -1, 69, -1, 70, -1,
+ 39, -1, 38, -1, 20, -1, 19, -1, 21, -1,
+ 36, -1, 23, -1, 25, -1, 24, -1, 26, -1,
+ 29, -1, 32, -1, 30, -1, 34, -1, 40, -1,
+ 35, -1, 22, -1, 37, -1, 46, -1, 45, -1,
+ 44, -1, 47, -1, 15, -1, 13, -1, 14, -1,
+ 16, -1, 17, -1, 12, -1, 18, -1, 358, -1,
+ 355, 358, -1, 367, -1, 369, -1, 373, -1, 352,
+ -1, 124, -1, 142, -1, 72, -1, 353, -1, 354,
+ -1, 321, -1, 320, -1, -1, 357, 359, -1, 356,
+ -1, 128, -1, 129, -1, 358, -1, 123, -1, 125,
+ -1, 359, -1, 120, -1, -1, 361, 364, -1, -1,
+ 362, 360, -1, 365, -1, 356, -1, 363, -1, 123,
+ -1, 125, -1, -1, 128, 366, 361, 129, -1, -1,
+ 130, 368, 357, 131, -1, -1, 126, 370, 357, 127,
+ -1, -1, 10, 371, 357, 127, -1, -1, 11, 372,
+ 357, 127, -1, -1, 121, 374, 362, 122, -1, -1,
+ 375, 377, -1, -1, 376, 378, -1, 378, -1, 120,
+ -1, 379, -1, 381, -1, 380, -1, 72, -1, 71,
+ -1, 352, -1, 124, -1, 142, -1, 128, -1, 129,
+ -1, 123, -1, 125, -1, 353, -1, 354, -1, 319,
+ -1, 73, -1, 121, 375, 122, -1, 130, 375, 131,
+ -1, 382, 375, 127, -1, 126, -1, 10, -1, 11,
+ -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const yytype_uint16 yyrline[] =
+{
+ 0, 1460, 1460, 1462, 1464, 1463, 1474, 1475, 1476, 1477,
+ 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487,
+ 1488, 1491, 1492, 1493, 1494, 1501, 1508, 1509, 1509, 1513,
+ 1520, 1521, 1524, 1525, 1528, 1529, 1532, 1532, 1546, 1546,
+ 1548, 1548, 1552, 1553, 1554, 1556, 1558, 1557, 1566, 1570,
+ 1571, 1572, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582,
+ 1583, 1584, 1585, 1586, 1587, 1590, 1591, 1594, 1595, 1596,
+ 1597, 1599, 1600, 1603, 1606, 1607, 1610, 1612, 1614, 1618,
+ 1619, 1622, 1623, 1626, 1627, 1628, 1639, 1640, 1644, 1644,
+ 1657, 1658, 1660, 1661, 1664, 1665, 1666, 1669, 1670, 1670,
+ 1678, 1681, 1682, 1683, 1684, 1687, 1688, 1696, 1697, 1700,
+ 1701, 1703, 1705, 1707, 1711, 1713, 1714, 1717, 1720, 1721,
+ 1724, 1725, 1724, 1729, 1763, 1766, 1767, 1768, 1770, 1772,
+ 1774, 1778, 1785, 1788, 1787, 1805, 1807, 1806, 1811, 1813,
+ 1811, 1815, 1817, 1815, 1819, 1820, 1822, 1819, 1833, 1834,
+ 1836, 1837, 1840, 1840, 1850, 1851, 1859, 1860, 1861, 1862,
+ 1865, 1868, 1869, 1870, 1873, 1874, 1875, 1878, 1879, 1880,
+ 1883, 1884, 1885, 1886, 1889, 1890, 1891, 1895, 1899, 1894,
+ 1911, 1915, 1915, 1926, 1925, 1934, 1938, 1941, 1950, 1951,
+ 1954, 1954, 1955, 1956, 1964, 1965, 1969, 1968, 1976, 1977,
+ 1985, 1986, 1985, 2004, 2004, 2007, 2008, 2011, 2012, 2015,
+ 2021, 2022, 2022, 2025, 2026, 2026, 2028, 2032, 2034, 2032,
+ 2058, 2059, 2062, 2062, 2070, 2073, 2132, 2133, 2135, 2136,
+ 2136, 2139, 2142, 2143, 2147, 2148, 2148, 2167, 2168, 2168,
+ 2186, 2187, 2189, 2193, 2195, 2198, 2199, 2200, 2199, 2205,
+ 2207, 2208, 2209, 2210, 2213, 2214, 2218, 2219, 2223, 2224,
+ 2227, 2228, 2231, 2232, 2233, 2236, 2237, 2240, 2240, 2243,
+ 2244, 2247, 2247, 2250, 2251, 2251, 2258, 2259, 2262, 2263,
+ 2266, 2268, 2270, 2274, 2276, 2278, 2280, 2282, 2282, 2287,
+ 2290, 2293, 2293, 2308, 2309, 2310, 2311, 2312, 2313, 2314,
+ 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324,
+ 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334,
+ 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2354, 2355, 2358,
+ 2359, 2361, 2362, 2365, 2366, 2369, 2370, 2371, 2374, 2375,
+ 2376, 2377, 2380, 2381, 2382, 2385, 2386, 2389, 2390, 2399,
+ 2402, 2402, 2404, 2404, 2408, 2409, 2409, 2411, 2413, 2415,
+ 2417, 2421, 2424, 2424, 2426, 2426, 2430, 2431, 2433, 2435,
+ 2437, 2439, 2443, 2444, 2447, 2448, 2449, 2450, 2451, 2452,
+ 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462,
+ 2463, 2464, 2465, 2466, 2469, 2470, 2471, 2472, 2473, 2474,
+ 2475, 2476, 2477, 2478, 2479, 2499, 2500, 2501, 2504, 2507,
+ 2508, 2508, 2523, 2524, 2541, 2541, 2551, 2552, 2552, 2551,
+ 2561, 2561, 2571, 2571, 2580, 2580, 2580, 2613, 2612, 2623,
+ 2624, 2624, 2623, 2633, 2651, 2651, 2656, 2656, 2661, 2661,
+ 2666, 2666, 2671, 2671, 2676, 2676, 2681, 2681, 2686, 2686,
+ 2691, 2691, 2708, 2708, 2722, 2759, 2797, 2834, 2835, 2842,
+ 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2853, 2854,
+ 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864,
+ 2865, 2866, 2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874,
+ 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884,
+ 2885, 2886, 2887, 2890, 2891, 2892, 2893, 2894, 2895, 2896,
+ 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, 2905, 2906,
+ 2907, 2908, 2909, 2910, 2911, 2914, 2915, 2916, 2917, 2918,
+ 2919, 2920, 2927, 2928, 2931, 2932, 2933, 2934, 2965, 2965,
+ 2966, 2967, 2968, 2969, 2970, 2993, 2994, 2996, 2997, 2998,
+ 3000, 3001, 3002, 3004, 3005, 3007, 3008, 3010, 3011, 3014,
+ 3015, 3018, 3019, 3020, 3024, 3023, 3037, 3037, 3041, 3041,
+ 3043, 3043, 3045, 3045, 3049, 3049, 3054, 3055, 3057, 3058,
+ 3061, 3062, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3071,
+ 3071, 3071, 3071, 3071, 3072, 3072, 3073, 3074, 3077, 3080,
+ 3083, 3086, 3086, 3086
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "$end", "error", "$undefined", "ID", "VTK_ID", "QT_ID", "StdString",
+ "UnicodeString", "OSTREAM", "ISTREAM", "LP", "LA", "STRING_LITERAL",
+ "INT_LITERAL", "HEX_LITERAL", "OCT_LITERAL", "FLOAT_LITERAL",
+ "CHAR_LITERAL", "ZERO", "STRUCT", "CLASS", "UNION", "ENUM", "PUBLIC",
+ "PRIVATE", "PROTECTED", "CONST", "VOLATILE", "MUTABLE", "STATIC",
+ "VIRTUAL", "EXPLICIT", "INLINE", "FRIEND", "EXTERN", "OPERATOR",
+ "TEMPLATE", "THROW", "TYPENAME", "TYPEDEF", "NAMESPACE", "USING", "NEW",
+ "DELETE", "STATIC_CAST", "DYNAMIC_CAST", "CONST_CAST",
+ "REINTERPRET_CAST", "OP_LSHIFT_EQ", "OP_RSHIFT_EQ", "OP_LSHIFT",
+ "OP_RSHIFT", "OP_DOT_POINTER", "OP_ARROW_POINTER", "OP_ARROW", "OP_INCR",
+ "OP_DECR", "OP_PLUS_EQ", "OP_MINUS_EQ", "OP_TIMES_EQ", "OP_DIVIDE_EQ",
+ "OP_REMAINDER_EQ", "OP_AND_EQ", "OP_OR_EQ", "OP_XOR_EQ", "OP_LOGIC_AND",
+ "OP_LOGIC_OR", "OP_LOGIC_EQ", "OP_LOGIC_NEQ", "OP_LOGIC_LEQ",
+ "OP_LOGIC_GEQ", "ELLIPSIS", "DOUBLE_COLON", "OTHER", "VOID", "BOOL",
+ "FLOAT", "DOUBLE", "INT", "SHORT", "LONG", "INT64__", "CHAR", "SIGNED",
+ "UNSIGNED", "SSIZE_T", "SIZE_T", "IdType", "TypeInt8", "TypeUInt8",
+ "TypeInt16", "TypeUInt16", "TypeInt32", "TypeUInt32", "TypeInt64",
+ "TypeUInt64", "TypeFloat32", "TypeFloat64", "SetMacro", "GetMacro",
+ "SetStringMacro", "GetStringMacro", "SetClampMacro", "SetObjectMacro",
+ "GetObjectMacro", "BooleanMacro", "SetVector2Macro", "SetVector3Macro",
+ "SetVector4Macro", "SetVector6Macro", "GetVector2Macro",
+ "GetVector3Macro", "GetVector4Macro", "GetVector6Macro",
+ "SetVectorMacro", "GetVectorMacro", "ViewportCoordinateMacro",
+ "WorldCoordinateMacro", "TypeMacro", "VTK_BYTE_SWAP_DECL", "';'", "'{'",
+ "'}'", "'='", "':'", "','", "'('", "')'", "'<'", "'>'", "'['", "']'",
+ "'~'", "'&'", "'*'", "'%'", "'/'", "'-'", "'+'", "'!'", "'|'", "'^'",
+ "'.'", "$accept", "translation_unit", "opt_declaration_seq", "$@1",
+ "declaration", "template_declaration", "linkage_specification",
+ "namespace_definition", "$@2", "namespace_alias_definition",
+ "forward_declaration", "simple_forward_declaration", "class_definition",
+ "class_specifier", "$@3", "class_head", "$@4", "$@5", "class_key",
+ "member_specification", "$@6", "member_access_specifier",
+ "member_declaration", "template_member_declaration",
+ "friend_declaration", "opt_base_clause", "base_clause",
+ "base_specifier_list", "base_specifier", "opt_virtual",
+ "opt_access_specifier", "access_specifier", "enum_definition",
+ "enum_specifier", "$@7", "enum_head", "opt_enumerator_list",
+ "enumerator_list", "enumerator_definition", "$@8",
+ "nested_variable_initialization", "ignored_class", "ignored_class_body",
+ "typedef_declaration", "basic_typedef_declaration",
+ "typedef_declarator_list", "typedef_declarator_list_cont",
+ "typedef_declarator", "typedef_direct_declarator",
+ "function_direct_declarator", "$@9", "$@10", "typedef_declarator_id",
+ "using_declaration", "using_id", "using_directive", "template_head",
+ "$@11", "template_parameter_list", "$@12", "template_parameter", "$@13",
+ "$@14", "$@15", "$@16", "$@17", "$@18", "$@19", "class_or_typename",
+ "opt_template_parameter_initializer", "template_parameter_initializer",
+ "$@20", "template_parameter_value", "function_definition",
+ "function_declaration", "nested_method_declaration",
+ "nested_operator_declaration", "method_definition", "method_declaration",
+ "operator_declaration", "conversion_function", "$@21", "$@22",
+ "conversion_function_id", "operator_function_nr", "$@23",
+ "operator_function_sig", "$@24", "operator_function_id", "operator_sig",
+ "function_nr", "function_trailer_clause", "function_trailer", "$@25",
+ "function_body", "function_sig", "$@26", "function_name",
+ "structor_declaration", "$@27", "$@28", "structor_sig", "$@29",
+ "opt_ctor_initializer", "mem_initializer_list", "mem_initializer",
+ "parameter_declaration_clause", "$@30", "parameter_list", "$@31",
+ "parameter_declaration", "$@32", "$@33", "opt_initializer",
+ "initializer", "$@34", "variable_declaration", "init_declarator_id",
+ "opt_declarator_list", "declarator_list_cont", "$@35", "init_declarator",
+ "opt_ptr_operator_seq", "direct_abstract_declarator", "$@36",
+ "direct_declarator", "$@37", "p_or_lp_or_la", "lp_or_la",
+ "opt_array_or_parameters", "$@38", "$@39", "function_qualifiers",
+ "abstract_declarator", "declarator", "opt_declarator_id",
+ "declarator_id", "bitfield_size", "opt_array_decorator_seq",
+ "array_decorator_seq", "$@40", "array_decorator_seq_impl",
+ "array_decorator", "$@41", "array_size_specifier", "$@42",
+ "id_expression", "unqualified_id", "qualified_id",
+ "nested_name_specifier", "$@43", "identifier_sig", "scope_operator_sig",
+ "template_id", "$@44", "simple_id", "identifier",
+ "opt_decl_specifier_seq", "decl_specifier2", "decl_specifier_seq",
+ "decl_specifier", "storage_class_specifier", "function_specifier",
+ "cv_qualifier", "cv_qualifier_seq", "store_type", "store_type_specifier",
+ "$@45", "$@46", "type_specifier", "$@47", "tparam_type",
+ "tparam_type_specifier2", "$@48", "$@49", "tparam_type_specifier",
+ "simple_type_specifier", "type_name", "primitive_type",
+ "ptr_operator_seq", "reference", "pointer", "$@50", "pointer_seq",
+ "declaration_macro", "$@51", "$@52", "$@53", "$@54", "$@55", "$@56",
+ "$@57", "$@58", "$@59", "$@60", "$@61", "$@62", "$@63", "$@64", "$@65",
+ "$@66", "$@67", "$@68", "$@69", "$@70", "$@71", "$@72", "opt_comma",
+ "operator_id", "operator_id_no_delim", "keyword", "literal",
+ "constant_expression", "common_bracket_item", "any_bracket_contents",
+ "bracket_pitem", "any_bracket_item", "braces_item",
+ "angle_bracket_contents", "braces_contents", "angle_bracket_pitem",
+ "angle_bracket_item", "angle_brackets_sig", "$@73", "brackets_sig",
+ "$@74", "parentheses_sig", "$@75", "$@76", "$@77", "braces_sig", "$@78",
+ "ignored_items", "ignored_expression", "ignored_item",
+ "ignored_item_no_semi", "ignored_braces", "ignored_brackets",
+ "ignored_parentheses", "ignored_left_parenthesis", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
+ 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
+ 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
+ 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
+ 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
+ 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
+ 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
+ 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
+ 59, 123, 125, 61, 58, 44, 40, 41, 60, 62,
+ 91, 93, 126, 38, 42, 37, 47, 45, 43, 33,
+ 124, 94, 46
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint16 yyr1[] =
+{
+ 0, 143, 144, 145, 146, 145, 147, 147, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
+ 147, 148, 148, 148, 148, 149, 150, 151, 150, 152,
+ 153, 153, 154, 154, 155, 155, 157, 156, 159, 158,
+ 160, 158, 161, 161, 161, 162, 163, 162, 162, 164,
+ 164, 164, 165, 165, 165, 165, 165, 165, 165, 165,
+ 165, 165, 165, 165, 165, 166, 166, 167, 167, 167,
+ 167, 168, 168, 169, 170, 170, 171, 171, 171, 172,
+ 172, 173, 173, 174, 174, 174, 175, 175, 177, 176,
+ 178, 178, 179, 179, 180, 180, 180, 181, 182, 181,
+ 183, 184, 184, 184, 184, 185, 185, 186, 186, 187,
+ 187, 187, 187, 187, 188, 189, 189, 190, 191, 191,
+ 193, 194, 192, 195, 196, 197, 197, 197, 197, 197,
+ 197, 198, 199, 200, 199, 201, 202, 201, 204, 205,
+ 203, 206, 207, 203, 208, 209, 210, 203, 211, 211,
+ 212, 212, 214, 213, 215, 215, 216, 216, 216, 216,
+ 217, 218, 218, 218, 219, 219, 219, 220, 220, 220,
+ 221, 221, 221, 221, 222, 222, 222, 224, 225, 223,
+ 226, 228, 227, 230, 229, 231, 232, 233, 234, 234,
+ 236, 235, 235, 235, 237, 237, 239, 238, 240, 240,
+ 242, 243, 241, 245, 244, 246, 246, 247, 247, 248,
+ 249, 250, 249, 251, 252, 251, 251, 254, 255, 253,
+ 256, 256, 258, 257, 259, 260, 261, 261, 262, 263,
+ 262, 264, 265, 265, 266, 267, 266, 268, 269, 268,
+ 270, 270, 270, 271, 271, 272, 273, 274, 272, 272,
+ 275, 275, 275, 275, 276, 276, 277, 277, 278, 278,
+ 279, 279, 280, 280, 280, 281, 281, 283, 282, 284,
+ 284, 286, 285, 287, 288, 287, 289, 289, 290, 290,
+ 291, 291, 291, 292, 292, 292, 292, 293, 292, 294,
+ 295, 297, 296, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
+ 299, 299, 299, 299, 299, 299, 299, 300, 300, 301,
+ 301, 301, 301, 302, 302, 303, 303, 303, 304, 304,
+ 304, 304, 305, 305, 305, 306, 306, 307, 307, 308,
+ 310, 309, 311, 309, 312, 313, 312, 312, 312, 312,
+ 312, 314, 316, 315, 317, 315, 318, 318, 318, 318,
+ 318, 318, 319, 319, 320, 320, 320, 320, 320, 320,
+ 320, 320, 320, 320, 320, 320, 320, 320, 320, 320,
+ 320, 320, 320, 320, 321, 321, 321, 321, 321, 321,
+ 321, 321, 321, 321, 321, 322, 322, 322, 323, 324,
+ 325, 324, 326, 326, 328, 327, 329, 330, 331, 327,
+ 332, 327, 333, 327, 334, 335, 327, 336, 327, 337,
+ 338, 339, 327, 327, 340, 327, 341, 327, 342, 327,
+ 343, 327, 344, 327, 345, 327, 346, 327, 347, 327,
+ 348, 327, 349, 327, 327, 327, 327, 350, 350, 351,
+ 351, 351, 351, 351, 351, 351, 351, 351, 352, 352,
+ 352, 352, 352, 352, 352, 352, 352, 352, 352, 352,
+ 352, 352, 352, 352, 352, 352, 352, 352, 352, 352,
+ 352, 352, 352, 352, 352, 352, 352, 352, 352, 352,
+ 352, 352, 352, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 353, 353, 353, 353, 353,
+ 353, 353, 353, 353, 353, 354, 354, 354, 354, 354,
+ 354, 354, 355, 355, 356, 356, 356, 356, 356, 356,
+ 356, 356, 356, 356, 356, 357, 357, 358, 358, 358,
+ 359, 359, 359, 360, 360, 361, 361, 362, 362, 363,
+ 363, 364, 364, 364, 366, 365, 368, 367, 370, 369,
+ 371, 369, 372, 369, 374, 373, 375, 375, 376, 376,
+ 377, 377, 378, 378, 378, 378, 378, 378, 378, 378,
+ 378, 378, 378, 378, 378, 378, 378, 378, 379, 380,
+ 381, 382, 382, 382
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 1, 0, 0, 3, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 1, 2, 2, 2, 2, 5, 4, 0, 6, 5,
+ 1, 2, 3, 4, 4, 5, 0, 5, 0, 4,
+ 0, 3, 1, 1, 1, 0, 0, 3, 3, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 2, 1, 2, 2, 2, 3, 2,
+ 3, 0, 1, 2, 1, 3, 1, 3, 3, 0,
+ 1, 0, 1, 1, 1, 1, 4, 5, 0, 5,
+ 2, 1, 0, 1, 1, 2, 3, 1, 0, 4,
+ 6, 3, 4, 2, 3, 5, 3, 1, 2, 5,
+ 5, 6, 5, 6, 2, 0, 3, 2, 1, 1,
+ 0, 0, 7, 1, 3, 1, 2, 2, 2, 3,
+ 3, 4, 3, 0, 5, 1, 0, 4, 0, 0,
+ 5, 0, 0, 5, 0, 0, 0, 7, 1, 1,
+ 0, 1, 0, 3, 1, 2, 2, 2, 2, 2,
+ 2, 3, 2, 3, 2, 3, 3, 2, 3, 4,
+ 2, 1, 1, 2, 1, 2, 2, 0, 0, 7,
+ 2, 0, 3, 0, 5, 2, 1, 2, 0, 2,
+ 0, 3, 1, 2, 3, 1, 0, 5, 1, 1,
+ 0, 0, 5, 0, 5, 0, 2, 1, 3, 2,
+ 0, 0, 2, 1, 0, 4, 3, 0, 0, 5,
+ 0, 1, 0, 3, 4, 2, 0, 2, 0, 0,
+ 4, 2, 0, 1, 2, 0, 5, 2, 0, 5,
+ 1, 1, 1, 1, 1, 0, 0, 0, 6, 1,
+ 0, 2, 2, 3, 1, 2, 1, 2, 0, 1,
+ 1, 3, 1, 1, 1, 0, 1, 0, 2, 1,
+ 2, 0, 4, 0, 0, 2, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 3, 3, 0, 5, 1,
+ 1, 0, 5, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 2, 1,
+ 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
+ 2, 1, 1, 1, 1, 1, 1, 1, 2, 2,
+ 0, 3, 0, 4, 1, 0, 3, 1, 1, 2,
+ 2, 2, 0, 3, 0, 4, 1, 1, 1, 2,
+ 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1,
+ 0, 3, 1, 2, 0, 7, 0, 0, 0, 9,
+ 0, 5, 0, 5, 0, 0, 10, 0, 7, 0,
+ 0, 0, 9, 6, 0, 7, 0, 7, 0, 7,
+ 0, 7, 0, 7, 0, 7, 0, 7, 0, 7,
+ 0, 9, 0, 9, 4, 4, 7, 0, 1, 2,
+ 2, 3, 3, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 2, 0, 2, 1,
+ 1, 1, 1, 1, 0, 4, 0, 4, 0, 4,
+ 0, 4, 0, 4, 0, 4, 0, 2, 0, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 3, 3,
+ 3, 1, 1, 1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+ STATE-NUM when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint16 yydefact[] =
+{
+ 3, 0, 4, 1, 0, 378, 379, 380, 374, 375,
+ 376, 377, 43, 42, 44, 91, 345, 346, 338, 341,
+ 343, 344, 342, 339, 186, 0, 355, 0, 0, 0,
+ 290, 394, 395, 396, 397, 399, 400, 401, 402, 398,
+ 403, 404, 381, 382, 393, 383, 384, 385, 386, 387,
+ 388, 389, 390, 391, 392, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 20, 0, 5, 17,
+ 11, 9, 10, 8, 30, 15, 327, 36, 40, 14,
+ 327, 0, 12, 107, 7, 6, 0, 16, 0, 0,
+ 0, 0, 174, 0, 0, 13, 0, 276, 358, 0,
+ 0, 0, 357, 278, 289, 0, 333, 335, 336, 337,
+ 0, 232, 350, 354, 373, 372, 18, 295, 293, 294,
+ 298, 299, 297, 296, 308, 307, 319, 309, 310, 311,
+ 312, 313, 314, 315, 316, 317, 318, 360, 277, 0,
+ 279, 340, 133, 0, 378, 379, 380, 374, 375, 376,
+ 377, 339, 381, 382, 393, 383, 384, 385, 386, 387,
+ 388, 389, 390, 391, 392, 327, 40, 327, 358, 357,
+ 0, 0, 320, 322, 321, 325, 326, 324, 323, 576,
+ 27, 0, 0, 0, 125, 0, 0, 0, 416, 420,
+ 422, 0, 0, 429, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 302, 300,
+ 301, 305, 306, 304, 303, 232, 0, 71, 359, 232,
+ 88, 0, 24, 31, 21, 23, 0, 22, 0, 0,
+ 195, 576, 156, 158, 159, 157, 177, 0, 0, 180,
+ 19, 287, 164, 0, 162, 200, 280, 0, 279, 278,
+ 283, 281, 282, 284, 291, 327, 40, 327, 108, 175,
+ 0, 334, 352, 243, 244, 176, 181, 0, 0, 160,
+ 188, 0, 228, 220, 0, 265, 0, 199, 260, 408,
+ 409, 349, 233, 405, 412, 406, 327, 279, 3, 132,
+ 138, 356, 340, 232, 359, 232, 327, 327, 295, 293,
+ 294, 298, 299, 297, 296, 123, 119, 115, 118, 265,
+ 260, 0, 0, 0, 126, 0, 124, 128, 127, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 332, 331, 0, 228, 0, 328, 329, 330,
+ 45, 0, 41, 72, 32, 71, 0, 92, 360, 0,
+ 0, 198, 0, 211, 359, 0, 203, 205, 285, 286,
+ 555, 232, 359, 232, 165, 163, 327, 188, 183, 478,
+ 479, 480, 481, 482, 483, 484, 485, 486, 492, 493,
+ 487, 488, 489, 490, 491, 494, 495, 496, 497, 498,
+ 499, 500, 501, 502, 466, 465, 0, 463, 464, 0,
+ 474, 475, 469, 468, 470, 471, 472, 473, 476, 477,
+ 185, 467, 187, 196, 0, 222, 225, 221, 256, 0,
+ 0, 237, 266, 0, 166, 161, 199, 0, 0, 407,
+ 413, 351, 4, 0, 135, 0, 0, 0, 0, 115,
+ 0, 0, 232, 232, 0, 120, 378, 379, 380, 374,
+ 375, 376, 377, 602, 603, 530, 526, 527, 525, 528,
+ 529, 531, 506, 505, 507, 519, 509, 511, 510, 512,
+ 513, 515, 514, 516, 518, 508, 520, 504, 503, 517,
+ 478, 479, 523, 522, 521, 524, 586, 585, 597, 581,
+ 576, 26, 592, 588, 593, 601, 590, 591, 576, 589,
+ 596, 587, 594, 595, 577, 580, 582, 584, 583, 576,
+ 0, 0, 3, 131, 130, 129, 414, 0, 0, 0,
+ 424, 427, 0, 0, 434, 438, 442, 446, 436, 440,
+ 444, 448, 450, 452, 454, 455, 0, 34, 227, 231,
+ 46, 83, 84, 85, 81, 73, 74, 79, 76, 39,
+ 86, 0, 93, 94, 97, 198, 194, 0, 217, 0,
+ 0, 211, 0, 201, 0, 0, 33, 0, 353, 182,
+ 211, 0, 0, 459, 460, 192, 190, 0, 189, 211,
+ 224, 229, 0, 238, 257, 271, 268, 269, 263, 264,
+ 262, 261, 347, 411, 25, 136, 134, 0, 0, 0,
+ 368, 367, 0, 258, 232, 362, 366, 148, 149, 258,
+ 0, 110, 114, 117, 112, 0, 0, 109, 232, 211,
+ 0, 0, 0, 29, 4, 0, 417, 421, 423, 0,
+ 0, 430, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 457, 49, 50, 51, 37, 0, 0,
+ 0, 82, 0, 80, 0, 89, 95, 98, 578, 178,
+ 212, 213, 0, 288, 0, 206, 207, 0, 188, 570,
+ 572, 540, 574, 562, 538, 563, 568, 564, 292, 566,
+ 539, 544, 543, 537, 541, 542, 560, 561, 556, 559,
+ 534, 535, 536, 35, 87, 0, 461, 462, 0, 193,
+ 0, 232, 548, 549, 223, 547, 532, 245, 274, 270,
+ 348, 138, 369, 370, 371, 364, 241, 242, 240, 139,
+ 258, 265, 259, 361, 327, 142, 145, 111, 113, 116,
+ 0, 598, 599, 600, 28, 0, 0, 425, 0, 0,
+ 433, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 458, 0, 0, 0, 0, 64, 53, 58, 47,
+ 60, 54, 57, 55, 52, 0, 59, 0, 171, 172,
+ 56, 0, 0, 357, 0, 0, 61, 48, 77, 75,
+ 78, 96, 0, 0, 188, 214, 258, 204, 0, 209,
+ 202, 545, 545, 557, 545, 555, 545, 184, 191, 197,
+ 230, 533, 246, 239, 249, 0, 0, 137, 327, 150,
+ 254, 0, 258, 234, 363, 150, 258, 121, 415, 418,
+ 0, 428, 431, 435, 439, 443, 447, 437, 441, 445,
+ 449, 0, 0, 456, 69, 0, 67, 0, 0, 357,
+ 0, 0, 62, 65, 66, 0, 167, 63, 0, 173,
+ 0, 170, 199, 99, 100, 579, 179, 216, 217, 218,
+ 208, 0, 0, 0, 0, 0, 0, 211, 272, 275,
+ 365, 152, 140, 151, 235, 255, 143, 146, 250, 0,
+ 578, 0, 0, 0, 576, 578, 103, 359, 0, 68,
+ 0, 70, 0, 168, 0, 215, 220, 551, 552, 571,
+ 550, 546, 573, 554, 575, 553, 558, 569, 565, 567,
+ 0, 0, 245, 150, 122, 419, 0, 432, 451, 453,
+ 0, 0, 101, 0, 0, 104, 359, 169, 219, 247,
+ 153, 154, 236, 147, 252, 251, 0, 426, 578, 106,
+ 0, 102, 250, 155, 253, 0, 248, 105
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int16 yydefgoto[] =
+{
+ -1, 1, 2, 4, 78, 232, 80, 81, 323, 82,
+ 83, 84, 234, 86, 226, 87, 365, 227, 247, 560,
+ 668, 669, 779, 780, 781, 362, 363, 565, 566, 674,
+ 670, 567, 89, 90, 367, 91, 571, 572, 573, 802,
+ 235, 856, 906, 92, 93, 458, 464, 459, 315, 316,
+ 639, 898, 317, 94, 193, 95, 236, 300, 453, 731,
+ 454, 455, 829, 456, 835, 457, 836, 933, 629, 892,
+ 893, 931, 950, 237, 98, 99, 100, 786, 787, 101,
+ 102, 373, 804, 103, 275, 387, 276, 590, 277, 104,
+ 279, 432, 598, 718, 242, 280, 599, 253, 789, 377,
+ 688, 255, 581, 583, 685, 686, 577, 578, 680, 878,
+ 681, 682, 916, 436, 437, 602, 105, 282, 354, 434,
+ 721, 355, 356, 739, 932, 283, 727, 740, 284, 823,
+ 887, 962, 934, 831, 439, 741, 742, 611, 441, 442,
+ 443, 606, 607, 728, 825, 826, 194, 107, 178, 149,
+ 375, 110, 111, 179, 380, 113, 114, 225, 357, 248,
+ 116, 117, 118, 119, 613, 239, 121, 296, 386, 122,
+ 153, 623, 624, 744, 828, 625, 123, 124, 125, 292,
+ 293, 294, 448, 295, 126, 645, 332, 756, 899, 333,
+ 334, 649, 840, 650, 337, 759, 901, 653, 657, 654,
+ 658, 655, 659, 656, 660, 661, 662, 772, 430, 703,
+ 704, 705, 724, 725, 881, 920, 921, 926, 584, 883,
+ 707, 708, 709, 815, 710, 816, 711, 814, 811, 812,
+ 712, 813, 321, 803, 524, 525, 526, 527, 528, 529
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -872
+static const yytype_int16 yypact[] =
+{
+ -872, 77, 87, -872, 4255, 167, 191, 227, 280, 300,
+ 301, 304, -872, -872, -872, 4899, -872, -872, -872, -872,
+ -872, -872, -872, 98, -872, -8, -872, 5429, 383, 4624,
+ -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ -872, -872, -38, 106, 121, 122, 133, 158, 171, 186,
+ 196, 203, 210, 228, 243, -3, 36, 43, 45, 90,
+ 114, 130, 138, 151, 179, 183, 187, 202, 215, 233,
+ 235, 249, 258, 267, 269, 271, -872, 438, -872, -872,
+ -872, -872, -872, -872, -872, -872, -872, -872, 4899, -872,
+ -872, 21, -872, -872, -872, -872, 5144, -872, -71, -71,
+ -71, -71, -872, 281, 5524, -872, 54, -872, 284, 4742,
+ 350, 4899, -25, -872, 297, 5239, -872, -872, -872, -872,
+ 4672, 276, -872, -872, -872, -872, -872, -10, 9, 18,
+ 50, 52, 148, 166, -872, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, -872, 310, -872, 4921,
+ 350, 312, 321, 4899, -10, 9, 18, 50, 52, 148,
+ 166, 441, -872, -872, -872, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, 4899, -872, -872, 350,
+ 5429, 4790, -872, -872, -872, -872, -872, -872, -872, -872,
+ 332, 4899, 4899, 337, -872, 4742, 4899, 4529, -872, -872,
+ -872, 4529, 4529, -872, 4529, 4529, 4529, 4529, 4529, 4529,
+ 4529, 4529, 4529, 4529, 4529, 4529, 4529, 4529, -872, -872,
+ -872, -872, -872, -872, -872, 1286, 343, 348, 259, 1286,
+ -872, 4899, -872, -872, -872, -872, 5144, -872, 5334, 4947,
+ -872, -872, -872, -872, -872, -872, -872, 4899, 5524, -872,
+ -872, -872, -872, 360, -872, -872, -872, 350, -13, 362,
+ -872, -872, -872, -872, -872, -872, 4899, -872, -872, -872,
+ 4742, -872, -872, -872, -872, -872, -872, 363, 5071, -872,
+ -872, 370, -872, 377, 1478, 372, 4742, 350, 15, -872,
+ 435, -872, -872, -872, -872, 276, -872, 350, -872, -872,
+ 73, -872, -872, 5028, 177, 5028, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, -872, -872, -872, 107,
+ 379, 1212, 409, 384, -872, 386, -872, -872, -872, 1383,
+ 4742, 387, 4529, 4529, 4529, 388, 389, 4529, 390, 391,
+ 392, 393, 397, 398, 399, 401, 402, 403, 405, 404,
+ 406, 407, -872, -872, 414, -872, 4790, -872, -872, -872,
+ -872, 1111, -872, -872, -872, 348, 415, 4529, -872, 5334,
+ 4742, -872, 1617, 424, -872, 471, -872, 412, -872, -872,
+ -872, 1286, 278, 1286, -872, -872, -872, -872, -872, 381,
+ 423, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, 428, -872, -872, 411,
+ -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ -872, -872, 41, -872, 212, -872, -872, -872, -872, 429,
+ 4790, -872, -872, 427, -872, -872, 350, 470, 440, -872,
+ -872, 4121, 436, 11, -872, 5560, 88, 524, 442, -872,
+ 4790, 443, 5028, 5028, 224, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ 444, 350, -872, -872, -872, -872, -872, 445, 434, 439,
+ -872, -872, 446, 5524, -872, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, 4529, -872, 447, -872,
+ 48, -872, -872, -872, 485, 448, -872, 535, -872, -872,
+ -872, 452, 451, -872, 456, 457, -872, 454, -872, 350,
+ 297, 424, 4899, -872, 3577, 449, -872, 462, 4121, 41,
+ 424, 437, 453, -872, -872, -872, -872, 549, -872, 424,
+ -872, -872, 3857, -872, -872, -872, 427, -872, -872, -872,
+ -872, -872, -872, 440, -872, -872, -872, 4899, 4899, 4899,
+ -872, 350, 5524, 4694, 276, -872, -872, -872, -872, 4694,
+ 563, -872, 461, -872, -872, 467, 468, -872, 276, 424,
+ 1757, 1897, 2037, -872, 472, 5524, -872, -872, -872, 5524,
+ 5524, -872, 463, 5524, 5524, 5524, 5524, 5524, 5524, 5524,
+ 5524, 5524, 5524, 464, -872, -872, -872, -872, 4137, 469,
+ 4899, -872, 1111, -872, 4899, -872, 4529, -872, -872, -872,
+ 473, -872, 5524, -872, 474, 475, -872, 58, -872, -872,
+ -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, 477, -872, -872, 92, -872,
+ 478, 276, -872, -872, 3857, -872, -872, 160, 465, -872,
+ -872, 73, -872, -872, -872, -872, -872, -872, -872, -872,
+ 969, 372, -872, -872, -872, -872, -872, -872, -872, -872,
+ 479, -872, -872, -872, -872, 480, 5524, -872, 481, 5524,
+ -872, 482, 483, 484, 489, 490, 491, 492, 496, 487,
+ 499, -872, 498, 4373, 4851, 58, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, 4563, -872, -71, -872, -872,
+ -872, 506, 4742, 129, 4468, 4672, -872, -872, -872, -872,
+ -872, -872, 3857, 2317, -872, 526, 4694, -872, 4899, -872,
+ 41, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, 497, 3857, -872, -872, 504,
+ -872, 502, 4694, -872, 4121, 504, 4694, -872, -872, -872,
+ 508, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ -872, 622, 623, -872, -872, 4720, -872, 518, -71, -13,
+ 4563, 4947, -872, -872, -872, 4563, -872, -872, 520, -872,
+ 4742, -872, -872, 3857, -872, -872, 41, -872, -872, -872,
+ -872, 3017, 3157, 2877, 3297, 3717, 3437, 424, -872, 3857,
+ 4121, -872, -872, -872, -872, -872, -872, -872, -872, 514,
+ -872, 515, 516, 519, -872, -872, -872, 328, 4720, -872,
+ 518, -872, 4720, -872, 527, -872, 377, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ 521, 3997, 160, 504, 93, -872, 2457, -872, -872, -872,
+ 2177, 2597, -872, 328, 4720, -872, 339, -872, -872, -872,
+ 3997, -872, -872, -872, -872, -872, 58, -872, -872, -872,
+ 339, -872, -872, -872, -872, 2737, 93, -872
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int16 yypgoto[] =
+{
+ -872, -872, -260, -872, -872, 645, -872, -872, -872, -872,
+ -613, -94, 1, -26, -872, -872, -872, -872, 16, -872,
+ -872, -872, -872, -872, -872, 285, -872, -872, -20, -872,
+ -872, 89, -17, -21, -872, -872, -872, -872, -22, -872,
+ -872, -202, -473, -9, -102, -249, 199, 22, -872, -872,
+ -872, -872, 201, -6, -872, -872, -1, -872, -872, -872,
+ -66, -872, -872, -872, -872, -872, -872, -872, -872, -770,
+ -872, -872, -872, 668, -872, -872, -872, -111, -97, -576,
+ -80, -872, -872, -154, -241, -872, -872, -872, -155, 35,
+ -270, -364, -872, -872, -91, -872, -872, -105, -67, -872,
+ -872, -872, -872, -872, -872, -129, -542, -872, -872, -872,
+ -198, -872, -872, -230, -872, -872, 20, 333, -166, 338,
+ -872, -5, -95, -575, -872, -157, -872, -872, -872, -237,
+ -872, -872, -261, -872, -872, -872, -98, -872, -29, -696,
+ -872, -872, 112, -872, -872, -872, 13, -45, 3, 32,
+ -872, -63, 23, -4, -872, 754, -24, 8, -872, 10,
+ -81, -872, -872, -415, -872, 49, -872, -872, -872, -19,
+ -872, -872, -872, -872, -872, -872, -121, -391, 194, -272,
+ 425, 430, -872, -872, 51, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, -872, -872, -872, -872,
+ -872, -872, -872, -872, -872, -872, -872, -872, -872, -204,
+ -302, 82, -751, -554, -456, -581, -153, -872, -89, -872,
+ -871, -872, -872, -872, -872, -872, 17, -872, -872, -872,
+ -872, -872, -183, -820, -872, -759, -872, -872, -660, -872
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If zero, do what YYDEFACT says.
+ If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -411
+static const yytype_int16 yytable[] =
+{
+ 112, 175, 233, 96, 190, 85, 177, 108, 243, 244,
+ 245, 150, 440, 268, 115, 281, 445, 106, 148, 522,
+ 88, 726, 285, 589, 318, 150, 291, 809, 147, 252,
+ 706, 824, 148, 612, 271, 269, 109, 180, 452, 684,
+ 328, 327, 254, 176, 875, 444, 257, 30, 715, 240,
+ 241, 873, 196, 120, 745, 777, 461, 720, 372, 30,
+ 951, 195, -320, 366, 256, 896, 261, 595, 473, 474,
+ 522, 664, 665, 666, 431, 889, 181, 3, 596, 963,
+ 936, -322, -308, 319, 150, 941, 257, -2, -308, 265,
+ -321, 148, 788, -141, 267, -279, 272, 750, 229, 271,
+ 445, 228, 689, 690, 256, 258, 238, 150, 627, -144,
+ 151, -141, 88, -199, 262, 862, 287, 521, -320, 954,
+ 152, 955, -325, 197, -326, 431, 628, 438, 109, 444,
+ 956, 266, 257, 260, 281, 263, 615, -322, 965, 447,
+ 616, -198, 230, 821, 358, 297, -321, 270, 358, 150,
+ 256, 261, 286, 249, 306, 278, 148, 271, 269, 307,
+ 854, 272, 198, 953, 597, 830, 301, 271, 521, 199,
+ 667, 200, 150, 263, 250, 535, 534, 875, -325, 148,
+ -326, 281, 875, 303, 515, 305, 285, 150, 150, 304,
+ 384, 297, 150, 701, 148, 148, 176, 788, 730, 262,
+ 520, 30, 263, 385, 324, 325, 875, 257, 460, 788,
+ 460, 701, 265, 635, 636, 585, 201, 587, 696, 272,
+ -324, 726, 358, 257, 358, 256, -307, 150, 330, 272,
+ 329, 879, -307, 465, 148, 287, 824, -267, -323, -320,
+ 202, -319, -309, 150, 368, 726, 369, -319, -309, -279,
+ 148, 520, 176, -310, 266, -199, 203, 895, 285, -310,
+ 374, 897, 150, -322, 204, 281, 258, 257, 109, 148,
+ 270, 370, 644, 381, 278, 383, -324, 205, -311, 382,
+ 378, 379, 446, 604, -311, 256, 822, -295, 271, 269,
+ -267, -312, 821, -295, -323, -320, 964, -312, -38, -321,
+ 358, -38, 358, 318, 451, 206, -313, 257, 821, 207,
+ 263, -293, -313, 208, 462, 463, -314, -293, 531, -322,
+ 379, 278, -314, -315, 810, 530, 297, 640, 209, -315,
+ -316, 706, 600, 701, 626, 641, -316, 601, 522, 522,
+ 522, 210, 285, 265, 637, 930, 642, -294, -317, 638,
+ 272, 580, -325, -294, -317, -321, 882, 150, 884, 211,
+ 886, 212, 319, -318, 148, 329, 446, 460, 460, -318,
+ 358, 579, -326, -324, 568, 213, -323, 706, 249, 364,
+ -38, 358, 358, -38, 214, 176, 182, 183, 184, 185,
+ 186, 187, 188, 215, 588, 216, 706, 217, 586, -38,
+ -298, 270, -38, 523, -277, 278, -298, 246, -325, 289,
+ 290, 701, 182, 183, 184, 185, 186, 187, 188, 359,
+ -299, -297, 30, 359, -296, 264, -299, -297, -326, -324,
+ -296, -90, -323, 298, 942, 701, 521, 521, 521, 945,
+ 876, 218, 219, 220, 221, 222, 223, 224, 364, 904,
+ 299, 621, 905, 302, 523, 322, 630, 326, 620, 586,
+ 904, -410, -410, 905, 360, 622, 16, 17, 832, 379,
+ 942, 945, 361, 961, 182, 183, 184, 185, 186, 187,
+ 188, 30, 701, 608, 609, 610, 376, 961, -198, 388,
+ 701, 701, 701, 701, 701, 701, 433, 359, 701, 359,
+ 435, 522, -267, 447, 189, 532, 533, 358, 561, 562,
+ 563, 591, 536, 540, 541, 543, 544, 545, 546, 520,
+ 520, 520, 547, 548, 549, 871, 550, 551, 552, 743,
+ 553, 554, 556, 555, 557, 570, 582, 12, 13, 14,
+ 701, 271, 594, 460, 16, 17, 18, 19, 20, 21,
+ 22, -210, 161, 592, 263, 593, 603, 605, 614, 701,
+ 25, 647, 631, 634, 643, 673, 648, 719, 716, 713,
+ 646, 651, 601, 672, 675, 359, 676, 359, 150, 677,
+ 678, 679, 714, 746, 717, 148, 638, 747, 748, 771,
+ 760, 871, 652, 797, 754, 687, -273, 877, 805, 521,
+ 808, 807, 683, 735, 817, 819, 837, 838, 841, 843,
+ 844, 845, 851, 150, 150, 150, 846, 847, 848, 849,
+ 148, 148, 148, 850, 852, 853, 867, 891, 888, 894,
+ 732, 733, 734, 900, 522, 902, 903, 868, 522, 522,
+ 913, 935, 937, 938, 263, 359, 939, 947, 949, 79,
+ 569, 782, 799, 671, 801, 909, 359, 359, 632, 783,
+ 749, 633, 784, 522, 793, 827, 150, 785, 150, 778,
+ 150, 108, 97, 148, 864, 148, 858, 148, 794, 880,
+ 915, 791, 520, 798, 88, 568, 948, 800, 790, 559,
+ 281, 233, 268, 558, 755, 952, 866, 285, 757, 758,
+ 792, 966, 761, 762, 763, 764, 765, 766, 767, 768,
+ 769, 770, 833, 271, 269, 914, 820, 795, 729, 796,
+ 449, 940, 523, 523, 523, 450, 885, 869, 0, 257,
+ 925, 806, 521, 0, 0, 818, 521, 521, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 256, 0, 0,
+ 0, 0, 834, 358, 0, 0, 281, 0, 0, 0,
+ 0, 521, 0, 233, 0, 0, 0, 911, 265, 859,
+ 150, 580, 857, 267, 0, 272, 0, 148, 702, 271,
+ 269, 859, 359, 860, 271, 269, 863, 0, 297, 855,
+ 859, 872, 0, 869, 0, 865, 702, 196, 869, 0,
+ 0, 88, 0, 0, 150, 839, 195, 257, 842, 358,
+ 266, 148, 0, 0, 0, 520, 263, 792, 0, 520,
+ 520, 687, 861, 0, 0, 256, 870, 278, 0, 271,
+ 278, 0, 0, 0, 861, 0, 890, 580, 0, 265,
+ 0, 272, 0, 0, 520, 0, 272, 0, 0, 0,
+ 0, 150, 0, 0, 0, 0, 859, 872, 148, 0,
+ 0, 859, 0, 259, 0, 0, 297, 910, 907, 0,
+ 0, 0, 0, 908, 288, 0, 912, 0, 0, 0,
+ 0, 266, 263, 0, 0, 523, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 278, 870, 0, 0,
+ 0, 0, 0, 0, 150, 278, 0, 0, 150, 0,
+ 0, 148, 0, 0, 0, 148, 0, 0, 702, 0,
+ 0, 943, 0, 0, 0, 946, 944, 0, 0, 0,
+ 0, 0, 0, 0, 0, 320, 0, 0, 0, 0,
+ 150, 0, 0, 0, 0, 0, 0, 148, 0, 0,
+ 0, 331, 0, 0, 0, 335, 336, 960, 338, 339,
+ 340, 341, 342, 343, 344, 345, 346, 347, 348, 349,
+ 350, 351, 308, 309, 310, 311, 312, 313, 314, 736,
+ 737, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 371, 0, 0, 702, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 523, 0,
+ 702, 0, 523, 523, 259, 0, 0, 0, 359, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 320, 0,
+ 371, 0, 0, 0, 0, 0, 0, 523, 0, 0,
+ 0, 0, 0, 0, 134, 135, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 145, 146, 702, 0, 0,
+ 0, 0, 0, 0, 0, 702, 702, 702, 702, 702,
+ 702, 0, 0, 702, 359, 0, 537, 538, 539, 0,
+ 0, 542, 0, 0, 0, 738, 0, 0, 0, 0,
+ 0, 77, 289, 290, 0, 0, 0, 0, 0, 0,
+ 320, 0, 0, 0, 127, 128, 129, 130, 131, 132,
+ 133, 574, 0, 0, 575, 702, 0, 0, 0, 0,
+ 0, 0, 0, 0, 561, 562, 563, 0, 0, 0,
+ 0, 564, 0, 0, 702, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 30, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 320, 0, 134, 135, 136, 137,
+ 138, 139, 140, 141, 142, 143, 144, 145, 146, 0,
+ 0, 0, 0, 0, 320, 466, 467, 468, 469, 470,
+ 471, 472, 473, 474, 475, 476, 477, 478, 479, 480,
+ 481, 482, 483, 484, 485, 486, 487, 488, 489, 0,
+ 0, 490, 491, 77, 492, 0, 493, 494, 495, 496,
+ 497, 498, 499, 0, 500, 501, 502, 503, 504, 505,
+ 391, 392, 393, 394, 395, 396, 397, 398, 399, 400,
+ 401, 402, 403, 404, 405, 406, 407, 408, 409, 410,
+ 411, 412, 413, 506, 507, 508, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 162, 163, 164,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
+ 663, 0, 16, 17, 18, 19, 20, 21, 22, 352,
+ 161, 0, 0, 0, 0, 353, 0, 0, 0, 0,
+ 0, 0, 509, 510, 511, 512, 513, 514, 515, 0,
+ 516, 517, 518, 0, 420, 421, 422, 423, 424, 425,
+ 426, 427, 428, 429, 519, 0, 0, 0, 0, 0,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 0, 0, 0, 0, 0, 0, 320, 0, 0,
+ 0, 0, 0, 320, 0, 0, 154, 155, 156, 157,
+ 158, 159, 160, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 12, 13, 14, 231, -226, 0, 0, 16,
+ 17, 18, 19, 20, 21, 22, 0, 161, 0, 289,
+ 290, 26, 259, 0, 0, 389, 390, 0, 0, 0,
+ 574, 391, 392, 393, 394, 395, 396, 397, 398, 399,
+ 400, 401, 402, 403, 404, 405, 406, 407, 408, 409,
+ 410, 411, 412, 413, 0, 30, 0, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 162, 163,
+ 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
+ 174, 308, 309, 310, 311, 312, 313, 314, 273, 274,
+ 0, 0, 0, 0, 320, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 414, 0, 415, 416,
+ 0, 417, 418, 419, 0, 420, 421, 422, 423, 424,
+ 425, 426, 427, 428, 429, 0, 0, 371, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 371,
+ 0, 0, 0, 0, 0, 0, 0, 0, 371, 288,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 320, 0, 0, 134, 135, 136, 137, 138, 139, 140,
+ 141, 142, 143, 144, 145, 146, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 320, 0, 0, 0,
+ 320, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 77, 289, 290, 0, 371, 371, 0, 0, 0, 371,
+ 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
+ 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 509, 510, 576,
+ 512, 513, 514, 515, 0, 516, 517, 518, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
+ 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
+ 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 509, 510, 751,
+ 512, 513, 514, 515, 0, 516, 517, 518, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
+ 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
+ 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 509, 510, 0,
+ 512, 513, 514, 515, 0, 516, 517, 518, 752, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
+ 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
+ 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 509, 510, 0,
+ 512, 513, 514, 515, 753, 516, 517, 518, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
+ 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
+ 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 509, 510, 958,
+ 512, 513, 514, 515, 0, 516, 517, 518, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
+ 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
+ 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 874, 510, 0,
+ 512, 513, 514, 515, 0, 516, 517, 518, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
+ 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
+ 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 510, 0,
+ 512, 513, 514, 515, 957, 516, 517, 518, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
+ 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
+ 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 959, 510, 0,
+ 512, 513, 514, 515, 0, 516, 517, 518, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
+ 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 506, 507,
+ 508, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 967, 510, 0,
+ 512, 513, 514, 515, 0, 516, 517, 518, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 519,
+ 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
+ 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 923, 692, 924,
+ 917, 694, 918, 696, 0, 722, 723, 699, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
+ 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
+ 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
+ 917, 694, 918, 696, 919, 722, 723, 699, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
+ 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
+ 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
+ 917, 694, 918, 696, 922, 722, 723, 699, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
+ 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
+ 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
+ 917, 694, 918, 696, 927, 722, 723, 699, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
+ 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
+ 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
+ 917, 694, 918, 696, 0, 722, 723, 699, 929, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
+ 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
+ 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
+ 693, 694, 695, 696, 0, 697, 698, 699, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
+ 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
+ 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
+ 693, 694, 695, 696, 0, 697, 928, 699, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
+ 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
+ 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
+ 0, 694, 0, 696, 0, 722, 723, 699, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
+ 466, 467, 468, 469, 470, 471, 472, 689, 690, 475,
+ 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 0, 0, 490, 491, 0, 492,
+ 0, 493, 494, 495, 496, 497, 498, 499, 0, 500,
+ 501, 502, 503, 504, 505, 391, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 0, 691,
+ 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 692, 0,
+ 0, 694, 0, 696, 0, 697, 0, 699, 0, 420,
+ 421, 422, 423, 424, 425, 426, 427, 428, 429, 700,
+ 5, 6, 7, 8, 9, 10, 11, 16, 17, 18,
+ 19, 20, 21, 22, 352, 161, 12, 13, 14, 15,
+ 353, 0, 0, 16, 17, 18, 19, 20, 21, 22,
+ 773, 161, 24, 25, 0, 26, 27, 0, 774, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 0, 0, 0, 30,
+ 0, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 775, 776, 5, 6,
+ 7, 8, 9, 10, 11, 0, 0, 0, 0, 77,
+ 0, 0, 0, 0, 12, 13, 14, 15, 0, 0,
+ 0, 16, 17, 18, 19, 20, 21, 22, 0, 23,
+ 24, 25, 0, 26, 27, 28, 29, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 30, 0, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 75, 0, 76, 5, 6, 7, 8,
+ 9, 10, 11, 0, 0, 0, 0, 77, 0, 0,
+ 0, 0, 12, 13, 14, 231, 0, 0, 0, 16,
+ 17, 18, 19, 20, 21, 22, 0, 161, 24, 25,
+ 0, 26, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 30, 0, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 5, 6, 7, 8, 9, 10, 11, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 12, 13, 14,
+ 15, 0, 0, 0, 16, 17, 18, 19, 20, 21,
+ 22, 0, 161, 24, 0, 77, 26, 27, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 308, 309, 310, 311, 312, 313, 314, 0,
+ 30, 0, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 5, 6, 7, 8,
+ 9, 10, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 12, 13, 14, 231, 0, 0, 0, 16,
+ 17, 18, 19, 20, 21, 22, 0, 161, 24, 0,
+ 77, 26, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 134, 135, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 145, 146, 127, 128, 129,
+ 130, 131, 132, 133, 0, 30, 0, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 77, 191, 0, 192, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 127, 128, 129, 130, 131,
+ 132, 133, 273, 274, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 77, 30, 308, 309, 310,
+ 311, 312, 313, 314, 736, 737, 0, 24, 0, 134,
+ 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
+ 145, 146, 0, 127, 128, 129, 130, 131, 132, 133,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 127, 128, 129, 130, 131,
+ 132, 133, 0, 0, 0, 0, 77, 134, 135, 136,
+ 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
+ 0, 0, 0, 0, 0, 0, 0, 24, 251, 134,
+ 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
+ 145, 146, 30, 308, 309, 310, 311, 312, 313, 314,
+ 273, 274, 0, 0, 77, 134, 135, 136, 137, 138,
+ 139, 140, 141, 142, 143, 144, 145, 146, 0, 0,
+ 738, 0, 0, 0, 0, 0, 77, 134, 135, 136,
+ 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
+ 0, 904, 0, 0, 905, 0, 0, 0, 0, 0,
+ 0, 0, 77, 0, 127, 128, 129, 130, 131, 132,
+ 133, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 77, 134, 135, 136, 137, 138,
+ 139, 140, 141, 142, 143, 144, 145, 146, 0, 191,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 127, 128, 129, 130, 131, 132, 133, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 77, 30, 127, 128, 129, 130, 131, 132,
+ 133, 0, 0, 0, 0, 0, 134, 135, 136, 137,
+ 138, 139, 140, 141, 142, 143, 144, 145, 146, 0,
+ 127, 128, 129, 130, 131, 132, 133, 251, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 30, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 24, 77, 134, 135, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 145, 146, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 134, 135, 136, 137,
+ 138, 139, 140, 141, 142, 143, 144, 145, 146, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 77, 134, 135, 136, 137, 138, 139, 140, 141,
+ 142, 143, 144, 145, 146, 0, 0, 0, 0, 0,
+ 0, 0, 0, 77, 16, 17, 18, 19, 20, 21,
+ 22, 352, 161, 0, 0, 0, 0, 353, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 389, 390, 0, 0, 0, 0, 391,
+ 392, 393, 394, 395, 396, 397, 398, 399, 400, 401,
+ 402, 403, 404, 405, 406, 407, 408, 409, 410, 411,
+ 412, 413, 0, 0, 0, 0, 0, 154, 155, 156,
+ 157, 158, 159, 160, 0, 0, 0, 0, 0, 0,
+ 0, 289, 290, 12, 13, 14, 231, 0, 0, 0,
+ 16, 17, 18, 19, 20, 21, 22, 0, 161, 24,
+ 25, 0, 26, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 414, 0, 415, 416, 0, 417,
+ 418, 419, 0, 420, 421, 422, 423, 424, 425, 426,
+ 427, 428, 429, 0, 0, 0, 30, 0, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 162,
+ 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
+ 173, 174, 154, 155, 156, 157, 158, 159, 160, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 12, 13,
+ 14, 15, 0, 0, 0, 16, 17, 18, 19, 20,
+ 21, 22, 0, 161, 24, 0, 0, 26, 27, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 30, 0, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 162, 163, 164, 165, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 154, 155, 156,
+ 157, 158, 159, 160, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 12, 13, 14, 231, 0, 0, 0,
+ 16, 17, 18, 19, 20, 21, 22, 0, 161, 24,
+ 0, 0, 26, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 30, 0, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 162,
+ 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
+ 173, 174, 154, 155, 156, 157, 158, 159, 160, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 12, 13,
+ 14, 15, 0, 0, 0, 16, 17, 18, 19, 20,
+ 21, 22, 0, 161, 0, 0, 0, 26, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 30, 0, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 162, 163, 164, 165, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 154, 155, 156,
+ 157, 158, 159, 160, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 12, 13, 14, 231, 0, 0, 0,
+ 16, 17, 18, 19, 20, 21, 22, 0, 161, 0,
+ 0, 0, 26, 154, 155, 156, 157, 158, 159, 160,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 617,
+ 0, 618, 619, 0, 0, 0, 16, 17, 18, 19,
+ 20, 21, 22, 0, 161, 0, 30, 0, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 162,
+ 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
+ 173, 174, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 30, 0, 31, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 162, 163, 164, 165, 166,
+ 167, 168, 169, 170, 171, 172, 173, 174
+};
+
+static const yytype_int16 yycheck[] =
+{
+ 4, 27, 96, 4, 28, 4, 27, 4, 99, 100,
+ 101, 15, 284, 115, 4, 120, 286, 4, 15, 321,
+ 4, 602, 120, 387, 181, 29, 121, 687, 15, 109,
+ 584, 727, 29, 448, 115, 115, 4, 27, 298, 581,
+ 195, 195, 109, 27, 803, 286, 109, 72, 590, 120,
+ 121, 802, 29, 4, 629, 668, 305, 599, 241, 72,
+ 931, 29, 72, 229, 109, 835, 111, 26, 10, 11,
+ 372, 23, 24, 25, 278, 826, 27, 0, 37, 950,
+ 900, 72, 120, 181, 88, 905, 149, 0, 126, 115,
+ 72, 88, 668, 20, 115, 120, 115, 639, 90, 180,
+ 370, 88, 10, 11, 149, 109, 96, 111, 20, 36,
+ 12, 38, 96, 126, 111, 775, 120, 321, 128, 26,
+ 128, 28, 72, 126, 72, 329, 38, 284, 96, 370,
+ 37, 115, 195, 110, 239, 112, 125, 128, 958, 124,
+ 129, 126, 121, 724, 225, 149, 128, 115, 229, 153,
+ 195, 196, 120, 104, 180, 120, 153, 238, 238, 180,
+ 773, 180, 126, 933, 123, 740, 153, 248, 372, 126,
+ 122, 126, 176, 150, 120, 330, 330, 936, 128, 176,
+ 128, 286, 941, 175, 126, 177, 284, 191, 192, 176,
+ 270, 195, 196, 584, 191, 192, 180, 773, 613, 196,
+ 321, 72, 179, 270, 191, 192, 965, 270, 303, 785,
+ 305, 602, 238, 462, 463, 381, 126, 383, 126, 238,
+ 72, 802, 303, 286, 305, 270, 120, 231, 196, 248,
+ 195, 806, 126, 126, 231, 239, 932, 130, 72, 72,
+ 126, 120, 120, 247, 231, 826, 236, 126, 126, 120,
+ 247, 372, 236, 120, 238, 126, 126, 832, 356, 126,
+ 247, 836, 266, 72, 126, 370, 270, 330, 236, 266,
+ 238, 239, 532, 265, 239, 267, 128, 126, 120, 266,
+ 257, 258, 286, 440, 126, 330, 126, 120, 369, 369,
+ 130, 120, 873, 126, 128, 128, 956, 126, 121, 72,
+ 381, 124, 383, 460, 296, 126, 120, 370, 889, 126,
+ 287, 120, 126, 126, 306, 307, 120, 126, 322, 128,
+ 297, 286, 126, 120, 688, 322, 330, 510, 126, 126,
+ 120, 885, 120, 724, 455, 518, 126, 125, 640, 641,
+ 642, 126, 440, 369, 120, 887, 529, 120, 120, 125,
+ 369, 375, 72, 126, 126, 128, 812, 361, 814, 126,
+ 816, 126, 460, 120, 361, 330, 370, 462, 463, 126,
+ 451, 375, 72, 72, 361, 126, 72, 931, 329, 120,
+ 121, 462, 463, 124, 126, 369, 3, 4, 5, 6,
+ 7, 8, 9, 126, 386, 126, 950, 126, 120, 121,
+ 120, 369, 124, 321, 120, 370, 126, 126, 128, 133,
+ 134, 802, 3, 4, 5, 6, 7, 8, 9, 225,
+ 120, 120, 72, 229, 120, 128, 126, 126, 128, 128,
+ 126, 121, 128, 121, 907, 826, 640, 641, 642, 912,
+ 804, 3, 4, 5, 6, 7, 8, 9, 120, 121,
+ 129, 455, 124, 12, 372, 123, 457, 120, 455, 120,
+ 121, 26, 27, 124, 121, 455, 26, 27, 740, 446,
+ 943, 944, 124, 946, 3, 4, 5, 6, 7, 8,
+ 9, 72, 873, 13, 14, 15, 126, 960, 126, 126,
+ 881, 882, 883, 884, 885, 886, 126, 303, 889, 305,
+ 123, 803, 130, 124, 121, 121, 120, 588, 23, 24,
+ 25, 130, 125, 125, 125, 125, 125, 125, 125, 640,
+ 641, 642, 125, 125, 125, 795, 125, 125, 125, 624,
+ 125, 127, 125, 127, 120, 120, 124, 19, 20, 21,
+ 931, 622, 131, 638, 26, 27, 28, 29, 30, 31,
+ 32, 127, 34, 130, 531, 127, 127, 130, 122, 950,
+ 36, 127, 120, 120, 120, 30, 127, 18, 131, 120,
+ 125, 125, 125, 125, 122, 381, 125, 383, 582, 123,
+ 123, 127, 120, 20, 131, 582, 125, 120, 120, 125,
+ 127, 861, 543, 124, 122, 582, 131, 71, 125, 803,
+ 125, 127, 579, 622, 127, 127, 127, 127, 127, 127,
+ 127, 127, 125, 617, 618, 619, 127, 127, 127, 127,
+ 617, 618, 619, 127, 125, 127, 120, 123, 131, 127,
+ 617, 618, 619, 125, 936, 13, 13, 792, 940, 941,
+ 120, 127, 127, 127, 621, 451, 127, 120, 127, 4,
+ 365, 668, 672, 564, 676, 857, 462, 463, 459, 668,
+ 638, 460, 668, 965, 668, 731, 670, 668, 672, 668,
+ 674, 668, 4, 670, 785, 672, 773, 674, 668, 808,
+ 878, 668, 803, 670, 668, 672, 916, 674, 668, 356,
+ 795, 785, 794, 355, 645, 932, 787, 795, 649, 650,
+ 668, 962, 653, 654, 655, 656, 657, 658, 659, 660,
+ 661, 662, 741, 794, 794, 870, 721, 668, 606, 668,
+ 295, 904, 640, 641, 642, 295, 815, 794, -1, 792,
+ 883, 682, 936, -1, -1, 718, 940, 941, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 792, -1, -1,
+ -1, -1, 744, 834, -1, -1, 861, -1, -1, -1,
+ -1, 965, -1, 857, -1, -1, -1, 858, 794, 773,
+ 774, 795, 773, 794, -1, 794, -1, 774, 584, 860,
+ 860, 785, 588, 773, 865, 865, 785, -1, 792, 773,
+ 794, 795, -1, 860, -1, 785, 602, 774, 865, -1,
+ -1, 785, -1, -1, 808, 756, 774, 870, 759, 890,
+ 794, 808, -1, -1, -1, 936, 793, 785, -1, 940,
+ 941, 808, 773, -1, -1, 870, 794, 792, -1, 910,
+ 795, -1, -1, -1, 785, -1, 828, 861, -1, 865,
+ -1, 860, -1, -1, 965, -1, 865, -1, -1, -1,
+ -1, 855, -1, -1, -1, -1, 860, 861, 855, -1,
+ -1, 865, -1, 109, -1, -1, 870, 857, 855, -1,
+ -1, -1, -1, 857, 120, -1, 860, -1, -1, -1,
+ -1, 865, 859, -1, -1, 803, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 861, 865, -1, -1,
+ -1, -1, -1, -1, 908, 870, -1, -1, 912, -1,
+ -1, 908, -1, -1, -1, 912, -1, -1, 724, -1,
+ -1, 908, -1, -1, -1, 912, 910, -1, -1, -1,
+ -1, -1, -1, -1, -1, 181, -1, -1, -1, -1,
+ 944, -1, -1, -1, -1, -1, -1, 944, -1, -1,
+ -1, 197, -1, -1, -1, 201, 202, 944, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 239, -1, -1, 802, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 936, -1,
+ 826, -1, 940, 941, 270, -1, -1, -1, 834, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 284, -1,
+ 286, -1, -1, -1, -1, -1, -1, 965, -1, -1,
+ -1, -1, -1, -1, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, 95, 96, 97, 873, -1, -1,
+ -1, -1, -1, -1, -1, 881, 882, 883, 884, 885,
+ 886, -1, -1, 889, 890, -1, 332, 333, 334, -1,
+ -1, 337, -1, -1, -1, 126, -1, -1, -1, -1,
+ -1, 132, 133, 134, -1, -1, -1, -1, -1, -1,
+ 356, -1, -1, -1, 3, 4, 5, 6, 7, 8,
+ 9, 367, -1, -1, 370, 931, -1, -1, -1, -1,
+ -1, -1, -1, -1, 23, 24, 25, -1, -1, -1,
+ -1, 30, -1, -1, 950, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 72, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 440, -1, 85, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, 95, 96, 97, -1,
+ -1, -1, -1, -1, 460, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
+ -1, 29, 30, 132, 32, -1, 34, 35, 36, 37,
+ 38, 39, 40, -1, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 556, -1, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, -1, -1, -1, -1, 39, -1, -1, -1, -1,
+ -1, -1, 120, 121, 122, 123, 124, 125, 126, -1,
+ 128, 129, 130, -1, 132, 133, 134, 135, 136, 137,
+ 138, 139, 140, 141, 142, -1, -1, -1, -1, -1,
+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
+ 84, -1, -1, -1, -1, -1, -1, 623, -1, -1,
+ -1, -1, -1, 629, -1, -1, 3, 4, 5, 6,
+ 7, 8, 9, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 19, 20, 21, 22, 120, -1, -1, 26,
+ 27, 28, 29, 30, 31, 32, -1, 34, -1, 133,
+ 134, 38, 668, -1, -1, 42, 43, -1, -1, -1,
+ 676, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, -1, 72, -1, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
+ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
+ 97, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ -1, -1, -1, -1, 740, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 123, -1, 125, 126,
+ -1, 128, 129, 130, -1, 132, 133, 134, 135, 136,
+ 137, 138, 139, 140, 141, -1, -1, 773, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 785,
+ -1, -1, -1, -1, -1, -1, -1, -1, 794, 795,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 806, -1, -1, 85, 86, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 97, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 832, -1, -1, -1,
+ 836, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 132, 133, 134, -1, 860, 861, -1, -1, -1, 865,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 120, 121, 122,
+ 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 120, 121, 122,
+ 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 120, 121, -1,
+ 123, 124, 125, 126, -1, 128, 129, 130, 131, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 120, 121, -1,
+ 123, 124, 125, 126, 127, 128, 129, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 120, 121, 122,
+ 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 120, 121, -1,
+ 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
+ 123, 124, 125, 126, 127, 128, 129, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 120, 121, -1,
+ 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 120, 121, -1,
+ 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
+ -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 120, 121, 122,
+ 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
+ -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
+ 123, 124, 125, 126, 127, 128, 129, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
+ -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
+ 123, 124, 125, 126, 127, 128, 129, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
+ -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
+ 123, 124, 125, 126, 127, 128, 129, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
+ -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
+ 123, 124, 125, 126, -1, 128, 129, 130, 131, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
+ -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
+ 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
+ -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
+ 123, 124, 125, 126, -1, 128, 129, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
+ -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
+ -1, 124, -1, 126, -1, 128, 129, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, -1, -1, 29, 30, -1, 32,
+ -1, 34, 35, 36, 37, 38, 39, 40, -1, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, -1, 72,
+ -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 121, -1,
+ -1, 124, -1, 126, -1, 128, -1, 130, -1, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 3, 4, 5, 6, 7, 8, 9, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 19, 20, 21, 22,
+ 39, -1, -1, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, -1, 38, 39, -1, 41, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 74, 75, 76, 77, 78,
+ 79, 80, 81, 82, 83, 84, -1, -1, -1, 72,
+ -1, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
+ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
+ 113, 114, 115, 116, 117, 118, 119, 120, 3, 4,
+ 5, 6, 7, 8, 9, -1, -1, -1, -1, 132,
+ -1, -1, -1, -1, 19, 20, 21, 22, -1, -1,
+ -1, 26, 27, 28, 29, 30, 31, 32, -1, 34,
+ 35, 36, -1, 38, 39, 40, 41, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 72, -1, 74,
+ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
+ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
+ 115, 116, 117, 118, -1, 120, 3, 4, 5, 6,
+ 7, 8, 9, -1, -1, -1, -1, 132, -1, -1,
+ -1, -1, 19, 20, 21, 22, -1, -1, -1, 26,
+ 27, 28, 29, 30, 31, 32, -1, 34, 35, 36,
+ -1, 38, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 72, -1, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
+ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
+ 97, 3, 4, 5, 6, 7, 8, 9, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 19, 20, 21,
+ 22, -1, -1, -1, 26, 27, 28, 29, 30, 31,
+ 32, -1, 34, 35, -1, 132, 38, 39, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 3, 4, 5, 6, 7, 8, 9, -1,
+ 72, -1, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 97, 3, 4, 5, 6,
+ 7, 8, 9, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 19, 20, 21, 22, -1, -1, -1, 26,
+ 27, 28, 29, 30, 31, 32, -1, 34, 35, -1,
+ 132, 38, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, 95, 96, 97, 3, 4, 5,
+ 6, 7, 8, 9, -1, 72, -1, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
+ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
+ 97, 132, 38, -1, 40, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 132, 72, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, -1, 35, -1, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, -1, 3, 4, 5, 6, 7, 8, 9,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 3, 4, 5, 6, 7,
+ 8, 9, -1, -1, -1, -1, 132, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ -1, -1, -1, -1, -1, -1, -1, 35, 36, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 72, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, -1, -1, 132, 85, 86, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, -1, -1,
+ 126, -1, -1, -1, -1, -1, 132, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ -1, 121, -1, -1, 124, -1, -1, -1, -1, -1,
+ -1, -1, 132, -1, 3, 4, 5, 6, 7, 8,
+ 9, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 132, 85, 86, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, -1, 38,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 3, 4, 5, 6, 7, 8, 9, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 132, 72, 3, 4, 5, 6, 7, 8,
+ 9, -1, -1, -1, -1, -1, 85, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, 95, 96, 97, -1,
+ 3, 4, 5, 6, 7, 8, 9, 36, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 72, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 35, 132, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, 95, 96, 97, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 85, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, 95, 96, 97, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 132, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
+ -1, -1, -1, 132, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, -1, -1, -1, -1, 39, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 132,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 42, 43, -1, -1, -1, -1, 48,
+ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+ 69, 70, -1, -1, -1, -1, -1, 3, 4, 5,
+ 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
+ -1, 133, 134, 19, 20, 21, 22, -1, -1, -1,
+ 26, 27, 28, 29, 30, 31, 32, -1, 34, 35,
+ 36, -1, 38, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 123, -1, 125, 126, -1, 128,
+ 129, 130, -1, 132, 133, 134, 135, 136, 137, 138,
+ 139, 140, 141, -1, -1, -1, 72, -1, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 3, 4, 5, 6, 7, 8, 9, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 19, 20,
+ 21, 22, -1, -1, -1, 26, 27, 28, 29, 30,
+ 31, 32, -1, 34, 35, -1, -1, 38, 39, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 72, -1, 74, 75, 76, 77, 78, 79, 80,
+ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, 95, 96, 97, 3, 4, 5,
+ 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 19, 20, 21, 22, -1, -1, -1,
+ 26, 27, 28, 29, 30, 31, 32, -1, 34, 35,
+ -1, -1, 38, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 72, -1, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 3, 4, 5, 6, 7, 8, 9, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 19, 20,
+ 21, 22, -1, -1, -1, 26, 27, 28, 29, 30,
+ 31, 32, -1, 34, -1, -1, -1, 38, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 72, -1, 74, 75, 76, 77, 78, 79, 80,
+ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, 95, 96, 97, 3, 4, 5,
+ 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 19, 20, 21, 22, -1, -1, -1,
+ 26, 27, 28, 29, 30, 31, 32, -1, 34, -1,
+ -1, -1, 38, 3, 4, 5, 6, 7, 8, 9,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 19,
+ -1, 21, 22, -1, -1, -1, 26, 27, 28, 29,
+ 30, 31, 32, -1, 34, -1, 72, -1, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 72, -1, 74, 75, 76, 77, 78, 79,
+ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_uint16 yystos[] =
+{
+ 0, 144, 145, 0, 146, 3, 4, 5, 6, 7,
+ 8, 9, 19, 20, 21, 22, 26, 27, 28, 29,
+ 30, 31, 32, 34, 35, 36, 38, 39, 40, 41,
+ 72, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
+ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
+ 113, 114, 115, 116, 117, 118, 120, 132, 147, 148,
+ 149, 150, 152, 153, 154, 155, 156, 158, 161, 175,
+ 176, 178, 186, 187, 196, 198, 199, 216, 217, 218,
+ 219, 222, 223, 226, 232, 259, 289, 290, 291, 292,
+ 294, 295, 296, 298, 299, 302, 303, 304, 305, 306,
+ 308, 309, 312, 319, 320, 321, 327, 3, 4, 5,
+ 6, 7, 8, 9, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, 95, 96, 97, 289, 291, 292,
+ 296, 12, 128, 313, 3, 4, 5, 6, 7, 8,
+ 9, 34, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, 156, 161, 176, 291, 296,
+ 302, 308, 3, 4, 5, 6, 7, 8, 9, 121,
+ 299, 38, 40, 197, 289, 292, 295, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 3, 4,
+ 5, 6, 7, 8, 9, 300, 157, 160, 289, 300,
+ 121, 22, 148, 154, 155, 183, 199, 216, 302, 308,
+ 120, 121, 237, 237, 237, 237, 126, 161, 302, 308,
+ 120, 36, 223, 240, 241, 244, 290, 294, 296, 298,
+ 295, 290, 291, 295, 128, 156, 161, 176, 187, 223,
+ 292, 303, 312, 10, 11, 227, 229, 231, 232, 233,
+ 238, 240, 260, 268, 271, 279, 292, 296, 298, 133,
+ 134, 265, 322, 323, 324, 326, 310, 296, 121, 129,
+ 200, 289, 12, 300, 289, 300, 156, 176, 3, 4,
+ 5, 6, 7, 8, 9, 191, 192, 195, 268, 279,
+ 298, 375, 123, 151, 289, 289, 120, 226, 231, 232,
+ 292, 298, 329, 332, 333, 298, 298, 337, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 33, 39, 261, 264, 265, 301, 303, 321,
+ 121, 124, 168, 169, 120, 159, 261, 177, 289, 302,
+ 292, 298, 375, 224, 289, 293, 126, 242, 295, 295,
+ 297, 300, 289, 300, 223, 241, 311, 228, 126, 42,
+ 43, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 123, 125, 126, 128, 129, 130,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 351, 352, 234, 126, 262, 123, 256, 257, 268, 277,
+ 322, 281, 282, 283, 227, 233, 296, 124, 325, 323,
+ 324, 300, 145, 201, 203, 204, 206, 208, 188, 190,
+ 265, 188, 300, 300, 189, 126, 3, 4, 5, 6,
+ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 29, 30, 32, 34, 35, 36, 37, 38, 39, 40,
+ 42, 43, 44, 45, 46, 47, 71, 72, 73, 120,
+ 121, 122, 123, 124, 125, 126, 128, 129, 130, 142,
+ 319, 352, 353, 354, 377, 378, 379, 380, 381, 382,
+ 291, 296, 121, 120, 226, 231, 125, 298, 298, 298,
+ 125, 125, 298, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 125, 125, 127, 127, 125, 120, 262, 260,
+ 162, 23, 24, 25, 30, 170, 171, 174, 289, 168,
+ 120, 179, 180, 181, 298, 298, 122, 249, 250, 296,
+ 299, 245, 124, 246, 361, 261, 120, 261, 300, 234,
+ 230, 130, 130, 127, 131, 26, 37, 123, 235, 239,
+ 120, 125, 258, 127, 268, 130, 284, 285, 13, 14,
+ 15, 280, 306, 307, 122, 125, 129, 19, 21, 22,
+ 291, 296, 302, 314, 315, 318, 319, 20, 38, 211,
+ 199, 120, 189, 195, 120, 188, 188, 120, 125, 193,
+ 375, 375, 375, 120, 145, 328, 125, 127, 127, 334,
+ 336, 125, 308, 340, 342, 344, 346, 341, 343, 345,
+ 347, 348, 349, 298, 23, 24, 25, 122, 163, 164,
+ 173, 174, 125, 30, 172, 122, 125, 123, 123, 127,
+ 251, 253, 254, 295, 249, 247, 248, 289, 243, 10,
+ 11, 72, 121, 123, 124, 125, 126, 128, 129, 130,
+ 142, 320, 321, 352, 353, 354, 356, 363, 364, 365,
+ 367, 369, 373, 120, 120, 249, 131, 131, 236, 18,
+ 249, 263, 128, 129, 355, 356, 358, 269, 286, 285,
+ 306, 202, 289, 289, 289, 312, 10, 11, 126, 266,
+ 270, 278, 279, 265, 316, 266, 20, 120, 120, 190,
+ 249, 122, 131, 127, 122, 308, 330, 308, 308, 338,
+ 127, 308, 308, 308, 308, 308, 308, 308, 308, 308,
+ 308, 125, 350, 33, 41, 119, 120, 153, 155, 165,
+ 166, 167, 175, 186, 196, 199, 220, 221, 222, 241,
+ 259, 289, 292, 296, 302, 308, 327, 124, 289, 171,
+ 289, 181, 182, 376, 225, 125, 308, 127, 125, 381,
+ 234, 371, 372, 374, 370, 366, 368, 127, 369, 127,
+ 264, 358, 126, 272, 282, 287, 288, 203, 317, 205,
+ 266, 276, 322, 281, 300, 207, 209, 127, 127, 308,
+ 335, 127, 308, 127, 127, 127, 127, 127, 127, 127,
+ 127, 125, 125, 127, 153, 161, 184, 199, 221, 296,
+ 302, 308, 381, 155, 220, 302, 237, 120, 231, 241,
+ 292, 233, 296, 355, 120, 378, 234, 71, 252, 266,
+ 248, 357, 357, 362, 357, 361, 357, 273, 131, 355,
+ 300, 123, 212, 213, 127, 266, 212, 266, 194, 331,
+ 125, 339, 13, 13, 121, 124, 185, 289, 161, 184,
+ 302, 237, 161, 120, 231, 253, 255, 123, 125, 127,
+ 358, 359, 127, 120, 122, 359, 360, 127, 129, 131,
+ 249, 214, 267, 210, 275, 127, 376, 127, 127, 127,
+ 375, 376, 185, 289, 161, 185, 289, 120, 256, 127,
+ 215, 363, 272, 212, 26, 28, 37, 127, 122, 120,
+ 289, 185, 274, 363, 381, 376, 275, 120
+};
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. */
+
+#define YYFAIL goto yyerrlab
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ yytoken = YYTRANSLATE (yychar); \
+ YYPOPSTACK (1); \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (YYID (0))
+
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+ If N is 0, then set CURRENT to the empty location which ends
+ the previous symbol: RHS[0] (always defined). */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ do \
+ if (YYID (N)) \
+ { \
+ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
+ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
+ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
+ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
+ } \
+ else \
+ { \
+ (Current).first_line = (Current).last_line = \
+ YYRHSLOC (Rhs, 0).last_line; \
+ (Current).first_column = (Current).last_column = \
+ YYRHSLOC (Rhs, 0).last_column; \
+ } \
+ while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+ This macro was not mandated originally: define only if we know
+ we won't break user code: when these are the locations we know. */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+# define YY_LOCATION_PRINT(File, Loc) \
+ fprintf (File, "%d.%d-%d.%d", \
+ (Loc).first_line, (Loc).first_column, \
+ (Loc).last_line, (Loc).last_column)
+# else
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+ YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+ yytype_int16 *yybottom;
+ yytype_int16 *yytop;
+#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; yybottom <= yytop; yybottom++)
+ {
+ int yybot = *yybottom;
+ YYFPRINTF (stderr, " %d", yybot);
+ }
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+ YYSTYPE *yyvsp;
+ int yyrule;
+#endif
+{
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
+ YYFPRINTF (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+\f
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
+{
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+#endif
+{
+ char *yyd = yydest;
+ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
+ {
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+ YYCHAR while in state YYSTATE. Return the number of bytes copied,
+ including the terminating null byte. If YYRESULT is null, do not
+ copy anything; just return the number of bytes that would be
+ copied. As a special case, return 0 if an ordinary "syntax error"
+ message will do. Return YYSIZE_MAXIMUM if overflow occurs during
+ size calculation. */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+ int yyn = yypact[yystate];
+
+ if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+ return 0;
+ else
+ {
+ int yytype = YYTRANSLATE (yychar);
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ int yysize_overflow = 0;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ int yyx;
+
+# if 0
+ /* This is so xgettext sees the translatable formats that are
+ constructed on the fly. */
+ YY_("syntax error, unexpected %s");
+ YY_("syntax error, unexpected %s, expecting %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+ char *yyfmt;
+ char const *yyf;
+ static char const yyunexpected[] = "syntax error, unexpected %s";
+ static char const yyexpecting[] = ", expecting %s";
+ static char const yyor[] = " or %s";
+ char yyformat[sizeof yyunexpected
+ + sizeof yyexpecting - 1
+ + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+ * (sizeof yyor - 1))];
+ char const *yyprefix = yyexpecting;
+
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yycount = 1;
+
+ yyarg[0] = yytname[yytype];
+ yyfmt = yystpcpy (yyformat, yyunexpected);
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ yyformat[sizeof yyunexpected - 1] = '\0';
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
+ yyfmt = yystpcpy (yyfmt, yyprefix);
+ yyprefix = yyor;
+ }
+
+ yyf = YY_(yyformat);
+ yysize1 = yysize + yystrlen (yyf);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
+
+ if (yysize_overflow)
+ return YYSIZE_MAXIMUM;
+
+ if (yyresult)
+ {
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ char *yyp = yyresult;
+ int yyi = 0;
+ while ((*yyp = *yyf) != '\0')
+ {
+ if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyf += 2;
+ }
+ else
+ {
+ yyp++;
+ yyf++;
+ }
+ }
+ }
+ return yysize;
+ }
+}
+#endif /* YYERROR_VERBOSE */
+\f
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
+{
+ YYUSE (yyvaluep);
+
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
+ {
+
+ default:
+ break;
+ }
+}
+
+/* Prevent warnings from -Wmissing-prototypes. */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/* The lookahead symbol. */
+int yychar;
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+
+/*-------------------------.
+| yyparse or yypush_parse. |
+`-------------------------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+
+
+ int yystate;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+
+ /* The stacks and their tools:
+ `yyss': related to states.
+ `yyvs': related to semantic values.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs;
+ YYSTYPE *yyvsp;
+
+ YYSIZE_T yystacksize;
+
+ int yyn;
+ int yyresult;
+ /* Lookahead token as an internal (translated) token number. */
+ int yytoken;
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ yytoken = 0;
+ yyss = yyssa;
+ yyvs = yyvsa;
+ yystacksize = YYINITDEPTH;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+ yyssp = yyss;
+ yyvsp = yyvs;
+
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ lookahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yyn == YYPACT_NINF)
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yyn == 0 || yyn == YYTABLE_NINF)
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ *++yyvsp = yylval;
+
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 4:
+
+/* Line 1455 of yacc.c */
+#line 1464 "vtkParse.y"
+ {
+ startSig();
+ clearType();
+ clearTypeId();
+ clearTemplate();
+ closeComment();
+ }
+ break;
+
+ case 27:
+
+/* Line 1455 of yacc.c */
+#line 1509 "vtkParse.y"
+ { pushNamespace((yyvsp[(2) - (2)].str)); }
+ break;
+
+ case 28:
+
+/* Line 1455 of yacc.c */
+#line 1510 "vtkParse.y"
+ { popNamespace(); }
+ break;
+
+ case 36:
+
+/* Line 1455 of yacc.c */
+#line 1532 "vtkParse.y"
+ { pushType(); }
+ break;
+
+ case 37:
+
+/* Line 1455 of yacc.c */
+#line 1533 "vtkParse.y"
+ {
+ const char *name = (currentClass ? currentClass->Name : NULL);
+ popType();
+ clearTypeId();
+ if (name)
+ {
+ setTypeId(name);
+ setTypeBase(guess_id_type(name));
+ }
+ end_class();
+ }
+ break;
+
+ case 38:
+
+/* Line 1455 of yacc.c */
+#line 1546 "vtkParse.y"
+ { start_class((yyvsp[(2) - (2)].str), (yyvsp[(1) - (2)].integer)); }
+ break;
+
+ case 40:
+
+/* Line 1455 of yacc.c */
+#line 1548 "vtkParse.y"
+ { start_class(NULL, (yyvsp[(1) - (1)].integer)); }
+ break;
+
+ case 42:
+
+/* Line 1455 of yacc.c */
+#line 1552 "vtkParse.y"
+ { (yyval.integer) = 0; }
+ break;
+
+ case 43:
+
+/* Line 1455 of yacc.c */
+#line 1553 "vtkParse.y"
+ { (yyval.integer) = 1; }
+ break;
+
+ case 44:
+
+/* Line 1455 of yacc.c */
+#line 1554 "vtkParse.y"
+ { (yyval.integer) = 2; }
+ break;
+
+ case 46:
+
+/* Line 1455 of yacc.c */
+#line 1558 "vtkParse.y"
+ {
+ startSig();
+ clearType();
+ clearTypeId();
+ clearTemplate();
+ closeComment();
+ }
+ break;
+
+ case 49:
+
+/* Line 1455 of yacc.c */
+#line 1570 "vtkParse.y"
+ { access_level = VTK_ACCESS_PUBLIC; }
+ break;
+
+ case 50:
+
+/* Line 1455 of yacc.c */
+#line 1571 "vtkParse.y"
+ { access_level = VTK_ACCESS_PRIVATE; }
+ break;
+
+ case 51:
+
+/* Line 1455 of yacc.c */
+#line 1572 "vtkParse.y"
+ { access_level = VTK_ACCESS_PROTECTED; }
+ break;
+
+ case 70:
+
+/* Line 1455 of yacc.c */
+#line 1597 "vtkParse.y"
+ { output_friend_function(); }
+ break;
+
+ case 76:
+
+/* Line 1455 of yacc.c */
+#line 1611 "vtkParse.y"
+ { add_base_class(currentClass, (yyvsp[(1) - (1)].str), access_level, 0); }
+ break;
+
+ case 77:
+
+/* Line 1455 of yacc.c */
+#line 1613 "vtkParse.y"
+ { add_base_class(currentClass, (yyvsp[(3) - (3)].str), (yyvsp[(2) - (3)].integer), 1); }
+ break;
+
+ case 78:
+
+/* Line 1455 of yacc.c */
+#line 1615 "vtkParse.y"
+ { add_base_class(currentClass, (yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].integer), (yyvsp[(2) - (3)].integer)); }
+ break;
+
+ case 79:
+
+/* Line 1455 of yacc.c */
+#line 1618 "vtkParse.y"
+ { (yyval.integer) = 0; }
+ break;
+
+ case 80:
+
+/* Line 1455 of yacc.c */
+#line 1619 "vtkParse.y"
+ { (yyval.integer) = 1; }
+ break;
+
+ case 81:
+
+/* Line 1455 of yacc.c */
+#line 1622 "vtkParse.y"
+ { (yyval.integer) = access_level; }
+ break;
+
+ case 83:
+
+/* Line 1455 of yacc.c */
+#line 1626 "vtkParse.y"
+ { (yyval.integer) = VTK_ACCESS_PUBLIC; }
+ break;
+
+ case 84:
+
+/* Line 1455 of yacc.c */
+#line 1627 "vtkParse.y"
+ { (yyval.integer) = VTK_ACCESS_PRIVATE; }
+ break;
+
+ case 85:
+
+/* Line 1455 of yacc.c */
+#line 1628 "vtkParse.y"
+ { (yyval.integer) = VTK_ACCESS_PROTECTED; }
+ break;
+
+ case 88:
+
+/* Line 1455 of yacc.c */
+#line 1644 "vtkParse.y"
+ { pushType(); start_enum((yyvsp[(1) - (2)].str)); }
+ break;
+
+ case 89:
+
+/* Line 1455 of yacc.c */
+#line 1645 "vtkParse.y"
+ {
+ popType();
+ clearTypeId();
+ if ((yyvsp[(1) - (5)].str) != NULL)
+ {
+ setTypeId((yyvsp[(1) - (5)].str));
+ setTypeBase(guess_id_type((yyvsp[(1) - (5)].str)));
+ }
+ end_enum();
+ }
+ break;
+
+ case 90:
+
+/* Line 1455 of yacc.c */
+#line 1657 "vtkParse.y"
+ { (yyval.str) = (yyvsp[(2) - (2)].str); }
+ break;
+
+ case 91:
+
+/* Line 1455 of yacc.c */
+#line 1658 "vtkParse.y"
+ { (yyval.str) = NULL; }
+ break;
+
+ case 97:
+
+/* Line 1455 of yacc.c */
+#line 1669 "vtkParse.y"
+ { add_enum((yyvsp[(1) - (1)].str), NULL); }
+ break;
+
+ case 98:
+
+/* Line 1455 of yacc.c */
+#line 1670 "vtkParse.y"
+ { postSig("="); markSig(); }
+ break;
+
+ case 99:
+
+/* Line 1455 of yacc.c */
+#line 1671 "vtkParse.y"
+ { chopSig(); add_enum((yyvsp[(1) - (4)].str), copySig()); }
+ break;
+
+ case 120:
+
+/* Line 1455 of yacc.c */
+#line 1724 "vtkParse.y"
+ { pushFunction(); postSig("("); }
+ break;
+
+ case 121:
+
+/* Line 1455 of yacc.c */
+#line 1725 "vtkParse.y"
+ { postSig(")"); }
+ break;
+
+ case 122:
+
+/* Line 1455 of yacc.c */
+#line 1726 "vtkParse.y"
+ { (yyval.integer) = VTK_PARSE_FUNCTION; popFunction(); }
+ break;
+
+ case 123:
+
+/* Line 1455 of yacc.c */
+#line 1730 "vtkParse.y"
+ {
+ ValueInfo *item = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_InitValue(item);
+ item->ItemType = VTK_TYPEDEF_INFO;
+ item->Access = access_level;
+
+ handle_complex_type(item, getType(), (yyvsp[(1) - (1)].integer), getSig());
+
+ if (getVarName())
+ {
+ item->Name = getVarName();
+ }
+
+ if (item->Class == NULL)
+ {
+ vtkParse_FreeValue(item);
+ }
+ else if (currentClass)
+ {
+ vtkParse_AddTypedefToClass(currentClass, item);
+ }
+ else
+ {
+ vtkParse_AddTypedefToNamespace(currentNamespace, item);
+ }
+ }
+ break;
+
+ case 124:
+
+/* Line 1455 of yacc.c */
+#line 1763 "vtkParse.y"
+ { add_using((yyvsp[(2) - (3)].str), 0); }
+ break;
+
+ case 126:
+
+/* Line 1455 of yacc.c */
+#line 1767 "vtkParse.y"
+ { (yyval.str) = (yyvsp[(2) - (2)].str); }
+ break;
+
+ case 127:
+
+/* Line 1455 of yacc.c */
+#line 1769 "vtkParse.y"
+ { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
+ break;
+
+ case 128:
+
+/* Line 1455 of yacc.c */
+#line 1771 "vtkParse.y"
+ { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
+ break;
+
+ case 129:
+
+/* Line 1455 of yacc.c */
+#line 1773 "vtkParse.y"
+ { (yyval.str) = vtkstrcat3((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)); }
+ break;
+
+ case 130:
+
+/* Line 1455 of yacc.c */
+#line 1775 "vtkParse.y"
+ { (yyval.str) = vtkstrcat3((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)); }
+ break;
+
+ case 131:
+
+/* Line 1455 of yacc.c */
+#line 1778 "vtkParse.y"
+ { add_using((yyvsp[(3) - (4)].str), 1); }
+ break;
+
+ case 132:
+
+/* Line 1455 of yacc.c */
+#line 1786 "vtkParse.y"
+ { postSig("template<> "); clearTypeId(); }
+ break;
+
+ case 133:
+
+/* Line 1455 of yacc.c */
+#line 1788 "vtkParse.y"
+ {
+ postSig("template<");
+ pushType();
+ clearType();
+ clearTypeId();
+ startTemplate();
+ }
+ break;
+
+ case 134:
+
+/* Line 1455 of yacc.c */
+#line 1796 "vtkParse.y"
+ {
+ chopSig();
+ if (getSig()[getSigLength()-1] == '>') { postSig(" "); }
+ postSig("> ");
+ clearTypeId();
+ popType();
+ }
+ break;
+
+ case 136:
+
+/* Line 1455 of yacc.c */
+#line 1807 "vtkParse.y"
+ { chopSig(); postSig(", "); clearType(); clearTypeId(); }
+ break;
+
+ case 138:
+
+/* Line 1455 of yacc.c */
+#line 1811 "vtkParse.y"
+ { markSig(); }
+ break;
+
+ case 139:
+
+/* Line 1455 of yacc.c */
+#line 1813 "vtkParse.y"
+ { add_template_parameter(getType(), (yyvsp[(3) - (3)].integer), copySig()); }
+ break;
+
+ case 141:
+
+/* Line 1455 of yacc.c */
+#line 1815 "vtkParse.y"
+ { markSig(); }
+ break;
+
+ case 142:
+
+/* Line 1455 of yacc.c */
+#line 1817 "vtkParse.y"
+ { add_template_parameter(0, (yyvsp[(3) - (3)].integer), copySig()); }
+ break;
+
+ case 144:
+
+/* Line 1455 of yacc.c */
+#line 1819 "vtkParse.y"
+ { pushTemplate(); markSig(); }
+ break;
+
+ case 145:
+
+/* Line 1455 of yacc.c */
+#line 1820 "vtkParse.y"
+ { postSig("class "); }
+ break;
+
+ case 146:
+
+/* Line 1455 of yacc.c */
+#line 1822 "vtkParse.y"
+ {
+ int i;
+ TemplateInfo *newTemplate = currentTemplate;
+ popTemplate();
+ add_template_parameter(0, (yyvsp[(5) - (5)].integer), copySig());
+ i = currentTemplate->NumberOfParameters-1;
+ currentTemplate->Parameters[i]->Template = newTemplate;
+ }
+ break;
+
+ case 148:
+
+/* Line 1455 of yacc.c */
+#line 1833 "vtkParse.y"
+ { postSig("class "); }
+ break;
+
+ case 149:
+
+/* Line 1455 of yacc.c */
+#line 1834 "vtkParse.y"
+ { postSig("typename "); }
+ break;
+
+ case 152:
+
+/* Line 1455 of yacc.c */
+#line 1840 "vtkParse.y"
+ { postSig("="); markSig(); }
+ break;
+
+ case 153:
+
+/* Line 1455 of yacc.c */
+#line 1842 "vtkParse.y"
+ {
+ int i = currentTemplate->NumberOfParameters-1;
+ ValueInfo *param = currentTemplate->Parameters[i];
+ chopSig();
+ param->Value = copySig();
+ }
+ break;
+
+ case 156:
+
+/* Line 1455 of yacc.c */
+#line 1859 "vtkParse.y"
+ { output_function(); }
+ break;
+
+ case 157:
+
+/* Line 1455 of yacc.c */
+#line 1860 "vtkParse.y"
+ { output_function(); }
+ break;
+
+ case 158:
+
+/* Line 1455 of yacc.c */
+#line 1861 "vtkParse.y"
+ { reject_function(); }
+ break;
+
+ case 159:
+
+/* Line 1455 of yacc.c */
+#line 1862 "vtkParse.y"
+ { reject_function(); }
+ break;
+
+ case 167:
+
+/* Line 1455 of yacc.c */
+#line 1878 "vtkParse.y"
+ { output_function(); }
+ break;
+
+ case 177:
+
+/* Line 1455 of yacc.c */
+#line 1895 "vtkParse.y"
+ {
+ postSig("(");
+ set_return(currentFunction, getType(), getTypeId(), 0);
+ }
+ break;
+
+ case 178:
+
+/* Line 1455 of yacc.c */
+#line 1899 "vtkParse.y"
+ { postSig(")"); }
+ break;
+
+ case 179:
+
+/* Line 1455 of yacc.c */
+#line 1901 "vtkParse.y"
+ {
+ postSig(";");
+ closeSig();
+ currentFunction->IsOperator = 1;
+ currentFunction->Name = "operator typecast";
+ currentFunction->Comment = vtkstrdup(getComment());
+ vtkParseDebug("Parsed operator", "operator typecast");
+ }
+ break;
+
+ case 180:
+
+/* Line 1455 of yacc.c */
+#line 1912 "vtkParse.y"
+ { (yyval.str) = copySig(); }
+ break;
+
+ case 181:
+
+/* Line 1455 of yacc.c */
+#line 1915 "vtkParse.y"
+ { postSig(")"); }
+ break;
+
+ case 182:
+
+/* Line 1455 of yacc.c */
+#line 1916 "vtkParse.y"
+ {
+ postSig(";");
+ closeSig();
+ currentFunction->Name = (yyvsp[(1) - (3)].str);
+ currentFunction->Comment = vtkstrdup(getComment());
+ vtkParseDebug("Parsed operator", currentFunction->Name);
+ }
+ break;
+
+ case 183:
+
+/* Line 1455 of yacc.c */
+#line 1926 "vtkParse.y"
+ {
+ postSig("(");
+ currentFunction->IsOperator = 1;
+ set_return(currentFunction, getType(), getTypeId(), 0);
+ }
+ break;
+
+ case 185:
+
+/* Line 1455 of yacc.c */
+#line 1935 "vtkParse.y"
+ { chopSig(); (yyval.str) = vtkstrcat(copySig(), (yyvsp[(2) - (2)].str)); postSig((yyvsp[(2) - (2)].str)); }
+ break;
+
+ case 186:
+
+/* Line 1455 of yacc.c */
+#line 1938 "vtkParse.y"
+ { markSig(); postSig("operator "); }
+ break;
+
+ case 187:
+
+/* Line 1455 of yacc.c */
+#line 1942 "vtkParse.y"
+ {
+ postSig(";");
+ closeSig();
+ currentFunction->Name = (yyvsp[(1) - (2)].str);
+ currentFunction->Comment = vtkstrdup(getComment());
+ vtkParseDebug("Parsed func", currentFunction->Name);
+ }
+ break;
+
+ case 190:
+
+/* Line 1455 of yacc.c */
+#line 1954 "vtkParse.y"
+ { postSig(" throw "); }
+ break;
+
+ case 191:
+
+/* Line 1455 of yacc.c */
+#line 1954 "vtkParse.y"
+ { chopSig(); }
+ break;
+
+ case 192:
+
+/* Line 1455 of yacc.c */
+#line 1955 "vtkParse.y"
+ { postSig(" const"); currentFunction->IsConst = 1; }
+ break;
+
+ case 193:
+
+/* Line 1455 of yacc.c */
+#line 1957 "vtkParse.y"
+ {
+ postSig(" = 0");
+ currentFunction->IsPureVirtual = 1;
+ if (currentClass) { currentClass->IsAbstract = 1; }
+ }
+ break;
+
+ case 196:
+
+/* Line 1455 of yacc.c */
+#line 1969 "vtkParse.y"
+ {
+ postSig("(");
+ set_return(currentFunction, getType(), getTypeId(), 0);
+ }
+ break;
+
+ case 197:
+
+/* Line 1455 of yacc.c */
+#line 1973 "vtkParse.y"
+ { postSig(")"); }
+ break;
+
+ case 200:
+
+/* Line 1455 of yacc.c */
+#line 1985 "vtkParse.y"
+ { closeSig(); }
+ break;
+
+ case 201:
+
+/* Line 1455 of yacc.c */
+#line 1986 "vtkParse.y"
+ { openSig(); }
+ break;
+
+ case 202:
+
+/* Line 1455 of yacc.c */
+#line 1987 "vtkParse.y"
+ {
+ postSig(";");
+ closeSig();
+ if (getType() & VTK_PARSE_VIRTUAL)
+ {
+ currentFunction->IsVirtual = 1;
+ }
+ if (getType() & VTK_PARSE_EXPLICIT)
+ {
+ currentFunction->IsExplicit = 1;
+ }
+ currentFunction->Name = (yyvsp[(1) - (5)].str);
+ currentFunction->Comment = vtkstrdup(getComment());
+ vtkParseDebug("Parsed func", currentFunction->Name);
+ }
+ break;
+
+ case 203:
+
+/* Line 1455 of yacc.c */
+#line 2004 "vtkParse.y"
+ { pushType(); postSig("("); }
+ break;
+
+ case 204:
+
+/* Line 1455 of yacc.c */
+#line 2005 "vtkParse.y"
+ { popType(); postSig(")"); }
+ break;
+
+ case 211:
+
+/* Line 1455 of yacc.c */
+#line 2022 "vtkParse.y"
+ { clearType(); clearTypeId(); }
+ break;
+
+ case 213:
+
+/* Line 1455 of yacc.c */
+#line 2025 "vtkParse.y"
+ { clearType(); clearTypeId(); }
+ break;
+
+ case 214:
+
+/* Line 1455 of yacc.c */
+#line 2026 "vtkParse.y"
+ { clearType(); clearTypeId(); postSig(", "); }
+ break;
+
+ case 216:
+
+/* Line 1455 of yacc.c */
+#line 2029 "vtkParse.y"
+ { currentFunction->IsVariadic = 1; postSig(", ..."); }
+ break;
+
+ case 217:
+
+/* Line 1455 of yacc.c */
+#line 2032 "vtkParse.y"
+ { markSig(); }
+ break;
+
+ case 218:
+
+/* Line 1455 of yacc.c */
+#line 2034 "vtkParse.y"
+ {
+ ValueInfo *param = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_InitValue(param);
+
+ handle_complex_type(param, getType(), (yyvsp[(3) - (3)].integer), copySig());
+ add_legacy_parameter(currentFunction, param);
+
+ if (getVarName())
+ {
+ param->Name = getVarName();
+ }
+
+ vtkParse_AddParameterToFunction(currentFunction, param);
+ }
+ break;
+
+ case 219:
+
+/* Line 1455 of yacc.c */
+#line 2049 "vtkParse.y"
+ {
+ int i = currentFunction->NumberOfParameters-1;
+ if (getVarValue())
+ {
+ currentFunction->Parameters[i]->Value = getVarValue();
+ }
+ }
+ break;
+
+ case 220:
+
+/* Line 1455 of yacc.c */
+#line 2058 "vtkParse.y"
+ { clearVarValue(); }
+ break;
+
+ case 222:
+
+/* Line 1455 of yacc.c */
+#line 2062 "vtkParse.y"
+ { postSig("="); clearVarValue(); markSig(); }
+ break;
+
+ case 223:
+
+/* Line 1455 of yacc.c */
+#line 2063 "vtkParse.y"
+ { chopSig(); setVarValue(copySig()); }
+ break;
+
+ case 225:
+
+/* Line 1455 of yacc.c */
+#line 2074 "vtkParse.y"
+ {
+ unsigned int type = getType();
+ ValueInfo *var = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_InitValue(var);
+ var->ItemType = VTK_VARIABLE_INFO;
+ var->Access = access_level;
+
+ handle_complex_type(var, type, (yyvsp[(1) - (2)].integer), getSig());
+
+ var->Name = getVarName();
+
+ if (getVarValue())
+ {
+ var->Value = getVarValue();
+ }
+
+ /* Is this a typedef? */
+ if ((type & VTK_PARSE_TYPEDEF) != 0)
+ {
+ var->ItemType = VTK_TYPEDEF_INFO;
+ if (currentClass)
+ {
+ vtkParse_AddVariableToClass(currentClass, var);
+ }
+ else
+ {
+ vtkParse_AddVariableToNamespace(currentNamespace, var);
+ }
+ }
+ /* Is this a constant? */
+ else if (((type & VTK_PARSE_CONST) != 0) && var->Value != NULL &&
+ (((type & VTK_PARSE_INDIRECT) == 0) ||
+ ((type & VTK_PARSE_INDIRECT) == VTK_PARSE_ARRAY)))
+ {
+ var->ItemType = VTK_CONSTANT_INFO;
+ if (currentClass)
+ {
+ vtkParse_AddConstantToClass(currentClass, var);
+ }
+ else
+ {
+ vtkParse_AddConstantToNamespace(currentNamespace, var);
+ }
+ }
+ /* This is a true variable i.e. not constant */
+ else
+ {
+ if (currentClass)
+ {
+ vtkParse_AddVariableToClass(currentClass, var);
+ }
+ else
+ {
+ vtkParse_AddVariableToNamespace(currentNamespace, var);
+ }
+ }
+ }
+ break;
+
+ case 229:
+
+/* Line 1455 of yacc.c */
+#line 2136 "vtkParse.y"
+ { postSig(", "); }
+ break;
+
+ case 232:
+
+/* Line 1455 of yacc.c */
+#line 2142 "vtkParse.y"
+ { setTypePtr(0); }
+ break;
+
+ case 233:
+
+/* Line 1455 of yacc.c */
+#line 2143 "vtkParse.y"
+ { setTypePtr((yyvsp[(1) - (1)].integer)); }
+ break;
+
+ case 234:
+
+/* Line 1455 of yacc.c */
+#line 2147 "vtkParse.y"
+ { (yyval.integer) = 0; }
+ break;
+
+ case 235:
+
+/* Line 1455 of yacc.c */
+#line 2148 "vtkParse.y"
+ { postSig(")"); }
+ break;
+
+ case 236:
+
+/* Line 1455 of yacc.c */
+#line 2150 "vtkParse.y"
+ {
+ const char *scope = getScope();
+ unsigned int parens = add_indirection((yyvsp[(1) - (5)].integer), (yyvsp[(2) - (5)].integer));
+ if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_FUNCTION)
+ {
+ if (scope) { scope = vtkstrndup(scope, strlen(scope) - 2); }
+ getFunction()->Class = scope;
+ (yyval.integer) = (parens | VTK_PARSE_FUNCTION);
+ }
+ else if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_ARRAY)
+ {
+ (yyval.integer) = add_indirection_to_array(parens);
+ }
+ }
+ break;
+
+ case 237:
+
+/* Line 1455 of yacc.c */
+#line 2167 "vtkParse.y"
+ { (yyval.integer) = 0; }
+ break;
+
+ case 238:
+
+/* Line 1455 of yacc.c */
+#line 2168 "vtkParse.y"
+ { postSig(")"); }
+ break;
+
+ case 239:
+
+/* Line 1455 of yacc.c */
+#line 2170 "vtkParse.y"
+ {
+ const char *scope = getScope();
+ unsigned int parens = add_indirection((yyvsp[(1) - (5)].integer), (yyvsp[(2) - (5)].integer));
+ if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_FUNCTION)
+ {
+ if (scope) { scope = vtkstrndup(scope, strlen(scope) - 2); }
+ getFunction()->Class = scope;
+ (yyval.integer) = (parens | VTK_PARSE_FUNCTION);
+ }
+ else if ((yyvsp[(5) - (5)].integer) == VTK_PARSE_ARRAY)
+ {
+ (yyval.integer) = add_indirection_to_array(parens);
+ }
+ }
+ break;
+
+ case 240:
+
+/* Line 1455 of yacc.c */
+#line 2186 "vtkParse.y"
+ { postSig("("); scopeSig(""); (yyval.integer) = 0; }
+ break;
+
+ case 241:
+
+/* Line 1455 of yacc.c */
+#line 2187 "vtkParse.y"
+ { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("*");
+ (yyval.integer) = VTK_PARSE_POINTER; }
+ break;
+
+ case 242:
+
+/* Line 1455 of yacc.c */
+#line 2189 "vtkParse.y"
+ { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("&");
+ (yyval.integer) = VTK_PARSE_REF; }
+ break;
+
+ case 243:
+
+/* Line 1455 of yacc.c */
+#line 2193 "vtkParse.y"
+ { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("*");
+ (yyval.integer) = VTK_PARSE_POINTER; }
+ break;
+
+ case 244:
+
+/* Line 1455 of yacc.c */
+#line 2195 "vtkParse.y"
+ { postSig("("); scopeSig((yyvsp[(1) - (1)].str)); postSig("&");
+ (yyval.integer) = VTK_PARSE_REF; }
+ break;
+
+ case 245:
+
+/* Line 1455 of yacc.c */
+#line 2198 "vtkParse.y"
+ { (yyval.integer) = 0; }
+ break;
+
+ case 246:
+
+/* Line 1455 of yacc.c */
+#line 2199 "vtkParse.y"
+ { pushFunction(); postSig("("); }
+ break;
+
+ case 247:
+
+/* Line 1455 of yacc.c */
+#line 2200 "vtkParse.y"
+ { postSig(")"); }
+ break;
+
+ case 248:
+
+/* Line 1455 of yacc.c */
+#line 2201 "vtkParse.y"
+ {
+ (yyval.integer) = VTK_PARSE_FUNCTION;
+ popFunction();
+ }
+ break;
+
+ case 249:
+
+/* Line 1455 of yacc.c */
+#line 2205 "vtkParse.y"
+ { (yyval.integer) = VTK_PARSE_ARRAY; }
+ break;
+
+ case 252:
+
+/* Line 1455 of yacc.c */
+#line 2209 "vtkParse.y"
+ { currentFunction->IsConst = 1; }
+ break;
+
+ case 255:
+
+/* Line 1455 of yacc.c */
+#line 2215 "vtkParse.y"
+ { (yyval.integer) = add_indirection((yyvsp[(1) - (2)].integer), (yyvsp[(2) - (2)].integer)); }
+ break;
+
+ case 257:
+
+/* Line 1455 of yacc.c */
+#line 2220 "vtkParse.y"
+ { (yyval.integer) = add_indirection((yyvsp[(1) - (2)].integer), (yyvsp[(2) - (2)].integer)); }
+ break;
+
+ case 258:
+
+/* Line 1455 of yacc.c */
+#line 2223 "vtkParse.y"
+ { clearVarName(); chopSig(); }
+ break;
+
+ case 260:
+
+/* Line 1455 of yacc.c */
+#line 2227 "vtkParse.y"
+ { setVarName((yyvsp[(1) - (1)].str)); }
+ break;
+
+ case 261:
+
+/* Line 1455 of yacc.c */
+#line 2228 "vtkParse.y"
+ { setVarName((yyvsp[(1) - (3)].str)); }
+ break;
+
+ case 265:
+
+/* Line 1455 of yacc.c */
+#line 2236 "vtkParse.y"
+ { clearArray(); }
+ break;
+
+ case 267:
+
+/* Line 1455 of yacc.c */
+#line 2240 "vtkParse.y"
+ { clearArray(); }
+ break;
+
+ case 271:
+
+/* Line 1455 of yacc.c */
+#line 2247 "vtkParse.y"
+ { postSig("["); }
+ break;
+
+ case 272:
+
+/* Line 1455 of yacc.c */
+#line 2247 "vtkParse.y"
+ { postSig("]"); }
+ break;
+
+ case 273:
+
+/* Line 1455 of yacc.c */
+#line 2250 "vtkParse.y"
+ { pushArraySize(""); }
+ break;
+
+ case 274:
+
+/* Line 1455 of yacc.c */
+#line 2251 "vtkParse.y"
+ { markSig(); }
+ break;
+
+ case 275:
+
+/* Line 1455 of yacc.c */
+#line 2251 "vtkParse.y"
+ { chopSig(); pushArraySize(copySig()); }
+ break;
+
+ case 280:
+
+/* Line 1455 of yacc.c */
+#line 2267 "vtkParse.y"
+ { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
+ break;
+
+ case 281:
+
+/* Line 1455 of yacc.c */
+#line 2269 "vtkParse.y"
+ { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
+ break;
+
+ case 282:
+
+/* Line 1455 of yacc.c */
+#line 2271 "vtkParse.y"
+ { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
+ break;
+
+ case 283:
+
+/* Line 1455 of yacc.c */
+#line 2275 "vtkParse.y"
+ { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
+ break;
+
+ case 284:
+
+/* Line 1455 of yacc.c */
+#line 2277 "vtkParse.y"
+ { (yyval.str) = vtkstrcat((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].str)); }
+ break;
+
+ case 285:
+
+/* Line 1455 of yacc.c */
+#line 2279 "vtkParse.y"
+ { (yyval.str) = vtkstrcat3((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)); }
+ break;
+
+ case 286:
+
+/* Line 1455 of yacc.c */
+#line 2281 "vtkParse.y"
+ { (yyval.str) = vtkstrcat3((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)); }
+ break;
+
+ case 287:
+
+/* Line 1455 of yacc.c */
+#line 2282 "vtkParse.y"
+ { postSig("template "); }
+ break;
+
+ case 288:
+
+/* Line 1455 of yacc.c */
+#line 2284 "vtkParse.y"
+ { (yyval.str) = vtkstrcat4((yyvsp[(1) - (5)].str), "template ", (yyvsp[(4) - (5)].str), (yyvsp[(5) - (5)].str)); }
+ break;
+
+ case 289:
+
+/* Line 1455 of yacc.c */
+#line 2287 "vtkParse.y"
+ { postSig((yyvsp[(1) - (1)].str)); }
+ break;
+
+ case 290:
+
+/* Line 1455 of yacc.c */
+#line 2290 "vtkParse.y"
+ { (yyval.str) = "::"; postSig((yyval.str)); }
+ break;
+
+ case 291:
+
+/* Line 1455 of yacc.c */
+#line 2293 "vtkParse.y"
+ { markSig(); postSig((yyvsp[(1) - (2)].str)); postSig("<"); }
+ break;
+
+ case 292:
+
+/* Line 1455 of yacc.c */
+#line 2295 "vtkParse.y"
+ {
+ chopSig(); if (getSig()[getSigLength()-1] == '>') { postSig(" "); }
+ postSig(">"); (yyval.str) = copySig(); clearTypeId();
+ }
+ break;
+
+ case 293:
+
+/* Line 1455 of yacc.c */
+#line 2308 "vtkParse.y"
+ { postSig((yyvsp[(1) - (1)].str)); }
+ break;
+
+ case 294:
+
+/* Line 1455 of yacc.c */
+#line 2309 "vtkParse.y"
+ { postSig((yyvsp[(1) - (1)].str)); }
+ break;
+
+ case 295:
+
+/* Line 1455 of yacc.c */
+#line 2310 "vtkParse.y"
+ { postSig((yyvsp[(1) - (1)].str)); }
+ break;
+
+ case 296:
+
+/* Line 1455 of yacc.c */
+#line 2311 "vtkParse.y"
+ { postSig((yyvsp[(1) - (1)].str)); }
+ break;
+
+ case 297:
+
+/* Line 1455 of yacc.c */
+#line 2312 "vtkParse.y"
+ { postSig((yyvsp[(1) - (1)].str)); }
+ break;
+
+ case 298:
+
+/* Line 1455 of yacc.c */
+#line 2313 "vtkParse.y"
+ { postSig((yyvsp[(1) - (1)].str)); }
+ break;
+
+ case 299:
+
+/* Line 1455 of yacc.c */
+#line 2314 "vtkParse.y"
+ { postSig((yyvsp[(1) - (1)].str)); }
+ break;
+
+ case 300:
+
+/* Line 1455 of yacc.c */
+#line 2315 "vtkParse.y"
+ { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
+ break;
+
+ case 301:
+
+/* Line 1455 of yacc.c */
+#line 2316 "vtkParse.y"
+ { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
+ break;
+
+ case 302:
+
+/* Line 1455 of yacc.c */
+#line 2317 "vtkParse.y"
+ { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
+ break;
+
+ case 303:
+
+/* Line 1455 of yacc.c */
+#line 2318 "vtkParse.y"
+ { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
+ break;
+
+ case 304:
+
+/* Line 1455 of yacc.c */
+#line 2319 "vtkParse.y"
+ { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
+ break;
+
+ case 305:
+
+/* Line 1455 of yacc.c */
+#line 2320 "vtkParse.y"
+ { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
+ break;
+
+ case 306:
+
+/* Line 1455 of yacc.c */
+#line 2321 "vtkParse.y"
+ { (yyval.str) = vtkstrcat("~",(yyvsp[(2) - (2)].str)); postSig((yyval.str)); }
+ break;
+
+ case 307:
+
+/* Line 1455 of yacc.c */
+#line 2322 "vtkParse.y"
+ { (yyval.str) = "size_t"; postSig((yyval.str)); }
+ break;
+
+ case 308:
+
+/* Line 1455 of yacc.c */
+#line 2323 "vtkParse.y"
+ { (yyval.str) = "ssize_t"; postSig((yyval.str)); }
+ break;
+
+ case 309:
+
+/* Line 1455 of yacc.c */
+#line 2324 "vtkParse.y"
+ { (yyval.str) = "vtkTypeInt8"; postSig((yyval.str)); }
+ break;
+
+ case 310:
+
+/* Line 1455 of yacc.c */
+#line 2325 "vtkParse.y"
+ { (yyval.str) = "vtkTypeUInt8"; postSig((yyval.str)); }
+ break;
+
+ case 311:
+
+/* Line 1455 of yacc.c */
+#line 2326 "vtkParse.y"
+ { (yyval.str) = "vtkTypeInt16"; postSig((yyval.str)); }
+ break;
+
+ case 312:
+
+/* Line 1455 of yacc.c */
+#line 2327 "vtkParse.y"
+ { (yyval.str) = "vtkTypeUInt16"; postSig((yyval.str)); }
+ break;
+
+ case 313:
+
+/* Line 1455 of yacc.c */
+#line 2328 "vtkParse.y"
+ { (yyval.str) = "vtkTypeInt32"; postSig((yyval.str)); }
+ break;
+
+ case 314:
+
+/* Line 1455 of yacc.c */
+#line 2329 "vtkParse.y"
+ { (yyval.str) = "vtkTypeUInt32"; postSig((yyval.str)); }
+ break;
+
+ case 315:
+
+/* Line 1455 of yacc.c */
+#line 2330 "vtkParse.y"
+ { (yyval.str) = "vtkTypeInt64"; postSig((yyval.str)); }
+ break;
+
+ case 316:
+
+/* Line 1455 of yacc.c */
+#line 2331 "vtkParse.y"
+ { (yyval.str) = "vtkTypeUInt64"; postSig((yyval.str)); }
+ break;
+
+ case 317:
+
+/* Line 1455 of yacc.c */
+#line 2332 "vtkParse.y"
+ { (yyval.str) = "vtkTypeFloat32"; postSig((yyval.str)); }
+ break;
+
+ case 318:
+
+/* Line 1455 of yacc.c */
+#line 2333 "vtkParse.y"
+ { (yyval.str) = "vtkTypeFloat64"; postSig((yyval.str)); }
+ break;
+
+ case 319:
+
+/* Line 1455 of yacc.c */
+#line 2334 "vtkParse.y"
+ { (yyval.str) = "vtkIdType"; postSig((yyval.str)); }
+ break;
+
+ case 330:
+
+/* Line 1455 of yacc.c */
+#line 2360 "vtkParse.y"
+ { setTypeBase(buildTypeBase(getType(), (yyvsp[(1) - (1)].integer))); }
+ break;
+
+ case 331:
+
+/* Line 1455 of yacc.c */
+#line 2361 "vtkParse.y"
+ { setTypeMod(VTK_PARSE_TYPEDEF); }
+ break;
+
+ case 332:
+
+/* Line 1455 of yacc.c */
+#line 2362 "vtkParse.y"
+ { setTypeMod(VTK_PARSE_FRIEND); }
+ break;
+
+ case 335:
+
+/* Line 1455 of yacc.c */
+#line 2369 "vtkParse.y"
+ { setTypeMod((yyvsp[(1) - (1)].integer)); }
+ break;
+
+ case 336:
+
+/* Line 1455 of yacc.c */
+#line 2370 "vtkParse.y"
+ { setTypeMod((yyvsp[(1) - (1)].integer)); }
+ break;
+
+ case 337:
+
+/* Line 1455 of yacc.c */
+#line 2371 "vtkParse.y"
+ { setTypeMod((yyvsp[(1) - (1)].integer)); }
+ break;
+
+ case 338:
+
+/* Line 1455 of yacc.c */
+#line 2374 "vtkParse.y"
+ { postSig("mutable "); (yyval.integer) = VTK_PARSE_MUTABLE; }
+ break;
+
+ case 339:
+
+/* Line 1455 of yacc.c */
+#line 2375 "vtkParse.y"
+ { (yyval.integer) = 0; }
+ break;
+
+ case 340:
+
+/* Line 1455 of yacc.c */
+#line 2376 "vtkParse.y"
+ { (yyval.integer) = 0; }
+ break;
+
+ case 341:
+
+/* Line 1455 of yacc.c */
+#line 2377 "vtkParse.y"
+ { postSig("static "); (yyval.integer) = VTK_PARSE_STATIC; }
+ break;
+
+ case 342:
+
+/* Line 1455 of yacc.c */
+#line 2380 "vtkParse.y"
+ { (yyval.integer) = 0; }
+ break;
+
+ case 343:
+
+/* Line 1455 of yacc.c */
+#line 2381 "vtkParse.y"
+ { postSig("virtual "); (yyval.integer) = VTK_PARSE_VIRTUAL; }
+ break;
+
+ case 344:
+
+/* Line 1455 of yacc.c */
+#line 2382 "vtkParse.y"
+ { postSig("explicit "); (yyval.integer) = VTK_PARSE_EXPLICIT; }
+ break;
+
+ case 345:
+
+/* Line 1455 of yacc.c */
+#line 2385 "vtkParse.y"
+ { postSig("const "); (yyval.integer) = VTK_PARSE_CONST; }
+ break;
+
+ case 346:
+
+/* Line 1455 of yacc.c */
+#line 2386 "vtkParse.y"
+ { postSig("volatile "); (yyval.integer) = VTK_PARSE_VOLATILE; }
+ break;
+
+ case 348:
+
+/* Line 1455 of yacc.c */
+#line 2391 "vtkParse.y"
+ { (yyval.integer) = ((yyvsp[(1) - (2)].integer) | (yyvsp[(2) - (2)].integer)); }
+ break;
+
+ case 350:
+
+/* Line 1455 of yacc.c */
+#line 2402 "vtkParse.y"
+ { setTypeBase((yyvsp[(1) - (1)].integer)); }
+ break;
+
+ case 352:
+
+/* Line 1455 of yacc.c */
+#line 2404 "vtkParse.y"
+ { setTypeBase((yyvsp[(2) - (2)].integer)); }
+ break;
+
+ case 355:
+
+/* Line 1455 of yacc.c */
+#line 2409 "vtkParse.y"
+ { postSig("typename "); }
+ break;
+
+ case 356:
+
+/* Line 1455 of yacc.c */
+#line 2410 "vtkParse.y"
+ { postSig(" "); setTypeId((yyvsp[(3) - (3)].str)); (yyval.integer) = guess_id_type((yyvsp[(3) - (3)].str)); }
+ break;
+
+ case 357:
+
+/* Line 1455 of yacc.c */
+#line 2412 "vtkParse.y"
+ { postSig(" "); setTypeId((yyvsp[(1) - (1)].str)); (yyval.integer) = guess_id_type((yyvsp[(1) - (1)].str)); }
+ break;
+
+ case 358:
+
+/* Line 1455 of yacc.c */
+#line 2414 "vtkParse.y"
+ { postSig(" "); setTypeId((yyvsp[(1) - (1)].str)); (yyval.integer) = guess_id_type((yyvsp[(1) - (1)].str)); }
+ break;
+
+ case 359:
+
+/* Line 1455 of yacc.c */
+#line 2416 "vtkParse.y"
+ { postSig(" "); setTypeId((yyvsp[(2) - (2)].str)); (yyval.integer) = guess_id_type((yyvsp[(2) - (2)].str)); }
+ break;
+
+ case 360:
+
+/* Line 1455 of yacc.c */
+#line 2418 "vtkParse.y"
+ { postSig(" "); setTypeId((yyvsp[(2) - (2)].str)); (yyval.integer) = guess_id_type((yyvsp[(2) - (2)].str)); }
+ break;
+
+ case 362:
+
+/* Line 1455 of yacc.c */
+#line 2424 "vtkParse.y"
+ { setTypeBase((yyvsp[(1) - (1)].integer)); }
+ break;
+
+ case 364:
+
+/* Line 1455 of yacc.c */
+#line 2426 "vtkParse.y"
+ { setTypeBase((yyvsp[(2) - (2)].integer)); }
+ break;
+
+ case 367:
+
+/* Line 1455 of yacc.c */
+#line 2432 "vtkParse.y"
+ { postSig(" "); setTypeId((yyvsp[(1) - (1)].str)); (yyval.integer) = guess_id_type((yyvsp[(1) - (1)].str)); }
+ break;
+
+ case 368:
+
+/* Line 1455 of yacc.c */
+#line 2434 "vtkParse.y"
+ { postSig(" "); setTypeId((yyvsp[(1) - (1)].str)); (yyval.integer) = guess_id_type((yyvsp[(1) - (1)].str)); }
+ break;
+
+ case 369:
+
+/* Line 1455 of yacc.c */
+#line 2436 "vtkParse.y"
+ { postSig(" "); setTypeId((yyvsp[(2) - (2)].str)); (yyval.integer) = guess_id_type((yyvsp[(2) - (2)].str)); }
+ break;
+
+ case 370:
+
+/* Line 1455 of yacc.c */
+#line 2438 "vtkParse.y"
+ { postSig(" "); setTypeId((yyvsp[(2) - (2)].str)); (yyval.integer) = guess_id_type((yyvsp[(2) - (2)].str)); }
+ break;
+
+ case 371:
+
+/* Line 1455 of yacc.c */
+#line 2440 "vtkParse.y"
+ { postSig(" "); setTypeId((yyvsp[(2) - (2)].str)); (yyval.integer) = guess_id_type((yyvsp[(2) - (2)].str)); }
+ break;
+
+ case 372:
+
+/* Line 1455 of yacc.c */
+#line 2443 "vtkParse.y"
+ { setTypeId(""); }
+ break;
+
+ case 374:
+
+/* Line 1455 of yacc.c */
+#line 2447 "vtkParse.y"
+ { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_STRING; }
+ break;
+
+ case 375:
+
+/* Line 1455 of yacc.c */
+#line 2448 "vtkParse.y"
+ { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_UNICODE_STRING;}
+ break;
+
+ case 376:
+
+/* Line 1455 of yacc.c */
+#line 2449 "vtkParse.y"
+ { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_OSTREAM; }
+ break;
+
+ case 377:
+
+/* Line 1455 of yacc.c */
+#line 2450 "vtkParse.y"
+ { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_ISTREAM; }
+ break;
+
+ case 378:
+
+/* Line 1455 of yacc.c */
+#line 2451 "vtkParse.y"
+ { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_UNKNOWN; }
+ break;
+
+ case 379:
+
+/* Line 1455 of yacc.c */
+#line 2452 "vtkParse.y"
+ { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_OBJECT; }
+ break;
+
+ case 380:
+
+/* Line 1455 of yacc.c */
+#line 2453 "vtkParse.y"
+ { typeSig((yyvsp[(1) - (1)].str)); (yyval.integer) = VTK_PARSE_QOBJECT; }
+ break;
+
+ case 381:
+
+/* Line 1455 of yacc.c */
+#line 2454 "vtkParse.y"
+ { typeSig("ssize_t"); (yyval.integer) = VTK_PARSE_SSIZE_T; }
+ break;
+
+ case 382:
+
+/* Line 1455 of yacc.c */
+#line 2455 "vtkParse.y"
+ { typeSig("size_t"); (yyval.integer) = VTK_PARSE_SIZE_T; }
+ break;
+
+ case 383:
+
+/* Line 1455 of yacc.c */
+#line 2456 "vtkParse.y"
+ { typeSig("vtkTypeInt8"); (yyval.integer) = VTK_PARSE_INT8; }
+ break;
+
+ case 384:
+
+/* Line 1455 of yacc.c */
+#line 2457 "vtkParse.y"
+ { typeSig("vtkTypeUInt8"); (yyval.integer) = VTK_PARSE_UINT8; }
+ break;
+
+ case 385:
+
+/* Line 1455 of yacc.c */
+#line 2458 "vtkParse.y"
+ { typeSig("vtkTypeInt16"); (yyval.integer) = VTK_PARSE_INT16; }
+ break;
+
+ case 386:
+
+/* Line 1455 of yacc.c */
+#line 2459 "vtkParse.y"
+ { typeSig("vtkTypeUInt16"); (yyval.integer) = VTK_PARSE_UINT16; }
+ break;
+
+ case 387:
+
+/* Line 1455 of yacc.c */
+#line 2460 "vtkParse.y"
+ { typeSig("vtkTypeInt32"); (yyval.integer) = VTK_PARSE_INT32; }
+ break;
+
+ case 388:
+
+/* Line 1455 of yacc.c */
+#line 2461 "vtkParse.y"
+ { typeSig("vtkTypeUInt32"); (yyval.integer) = VTK_PARSE_UINT32; }
+ break;
+
+ case 389:
+
+/* Line 1455 of yacc.c */
+#line 2462 "vtkParse.y"
+ { typeSig("vtkTypeInt64"); (yyval.integer) = VTK_PARSE_INT64; }
+ break;
+
+ case 390:
+
+/* Line 1455 of yacc.c */
+#line 2463 "vtkParse.y"
+ { typeSig("vtkTypeUInt64"); (yyval.integer) = VTK_PARSE_UINT64; }
+ break;
+
+ case 391:
+
+/* Line 1455 of yacc.c */
+#line 2464 "vtkParse.y"
+ { typeSig("vtkTypeFloat32"); (yyval.integer) = VTK_PARSE_FLOAT32; }
+ break;
+
+ case 392:
+
+/* Line 1455 of yacc.c */
+#line 2465 "vtkParse.y"
+ { typeSig("vtkTypeFloat64"); (yyval.integer) = VTK_PARSE_FLOAT64; }
+ break;
+
+ case 393:
+
+/* Line 1455 of yacc.c */
+#line 2466 "vtkParse.y"
+ { typeSig("vtkIdType"); (yyval.integer) = VTK_PARSE_ID_TYPE; }
+ break;
+
+ case 394:
+
+/* Line 1455 of yacc.c */
+#line 2469 "vtkParse.y"
+ { postSig("void "); (yyval.integer) = VTK_PARSE_VOID; }
+ break;
+
+ case 395:
+
+/* Line 1455 of yacc.c */
+#line 2470 "vtkParse.y"
+ { postSig("bool "); (yyval.integer) = VTK_PARSE_BOOL; }
+ break;
+
+ case 396:
+
+/* Line 1455 of yacc.c */
+#line 2471 "vtkParse.y"
+ { postSig("float "); (yyval.integer) = VTK_PARSE_FLOAT; }
+ break;
+
+ case 397:
+
+/* Line 1455 of yacc.c */
+#line 2472 "vtkParse.y"
+ { postSig("double "); (yyval.integer) = VTK_PARSE_DOUBLE; }
+ break;
+
+ case 398:
+
+/* Line 1455 of yacc.c */
+#line 2473 "vtkParse.y"
+ { postSig("char "); (yyval.integer) = VTK_PARSE_CHAR; }
+ break;
+
+ case 399:
+
+/* Line 1455 of yacc.c */
+#line 2474 "vtkParse.y"
+ { postSig("int "); (yyval.integer) = VTK_PARSE_INT; }
+ break;
+
+ case 400:
+
+/* Line 1455 of yacc.c */
+#line 2475 "vtkParse.y"
+ { postSig("short "); (yyval.integer) = VTK_PARSE_SHORT; }
+ break;
+
+ case 401:
+
+/* Line 1455 of yacc.c */
+#line 2476 "vtkParse.y"
+ { postSig("long "); (yyval.integer) = VTK_PARSE_LONG; }
+ break;
+
+ case 402:
+
+/* Line 1455 of yacc.c */
+#line 2477 "vtkParse.y"
+ { postSig("__int64 "); (yyval.integer) = VTK_PARSE___INT64; }
+ break;
+
+ case 403:
+
+/* Line 1455 of yacc.c */
+#line 2478 "vtkParse.y"
+ { postSig("signed "); (yyval.integer) = VTK_PARSE_INT; }
+ break;
+
+ case 404:
+
+/* Line 1455 of yacc.c */
+#line 2479 "vtkParse.y"
+ { postSig("unsigned "); (yyval.integer) = VTK_PARSE_UNSIGNED_INT; }
+ break;
+
+ case 407:
+
+/* Line 1455 of yacc.c */
+#line 2501 "vtkParse.y"
+ { (yyval.integer) = ((yyvsp[(1) - (2)].integer) | (yyvsp[(2) - (2)].integer)); }
+ break;
+
+ case 408:
+
+/* Line 1455 of yacc.c */
+#line 2504 "vtkParse.y"
+ { postSig("&"); (yyval.integer) = VTK_PARSE_REF; }
+ break;
+
+ case 409:
+
+/* Line 1455 of yacc.c */
+#line 2507 "vtkParse.y"
+ { postSig("*"); (yyval.integer) = VTK_PARSE_POINTER; }
+ break;
+
+ case 410:
+
+/* Line 1455 of yacc.c */
+#line 2508 "vtkParse.y"
+ { postSig("*"); }
+ break;
+
+ case 411:
+
+/* Line 1455 of yacc.c */
+#line 2509 "vtkParse.y"
+ {
+ if (((yyvsp[(3) - (3)].integer) & VTK_PARSE_CONST) != 0)
+ {
+ (yyval.integer) = VTK_PARSE_CONST_POINTER;
+ }
+ if (((yyvsp[(3) - (3)].integer) & VTK_PARSE_VOLATILE) != 0)
+ {
+ (yyval.integer) = VTK_PARSE_BAD_INDIRECT;
+ }
+ }
+ break;
+
+ case 413:
+
+/* Line 1455 of yacc.c */
+#line 2525 "vtkParse.y"
+ {
+ unsigned int n;
+ n = (((yyvsp[(1) - (2)].integer) << 2) | (yyvsp[(2) - (2)].integer));
+ if ((n & VTK_PARSE_INDIRECT) != n)
+ {
+ n = VTK_PARSE_BAD_INDIRECT;
+ }
+ (yyval.integer) = n;
+ }
+ break;
+
+ case 414:
+
+/* Line 1455 of yacc.c */
+#line 2541 "vtkParse.y"
+ {preSig("void Set"); postSig("(");}
+ break;
+
+ case 415:
+
+/* Line 1455 of yacc.c */
+#line 2542 "vtkParse.y"
+ {
+ postSig("a);");
+ currentFunction->Macro = "vtkSetMacro";
+ currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (7)].str));
+ currentFunction->Comment = vtkstrdup(getComment());
+ add_parameter(currentFunction, getType(), getTypeId(), 0);
+ set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+ output_function();
+ }
+ break;
+
+ case 416:
+
+/* Line 1455 of yacc.c */
+#line 2551 "vtkParse.y"
+ {postSig("Get");}
+ break;
+
+ case 417:
+
+/* Line 1455 of yacc.c */
+#line 2552 "vtkParse.y"
+ {markSig();}
+ break;
+
+ case 418:
+
+/* Line 1455 of yacc.c */
+#line 2552 "vtkParse.y"
+ {swapSig();}
+ break;
+
+ case 419:
+
+/* Line 1455 of yacc.c */
+#line 2553 "vtkParse.y"
+ {
+ postSig("();");
+ currentFunction->Macro = "vtkGetMacro";
+ currentFunction->Name = vtkstrcat("Get", (yyvsp[(4) - (9)].str));
+ currentFunction->Comment = vtkstrdup(getComment());
+ set_return(currentFunction, getType(), getTypeId(), 0);
+ output_function();
+ }
+ break;
+
+ case 420:
+
+/* Line 1455 of yacc.c */
+#line 2561 "vtkParse.y"
+ {preSig("void Set");}
+ break;
+
+ case 421:
+
+/* Line 1455 of yacc.c */
+#line 2562 "vtkParse.y"
+ {
+ postSig("(char *);");
+ currentFunction->Macro = "vtkSetStringMacro";
+ currentFunction->Name = vtkstrcat("Set", (yyvsp[(4) - (5)].str));
+ currentFunction->Comment = vtkstrdup(getComment());
+ add_parameter(currentFunction, VTK_PARSE_CHAR_PTR, "char", 0);
+ set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+ output_function();
+ }
+ break;
+
+ case 422:
+
+/* Line 1455 of yacc.c */
+#line 2571 "vtkParse.y"
+ {preSig("char *Get");}
+ break;
+
+ case 423:
+
+/* Line 1455 of yacc.c */
+#line 2572 "vtkParse.y"
+ {
+ postSig("();");
+ currentFunction->Macro = "vtkGetStringMacro";
+ currentFunction->Name = vtkstrcat("Get", (yyvsp[(4) - (5)].str));
+ currentFunction->Comment = vtkstrdup(getComment());
+ set_return(currentFunction, VTK_PARSE_CHAR_PTR, "char", 0);
+ output_function();
+ }
+ break;
+
+ case 424:
+
+/* Line 1455 of yacc.c */
+#line 2580 "vtkParse.y"
+ {startSig(); markSig();}
+ break;
+
+ case 425:
+
+/* Line 1455 of yacc.c */
+#line 2580 "vtkParse.y"
+ {closeSig();}
+ break;
+
+ case 426:
+
+/* Line 1455 of yacc.c */
+#line 2582 "vtkParse.y"
+ {
+ const char *typeText;
+ chopSig();
+ typeText = copySig();
+
+ currentFunction->Macro = "vtkSetClampMacro";
+ currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (10)].str));
+ currentFunction->Signature =
+ vtkstrcat5("void ", currentFunction->Name, "(", typeText, ");");
+ currentFunction->Comment = vtkstrdup(getComment());
+ add_parameter(currentFunction, getType(), getTypeId(), 0);
+ set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+ output_function();
+
+ currentFunction->Macro = "vtkSetClampMacro";
+ currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (10)].str), "MinValue");
+ currentFunction->Signature =
+ vtkstrcat4(typeText, " ", currentFunction->Name, "();");
+ currentFunction->Comment = vtkstrdup(getComment());
+ set_return(currentFunction, getType(), getTypeId(), 0);
+ output_function();
+
+ currentFunction->Macro = "vtkSetClampMacro";
+ currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (10)].str), "MaxValue");
+ currentFunction->Signature =
+ vtkstrcat4(typeText, " ", currentFunction->Name, "();");
+ currentFunction->Comment = vtkstrdup(getComment());
+ set_return(currentFunction, getType(), getTypeId(), 0);
+ output_function();
+ }
+ break;
+
+ case 427:
+
+/* Line 1455 of yacc.c */
+#line 2613 "vtkParse.y"
+ {preSig("void Set"); postSig("("); }
+ break;
+
+ case 428:
+
+/* Line 1455 of yacc.c */
+#line 2614 "vtkParse.y"
+ {
+ postSig("*);");
+ currentFunction->Macro = "vtkSetObjectMacro";
+ currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (7)].str));
+ currentFunction->Comment = vtkstrdup(getComment());
+ add_parameter(currentFunction, VTK_PARSE_OBJECT_PTR, getTypeId(), 0);
+ set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+ output_function();
+ }
+ break;
+
+ case 429:
+
+/* Line 1455 of yacc.c */
+#line 2623 "vtkParse.y"
+ {postSig("*Get");}
+ break;
+
+ case 430:
+
+/* Line 1455 of yacc.c */
+#line 2624 "vtkParse.y"
+ {markSig();}
+ break;
+
+ case 431:
+
+/* Line 1455 of yacc.c */
+#line 2624 "vtkParse.y"
+ {swapSig();}
+ break;
+
+ case 432:
+
+/* Line 1455 of yacc.c */
+#line 2625 "vtkParse.y"
+ {
+ postSig("();");
+ currentFunction->Macro = "vtkGetObjectMacro";
+ currentFunction->Name = vtkstrcat("Get", (yyvsp[(4) - (9)].str));
+ currentFunction->Comment = vtkstrdup(getComment());
+ set_return(currentFunction, VTK_PARSE_OBJECT_PTR, getTypeId(), 0);
+ output_function();
+ }
+ break;
+
+ case 433:
+
+/* Line 1455 of yacc.c */
+#line 2634 "vtkParse.y"
+ {
+ currentFunction->Macro = "vtkBooleanMacro";
+ currentFunction->Name = vtkstrcat((yyvsp[(3) - (6)].str), "On");
+ currentFunction->Comment = vtkstrdup(getComment());
+ currentFunction->Signature =
+ vtkstrcat3("void ", currentFunction->Name, "();");
+ set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+ output_function();
+
+ currentFunction->Macro = "vtkBooleanMacro";
+ currentFunction->Name = vtkstrcat((yyvsp[(3) - (6)].str), "Off");
+ currentFunction->Comment = vtkstrdup(getComment());
+ currentFunction->Signature =
+ vtkstrcat3("void ", currentFunction->Name, "();");
+ set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+ output_function();
+ }
+ break;
+
+ case 434:
+
+/* Line 1455 of yacc.c */
+#line 2651 "vtkParse.y"
+ {startSig(); markSig();}
+ break;
+
+ case 435:
+
+/* Line 1455 of yacc.c */
+#line 2652 "vtkParse.y"
+ {
+ chopSig();
+ outputSetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 2);
+ }
+ break;
+
+ case 436:
+
+/* Line 1455 of yacc.c */
+#line 2656 "vtkParse.y"
+ {startSig(); markSig();}
+ break;
+
+ case 437:
+
+/* Line 1455 of yacc.c */
+#line 2657 "vtkParse.y"
+ {
+ chopSig();
+ outputGetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 2);
+ }
+ break;
+
+ case 438:
+
+/* Line 1455 of yacc.c */
+#line 2661 "vtkParse.y"
+ {startSig(); markSig();}
+ break;
+
+ case 439:
+
+/* Line 1455 of yacc.c */
+#line 2662 "vtkParse.y"
+ {
+ chopSig();
+ outputSetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 3);
+ }
+ break;
+
+ case 440:
+
+/* Line 1455 of yacc.c */
+#line 2666 "vtkParse.y"
+ {startSig(); markSig();}
+ break;
+
+ case 441:
+
+/* Line 1455 of yacc.c */
+#line 2667 "vtkParse.y"
+ {
+ chopSig();
+ outputGetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 3);
+ }
+ break;
+
+ case 442:
+
+/* Line 1455 of yacc.c */
+#line 2671 "vtkParse.y"
+ {startSig(); markSig();}
+ break;
+
+ case 443:
+
+/* Line 1455 of yacc.c */
+#line 2672 "vtkParse.y"
+ {
+ chopSig();
+ outputSetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 4);
+ }
+ break;
+
+ case 444:
+
+/* Line 1455 of yacc.c */
+#line 2676 "vtkParse.y"
+ {startSig(); markSig();}
+ break;
+
+ case 445:
+
+/* Line 1455 of yacc.c */
+#line 2677 "vtkParse.y"
+ {
+ chopSig();
+ outputGetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 4);
+ }
+ break;
+
+ case 446:
+
+/* Line 1455 of yacc.c */
+#line 2681 "vtkParse.y"
+ {startSig(); markSig();}
+ break;
+
+ case 447:
+
+/* Line 1455 of yacc.c */
+#line 2682 "vtkParse.y"
+ {
+ chopSig();
+ outputSetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 6);
+ }
+ break;
+
+ case 448:
+
+/* Line 1455 of yacc.c */
+#line 2686 "vtkParse.y"
+ {startSig(); markSig();}
+ break;
+
+ case 449:
+
+/* Line 1455 of yacc.c */
+#line 2687 "vtkParse.y"
+ {
+ chopSig();
+ outputGetVectorMacro((yyvsp[(3) - (7)].str), getType(), copySig(), 6);
+ }
+ break;
+
+ case 450:
+
+/* Line 1455 of yacc.c */
+#line 2691 "vtkParse.y"
+ {startSig(); markSig();}
+ break;
+
+ case 451:
+
+/* Line 1455 of yacc.c */
+#line 2693 "vtkParse.y"
+ {
+ const char *typeText;
+ chopSig();
+ typeText = copySig();
+ currentFunction->Macro = "vtkSetVectorMacro";
+ currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (9)].str));
+ currentFunction->Signature =
+ vtkstrcat7("void ", currentFunction->Name, "(", typeText,
+ " a[", (yyvsp[(8) - (9)].str), "]);");
+ currentFunction->Comment = vtkstrdup(getComment());
+ add_parameter(currentFunction, (VTK_PARSE_POINTER | getType()),
+ getTypeId(), (int)strtol((yyvsp[(8) - (9)].str), NULL, 0));
+ set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+ output_function();
+ }
+ break;
+
+ case 452:
+
+/* Line 1455 of yacc.c */
+#line 2708 "vtkParse.y"
+ {startSig();}
+ break;
+
+ case 453:
+
+/* Line 1455 of yacc.c */
+#line 2710 "vtkParse.y"
+ {
+ chopSig();
+ currentFunction->Macro = "vtkGetVectorMacro";
+ currentFunction->Name = vtkstrcat("Get", (yyvsp[(3) - (9)].str));
+ postSig(" *");
+ postSig(currentFunction->Name);
+ postSig("();");
+ currentFunction->Comment = vtkstrdup(getComment());
+ set_return(currentFunction, (VTK_PARSE_POINTER | getType()),
+ getTypeId(), (int)strtol((yyvsp[(8) - (9)].str), NULL, 0));
+ output_function();
+ }
+ break;
+
+ case 454:
+
+/* Line 1455 of yacc.c */
+#line 2723 "vtkParse.y"
+ {
+ currentFunction->Macro = "vtkViewportCoordinateMacro";
+ currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (4)].str), "Coordinate");
+ currentFunction->Signature =
+ vtkstrcat3("vtkCoordinate *", currentFunction->Name, "();");
+ currentFunction->Comment = vtkstrdup(getComment());
+ set_return(currentFunction, VTK_PARSE_OBJECT_PTR, "vtkCoordinate", 0);
+ output_function();
+
+ currentFunction->Macro = "vtkViewportCoordinateMacro";
+ currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
+ currentFunction->Signature =
+ vtkstrcat3("void ", currentFunction->Name, "(double, double);");
+ currentFunction->Comment = vtkstrdup(getComment());
+ add_parameter(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
+ add_parameter(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
+ set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+ output_function();
+
+ currentFunction->Macro = "vtkViewportCoordinateMacro";
+ currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
+ currentFunction->Signature =
+ vtkstrcat3("void ", currentFunction->Name, "(double a[2]);");
+ currentFunction->Comment = vtkstrdup(getComment());
+ add_parameter(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 2);
+ set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+ output_function();
+
+ currentFunction->Macro = "vtkViewportCoordinateMacro";
+ currentFunction->Name = vtkstrcat("Get", (yyvsp[(3) - (4)].str));
+ currentFunction->Signature =
+ vtkstrcat3("double *", currentFunction->Name, "();");
+ currentFunction->Comment = vtkstrdup(getComment());
+ set_return(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 2);
+ output_function();
+ }
+ break;
+
+ case 455:
+
+/* Line 1455 of yacc.c */
+#line 2760 "vtkParse.y"
+ {
+ currentFunction->Macro = "vtkWorldCoordinateMacro";
+ currentFunction->Name = vtkstrcat3("Get", (yyvsp[(3) - (4)].str), "Coordinate");
+ currentFunction->Signature =
+ vtkstrcat3("vtkCoordinate *", currentFunction->Name, "();");
+ currentFunction->Comment = vtkstrdup(getComment());
+ set_return(currentFunction, VTK_PARSE_OBJECT_PTR, "vtkCoordinate", 0);
+ output_function();
+
+ currentFunction->Macro = "vtkWorldCoordinateMacro";
+ currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
+ currentFunction->Signature =
+ vtkstrcat3("void ", currentFunction->Name, "(double, double, double);");
+ currentFunction->Comment = vtkstrdup(getComment());
+ add_parameter(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
+ add_parameter(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
+ add_parameter(currentFunction, VTK_PARSE_DOUBLE, "double", 0);
+ set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+ output_function();
+
+ currentFunction->Macro = "vtkWorldCoordinateMacro";
+ currentFunction->Name = vtkstrcat("Set", (yyvsp[(3) - (4)].str));
+ currentFunction->Signature =
+ vtkstrcat3("void ", currentFunction->Name, "(double a[3]);");
+ currentFunction->Comment = vtkstrdup(getComment());
+ add_parameter(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 3);
+ set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+ output_function();
+
+ currentFunction->Macro = "vtkWorldCoordinateMacro";
+ currentFunction->Name = vtkstrcat("Get", (yyvsp[(3) - (4)].str));
+ currentFunction->Signature =
+ vtkstrcat3("double *", currentFunction->Name, "();");
+ currentFunction->Comment = vtkstrdup(getComment());
+ set_return(currentFunction, VTK_PARSE_DOUBLE_PTR, "double", 3);
+ output_function();
+ }
+ break;
+
+ case 456:
+
+/* Line 1455 of yacc.c */
+#line 2798 "vtkParse.y"
+ {
+ currentFunction->Macro = "vtkTypeMacro";
+ currentFunction->Name = "GetClassName";
+ currentFunction->Signature = "const char *GetClassName();";
+ currentFunction->Comment = vtkstrdup(getComment());
+ set_return(currentFunction, (VTK_PARSE_CONST | VTK_PARSE_CHAR_PTR),
+ "char", 0);
+ output_function();
+
+ currentFunction->Macro = "vtkTypeMacro";
+ currentFunction->Name = "IsA";
+ currentFunction->Signature = "int IsA(const char *name);";
+ currentFunction->Comment = vtkstrdup(getComment());
+ add_parameter(currentFunction, (VTK_PARSE_CONST | VTK_PARSE_CHAR_PTR),
+ "char", 0);
+ set_return(currentFunction, VTK_PARSE_INT, "int", 0);
+ output_function();
+
+ currentFunction->Macro = "vtkTypeMacro";
+ currentFunction->Name = "NewInstance";
+ currentFunction->Signature = vtkstrcat((yyvsp[(3) - (7)].str), " *NewInstance();");
+ currentFunction->Comment = vtkstrdup(getComment());
+ set_return(currentFunction, VTK_PARSE_OBJECT_PTR, (yyvsp[(3) - (7)].str), 0);
+ output_function();
+
+ currentFunction->Macro = "vtkTypeMacro";
+ currentFunction->Name = "SafeDownCast";
+ currentFunction->Signature =
+ vtkstrcat((yyvsp[(3) - (7)].str), " *SafeDownCast(vtkObject* o);");
+ currentFunction->Comment = vtkstrdup(getComment());
+ add_parameter(currentFunction, VTK_PARSE_OBJECT_PTR, "vtkObject", 0);
+ set_return(currentFunction, (VTK_PARSE_STATIC | VTK_PARSE_OBJECT_PTR),
+ (yyvsp[(3) - (7)].str), 0);
+ output_function();
+ }
+ break;
+
+ case 459:
+
+/* Line 1455 of yacc.c */
+#line 2842 "vtkParse.y"
+ { (yyval.str) = "()"; }
+ break;
+
+ case 460:
+
+/* Line 1455 of yacc.c */
+#line 2843 "vtkParse.y"
+ { (yyval.str) = "[]"; }
+ break;
+
+ case 461:
+
+/* Line 1455 of yacc.c */
+#line 2844 "vtkParse.y"
+ { (yyval.str) = " new[]"; }
+ break;
+
+ case 462:
+
+/* Line 1455 of yacc.c */
+#line 2845 "vtkParse.y"
+ { (yyval.str) = " delete[]"; }
+ break;
+
+ case 463:
+
+/* Line 1455 of yacc.c */
+#line 2846 "vtkParse.y"
+ { (yyval.str) = "<"; }
+ break;
+
+ case 464:
+
+/* Line 1455 of yacc.c */
+#line 2847 "vtkParse.y"
+ { (yyval.str) = ">"; }
+ break;
+
+ case 465:
+
+/* Line 1455 of yacc.c */
+#line 2848 "vtkParse.y"
+ { (yyval.str) = ","; }
+ break;
+
+ case 466:
+
+/* Line 1455 of yacc.c */
+#line 2849 "vtkParse.y"
+ { (yyval.str) = "="; }
+ break;
+
+ case 468:
+
+/* Line 1455 of yacc.c */
+#line 2853 "vtkParse.y"
+ { (yyval.str) = "%"; }
+ break;
+
+ case 469:
+
+/* Line 1455 of yacc.c */
+#line 2854 "vtkParse.y"
+ { (yyval.str) = "*"; }
+ break;
+
+ case 470:
+
+/* Line 1455 of yacc.c */
+#line 2855 "vtkParse.y"
+ { (yyval.str) = "/"; }
+ break;
+
+ case 471:
+
+/* Line 1455 of yacc.c */
+#line 2856 "vtkParse.y"
+ { (yyval.str) = "-"; }
+ break;
+
+ case 472:
+
+/* Line 1455 of yacc.c */
+#line 2857 "vtkParse.y"
+ { (yyval.str) = "+"; }
+ break;
+
+ case 473:
+
+/* Line 1455 of yacc.c */
+#line 2858 "vtkParse.y"
+ { (yyval.str) = "!"; }
+ break;
+
+ case 474:
+
+/* Line 1455 of yacc.c */
+#line 2859 "vtkParse.y"
+ { (yyval.str) = "~"; }
+ break;
+
+ case 475:
+
+/* Line 1455 of yacc.c */
+#line 2860 "vtkParse.y"
+ { (yyval.str) = "&"; }
+ break;
+
+ case 476:
+
+/* Line 1455 of yacc.c */
+#line 2861 "vtkParse.y"
+ { (yyval.str) = "|"; }
+ break;
+
+ case 477:
+
+/* Line 1455 of yacc.c */
+#line 2862 "vtkParse.y"
+ { (yyval.str) = "^"; }
+ break;
+
+ case 478:
+
+/* Line 1455 of yacc.c */
+#line 2863 "vtkParse.y"
+ { (yyval.str) = " new"; }
+ break;
+
+ case 479:
+
+/* Line 1455 of yacc.c */
+#line 2864 "vtkParse.y"
+ { (yyval.str) = " delete"; }
+ break;
+
+ case 480:
+
+/* Line 1455 of yacc.c */
+#line 2865 "vtkParse.y"
+ { (yyval.str) = "<<="; }
+ break;
+
+ case 481:
+
+/* Line 1455 of yacc.c */
+#line 2866 "vtkParse.y"
+ { (yyval.str) = ">>="; }
+ break;
+
+ case 482:
+
+/* Line 1455 of yacc.c */
+#line 2867 "vtkParse.y"
+ { (yyval.str) = "<<"; }
+ break;
+
+ case 483:
+
+/* Line 1455 of yacc.c */
+#line 2868 "vtkParse.y"
+ { (yyval.str) = ">>"; }
+ break;
+
+ case 484:
+
+/* Line 1455 of yacc.c */
+#line 2869 "vtkParse.y"
+ { (yyval.str) = ".*"; }
+ break;
+
+ case 485:
+
+/* Line 1455 of yacc.c */
+#line 2870 "vtkParse.y"
+ { (yyval.str) = "->*"; }
+ break;
+
+ case 486:
+
+/* Line 1455 of yacc.c */
+#line 2871 "vtkParse.y"
+ { (yyval.str) = "->"; }
+ break;
+
+ case 487:
+
+/* Line 1455 of yacc.c */
+#line 2872 "vtkParse.y"
+ { (yyval.str) = "+="; }
+ break;
+
+ case 488:
+
+/* Line 1455 of yacc.c */
+#line 2873 "vtkParse.y"
+ { (yyval.str) = "-="; }
+ break;
+
+ case 489:
+
+/* Line 1455 of yacc.c */
+#line 2874 "vtkParse.y"
+ { (yyval.str) = "*="; }
+ break;
+
+ case 490:
+
+/* Line 1455 of yacc.c */
+#line 2875 "vtkParse.y"
+ { (yyval.str) = "/="; }
+ break;
+
+ case 491:
+
+/* Line 1455 of yacc.c */
+#line 2876 "vtkParse.y"
+ { (yyval.str) = "%="; }
+ break;
+
+ case 492:
+
+/* Line 1455 of yacc.c */
+#line 2877 "vtkParse.y"
+ { (yyval.str) = "++"; }
+ break;
+
+ case 493:
+
+/* Line 1455 of yacc.c */
+#line 2878 "vtkParse.y"
+ { (yyval.str) = "--"; }
+ break;
+
+ case 494:
+
+/* Line 1455 of yacc.c */
+#line 2879 "vtkParse.y"
+ { (yyval.str) = "&="; }
+ break;
+
+ case 495:
+
+/* Line 1455 of yacc.c */
+#line 2880 "vtkParse.y"
+ { (yyval.str) = "|="; }
+ break;
+
+ case 496:
+
+/* Line 1455 of yacc.c */
+#line 2881 "vtkParse.y"
+ { (yyval.str) = "^="; }
+ break;
+
+ case 497:
+
+/* Line 1455 of yacc.c */
+#line 2882 "vtkParse.y"
+ { (yyval.str) = "&&"; }
+ break;
+
+ case 498:
+
+/* Line 1455 of yacc.c */
+#line 2883 "vtkParse.y"
+ { (yyval.str) = "||"; }
+ break;
+
+ case 499:
+
+/* Line 1455 of yacc.c */
+#line 2884 "vtkParse.y"
+ { (yyval.str) = "=="; }
+ break;
+
+ case 500:
+
+/* Line 1455 of yacc.c */
+#line 2885 "vtkParse.y"
+ { (yyval.str) = "!="; }
+ break;
+
+ case 501:
+
+/* Line 1455 of yacc.c */
+#line 2886 "vtkParse.y"
+ { (yyval.str) = "<="; }
+ break;
+
+ case 502:
+
+/* Line 1455 of yacc.c */
+#line 2887 "vtkParse.y"
+ { (yyval.str) = ">="; }
+ break;
+
+ case 503:
+
+/* Line 1455 of yacc.c */
+#line 2890 "vtkParse.y"
+ { (yyval.str) = "typedef"; }
+ break;
+
+ case 504:
+
+/* Line 1455 of yacc.c */
+#line 2891 "vtkParse.y"
+ { (yyval.str) = "typename"; }
+ break;
+
+ case 505:
+
+/* Line 1455 of yacc.c */
+#line 2892 "vtkParse.y"
+ { (yyval.str) = "class"; }
+ break;
+
+ case 506:
+
+/* Line 1455 of yacc.c */
+#line 2893 "vtkParse.y"
+ { (yyval.str) = "struct"; }
+ break;
+
+ case 507:
+
+/* Line 1455 of yacc.c */
+#line 2894 "vtkParse.y"
+ { (yyval.str) = "union"; }
+ break;
+
+ case 508:
+
+/* Line 1455 of yacc.c */
+#line 2895 "vtkParse.y"
+ { (yyval.str) = "template"; }
+ break;
+
+ case 509:
+
+/* Line 1455 of yacc.c */
+#line 2896 "vtkParse.y"
+ { (yyval.str) = "public"; }
+ break;
+
+ case 510:
+
+/* Line 1455 of yacc.c */
+#line 2897 "vtkParse.y"
+ { (yyval.str) = "protected"; }
+ break;
+
+ case 511:
+
+/* Line 1455 of yacc.c */
+#line 2898 "vtkParse.y"
+ { (yyval.str) = "private"; }
+ break;
+
+ case 512:
+
+/* Line 1455 of yacc.c */
+#line 2899 "vtkParse.y"
+ { (yyval.str) = "const"; }
+ break;
+
+ case 513:
+
+/* Line 1455 of yacc.c */
+#line 2900 "vtkParse.y"
+ { (yyval.str) = "static"; }
+ break;
+
+ case 514:
+
+/* Line 1455 of yacc.c */
+#line 2901 "vtkParse.y"
+ { (yyval.str) = "inline"; }
+ break;
+
+ case 515:
+
+/* Line 1455 of yacc.c */
+#line 2902 "vtkParse.y"
+ { (yyval.str) = "virtual"; }
+ break;
+
+ case 516:
+
+/* Line 1455 of yacc.c */
+#line 2903 "vtkParse.y"
+ { (yyval.str) = "extern"; }
+ break;
+
+ case 517:
+
+/* Line 1455 of yacc.c */
+#line 2904 "vtkParse.y"
+ { (yyval.str) = "namespace"; }
+ break;
+
+ case 518:
+
+/* Line 1455 of yacc.c */
+#line 2905 "vtkParse.y"
+ { (yyval.str) = "operator"; }
+ break;
+
+ case 519:
+
+/* Line 1455 of yacc.c */
+#line 2906 "vtkParse.y"
+ { (yyval.str) = "enum"; }
+ break;
+
+ case 520:
+
+/* Line 1455 of yacc.c */
+#line 2907 "vtkParse.y"
+ { (yyval.str) = "throw"; }
+ break;
+
+ case 521:
+
+/* Line 1455 of yacc.c */
+#line 2908 "vtkParse.y"
+ { (yyval.str) = "const_cast"; }
+ break;
+
+ case 522:
+
+/* Line 1455 of yacc.c */
+#line 2909 "vtkParse.y"
+ { (yyval.str) = "dynamic_cast"; }
+ break;
+
+ case 523:
+
+/* Line 1455 of yacc.c */
+#line 2910 "vtkParse.y"
+ { (yyval.str) = "static_cast"; }
+ break;
+
+ case 524:
+
+/* Line 1455 of yacc.c */
+#line 2911 "vtkParse.y"
+ { (yyval.str) = "reinterpret_cast"; }
+ break;
+
+ case 537:
+
+/* Line 1455 of yacc.c */
+#line 2935 "vtkParse.y"
+ {
+ if ((((yyvsp[(1) - (1)].str))[0] == '+' || ((yyvsp[(1) - (1)].str))[0] == '-' ||
+ ((yyvsp[(1) - (1)].str))[0] == '*' || ((yyvsp[(1) - (1)].str))[0] == '&') &&
+ ((yyvsp[(1) - (1)].str))[1] == '\0')
+ {
+ int c1 = 0;
+ size_t l;
+ const char *cp;
+ chopSig();
+ cp = getSig();
+ l = getSigLength();
+ if (l != 0) { c1 = cp[l-1]; }
+ if (c1 != 0 && c1 != '(' && c1 != '[' && c1 != '=')
+ {
+ postSig(" ");
+ }
+ postSig((yyvsp[(1) - (1)].str));
+ if ((c1 >= 'A' && c1 <= 'Z') || (c1 >= 'a' && c1 <= 'z') ||
+ (c1 >= '0' && c1 <= '9') || c1 == '_' || c1 == '\'' ||
+ c1 == '\"' || c1 == ')' || c1 == ']')
+ {
+ postSig(" ");
+ }
+ }
+ else
+ {
+ postSig((yyvsp[(1) - (1)].str));
+ postSig(" ");
+ }
+ }
+ break;
+
+ case 538:
+
+/* Line 1455 of yacc.c */
+#line 2965 "vtkParse.y"
+ { postSig(":"); postSig(" "); }
+ break;
+
+ case 539:
+
+/* Line 1455 of yacc.c */
+#line 2965 "vtkParse.y"
+ { postSig("."); }
+ break;
+
+ case 540:
+
+/* Line 1455 of yacc.c */
+#line 2966 "vtkParse.y"
+ { chopSig(); postSig("::"); }
+ break;
+
+ case 541:
+
+/* Line 1455 of yacc.c */
+#line 2967 "vtkParse.y"
+ { postSig((yyvsp[(1) - (1)].str)); postSig(" "); }
+ break;
+
+ case 542:
+
+/* Line 1455 of yacc.c */
+#line 2968 "vtkParse.y"
+ { postSig((yyvsp[(1) - (1)].str)); postSig(" "); }
+ break;
+
+ case 544:
+
+/* Line 1455 of yacc.c */
+#line 2971 "vtkParse.y"
+ {
+ int c1 = 0;
+ size_t l;
+ const char *cp;
+ chopSig();
+ cp = getSig();
+ l = getSigLength();
+ if (l != 0) { c1 = cp[l-1]; }
+ while (((c1 >= 'A' && c1 <= 'Z') || (c1 >= 'a' && c1 <= 'z') ||
+ (c1 >= '0' && c1 <= '9') || c1 == '_') && l != 0)
+ {
+ --l;
+ c1 = cp[l-1];
+ }
+ if (l < 2 || cp[l-1] != ':' || cp[l-2] != ':')
+ {
+ cp = add_const_scope(&cp[l]);
+ resetSig(l);
+ postSig(cp);
+ }
+ }
+ break;
+
+ case 548:
+
+/* Line 1455 of yacc.c */
+#line 2997 "vtkParse.y"
+ { postSig("< "); }
+ break;
+
+ case 549:
+
+/* Line 1455 of yacc.c */
+#line 2998 "vtkParse.y"
+ { postSig("> "); }
+ break;
+
+ case 551:
+
+/* Line 1455 of yacc.c */
+#line 3001 "vtkParse.y"
+ { postSig("= "); }
+ break;
+
+ case 552:
+
+/* Line 1455 of yacc.c */
+#line 3002 "vtkParse.y"
+ { chopSig(); postSig(", "); }
+ break;
+
+ case 554:
+
+/* Line 1455 of yacc.c */
+#line 3005 "vtkParse.y"
+ { chopSig(); postSig(";"); }
+ break;
+
+ case 562:
+
+/* Line 1455 of yacc.c */
+#line 3019 "vtkParse.y"
+ { postSig("= "); }
+ break;
+
+ case 563:
+
+/* Line 1455 of yacc.c */
+#line 3020 "vtkParse.y"
+ { chopSig(); postSig(", "); }
+ break;
+
+ case 564:
+
+/* Line 1455 of yacc.c */
+#line 3024 "vtkParse.y"
+ {
+ chopSig();
+ if (getSig()[getSigLength()-1] == '<') { postSig(" "); }
+ postSig("<");
+ }
+ break;
+
+ case 565:
+
+/* Line 1455 of yacc.c */
+#line 3030 "vtkParse.y"
+ {
+ chopSig();
+ if (getSig()[getSigLength()-1] == '>') { postSig(" "); }
+ postSig("> ");
+ }
+ break;
+
+ case 566:
+
+/* Line 1455 of yacc.c */
+#line 3037 "vtkParse.y"
+ { postSig("["); }
+ break;
+
+ case 567:
+
+/* Line 1455 of yacc.c */
+#line 3038 "vtkParse.y"
+ { chopSig(); postSig("] "); }
+ break;
+
+ case 568:
+
+/* Line 1455 of yacc.c */
+#line 3041 "vtkParse.y"
+ { postSig("("); }
+ break;
+
+ case 569:
+
+/* Line 1455 of yacc.c */
+#line 3042 "vtkParse.y"
+ { chopSig(); postSig(") "); }
+ break;
+
+ case 570:
+
+/* Line 1455 of yacc.c */
+#line 3043 "vtkParse.y"
+ { postSig("("); postSig((yyvsp[(1) - (1)].str)); postSig("*"); }
+ break;
+
+ case 571:
+
+/* Line 1455 of yacc.c */
+#line 3044 "vtkParse.y"
+ { chopSig(); postSig(") "); }
+ break;
+
+ case 572:
+
+/* Line 1455 of yacc.c */
+#line 3045 "vtkParse.y"
+ { postSig("("); postSig((yyvsp[(1) - (1)].str)); postSig("&"); }
+ break;
+
+ case 573:
+
+/* Line 1455 of yacc.c */
+#line 3046 "vtkParse.y"
+ { chopSig(); postSig(") "); }
+ break;
+
+ case 574:
+
+/* Line 1455 of yacc.c */
+#line 3049 "vtkParse.y"
+ { postSig("{ "); }
+ break;
+
+ case 575:
+
+/* Line 1455 of yacc.c */
+#line 3049 "vtkParse.y"
+ { postSig("} "); }
+ break;
+
+
+
+/* Line 1455 of yacc.c */
+#line 7941 "vtkParse.tab.c"
+ default: break;
+ }
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (YY_("syntax error"));
+#else
+ {
+ YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+ if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+ {
+ YYSIZE_T yyalloc = 2 * yysize;
+ if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+ yyalloc = YYSTACK_ALLOC_MAXIMUM;
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+ if (yymsg)
+ yymsg_alloc = yyalloc;
+ else
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ }
+ }
+
+ if (0 < yysize && yysize <= yymsg_alloc)
+ {
+ (void) yysyntax_error (yymsg, yystate, yychar);
+ yyerror (yymsg);
+ }
+ else
+ {
+ yyerror (YY_("syntax error"));
+ if (yysize != 0)
+ goto yyexhaustedlab;
+ }
+ }
+#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+
+ /* Pacify compilers like GCC when the user code never invokes
+ YYERROR and the label yyerrorlab therefore never appears in user
+ code. */
+ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (yyn != YYPACT_NINF)
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ *++yyvsp = yylval;
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+ if (yychar != YYEMPTY)
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
+}
+
+
+
+/* Line 1675 of yacc.c */
+#line 3088 "vtkParse.y"
+
+#include <string.h>
+#include "lex.yy.c"
+
+/* fill in the type name if none given */
+const char *type_class(unsigned int type, const char *classname)
+{
+ if (classname)
+ {
+ if (classname[0] == '\0')
+ {
+ switch ((type & VTK_PARSE_BASE_TYPE))
+ {
+ case VTK_PARSE_VOID:
+ classname = "void";
+ break;
+ case VTK_PARSE_BOOL:
+ classname = "bool";
+ break;
+ case VTK_PARSE_FLOAT:
+ classname = "float";
+ break;
+ case VTK_PARSE_DOUBLE:
+ classname = "double";
+ break;
+ case VTK_PARSE_LONG_DOUBLE:
+ classname = "long double";
+ break;
+ case VTK_PARSE_CHAR:
+ classname = "char";
+ break;
+ case VTK_PARSE_UNSIGNED_CHAR:
+ classname = "unsigned char";
+ break;
+ case VTK_PARSE_SIGNED_CHAR:
+ classname = "signed char";
+ break;
+ case VTK_PARSE_SHORT:
+ classname = "short";
+ break;
+ case VTK_PARSE_UNSIGNED_SHORT:
+ classname = "unsigned short";
+ break;
+ case VTK_PARSE_INT:
+ classname = "int";
+ break;
+ case VTK_PARSE_UNSIGNED_INT:
+ classname = "unsigned int";
+ break;
+ case VTK_PARSE_LONG:
+ classname = "long";
+ break;
+ case VTK_PARSE_UNSIGNED_LONG:
+ classname = "unsigned long";
+ break;
+ case VTK_PARSE_LONG_LONG:
+ classname = "long long";
+ break;
+ case VTK_PARSE_UNSIGNED_LONG_LONG:
+ classname = "unsigned long long";
+ break;
+ case VTK_PARSE___INT64:
+ classname = "__int64";
+ break;
+ case VTK_PARSE_UNSIGNED___INT64:
+ classname = "unsigned __int64";
+ break;
+ }
+ }
+ }
+
+ return classname;
+}
+
+/* check whether this is the class we are looking for */
+void start_class(const char *classname, int is_struct_or_union)
+{
+ ClassInfo *outerClass = currentClass;
+ pushClass();
+ currentClass = (ClassInfo *)malloc(sizeof(ClassInfo));
+ vtkParse_InitClass(currentClass);
+ currentClass->Name = classname;
+ if (is_struct_or_union == 1)
+ {
+ currentClass->ItemType = VTK_STRUCT_INFO;
+ }
+ if (is_struct_or_union == 2)
+ {
+ currentClass->ItemType = VTK_UNION_INFO;
+ }
+
+ if (classname && classname[strlen(classname)-1] != '>')
+ {
+ if (outerClass)
+ {
+ vtkParse_AddClassToClass(outerClass, currentClass);
+ }
+ else
+ {
+ vtkParse_AddClassToNamespace(currentNamespace, currentClass);
+ }
+ }
+
+ /* template information */
+ if (currentTemplate)
+ {
+ currentClass->Template = currentTemplate;
+ currentTemplate = NULL;
+ }
+
+ /* comment, if any */
+ currentClass->Comment = vtkstrdup(getComment());
+
+ access_level = VTK_ACCESS_PRIVATE;
+ if (is_struct_or_union)
+ {
+ access_level = VTK_ACCESS_PUBLIC;
+ }
+
+ vtkParse_InitFunction(currentFunction);
+ startSig();
+ clearComment();
+}
+
+/* reject the class */
+void reject_class(const char *classname, int is_struct_or_union)
+{
+ static ClassInfo static_class;
+
+ pushClass();
+ currentClass = &static_class;
+ currentClass->Name = classname;
+ vtkParse_InitClass(currentClass);
+
+ access_level = VTK_ACCESS_PRIVATE;
+ if (is_struct_or_union)
+ {
+ access_level = VTK_ACCESS_PUBLIC;
+ }
+
+ vtkParse_InitFunction(currentFunction);
+ startSig();
+ clearComment();
+}
+
+/* reached the end of a class definition */
+void end_class()
+{
+ /* add default constructors */
+ vtkParse_AddDefaultConstructors(currentClass, data->Strings);
+
+ popClass();
+}
+
+/* add a base class to the specified class */
+void add_base_class(ClassInfo *cls, const char *name, int al, int virt)
+{
+ if (cls && al == VTK_ACCESS_PUBLIC && virt == 0)
+ {
+ vtkParse_AddStringToArray(&cls->SuperClasses,
+ &cls->NumberOfSuperClasses,
+ name);
+ }
+}
+
+/* add a using declaration or directive */
+void add_using(const char *name, int is_namespace)
+{
+ size_t i;
+ UsingInfo *item;
+
+ item = (UsingInfo *)malloc(sizeof(UsingInfo));
+ vtkParse_InitUsing(item);
+ if (is_namespace)
+ {
+ item->Name = NULL;
+ item->Scope = name;
+ }
+ else
+ {
+ i = strlen(name);
+ while (i > 0 && name[i-1] != ':') { i--; }
+ item->Name = vtkstrdup(&name[i]);
+ while (i > 0 && name[i-1] == ':') { i--; }
+ item->Scope = vtkstrndup(name, i);
+ }
+
+ if (currentClass)
+ {
+ vtkParse_AddUsingToClass(currentClass, item);
+ }
+ else
+ {
+ vtkParse_AddUsingToNamespace(currentNamespace, item);
+ }
+}
+
+/* start a new enum */
+void start_enum(const char *name)
+{
+ EnumInfo *item;
+
+ currentEnumName = "int";
+ currentEnumValue = NULL;
+ if (name)
+ {
+ currentEnumName = name;
+ item = (EnumInfo *)malloc(sizeof(EnumInfo));
+ vtkParse_InitEnum(item);
+ item->Name = name;
+ item->Access = access_level;
+ if (currentClass)
+ {
+ vtkParse_AddEnumToClass(currentClass, item);
+ }
+ else
+ {
+ vtkParse_AddEnumToNamespace(currentNamespace, item);
+ }
+ }
+}
+
+/* finish the enum */
+void end_enum()
+{
+ currentEnumName = NULL;
+ currentEnumValue = NULL;
+}
+
+/* add a constant to the enum */
+void add_enum(const char *name, const char *value)
+{
+ static char text[2048];
+ int i;
+ long j;
+
+ if (value)
+ {
+ strcpy(text, value);
+ currentEnumValue = value;
+ }
+ else if (currentEnumValue)
+ {
+ i = strlen(text);
+ while (i > 0 && text[i-1] >= '0' &&
+ text[i-1] <= '9') { i--; }
+
+ if (i == 0 || text[i-1] == ' ' ||
+ (i > 1 && text[i-2] == ' ' &&
+ (text[i-1] == '-' || text[i-1] == '+')))
+ {
+ if (i > 0 && text[i-1] != ' ')
+ {
+ i--;
+ }
+ j = (int)strtol(&text[i], NULL, 10);
+ sprintf(&text[i], "%li", j+1);
+ }
+ else
+ {
+ i = strlen(text);
+ strcpy(&text[i], " + 1");
+ }
+ currentEnumValue = vtkstrdup(text);
+ }
+ else
+ {
+ strcpy(text, "0");
+ currentEnumValue = "0";
+ }
+
+ add_constant(name, currentEnumValue, VTK_PARSE_INT, currentEnumName, 2);
+}
+
+/* for a macro constant, guess the constant type, doesn't do any math */
+unsigned int guess_constant_type(const char *valstring)
+{
+ unsigned int valtype = 0;
+ size_t k;
+ int i;
+ int is_name = 0;
+
+ if (valstring == NULL || valstring[0] == '\0')
+ {
+ return 0;
+ }
+
+ if (valstring[0] < '0' || valstring[0] > '9')
+ {
+ k = 0;
+ while ((valstring[k] >= '0' && valstring[k] <= '9') ||
+ (valstring[k] >= 'a' && valstring[k] <= 'z') ||
+ (valstring[k] >= 'A' && valstring[k] <= 'Z') ||
+ valstring[k] == '_') { k++; }
+
+ if (valstring[k] == '\0')
+ {
+ is_name = 1;
+ }
+ }
+
+ if (strcmp(valstring, "true") == 0 || strcmp(valstring, "false") == 0)
+ {
+ return VTK_PARSE_BOOL;
+ }
+
+ if (valstring[0] == '\'')
+ {
+ return VTK_PARSE_CHAR;
+ }
+
+ if (strncmp(valstring, "VTK_TYPE_CAST(", 14) == 0 ||
+ strncmp(valstring, "static_cast<", 12) == 0 ||
+ strncmp(valstring, "const_cast<", 11) == 0 ||
+ strncmp(valstring, "(", 1) == 0)
+ {
+ const char *cp;
+ size_t n;
+ int is_unsigned = 0;
+
+ cp = &valstring[1];
+ if (valstring[0] == 'c')
+ {
+ cp = &valstring[11];
+ }
+ else if (valstring[0] == 's')
+ {
+ cp = &valstring[12];
+ }
+ else if (valstring[0] == 'V')
+ {
+ cp = &valstring[14];
+ }
+
+ if (strncmp(cp, "unsigned ", 9) == 0)
+ {
+ is_unsigned = 1;
+ cp += 9;
+ }
+
+ n = strlen(cp);
+ for (k = 0; k < n && cp[k] != ',' &&
+ cp[k] != '>' && cp[k] != ')'; k++) { ; };
+
+ if (strncmp(cp, "long long", k) == 0)
+ { valtype = VTK_PARSE_LONG_LONG; }
+ else if (strncmp(cp, "__int64", k) == 0)
+ { valtype = VTK_PARSE___INT64; }
+ else if (strncmp(cp, "long", k) == 0)
+ { valtype = VTK_PARSE_LONG; }
+ else if (strncmp(cp, "short", k) == 0)
+ { valtype = VTK_PARSE_SHORT; }
+ else if (strncmp(cp, "signed char", k) == 0)
+ { valtype = VTK_PARSE_SIGNED_CHAR; }
+ else if (strncmp(cp, "char", k) == 0)
+ { valtype = VTK_PARSE_CHAR; }
+ else if (strncmp(cp, "int", k) == 0 ||
+ strncmp(cp, "signed", k) == 0)
+ { valtype = VTK_PARSE_INT; }
+ else if (strncmp(cp, "float", k) == 0)
+ { valtype = VTK_PARSE_FLOAT; }
+ else if (strncmp(cp, "double", k) == 0)
+ { valtype = VTK_PARSE_DOUBLE; }
+ else if (strncmp(cp, "char *", k) == 0)
+ { valtype = VTK_PARSE_CHAR_PTR; }
+
+ if (is_unsigned)
+ {
+ if (valtype == 0) { valtype = VTK_PARSE_INT; }
+ valtype = (valtype | VTK_PARSE_UNSIGNED);
+ }
+
+ if (valtype != 0)
+ {
+ return valtype;
+ }
+ }
+
+ /* check the current scope */
+ if (is_name)
+ {
+ NamespaceInfo *scope = currentNamespace;
+ if (namespaceDepth > 0)
+ {
+ scope = namespaceStack[0];
+ }
+
+ for (i = 0; i < scope->NumberOfConstants; i++)
+ {
+ if (strcmp(scope->Constants[i]->Name, valstring) == 0)
+ {
+ return scope->Constants[i]->Type;
+ }
+ }
+ }
+
+ /* check for preprocessor macros */
+ if (is_name)
+ {
+ MacroInfo *macro = vtkParsePreprocess_GetMacro(
+ preprocessor, valstring);
+
+ if (macro && !macro->IsFunction)
+ {
+ return guess_constant_type(macro->Definition);
+ }
+ }
+
+ /* fall back to the preprocessor to evaluate the constant */
+ {
+ preproc_int_t val;
+ int is_unsigned;
+ int result = vtkParsePreprocess_EvaluateExpression(
+ preprocessor, valstring, &val, &is_unsigned);
+
+ if (result == VTK_PARSE_PREPROC_DOUBLE)
+ {
+ return VTK_PARSE_DOUBLE;
+ }
+ else if (result == VTK_PARSE_PREPROC_FLOAT)
+ {
+ return VTK_PARSE_FLOAT;
+ }
+ else if (result == VTK_PARSE_PREPROC_STRING)
+ {
+ return VTK_PARSE_CHAR_PTR;
+ }
+ else if (result == VTK_PARSE_OK)
+ {
+ if (is_unsigned)
+ {
+ if ((preproc_uint_t)val <= VTK_UNSIGNED_INT_MAX)
+ {
+ return VTK_PARSE_UNSIGNED_INT;
+ }
+ else
+ {
+#if defined(VTK_TYPE_USE_LONG_LONG)
+ return VTK_PARSE_UNSIGNED_LONG_LONG;
+#elif defined(VTK_TYPE_USE___INT64)
+ return VTK_PARSE_UNSIGNED___INT64;
+#else
+ return VTK_PARSE_UNSIGNED_LONG;
+#endif
+ }
+ }
+ else
+ {
+ if (val >= VTK_INT_MIN && val <= VTK_INT_MAX)
+ {
+ return VTK_PARSE_INT;
+ }
+ else
+ {
+#if defined(VTK_TYPE_USE_LONG_LONG)
+ return VTK_PARSE_LONG_LONG;
+#elif defined(VTK_TYPE_USE___INT64)
+ return VTK_PARSE___INT64;
+#else
+ return VTK_PARSE_LONG;
+#endif
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
+/* add a constant to the current class or namespace */
+void add_constant(const char *name, const char *value,
+ unsigned int type, const char *typeclass, int flag)
+{
+ ValueInfo *con = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_InitValue(con);
+ con->ItemType = VTK_CONSTANT_INFO;
+ con->Name = name;
+ con->Value = value;
+ con->Type = type;
+ con->Class = type_class(type, typeclass);
+
+ if (flag == 2)
+ {
+ con->IsEnum = 1;
+ }
+
+ if (flag == 1)
+ {
+ /* actually a macro, need to guess the type */
+ ValueInfo **cptr = data->Contents->Constants;
+ int n = data->Contents->NumberOfConstants;
+ int i;
+
+ con->Access = VTK_ACCESS_PUBLIC;
+ if (con->Type == 0)
+ {
+ con->Type = guess_constant_type(con->Value);
+ }
+
+ for (i = 0; i < n; i++)
+ {
+ if (strcmp(cptr[i]->Name, con->Name) == 0)
+ {
+ break;
+ }
+ }
+
+ if (i == n)
+ {
+ vtkParse_AddConstantToNamespace(data->Contents, con);
+ }
+ else
+ {
+ vtkParse_FreeValue(con);
+ }
+ }
+ else if (currentClass)
+ {
+ con->Access = access_level;
+ vtkParse_AddConstantToClass(currentClass, con);
+ }
+ else
+ {
+ con->Access = VTK_ACCESS_PUBLIC;
+ vtkParse_AddConstantToNamespace(currentNamespace, con);
+ }
+}
+
+/* if the name is a const in this namespace, the scope it */
+const char *add_const_scope(const char *name)
+{
+ static char text[256];
+ NamespaceInfo *scope = currentNamespace;
+ int i, j;
+ int addscope = 0;
+
+ strcpy(text, name);
+
+ if (currentClass)
+ {
+ for (j = 0; j < currentClass->NumberOfConstants; j++)
+ {
+ if (strcmp(currentClass->Constants[j]->Name, text) == 0)
+ {
+ prepend_scope(text, currentClass->Name);
+ addscope = 1;
+ }
+ }
+ }
+ i = namespaceDepth;
+ while (scope && scope->Name)
+ {
+ if (addscope)
+ {
+ prepend_scope(text, scope->Name);
+ }
+ else
+ {
+ for (j = 0; j < scope->NumberOfConstants; j++)
+ {
+ if (strcmp(scope->Constants[j]->Name, text) == 0)
+ {
+ prepend_scope(text, scope->Name);
+ addscope = 1;
+ }
+ }
+ }
+
+ scope = 0;
+ if (i > 0)
+ {
+ scope = namespaceStack[--i];
+ }
+ }
+
+ return text;
+}
+
+/* guess the type from the ID */
+unsigned int guess_id_type(const char *cp)
+{
+ unsigned int t = 0;
+
+ if (cp)
+ {
+ size_t i;
+ const char *dp;
+
+ i = strlen(cp);
+ while (i > 0 && cp[i-1] != ':') { i--; }
+ dp = &cp[i];
+
+ if (strcmp(dp, "vtkStdString") == 0 ||
+ strcmp(cp, "std::string") == 0)
+ {
+ t = VTK_PARSE_STRING;
+ }
+ else if (strcmp(dp, "vtkUnicodeString") == 0)
+ {
+ t = VTK_PARSE_UNICODE_STRING;
+ }
+ else if (strncmp(dp, "vtk", 3) == 0)
+ {
+ t = VTK_PARSE_OBJECT;
+ }
+ else if (strncmp(dp, "Q", 1) == 0 ||
+ strncmp(cp, "Qt::", 4) == 0)
+ {
+ t = VTK_PARSE_QOBJECT;
+ }
+ else
+ {
+ t = VTK_PARSE_UNKNOWN;
+ }
+ }
+
+ return t;
+}
+
+/* add a template parameter to the current template */
+void add_template_parameter(
+ unsigned int datatype, unsigned int extra, const char *funcSig)
+{
+ ValueInfo *param = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_InitValue(param);
+ handle_complex_type(param, datatype, extra, funcSig);
+ param->Name = getVarName();
+ vtkParse_AddParameterToTemplate(currentTemplate, param);
+}
+
+/* add a parameter to a function */
+void add_parameter(FunctionInfo *func, unsigned int type,
+ const char *typeclass, int count)
+{
+ char text[64];
+ ValueInfo *param = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_InitValue(param);
+
+ param->Type = type;
+ param->Class = type_class(type, typeclass);
+
+ if (count)
+ {
+ param->Count = count;
+ sprintf(text, "%i", count);
+ vtkParse_AddStringToArray(¶m->Dimensions, ¶m->NumberOfDimensions,
+ vtkstrdup(text));
+ }
+
+ add_legacy_parameter(func, param);
+
+ vtkParse_AddParameterToFunction(func, param);
+}
+
+/* set the return type for the current function */
+void set_return(FunctionInfo *func, unsigned int type,
+ const char *typeclass, int count)
+{
+ char text[64];
+ ValueInfo *val = (ValueInfo *)malloc(sizeof(ValueInfo));
+
+ vtkParse_InitValue(val);
+ val->Type = type;
+ val->Class = type_class(type, typeclass);
+
+ if (count)
+ {
+ val->Count = count;
+ sprintf(text, "%i", count);
+ vtkParse_AddStringToArray(&val->Dimensions, &val->NumberOfDimensions,
+ vtkstrdup(text));
+ }
+
+ func->ReturnValue = val;
+
+#ifndef VTK_PARSE_LEGACY_REMOVE
+ func->ReturnType = val->Type;
+ func->ReturnClass = val->Class;
+ func->HaveHint = (count > 0);
+ func->HintSize = count;
+#endif
+}
+
+int count_from_dimensions(ValueInfo *val)
+{
+ int count, i, n;
+ const char *cp;
+
+ /* count is the product of the dimensions */
+ count = 0;
+ if (val->NumberOfDimensions)
+ {
+ count = 1;
+ for (i = 0; i < val->NumberOfDimensions; i++)
+ {
+ n = 0;
+ cp = val->Dimensions[i];
+ if (cp[0] != '\0')
+ {
+ while (*cp != '\0' && *cp >= '0' && *cp <= '9') { cp++; }
+ while (*cp != '\0' && (*cp == 'u' || *cp == 'l' ||
+ *cp == 'U' || *cp == 'L')) { cp++; }
+ if (*cp == '\0')
+ {
+ n = (int)strtol(val->Dimensions[i], NULL, 0);
+ }
+ }
+ count *= n;
+ }
+ }
+
+ return count;
+}
+
+/* deal with types that include function pointers or arrays */
+void handle_complex_type(
+ ValueInfo *val, unsigned int datatype, unsigned int extra,
+ const char *funcSig)
+{
+ FunctionInfo *func = 0;
+
+ /* remove specifiers like "friend" and "typedef" */
+ datatype &= VTK_PARSE_QUALIFIED_TYPE;
+
+ /* if "extra" was set, parentheses were involved */
+ if ((extra & VTK_PARSE_BASE_TYPE) == VTK_PARSE_FUNCTION)
+ {
+ /* the current type becomes the function return type */
+ func = getFunction();
+ func->ReturnValue = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_InitValue(func->ReturnValue);
+ func->ReturnValue->Type = datatype;
+ func->ReturnValue->Class = type_class(datatype, getTypeId());
+ if (funcSig) { func->Signature = vtkstrdup(funcSig); }
+ val->Function = func;
+
+#ifndef VTK_PARSE_LEGACY_REMOVE
+ func->ReturnType = func->ReturnValue->Type;
+ func->ReturnClass = func->ReturnValue->Class;
+#endif
+
+ /* the val type is whatever was inside the parentheses */
+ clearTypeId();
+ setTypeId(func->Class ? "method" : "function");
+ datatype = (extra & VTK_PARSE_UNQUALIFIED_TYPE);
+ }
+ else if ((extra & VTK_PARSE_INDIRECT) == VTK_PARSE_BAD_INDIRECT)
+ {
+ datatype = (datatype | VTK_PARSE_BAD_INDIRECT);
+ }
+ else if ((extra & VTK_PARSE_INDIRECT) != 0)
+ {
+ extra = (extra & VTK_PARSE_INDIRECT);
+
+ if ((extra & VTK_PARSE_REF) != 0)
+ {
+ datatype = (datatype | VTK_PARSE_REF);
+ extra = (extra & ~VTK_PARSE_REF);
+ }
+
+ if (extra != 0 && getArrayNDims() > 0)
+ {
+ /* pointer represents an unsized array bracket */
+ datatype = add_indirection(datatype, VTK_PARSE_ARRAY);
+ extra = ((extra >> 2) & VTK_PARSE_POINTER_MASK);
+ }
+
+ datatype = add_indirection(datatype, extra);
+ }
+
+ if (getArrayNDims() == 1)
+ {
+ if ((datatype & VTK_PARSE_POINTER_LOWMASK) != VTK_PARSE_ARRAY)
+ {
+ /* turn the first set of brackets into a pointer */
+ datatype = add_indirection(datatype, VTK_PARSE_POINTER);
+ }
+ else
+ {
+ pushArrayFront("");
+ }
+ }
+ else if (getArrayNDims() > 1)
+ {
+ if ((datatype & VTK_PARSE_POINTER_LOWMASK) != VTK_PARSE_ARRAY)
+ {
+ /* turn the first set of brackets into a pointer */
+ datatype = add_indirection(datatype, VTK_PARSE_ARRAY);
+ }
+ else
+ {
+ pushArrayFront("");
+ }
+ }
+
+ /* get the data type */
+ val->Type = datatype;
+ val->Class = type_class(datatype, getTypeId());
+
+ /* copy contents of all brackets to the ArgDimensions */
+ val->NumberOfDimensions = getArrayNDims();
+ val->Dimensions = getArray();
+ clearArray();
+
+ /* count is the product of the dimensions */
+ val->Count = count_from_dimensions(val);
+}
+
+/* add a parameter to the legacy part of the FunctionInfo struct */
+void add_legacy_parameter(FunctionInfo *func, ValueInfo *param)
+{
+#ifndef VTK_PARSE_LEGACY_REMOVE
+ int i = func->NumberOfArguments;
+
+ if (i < MAX_ARGS)
+ {
+ func->NumberOfArguments = i + 1;
+ func->ArgTypes[i] = param->Type;
+ func->ArgClasses[i] = param->Class;
+ func->ArgCounts[i] = param->Count;
+
+ /* legacy wrappers need VTK_PARSE_FUNCTION without POINTER */
+ if (param->Type == VTK_PARSE_FUNCTION_PTR)
+ {
+ /* check for signature "void (*func)(void *)" */
+ if (param->Function->NumberOfParameters == 1 &&
+ param->Function->Parameters[0]->Type == VTK_PARSE_VOID_PTR &&
+ param->Function->Parameters[0]->NumberOfDimensions == 0 &&
+ param->Function->ReturnValue->Type == VTK_PARSE_VOID)
+ {
+ func->ArgTypes[i] = VTK_PARSE_FUNCTION;
+ }
+ }
+ }
+ else
+ {
+ func->ArrayFailure = 1;
+ }
+#endif
+}
+
+
+/* reject the function, do not output it */
+void reject_function()
+{
+ vtkParse_InitFunction(currentFunction);
+ startSig();
+ getMacro();
+}
+
+/* a simple routine that updates a few variables */
+void output_function()
+{
+ const char *macro = getMacro();
+ size_t n;
+ int i, j;
+ int match;
+
+ /* reject template specializations */
+ n = strlen(currentFunction->Name);
+ if (currentFunction->Name[n-1] == '>')
+ {
+ /* make sure there is a matching angle bracket */
+ while (n > 0 && currentFunction->Name[n-1] != '<') { n--; }
+ if (n > 0)
+ {
+ reject_function();
+ return;
+ }
+ }
+
+ /* static */
+ if (currentFunction->ReturnValue &&
+ currentFunction->ReturnValue->Type & VTK_PARSE_STATIC)
+ {
+ currentFunction->IsStatic = 1;
+ }
+
+ /* virtual */
+ if (currentFunction->ReturnValue &&
+ currentFunction->ReturnValue->Type & VTK_PARSE_VIRTUAL)
+ {
+ currentFunction->IsVirtual = 1;
+ }
+
+ /* the signature */
+ if (!currentFunction->Signature)
+ {
+ currentFunction->Signature = getSig();
+ }
+
+ /* template information */
+ if (currentTemplate)
+ {
+ currentFunction->Template = currentTemplate;
+ currentTemplate = NULL;
+ }
+
+ /* a void argument is the same as no parameters */
+ if (currentFunction->NumberOfParameters == 1 &&
+ (currentFunction->Parameters[0]->Type & VTK_PARSE_UNQUALIFIED_TYPE) ==
+ VTK_PARSE_VOID)
+ {
+ currentFunction->NumberOfParameters = 0;
+ }
+
+ /* is it defined in a legacy macro? */
+ if (macro && strcmp(macro, "VTK_LEGACY") == 0)
+ {
+ currentFunction->IsLegacy = 1;
+ }
+
+ /* set public, protected */
+ if (currentClass)
+ {
+ currentFunction->Access = access_level;
+ }
+ else
+ {
+ currentFunction->Access = VTK_ACCESS_PUBLIC;
+ }
+
+#ifndef VTK_PARSE_LEGACY_REMOVE
+ /* a void argument is the same as no parameters */
+ if (currentFunction->NumberOfArguments == 1 &&
+ (currentFunction->ArgTypes[0] & VTK_PARSE_UNQUALIFIED_TYPE) ==
+ VTK_PARSE_VOID)
+ {
+ currentFunction->NumberOfArguments = 0;
+ }
+
+ /* if return type is void, set return class to void */
+ if (currentFunction->ReturnClass == NULL &&
+ (currentFunction->ReturnType & VTK_PARSE_UNQUALIFIED_TYPE) ==
+ VTK_PARSE_VOID)
+ {
+ currentFunction->ReturnClass = "void";
+ }
+
+ /* set legacy flags */
+ if (currentClass)
+ {
+ currentFunction->IsPublic = (access_level == VTK_ACCESS_PUBLIC);
+ currentFunction->IsProtected = (access_level == VTK_ACCESS_PROTECTED);
+ }
+ else
+ {
+ currentFunction->IsPublic = 1;
+ currentFunction->IsProtected = 0;
+ }
+
+ /* check for too many parameters */
+ if (currentFunction->NumberOfParameters > MAX_ARGS)
+ {
+ currentFunction->ArrayFailure = 1;
+ }
+
+ for (i = 0; i < currentFunction->NumberOfParameters; i++)
+ {
+ ValueInfo *param = currentFunction->Parameters[i];
+ /* tell old wrappers that multi-dimensional arrays are bad */
+ if ((param->Type & VTK_PARSE_POINTER_MASK) != 0)
+ {
+ if (((param->Type & VTK_PARSE_INDIRECT) == VTK_PARSE_BAD_INDIRECT) ||
+ ((param->Type & VTK_PARSE_POINTER_LOWMASK) != VTK_PARSE_POINTER))
+ {
+ currentFunction->ArrayFailure = 1;
+ }
+ }
+
+ /* allow only "void (*func)(void *)" as a valid function pointer */
+ if ((param->Type & VTK_PARSE_BASE_TYPE) == VTK_PARSE_FUNCTION)
+ {
+ if (i != 0 || param->Type != VTK_PARSE_FUNCTION_PTR ||
+ currentFunction->NumberOfParameters != 2 ||
+ currentFunction->Parameters[1]->Type != VTK_PARSE_VOID_PTR ||
+ param->Function->NumberOfParameters != 1 ||
+ param->Function->Parameters[0]->Type != VTK_PARSE_VOID_PTR ||
+ param->Function->Parameters[0]->NumberOfDimensions != 0 ||
+ param->Function->ReturnValue->Type != VTK_PARSE_VOID)
+ {
+ currentFunction->ArrayFailure = 1;
+ }
+ }
+ }
+#endif /* VTK_PARSE_LEGACY_REMOVE */
+
+ if (currentClass)
+ {
+ /* is it a delete function */
+ if (currentFunction->Name && !strcmp("Delete",currentFunction->Name))
+ {
+ currentClass->HasDelete = 1;
+ }
+
+ currentFunction->Class = currentClass->Name;
+ vtkParse_AddFunctionToClass(currentClass, currentFunction);
+
+ currentFunction = (FunctionInfo *)malloc(sizeof(FunctionInfo));
+ }
+ else
+ {
+ /* make sure this function isn't a repeat */
+ match = 0;
+ for (i = 0; i < currentNamespace->NumberOfFunctions; i++)
+ {
+ if (currentNamespace->Functions[i]->Name &&
+ strcmp(currentNamespace->Functions[i]->Name,
+ currentFunction->Name) == 0)
+ {
+ if (currentNamespace->Functions[i]->NumberOfParameters ==
+ currentFunction->NumberOfParameters)
+ {
+ for (j = 0; j < currentFunction->NumberOfParameters; j++)
+ {
+ if (currentNamespace->Functions[i]->Parameters[j]->Type ==
+ currentFunction->Parameters[j]->Type)
+ {
+ if (currentFunction->Parameters[j]->Type == VTK_PARSE_OBJECT &&
+ strcmp(currentNamespace->Functions[i]->Parameters[j]->Class,
+ currentFunction->Parameters[j]->Class) == 0)
+ {
+ break;
+ }
+ }
+ }
+ if (j == currentFunction->NumberOfParameters)
+ {
+ match = 1;
+ break;
+ }
+ }
+ }
+ }
+
+ if (!match)
+ {
+ vtkParse_AddFunctionToNamespace(currentNamespace, currentFunction);
+
+ currentFunction = (FunctionInfo *)malloc(sizeof(FunctionInfo));
+ }
+ }
+
+ vtkParse_InitFunction(currentFunction);
+ startSig();
+}
+
+/* output a function that is not a method of the current class */
+void output_friend_function()
+{
+ ClassInfo *tmpc = currentClass;
+ currentClass = NULL;
+ output_function();
+ currentClass = tmpc;
+}
+
+void outputSetVectorMacro(const char *var, unsigned int paramType,
+ const char *typeText, int n)
+{
+ static const char *mnames[] = {
+ NULL, NULL,
+ "vtkSetVector2Macro", "vtkSetVector3Macro", "vtkSetVector4Macro",
+ NULL,
+ "vtkSetVector6Macro",
+ NULL };
+ char ntext[32];
+ int i, m;
+ m = (n > 7 ? 0 : n);
+
+ sprintf(ntext, "%i", n);
+
+ currentFunction->Macro = mnames[m];
+ currentFunction->Name = vtkstrcat("Set", var);
+ startSig();
+ postSig("void ");
+ postSig(currentFunction->Name);
+ postSig("(");
+ postSig(typeText);
+ for (i = 1; i < n; i++)
+ {
+ postSig(", ");
+ postSig(typeText);
+ }
+ postSig(");");
+ for (i = 0; i < n; i++)
+ {
+ add_parameter(currentFunction, paramType, getTypeId(), 0);
+ }
+ set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+ output_function();
+
+ currentFunction->Macro = mnames[m];
+ currentFunction->Name = vtkstrcat("Set", var);
+ currentFunction->Signature =
+ vtkstrcat7("void ", currentFunction->Name, "(", typeText,
+ " a[", ntext, "]);");
+ add_parameter(currentFunction, (VTK_PARSE_POINTER | paramType),
+ getTypeId(), n);
+ set_return(currentFunction, VTK_PARSE_VOID, "void", 0);
+ output_function();
+}
+
+void outputGetVectorMacro(const char *var, unsigned int paramType,
+ const char *typeText, int n)
+{
+ static const char *mnames[] = {
+ NULL, NULL,
+ "vtkGetVector2Macro", "vtkGetVector3Macro", "vtkGetVector4Macro",
+ NULL,
+ "vtkGetVector6Macro",
+ NULL };
+ int m;
+ m = (n > 7 ? 0 : n);
+
+ currentFunction->Macro = mnames[m];
+ currentFunction->Name = vtkstrcat("Get", var);
+ currentFunction->Signature =
+ vtkstrcat4(typeText, " *", currentFunction->Name, "();");
+ set_return(currentFunction, (VTK_PARSE_POINTER | paramType), getTypeId(), n);
+ output_function();
+}
+
+/* Set a flag to ignore BTX/ETX markers in the files */
+void vtkParse_SetIgnoreBTX(int option)
+{
+ if (option)
+ {
+ IgnoreBTX = 1;
+ }
+ else
+ {
+ IgnoreBTX = 0;
+ }
+}
+
+/* Set a flag to recurse into included files */
+void vtkParse_SetRecursive(int option)
+{
+ if (option)
+ {
+ Recursive = 1;
+ }
+ else
+ {
+ Recursive = 0;
+ }
+}
+
+/* Parse a header file and return a FileInfo struct */
+FileInfo *vtkParse_ParseFile(
+ const char *filename, FILE *ifile, FILE *errfile)
+{
+ int i, j;
+ int ret;
+ FileInfo *file_info;
+ char *main_class;
+
+ /* "data" is a global variable used by the parser */
+ data = (FileInfo *)malloc(sizeof(FileInfo));
+ vtkParse_InitFile(data);
+ data->Strings = (StringCache *)malloc(sizeof(StringCache));
+ vtkParse_InitStringCache(data->Strings);
+
+ /* "preprocessor" is a global struct used by the parser */
+ preprocessor = (PreprocessInfo *)malloc(sizeof(PreprocessInfo));
+ vtkParsePreprocess_Init(preprocessor, filename);
+ vtkParsePreprocess_AddStandardMacros(preprocessor, VTK_PARSE_NATIVE);
+
+ /* add include files specified on the command line */
+ for (i = 0; i < NumberOfIncludeDirectories; i++)
+ {
+ vtkParsePreprocess_IncludeDirectory(preprocessor, IncludeDirectories[i]);
+ }
+
+ /* add macros specified on the command line */
+ for (i = 0; i < NumberOfDefinitions; i++)
+ {
+ const char *cp = Definitions[i];
+
+ if (*cp == 'U')
+ {
+ vtkParsePreprocess_RemoveMacro(preprocessor, &cp[1]);
+ }
+ else if (*cp == 'D')
+ {
+ const char *definition = &cp[1];
+ while (*definition != '=' && *definition != '\0')
+ {
+ definition++;
+ }
+ if (*definition == '=')
+ {
+ definition++;
+ }
+ else
+ {
+ definition = NULL;
+ }
+ vtkParsePreprocess_AddMacro(preprocessor, &cp[1], definition);
+ }
+ }
+
+ /* should explicitly check for vtkConfigure.h, or even explicitly load it */
+#ifdef VTK_USE_64BIT_IDS
+ vtkParsePreprocess_AddMacro(preprocessor, "VTK_USE_64BIT_IDS", NULL);
+#endif
+
+ data->FileName = vtkstrdup(filename);
+
+ clearComment();
+
+ namespaceDepth = 0;
+ currentNamespace = (NamespaceInfo *)malloc(sizeof(NamespaceInfo));
+ vtkParse_InitNamespace(currentNamespace);
+ data->Contents = currentNamespace;
+
+ templateDepth = 0;
+ currentTemplate = NULL;
+
+ currentFunction = (FunctionInfo *)malloc(sizeof(FunctionInfo));
+ vtkParse_InitFunction(currentFunction);
+ startSig();
+
+ parseDebug = 0;
+ if (getenv("DEBUG") != NULL)
+ {
+ parseDebug = 1;
+ }
+
+ yyset_in(ifile);
+ yyset_out(errfile);
+ ret = yyparse();
+
+ if (ret)
+ {
+ print_parser_error("syntax error", NULL, 0);
+ return NULL;
+ }
+
+ free(currentFunction);
+ yylex_destroy();
+
+ /* The main class name should match the file name */
+ i = strlen(filename);
+ j = i;
+ while (i > 0)
+ {
+ --i;
+ if (filename[i] == '.')
+ {
+ j = i;
+ }
+ if (filename[i] == '/' || filename[i] == '\\')
+ {
+ i++;
+ break;
+ }
+ }
+ main_class = (char *)malloc(j-i+1);
+ strncpy(main_class, &filename[i], j-i);
+ main_class[j-i] = '\0';
+
+ /* special treatment of the main class in the file */
+ for (i = 0; i < currentNamespace->NumberOfClasses; i++)
+ {
+ if (strcmp(currentNamespace->Classes[i]->Name, main_class) == 0)
+ {
+ data->MainClass = currentNamespace->Classes[i];
+ break;
+ }
+ }
+ free(main_class);
+
+ vtkParsePreprocess_Free(preprocessor);
+ preprocessor = NULL;
+ macroName = NULL;
+
+ file_info = data;
+ data = NULL;
+
+ return file_info;
+}
+
+/* Read a hints file and update the FileInfo */
+int vtkParse_ReadHints(FileInfo *file_info, FILE *hfile, FILE *errfile)
+{
+ char h_cls[512];
+ char h_func[512];
+ unsigned int h_type, type;
+ int h_value;
+ FunctionInfo *func_info;
+ ClassInfo *class_info;
+ NamespaceInfo *contents;
+ int i, j;
+ int lineno = 0;
+ int n;
+
+ contents = file_info->Contents;
+
+ /* read each hint line in succession */
+ while ((n = fscanf(hfile,"%s %s %x %i", h_cls, h_func, &h_type, &h_value))
+ != EOF)
+ {
+ lineno++;
+ if (n < 4)
+ {
+ fprintf(errfile, "Wrapping: error parsing hints file line %i\n", lineno);
+ exit(1);
+ }
+
+ /* erase "ref" and qualifiers from hint type */
+ type = ((h_type & VTK_PARSE_BASE_TYPE) |
+ (h_type & VTK_PARSE_POINTER_LOWMASK));
+
+ /* find the matching class */
+ for (i = 0; i < contents->NumberOfClasses; i++)
+ {
+ class_info = contents->Classes[i];
+
+ if (strcmp(h_cls, class_info->Name) == 0)
+ {
+ /* find the matching function */
+ for (j = 0; j < class_info->NumberOfFunctions; j++)
+ {
+ func_info = class_info->Functions[j];
+
+ if ((strcmp(h_func, func_info->Name) == 0) &&
+ func_info->ReturnValue &&
+ (type == ((func_info->ReturnValue->Type & ~VTK_PARSE_REF) &
+ VTK_PARSE_UNQUALIFIED_TYPE)))
+ {
+ /* types that hints are accepted for */
+ switch (func_info->ReturnValue->Type & VTK_PARSE_UNQUALIFIED_TYPE)
+ {
+ case VTK_PARSE_FLOAT_PTR:
+ case VTK_PARSE_VOID_PTR:
+ case VTK_PARSE_DOUBLE_PTR:
+ case VTK_PARSE_ID_TYPE_PTR:
+ case VTK_PARSE_LONG_LONG_PTR:
+ case VTK_PARSE_UNSIGNED_LONG_LONG_PTR:
+ case VTK_PARSE___INT64_PTR:
+ case VTK_PARSE_UNSIGNED___INT64_PTR:
+ case VTK_PARSE_INT_PTR:
+ case VTK_PARSE_UNSIGNED_INT_PTR:
+ case VTK_PARSE_SHORT_PTR:
+ case VTK_PARSE_UNSIGNED_SHORT_PTR:
+ case VTK_PARSE_LONG_PTR:
+ case VTK_PARSE_UNSIGNED_LONG_PTR:
+ case VTK_PARSE_SIGNED_CHAR_PTR:
+ case VTK_PARSE_UNSIGNED_CHAR_PTR:
+ case VTK_PARSE_CHAR_PTR:
+ {
+ if (func_info->ReturnValue->NumberOfDimensions == 0)
+ {
+ char text[64];
+ sprintf(text, "%i", h_value);
+ func_info->ReturnValue->Count = h_value;
+ vtkParse_AddStringToArray(
+ &func_info->ReturnValue->Dimensions,
+ &func_info->ReturnValue->NumberOfDimensions,
+ vtkParse_CacheString(
+ file_info->Strings, text, strlen(text)));
+#ifndef VTK_PARSE_LEGACY_REMOVE
+ func_info->HaveHint = 1;
+ func_info->HintSize = h_value;
+#endif
+ }
+ break;
+ }
+ default:
+ {
+ fprintf(errfile,
+ "Wrapping: unhandled hint type %#x\n", h_type);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return 1;
+}
+
+/* Free the FileInfo struct returned by vtkParse_ParseFile() */
+void vtkParse_Free(FileInfo *file_info)
+{
+ vtkParse_FreeFile(file_info);
+ vtkParse_FreeStringCache(file_info->Strings);
+ free(file_info->Strings);
+ free(file_info);
+}
+
+/** Define a preprocessor macro. Function macros are not supported. */
+void vtkParse_DefineMacro(const char *name, const char *definition)
+{
+ size_t n = vtkidlen(name);
+ size_t l;
+ char *cp;
+
+ if (definition == NULL)
+ {
+ definition = "";
+ }
+
+ l = n + strlen(definition) + 3;
+ cp = (char *)malloc(l);
+ cp[0] = 'D';
+ strncpy(&cp[1], name, n);
+ cp[n+1] = '\0';
+ if (definition[0] != '\0')
+ {
+ cp[n+1] = '=';
+ strcpy(&cp[n+2], definition);
+ }
+ cp[l] = '\0';
+
+ vtkParse_AddStringToArray(&Definitions, &NumberOfDefinitions, cp);
+}
+
+/** Undefine a preprocessor macro. */
+void vtkParse_UndefineMacro(const char *name)
+{
+ size_t n = vtkidlen(name);
+ char *cp;
+
+ cp = (char *)malloc(n+2);
+ cp[0] = 'U';
+ strncpy(&cp[1], name, n);
+ cp[n+1] = '\0';
+
+ vtkParse_AddStringToArray(&Definitions, &NumberOfDefinitions, cp);
+}
+
+/** Add an include directory, for use with the "-I" option. */
+void vtkParse_IncludeDirectory(const char *dirname)
+{
+ size_t n = strlen(dirname);
+ char *cp;
+ int i;
+
+ for (i = 0; i < NumberOfIncludeDirectories; i++)
+ {
+ if (strncmp(IncludeDirectories[i], dirname, n) == 0 &&
+ IncludeDirectories[i][n] == '\0')
+ {
+ return;
+ }
+ }
+
+ cp = (char *)malloc(n+1);
+ strcpy(cp, dirname);
+
+ vtkParse_AddStringToArray(
+ &IncludeDirectories, &NumberOfIncludeDirectories, cp);
+}
+
+/** Return the full path to a header file. */
+const char *vtkParse_FindIncludeFile(const char *filename)
+{
+ static PreprocessInfo info = {0, 0, 0, 0, 0, 0, 0, 0, 0};
+ int val;
+ int i;
+
+ /* add include files specified on the command line */
+ for (i = 0; i < NumberOfIncludeDirectories; i++)
+ {
+ vtkParsePreprocess_IncludeDirectory(&info, IncludeDirectories[i]);
+ }
+
+ return vtkParsePreprocess_FindIncludeFile(&info, filename, 0, &val);
+}
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkParseData.c
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+/*-------------------------------------------------------------------------
+ Copyright (c) 2010 David Gobbi.
+
+ Contributed to the VisualizationToolkit by the author in May 2010
+ under the terms of the Visualization Toolkit 2008 copyright.
+-------------------------------------------------------------------------*/
+
+#include "vtkParseData.h"
+#include <stdlib.h>
+#include <string.h>
+
+/* Initialize the FileInfo struct */
+void vtkParse_InitFile(FileInfo *file_info)
+{
+ /* file info */
+ file_info->FileName = NULL;
+ file_info->NameComment = NULL;
+ file_info->Description = NULL;
+ file_info->Caveats = NULL;
+ file_info->SeeAlso = NULL;
+
+ file_info->NumberOfIncludes = 0;
+ file_info->Includes = NULL;
+ file_info->MainClass = NULL;
+ file_info->Contents = NULL;
+
+ file_info->Strings = NULL;
+}
+
+/* Free the FileInfo struct */
+void vtkParse_FreeFile(FileInfo *file_info)
+{
+ int i, n;
+
+ n = file_info->NumberOfIncludes;
+ for (i = 0; i < n; i++)
+ {
+ vtkParse_FreeFile(file_info->Includes[i]);
+ free(file_info->Includes[i]);
+ }
+ if (file_info->Includes)
+ {
+ free(file_info->Includes);
+ }
+
+ vtkParse_FreeNamespace(file_info->Contents);
+ file_info->Contents = NULL;
+}
+
+/* Initialize a TemplateInfo struct */
+void vtkParse_InitTemplate(TemplateInfo *info)
+{
+ info->NumberOfParameters = 0;
+ info->Parameters = NULL;
+}
+
+/* Copy a TemplateInfo struct */
+void vtkParse_CopyTemplate(TemplateInfo *info, const TemplateInfo *orig)
+{
+ int i, n;
+
+ n = orig->NumberOfParameters;
+ info->NumberOfParameters = n;
+ info->Parameters = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
+
+ for (i = 0; i < n; i++)
+ {
+ info->Parameters[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_CopyValue(info->Parameters[i], orig->Parameters[i]);
+ }
+}
+
+/* Free a TemplateInfo struct */
+void vtkParse_FreeTemplate(TemplateInfo *template_info)
+{
+ int j, m;
+
+ m = template_info->NumberOfParameters;
+ for (j = 0; j < m; j++)
+ {
+ vtkParse_FreeValue(template_info->Parameters[j]);
+ }
+
+ free(template_info);
+}
+
+
+/* Initialize a Function struct */
+void vtkParse_InitFunction(FunctionInfo *func)
+{
+#ifndef VTK_PARSE_LEGACY_REMOVE
+ int i;
+#endif
+
+ func->ItemType = VTK_FUNCTION_INFO;
+ func->Access = VTK_ACCESS_PUBLIC;
+ func->Name = NULL;
+ func->Comment = NULL;
+ func->Class = NULL;
+ func->Signature = NULL;
+ func->Template = NULL;
+ func->NumberOfParameters = 0;
+ func->Parameters = NULL;
+ func->ReturnValue = NULL;
+ func->Macro = NULL;
+ func->SizeHint = NULL;
+ func->IsStatic = 0;
+ func->IsVirtual = 0;
+ func->IsPureVirtual = 0;
+ func->IsOperator = 0;
+ func->IsVariadic = 0;
+ func->IsConst = 0;
+ func->IsExplicit = 0;
+ func->IsLegacy = 0;
+
+#ifndef VTK_PARSE_LEGACY_REMOVE
+ /* everything below here is legacy information, *
+ * maintained only for backwards compatibility */
+ func->NumberOfArguments = 0;
+ func->ReturnType = VTK_PARSE_VOID;
+ func->ReturnClass = NULL;
+ func->HaveHint = 0;
+ func->HintSize = 0;
+ func->ArrayFailure = 0;
+ func->IsPublic = 0;
+ func->IsProtected = 0;
+
+ for (i = 0; i < MAX_ARGS; i++)
+ {
+ func->ArgTypes[i] = 0;
+ func->ArgClasses[i] = 0;
+ func->ArgCounts[i] = 0;
+ }
+#endif
+}
+
+/* Copy a Function struct */
+void vtkParse_CopyFunction(FunctionInfo *func, const FunctionInfo *orig)
+{
+ int i, n;
+
+ func->ItemType = orig->ItemType;
+ func->Access = orig->Access;
+ func->Name = orig->Name;
+ func->Comment = orig->Comment;
+ func->Class = orig->Class;
+ func->Signature = orig->Signature;
+ func->Template = NULL;
+
+ if (orig->Template)
+ {
+ func->Template = (TemplateInfo *)malloc(sizeof(TemplateInfo));
+ vtkParse_CopyTemplate(func->Template, orig->Template);
+ }
+
+ n = orig->NumberOfParameters;
+ func->NumberOfParameters = n;
+ if (n)
+ {
+ func->Parameters = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
+ for (i = 0; i < n; i++)
+ {
+ func->Parameters[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_CopyValue(func->Parameters[i], orig->Parameters[i]);
+ }
+ }
+
+ func->ReturnValue = NULL;
+ if (orig->ReturnValue)
+ {
+ func->ReturnValue = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_CopyValue(func->ReturnValue, orig->ReturnValue);
+ }
+
+ func->Macro = orig->Macro;
+ func->SizeHint = orig->SizeHint;
+ func->IsStatic = orig->IsStatic;
+ func->IsVirtual = orig->IsVirtual;
+ func->IsPureVirtual = orig->IsPureVirtual;
+ func->IsOperator = orig->IsOperator;
+ func->IsVariadic = orig->IsVariadic;
+ func->IsConst = orig->IsConst;
+ func->IsExplicit = orig->IsExplicit;
+ func->IsLegacy = orig->IsLegacy;
+
+#ifndef VTK_PARSE_LEGACY_REMOVE
+ /* everything below here is legacy information, *
+ * maintained only for backwards compatibility */
+ func->NumberOfArguments = orig->NumberOfArguments;
+ func->ReturnType = orig->ReturnType;
+ func->ReturnClass = orig->ReturnClass;
+ func->HaveHint = orig->HaveHint;
+ func->HintSize = orig->HintSize;
+ func->ArrayFailure = orig->ArrayFailure;
+ func->IsPublic = orig->IsPublic;
+ func->IsProtected = orig->IsProtected;
+
+ for (i = 0; i < MAX_ARGS; i++)
+ {
+ func->ArgTypes[i] = orig->ArgTypes[i];
+ func->ArgClasses[i] = orig->ArgClasses[i];
+ func->ArgCounts[i] = orig->ArgCounts[i];
+ }
+#endif
+}
+
+/* Free a Function struct */
+void vtkParse_FreeFunction(FunctionInfo *function_info)
+{
+ int j, m;
+
+ if (function_info->Template)
+ {
+ vtkParse_FreeTemplate(function_info->Template);
+ }
+
+ m = function_info->NumberOfParameters;
+ for (j = 0; j < m; j++) { vtkParse_FreeValue(function_info->Parameters[j]); }
+ if (m > 0) { free(function_info->Parameters); }
+
+ if (function_info->ReturnValue)
+ {
+ vtkParse_FreeValue(function_info->ReturnValue);
+ }
+
+ free(function_info);
+}
+
+
+/* Initialize a Value struct */
+void vtkParse_InitValue(ValueInfo *val)
+{
+ val->ItemType = VTK_VARIABLE_INFO;
+ val->Access = VTK_ACCESS_PUBLIC;
+ val->Name = NULL;
+ val->Comment = NULL;
+ val->Value = NULL;
+ val->Type = 0;
+ val->Class = NULL;
+ val->Count = 0;
+ val->CountHint = NULL;
+ val->NumberOfDimensions = 0;
+ val->Dimensions = NULL;
+ val->Function = NULL;
+ val->Template = NULL;
+ val->IsStatic = 0;
+ val->IsEnum = 0;
+}
+
+/* Copy a Value struct */
+void vtkParse_CopyValue(ValueInfo *val, const ValueInfo *orig)
+{
+ int i, n;
+
+ val->ItemType = orig->ItemType;
+ val->Access = orig->Access;
+ val->Name = orig->Name;
+ val->Comment = orig->Comment;
+ val->Value = orig->Value;
+ val->Type = orig->Type;
+ val->Class = orig->Class;
+ val->Count = orig->Count;
+ val->CountHint = orig->CountHint;
+
+ n = orig->NumberOfDimensions;
+ val->NumberOfDimensions = n;
+ if (n)
+ {
+ val->Dimensions = (const char **)malloc(n*sizeof(char *));
+ for (i = 0; i < n; i++)
+ {
+ val->Dimensions[i] = orig->Dimensions[i];
+ }
+ }
+
+ val->Function = NULL;
+ if (orig->Function)
+ {
+ val->Function = (FunctionInfo *)malloc(sizeof(FunctionInfo));
+ vtkParse_CopyFunction(val->Function, orig->Function);
+ }
+
+ val->Template = NULL;
+ if (orig->Template)
+ {
+ val->Template = (TemplateInfo *)malloc(sizeof(TemplateInfo));
+ vtkParse_CopyTemplate(val->Template, orig->Template);
+ }
+
+ val->IsStatic = orig->IsStatic;
+ val->IsEnum = orig->IsEnum;
+}
+
+/* Free a Value struct */
+void vtkParse_FreeValue(ValueInfo *value_info)
+{
+ if (value_info->NumberOfDimensions)
+ {
+ free((char **)value_info->Dimensions);
+ }
+ if (value_info->Function)
+ {
+ vtkParse_FreeFunction(value_info->Function);
+ }
+ if (value_info->Template)
+ {
+ vtkParse_FreeTemplate(value_info->Template);
+ }
+
+ free(value_info);
+}
+
+
+/* Initialize an Enum struct */
+void vtkParse_InitEnum(EnumInfo *item)
+{
+ item->ItemType = VTK_ENUM_INFO;
+ item->Access = VTK_ACCESS_PUBLIC;
+ item->Name = NULL;
+ item->Comment = NULL;
+}
+
+/* Copy an Enum struct */
+void vtkParse_CopyEnum(EnumInfo *item, const EnumInfo *orig)
+{
+ item->ItemType = orig->ItemType;
+ item->Access = orig->Access;
+ item->Name = orig->Name;
+ item->Comment = orig->Comment;
+}
+
+/* Free an Enum struct */
+void vtkParse_FreeEnum(EnumInfo *enum_info)
+{
+ free(enum_info);
+}
+
+
+/* Initialize a Using struct */
+void vtkParse_InitUsing(UsingInfo *item)
+{
+ item->ItemType = VTK_USING_INFO;
+ item->Access = VTK_ACCESS_PUBLIC;
+ item->Name = NULL;
+ item->Comment = NULL;
+ item->Scope = NULL;
+}
+
+/* Copy a Using struct */
+void vtkParse_CopyUsing(UsingInfo *item, const UsingInfo *orig)
+{
+ item->ItemType = orig->ItemType;
+ item->Access = orig->Access;
+ item->Name = orig->Name;
+ item->Comment = orig->Comment;
+ item->Scope = orig->Scope;
+}
+
+/* Free a Using struct */
+void vtkParse_FreeUsing(UsingInfo *using_info)
+{
+ free(using_info);
+}
+
+
+/* Initialize a Class struct */
+void vtkParse_InitClass(ClassInfo *cls)
+{
+ cls->ItemType = VTK_CLASS_INFO;
+ cls->Access = VTK_ACCESS_PUBLIC;
+ cls->Name = NULL;
+ cls->Comment = NULL;
+ cls->Template = NULL;
+ cls->NumberOfSuperClasses = 0;
+ cls->SuperClasses = NULL;
+ cls->NumberOfItems = 0;
+ cls->Items = NULL;
+ cls->NumberOfClasses = 0;
+ cls->Classes = NULL;
+ cls->NumberOfFunctions = 0;
+ cls->Functions = NULL;
+ cls->NumberOfConstants = 0;
+ cls->Constants = NULL;
+ cls->NumberOfVariables = 0;
+ cls->Variables = NULL;
+ cls->NumberOfEnums = 0;
+ cls->Enums = NULL;
+ cls->NumberOfTypedefs = 0;
+ cls->Typedefs = NULL;
+ cls->NumberOfUsings = 0;
+ cls->Usings = NULL;
+ cls->NumberOfNamespaces = 0;
+ cls->Namespaces = NULL;
+ cls->IsAbstract = 0;
+ cls->HasDelete = 0;
+}
+
+/* Copy a Class struct */
+void vtkParse_CopyClass(ClassInfo *cls, const ClassInfo *orig)
+{
+ int i, n;
+
+ cls->ItemType = orig->ItemType;
+ cls->Access = orig->Access;
+ cls->Name = orig->Name;
+ cls->Comment = orig->Comment;
+ cls->Template = NULL;
+
+ if (orig->Template)
+ {
+ cls->Template = (TemplateInfo *)malloc(sizeof(TemplateInfo));
+ vtkParse_CopyTemplate(cls->Template, orig->Template);
+ }
+
+ n = orig->NumberOfSuperClasses;
+ cls->NumberOfSuperClasses = n;
+ if (n)
+ {
+ cls->SuperClasses = (const char **)malloc(n*sizeof(char *));
+ for (i = 0; i < n; i++)
+ {
+ cls->SuperClasses[i] = orig->SuperClasses[i];
+ }
+ }
+
+ n = orig->NumberOfItems;
+ cls->NumberOfItems = n;
+ if (n)
+ {
+ cls->Items = (ItemInfo *)malloc(n*sizeof(ItemInfo));
+ for (i = 0; i < n; i++)
+ {
+ cls->Items[i].Type = orig->Items[i].Type;
+ cls->Items[i].Index = orig->Items[i].Index;
+ }
+ }
+
+ n = orig->NumberOfClasses;
+ cls->NumberOfClasses = n;
+ if (n)
+ {
+ cls->Classes = (ClassInfo **)malloc(n*sizeof(ClassInfo *));
+ for (i = 0; i < n; i++)
+ {
+ cls->Classes[i] = (ClassInfo *)malloc(sizeof(ClassInfo));
+ vtkParse_CopyClass(cls->Classes[i], orig->Classes[i]);
+ }
+ }
+
+ n = orig->NumberOfFunctions;
+ cls->NumberOfFunctions = n;
+ if (n)
+ {
+ cls->Functions = (FunctionInfo **)malloc(n*sizeof(FunctionInfo *));
+ for (i = 0; i < n; i++)
+ {
+ cls->Functions[i] = (FunctionInfo *)malloc(sizeof(FunctionInfo));
+ vtkParse_CopyFunction(cls->Functions[i], orig->Functions[i]);
+ }
+ }
+
+ n = orig->NumberOfConstants;
+ cls->NumberOfConstants = n;
+ if (n)
+ {
+ cls->Constants = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
+ for (i = 0; i < n; i++)
+ {
+ cls->Constants[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_CopyValue(cls->Constants[i], orig->Constants[i]);
+ }
+ }
+
+ n = orig->NumberOfVariables;
+ cls->NumberOfVariables = n;
+ if (n)
+ {
+ cls->Variables = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
+ for (i = 0; i < n; i++)
+ {
+ cls->Variables[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_CopyValue(cls->Variables[i], orig->Variables[i]);
+ }
+ }
+
+ n = orig->NumberOfEnums;
+ cls->NumberOfEnums = n;
+ if (n)
+ {
+ cls->Enums = (EnumInfo **)malloc(n*sizeof(EnumInfo *));
+ for (i = 0; i < n; i++)
+ {
+ cls->Enums[i] = (EnumInfo *)malloc(sizeof(EnumInfo));
+ vtkParse_CopyEnum(cls->Enums[i], orig->Enums[i]);
+ }
+ }
+
+ n = orig->NumberOfTypedefs;
+ cls->NumberOfTypedefs = n;
+ if (n)
+ {
+ cls->Typedefs = (ValueInfo **)malloc(n*sizeof(ValueInfo *));
+ for (i = 0; i < n; i++)
+ {
+ cls->Typedefs[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_CopyValue(cls->Typedefs[i], orig->Typedefs[i]);
+ }
+ }
+
+ n = orig->NumberOfUsings;
+ cls->NumberOfUsings = n;
+ if (n)
+ {
+ cls->Usings = (UsingInfo **)malloc(n*sizeof(UsingInfo *));
+ for (i = 0; i < n; i++)
+ {
+ cls->Usings[i] = (UsingInfo *)malloc(sizeof(UsingInfo));
+ vtkParse_CopyUsing(cls->Usings[i], orig->Usings[i]);
+ }
+ }
+
+ n = orig->NumberOfNamespaces;
+ cls->NumberOfNamespaces = n;
+ if (n)
+ {
+ cls->Namespaces = (NamespaceInfo **)malloc(n*sizeof(NamespaceInfo *));
+ for (i = 0; i < n; i++)
+ {
+ cls->Namespaces[i] = (NamespaceInfo *)malloc(sizeof(NamespaceInfo));
+ vtkParse_CopyNamespace(cls->Namespaces[i], orig->Namespaces[i]);
+ }
+ }
+
+ cls->IsAbstract = orig->IsAbstract;
+ cls->HasDelete = orig->HasDelete;
+}
+
+/* Free a Class struct */
+void vtkParse_FreeClass(ClassInfo *class_info)
+{
+ int j, m;
+
+ if (class_info->Template) { vtkParse_FreeTemplate(class_info->Template); }
+
+ m = class_info->NumberOfSuperClasses;
+ if (m > 0) { free((char **)class_info->SuperClasses); }
+
+ m = class_info->NumberOfClasses;
+ for (j = 0; j < m; j++) { vtkParse_FreeClass(class_info->Classes[j]); }
+ if (m > 0) { free(class_info->Classes); }
+
+ m = class_info->NumberOfFunctions;
+ for (j = 0; j < m; j++) { vtkParse_FreeFunction(class_info->Functions[j]); }
+ if (m > 0) { free(class_info->Functions); }
+
+ m = class_info->NumberOfConstants;
+ for (j = 0; j < m; j++) { vtkParse_FreeValue(class_info->Constants[j]); }
+ if (m > 0) { free(class_info->Constants); }
+
+ m = class_info->NumberOfVariables;
+ for (j = 0; j < m; j++) { vtkParse_FreeValue(class_info->Variables[j]); }
+ if (m > 0) { free(class_info->Variables); }
+
+ m = class_info->NumberOfEnums;
+ for (j = 0; j < m; j++) { vtkParse_FreeEnum(class_info->Enums[j]); }
+ if (m > 0) { free(class_info->Enums); }
+
+ m = class_info->NumberOfTypedefs;
+ for (j = 0; j < m; j++) { vtkParse_FreeValue(class_info->Typedefs[j]); }
+ if (m > 0) { free(class_info->Typedefs); }
+
+ m = class_info->NumberOfUsings;
+ for (j = 0; j < m; j++) { vtkParse_FreeUsing(class_info->Usings[j]); }
+ if (m > 0) { free(class_info->Usings); }
+
+ m = class_info->NumberOfNamespaces;
+ for (j = 0; j < m; j++) { vtkParse_FreeNamespace(class_info->Namespaces[j]); }
+ if (m > 0) { free(class_info->Namespaces); }
+
+ if (class_info->NumberOfItems > 0) { free(class_info->Items); }
+
+ free(class_info);
+}
+
+
+/* Initialize a Namespace struct */
+void vtkParse_InitNamespace(NamespaceInfo *name_info)
+{
+ vtkParse_InitClass(name_info);
+ name_info->ItemType = VTK_NAMESPACE_INFO;
+}
+
+/* Copy a Namespace struct */
+void vtkParse_CopyNamespace(NamespaceInfo *ninfo, const NamespaceInfo *orig)
+{
+ vtkParse_CopyClass(ninfo, orig);
+}
+
+/* Free a Namespace struct */
+void vtkParse_FreeNamespace(NamespaceInfo *namespace_info)
+{
+ vtkParse_FreeClass(namespace_info);
+}
+
+
+/* This method is used for extending dynamic arrays in a progression of
+ * powers of two. If "n" reaches a power of two, then the array size is
+ * doubled so that "n" can be safely incremented. */
+static void *array_size_check(
+ void *arraymem, size_t size, int n)
+{
+ /* if empty, alloc for the first time */
+ if (n == 0)
+ {
+ return malloc(size);
+ }
+ /* if count is power of two, reallocate with double size */
+ else if ((n & (n-1)) == 0)
+ {
+ return realloc(arraymem, (n << 1)*size);
+ }
+
+ /* no reallocation, just return the original array */
+ return arraymem;
+}
+
+
+/* Utility method to add an included file to a FileInfo */
+void vtkParse_AddIncludeToFile(
+ FileInfo *file_info, FileInfo *include_file)
+{
+ file_info->Includes = (FileInfo **)array_size_check(
+ (FileInfo **)file_info->Includes, sizeof(FileInfo *),
+ file_info->NumberOfIncludes);
+
+ file_info->Includes[file_info->NumberOfIncludes++] = include_file;
+
+ if (!include_file->Strings)
+ {
+ include_file->Strings = file_info->Strings;
+ }
+}
+
+/* Utility method to add a const char pointer to an array */
+void vtkParse_AddStringToArray(
+ const char ***valueArray, int *count, const char *value)
+{
+ *valueArray = (const char **)array_size_check(
+ (char **)*valueArray, sizeof(const char *), *count);
+
+ (*valueArray)[(*count)++] = value;
+}
+
+/* Utility method to add an item to an array */
+void vtkParse_AddItemToArray(
+ ItemInfo **valueArray, int *count, parse_item_t type, int idx)
+{
+ int n = *count;
+ ItemInfo *values = *valueArray;
+
+ values = (ItemInfo *)array_size_check(values, sizeof(ItemInfo), n);
+
+ values[n].Type = type;
+ values[n].Index = idx;
+ *count = n+1;
+ *valueArray = values;
+}
+
+/* Add a ClassInfo to a ClassInfo */
+void vtkParse_AddClassToClass(ClassInfo *info, ClassInfo *item)
+{
+ vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+ item->ItemType, info->NumberOfClasses);
+ info->Classes = (ClassInfo **)array_size_check(
+ info->Classes, sizeof(ClassInfo *), info->NumberOfClasses);
+ info->Classes[info->NumberOfClasses++] = item;
+}
+
+/* Add a FunctionInfo to a ClassInfo */
+void vtkParse_AddFunctionToClass(ClassInfo *info, FunctionInfo *item)
+{
+ vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+ item->ItemType, info->NumberOfFunctions);
+ info->Functions = (FunctionInfo **)array_size_check(
+ info->Functions, sizeof(FunctionInfo *), info->NumberOfFunctions);
+ info->Functions[info->NumberOfFunctions++] = item;
+}
+
+/* Add a EnumInfo to a ClassInfo */
+void vtkParse_AddEnumToClass(ClassInfo *info, EnumInfo *item)
+{
+ vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+ item->ItemType, info->NumberOfEnums);
+ info->Enums = (EnumInfo **)array_size_check(
+ info->Enums, sizeof(EnumInfo *), info->NumberOfEnums);
+ info->Enums[info->NumberOfEnums++] = item;
+}
+
+/* Add a Constant ValueInfo to a ClassInfo */
+void vtkParse_AddConstantToClass(ClassInfo *info, ValueInfo *item)
+{
+ vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+ item->ItemType, info->NumberOfConstants);
+ info->Constants = (ValueInfo **)array_size_check(
+ info->Constants, sizeof(ValueInfo *), info->NumberOfConstants);
+ info->Constants[info->NumberOfConstants++] = item;
+}
+
+/* Add a Variable ValueInfo to a ClassInfo */
+void vtkParse_AddVariableToClass(ClassInfo *info, ValueInfo *item)
+{
+ vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+ item->ItemType, info->NumberOfVariables);
+ info->Variables = (ValueInfo **)array_size_check(
+ info->Variables, sizeof(ValueInfo *), info->NumberOfVariables);
+ info->Variables[info->NumberOfVariables++] = item;
+}
+
+/* Add a Typedef ValueInfo to a ClassInfo */
+void vtkParse_AddTypedefToClass(ClassInfo *info, ValueInfo *item)
+{
+ vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+ item->ItemType, info->NumberOfTypedefs);
+ info->Typedefs = (ValueInfo **)array_size_check(
+ info->Typedefs, sizeof(ValueInfo *), info->NumberOfTypedefs);
+ info->Typedefs[info->NumberOfTypedefs++] = item;
+}
+
+/* Add a UsingInfo to a ClassInfo */
+void vtkParse_AddUsingToClass(ClassInfo *info, UsingInfo *item)
+{
+ vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+ item->ItemType, info->NumberOfUsings);
+ info->Usings = (UsingInfo **)array_size_check(
+ info->Usings, sizeof(UsingInfo *), info->NumberOfUsings);
+ info->Usings[info->NumberOfUsings++] = item;
+}
+
+
+/* Add a NamespaceInfo to a NamespaceInfo */
+void vtkParse_AddNamespaceToNamespace(NamespaceInfo *info, NamespaceInfo *item)
+{
+ vtkParse_AddItemToArray(&info->Items, &info->NumberOfItems,
+ item->ItemType, info->NumberOfNamespaces);
+ info->Namespaces = (NamespaceInfo **)array_size_check(
+ info->Namespaces, sizeof(NamespaceInfo *), info->NumberOfNamespaces);
+ info->Namespaces[info->NumberOfNamespaces++] = item;
+}
+
+/* Add a ClassInfo to a NamespaceInfo */
+void vtkParse_AddClassToNamespace(NamespaceInfo *info, ClassInfo *item)
+{
+ vtkParse_AddClassToClass(info, item);
+}
+
+/* Add a FunctionInfo to a NamespaceInfo */
+void vtkParse_AddFunctionToNamespace(NamespaceInfo *info, FunctionInfo *item)
+{
+ vtkParse_AddFunctionToClass(info, item);
+}
+
+/* Add a EnumInfo to a NamespaceInfo */
+void vtkParse_AddEnumToNamespace(NamespaceInfo *info, EnumInfo *item)
+{
+ vtkParse_AddEnumToClass(info, item);
+}
+
+/* Add a Constant ValueInfo to a NamespaceInfo */
+void vtkParse_AddConstantToNamespace(NamespaceInfo *info, ValueInfo *item)
+{
+ vtkParse_AddConstantToClass(info, item);
+}
+
+/* Add a Variable ValueInfo to a NamespaceInfo */
+void vtkParse_AddVariableToNamespace(NamespaceInfo *info, ValueInfo *item)
+{
+ vtkParse_AddVariableToClass(info, item);
+}
+
+/* Add a Typedef ValueInfo to a NamespaceInfo */
+void vtkParse_AddTypedefToNamespace(NamespaceInfo *info, ValueInfo *item)
+{
+ vtkParse_AddTypedefToClass(info, item);
+}
+
+/* Add a UsingInfo to a NamespaceInfo */
+void vtkParse_AddUsingToNamespace(NamespaceInfo *info, UsingInfo *item)
+{
+ vtkParse_AddUsingToClass(info, item);
+}
+
+
+/* Add a ValueInfo parameter to a FunctionInfo */
+void vtkParse_AddParameterToFunction(FunctionInfo *info, ValueInfo *item)
+{
+ info->Parameters = (ValueInfo **)array_size_check(
+ info->Parameters, sizeof(ValueInfo *), info->NumberOfParameters);
+ info->Parameters[info->NumberOfParameters++] = item;
+}
+
+
+/* Add a ValueInfo to a TemplateInfo */
+void vtkParse_AddParameterToTemplate(TemplateInfo *info, ValueInfo *item)
+{
+ info->Parameters = (ValueInfo **)array_size_check(
+ info->Parameters, sizeof(ValueInfo *), info->NumberOfParameters);
+ info->Parameters[info->NumberOfParameters++] = item;
+}
+
+
+/* Add default constructors if they do not already exist */
+void vtkParse_AddDefaultConstructors(ClassInfo *cls, StringCache *cache)
+{
+ FunctionInfo *func;
+ ValueInfo *param;
+ size_t k, l;
+ int i, n;
+ int default_constructor = 1;
+ int copy_constructor = 1;
+ char *tname;
+ const char *ccname;
+
+ if (cls == NULL || cls->Name == NULL)
+ {
+ return;
+ }
+
+ n = cls->NumberOfFunctions;
+ for (i = 0; i < n; i++)
+ {
+ func = cls->Functions[i];
+ if (func->Name && strcmp(func->Name, cls->Name) == 0)
+ {
+ default_constructor = 0;
+
+ if (func->NumberOfParameters == 1)
+ {
+ param = func->Parameters[0];
+ if (param->Class &&
+ strcmp(param->Class, cls->Name) == 0 &&
+ (param->Type & VTK_PARSE_POINTER_MASK) == 0)
+ {
+ copy_constructor = 0;
+ }
+ }
+ }
+ }
+
+ if (default_constructor)
+ {
+ func = (FunctionInfo *)malloc(sizeof(FunctionInfo));
+ vtkParse_InitFunction(func);
+ func->Class = cls->Name;
+ func->Name = cls->Name;
+ k = strlen(cls->Name);
+ tname = vtkParse_NewString(cache, k + 2);
+ strcpy(tname, cls->Name);
+ strcpy(&tname[k], "()");
+ func->Signature = tname;
+ vtkParse_AddFunctionToClass(cls, func);
+ }
+
+ if (copy_constructor)
+ {
+ ccname = cls->Name;
+
+ if (cls->Template)
+ {
+ /* specialize the name */
+ n = cls->Template->NumberOfParameters;
+
+ k = strlen(cls->Name) + 2;
+ for (i = 0; i < n; i++)
+ {
+ if (cls->Template->Parameters[i]->Name)
+ {
+ k += strlen(cls->Template->Parameters[i]->Name) + 2;
+ }
+ }
+ tname = vtkParse_NewString(cache, k);
+ strcpy(tname, cls->Name);
+ k = strlen(tname);
+ tname[k++] = '<';
+ for (i = 0; i < n; i++)
+ {
+ if (cls->Template->Parameters[i]->Name)
+ {
+ strcpy(&tname[k], cls->Template->Parameters[i]->Name);
+ k += strlen(cls->Template->Parameters[i]->Name);
+ }
+ if (i+1 < n)
+ {
+ tname[k++] = ',';
+ tname[k++] = ' ';
+ }
+ }
+ tname[k++] = '>';
+ tname[k] = '\0';
+ ccname = tname;
+ }
+
+ func = (FunctionInfo *)malloc(sizeof(FunctionInfo));
+ vtkParse_InitFunction(func);
+ func->Class = cls->Name;
+ func->Name = cls->Name;
+ k = strlen(cls->Name);
+ l = strlen(ccname);
+ tname = vtkParse_NewString(cache, k + l + 9);
+ strcpy(tname, cls->Name);
+ strcpy(&tname[k], "(const &");
+ strcpy(&tname[k+8], ccname);
+ strcpy(&tname[k+8+l], ")");
+ func->Signature = tname;
+ param = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_InitValue(param);
+ param->Type = (VTK_PARSE_OBJECT_REF | VTK_PARSE_CONST);
+ param->Class = ccname;
+ vtkParse_AddParameterToFunction(func, param);
+ vtkParse_AddFunctionToClass(cls, func);
+ }
+}
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkParseData.h
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+/*-------------------------------------------------------------------------
+ Copyright (c) 2010 David Gobbi.
+
+ Contributed to the VisualizationToolkit by the author in May 2010
+ under the terms of the Visualization Toolkit 2008 copyright.
+-------------------------------------------------------------------------*/
+
+/*
+ Data structures used by vtkParse.
+*/
+
+#ifndef VTK_PARSE_DATA_H
+#define VTK_PARSE_DATA_H
+
+#include "vtkParseType.h"
+#include "vtkParseString.h"
+
+/* legacy */
+#ifndef VTK_PARSE_LEGACY_REMOVE
+#define MAX_ARGS 20
+#endif
+
+/**
+ * Access flags
+ */
+typedef enum _parse_access_t
+{
+ VTK_ACCESS_PUBLIC = 0,
+ VTK_ACCESS_PROTECTED = 1,
+ VTK_ACCESS_PRIVATE = 2
+} parse_access_t;
+
+/**
+ * ItemType constants
+ */
+typedef enum _parse_item_t
+{
+ VTK_NAMESPACE_INFO = 1,
+ VTK_CLASS_INFO = 2,
+ VTK_STRUCT_INFO = 3,
+ VTK_UNION_INFO = 4,
+ VTK_ENUM_INFO = 5,
+ VTK_FUNCTION_INFO = 6,
+ VTK_VARIABLE_INFO = 7,
+ VTK_CONSTANT_INFO = 8,
+ VTK_TYPEDEF_INFO = 9,
+ VTK_USING_INFO = 10
+} parse_item_t;
+
+/**
+ * ItemInfo just contains an index
+ */
+typedef struct _ItemInfo
+{
+ parse_item_t Type;
+ int Index;
+} ItemInfo;
+
+/* forward declarations */
+struct _ValueInfo;
+struct _FunctionInfo;
+struct _FileInfo;
+typedef struct _ValueInfo ValueInfo;
+typedef struct _FunctionInfo FunctionInfo;
+typedef struct _FileInfo FileInfo;
+
+/**
+ * TemplateInfo holds template definitions
+ */
+typedef struct _TemplateInfo
+{
+ int NumberOfParameters;
+ ValueInfo **Parameters;
+} TemplateInfo;
+
+/**
+ * ValueInfo is for typedefs, constants, variables,
+ * function parameters, and return values
+ *
+ * Note that Dimensions is an array of char pointers, in
+ * order to support dimensions that are sized according to
+ * template parameter values or according to named constants.
+ */
+struct _ValueInfo
+{
+ parse_item_t ItemType;
+ parse_access_t Access;
+ const char *Name;
+ const char *Comment;
+ const char *Value; /* for vars or default paramter values */
+ unsigned int Type; /* as defined in vtkParseType.h */
+ const char *Class; /* classname for type */
+ int Count; /* total number of values, if known */
+ const char *CountHint; /* hint about how to get the count */
+ int NumberOfDimensions; /* dimensionality for arrays */
+ const char **Dimensions; /* dimensions for arrays */
+ FunctionInfo *Function; /* for function pointer values */
+ TemplateInfo *Template; /* template parameters, or NULL */
+ int IsStatic; /* for class variables only */
+ int IsEnum; /* for constants only */
+};
+
+/**
+ * FunctionInfo is for functions and methods
+ */
+struct _FunctionInfo
+{
+ parse_item_t ItemType;
+ parse_access_t Access;
+ const char *Name;
+ const char *Comment;
+ const char *Class; /* class name for methods */
+ const char *Signature; /* function signature as text */
+ TemplateInfo *Template; /* template parameters, or NULL */
+ int NumberOfParameters;
+ ValueInfo **Parameters;
+ ValueInfo *ReturnValue; /* NULL for constructors and destructors */
+ const char *Macro; /* the macro that defined this function */
+ const char *SizeHint; /* hint the size e.g. for operator[] */
+ int IsOperator;
+ int IsVariadic;
+ int IsLegacy; /* marked as a legacy method or function */
+ int IsStatic; /* methods only */
+ int IsVirtual; /* methods only */
+ int IsPureVirtual; /* methods only */
+ int IsConst; /* methods only */
+ int IsExplicit; /* constructors only */
+#ifndef VTK_PARSE_LEGACY_REMOVE
+ int NumberOfArguments; /* legacy */
+ unsigned int ArgTypes[MAX_ARGS]; /* legacy */
+ const char *ArgClasses[MAX_ARGS];/* legacy */
+ int ArgCounts[MAX_ARGS]; /* legacy */
+ unsigned int ReturnType; /* legacy */
+ const char *ReturnClass; /* legacy */
+ int HaveHint; /* legacy */
+ int HintSize; /* legacy */
+ int ArrayFailure;/* legacy */
+ int IsPublic; /* legacy */
+ int IsProtected; /* legacy */
+#endif
+};
+
+/**
+ * EnumInfo is for enums
+ * Constants are at the same level as the Enum, not inside it.
+ */
+typedef struct _EnumInfo
+{
+ parse_item_t ItemType;
+ parse_access_t Access;
+ const char *Name;
+ const char *Comment;
+} EnumInfo;
+
+/**
+ * UsingInfo is for using directives
+ */
+typedef struct _UsingInfo
+{
+ parse_item_t ItemType;
+ parse_access_t Access;
+ const char *Name; /* null for using whole namespace */
+ const char *Comment;
+ const char *Scope; /* the namespace or class */
+} UsingInfo;
+
+/**
+ * ClassInfo is for classes, structs, unions, and namespaces
+ */
+typedef struct _ClassInfo
+{
+ parse_item_t ItemType;
+ parse_access_t Access;
+ const char *Name;
+ const char *Comment;
+ TemplateInfo *Template;
+ int NumberOfSuperClasses;
+ const char **SuperClasses;
+ int NumberOfItems;
+ ItemInfo *Items;
+ int NumberOfClasses;
+ struct _ClassInfo **Classes;
+ int NumberOfFunctions;
+ FunctionInfo **Functions;
+ int NumberOfConstants;
+ ValueInfo **Constants;
+ int NumberOfVariables;
+ ValueInfo **Variables;
+ int NumberOfEnums;
+ EnumInfo **Enums;
+ int NumberOfTypedefs;
+ ValueInfo **Typedefs;
+ int NumberOfUsings;
+ UsingInfo **Usings;
+ int NumberOfNamespaces;
+ struct _ClassInfo **Namespaces;
+ int IsAbstract;
+ int HasDelete;
+} ClassInfo;
+
+/**
+ * Namespace is for namespaces
+ */
+typedef struct _ClassInfo NamespaceInfo;
+
+/**
+ * FileInfo is for header files
+ */
+struct _FileInfo
+{
+ const char *FileName;
+ const char *NameComment;
+ const char *Description;
+ const char *Caveats;
+ const char *SeeAlso;
+
+ int NumberOfIncludes;
+ struct _FileInfo **Includes;
+ ClassInfo *MainClass;
+ NamespaceInfo *Contents;
+ StringCache *Strings;
+};
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Initializer methods
+ */
+/*@{*/
+void vtkParse_InitFile(FileInfo *file_info);
+void vtkParse_InitNamespace(NamespaceInfo *namespace_info);
+void vtkParse_InitClass(ClassInfo *cls);
+void vtkParse_InitFunction(FunctionInfo *func);
+void vtkParse_InitValue(ValueInfo *val);
+void vtkParse_InitEnum(EnumInfo *item);
+void vtkParse_InitUsing(UsingInfo *item);
+void vtkParse_InitTemplate(TemplateInfo *arg);
+/*@}*/
+
+/**
+ * Copy methods
+ *
+ * Strings are not deep-copied, they are assumed to be persistent.
+ */
+/*@{*/
+void vtkParse_CopyNamespace(NamespaceInfo *data, const NamespaceInfo *orig);
+void vtkParse_CopyClass(ClassInfo *data, const ClassInfo *orig);
+void vtkParse_CopyFunction(FunctionInfo *data, const FunctionInfo *orig);
+void vtkParse_CopyValue(ValueInfo *data, const ValueInfo *orig);
+void vtkParse_CopyEnum(EnumInfo *data, const EnumInfo *orig);
+void vtkParse_CopyUsing(UsingInfo *data, const UsingInfo *orig);
+void vtkParse_CopyTemplate(TemplateInfo *data, const TemplateInfo *orig);
+/*@}*/
+
+/**
+ * Free methods
+ *
+ * Strings are not freed, they are assumed to be persistent.
+ */
+/*@{*/
+void vtkParse_FreeFile(FileInfo *file_info);
+void vtkParse_FreeNamespace(NamespaceInfo *namespace_info);
+void vtkParse_FreeClass(ClassInfo *cls);
+void vtkParse_FreeFunction(FunctionInfo *func);
+void vtkParse_FreeValue(ValueInfo *val);
+void vtkParse_FreeEnum(EnumInfo *item);
+void vtkParse_FreeUsing(UsingInfo *item);
+void vtkParse_FreeTemplate(TemplateInfo *arg);
+/*@}*/
+
+
+/**
+ * Add a string to an array of strings, grow array as necessary.
+ */
+void vtkParse_AddStringToArray(
+ const char ***valueArray, int *count, const char *value);
+
+/**
+ * Expand the Item array for classes and namespaces.
+ */
+void vtkParse_AddItemToArray(
+ ItemInfo **valueArray, int *count, parse_item_t type, int idx);
+
+
+/**
+ * Add various items to the structs.
+ */
+/*@{*/
+void vtkParse_AddIncludeToFile(FileInfo *info, FileInfo *item);
+void vtkParse_AddClassToClass(ClassInfo *info, ClassInfo *item);
+void vtkParse_AddFunctionToClass(ClassInfo *info, FunctionInfo *item);
+void vtkParse_AddEnumToClass(ClassInfo *info, EnumInfo *item);
+void vtkParse_AddConstantToClass(ClassInfo *info, ValueInfo *item);
+void vtkParse_AddVariableToClass(ClassInfo *info, ValueInfo *item);
+void vtkParse_AddTypedefToClass(ClassInfo *info, ValueInfo *item);
+void vtkParse_AddUsingToClass(ClassInfo *info, UsingInfo *item);
+void vtkParse_AddNamespaceToNamespace(NamespaceInfo *info,NamespaceInfo *item);
+void vtkParse_AddClassToNamespace(NamespaceInfo *info, ClassInfo *item);
+void vtkParse_AddFunctionToNamespace(NamespaceInfo *info, FunctionInfo *item);
+void vtkParse_AddEnumToNamespace(NamespaceInfo *info, EnumInfo *item);
+void vtkParse_AddConstantToNamespace(NamespaceInfo *info, ValueInfo *item);
+void vtkParse_AddVariableToNamespace(NamespaceInfo *info, ValueInfo *item);
+void vtkParse_AddTypedefToNamespace(NamespaceInfo *info, ValueInfo *item);
+void vtkParse_AddUsingToNamespace(NamespaceInfo *info, UsingInfo *item);
+void vtkParse_AddParameterToFunction(FunctionInfo *info, ValueInfo *item);
+void vtkParse_AddParameterToTemplate(TemplateInfo *info, ValueInfo *item);
+/*@}*/
+
+/**
+ * Add default constructors to a class if they do not already exist
+ */
+void vtkParse_AddDefaultConstructors(ClassInfo *data, StringCache *cache);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkParseExtras.c
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+/*-------------------------------------------------------------------------
+ Copyright (c) 2011 David Gobbi.
+
+ Contributed to the VisualizationToolkit by the author in May 2011
+ under the terms of the Visualization Toolkit 2008 copyright.
+-------------------------------------------------------------------------*/
+
+#include "vtkParseExtras.h"
+#include "vtkParseString.h"
+#include "vtkType.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+/* skip over an identifier */
+static size_t vtkparse_id_len(const char *text)
+{
+ size_t i = 0;
+ char c = text[0];
+
+ if ((c >= 'a' && c <= 'z') ||
+ (c >= 'A' && c <= 'Z') ||
+ c == '_')
+ {
+ do
+ {
+ c = text[++i];
+ }
+ while ((c >= 'a' && c <= 'z') ||
+ (c >= 'A' && c <= 'Z') ||
+ (c >= '0' && c <= '9') ||
+ c == '_');
+ }
+
+ return i;
+}
+
+/* skip over numbers, int or float, including suffixes */
+static size_t vtkparse_number_len(const char *text)
+{
+ size_t i = 0;
+ char c = text[0];
+
+ if (c == '.')
+ {
+ c = text[1];
+ }
+
+ if (c >= '0' && c <= '9')
+ {
+ do
+ {
+ do
+ {
+ c = text[++i];
+ }
+ while ((c >= '0' && c <= '9') ||
+ (c >= 'a' && c <= 'z') ||
+ (c >= 'A' && c <= 'Z') ||
+ c == '_' || c == '.');
+ }
+ while ((c == '-' || c == '+') &&
+ (text[i-1] == 'e' || text[i-1] == 'E'));
+ }
+
+ return i;
+}
+
+/* skip over string and char literals. */
+static size_t vtkparse_quote_len(const char *text)
+{
+ size_t i = 0;
+ const char qc = text[0];
+ char c = text[0];
+
+ if (c == '\'' || c == '\"')
+ {
+ do
+ {
+ do
+ {
+ c = text[++i];
+ }
+ while (c != qc && c != '\n' && c != '\0');
+ }
+ while (c == qc && text[i-1] == '\\');
+
+ if (c == qc)
+ {
+ ++i;
+ }
+ }
+
+ return i;
+}
+
+/* skip over an expression in brackets */
+static size_t vtkparse_bracket_len(const char *text)
+{
+ size_t i = 0;
+ size_t j = 1;
+ char bc = text[0];
+ char tc = 0;
+ char semi = ';';
+ char c;
+
+ if (bc == '(') { tc = ')'; }
+ else if (bc == '[') { tc = ']'; }
+ else if (bc == '{') { tc = '}'; semi = '\0'; }
+ else if (bc == '<') { tc = '>'; }
+ else { return 0; }
+
+ do
+ {
+ i += j;
+ j = 1;
+ c = text[i];
+ if (c == '\'' || c == '\"')
+ {
+ j = vtkparse_quote_len(&text[i]);
+ }
+ else if (c == bc || c == '(' || c == '[' || c == '{')
+ {
+ j = vtkparse_bracket_len(&text[i]);
+ }
+ }
+ while (c != tc && c != ')' && c != ']' && c != '}' &&
+ c != '\0' && c != '\n' && c != semi && j != 0);
+
+ if (c == tc)
+ {
+ i++;
+ }
+
+ return i;
+}
+
+/* skip over a name that is neither scoped or templated, return the
+ * total number of characters in the name */
+size_t vtkParse_IdentifierLength(const char *text)
+{
+ return vtkparse_id_len(text);
+}
+
+/* skip over a name that might be templated, return the
+ * total number of characters in the name */
+size_t vtkParse_UnscopedNameLength(const char *text)
+{
+ size_t i = 0;
+
+ i += vtkparse_id_len(text);
+ if (text[i] == '<')
+ {
+ i += vtkparse_bracket_len(&text[i]);
+ if (text[i-1] != '>')
+ {
+ fprintf(stderr, "Bad template args %*.*s\n", (int)i, (int)i, text);
+ assert(text[i-1] == '>');
+ return 0;
+ }
+ }
+
+ return i;
+}
+
+/* skip over a name that might be scoped or templated, return the
+ * total number of characters in the name */
+size_t vtkParse_NameLength(const char *text)
+{
+ size_t i = 0;
+ do
+ {
+ if (text[i] == ':' && text[i+1] == ':') { i += 2; }
+ i += vtkParse_UnscopedNameLength(&text[i]);
+ }
+ while (text[i] == ':' && text[i+1] == ':');
+ return i;
+}
+
+/* Search and replace, return the initial string if no replacements
+ * occurred, otherwise return a new string. */
+static const char *vtkparse_string_replace(
+ StringCache *cache, const char *str1,
+ int n, const char *name[], const char *val[])
+{
+ const char *cp = str1;
+ char result_store[1024];
+ size_t resultMaxLen = 1024;
+ char *result, *tmp;
+ int k;
+ size_t i, j, l, m;
+ size_t lastPos, nameBegin, nameEnd;
+ int replaced = 0;
+ int any_replaced = 0;
+
+ result = result_store;
+
+ if (n == 0)
+ {
+ return str1;
+ }
+
+ i = 0;
+ j = 0;
+ result[j] = '\0';
+
+ while (cp[i] != '\0')
+ {
+ lastPos = i;
+
+ /* skip all chars that aren't part of a name */
+ while ((cp[i] < 'a' || cp[i] > 'z') &&
+ (cp[i] < 'A' || cp[i] > 'Z') &&
+ cp[i] != '_' && cp[i] != '\0')
+ {
+ if (cp[i] == '\'' || cp[i] == '\"')
+ {
+ i += vtkparse_quote_len(&cp[i]);
+ }
+ else if (cp[i] >= '0' && cp[i] <= '9')
+ {
+ i += vtkparse_number_len(&cp[i]);
+ }
+ else
+ {
+ i++;
+ }
+ }
+ nameBegin = i;
+
+ /* skip all chars that are part of a name */
+ i += vtkparse_id_len(&cp[i]);
+ nameEnd = i;
+
+ /* search through the list of names to replace */
+ replaced = 0;
+ m = nameEnd - nameBegin;
+ for (k = 0; k < n; k++)
+ {
+ l = strlen(name[k]);
+ if (l > 0 && l == m && strncmp(&cp[nameBegin], name[k], l) == 0)
+ {
+ m = strlen(val[k]);
+ replaced = 1;
+ any_replaced = 1;
+ break;
+ }
+ }
+
+ /* expand the storage space if needed */
+ if (j + m + (nameBegin - lastPos) + 1 >= resultMaxLen)
+ {
+ resultMaxLen *= 2;
+ tmp = (char *)malloc(resultMaxLen);
+ strcpy(tmp, result);
+ if (result != result_store)
+ {
+ free(result);
+ }
+ result = tmp;
+ }
+
+ /* copy the old bits */
+ if (nameBegin > lastPos)
+ {
+ strncpy(&result[j], &cp[lastPos], nameBegin - lastPos);
+ j += (nameBegin - lastPos);
+ }
+
+ /* do the replacement */
+ if (replaced)
+ {
+ strncpy(&result[j], val[k], m);
+ j += m;
+ /* guard against creating double ">>" */
+ if (val[k][m-1] == '>' && cp[nameEnd] == '>')
+ {
+ result[j++] = ' ';
+ }
+ }
+ else if (nameEnd > nameBegin)
+ {
+ strncpy(&result[j], &cp[nameBegin], nameEnd - nameBegin);
+ j += (nameEnd - nameBegin);
+ }
+
+ result[j] = '\0';
+ }
+
+ if (cache)
+ {
+ if (any_replaced)
+ {
+ /* use the efficient CacheString method */
+ cp = vtkParse_CacheString(cache, result, j);
+ if (result != result_store)
+ {
+ free(result);
+ }
+ }
+ }
+ else
+ {
+ if (any_replaced)
+ {
+ /* return a string that was allocated with malloc */
+ if (result == result_store)
+ {
+ tmp = (char *)malloc(strlen(result) + 1);
+ strcpy(tmp, result);
+ result = tmp;
+ }
+ cp = result;
+ }
+ }
+
+ return cp;
+}
+
+/* Wherever one of the specified names exists inside a Value or inside
+ * a Dimension size, replace it with the corresponding val string. */
+void vtkParse_ExpandValues(
+ ValueInfo *valinfo, StringCache *cache,
+ int n, const char *name[], const char *val[])
+{
+ int j, m, dim, count;
+ const char *cp;
+
+ if (valinfo->Value)
+ {
+ valinfo->Value = vtkparse_string_replace(
+ cache, valinfo->Value, n, name, val);
+ }
+
+ m = valinfo->NumberOfDimensions;
+ if (m)
+ {
+ count = 1;
+ for (j = 0; j < m; j++)
+ {
+ cp = valinfo->Dimensions[j];
+ if (cp)
+ {
+ cp = vtkparse_string_replace(cache, cp, n, name, val);
+ valinfo->Dimensions[j] = cp;
+
+ /* check whether dimension has become an integer literal */
+ if (cp[0] == '0' && (cp[1] == 'x' || cp[1] == 'X')) { cp += 2; }
+ while (*cp >= '0' && *cp <= '9') { cp++; }
+ while (*cp == 'u' || *cp == 'l' || *cp == 'U' || *cp == 'L') { cp++; }
+ dim = 0;
+ if (*cp == '\0')
+ {
+ dim = (int)strtol(valinfo->Dimensions[j], NULL, 0);
+ }
+ count *= dim;
+ }
+ }
+
+ /* update count if all values are integer literals */
+ if (count)
+ {
+ valinfo->Count = count;
+ }
+ }
+}
+
+/* Expand a typedef within a type declaration. */
+void vtkParse_ExpandTypedef(
+ ValueInfo *valinfo, ValueInfo *typedefinfo)
+{
+ const char *classname;
+ unsigned int baseType;
+ unsigned int pointers;
+ unsigned int refbit;
+ unsigned int qualifiers;
+ unsigned int tmp1, tmp2;
+ int i;
+
+ classname = typedefinfo->Class;
+ baseType = (typedefinfo->Type & VTK_PARSE_BASE_TYPE);
+ pointers = (typedefinfo->Type & VTK_PARSE_POINTER_MASK);
+ refbit = (valinfo->Type & VTK_PARSE_REF);
+ qualifiers = (typedefinfo->Type & VTK_PARSE_CONST);
+
+ /* handle const */
+ if ((valinfo->Type & VTK_PARSE_CONST) != 0)
+ {
+ if ((pointers & VTK_PARSE_POINTER_LOWMASK) != 0)
+ {
+ if ((pointers & VTK_PARSE_POINTER_LOWMASK) != VTK_PARSE_ARRAY)
+ {
+ /* const turns into const pointer */
+ pointers = (pointers & ~VTK_PARSE_POINTER_LOWMASK);
+ pointers = (pointers | VTK_PARSE_CONST_POINTER);
+ }
+ }
+ else
+ {
+ /* const remains as const value */
+ qualifiers = (qualifiers | VTK_PARSE_CONST);
+ }
+ }
+
+ /* make a reversed copy of the pointer bitfield */
+ tmp1 = (valinfo->Type & VTK_PARSE_POINTER_MASK);
+ tmp2 = 0;
+ while (tmp1)
+ {
+ tmp2 = ((tmp2 << 2) | (tmp1 & VTK_PARSE_POINTER_LOWMASK));
+ tmp1 = ((tmp1 >> 2) & VTK_PARSE_POINTER_MASK);
+ }
+
+ /* turn pointers into zero-element arrays where necessary */
+ if ((pointers & VTK_PARSE_POINTER_LOWMASK) == VTK_PARSE_ARRAY)
+ {
+ tmp2 = ((tmp2 >> 2) & VTK_PARSE_POINTER_MASK);
+ while (tmp2)
+ {
+ vtkParse_AddStringToArray(
+ &valinfo->Dimensions, &valinfo->NumberOfDimensions, "");
+ tmp2 = ((tmp2 >> 2) & VTK_PARSE_POINTER_MASK);
+ }
+ }
+ else
+ {
+ /* combine the pointers */
+ while (tmp2)
+ {
+ pointers = ((pointers << 2) | (tmp2 & VTK_PARSE_POINTER_LOWMASK));
+ tmp2 = ((tmp2 >> 2) & VTK_PARSE_POINTER_MASK);
+ }
+ }
+
+ /* combine the arrays */
+ for (i = 0; i < typedefinfo->NumberOfDimensions; i++)
+ {
+ vtkParse_AddStringToArray(
+ &valinfo->Dimensions, &valinfo->NumberOfDimensions,
+ typedefinfo->Dimensions[i]);
+ }
+ if (valinfo->NumberOfDimensions > 1)
+ {
+ pointers = ((pointers & ~VTK_PARSE_POINTER_LOWMASK) | VTK_PARSE_ARRAY);
+ }
+
+ /* put everything together */
+ valinfo->Type = (baseType | pointers | refbit | qualifiers);
+ valinfo->Class = classname;
+ valinfo->Function = typedefinfo->Function;
+ valinfo->Count *= typedefinfo->Count;
+}
+
+/* Expand any unrecognized types within a variable, parameter, or typedef
+ * that match any of the supplied typedefs. The expansion is done in-place. */
+void vtkParse_ExpandTypedefs(
+ ValueInfo *val, StringCache *cache,
+ int n, const char *names[], const char *values[],
+ ValueInfo *typedefinfo[])
+{
+ int i;
+
+ if (((val->Type & VTK_PARSE_BASE_TYPE) == VTK_PARSE_OBJECT ||
+ (val->Type & VTK_PARSE_BASE_TYPE) == VTK_PARSE_UNKNOWN) &&
+ val->Class != 0)
+ {
+ for (i = 0; i < n; i++)
+ {
+ if (typedefinfo[i] && strcmp(val->Class, typedefinfo[i]->Name) == 0)
+ {
+ vtkParse_ExpandTypedef(val, typedefinfo[i]);
+ break;
+ }
+ }
+ if (i == n)
+ {
+ /* in case type appears as a template arg of another type */
+ val->Class = vtkparse_string_replace(
+ cache, val->Class, n, names, values);
+ }
+ }
+}
+
+/* Helper struct for VTK-specific types */
+struct vtk_type_struct
+{
+ size_t len;
+ const char *name;
+ unsigned int type;
+};
+
+/* Simple utility for mapping VTK types to VTK_PARSE types */
+unsigned int vtkParse_MapType(int vtktype)
+{
+ static unsigned int typemap[] =
+ {
+ VTK_PARSE_VOID, /* VTK_VOID 0 */
+ 0, /* VTK_BIT 1 */
+ VTK_PARSE_CHAR, /* VTK_CHAR 2 */
+ VTK_PARSE_UNSIGNED_CHAR, /* VTK_UNSIGNED_CHAR 3 */
+ VTK_PARSE_SHORT, /* VTK_SHORT 4 */
+ VTK_PARSE_UNSIGNED_SHORT, /* VTK_UNSIGNED_SHORT 5 */
+ VTK_PARSE_INT, /* VTK_INT 6 */
+ VTK_PARSE_UNSIGNED_INT, /* VTK_UNSIGNED_INT 7 */
+ VTK_PARSE_LONG, /* VTK_LONG 8 */
+ VTK_PARSE_UNSIGNED_LONG, /* VTK_UNSIGNED_LONG 9 */
+ VTK_PARSE_FLOAT, /* VTK_FLOAT 10 */
+ VTK_PARSE_DOUBLE, /* VTK_DOUBLE 11 */
+ VTK_PARSE_ID_TYPE, /* VTK_ID_TYPE 12 */
+ VTK_PARSE_STRING, /* VTK_STRING 13 */
+ 0, /* VTK_OPAQUE 14 */
+ VTK_PARSE_SIGNED_CHAR, /* VTK_SIGNED_CHAR 15 */
+ VTK_PARSE_LONG_LONG, /* VTK_LONG_LONG 16 */
+ VTK_PARSE_UNSIGNED_LONG_LONG, /* VTK_UNSIGNED_LONG_LONG 17 */
+ VTK_PARSE___INT64, /* VTK___INT64 18 */
+ VTK_PARSE_UNSIGNED___INT64, /* VTK_UNSIGNED___INT64 19 */
+ 0, /* VTK_VARIANT 20 */
+ 0, /* VTK_OBJECT 21 */
+ VTK_PARSE_UNICODE_STRING /* VTK_UNICODE_STRING 22 */
+ };
+
+ if (vtktype > 0 && vtktype <= VTK_UNICODE_STRING)
+ {
+ return typemap[vtktype];
+ }
+ return 0;
+}
+
+/* Get a type from a type name, and return the number of characters used.
+ * If the "classname" argument is not NULL, then it is used to return
+ * the short name for the type, e.g. "long int" becomes "long", while
+ * typedef names and class names are returned unchanged. If "const"
+ * appears in the type name, then the const bit flag is set for the
+ * type, but "const" will not appear in the returned classname. */
+size_t vtkParse_BasicTypeFromString(
+ const char *text, unsigned int *type_ptr,
+ const char **classname_ptr, size_t *len_ptr)
+{
+ /* The various typedefs and types specific to VTK */
+ static struct vtk_type_struct vtktypes[] = {
+ { 9, "vtkIdType", VTK_ID_TYPE },
+ { 12, "vtkStdString", VTK_STRING },
+ { 16, "vtkUnicodeString", VTK_UNICODE_STRING },
+ { 11, "vtkTypeInt8", VTK_TYPE_INT8 },
+ { 12, "vtkTypeUInt8", VTK_TYPE_UINT8 },
+ { 12, "vtkTypeInt16", VTK_TYPE_INT16 },
+ { 13, "vtkTypeUInt16", VTK_TYPE_UINT16 },
+ { 12, "vtkTypeInt32", VTK_TYPE_INT32 },
+ { 13, "vtkTypeUInt32", VTK_TYPE_UINT32 },
+ { 12, "vtkTypeInt64", VTK_TYPE_INT64 },
+ { 13, "vtkTypeUInt64", VTK_TYPE_UINT64 },
+ { 14, "vtkTypeFloat32", VTK_TYPE_FLOAT32 },
+ { 14, "vtkTypeFloat64", VTK_TYPE_FLOAT64 },
+ { 0, 0, 0 } };
+
+ /* Other typedefs and types */
+ static struct vtk_type_struct stdtypes[] = {
+ { 6, "size_t", VTK_PARSE_SIZE_T },
+ { 7, "ssize_t", VTK_PARSE_SSIZE_T },
+ { 7, "ostream", VTK_PARSE_OSTREAM },
+ { 7, "istream", VTK_PARSE_ISTREAM },
+ { 8, "string", VTK_PARSE_STRING },
+ { 0, 0, 0 } };
+
+ const char *cp = text;
+ const char *tmpcp;
+ size_t k, n, m;
+ int i;
+ unsigned int const_bits = 0;
+ unsigned int static_bits = 0;
+ unsigned int unsigned_bits = 0;
+ unsigned int base_bits = 0;
+ const char *classname = NULL;
+ size_t len = 0;
+
+ while (*cp == ' ' || *cp == '\t') { cp++; }
+
+ while ((*cp >= 'a' && *cp <= 'z') ||
+ (*cp >= 'A' && *cp <= 'Z') ||
+ (*cp == '_') || (cp[0] == ':' && cp[1] == ':'))
+ {
+ /* skip all chars that are part of a name */
+ n = vtkParse_NameLength(cp);
+
+ if ((n == 6 && strncmp("static", cp, n) == 0) ||
+ (n == 4 && strncmp("auto", cp, n) == 0) ||
+ (n == 8 && strncmp("register", cp, n) == 0) ||
+ (n == 8 && strncmp("volatile", cp, n) == 0))
+ {
+ if (strncmp("static", cp, n) == 0)
+ {
+ static_bits = VTK_PARSE_STATIC;
+ }
+ }
+ else if (n == 5 && strncmp(cp, "const", n) == 0)
+ {
+ const_bits |= VTK_PARSE_CONST;
+ }
+ else if (n == 8 && strncmp(cp, "unsigned", n) == 0)
+ {
+ unsigned_bits |= VTK_PARSE_UNSIGNED;
+ if (base_bits == 0)
+ {
+ classname = "int";
+ base_bits = VTK_PARSE_INT;
+ }
+ }
+ else if (n == 6 && strncmp(cp, "signed", n) == 0)
+ {
+ if (base_bits == VTK_PARSE_CHAR)
+ {
+ classname = "signed char";
+ base_bits = VTK_PARSE_SIGNED_CHAR;
+ }
+ else
+ {
+ classname = "int";
+ base_bits = VTK_PARSE_INT;
+ }
+ }
+ else if (n == 3 && strncmp(cp, "int", n) == 0)
+ {
+ if (base_bits == 0)
+ {
+ classname = "int";
+ base_bits = VTK_PARSE_INT;
+ }
+ }
+ else if (n == 4 && strncmp(cp, "long", n) == 0)
+ {
+ if (base_bits == VTK_PARSE_DOUBLE)
+ {
+ classname = "long double";
+ base_bits = VTK_PARSE_LONG_DOUBLE;
+ }
+ else if (base_bits == VTK_PARSE_LONG)
+ {
+ classname = "long long";
+ base_bits = VTK_PARSE_LONG_LONG;
+ }
+ else
+ {
+ classname = "long";
+ base_bits = VTK_PARSE_LONG;
+ }
+ }
+ else if (n == 5 && strncmp(cp, "short", n) == 0)
+ {
+ classname = "short";
+ base_bits = VTK_PARSE_SHORT;
+ }
+ else if (n == 4 && strncmp(cp, "char", n) == 0)
+ {
+ if (base_bits == VTK_PARSE_INT && unsigned_bits != VTK_PARSE_UNSIGNED)
+ {
+ classname = "signed char";
+ base_bits = VTK_PARSE_SIGNED_CHAR;
+ }
+ else
+ {
+ classname = "char";
+ base_bits = VTK_PARSE_CHAR;
+ }
+ }
+ else if (n == 5 && strncmp(cp, "float", n) == 0)
+ {
+ classname = "float";
+ base_bits = VTK_PARSE_FLOAT;
+ }
+ else if (n == 6 && strncmp(cp, "double", n) == 0)
+ {
+ if (base_bits == VTK_PARSE_LONG)
+ {
+ classname = "long double";
+ base_bits = VTK_PARSE_LONG_DOUBLE;
+ }
+ else
+ {
+ classname = "double";
+ base_bits = VTK_PARSE_DOUBLE;
+ }
+ }
+ else if (n == 4 && strncmp(cp, "bool", n) == 0)
+ {
+ classname = "bool";
+ base_bits = VTK_PARSE_BOOL;
+ }
+ else if (n == 4 && strncmp(cp, "void", n) == 0)
+ {
+ classname = "void";
+ base_bits = VTK_PARSE_VOID;
+ }
+ else if (n == 7 && strncmp(cp, "__int64", n) == 0)
+ {
+ classname = "__int64";
+ base_bits = VTK_PARSE___INT64;
+ }
+ else
+ {
+ /* if type already found, break */
+ if (base_bits != 0)
+ {
+ break;
+ }
+
+ /* check vtk typedefs */
+ if (strncmp(cp, "vtk", 3) == 0)
+ {
+ for (i = 0; vtktypes[i].len != 0; i++)
+ {
+ if (n == vtktypes[i].len && strncmp(cp, vtktypes[i].name, n) == 0)
+ {
+ classname = vtktypes[i].name;
+ base_bits = vtkParse_MapType((int)vtktypes[i].type);
+ }
+ }
+ }
+
+ /* check standard typedefs */
+ if (base_bits == 0)
+ {
+ m = 0;
+ if (strncmp(cp, "::", 2) == 0) { m = 2; }
+ else if (strncmp(cp, "std::", 5) == 0) { m = 5; }
+ else if (strncmp(cp, "vtkstd::", 8) == 0) { m = 8; }
+
+ /* advance past the namespace */
+ tmpcp = cp + m;
+
+ for (i = 0; stdtypes[i].len != 0; i++)
+ {
+ if (n == stdtypes[i].len && strncmp(tmpcp, stdtypes[i].name, n) == 0)
+ {
+ classname = stdtypes[i].name;
+ base_bits = stdtypes[i].type;
+ }
+ }
+
+ /* include the namespace if present */
+ if (base_bits != 0 && m > 0)
+ {
+ classname = cp;
+ len = n;
+ }
+ }
+
+ /* anything else is assumed to be a class, enum, or who knows */
+ if (base_bits == 0)
+ {
+ base_bits = VTK_PARSE_UNKNOWN;
+ classname = cp;
+ len = n;
+
+ /* VTK classes all start with vtk */
+ if (strncmp(classname, "vtk", 3) == 0)
+ {
+ base_bits = VTK_PARSE_OBJECT;
+ /* make sure the "vtk" isn't just part of the namespace */
+ for (k = 0; k < n; k++)
+ {
+ if (cp[k] == ':')
+ {
+ base_bits = VTK_PARSE_UNKNOWN;
+ break;
+ }
+ }
+ }
+ /* Qt objects and enums */
+ else if (classname[0] == 'Q' &&
+ ((classname[1] >= 'A' && classname[2] <= 'Z') ||
+ strncmp(classname, "Qt::", 4) == 0))
+ {
+ base_bits = VTK_PARSE_QOBJECT;
+ }
+ }
+ }
+
+ cp += n;
+ while (*cp == ' ' || *cp == '\t') { cp++; }
+ }
+
+ if ((unsigned_bits & VTK_PARSE_UNSIGNED) != 0)
+ {
+ switch (base_bits)
+ {
+ case VTK_PARSE_CHAR:
+ classname = "unsigned char";
+ break;
+ case VTK_PARSE_SHORT:
+ classname = "unsigned short";
+ break;
+ case VTK_PARSE_INT:
+ classname = "unsigned int";
+ break;
+ case VTK_PARSE_LONG:
+ classname = "unsigned long";
+ break;
+ case VTK_PARSE_LONG_LONG:
+ classname = "unsigned long long";
+ break;
+ case VTK_PARSE___INT64:
+ classname = "unsigned __int64";
+ break;
+ }
+ }
+
+ *type_ptr = (static_bits | const_bits | unsigned_bits | base_bits);
+
+ if (classname_ptr)
+ {
+ *classname_ptr = classname;
+ if (len == 0)
+ {
+ len = strlen(classname);
+ }
+ *len_ptr = len;
+ }
+
+ return (size_t)(cp - text);
+}
+
+/* Parse a type description in "text" and generate a typedef named "name" */
+size_t vtkParse_ValueInfoFromString(
+ ValueInfo *data, StringCache *cache, const char *text)
+{
+ const char *cp = text;
+ size_t n;
+ int m, count;
+ unsigned int base_bits = 0;
+ unsigned int pointer_bits = 0;
+ unsigned int ref_bits = 0;
+ const char *classname = NULL;
+
+ /* get the basic type with qualifiers */
+ cp += vtkParse_BasicTypeFromString(cp, &base_bits, &classname, &n);
+
+ data->Class = vtkParse_CacheString(cache, classname, n);
+
+ if ((base_bits & VTK_PARSE_STATIC) != 0)
+ {
+ data->IsStatic = 1;
+ }
+
+ /* look for pointers (and const pointers) */
+ while (*cp == '*')
+ {
+ cp++;
+ pointer_bits = (pointer_bits << 2);
+ while (*cp == ' ' || *cp == '\t') { cp++; }
+ if (strncmp(cp, "const", 5) == 0 &&
+ (cp[5] < 'a' || cp[5] > 'z') &&
+ (cp[5] < 'A' || cp[5] > 'Z') &&
+ (cp[5] < '0' || cp[5] > '9') &&
+ cp[5] != '_')
+ {
+ cp += 5;
+ while (*cp == ' ' || *cp == '\t') { cp++; }
+ pointer_bits = (pointer_bits | VTK_PARSE_CONST_POINTER);
+ }
+ else
+ {
+ pointer_bits = (pointer_bits | VTK_PARSE_POINTER);
+ }
+ pointer_bits = (pointer_bits & VTK_PARSE_POINTER_MASK);
+ }
+
+ /* look for ref */
+ if (*cp == '&')
+ {
+ cp++;
+ while (*cp == ' ' || *cp == '\t') { cp++; }
+ ref_bits = VTK_PARSE_REF;
+ }
+
+ /* look for the variable name */
+ if ((*cp >= 'a' && *cp <= 'z') ||
+ (*cp >= 'A' && *cp <= 'Z') ||
+ (*cp == '_'))
+ {
+ /* skip all chars that are part of a name */
+ n = vtkparse_id_len(cp);
+ data->Name = vtkParse_CacheString(cache, cp, n);
+ cp += n;
+ while (*cp == ' ' || *cp == '\t') { cp++; }
+ }
+
+ /* look for array brackets */
+ if (*cp == '[')
+ {
+ count = 1;
+ }
+
+ while (*cp == '[')
+ {
+ n = vtkparse_bracket_len(cp);
+ if (n > 1)
+ {
+ cp++;
+ n -= 2;
+ }
+ while (*cp == ' ' || *cp == '\t') { cp++; n--; }
+ while (n > 0 && (cp[n-1] == ' ' || cp[n-1] == '\t')) { n--; }
+ vtkParse_AddStringToArray(
+ &data->Dimensions,
+ &data->NumberOfDimensions,
+ vtkParse_CacheString(cache, cp, n));
+ m = 0;
+ if (*cp >= '0' && *cp <= '9' && vtkparse_number_len(cp) == n)
+ {
+ m = (int)strtol(cp, NULL, 0);
+ }
+ count *= m;
+
+ cp += n;
+ while (*cp == ' ' || *cp == '\t') { cp++; }
+ if (*cp == ']') { cp++; }
+ while (*cp == ' ' || *cp == '\t') { cp++; }
+ }
+
+ /* add pointer indirection to correspond to first array dimension */
+ if (data->NumberOfDimensions > 1)
+ {
+ pointer_bits = ((pointer_bits << 2) | VTK_PARSE_ARRAY);
+ }
+ else if (data->NumberOfDimensions == 1)
+ {
+ pointer_bits = ((pointer_bits << 2) | VTK_PARSE_POINTER);
+ }
+ pointer_bits = (pointer_bits & VTK_PARSE_POINTER_MASK);
+
+ /* (Add code here to look for "=" followed by a value ) */
+
+ data->Type = (pointer_bits | ref_bits | base_bits);
+
+ return (cp - text);
+}
+
+/* Generate a C++ declaration string from a ValueInfo struct */
+const char *vtkParse_ValueInfoToString(
+ ValueInfo *data, int *needs_free)
+{
+ unsigned int pointer_bits = (data->Type & VTK_PARSE_POINTER_MASK);
+ unsigned int ref_bits = (data->Type & VTK_PARSE_REF);
+ unsigned int qualifier_bits = (data->Type & VTK_PARSE_CONST);
+ unsigned int reverse_bits = 0;
+ unsigned int pointer_type = 0;
+ const char *classname = data->Class;
+ const char *name = data->Name;
+ char *text = NULL;
+ size_t i = 0;
+ size_t l;
+ int j = 0;
+
+ if (pointer_bits == 0 && ref_bits == 0 && qualifier_bits == 0 &&
+ name == NULL)
+ {
+ if (needs_free)
+ {
+ *needs_free = 0;
+ }
+ return classname;
+ }
+
+ /* compute the length of string to allocate */
+ l = 6; /* for const */
+ l += 4*7; /* for pointers */
+ l += 1; /* for ref */
+ l += strlen(classname) + 1; /* for type */
+ for (j = 0; j < data->NumberOfDimensions; j++)
+ {
+ l += 2 + strlen(data->Dimensions[j]);
+ }
+ l++; /* for NULL */
+ l += 4; /* for safety */
+
+ text = (char *)malloc(l);
+
+ if ((qualifier_bits & VTK_PARSE_CONST) != 0)
+ {
+ strcpy(&text[i], "const ");
+ i += 6;
+ }
+
+ strcpy(&text[i], classname);
+ i += strlen(classname);
+ text[i++] = ' ';
+
+ while (pointer_bits != 0)
+ {
+ reverse_bits <<= 2;
+ reverse_bits |= (pointer_bits & VTK_PARSE_POINTER_LOWMASK);
+ pointer_bits = ((pointer_bits >> 2) & VTK_PARSE_POINTER_MASK);
+ }
+
+ while (reverse_bits != 0)
+ {
+ pointer_type = (reverse_bits & VTK_PARSE_POINTER_LOWMASK);
+ if (pointer_type == VTK_PARSE_ARRAY ||
+ (reverse_bits == VTK_PARSE_POINTER &&
+ data->NumberOfDimensions > 0))
+ {
+ break;
+ }
+ else if (pointer_type == VTK_PARSE_POINTER)
+ {
+ text[i++] = '*';
+ }
+ else if (pointer_type == VTK_PARSE_CONST_POINTER)
+ {
+ strcpy(&text[i], "*const ");
+ i += 7;
+ }
+
+ reverse_bits = ((reverse_bits >> 2) & VTK_PARSE_POINTER_MASK);
+ }
+
+ if (ref_bits)
+ {
+ text[i++] = '&';
+ }
+
+ if (name)
+ {
+ strcpy(&text[i], name);
+ i += strlen(name);
+ }
+
+ for (j = 0; j < data->NumberOfDimensions; j++)
+ {
+ text[i++] = '[';
+ if (data->Dimensions[j])
+ {
+ strcpy(&text[i], data->Dimensions[j]);
+ i += strlen(data->Dimensions[j]);
+ }
+ text[i++] = ']';
+ }
+
+ text[i] = '\0';
+
+ /* make sure enough space was allocated */
+ assert(i < l);
+
+ if (needs_free)
+ {
+ *needs_free = 1;
+ }
+
+ return text;
+}
+
+/* Search and replace, return the initial string if no replacements
+ * occurred, otherwise return a new string allocated with malloc. */
+const char *vtkParse_StringReplace(
+ const char *str1, int n, const char *name[], const char *val[])
+{
+ return vtkparse_string_replace(NULL, str1, n, name, val);
+}
+
+/* substitute generic types and values with actual types and values */
+static void func_substitution(
+ FunctionInfo *data, StringCache *cache,
+ int m, const char *arg_names[],
+ const char *arg_values[], ValueInfo *arg_types[]);
+
+static void value_substitution(
+ ValueInfo *data, StringCache *cache,
+ int m, const char *arg_names[],
+ const char *arg_values[], ValueInfo *arg_types[])
+{
+ vtkParse_ExpandTypedefs(data, cache, m, arg_names, arg_values, arg_types);
+ vtkParse_ExpandValues(data, cache, m, arg_names, arg_values);
+
+ if (data->Function)
+ {
+ func_substitution(
+ data->Function, cache, m, arg_names, arg_values, arg_types);
+ }
+}
+
+static void func_substitution(
+ FunctionInfo *data, StringCache *cache,
+ int m, const char *arg_names[],
+ const char *arg_values[], ValueInfo *arg_types[])
+{
+ int i, n;
+
+ n = data->NumberOfParameters;
+ for (i = 0; i < n; i++)
+ {
+ value_substitution(
+ data->Parameters[i], cache, m, arg_names, arg_values, arg_types);
+ }
+
+ if (data->ReturnValue)
+ {
+ value_substitution(
+ data->ReturnValue, cache, m, arg_names, arg_values, arg_types);
+ }
+
+ if (data->Signature)
+ {
+ data->Signature =
+ vtkparse_string_replace(
+ cache, data->Signature, m, arg_names, arg_values);
+ }
+
+ /* legacy information for old wrappers */
+#ifndef VTK_PARSE_LEGACY_REMOVE
+ n = data->NumberOfArguments;
+ for (i = 0; i < n; i++)
+ {
+ data->ArgTypes[i] = data->Parameters[i]->Type;
+ data->ArgClasses[i] = data->Parameters[i]->Class;
+ if (data->Parameters[i]->NumberOfDimensions == 1 &&
+ data->Parameters[i]->Count > 0)
+ {
+ data->ArgCounts[i] = data->Parameters[i]->Count;
+ }
+ }
+
+ if (data->ReturnValue)
+ {
+ data->ReturnType = data->ReturnValue->Type;
+ data->ReturnClass = data->ReturnValue->Class;
+ if (data->ReturnValue->NumberOfDimensions == 1 &&
+ data->ReturnValue->Count > 0)
+ {
+ data->HintSize = data->ReturnValue->Count;
+ data->HaveHint = 1;
+ }
+ }
+#endif /* VTK_PARSE_LEGACY_REMOVE */
+}
+
+static void class_substitution(
+ ClassInfo *data, StringCache *cache,
+ int m, const char *arg_names[],
+ const char *arg_values[], ValueInfo *arg_types[])
+{
+ int i, n;
+
+ /* superclasses may be templated */
+ n = data->NumberOfSuperClasses;
+ for (i = 0; i < n; i++)
+ {
+ data->SuperClasses[i] = vtkparse_string_replace(
+ cache, data->SuperClasses[i], m, arg_names, arg_values);
+ }
+
+ n = data->NumberOfClasses;
+ for (i = 0; i < n; i++)
+ {
+ class_substitution(
+ data->Classes[i], cache, m, arg_names, arg_values, arg_types);
+ }
+
+ n = data->NumberOfFunctions;
+ for (i = 0; i < n; i++)
+ {
+ func_substitution(
+ data->Functions[i], cache, m, arg_names, arg_values, arg_types);
+ }
+
+ n = data->NumberOfConstants;
+ for (i = 0; i < n; i++)
+ {
+ value_substitution(
+ data->Constants[i], cache, m, arg_names, arg_values, arg_types);
+ }
+
+ n = data->NumberOfVariables;
+ for (i = 0; i < n; i++)
+ {
+ value_substitution(
+ data->Variables[i], cache, m, arg_names, arg_values, arg_types);
+ }
+
+ n = data->NumberOfTypedefs;
+ for (i = 0; i < n; i++)
+ {
+ value_substitution(
+ data->Typedefs[i], cache, m, arg_names, arg_values, arg_types);
+ }
+}
+
+/* Extract template args from a comma-separated list enclosed
+ * in angle brackets. Returns zero if no angle brackets found. */
+size_t vtkParse_DecomposeTemplatedType(
+ const char *text, const char **classname,
+ int nargs, const char ***argp, const char *defaults[])
+{
+ size_t i, j, k, n;
+ const char *arg;
+ char *new_text;
+ const char **template_args = NULL;
+ int template_arg_count = 0;
+
+ n = vtkParse_NameLength(text);
+
+ /* is the class templated? */
+ for (i = 0; i < n; i++)
+ {
+ if (text[i] == '<')
+ {
+ break;
+ }
+ }
+
+ if (classname)
+ {
+ new_text = (char *)malloc(i + 1);
+ strncpy(new_text, text, i);
+ new_text[i] = '\0';
+ *classname = new_text;
+ }
+
+ if (text[i] == '<')
+ {
+ i++;
+ /* extract the template arguments */
+ for (;;)
+ {
+ while (text[i] == ' ' || text[i] == '\t') { i++; }
+ j = i;
+ while (text[j] != ',' && text[j] != '>' &&
+ text[j] != '\n' && text[j] != '\0')
+ {
+ if (text[j] == '<' || text[j] == '(' ||
+ text[j] == '[' || text[j] == '{')
+ {
+ j += vtkparse_bracket_len(&text[j]);
+ }
+ else if (text[j] == '\'' || text[j] == '\"')
+ {
+ j += vtkparse_quote_len(&text[j]);
+ }
+ else
+ {
+ j++;
+ }
+ }
+
+ k = j;
+ while (text[k-1] == ' ' || text[k-1] == '\t') { --k; }
+
+ new_text = (char *)malloc(k-i + 1);
+ strncpy(new_text, &text[i], k-i);
+ new_text[k-i] = '\0';
+ vtkParse_AddStringToArray(&template_args, &template_arg_count,
+ new_text);
+
+ assert(template_arg_count <= nargs);
+
+ i = j + 1;
+
+ if (text[j] != ',')
+ {
+ break;
+ }
+ }
+ }
+
+ while (template_arg_count < nargs)
+ {
+ assert(defaults != NULL);
+ arg = defaults[template_arg_count];
+ assert(arg != NULL);
+ new_text = (char *)malloc(strlen(arg + 1));
+ strcpy(new_text, arg);
+ vtkParse_AddStringToArray(&template_args, &template_arg_count, new_text);
+ }
+
+ *argp = template_args;
+
+ return i;
+}
+
+/* Free the list of strings returned by ExtractTemplateArgs. */
+void vtkParse_FreeTemplateDecomposition(
+ const char *name, int n, const char **args)
+{
+ int i;
+
+ if (name)
+ {
+ free((char *)name);
+ }
+
+ if (n > 0)
+ {
+ for (i = 0; i < n; i++)
+ {
+ free((char *)args[i]);
+ }
+
+ free((char **)args);
+ }
+}
+
+/* Instantiate a class template by substituting the provided arguments. */
+void vtkParse_InstantiateClassTemplate(
+ ClassInfo *data, StringCache *cache, int n, const char *args[])
+{
+ TemplateInfo *t = data->Template;
+ const char **new_args = NULL;
+ const char **arg_names = NULL;
+ ValueInfo **arg_types = NULL;
+ int i, m;
+ char *new_name;
+ size_t k;
+
+ if (t == NULL)
+ {
+ fprintf(stderr, "vtkParse_InstantiateClassTemplate: "
+ "this class is not templated.\n");
+ return;
+ }
+
+ m = t->NumberOfParameters;
+ if (n > m)
+ {
+ fprintf(stderr, "vtkParse_InstantiateClassTemplate: "
+ "too many template args.\n");
+ return;
+ }
+
+ for (i = n; i < m; i++)
+ {
+ if (t->Parameters[i]->Value == NULL ||
+ t->Parameters[i]->Value[0] == '\0')
+ {
+ fprintf(stderr, "vtkParse_InstantiateClassTemplate: "
+ "too few template args.\n");
+ return;
+ }
+ }
+
+ new_args = (const char **)malloc(m*sizeof(char **));
+ for (i = 0; i < n; i++)
+ {
+ new_args[i] = args[i];
+ }
+ for (i = n; i < m; i++)
+ {
+ new_args[i] = t->Parameters[i]->Value;
+ }
+ args = new_args;
+
+ arg_names = (const char **)malloc(m*sizeof(char **));
+ arg_types = (ValueInfo **)malloc(m*sizeof(ValueInfo *));
+ for (i = 0; i < m; i++)
+ {
+ arg_names[i] = t->Parameters[i]->Name;
+ arg_types[i] = NULL;
+ if (t->Parameters[i]->Type == 0)
+ {
+ arg_types[i] = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_InitValue(arg_types[i]);
+ vtkParse_ValueInfoFromString(arg_types[i], cache, args[i]);
+ arg_types[i]->ItemType = VTK_TYPEDEF_INFO;
+ arg_types[i]->Name = arg_names[i];
+ }
+ }
+
+ /* no longer a template (has been instantiated) */
+ if (data->Template)
+ {
+ vtkParse_FreeTemplate(data->Template);
+ }
+ data->Template = NULL;
+
+ /* append template args to class name */
+ k = strlen(data->Name) + 2;
+ for (i = 0; i < m; i++)
+ {
+ k += strlen(args[i]) + 2;
+ }
+ new_name = (char *)malloc(k);
+ strcpy(new_name, data->Name);
+ k = strlen(new_name);
+ new_name[k++] = '<';
+ for (i = 0; i < m; i++)
+ {
+ strcpy(&new_name[k], args[i]);
+ k += strlen(args[i]);
+ if (i+1 < m)
+ {
+ new_name[k++] = ',';
+ new_name[k++] = ' ';
+ }
+ }
+ if (new_name[k-1] == '>')
+ {
+ new_name[k++] = ' ';
+ }
+ new_name[k++] = '>';
+ new_name[k] = '\0';
+
+ data->Name = vtkParse_CacheString(cache, new_name, k);
+ free(new_name);
+
+ /* do the template arg substitution */
+ class_substitution(data, cache, m, arg_names, args, arg_types);
+
+ /* free all allocated arrays */
+ free((char **)new_args);
+ free((char **)arg_names);
+
+ for (i = 0; i < m; i++)
+ {
+ if (arg_types[i])
+ {
+ vtkParse_FreeValue(arg_types[i]);
+ }
+ }
+ free(arg_types);
+}
+
+/* Get a zero-terminated array of the types in vtkTemplateMacro. */
+const char **vtkParse_GetTemplateMacroTypes()
+{
+ static const char *types[] = {
+ "char", "signed char", "unsigned char", "short", "unsigned short",
+ "int", "unsigned int", "long", "unsigned long",
+#ifdef VTK_TYPE_USE_LONG_LONG
+ "long long", "unsigned long long",
+#endif
+#ifdef VTK_TYPE_USE___INT64
+ "__int64", "unsigned __int64",
+#endif
+ "float", "double", NULL };
+
+ return types;
+}
+
+/* Get a zero-terminated array of the types in vtkArray. */
+const char **vtkParse_GetArrayTypes()
+{
+ static const char *types[] = {
+ "char", "signed char", "unsigned char", "short", "unsigned short",
+ "int", "unsigned int", "long", "unsigned long",
+#ifdef VTK_TYPE_USE_LONG_LONG
+ "long long", "unsigned long long",
+#endif
+#ifdef VTK_TYPE_USE___INT64
+ "__int64", "unsigned __int64",
+#endif
+ "float", "double",
+ "vtkStdString", "vtkUnicodeString", "vtkVariant", NULL };
+
+ return types;
+}
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkParseExtras.h
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+/*-------------------------------------------------------------------------
+ Copyright (c) 2011 David Gobbi.
+
+ Contributed to the VisualizationToolkit by the author in May 2011
+ under the terms of the Visualization Toolkit 2008 copyright.
+-------------------------------------------------------------------------*/
+
+/**
+ * This file contains extra utilities for parsing and wrapping.
+ */
+
+#ifndef VTK_PARSE_EXTRAS_H
+#define VTK_PARSE_EXTRAS_H
+
+#include "vtkParseData.h"
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Skip over a sequence of characters that begin with an alphabetic
+ * character or an underscore, and include only alphanumeric
+ * characters or underscores. Return the number of characters.
+ */
+size_t vtkParse_IdentifierLength(const char *text);
+
+/**
+ * Skip over a name, including any namespace prefixes and
+ * any template arguments. Return the number of characters.
+ * Examples are "name", "::name", "name<arg>", "name::name2",
+ * "::name::name2<arg1,arg2>".
+ */
+size_t vtkParse_NameLength(const char *text);
+
+/**
+ * Skip over a name, including any template arguments, but stopping
+ * if a '::' is encoutered. Return the number of characters.
+ * Examples are "name" and "name<arg>"
+ */
+size_t vtkParse_UnscopedNameLength(const char *text);
+
+/**
+ * Skip over a literal, which may be a number, a char in single
+ * quotes, a string in double quotes, or a name, or a name followed
+ * by arguments in parentheses.
+ */
+size_t vtkParse_LiteralLength(const char *text);
+
+/**
+ * Get a type from a type name, and return the number of characters used.
+ * If the "classname" argument is not NULL, then it is used to return
+ * the short name for the type, e.g. "long int" becomes "long", while
+ * typedef names and class names are returned unchanged. If "const"
+ * appears in the type name, then the const bit flag is set for the
+ * type, but "const" will not appear in the returned classname.
+ */
+size_t vtkParse_BasicTypeFromString(
+ const char *text, unsigned int *type,
+ const char **classname, size_t *classname_len);
+
+/**
+ * Generate a ValueInfo by parsing the type from the provided text.
+ * Only simple text strings are supported, e.g. "const T **".
+ * Returns the number of characters consumed.
+ */
+size_t vtkParse_ValueInfoFromString(
+ ValueInfo *val, StringCache *cache, const char *text);
+
+/**
+ * Generate a declaration string from a ValueInfo struct. If the
+ * "nf" arg is set, the returned string must be freed.
+ * Only simple text strings are supported, e.g. "const T **".
+ * The variable or typedef name, if present, is ignored.
+ */
+const char *vtkParse_ValueInfoToString(ValueInfo *val, int *nf);
+
+/**
+ * Expand a typedef within a variable, parameter, or typedef declaration.
+ * The expansion is done in-place.
+ */
+void vtkParse_ExpandTypedef(ValueInfo *valinfo, ValueInfo *typedefinfo);
+
+/**
+ * Expand any unrecognized types within a variable, parameter, or typedef
+ * that match any of the supplied typedefs. The expansion is done in-place.
+ */
+void vtkParse_ExpandTypedefs(
+ ValueInfo *valinfo, StringCache *cache,
+ int n, const char *name[], const char *val[],
+ ValueInfo *typedefinfo[]);
+
+/**
+ * Wherever one of the specified names exists inside a Value or inside
+ * a Dimension size, replace it with the corresponding val string.
+ * This is used to replace constants with their values.
+ */
+void vtkParse_ExpandValues(
+ ValueInfo *valinfo, StringCache *cache,
+ int n, const char *name[], const char *val[]);
+
+/**
+ * Search and replace, return the initial string if no replacements
+ * occurred, else return a new string allocated with malloc. */
+const char *vtkParse_StringReplace(
+ const char *str1, int n, const char *name[], const char *val[]);
+
+/**
+ * Extract the class name and template args from a templated
+ * class type ID. Returns the full number of characters that
+ * were consumed during the decomposition.
+ */
+size_t vtkParse_DecomposeTemplatedType(
+ const char *text, const char **classname,
+ int n, const char ***args, const char *defaults[]);
+
+/**
+ * Free the list of strings returned by ExtractTemplateArgs.
+ */
+void vtkParse_FreeTemplateDecomposition(
+ const char *classname, int n, const char **args);
+
+/**
+ * Instantiate a class template by substituting the provided arguments
+ * for the template parameters. If "n" is less than the number of template
+ * parameters, then default parameter values (if present) will be used.
+ * If an error occurs, the error will be printed to stderr and NULL will
+ * be returned.
+ */
+void vtkParse_InstantiateClassTemplate(
+ ClassInfo *data, StringCache *cache, int n, const char *args[]);
+
+/**
+ * Instantiate a function or class method template by substituting the
+ * provided arguments for the template parameters. If "n" is less than
+ * the number of template parameters, then default parameter values
+ * (if present) will be used. If an error occurs, the error will be
+ * printed to stderr and NULL will be returned.
+ */
+void vtkParse_IntantiateFunctionTemplate(
+ FunctionInfo *data, int n, const char *args[]);
+
+/**
+ * Get a zero-terminated array of the types in vtkTemplateMacro.
+ */
+const char **vtkParse_GetTemplateMacroTypes();
+
+/**
+ * Get a zero-terminated array of the types in vtkArray.
+ */
+const char **vtkParse_GetArrayTypes();
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkParseHierarchy.c
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+/*-------------------------------------------------------------------------
+ Copyright (c) 2010 David Gobbi.
+
+ Contributed to the VisualizationToolkit by the author in June 2010
+ under the terms of the Visualization Toolkit 2008 copyright.
+-------------------------------------------------------------------------*/
+
+#include "vtkParseHierarchy.h"
+#include "vtkParseExtras.h"
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <assert.h>
+
+static size_t skip_space(const char *text)
+{
+ size_t i = 0;
+ while (isspace(text[i]) && text[i] != '\n') { i++; }
+ return i;
+}
+
+static size_t skip_expression(const char *text, const char *delims)
+{
+ char newdelims[2];
+ size_t i = 0;
+ size_t j;
+ int use_angle = 0;
+ char c;
+
+ for (j = 0; delims[j] != '\0'; j++)
+ {
+ if (delims[j] == '>')
+ {
+ use_angle = 1;
+ }
+ }
+
+ while (text[i] != '\0')
+ {
+ c = text[i];
+ j = 0;
+ while (c != delims[j] && delims[j] != '\0') { j++; }
+ if (delims[j] != '\0' || c == '\0') { break; }
+ if (c == '\"' || c == '\'')
+ {
+ char d = c;
+ i++;
+ while (text[i] != d && text[i] != '\0')
+ {
+ if (text[i] == '\\' && text[i+1] != '\0') { i++; }
+ i++;
+ }
+ c = text[i];
+ if (c == '\0') { break; }
+ }
+ i++;
+ if (c == '(' || c == '[' || c == '{' || (use_angle && c == '<'))
+ {
+ if (c == '(') { newdelims[0] = ')'; }
+ if (c == '[') { newdelims[0] = ']'; }
+ if (c == '{') { newdelims[0] = '}'; }
+ if (c == '<') { newdelims[0] = '>'; }
+ newdelims[1] = '\0';
+
+ i += skip_expression(&text[i], newdelims);
+
+ if (text[i] == newdelims[0]) { i++; } else { break; }
+ }
+ }
+
+ return i;
+}
+
+/* helper: comparison of entries */
+static int compare_hierarchy_entries(const void *vp1, const void *vp2)
+{
+ const HierarchyEntry *entry1 = (const HierarchyEntry *)vp1;
+ const HierarchyEntry *entry2 = (const HierarchyEntry *)vp2;
+
+ return strcmp(entry1->Name, entry2->Name);
+}
+
+/* helper: sort the entries to facilitate searching */
+static void sort_hierarchy_entries(HierarchyInfo *info)
+{
+ qsort(info->Entries, info->NumberOfEntries, sizeof(HierarchyEntry),
+ &compare_hierarchy_entries);
+}
+
+/* Find an entry with a binary search */
+HierarchyEntry *vtkParseHierarchy_FindEntry(
+ const HierarchyInfo *info, const char *classname)
+{
+ HierarchyEntry key;
+ HierarchyEntry *entry;
+ size_t i, n;
+ char name[32];
+ char *cp;
+
+ /* use classname as-is for the search if possible */
+ cp = (char *)classname;
+
+ /* get portion of name before final template parameters */
+ n = vtkParse_UnscopedNameLength(classname);
+ i = 0;
+ while (classname[i+n] == ':' && classname[i+n+1] == ':')
+ {
+ i += n + 2;
+ n = vtkParse_UnscopedNameLength(&classname[i]);
+ }
+ i += vtkParse_IdentifierLength(&classname[i]);
+
+ /* create a new (shorter) search string if necessary */
+ if (classname[i] != '\0')
+ {
+ /* use stack space if possible */
+ cp = name;
+ /* otherwise, use malloc */
+ if (i > 31)
+ {
+ cp = (char *)malloc(i+1);
+ }
+ strncpy(cp, classname, i);
+ cp[i] = '\0';
+ }
+
+ key.Name = cp;
+
+ entry = (HierarchyEntry *)bsearch(&key, info->Entries,
+ info->NumberOfEntries, sizeof(HierarchyEntry),
+ &compare_hierarchy_entries);
+
+ if (cp != classname && cp != name)
+ {
+ free(cp);
+ }
+
+ return entry;
+}
+
+
+/* read a hierarchy file into a HeirarchyInfo struct, or return NULL */
+HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename)
+{
+ HierarchyInfo *info;
+ HierarchyEntry *entry;
+ int maxClasses = 500;
+ FILE *fp;
+ char *line;
+ char *cp;
+ const char *ccp;
+ size_t maxlen = 15;
+ size_t i, j, n, m;
+ unsigned int bits, pointers;
+ static const char *delims = ">,=";
+
+ line = (char *)malloc(maxlen);
+
+ fp = fopen(filename, "r");
+
+ if (fp == NULL)
+ {
+ return NULL;
+ }
+
+ info = (HierarchyInfo *)malloc(sizeof(HierarchyInfo));
+ info->NumberOfEntries = 0;
+ info->Entries = (HierarchyEntry *)malloc(maxClasses*sizeof(HierarchyEntry));
+ info->Strings = (StringCache *)malloc(sizeof(StringCache));
+ vtkParse_InitStringCache(info->Strings);
+
+ while (fgets(line, (int)maxlen, fp))
+ {
+ n = strlen(line);
+
+ /* if buffer not long enough, increase it */
+ while (n == maxlen-1 && line[n-1] != '\n' && !feof(fp))
+ {
+ maxlen *= 2;
+ line = (char *)realloc(line, maxlen);
+ if (!fgets(&line[n], (int)(maxlen-n), fp)) { break; }
+ n += strlen(&line[n]);
+ }
+
+ while (n > 0 && isspace(line[n-1]))
+ {
+ n--;
+ }
+ line[n] = '\0';
+
+ if (line[0] == '\0')
+ {
+ continue;
+ }
+
+ if (info->NumberOfEntries == maxClasses)
+ {
+ maxClasses *= 2;
+ info->Entries = (HierarchyEntry *)realloc(
+ info->Entries, sizeof(HierarchyEntry)*maxClasses*2);
+ }
+
+ entry = &info->Entries[info->NumberOfEntries++];
+ entry->Name = NULL;
+ entry->HeaderFile = NULL;
+ entry->Module = NULL;
+ entry->NumberOfTemplateParameters = 0;
+ entry->TemplateParameters = NULL;
+ entry->TemplateDefaults = NULL;
+ entry->NumberOfProperties = 0;
+ entry->Properties = NULL;
+ entry->NumberOfSuperClasses = 0;
+ entry->SuperClasses = NULL;
+ entry->SuperClassIndex = NULL;
+ entry->Typedef = NULL;
+ entry->IsTypedef = 0;
+ entry->IsEnum = 0;
+
+ i = skip_space(line);
+ n = vtkParse_NameLength(&line[i]);
+ for (m = 0; m < n; m++)
+ {
+ if (line[i+m] == '<') { break; }
+ }
+
+ entry->Name = vtkParse_CacheString(info->Strings, &line[i], m);
+ i += m;
+
+ if (line[i] == '<')
+ {
+ i++;
+ i += skip_space(&line[i]);
+
+ for (j = 0; line[i] != '>' && line[i] != '\0'; j++)
+ {
+ if (j == 0)
+ {
+ entry->TemplateParameters = (const char **)malloc(sizeof(char *));
+ entry->TemplateDefaults = (const char **)malloc(sizeof(char *));
+ }
+ else
+ {
+ entry->TemplateParameters = (const char **)realloc(
+ (char **)entry->TemplateParameters, (j+1)*sizeof(char *));
+ entry->TemplateDefaults = (const char **)realloc(
+ (char **)entry->TemplateDefaults, (j+1)*sizeof(char *));
+ }
+ entry->NumberOfTemplateParameters++;
+ entry->TemplateDefaults[j] = NULL;
+
+ m = skip_expression(&line[i], delims);
+ while (m > 0 && (line[i+m-1] == ' ' || line[i+m-1] == '\t'))
+ {
+ --m;
+ }
+
+ entry->TemplateParameters[j] =
+ vtkParse_CacheString(info->Strings, &line[i], m);
+ i += m;
+ i += skip_space(&line[i]);
+
+ if (line[i] == '=')
+ {
+ i++;
+ i += skip_space(&line[i]);
+ m = skip_expression(&line[i], delims);
+ while (m > 0 && (line[i+m-1] == ' ' || line[i+m-1] == '\t'))
+ {
+ --m;
+ }
+ entry->TemplateDefaults[j] =
+ vtkParse_CacheString(info->Strings, &line[i], m);
+ i += m;
+ i += skip_space(&line[i]);
+ }
+
+ if (line[i] == ',')
+ {
+ i++;
+ i += skip_space(&line[i]);
+ }
+ }
+
+ if (line[i] == '>')
+ {
+ i++;
+ i += skip_space(&line[i]);
+ }
+
+ if (line[i] == ':' && line[i+1] == ':')
+ {
+ i += 2;
+ m = vtkParse_NameLength(&line[i]);
+ n = strlen(entry->Name);
+ cp = vtkParse_NewString(info->Strings, n+m+2);
+ strcpy(cp, entry->Name);
+ strcpy(&cp[n], "::");
+ strncpy(&cp[n+2], &line[i], m);
+ i += m;
+ cp[n+m+2] = '\0';
+ entry->Name = cp;
+ }
+ }
+
+ i += skip_space(&line[i]);
+
+ /* classes (and possibly enums) */
+ if (line[i] == ':')
+ {
+ i++;
+ i += skip_space(&line[i]);
+ n = vtkParse_NameLength(&line[i]);
+ /* check for enum indicators */
+ if ((n == 3 && strncmp(&line[i], "int", n)) ||
+ (n == 4 && strncmp(&line[i], "enum", n)))
+ {
+ entry->IsEnum = 1;
+ i += n;
+ i += skip_space(&line[i]);
+ }
+ /* else check for superclasses */
+ else for (j = 0; ; j++)
+ {
+ if (j == 0)
+ {
+ entry->SuperClasses = (const char **)malloc(sizeof(char *));
+ entry->SuperClassIndex = (int *)malloc(sizeof(int));
+ }
+ else
+ {
+ entry->SuperClasses = (const char **)realloc(
+ (char **)entry->SuperClasses, (j+1)*sizeof(char *));
+ entry->SuperClassIndex = (int *)realloc(
+ entry->SuperClassIndex, (j+1)*sizeof(int));
+ }
+ entry->NumberOfSuperClasses++;
+
+ i += skip_space(&line[i]);
+ n = vtkParse_NameLength(&line[i]);
+ entry->SuperClasses[j] =
+ vtkParse_CacheString(info->Strings, &line[i], n);
+ entry->SuperClassIndex[j] = -1;
+ i += n;
+
+ i += skip_space(&line[i]);
+ if (line[i] != ',')
+ {
+ break;
+ }
+ i++;
+ }
+ }
+
+ /* read typedefs */
+ else if (line[i] == '=')
+ {
+ i++;
+ i += skip_space(&line[i]);
+ entry->IsTypedef = 1;
+ entry->Typedef = (ValueInfo *)malloc(sizeof(ValueInfo));
+ vtkParse_InitValue(entry->Typedef);
+
+ /* type is a reference (does this ever occur?) */
+ if (line[i] == '&')
+ {
+ i++;
+ i += skip_space(&line[i]);
+ entry->Typedef->Type |= VTK_PARSE_REF;
+ }
+
+ /* type has array dimensions */
+ if (line[i] == '[')
+ {
+ entry->Typedef->Count = 1;
+ }
+
+ while (line[i] == '[')
+ {
+ i++;
+ n = 0;
+ while (line[i+n] != ']' && line[i+n] != '\n' && line[i+n] != '\0')
+ {
+ n++;
+ }
+ ccp = vtkParse_CacheString(info->Strings, &line[i], n);
+ vtkParse_AddStringToArray(&entry->Typedef->Dimensions,
+ &entry->Typedef->NumberOfDimensions, ccp);
+ if (ccp[0] >= '0' && ccp[0] <= '9')
+ {
+ entry->Typedef->Count *= (int)strtol(ccp, NULL, 0);
+ }
+ else
+ {
+ entry->Typedef->Count = 0;
+ }
+ i += n;
+ if (line[i] == ']')
+ {
+ i++;
+ }
+ }
+ i += skip_space(&line[i]);
+
+ /* look for pointers (and const pointers) */
+ bits = 0;
+ while (line[i] == '*' || strncmp(&line[i], "const*", 6) == 0)
+ {
+ bits = (bits << 2);
+ if (line[i] == '*')
+ {
+ bits = (bits | VTK_PARSE_POINTER);
+ }
+ else
+ {
+ bits = (bits | VTK_PARSE_CONST_POINTER);
+ i += 5;
+ }
+ bits = (bits & VTK_PARSE_POINTER_MASK);
+ i++;
+ i += skip_space(&line[i]);
+ }
+
+ /* need to reverse to get correct pointer order */
+ pointers = 0;
+ while (bits)
+ {
+ pointers = (pointers << 2);
+ pointers = (pointers | (bits & VTK_PARSE_POINTER_LOWMASK));
+ bits = ((bits >> 2) & VTK_PARSE_POINTER_MASK);
+ }
+
+ /* add pointer indirection to correspond to first array dimension */
+ if (entry->Typedef->NumberOfDimensions > 1)
+ {
+ pointers = ((pointers << 2) | VTK_PARSE_ARRAY);
+ }
+ else if (entry->Typedef->NumberOfDimensions == 1)
+ {
+ pointers = ((pointers << 2) | VTK_PARSE_POINTER);
+ }
+
+ /* include the pointers in the type */
+ entry->Typedef->Type |= (pointers & VTK_PARSE_POINTER_MASK);
+
+ /* read the base type (and const) */
+ bits = 0;
+ i += vtkParse_BasicTypeFromString(&line[i], &bits, &ccp, &n);
+ entry->Typedef->Class = vtkParse_CacheString(info->Strings, ccp, n);
+ entry->Typedef->Type |= bits;
+ }
+
+ /* get the header file */
+ if (line[i] == ';')
+ {
+ i++;
+ i += skip_space(&line[i]);
+ n = 0;
+ while(line[i+n] != '\0' && line[i+n] != ';' &&
+ !isspace(line[i+n])) { n++; };
+ entry->HeaderFile = vtkParse_CacheString(info->Strings, &line[i], n);
+
+ i += n;
+ i += skip_space(&line[i]);
+
+ /* get the module */
+ if (line[i] == ';')
+ {
+ i++;
+ i += skip_space(&line[i]);
+ n = 0;
+ while(line[i+n] != '\0' && line[i+n] != ';' &&
+ !isspace(line[i+n])) { n++; };
+ entry->Module = vtkParse_CacheString(info->Strings, &line[i], n);
+
+ i += n;
+ i += skip_space(&line[i]);
+ }
+
+ /* get all flags */
+ while (line[i] == ';')
+ {
+ i++;
+ i += skip_space(&line[i]);
+ if (entry->NumberOfProperties == 0)
+ {
+ entry->Properties = (const char **)malloc(sizeof(char **));
+ }
+ else
+ {
+ entry->Properties = (const char **)realloc(
+ (char **)entry->Properties,
+ (entry->NumberOfProperties+1)*sizeof(char **));
+ }
+ n = 0;
+ while (line[i+n] != '\0' && line[i+n] != '\n' && line[i+n] != ';')
+ { n++; }
+ if (n && skip_space(&line[i]) != n)
+ {
+ entry->Properties[entry->NumberOfProperties++] =
+ vtkParse_CacheString(info->Strings, &line[i], n);
+ }
+ i += n;
+ }
+ }
+ }
+
+ if (!feof(fp))
+ {
+ vtkParseHierarchy_Free(info);
+ info = NULL;
+ }
+
+ free(line);
+
+ sort_hierarchy_entries(info);
+
+ return info;
+}
+
+/* free a HierarchyInfo struct */
+void vtkParseHierarchy_Free(HierarchyInfo *info)
+{
+ HierarchyEntry *entry;
+ int i;
+
+ for (i = 0; i < info->NumberOfEntries; i++)
+ {
+ entry = &info->Entries[i];
+ if (entry->NumberOfTemplateParameters)
+ {
+ free((char **)entry->TemplateParameters);
+ free((char **)entry->TemplateDefaults);
+ }
+ if (entry->NumberOfSuperClasses)
+ {
+ free((char **)entry->SuperClasses);
+ free(entry->SuperClassIndex);
+ }
+ if (entry->NumberOfProperties)
+ {
+ free((char **)entry->Properties);
+ }
+ }
+
+ free(info->Entries);
+ free(info);
+}
+
+
+/* Check whether class is derived from baseclass. You must supply
+ * the entry for the class (returned by FindEntry) as well as the
+ * classname. If the class is templated, the classname can include
+ * template args in angle brackets. If you provide a pointer for
+ * baseclass_with_args, then it will be used to return the name of
+ * name of the baseclass with template args in angle brackets. */
+
+int vtkParseHierarchy_IsTypeOfTemplated(
+ const HierarchyInfo *info,
+ const HierarchyEntry *entry, const char *classname,
+ const char *baseclass, const char **baseclass_with_args)
+{
+ HierarchyEntry *tmph;
+ const char *name;
+ const char *supername;
+ char *tmp;
+ int templated;
+ int baseclass_is_template_parameter;
+ int supername_needs_free = 0;
+ int classname_needs_free = 0;
+ int i, j, k;
+ int nargs;
+ const char **args;
+ size_t m;
+ int iterating = 1;
+ int rval = 0;
+
+ while (iterating)
+ {
+ iterating = 0;
+ templated = 0;
+ baseclass_is_template_parameter = 0;
+ nargs = 0;
+ args = NULL;
+
+ /* if classname is the same as baseclass, done! */
+ if (strcmp(entry->Name, baseclass) == 0)
+ {
+ if (baseclass_with_args)
+ {
+ if (!classname_needs_free)
+ {
+ tmp = (char *)malloc(strlen(classname) + 1);
+ strcpy(tmp, classname);
+ classname = tmp;
+ }
+ *baseclass_with_args = classname;
+ classname_needs_free = 0;
+ }
+ rval = 1;
+ break;
+ }
+ else if (entry->NumberOfSuperClasses == 0)
+ {
+ rval = 0;
+ break;
+ }
+
+ /* if class is templated */
+ if (entry->NumberOfTemplateParameters)
+ {
+ /* check for template args for classname */
+ m = strlen(entry->Name);
+ if (classname[m] == '<')
+ {
+ templated = 1;
+
+ nargs = entry->NumberOfTemplateParameters;
+ vtkParse_DecomposeTemplatedType(classname, &name, nargs, &args,
+ entry->TemplateDefaults);
+ }
+ }
+
+ /* check all baseclasses */
+ for (j = 0; j < entry->NumberOfSuperClasses && rval == 0; j++)
+ {
+ supername = entry->SuperClasses[j];
+
+ if (templated)
+ {
+ for (k = 0; k < entry->NumberOfTemplateParameters; k++)
+ {
+ /* check if the baseclass itself is a template parameter */
+ m = strlen(entry->TemplateParameters[k]);
+ if (strncmp(entry->TemplateParameters[k], supername, m) == 0 &&
+ !isalnum(supername[m]) && supername[m] != '_')
+ {
+ baseclass_is_template_parameter = 1;
+ break;
+ }
+ }
+
+ /* use the class template args to find baseclass template args */
+ supername = vtkParse_StringReplace(
+ supername, entry->NumberOfTemplateParameters, entry->TemplateParameters, args);
+ if (supername != entry->SuperClasses[j])
+ {
+ supername_needs_free = 1;
+ }
+ }
+
+ /* check the cached index for the baseclass entry */
+ i = entry->SuperClassIndex[j];
+ if (i == -1)
+ {
+ /* index was not set yet, so search for the entry */
+ tmph = vtkParseHierarchy_FindEntry(info, supername);
+ while (tmph && tmph->IsTypedef)
+ {
+ if (tmph->Typedef->Class)
+ {
+ tmph = vtkParseHierarchy_FindEntry(info, tmph->Typedef->Class);
+ continue;
+ }
+ break;
+ }
+
+ if (tmph)
+ {
+ i = (int)(tmph - info->Entries);
+ }
+ else
+ {
+ /* entry not found, don't try again */
+ /* i = -2; messes things up for templates */
+ /* fprintf(stderr, "not found \"%s\"\n", entry->SuperClasses[j]); */
+ }
+
+ /* if baseclass is a template parameter, its entry cannot be cached */
+ if (!baseclass_is_template_parameter)
+ {
+ /* cache the position of the baseclass */
+ ((HierarchyEntry *)entry)->SuperClassIndex[j] = i;
+ }
+ }
+
+ /* if entry was found, continue down the chain */
+ if (i >= 0)
+ {
+ if (classname_needs_free)
+ {
+ free((char *)classname);
+ }
+ classname = supername;
+ classname_needs_free = supername_needs_free;
+ supername_needs_free = 0;
+
+ /* use the iteration loop instead of recursion */
+ if (j+1 >= entry->NumberOfSuperClasses)
+ {
+ entry = &info->Entries[i];
+ iterating = 1;
+ }
+
+ /* recurse for multiple inheritance */
+ else
+ {
+ rval = vtkParseHierarchy_IsTypeOfTemplated(
+ info, &info->Entries[i], classname, baseclass,
+ baseclass_with_args);
+ }
+ }
+
+ if (supername_needs_free)
+ {
+ free((char *)supername);
+ supername_needs_free = 0;
+ }
+
+ } /* end of loop over superclasses */
+
+ if (templated)
+ {
+ vtkParse_FreeTemplateDecomposition(name, nargs, args);
+ }
+
+ } /* end of "while (iterating)" */
+
+ if (classname_needs_free)
+ {
+ free((char *)classname);
+ }
+
+ if (baseclass_with_args && !rval)
+ {
+ *baseclass_with_args = NULL;
+ }
+
+ return rval;
+}
+
+int vtkParseHierarchy_IsTypeOf(
+ const HierarchyInfo *info, const HierarchyEntry *entry,
+ const char *baseclass)
+{
+ return vtkParseHierarchy_IsTypeOfTemplated(
+ info, entry, entry->Name, baseclass, NULL);
+}
+
+/* Free args returned by IsTypeOfTemplated */
+void vtkParseHierarchy_FreeTemplateArgs(int n, const char *args[])
+{
+ int i;
+
+ for (i = 0; i < n; i++)
+ {
+ free((char *)args[i]);
+ }
+
+ free((char **)args);
+}
+
+/* Given a classname with template parameters, get the superclass name
+ * with corresponding template parameters. Returns null if 'i' is out
+ * of range, i.e. greater than or equal to the number of superclasses.
+ * The returned classname must be freed with "free()". */
+const char *vtkParseHierarchy_TemplatedSuperClass(
+ const HierarchyEntry *entry, const char *classname, int i)
+{
+ const char *supername = NULL;
+ const char *name;
+ const char **args;
+ char *cp;
+ size_t j;
+
+ if (i < entry->NumberOfSuperClasses)
+ {
+ supername = entry->SuperClasses[i];
+ j = vtkParse_IdentifierLength(classname);
+
+ if (classname[j] == '<')
+ {
+ vtkParse_DecomposeTemplatedType(classname, &name,
+ entry->NumberOfTemplateParameters, &args, entry->TemplateDefaults);
+ supername = vtkParse_StringReplace(entry->SuperClasses[i],
+ entry->NumberOfTemplateParameters, entry->TemplateParameters, args);
+ vtkParse_FreeTemplateDecomposition(
+ name, entry->NumberOfTemplateParameters, args);
+ }
+
+ if (supername == entry->SuperClasses[i])
+ {
+ cp = (char *)malloc(strlen(supername) + 1);
+ strcpy(cp, supername);
+ supername = cp;
+ }
+ }
+
+ return supername;
+}
+
+/* get the specified property, or return NULL */
+const char *vtkParseHierarchy_GetProperty(
+ const HierarchyEntry *entry, const char *property)
+{
+ int i;
+ size_t k;
+
+ if (entry)
+ {
+ for (i = 0; i < entry->NumberOfProperties; i++)
+ {
+ /* skip the property name, everything after is the property */
+ k = vtkParse_NameLength(entry->Properties[i]);
+ if (k == strlen(property) &&
+ strncmp(entry->Properties[i], property, k) == 0)
+ {
+ if (entry->Properties[i][k] == ' ' ||
+ entry->Properties[i][k] == '=') { k++; }
+ return &entry->Properties[i][k];
+ }
+ }
+ }
+
+ return NULL;
+}
+
+/* Expand all unrecognized types in a ValueInfo struct by
+ * using the typedefs in the HierarchyInfo struct. */
+int vtkParseHierarchy_ExpandTypedefsInValue(
+ const HierarchyInfo *info, ValueInfo *val, StringCache *cache,
+ const char *scope)
+{
+ char text[128];
+ char *cp;
+ const char *newclass;
+ size_t n, m;
+ int i;
+ HierarchyEntry *entry;
+ int scope_needs_free = 0;
+ int result = 1;
+
+ while (((val->Type & VTK_PARSE_BASE_TYPE) == VTK_PARSE_OBJECT ||
+ (val->Type & VTK_PARSE_BASE_TYPE) == VTK_PARSE_UNKNOWN) &&
+ val->Class != 0)
+ {
+ entry = 0;
+
+ /* search for the type in the provided scope */
+ while (entry == 0 && scope != 0)
+ {
+ cp = text;
+ n = strlen(scope);
+ m = strlen(val->Class);
+ /* only malloc if more than 128 chars needed */
+ if (n + m + 2 >= 128)
+ {
+ cp = (char *)malloc(n+m+3);
+ }
+
+ /* scope the name */
+ strncpy(cp, scope, n);
+ cp[n++] = ':';
+ cp[n++] = ':';
+ strncpy(&cp[n], val->Class, m);
+ cp[n+m] = '\0';
+
+ entry = vtkParseHierarchy_FindEntry(info, cp);
+
+ if (cp != text) { free(cp); }
+
+ /* if not found, try inherited scopes */
+ if (entry == 0)
+ {
+ entry = vtkParseHierarchy_FindEntry(info, scope);
+ scope = 0;
+ scope_needs_free = 0;
+ if (entry && entry->NumberOfSuperClasses)
+ {
+ for (i = 0; i+1 < entry->NumberOfSuperClasses; i++)
+ {
+ if (scope_needs_free) { free((char *)scope); }
+ scope = vtkParseHierarchy_ExpandTypedefsInName(
+ info, entry->SuperClasses[i], NULL);
+ scope_needs_free = (scope != entry->SuperClasses[i]);
+ /* recurse if more than one superclass */
+ if (vtkParseHierarchy_ExpandTypedefsInValue(
+ info, val, cache, scope))
+ {
+ if (scope_needs_free) { free((char *)scope); }
+ return 1;
+ }
+ }
+ if (scope_needs_free) { free((char *)scope); }
+ scope = vtkParseHierarchy_ExpandTypedefsInName(
+ info, entry->SuperClasses[i], NULL);
+ scope_needs_free = (scope != entry->SuperClasses[i]);
+ }
+ entry = 0;
+ }
+ }
+
+ /* if not found, try again with no scope */
+ if (entry == 0)
+ {
+ entry = vtkParseHierarchy_FindEntry(info, val->Class);
+ }
+
+ if (entry && entry->IsTypedef)
+ {
+ vtkParse_ExpandTypedef(val, entry->Typedef);
+ }
+ else if (entry)
+ {
+ newclass = vtkParseHierarchy_ExpandTypedefsInName(
+ info, val->Class, scope);
+ if (newclass != val->Class)
+ {
+ val->Class = vtkParse_CacheString(cache, newclass, strlen(newclass));
+ free((char *)newclass);
+ }
+ result = 1;
+ break;
+ }
+ else
+ {
+ result = 0;
+ break;
+ }
+ }
+
+ if (scope_needs_free) { free((char *)scope); }
+
+ return result;
+}
+
+/* Expand typedefs found in an expression stored as a string.
+ * The value of "text" will be returned if no expansion occurred,
+ * else a new string is returned that must be freed with "free()". */
+const char *vtkParseHierarchy_ExpandTypedefsInName(
+ const HierarchyInfo *info, const char *name, const char *scope)
+{
+ char text[128];
+ char *cp;
+ size_t n, m;
+ const char *newname = name;
+ HierarchyEntry *entry = NULL;
+
+ /* note: unlike ExpandTypedefsInValue, this does not yet recurse
+ * or look in superclass scopes */
+
+ /* doesn't yet handle names that are scoped or templated */
+ m = vtkParse_IdentifierLength(name);
+ if (name[m] != '\0')
+ {
+ return name;
+ }
+
+ if (scope)
+ {
+ cp = text;
+ n = strlen(scope);
+ m = strlen(name);
+ /* only malloc if more than 128 chars needed */
+ if (n + m + 2 >= 128)
+ {
+ cp = (char *)malloc(n+m+3);
+ }
+
+ /* scope the name */
+ strncpy(cp, scope, n);
+ cp[n++] = ':';
+ cp[n++] = ':';
+ strncpy(&cp[n], name, m);
+ cp[n+m] = '\0';
+
+ entry = vtkParseHierarchy_FindEntry(info, cp);
+
+ if (cp != text) { free(cp); }
+ }
+
+ if (!entry)
+ {
+ entry = vtkParseHierarchy_FindEntry(info, name);
+ }
+
+ newname = NULL;
+ if (entry && entry->IsTypedef && entry->Typedef->Class)
+ {
+ newname = entry->Typedef->Class;
+ }
+ if (newname)
+ {
+ cp = (char *)malloc(strlen(newname) + 1);
+ strcpy(cp, newname);
+ name = cp;
+ }
+
+ return name;
+}
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkParseHierarchy.h
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+/*-------------------------------------------------------------------------
+ Copyright (c) 2010 David Gobbi.
+
+ Contributed to the VisualizationToolkit by the author in June 2010
+ under the terms of the Visualization Toolkit 2008 copyright.
+--------------------------------------------------------------------------*/
+
+/**
+ This file contains utility functions for loading and parsing
+ a VTK hierarchy file. The file contains entries like the
+ following (one per line in the file):
+
+ classname [ : superclass ] ; header.h ; vtkKit [; flags]
+
+ For each typedef, the output file will have a line like this:
+
+ name = &[2][3]* const type ; header.h ; vtkKit [; flags]
+
+ For each enum, the output file will have:
+
+ enumname : enum ; header.h ; vtkKit [; flags]
+
+*/
+
+#ifndef VTK_PARSE_HIERARCHY_H
+#define VTK_PARSE_HIERARCHY_H
+
+/* Need the ValueInfo struct for typedefs */
+#include "vtkParseData.h"
+
+/**
+ * One entry from the hierarchy file.
+ * It contains a class name, the superclasses, and the header file.
+ */
+typedef struct _HierarchyEntry
+{
+ const char *Name; /* the class or type name */
+ const char *HeaderFile; /* header file the class is defined in */
+ const char *Module; /* library the class is defined in */
+ int NumberOfTemplateParameters; /* number of template params */
+ const char **TemplateParameters;
+ const char **TemplateDefaults;
+ int NumberOfProperties; /* number of properties */
+ const char **Properties;
+ int NumberOfSuperClasses; /* number of superclasses */
+ const char **SuperClasses;
+ int *SuperClassIndex; /* for internal use only */
+ ValueInfo *Typedef; /* for typedefs */
+ int IsEnum; /* this entry is for an enum type */
+ int IsTypedef; /* this entry is for a typedef */
+} HierarchyEntry;
+
+/**
+ * All the entries from a hierarchy file.
+ */
+typedef struct _HierarchyInfo
+{
+ int NumberOfEntries;
+ HierarchyEntry *Entries;
+ StringCache *Strings;
+} HierarchyInfo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Read a hierarchy file into a HeirarchyInfo struct, or return NULL
+ */
+HierarchyInfo *vtkParseHierarchy_ReadFile(const char *filename);
+
+/**
+ * Free a HierarchyInfo struct
+ */
+void vtkParseHierarchy_Free(HierarchyInfo *info);
+
+/**
+ * Return the entry for a class or type, or null if not found
+ */
+HierarchyEntry *vtkParseHierarchy_FindEntry(
+ const HierarchyInfo *info, const char *classname);
+
+/**
+ * Get properties for the class. Returns NULL if the property
+ * is not set, and returns either an empty string or a value string
+ * if the property is set. The properties supported are as follows:
+ * "WRAP_EXCLUDE", "WRAP_SPECIAL", and "ABSTRACT"
+ */
+const char *vtkParseHierarchy_GetProperty(
+ const HierarchyEntry *entry, const char *property);
+
+/**
+ * Check whether class is derived from baseclass.
+ */
+int vtkParseHierarchy_IsTypeOf(const HierarchyInfo *info,
+ const HierarchyEntry *entry, const char *baseclass);
+
+/**
+ * Check whether class is derived from baseclass. You must supply
+ * the entry for the class (returned by FindEntry) as well as the
+ * classname. The classname can include template args in angle brackets.
+ * The baseclass_with_args parameter, if not set to NULL, will be used
+ * to return the name of base class with the template args in angle
+ * brackets that classname was derived from. If not set to NULL,
+ * this should be freed with free() to avoid a memory leak.
+ */
+int vtkParseHierarchy_IsTypeOfTemplated(const HierarchyInfo *info,
+ const HierarchyEntry *entry, const char *classname,
+ const char *baseclass, const char **baseclass_with_args);
+
+/**
+ * Free the template args returned by IsTypeOfTemplated
+ */
+void vtkParseHierarchy_FreeTemplateArgs(int n, const char *args[]);
+
+/**
+ * Given a classname with template parameters, get the superclass name
+ * with corresponding template parameters. Returns null if 'i' is out
+ * of range, i.e. greater than or equal to the number of superclasses.
+ * The returned classname must be freed with "free()".
+ */
+const char *vtkParseHierarchy_TemplatedSuperClass(
+ const HierarchyEntry *entry, const char *classname, int i);
+
+/**
+ * Expand all unrecognized types in a ValueInfo struct by
+ * using the typedefs in the HierarchyInfo struct.
+ */
+int vtkParseHierarchy_ExpandTypedefsInValue(
+ const HierarchyInfo *info, ValueInfo *data, StringCache *cache,
+ const char *scope);
+
+/**
+ * Expand typedefs found in a name stored as a string. The value
+ * of "text" will be returned if no expansion occurred, else a new
+ * string is returned that must be freed with "free()".
+ */
+const char *vtkParseHierarchy_ExpandTypedefsInName(
+ const HierarchyInfo *info, const char *text, const char *scope);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkParseInternal.h
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+
+/*
+ This is an internal header for vtkParse.y, it contains methods for
+ manipulating the data structures that are not meant for general
+ use by the wrappers, and that are likely to change over time.
+*/
+
+#ifndef VTK_PARSE_PRIVATE_H
+#define VTK_PARSE_PRIVATE_H
+
+#include "vtkParse.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Initializer methods
+ */
+/*@{*/
+void vtkParse_InitFile(FileInfo *file_info);
+void vtkParse_InitNamespace(NamespaceInfo *namespace_info);
+void vtkParse_InitClass(ClassInfo *cls);
+void vtkParse_InitFunction(FunctionInfo *func);
+void vtkParse_InitValue(ValueInfo *val);
+void vtkParse_InitEnum(EnumInfo *item);
+void vtkParse_InitUsing(UsingInfo *item);
+void vtkParse_InitTemplateArgs(TemplateArgs *arg);
+void vtkParse_InitTemplateArg(TemplateArg *arg);
+/*@}*/
+
+/**
+ * Copy methods
+ */
+/*@{*/
+void vtkParse_CopyNamespace(NamespaceInfo *data, const NamespaceInfo *orig);
+void vtkParse_CopyClass(ClassInfo *data, const ClassInfo *orig);
+void vtkParse_CopyFunction(FunctionInfo *data, const FunctionInfo *orig);
+void vtkParse_CopyValue(ValueInfo *data, const ValueInfo *orig);
+void vtkParse_CopyEnum(EnumInfo *data, const EnumInfo *orig);
+void vtkParse_CopyUsing(UsingInfo *data, const UsingInfo *orig);
+void vtkParse_CopyTemplateArgs(TemplateArgs *data, const TemplateArgs *orig);
+void vtkParse_CopyTemplateArg(TemplateArg *data, const TemplateArg *orig);
+/*@}*/
+
+/**
+ * Free methods
+ */
+/*@{*/
+void vtkParse_FreeFile(FileInfo *file_info);
+void vtkParse_FreeNamespace(NamespaceInfo *namespace_info);
+void vtkParse_FreeClass(ClassInfo *cls);
+void vtkParse_FreeFunction(FunctionInfo *func);
+void vtkParse_FreeValue(ValueInfo *val);
+void vtkParse_FreeEnum(EnumInfo *item);
+void vtkParse_FreeUsing(UsingInfo *item);
+void vtkParse_FreeTemplateArgs(TemplateArgs *arg);
+void vtkParse_FreeTemplateArg(TemplateArg *arg);
+/*@}*/
+
+/**
+ * Make a persistent copy of a string for use with AddStringToArray:
+ * At most 'n' chars will be copied, and the string will be terminated.
+ * If a null pointer is provided, then a null pointer will be returned.
+ */
+const char *vtkParse_DuplicateString(const char *cp, size_t n);
+
+/**
+ * Add a string to an array of strings, grow array as necessary.
+ */
+void vtkParse_AddStringToArray(
+ const char ***valueArray, int *count, const char *value);
+
+/**
+ * Expand the Item array for classes and namespaces.
+ */
+void vtkParse_AddItemToArray(
+ ItemInfo **valueArray, int *count, parse_item_t type, int idx);
+
+
+/**
+ * Add various items to the structs.
+ */
+/*@{*/
+void vtkParse_AddClassToClass(ClassInfo *info, ClassInfo *item);
+void vtkParse_AddFunctionToClass(ClassInfo *info, FunctionInfo *item);
+void vtkParse_AddEnumToClass(ClassInfo *info, EnumInfo *item);
+void vtkParse_AddConstantToClass(ClassInfo *info, ValueInfo *item);
+void vtkParse_AddVariableToClass(ClassInfo *info, ValueInfo *item);
+void vtkParse_AddTypedefToClass(ClassInfo *info, ValueInfo *item);
+void vtkParse_AddUsingToClass(ClassInfo *info, UsingInfo *item);
+void vtkParse_AddNamespaceToNamespace(NamespaceInfo *info,NamespaceInfo *item);
+void vtkParse_AddClassToNamespace(NamespaceInfo *info, ClassInfo *item);
+void vtkParse_AddFunctionToNamespace(NamespaceInfo *info, FunctionInfo *item);
+void vtkParse_AddEnumToNamespace(NamespaceInfo *info, EnumInfo *item);
+void vtkParse_AddConstantToNamespace(NamespaceInfo *info, ValueInfo *item);
+void vtkParse_AddVariableToNamespace(NamespaceInfo *info, ValueInfo *item);
+void vtkParse_AddTypedefToNamespace(NamespaceInfo *info, ValueInfo *item);
+void vtkParse_AddUsingToNamespace(NamespaceInfo *info, UsingInfo *item);
+void vtkParse_AddArgumentToFunction(FunctionInfo *info, ValueInfo *item);
+void vtkParse_AddArgumentToTemplate(TemplateArgs *info, TemplateArg *item);
+/*@}*/
+
+/**
+ * Add default constructors if they do not already exist
+ */
+void vtkParse_AddDefaultConstructors(ClassInfo *data);
+
+/**
+ * Simple utility for mapping VTK types to VTK_PARSE types.
+ */
+unsigned int vtkParse_MapType(int vtktype);
+
+/**
+ * Ignore BTX/ETX markers
+ */
+void vtkParse_SetIgnoreBTX(int option);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkParseMain.c
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+
+/*
+
+This file provides a unified front-end for the wrapper generators.
+
+*/
+
+#include "vtkParse.h"
+#include "vtkParseData.h"
+#include "vtkParseMain.h"
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* This is the struct that contains the options */
+OptionInfo options;
+
+/* Get the base filename */
+static const char *parse_exename(const char *cmd)
+{
+ const char *exename;
+
+ /* remove directory part of exe name */
+ for (exename = cmd + strlen(cmd); exename > cmd; --exename)
+ {
+ char pc = exename[-1];
+ if (pc == ':' || pc == '/' || pc == '\\')
+ {
+ break;
+ }
+ }
+
+ return exename;
+}
+
+/* Print the help */
+static void parse_print_help(FILE *fp, const char *cmd, int multi)
+{
+ fprintf(fp,
+ "Usage: %s [options] infile... \n"
+ " --help print this help message\n"
+ " --version print the VTK version\n"
+ " -o <file> the output file\n"
+ " -I <dir> add an include directory\n"
+ " -D <macro[=def]> define a preprocessor macro\n"
+ " -U <macro> undefine a preprocessor macro\n"
+ " @<file> read arguments from a file\n",
+ parse_exename(cmd));
+
+ /* args for describing a singe header file input */
+ if (!multi)
+ {
+ fprintf(fp,
+ " --hints <file> the hints file to use\n"
+ " --types <file> the type hierarchy file to use\n"
+ " --concrete force concrete class (ignored, deprecated)\n"
+ " --abstract force abstract class (ignored, deprecated)\n"
+ " --vtkobject vtkObjectBase-derived class (ignored, deprecated)\n"
+ " --special non-vtkObjectBase class (ignored, deprecated)\n");
+ }
+}
+
+/* append an arg to the arglist */
+static void parse_append_arg(int *argn, char ***args, char *arg)
+{
+ /* if argn is a power of two, allocate more space */
+ if (*argn > 0 && (*argn & (*argn - 1)) == 0)
+ {
+ *args = (char **)realloc(*args, 2*(*argn)*sizeof(char *));
+ }
+ /* append argument to list */
+ (*args)[*argn] = arg;
+ (*argn)++;
+}
+
+/* read options from a file, return zero on error */
+static int read_option_file(
+ StringCache *strings, const char *filename, int *argn, char ***args)
+{
+ static int option_file_stack_max = 10;
+ static int option_file_stack_size = 0;
+ static const char *option_file_stack[10];
+ FILE *fp;
+ char *line;
+ const char *ccp;
+ char *argstring;
+ char *arg;
+ size_t maxlen = 15;
+ size_t i, n;
+ int j;
+ int in_string;
+
+ line = (char *)malloc(maxlen);
+
+ fp = fopen(filename, "r");
+
+ if (fp == NULL)
+ {
+ return 0;
+ }
+
+ /* read the file line by line */
+ while (fgets(line, (int)maxlen, fp))
+ {
+ n = strlen(line);
+
+ /* if buffer not long enough, increase it */
+ while (n == maxlen-1 && line[n-1] != '\n' && !feof(fp))
+ {
+ maxlen *= 2;
+ line = (char *)realloc(line, maxlen);
+ if (!fgets(&line[n], (int)(maxlen-n), fp)) { break; }
+ n += strlen(&line[n]);
+ }
+
+ /* allocate a string to hold the parsed arguments */
+ argstring = vtkParse_NewString(strings, n);
+ arg = argstring;
+ i = 0;
+
+ /* break the line into individual options */
+ ccp = line;
+ in_string = 0;
+ while (*ccp != '\0')
+ {
+ for (;;)
+ {
+ if (*ccp == '\\')
+ {
+ ccp++;
+ }
+ else if (*ccp == '\"' || *ccp == '\'')
+ {
+ if (!in_string)
+ {
+ in_string = *ccp++;
+ continue;
+ }
+ else if (*ccp == in_string)
+ {
+ in_string = 0;
+ ccp++;
+ continue;
+ }
+ }
+ else if (!in_string && isspace(*ccp))
+ {
+ do { ccp++; } while (isspace(*ccp));
+ break;
+ }
+ if (*ccp == '\0')
+ {
+ break;
+ }
+ /* append character to argument */
+ arg[i++] = *ccp++;
+ }
+ arg[i++] = '\0';
+
+ if (arg[0] == '@')
+ {
+ /* recursively expand '@file' option */
+ if (option_file_stack_size == option_file_stack_max)
+ {
+ fprintf(stderr, "%s: @file recursion is too deep.\n",
+ (*args)[0]);
+ exit(1);
+ }
+ /* avoid reading the same file recursively */
+ option_file_stack[option_file_stack_size++] = filename;
+ for (j = 0; j < option_file_stack_size; j++)
+ {
+ if (strcmp(&arg[1], option_file_stack[j]) == 0)
+ {
+ break;
+ }
+ }
+ if (j < option_file_stack_size)
+ {
+ parse_append_arg(argn, args, arg);
+ }
+ else if (read_option_file(strings, &arg[1], argn, args) == 0)
+ {
+ parse_append_arg(argn, args, arg);
+ }
+ option_file_stack_size--;
+ }
+ else if (arg[0] != '\0')
+ {
+ parse_append_arg(argn, args, arg);
+ }
+ /* prepare for next arg */
+ arg += i;
+ i = 0;
+ }
+ }
+
+ return 1;
+}
+
+/* expand any "@file" args that occur in the command-line args */
+static void parse_expand_args(
+ StringCache *strings, int argc, char *argv[], int *argn, char ***args)
+{
+ int i;
+
+ *argn = 0;
+ *args = (char **)malloc(sizeof(char *));
+
+ for (i = 0; i < argc; i++)
+ {
+ /* check for "@file" unless this is the command name */
+ if (i > 0 || argv[i][0] == '@')
+ {
+ /* if read_option_file returns null, add "@file" to the args */
+ /* (this mimics the way that gcc expands @file arguments) */
+ if (read_option_file(strings, &argv[i][1], argn, args) == 0)
+ {
+ parse_append_arg(argn, args, argv[i]);
+ }
+ }
+ else
+ {
+ /* append any other arg */
+ parse_append_arg(argn, args, argv[i]);
+ }
+ }
+}
+
+/* Check the options: "multi" should be zero for wrapper tools that
+ * only take one input file, or one for wrapper tools that take multiple
+ * input files. Returns zero for "--version" or "--help", or returns -1
+ * if an error occurred. Otherwise, it returns the number of args
+ * that were successfully parsed. */
+static int parse_check_options(int argc, char *argv[], int multi)
+{
+ int i;
+ size_t j;
+ char *cp;
+ char c;
+
+ options.NumberOfFiles = 0;
+ options.Files = NULL;
+ options.InputFileName = NULL;
+ options.OutputFileName = NULL;
+ options.HierarchyFileName = 0;
+ options.HintFileName = 0;
+
+ for (i = 1; i < argc; i++)
+ {
+ if (strcmp(argv[i], "--help") == 0)
+ {
+ parse_print_help(stdout, argv[0], multi);
+ return 0;
+ }
+ else if (strcmp(argv[i], "--version") == 0)
+ {
+ const char *ver = VTK_PARSE_VERSION;
+ fprintf(stdout, "%s %s\n", parse_exename(argv[0]), ver);
+ return 0;
+ }
+ else if (argv[i][0] != '-')
+ {
+ if (options.NumberOfFiles == 0)
+ {
+ options.Files = (char **)malloc(sizeof(char *));
+ }
+ else if ((options.NumberOfFiles & (options.NumberOfFiles - 1)) == 0)
+ {
+ options.Files = (char **)realloc(
+ options.Files, 2*options.NumberOfFiles*sizeof(char *));
+ }
+ options.Files[options.NumberOfFiles++] = argv[i];
+ }
+ else if (argv[i][0] == '-' && isalpha(argv[i][1]))
+ {
+ c = argv[i][1];
+ cp = &argv[i][2];
+ if (*cp == '\0')
+ {
+ i++;
+ if (i >= argc || argv[i][0] == '-')
+ {
+ return -1;
+ }
+ cp = argv[i];
+ }
+
+ if (c == 'o')
+ {
+ options.OutputFileName = cp;
+ }
+ else if (c == 'I')
+ {
+ vtkParse_IncludeDirectory(cp);
+ }
+ else if (c == 'D')
+ {
+ j = 0;
+ while (cp[j] != '\0' && cp[j] != '=') { j++; }
+ if (cp[j] == '=') { j++; }
+ vtkParse_DefineMacro(cp, &cp[j]);
+ }
+ else if (c == 'U')
+ {
+ vtkParse_UndefineMacro(cp);
+ }
+ }
+ else if (!multi && strcmp(argv[i], "--hints") == 0)
+ {
+ i++;
+ if (i >= argc || argv[i][0] == '-')
+ {
+ return -1;
+ }
+ options.HintFileName = argv[i];
+ }
+ else if (!multi && strcmp(argv[i], "--types") == 0)
+ {
+ i++;
+ if (i >= argc || argv[i][0] == '-')
+ {
+ return -1;
+ }
+ options.HierarchyFileName = argv[i];
+ }
+ else if (strcmp(argv[i], "--vtkobject") == 0 ||
+ strcmp(argv[i], "--special") == 0 ||
+ strcmp(argv[i], "--abstract") == 0 ||
+ strcmp(argv[i], "--concrete") == 0)
+ {
+ fprintf(stderr, "Warning: the %s option is deprecated "
+ "and will be ignored.\n", argv[i]);
+ }
+ }
+
+ return i;
+}
+
+/* Return a pointer to the static OptionInfo struct */
+OptionInfo *vtkParse_GetCommandLineOptions()
+{
+ return &options;
+}
+
+/* Command-line argument handler for wrapper tools */
+FileInfo *vtkParse_Main(int argc, char *argv[])
+{
+ int argi;
+ int expected_files;
+ FILE *ifile;
+ FILE *hfile = 0;
+ FileInfo *data;
+ StringCache strings;
+ int argn;
+ char **args;
+
+ /* expand any "@file" args */
+ vtkParse_InitStringCache(&strings);
+ parse_expand_args(&strings, argc, argv, &argn, &args);
+
+ /* read the args into the static OptionInfo struct */
+ argi = parse_check_options(argn, args, 0);
+
+ /* was output file already specified by the "-o" option? */
+ expected_files = (options.OutputFileName == NULL ? 2 : 1);
+
+ /* verify number of args, print usage if not valid */
+ if (argi == 0)
+ {
+ free(args);
+ exit(0);
+ }
+ else if (argi < 0 || options.NumberOfFiles != expected_files)
+ {
+ parse_print_help(stderr, args[0], 0);
+ exit(1);
+ }
+
+ /* open the input file */
+ options.InputFileName = options.Files[0];
+
+ if (!(ifile = fopen(options.InputFileName, "r")))
+ {
+ fprintf(stderr, "Error opening input file %s\n", options.InputFileName);
+ exit(1);
+ }
+
+ if (options.OutputFileName == NULL &&
+ options.NumberOfFiles > 1)
+ {
+ /* allow outfile to be given after infile, if "-o" option not used */
+ options.OutputFileName = options.Files[1];
+ fprintf(stderr, "Deprecated: specify output file with \"-o\".\n");
+ }
+
+ /* free the expanded args */
+ free(args);
+
+ /* open the hint file, if given on the command line */
+ if (options.HintFileName && options.HintFileName[0] != '\0')
+ {
+ if (!(hfile = fopen(options.HintFileName, "r")))
+ {
+ fprintf(stderr, "Error opening hint file %s\n", options.HintFileName);
+ fclose(ifile);
+ exit(1);
+ }
+ }
+
+ /* make sure than an output file was given on the command line */
+ if (options.OutputFileName == NULL)
+ {
+ fprintf(stderr, "No output file was specified\n");
+ fclose(ifile);
+ if (hfile)
+ {
+ fclose(hfile);
+ }
+ exit(1);
+ }
+
+ /* if a hierarchy is was given, then BTX/ETX can be ignored */
+ vtkParse_SetIgnoreBTX(0);
+ if (options.HierarchyFileName)
+ {
+ vtkParse_SetIgnoreBTX(1);
+ }
+
+ /* parse the input file */
+ data = vtkParse_ParseFile(options.InputFileName, ifile, stderr);
+
+ if (!data)
+ {
+ exit(1);
+ }
+
+ /* fill in some blanks by using the hints file */
+ if (hfile)
+ {
+ vtkParse_ReadHints(data, hfile, stderr);
+ }
+
+ if (data->MainClass)
+ {
+ /* mark class as abstract unless it has New() method */
+ int nfunc = data->MainClass->NumberOfFunctions;
+ int ifunc;
+ for (ifunc = 0; ifunc < nfunc; ifunc++)
+ {
+ FunctionInfo *func = data->MainClass->Functions[ifunc];
+ if (func && func->Access == VTK_ACCESS_PUBLIC &&
+ func->Name && strcmp(func->Name, "New") == 0 &&
+ func->NumberOfParameters == 0)
+ {
+ break;
+ }
+ }
+ data->MainClass->IsAbstract = ((ifunc == nfunc) ? 1 : 0);
+ }
+
+ return data;
+}
+
+/* Command-line argument handler for wrapper tools */
+void vtkParse_MainMulti(int argc, char *argv[])
+{
+ int argi;
+ int argn;
+ char **args;
+ StringCache strings;
+
+ /* expand any "@file" args */
+ vtkParse_InitStringCache(&strings);
+ parse_expand_args(&strings, argc, argv, &argn, &args);
+
+ /* read the args into the static OptionInfo struct */
+ argi = parse_check_options(argn, args, 1);
+ free(args);
+
+ if (argi == 0)
+ {
+ exit(0);
+ }
+ else if (argi < 0 || options.NumberOfFiles == 0)
+ {
+ parse_print_help(stderr, argv[0], 1);
+ exit(1);
+ }
+
+ /* the input file */
+ options.InputFileName = options.Files[0];
+}
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkParseMain.h
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+
+/**
+ vtkParseMain.h provides argument parsing for the wrapper executables.
+
+ Usage: vtkWrap [options] infile ...
+
+ -D <macro[=def]> add a macro definition
+ -U <macro> cancel a macro definition
+ -I <dir> add an include directory
+ -o <file> specify the output file
+ @<file> read arguments from a file
+ --help print a help message and exit
+ --version print the VTK version number and exit
+ --hints <file> hints file
+ --types <file> type hierarchy file
+
+ Notes:
+
+ 1) The "-o" option is needed when there are multiple input files.
+ Otherwise, the output file can be given after the input file.
+
+ 2) The "@file" option allows arguments to be stored in a file,
+ instead of given on the command line. The use of such a file
+ is sometimes necessary to avoid overflowing the 8191-character
+ command-line limit on Windows. If the file is not found, then
+ "@file" will be passed as as a command-line parameter.
+*/
+
+#ifndef VTK_PARSE_MAIN_H
+#define VTK_PARSE_MAIN_H
+
+#include "vtkParseData.h"
+#include <stdio.h>
+
+/**
+ * Options for the wrappers
+ */
+typedef struct _OptionInfo
+{
+ int NumberOfFiles; /* the total number of file arguments */
+ char **Files; /* all of the file arguments */
+ char *InputFileName; /* the first file argument */
+ char *OutputFileName; /* the second file, or the "-o" file */
+ char *HintFileName; /* the file preceded by "--hints" */
+ char *HierarchyFileName; /* the file preceded by "--types" */
+} OptionInfo;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Return the options provided on the command line
+ */
+OptionInfo *vtkParse_GetCommandLineOptions();
+
+/**
+ * The main function, parses the file and returns the result.
+ */
+FileInfo *vtkParse_Main(int argc, char *argv[]);
+
+/**
+ * A main function that can take multiple input files.
+ * It does not parse the files. It will exit on error.
+ */
+void vtkParse_MainMulti(int argc, char *argv[]);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkParsePreprocess.c
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+/*-------------------------------------------------------------------------
+ Copyright (c) 2010 David Gobbi.
+
+ Contributed to the VisualizationToolkit by the author in June 2010
+ under the terms of the Visualization Toolkit 2008 copyright.
+-------------------------------------------------------------------------*/
+
+#include "vtkParsePreprocess.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <errno.h>
+#include <sys/stat.h>
+
+/**
+ This file handles preprocessor directives via a simple
+ recursive-descent parser that only evaluates integers.
+*/
+
+#define PREPROC_DEBUG 0
+
+/** Block size for reading files */
+#define FILE_BUFFER_SIZE 8192
+
+/** Size of hash table must be a power of two */
+#define PREPROC_HASH_TABLE_SIZE 1024u
+
+/** Hashes for preprocessor keywords */
+#define HASH_IFDEF 0x0fa4b283u
+#define HASH_IFNDEF 0x04407ab1u
+#define HASH_IF 0x00597834u
+#define HASH_ELIF 0x7c964b25u
+#define HASH_ELSE 0x7c964c6eu
+#define HASH_ENDIF 0x0f60b40bu
+#define HASH_DEFINED 0x088998d4u
+#define HASH_DEFINE 0xf8804a70u
+#define HASH_UNDEF 0x10823b97u
+#define HASH_INCLUDE 0x9e36af89u
+#define HASH_ERROR 0x0f6321efu
+#define HASH_LINE 0x7c9a15adu
+#define HASH_PRAGMA 0x1566a9fdu
+
+/** Various possible char types */
+#define CPRE_ID 0x01 /* A-Z a-z and _ */
+#define CPRE_DIGIT 0x02 /* 0-9 */
+#define CPRE_IDGIT 0x03 /* 0-9 A-Z a-z and _ */
+#define CPRE_HEX 0x04 /* 0-9A-Fa-f */
+#define CPRE_EXP 0x08 /* EPep (exponents for floats) */
+#define CPRE_SIGN 0x10 /* +- (sign for floats) */
+#define CPRE_QUOTE 0x20 /* " and ' */
+#define CPRE_HSPACE 0x40 /* space, tab, carriage return */
+#define CPRE_VSPACE 0x80 /* newline, vertical tab, form feed */
+#define CPRE_WHITE 0xC0 /* all whitespace characters */
+
+/** Whitespace types.
+ * WS_NO_EOL treats newline as end-of-line, instead of whitespace.
+ * WS_ALL treats newlines as regular whitespace.
+ * WS_COMMENT does not treat comments as whitespace, allowing
+ * comments blocks to be returned as tokens. */
+typedef enum _preproc_space_t
+{
+ WS_NO_EOL = CPRE_HSPACE, /* skip horizontal whitespace only */
+ WS_ALL = CPRE_WHITE, /* skip all whitespace */
+ WS_COMMENT = (CPRE_WHITE | 0x100), /* comments as tokens */
+} preproc_space_t;
+
+/** Preprocessor tokens. */
+typedef enum _preproc_token_t
+{
+ TOK_OTHER = 257,
+ TOK_ID, /* any id */
+ TOK_CHAR, /* char literal */
+ TOK_STRING, /* string literal */
+ TOK_NUMBER, /* any numeric literal */
+ TOK_COMMENT, /* C or C++ comment */
+ TOK_DBLHASH, /* ## */
+ TOK_SCOPE, /* :: */
+ TOK_INCR, /* ++ */
+ TOK_DECR, /* -- */
+ TOK_RSHIFT, /* >> */
+ TOK_LSHIFT, /* << */
+ TOK_AND, /* && */
+ TOK_OR, /* || */
+ TOK_EQ, /* == */
+ TOK_NE, /* != */
+ TOK_GE, /* >= */
+ TOK_LE, /* <= */
+ TOK_ADD_EQ, /* += */
+ TOK_SUB_EQ, /* -= */
+ TOK_MUL_EQ, /* *= */
+ TOK_DIV_EQ, /* /= */
+ TOK_MOD_EQ, /* %= */
+ TOK_AND_EQ, /* &= */
+ TOK_OR_EQ, /* |= */
+ TOK_XOR_EQ, /* ^= */
+ TOK_ARROW, /* -> */
+ TOK_DOT_STAR, /* .* */
+ TOK_ARROW_STAR,/* ->* */
+ TOK_RSHIFT_EQ, /* >>= */
+ TOK_LSHIFT_EQ, /* <<= */
+ TOK_ELLIPSIS, /* ... */
+} preproc_token_t;
+
+/** A struct for going through the input one token at a time. */
+typedef struct _preproc_tokenizer
+{
+ int tok;
+ unsigned int hash;
+ const char *text;
+ size_t len;
+} preproc_tokenizer;
+
+/** Extend dynamic arrays in a progression of powers of two.
+ * Whenever "n" reaches a power of two, then the array size is
+ * doubled so that "n" can be safely incremented. */
+static void *preproc_array_check(
+ void *arraymem, size_t size, int n)
+{
+ /* if empty, alloc for the first time */
+ if (n == 0)
+ {
+ return malloc(size);
+ }
+ /* if count is power of two, reallocate with double size */
+ else if ((n & (n-1)) == 0)
+ {
+ return realloc(arraymem, (n << 1)*size);
+ }
+
+ /* no reallocation, just return the original array */
+ return arraymem;
+}
+
+/** Convert string to int. */
+static preproc_int_t string_to_preproc_int(const char *cp, int base)
+{
+#if defined(_WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)
+ return _strtoi64(cp, NULL, base);
+#else
+ return strtoll(cp, NULL, base);
+#endif
+}
+
+/** Convert string to unsigned int. */
+static preproc_uint_t string_to_preproc_uint(const char *cp, int base)
+{
+#if defined(_WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)
+ return _strtoui64(cp, NULL, base);
+#else
+ return strtoull(cp, NULL, base);
+#endif
+}
+
+/** Array for quick lookup of char types */
+static unsigned char preproc_charbits[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ CPRE_HSPACE, /* tab */
+ CPRE_VSPACE, CPRE_VSPACE, CPRE_VSPACE, /* newline, vtab, form feed */
+ CPRE_HSPACE, /* carriage return */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ CPRE_HSPACE, /* ' ' */
+ 0, CPRE_QUOTE, 0, 0, 0, 0, CPRE_QUOTE, 0, 0, /* !"#$%&'() */
+ 0, CPRE_SIGN, 0, CPRE_SIGN, 0, 0, /* *+,-./ */
+ CPRE_DIGIT|CPRE_HEX, /* 0 */
+ CPRE_DIGIT|CPRE_HEX, CPRE_DIGIT|CPRE_HEX,
+ CPRE_DIGIT|CPRE_HEX, CPRE_DIGIT|CPRE_HEX,
+ CPRE_DIGIT|CPRE_HEX, CPRE_DIGIT|CPRE_HEX,
+ CPRE_DIGIT|CPRE_HEX, CPRE_DIGIT|CPRE_HEX,
+ CPRE_DIGIT|CPRE_HEX, /* 9 */
+ 0, 0, 0, 0, 0, 0, 0, /* :;<=>?@ */
+ CPRE_ID|CPRE_HEX, /* A */
+ CPRE_ID|CPRE_HEX, CPRE_ID|CPRE_HEX, CPRE_ID|CPRE_HEX, /* BCD */
+ CPRE_ID|CPRE_HEX|CPRE_EXP, /* E */
+ CPRE_ID|CPRE_HEX, CPRE_ID, CPRE_ID, CPRE_ID, /* FGHI */
+ CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* JKLM */
+ CPRE_ID, CPRE_ID, CPRE_ID|CPRE_EXP, CPRE_ID, /* NOPQ */
+ CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* RSTU */
+ CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* VWXY */
+ CPRE_ID, /* Z */
+ 0, 0, 0, 0, /* [\\]^ */
+ CPRE_ID, /* _ */
+ 0, /* ` */
+ CPRE_ID|CPRE_HEX, /* a */
+ CPRE_ID|CPRE_HEX, CPRE_ID|CPRE_HEX, CPRE_ID|CPRE_HEX, /* bcd */
+ CPRE_ID|CPRE_HEX|CPRE_EXP, /* e */
+ CPRE_ID|CPRE_HEX, CPRE_ID, CPRE_ID, CPRE_ID, /* fghi */
+ CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* jklm */
+ CPRE_ID, CPRE_ID, CPRE_ID|CPRE_EXP, CPRE_ID, /* nopq */
+ CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* rstu */
+ CPRE_ID, CPRE_ID, CPRE_ID, CPRE_ID, /* vwxy */
+ CPRE_ID, /* z */
+ 0, 0, 0, 0, /* {|}~ */
+ 0, /* '\x7f' */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+};
+
+/** Macro to get char type */
+#define preproc_chartype(c, bits) \
+ ((preproc_charbits[(unsigned char)(c)] & bits) != 0)
+
+/** Skip over a comment. */
+static void preproc_skip_comment(const char **cpp)
+{
+ const char *cp = *cpp;
+
+ if (cp[0] == '/')
+ {
+ if (cp[1] == '/')
+ {
+ cp += 2;
+ while (*cp != '\n' && *cp != '\0')
+ {
+ if (cp[0] == '\\')
+ {
+ if (cp[1] == '\n') { cp++; }
+ else if (cp[1] == '\r' && cp[2] == '\n') { cp += 2; }
+ }
+ cp++;
+ }
+ }
+ else if (cp[1] == '*')
+ {
+ cp += 2;
+ while (*cp != '\0')
+ {
+ if (cp[0] == '*' && cp[1] == '/') { cp += 2; break; }
+ cp++;
+ }
+ }
+ }
+
+ *cpp = cp;
+}
+
+/** Skip over whitespace, but not newlines unless preceded by backlash. */
+static void preproc_skip_whitespace(
+ const char **cpp, preproc_space_t spacetype)
+{
+ const char *cp = *cpp;
+
+ for (;;)
+ {
+ if (preproc_chartype(*cp, spacetype))
+ {
+ do
+ {
+ cp++;
+ }
+ while (preproc_chartype(*cp, spacetype));
+ }
+ if (cp[0] == '\\')
+ {
+ if (cp[1] == '\n')
+ {
+ cp += 2;
+ }
+ else if (cp[1] == '\r' && cp[2] == '\n')
+ {
+ cp += 3;
+ }
+ else
+ {
+ break;
+ }
+ }
+ else if (cp[0] == '/' && (spacetype & WS_COMMENT) != WS_COMMENT)
+ {
+ if (cp[1] == '/' || cp[1] == '*')
+ {
+ preproc_skip_comment(&cp);
+ }
+ else
+ {
+ break;
+ }
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ *cpp = cp;
+}
+
+/** Skip over string and char literals. */
+static void preproc_skip_quotes(const char **cpp)
+{
+ const char *cp = *cpp;
+ const char qc = *cp;
+
+ if (preproc_chartype(*cp, CPRE_QUOTE))
+ {
+ cp++;
+ while (*cp != qc && *cp != '\n' && *cp != '\0')
+ {
+ if (*cp++ == '\\')
+ {
+ if (cp[0] == '\r' && cp[1] == '\n') { cp += 2; }
+ else if (*cp != '\0') { cp++; }
+ }
+ }
+ }
+ if (*cp == qc)
+ {
+ cp++;
+ }
+
+ *cpp = cp;
+}
+
+/** Skip over a name. */
+static void preproc_skip_name(const char **cpp)
+{
+ const char *cp = *cpp;
+
+ if (preproc_chartype(*cp, CPRE_ID))
+ {
+ do
+ {
+ cp++;
+ }
+ while (preproc_chartype(*cp, CPRE_IDGIT));
+ }
+
+ *cpp = cp;
+}
+
+/** A simple 32-bit hash function based on "djb2". */
+static unsigned int preproc_hash_name(const char **cpp)
+{
+ const char *cp = (*cpp);
+ int h = 5381;
+
+ if (preproc_chartype(*cp, CPRE_ID))
+ {
+ do { h = (h << 5) + h + (unsigned char)*cp++; }
+ while (preproc_chartype(*cp, CPRE_IDGIT));
+ }
+
+ *cpp = cp;
+ return h;
+}
+
+/** Skip over a number. */
+static void preproc_skip_number(const char **cpp)
+{
+ const char *cp = *cpp;
+
+ if (preproc_chartype(cp[0], CPRE_DIGIT) ||
+ (cp[0] == '.' && preproc_chartype(cp[1], CPRE_DIGIT)))
+ {
+ do
+ {
+ char c = *cp++;
+ if (preproc_chartype(c, CPRE_EXP) &&
+ preproc_chartype(*cp, CPRE_SIGN))
+ {
+ cp++;
+ }
+ }
+ while (preproc_chartype(*cp, CPRE_IDGIT) || *cp == '.');
+ }
+
+ *cpp = cp;
+}
+
+/** Return the next preprocessor token, or '0' if none left. */
+static int preproc_next(preproc_tokenizer *tokens)
+{
+ const char *cp = tokens->text + tokens->len;
+ preproc_skip_whitespace(&cp, WS_NO_EOL);
+
+ if (preproc_chartype(*cp, CPRE_ID))
+ {
+ const char *ep = cp;
+ unsigned int h = preproc_hash_name(&ep);
+ tokens->tok = TOK_ID;
+ tokens->hash = h;
+ tokens->text = cp;
+ tokens->len = ep - cp;
+ }
+ else if (preproc_chartype(*cp, CPRE_QUOTE))
+ {
+ const char *ep = cp;
+ preproc_skip_quotes(&ep);
+ tokens->tok = (*cp == '\"' ? TOK_STRING : TOK_CHAR);
+ tokens->hash = 0;
+ tokens->text = cp;
+ tokens->len = ep - cp;
+ }
+ else if (preproc_chartype(*cp, CPRE_DIGIT) ||
+ (cp[0] == '.' && preproc_chartype(cp[1], CPRE_DIGIT)))
+ {
+ const char *ep = cp;
+ preproc_skip_number(&ep);
+ tokens->tok = TOK_NUMBER;
+ tokens->hash = 0;
+ tokens->text = cp;
+ tokens->len = ep - cp;
+ }
+ else if (cp[0] == '/' && (cp[1] == '/' || cp[1] == '*'))
+ {
+ const char *ep = cp;
+ preproc_skip_comment(&ep);
+ tokens->tok = TOK_COMMENT;
+ tokens->hash = 0;
+ tokens->text = cp;
+ tokens->len = ep - cp;
+ }
+ else
+ {
+ int t = cp[0];
+ size_t l = 1;
+
+ switch (cp[0])
+ {
+ case ':':
+ if (cp[1] == ':') { l = 2; t = TOK_SCOPE; }
+ break;
+ case '.':
+ if (cp[1] == '.' && cp[2] == '.') { l = 3; t = TOK_ELLIPSIS; }
+ else if (cp[1] == '*') { l = 2; t = TOK_DOT_STAR; }
+ break;
+ case '=':
+ if (cp[1] == '=') { l = 2; t = TOK_EQ; }
+ break;
+ case '!':
+ if (cp[1] == '=') { l = 2; t = TOK_NE; }
+ break;
+ case '<':
+ if (cp[1] == '<' && cp[2] == '=') { l = 3; t = TOK_LSHIFT_EQ; }
+ else if (cp[1] == '<') { l = 2; t = TOK_LSHIFT; }
+ else if (cp[1] == '=') { l = 2; t = TOK_LE; }
+ break;
+ case '>':
+ if (cp[1] == '>' && cp[2] == '=') { l = 3; t = TOK_RSHIFT_EQ; }
+ else if (cp[1] == '>') { l = 2; t = TOK_RSHIFT; }
+ else if (cp[1] == '=') { l = 2; t = TOK_GE; }
+ break;
+ case '&':
+ if (cp[1] == '=') { l = 2; t = TOK_AND_EQ; }
+ else if (cp[1] == '&') { l = 2; t = TOK_AND; }
+ break;
+ case '|':
+ if (cp[1] == '=') { l = 2; t = TOK_OR_EQ; }
+ else if (cp[1] == '|') { l = 2; t = TOK_OR; }
+ break;
+ case '^':
+ if (cp[1] == '=') { l = 2; t = TOK_XOR_EQ; }
+ break;
+ case '*':
+ if (cp[1] == '=') { l = 2; t = TOK_MUL_EQ; }
+ break;
+ case '/':
+ if (cp[1] == '=') { l = 2; t = TOK_DIV_EQ; }
+ break;
+ case '%':
+ if (cp[1] == '=') { l = 2; t = TOK_MOD_EQ; }
+ break;
+ case '+':
+ if (cp[1] == '+') { l = 2; t = TOK_INCR; }
+ else if (cp[1] == '=') { l = 2; t = TOK_ADD_EQ; }
+ break;
+ case '-':
+ if (cp[1] == '>' && cp[2] == '*') { l = 3; t = TOK_ARROW_STAR; }
+ else if (cp[1] == '>') { l = 2; t = TOK_ARROW; }
+ else if (cp[1] == '-') { l = 2; t = TOK_DECR; }
+ else if (cp[1] == '=') { l = 2; t = TOK_SUB_EQ; }
+ break;
+ case '#':
+ if (cp[1] == '#') { l = 2; t = TOK_DBLHASH; }
+ break;
+ case '\n':
+ case '\0':
+ { l = 0; t = 0; }
+ break;
+ }
+
+ tokens->tok = t;
+ tokens->hash = 0;
+ tokens->text = cp;
+ tokens->len = l;
+ }
+
+ return tokens->tok;
+}
+
+/** Initialize the tokenizer. */
+static void preproc_init(preproc_tokenizer *tokens, const char *text)
+{
+ tokens->tok = 0;
+ tokens->hash = 0;
+ tokens->text = text;
+ tokens->len = 0;
+ preproc_next(tokens);
+}
+
+/** Tokenize and compare two strings */
+static int preproc_identical(const char *text1, const char *text2)
+{
+ int result = 1;
+
+ if (text1 != text2)
+ {
+ result = 0;
+
+ if (text1 && text2)
+ {
+ preproc_tokenizer t1;
+ preproc_tokenizer t2;
+
+ preproc_init(&t1, text1);
+ preproc_init(&t2, text2);
+
+ do
+ {
+ if (t1.tok != t2.tok ||
+ t1.hash != t2.hash ||
+ t1.len != t2.len ||
+ strncmp(t1.text, t2.text, t1.len) != 0)
+ {
+ break;
+ }
+ preproc_next(&t1);
+ preproc_next(&t2);
+ }
+ while (t1.tok && t2.tok);
+
+ result = (t1.tok == 0 && t2.tok == 0);
+ }
+ }
+
+ return result;
+}
+
+/** Duplicate the first n bytes of a string. */
+static const char *preproc_strndup(const char *in, size_t n)
+{
+ char *res = NULL;
+
+ res = (char *)malloc(n+1);
+ strncpy(res, in, n);
+ res[n] = '\0';
+
+ return res;
+}
+
+/** Create a new preprocessor macro. */
+static MacroInfo *preproc_new_macro(
+ PreprocessInfo *info, const char *name, const char *definition)
+{
+ MacroInfo *macro = (MacroInfo *)malloc(sizeof(MacroInfo));
+ vtkParsePreprocess_InitMacro(macro);
+
+ if (name)
+ {
+ size_t n;
+ const char *cp = name;
+ preproc_skip_name(&cp);
+ n = cp - name;
+ macro->Name = preproc_strndup(name, n);
+ }
+
+ if (definition)
+ {
+ size_t n;
+ const char *cp = definition;
+ preproc_tokenizer tokens;
+ preproc_init(&tokens, cp);
+
+ do
+ {
+ cp = tokens.text + tokens.len;
+ }
+ while (preproc_next(&tokens));
+
+ n = cp - definition;
+ macro->Definition = preproc_strndup(definition, n);
+ }
+
+ macro->IsExternal = info->IsExternal;
+
+ return macro;
+}
+
+/** Free a preprocessor macro struct. */
+static void preproc_free_macro(MacroInfo *info)
+{
+ free(info);
+}
+
+/** Find a preprocessor macro, return 0 if not found. */
+static MacroInfo *preproc_find_macro(
+ PreprocessInfo *info, preproc_tokenizer *token)
+{
+ unsigned int m = PREPROC_HASH_TABLE_SIZE - 1;
+ unsigned int i = (token->hash & m);
+ const char *name = token->text;
+ size_t l = token->len;
+ MacroInfo ***htable = info->MacroHashTable;
+ MacroInfo **hptr;
+ const char *mname;
+
+ if (htable && ((hptr = htable[i]) != NULL) && *hptr)
+ {
+ do
+ {
+ mname = (*hptr)->Name;
+ if (mname[0] == name[0] &&
+ strncmp(mname, name, l) == 0 &&
+ mname[l] == '\0')
+ {
+ return *hptr;
+ }
+ hptr++;
+ }
+ while (*hptr);
+ }
+
+ return NULL;
+}
+
+/** Return the address of the macro within the hash table.
+ * If "insert" is nonzero, add a new location if macro not found. */
+static MacroInfo **preproc_macro_location(
+ PreprocessInfo *info, preproc_tokenizer *token, int insert)
+{
+ MacroInfo ***htable = info->MacroHashTable;
+ unsigned int m = PREPROC_HASH_TABLE_SIZE - 1;
+ unsigned int i = (token->hash & m);
+ const char *name = token->text;
+ size_t l = token->len;
+ size_t n;
+ MacroInfo **hptr;
+ const char *mname;
+
+ if (htable == NULL)
+ {
+ if (!insert)
+ {
+ return NULL;
+ }
+
+ m = PREPROC_HASH_TABLE_SIZE;
+ htable = (MacroInfo ***)malloc(m*sizeof(MacroInfo **));
+ info->MacroHashTable = htable;
+ do { *htable++ = NULL; } while (--m);
+ htable = info->MacroHashTable;
+ }
+
+ hptr = htable[i];
+
+ if (hptr == NULL)
+ {
+ if (!insert)
+ {
+ return NULL;
+ }
+
+ hptr = (MacroInfo **)malloc(2*sizeof(MacroInfo *));
+ hptr[0] = NULL;
+ hptr[1] = NULL;
+ htable[i] = hptr;
+ }
+ else if (*hptr)
+ {
+ /* see if macro is already there */
+ n = 0;
+ do
+ {
+ mname = (*hptr)->Name;
+ if (mname[0] == name[0] &&
+ strncmp(mname, name, l) == 0 &&
+ mname[l] == '\0')
+ {
+ break;
+ }
+ n++;
+ hptr++;
+ }
+ while (*hptr);
+
+ if (*hptr == NULL)
+ {
+ if (!insert)
+ {
+ return NULL;
+ }
+
+ /* if n+1 is a power of two, double allocated space */
+ if (n > 0 && (n & (n+1)) == 0)
+ {
+ hptr = htable[i];
+ hptr = (MacroInfo **)realloc(hptr, (2*(n+1))*sizeof(MacroInfo *));
+ htable[i] = hptr;
+ hptr += n;
+ }
+
+ /* add a terminating null */
+ hptr[1] = NULL;
+ }
+ }
+
+ return hptr;
+}
+
+/** Remove a preprocessor macro. Returns 0 if macro not found. */
+static int preproc_remove_macro(
+ PreprocessInfo *info, preproc_tokenizer *token)
+{
+ MacroInfo **hptr;
+
+ hptr = preproc_macro_location(info, token, 0);
+
+ if (hptr && *hptr)
+ {
+ preproc_free_macro(*hptr);
+
+ do
+ {
+ hptr[0] = hptr[1];
+ hptr++;
+ }
+ while (*hptr);
+
+ return 1;
+ }
+
+ return 0;
+}
+
+/** A simple way to add a preprocessor macro definition. */
+static MacroInfo *preproc_add_macro_definition(
+ PreprocessInfo *info, const char *name, const char *definition)
+{
+ preproc_tokenizer token;
+ MacroInfo *macro;
+ MacroInfo **macro_p;
+
+ preproc_init(&token, name);
+
+ macro = preproc_new_macro(info, name, definition);
+ macro_p = preproc_macro_location(info, &token, 1);
+#if PREPROC_DEBUG
+ if (*macro_p)
+ {
+ fprintf(stderr, "duplicate macro definition %s\n", name);
+ }
+#endif
+ *macro_p = macro;
+
+ return macro;
+}
+
+/** Skip over parentheses, return nonzero if not closed. */
+static int preproc_skip_parentheses(preproc_tokenizer *tokens)
+{
+ int depth = 0;
+
+ if (tokens->tok == '(')
+ {
+ depth = 1;
+
+ while (depth > 0 && preproc_next(tokens))
+ {
+ if (tokens->tok == '(')
+ {
+ depth++;
+ }
+ else if (tokens->tok == ')')
+ {
+ depth--;
+ }
+ }
+ }
+
+ if (tokens->tok == ')')
+ {
+ preproc_next(tokens);
+ return VTK_PARSE_OK;
+ }
+
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ return VTK_PARSE_SYNTAX_ERROR;
+}
+
+
+/** Evaluate a char literal to an integer value. */
+static int preproc_evaluate_char(
+ const char *cp, preproc_int_t *val, int *is_unsigned)
+{
+ if (cp[0] == '\'')
+ {
+ cp++;
+ if (*cp != '\\')
+ {
+ *val = *cp;
+ }
+ else if (*cp != '\'' && *cp != '\n' && *cp != '\0')
+ {
+ cp++;
+ if (*cp == 'a') { *val = '\a'; }
+ else if (*cp == 'b') { *val = '\b'; }
+ else if (*cp == 'f') { *val = '\f'; }
+ else if (*cp == 'n') { *val = '\n'; }
+ else if (*cp == 'r') { *val = '\r'; }
+ else if (*cp == 'b') { *val = '\b'; }
+ else if (*cp == 't') { *val = '\t'; }
+ else if (*cp == 'v') { *val = '\v'; }
+ else if (*cp == '\'') { *val = '\''; }
+ else if (*cp == '\"') { *val = '\"'; }
+ else if (*cp == '\\') { *val = '\\'; }
+ else if (*cp == '\?') { *val = '\?'; }
+ else if (*cp == '0')
+ {
+ *val = string_to_preproc_int(cp, 8);
+ do { cp++; } while (*cp >= '0' && *cp <= '7');
+ }
+ else if (*cp == 'x')
+ {
+ *val = string_to_preproc_int(cp+1, 16);
+ do { cp++; } while (preproc_chartype(*cp, CPRE_HEX));
+ }
+ }
+ if (*cp != '\'')
+ {
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ return VTK_PARSE_SYNTAX_ERROR;
+ }
+ cp++;
+ *is_unsigned = 0;
+ return VTK_PARSE_OK;
+ }
+
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ return VTK_PARSE_SYNTAX_ERROR;
+}
+
+/* Evaluate an integer, ignoring any suffixes except 'u'. */
+static int preproc_evaluate_integer(
+ const char *cp, preproc_int_t *val, int *is_unsigned)
+{
+ const char *ep;
+ int base = 0;
+ ep = cp;
+
+ if (cp[0] == '0' && (cp[1] == 'x' || cp[1] == 'X'))
+ {
+ cp += 2;
+ base = 16;
+ *is_unsigned = 1;
+ ep = cp;
+ while (preproc_chartype(*ep, CPRE_HEX))
+ {
+ ep++;
+ }
+ }
+ else if (cp[0] == '0' && preproc_chartype(cp[1], CPRE_DIGIT))
+ {
+ cp += 1;
+ base = 8;
+ *is_unsigned = 1;
+ ep = cp;
+ while (*ep >= '0' && *ep <= '7')
+ {
+ ep++;
+ }
+ }
+ else
+ {
+ base = 10;
+ *is_unsigned = 0;
+ while (preproc_chartype(*ep, CPRE_DIGIT))
+ {
+ ep++;
+ }
+ }
+
+ for (;;)
+ {
+ if (ep[0] == 'i' && ep[1] == '6' && ep[2] == '4') { ep += 3; }
+ else if (*ep == 'u') { *is_unsigned = 1; ep++; }
+ else if (*ep == 'l' || *ep == 'L') { ep++; }
+ else { break; }
+ }
+
+ if (*is_unsigned)
+ {
+ *val = (preproc_int_t)string_to_preproc_uint(cp, base);
+ }
+ else
+ {
+ *val = string_to_preproc_int(cp, base);
+ }
+
+ if (*ep == '.' || *ep == 'e' || *ep == 'E')
+ {
+ return VTK_PARSE_PREPROC_DOUBLE;
+ }
+
+ return VTK_PARSE_OK;
+}
+
+/* forward declaration */
+static int preproc_evaluate_expression(
+ PreprocessInfo *info, preproc_tokenizer *tokens,
+ preproc_int_t *val, int *is_unsigned);
+
+/** Evaluate a single item in an expression. */
+static int preproc_evaluate_single(
+ PreprocessInfo *info, preproc_tokenizer *tokens,
+ preproc_int_t *val, int *is_unsigned)
+{
+ int result = VTK_PARSE_OK;
+
+ while (tokens->tok == TOK_ID)
+ {
+ /* handle the "defined" keyword */
+ if (tokens->hash == HASH_DEFINED && tokens->len == 7 &&
+ strncmp("defined", tokens->text, tokens->len) == 0)
+ {
+ int paren = 0;
+ preproc_next(tokens);
+
+ if (tokens->tok == '(')
+ {
+ paren = 1;
+ preproc_next(tokens);
+ }
+ if (tokens->tok != TOK_ID)
+ {
+ *val = 0;
+ *is_unsigned = 0;
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ return VTK_PARSE_SYNTAX_ERROR;
+ }
+
+ /* do the name lookup */
+ *is_unsigned = 0;
+ *val = (preproc_find_macro(info, tokens) != 0);
+
+ preproc_next(tokens);
+ if (paren)
+ {
+ if (tokens->tok != ')')
+ {
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ return VTK_PARSE_SYNTAX_ERROR;
+ }
+ preproc_next(tokens);
+ }
+
+ return result;
+ }
+ else
+ {
+ /* look up and evaluate the macro */
+ MacroInfo *macro = preproc_find_macro(info, tokens);
+ const char *args = NULL;
+ const char *expansion = NULL;
+ const char *cp;
+ preproc_next(tokens);
+ *val = 0;
+ *is_unsigned = 0;
+
+ if (macro == NULL || macro->IsExcluded)
+ {
+ return VTK_PARSE_MACRO_UNDEFINED;
+ }
+ else if (macro->IsFunction)
+ {
+ /* expand function macros using the arguments */
+ args = tokens->text;
+ if (tokens->tok != '(' ||
+ preproc_skip_parentheses(tokens) != VTK_PARSE_OK)
+ {
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ return VTK_PARSE_SYNTAX_ERROR;
+ }
+ }
+ expansion = vtkParsePreprocess_ExpandMacro(info, macro, args);
+ if (expansion == NULL)
+ {
+ free((char *)args);
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ return (args ? VTK_PARSE_MACRO_NUMARGS : VTK_PARSE_SYNTAX_ERROR);
+ }
+ cp = expansion;
+ preproc_skip_whitespace(&cp, WS_NO_EOL);
+ if (*cp != '\0')
+ {
+ macro->IsExcluded = 1;
+ result = vtkParsePreprocess_EvaluateExpression(
+ info, expansion, val, is_unsigned);
+ macro->IsExcluded = 0;
+ vtkParsePreprocess_FreeMacroExpansion(
+ info, macro, expansion);
+ return result;
+ }
+ vtkParsePreprocess_FreeMacroExpansion(info, macro, expansion);
+ }
+ /* if macro expansion was empty, continue */
+ }
+
+ if (tokens->tok == '(')
+ {
+ preproc_next(tokens);
+ result = preproc_evaluate_expression(info, tokens, val, is_unsigned);
+ if ((result & VTK_PARSE_FATAL_ERROR) == 0)
+ {
+ if (tokens->tok == ')')
+ {
+ preproc_next(tokens);
+ return result;
+ }
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ return VTK_PARSE_SYNTAX_ERROR;
+ }
+ return result;
+ }
+ else if (tokens->tok == TOK_NUMBER)
+ {
+ result = preproc_evaluate_integer(tokens->text, val, is_unsigned);
+ if (tokens->text[tokens->len-1] == 'f' ||
+ tokens->text[tokens->len-1] == 'F')
+ {
+ result = VTK_PARSE_PREPROC_FLOAT;
+ }
+ preproc_next(tokens);
+ return result;
+ }
+ else if (tokens->tok == TOK_CHAR)
+ {
+ result = preproc_evaluate_char(tokens->text, val, is_unsigned);
+ preproc_next(tokens);
+ return result;
+ }
+ else if (tokens->tok == TOK_STRING)
+ {
+ *val = 0;
+ *is_unsigned = 0;
+ preproc_next(tokens);
+ while (tokens->tok == TOK_STRING)
+ {
+ preproc_next(tokens);
+ }
+ return VTK_PARSE_PREPROC_STRING;
+ }
+
+ *val = 0;
+ *is_unsigned = 0;
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d \"%*.*s\"\n", __LINE__,
+ (int)tokens->len, (int)tokens->len, tokens->text);
+#endif
+ return VTK_PARSE_SYNTAX_ERROR;
+}
+
+static int preproc_evaluate_unary(
+ PreprocessInfo *info, preproc_tokenizer *tokens,
+ preproc_int_t *val, int *is_unsigned)
+{
+ int op = tokens->tok;
+ int result = VTK_PARSE_OK;
+
+ if (op != '+' && op != '-' && op != '~' && op != '!')
+ {
+ return preproc_evaluate_single(info, tokens, val, is_unsigned);
+ }
+
+ preproc_next(tokens);
+
+ result = preproc_evaluate_unary(info, tokens, val, is_unsigned);
+ if ((result & VTK_PARSE_FATAL_ERROR) == 0)
+ {
+ if (op == '~') { *val = ~(*val); }
+ else if (op == '!') { *val = !(*val); *is_unsigned = 0; }
+ else if (op == '-') { *val = -(*val); }
+ return result;
+ }
+
+ return result;
+}
+
+static int preproc_evaluate_multiply(
+ PreprocessInfo *info, preproc_tokenizer *tokens,
+ preproc_int_t *val, int *is_unsigned)
+{
+ int op;
+ preproc_int_t rval;
+ int rtype;
+ int result;
+
+ result = preproc_evaluate_unary(info, tokens, val, is_unsigned);
+ while ((result & VTK_PARSE_FATAL_ERROR) == 0)
+ {
+ op = tokens->tok;
+ if (op != '*' && op != '/' && op != '%')
+ {
+ return result;
+ }
+
+ preproc_next(tokens);
+
+ result = preproc_evaluate_unary(info, tokens, &rval, &rtype);
+
+ *is_unsigned = (*is_unsigned || rtype);
+
+ if (*is_unsigned)
+ {
+ if (op == '*')
+ {
+ *val = (preproc_int_t)((preproc_uint_t)*val *
+ (preproc_uint_t)rval);
+ }
+ else if (op == '/')
+ {
+ if (rval != 0)
+ {
+ *val = (preproc_int_t)((preproc_uint_t)*val /
+ (preproc_uint_t)rval);
+ }
+ else
+ {
+ *val = 2147483647;
+ }
+ }
+ else if (op == '%')
+ {
+ if (rval != 0)
+ {
+ *val = (preproc_int_t)((preproc_uint_t)*val %
+ (preproc_uint_t)rval);
+ }
+ else
+ {
+ *val = 2147483647;
+ }
+ }
+ }
+ else
+ {
+ if (op == '*')
+ {
+ *val = *val * rval;
+ }
+ else if (op == '/')
+ {
+ if (rval != 0)
+ {
+ *val = *val / rval;
+ }
+ else if (*val < 0)
+ {
+ *val = -2147483647;
+ }
+ else
+ {
+ *val = 2147483647;
+ }
+ }
+ else if (op == '%')
+ {
+ if (rval != 0)
+ {
+ *val = *val % rval;
+ }
+ else if (*val < 0)
+ {
+ *val = -2147483647;
+ }
+ else
+ {
+ *val = 2147483647;
+ }
+ }
+ }
+ }
+
+ return result;
+}
+
+static int preproc_evaluate_add(
+ PreprocessInfo *info, preproc_tokenizer *tokens,
+ preproc_int_t *val, int *is_unsigned)
+{
+ int op;
+ preproc_int_t rval;
+ int rtype;
+ int result;
+
+ result = preproc_evaluate_multiply(info, tokens, val, is_unsigned);
+ while ((result & VTK_PARSE_FATAL_ERROR) == 0)
+ {
+ op = tokens->tok;
+ if (op != '+' && op != '-')
+ {
+ return result;
+ }
+
+ preproc_next(tokens);
+
+ result = preproc_evaluate_multiply(info, tokens, &rval, &rtype);
+
+ *is_unsigned = (*is_unsigned || rtype);
+
+ if (op == '+')
+ {
+ *val = *val + rval;
+ }
+ else if (op == '-')
+ {
+ *val = *val - rval;
+ }
+ }
+
+ return result;
+}
+
+static int preproc_evaluate_bitshift(
+ PreprocessInfo *info, preproc_tokenizer *tokens,
+ preproc_int_t *val, int *is_unsigned)
+{
+ int op;
+ preproc_int_t rval;
+ int rtype;
+ int result;
+
+ result = preproc_evaluate_add(info, tokens, val, is_unsigned);
+ while ((result & VTK_PARSE_FATAL_ERROR) == 0)
+ {
+ op = tokens->tok;
+
+ if (op != TOK_LSHIFT && op != TOK_RSHIFT)
+ {
+ return result;
+ }
+
+ preproc_next(tokens);
+
+ result = preproc_evaluate_add(info, tokens, &rval, &rtype);
+
+ if (*is_unsigned)
+ {
+ if (op == TOK_LSHIFT)
+ {
+ *val = (preproc_int_t)((preproc_uint_t)*val << rval);
+ }
+ else if (op == TOK_RSHIFT)
+ {
+ *val = (preproc_int_t)((preproc_uint_t)*val >> rval);
+ }
+ }
+ else
+ {
+ if (op == TOK_LSHIFT)
+ {
+ *val = *val << rval;
+ }
+ else if (op == TOK_RSHIFT)
+ {
+ *val = *val >> rval;
+ }
+ }
+ }
+
+ return result;
+}
+
+static int preproc_evaluate_compare(
+ PreprocessInfo *info, preproc_tokenizer *tokens,
+ preproc_int_t *val, int *is_unsigned)
+{
+ int op;
+ preproc_int_t rval;
+ int rtype;
+ int result;
+
+ result = preproc_evaluate_bitshift(info, tokens, val, is_unsigned);
+ while ((result & VTK_PARSE_FATAL_ERROR) == 0)
+ {
+ op = tokens->tok;
+ if (op != '<' && op != '>' && op != TOK_LE && op != TOK_GE)
+ {
+ return result;
+ }
+
+ preproc_next(tokens);
+
+ result = preproc_evaluate_bitshift(info, tokens, &rval, &rtype);
+
+ *is_unsigned = (*is_unsigned || rtype);
+
+ if (*is_unsigned)
+ {
+ if (op == TOK_LE)
+ {
+ *val = ((preproc_uint_t)*val <= (preproc_uint_t)rval);
+ }
+ else if (op == '<')
+ {
+ *val = ((preproc_uint_t)*val < (preproc_uint_t)rval);
+ }
+ else if (op == TOK_GE)
+ {
+ *val = ((preproc_uint_t)*val >= (preproc_uint_t)rval);
+ }
+ else if (op == '>')
+ {
+ *val = ((preproc_uint_t)*val > (preproc_uint_t)rval);
+ }
+ }
+ else
+ {
+ if (op == TOK_LE)
+ {
+ *val = (*val <= rval);
+ }
+ else if (op == '<')
+ {
+ *val = (*val < rval);
+ }
+ else if (op == TOK_GE)
+ {
+ *val = (*val >= rval);
+ }
+ else if (op == '>')
+ {
+ *val = (*val > rval);
+ }
+ }
+ *is_unsigned = 0;
+ }
+
+ return result;
+}
+
+static int preproc_evaluate_equal(
+ PreprocessInfo *info, preproc_tokenizer *tokens,
+ preproc_int_t *val, int *is_unsigned)
+{
+ int op;
+ preproc_int_t rval;
+ int rtype;
+ int result;
+
+ result = preproc_evaluate_compare(info, tokens, val, is_unsigned);
+ while ((result & VTK_PARSE_FATAL_ERROR) == 0)
+ {
+ op = tokens->tok;
+ if (op != TOK_EQ && op != TOK_NE)
+ {
+ return result;
+ }
+
+ preproc_next(tokens);
+
+ result = preproc_evaluate_compare(info, tokens, &rval, &rtype);
+
+ if (op == TOK_EQ)
+ {
+ *val = (*val == rval);
+ }
+ else if (op == TOK_NE)
+ {
+ *val = (*val != rval);
+ }
+ *is_unsigned = 0;
+ }
+
+ return result;
+}
+
+static int preproc_evaluate_and(
+ PreprocessInfo *info, preproc_tokenizer *tokens,
+ preproc_int_t *val, int *is_unsigned)
+{
+ preproc_int_t rval;
+ int rtype;
+ int result;
+
+ result = preproc_evaluate_equal(info, tokens, val, is_unsigned);
+ while ((result & VTK_PARSE_FATAL_ERROR) == 0)
+ {
+ if (tokens->tok != '&')
+ {
+ return result;
+ }
+
+ preproc_next(tokens);
+
+ result = preproc_evaluate_equal(info, tokens, &rval, &rtype);
+
+ *is_unsigned = (*is_unsigned || rtype);
+ *val = (*val & rval);
+ }
+
+ return result;
+}
+
+static int preproc_evaluate_xor(
+ PreprocessInfo *info, preproc_tokenizer *tokens,
+ preproc_int_t *val, int *is_unsigned)
+{
+ preproc_int_t rval;
+ int rtype;
+ int result;
+
+ result = preproc_evaluate_and(info, tokens, val, is_unsigned);
+ while ((result & VTK_PARSE_FATAL_ERROR) == 0)
+ {
+ if (tokens->tok != '^')
+ {
+ return result;
+ }
+
+ preproc_next(tokens);
+
+ result = preproc_evaluate_and(info, tokens, &rval, &rtype);
+
+ *is_unsigned = (*is_unsigned || rtype);
+ *val = (*val ^ rval);
+ }
+
+ return result;
+}
+
+static int preproc_evaluate_or(
+ PreprocessInfo *info, preproc_tokenizer *tokens,
+ preproc_int_t *val, int *is_unsigned)
+{
+ preproc_int_t rval;
+ int rtype;
+ int result;
+
+ result = preproc_evaluate_xor(info, tokens, val, is_unsigned);
+ while ((result & VTK_PARSE_FATAL_ERROR) == 0)
+ {
+ if (tokens->tok != '|')
+ {
+ return result;
+ }
+
+ preproc_next(tokens);
+
+ result = preproc_evaluate_xor(info, tokens, &rval, &rtype);
+
+ *is_unsigned = (*is_unsigned || rtype);
+ *val = (*val | rval);
+ }
+
+ return result;
+}
+
+static int preproc_evaluate_logic_and(
+ PreprocessInfo *info, preproc_tokenizer *tokens,
+ preproc_int_t *val, int *is_unsigned)
+{
+ preproc_int_t rval;
+ int rtype;
+ int result;
+
+ result = preproc_evaluate_or(info, tokens, val, is_unsigned);
+ while ((result & VTK_PARSE_FATAL_ERROR) == 0)
+ {
+ if (tokens->tok != TOK_AND)
+ {
+ return result;
+ }
+
+ preproc_next(tokens);
+
+ if (*val == 0)
+ {
+ /* short circuit */
+ while (tokens->tok != 0 && tokens->tok != ')' &&
+ tokens->tok != ':' && tokens->tok != '?' &&
+ tokens->tok != ',' && tokens->tok != TOK_OR)
+ {
+ if (tokens->tok == '(')
+ {
+ if (preproc_skip_parentheses(tokens) != VTK_PARSE_OK)
+ {
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ result = VTK_PARSE_SYNTAX_ERROR;
+ }
+ }
+ else
+ {
+ preproc_next(tokens);
+ }
+ }
+
+ *is_unsigned = 0;
+
+ return result;
+ }
+
+ result = preproc_evaluate_or(info, tokens, &rval, &rtype);
+
+ *is_unsigned = 0;
+ *val = (rval != 0);
+ }
+
+ return result;
+}
+
+static int preproc_evaluate_logic_or(
+ PreprocessInfo *info, preproc_tokenizer *tokens,
+ preproc_int_t *val, int *is_unsigned)
+{
+ preproc_int_t rval;
+ int rtype;
+ int result;
+
+ result = preproc_evaluate_logic_and(info, tokens, val, is_unsigned);
+ while ((result & VTK_PARSE_FATAL_ERROR) == 0)
+ {
+ if (tokens->tok != TOK_OR)
+ {
+ return result;
+ }
+
+ preproc_next(tokens);
+
+ if (*val != 0)
+ {
+ /* short circuit */
+ while (tokens->tok != 0 && tokens->tok != ')' &&
+ tokens->tok != ':' && tokens->tok != '?' &&
+ tokens->tok != ',')
+ {
+ if (tokens->tok == '(')
+ {
+ if (preproc_skip_parentheses(tokens) != VTK_PARSE_OK)
+ {
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ result = VTK_PARSE_SYNTAX_ERROR;
+ }
+ }
+ else
+ {
+ preproc_next(tokens);
+ }
+ }
+
+ *is_unsigned = 0;
+
+ return result;
+ }
+
+ result = preproc_evaluate_logic_and(info, tokens, &rval, &rtype);
+
+ *is_unsigned = 0;
+ *val = (rval != 0);
+ }
+
+ return result;
+}
+
+/** Evaluate an arimetic *expression. */
+int preproc_evaluate_expression(
+ PreprocessInfo *info, preproc_tokenizer *tokens,
+ preproc_int_t *val, int *is_unsigned)
+{
+ preproc_int_t rval, sval;
+ int rtype, stype;
+ int result;
+
+ result = preproc_evaluate_logic_or(info, tokens, val, is_unsigned);
+ if ((result & VTK_PARSE_FATAL_ERROR) == 0)
+ {
+ if (tokens->tok != '?')
+ {
+ return result;
+ }
+
+ preproc_next(tokens);
+
+ result = preproc_evaluate_expression(info, tokens, &rval, &rtype);
+ if ((result & VTK_PARSE_FATAL_ERROR) != 0)
+ {
+ return result;
+ }
+
+ if (tokens->tok != ':')
+ {
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ return VTK_PARSE_SYNTAX_ERROR;
+ }
+
+ preproc_next(tokens);
+
+ result = preproc_evaluate_expression(info, tokens, &sval, &stype);
+ if ((result & VTK_PARSE_FATAL_ERROR) != 0)
+ {
+ return result;
+ }
+
+ if (*val != 0)
+ {
+ *val = rval;
+ *is_unsigned = rtype;
+ }
+ else
+ {
+ *val = sval;
+ *is_unsigned = stype;
+ }
+ }
+
+ return result;
+}
+
+/** Evaluate a conditional *expression.
+ * Returns VTK_PARSE_OK if the expression is true,
+ * or VTK_PARSE_SKIP of the expression is false. */
+int preproc_evaluate_conditional(
+ PreprocessInfo *info, preproc_tokenizer *tokens)
+{
+ preproc_int_t rval;
+ int rtype;
+ int result;
+
+ result = preproc_evaluate_expression(info, tokens, &rval, &rtype);
+ if ((result & VTK_PARSE_FATAL_ERROR) == 0)
+ {
+ if (tokens->tok != 0)
+ {
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ return VTK_PARSE_SYNTAX_ERROR;
+ }
+ return (rval == 0 ? VTK_PARSE_SKIP : VTK_PARSE_OK);
+ }
+
+ return result;
+}
+
+/**
+ * Handle any of the following directives:
+ * #if, #ifdef, #ifndef, #elif, #else, #endif
+ * A return value of VTK_PARSE_SKIP means that
+ * the following code block should be skipped.
+ */
+static int preproc_evaluate_if(
+ PreprocessInfo *info, preproc_tokenizer *tokens)
+{
+ MacroInfo *macro;
+ int v1, v2;
+ int result = VTK_PARSE_OK;
+
+ if (tokens->hash == HASH_IF ||
+ tokens->hash == HASH_IFDEF ||
+ tokens->hash == HASH_IFNDEF)
+ {
+ if (info->ConditionalDepth == 0)
+ {
+ if (tokens->hash == HASH_IF)
+ {
+ preproc_next(tokens);
+ result = preproc_evaluate_conditional(info, tokens);
+ }
+ else
+ {
+ v1 = (tokens->hash != HASH_IFNDEF);
+ preproc_next(tokens);
+ if (tokens->tok != TOK_ID)
+ {
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ return VTK_PARSE_SYNTAX_ERROR;
+ }
+ macro = preproc_find_macro(info, tokens);
+ v2 = (macro && !macro->IsExcluded);
+ preproc_next(tokens);
+ result = ( (v1 ^ v2) ? VTK_PARSE_SKIP : VTK_PARSE_OK);
+ }
+
+ if (result != VTK_PARSE_SKIP)
+ {
+ /* mark as done, so that the "else" clause is skipped */
+ info->ConditionalDone = 1;
+ }
+ else
+ {
+ /* mark as not done, so that "else" clause is not skipped */
+ info->ConditionalDone = 0;
+ /* skip the "if" clause */
+ info->ConditionalDepth = 1;
+ }
+ }
+ else
+ {
+ /* increase the skip depth */
+ info->ConditionalDepth++;
+ }
+ }
+ else if (tokens->hash == HASH_ELIF ||
+ tokens->hash == HASH_ELSE)
+ {
+ if (info->ConditionalDepth == 0)
+ {
+ /* preceding clause was not skipped, so must skip this one */
+ info->ConditionalDepth = 1;
+ }
+ else if (info->ConditionalDepth == 1 &&
+ info->ConditionalDone == 0)
+ {
+ if (tokens->hash == HASH_ELIF)
+ {
+ preproc_next(tokens);
+ result = preproc_evaluate_conditional(info, tokens);
+ }
+ else
+ {
+ preproc_next(tokens);
+ }
+ if (result != VTK_PARSE_SKIP)
+ {
+ /* do not skip this clause */
+ info->ConditionalDepth = 0;
+ /* make sure remaining else/elif clauses are skipped */
+ info->ConditionalDone = 1;
+ }
+ }
+ }
+ else if (tokens->hash == HASH_ENDIF)
+ {
+ preproc_next(tokens);
+ if (info->ConditionalDepth > 0)
+ {
+ /* decrease the skip depth */
+ info->ConditionalDepth--;
+ }
+ if (info->ConditionalDepth == 0)
+ {
+ /* set "done" flag for the context that is being returned to */
+ info->ConditionalDone = 1;
+ }
+ }
+
+ return result;
+}
+
+/**
+ * Handle the #define and #undef directives.
+ */
+static int preproc_evaluate_define(
+ PreprocessInfo *info, preproc_tokenizer *tokens)
+{
+ MacroInfo **macro_p;
+ MacroInfo *macro;
+ int is_function;
+ const char *name;
+ size_t namelen;
+ const char *definition = 0;
+ int n = 0;
+ const char **params = NULL;
+
+ if (tokens->hash == HASH_DEFINE)
+ {
+ preproc_next(tokens);
+ if (tokens->tok != TOK_ID)
+ {
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ return VTK_PARSE_SYNTAX_ERROR;
+ }
+
+ macro_p = preproc_macro_location(info, tokens, 1);
+ name = tokens->text;
+ namelen = tokens->len;
+ preproc_next(tokens);
+
+ is_function = 0;
+ if (name[namelen] == '(')
+ {
+ is_function = 1;
+ preproc_next(tokens);
+ while (tokens->tok != 0 && tokens->tok != ')')
+ {
+ if (tokens->tok != TOK_ID && tokens->tok != TOK_ELLIPSIS)
+ {
+ if (params) { free((char **)params); }
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ return VTK_PARSE_SYNTAX_ERROR;
+ }
+
+ /* add to the arg list */
+ params = (const char **)preproc_array_check(
+ (char **)params, sizeof(char *), n);
+ params[n++] = preproc_strndup(tokens->text, tokens->len);
+
+ preproc_next(tokens);
+ if (tokens->tok == ',')
+ {
+ preproc_next(tokens);
+ }
+ else if (tokens->tok != ')')
+ {
+ if (params) { free((char **)params); }
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ return VTK_PARSE_SYNTAX_ERROR;
+ }
+ }
+ preproc_next(tokens);
+ }
+
+ if (tokens->tok)
+ {
+ definition = tokens->text;
+ }
+
+ macro = *macro_p;
+ if (macro)
+ {
+ if (preproc_identical(macro->Definition, definition))
+ {
+ return VTK_PARSE_OK;
+ }
+ if (params) { free((char **)params); }
+#if PREPROC_DEBUG
+ fprintf(stderr, "macro redefined %d\n", __LINE__);
+#endif
+ return VTK_PARSE_MACRO_REDEFINED;
+ }
+
+ macro = preproc_new_macro(info, name, definition);
+ macro->IsFunction = is_function;
+ macro->NumberOfParameters = n;
+ macro->Parameters = params;
+ *macro_p = macro;
+
+ return VTK_PARSE_OK;
+ }
+ else if (tokens->hash == HASH_UNDEF)
+ {
+ preproc_next(tokens);
+ if (tokens->tok != TOK_ID)
+ {
+#if PREPROC_DEBUG
+ fprintf(stderr, "syntax error %d\n", __LINE__);
+#endif
+ return VTK_PARSE_SYNTAX_ERROR;
+ }
+ preproc_remove_macro(info, tokens);
+ return VTK_PARSE_OK;
+ }
+
+ return VTK_PARSE_OK;
+}
+
+/**
+ * Add an include file to the list. Return 0 if it is already there.
+ */
+static int preproc_add_include_file(PreprocessInfo *info, const char *name)
+{
+ int i, n;
+ char *dp;
+
+ n = info->NumberOfIncludeFiles;
+ for (i = 0; i < n; i++)
+ {
+ if (strcmp(info->IncludeFiles[i], name) == 0)
+ {
+ return 0;
+ }
+ }
+
+ dp = (char *)malloc(strlen(name)+1);
+ strcpy(dp, name);
+
+ info->IncludeFiles = (const char **)preproc_array_check(
+ (char **)info->IncludeFiles, sizeof(char *), info->NumberOfIncludeFiles);
+ info->IncludeFiles[info->NumberOfIncludeFiles++] = dp;
+
+ return 1;
+}
+
+/**
+ * Find an include file. If "cache_only" is set, then do a check to
+ * see if the file was previously found without going to the filesystem.
+ */
+const char *preproc_find_include_file(
+ PreprocessInfo *info, const char *filename, int system_first,
+ int cache_only)
+{
+ int i, n, ii, nn;
+ size_t j, m;
+ struct stat fs;
+ const char *directory;
+ char *output;
+ size_t outputsize = 16;
+ int count;
+
+ /* allow filename to be terminated by quote or bracket */
+ m = 0;
+ while (filename[m] != '\"' && filename[m] != '>' &&
+ filename[m] != '\n' && filename[m] != '\0') { m++; }
+
+ /* search file system for the file */
+ output = (char *)malloc(outputsize);
+
+ if (system_first != 0)
+ {
+ system_first = 1;
+ }
+
+ if (cache_only != 0)
+ {
+ cache_only = 1;
+ }
+
+ /* check for absolute path of form DRIVE: or /path/to/file */
+ j = 0;
+ while (preproc_chartype(filename[j], CPRE_IDGIT)) { j++; }
+
+ if (filename[j] == ':' || filename[0] == '/' || filename[0] == '\\')
+ {
+ if (m+1 > outputsize)
+ {
+ outputsize += m+1;
+ output = (char *)realloc(output, outputsize);
+ }
+ strncpy(output, filename, m);
+ output[m] = '\0';
+
+ nn = info->NumberOfIncludeFiles;
+ for (ii = 0; ii < nn; ii++)
+ {
+ if (strcmp(output, info->IncludeFiles[ii]) == 0)
+ {
+ free(output);
+ return info->IncludeFiles[ii];
+ }
+ }
+
+ if (cache_only)
+ {
+ free(output);
+ return NULL;
+ }
+
+ info->IncludeFiles = (const char **)preproc_array_check(
+ (char **)info->IncludeFiles, sizeof(char *),
+ info->NumberOfIncludeFiles);
+ info->IncludeFiles[info->NumberOfIncludeFiles++] = output;
+
+ return output;
+ }
+
+ /* Make sure the current filename is already added */
+ if (info->FileName)
+ {
+ preproc_add_include_file(info, info->FileName);
+ }
+
+ /* Check twice. First check the cache, then stat the files. */
+ for (count = 0; count < (2-cache_only); count++)
+ {
+ n = info->NumberOfIncludeDirectories;
+ for (i = 0; i < (n+1-system_first); i++)
+ {
+ /* search the directory of the file being processed */
+ if (i == 0 && system_first == 0)
+ {
+ if (info->FileName)
+ {
+ j = strlen(info->FileName);
+ while (j > 0)
+ {
+ if (info->FileName[j-1] == '/') { break; }
+ j--;
+ }
+ if (m+j+1 > outputsize)
+ {
+ outputsize += m+j+1;
+ output = (char *)realloc(output, outputsize);
+ }
+ if (j > 0)
+ {
+ strncpy(output, info->FileName, j);
+ }
+ strncpy(&output[j], filename, m);
+ output[j+m] = '\0';
+ }
+ else
+ {
+ if (m+1 > outputsize)
+ {
+ outputsize += m+1;
+ output = (char *)realloc(output, outputsize);
+ }
+ strncpy(output, filename, m);
+ output[m] = '\0';
+ }
+ }
+ /* check all the search paths */
+ else
+ {
+ directory = info->IncludeDirectories[i-1+system_first];
+ j = strlen(directory);
+ if (j + m + 2 > outputsize)
+ {
+ outputsize += j+m+2;
+ output = (char *)realloc(output, outputsize);
+ }
+
+ strncpy(output, directory, j);
+ if (directory[j-1] != '/') { output[j++] = '/'; }
+ strncpy(&output[j], filename, m);
+ output[j+m] = '\0';
+ }
+
+ if (count == 0)
+ {
+ nn = info->NumberOfIncludeFiles;
+ for (ii = 0; ii < nn; ii++)
+ {
+ if (strcmp(output, info->IncludeFiles[ii]) == 0)
+ {
+ free(output);
+ return info->IncludeFiles[ii];
+ }
+ }
+ }
+ else if (stat(output, &fs) == 0)
+ {
+ info->IncludeFiles = (const char **)preproc_array_check(
+ (char **)info->IncludeFiles, sizeof(char *),
+ info->NumberOfIncludeFiles);
+ info->IncludeFiles[info->NumberOfIncludeFiles++] = output;
+
+ return output;
+ }
+ }
+ }
+
+ free(output);
+ return NULL;
+}
+
+/**
+ * Include a file. All macros defined in the included file
+ * will have their IsExternal flag set.
+ */
+static int preproc_include_file(
+ PreprocessInfo *info, const char *filename, int system_first)
+{
+ char *tbuf;
+ size_t tbuflen = FILE_BUFFER_SIZE;
+ char *line;
+ size_t linelen = 80;
+ size_t i, j, n, r;
+ int in_comment = 0;
+ int in_quote = 0;
+ int result = VTK_PARSE_OK;
+ FILE *fp = NULL;
+ const char *path = NULL;
+ const char *save_filename;
+ int save_external;
+
+ /* check to see if the file has aleady been included */
+ path = preproc_find_include_file(info, filename, system_first, 1);
+ if (path != 0)
+ {
+#if PREPROC_DEBUG
+ int k = 0;
+ while (filename[k] != '>' && filename[k] != '\"' &&
+ filename[k] != '\n' && filename[k] != '\0') { k++; }
+ if (filename[k] == '>')
+ fprintf(stderr, "already loaded file <%*.*s>\n", k, k, filename);
+ else
+ fprintf(stderr, "already loaded file \"%*.*s\"\n", k, k, filename);
+#endif
+
+ return VTK_PARSE_OK;
+ }
+ /* go to the filesystem */
+ path = preproc_find_include_file(info, filename, system_first, 0);
+ if (path == NULL)
+ {
+#if PREPROC_DEBUG
+ int k = 0;
+ while (filename[k] != '>' && filename[k] != '\"' &&
+ filename[k] != '\n' && filename[k] != '\0') { k++; }
+ if (filename[k] == '>')
+ fprintf(stderr, "couldn't find file <%*.*s>\n", k, k, filename);
+ else
+ fprintf(stderr, "couldn't find file \"%*.*s\"\n", k, k, filename);
+#endif
+ return VTK_PARSE_FILE_NOT_FOUND;
+ }
+
+#if PREPROC_DEBUG
+ fprintf(stderr, "including file %s\n", path);
+#endif
+ fp = fopen(path, "r");
+
+ if (fp == NULL)
+ {
+#if PREPROC_DEBUG
+ fprintf(stderr, "couldn't open file %s\n", path);
+#endif
+ return VTK_PARSE_FILE_OPEN_ERROR;
+ }
+
+ save_external = info->IsExternal;
+ save_filename = info->FileName;
+ info->IsExternal = 1;
+ info->FileName = path;
+
+ tbuf = (char *)malloc(tbuflen+4);
+ line = (char *)malloc(linelen);
+
+ /* the buffer must hold a whole line for it to be processed */
+ j = 0;
+ i = 0;
+ n = 0;
+ r = 0;
+
+ do
+ {
+ if (i >= n)
+ {
+ /* recycle unused lookahead chars */
+ if (r)
+ {
+ r = n + 2 - i;
+ if (r == 2)
+ {
+ tbuf[0] = tbuf[tbuflen-2];
+ tbuf[1] = tbuf[tbuflen-1];
+ }
+ else if (r == 1)
+ {
+ tbuf[0] = tbuf[tbuflen-1];
+ }
+ }
+
+ /* read the next chunk of the file */
+ i = 0;
+ if (feof(fp))
+ {
+ /* still have the lookahead chars left */
+ n = r;
+ r = 0;
+ }
+ else
+ {
+ /* fill the remainder of the buffer */
+ errno = 0;
+ tbuflen = r + FILE_BUFFER_SIZE;
+ while ((n = fread(&tbuf[r], 1, tbuflen-r, fp)) == 0 && ferror(fp))
+ {
+ if (errno != EINTR)
+ {
+ fclose(fp);
+ free(tbuf);
+ free(line);
+ info->IsExternal = save_external;
+ return VTK_PARSE_FILE_READ_ERROR;
+ }
+ errno = 0;
+ clearerr(fp);
+ }
+
+ if (n + r < tbuflen)
+ {
+ /* this only occurs if the final fread does not fill the buffer */
+ n += r;
+ r = 0;
+ }
+ else
+ {
+ /* set a lookahead reserve of two chars */
+ n -= (2 - r);
+ r = 2;
+ }
+
+ /* guard against lookahead past last char in file */
+ tbuf[n + r] = '\0';
+ }
+ }
+
+ /* copy the characters until end of line is found */
+ while (i < n)
+ {
+ /* expand line buffer as necessary */
+ while (j+4 > linelen)
+ {
+ linelen *= 2;
+ line = (char *)realloc(line, linelen);
+ }
+
+ if (in_comment)
+ {
+ if (tbuf[i] == '*' && tbuf[i+1] == '/')
+ {
+ line[j++] = tbuf[i++];
+ line[j++] = tbuf[i++];
+ in_comment = 0;
+ }
+ else
+ {
+ line[j++] = tbuf[i++];
+ }
+ }
+ else if (in_quote)
+ {
+ if (tbuf[i] == '\"')
+ {
+ line[j++] = tbuf[i++];
+ in_quote = 0;
+ }
+ else if (tbuf[i] == '\\' && tbuf[i+1] != '\0')
+ {
+ line[j++] = tbuf[i++];
+ line[j++] = tbuf[i++];
+ }
+ else
+ {
+ line[j++] = tbuf[i++];
+ }
+ }
+ else if (tbuf[i] == '/' && tbuf[i+1] == '*')
+ {
+ line[j++] = tbuf[i++];
+ line[j++] = tbuf[i++];
+ in_comment = 1;
+ }
+ else if (tbuf[i] == '\"')
+ {
+ line[j++] = tbuf[i++];
+ in_quote = 1;
+ }
+ else if (tbuf[i] == '\\' && tbuf[i+1] == '\n')
+ {
+ line[j++] = tbuf[i++];
+ line[j++] = tbuf[i++];
+ }
+ else if (tbuf[i] == '\\' && tbuf[i+1] == '\r' && tbuf[i+2] == '\n')
+ {
+ line[j++] = tbuf[i++];
+ line[j++] = tbuf[i++];
+ line[j++] = tbuf[i++];
+ }
+ else if (tbuf[i] != '\n' && tbuf[i] != '\0')
+ {
+ line[j++] = tbuf[i++];
+ }
+ else
+ {
+ line[j++] = tbuf[i++];
+ break;
+ }
+ }
+
+ if (i < n || n == 0)
+ {
+ const char *cp = line;
+ line[j] = '\0';
+ j = 0;
+ preproc_skip_whitespace(&cp, WS_NO_EOL);
+ if (*cp == '#')
+ {
+ vtkParsePreprocess_HandleDirective(info, line);
+ }
+ }
+ }
+ while (n > 0);
+
+ free(tbuf);
+ free(line);
+ fclose(fp);
+
+ info->IsExternal = save_external;
+ info->FileName = save_filename;
+
+ return result;
+}
+
+/**
+ * Handle the #include directive. The header file will
+ * only go through the preprocessor.
+ */
+static int preproc_evaluate_include(
+ PreprocessInfo *info, preproc_tokenizer *tokens)
+{
+ const char *cp;
+ const char *filename;
+
+ if (tokens->hash == HASH_INCLUDE)
+ {
+ preproc_next(tokens);
+
+ cp = tokens->text;
+
+ if (tokens->tok == TOK_ID)
+ {
+ MacroInfo *macro = preproc_find_macro(info, tokens);
+ if (macro && !macro->IsExcluded && macro->Definition)
+ {
+ cp = macro->Definition;
+ }
+ else
+ {
+#if PREPROC_DEBUG
+ fprintf(stderr, "couldn't find macro %*.*s.\n",
+ (int)tokens->len, (int)tokens->len, tokens->text);
+#endif
+ return VTK_PARSE_MACRO_UNDEFINED;
+ }
+ }
+
+ if (*cp == '\"')
+ {
+ filename = cp + 1;
+ preproc_skip_quotes(&cp);
+ if (cp <= filename + 1 || *(cp-1) != '\"')
+ {
+ return VTK_PARSE_SYNTAX_ERROR;
+ }
+
+ return preproc_include_file(info, filename, 0);
+ }
+ else if (*cp == '<')
+ {
+ cp++;
+ filename = cp;
+ while (*cp != '>' && *cp != '\n' && *cp != '\0') { cp++; }
+ if (*cp != '>')
+ {
+ return VTK_PARSE_SYNTAX_ERROR;
+ }
+
+ return preproc_include_file(info, filename, 1);
+ }
+ }
+
+ return VTK_PARSE_OK;
+}
+
+/**
+ * Handle any recognized directive.
+ * Unrecognized directives are ignored.
+ */
+int vtkParsePreprocess_HandleDirective(
+ PreprocessInfo *info, const char *directive)
+{
+ int result = VTK_PARSE_OK;
+ preproc_tokenizer tokens;
+
+ preproc_init(&tokens, directive);
+
+ if (tokens.tok != '#')
+ {
+ return VTK_PARSE_SYNTAX_ERROR;
+ }
+
+ preproc_next(&tokens);
+
+ if (tokens.tok == TOK_ID)
+ {
+ if ((tokens.hash == HASH_IFDEF && tokens.len == 5 &&
+ strncmp("ifdef", tokens.text, tokens.len) == 0) ||
+ (tokens.hash == HASH_IFNDEF && tokens.len == 6 &&
+ strncmp("ifndef", tokens.text, tokens.len) == 0) ||
+ (tokens.hash == HASH_IF && tokens.len == 2 &&
+ strncmp("if", tokens.text, tokens.len) == 0) ||
+ (tokens.hash == HASH_ELIF && tokens.len == 4 &&
+ strncmp("elif", tokens.text, tokens.len) == 0) ||
+ (tokens.hash == HASH_ELSE && tokens.len == 4 &&
+ strncmp("else", tokens.text, tokens.len) == 0) ||
+ (tokens.hash == HASH_ENDIF && tokens.len == 5 &&
+ strncmp("endif", tokens.text, tokens.len) == 0))
+ {
+ result = preproc_evaluate_if(info, &tokens);
+ while (tokens.tok) { preproc_next(&tokens); }
+#if PREPROC_DEBUG
+ {
+ size_t n = tokens.text - directive;
+
+ if (result == VTK_PARSE_SKIP)
+ {
+ fprintf(stderr, "SKIP: ");
+ }
+ else if (result == VTK_PARSE_OK)
+ {
+ fprintf(stderr, "READ: ");
+ }
+ else
+ {
+ fprintf(stderr, "ERR%-2.2d ", result);
+ }
+ fprintf(stderr, "%*.*s\n", (int)n, (int)n, directive);
+ }
+#endif
+ }
+ else if (info->ConditionalDepth == 0)
+ {
+ if ((tokens.hash == HASH_DEFINE && tokens.len == 6 &&
+ strncmp("define", tokens.text, tokens.len) == 0) ||
+ (tokens.hash == HASH_UNDEF && tokens.len == 5 &&
+ strncmp("undef", tokens.text, tokens.len) == 0))
+ {
+ result = preproc_evaluate_define(info, &tokens);
+ }
+ else if (tokens.hash == HASH_INCLUDE && tokens.len == 7 &&
+ strncmp("include", tokens.text, tokens.len) == 0)
+ {
+ result = preproc_evaluate_include(info, &tokens);
+ }
+ }
+ }
+
+ if (info->ConditionalDepth > 0)
+ {
+ return VTK_PARSE_SKIP;
+ }
+
+ return result;
+}
+
+/**
+ * Evaluate a preprocessor expression.
+ * If no errors occurred, the result will be VTK_PARSE_OK.
+ */
+int vtkParsePreprocess_EvaluateExpression(
+ PreprocessInfo *info, const char *text,
+ preproc_int_t *val, int *is_unsigned)
+{
+ preproc_tokenizer tokens;
+ preproc_init(&tokens, text);
+
+ return preproc_evaluate_expression(info, &tokens, val, is_unsigned);
+}
+
+/** Add a macro for defining a macro */
+#define PREPROC_MACRO_TO_STRING2(x) #x
+#define PREPROC_MACRO_TO_STRING(x) PREPROC_MACRO_TO_STRING2(x)
+#define PREPROC_ADD_MACRO(info, x) \
+preproc_add_macro_definition(info, #x, PREPROC_MACRO_TO_STRING2(x))
+
+/**
+ * Add all standard preprocessory macros. Specify the platform.
+ */
+void vtkParsePreprocess_AddStandardMacros(
+ PreprocessInfo *info, int platform)
+{
+ int save_external = info->IsExternal;
+ info->IsExternal = 1;
+
+ /* a special macro to indicate that this is the wrapper */
+ preproc_add_macro_definition(info, "__WRAP__", "1");
+
+ /* language macros - assume that we are wrapping C++ code */
+ preproc_add_macro_definition(info, "__cplusplus", "1");
+
+ /* stdc version macros */
+#ifdef __STDC__
+ PREPROC_ADD_MACRO(info, __STDC__);
+#endif
+#ifdef __STDC_VERSION__
+ PREPROC_ADD_MACRO(info, __STDC_VERSION__);
+#endif
+#ifdef __STDC_HOSTED__
+ PREPROC_ADD_MACRO(info, __STDC_HOSTED__);
+#endif
+
+ if (platform == VTK_PARSE_NATIVE)
+ {
+#ifdef WIN32
+ PREPROC_ADD_MACRO(info, WIN32);
+#endif
+#ifdef _WIN32
+ PREPROC_ADD_MACRO(info, _WIN32);
+#endif
+#ifdef _MSC_VER
+ PREPROC_ADD_MACRO(info, _MSC_VER);
+#endif
+
+#ifdef __BORLAND__
+ PREPROC_ADD_MACRO(info, __BORLAND__);
+#endif
+
+#ifdef __CYGWIN__
+ PREPROC_ADD_MACRO(info, __CYGWIN__);
+#endif
+#ifdef MINGW
+ PREPROC_ADD_MACRO(info, MINGW);
+#endif
+#ifdef __MINGW32__
+ PREPROC_ADD_MACRO(info, __MINGW32__);
+#endif
+
+#ifdef __linux__
+ PREPROC_ADD_MACRO(info, __linux__);
+#endif
+#ifdef __LINUX__
+ PREPROC_ADD_MACRO(info, __LINUX__);
+#endif
+
+#ifdef __APPLE__
+ PREPROC_ADD_MACRO(info, __APPLE__);
+#endif
+#ifdef __MACH__
+ PREPROC_ADD_MACRO(info, __MACH__);
+#endif
+#ifdef __DARWIN__
+ PREPROC_ADD_MACRO(info, __DARWIN__);
+#endif
+
+#ifdef __GNUC__
+ PREPROC_ADD_MACRO(info, __GNUC__);
+#endif
+#ifdef __LP64__
+ PREPROC_ADD_MACRO(info, __LP64__);
+#endif
+#ifdef __BIG_ENDIAN__
+ PREPROC_ADD_MACRO(info, __BIG_ENDIAN__);
+#endif
+#ifdef __LITTLE_ENDIAN__
+ PREPROC_ADD_MACRO(info, __LITTLE_ENDIAN__);
+#endif
+ }
+
+ info->IsExternal = save_external;
+}
+
+/**
+ * Add a preprocessor macro, including a definition.
+ */
+int vtkParsePreprocess_AddMacro(
+ PreprocessInfo *info, const char *name, const char *definition)
+{
+ preproc_tokenizer token;
+ MacroInfo **macro_p;
+ MacroInfo *macro;
+
+ preproc_init(&token, name);
+ macro_p = preproc_macro_location(info, &token, 1);
+ if (*macro_p)
+ {
+ macro = *macro_p;
+ if (preproc_identical(macro->Definition, definition))
+ {
+ return VTK_PARSE_OK;
+ }
+ else
+ {
+ return VTK_PARSE_MACRO_REDEFINED;
+ }
+ }
+
+ macro = preproc_new_macro(info, name, definition);
+ macro->IsExternal = 1;
+ *macro_p = macro;
+
+ return VTK_PARSE_OK;
+}
+
+/**
+ * Return a preprocessor macro struct, or NULL if not found.
+ */
+MacroInfo *vtkParsePreprocess_GetMacro(
+ PreprocessInfo *info, const char *name)
+{
+ preproc_tokenizer token;
+ MacroInfo *macro;
+
+ preproc_init(&token, name);
+ macro = preproc_find_macro(info, &token);
+
+ if (macro && !macro->IsExcluded)
+ {
+ return macro;
+ }
+
+ return NULL;
+}
+
+/**
+ * Remove a preprocessor macro.
+ */
+int vtkParsePreprocess_RemoveMacro(
+ PreprocessInfo *info, const char *name)
+{
+ preproc_tokenizer token;
+
+ preproc_init(&token, name);
+
+ if (preproc_remove_macro(info, &token))
+ {
+ return VTK_PARSE_OK;
+ }
+
+ return VTK_PARSE_MACRO_UNDEFINED;
+}
+
+/**
+ * Expand a macro, argstring is ignored if not a function macro
+ */
+const char *vtkParsePreprocess_ExpandMacro(
+ PreprocessInfo *info, MacroInfo *macro, const char *argstring)
+{
+ const char *cp = argstring;
+ int n = 0;
+ int j = 0;
+ const char *stack_values[8];
+ const char **values = NULL;
+ const char *pp = NULL;
+ const char *dp = NULL;
+ const char *wp = NULL;
+ char stack_rp[128];
+ char *rp = NULL;
+ size_t rs = 0;
+ size_t i = 0;
+ size_t l = 0;
+ size_t k = 0;
+ int stringify = 0;
+ int noexpand = 0;
+ int depth = 1;
+ int c;
+
+ if (macro->IsFunction)
+ {
+ if (argstring == NULL || *cp != '(')
+ {
+ return NULL;
+ }
+
+ /* break the string into individual argument values */
+ values = stack_values;
+
+ cp++;
+ values[n++] = cp;
+ while (depth > 0 && *cp != '\0')
+ {
+ while (*cp != '\0')
+ {
+ if (*cp == '\"' || *cp == '\'')
+ {
+ preproc_skip_quotes(&cp);
+ }
+ else if (cp[0] == '/' && (cp[1] == '*' || cp[1] == '/'))
+ {
+ preproc_skip_comment(&cp);
+ }
+ else if (*cp == '(')
+ {
+ cp++;
+ depth++;
+ }
+ else if (*cp == ')')
+ {
+ cp++;
+ if (--depth == 0)
+ {
+ break;
+ }
+ }
+ else if (*cp == ',')
+ {
+ cp++;
+ if (depth == 1)
+ {
+ break;
+ }
+ }
+ else if (*cp != '\0')
+ {
+ cp++;
+ }
+ }
+ if (n >= 8 && (n & (n-1)) == 0)
+ {
+ if (values != stack_values)
+ {
+ values = (const char **)realloc(
+ (char **)values, 2*n*sizeof(const char **));
+ }
+ else
+ {
+ values = (const char **)malloc(2*n*sizeof(const char **));
+ memcpy((char **)values, stack_values, 8*sizeof(const char **));
+ }
+ }
+
+ values[n++] = cp;
+ }
+ --n;
+
+ /* diagnostic: print out the values */
+#if PREPROC_DEBUG
+ for (j = 0; j < n; j++)
+ {
+ size_t m = values[j+1] - values[j] - 1;
+ fprintf(stderr, "arg %i: %*.*s\n",
+ (int)j, (int)m, (int)m, values[j]);
+ }
+#endif
+
+ if (macro->NumberOfParameters == 0 && n == 1)
+ {
+ const char *tp = values[0];
+ preproc_skip_whitespace(&tp, WS_NO_EOL);
+ if (tp + 1 >= values[1])
+ {
+ n = 0;
+ }
+ }
+
+ if (n != macro->NumberOfParameters)
+ {
+ if (values != stack_values) { free((char **)values); }
+#if PREPROC_DEBUG
+ fprintf(stderr, "wrong number of macro args to %s, %lu != %lu\n",
+ macro->Name, n, macro->NumberOfParameters);
+#endif
+ return NULL;
+ }
+ }
+
+ cp = macro->Definition;
+ cp = (cp ? cp : "");
+ dp = cp;
+ rp = stack_rp;
+ rp[0] = '\0';
+ rs = 128;
+
+ while (*cp != '\0')
+ {
+ pp = cp;
+ wp = cp;
+ stringify = 0;
+ noexpand = 0;
+ /* skip all chars that aren't part of a name */
+ while (!preproc_chartype(*cp, CPRE_ID) && *cp != '\0')
+ {
+ dp = cp;
+ preproc_skip_whitespace(&cp, WS_NO_EOL);
+ if (cp > dp)
+ {
+ dp = cp;
+ }
+ else if (preproc_chartype(*cp, CPRE_QUOTE))
+ {
+ preproc_skip_quotes(&cp);
+ dp = cp;
+ wp = cp;
+ noexpand = 0;
+ }
+ else if (preproc_chartype(*cp, CPRE_DIGIT))
+ {
+ preproc_skip_number(&cp);
+ dp = cp;
+ wp = cp;
+ noexpand = 0;
+ }
+ else if (cp[0] == '#' && cp[1] == '#')
+ {
+ noexpand = 1;
+ dp = wp;
+ cp += 2;
+ wp = cp;
+ preproc_skip_whitespace(&cp, WS_NO_EOL);
+ break;
+ }
+ else if (*cp == '#')
+ {
+ stringify = 1;
+ dp = cp;
+ wp = cp;
+ cp++;
+ preproc_skip_whitespace(&cp, WS_NO_EOL);
+ break;
+ }
+ else
+ {
+ cp++;
+ dp = cp;
+ wp = cp;
+ }
+ }
+ l = dp - pp;
+ if (l > 0)
+ {
+ if (i + l + 1 >= rs)
+ {
+ rs += rs + i + l + 1;
+ if (rp != stack_rp)
+ {
+ rp = (char *)realloc(rp, rs);
+ }
+ else
+ {
+ rp = (char *)malloc(rs);
+ memcpy(rp, stack_rp, i);
+ }
+ }
+ strncpy(&rp[i], pp, l);
+ i += l;
+ rp[i] = '\0';
+ }
+
+ /* get the name */
+ pp = cp;
+ preproc_skip_name(&cp);
+ l = cp - pp;
+ if (l > 0)
+ {
+ for (j = 0; j < n; j++)
+ {
+ /* check whether the name matches a parameter */
+ if (strncmp(pp, macro->Parameters[j], l) == 0 &&
+ macro->Parameters[j][l] == '\0')
+ {
+ /* substitute the argument value */
+ l = values[j+1] - values[j] - 1;
+ pp = values[j];
+ /* remove leading whitespace from argument */
+ c = *pp;
+ while (preproc_chartype(c, CPRE_WHITE))
+ {
+ c = *(++pp);
+ l--;
+ }
+ /* remove trailing whitespace from argument */
+ if (l > 0)
+ {
+ c = pp[l - 1];
+ while (preproc_chartype(c, CPRE_WHITE))
+ {
+ if (--l == 0)
+ {
+ break;
+ }
+ c = pp[l-1];
+ }
+ }
+ /* check if followed by "##" */
+ wp = cp;
+ preproc_skip_whitespace(&wp, WS_NO_EOL);
+ if (wp[0] == '#' && wp[1] == '#')
+ {
+ noexpand = 1;
+ }
+ break;
+ }
+ }
+ if (stringify)
+ {
+ /* compute number of chars that will be added */
+ stringify = 2;
+ for (k = 0; k < l; k++)
+ {
+ c = pp[k];
+ if (c == '\\' || c == '\"')
+ {
+ stringify++;
+ }
+ }
+ }
+ if (i + l + stringify + 1 >= rs)
+ {
+ rs += rs + i + l + 1;
+ if (rp != stack_rp)
+ {
+ rp = (char *)realloc(rp, rs);
+ }
+ else
+ {
+ rp = (char *)malloc(rs);
+ memcpy(rp, stack_rp, i);
+ }
+ }
+ if (stringify)
+ {
+ rp[i++] = '\"';
+ for (k = 0; k < l; k++)
+ {
+ c = pp[k];
+ if (c == '\\' || c == '\"')
+ {
+ rp[i++] = '\\';
+ }
+ rp[i++] = c;
+ }
+ rp[i++] = '\"';
+ }
+ else if (noexpand)
+ {
+ strncpy(&rp[i], pp, l);
+ i += l;
+ }
+ else
+ {
+ /* process the arguments before substituting them */
+ const char *text;
+ int is_excluded = macro->IsExcluded;
+ macro->IsExcluded = 1;
+ strncpy(&rp[i], pp, l);
+ rp[i + l] = '\0';
+ text = vtkParsePreprocess_ProcessString(info, &rp[i]);
+ if (text)
+ {
+ l = strlen(text);
+ if (text != &rp[i])
+ {
+ char *tp = NULL;
+ if (i + l + 1 >= rs)
+ {
+ rs += rs + i + l + 1;
+ tp = rp;
+ rp = (char *)malloc(rs);
+ memcpy(rp, tp, i);
+ }
+ strncpy(&rp[i], text, l);
+ vtkParsePreprocess_FreeProcessedString(info, text);
+ if (tp && tp != stack_rp)
+ {
+ free(tp);
+ }
+ }
+ }
+ macro->IsExcluded = is_excluded;
+ i += l;
+ }
+ rp[i] = '\0';
+ }
+ }
+
+ if (values != stack_values) { free((char **)values); }
+
+ if (!macro->IsFunction && macro->Definition &&
+ strcmp(rp, macro->Definition) == 0)
+ {
+ if (rp != stack_rp) { free(rp); }
+ return macro->Definition;
+ }
+
+ if (rp == stack_rp)
+ {
+ rp = (char *)malloc(strlen(stack_rp) + 1);
+ strcpy(rp, stack_rp);
+ }
+
+ return rp;
+}
+
+/**
+ * Process a string
+ */
+const char *vtkParsePreprocess_ProcessString(
+ PreprocessInfo *info, const char *text)
+{
+ char stack_rp[128];
+ char *rp;
+ char *ep;
+ size_t i = 0;
+ size_t rs = 128;
+ int last_tok = 0;
+ preproc_tokenizer tokens;
+ preproc_init(&tokens, text);
+
+ rp = stack_rp;
+ rp[0] = '\0';
+
+ while (tokens.tok)
+ {
+ size_t l = tokens.len;
+ size_t j;
+ const char *cp = tokens.text;
+ const char *dp;
+
+ if (tokens.tok == TOK_STRING && last_tok == TOK_STRING)
+ {
+ if (i > 0)
+ {
+ do { --i; } while (i > 0 && rp[i] != '\"');
+ }
+ cp++;
+ }
+
+ if (i + l + 2 >= rs)
+ {
+ rs += rs + i + l + 2;
+ if (rp == stack_rp)
+ {
+ rp = (char *)malloc(rs);
+ memcpy(rp, stack_rp, i);
+ }
+ else
+ {
+ rp = (char *)realloc(rp, rs);
+ }
+ }
+
+ /* copy the token, removing backslash-newline */
+ dp = cp;
+ ep = &rp[i];
+ for (j = 0; j < l; j++)
+ {
+ if (*dp == '\\')
+ {
+ if (dp[1] == '\n') { dp += 2; }
+ else if (dp[1] == '\r' && dp[2] == '\n') { dp += 3; }
+ else { *ep++ = *dp++; }
+ }
+ else
+ {
+ *ep++ = *dp++;
+ }
+ }
+ l = ep - &rp[i];
+
+ if (tokens.tok == TOK_ID)
+ {
+ MacroInfo *macro = preproc_find_macro(info, &tokens);
+ if (macro && !macro->IsExcluded)
+ {
+ const char *args = NULL;
+ int expand = 1;
+
+ if (macro->IsFunction)
+ {
+ /* expand function macros using the arguments */
+ preproc_next(&tokens);
+ if (tokens.tok == '(')
+ {
+ int depth = 1;
+ args = tokens.text;
+ while (depth > 0 && preproc_next(&tokens))
+ {
+ if (tokens.tok == '(')
+ {
+ depth++;
+ }
+ else if (tokens.tok == ')')
+ {
+ depth--;
+ }
+ }
+ if (tokens.tok != ')')
+ {
+ if (rp != stack_rp) { free(rp); }
+ return NULL;
+ }
+ }
+ else
+ {
+ /* unput the last token if it isn't "(" */
+ tokens.len = l;
+ tokens.text = cp;
+ expand = 0;
+ }
+ }
+ if (expand)
+ {
+ const char *expansion;
+ const char *processed;
+ expansion = vtkParsePreprocess_ExpandMacro(info, macro, args);
+ if (expansion == NULL)
+ {
+ if (rp != stack_rp) { free(rp); }
+ return NULL;
+ }
+ macro->IsExcluded = 1;
+ processed = vtkParsePreprocess_ProcessString(info, expansion);
+ macro->IsExcluded = 0;
+ if (processed == NULL)
+ {
+ vtkParsePreprocess_FreeMacroExpansion(info, macro, expansion);
+ if (rp != stack_rp) { free(rp); }
+ return NULL;
+ }
+ l = strlen(processed);
+ if (l > 0)
+ {
+ if (i + l + 2 >= rs)
+ {
+ rs += rs + i + l + 2;
+ if (rp == stack_rp)
+ {
+ rp = (char *)malloc(rs);
+ memcpy(rp, stack_rp, i);
+ }
+ else
+ {
+ rp = (char *)realloc(rp, rs);
+ }
+ }
+ strncpy(&rp[i], processed, l);
+ }
+ if (processed != expansion)
+ {
+ vtkParsePreprocess_FreeProcessedString(info, processed);
+ }
+ vtkParsePreprocess_FreeMacroExpansion(info, macro, expansion);
+ }
+ }
+ }
+
+ i += l;
+
+ last_tok = tokens.tok;
+ l = tokens.len;
+ cp = tokens.text;
+ if (preproc_next(&tokens) && tokens.text > cp + l)
+ {
+ rp[i++] = ' ';
+ }
+ }
+ rp[i] = '\0';
+
+ if (strcmp(rp, text) == 0)
+ {
+ /* no change, return */
+ if (rp != stack_rp) { free(rp); }
+ return text;
+ }
+ else
+ {
+ /* string changed, recursively reprocess */
+ const char *tp = vtkParsePreprocess_ProcessString(info, rp);
+ if (rp != tp)
+ {
+ if (rp != stack_rp) { free(rp); }
+ return tp;
+ }
+ if (rp == stack_rp)
+ {
+ rp = (char *)malloc(strlen(stack_rp) + 1);
+ strcpy(rp, stack_rp);
+ }
+ }
+
+ return rp;
+}
+
+/**
+ * Free a string returned by ExpandMacro
+ */
+void vtkParsePreprocess_FreeMacroExpansion(
+ PreprocessInfo *info, MacroInfo *macro, const char *text)
+{
+ /* only free expansion if it is different from definition */
+ if (info && text != macro->Definition)
+ {
+ free((char *)text);
+ }
+}
+
+/**
+ * Free a string returned by ProcessString
+ */
+void vtkParsePreprocess_FreeProcessedString(
+ PreprocessInfo *info, const char *text)
+{
+ if (info)
+ {
+ free((char *)text);
+ }
+}
+
+/**
+ * Add an include directory.
+ */
+void vtkParsePreprocess_IncludeDirectory(
+ PreprocessInfo *info, const char *name)
+{
+ int i, n;
+
+ n = info->NumberOfIncludeDirectories;
+ for (i = 0; i < n; i++)
+ {
+ if (strcmp(name, info->IncludeDirectories[i]) == 0)
+ {
+ return;
+ }
+ }
+
+ info->IncludeDirectories = (const char **)preproc_array_check(
+ (char **)info->IncludeDirectories, sizeof(char *),
+ info->NumberOfIncludeDirectories);
+ info->IncludeDirectories[info->NumberOfIncludeDirectories++] =
+ preproc_strndup(name, strlen(name));
+}
+
+/**
+ * Find an include file in the path. If system_first is set,
+ * then the current directory is not searched.
+ */
+const char *vtkParsePreprocess_FindIncludeFile(
+ PreprocessInfo *info, const char *filename, int system_first,
+ int *already_loaded)
+{
+ const char *cp;
+ cp = preproc_find_include_file(info, filename, system_first, 1);
+ if (cp)
+ {
+ *already_loaded = 1;
+ return cp;
+ }
+
+ *already_loaded = 0;
+ return preproc_find_include_file(info, filename, system_first, 0);
+}
+
+/**
+ * Initialize a preprocessor macro struct
+ */
+void vtkParsePreprocess_InitMacro(MacroInfo *macro)
+{
+ macro->Name = NULL;
+ macro->Definition = NULL;
+ macro->Comment = NULL;
+ macro->NumberOfParameters = 0;
+ macro->Parameters = NULL;
+ macro->IsFunction = 0;
+ macro->IsExternal = 0;
+ macro->IsExcluded = 0;
+}
+
+/**
+ * Free a preprocessor macro struct
+ */
+void vtkParsePreprocess_FreeMacro(MacroInfo *macro)
+{
+ int i, n;
+
+ free((char *)macro->Name);
+ free((char *)macro->Definition);
+ free((char *)macro->Comment);
+
+ n = macro->NumberOfParameters;
+ for (i = 0; i < n; i++)
+ {
+ free((char *)macro->Parameters[i]);
+ }
+ free((char **)macro->Parameters);
+
+ free(macro);
+}
+
+/**
+ * Initialize a preprocessor struct
+ */
+void vtkParsePreprocess_Init(
+ PreprocessInfo *info, const char *filename)
+{
+ info->FileName = NULL;
+ info->MacroHashTable = NULL;
+ info->NumberOfIncludeDirectories = 0;
+ info->IncludeDirectories = NULL;
+ info->NumberOfIncludeFiles = 0;
+ info->IncludeFiles = NULL;
+ info->IsExternal = 0;
+ info->ConditionalDepth = 0;
+ info->ConditionalDone = 0;
+
+ if (filename)
+ {
+ info->FileName = preproc_strndup(filename, strlen(filename));
+ }
+}
+
+/**
+ * Free a preprocessor struct and its contents
+ */
+void vtkParsePreprocess_Free(PreprocessInfo *info)
+{
+ int i, n;
+ MacroInfo **mptr;
+
+ free((char *)info->FileName);
+
+ if (info->MacroHashTable)
+ {
+ n = PREPROC_HASH_TABLE_SIZE;
+ for (i = 0; i < n; i++)
+ {
+ mptr = info->MacroHashTable[i];
+ if (mptr)
+ {
+ while (*mptr)
+ {
+ vtkParsePreprocess_FreeMacro(*mptr++);
+ }
+ }
+ free(info->MacroHashTable[i]);
+ }
+ free(info->MacroHashTable);
+ }
+
+ n = info->NumberOfIncludeDirectories;
+ for (i = 0; i < n; i++)
+ {
+ free((char *)info->IncludeDirectories[i]);
+ }
+ free((char **)info->IncludeDirectories);
+
+ n = info->NumberOfIncludeFiles;
+ for (i = 0; i < n; i++)
+ {
+ free((char *)info->IncludeFiles[i]);
+ }
+ free((char **)info->IncludeFiles);
+
+ free(info);
+}
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkParsePreprocess.h
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+/*-------------------------------------------------------------------------
+ Copyright (c) 2010 David Gobbi.
+
+ Contributed to the VisualizationToolkit by the author in June 2010
+ under the terms of the Visualization Toolkit 2008 copyright.
+-------------------------------------------------------------------------*/
+
+/**
+ This file provides subroutines to assist in preprocessing
+ C/C++ header files. It evaluates preprocessor directives
+ and stores a list of all preprocessor macros.
+
+ The preprocessing is done in-line while the file is being
+ parsed. Macros that are defined in the file are stored but
+ are not automatically expanded. The parser can query the
+ macro definitions, expand them into plain text, or ask the
+ preprocessor to evaluate them and return an integer result.
+
+ The typical usage of this preprocessor is that the main
+ parser will pass any lines that begin with '#' to the
+ vtkParsePreprocess_HandleDirective() function, which will
+ evaluate the line and provide a return code. The return
+ code will tell the main parser if a syntax error or macro
+ lookup error occurred, and will also let the parser know
+ if an #if or #else directive requires that the next block
+ of code be skipped.
+*/
+
+#ifndef VTK_PARSE_PREPROCESS_H
+#define VTK_PARSE_PREPROCESS_H
+
+/**
+ * The preprocessor int type. Use the compiler's longest int type.
+ */
+#if defined(_WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)
+typedef __int64 preproc_int_t;
+typedef unsigned __int64 preproc_uint_t;
+#else
+typedef long long preproc_int_t;
+typedef unsigned long long preproc_uint_t;
+#endif
+
+/**
+ * Struct to describe a preprocessor symbol.
+ */
+typedef struct _MacroInfo
+{
+ const char *Name;
+ const char *Definition;
+ const char *Comment; /* unused */
+ int NumberOfParameters; /* only if IsFunction == 1 */
+ const char **Parameters; /* symbols for parameters */
+ int IsFunction; /* this macro requires arguments */
+ int IsExternal; /* this macro is from an included file */
+ int IsExcluded; /* do not expand this macro */
+} MacroInfo;
+
+/**
+ * Contains all symbols defined thus far (including those defined
+ * in any included header files).
+ */
+typedef struct _PreprocessInfo
+{
+ const char *FileName; /* the file that is being parsed */
+ MacroInfo ***MacroHashTable; /* hash table for macro lookup */
+ int NumberOfIncludeDirectories;
+ const char **IncludeDirectories;
+ int NumberOfIncludeFiles; /* all included files */
+ const char **IncludeFiles;
+ int IsExternal; /* label all macros as "external" */
+ int ConditionalDepth; /* internal state variable */
+ int ConditionalDone; /* internal state variable */
+} PreprocessInfo;
+
+/**
+ * Platforms. Always choose native unless crosscompiling.
+ */
+enum _preproc_platform_t {
+ VTK_PARSE_NATIVE = 0,
+};
+
+/**
+ * Directive return values.
+ */
+enum _preproc_return_t {
+ VTK_PARSE_OK = 0,
+ VTK_PARSE_SKIP = 1, /* skip next block */
+ VTK_PARSE_PREPROC_DOUBLE = 2, /* encountered a double */
+ VTK_PARSE_PREPROC_FLOAT = 3, /* encountered a float */
+ VTK_PARSE_PREPROC_STRING = 4, /* encountered a string */
+ VTK_PARSE_MACRO_UNDEFINED = 5, /* macro lookup failed */
+ VTK_PARSE_MACRO_REDEFINED = 6, /* attempt to redefine a macro */
+ VTK_PARSE_FILE_NOT_FOUND = 7, /* include file not found */
+ VTK_PARSE_FILE_OPEN_ERROR = 8, /* include file not readable */
+ VTK_PARSE_FILE_READ_ERROR = 9, /* error during read */
+ VTK_PARSE_MACRO_NUMARGS = 10, /* wrong number of args to func macro */
+ VTK_PARSE_SYNTAX_ERROR = 11 /* any and all syntax errors */
+};
+
+/**
+ * Bitfield for fatal errors.
+ */
+#define VTK_PARSE_FATAL_ERROR 0xF8
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Handle a preprocessor directive. Return value VTK_PARSE_OK
+ * means that no errors occurred, while VTK_PARSE_SKIP means that
+ * a conditional directive was encountered and the next code
+ * block should be skipped. The preprocessor has an internal state
+ * machine that keeps track of conditional if/else/endif directives.
+ * All other return values indicate errors, and it is up to the
+ * parser to decide which errors are fatal. The preprocessor
+ * only considers syntax errors and I/O errors to be fatal.
+ */
+int vtkParsePreprocess_HandleDirective(
+ PreprocessInfo *info, const char *directive);
+
+/**
+ * Evaluate a preprocessor expression, providing an integer result
+ * in "val", and whether it is unsigned in "is_unsigned". A return
+ * value of VTK_PARSE_OK means that no errors occurred, while
+ * VTK_PREPROC_DOUBLE, VTK_PREPROC_FLOAT, and VTK_PREPROC_STRING
+ * indicate that the preprocessor encountered a non-integer value.
+ * Error return values are VTK_PARSE_MACRO_UNDEFINED and
+ * VTK_PARSE_SYNTAX_ERRORS. Undefined macros evaluate to zero.
+ */
+int vtkParsePreprocess_EvaluateExpression(
+ PreprocessInfo *info, const char *text,
+ preproc_int_t *val, int *is_unsigned);
+
+/**
+ * Add all standard preprocessor symbols. Use VTK_PARSE_NATIVE
+ * as the platform. In the future, other platform specifiers
+ * might be added to allow crosscompiling.
+ */
+void vtkParsePreprocess_AddStandardMacros(
+ PreprocessInfo *info, int platform);
+
+/**
+ * Add a preprocessor symbol, including a definition. Return
+ * values are VTK_PARSE_OK and VTK_PARSE_MACRO_REDEFINED.
+ */
+int vtkParsePreprocess_AddMacro(
+ PreprocessInfo *info, const char *name, const char *definition);
+
+/**
+ * Remove a preprocessor symbol. Return values are VTK_PARSE_OK
+ * and VTK_PARSE_MACRO_UNDEFINED.
+ */
+int vtkParsePreprocess_RemoveMacro(
+ PreprocessInfo *info, const char *name);
+
+/**
+ * Return a preprocessor symbol struct, or NULL if not found.
+ */
+MacroInfo *vtkParsePreprocess_GetMacro(
+ PreprocessInfo *info, const char *name);
+
+/**
+ * Expand a macro. A function macro must be given an argstring
+ * with args in parentheses, otherwise the argstring can be NULL.
+ * returns NULL if the wrong number of arguments were given.
+ */
+const char *vtkParsePreprocess_ExpandMacro(
+ PreprocessInfo *info, MacroInfo *macro, const char *argstring);
+
+/**
+ * Free an expanded macro
+ */
+void vtkParsePreprocess_FreeMacroExpansion(
+ PreprocessInfo *info, MacroInfo *macro, const char *text);
+
+/**
+ * Fully process a string with the preprocessor, and
+ * return a new string or NULL if a fatal error occurred.
+ */
+const char *vtkParsePreprocess_ProcessString(
+ PreprocessInfo *info, const char *text);
+
+/**
+ * Free a processed string. Only call this method if
+ * the string returned by ProcessString is different from
+ * the original string, because ProcessString will just
+ * return the original string if no processing was needed.
+ */
+void vtkParsePreprocess_FreeProcessedString(
+ PreprocessInfo *info, const char *text);
+
+/**
+ * Add an include directory. The directories that were added
+ * first will be searched first.
+ */
+void vtkParsePreprocess_IncludeDirectory(
+ PreprocessInfo *info, const char *name);
+
+/**
+ * Find an include file in the path. If system_first is set, then
+ * the current directory is ignored unless it is explicitly in the
+ * path. A null return value indicates that the file was not found.
+ * If already_loaded is set, then the file was already loaded. This
+ * preprocessor never loads the same file twice.
+ */
+const char *vtkParsePreprocess_FindIncludeFile(
+ PreprocessInfo *info, const char *filename, int system_first,
+ int *already_loaded);
+
+/**
+ * Initialize a preprocessor symbol struct.
+ */
+void vtkParsePreprocess_InitMacro(MacroInfo *symbol);
+
+/**
+ * Free a preprocessor macro struct
+ */
+void vtkParsePreprocess_FreeMacro(MacroInfo *macro);
+
+/**
+ * Initialize a preprocessor struct.
+ */
+void vtkParsePreprocess_Init(
+ PreprocessInfo *info, const char *filename);
+
+/**
+ * Free a preprocessor struct and its contents;
+ */
+void vtkParsePreprocess_Free(PreprocessInfo *info);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkParseString.c
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+/*-------------------------------------------------------------------------
+ Copyright (c) 2012 David Gobbi.
+
+ Contributed to the VisualizationToolkit by the author in April 2012
+ under the terms of the Visualization Toolkit 2008 copyright.
+-------------------------------------------------------------------------*/
+
+#include "vtkParseString.h"
+#include <stdlib.h>
+#include <string.h>
+
+/*----------------------------------------------------------------
+ * String utility methods
+ *
+ * Strings are centrally allocated and are const. They should not
+ * be freed until the parse is complete and all the data structures
+ * generated by the parse have been freed.
+ */
+
+/* allocate a string of n+1 bytes */
+void vtkParse_InitStringCache(StringCache *cache)
+{
+ cache->NumberOfChunks = 0;
+ cache->Chunks = NULL;
+ cache->ChunkSize = 0;
+ cache->Position = 0;
+}
+
+/* allocate a string of n+1 bytes */
+char *vtkParse_NewString(StringCache *cache, size_t n)
+{
+ size_t nextPosition;
+ char *cp;
+
+ if (cache->ChunkSize == 0)
+ {
+ cache->ChunkSize = 8176;
+ }
+
+ // align next start position on an 8-byte boundary
+ nextPosition = (((cache->Position + n + 8) | 7 ) - 7);
+
+ if (cache->NumberOfChunks == 0 || nextPosition > cache->ChunkSize)
+ {
+ if (n + 1 > cache->ChunkSize)
+ {
+ cache->ChunkSize = n + 1;
+ }
+ cp = (char *)malloc(cache->ChunkSize);
+
+ /* if empty, alloc for the first time */
+ if (cache->NumberOfChunks == 0)
+ {
+ cache->Chunks = (char **)malloc(sizeof(char *));
+ }
+ /* if count is power of two, reallocate with double size */
+ else if ((cache->NumberOfChunks & (cache->NumberOfChunks-1)) == 0)
+ {
+ cache->Chunks = (char **)realloc(
+ cache->Chunks, (2*cache->NumberOfChunks)*sizeof(char *));
+ }
+
+ cache->Chunks[cache->NumberOfChunks++] = cp;
+
+ cache->Position = 0;
+ nextPosition = (((n + 8) | 7) - 7);
+ }
+
+ cp = &cache->Chunks[cache->NumberOfChunks-1][cache->Position];
+ cp[0] = '\0';
+
+ cache->Position = nextPosition;
+
+ return cp;
+}
+
+/* free all allocated strings */
+void vtkParse_FreeStringCache(StringCache *cache)
+{
+ unsigned long i;
+
+ for (i = 0; i < cache->NumberOfChunks; i++)
+ {
+ free(cache->Chunks[i]);
+ }
+ if (cache->Chunks)
+ {
+ free(cache->Chunks);
+ }
+
+ cache->Chunks = NULL;
+ cache->NumberOfChunks = 0;
+}
+
+/* duplicate the first n bytes of a string and terminate it */
+const char *vtkParse_CacheString(StringCache *cache, const char *in, size_t n)
+{
+ char *res = NULL;
+
+ res = vtkParse_NewString(cache, n);
+ strncpy(res, in, n);
+ res[n] = '\0';
+
+ return res;
+}
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkParseString.h
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+
+/*
+ String allocation routines used by vtkParse.
+
+ The parser uses "const char *" as its string object type, and expects
+ all string objects to persist and be constant for the entire lifetime
+ of the data generated by the parse (usually this means until the parser
+ executable has exited). All strings that are stored in the parser's
+ data objects should either be statically allocated, or allocated with
+ the vtkParse_NewString() or vtkParse_CacheString() methods declared here.
+*/
+
+#ifndef VTK_PARSE_STRING_H
+#define VTK_PARSE_STRING_H
+
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * StringCache provides a simple way of allocating strings centrally.
+ * It eliminates the need to allocate and free each individual strings,
+ * which makes the code simpler and more efficient.
+ */
+typedef struct _StringCache
+{
+ unsigned long NumberOfChunks;
+ char **Chunks;
+ size_t ChunkSize;
+ size_t Position;
+} StringCache;
+
+/**
+ * Initialize the string cache.
+ */
+void vtkParse_InitStringCache(StringCache *cache);
+
+/**
+ * Alocate a new string from the cache.
+ * A total of n+1 bytes will be allocated, to leave room for null.
+ */
+char *vtkParse_NewString(StringCache *cache, size_t n);
+
+/**
+ * Cache a string so that it can then be used in the vtkParse data
+ * structures. The string will last until the application exits.
+ * At most 'n' chars will be copied, and the string will be terminated.
+ * If a null pointer is provided, then a null pointer will be returned.
+ */
+const char *vtkParse_CacheString(StringCache *cache, const char *cp, size_t n);
+
+/**
+ * Free all strings that were created with vtkParse_NewString() or
+ * with vtkParse_CacheString().
+ */
+void vtkParse_FreeStringCache(StringCache *cache);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkWrap.c
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+
+#include "vtkWrap.h"
+#include "vtkParseData.h"
+#include "vtkParseExtras.h"
+#include "vtkParseString.h"
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+/* -------------------------------------------------------------------- */
+/* Common types. */
+
+int vtkWrap_IsVoid(ValueInfo *val)
+{
+ if (val == 0)
+ {
+ return 1;
+ }
+
+ return ((val->Type & VTK_PARSE_UNQUALIFIED_TYPE) == VTK_PARSE_VOID);
+}
+
+int vtkWrap_IsVoidFunction(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_UNQUALIFIED_TYPE);
+
+ if (t == VTK_PARSE_FUNCTION_PTR || t == VTK_PARSE_FUNCTION)
+ {
+ /* check for signature "void (*func)(void *)" */
+ if (val->Function->NumberOfParameters == 1 &&
+ val->Function->Parameters[0]->Type == VTK_PARSE_VOID_PTR &&
+ val->Function->Parameters[0]->NumberOfDimensions == 0 &&
+ val->Function->ReturnValue->Type == VTK_PARSE_VOID)
+ {
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+int vtkWrap_IsVoidPointer(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
+ return (t == VTK_PARSE_VOID && vtkWrap_IsPointer(val));
+}
+
+int vtkWrap_IsCharPointer(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
+ return (t == VTK_PARSE_CHAR && vtkWrap_IsPointer(val));
+}
+
+int vtkWrap_IsVTKObject(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_UNQUALIFIED_TYPE);
+ return (t == VTK_PARSE_OBJECT_PTR &&
+ val->Class[0] == 'v' && strncmp(val->Class, "vtk", 3) == 0);
+}
+
+int vtkWrap_IsSpecialObject(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_UNQUALIFIED_TYPE);
+ return ((t == VTK_PARSE_OBJECT ||
+ t == VTK_PARSE_OBJECT_REF) &&
+ val->Class[0] == 'v' && strncmp(val->Class, "vtk", 3) == 0);
+}
+
+int vtkWrap_IsQtObject(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
+ if (t == VTK_PARSE_QOBJECT &&
+ val->Class[0] == 'Q' && isupper(val->Class[1]))
+ {
+ return 1;
+ }
+ return 0;
+}
+
+int vtkWrap_IsQtEnum(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_UNQUALIFIED_TYPE);
+ if ((t == VTK_PARSE_QOBJECT || t == VTK_PARSE_QOBJECT_REF) &&
+ val->Class[0] == 'Q' && strncmp("Qt::", val->Class, 4) == 0)
+ {
+ return 1;
+ }
+ return 0;
+}
+
+
+/* -------------------------------------------------------------------- */
+/* The base types, all are mutually exclusive. */
+
+int vtkWrap_IsObject(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
+ return (t == VTK_PARSE_OBJECT ||
+ t == VTK_PARSE_QOBJECT);
+}
+
+int vtkWrap_IsFunction(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
+ return (t == VTK_PARSE_FUNCTION);
+}
+
+int vtkWrap_IsStream(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
+ return (t == VTK_PARSE_ISTREAM ||
+ t == VTK_PARSE_OSTREAM);
+}
+
+int vtkWrap_IsNumeric(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
+
+ t = (t & ~VTK_PARSE_UNSIGNED);
+ switch (t)
+ {
+ case VTK_PARSE_FLOAT:
+ case VTK_PARSE_DOUBLE:
+ case VTK_PARSE_CHAR:
+ case VTK_PARSE_SHORT:
+ case VTK_PARSE_INT:
+ case VTK_PARSE_LONG:
+ case VTK_PARSE_ID_TYPE:
+ case VTK_PARSE_LONG_LONG:
+ case VTK_PARSE___INT64:
+ case VTK_PARSE_SIGNED_CHAR:
+ case VTK_PARSE_SSIZE_T:
+ case VTK_PARSE_BOOL:
+ return 1;
+ }
+
+ return 0;
+}
+
+int vtkWrap_IsString(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
+ return (t == VTK_PARSE_STRING ||
+ t == VTK_PARSE_UNICODE_STRING);
+}
+
+/* -------------------------------------------------------------------- */
+/* Subcategories */
+
+int vtkWrap_IsBool(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
+ return (t == VTK_PARSE_BOOL);
+}
+
+int vtkWrap_IsChar(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
+ return (t == VTK_PARSE_CHAR);
+}
+
+int vtkWrap_IsInteger(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
+
+ if (t != VTK_PARSE_UNSIGNED_CHAR)
+ {
+ t = (t & ~VTK_PARSE_UNSIGNED);
+ }
+ switch (t)
+ {
+ case VTK_PARSE_SHORT:
+ case VTK_PARSE_INT:
+ case VTK_PARSE_LONG:
+ case VTK_PARSE_ID_TYPE:
+ case VTK_PARSE_LONG_LONG:
+ case VTK_PARSE___INT64:
+ case VTK_PARSE_UNSIGNED_CHAR:
+ case VTK_PARSE_SIGNED_CHAR:
+ case VTK_PARSE_SSIZE_T:
+ return 1;
+ }
+
+ return 0;
+}
+
+int vtkWrap_IsRealNumber(ValueInfo *val)
+{
+ unsigned int t = (val->Type & VTK_PARSE_BASE_TYPE);
+ return (t == VTK_PARSE_FLOAT || t == VTK_PARSE_DOUBLE);
+}
+
+/* -------------------------------------------------------------------- */
+/* These are mutually exclusive, as well. */
+
+int vtkWrap_IsScalar(ValueInfo *val)
+{
+ unsigned int i = (val->Type & VTK_PARSE_POINTER_MASK);
+ return (i == 0);
+}
+
+int vtkWrap_IsPointer(ValueInfo *val)
+{
+ unsigned int i = (val->Type & VTK_PARSE_POINTER_MASK);
+ return (i == VTK_PARSE_POINTER && val->Count == 0 &&
+ val->CountHint == 0 && val->NumberOfDimensions <= 1);
+}
+
+int vtkWrap_IsArray(ValueInfo *val)
+{
+ unsigned int i = (val->Type & VTK_PARSE_POINTER_MASK);
+ return (i == VTK_PARSE_POINTER && val->NumberOfDimensions <= 1 &&
+ (val->Count != 0 || val->CountHint != 0));
+}
+
+int vtkWrap_IsNArray(ValueInfo *val)
+{
+ int j = 0;
+ unsigned int i = (val->Type & VTK_PARSE_POINTER_MASK);
+ if (i != VTK_PARSE_ARRAY || val->NumberOfDimensions <= 1)
+ {
+ return 0;
+ }
+ for (j = 0; j < val->NumberOfDimensions; j++)
+ {
+ if (val->Dimensions[j] == NULL || val->Dimensions[j][0] == '\0')
+ {
+ return 0;
+ }
+ }
+ return 1;
+}
+
+
+/* -------------------------------------------------------------------- */
+/* Other type properties, not mutually exclusive. */
+
+int vtkWrap_IsNonConstRef(ValueInfo *val)
+{
+ return ((val->Type & VTK_PARSE_REF) != 0 &&
+ (val->Type & VTK_PARSE_CONST) == 0);
+}
+
+int vtkWrap_IsConstRef(ValueInfo *val)
+{
+ return ((val->Type & VTK_PARSE_REF) != 0 &&
+ (val->Type & VTK_PARSE_CONST) != 0);
+}
+
+int vtkWrap_IsRef(ValueInfo *val)
+{
+ return ((val->Type & VTK_PARSE_REF) != 0);
+}
+
+int vtkWrap_IsConst(ValueInfo *val)
+{
+ return ((val->Type & VTK_PARSE_CONST) != 0);
+}
+
+/* -------------------------------------------------------------------- */
+/* Hints */
+
+int vtkWrap_IsNewInstance(ValueInfo *val)
+{
+ return ((val->Type & VTK_PARSE_NEWINSTANCE) != 0);
+}
+
+/* -------------------------------------------------------------------- */
+/* Constructor/Destructor checks */
+
+int vtkWrap_IsConstructor(ClassInfo *c, FunctionInfo *f)
+
+{
+ size_t i, m;
+ const char *cp = c->Name;
+
+ if (cp && f->Name && !vtkWrap_IsDestructor(c, f))
+ {
+ /* remove namespaces and template parameters from the name */
+ m = vtkParse_UnscopedNameLength(cp);
+ while (cp[m] == ':' && cp[m+1] == ':')
+ {
+ cp += m + 2;
+ m = vtkParse_UnscopedNameLength(cp);
+ }
+ for (i = 0; i < m; i++)
+ {
+ if (cp[i] == '<')
+ {
+ break;
+ }
+ }
+
+ return (i == strlen(f->Name) && strncmp(cp, f->Name, i) == 0);
+ }
+
+ return 0;
+}
+
+int vtkWrap_IsDestructor(ClassInfo *c, FunctionInfo *f)
+{
+ size_t i;
+ const char *cp;
+
+ if (c->Name && f->Name)
+ {
+ cp = f->Signature;
+ for (i = 0; cp[i] != '\0' && cp[i] != '('; i++)
+ {
+ if (cp[i] == '~')
+ {
+ return 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+int vtkWrap_IsSetVectorMethod(FunctionInfo *f)
+{
+ if (f->Macro && strncmp(f->Macro, "vtkSetVector", 12) == 0)
+ {
+ return 1;
+ }
+
+ return 0;
+}
+
+int vtkWrap_IsGetVectorMethod(FunctionInfo *f)
+{
+ if (f->Macro && strncmp(f->Macro, "vtkGetVector", 12) == 0)
+ {
+ return 1;
+ }
+
+ return 0;
+}
+
+/* -------------------------------------------------------------------- */
+/* Argument counting */
+
+int vtkWrap_CountWrappedParameters(FunctionInfo *f)
+{
+ int totalArgs = f->NumberOfParameters;
+
+ if (totalArgs > 0 &&
+ (f->Parameters[0]->Type & VTK_PARSE_BASE_TYPE)
+ == VTK_PARSE_FUNCTION)
+ {
+ totalArgs = 1;
+ }
+ else if (totalArgs == 1 &&
+ (f->Parameters[0]->Type & VTK_PARSE_UNQUALIFIED_TYPE)
+ == VTK_PARSE_VOID)
+ {
+ totalArgs = 0;
+ }
+
+ return totalArgs;
+}
+
+int vtkWrap_CountRequiredArguments(FunctionInfo *f)
+{
+ int requiredArgs = 0;
+ int totalArgs;
+ int i;
+
+ totalArgs = vtkWrap_CountWrappedParameters(f);
+
+ for (i = 0; i < totalArgs; i++)
+ {
+ if (f->Parameters[i]->Value == NULL ||
+ vtkWrap_IsArray(f->Parameters[i]) ||
+ vtkWrap_IsNArray(f->Parameters[i]))
+ {
+ requiredArgs = i+1;
+ }
+ }
+
+ return requiredArgs;
+}
+
+/* -------------------------------------------------------------------- */
+/* Check whether the class is derived from vtkObjectBase. */
+
+int vtkWrap_IsVTKObjectBaseType(
+ HierarchyInfo *hinfo, const char *classname)
+{
+ HierarchyEntry *entry;
+
+ if (hinfo)
+ {
+ entry = vtkParseHierarchy_FindEntry(hinfo, classname);
+ if (entry)
+ {
+ if (vtkParseHierarchy_IsTypeOf(hinfo, entry, "vtkObjectBase"))
+ {
+ return 1;
+ }
+ return 0;
+ }
+ }
+
+ /* fallback if no HierarchyInfo */
+ if (strncmp("vtk", classname, 3) == 0)
+ {
+ return 1;
+ }
+
+ return 0;
+}
+
+/* -------------------------------------------------------------------- */
+/* Check if the WRAP_SPECIAL flag is set for the class. */
+
+int vtkWrap_IsSpecialType(
+ HierarchyInfo *hinfo, const char *classname)
+{
+ HierarchyEntry *entry;
+
+ if (hinfo)
+ {
+ entry = vtkParseHierarchy_FindEntry(hinfo, classname);
+ if (entry && vtkParseHierarchy_GetProperty(entry, "WRAP_SPECIAL"))
+ {
+ return 1;
+ }
+ return 0;
+ }
+
+ /* fallback if no HierarchyInfo */
+ if (strncmp("vtk", classname, 3) == 0)
+ {
+ return -1;
+ }
+
+ return 0;
+}
+
+/* -------------------------------------------------------------------- */
+/* Check if the class is derived from superclass */
+
+int vtkWrap_IsTypeOf(
+ HierarchyInfo *hinfo, const char *classname, const char *superclass)
+{
+ HierarchyEntry *entry;
+
+ if (strcmp(classname, superclass) == 0)
+ {
+ return 1;
+ }
+
+ if (hinfo)
+ {
+ entry = vtkParseHierarchy_FindEntry(hinfo, classname);
+ if (entry && vtkParseHierarchy_IsTypeOf(hinfo, entry, superclass))
+ {
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+/* -------------------------------------------------------------------- */
+/* Make a guess about whether a class is wrapped */
+
+int vtkWrap_IsClassWrapped(
+ HierarchyInfo *hinfo, const char *classname)
+{
+ if (hinfo)
+ {
+ HierarchyEntry *entry;
+ entry = vtkParseHierarchy_FindEntry(hinfo, classname);
+
+ if (entry)
+ {
+ if (!vtkParseHierarchy_GetProperty(entry, "WRAP_EXCLUDE") ||
+ vtkParseHierarchy_GetProperty(entry, "WRAP_SPECIAL"))
+ {
+ return 1;
+ }
+ }
+ }
+ else if (strncmp("vtk", classname, 3) == 0)
+ {
+ return 1;
+ }
+
+ return 0;
+}
+
+/* -------------------------------------------------------------------- */
+/* Check whether the destructor is public */
+int vtkWrap_HasPublicDestructor(ClassInfo *data)
+{
+ FunctionInfo *func;
+ int i;
+
+ for (i = 0; i < data->NumberOfFunctions; i++)
+ {
+ func = data->Functions[i];
+
+ if (vtkWrap_IsDestructor(data, func) &&
+ func->Access != VTK_ACCESS_PUBLIC)
+ {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+/* -------------------------------------------------------------------- */
+/* Check whether the copy constructor is public */
+int vtkWrap_HasPublicCopyConstructor(ClassInfo *data)
+{
+ FunctionInfo *func;
+ int i;
+
+ for (i = 0; i < data->NumberOfFunctions; i++)
+ {
+ func = data->Functions[i];
+
+ if (vtkWrap_IsConstructor(data, func) &&
+ func->NumberOfParameters == 1 &&
+ func->Parameters[0]->Class &&
+ strcmp(func->Parameters[0]->Class, data->Name) == 0 &&
+ func->Access != VTK_ACCESS_PUBLIC)
+ {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+/* -------------------------------------------------------------------- */
+/* Get the size for subclasses of vtkTuple */
+int vtkWrap_GetTupleSize(ClassInfo *data, HierarchyInfo *hinfo)
+{
+ HierarchyEntry *entry;
+ const char *classname = NULL;
+ size_t m;
+ int size = 0;
+
+ entry = vtkParseHierarchy_FindEntry(hinfo, data->Name);
+ if (entry && vtkParseHierarchy_IsTypeOfTemplated(
+ hinfo, entry, data->Name, "vtkTuple", &classname))
+ {
+ /* attempt to get count from template parameter */
+ if (classname)
+ {
+ m = strlen(classname);
+ if (m > 2 && classname[m - 1] == '>' &&
+ isdigit(classname[m-2]) && (classname[m-3] == ' ' ||
+ classname[m-3] == ',' || classname[m-3] == '<'))
+ {
+ size = classname[m-2] - '0';
+ }
+ free((char *)classname);
+ }
+ }
+
+ return size;
+}
+
+/* -------------------------------------------------------------------- */
+/* This sets the CountHint for vtkDataArray methods where the
+ * tuple size is equal to GetNumberOfComponents. */
+void vtkWrap_FindCountHints(
+ ClassInfo *data, FileInfo *finfo, HierarchyInfo *hinfo)
+{
+ int i;
+ int count;
+ const char *countMethod;
+ FunctionInfo *theFunc;
+
+ /* add hints for vtkInformation get methods */
+ if (vtkWrap_IsTypeOf(hinfo, data->Name, "vtkInformation"))
+ {
+ countMethod = "Length(temp0)";
+
+ for (i = 0; i < data->NumberOfFunctions; i++)
+ {
+ theFunc = data->Functions[i];
+
+ if (strcmp(theFunc->Name, "Get") == 0 &&
+ theFunc->NumberOfParameters >= 1 &&
+ theFunc->Parameters[0]->Type == VTK_PARSE_OBJECT_PTR &&
+ (strcmp(theFunc->Parameters[0]->Class,
+ "vtkInformationIntegerVectorKey") == 0 ||
+ strcmp(theFunc->Parameters[0]->Class,
+ "vtkInformationDoubleVectorKey") == 0))
+ {
+ if (theFunc->ReturnValue && theFunc->ReturnValue->Count == 0 &&
+ theFunc->NumberOfParameters == 1)
+ {
+ theFunc->ReturnValue->CountHint = countMethod;
+ }
+ }
+ }
+ }
+
+ /* add hints for array GetTuple methods */
+ if (vtkWrap_IsTypeOf(hinfo, data->Name, "vtkDataArray"))
+ {
+ countMethod = "GetNumberOfComponents()";
+
+ for (i = 0; i < data->NumberOfFunctions; i++)
+ {
+ theFunc = data->Functions[i];
+
+ if ((strcmp(theFunc->Name, "GetTuple") == 0 ||
+ strcmp(theFunc->Name, "GetTupleValue") == 0) &&
+ theFunc->ReturnValue && theFunc->ReturnValue->Count == 0 &&
+ theFunc->NumberOfParameters == 1 &&
+ theFunc->Parameters[0]->Type == VTK_PARSE_ID_TYPE)
+ {
+ theFunc->ReturnValue->CountHint = countMethod;
+ }
+ else if ((strcmp(theFunc->Name, "SetTuple") == 0 ||
+ strcmp(theFunc->Name, "SetTupleValue") == 0 ||
+ strcmp(theFunc->Name, "GetTuple") == 0 ||
+ strcmp(theFunc->Name, "GetTupleValue") == 0 ||
+ strcmp(theFunc->Name, "InsertTuple") == 0 ||
+ strcmp(theFunc->Name, "InsertTupleValue") == 0) &&
+ theFunc->NumberOfParameters == 2 &&
+ theFunc->Parameters[0]->Type == VTK_PARSE_ID_TYPE &&
+ theFunc->Parameters[1]->Count == 0)
+ {
+ theFunc->Parameters[1]->CountHint = countMethod;
+ }
+ else if ((strcmp(theFunc->Name, "InsertNextTuple") == 0 ||
+ strcmp(theFunc->Name, "InsertNextTupleValue") == 0) &&
+ theFunc->NumberOfParameters == 1 &&
+ theFunc->Parameters[0]->Count == 0)
+ {
+ theFunc->Parameters[0]->CountHint = countMethod;
+ }
+ }
+ }
+
+ /* add hints for interpolator Interpolate methods */
+ if (vtkWrap_IsTypeOf(hinfo, data->Name, "vtkAbstractImageInterpolator"))
+ {
+ countMethod = "GetNumberOfComponents()";
+
+ for (i = 0; i < data->NumberOfFunctions; i++)
+ {
+ theFunc = data->Functions[i];
+
+ if (strcmp(theFunc->Name, "Interpolate") == 0 &&
+ theFunc->NumberOfParameters == 2 &&
+ theFunc->Parameters[0]->Type == (VTK_PARSE_DOUBLE_PTR|VTK_PARSE_CONST) &&
+ theFunc->Parameters[0]->Count == 3 &&
+ theFunc->Parameters[1]->Type == VTK_PARSE_DOUBLE_PTR &&
+ theFunc->Parameters[1]->Count == 0)
+ {
+ theFunc->Parameters[1]->CountHint = countMethod;
+ }
+ }
+ }
+
+ for (i = 0; i < data->NumberOfFunctions; i++)
+ {
+ theFunc = data->Functions[i];
+
+ /* hints for constructors that take arrays */
+ if (vtkWrap_IsConstructor(data, theFunc) &&
+ theFunc->NumberOfParameters == 1 &&
+ vtkWrap_IsPointer(theFunc->Parameters[0]) &&
+ vtkWrap_IsNumeric(theFunc->Parameters[0]) &&
+ theFunc->Parameters[0]->Count == 0 &&
+ hinfo)
+ {
+ count = vtkWrap_GetTupleSize(data, hinfo);
+ if (count)
+ {
+ char counttext[24];
+ sprintf(counttext, "%d", count);
+ theFunc->Parameters[0]->Count = count;
+ vtkParse_AddStringToArray(
+ &theFunc->Parameters[0]->Dimensions,
+ &theFunc->Parameters[0]->NumberOfDimensions,
+ vtkParse_CacheString(finfo->Strings, counttext, strlen(counttext)));
+ }
+ }
+
+ /* hints for operator[] index range */
+ if (theFunc->IsOperator && theFunc->Name &&
+ strcmp(theFunc->Name, "operator[]") == 0)
+ {
+ if (vtkWrap_IsTypeOf(hinfo, data->Name, "vtkTuple"))
+ {
+ theFunc->SizeHint = "GetSize()";
+ }
+ else if (vtkWrap_IsTypeOf(hinfo, data->Name, "vtkArrayCoordinates") ||
+ vtkWrap_IsTypeOf(hinfo, data->Name, "vtkArrayExtents") ||
+ vtkWrap_IsTypeOf(hinfo, data->Name, "vtkArraySort"))
+ {
+ theFunc->SizeHint = "GetDimensions()";
+ }
+ else if (vtkWrap_IsTypeOf(hinfo, data->Name, "vtkArrayExtentsList") ||
+ vtkWrap_IsTypeOf(hinfo, data->Name, "vtkArrayWeights"))
+ {
+ theFunc->SizeHint = "GetCount()";
+ }
+ }
+ }
+}
+
+/* -------------------------------------------------------------------- */
+/* This sets the NewInstance hint for generator methods. */
+void vtkWrap_FindNewInstanceMethods(
+ ClassInfo *data, HierarchyInfo *hinfo)
+{
+ int i;
+ FunctionInfo *theFunc;
+
+ for (i = 0; i < data->NumberOfFunctions; i++)
+ {
+ theFunc = data->Functions[i];
+ if (theFunc->Name && theFunc->ReturnValue &&
+ vtkWrap_IsVTKObject(theFunc->ReturnValue) &&
+ vtkWrap_IsVTKObjectBaseType(hinfo, theFunc->ReturnValue->Class))
+ {
+ if (strcmp(theFunc->Name, "NewInstance") == 0 ||
+ strcmp(theFunc->Name, "CreateInstance") == 0 ||
+ (strcmp(theFunc->Name, "CreateLookupTable") == 0 &&
+ strcmp(data->Name, "vtkColorSeries") == 0) ||
+ (strcmp(theFunc->Name, "CreateImageReader2") == 0 &&
+ strcmp(data->Name, "vtkImageReader2Factory") == 0) ||
+ (strcmp(theFunc->Name, "CreateDataArray") == 0 &&
+ strcmp(data->Name, "vtkDataArray") == 0) ||
+ (strcmp(theFunc->Name, "CreateArray") == 0 &&
+ strcmp(data->Name, "vtkAbstractArray") == 0) ||
+ (strcmp(theFunc->Name, "CreateArray") == 0 &&
+ strcmp(data->Name, "vtkArray") == 0) ||
+ (strcmp(theFunc->Name, "GetQueryInstance") == 0 &&
+ strcmp(data->Name, "vtkSQLDatabase") == 0) ||
+ (strcmp(theFunc->Name, "CreateFromURL") == 0 &&
+ strcmp(data->Name, "vtkSQLDatabase") == 0) ||
+ (strcmp(theFunc->Name, "MakeTransform") == 0 &&
+ vtkWrap_IsTypeOf(hinfo, data->Name, "vtkAbstractTransform")))
+ {
+ theFunc->ReturnValue->Type |= VTK_PARSE_NEWINSTANCE;
+ }
+ }
+ }
+}
+
+
+/* -------------------------------------------------------------------- */
+/* Expand all typedef types that are used in function arguments */
+void vtkWrap_ExpandTypedefs(
+ ClassInfo *data, FileInfo *finfo, HierarchyInfo *hinfo)
+{
+ int i, j, n;
+ FunctionInfo *funcInfo;
+ const char *newclass;
+
+ n = data->NumberOfSuperClasses;
+ for (i = 0; i < n; i++)
+ {
+ newclass = vtkParseHierarchy_ExpandTypedefsInName(
+ hinfo, data->SuperClasses[i], NULL);
+ if (newclass != data->SuperClasses[i])
+ {
+ data->SuperClasses[i] =
+ vtkParse_CacheString(finfo->Strings, newclass, strlen(newclass));
+ free((char *)newclass);
+ }
+ }
+
+ n = data->NumberOfFunctions;
+ for (i = 0; i < n; i++)
+ {
+ funcInfo = data->Functions[i];
+ if (funcInfo->Access == VTK_ACCESS_PUBLIC)
+ {
+ for (j = 0; j < funcInfo->NumberOfParameters; j++)
+ {
+ vtkParseHierarchy_ExpandTypedefsInValue(
+ hinfo, funcInfo->Parameters[j], finfo->Strings, data->Name);
+ }
+ if (funcInfo->ReturnValue)
+ {
+ vtkParseHierarchy_ExpandTypedefsInValue(
+ hinfo, funcInfo->ReturnValue, finfo->Strings, data->Name);
+ }
+ }
+ }
+}
+
+
+/* -------------------------------------------------------------------- */
+/* get the type name */
+
+const char *vtkWrap_GetTypeName(ValueInfo *val)
+{
+ unsigned int aType = val->Type;
+ const char *aClass = val->Class;
+
+ /* print the type itself */
+ switch (aType & VTK_PARSE_BASE_TYPE)
+ {
+ case VTK_PARSE_FLOAT: return "float";
+ case VTK_PARSE_DOUBLE: return "double";
+ case VTK_PARSE_INT: return "int";
+ case VTK_PARSE_SHORT: return "short";
+ case VTK_PARSE_LONG: return "long";
+ case VTK_PARSE_VOID: return "void ";
+ case VTK_PARSE_CHAR: return "char";
+ case VTK_PARSE_UNSIGNED_INT: return "unsigned int";
+ case VTK_PARSE_UNSIGNED_SHORT: return "unsigned short";
+ case VTK_PARSE_UNSIGNED_LONG: return "unsigned long";
+ case VTK_PARSE_UNSIGNED_CHAR: return "unsigned char";
+ case VTK_PARSE_ID_TYPE: return "vtkIdType";
+ case VTK_PARSE_LONG_LONG: return "long long";
+ case VTK_PARSE___INT64: return "__int64";
+ case VTK_PARSE_UNSIGNED_LONG_LONG: return "unsigned long long";
+ case VTK_PARSE_UNSIGNED___INT64: return "unsigned __int64";
+ case VTK_PARSE_SIGNED_CHAR: return "signed char";
+ case VTK_PARSE_BOOL: return "bool";
+ case VTK_PARSE_UNICODE_STRING: return "vtkUnicodeString";
+ case VTK_PARSE_SSIZE_T: return "ssize_t";
+ case VTK_PARSE_SIZE_T: return "size_t";
+ }
+
+ return aClass;
+}
+
+/* -------------------------------------------------------------------- */
+/* variable declarations */
+
+void vtkWrap_DeclareVariable(
+ FILE *fp, ValueInfo *val, const char *name, int i, int flags)
+{
+ unsigned int aType;
+ int j;
+
+ if (val == NULL)
+ {
+ return;
+ }
+
+ aType = (val->Type & VTK_PARSE_UNQUALIFIED_TYPE);
+
+ /* do nothing for void */
+ if (aType == VTK_PARSE_VOID ||
+ (aType & VTK_PARSE_BASE_TYPE) == VTK_PARSE_FUNCTION)
+ {
+ return;
+ }
+
+ /* add a couple spaces */
+ fprintf(fp," ");
+
+ /* for const * return types, prepend with const */
+ if ((flags & VTK_WRAP_RETURN) != 0)
+ {
+ if ((val->Type & VTK_PARSE_CONST) != 0 &&
+ (aType & VTK_PARSE_INDIRECT) != 0)
+ {
+ fprintf(fp,"const ");
+ }
+ }
+ /* do the same for "const char *" with initializer */
+ else
+ {
+ if ((val->Type & VTK_PARSE_CONST) != 0 &&
+ aType == VTK_PARSE_CHAR_PTR &&
+ val->Value &&
+ strcmp(val->Value, "0") != 0 &&
+ strcmp(val->Value, "NULL") != 0)
+ {
+ fprintf(fp,"const ");
+ }
+ }
+
+ /* print the type name */
+ fprintf(fp, "%s ", vtkWrap_GetTypeName(val));
+
+ /* indirection */
+ if ((flags & VTK_WRAP_RETURN) != 0)
+ {
+ /* ref and pointer return values are stored as pointers */
+ if ((aType & VTK_PARSE_INDIRECT) == VTK_PARSE_POINTER ||
+ (aType & VTK_PARSE_INDIRECT) == VTK_PARSE_REF)
+ {
+ fprintf(fp, "*");
+ }
+ }
+ else
+ {
+ /* objects refs and pointers are always handled via pointers,
+ * other refs are passed by value */
+ if (aType == VTK_PARSE_CHAR_PTR ||
+ aType == VTK_PARSE_VOID_PTR ||
+ aType == VTK_PARSE_OBJECT_PTR ||
+ aType == VTK_PARSE_OBJECT_REF ||
+ aType == VTK_PARSE_OBJECT ||
+ vtkWrap_IsQtObject(val))
+ {
+ fprintf(fp, "*");
+ }
+ /* arrays of unknown size are handled via pointers */
+ else if (val->CountHint)
+ {
+ fprintf(fp, "*");
+ }
+ }
+
+ /* the variable name */
+ if (i >= 0)
+ {
+ fprintf(fp,"%s%i", name, i);
+ }
+ else
+ {
+ fprintf(fp,"%s", name);
+ }
+
+ if ((flags & VTK_WRAP_ARG) != 0)
+ {
+ /* print the array decorators */
+ if (((aType & VTK_PARSE_POINTER_MASK) != 0) &&
+ aType != VTK_PARSE_CHAR_PTR &&
+ aType != VTK_PARSE_VOID_PTR &&
+ aType != VTK_PARSE_OBJECT_PTR &&
+ !vtkWrap_IsQtObject(val) &&
+ val->CountHint == NULL)
+ {
+ if (val->NumberOfDimensions == 1 && val->Count > 0)
+ {
+ fprintf(fp, "[%d]", val->Count);
+ }
+ else
+ {
+ for (j = 0; j < val->NumberOfDimensions; j++)
+ {
+ fprintf(fp, "[%s]", val->Dimensions[j]);
+ }
+ }
+ }
+
+ /* add a default value */
+ else if (val->Value)
+ {
+ fprintf(fp, " = %s", val->Value);
+ }
+ else if (aType == VTK_PARSE_CHAR_PTR ||
+ aType == VTK_PARSE_VOID_PTR ||
+ aType == VTK_PARSE_OBJECT_PTR ||
+ aType == VTK_PARSE_OBJECT_REF ||
+ aType == VTK_PARSE_OBJECT ||
+ vtkWrap_IsQtObject(val))
+ {
+ fprintf(fp, " = NULL");
+ }
+ else if (val->CountHint)
+ {
+ fprintf(fp, " = NULL");
+ }
+ else if (aType == VTK_PARSE_BOOL)
+ {
+ fprintf(fp, " = false");
+ }
+ }
+
+ /* finish off with a semicolon */
+ if ((flags & VTK_WRAP_NOSEMI) == 0)
+ {
+ fprintf(fp, ";\n");
+ }
+}
+
+void vtkWrap_DeclareVariableSize(
+ FILE *fp, ValueInfo *val, const char *name, int i)
+{
+ char idx[32];
+ int j;
+
+ idx[0] = '\0';
+ if (i >= 0)
+ {
+ sprintf(idx, "%d", i);
+ }
+
+ if (val->NumberOfDimensions > 1)
+ {
+ fprintf(fp,
+ " static int %s%s[%d] = ",
+ name, idx, val->NumberOfDimensions);
+
+ for (j = 0; j < val->NumberOfDimensions; j++)
+ {
+ fprintf(fp, "%c %s", ((j == 0) ? '{' : ','), val->Dimensions[j]);
+ }
+
+ fprintf(fp, " };\n");
+ }
+ else if (val->Count != 0 || val->CountHint)
+ {
+ fprintf(fp,
+ " %sint %s%s = %d;\n",
+ (val->CountHint ? "" : "const "), name, idx,
+ (val->CountHint ? 0 : val->Count));
+ }
+ else if (val->NumberOfDimensions == 1)
+ {
+ fprintf(fp,
+ " const int %s%s = %s;\n",
+ name, idx, val->Dimensions[0]);
+ }
+}
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkWrap.h
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+
+/**
+ * vtkWrap provides useful functions for generating wrapping code.
+*/
+
+#ifndef VTK_WRAP_H
+#define VTK_WRAP_H
+
+#include "vtkParse.h"
+#include "vtkParseHierarchy.h"
+
+/**
+ * For use with vtkWrap_DeclareVariable.
+ */
+/*@{*/
+#define VTK_WRAP_RETURN 1
+#define VTK_WRAP_ARG 2
+#define VTK_WRAP_NOSEMI 4
+/*@}*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Check for common types.
+ */
+/*@{*/
+int vtkWrap_IsVoid(ValueInfo *val);
+int vtkWrap_IsVoidFunction(ValueInfo *val);
+int vtkWrap_IsVoidPointer(ValueInfo *val);
+int vtkWrap_IsCharPointer(ValueInfo *val);
+int vtkWrap_IsVTKObject(ValueInfo *val);
+int vtkWrap_IsSpecialObject(ValueInfo *val);
+int vtkWrap_IsQtObject(ValueInfo *val);
+int vtkWrap_IsQtEnum(ValueInfo *val);
+/*@}*/
+
+/**
+ * The basic types, all are mutually exclusive.
+ * Note that enums are considered to be objects,
+ * bool and char are considered to be numeric.
+ */
+/*@{*/
+int vtkWrap_IsObject(ValueInfo *val);
+int vtkWrap_IsFunction(ValueInfo *val);
+int vtkWrap_IsStream(ValueInfo *val);
+int vtkWrap_IsNumeric(ValueInfo *val);
+int vtkWrap_IsString(ValueInfo *val);
+/*@}*/
+
+/**
+ * Subcategories of numeric types. In this categorization,
+ * bool and char are not considered to be integers.
+ */
+/*@{*/
+int vtkWrap_IsBool(ValueInfo *val);
+int vtkWrap_IsChar(ValueInfo *val);
+int vtkWrap_IsInteger(ValueInfo *val);
+int vtkWrap_IsRealNumber(ValueInfo *val);
+/*@}*/
+
+/**
+ * Arrays and pointers. These are mutually exclusive.
+ * IsPointer() does not include pointers to pointers.
+ * IsArray() and IsNArray() do not include unsized arrays.
+ * Arrays of pointers are not included in any of these.
+ */
+/*@{*/
+int vtkWrap_IsScalar(ValueInfo *val);
+int vtkWrap_IsPointer(ValueInfo *val);
+int vtkWrap_IsArray(ValueInfo *val);
+int vtkWrap_IsNArray(ValueInfo *val);
+/*@}*/
+
+/**
+ * Properties that can combine with other properties.
+ */
+/*@{*/
+int vtkWrap_IsNonConstRef(ValueInfo *val);
+int vtkWrap_IsConstRef(ValueInfo *val);
+int vtkWrap_IsRef(ValueInfo *val);
+int vtkWrap_IsConst(ValueInfo *val);
+/*@}*/
+
+/**
+ * Hints.
+ * NewInstance objects must be freed by the caller.
+ */
+/*@{*/
+int vtkWrap_IsNewInstance(ValueInfo *val);
+/*@}*/
+
+
+/**
+ * Check whether the class is derived from vtkObjectBase.
+ * If "hinfo" is NULL, this just checks that the class
+ * name starts with "vtk".
+ */
+int vtkWrap_IsVTKObjectBaseType(
+ HierarchyInfo *hinfo, const char *classname);
+
+/**
+ * Check if the WRAP_SPECIAL flag is set for the class.
+ * If "hinfo" is NULL, it defaults to just checking if
+ * the class starts with "vtk" and returns -1 if so.
+ */
+int vtkWrap_IsSpecialType(
+ HierarchyInfo *hinfo, const char *classname);
+
+/**
+ * Check if the class is derived from superclass.
+ * If "hinfo" is NULL, then only an exact match to the
+ * superclass will succeed.
+ */
+int vtkWrap_IsTypeOf(
+ HierarchyInfo *hinfo, const char *classname, const char *superclass);
+
+/**
+ * Check whether a class is wrapped. If "hinfo" is NULL,
+ * it just checks that the class starts with "vtk".
+ */
+int vtkWrap_IsClassWrapped(
+ HierarchyInfo *hinfo, const char *classname);
+
+/**
+ * Check whether the destructor is public
+ */
+int vtkWrap_HasPublicDestructor(ClassInfo *data);
+
+/**
+ * Check whether the copy constructor is public
+ */
+int vtkWrap_HasPublicCopyConstructor(ClassInfo *data);
+
+/**
+ * Expand all typedef types that are used in function arguments.
+ * This should be done before any wrapping is done, to make sure
+ * that the wrappers see the real types.
+ */
+void vtkWrap_ExpandTypedefs(
+ ClassInfo *data, FileInfo *finfo, HierarchyInfo *hinfo);
+
+/**
+ * Apply any hints about array sizes, e.g. hint that the
+ * GetNumberOfComponents() method gives the tuple size.
+ */
+void vtkWrap_FindCountHints(
+ ClassInfo *data, FileInfo *finfo, HierarchyInfo *hinfo);
+
+/**
+ * Get the size of a fixed-size tuple
+ */
+int vtkWrap_GetTupleSize(ClassInfo *data, HierarchyInfo *hinfo);
+
+/**
+ * Apply any hints about methods that return a new object instance,
+ * i.e. factory methods and the like. Reference counts must be
+ * handled differently for such returned objects.
+ */
+void vtkWrap_FindNewInstanceMethods(
+ ClassInfo *data, HierarchyInfo *hinfo);
+
+/**
+ * Get the name of a type. The name will not include "const".
+ */
+const char *vtkWrap_GetTypeName(ValueInfo *val);
+
+/**
+ * True if the method a constructor of the class.
+ */
+int vtkWrap_IsConstructor(ClassInfo *c, FunctionInfo *f);
+
+/**
+ * True if the method a destructor of the class.
+ */
+int vtkWrap_IsDestructor(ClassInfo *c, FunctionInfo *f);
+
+/**
+ * Check if a method is from a SetVector method.
+ */
+int vtkWrap_IsSetVectorMethod(FunctionInfo *f);
+
+/**
+ * Check if a method is from a GetVector method.
+ */
+int vtkWrap_IsGetVectorMethod(FunctionInfo *f);
+
+/**
+ * Count the number of parameters that are wrapped.
+ * This skips the "void *" parameter that follows
+ * wrapped function pointer parameters.
+ */
+int vtkWrap_CountWrappedParameters(FunctionInfo *f);
+
+/**
+ * Count the number of args that are required.
+ * This counts to the last argument that does not
+ * have a default value. Array args are not allowed
+ * to have default values.
+ */
+int vtkWrap_CountRequiredArguments(FunctionInfo *f);
+
+/**
+ * Write a variable declaration to a file.
+ * Void is automatically ignored, and nothing is written for
+ * function pointers
+ * Set "idx" to -1 to avoid writing an idx.
+ * Set "flags" to VTK_WRAP_RETURN to write a return value,
+ * or to VTK_WRAP_ARG to write a temp argument variable.
+ * The following rules apply:
+ * - if VTK_WRAP_NOSEMI is set, then no semicolon/newline is printed
+ * - if VTK_WRAP_RETURN is set, then "&" becomes "*"
+ * - if VTK_WRAP_ARG is set, "&" becomes "*" only for object
+ * types, and is removed for all other types.
+ * - "const" is removed except for return values with "&" or "*".
+ */
+void vtkWrap_DeclareVariable(
+ FILE *fp, ValueInfo *v, const char *name, int idx, int flags);
+
+/**
+ * Write an "int" size variable for arrays, initialized to
+ * the array size if the size is greater than zero.
+ * For N-dimensional arrays, write a static array of ints.
+ */
+void vtkWrap_DeclareVariableSize(
+ FILE *fp, ValueInfo *v, const char *name, int idx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkWrapHierarchy.c
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+/*-------------------------------------------------------------------------
+ Copyright (c) 2010 David Gobbi.
+
+ Contributed to the VisualizationToolkit by the author in June 2010
+ under the terms of the Visualization Toolkit 2008 copyright.
+-------------------------------------------------------------------------*/
+
+/**
+ The vtkWrapHierarchy program builds a text file that describes the
+ class hierarchy.
+ For each class, the output file will have a line in the following
+ format:
+
+ classname [ : superclass ] ; header.h ; kit [; flags]
+
+ For each enum type,
+
+ enumname : enum ; header.h ; kit [; flags]
+
+ For each typedef,
+
+ name = [2][3]* const int ; header.h ; kit [; flags]
+
+*/
+
+#include "vtkParse.h"
+#include "vtkParseData.h"
+#include "vtkParseMain.h"
+#include "vtkParsePreprocess.h"
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#ifdef _WIN32
+# include <windows.h>
+#else
+# include <unistd.h>
+#endif
+
+/**
+ * Helper to append a text line to an array of lines
+ */
+static char **append_unique_line(char **lines, char *line, size_t *np)
+{
+ size_t l, n;
+
+ n = *np;
+
+ /* check to make sure this line isn't a duplicate */
+ for (l = 0; l < n; l++)
+ {
+ if (strcmp(line, lines[l]) == 0)
+ {
+ break;
+ }
+ }
+ if (l == n)
+ {
+ /* allocate more memory if n+1 is a power of two */
+ if (((n+1) & n) == 0)
+ {
+ lines = (char **)realloc(lines, (n+1)*2*sizeof(char *));
+ }
+
+ lines[n] = (char *)malloc(strlen(line)+1);
+ strcpy(lines[n++], line);
+ lines[n] = NULL;
+ }
+
+ *np = n;
+ return lines;
+}
+
+/**
+ * Helper to append to a line, given the end marker
+ */
+static char *append_to_line(
+ char *line, const char *text, size_t *pos, size_t *maxlen)
+{
+ size_t n;
+
+ n = strlen(text);
+
+ if ((*pos) + n + 1 > (*maxlen))
+ {
+ *maxlen = ((*pos) + n + 1 + 2*(*maxlen));
+ line = (char *)realloc(line, (*maxlen));
+ }
+
+ strcpy(&line[*pos], text);
+ *pos = (*pos) + n;
+
+ return line;
+}
+
+/**
+ * Append scope to line
+ */
+static char *append_scope_to_line(
+ char *line, size_t *m, size_t *maxlen, const char *scope)
+{
+ if (scope && scope[0] != '\0')
+ {
+ line = append_to_line(line, scope, m, maxlen);
+ line = append_to_line(line, "::", m, maxlen);
+ }
+
+ return line;
+}
+
+/**
+ * Append template info
+ */
+static char *append_template_to_line(
+ char *line, size_t *m, size_t *maxlen, TemplateInfo *template_args)
+{
+ ValueInfo *arg;
+ int j;
+
+ line = append_to_line(line, "<", m, maxlen);
+
+ for (j = 0; j < template_args->NumberOfParameters; j++)
+ {
+ arg = template_args->Parameters[j];
+ if (arg->Name)
+ {
+ line = append_to_line(line, arg->Name, m, maxlen);
+ }
+ if (arg->Value && arg->Value[0] != '\n')
+ {
+ line = append_to_line(line, "=", m, maxlen);
+ line = append_to_line(line, arg->Value, m, maxlen);
+ }
+ if (j+1 < template_args->NumberOfParameters)
+ {
+ line = append_to_line(line, ",", m, maxlen);
+ }
+ }
+
+ line = append_to_line(line, ">", m, maxlen);
+
+ return line;
+}
+
+/**
+ * Append class info
+ */
+static char *append_class_to_line(
+ char *line, size_t *m, size_t *maxlen, ClassInfo *class_info)
+{
+ int j;
+
+ line = append_to_line(line, class_info->Name, m, maxlen);
+
+ if (class_info->Template)
+ {
+ line = append_template_to_line(line, m, maxlen, class_info->Template);
+ }
+
+ line = append_to_line(line, " ", m, maxlen);
+
+ if (class_info->NumberOfSuperClasses)
+ {
+ line = append_to_line(line, ": ", m, maxlen);
+ }
+
+ for (j = 0; j < class_info->NumberOfSuperClasses; j++)
+ {
+ line = append_to_line(line, class_info->SuperClasses[j], m, maxlen);
+ line = append_to_line(line, " ", m, maxlen);
+ if (j+1 < class_info->NumberOfSuperClasses)
+ {
+ line = append_to_line(line, ", ", m, maxlen);
+ }
+ }
+
+ return line;
+}
+
+/**
+ * Append enum info
+ */
+static char *append_enum_to_line(
+ char *line, size_t *m, size_t *maxlen, EnumInfo *enum_info)
+{
+ line = append_to_line(line, enum_info->Name, m, maxlen);
+ line = append_to_line(line, " : enum ", m, maxlen);
+
+ return line;
+}
+
+/**
+ * Append the trailer, i.e. the filename and flags
+ */
+static char *append_trailer(
+ char *line, size_t *m, size_t *maxlen,
+ const char *header_file, const char *module_name, const char *flags)
+{
+ line = append_to_line(line, "; ", m, maxlen);
+ line = append_to_line(line, header_file, m, maxlen);
+
+ line = append_to_line(line, " ; ", m, maxlen);
+ line = append_to_line(line, module_name, m, maxlen);
+
+ if (flags && flags[0] != '\0')
+ {
+ line = append_to_line(line, " ; ", m, maxlen);
+ line = append_to_line(line, flags, m, maxlen);
+ }
+
+ return line;
+}
+
+/**
+ * Append typedef info
+ */
+static char *append_typedef_to_line(
+ char *line, size_t *m, size_t *maxlen, ValueInfo *typedef_info)
+{
+ unsigned int type;
+ int ndims;
+ int dim;
+
+ line = append_to_line(line, typedef_info->Name, m, maxlen);
+ line = append_to_line(line, " = ", m, maxlen);
+
+ type = typedef_info->Type;
+
+ if ((type & VTK_PARSE_REF) != 0)
+ {
+ line = append_to_line(line, "&", m, maxlen);
+ }
+
+ ndims = typedef_info->NumberOfDimensions;
+
+ for (dim = 0; dim < ndims; dim++)
+ {
+ line = append_to_line(line, "[", m, maxlen);
+ line = append_to_line(line, typedef_info->Dimensions[dim],
+ m, maxlen);
+ line = append_to_line(line, "]", m, maxlen);
+ }
+
+ type = (type & VTK_PARSE_POINTER_MASK);
+ if (ndims > 0 && (type & VTK_PARSE_POINTER_LOWMASK) == VTK_PARSE_ARRAY)
+ {
+ type = ((type >> 2) & VTK_PARSE_POINTER_MASK);
+ }
+ else if (ndims == 1)
+ {
+ type = ((type >> 2) & VTK_PARSE_POINTER_MASK);
+ }
+
+ /* pointers are printed after brackets, and are intentionally
+ * printed in reverse order as compared to C++ declarations */
+ while (type)
+ {
+ unsigned int bits = (type & VTK_PARSE_POINTER_LOWMASK);
+ type = ((type >> 2) & VTK_PARSE_POINTER_MASK);
+
+ if (bits == VTK_PARSE_POINTER)
+ {
+ line = append_to_line(line, "*", m, maxlen);
+ }
+ else if (bits == VTK_PARSE_CONST_POINTER)
+ {
+ line = append_to_line(line, "const*", m, maxlen);
+ }
+ else
+ {
+ line = append_to_line(line, "[]", m, maxlen);
+ }
+ }
+
+ if (line[*m-1] != ' ')
+ {
+ line = append_to_line(line, " ", m, maxlen);
+ }
+
+ if ((type & VTK_PARSE_CONST) != 0)
+ {
+ line = append_to_line(line, "const ", m, maxlen);
+ }
+
+ line = append_to_line(line, typedef_info->Class, m, maxlen);
+ line = append_to_line(line, " ", m, maxlen);
+
+ return line;
+}
+
+/**
+ * Append all types in a class
+ */
+static char **append_class_contents(
+ char **lines, size_t *np, ClassInfo *data,
+ const char *scope, const char *header_file, const char *module_name)
+{
+ int i;
+ const char *tmpflags;
+ char *new_scope;
+ char *line;
+ size_t m, n, maxlen;
+ size_t scope_m, scope_maxlen;
+
+ /* append the name to the scope */
+ new_scope = 0;
+ n = 0;
+ m = 0;
+ if (scope)
+ {
+ n = strlen(scope);
+ }
+ if (data->Name)
+ {
+ m = strlen(data->Name);
+ }
+ if (m && (n || data->Template))
+ {
+ scope_maxlen = n + m + 3;
+ scope_m = 0;
+ new_scope = (char *)malloc(scope_maxlen);
+ new_scope[0] = '\0';
+ if (n)
+ {
+ new_scope = append_to_line(new_scope, scope, &scope_m, &scope_maxlen);
+ new_scope = append_to_line(new_scope, "::", &scope_m, &scope_maxlen);
+ }
+ new_scope = append_to_line(new_scope, data->Name, &scope_m, &scope_maxlen);
+ if (data->Template)
+ {
+ new_scope = append_template_to_line(
+ new_scope, &scope_m, &scope_maxlen, data->Template);
+ }
+ scope = new_scope;
+ }
+ else if (m)
+ {
+ scope = data->Name;
+ }
+
+ /* start with a buffer of 15 chars and grow from there */
+ maxlen = 15;
+ m = 0;
+ line = (char *)malloc(maxlen);
+
+ /* add a line for each type that is found */
+ for (i = 0; i < data->NumberOfItems; i++)
+ {
+ m = 0;
+ line[m] = '\0';
+
+ tmpflags = 0;
+
+ if (data->Items[i].Type == VTK_CLASS_INFO ||
+ data->Items[i].Type == VTK_STRUCT_INFO)
+ {
+ ClassInfo *class_info =
+ data->Classes[data->Items[i].Index];
+
+ line = append_scope_to_line(line, &m, &maxlen, scope);
+ line = append_class_to_line(line, &m, &maxlen, class_info);
+ tmpflags = "WRAP_EXCLUDE";
+ }
+ else if (data->Items[i].Type == VTK_ENUM_INFO)
+ {
+ line = append_scope_to_line(line, &m, &maxlen, scope);
+ line = append_enum_to_line(line, &m, &maxlen,
+ data->Enums[data->Items[i].Index]);
+ }
+ else if (data->Items[i].Type == VTK_TYPEDEF_INFO)
+ {
+ line = append_scope_to_line(line, &m, &maxlen, scope);
+ line = append_typedef_to_line(line, &m, &maxlen,
+ data->Typedefs[data->Items[i].Index]);
+ }
+ else
+ {
+ /* unhandled file element */
+ continue;
+ }
+
+ /* append filename and flags */
+ line = append_trailer(
+ line, &m, &maxlen, header_file, module_name, tmpflags);
+
+ /* append the line to the file */
+ lines = append_unique_line(lines, line, np);
+
+ /* for classes, add all typed defined within the class */
+ if ((data->Items[i].Type == VTK_CLASS_INFO ||
+ data->Items[i].Type == VTK_STRUCT_INFO) &&
+ data->Classes[data->Items[i].Index]->Name)
+ {
+ lines = append_class_contents(lines, np,
+ data->Classes[data->Items[i].Index],
+ scope, header_file, module_name);
+ }
+ }
+
+ free(line);
+
+ if (new_scope != 0)
+ {
+ free(new_scope);
+ }
+
+ return lines;
+}
+
+
+/**
+ * Append all types in a namespace
+ */
+static char **append_namespace_contents(
+ char **lines, size_t *np, NamespaceInfo *data, ClassInfo *main_class,
+ const char *scope, const char *header_file, const char *module_name,
+ const char *flags)
+{
+ int i;
+ const char *tmpflags;
+ char *line;
+ char *new_scope;
+ size_t n, m, maxlen;
+
+ /* append the name to the scope */
+ new_scope = 0;
+ n = 0;
+ m = 0;
+ if (scope)
+ {
+ n = strlen(scope);
+ }
+ if (data->Name)
+ {
+ m = strlen(data->Name);
+ }
+ if (m && n)
+ {
+ new_scope = (char *)malloc(m + n + 3);
+ if (n)
+ {
+ strncpy(new_scope, scope, n);
+ new_scope[n++] = ':';
+ new_scope[n++] = ':';
+ }
+ strncpy(&new_scope[n], data->Name, m);
+ new_scope[n+m] = '\0';
+ scope = new_scope;
+ }
+ else if (m)
+ {
+ scope = data->Name;
+ }
+
+ /* start with a buffer of 15 chars and grow from there */
+ maxlen = 15;
+ m = 0;
+ line = (char *)malloc(maxlen);
+
+ /* add a line for each type that is found */
+ for (i = 0; i < data->NumberOfItems; i++)
+ {
+ tmpflags = 0;
+ m = 0;
+ line[m] = '\0';
+
+ if (data->Items[i].Type == VTK_CLASS_INFO ||
+ data->Items[i].Type == VTK_STRUCT_INFO)
+ {
+ ClassInfo *class_info =
+ data->Classes[data->Items[i].Index];
+
+ /* all but the main class in each file is excluded from wrapping */
+ tmpflags = "WRAP_EXCLUDE";
+ if (class_info == main_class)
+ {
+ tmpflags = flags;
+ }
+
+ line = append_scope_to_line(line, &m, &maxlen, scope);
+ line = append_class_to_line(line, &m, &maxlen, class_info);
+ }
+ else if (data->Items[i].Type == VTK_ENUM_INFO)
+ {
+ line = append_scope_to_line(line, &m, &maxlen, scope);
+ line = append_enum_to_line(line, &m, &maxlen,
+ data->Enums[data->Items[i].Index]);
+ }
+ else if (data->Items[i].Type == VTK_TYPEDEF_INFO)
+ {
+ line = append_scope_to_line(line, &m, &maxlen, scope);
+ line = append_typedef_to_line(line, &m, &maxlen,
+ data->Typedefs[data->Items[i].Index]);
+ }
+ else if (data->Items[i].Type != VTK_NAMESPACE_INFO)
+ {
+ /* unhandled file element */
+ continue;
+ }
+
+ if (data->Items[i].Type != VTK_NAMESPACE_INFO)
+ {
+ /* append filename and flags */
+ line = append_trailer(
+ line, &m, &maxlen, header_file, module_name, tmpflags);
+
+ /* append the line to the file */
+ lines = append_unique_line(lines, line, np);
+ }
+
+ /* for classes, add all typed defined within the class */
+ if ((data->Items[i].Type == VTK_CLASS_INFO ||
+ data->Items[i].Type == VTK_STRUCT_INFO) &&
+ data->Classes[data->Items[i].Index]->Name)
+ {
+ lines = append_class_contents(lines, np,
+ data->Classes[data->Items[i].Index],
+ scope, header_file, module_name);
+ }
+
+ /* for namespaces, add all types in the namespace */
+ if (data->Items[i].Type == VTK_NAMESPACE_INFO &&
+ data->Namespaces[data->Items[i].Index]->Name)
+ {
+ lines = append_namespace_contents(lines, np,
+ data->Namespaces[data->Items[i].Index], 0,
+ scope, header_file, module_name, "WRAP_EXCLUDE");
+ }
+ }
+
+ free(line);
+
+ if (new_scope != 0)
+ {
+ free(new_scope);
+ }
+
+ return lines;
+}
+
+/**
+ * Read a header file with vtkParse.tab.c
+ *
+ * If "lines" is provided, the file contents
+ * will be appended to them.
+ */
+static char **vtkWrapHierarchy_ParseHeaderFile(
+ FILE *fp, const char *filename, const char *module_name,
+ const char *flags, char **lines)
+{
+ FileInfo *data;
+ const char *header_file;
+ size_t k, n;
+
+ /* start with just a single output line and grow from there */
+ if (lines == NULL)
+ {
+ lines = (char **)malloc(sizeof(char *));
+ lines[0] = NULL;
+ }
+
+ /* always ignore BTX markers when building hierarchy files */
+ vtkParse_SetIgnoreBTX(1);
+
+ /* the "concrete" flag doesn't matter, just set to zero */
+ data = vtkParse_ParseFile(filename, fp, stderr);
+
+ if (!data)
+ {
+ free(lines);
+ return 0;
+ }
+
+ /* find the last line in "lines" */
+ n = 0;
+ while (lines[n] != NULL)
+ {
+ n++;
+ }
+
+ k = strlen(data->FileName) - 1;
+ while (k > 0 && data->FileName[k-1] != '/' && data->FileName[k-1] != '\\')
+ {
+ k--;
+ }
+ header_file = &data->FileName[k];
+
+ /* append the file contents to the output */
+ lines = append_namespace_contents(
+ lines, &n, data->Contents, data->MainClass, 0,
+ header_file, module_name, flags);
+
+ vtkParse_Free(data);
+
+ return lines;
+}
+
+/**
+ * Read a hierarchy file into "lines" without duplicating lines
+ */
+static char **vtkWrapHierarchy_ReadHierarchyFile(FILE *fp, char **lines)
+{
+ char *line;
+ size_t maxlen = 15;
+ size_t i, n;
+
+ line = (char *)malloc(maxlen);
+
+ if (lines == NULL)
+ {
+ lines = (char **)malloc(sizeof(char *));
+ lines[0] = NULL;
+ }
+
+ while (fgets(line, (int)maxlen, fp))
+ {
+ n = strlen(line);
+
+ /* if buffer not long enough, increase it */
+ while (n == maxlen-1 && line[n-1] != '\n' && !feof(fp))
+ {
+ maxlen *= 2;
+ line = (char *)realloc(line, maxlen);
+ if (!fgets(&line[n], (int)(maxlen-n), fp)) { break; }
+ n += strlen(&line[n]);
+ }
+
+ while (n > 0 && isspace(line[n-1]))
+ {
+ n--;
+ }
+ line[n] = '\0';
+
+ if (line[0] == '\0')
+ {
+ continue;
+ }
+
+ for (i = 0; lines[i] != NULL; i++)
+ {
+ if (strcmp(line, lines[i]) == 0)
+ {
+ break;
+ }
+ }
+
+ if (lines[i] == NULL)
+ {
+ /* allocate more memory if n+1 is a power of two */
+ if (((i+1) & i) == 0)
+ {
+ lines = (char **)realloc(lines, (i+1)*2*sizeof(char *));
+ }
+
+ lines[i] = (char *)malloc(n+1);
+ strcpy(lines[i], line);
+ lines[i+1] = NULL;
+ }
+ }
+
+ free(line);
+
+ if (!feof(fp))
+ {
+ free(lines);
+ return 0;
+ }
+
+ return lines;
+}
+
+/**
+ * Compare a file to "lines", return 0 if they are different
+ */
+static int vtkWrapHierarchy_CompareHierarchyFile(FILE *fp, char *lines[])
+{
+ unsigned char *matched;
+ char *line;
+ size_t maxlen = 15;
+ size_t i, n;
+
+ line = (char *)malloc(maxlen);
+
+ for (i = 0; lines[i] != NULL; i++) { ; };
+ matched = (unsigned char *)malloc(i);
+ memset(matched, 0, i);
+
+ while (fgets(line, (int)maxlen, fp))
+ {
+ n = strlen(line);
+
+ /* if buffer not long enough, increase it */
+ while (n == maxlen-1 && line[n-1] != '\n' && !feof(fp))
+ {
+ maxlen *= 2;
+ line = (char *)realloc(line, maxlen);
+ if (!fgets(&line[n], (int)(maxlen-n), fp)) { break; }
+ n += strlen(&line[n]);
+ }
+
+ while (n > 0 && isspace(line[n-1]))
+ {
+ n--;
+ }
+ line[n] = '\0';
+
+ if (line[0] == '\0')
+ {
+ continue;
+ }
+
+ for (i = 0; lines[i] != NULL; i++)
+ {
+ if (strcmp(line, lines[i]) == 0)
+ {
+ break;
+ }
+ }
+
+ if (lines[i] == NULL)
+ {
+ free(matched);
+ return 0;
+ }
+
+ matched[i] = 1;
+ }
+
+ for (i = 0; lines[i] != NULL; i++)
+ {
+ if (matched[i] == 0)
+ {
+ free(matched);
+ return 0;
+ }
+ }
+
+ free(line);
+ free(matched);
+
+ if (!feof(fp))
+ {
+ return 0;
+ }
+
+ return 1;
+}
+
+/**
+ * Write "lines" to a hierarchy file
+ */
+static int vtkWrapHierarchy_WriteHierarchyFile(FILE *fp, char *lines[])
+{
+ size_t i;
+
+ for (i = 0; lines[i] != NULL; i++)
+ {
+ if (fprintf(fp, "%s\n", lines[i]) < 0)
+ {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+/**
+ * Try to parse a header file, print error and exit if fail
+ */
+static char **vtkWrapHierarchy_TryParseHeaderFile(
+ const char *file_name, const char *module_name,
+ const char *flags, char **lines)
+{
+ FILE *input_file;
+
+ input_file = fopen(file_name, "r");
+
+ if (!input_file)
+ {
+ fprintf(stderr, "vtkWrapHierarchy: couldn't open file %s\n",
+ file_name);
+ exit(1);
+ }
+
+ lines = vtkWrapHierarchy_ParseHeaderFile(
+ input_file, file_name, module_name, flags, lines);
+
+ if (!lines)
+ {
+ fclose(input_file);
+ exit(1);
+ }
+ fclose(input_file);
+
+ return lines;
+}
+
+/**
+ * Try to read a file, print error and exit if fail
+ */
+static char **vtkWrapHierarchy_TryReadHierarchyFile(
+ const char *file_name, char **lines)
+{
+ FILE *input_file;
+
+ input_file = fopen(file_name, "r");
+ if (!input_file)
+ {
+ fprintf(stderr, "vtkWrapHierarchy: couldn't open file %s\n",
+ file_name);
+ exit(1);
+ }
+
+ lines = vtkWrapHierarchy_ReadHierarchyFile(input_file, lines);
+ if (!lines)
+ {
+ fclose(input_file);
+ fprintf(stderr, "vtkWrapHierarchy: error reading file %s\n",
+ file_name);
+ exit(1);
+ }
+ fclose(input_file);
+
+ return lines;
+}
+
+/**
+ * Try to write a file, print error and exit if fail
+ */
+static int vtkWrapHierarchy_TryWriteHierarchyFile(
+ const char *file_name, char *lines[])
+{
+ FILE *output_file;
+ int matched = 0;
+
+ output_file = fopen(file_name, "r");
+ if (output_file && vtkWrapHierarchy_CompareHierarchyFile(output_file, lines))
+ {
+ matched = 1;
+ }
+ if (output_file)
+ {
+ fclose(output_file);
+ }
+
+ if (!matched)
+ {
+ int tries = 1;
+ output_file = fopen(file_name, "w");
+ while (!output_file && tries < 5)
+ {
+ /* There are two CMAKE_CUSTOM_COMMANDS for vtkWrapHierarchy,
+ * make sure they do not collide. */
+ tries++;
+#ifdef _WIN32
+ Sleep(1000);
+#else
+ sleep(1);
+#endif
+ output_file = fopen(file_name, "r+");
+ if (output_file &&
+ vtkWrapHierarchy_CompareHierarchyFile(output_file, lines))
+ {
+ /* if the contents match, no need to write it */
+ fclose(output_file);
+ return 0;
+ }
+ if (output_file)
+ {
+ /* close and open in order to truncate the file */
+ fclose(output_file);
+ output_file = fopen(file_name, "w");
+ }
+ }
+ if (!output_file)
+ {
+ fprintf(stderr, "vtkWrapHierarchy: tried %i times to write %s\n",
+ tries, file_name);
+ exit(1);
+ }
+ if (!vtkWrapHierarchy_WriteHierarchyFile(output_file, lines))
+ {
+ fclose(output_file);
+ fprintf(stderr, "vtkWrapHierarchy: error writing file %s\n",
+ file_name);
+ exit(1);
+ }
+ fclose(output_file);
+ }
+
+ return 0;
+}
+
+static int string_compare(const void *vp1, const void *vp2)
+{
+ return strcmp(*(const char **)vp1, *(const char **)vp2);
+}
+
+int main(int argc, char *argv[])
+{
+ OptionInfo *options;
+ int i;
+ size_t j, n;
+ char **lines = 0;
+ char **files = 0;
+ char *flags;
+ char *module_name;
+
+ /* parse command-line options */
+ vtkParse_MainMulti(argc, argv);
+ options = vtkParse_GetCommandLineOptions();
+
+ /* make sure than an output file was given on the command line */
+ if (options->OutputFileName == NULL)
+ {
+ fprintf(stderr, "No output file was specified\n");
+ exit(1);
+ }
+
+ /* read the data file */
+ files = vtkWrapHierarchy_TryReadHierarchyFile(
+ options->InputFileName, files);
+
+ /* read in all the prior files */
+ for (i = 1; i < options->NumberOfFiles; i++)
+ {
+ lines = vtkWrapHierarchy_TryReadHierarchyFile(
+ options->Files[i], lines);
+ }
+
+ /* merge the files listed in the data file */
+ for (i = 0; files[i] != NULL; i++)
+ {
+ /* look for semicolon that marks the module name */
+ module_name = files[i];
+ while(*module_name != ';' && *module_name != '\0') { module_name++; };
+ if (*module_name == ';') { *module_name++ = '\0'; }
+
+ /* look for semicolon that marks start of flags */
+ flags = module_name;
+ while(*flags != ';' && *flags != '\0') { flags++; };
+ if (*flags == ';') { *flags++ = '\0'; }
+
+ lines = vtkWrapHierarchy_TryParseHeaderFile(
+ files[i], module_name, flags, lines);
+ }
+
+ /* sort the lines to ease lookups in the file */
+ for (n = 0; lines[n]; n++) { ; };
+ qsort(lines, n, sizeof(char *), &string_compare);
+
+ /* write the file, if it has changed */
+ vtkWrapHierarchy_TryWriteHierarchyFile(options->OutputFileName, lines);
+
+ for (j = 0; j < n; j++)
+ {
+ free(lines[j]);
+ }
+
+ free(files);
+ free(lines);
+ return 0;
+}
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkWrapText.c
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+
+#include "vtkWrapText.h"
+#include "vtkWrap.h"
+#include <string.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/* -------------------------------------------------------------------- */
+/* Convert special characters in a string into their escape codes
+ * so that the string can be quoted in a source file. The specified
+ * maxlen must be at least 32 chars, and should not be over 2047 since
+ * that is the maximum length of a string literal on some systems */
+
+const char *vtkWrapText_QuoteString(
+ const char *comment, size_t maxlen)
+{
+ static char *result = 0;
+ static size_t oldmaxlen = 0;
+ size_t i, j, n;
+
+ if (maxlen > oldmaxlen)
+ {
+ if (result)
+ {
+ free(result);
+ }
+ result = (char *)malloc((size_t)(maxlen+1));
+ oldmaxlen = maxlen;
+ }
+
+ if (comment == NULL)
+ {
+ return "";
+ }
+
+ j = 0;
+
+ n = strlen(comment);
+ for (i = 0; i < n; i++)
+ {
+ if (comment[i] == '\"')
+ {
+ strcpy(&result[j],"\\\"");
+ j += 2;
+ }
+ else if (comment[i] == '\\')
+ {
+ strcpy(&result[j],"\\\\");
+ j += 2;
+ }
+ else if (comment[i] == '\n')
+ {
+ strcpy(&result[j],"\\n");
+ j += 2;
+ }
+ else if ((comment[i] & 0x80) != 0 || isprint(comment[i]))
+ {
+ // all characters in extended-ASCII set are printable. Some compilers (VS
+ // 2010, in debug mode) asserts when isprint() is passed a negative value.
+ // Hence, we simply skip the check.
+ result[j] = comment[i];
+ j++;
+ }
+ else
+ {
+ sprintf(&result[j],"\\%3.3o",comment[i]);
+ j += 4;
+ }
+ if (j >= maxlen - 21)
+ {
+ sprintf(&result[j]," ...\\n [Truncated]\\n");
+ j += (int)strlen(" ...\\n [Truncated]\\n");
+ break;
+ }
+ }
+ result[j] = '\0';
+
+ return result;
+}
+
+/* -------------------------------------------------------------------- */
+/* A simple string that grows as necessary. */
+
+struct vtkWPString
+{
+ char *str;
+ size_t len;
+ size_t maxlen;
+};
+
+/* -- append ---------- */
+static void vtkWPString_Append(
+ struct vtkWPString *str, const char *text)
+{
+ size_t n = strlen(text);
+
+ if (str->len + n + 1 > str->maxlen)
+ {
+ str->maxlen = (str->len + n + 1 + 2*str->maxlen);
+ str->str = (char *)realloc(str->str, str->maxlen);
+ }
+
+ strncpy(&str->str[str->len], text, n);
+ str->len += n;
+ str->str[str->len] = '\0';
+}
+
+/* -- add a char ---------- */
+static void vtkWPString_PushChar(
+ struct vtkWPString *str, char c)
+{
+ if (str->len + 2 > str->maxlen)
+ {
+ str->maxlen = (str->len + 2 + 2*str->maxlen);
+ str->str = (char *)realloc(str->str, str->maxlen);
+ }
+
+ str->str[str->len++] = c;
+ str->str[str->len] = '\0';
+}
+
+/* -- strip any of the given chars from the end ---------- */
+static void vtkWPString_Strip(
+ struct vtkWPString *str, const char *trailers)
+{
+ size_t k = str->len;
+ char *cp = str->str;
+ size_t j = 0;
+ size_t n;
+
+ if (cp)
+ {
+ n = strlen(trailers);
+
+ while (k > 0 && j < n)
+ {
+ for (j = 0; j < n; j++)
+ {
+ if (cp[k-1] == trailers[j])
+ {
+ k--;
+ break;
+ }
+ }
+ }
+
+ str->len = k;
+ str->str[k] = '\0';
+ }
+}
+
+/* -- Return the last char ---------- */
+static char vtkWPString_LastChar(
+ struct vtkWPString *str)
+{
+ if (str->str && str->len > 0)
+ {
+ return str->str[str->len-1];
+ }
+ return '\0';
+}
+
+/* -- do a linebreak on a method declaration ---------- */
+static void vtkWPString_BreakSignatureLine(
+ struct vtkWPString *str, size_t *linestart, size_t indentation)
+{
+ size_t i = 0;
+ size_t m = 0;
+ size_t j = *linestart;
+ size_t l = str->len;
+ size_t k = str->len;
+ char *text = str->str;
+ char delim;
+
+ if (!text)
+ {
+ return;
+ }
+
+ while (l > j && text[l-1] != '\n' && text[l-1] != ',' &&
+ text[l-1] != '(' && text[l-1] != ')')
+ {
+ /* treat each string as a unit */
+ if (l > 4 && (text[l-1] == '\'' || text[l-1] == '\"'))
+ {
+ delim = text[l-1];
+ l -= 2;
+ while (l > 3 && (text[l-1] != delim || text[l-3] == '\\'))
+ {
+ l--;
+ if (text[l-1] == '\\')
+ {
+ l--;
+ }
+ }
+ l -= 2;
+ }
+ else
+ {
+ l--;
+ }
+ }
+
+ /* if none of these chars was found, split is impossible */
+ if (text[l-1] != ',' && text[l-1] != '(' &&
+ text[l-1] != ')' && text[l-1] != '\n')
+ {
+ j++;
+ }
+
+ else
+ {
+ /* Append some chars to guarantee size */
+ vtkWPString_PushChar(str, '\n');
+ vtkWPString_PushChar(str, '\n');
+ for (i = 0; i < indentation; i++)
+ {
+ vtkWPString_PushChar(str, ' ');
+ }
+ /* re-get the char pointer, it may have been reallocated */
+ text = str->str;
+
+ if (k > l)
+ {
+ m = 0;
+ while (m < indentation+2 && text[l+m] == ' ')
+ {
+ m++;
+ }
+ memmove(&text[l+indentation+2-m], &text[l], k-l);
+ k += indentation+2-m;
+ }
+ else
+ {
+ k += indentation+2;
+ }
+ text[l++] = '\\'; text[l++] = 'n';
+ j = l;
+ for (i = 0; i < indentation; i++)
+ {
+ text[l++] = ' ';
+ }
+ }
+
+ str->len = k;
+
+ /* return the new line start position */
+ *linestart = j;
+}
+
+/* -- do a linebreak on regular text ---------- */
+static void vtkWPString_BreakCommentLine(
+ struct vtkWPString *str, size_t *linestart, size_t indent)
+{
+ size_t i = 0;
+ size_t j = *linestart;
+ size_t l = str->len;
+ char *text = str->str;
+
+ if (!text)
+ {
+ return;
+ }
+
+ /* try to break the line at a word */
+ while (l > 0 && text[l-1] != ' ' && text[l-1] != '\n')
+ {
+ l--;
+ }
+ if (l > 0 && text[l-1] != '\n' && l-j > indent)
+ {
+ /* replace space with newline */
+ text[l-1] = '\n';
+ j = l;
+
+ /* Append some chars to guarantee size */
+ vtkWPString_PushChar(str, '\n');
+ vtkWPString_PushChar(str, '\n');
+ for (i = 0; i < indent; i++)
+ {
+ vtkWPString_PushChar(str, ' ');
+ }
+ /* re-get the char pointer, it may have been reallocated */
+ text = str->str;
+ str->len -= indent+2;
+
+ if (str->len > l && indent > 0)
+ {
+ memmove(&text[l+indent], &text[l], str->len-l);
+ memset(&text[l], ' ', indent);
+ str->len += indent;
+ }
+ }
+ else
+ {
+ /* long word, just split the word */
+ vtkWPString_PushChar(str, '\n');
+ j = str->len;
+ for (i = 0; i < indent; i++)
+ {
+ vtkWPString_PushChar(str, ' ');
+ }
+ }
+
+ /* return the new line start position */
+ *linestart = j;
+}
+
+/* -------------------------------------------------------------------- */
+/* Format a signature to a 70 char linewidth and char limit */
+const char *vtkWrapText_FormatSignature(
+ const char *signature, size_t width, size_t maxlen)
+{
+ static struct vtkWPString staticString = { NULL, 0, 0 };
+ struct vtkWPString *text;
+ size_t i, j, n;
+ const char *cp = signature;
+ char delim;
+ size_t lastSigStart = 0;
+ size_t sigCount = 0;
+
+ text = &staticString;
+ text->len = 0;
+
+ if (signature == 0)
+ {
+ return "";
+ }
+
+ i = 0;
+ j = 0;
+
+ while (cp[i] != '\0')
+ {
+ while (text->len - j < width && cp[i] != '\n' && cp[i] != '\0')
+ {
+ /* escape quotes */
+ if (cp[i] == '\"' || cp[i] == '\'')
+ {
+ delim = cp[i];
+ vtkWPString_PushChar(text, '\\');
+ vtkWPString_PushChar(text, cp[i++]);
+ while (cp[i] != delim && cp[i] != '\0')
+ {
+ if (cp[i] == '\\')
+ {
+ vtkWPString_PushChar(text, '\\');
+ }
+ vtkWPString_PushChar(text, cp[i++]);
+ }
+ if (cp[i] == delim)
+ {
+ vtkWPString_PushChar(text, '\\');
+ vtkWPString_PushChar(text, cp[i++]);
+ }
+ }
+ /* remove items that trail the closing parenthesis */
+ else if (cp[i] == ')')
+ {
+ vtkWPString_PushChar(text, cp[i++]);
+ if (strncmp(&cp[i], " const", 6) == 0)
+ {
+ i += 6;
+ }
+ if (strncmp(&cp[i], " = 0", 4) == 0)
+ {
+ i += 4;
+ }
+ if (cp[i] == ';')
+ {
+ i++;
+ }
+ }
+ /* anything else */
+ else
+ {
+ vtkWPString_PushChar(text, cp[i++]);
+ }
+ }
+
+ /* break the line (try to break after a comma) */
+ if (cp[i] != '\n' && cp[i] != '\0')
+ {
+ vtkWPString_BreakSignatureLine(text, &j, 4);
+ }
+ /* reached end of line: do next signature */
+ else
+ {
+ vtkWPString_Strip(text, " \r\t");
+ if (cp[i] != '\0')
+ {
+ sigCount++;
+ /* if sig count is even, check length against maxlen */
+ if ((sigCount & 1) == 0)
+ {
+ n = strlen(text->str);
+ if (n >= maxlen)
+ {
+ break;
+ }
+ lastSigStart = n;
+ }
+
+ i++;
+ vtkWPString_PushChar(text, '\\');
+ vtkWPString_PushChar(text, 'n');
+ }
+ /* mark the position of the start of the line */
+ j = text->len;
+ }
+ }
+
+ vtkWPString_Strip(text, " \r\t");
+
+ if (strlen(text->str) >= maxlen)
+ {
+ /* terminate before the current signature */
+ text->str[lastSigStart] = '\0';
+ }
+
+ return text->str;
+}
+
+/* -------------------------------------------------------------------- */
+/* Format a comment to a 70 char linewidth, in several steps:
+ * 1) remove html tags, convert <p> and <br> into breaks
+ * 2) remove doxygen tags like \em
+ * 3) remove extra whitespace (except paragraph breaks)
+ * 4) re-break the lines
+ */
+
+const char *vtkWrapText_FormatComment(
+ const char *comment, size_t width)
+{
+ static struct vtkWPString staticString = { NULL, 0, 0 };
+ struct vtkWPString *text;
+ const char *cp;
+ size_t i, j, l;
+ size_t indent = 0;
+ int nojoin = 0;
+ int start;
+
+ text = &staticString;
+ text->len = 0;
+
+ if (comment == 0)
+ {
+ return "";
+ }
+
+ i = 0; j = 0; l = 0;
+ start = 1;
+ cp = comment;
+
+ /* skip any leading whitespace */
+ while (cp[i] == '\n' || cp[i] == '\r' ||
+ cp[i] == '\t' || cp[i] == ' ')
+ {
+ i++;
+ }
+
+ while (cp[i] != '\0')
+ {
+ /* Add characters until the output line is complete */
+ while (cp[i] != '\0' && text->len-j < width)
+ {
+ /* if the end of the line was found, see how next line begins */
+ if (start)
+ {
+ /* eat the leading space */
+ if (cp[i] == ' ')
+ {
+ i++;
+ }
+
+ /* skip ahead to find any interesting first characters */
+ l = i;
+ while (cp[l] == ' ' || cp[l] == '\t' || cp[l] == '\r')
+ {
+ l++;
+ }
+
+ /* check for new section */
+ if (cp[l] == '.' && strncmp(&cp[l], ".SECTION", 8) == 0)
+ {
+ vtkWPString_Strip(text, "\n");
+ if (text->len > 0)
+ {
+ vtkWPString_PushChar(text, '\n');
+ vtkWPString_PushChar(text, '\n');
+ }
+ i = l+8;
+ while (cp[i] == '\r' || cp[i] == '\t' || cp[i] == ' ')
+ {
+ i++;
+ }
+ while (cp[i] != '\n' && cp[i] != '\0')
+ {
+ vtkWPString_PushChar(text, cp[i++]);
+ }
+ vtkWPString_Strip(text, " \t\r");
+
+ if (vtkWPString_LastChar(text) != ':')
+ {
+ vtkWPString_PushChar(text, ':');
+ }
+ vtkWPString_PushChar(text, '\n');
+ vtkWPString_PushChar(text, '\n');
+ j = text->len;
+ indent = 0;
+ if (cp[i] == '\n')
+ {
+ i++;
+ }
+ start = 1;
+ continue;
+ }
+
+ /* handle doxygen tags that appear at start of line */
+ if (cp[l] == '\\' || cp[l] == '@')
+ {
+ if (strncmp(&cp[l+1], "brief", 5) == 0 ||
+ strncmp(&cp[l+1], "short", 5) == 0 ||
+ strncmp(&cp[l+1], "pre", 3) == 0 ||
+ strncmp(&cp[l+1], "post", 4) == 0 ||
+ strncmp(&cp[l+1], "param", 5) == 0 ||
+ strncmp(&cp[l+1], "tparam", 6) == 0 ||
+ strncmp(&cp[l+1], "cmdparam", 8) == 0 ||
+ strncmp(&cp[l+1], "exception", 9) == 0 ||
+ strncmp(&cp[l+1], "return", 6) == 0 ||
+ strncmp(&cp[l+1], "li", 2) == 0)
+ {
+ nojoin = 2;
+ indent = 4;
+ if (text->len > 0 && vtkWPString_LastChar(text) != '\n')
+ {
+ vtkWPString_PushChar(text, '\n');
+ }
+ j = text->len;
+ i = l;
+ }
+ }
+
+ /* handle bullets and numbering */
+ else if (cp[l] == '-' || cp[l] == '*' || cp[l] == '#' ||
+ (cp[l] >= '0' && cp[l] <= '9' &&
+ (cp[l+1] == ')' || cp[l+1] == '.') && cp[l+2] == ' '))
+ {
+ indent = 0;
+ while (indent < 3 && cp[l+indent] != ' ')
+ {
+ indent++;
+ }
+ indent++;
+ if (text->len > 0 && vtkWPString_LastChar(text) != '\n')
+ {
+ vtkWPString_PushChar(text, '\n');
+ }
+ j = text->len;
+ i = l;
+ }
+
+ /* keep paragraph breaks */
+ else if (cp[l] == '\n')
+ {
+ i = l+1;
+ vtkWPString_Strip(text, "\n");
+ if (text->len > 0)
+ {
+ vtkWPString_PushChar(text, '\n');
+ vtkWPString_PushChar(text, '\n');
+ }
+ nojoin = 0;
+ indent = 0;
+ j = text->len;
+ start = 1;
+ continue;
+ }
+
+ /* add newline if nojoin is not set */
+ else if (nojoin ||
+ (cp[i] == ' ' && !indent))
+ {
+ if (nojoin == 2)
+ {
+ nojoin = 0;
+ indent = 0;
+ }
+ vtkWPString_PushChar(text, '\n');
+ j = text->len;
+ }
+
+ /* do line joining */
+ else if (text->len > 0 && vtkWPString_LastChar(text) != '\n')
+ {
+ i = l;
+ vtkWPString_PushChar(text, ' ');
+ }
+ }
+
+ /* handle quotes */
+ if (cp[i] == '\"')
+ {
+ size_t q = i;
+ size_t r = text->len;
+
+ /* try to keep the quote whole */
+ vtkWPString_PushChar(text, cp[i++]);
+ while (cp[i] != '\"' && cp[i] != '\r' &&
+ cp[i] != '\n' && cp[i] != '\0')
+ {
+ vtkWPString_PushChar(text, cp[i++]);
+ }
+ /* if line ended before quote did, then reset */
+ if (cp[i] != '\"')
+ {
+ i = q;
+ text->len = r;
+ }
+ }
+ else if (cp[i] == '\'')
+ {
+ size_t q = i;
+ size_t r = text->len;
+
+ /* try to keep the quote whole */
+ vtkWPString_PushChar(text, cp[i++]);
+ while (cp[i] != '\'' && cp[i] != '\r' &&
+ cp[i] != '\n' && cp[i] != '\0')
+ {
+ vtkWPString_PushChar(text, cp[i++]);
+ }
+ /* if line ended before quote did, then reset */
+ if (cp[i] != '\'')
+ {
+ i = q;
+ text->len = r;
+ }
+ }
+
+ /* handle simple html tags */
+ else if (cp[i] == '<')
+ {
+ l = i+1;
+ if (cp[l] == '/') { l++; }
+ while ((cp[l] >= 'a' && cp[l] <= 'z') ||
+ (cp[l] >= 'a' && cp[l] <= 'z')) { l++; }
+ if (cp[l] == '>')
+ {
+ if (cp[i+1] == 'p' || cp[i+1] == 'P' ||
+ (cp[i+1] == 'b' && cp[i+2] == 'r') ||
+ (cp[i+1] == 'B' && cp[i+2] == 'R'))
+ {
+ vtkWPString_Strip(text, " \n");
+ vtkWPString_PushChar(text, '\n');
+ vtkWPString_PushChar(text, '\n');
+ j = text->len;
+ indent = 0;
+ }
+ i = l+1;
+ while (cp[i] == '\r' || cp[i] == '\t' || cp[i] == ' ')
+ {
+ i++;
+ }
+ }
+ }
+ else if (cp[i] == '\\' || cp[i] == '@')
+ {
+ /* handle simple doxygen tags */
+ if (strncmp(&cp[i+1], "em ", 3) == 0)
+ {
+ i += 4;
+ }
+ else if (strncmp(&cp[i+1], "a ", 2) == 0 ||
+ strncmp(&cp[i+1], "e ", 2) == 0 ||
+ strncmp(&cp[i+1], "c ", 2) == 0 ||
+ strncmp(&cp[i+1], "b ", 2) == 0 ||
+ strncmp(&cp[i+1], "p ", 2) == 0 ||
+ strncmp(&cp[i+1], "f$", 2) == 0 ||
+ strncmp(&cp[i+1], "f[", 2) == 0 ||
+ strncmp(&cp[i+1], "f]", 2) == 0)
+ {
+ if (i > 0 && cp[i-1] != ' ')
+ {
+ vtkWPString_PushChar(text, ' ');
+ }
+ if (cp[i+1] == 'f')
+ {
+ if (cp[i+2] == '$')
+ {
+ vtkWPString_PushChar(text, '$');
+ }
+ else
+ {
+ vtkWPString_PushChar(text, '\\');
+ vtkWPString_PushChar(text, cp[i+2]);
+ }
+ }
+ i += 3;
+ }
+ else if (cp[i+1] == '&' || cp[i+1] == '$' || cp[i+1] == '#' ||
+ cp[i+1] == '<' || cp[i+1] == '>' || cp[i+1] == '%' ||
+ cp[i+1] == '@' || cp[i+1] == '\\' || cp[i+1] == '\"')
+ {
+ i++;
+ }
+ else if (cp[i+1] == 'n')
+ {
+ vtkWPString_Strip(text, " \n");
+ vtkWPString_PushChar(text, '\n');
+ vtkWPString_PushChar(text, '\n');
+ indent = 0;
+ i += 2;
+ j = text->len;
+ }
+ else if (strncmp(&cp[i+1], "code", 4) == 0)
+ {
+ nojoin = 1;
+ i += 5;
+ while (cp[i] == ' ' || cp[i] == '\r' ||
+ cp[i] == '\t' || cp[i] == '\n')
+ {
+ i++;
+ }
+ }
+ else if (strncmp(&cp[i+1], "endcode", 7) == 0)
+ {
+ nojoin = 0;
+ i += 8;
+ l = i;
+ while (cp[l] == ' ' || cp[l] == '\t' || cp[l] == '\r')
+ {
+ l++;
+ }
+ if (cp[l] == '\n')
+ {
+ i = l;
+ vtkWPString_PushChar(text, '\n');
+ j = text->len;
+ }
+ }
+ else if (strncmp(&cp[i+1], "verbatim", 8) == 0)
+ {
+ i += 9;
+ while (cp[i] != '\0' && ((cp[i] != '@' && cp[i] != '\\') ||
+ strncmp(&cp[i+1], "endverbatim", 11) != 0))
+ {
+ if (cp[i] != '\r')
+ {
+ vtkWPString_PushChar(text, cp[i]);
+ }
+ if (cp[i] == '\n')
+ {
+ j = text->len;
+ }
+ i++;
+ }
+ if (cp[i] != '\0')
+ {
+ i += 12;
+ }
+ }
+ }
+
+ /* search for newline */
+ start = 0;
+ l = i;
+ while (cp[l] == ' ' || cp[l] == '\t' || cp[l] == '\r')
+ {
+ l++;
+ }
+ if (cp[l] == '\n')
+ {
+ i = l+1;
+ start = 1;
+ }
+
+ /* append */
+ else if (cp[i] != '\0')
+ {
+ vtkWPString_PushChar(text, cp[i++]);
+ }
+
+ } /* while (cp[i] != '\0' && text->len-j < width) */
+
+ if (cp[i] == '\0')
+ {
+ break;
+ }
+
+ vtkWPString_BreakCommentLine(text, &j, indent);
+ }
+
+ /* remove any trailing blank lines */
+ vtkWPString_Strip(text, "\n");
+ vtkWPString_PushChar(text, '\n');
+
+ return text->str;
+}
+
+/* -------------------------------------------------------------------- */
+/* Create a signature for the python version of a method. */
+
+static void vtkWrapText_PythonTypeSignature(
+ struct vtkWPString *result, const char *delims[2], ValueInfo *arg);
+
+static void vtkWrapText_PythonArraySignature(
+ struct vtkWPString *result, const char *classname,
+ const char *delims[2], int ndim, const char **dims);
+
+const char *vtkWrapText_PythonSignature(
+ FunctionInfo *currentFunction)
+{
+ /* string is intentionally not freed until the program exits */
+ static struct vtkWPString staticString = { NULL, 0, 0 };
+ struct vtkWPString *result;
+ ValueInfo *arg, *ret;
+ const char *parens[2] = { "(", ")" };
+ const char *braces[2] = { "[", "]" };
+ const char **delims;
+ int i, n;
+
+ n = vtkWrap_CountWrappedArgs(currentFunction);
+
+ result = &staticString;
+ result->len = 0;
+
+ /* print out the name of the method */
+ vtkWPString_Append(result, "V.");
+ vtkWPString_Append(result, currentFunction->Name);
+
+ /* print the arg list */
+ vtkWPString_Append(result, "(");
+
+ for (i = 0; i < n; i++)
+ {
+ arg = currentFunction->Arguments[i];
+
+ if (i != 0)
+ {
+ vtkWPString_Append(result, ", ");
+ }
+
+ delims = parens;
+ if (!vtkWrap_IsConst(arg) &&
+ !vtkWrap_IsSetVectorMethod(currentFunction))
+ {
+ delims = braces;
+ }
+
+ vtkWrapText_PythonTypeSignature(result, delims, arg);
+ }
+
+ vtkWPString_Append(result, ")");
+
+ /* if this is a void method, we are finished */
+ /* otherwise, print "->" and the return type */
+ ret = currentFunction->ReturnValue;
+ if (ret && (ret->Type & VTK_PARSE_UNQUALIFIED_TYPE) != VTK_PARSE_VOID)
+ {
+ vtkWPString_Append(result, " -> ");
+
+ vtkWrapText_PythonTypeSignature(result, parens, ret);
+ }
+
+ if (currentFunction->Signature)
+ {
+ vtkWPString_Append(result, "\nC++: ");
+ vtkWPString_Append(result, currentFunction->Signature);
+ }
+
+ return result->str;
+}
+
+static void vtkWrapText_PythonTypeSignature(
+ struct vtkWPString *result, const char *braces[2], ValueInfo *arg)
+{
+ char text[32];
+ const char *dimension;
+ const char *classname = "";
+
+ if (vtkWrap_IsVoid(arg))
+ {
+ classname = "void";
+ }
+ else if (vtkWrap_IsObject(arg))
+ {
+ classname = arg->Class;
+ }
+ else if (vtkWrap_IsFunction(arg))
+ {
+ classname = "function";
+ }
+ else if (vtkWrap_IsString(arg) || vtkWrap_IsCharPointer(arg))
+ {
+ classname = "string";
+ if ((arg->Type & VTK_PARSE_BASE_TYPE) == VTK_PARSE_UNICODE_STRING)
+ {
+ classname = "unicode";
+ }
+ }
+ else if (vtkWrap_IsChar(arg))
+ {
+ classname = "char";
+ }
+ else if (vtkWrap_IsBool(arg))
+ {
+ classname = "bool";
+ }
+ else if (vtkWrap_IsRealNumber(arg))
+ {
+ classname = "float";
+ }
+ else if (vtkWrap_IsInteger(arg))
+ {
+ classname = "int";
+ }
+
+ if (vtkWrap_IsArray(arg))
+ {
+ if (arg->CountHint)
+ {
+ vtkWPString_Append(result, braces[0]);
+ vtkWPString_Append(result, classname);
+ vtkWPString_Append(result, ", ...");
+ vtkWPString_Append(result, braces[1]);
+ }
+ else
+ {
+ sprintf(text, "%d", arg->Count);
+ dimension = text;
+ vtkWrapText_PythonArraySignature(result, classname, braces,
+ 1, &dimension);
+ }
+ }
+ else if (vtkWrap_IsNArray(arg))
+ {
+ vtkWrapText_PythonArraySignature(result, classname, braces,
+ arg->NumberOfDimensions, arg->Dimensions);
+ }
+ else
+ {
+ vtkWPString_Append(result, classname);
+ }
+}
+
+static void vtkWrapText_PythonArraySignature(
+ struct vtkWPString *result, const char *classname,
+ const char *braces[2], int ndim, const char **dims)
+{
+ int j, n;
+
+ vtkWPString_Append(result, braces[0]);
+ n = (int)strtoul(dims[0], 0, 0);
+ if (ndim > 1)
+ {
+ for (j = 0; j < n; j++)
+ {
+ if (j != 0) { vtkWPString_Append(result, ", "); }
+ vtkWrapText_PythonArraySignature(result, classname,
+ braces, ndim-1, dims+1);
+ }
+ }
+ else
+ {
+ for (j = 0; j < n; j++)
+ {
+ if (j != 0) { vtkWPString_Append(result, ", "); }
+ vtkWPString_Append(result, classname);
+ }
+ }
+ vtkWPString_Append(result, braces[1]);
+}
--- /dev/null
+/*=========================================================================
+
+ Program: Visualization Toolkit
+ Module: vtkWrapText.h
+
+ Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+ All rights reserved.
+ See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notice for more information.
+
+=========================================================================*/
+
+/**
+ * vtkWrap provides useful functions for generating wrapping code.
+*/
+
+#ifndef VTK_WRAP_TEXT_H
+#define VTK_WRAP_TEXT_H
+
+#include "vtkParse.h"
+#include "vtkParseHierarchy.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Quote a string for inclusion in a C string literal. The "maxlen"
+ * should be set to a value between 32 and 2047. Values over 2047
+ * will result in string literals too long for some compilers. If
+ * the string is truncated, a "..." will be appended.
+ */
+const char *vtkWrapText_QuoteString(const char *comment, size_t maxlen);
+
+/**
+ * Format a doxygen comment for plain text, and word-wrap at
+ * the specified width. A 70-char width is recommended.
+ */
+const char *vtkWrapText_FormatComment(const char *comment, size_t width);
+
+/**
+ * Format a method signature by applying word-wrap at the specified
+ * width and taking special care not to split any literals or names.
+ * A width of 70 chars is recommended.
+ */
+const char *vtkWrapText_FormatSignature(
+ const char *signature, size_t width, size_t maxlen);
+
+/**
+ * Produce a python signature for a method, for use in documentation.
+ */
+const char *vtkWrapText_PythonSignature(FunctionInfo *currentFunction);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2010-2013 CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+import sys
+import os
+
+ffile = "PARAVIS_CreateClass.cxx"
+wfile = os.path.join(sys.argv[1], "wrapfiles.txt")
+
+ffile_stream = open(ffile, "w")
+
+ffile_stream.write('#include <iostream>' + '\n')
+ffile_stream.write('#include <QString>' + '\n')
+ffile_stream.write('#include "PARAVIS_Gen_i.hh"' + '\n')
+wfile_stream = open(wfile)
+for line in wfile_stream:
+ if line.split()[0] == "vtkWebGLExporter" :
+ ffile_stream.write('#ifdef WIN32\n')
+ ffile_stream.write(' #ifdef GetObject\n')
+ ffile_stream.write(' #undef GetObject\n')
+ ffile_stream.write(' #endif\n')
+ ffile_stream.write('#endif\n')
+ pass
+ ffile_stream.write('#include "PARAVIS_Gen_%s_i.hh"'%(line.split()[0]) + '\n')
+ pass
+wfile_stream.close()
+ffile_stream.write('' + '\n')
+ffile_stream.write('PARAVIS::PARAVIS_Base_i* CreateInstance(::vtkObjectBase* Inst, const QString& theClassName)' + '\n')
+ffile_stream.write('{' + '\n')
+wfile_stream = open(wfile)
+lst = []
+for line in wfile_stream:
+ lst.append(line.split()[0])
+ pass
+wfile_stream.close()
+lst.reverse()
+for item in lst:
+ ffile_stream.write(' if(theClassName == "%s" || (Inst != NULL && Inst->IsA("%s")))'%(item, item) + '\n')
+ ffile_stream.write(' return new PARAVIS::%s_i();'%(item) + '\n')
+ pass
+ffile_stream.write('' + '\n')
+ffile_stream.write(' cerr << "The class " << theClassName.toStdString() << " is not created!" << endl;' + '\n')
+ffile_stream.write(' return new PARAVIS::PARAVIS_Base_i();' + '\n')
+ffile_stream.write('}' + '\n')
+ffile_stream.close()
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2010-2013 CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+file=PARAVIS_CreateClass.cxx
+wfile=$1/wrapfiles.txt
+
+echo '#include <iostream>' > $file
+echo '#include <QString>' >> $file
+echo '#include "PARAVIS_Gen_i.hh"' >> $file
+awk '{print "#include \"PARAVIS_Gen_"$1"_i.hh\"";}' $wfile >> $file
+echo '' >> $file
+echo 'PARAVIS::PARAVIS_Base_i* CreateInstance(::vtkObjectBase* Inst, const QString& theClassName)' >> $file
+echo '{' >> $file
+awk 'BEGIN {lst="";} {lst=lst" "$1;} END{i=split(lst,arr);for(j=i;j>0;j--) {print " if(theClassName == \""arr[j]"\" || (Inst != NULL && Inst->IsA(\""arr[j]"\")))";print " return new PARAVIS::"arr[j]"_i();"}}' $wfile >> $file
+echo '' >> $file
+echo ' cerr << "The class " << theClassName.toStdString() << " is not created!" << endl;' >> $file
+echo ' return new PARAVIS::PARAVIS_Base_i();' >> $file
+echo '}' >> $file
--- /dev/null
+# Copyright (C) 2010-2013 CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+import paraview, os, sys
+import string
+import re
+
+classeslistsm = []
+classeslistvtk = []
+
+from vtkPVCommonPython import *
+from vtkPVClientServerCoreCorePython import *
+from vtkPVClientServerCoreDefaultPython import *
+from vtkPVClientServerCoreRenderingPython import *
+from vtkPVServerImplementationCorePython import *
+from vtkPVServerImplementationDefaultPython import *
+from vtkPVServerImplementationRenderingPython import *
+from vtkPVServerManagerApplicationPython import *
+from vtkPVServerManagerCorePython import *
+from vtkPVServerManagerDefaultPython import *
+from vtkPVServerManagerRenderingPython import *
+try:
+ from vtkPVVTKExtensionsCorePython import *
+except:
+ pass
+try:
+ from vtkPVVTKExtensionsDefaultPython import *
+except:
+ pass
+try:
+ from vtkPVVTKExtensionsRenderingPython import *
+except:
+ pass
+try:
+ from vtkPVVTKExtensionsWebGLExporterPython import *
+except:
+ pass
+
+l1 = dir()
+for a in l1:
+ if a.startswith("vtk") and (len(a) > 3):
+ classeslistsm.append(a)
+
+from paraview.vtk import *
+l2 = dir()
+
+for a in l2:
+ if (a not in l1) and a.startswith("vtk"):
+ classeslistvtk.append(a)
+
+dic=dict()
+
+non_wrap_list = ["vtkVariant", "vtkTimeStamp"]
+
+pv_classes_new=classeslistsm
+while len(pv_classes_new):
+ pv_classes_cur=pv_classes_new
+ pv_classes_new=[]
+ for c in pv_classes_cur:
+ ## ignore non wrappable classes
+ if c in non_wrap_list:
+ continue
+ filename=sys.argv[1]+"/"+c+".h"
+ if os.path.isfile(filename):
+ c_new=[]
+ f=open(filename)
+ for line in f:
+ if re.match('\s*/',line) is None:
+ if re.match('\s*public\s*:',line):
+ continue
+
+ m=re.match('\s*class\s+(vtk\w+)\s*;',line)
+ if m is not None:
+ cn=m.group(1)
+ if cn not in dic.keys() and cn not in pv_classes_new and cn in classeslistvtk and issubclass(globals()[cn], vtkObjectBase):
+ pv_classes_new.append(cn)
+ continue
+
+ m=re.match('\s*struct\s+(vtk\w+)\s*;',line)
+ if m is not None:
+ cn=m.group(1)
+ if cn not in dic.keys() and cn not in pv_classes_new and cn in classeslistvtk and issubclass(globals()[cn], vtkObjectBase):
+ pv_classes_new.append(cn)
+ continue
+
+ m=re.match('\s*#include\s+"(vtk\w+)\.h"',line)
+ if m is not None:
+ cn=m.group(1)
+ if cn not in dic.keys() and cn not in pv_classes_new and cn in classeslistvtk and issubclass(globals()[cn], vtkObjectBase):
+ pv_classes_new.append(cn)
+ continue
+
+ cm=re.findall('public\s+(vtk\w+)',line)
+ if len(cm) == 0:
+ continue
+ for cn in cm:
+ ## do not extract Call Back classes
+ if cn.count('vtkClassMemberCallback'):
+ continue
+ if cn not in dic.keys() and cn not in pv_classes_new:
+ pv_classes_new.append(cn)
+ if cn not in c_new:
+ c_new.append(cn)
+ f.close()
+ dic[c]=[0, c_new]
+
+
+pv_classes_sort=[]
+
+def collect_dic(cc):
+ ret=[]
+ for c in cc:
+ if c not in dic.keys():
+ continue
+ if len(dic[c][1]) and dic[c][0] == 0:
+ ret+=collect_dic(dic[c][1])
+ if dic[c][0] == 0:
+ ret.append(c)
+ dic[c][0]=1
+ return ret
+
+pv_classes_sort=collect_dic(dic.keys())
+
+wf_str=""
+if(os.path.exists('wrapfiles.txt')):
+ wf_txt=open('wrapfiles.txt','r')
+ strs=wf_txt.readlines()
+ wf_txt.close()
+ for s in strs:
+ wf_str+=s
+str=""
+
+for c in pv_classes_sort:
+ str+=c
+ for cc in dic[c][1]:
+ str+=' '+cc
+ str+='\n'
+
+if(str!=wf_str):
+ wf_txt=open('wrapfiles.txt','w')
+ wf_txt.write(str)
+ wf_txt.close()
--- /dev/null
+The files under the ParaView directory are pure copy from Paraview sources.
+They need for extractor building.
+Them has to be updated if the corresponded files in paraview will be changed
\ No newline at end of file
--- /dev/null
+# Copyright (C) 2010-2013 CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+LIST(GET PARAVIEW_INCLUDE_DIRS 0 PARAVIEW_INCLUDE_DIR0)
+
+SET(WRAP_IDL_I_HH)
+SET(WRAP_IDL_I_CC)
+
+IF(EXISTS ${CMAKE_BINARY_DIR}/wrapfiles.txt)
+ EXECUTE_PROCESS(
+ COMMAND ${PYTHON_EXECUTABLE} -c "f = open('${CMAKE_BINARY_DIR}/wrapfiles.txt') ; print f.read(), ; f.close()"
+ OUTPUT_VARIABLE WRAP_LIST_FULL
+ )
+
+ STRING(REGEX MATCHALL "[^\n]+" WRAP_LIST_REG ${WRAP_LIST_FULL})
+ FOREACH(_str ${WRAP_LIST_REG})
+
+ SEPARATE_ARGUMENTS(_str)
+ LIST(LENGTH _str WRAP_LEN)
+ SET(DEP_HH)
+ SET(DEP_CC)
+
+ LIST(GET _str 0 VAL)
+
+ IF(WRAP_LEN GREATER 1)
+ MATH(EXPR WRAP_LEN1 "${WRAP_LEN} - 1" )
+
+ FOREACH(IND RANGE 1 ${WRAP_LEN1})
+ LIST(GET _str ${IND} DEP_VAL)
+ SET(DEP_HH ${DEP_HH} PARAVIS_Gen_${DEP_VAL}_i.hh)
+ SET(DEP_CC ${DEP_CC} PARAVIS_Gen_${DEP_VAL}_i.cc)
+ ENDFOREACH(IND RANGE 1 ${WRAP_LEN1})
+
+ ENDIF(WRAP_LEN GREATER 1)
+
+ LIST(APPEND WRAP_IDL_I_HH PARAVIS_Gen_${VAL}_i.hh)
+ LIST(APPEND WRAP_IDL_I_CC PARAVIS_Gen_${VAL}_i.cc)
+
+ SET(vtkWrapIDL_HH_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL_HH)
+ IF(WINDOWS)
+ IF(CMAKE_BUILD_TOOL STREQUAL nmake)
+ SET(vtkWrapIDL_HH_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL_HH.exe)
+ ELSE(CMAKE_BUILD_TOOL STREQUAL nmake)
+ SET(vtkWrapIDL_HH_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/vtkWrapIDL_HH.exe)
+ ENDIF(CMAKE_BUILD_TOOL STREQUAL nmake)
+ ENDIF(WINDOWS)
+
+ ADD_CUSTOM_COMMAND(
+ OUTPUT PARAVIS_Gen_${VAL}_i.hh
+ COMMAND ${vtkWrapIDL_HH_EXEFILE} -o PARAVIS_Gen_${VAL}_i.hh --hints ${CMAKE_BINARY_DIR}/idl/hints ${PARAVIEW_INCLUDE_DIR0}/${VAL}.h
+ DEPENDS vtkWrapIDL_HH ${PARAVIEW_INCLUDE_DIR0}/${VAL}.h ${CMAKE_BINARY_DIR}/idl/hints ${DEP_HH}
+ )
+
+ SET(vtkWrapIDL_CC_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL_CC)
+ IF(WINDOWS)
+ IF(CMAKE_BUILD_TOOL STREQUAL nmake)
+ SET(vtkWrapIDL_CC_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/vtkWrapIDL_CC.exe)
+ ELSE(CMAKE_BUILD_TOOL STREQUAL nmake)
+ SET(vtkWrapIDL_CC_EXEFILE ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/vtkWrapIDL_CC.exe)
+ ENDIF(CMAKE_BUILD_TOOL STREQUAL nmake)
+ ENDIF(WINDOWS)
+
+ ADD_CUSTOM_COMMAND(
+ OUTPUT PARAVIS_Gen_${VAL}_i.cc
+ COMMAND ${vtkWrapIDL_CC_EXEFILE} -o PARAVIS_Gen_${VAL}_i.cc --hints ${CMAKE_BINARY_DIR}/idl/hints ${PARAVIEW_INCLUDE_DIR0}/${VAL}.h
+ DEPENDS PARAVIS_Gen_${VAL}_i.hh vtkWrapIDL_CC ${PARAVIEW_INCLUDE_DIR0}/${VAL}.h ${CMAKE_BINARY_DIR}/idl/hints ${DEP_CC}
+ )
+
+ ENDFOREACH(_str ${WRAP_LIST_REG})
+ENDIF(EXISTS ${CMAKE_BINARY_DIR}/wrapfiles.txt)
+
+ADD_CUSTOM_TARGET(generate_implements ALL DEPENDS ${CMAKE_BINARY_DIR}/wrapfiles.txt ${WRAP_IDL_I_HH} ${WRAP_IDL_I_CC})