Re: patch to allow function attriute macros in .gob files

From: George <jirka_at_5z.com>
Date: Fri, 9 Mar 2007 09:55:11 -0800

Sorry about not getting back to you right away, things are a little bit
hectic for me at the moment. Anyway, I'm ccing the gob-list mailing list. I
definitely thing this is a good modification. If you can clean it up as you
say and test it well, then I'll put it into svn and at some point make a new
release. It would also be good to clean up your notes and test programs in
such a way that would be usable for a release.

Thanks!

George

On Wed, Feb 28, 2007 at 07:42:20AM -0900, Britton Kerin wrote:
>
> Actually it just allows G_GNUC_PRINTF, _SCANF and _FORMAT. Some other
> attributes might be useful but not enough to justify the code generation
> changes that look necessary to make them work.
>
> There are some more things that could be done (better diagnostics rather
> than parse rejects) if you think the patch worth including at all I can
> work on them.
>
> The patch is against the pristine gob-2.0.14 sources most of it is crud
> from my different version of flex in the generated lexer.c.
>
>

> diff -u -Naur pristine/gob2-2.0.14/doc/gob2.1.in modified/gob2-2.0.14/doc/gob2.1.in
> --- pristine/gob2-2.0.14/doc/gob2.1.in 2005-12-16 14:59:36.000000000 -0500
> +++ modified/gob2-2.0.14/doc/gob2.1.in 2007-02-28 06:31:17.000000000 -0500
> @@ -604,15 +604,33 @@
> instance and it is checked for being null and the type will also be
> checked.
> .PP
> +.B "Function attributes:
> +.PP
> +The GLib function attribute macros G_GNUC_PRINTF, G_GNUC_SCANF, and
> +G_GNUC_FORMAT can optionally be included after the argument list, for
> +example:
> +.nf
> +
> + public void
> + print (self, const char *format (check null), ...) G_GNUC_PRINTF(2, 3)
> +
> +.fi
> +.PP
> +This will produce a prototype which will generate a warning at compile
> +time if the contents of the format argument (argument number 2) aren't
> +consistent with the types and number of the subsequent variadic
> +arguments (the first of which is argument number 3).
> +.PP
> .B "Error return:"
> .PP
> Methods which have a return value, there also has to be something
> -returned if there is an error, such as if a precondition is not met. The
> -default is 0, casted to the type of the method. If you need to return
> -something else then you can specify an "onerror" keyword after the
> -prototype and after that a number, a token (an identifier) or a bit of C
> -code enclosed in braces {}. The braces will not be printed into the
> -output, they just delimit the string. For example:
> +returned if there is an error, such as if a precondition is not met.
> +The default is 0, casted to the type of the method. If you need to
> +return something else then you can specify an "onerror" keyword after
> +the prototype and any optional function attribute macros, and after
> +that a number, a token (an identifier) or a bit of C code enclosed in
> +braces {}. The braces will not be printed into the output, they just
> +delimit the string. For example:
> .nf
>
> public void * get_something (self, int i (check >= 0)) onerror NULL {
> diff -u -Naur pristine/gob2-2.0.14/src/checks.c modified/gob2-2.0.14/src/checks.c
> --- pristine/gob2-2.0.14/src/checks.c 2005-12-16 14:03:28.000000000 -0500
> +++ modified/gob2-2.0.14/src/checks.c 2007-02-26 15:00:44.000000000 -0500
> @@ -479,6 +479,30 @@
> }
>
> void
> +check_func_attrs(Class *c)
> +{
> + GList *li;
> + for (li = c->nodes; li != NULL; li = li->next) {
> + Node *n = li->data;
> + if (n->type == METHOD_NODE) {
> + Method *m = (Method *)n;
> + if ((m->method == INIT_METHOD ||
> + m->method == CLASS_INIT_METHOD)
> + && (m->funcattrs != NULL && strlen(m->funcattrs) != 0)) {
> + /* This is actually dead code at the moment, since the parser
> + doesn't accept attributes to the init or class_init
> + syntactic forms anyway. But it could easily be made to do
> + so, and also for virtual override and signal methods, and
> + then we could give kinder error messages here. */
> + error_print (GOB_ERROR, m->line_no,
> + "function attributes (G_GNUC_PRINTF, etc.) aren't "
> + "supported for the init or class_init methods");
> + }
> + }
> + }
> +}
> +
> +void
> check_for_class_destructors (Class *c)
> {
> GList *li;
> diff -u -Naur pristine/gob2-2.0.14/src/checks.h modified/gob2-2.0.14/src/checks.h
> --- pristine/gob2-2.0.14/src/checks.h 2005-07-22 14:48:06.000000000 -0400
> +++ modified/gob2-2.0.14/src/checks.h 2007-02-26 14:50:46.000000000 -0500
> @@ -36,6 +36,7 @@
> void check_argument_types (Class *c);
> void check_property_types (Class *c);
> void check_func_arg_checks (Class *c);
> +void check_func_attrs (Class *c);
> void check_for_class_destructors (Class *c);
>
> int count_signals (Class *c);
> diff -u -Naur pristine/gob2-2.0.14/src/lexer.c modified/gob2-2.0.14/src/lexer.c
> --- pristine/gob2-2.0.14/src/lexer.c 2005-12-16 15:23:04.000000000 -0500
> +++ modified/gob2-2.0.14/src/lexer.c 1969-12-31 19:00:00.000000000 -0500
> @@ -1,3342 +0,0 @@
> -
> -#line 3 "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 31
> -#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
> -#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 */
> -
> -#if __STDC__
> -
> -#define YY_USE_CONST
> -
> -#endif /* __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
> -
> -#ifndef YY_TYPEDEF_YY_BUFFER_STATE
> -#define YY_TYPEDEF_YY_BUFFER_STATE
> -typedef struct yy_buffer_state *YY_BUFFER_STATE;
> -#endif
> -
> -extern int yyleng;
> -
> -extern FILE *yyin, *yyout;
> -
> -#define EOB_ACT_CONTINUE_SCAN 0
> -#define EOB_ACT_END_OF_FILE 1
> -#define EOB_ACT_LAST_MATCH 2
> -
> - #define YY_LESS_LINENO(n)
> -
> -/* 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) )
> -
> -/* The following is because we cannot portably get our hands on size_t
> - * (without autoconf's help, which isn't available because we want
> - * flex-generated scanners to compile on their own).
> - */
> -
> -#ifndef YY_TYPEDEF_YY_SIZE_T
> -#define YY_TYPEDEF_YY_SIZE_T
> -typedef unsigned int yy_size_t;
> -#endif
> -
> -#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.
> - */
> - int 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 int yy_n_chars; /* number of characters read into yy_ch_buf */
> -int yyleng;
> -
> -/* Points to current character in buffer. */
> -static char *yy_c_buf_p = (char *) 0;
> -static int yy_init = 1; /* 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,int 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 120
> -#define YY_END_OF_BUFFER 121
> -/* 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_acclist[651] =
> - { 0,
> - 121, 117, 120, 116, 117, 120, 1, 118, 120, 117,
> - 118, 120, 117, 120, 117, 120, 117, 120, 105, 117,
> - 120, 105, 117, 120, 117, 120, 109, 117, 120, 109,
> - 117, 120, 109, 117, 120, 109, 117, 120, 116, 117,
> - 120, 117, 120, 117, 120, 109, 117, 120, 109, 117,
> - 120, 29, 117, 120, 1, 30, 118, 120, 29, 117,
> - 118, 120, 29, 117, 120, 29, 117, 120, 29, 117,
> - 120, 53, 117, 120, 1, 54, 118, 120, 53, 117,
> - 118, 120, 45, 53, 117, 120, 53, 117, 120, 53,
> - 117, 120, 53, 117, 120, 51, 53, 117, 120, 52,
> -
> - 53, 117, 120, 53, 117, 120, 53, 117, 120, 49,
> - 117, 120, 1, 50, 118, 120, 49, 117, 118, 120,
> - 48, 49, 117, 120, 49, 117, 120, 49, 117, 120,
> - 62, 117, 120, 117, 120, 109, 117, 120, 109, 117,
> - 120, 109, 117, 120, 113, 117, 120, 65, 117, 120,
> - 1, 66, 118, 120, 65, 117, 118, 120, 64, 65,
> - 117, 120, 65, 117, 120, 65, 117, 120, 117, 120,
> - 117, 120, 117, 120, 117, 120, 109, 117, 120, 109,
> - 117, 120, 109, 117, 120, 109, 117, 120, 109, 117,
> - 120, 109, 117, 120, 109, 117, 120, 109, 117, 120,
> -
> - 109, 117, 120, 109, 117, 120, 109, 117, 120, 109,
> - 117, 120, 114, 117, 120, 115, 117, 120, 102, 117,
> - 120, 46, 117, 120, 103, 117, 120, 104, 117, 120,
> - 117, 120, 109, 117, 120, 109, 117, 120, 109, 117,
> - 120, 109, 117, 120, 109, 117, 120, 109, 117, 120,
> - 109, 117, 120, 109, 117, 120, 109, 117, 120, 109,
> - 117, 120, 109, 117, 120, 109, 117, 120, 10, 117,
> - 120, 10, 117, 118, 120, 10, 117, 120, 10, 117,
> - 120, 10, 117, 120, 10, 117, 120, 15, 117, 120,
> - 15, 117, 118, 120, 15, 117, 120, 15, 117, 120,
> -
> - 15, 117, 120, 15, 117, 120, 18, 117, 120, 18,
> - 117, 118, 120, 18, 117, 120, 18, 117, 120, 105,
> - 23, 105, 105, 108, 109, 109, 109, 109, 109, 36,
> - 109, 109, 28, 24, 44, 37, 47, 25, 109, 109,
> - 109, 63, 26, 112, 111, 109, 109, 109, 109, 109,
> - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
> - 109, 109, 109, 27, 109, 109, 109, 109, 109, 109,
> - 109, 109, 109, 109, 109, 109, 9, 7, 14, 13,
> - 11, 12, 14, 17, 16, 110, 110, 105, 3, 105,
> - 105, 108, 106, 107, 109, 109, 109, 109, 31, 35,
> -
> - 109, 109, 42, 38, 40, 19, 20, 109, 109, 109,
> - 80, 21, 109, 109, 109, 109, 109, 109, 109, 75,
> - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
> - 109, 109, 109, 22, 109, 109, 109, 109, 109, 109,
> - 109, 109, 109, 109, 109, 109, 12, 108, 106, 107,
> - 109, 57, 109, 109, 109, 32, 33, 34, 109, 109,
> - 43, 39, 41, 109, 61, 109, 60, 109, 6, 109,
> - 78, 109, 109, 109, 109, 70, 109, 109, 73, 109,
> - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
> - 109, 67, 109, 109, 109, 109, 70, 109, 109, 109,
> -
> - 109, 90, 109, 109, 109, 109, 96, 109, 8, 108,
> - 55, 109, 56, 109, 58, 109, 109, 109, 109, 60,
> - 109, 79, 109, 109, 76, 109, 109, 109, 109, 109,
> - 109, 74, 109, 109, 109, 109, 69, 109, 109, 109,
> - 91, 109, 109, 109, 109, 95, 109, 109, 109, 109,
> - 109, 109, 109, 109, 109, 77, 109, 109, 109, 109,
> - 109, 81, 109, 87, 109, 71, 109, 68, 109, 109,
> - 109, 109, 109, 109, 109, 109, 109, 109, 109, 4,
> - 109, 109, 109, 109, 109, 82, 109, 109, 109, 109,
> - 86, 109, 109, 109, 109, 109, 92, 109, 93, 109,
> -
> - 109, 109, 109, 109, 85, 109, 109, 88, 109, 89,
> - 109, 109, 72, 109, 109, 109, 109, 109, 109, 109,
> - 84, 109, 83, 109, 109, 109, 98, 109, 109, 109,
> - 109, 4, 2, 100, 109, 109, 97, 109, 109, 99,
> - 109, 119, 5, 109, 101, 109, 109, 94, 109, 59
> - } ;
> -
> -static yyconst flex_int16_t yy_accept[552] =
> - { 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, 2, 4, 7, 10, 13,
> - 15, 17, 19, 22, 25, 27, 30, 33, 36, 39,
> - 42, 44, 46, 49, 52, 55, 59, 63, 66, 69,
> - 72, 75, 79, 83, 87, 90, 93, 96, 100, 104,
> - 107, 110, 113, 117, 121, 125, 128, 131, 134, 136,
> - 139, 142, 145, 148, 151, 155, 159, 163, 166, 169,
> - 171, 173, 175, 177, 180, 183, 186, 189, 192, 195,
> - 198, 201, 204, 207, 210, 213, 216, 219, 222, 225,
> -
> - 228, 231, 233, 236, 239, 242, 245, 248, 251, 254,
> - 257, 260, 263, 266, 269, 272, 276, 279, 282, 285,
> - 288, 291, 295, 298, 301, 304, 307, 310, 314, 317,
> - 320, 320, 320, 321, 322, 322, 322, 323, 323, 323,
> - 324, 325, 326, 326, 327, 328, 329, 330, 330, 330,
> - 330, 330, 330, 330, 330, 330, 331, 332, 333, 334,
> - 334, 334, 334, 334, 334, 335, 335, 336, 336, 336,
> - 337, 338, 339, 339, 340, 341, 342, 343, 343, 344,
> - 344, 345, 345, 345, 346, 347, 348, 349, 350, 351,
> - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
> -
> - 362, 363, 364, 365, 365, 366, 367, 368, 369, 370,
> - 371, 372, 373, 374, 375, 376, 377, 378, 378, 378,
> - 378, 379, 379, 380, 380, 380, 381, 382, 382, 384,
> - 385, 386, 387, 387, 388, 389, 389, 390, 391, 392,
> - 393, 393, 394, 395, 396, 397, 398, 399, 399, 399,
> - 399, 399, 399, 400, 400, 400, 401, 401, 401, 402,
> - 403, 403, 404, 404, 404, 404, 405, 406, 406, 407,
> - 407, 407, 408, 409, 410, 411, 412, 412, 412, 413,
> - 413, 413, 414, 415, 416, 417, 418, 419, 420, 422,
> - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432,
> -
> - 433, 434, 434, 435, 436, 437, 438, 439, 440, 441,
> - 442, 443, 444, 445, 446, 447, 447, 448, 448, 449,
> - 450, 450, 451, 451, 452, 454, 455, 456, 456, 456,
> - 456, 456, 457, 457, 458, 459, 459, 460, 461, 461,
> - 462, 463, 464, 464, 465, 467, 469, 469, 470, 471,
> - 473, 474, 475, 476, 478, 479, 481, 482, 483, 484,
> - 485, 486, 487, 488, 489, 490, 491, 492, 494, 495,
> - 496, 497, 499, 500, 501, 502, 504, 505, 506, 507,
> - 509, 509, 510, 510, 510, 511, 513, 515, 517, 517,
> - 517, 517, 517, 517, 517, 518, 519, 519, 519, 520,
> -
> - 522, 524, 525, 527, 528, 529, 530, 531, 532, 534,
> - 535, 536, 537, 539, 540, 541, 543, 544, 545, 546,
> - 548, 549, 550, 551, 552, 552, 552, 552, 552, 552,
> - 552, 553, 554, 554, 554, 555, 556, 558, 559, 560,
> - 561, 562, 564, 566, 568, 570, 571, 572, 573, 574,
> - 575, 576, 577, 578, 579, 580, 580, 580, 581, 581,
> - 581, 582, 583, 583, 583, 584, 585, 586, 588, 589,
> - 590, 591, 593, 594, 595, 596, 597, 599, 601, 602,
> - 603, 603, 603, 603, 603, 603, 604, 605, 605, 605,
> - 607, 608, 610, 612, 613, 615, 616, 617, 618, 619,
> -
> - 620, 621, 621, 621, 621, 621, 621, 621, 621, 621,
> - 621, 621, 623, 625, 626, 627, 629, 630, 631, 632,
> - 632, 633, 633, 633, 633, 633, 634, 634, 636, 637,
> - 639, 640, 642, 642, 642, 643, 643, 643, 644, 645,
> - 647, 647, 647, 648, 648, 648, 650, 650, 650, 651,
> - 651
> - } ;
> -
> -static yyconst flex_int32_t yy_ec[256] =
> - { 0,
> - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
> - 1, 4, 5, 1, 1, 1, 1, 1, 1, 1,
> - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> - 1, 6, 1, 7, 8, 1, 9, 1, 10, 11,
> - 12, 13, 1, 1, 1, 14, 15, 16, 17, 18,
> - 18, 18, 18, 18, 18, 19, 19, 20, 1, 21,
> - 1, 22, 1, 1, 23, 23, 23, 23, 24, 23,
> - 25, 25, 26, 25, 25, 25, 25, 25, 25, 25,
> - 25, 27, 28, 25, 25, 25, 25, 25, 25, 25,
> - 29, 30, 31, 1, 32, 1, 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, 25, 58, 1, 59, 1, 1, 1, 1, 1,
> - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> -
> - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> - 1, 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[60] =
> - { 0,
> - 1, 2, 3, 4, 4, 2, 1, 1, 1, 1,
> - 1, 1, 1, 1, 1, 5, 5, 5, 5, 6,
> - 1, 1, 7, 7, 8, 8, 8, 8, 1, 1,
> - 9, 8, 7, 7, 7, 7, 7, 7, 8, 8,
> - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
> - 8, 8, 8, 8, 8, 8, 8, 1, 1
> - } ;
> -
> -static yyconst flex_int16_t yy_base[585] =
> - { 0,
> - 0, 58, 58, 65, 69, 126, 80, 85, 74, 87,
> - 93, 113, 172, 1318, 131, 136, 225, 1317, 100, 147,
> - 135, 159, 175, 190, 1324, 1327, 1327, 1327, 1327, 1293,
> - 225, 62, 231, 237, 0, 1302, 42, 150, 60, 232,
> - 63, 164, 156, 77, 1327, 1327, 1327, 1306, 173, 1292,
> - 1327, 1327, 1327, 1327, 245, 104, 0, 1327, 1327, 279,
> - 1260, 1327, 1327, 1327, 1327, 0, 262, 1327, 144, 110,
> - 161, 143, 1327, 1327, 1327, 1327, 1327, 0, 282, 275,
> - 214, 279, 283, 171, 285, 263, 182, 138, 219, 266,
> - 179, 287, 295, 270, 292, 1327, 1327, 1327, 1327, 1327,
> -
> - 1327, 296, 297, 298, 311, 288, 170, 310, 226, 308,
> - 326, 329, 299, 307, 1327, 1327, 1303, 351, 359, 360,
> - 1327, 1327, 1302, 365, 366, 371, 1313, 1312, 373, 377,
> - 1304, 1303, 373, 1327, 1309, 377, 383, 390, 0, 397,
> - 1291, 1290, 1289, 365, 302, 332, 385, 417, 1258, 1270,
> - 418, 1265, 373, 375, 310, 1327, 198, 402, 1327, 0,
> - 1295, 380, 1294, 1293, 1327, 1299, 1327, 428, 1255, 1327,
> - 1327, 1327, 1297, 408, 406, 409, 1327, 1285, 1285, 1294,
> - 426, 430, 1265, 1266, 62, 435, 437, 412, 420, 432,
> - 416, 434, 436, 237, 440, 444, 446, 451, 439, 454,
> -
> - 456, 455, 1327, 1291, 457, 459, 460, 463, 464, 468,
> - 471, 472, 479, 480, 474, 481, 1327, 506, 520, 525,
> - 1327, 530, 1327, 512, 532, 537, 1327, 1278, 1327, 1327,
> - 1327, 1327, 1282, 1281, 532, 1287, 1327, 536, 0, 1269,
> - 0, 1268, 1267, 517, 521, 522, 524, 1249, 1236, 1238,
> - 1239, 1224, 1327, 1248, 1222, 1327, 1221, 1237, 526, 536,
> - 1250, 1327, 1266, 1265, 1264, 1327, 1327, 1270, 1327, 1237,
> - 1268, 1327, 537, 538, 540, 1327, 559, 1267, 1327, 1238,
> - 554, 544, 554, 547, 555, 556, 557, 559, 1248, 560,
> - 558, 561, 562, 567, 566, 573, 564, 574, 581, 575,
> -
> - 484, 1264, 1327, 576, 583, 580, 585, 589, 592, 598,
> - 603, 587, 605, 609, 611, 634, 1327, 639, 1246, 1245,
> - 1244, 1243, 1242, 612, 1241, 614, 615, 1227, 1206, 1221,
> - 451, 1327, 1221, 1327, 1327, 1202, 623, 624, 1229, 1327,
> - 1327, 1327, 1210, 627, 1233, 1232, 647, 1327, 631, 1231,
> - 632, 636, 637, 1230, 638, 1229, 639, 640, 642, 648,
> - 641, 649, 654, 651, 650, 655, 652, 1228, 664, 657,
> - 660, 672, 675, 677, 679, 1227, 680, 682, 683, 1226,
> - 704, 1327, 715, 706, 1225, 1224, 1223, 1222, 1197, 1199,
> - 717, 1192, 1201, 1204, 694, 691, 0, 1183, 696, 705,
> -
> - 1215, 708, 1214, 709, 710, 711, 712, 714, 1213, 719,
> - 716, 717, 1212, 720, 722, 1211, 724, 723, 726, 733,
> - 728, 731, 734, 738, 1186, 1179, 771, 1180, 1177, 1168,
> - 744, 737, 1188, 1175, 739, 751, 1182, 759, 756, 748,
> - 752, 1171, 1156, 1155, 1154, 760, 755, 762, 763, 774,
> - 776, 778, 781, 785, 782, 1112, 1087, 819, 751, 1076,
> - 787, 788, 1085, 1053, 790, 791, 792, 1062, 786, 793,
> - 796, 1053, 798, 813, 799, 800, 1044, 1029, 804, 820,
> - 944, 927, 970, 929, 935, 842, 844, 834, 852, 954,
> - 829, 953, 951, 839, 919, 821, 840, 841, 843, 845,
> -
> - 847, 866, 868, 931, 853, 851, 880, 887, 891, 899,
> - 864, 867, 861, 853, 859, 860, 863, 864, 893, 869,
> - 1327, 469, 917, 908, 925, 1327, 907, 417, 901, 415,
> - 911, 304, 285, 944, 1327, 935, 933, 1327, 908, 238,
> - 178, 946, 912, 127, 940, 117, 964, 966, 1327, 1327,
> - 983, 992, 1001, 1010, 1019, 1028, 1037, 1046, 1049, 1053,
> - 1061, 1070, 1079, 1084, 1093, 1102, 1107, 1110, 1113, 1121,
> - 1130, 1139, 1148, 1153, 1162, 1170, 1172, 1176, 1180, 1187,
> - 1191, 1199, 1208, 1217
> - } ;
> -
> -static yyconst flex_int16_t yy_def[585] =
> - { 0,
> - 550, 1, 551, 551, 552, 552, 553, 553, 1, 1,
> - 554, 554, 1, 13, 1, 1, 1, 17, 555, 555,
> - 556, 556, 557, 557, 550, 550, 550, 550, 550, 558,
> - 550, 550, 550, 550, 559, 560, 560, 560, 560, 550,
> - 550, 550, 560, 560, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 561, 550, 550, 550,
> - 550, 550, 550, 550, 550, 562, 550, 550, 550, 560,
> - 560, 560, 550, 550, 550, 550, 550, 563, 550, 550,
> - 550, 559, 564, 560, 560, 560, 560, 560, 560, 560,
> - 560, 560, 560, 560, 560, 550, 550, 550, 550, 550,
> -
> - 550, 550, 560, 560, 560, 560, 560, 560, 560, 560,
> - 560, 560, 560, 560, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550,
> - 550, 565, 550, 550, 566, 550, 550, 550, 567, 550,
> - 568, 560, 569, 560, 560, 560, 560, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 560, 560, 550, 570,
> - 550, 550, 550, 550, 550, 571, 550, 550, 550, 550,
> - 550, 550, 572, 560, 560, 560, 550, 550, 550, 573,
> - 550, 550, 574, 550, 560, 560, 560, 560, 560, 560,
> - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560,
> -
> - 560, 560, 550, 575, 560, 560, 560, 560, 560, 560,
> - 560, 560, 560, 560, 560, 560, 550, 550, 550, 550,
> - 550, 576, 550, 550, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 566, 550, 550, 567, 568,
> - 577, 578, 579, 560, 560, 560, 560, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 550, 550, 560, 560,
> - 550, 550, 550, 550, 550, 550, 550, 571, 550, 550,
> - 572, 550, 560, 560, 560, 550, 550, 573, 550, 574,
> - 564, 560, 560, 560, 560, 560, 560, 560, 560, 560,
> - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560,
> -
> - 560, 575, 550, 560, 560, 560, 560, 560, 560, 560,
> - 560, 560, 560, 560, 560, 580, 550, 550, 581, 578,
> - 550, 579, 569, 560, 560, 560, 560, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 560, 560, 550, 550,
> - 550, 550, 550, 560, 560, 560, 550, 550, 560, 560,
> - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560,
> - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560,
> - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560,
> - 550, 550, 580, 550, 581, 560, 560, 560, 550, 550,
> - 550, 550, 550, 550, 560, 560, 582, 550, 560, 560,
> -
> - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560,
> - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560,
> - 560, 560, 560, 560, 550, 550, 550, 550, 550, 550,
> - 560, 560, 550, 550, 560, 560, 560, 560, 560, 560,
> - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560,
> - 560, 560, 560, 560, 560, 550, 550, 550, 550, 550,
> - 560, 560, 550, 550, 560, 560, 560, 560, 560, 560,
> - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560,
> - 550, 550, 550, 550, 550, 560, 560, 550, 550, 560,
> - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560,
> -
> - 560, 550, 550, 583, 550, 550, 550, 550, 550, 550,
> - 550, 560, 560, 560, 560, 560, 560, 560, 560, 583,
> - 550, 550, 550, 550, 550, 550, 584, 560, 560, 560,
> - 560, 560, 550, 550, 550, 550, 584, 550, 560, 560,
> - 550, 550, 560, 550, 550, 560, 550, 550, 550, 0,
> - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550
> - } ;
> -
> -static yyconst flex_int16_t yy_nxt[1387] =
> - { 0,
> - 26, 27, 28, 27, 29, 27, 26, 26, 26, 30,
> - 26, 26, 26, 31, 32, 33, 34, 34, 34, 35,
> - 26, 26, 36, 36, 36, 36, 36, 36, 26, 26,
> - 26, 36, 36, 36, 37, 36, 38, 39, 36, 36,
> - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
> - 36, 36, 36, 36, 36, 36, 36, 26, 26, 40,
> - 46, 143, 47, 40, 151, 41, 42, 46, 151, 47,
> - 48, 52, 49, 53, 134, 54, 135, 48, 55, 143,
> - 68, 143, 63, 56, 64, 144, 65, 63, 69, 64,
> - 50, 65, 67, 68, 41, 75, 143, 76, 57, 77,
> -
> - 282, 69, 28, 147, 116, 43, 152, 44, 70, 66,
> - 36, 71, 117, 158, 66, 75, 165, 76, 166, 77,
> - 79, 70, 78, 36, 71, 72, 58, 59, 52, 143,
> - 53, 73, 54, 60, 61, 55, 143, 28, 72, 122,
> - 56, 98, 78, 41, 73, 26, 98, 123, 118, 28,
> - 26, 116, 118, 174, 119, 57, 172, 143, 173, 120,
> - 124, 28, 143, 122, 124, 36, 125, 36, 36, 143,
> - 36, 126, 36, 36, 151, 143, 257, 28, 151, 128,
> - 143, 191, 176, 58, 59, 80, 81, 129, 96, 143,
> - 143, 82, 28, 96, 128, 145, 153, 130, 143, 146,
> -
> - 83, 143, 129, 154, 84, 157, 85, 86, 87, 88,
> - 175, 155, 89, 209, 544, 90, 152, 143, 91, 92,
> - 185, 156, 93, 72, 94, 95, 179, 190, 180, 96,
> - 97, 99, 194, 148, 259, 100, 101, 148, 143, 102,
> - 133, 133, 133, 133, 136, 143, 137, 137, 137, 138,
> - 136, 161, 140, 140, 140, 140, 143, 143, 103, 104,
> - 105, 106, 107, 151, 192, 89, 212, 151, 90, 108,
> - 109, 110, 111, 291, 162, 112, 113, 94, 114, 149,
> - 168, 150, 143, 151, 168, 143, 139, 151, 178, 143,
> - 133, 133, 133, 133, 181, 181, 181, 181, 182, 182,
> -
> - 182, 182, 163, 164, 143, 152, 143, 143, 203, 189,
> - 204, 143, 193, 184, 143, 200, 143, 143, 143, 169,
> - 541, 143, 152, 143, 186, 152, 143, 143, 187, 143,
> - 143, 188, 201, 208, 197, 198, 195, 186, 202, 196,
> - 205, 213, 210, 206, 188, 143, 199, 207, 143, 257,
> - 211, 143, 218, 202, 245, 216, 218, 189, 214, 258,
> - 151, 220, 221, 219, 151, 222, 224, 151, 197, 215,
> - 224, 151, 226, 227, 217, 230, 226, 225, 151, 230,
> - 199, 246, 151, 228, 143, 229, 263, 231, 235, 235,
> - 235, 235, 238, 238, 238, 238, 136, 244, 137, 137,
> -
> - 137, 138, 152, 136, 143, 138, 138, 138, 138, 152,
> - 136, 254, 140, 140, 140, 140, 251, 247, 148, 151,
> - 152, 143, 148, 151, 252, 143, 255, 143, 143, 168,
> - 253, 143, 256, 168, 143, 143, 143, 264, 265, 143,
> - 273, 181, 181, 181, 181, 182, 182, 182, 182, 275,
> - 260, 143, 274, 143, 143, 143, 143, 285, 143, 143,
> - 184, 152, 288, 143, 149, 143, 150, 283, 169, 284,
> - 143, 152, 286, 143, 143, 143, 143, 294, 143, 143,
> - 292, 290, 143, 143, 287, 289, 293, 143, 297, 296,
> - 143, 143, 295, 143, 298, 301, 308, 306, 143, 143,
> -
> - 143, 533, 392, 143, 299, 300, 311, 218, 253, 304,
> - 288, 218, 314, 224, 305, 307, 310, 224, 219, 368,
> - 312, 220, 221, 309, 225, 222, 220, 221, 315, 313,
> - 220, 220, 221, 226, 227, 220, 143, 226, 318, 227,
> - 143, 143, 318, 143, 228, 143, 317, 235, 235, 235,
> - 235, 238, 238, 238, 238, 143, 143, 143, 337, 143,
> - 347, 348, 327, 143, 347, 325, 143, 324, 326, 182,
> - 182, 182, 182, 143, 143, 143, 143, 143, 143, 143,
> - 143, 143, 345, 143, 184, 143, 143, 344, 338, 353,
> - 346, 355, 143, 143, 143, 143, 349, 351, 356, 143,
> -
> - 143, 354, 143, 350, 143, 352, 143, 357, 143, 359,
> - 361, 143, 371, 360, 358, 362, 364, 143, 363, 370,
> - 365, 366, 143, 377, 143, 369, 367, 373, 143, 372,
> - 143, 143, 374, 143, 143, 381, 382, 378, 375, 381,
> - 318, 227, 143, 143, 318, 376, 143, 380, 347, 348,
> - 143, 143, 347, 384, 379, 143, 143, 143, 143, 143,
> - 143, 143, 386, 387, 396, 388, 395, 143, 143, 143,
> - 143, 143, 405, 143, 143, 399, 143, 346, 406, 143,
> - 402, 408, 400, 143, 407, 412, 410, 401, 404, 403,
> - 411, 143, 417, 414, 143, 413, 143, 416, 143, 143,
> -
> - 409, 143, 143, 419, 415, 381, 382, 381, 382, 381,
> - 143, 381, 418, 143, 423, 143, 381, 382, 427, 411,
> - 381, 421, 427, 422, 143, 420, 424, 143, 143, 143,
> - 143, 143, 435, 143, 384, 143, 143, 431, 143, 143,
> - 432, 143, 143, 143, 437, 143, 441, 143, 442, 438,
> - 143, 444, 143, 143, 447, 448, 143, 143, 143, 436,
> - 440, 439, 443, 143, 451, 446, 449, 143, 445, 455,
> - 143, 143, 427, 462, 143, 143, 427, 450, 143, 143,
> - 452, 143, 143, 453, 465, 454, 458, 458, 458, 458,
> - 461, 466, 468, 143, 467, 143, 471, 143, 472, 469,
> -
> - 143, 143, 484, 470, 143, 143, 143, 143, 256, 143,
> - 143, 143, 143, 473, 474, 143, 479, 143, 143, 143,
> - 483, 486, 477, 143, 483, 478, 491, 476, 492, 494,
> - 475, 495, 143, 480, 458, 458, 458, 458, 487, 143,
> - 143, 490, 493, 507, 497, 508, 498, 507, 143, 508,
> - 509, 510, 510, 511, 496, 500, 499, 511, 143, 143,
> - 143, 143, 143, 143, 143, 512, 143, 507, 514, 508,
> - 527, 507, 143, 508, 513, 521, 501, 516, 143, 143,
> - 143, 507, 143, 143, 527, 507, 143, 522, 508, 528,
> - 517, 529, 508, 515, 519, 523, 523, 523, 523, 530,
> -
> - 255, 518, 524, 524, 524, 524, 525, 525, 525, 525,
> - 526, 531, 143, 538, 525, 525, 525, 525, 534, 535,
> - 143, 536, 534, 524, 524, 524, 524, 143, 538, 532,
> - 143, 143, 523, 523, 523, 523, 526, 521, 143, 538,
> - 525, 525, 525, 525, 539, 534, 535, 540, 546, 534,
> - 542, 542, 542, 542, 538, 547, 547, 547, 547, 545,
> - 543, 542, 542, 542, 542, 548, 549, 548, 549, 548,
> - 143, 548, 143, 143, 506, 505, 504, 503, 502, 547,
> - 547, 547, 547, 45, 45, 45, 45, 45, 45, 45,
> - 45, 45, 51, 51, 51, 51, 51, 51, 51, 51,
> -
> - 51, 62, 62, 62, 62, 62, 62, 62, 62, 62,
> - 74, 74, 74, 74, 74, 74, 74, 74, 74, 115,
> - 115, 115, 115, 115, 115, 115, 115, 115, 121, 121,
> - 121, 121, 121, 121, 121, 121, 121, 127, 127, 127,
> - 127, 127, 127, 127, 127, 127, 131, 131, 143, 131,
> - 131, 131, 131, 131, 131, 141, 141, 142, 142, 142,
> - 142, 167, 167, 143, 167, 167, 167, 167, 167, 167,
> - 171, 171, 143, 171, 171, 171, 171, 171, 171, 177,
> - 177, 143, 177, 177, 177, 177, 177, 177, 183, 489,
> - 183, 183, 183, 233, 233, 488, 233, 233, 233, 233,
> -
> - 233, 233, 236, 236, 236, 236, 236, 236, 236, 236,
> - 236, 239, 485, 239, 240, 240, 240, 240, 243, 243,
> - 243, 261, 261, 482, 261, 261, 261, 261, 261, 261,
> - 268, 268, 268, 268, 268, 268, 268, 268, 268, 271,
> - 271, 271, 271, 271, 271, 271, 271, 271, 278, 278,
> - 278, 278, 278, 278, 278, 278, 278, 280, 481, 280,
> - 280, 280, 302, 302, 302, 302, 302, 302, 302, 302,
> - 302, 316, 316, 143, 143, 143, 316, 316, 319, 319,
> - 320, 320, 320, 320, 322, 322, 322, 322, 383, 383,
> - 143, 383, 383, 383, 383, 385, 385, 385, 385, 433,
> -
> - 433, 143, 433, 433, 433, 433, 433, 433, 520, 520,
> - 464, 463, 520, 520, 520, 520, 520, 537, 537, 460,
> - 537, 537, 537, 537, 537, 537, 459, 252, 457, 456,
> - 143, 143, 143, 143, 143, 434, 430, 429, 428, 426,
> - 425, 143, 143, 143, 241, 143, 143, 143, 143, 143,
> - 143, 143, 143, 398, 397, 394, 393, 391, 390, 389,
> - 143, 550, 323, 242, 321, 241, 303, 143, 184, 279,
> - 272, 343, 269, 342, 341, 340, 339, 336, 335, 334,
> - 333, 332, 331, 330, 329, 328, 323, 321, 241, 237,
> - 232, 232, 317, 303, 281, 184, 279, 277, 276, 272,
> -
> - 270, 269, 267, 266, 262, 250, 249, 248, 242, 143,
> - 241, 237, 234, 232, 230, 230, 223, 217, 170, 160,
> - 159, 143, 132, 550, 41, 41, 25, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550
> - } ;
> -
> -static yyconst flex_int16_t yy_chk[1387] =
> - { 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, 2,
> - 3, 37, 3, 2, 41, 2, 2, 4, 41, 4,
> - 3, 5, 4, 5, 32, 5, 32, 4, 5, 39,
> - 9, 185, 7, 5, 7, 37, 7, 8, 9, 8,
> - 4, 8, 8, 10, 10, 11, 44, 11, 5, 11,
> -
> - 185, 10, 19, 39, 19, 2, 41, 2, 9, 7,
> - 9, 9, 19, 44, 8, 12, 56, 12, 56, 12,
> - 12, 10, 11, 10, 10, 9, 5, 5, 6, 70,
> - 6, 9, 6, 6, 6, 6, 546, 21, 10, 21,
> - 6, 15, 12, 16, 10, 15, 16, 21, 20, 20,
> - 16, 20, 20, 70, 20, 6, 69, 88, 69, 20,
> - 22, 22, 72, 22, 22, 15, 22, 15, 15, 38,
> - 16, 22, 16, 16, 49, 43, 544, 23, 49, 23,
> - 71, 88, 72, 6, 6, 13, 13, 23, 15, 107,
> - 84, 13, 24, 16, 24, 38, 42, 24, 91, 38,
> -
> - 13, 87, 24, 42, 13, 43, 13, 13, 13, 13,
> - 71, 42, 13, 107, 541, 13, 49, 157, 13, 13,
> - 84, 42, 13, 13, 13, 13, 81, 87, 81, 13,
> - 13, 17, 91, 40, 157, 17, 17, 40, 89, 17,
> - 31, 31, 31, 31, 33, 109, 33, 33, 33, 33,
> - 34, 55, 34, 34, 34, 34, 194, 540, 17, 17,
> - 17, 17, 17, 67, 89, 17, 109, 67, 17, 17,
> - 17, 17, 17, 194, 55, 17, 17, 17, 17, 40,
> - 60, 40, 86, 79, 60, 90, 33, 79, 80, 94,
> - 80, 80, 80, 80, 82, 82, 82, 82, 83, 83,
> -
> - 83, 83, 55, 55, 85, 67, 92, 106, 102, 86,
> - 102, 95, 90, 83, 93, 94, 103, 104, 113, 60,
> - 533, 145, 60, 532, 85, 79, 114, 110, 85, 108,
> - 105, 85, 95, 106, 93, 93, 92, 104, 95, 92,
> - 103, 110, 108, 103, 104, 111, 93, 105, 112, 155,
> - 108, 146, 118, 114, 145, 113, 118, 105, 111, 155,
> - 119, 120, 120, 118, 119, 120, 124, 125, 112, 112,
> - 124, 125, 126, 126, 120, 129, 126, 124, 130, 130,
> - 112, 146, 130, 126, 144, 126, 162, 129, 133, 133,
> - 133, 133, 136, 136, 136, 136, 137, 144, 137, 137,
> -
> - 137, 137, 119, 138, 147, 138, 138, 138, 138, 125,
> - 140, 154, 140, 140, 140, 140, 153, 147, 148, 151,
> - 130, 158, 148, 151, 153, 175, 154, 174, 176, 168,
> - 153, 188, 154, 168, 530, 191, 528, 162, 162, 189,
> - 174, 181, 181, 181, 181, 182, 182, 182, 182, 176,
> - 158, 190, 175, 192, 186, 193, 187, 188, 199, 195,
> - 182, 151, 191, 196, 148, 197, 148, 186, 168, 187,
> - 198, 168, 189, 200, 202, 201, 205, 196, 206, 207,
> - 195, 193, 208, 209, 190, 192, 195, 210, 199, 198,
> - 211, 212, 197, 215, 200, 202, 209, 207, 213, 214,
> -
> - 216, 522, 331, 301, 200, 201, 212, 218, 331, 205,
> - 209, 218, 215, 224, 206, 208, 211, 224, 218, 301,
> - 213, 219, 219, 210, 224, 219, 220, 220, 216, 214,
> - 220, 222, 222, 225, 225, 222, 244, 225, 226, 226,
> - 245, 246, 226, 247, 225, 259, 225, 235, 235, 235,
> - 235, 238, 238, 238, 238, 260, 273, 274, 259, 275,
> - 277, 277, 247, 282, 277, 245, 284, 244, 246, 281,
> - 281, 281, 281, 283, 285, 286, 287, 291, 288, 290,
> - 292, 293, 274, 297, 281, 295, 294, 273, 260, 286,
> - 275, 288, 296, 298, 300, 304, 282, 284, 290, 306,
> -
> - 299, 287, 305, 283, 307, 285, 312, 291, 308, 293,
> - 294, 309, 306, 293, 292, 295, 297, 310, 296, 305,
> - 298, 299, 311, 312, 313, 304, 300, 308, 314, 307,
> - 315, 324, 309, 326, 327, 316, 316, 313, 310, 316,
> - 318, 318, 337, 338, 318, 311, 344, 315, 347, 347,
> - 349, 351, 347, 316, 314, 352, 353, 355, 357, 358,
> - 361, 359, 324, 326, 338, 327, 337, 360, 362, 365,
> - 364, 367, 358, 363, 366, 349, 370, 344, 359, 371,
> - 353, 361, 351, 369, 360, 364, 363, 352, 357, 355,
> - 363, 372, 370, 366, 373, 365, 374, 369, 375, 377,
> -
> - 362, 378, 379, 372, 367, 381, 381, 384, 384, 381,
> - 396, 384, 371, 395, 377, 399, 383, 383, 391, 379,
> - 383, 374, 391, 375, 400, 373, 378, 402, 404, 405,
> - 406, 407, 399, 408, 383, 411, 412, 395, 410, 414,
> - 396, 415, 418, 417, 402, 419, 407, 421, 408, 404,
> - 422, 411, 420, 423, 415, 417, 432, 424, 435, 400,
> - 406, 405, 410, 431, 420, 414, 418, 440, 412, 424,
> - 436, 441, 427, 432, 447, 439, 427, 419, 438, 446,
> - 421, 448, 449, 422, 435, 423, 427, 427, 427, 427,
> - 431, 436, 439, 450, 438, 451, 446, 452, 447, 440,
> -
> - 453, 455, 459, 441, 454, 469, 461, 462, 459, 465,
> - 466, 467, 470, 448, 449, 471, 454, 473, 475, 476,
> - 458, 461, 452, 479, 458, 453, 466, 451, 467, 470,
> - 450, 471, 474, 455, 458, 458, 458, 458, 462, 480,
> - 496, 465, 469, 486, 474, 487, 475, 486, 491, 487,
> - 488, 488, 488, 489, 473, 479, 476, 489, 494, 497,
> - 498, 486, 499, 487, 500, 491, 501, 502, 496, 503,
> - 511, 502, 514, 503, 494, 520, 480, 498, 515, 516,
> - 513, 507, 517, 518, 511, 507, 512, 506, 508, 514,
> - 499, 515, 508, 497, 501, 507, 507, 507, 507, 517,
> -
> - 505, 500, 508, 508, 508, 508, 509, 509, 509, 509,
> - 510, 518, 519, 527, 510, 510, 510, 510, 523, 523,
> - 529, 524, 523, 524, 524, 524, 524, 539, 527, 519,
> - 531, 543, 523, 523, 523, 523, 525, 504, 495, 537,
> - 525, 525, 525, 525, 529, 534, 534, 531, 543, 534,
> - 536, 536, 536, 536, 537, 545, 545, 545, 545, 542,
> - 539, 542, 542, 542, 542, 547, 547, 548, 548, 547,
> - 493, 548, 492, 490, 485, 484, 483, 482, 481, 547,
> - 547, 547, 547, 551, 551, 551, 551, 551, 551, 551,
> - 551, 551, 552, 552, 552, 552, 552, 552, 552, 552,
> -
> - 552, 553, 553, 553, 553, 553, 553, 553, 553, 553,
> - 554, 554, 554, 554, 554, 554, 554, 554, 554, 555,
> - 555, 555, 555, 555, 555, 555, 555, 555, 556, 556,
> - 556, 556, 556, 556, 556, 556, 556, 557, 557, 557,
> - 557, 557, 557, 557, 557, 557, 558, 558, 478, 558,
> - 558, 558, 558, 558, 558, 559, 559, 560, 560, 560,
> - 560, 561, 561, 477, 561, 561, 561, 561, 561, 561,
> - 562, 562, 472, 562, 562, 562, 562, 562, 562, 563,
> - 563, 468, 563, 563, 563, 563, 563, 563, 564, 464,
> - 564, 564, 564, 565, 565, 463, 565, 565, 565, 565,
> -
> - 565, 565, 566, 566, 566, 566, 566, 566, 566, 566,
> - 566, 567, 460, 567, 568, 568, 568, 568, 569, 569,
> - 569, 570, 570, 457, 570, 570, 570, 570, 570, 570,
> - 571, 571, 571, 571, 571, 571, 571, 571, 571, 572,
> - 572, 572, 572, 572, 572, 572, 572, 572, 573, 573,
> - 573, 573, 573, 573, 573, 573, 573, 574, 456, 574,
> - 574, 574, 575, 575, 575, 575, 575, 575, 575, 575,
> - 575, 576, 576, 445, 444, 443, 576, 576, 577, 577,
> - 578, 578, 578, 578, 579, 579, 579, 579, 580, 580,
> - 442, 580, 580, 580, 580, 581, 581, 581, 581, 582,
> -
> - 582, 437, 582, 582, 582, 582, 582, 582, 583, 583,
> - 434, 433, 583, 583, 583, 583, 583, 584, 584, 430,
> - 584, 584, 584, 584, 584, 584, 429, 428, 426, 425,
> - 416, 413, 409, 403, 401, 398, 394, 393, 392, 390,
> - 389, 388, 387, 386, 385, 380, 376, 368, 356, 354,
> - 350, 346, 345, 343, 339, 336, 333, 330, 329, 328,
> - 325, 323, 322, 321, 320, 319, 302, 289, 280, 278,
> - 271, 270, 268, 265, 264, 263, 261, 258, 257, 255,
> - 254, 252, 251, 250, 249, 248, 243, 242, 240, 236,
> - 234, 233, 228, 204, 184, 183, 180, 179, 178, 173,
> -
> - 169, 166, 164, 163, 161, 152, 150, 149, 143, 142,
> - 141, 135, 132, 131, 128, 127, 123, 117, 61, 50,
> - 48, 36, 30, 25, 18, 14, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550,
> - 550, 550, 550, 550, 550, 550
> - } ;
> -
> -extern int yy_flex_debug;
> -int yy_flex_debug = 0;
> -
> -static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
> -static char *yy_full_match;
> -static int yy_lp;
> -#define REJECT \
> -{ \
> -*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ \
> -yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
> -++(yy_lp); \
> -goto find_rule; \
> -}
> -
> -#define yymore() yymore_used_but_not_detected
> -#define YY_MORE_ADJ 0
> -#define YY_RESTORE_YY_MORE_OFFSET
> -char *yytext;
> -#line 1 "lexer.l"
> -/* GOB C Preprocessor
> - * Copyright (C) 1999 the Free Software Foundation.
> - *
> - * Author: George Lebl
> - *
> - * 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 2 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, write to the Free Software
> - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> - * USA.
> - */
> -#line 22 "lexer.l"
> -
> -#include "config.h"
> -#include <stdlib.h>
> -#include <string.h>
> -#include <ctype.h>
> -#include <glib.h>
> -
> -#include "treefuncs.h"
> -#include "parse.h"
> -#include "main.h"
> -#include "util.h"
> -
> -static int parenth_depth = 0;
> -static int before_comment
> -/* New flex is on drugs */
> -#if defined(FLEX_SCANNER) && ! defined(INITIAL)
> - = 0;
> -#else
> - = INITIAL;
> -#endif
> -static gboolean class_after_c = FALSE;
> -static int code_type = CCODE;
> -static int before_string;
> -static int property_paren_depth = 0;
> -
> -/* GTK+ doc stuff */
> -static char *gtk_doc_func = NULL; /* current gtk-doc func */
> -GHashTable *gtk_doc_hash = NULL;
> -
> -static GString *cbuf = NULL;
> -int ccode_line = 1;
> -
> -GList *include_files = NULL;
> -/* 0 no, 1 means yes, 2+ means don't even start looking anymore */
> -static int look_for_includes = 0;
> -
> -int line_no = 1;
> -/* last filename parsed from a #line directive */
> -char *hline_filename = NULL;
> -
> -static void
> -clear_cbuf(void)
> -{
> - if(!cbuf) {
> - cbuf = g_string_new(NULL);
> - } else {
> - cbuf = g_string_assign(cbuf, "");
> - }
> -}
> -
> -static void
> -add_to_cbuf(char *s)
> -{
> - if(!cbuf) {
> - cbuf = g_string_new(s);
> - } else {
> - cbuf = g_string_append(cbuf,s);
> - }
> -}
> -
> -static void
> -add_gtk_doc_func(void)
> -{
> - if(!gtk_doc_func)
> - return;
> -
> - if(!gtk_doc_hash)
> - gtk_doc_hash = g_hash_table_new(g_str_hash, g_str_equal);
> - g_hash_table_insert(gtk_doc_hash, gtk_doc_func, g_strdup(cbuf->str));
> - clear_cbuf();
> -
> - gtk_doc_func = NULL;
> -}
> -
> -/* Ugly warning avoiding */
> -#ifdef FLEX_SCANNER
> -int yylex(void);
> -#endif
> -
> -
> -
> -
> -
> -
> -
> -
> -
> -
> -
> -
> -#line 1124 "lex.yy.c"
> -
> -#define INITIAL 0
> -#define COMMENT 1
> -#define C_CODE 2
> -#define CODE_STRING 3
> -#define CLASS_CODE 4
> -#define CLASS_STRING 5
> -#define CLASS_CODE_I 6
> -#define PROPERTY_CODE 7
> -#define PROPERTY_CODE_I 8
> -#define GTK_DOC_BEFORE_NAME 9
> -#define GTK_DOC 10
> -#define GTK_DOC_LINE 11
> -
> -#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
> -
> -/* 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 (void) 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 = '*'; \
> - 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 117 "lexer.l"
> -
> -
> -
> -/* Avoid warning from flex, cuz flex sucks */
> -#ifdef FLEX_SCANNER
> -yy_current_state = 0;
> -#endif
> -
> -
> -
> -#line 1300 "lex.yy.c"
> -
> - if ( (yy_init) )
> - {
> - (yy_init) = 0;
> -
> -#ifdef YY_USER_INIT
> - YY_USER_INIT;
> -#endif
> -
> - if ( ! (yy_state_buf) )
> - (yy_state_buf) = (yy_state_type *)yyalloc(YY_BUF_SIZE + 2 );
> -
> - 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_state_ptr) = (yy_state_buf);
> - *(yy_state_ptr)++ = yy_current_state;
> -
> -yy_match:
> - do
> - {
> - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*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 >= 551 )
> - yy_c = yy_meta[(unsigned int) yy_c];
> - }
> - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
> - *(yy_state_ptr)++ = yy_current_state;
> - ++yy_cp;
> - }
> - while ( yy_base[yy_current_state] != 1327 );
> -
> -yy_find_action:
> - yy_current_state = *--(yy_state_ptr);
> - (yy_lp) = yy_accept[yy_current_state];
> -find_rule: /* we branch to this label when backing up */
> - for ( ; ; ) /* until we find what rule we matched */
> - {
> - if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
> - {
> - yy_act = yy_acclist[(yy_lp)];
> - {
> - (yy_full_match) = yy_cp;
> - break;
> - }
> - }
> - --yy_cp;
> - yy_current_state = *--(yy_state_ptr);
> - (yy_lp) = yy_accept[yy_current_state];
> - }
> -
> - YY_DO_BEFORE_ACTION;
> -
> -do_action: /* This label is used only to access EOF actions. */
> -
> - switch ( yy_act )
> - { /* beginning of action switch */
> -case 1:
> -/* rule 1 can match eol */
> -YY_RULE_SETUP
> -#line 127 "lexer.l"
> -{ line_no++; REJECT; }
> - YY_BREAK
> -case 2:
> -*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 129 "lexer.l"
> -{
> -/* Thy evil easter egg */
> -#define QQ(x) long x
> -#define KK(x) =atoi(__(&,,x,))
> -#define MM(x,a) {QQ(i);for(i=2;i<x;i++){a}}
> -#define PP(Q) (P%Q)==0
> -#define ___(x,y,z) if(x z y)
> -#define __(a,x,y,z) a(yytext[y] x z)
> -#define O__O(a,b) fprintf(stderr,"%s is %s!\n",a,b)
> -QQ(m)=1;___(__(,==,2,'P'),__(,==,5,'M'),&&
> -){QQ(P)KK(8);MM(P,___(PP(i),,)m=0;)}__(,=,
> -7,0);___(,,m){O__O(__( &,,8,),__(&,,2,));}
> -#undef QQ
> -#undef KK
> -#undef MM
> -#undef PP
> -#undef ___
> -#undef __
> -#undef O__O
> -REJECT;
> -}
> - YY_BREAK
> -case 3:
> -*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 151 "lexer.l"
> -{ ; /*comment, ignore*/ }
> - YY_BREAK
> -case 4:
> -YY_RULE_SETUP
> -#line 153 "lexer.l"
> -{
> - char *p;
> - char *number;
> - char *filename;
> - char *str=g_strdup(yytext);
> -
> - /* find first digit of line number */
> - p=str;
> - while(*p&&!isdigit(*p)) p++;
> - number=p;
> -
> - /* find end of line number */
> - while(*p&&isdigit(*p)) p++;
> - if(*p) *p++=0;
> -
> - /* find beginning of filename */
> - p=strchr(p,'"');
> - if(p) p++;
> - filename=p;
> -
> - /* find end of filename */
> - if(p) p=strchr(p,'"');
> - if(p) *p=0;
> -
> - /* stash number (minus one because we don't count this line) */
> - if(number) line_no=atoi(number)-1;
> -
> - /* stash filename */
> - if(filename) {
> - if(hline_filename) g_free(hline_filename);
> - hline_filename=g_strdup(filename);
> - }
> -
> - /* clean up */
> - g_free(str);
> -}
> - YY_BREAK
> -case 5:
> -YY_RULE_SETUP
> -#line 190 "lexer.l"
> -{
> - if(look_for_includes==1) {
> - char *p;
> - char *file;
> - char *str = g_strdup(yytext);
> - file = strchr(str,'"');
> - if(!file) file = strchr(str,'<');
> - file++;
> - p = strchr(file,'"');
> - if(!p) p = strchr(file,'>');
> - *p = '\0';
> - include_files = g_list_prepend(include_files,g_strdup(file));
> - g_free(str);
> - }
> - REJECT;
> -}
> - YY_BREAK
> -case 6:
> -*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 207 "lexer.l"
> -{
> - /* eat out gtk doc stuff */
> - BEGIN(GTK_DOC_BEFORE_NAME);
> - clear_cbuf();
> - }
> - YY_BREAK
> -case 7:
> -*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 212 "lexer.l"
> -{
> - /* empty doc lines */
> - ;
> - }
> - YY_BREAK
> -case 8:
> -*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 216 "lexer.l"
> -{
> - char *p;
> - BEGIN(GTK_DOC);
> - p = strchr(yytext, '*');
> - g_free(gtk_doc_func);
> - gtk_doc_func = g_strdup(p+2);
> - p = strchr(gtk_doc_func, ':');
> - if(p) *p='\0';
> - g_strstrip(gtk_doc_func);
> - }
> - YY_BREAK
> -case 9:
> -YY_RULE_SETUP
> -#line 226 "lexer.l"
> -{
> - BEGIN(CLASS_CODE_I);
> - }
> - YY_BREAK
> -case 10:
> -YY_RULE_SETUP
> -#line 229 "lexer.l"
> -{
> - BEGIN(COMMENT);
> - before_comment = CLASS_CODE_I;
> - }
> - YY_BREAK
> -case 11:
> -*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 233 "lexer.l"
> -{
> - /* empty doc lines */
> - add_to_cbuf(" *\n");
> - }
> - YY_BREAK
> -case 12:
> -YY_RULE_SETUP
> -#line 237 "lexer.l"
> -{
> - BEGIN(CLASS_CODE_I);
> - add_gtk_doc_func();
> - }
> - YY_BREAK
> -case 13:
> -YY_RULE_SETUP
> -#line 241 "lexer.l"
> -{
> - fflush(stdout);
> - add_to_cbuf(" * ");
> - BEGIN(GTK_DOC_LINE);
> - }
> - YY_BREAK
> -case 14:
> -YY_RULE_SETUP
> -#line 246 "lexer.l"
> -{
> - BEGIN(CLASS_CODE_I);
> - }
> - YY_BREAK
> -case 15:
> -YY_RULE_SETUP
> -#line 249 "lexer.l"
> -{
> - BEGIN(COMMENT);
> - before_comment = CLASS_CODE_I;
> - }
> - YY_BREAK
> -case 16:
> -YY_RULE_SETUP
> -#line 253 "lexer.l"
> -{
> - BEGIN(CLASS_CODE_I);
> - add_to_cbuf("\n");
> - add_gtk_doc_func();
> - }
> - YY_BREAK
> -case 17:
> -*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 258 "lexer.l"
> -{
> - BEGIN(GTK_DOC);
> - add_to_cbuf(yytext);
> - add_to_cbuf("\n");
> - }
> - YY_BREAK
> -case 18:
> -YY_RULE_SETUP
> -#line 263 "lexer.l"
> -{
> - fflush(stdout);
> - add_to_cbuf(yytext);
> - }
> - YY_BREAK
> -case 19:
> -*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 268 "lexer.l"
> -{ add_to_cbuf(yytext); /*comment, ignore*/ }
> - YY_BREAK
> -case 20:
> -*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 269 "lexer.l"
> -{ ; /*comment, ignore*/ }
> - YY_BREAK
> -case 21:
> -*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 270 "lexer.l"
> -{ ; /*comment, ignore*/ }
> - YY_BREAK
> -case 22:
> -*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 271 "lexer.l"
> -{ ; /*comment, ignore*/ }
> - YY_BREAK
> -case 23:
> -YY_RULE_SETUP
> -#line 272 "lexer.l"
> -{BEGIN(COMMENT); before_comment = INITIAL; }
> - YY_BREAK
> -case 24:
> -YY_RULE_SETUP
> -#line 273 "lexer.l"
> -{
> - add_to_cbuf(yytext);
> - BEGIN(COMMENT);
> - before_comment = C_CODE;
> -}
> - YY_BREAK
> -case 25:
> -YY_RULE_SETUP
> -#line 278 "lexer.l"
> -{BEGIN(COMMENT); before_comment = CLASS_CODE; }
> - YY_BREAK
> -case 26:
> -YY_RULE_SETUP
> -#line 279 "lexer.l"
> -{BEGIN(COMMENT); before_comment = CLASS_CODE_I; }
> - YY_BREAK
> -case 27:
> -YY_RULE_SETUP
> -#line 280 "lexer.l"
> -{BEGIN(COMMENT); before_comment = PROPERTY_CODE_I; }
> - YY_BREAK
> -case 28:
> -YY_RULE_SETUP
> -#line 281 "lexer.l"
> -{
> - if(before_comment == C_CODE) add_to_cbuf(yytext);
> - BEGIN(before_comment);
> - }
> - YY_BREAK
> -case 29:
> -YY_RULE_SETUP
> -#line 285 "lexer.l"
> -{
> - /* comment, ignore */
> - if(before_comment == C_CODE) add_to_cbuf(yytext);
> - }
> - YY_BREAK
> -case 30:
> -/* rule 30 can match eol */
> -YY_RULE_SETUP
> -#line 289 "lexer.l"
> -{
> - /* comment, ignore */
> - if(before_comment == C_CODE) add_to_cbuf(yytext);
> - }
> - YY_BREAK
> -case 31:
> -YY_RULE_SETUP
> -#line 294 "lexer.l"
> -{
> - BEGIN(C_CODE);
> - parenth_depth = 1;
> - class_after_c = FALSE;
> - code_type = ACODE;
> - clear_cbuf();
> - ccode_line = line_no;
> - }
> - YY_BREAK
> -case 32:
> -YY_RULE_SETUP
> -#line 302 "lexer.l"
> -{
> - BEGIN(C_CODE);
> - parenth_depth = 1;
> - class_after_c = FALSE;
> - code_type = ATCODE;
> - clear_cbuf();
> - ccode_line = line_no;
> - }
> - YY_BREAK
> -case 33:
> -YY_RULE_SETUP
> -#line 311 "lexer.l"
> -{
> - BEGIN(C_CODE);
> - parenth_depth = 1;
> - class_after_c = FALSE;
> - code_type = HTCODE;
> - clear_cbuf();
> - ccode_line = line_no;
> - }
> - YY_BREAK
> -case 34:
> -YY_RULE_SETUP
> -#line 319 "lexer.l"
> -{
> - BEGIN(C_CODE);
> - parenth_depth = 1;
> - class_after_c = FALSE;
> - code_type = PHCODE;
> - clear_cbuf();
> - ccode_line = line_no;
> - }
> - YY_BREAK
> -case 35:
> -YY_RULE_SETUP
> -#line 327 "lexer.l"
> -{
> - BEGIN(C_CODE);
> - parenth_depth = 1;
> - class_after_c = FALSE;
> - code_type = HCODE;
> - clear_cbuf();
> - ccode_line = line_no;
> - }
> - YY_BREAK
> -case 36:
> -YY_RULE_SETUP
> -#line 335 "lexer.l"
> -{
> - BEGIN(C_CODE);
> - parenth_depth = 1;
> - class_after_c = FALSE;
> - code_type = CCODE;
> - clear_cbuf();
> - ccode_line = line_no;
> - if(look_for_includes==0)
> - look_for_includes=1;
> - }
> - YY_BREAK
> -case 37:
> -YY_RULE_SETUP
> -#line 345 "lexer.l"
> -{
> - BEGIN(INITIAL);
> - yylval.cbuf = cbuf;
> - cbuf = NULL;
> - if(look_for_includes==1)
> - look_for_includes=0;
> - return code_type;
> - }
> - YY_BREAK
> -case 38:
> -YY_RULE_SETUP
> -#line 354 "lexer.l"
> -{ add_to_cbuf(yytext); }
> - YY_BREAK
> -case 39:
> -YY_RULE_SETUP
> -#line 355 "lexer.l"
> -{ add_to_cbuf(yytext); }
> - YY_BREAK
> -case 40:
> -YY_RULE_SETUP
> -#line 356 "lexer.l"
> -{ add_to_cbuf(yytext); }
> - YY_BREAK
> -case 41:
> -YY_RULE_SETUP
> -#line 357 "lexer.l"
> -{ add_to_cbuf(yytext); }
> - YY_BREAK
> -case 42:
> -YY_RULE_SETUP
> -#line 358 "lexer.l"
> -{ add_to_cbuf(yytext); }
> - YY_BREAK
> -case 43:
> -YY_RULE_SETUP
> -#line 359 "lexer.l"
> -{ add_to_cbuf(yytext); }
> - YY_BREAK
> -case 44:
> -YY_RULE_SETUP
> -#line 361 "lexer.l"
> -{ add_to_cbuf(yytext); }
> - YY_BREAK
> -case 45:
> -YY_RULE_SETUP
> -#line 364 "lexer.l"
> -{
> - BEGIN(CODE_STRING);
> - before_string = C_CODE;
> - add_to_cbuf(yytext);
> - }
> - YY_BREAK
> -case 46:
> -YY_RULE_SETUP
> -#line 369 "lexer.l"
> -{
> - BEGIN(CODE_STRING);
> - before_string = PROPERTY_CODE_I;
> - add_to_cbuf(yytext);
> - }
> - YY_BREAK
> -case 47:
> -YY_RULE_SETUP
> -#line 374 "lexer.l"
> -{ add_to_cbuf(yytext); }
> - YY_BREAK
> -case 48:
> -YY_RULE_SETUP
> -#line 375 "lexer.l"
> -{
> - BEGIN(before_string);
> - add_to_cbuf(yytext);
> - if (before_string == PROPERTY_CODE_I) {
> - yylval.id = cbuf->str;
> - g_string_free (cbuf, FALSE);
> - cbuf = NULL;
> - return STRING;
> - }
> - }
> - YY_BREAK
> -case 49:
> -YY_RULE_SETUP
> -#line 385 "lexer.l"
> -{ add_to_cbuf(yytext); }
> - YY_BREAK
> -case 50:
> -/* rule 50 can match eol */
> -YY_RULE_SETUP
> -#line 386 "lexer.l"
> -{ add_to_cbuf(yytext); }
> - YY_BREAK
> -case 51:
> -YY_RULE_SETUP
> -#line 388 "lexer.l"
> -{
> - parenth_depth++;
> - add_to_cbuf(yytext);
> - }
> - YY_BREAK
> -case 52:
> -YY_RULE_SETUP
> -#line 392 "lexer.l"
> -{
> - parenth_depth--;
> - if(parenth_depth<0) {
> - REJECT;
> - } else if(parenth_depth==0 && class_after_c) {
> - BEGIN(CLASS_CODE_I);
> - yylval.cbuf = cbuf;
> - cbuf = NULL;
> - return CCODE;
> - }
> - add_to_cbuf(yytext);
> - }
> - YY_BREAK
> -case 53:
> -YY_RULE_SETUP
> -#line 405 "lexer.l"
> -{ add_to_cbuf(yytext); }
> - YY_BREAK
> -case 54:
> -/* rule 54 can match eol */
> -YY_RULE_SETUP
> -#line 406 "lexer.l"
> -{ add_to_cbuf(yytext); }
> - YY_BREAK
> -case 55:
> -YY_RULE_SETUP
> -#line 408 "lexer.l"
> -{
> - static int found_classes = 0;
> - look_for_includes = 2;
> - BEGIN(CLASS_CODE);
> -
> - if(++found_classes > 1) {
> - error_print(GOB_ERROR, line_no,
> - "Only one class per file allowed");
> - }
> -
> - return CLASS;
> - }
> - YY_BREAK
> -case 56:
> -YY_RULE_SETUP
> -#line 421 "lexer.l"
> -{ return ERROR; }
> - YY_BREAK
> -case 57:
> -YY_RULE_SETUP
> -#line 422 "lexer.l"
> -{ return ENUM; }
> - YY_BREAK
> -case 58:
> -YY_RULE_SETUP
> -#line 423 "lexer.l"
> -{ return FLAGS; }
> - YY_BREAK
> -case 59:
> -*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 425 "lexer.l"
> -{
> - int maj = 0, min = 0, pl = 0;
> - int rmaj = 0, rmin = 0, rpl = 0;
> - int effective_maj = 0;
> - int effective_rmaj = 0;
> - char *p;
> -
> - sscanf (VERSION, "%d.%d.%d", &rmaj, &rmin, &rpl);
> - effective_rmaj = rmaj;
> - if (rmin >= 90)
> - effective_rmaj = rmaj + 1;
> -
> - p = strchr (yytext,'r');
> - g_assert (p); /* we MUST have found it */
> - sscanf (p, "requires %d.%d.%d", &maj, &min, &pl);
> - effective_maj = maj;
> - if (min >= 90)
> - effective_maj = maj + 1;
> -
> - if(rmaj < maj ||
> - (rmaj == maj && rmin < min) ||
> - (rmaj == maj && rmin == min && rpl < pl)) {
> - error_printf (GOB_ERROR, line_no,
> - "GOB version at least %d.%d.%d required "
> - "(this is %s)\n"
> - "To upgrade your gob, see: "
> - "http://www.5z.com/jirka/gob.html",
> - maj, min, pl, VERSION);
> - }
> -
> - if(effective_rmaj != effective_maj) {
> - error_printf(GOB_ERROR, line_no,
> - "GOB major version %d required "
> - "(this is %s)\n"
> - "To upgrade your gob, see: "
> - "http://www.5z.com/jirka/gob.html",
> - effective_maj, VERSION);
> - }
> -
> - }
> - YY_BREAK
> -case 60:
> -YY_RULE_SETUP
> -#line 466 "lexer.l"
> -{
> - if(for_cpp) {
> - error_printf(GOB_WARN, line_no,
> - "'%s' keyword should not "
> - "be used when generating "
> - "C++ code", yytext);
> - }
> - REJECT;
> - }
> - YY_BREAK
> -case 61:
> -YY_RULE_SETUP
> -#line 476 "lexer.l"
> -{return FROM;}
> - YY_BREAK
> -case 62:
> -YY_RULE_SETUP
> -#line 477 "lexer.l"
> -{
> - BEGIN(CLASS_STRING);
> - before_string = CLASS_CODE;
> - add_to_cbuf(yytext);
> - }
> - YY_BREAK
> -case 63:
> -YY_RULE_SETUP
> -#line 482 "lexer.l"
> -{ add_to_cbuf(yytext); }
> - YY_BREAK
> -case 64:
> -YY_RULE_SETUP
> -#line 483 "lexer.l"
> -{
> - BEGIN(before_string);
> - add_to_cbuf(yytext);
> - yylval.id = cbuf->str;
> - g_string_free (cbuf, FALSE);
> - cbuf = NULL;
> - return STRING;
> - }
> - YY_BREAK
> -case 65:
> -YY_RULE_SETUP
> -#line 491 "lexer.l"
> -{ add_to_cbuf(yytext); }
> - YY_BREAK
> -case 66:
> -/* rule 66 can match eol */
> -YY_RULE_SETUP
> -#line 492 "lexer.l"
> -{ add_to_cbuf(yytext); }
> - YY_BREAK
> -case 67:
> -YY_RULE_SETUP
> -#line 494 "lexer.l"
> -{return VOID;}
> - YY_BREAK
> -case 68:
> -YY_RULE_SETUP
> -#line 495 "lexer.l"
> -{return STRUCT;}
> - YY_BREAK
> -case 69:
> -YY_RULE_SETUP
> -#line 496 "lexer.l"
> -{return UNION;}
> - YY_BREAK
> -case 70:
> -YY_RULE_SETUP
> -#line 497 "lexer.l"
> -{return ENUM;}
> - YY_BREAK
> -case 71:
> -YY_RULE_SETUP
> -#line 498 "lexer.l"
> -{return SIGNED;}
> - YY_BREAK
> -case 72:
> -YY_RULE_SETUP
> -#line 499 "lexer.l"
> -{return UNSIGNED;}
> - YY_BREAK
> -case 73:
> -YY_RULE_SETUP
> -#line 500 "lexer.l"
> -{return LONG;}
> - YY_BREAK
> -case 74:
> -YY_RULE_SETUP
> -#line 501 "lexer.l"
> -{return SHORT;}
> - YY_BREAK
> -case 75:
> -YY_RULE_SETUP
> -#line 502 "lexer.l"
> -{return INT;}
> - YY_BREAK
> -case 76:
> -YY_RULE_SETUP
> -#line 503 "lexer.l"
> -{return FLOAT;}
> - YY_BREAK
> -case 77:
> -YY_RULE_SETUP
> -#line 504 "lexer.l"
> -{return DOUBLE;}
> - YY_BREAK
> -case 78:
> -YY_RULE_SETUP
> -#line 505 "lexer.l"
> -{return CHAR;}
> - YY_BREAK
> -case 79:
> -YY_RULE_SETUP
> -#line 506 "lexer.l"
> -{return CONST;}
> - YY_BREAK
> -case 80:
> -YY_RULE_SETUP
> -#line 508 "lexer.l"
> -{return THREEDOTS;}
> - YY_BREAK
> -case 81:
> -YY_RULE_SETUP
> -#line 510 "lexer.l"
> -{yylval.line = line_no; return PUBLIC;}
> - YY_BREAK
> -case 82:
> -YY_RULE_SETUP
> -#line 511 "lexer.l"
> -{yylval.line = line_no; return PRIVATE;}
> - YY_BREAK
> -case 83:
> -YY_RULE_SETUP
> -#line 512 "lexer.l"
> -{yylval.line = line_no; return PROTECTED;}
> - YY_BREAK
> -case 84:
> -YY_RULE_SETUP
> -#line 513 "lexer.l"
> -{yylval.line = line_no; return CLASSWIDE;}
> - YY_BREAK
> -case 85:
> -YY_RULE_SETUP
> -#line 514 "lexer.l"
> -{yylval.line = line_no; return ARGUMENT;}
> - YY_BREAK
> -case 86:
> -YY_RULE_SETUP
> -#line 515 "lexer.l"
> -{yylval.line = line_no; return VIRTUAL;}
> - YY_BREAK
> -case 87:
> -YY_RULE_SETUP
> -#line 516 "lexer.l"
> -{yylval.line = line_no; return SIGNAL;}
> - YY_BREAK
> -case 88:
> -YY_RULE_SETUP
> -#line 517 "lexer.l"
> -{yylval.line = line_no; return OVERRIDE;}
> - YY_BREAK
> -case 89:
> -YY_RULE_SETUP
> -#line 518 "lexer.l"
> -{
> - yylval.line = line_no;
> - BEGIN(PROPERTY_CODE);
> - return PROPERTY;
> - }
> - YY_BREAK
> -case 90:
> -YY_RULE_SETUP
> -#line 523 "lexer.l"
> -{ yylval.line = line_no; return NICK; }
> - YY_BREAK
> -case 91:
> -YY_RULE_SETUP
> -#line 524 "lexer.l"
> -{ yylval.line = line_no; return BLURB; }
> - YY_BREAK
> -case 92:
> -YY_RULE_SETUP
> -#line 525 "lexer.l"
> -{ yylval.line = line_no; return MAXIMUM; }
> - YY_BREAK
> -case 93:
> -YY_RULE_SETUP
> -#line 526 "lexer.l"
> -{ yylval.line = line_no; return MINIMUM; }
> - YY_BREAK
> -case 94:
> -YY_RULE_SETUP
> -#line 527 "lexer.l"
> -{ yylval.line = line_no; return DEFAULT_VALUE; }
> - YY_BREAK
> -case 95:
> -YY_RULE_SETUP
> -#line 528 "lexer.l"
> -{ yylval.line = line_no; return FLAGS; }
> - YY_BREAK
> -case 96:
> -YY_RULE_SETUP
> -#line 529 "lexer.l"
> -{ yylval.line = line_no; return TYPE; }
> - YY_BREAK
> -case 97:
> -YY_RULE_SETUP
> -#line 530 "lexer.l"
> -{ yylval.line = line_no; return FLAGS_TYPE; }
> - YY_BREAK
> -case 98:
> -YY_RULE_SETUP
> -#line 531 "lexer.l"
> -{ yylval.line = line_no; return ENUM_TYPE; }
> - YY_BREAK
> -case 99:
> -YY_RULE_SETUP
> -#line 532 "lexer.l"
> -{ yylval.line = line_no; return PARAM_TYPE; }
> - YY_BREAK
> -case 100:
> -YY_RULE_SETUP
> -#line 533 "lexer.l"
> -{ yylval.line = line_no; return BOXED_TYPE; }
> - YY_BREAK
> -case 101:
> -YY_RULE_SETUP
> -#line 534 "lexer.l"
> -{ yylval.line = line_no; return OBJECT_TYPE; }
> - YY_BREAK
> -case 102:
> -YY_RULE_SETUP
> -#line 535 "lexer.l"
> -{
> - yylval.line = line_no;
> - property_paren_depth = 1;
> - BEGIN(PROPERTY_CODE_I);
> - return '(';
> - }
> - YY_BREAK
> -case 103:
> -YY_RULE_SETUP
> -#line 541 "lexer.l"
> -{
> - yylval.line = line_no;
> - property_paren_depth++;
> - return '(';
> - }
> - YY_BREAK
> -case 104:
> -YY_RULE_SETUP
> -#line 546 "lexer.l"
> -{
> - yylval.line = line_no;
> - property_paren_depth--;
> - if (property_paren_depth == 0) {
> - BEGIN(CLASS_CODE_I);
> - }
> - return ')';
> - }
> - YY_BREAK
> -case 105:
> -YY_RULE_SETUP
> -#line 555 "lexer.l"
> -{
> - yylval.id = g_strdup(yytext);
> - return NUMBER;
> - }
> - YY_BREAK
> -case 106:
> -YY_RULE_SETUP
> -#line 559 "lexer.l"
> -{
> - /* This is cpp kind of token thingie */
> - if (for_cpp) {
> - yylval.id = g_strdup(yytext);
> - return TOKEN;
> - } else {
> - REJECT;
> - }
> - }
> - YY_BREAK
> -case 107:
> -YY_RULE_SETUP
> -#line 568 "lexer.l"
> -{
> - /* this one is for a classname with a namespace */
> - yylval.id = g_strdup(yytext);
> - return TYPETOKEN;
> - }
> - YY_BREAK
> -case 108:
> -YY_RULE_SETUP
> -#line 573 "lexer.l"
> -{
> - /* this is for a classname with an empty namespace */
> - yylval.id = g_strdup(yytext);
> - return TYPETOKEN;
> - }
> - YY_BREAK
> -case 109:
> -YY_RULE_SETUP
> -#line 578 "lexer.l"
> -{
> - yylval.id = g_strdup(yytext);
> - return TOKEN;
> - }
> - YY_BREAK
> -case 110:
> -YY_RULE_SETUP
> -#line 582 "lexer.l"
> -{
> - yylval.id = g_strdup(yytext);
> - return SINGLE_CHAR;
> - }
> - YY_BREAK
> -case 111:
> -YY_RULE_SETUP
> -#line 587 "lexer.l"
> -{
> - yylval.id = g_strdup(yytext);
> - return ARRAY_DIM;
> - }
> - YY_BREAK
> -case 112:
> -YY_RULE_SETUP
> -#line 591 "lexer.l"
> -{
> - /* cheat for bitfield */
> - yylval.id = g_strdup(yytext);
> - return ARRAY_DIM;
> - }
> - YY_BREAK
> -case 113:
> -YY_RULE_SETUP
> -#line 596 "lexer.l"
> -{
> - BEGIN(CLASS_CODE_I);
> - return '{';
> - }
> - YY_BREAK
> -case 114:
> -YY_RULE_SETUP
> -#line 600 "lexer.l"
> -{
> - BEGIN(C_CODE);
> - parenth_depth=1;
> - class_after_c = TRUE;
> - yylval.line = line_no;
> - clear_cbuf();
> - ccode_line = line_no;
> - return '{';
> - }
> - YY_BREAK
> -case 115:
> -YY_RULE_SETUP
> -#line 609 "lexer.l"
> -{
> - BEGIN(INITIAL);
> - return '}';
> - }
> - YY_BREAK
> -case 116:
> -YY_RULE_SETUP
> -#line 614 "lexer.l"
> -; /*ignore*/
> - YY_BREAK
> -case 117:
> -YY_RULE_SETUP
> -#line 616 "lexer.l"
> -{
> - yylval.line = line_no;
> - return yytext[0];
> - }
> - YY_BREAK
> -case 118:
> -/* rule 118 can match eol */
> -YY_RULE_SETUP
> -#line 621 "lexer.l"
> -; /*ignore*/
> - YY_BREAK
> -case 119:
> -*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 623 "lexer.l"
> -{
> - char *p;
> - int t;
> - p = strchr (yytext,'p');
> - g_assert (p); /* we MUST have found it */
> - sscanf (p, "prealloc %d", &t);
> - prealloc=t;
> - }
> - YY_BREAK
> -case 120:
> -YY_RULE_SETUP
> -#line 632 "lexer.l"
> -ECHO;
> - YY_BREAK
> -#line 2392 "lex.yy.c"
> - case YY_STATE_EOF(INITIAL):
> - case YY_STATE_EOF(COMMENT):
> - case YY_STATE_EOF(C_CODE):
> - case YY_STATE_EOF(CODE_STRING):
> - case YY_STATE_EOF(CLASS_CODE):
> - case YY_STATE_EOF(CLASS_STRING):
> - case YY_STATE_EOF(CLASS_CODE_I):
> - case YY_STATE_EOF(PROPERTY_CODE):
> - case YY_STATE_EOF(PROPERTY_CODE_I):
> - case YY_STATE_EOF(GTK_DOC_BEFORE_NAME):
> - case YY_STATE_EOF(GTK_DOC):
> - case YY_STATE_EOF(GTK_DOC_LINE):
> - yyterminate();
> -
> - 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
> - {
> - 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. */
> -
> - YY_FATAL_ERROR(
> -"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
> -
> - }
> -
> - 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;
> -
> - (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();
> -
> - (yy_state_ptr) = (yy_state_buf);
> - *(yy_state_ptr)++ = yy_current_state;
> -
> - 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);
> - 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 >= 551 )
> - yy_c = yy_meta[(unsigned int) yy_c];
> - }
> - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
> - *(yy_state_ptr)++ = yy_current_state;
> - }
> -
> - 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 YY_CHAR yy_c = 1;
> - 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 >= 551 )
> - 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 == 550);
> - if ( ! yy_is_jam )
> - *(yy_state_ptr)++ = yy_current_state;
> -
> - 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 int 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;
> -
> - (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 */
> - int 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 EOF;
> -
> - 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');
> -
> - 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)
> -{
> - int 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*)
> - );
> -
> - 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*)
> - );
> -
> - /* 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 str 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 * yy_str )
> -{
> -
> - return yy_scan_bytes(yy_str,strlen(yy_str) );
> -}
> -
> -/** 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 * bytes, int len )
> -{
> - YY_BUFFER_STATE b;
> - char *buf;
> - yy_size_t n;
> - int i;
> -
> - /* Get memory for full buffer, including space for trailing EOB's. */
> - n = len + 2;
> - buf = (char *) yyalloc(n );
> - if ( ! buf )
> - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
> -
> - for ( i = 0; i < len; ++i )
> - buf[i] = bytes[i];
> -
> - buf[len] = buf[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.
> - *
> - */
> -int 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 ;
> -}
> -
> -/* 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;
> -
> - yyfree ( (yy_state_buf) );
> -
> - 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"
> -
> -#undef YY_NEW_FILE
> -#undef YY_FLUSH_BUFFER
> -#undef yy_set_bol
> -#undef yy_new_buffer
> -#undef yy_set_interactive
> -#undef yytext_ptr
> -#undef YY_DO_BEFORE_ACTION
> -
> -#ifdef YY_DECL_IS_OURS
> -#undef YY_DECL_IS_OURS
> -#undef YY_DECL
> -#endif
> -#line 632 "lexer.l"
> -
> -
> -
> diff -u -Naur pristine/gob2-2.0.14/src/lexer.l modified/gob2-2.0.14/src/lexer.l
> --- pristine/gob2-2.0.14/src/lexer.l 2005-07-22 14:50:37.000000000 -0400
> +++ modified/gob2-2.0.14/src/lexer.l 2007-02-25 18:08:26.000000000 -0500
> @@ -48,6 +48,8 @@
> static char *gtk_doc_func = NULL; /* current gtk-doc func */
> GHashTable *gtk_doc_hash = NULL;
>
> +static GString *funcattrs = NULL;
> +
> static GString *cbuf = NULL;
> int ccode_line = 1;
>
> @@ -565,6 +567,12 @@
> REJECT;
> }
> }
> +
> +<CLASS_CODE_I>G_GNUC_PRINTF|G_GNUC_SCANF|G_GNUC_FORMAT {
> + yylval.id = g_strdup(yytext);
> + return FUNCATTR;
> +}
> +
> <CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I,INITIAL>[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z_][A-Za-z0-9_]*)+ {
> /* this one is for a classname with a namespace */
> yylval.id = g_strdup(yytext);
> diff -u -Naur pristine/gob2-2.0.14/src/main.c modified/gob2-2.0.14/src/main.c
> --- pristine/gob2-2.0.14/src/main.c 2006-01-05 13:05:45.000000000 -0500
> +++ modified/gob2-2.0.14/src/main.c 2007-02-26 14:54:24.000000000 -0500
> @@ -200,6 +200,7 @@
> const char *afterargs,
> const char *postfix,
> const Method *m,
> + gboolean print_funcattrs,
> gboolean one_arg_per_line,
> gboolean no_funcbase,
> gboolean kill_underscore,
> @@ -255,7 +256,28 @@
> } else {
> out_printf(fp, "void");
> }
> - out_printf(fp, "%s)%s", afterargs, postfix);
> + /* Slightly icky: sometimes we are called st m->funcattrs
> + hasn't been set, but if so it should be NULL since its been
> + zero-initialized. */
> + if(print_funcattrs && m->funcattrs != NULL
> + && strlen(m->funcattrs) > 0) {
> + /* To keep the output neat, we trim off the trailing '\n'
> + from the end of funcattrs for a moment. */
> + size_t funcattrs_len = strlen(m->funcattrs);
> + gboolean funcattrs_chomped = FALSE;
> + if((m->funcattrs)[funcattrs_len - 1] == '\n') {
> + m->funcattrs[funcattrs_len - 1] = '\0';
> + funcattrs_chomped = TRUE;
> + }
> + out_printf(fp, "%s)\n%s%s", afterargs, m->funcattrs, postfix);
> + /* Put it back like it was (though it shouldn't matter). */
> + if (funcattrs_chomped) {
> + (m->funcattrs)[funcattrs_len - 1] = '\n';
> + }
> + }
> + else {
> + out_printf(fp, "%s)%s", afterargs, postfix);
> + }
> }
>
> static gboolean
> @@ -372,11 +394,12 @@
>
> /* if a signal mark it as such */
> if(m->method != VIRTUAL_METHOD)
> - print_method(outh, "\t/*signal*/", "(* ", "", ") ", "", ";\n",
> - m, FALSE, TRUE, TRUE, FALSE, FALSE);
> + print_method(outh, "\t/*signal*/", "(* ", "", ") ", "", ";\n",
> + m, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE);
> else
> - print_method(outh, "\t", "(* ", "", ") ", "", ";\n",
> - m, FALSE, TRUE, TRUE, FALSE, FALSE);
> + print_method(outh, "\t", "(* ", "", ") ", "", ";\n",
> + m, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE);
> +
> }
>
> static void
> @@ -386,7 +409,7 @@
> return;
>
> print_method(outh, "", "\t", "", "\t", "", ";\n", m,
> - TRUE, FALSE, TRUE, FALSE, FALSE);
> + TRUE, TRUE, FALSE, TRUE, FALSE, FALSE);
> }
>
> static void
> @@ -424,7 +447,7 @@
> "(GCallback) __extension__ ({",
> funcbase, m->id, macrobase, typebase, m->id);
> print_method (outh, "", "(* ___", "", ") ", ", gpointer ___data ",
> - " = (func); ", m, FALSE, TRUE, TRUE, FALSE, TRUE);
> + " = (func); ", m, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE);
> out_printf (outh, "___%s; }), (data))\n", m->id);
>
> /* connect_after */
> @@ -435,7 +458,7 @@
> "(GCallback) __extension__ ({",
> funcbase, m->id, macrobase, typebase, m->id);
> print_method (outh, "", "(* ___", "", ") ", ", gpointer ___data ",
> - " = (func); ", m, FALSE, TRUE, TRUE, FALSE, TRUE);
> + " = (func); ", m, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE);
> out_printf (outh, "___%s; }), (data))\n", m->id);
>
> /* connect_data */
> @@ -447,7 +470,7 @@
> "(GCallback) __extension__ ({",
> funcbase, m->id, macrobase, typebase, m->id);
> print_method (outh, "", "(* ___", "", ") ", ", gpointer ___data ",
> - " = (func); ", m, FALSE, TRUE, TRUE, FALSE, TRUE);
> + " = (func); ", m, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE);
> out_printf (outh, "___%s; }), (data), (destroy_data), (GConnectFlags)(flags))\n", m->id);
> }
> }
> @@ -514,10 +537,10 @@
>
> if(outph)
> print_method(outph, "", "\t", "", "\t", "", ";\n",
> - m, FALSE, FALSE, TRUE, FALSE, FALSE);
> + m, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE);
> else
> print_method(out, "", "\t", "", "\t", "", ";\n",
> - m, FALSE, FALSE, TRUE, FALSE, FALSE);
> + m, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE);
> }
>
> static void
> @@ -529,7 +552,7 @@
> if(m->cbuf)
> print_method(out,
> "static ", "___real_", "", " ", "", ";\n",
> - m, FALSE, FALSE, TRUE, FALSE, FALSE);
> + m, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE);
> }
> /* no else, here, it might still have a private prototype, it's not
> * exclusive */
> @@ -540,14 +563,24 @@
> char *s = g_strdup_printf("___%x_", (guint)m->unique_id);
> print_method(out, "static ", s, "", " ", "",
> no_gnu?";\n":" G_GNUC_UNUSED;\n",
> - m, FALSE, FALSE, FALSE, FALSE, FALSE);
> + m, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE);
> g_free(s);
> } else if(m->scope == PRIVATE_SCOPE ||
> m->method == INIT_METHOD ||
> m->method == CLASS_INIT_METHOD) {
> + /* It might concievably be useful to allow attributes
> + to be applied to init or class_init, but the
> + attributes currently supported aren't useful and
> + the parser and check_* code is currently set up to
> + reject attributes to these functions. So we
> + shouldn't see any. */
> + if(m->method == INIT_METHOD ||
> + m->method == CLASS_INIT_METHOD) {
> + g_assert (m->funcattrs == NULL || strlen(m->funcattrs) == 0);
> + }
> print_method(out, "static ", "", "", " ", "",
> no_gnu?";\n":" G_GNUC_UNUSED;\n",
> - m, FALSE, FALSE, TRUE, FALSE, FALSE);
> + m, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE);
> }
> }
>
> @@ -2276,7 +2309,8 @@
> if(m->line_no > 0)
> out_addline_infile(out, m->line_no);
> print_method(out, "static ", "\n", "", " ", "", "\n",
> - m, FALSE, FALSE, TRUE, TRUE, FALSE);
> + m, FALSE, FALSE, FALSE, TRUE, TRUE,
> + FALSE);
> if(m->line_no > 0)
> out_addline_outfile(out);
> out_printf(out, "{\n"
> @@ -2325,7 +2359,8 @@
> if(m->line_no > 0)
> out_addline_infile(out, m->line_no);
> print_method(out, "static ", "\n", "", " ", "", "\n",
> - m, FALSE, FALSE, TRUE, TRUE, FALSE);
> + m, FALSE, FALSE, FALSE, TRUE, TRUE,
> + FALSE);
> if(m->line_no > 0)
> out_addline_outfile(out);
> out_printf(out, "{\n"
> @@ -2833,10 +2868,10 @@
> out_addline_infile(out, m->line_no);
> if(m->scope == PRIVATE_SCOPE)
> print_method(out, "static ", "\n", "", " ", "", "\n",
> - m, FALSE, FALSE, TRUE, FALSE, FALSE);
> + m, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE);
> else /* PUBLIC, PROTECTED */
> print_method(out, "", "\n", "", " ", "", "\n",
> - m, FALSE, FALSE, TRUE, FALSE, FALSE);
> + m, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE);
> print_method_body(m, TRUE, TRUE);
> /* the outfile line was added above */
> break;
> @@ -2846,10 +2881,10 @@
> out_addline_infile(out, m->line_no);
> if(m->scope == PRIVATE_SCOPE)
> print_method(out, "static ", "\n", "", " ", "", "\n",
> - m, FALSE, FALSE, TRUE, FALSE, FALSE);
> + m, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE);
> else /* PUBLIC, PROTECTED */
> print_method(out, "", "\n", "", " ", "", "\n",
> - m, FALSE, FALSE, TRUE, FALSE, FALSE);
> + m, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE);
> out_addline_outfile (out);
>
> out_printf (out, "{\n");
> @@ -2968,7 +3003,7 @@
> if(m->line_no > 0)
> out_addline_infile(out, m->line_no);
> print_method(out, "static ", "\n___real_", "", " ", "", "\n",
> - m, FALSE, FALSE, TRUE, TRUE, FALSE);
> + m, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE);
> print_method_body(m, FALSE, TRUE);
> /* the outfile line was added above */
> break;
> @@ -2977,10 +3012,10 @@
> out_addline_infile(out, m->line_no);
> if(m->scope==PRIVATE_SCOPE)
> print_method(out, "static ", "\n", "", " ", "", "\n",
> - m, FALSE, FALSE, TRUE, FALSE, FALSE);
> + m, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE);
> else /* PUBLIC, PROTECTED */
> print_method(out, "", "\n", "", " ", "", "\n",
> - m, FALSE, FALSE, TRUE, FALSE, FALSE);
> + m, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE);
> out_addline_outfile(out);
> out_printf(out, "{\n"
> "\t%sClass *klass;\n", typebase);
> @@ -3026,7 +3061,7 @@
> if(m->line_no > 0)
> out_addline_infile(out, m->line_no);
> print_method(out, "static ", "\n___real_", "", " ", "", "\n",
> - m, FALSE, FALSE, TRUE, TRUE, FALSE);
> + m, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE);
> print_method_body(m, FALSE, TRUE);
> /* the outfile line was added above */
> break;
> @@ -3037,7 +3072,7 @@
> out_addline_infile(out, m->line_no);
> s = g_strdup_printf("\n___%x_", (guint)m->unique_id);
> print_method(out, "static ", s, "", " ", "", "\n",
> - m, FALSE, FALSE, FALSE, TRUE, FALSE);
> + m, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE);
> g_free(s);
> out_addline_outfile(out);
> s = replace_sep(m->otype, '_');
> @@ -4467,6 +4502,7 @@
> check_property_types ((Class *)class);
> check_argument_types ((Class *)class);
> check_func_arg_checks ((Class *)class);
> + check_func_attrs ((Class *)class);
> check_for_class_destructors ((Class *)class);
>
> exit_on_error = TRUE;
> diff -u -Naur pristine/gob2-2.0.14/src/Makefile.str modified/gob2-2.0.14/src/Makefile.str
> --- pristine/gob2-2.0.14/src/Makefile.str 1969-12-31 19:00:00.000000000 -0500
> +++ modified/gob2-2.0.14/src/Makefile.str 2007-02-25 18:17:38.000000000 -0500
> @@ -0,0 +1,15 @@
> +CFLAGS := -Wall $(shell pkg-config --cflags gobject-2.0 glib-2.0)
> +LDFLAGS := $(shell pkg-config --libs-only-other --libs-only-L \
> + gobject-2.0 glib-2.0)
> +LDLIBS := $(shell pkg-config --libs-only-l gobject-2.0 glib-2.0)
> +
> +default: str.o str_test.o Makefile.str
> + gcc $(LDFLAGS) str.o str_test.o $(LDLIBS) -o str_test
> +
> +%.c %.h: %.gob
> + ./gob2 $<
> +
> +str.o str_test.o: Makefile.str
> +
> +clean:
> + rm -rf str.o str_test.o str.c str.h str-private.h str_test
> diff -u -Naur pristine/gob2-2.0.14/src/MODIFATION_NOTES.txt modified/gob2-2.0.14/src/MODIFATION_NOTES.txt
> --- pristine/gob2-2.0.14/src/MODIFATION_NOTES.txt 1969-12-31 19:00:00.000000000 -0500
> +++ modified/gob2-2.0.14/src/MODIFATION_NOTES.txt 2007-02-25 18:09:00.000000000 -0500
> @@ -0,0 +1,33 @@
> +The attributes are perhaps applied overzealously to all the wrapper
> +functions and such that get generated. For example, for a single call
> +to a single G_GNU_DEPRECATED public virtual method we get this:
> +
> +cc -Wall -I/home/bkerin/local/include/glib-2.0 -I/home/bkerin/local/lib/glib-2.0/include -c -o str.o str.c
> +str.gob: In function ??????str_class_init??????:
> +str.gob:45: warning: ??????frobnicate?????? is deprecated (declared at str.h:48)
> +str.gob:45: warning: ??????___real_str_frobnicate?????? is deprecated (declared at str.c:50)
> +str.c: In function ??????str_frobnicate??????:
> +str.c:205: warning: ??????frobnicate?????? is deprecated (declared at str.h:48)
> +str.c:206: warning: ??????frobnicate?????? is deprecated (declared at str.h:48)
> +gcc -L/home/bkerin/local/lib str.o str_test.o -lgobject-2.0 -lglib-2.0 -o str_test
> +
> +But I'm not sure which methods never get called directly or by macros
> +so I left the attributes on all of them.
> +
> +For that matter, are we sure it can make sense ever to try to use
> +something like G_GNUC_MALLOC or G_GNUC_NORETURN in the face of all the
> +wrappers? Maybe these should just not be supported, like G_GNUC_CONST
> +and G_GNUC_PURE which really don't make sense for object methods.
> +
> +Ok G_GNUC_DEPRECATED is also not a good idea since the .c file calls
> +the function itself in various places, rather than the ___real
> +version. It seems like calling ___real variants everywhere might work
> +for this case but not emitting attributes for these variants might not
> +work for other function attributes, and the emission order in the .c
> +files would have to change. Actually it looks best to just not
> +support anything but the printf style attributes (those are what we
> +really want anyway).
> +
> +Annnd... this probably means we could have gotten by without stuffing
> +more state into the lexer, since all the remaining attribute take
> +paren-enclosed arguments lists. Oh well.
> diff -u -Naur pristine/gob2-2.0.14/src/parse.c modified/gob2-2.0.14/src/parse.c
> --- pristine/gob2-2.0.14/src/parse.c 2005-12-16 15:23:03.000000000 -0500
> +++ modified/gob2-2.0.14/src/parse.c 1969-12-31 19:00:00.000000000 -0500
> @@ -1,4481 +0,0 @@
> -/* A Bison parser, made by GNU Bison 2.0. */
> -
> -/* Skeleton parser for Yacc-like parsing with Bison,
> - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 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 2, 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, write to the Free Software
> - Foundation, Inc., 59 Temple Place - Suite 330,
> - Boston, MA 02111-1307, USA. */
> -
> -/* As a special exception, when this file is copied by Bison into a
> - Bison output file, you may use that output file without restriction.
> - This special exception was added by the Free Software Foundation
> - in version 1.24 of Bison. */
> -
> -/* 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
> -
> -/* Skeleton name. */
> -#define YYSKELETON_NAME "yacc.c"
> -
> -/* Pure parsers. */
> -#define YYPURE 0
> -
> -/* Using locations. */
> -#define YYLSP_NEEDED 0
> -
> -
> -
> -/* Tokens. */
> -#ifndef YYTOKENTYPE
> -# define YYTOKENTYPE
> - /* Put the tokens into the symbol table, so that GDB and other debuggers
> - know about them. */
> - enum yytokentype {
> - CLASS = 258,
> - FROM = 259,
> - CONST = 260,
> - VOID = 261,
> - STRUCT = 262,
> - UNION = 263,
> - ENUM = 264,
> - THREEDOTS = 265,
> - SIGNED = 266,
> - UNSIGNED = 267,
> - LONG = 268,
> - SHORT = 269,
> - INT = 270,
> - FLOAT = 271,
> - DOUBLE = 272,
> - CHAR = 273,
> - TOKEN = 274,
> - NUMBER = 275,
> - TYPETOKEN = 276,
> - ARRAY_DIM = 277,
> - SINGLE_CHAR = 278,
> - CCODE = 279,
> - HTCODE = 280,
> - PHCODE = 281,
> - HCODE = 282,
> - ACODE = 283,
> - ATCODE = 284,
> - STRING = 285,
> - PUBLIC = 286,
> - PRIVATE = 287,
> - PROTECTED = 288,
> - CLASSWIDE = 289,
> - PROPERTY = 290,
> - ARGUMENT = 291,
> - VIRTUAL = 292,
> - SIGNAL = 293,
> - OVERRIDE = 294,
> - NICK = 295,
> - BLURB = 296,
> - MAXIMUM = 297,
> - MINIMUM = 298,
> - DEFAULT_VALUE = 299,
> - ERROR = 300,
> - FLAGS = 301,
> - TYPE = 302,
> - FLAGS_TYPE = 303,
> - ENUM_TYPE = 304,
> - PARAM_TYPE = 305,
> - BOXED_TYPE = 306,
> - OBJECT_TYPE = 307
> - };
> -#endif
> -#define CLASS 258
> -#define FROM 259
> -#define CONST 260
> -#define VOID 261
> -#define STRUCT 262
> -#define UNION 263
> -#define ENUM 264
> -#define THREEDOTS 265
> -#define SIGNED 266
> -#define UNSIGNED 267
> -#define LONG 268
> -#define SHORT 269
> -#define INT 270
> -#define FLOAT 271
> -#define DOUBLE 272
> -#define CHAR 273
> -#define TOKEN 274
> -#define NUMBER 275
> -#define TYPETOKEN 276
> -#define ARRAY_DIM 277
> -#define SINGLE_CHAR 278
> -#define CCODE 279
> -#define HTCODE 280
> -#define PHCODE 281
> -#define HCODE 282
> -#define ACODE 283
> -#define ATCODE 284
> -#define STRING 285
> -#define PUBLIC 286
> -#define PRIVATE 287
> -#define PROTECTED 288
> -#define CLASSWIDE 289
> -#define PROPERTY 290
> -#define ARGUMENT 291
> -#define VIRTUAL 292
> -#define SIGNAL 293
> -#define OVERRIDE 294
> -#define NICK 295
> -#define BLURB 296
> -#define MAXIMUM 297
> -#define MINIMUM 298
> -#define DEFAULT_VALUE 299
> -#define ERROR 300
> -#define FLAGS 301
> -#define TYPE 302
> -#define FLAGS_TYPE 303
> -#define ENUM_TYPE 304
> -#define PARAM_TYPE 305
> -#define BOXED_TYPE 306
> -#define OBJECT_TYPE 307
> -
> -
> -
> -
> -/* Copy the first part of user declarations. */
> -#line 23 "parse.y"
> -
> -
> -#include "config.h"
> -#include <glib.h>
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <string.h>
> -
> -#include "treefuncs.h"
> -#include "main.h"
> -#include "util.h"
> -
> -/* FIXME: add gettext support */
> -#define _(x) (x)
> -
> -GList *nodes = NULL;
> -
> -static GList *class_nodes = NULL;
> -Node *class = NULL;
> -GList *enums = NULL;
> -static GList *enum_vals = NULL;
> -static GList *flag_vals = NULL;
> -static GList *error_vals = NULL;
> -
> -static gboolean abstract = FALSE;
> -static char *chunk_size = NULL;
> -static char *bonobo_object_class = NULL;
> -static int glade_xml = FALSE;
> -static GList *interfaces = NULL;
> -static GList *typestack = NULL;
> -static GList *funcargs = NULL;
> -static GList *checks = NULL;
> -static int has_self = FALSE;
> -static int vararg = FALSE;
> -static Method *last_added_method = NULL;
> -
> -/* destructor and initializer for variables */
> -static gboolean destructor_unref = FALSE;
> -static char *destructor = NULL;
> -static int destructor_line = 0;
> -static gboolean destructor_simple = TRUE;
> -static char *initializer = NULL;
> -static int initializer_line = 0;
> -static int glade_widget = FALSE;
> -
> -static char *onerror = NULL;
> -static char *defreturn = NULL;
> -
> -static GList *gtktypes = NULL;
> -
> -static Property *property = NULL;
> -
> -/* this can be a global as we will only do one function at a time
> - anyway */
> -static int the_scope = NO_SCOPE;
> -
> -void free(void *ptr);
> -int yylex(void);
> -
> -extern int ccode_line;
> -extern int line_no;
> -extern gboolean for_cpp;
> -
> -extern char *yytext;
> -
> -static void
> -yyerror(char *str)
> -{
> - char *out=NULL;
> - char *p;
> -
> - if(strcmp(yytext,"\n")==0) {
> - out=g_strconcat("Error: ",str," before newline",NULL);
> - } else if(yytext[0]=='\0') {
> - out=g_strconcat("Error: ", str, " at end of input", NULL);
> - } else {
> - char *tmp = g_strdup(yytext);
> - while((p=strchr(tmp, '\n')))
> - *p='.';
> -
> - out=g_strconcat("Error: ", str, " before '", tmp, "'", NULL);
> - g_free(tmp);
> - }
> -
> - fprintf(stderr, "%s:%d: %s\n", filename, line_no, out);
> - g_free(out);
> -
> - exit(1);
> -}
> -
> -static Type *
> -pop_type(void)
> -{
> - Type *type = typestack->data;
> - typestack = g_list_remove(typestack,typestack->data);
> - return type;
> -}
> -
> -static void
> -push_variable (char *name, int scope, int line_no, char *postfix)
> -{
> - Node *var;
> - Type *type = pop_type ();
> -
> - type->postfix = postfix;
> -
> - var = node_new (VARIABLE_NODE,
> - "scope", scope,
> - "vtype:steal", type,
> - "glade_widget", glade_widget,
> - "id:steal", name,
> - "line_no", line_no,
> - "destructor_unref", destructor_unref,
> - "destructor:steal", destructor,
> - "destructor_line", destructor_line,
> - "destructor_simple", destructor_simple,
> - "initializer:steal", initializer,
> - "initializer_line", initializer_line,
> - "initializer_simple", TRUE,
> - NULL);
> - class_nodes = g_list_append(class_nodes, var);
> - glade_widget = FALSE;
> -}
> -
> -static void
> -push_function (int scope, int method, char *oid, char *id,
> - GString *cbuf, int line_no, int ccode_line,
> - gboolean vararg, GList *flags)
> -{
> - Node *node;
> - Type *type;
> - char *c_cbuf;
> -
> - g_assert(scope != CLASS_SCOPE);
> -
> - if(method == INIT_METHOD || method == CLASS_INIT_METHOD) {
> - type = (Type *)node_new (TYPE_NODE,
> - "name", "void",
> - NULL);
> - } else {
> - type = pop_type();
> - }
> -
> - /* a complicated and ugly test to figure out if we have
> - the wrong number of types for a signal */
> - if((method == SIGNAL_FIRST_METHOD ||
> - method == SIGNAL_LAST_METHOD) &&
> - g_list_length(gtktypes) != g_list_length(funcargs) &&
> - !(g_list_length(funcargs) == 1 &&
> - g_list_length(gtktypes) == 2 &&
> - strcmp(gtktypes->next->data, "NONE")==0)) {
> - error_print(GOB_WARN, line_no,
> - _("The number of GTK arguments and "
> - "function arguments for a signal "
> - "don't seem to match"));
> - }
> - if(g_list_length(gtktypes) > 2) {
> - GList *li;
> - for(li = gtktypes->next; li; li = li->next) {
> - if(strcmp(li->data, "NONE")==0) {
> - error_print(GOB_ERROR, line_no,
> - _("NONE can only appear in an "
> - "argument list by itself"));
> - }
> - }
> - }
> - if(cbuf) {
> - char *p;
> - c_cbuf = p = cbuf->str;
> - while(p && *p && (*p==' ' || *p=='\t' || *p=='\n' || *p=='\r'))
> - p++;
> - if(!p || !*p)
> - c_cbuf = NULL;
> - } else
> - c_cbuf = NULL;
> -
> - node = node_new (METHOD_NODE,
> - "scope", scope,
> - "method", method,
> - "mtype:steal", type,
> - "otype:steal", oid,
> - "gtktypes:steal", gtktypes,
> - "flags:steal", flags,
> - "id:steal", id,
> - "args:steal", funcargs,
> - "onerror:steal", onerror,
> - "defreturn:steal", defreturn,
> - "cbuf:steal", c_cbuf,
> - "line_no", line_no,
> - "ccode_line", ccode_line,
> - "vararg", vararg,
> - "unique_id", method_unique_id++,
> - NULL);
> -
> - last_added_method = (Method *)node;
> -
> - if(cbuf)
> - g_string_free(cbuf,
> - /*only free segment if we haven't passed it
> - above */
> - c_cbuf?FALSE:TRUE);
> - gtktypes = NULL;
> - funcargs = NULL;
> -
> - onerror = NULL;
> - defreturn = NULL;
> -
> - class_nodes = g_list_append(class_nodes, node);
> -}
> -
> -static void
> -free_all_global_state(void)
> -{
> - g_free(onerror);
> - onerror = NULL;
> - g_free(defreturn);
> - defreturn = NULL;
> -
> - g_free(chunk_size);
> - chunk_size = NULL;
> -
> - g_list_foreach(gtktypes, (GFunc)g_free, NULL);
> - g_list_free(gtktypes);
> - gtktypes = NULL;
> -
> - node_list_free (funcargs);
> - funcargs = NULL;
> -}
> -
> -static void
> -push_funcarg(char *name, char *postfix)
> -{
> - Node *node;
> - Type *type = pop_type();
> -
> - type->postfix = postfix;
> -
> - node = node_new (FUNCARG_NODE,
> - "atype:steal", type,
> - "name:steal", name,
> - "checks:steal", checks,
> - NULL);
> - checks = NULL;
> -
> - funcargs = g_list_append(funcargs, node);
> -}
> -
> -static void
> -push_init_arg(char *name, int is_class)
> -{
> - Node *node;
> - Node *type;
> - char *tn;
> -
> - if(is_class)
> - tn = g_strconcat(((Class *)class)->otype,":Class",NULL);
> - else
> - tn = g_strdup(((Class *)class)->otype);
> -
> - type = node_new (TYPE_NODE,
> - "name:steal", tn,
> - "pointer", "*",
> - NULL);
> - node = node_new (FUNCARG_NODE,
> - "atype:steal", (Type *)type,
> - "name:steal", name,
> - NULL);
> - funcargs = g_list_prepend(funcargs, node);
> -}
> -
> -static void
> -push_self(char *id, gboolean constant)
> -{
> - Node *node;
> - Node *type;
> - GList *ch = NULL;
> - type = node_new (TYPE_NODE,
> - "name", ((Class *)class)->otype,
> - "pointer", constant ? "const *" : "*",
> - NULL);
> - ch = g_list_append (ch, node_new (CHECK_NODE,
> - "chtype", NULL_CHECK,
> - NULL));
> - ch = g_list_append (ch, node_new (CHECK_NODE,
> - "chtype", TYPE_CHECK,
> - NULL));
> - node = node_new (FUNCARG_NODE,
> - "atype:steal", (Type *)type,
> - "name:steal", id,
> - "checks:steal", ch,
> - NULL);
> - funcargs = g_list_prepend(funcargs, node);
> -}
> -
> -static Variable *
> -find_var_or_die(const char *id, int line)
> -{
> - GList *li;
> -
> - for(li = class_nodes; li != NULL; li = li->next) {
> - Variable *var;
> - Node *node = li->data;
> - if(node->type != VARIABLE_NODE)
> - continue;
> - var = li->data;
> - if(strcmp(var->id, id)==0)
> - return var;
> - }
> -
> - error_printf(GOB_ERROR, line, _("Variable %s not defined here"), id);
> -
> - g_assert_not_reached();
> - return NULL;
> -}
> -
> -static gboolean
> -set_return_value(char *type, char *val)
> -{
> - if(strcmp(type, "onerror")==0) {
> - if(!onerror) {
> - onerror = val;
> - return TRUE;
> - } else
> - return FALSE;
> - } else if(strcmp(type, "defreturn")==0) {
> - if(!defreturn) {
> - defreturn = val;
> - return TRUE;
> - } else
> - return FALSE;
> - }
> - return FALSE;
> -}
> -
> -static void
> -export_accessors (const char *var_name,
> - gboolean do_get,
> - int get_lineno,
> - gboolean do_set,
> - int set_lineno,
> - Type *type,
> - const char *gtktype,
> - int lineno)
> -{
> - Type *the_type;
> -
> - if (type != NULL)
> - the_type = (Type *)node_copy ((Node *)type);
> - else
> - the_type = get_tree_type (gtktype, TRUE);
> -
> - if (the_type == NULL) {
> - error_print (GOB_ERROR, line_no,
> - _("Cannot determine type of property or argument"));
> - return;
> - }
> -
> - if (do_get) {
> - char *get_id = g_strdup_printf ("get_%s", var_name);
> - GString *get_cbuf = g_string_new (NULL);
> - Node *node1 = node_new (TYPE_NODE,
> - "name", the_type->name,
> - "pointer", the_type->pointer,
> - "postfix", the_type->postfix,
> - NULL);
> - Node *node3 = node_new (TYPE_NODE,
> - "name", class->class.otype,
> - "pointer", "*",
> - NULL);
> -
> - g_string_sprintf (get_cbuf,
> - "\t%s%s val; "
> - "g_object_get (G_OBJECT (self), \"%s\", "
> - "&val, NULL); "
> - "return val;\n",
> - the_type->name,
> - the_type->pointer ? the_type->pointer : "",
> - var_name);
> -
> - typestack = g_list_prepend (typestack, node1);
> - typestack = g_list_prepend (typestack, node3);
> -
> - push_funcarg ("self", FALSE);
> -
> - push_function (PUBLIC_SCOPE, REGULAR_METHOD, NULL,
> - get_id, get_cbuf, get_lineno,
> - lineno, FALSE, NULL);
> - }
> -
> - if (do_set) {
> - char *set_id = g_strdup_printf ("set_%s", var_name);
> - GString *set_cbuf = g_string_new (NULL);
> - Node *node1 = node_new (TYPE_NODE,
> - "name", the_type->name,
> - "pointer", the_type->pointer,
> - "postfix", the_type->postfix,
> - NULL);
> - Node *node2 = node_new (TYPE_NODE,
> - "name", "void",
> - NULL);
> - Node *node3 = node_new (TYPE_NODE,
> - "name", class->class.otype,
> - "pointer", "*",
> - NULL);
> -
> - g_string_sprintf (set_cbuf,
> - "\tg_object_set (G_OBJECT (self), "
> - "\"%s\", val, NULL);\n",
> - var_name);
> -
> - typestack = g_list_prepend (typestack, node2);
> - typestack = g_list_prepend (typestack, node1);
> - typestack = g_list_prepend (typestack, node3);
> -
> - push_funcarg ("self", FALSE);
> - push_funcarg ("val", FALSE);
> -
> - typestack = g_list_prepend (typestack, node2);
> - push_function (PUBLIC_SCOPE, REGULAR_METHOD, NULL,
> - set_id, set_cbuf, set_lineno,
> - lineno, FALSE, NULL);
> - }
> -
> - node_free ((Node *)the_type);
> -}
> -
> -static char *
> -get_prop_enum_flag_cast (Property *prop)
> -{
> - char *tmp, *ret;
> - if (prop->extra_gtktype == NULL ||
> - /* HACK! just in case someone made this
> - * work with 2.0.0 by using the TYPE
> - * macro directly */
> - ((strstr (prop->extra_gtktype, "_TYPE_") != NULL ||
> - strstr (prop->extra_gtktype, "TYPE_") == prop->extra_gtktype) &&
> - strchr (prop->extra_gtktype, ':') == NULL)) {
> - if (prop->ptype != NULL)
> - return get_type (prop->ptype, TRUE);
> - else
> - return g_strdup ("");
> - }
> - tmp = remove_sep (prop->extra_gtktype);
> - ret = g_strdup_printf ("(%s) ", tmp);
> - g_free (tmp);
> - return ret;
> -}
> -
> -static void
> -add_construct_glade (char * file, char * root, char * domain)
> -{
> - Node *var;
> - Type * type;
> - GList * flags = NULL;
> -
> - type = (Type *)node_new (TYPE_NODE,
> - "name", "GladeXML",
> - "pointer", "*",
> - NULL);
> - initializer = g_strdup_printf("\t{\n"
> - "\tGtkWidget * root;\n"
> - "\t%%1$s->_priv->_glade_xml = glade_xml_new(%s, %s, %s);\n"
> - "\troot = glade_xml_get_widget(%%1$s->_priv->_glade_xml, %s);\n"
> - "\tgtk_widget_show(root);\n"
> - "\tgtk_container_add(GTK_CONTAINER(%%1$s), root);\n"
> - "\tglade_xml_signal_autoconnect_full(%%1$s->_priv->_glade_xml, (GladeXMLConnectFunc)___glade_xml_connect_foreach, (gpointer)%%1$s);\n"
> - "}\n", file, root, domain ? domain : "NULL", root);
> -
> - var = node_new (VARIABLE_NODE,
> - "scope", PRIVATE_SCOPE,
> - "vtype:steal", type,
> - "glade_widget", FALSE,
> - "id:steal", "_glade_xml",
> - "destructor_unref", FALSE,
> - "destructor", "g_object_unref",
> - "destructor_simple", TRUE,
> - "initializer", initializer,
> - "initializer_simple", FALSE,
> - NULL);
> - class_nodes = g_list_prepend(class_nodes, var);
> -}
> -
> -static void
> -property_link_and_export (Node *node)
> -{
> - Property *prop = (Property *)node;
> -
> - if (prop->link) {
> - const char *root;
> - char *get = NULL, *set = NULL;
> - Variable *var;
> -
> - if (prop->set != NULL ||
> - prop->get != NULL) {
> - error_print (GOB_ERROR, prop->line_no,
> - _("Property linking requested, but "
> - "getters and setters exist"));
> - }
> -
> - var = find_var_or_die (prop->name, prop->line_no);
> - if(var->scope == PRIVATE_SCOPE) {
> - root = "self->_priv";
> - } else if (var->scope == CLASS_SCOPE) {
> - root = "SELF_GET_CLASS(self)";
> - if (no_self_alias)
> - error_print (GOB_ERROR, prop->line_no,
> - _("Self aliases needed when autolinking to a classwide member"));
> - } else {
> - root = "self";
> - }
> -
> - if (strcmp (prop->gtktype, "STRING") == 0) {
> - set = g_strdup_printf("{ char *old = %s->%s; "
> - "%s->%s = g_value_dup_string (VAL); g_free (old); }",
> - root, prop->name,
> - root, prop->name);
> - get = g_strdup_printf("g_value_set_string (VAL, %s->%s);",
> - root, prop->name);
> - } else if (strcmp (prop->gtktype, "OBJECT") == 0) {
> - char *cast;
> - if (prop->extra_gtktype != NULL) {
> - cast = remove_sep (prop->extra_gtktype);
> - } else {
> - cast = g_strdup ("void");
> - }
> - set = g_strdup_printf("{ GObject *___old = (GObject *)%s->%s; "
> - "%s->%s = (%s *)g_value_dup_object (VAL); "
> - "if (___old != NULL) { "
> - "g_object_unref (G_OBJECT (___old)); "
> - "} "
> - "}",
> - root, prop->name,
> - root, prop->name,
> - cast);
> - get = g_strdup_printf ("g_value_set_object (VAL, "
> - "(gpointer)%s->%s);",
> - root, prop->name);
> - g_free (cast);
> - } else if (strcmp (prop->gtktype, "BOXED") == 0) {
> - char *type = make_me_type (prop->extra_gtktype,
> - "G_TYPE_BOXED");
> - if (prop->extra_gtktype == NULL) {
> - error_print (GOB_ERROR, prop->line_no,
> - _("Property linking requested for BOXED, but "
> - "boxed_type not set"));
> - }
> - set = g_strdup_printf("{ gpointer ___old = (gpointer)%s->%s; "
> - "gpointer ___new = (gpointer)g_value_get_boxed (VAL); "
> - "if (___new != ___old) { "
> - "if (___old != NULL) g_boxed_free (%s, ___old); "
> - "if (___new != NULL) %s->%s = g_boxed_copy (%s, ___new); "
> - "else %s->%s = NULL;"
> - "} "
> - "}",
> - root, prop->name,
> - type,
> - root, prop->name,
> - type,
> - root, prop->name);
> - get = g_strdup_printf("g_value_set_boxed (VAL, %s->%s);",
> - root, prop->name);
> - g_free (type);
> - } else {
> - char *set_func;
> - char *get_func;
> - const char *getcast = "";
> - const char *setcast = "";
> - char *to_free = NULL;
> - set_func = g_strdup_printf ("g_value_set_%s", prop->gtktype);
> - g_strdown (set_func);
> - get_func = g_strdup_printf ("g_value_get_%s", prop->gtktype);
> - g_strdown (get_func);
> -
> - if (for_cpp) {
> - if (strcmp (prop->gtktype, "FLAGS") == 0) {
> - setcast = "(guint) ";
> - getcast = to_free =
> - get_prop_enum_flag_cast (prop);
> - } else if (strcmp (prop->gtktype, "ENUM") == 0) {
> - setcast = "(gint) ";
> - getcast = to_free =
> - get_prop_enum_flag_cast (prop);
> - } else if (strcmp (prop->gtktype, "POINTER") == 0) {
> - setcast = "(gpointer) ";
> - getcast = g_strdup_printf ("(%s%s) ",
> - prop->ptype->name,
> - prop->ptype->pointer ? prop->ptype->pointer : "");
> - }
> - }
> -
> - set = g_strdup_printf("%s->%s = %s%s (VAL);",
> - root, prop->name,
> - getcast,
> - get_func);
> - get = g_strdup_printf("%s (VAL, %s%s->%s);",
> - set_func,
> - setcast,
> - root, prop->name);
> -
> - g_free (get_func);
> - g_free (set_func);
> - g_free (to_free);
> - }
> -
> - node_set (node,
> - "get:steal", get,
> - "get_line", prop->line_no,
> - "set:steal", set,
> - "set_line", prop->line_no,
> - NULL);
> - }
> -
> - if (prop->export) {
> - export_accessors (prop->name,
> - prop->get != NULL, prop->get_line,
> - prop->set != NULL, prop->set_line,
> - prop->ptype,
> - prop->gtktype,
> - prop->line_no);
> - }
> -}
> -
> -
> -static char *
> -debool (char *s)
> -{
> - if (strcmp (s, "BOOL") == 0) {
> - error_print (GOB_WARN, line_no,
> - _("BOOL type is deprecated, please use BOOLEAN"));
> - g_free (s);
> - return g_strdup ("BOOLEAN");
> - } else {
> - return s;
> - }
> -}
> -
> -static void
> -ensure_property (void)
> -{
> - if (property == NULL)
> - property = (Property *)node_new (PROPERTY_NODE, NULL);
> -}
> -
> -
> -
> -/* Enabling traces. */
> -#ifndef YYDEBUG
> -# define YYDEBUG 1
> -#endif
> -
> -/* Enabling verbose error messages. */
> -#ifdef YYERROR_VERBOSE
> -# undef YYERROR_VERBOSE
> -# define YYERROR_VERBOSE 1
> -#else
> -# define YYERROR_VERBOSE 0
> -#endif
> -
> -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
> -#line 668 "parse.y"
> -typedef union YYSTYPE {
> - char *id;
> - GString *cbuf;
> - GList *list;
> - int line;
> - int sigtype;
> -} YYSTYPE;
> -/* Line 190 of yacc.c. */
> -#line 833 "y.tab.c"
> -# define yystype YYSTYPE /* obsolescent; will be withdrawn */
> -# define YYSTYPE_IS_DECLARED 1
> -# define YYSTYPE_IS_TRIVIAL 1
> -#endif
> -
> -
> -
> -/* Copy the second part of user declarations. */
> -
> -
> -/* Line 213 of yacc.c. */
> -#line 845 "y.tab.c"
> -
> -#if ! defined (yyoverflow) || YYERROR_VERBOSE
> -
> -# ifndef YYFREE
> -# define YYFREE free
> -# endif
> -# ifndef YYMALLOC
> -# define YYMALLOC malloc
> -# endif
> -
> -/* 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
> -# else
> -# define YYSTACK_ALLOC alloca
> -# endif
> -# endif
> -# endif
> -
> -# ifdef YYSTACK_ALLOC
> - /* Pacify GCC's `empty if-body' warning. */
> -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
> -# else
> -# if defined (__STDC__) || defined (__cplusplus)
> -# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
> -# define YYSIZE_T size_t
> -# endif
> -# define YYSTACK_ALLOC YYMALLOC
> -# define YYSTACK_FREE YYFREE
> -# 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
> -{
> - short int yyss;
> - YYSTYPE yyvs;
> - };
> -
> -/* 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 (short int) + 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 \
> - { \
> - register YYSIZE_T yyi; \
> - for (yyi = 0; yyi < (Count); yyi++) \
> - (To)[yyi] = (From)[yyi]; \
> - } \
> - while (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) \
> - do \
> - { \
> - YYSIZE_T yynewbytes; \
> - YYCOPY (&yyptr->Stack, Stack, yysize); \
> - Stack = &yyptr->Stack; \
> - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
> - yyptr += yynewbytes / sizeof (*yyptr); \
> - } \
> - while (0)
> -
> -#endif
> -
> -#if defined (__STDC__) || defined (__cplusplus)
> - typedef signed char yysigned_char;
> -#else
> - typedef short int yysigned_char;
> -#endif
> -
> -/* YYFINAL -- State number of the termination state. */
> -#define YYFINAL 23
> -/* YYLAST -- Last index in YYTABLE. */
> -#define YYLAST 629
> -
> -/* YYNTOKENS -- Number of terminals. */
> -#define YYNTOKENS 66
> -/* YYNNTS -- Number of nonterminals. */
> -#define YYNNTS 53
> -/* YYNRULES -- Number of rules. */
> -#define YYNRULES 195
> -/* YYNRULES -- Number of states. */
> -#define YYNSTATES 414
> -
> -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
> -#define YYUNDEFTOK 2
> -#define YYMAXUTOK 307
> -
> -#define YYTRANSLATE(YYX) \
> - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
> -
> -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
> -static const unsigned char 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, 64, 2, 2, 2, 2, 2, 2,
> - 55, 56, 61, 2, 59, 65, 2, 2, 2, 2,
> - 2, 2, 2, 2, 2, 2, 2, 2, 2, 57,
> - 63, 58, 62, 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, 53, 60, 54, 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, 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
> -};
> -
> -#if YYDEBUG
> -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
> - YYRHS. */
> -static const unsigned short int yyprhs[] =
> -{
> - 0, 0, 3, 7, 10, 13, 15, 17, 19, 21,
> - 23, 25, 27, 30, 33, 36, 39, 41, 43, 45,
> - 47, 52, 56, 62, 63, 68, 74, 80, 86, 93,
> - 101, 108, 116, 119, 121, 123, 126, 130, 132, 134,
> - 136, 138, 140, 142, 144, 146, 149, 153, 156, 160,
> - 163, 166, 168, 170, 172, 173, 179, 186, 199, 209,
> - 216, 220, 221, 233, 242, 248, 252, 253, 257, 259,
> - 261, 266, 268, 270, 274, 278, 282, 286, 290, 294,
> - 298, 302, 306, 310, 314, 318, 322, 326, 330, 334,
> - 338, 340, 346, 348, 352, 353, 357, 359, 362, 364,
> - 366, 368, 371, 374, 377, 381, 385, 388, 391, 394,
> - 396, 399, 401, 404, 406, 408, 410, 412, 414, 416,
> - 418, 420, 422, 424, 426, 428, 430, 433, 436, 440,
> - 443, 445, 449, 453, 456, 458, 463, 467, 469, 472,
> - 474, 485, 497, 507, 517, 526, 538, 547, 553, 556,
> - 561, 562, 564, 567, 569, 571, 574, 577, 581, 586,
> - 591, 593, 597, 599, 603, 605, 608, 612, 619, 627,
> - 630, 632, 634, 637, 640, 644, 648, 652, 656, 664,
> - 673, 677, 679, 683, 685, 693, 702, 706, 708, 716,
> - 725, 729, 731, 733, 736, 738
> -};
> -
> -/* YYRHS -- A `-1'-separated list of the rules' RHS. */
> -static const yysigned_char yyrhs[] =
> -{
> - 67, 0, -1, 69, 70, 69, -1, 70, 69, -1,
> - 69, 70, -1, 70, -1, 24, -1, 27, -1, 25,
> - -1, 26, -1, 28, -1, 29, -1, 69, 68, -1,
> - 69, 111, -1, 69, 114, -1, 69, 116, -1, 68,
> - -1, 111, -1, 114, -1, 116, -1, 71, 53, 73,
> - 54, -1, 71, 53, 54, -1, 3, 21, 4, 21,
> - 72, -1, -1, 55, 19, 56, 72, -1, 55, 19,
> - 19, 56, 72, -1, 55, 19, 21, 56, 72, -1,
> - 55, 19, 20, 56, 72, -1, 55, 19, 30, 30,
> - 56, 72, -1, 55, 19, 30, 30, 30, 56, 72,
> - -1, 55, 19, 19, 30, 56, 72, -1, 55, 19,
> - 19, 30, 30, 56, 72, -1, 73, 74, -1, 74,
> - -1, 102, -1, 19, 102, -1, 19, 21, 102, -1,
> - 79, -1, 80, -1, 82, -1, 57, -1, 31, -1,
> - 32, -1, 33, -1, 34, -1, 19, 19, -1, 19,
> - 53, 24, -1, 58, 118, -1, 58, 53, 24, -1,
> - 76, 77, -1, 77, 76, -1, 77, -1, 76, -1,
> - 19, -1, -1, 75, 91, 19, 78, 57, -1, 75,
> - 91, 19, 22, 78, 57, -1, 36, 89, 88, 19,
> - 81, 19, 53, 24, 19, 53, 24, 57, -1, 36,
> - 89, 88, 19, 81, 19, 53, 24, 57, -1, 36,
> - 89, 88, 19, 81, 19, -1, 55, 19, 56, -1,
> - -1, 35, 19, 19, 83, 19, 53, 24, 19, 53,
> - 24, 57, -1, 35, 19, 19, 83, 19, 53, 24,
> - 57, -1, 35, 19, 19, 83, 57, -1, 55, 84,
> - 56, -1, -1, 84, 59, 87, -1, 87, -1, 30,
> - -1, 19, 55, 30, 56, -1, 118, -1, 85, -1,
> - 40, 58, 85, -1, 41, 58, 85, -1, 42, 58,
> - 118, -1, 43, 58, 118, -1, 44, 58, 86, -1,
> - 46, 58, 90, -1, 47, 58, 91, -1, 48, 58,
> - 21, -1, 48, 58, 19, -1, 49, 58, 21, -1,
> - 49, 58, 19, -1, 50, 58, 21, -1, 50, 58,
> - 19, -1, 51, 58, 21, -1, 51, 58, 19, -1,
> - 52, 58, 21, -1, 52, 58, 19, -1, 19, -1,
> - 19, 55, 19, 91, 56, -1, 19, -1, 55, 90,
> - 56, -1, -1, 19, 60, 90, -1, 19, -1, 92,
> - 96, -1, 92, -1, 93, -1, 19, -1, 5, 19,
> - -1, 19, 5, -1, 95, 19, -1, 5, 95, 19,
> - -1, 95, 19, 5, -1, 94, 93, -1, 21, 93,
> - -1, 5, 93, -1, 21, -1, 21, 5, -1, 94,
> - -1, 94, 5, -1, 6, -1, 18, -1, 14, -1,
> - 15, -1, 13, -1, 16, -1, 17, -1, 11, -1,
> - 12, -1, 7, -1, 8, -1, 9, -1, 61, -1,
> - 61, 5, -1, 61, 96, -1, 61, 5, 96, -1,
> - 19, 99, -1, 99, -1, 75, 19, 99, -1, 19,
> - 75, 99, -1, 75, 99, -1, 97, -1, 19, 55,
> - 100, 56, -1, 100, 59, 19, -1, 19, -1, 53,
> - 24, -1, 57, -1, 38, 89, 98, 91, 19, 55,
> - 105, 56, 103, 101, -1, 75, 38, 89, 97, 91,
> - 19, 55, 105, 56, 103, 101, -1, 37, 75, 91,
> - 19, 55, 105, 56, 103, 101, -1, 75, 37, 91,
> - 19, 55, 105, 56, 103, 101, -1, 37, 91, 19,
> - 55, 105, 56, 103, 101, -1, 39, 55, 21, 56,
> - 91, 19, 55, 105, 56, 103, 101, -1, 75, 91,
> - 19, 55, 105, 56, 103, 101, -1, 19, 55, 19,
> - 56, 101, -1, 19, 104, -1, 19, 104, 19, 104,
> - -1, -1, 118, -1, 53, 24, -1, 6, -1, 19,
> - -1, 19, 5, -1, 5, 19, -1, 19, 59, 106,
> - -1, 19, 5, 59, 106, -1, 5, 19, 59, 106,
> - -1, 106, -1, 107, 59, 10, -1, 107, -1, 107,
> - 59, 108, -1, 108, -1, 91, 19, -1, 91, 19,
> - 22, -1, 91, 19, 55, 19, 109, 56, -1, 91,
> - 19, 22, 55, 19, 109, 56, -1, 109, 110, -1,
> - 110, -1, 19, -1, 62, 118, -1, 63, 118, -1,
> - 62, 58, 118, -1, 63, 58, 118, -1, 58, 58,
> - 118, -1, 64, 58, 118, -1, 9, 19, 53, 112,
> - 54, 21, 57, -1, 9, 19, 53, 112, 59, 54,
> - 21, 57, -1, 112, 59, 113, -1, 113, -1, 19,
> - 58, 118, -1, 19, -1, 46, 19, 53, 115, 54,
> - 21, 57, -1, 46, 19, 53, 115, 59, 54, 21,
> - 57, -1, 115, 59, 19, -1, 19, -1, 45, 19,
> - 53, 117, 54, 21, 57, -1, 45, 19, 53, 117,
> - 59, 54, 21, 57, -1, 117, 59, 19, -1, 19,
> - -1, 20, -1, 65, 20, -1, 23, -1, 19, -1
> -};
> -
> -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
> -static const unsigned short int yyrline[] =
> -{
> - 0, 689, 689, 690, 691, 692, 695, 704, 713, 722,
> - 731, 740, 751, 752, 753, 754, 755, 756, 757, 758,
> - 761, 766, 773, 790, 791, 799, 811, 820, 832, 841,
> - 850, 859, 870, 871, 874, 875, 884, 896, 897, 898,
> - 899, 902, 903, 904, 905, 908, 928, 952, 956, 964,
> - 965, 966, 967, 968, 976, 982, 985, 990, 1058, 1112,
> - 1201, 1209, 1214, 1262, 1298, 1314, 1315, 1318, 1319, 1322,
> - 1323, 1335, 1336, 1339, 1345, 1351, 1357, 1363, 1369, 1375,
> - 1382, 1388, 1394, 1400, 1406, 1412, 1418, 1424, 1430, 1436,
> - 1442, 1467, 1476, 1482, 1483, 1486, 1489, 1495, 1502, 1511,
> - 1514, 1517, 1521, 1525, 1529, 1534, 1542, 1546, 1551, 1555,
> - 1558, 1562, 1565, 1570, 1571, 1572, 1573, 1574, 1575, 1576,
> - 1577, 1578, 1581, 1582, 1583, 1586, 1587, 1588, 1592, 1599,
> - 1611, 1617, 1629, 1641, 1644, 1650, 1655, 1658, 1663, 1664,
> - 1668, 1684, 1700, 1716, 1732, 1743, 1749, 1759, 1782, 1793,
> - 1812, 1818, 1819, 1825, 1826, 1837, 1848, 1859, 1869, 1879,
> - 1889, 1892, 1893, 1896, 1897, 1900, 1903, 1906, 1914, 1924,
> - 1925, 1928, 1945, 1952, 1959, 1966, 1973, 1980, 1989, 1998,
> - 2009, 2010, 2013, 2033, 2043, 2052, 2063, 2066, 2071, 2080,
> - 2091, 2094, 2100, 2101, 2105, 2106
> -};
> -#endif
> -
> -#if YYDEBUG || YYERROR_VERBOSE
> -/* YYTNME[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", "CLASS", "FROM", "CONST", "VOID",
> - "STRUCT", "UNION", "ENUM", "THREEDOTS", "SIGNED", "UNSIGNED", "LONG",
> - "SHORT", "INT", "FLOAT", "DOUBLE", "CHAR", "TOKEN", "NUMBER",
> - "TYPETOKEN", "ARRAY_DIM", "SINGLE_CHAR", "CCODE", "HTCODE", "PHCODE",
> - "HCODE", "ACODE", "ATCODE", "STRING", "PUBLIC", "PRIVATE", "PROTECTED",
> - "CLASSWIDE", "PROPERTY", "ARGUMENT", "VIRTUAL", "SIGNAL", "OVERRIDE",
> - "NICK", "BLURB", "MAXIMUM", "MINIMUM", "DEFAULT_VALUE", "ERROR", "FLAGS",
> - "TYPE", "FLAGS_TYPE", "ENUM_TYPE", "PARAM_TYPE", "BOXED_TYPE",
> - "OBJECT_TYPE", "'{'", "'}'", "'('", "')'", "';'", "'='", "','", "'|'",
> - "'*'", "'>'", "'<'", "'!'", "'-'", "$accept", "prog", "ccode", "ccodes",
> - "class", "classdec", "classflags", "classcode", "thing", "scope",
> - "destructor", "initializer", "varoptions", "variable", "argument",
> - "export", "property", "param_spec", "param_spec_list", "string",
> - "anyval", "param_spec_value", "argtype", "flags", "flaglist", "type",
> - "specifier_list", "spec_list", "specifier", "strunionenum", "pointer",
> - "simplesigtype", "fullsigtype", "sigtype", "tokenlist", "codenocode",
> - "method", "returnvals", "retcode", "funcargs", "arglist", "arglist1",
> - "arg", "checklist", "check", "enumcode", "enumvals", "enumval",
> - "flagcode", "flagvals", "errorcode", "errorvals", "numtok", 0
> -};
> -#endif
> -
> -# ifdef YYPRINT
> -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
> - token YYLEX-NUM. */
> -static const unsigned short int 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, 123, 125, 40, 41, 59, 61, 44,
> - 124, 42, 62, 60, 33, 45
> -};
> -# endif
> -
> -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
> -static const unsigned char yyr1[] =
> -{
> - 0, 66, 67, 67, 67, 67, 68, 68, 68, 68,
> - 68, 68, 69, 69, 69, 69, 69, 69, 69, 69,
> - 70, 70, 71, 72, 72, 72, 72, 72, 72, 72,
> - 72, 72, 73, 73, 74, 74, 74, 74, 74, 74,
> - 74, 75, 75, 75, 75, 76, 76, 77, 77, 78,
> - 78, 78, 78, 78, 78, 79, 79, 80, 80, 80,
> - 81, 81, 82, 82, 82, 83, 83, 84, 84, 85,
> - 85, 86, 86, 87, 87, 87, 87, 87, 87, 87,
> - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
> - 87, 88, 88, 89, 89, 90, 90, 91, 91, 92,
> - 92, 92, 92, 92, 92, 92, 93, 93, 93, 93,
> - 93, 93, 93, 94, 94, 94, 94, 94, 94, 94,
> - 94, 94, 95, 95, 95, 96, 96, 96, 96, 97,
> - 97, 98, 98, 98, 98, 99, 100, 100, 101, 101,
> - 102, 102, 102, 102, 102, 102, 102, 102, 103, 103,
> - 103, 104, 104, 105, 105, 105, 105, 105, 105, 105,
> - 105, 106, 106, 107, 107, 108, 108, 108, 108, 109,
> - 109, 110, 110, 110, 110, 110, 110, 110, 111, 111,
> - 112, 112, 113, 113, 114, 114, 115, 115, 116, 116,
> - 117, 117, 118, 118, 118, 118
> -};
> -
> -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
> -static const unsigned char yyr2[] =
> -{
> - 0, 2, 3, 2, 2, 1, 1, 1, 1, 1,
> - 1, 1, 2, 2, 2, 2, 1, 1, 1, 1,
> - 4, 3, 5, 0, 4, 5, 5, 5, 6, 7,
> - 6, 7, 2, 1, 1, 2, 3, 1, 1, 1,
> - 1, 1, 1, 1, 1, 2, 3, 2, 3, 2,
> - 2, 1, 1, 1, 0, 5, 6, 12, 9, 6,
> - 3, 0, 11, 8, 5, 3, 0, 3, 1, 1,
> - 4, 1, 1, 3, 3, 3, 3, 3, 3, 3,
> - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
> - 1, 5, 1, 3, 0, 3, 1, 2, 1, 1,
> - 1, 2, 2, 2, 3, 3, 2, 2, 2, 1,
> - 2, 1, 2, 1, 1, 1, 1, 1, 1, 1,
> - 1, 1, 1, 1, 1, 1, 2, 2, 3, 2,
> - 1, 3, 3, 2, 1, 4, 3, 1, 2, 1,
> - 10, 11, 9, 9, 8, 11, 8, 5, 2, 4,
> - 0, 1, 2, 1, 1, 2, 2, 3, 4, 4,
> - 1, 3, 1, 3, 1, 2, 3, 6, 7, 2,
> - 1, 1, 2, 2, 3, 3, 3, 3, 7, 8,
> - 3, 1, 3, 1, 7, 8, 3, 1, 7, 8,
> - 3, 1, 1, 2, 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 unsigned char yydefact[] =
> -{
> - 0, 0, 0, 6, 8, 9, 7, 10, 11, 0,
> - 0, 0, 16, 0, 5, 0, 17, 18, 19, 0,
> - 0, 0, 0, 1, 12, 4, 13, 14, 15, 3,
> - 0, 0, 0, 0, 0, 2, 0, 41, 42, 43,
> - 44, 0, 94, 0, 94, 0, 21, 40, 0, 33,
> - 0, 37, 38, 39, 34, 23, 183, 0, 181, 191,
> - 0, 187, 0, 0, 0, 0, 0, 35, 0, 0,
> - 0, 0, 113, 122, 123, 124, 120, 121, 117, 115,
> - 116, 118, 119, 114, 100, 109, 0, 0, 98, 99,
> - 111, 0, 0, 0, 20, 32, 0, 94, 0, 0,
> - 22, 0, 0, 0, 0, 0, 0, 0, 36, 0,
> - 0, 66, 96, 0, 92, 0, 0, 101, 108, 0,
> - 102, 110, 107, 0, 0, 125, 97, 112, 106, 103,
> - 0, 0, 134, 0, 130, 0, 0, 0, 54, 0,
> - 195, 192, 194, 0, 182, 0, 0, 180, 0, 190,
> - 0, 0, 186, 0, 0, 0, 0, 0, 0, 93,
> - 0, 61, 104, 0, 0, 126, 127, 105, 0, 0,
> - 0, 129, 0, 133, 0, 0, 0, 0, 0, 53,
> - 54, 0, 0, 52, 51, 0, 0, 0, 0, 0,
> - 23, 193, 178, 0, 188, 0, 184, 0, 0, 139,
> - 147, 90, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 68, 0, 64, 95, 0,
> - 0, 0, 0, 0, 113, 100, 0, 0, 160, 162,
> - 164, 128, 137, 0, 132, 131, 0, 0, 0, 0,
> - 45, 0, 0, 0, 0, 47, 49, 0, 50, 55,
> - 0, 23, 23, 23, 0, 24, 179, 189, 185, 138,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 65, 0, 0, 0, 0, 59, 0, 101,
> - 102, 0, 165, 150, 0, 135, 0, 0, 0, 0,
> - 0, 46, 56, 150, 48, 0, 23, 25, 27, 26,
> - 0, 23, 0, 69, 73, 74, 75, 76, 195, 72,
> - 77, 71, 78, 79, 81, 80, 83, 82, 85, 84,
> - 87, 86, 89, 88, 67, 0, 91, 60, 0, 150,
> - 0, 0, 157, 166, 0, 0, 0, 161, 163, 136,
> - 0, 0, 150, 0, 0, 23, 30, 23, 28, 0,
> - 0, 63, 0, 0, 159, 158, 0, 0, 0, 148,
> - 151, 144, 150, 0, 0, 0, 146, 31, 29, 0,
> - 0, 0, 58, 142, 0, 171, 0, 0, 0, 0,
> - 0, 170, 152, 0, 0, 150, 143, 150, 70, 0,
> - 0, 0, 0, 0, 172, 0, 173, 0, 167, 169,
> - 149, 140, 0, 0, 62, 0, 168, 176, 174, 175,
> - 177, 145, 141, 57
> -};
> -
> -/* YYDEFGOTO[NTERM-NUM]. */
> -static const short int yydefgoto[] =
> -{
> - -1, 11, 12, 13, 14, 15, 100, 48, 49, 50,
> - 183, 184, 185, 51, 52, 221, 53, 157, 214, 304,
> - 310, 215, 115, 70, 113, 226, 88, 89, 90, 91,
> - 126, 132, 133, 134, 233, 200, 54, 336, 359, 227,
> - 228, 229, 230, 380, 381, 16, 57, 58, 17, 62,
> - 18, 60, 360
> -};
> -
> -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
> - STATE-NUM. */
> -#define YYPACT_NINF -325
> -static const short int yypact[] =
> -{
> - 144, -5, 92, -325, -325, -325, -325, -325, -325, 98,
> - 99, 123, -325, 144, 167, 78, -325, -325, -325, 161,
> - 121, 154, 182, -325, -325, 167, -325, -325, -325, 167,
> - 148, 179, 217, 227, 228, 167, 211, -325, -325, -325,
> - -325, 237, 229, 326, 229, 234, -325, -325, 184, -325,
> - 292, -325, -325, -325, -325, 263, 261, -31, -325, -325,
> - 147, -325, 174, 268, 283, 309, 292, -325, 317, 330,
> - 331, 373, -325, -325, -325, -325, -325, -325, -325, -325,
> - -325, -325, -325, -325, 346, 441, 390, 333, 294, -325,
> - 455, 334, 293, 335, -325, -325, 390, 229, 357, 364,
> - -325, 75, 372, 38, 379, 50, 389, 95, -325, 298,
> - 398, 393, 367, 378, 394, 425, 469, -325, -325, 431,
> - -325, 469, -325, 432, 408, 5, -325, 469, -325, 459,
> - 220, 446, -325, 390, -325, 421, 460, 470, 156, 178,
> - -325, -325, -325, 458, -325, 434, 467, -325, 435, -325,
> - 472, 437, -325, 474, 202, 442, 221, 39, 330, -325,
> - 477, 443, -325, 444, 407, 294, -325, -325, 445, 482,
> - 483, -325, -6, -325, 484, 390, 449, -6, 390, 101,
> - 31, 407, 15, 447, 487, 450, -15, 452, 453, 480,
> - 263, -325, -325, 454, -325, 456, -325, 457, 488, -325,
> - -325, -325, 461, 462, 463, 464, 465, 466, 468, 471,
> - 473, 475, 476, 478, -23, -325, 479, -325, -325, 390,
> - 496, 497, 407, 424, 481, 14, 498, 485, -325, 486,
> - -325, -325, -325, 201, -325, -325, 489, 499, 407, 506,
> - -325, 503, 490, 492, 504, -325, -325, 101, -325, -325,
> - 100, 263, 263, 263, 104, -325, -325, -325, -325, -325,
> - 2, 2, 75, 75, 7, 330, 390, 208, 266, 269,
> - 274, 327, -325, 221, 511, 493, 494, 500, 495, 222,
> - 223, 390, 87, 519, 356, -325, 520, 407, 491, 501,
> - 505, -325, -325, 519, -325, 502, 263, -325, -325, -325,
> - 507, 263, 509, -325, -325, -325, -325, -325, 509, -325,
> - -325, -325, -325, -325, -325, -325, -325, -325, -325, -325,
> - -325, -325, -325, -325, -325, 58, -325, -325, 516, 519,
> - 390, 390, -325, 510, 523, 32, 202, -325, -325, -325,
> - 512, 407, 519, 407, 202, 263, -325, 263, -325, 513,
> - 508, -325, 71, 202, -325, -325, 533, 88, 530, 536,
> - -325, -325, 519, 514, 202, 515, -325, -325, -325, 517,
> - 532, 521, -325, -325, 88, -325, 518, 64, 83, 522,
> - 63, -325, -325, 32, 202, 519, -325, 519, -325, 524,
> - 535, 81, 75, 75, -325, 75, -325, 75, -325, -325,
> - -325, -325, 202, 202, -325, 525, -325, -325, -325, -325,
> - -325, -325, -325, -325
> -};
> -
> -/* YYPGOTO[NTERM-NUM]. */
> -static const short int yypgoto[] =
> -{
> - -325, -325, 103, 110, 549, -325, -188, -325, 527, -25,
> - 382, 347, 387, -325, -325, -325, -325, -325, -325, 22,
> - -325, 296, -325, -35, -153, -42, -325, -68, -325, -65,
> - -94, 440, -325, -84, -325, -324, -22, -286, 189, -177,
> - -256, -325, 295, 204, -154, 175, -325, 526, 196, -325,
> - 245, -325, -101
> -};
> -
> -/* 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 -157
> -static const short int yytable[] =
> -{
> - 144, 87, 255, 118, 243, 218, 119, 344, 98, 92,
> - 165, 66, 361, 168, 67, 250, 19, 122, 86, 280,
> - 366, 302, 128, 102, 110, 332, 308, 141, 103, 373,
> - 142, 166, 303, 272, 140, 141, 273, 303, 142, 66,
> - 386, 251, 108, 353, 123, 278, 171, 173, 118, 169,
> - 179, 140, 141, 118, 136, 142, 364, 56, 216, 118,
> - 401, 289, 137, 297, 298, 299, 125, 131, 244, 149,
> - -154, 231, 143, 281, 354, 355, 384, 350, 411, 412,
> - 143, 245, 375, 140, 141, 358, 234, 142, 235, 182,
> - 371, 174, 146, 171, 140, 141, 217, 143, 142, 402,
> - 375, 403, 140, 141, 150, 170, 142, 375, 346, 333,
> - 340, 20, 312, 348, 152, 351, 24, 21, 22, 398,
> - 240, 376, 393, 23, 29, 377, 378, 379, 372, 143,
> - 295, 30, 24, 237, 300, 35, 239, 406, 24, 376,
> - 143, 395, 334, 377, 378, 379, 376, 1, 143, 153,
> - 377, 378, 379, 2, 241, 118, 296, 367, 119, 368,
> - 301, 306, 307, 311, 363, 31, 365, 36, 3, 4,
> - 5, 6, 7, 8, 32, 179, 2, 275, 180, 37,
> - 38, 39, 40, 41, 42, 43, 44, 45, 26, 9,
> - 10, 3, 4, 5, 6, 7, 8, 186, 187, 188,
> - 55, 104, 46, 36, 26, 47, 105, 33, 189, 27,
> - 26, 181, 9, 10, 182, 37, 38, 39, 40, 41,
> - 42, 43, 44, 45, 313, 27, 399, 314, 106, 315,
> - 63, 27, 64, 107, 190, 34, 56, 399, 94, 168,
> - 201, 47, 37, 38, 39, 40, 59, 61, 43, 44,
> - 45, 37, 38, 39, 40, 198, 68, 285, 28, 199,
> - 286, 202, 203, 204, 205, 206, 65, 207, 208, 209,
> - 210, 211, 212, 213, 28, 169, 394, 396, -156, -155,
> - 28, 330, 331, 305, 69, 316, 309, 317, 318, 93,
> - 319, 407, 408, 320, 409, 321, 410, 71, 72, 73,
> - 74, 75, 63, 76, 77, 78, 79, 80, 81, 82,
> - 83, 84, 130, 85, 37, 38, 39, 40, 99, 101,
> - 43, 44, 45, 65, 37, 38, 39, 40, 109, 96,
> - 97, 71, 72, 73, 74, 75, 111, 76, 77, 78,
> - 79, 80, 81, 82, 83, 84, 322, 85, 323, 112,
> - 114, 120, 124, 129, 154, 125, 135, 37, 38, 39,
> - 40, 71, 72, 73, 74, 75, 337, 76, 77, 78,
> - 79, 80, 81, 82, 83, 84, 138, 85, 116, 72,
> - 73, 74, 75, 139, 76, 77, 78, 79, 80, 81,
> - 82, 83, 117, 145, 85, 71, 72, 73, 74, 75,
> - 148, 76, 77, 78, 79, 80, 81, 82, 83, 84,
> - 151, 85, 223, 224, 73, 74, 75, 155, 76, 77,
> - 78, 79, 80, 81, 82, 83, 225, 158, 85, 116,
> - 72, 73, 74, 75, 159, 76, 77, 78, 79, 80,
> - 81, 82, 83, 279, 161, 85, 121, 72, 156, 160,
> - 162, 163, 76, 77, 78, 79, 80, 81, 82, 83,
> - 127, 72, 85, 164, 167, 172, 76, 77, 78, 79,
> - 80, 81, 82, 83, 116, 72, 85, 175, 191, 176,
> - 76, 77, 78, 79, 80, 81, 82, 83, 193, 177,
> - 85, 192, 194, 195, 196, 197, 219, 181, 220, 222,
> - 169, 232, 168, 236, 238, 182, 247, 249, 252, 253,
> - 254, 256, 259, 257, 258, 276, 277, 282, 288, 260,
> - 261, 262, 263, 264, 265, 290, 266, 291, 294, 267,
> - 246, 268, 274, 269, 270, 325, 271, -153, 335, 339,
> - 352, 283, 357, 369, 287, 284, 341, 292, 293, 326,
> - 327, 329, 374, 328, 382, 383, 389, 342, 345, 405,
> - 343, 370, 25, 347, 349, 356, 248, 242, 362, 324,
> - 385, 387, 400, 388, 390, 95, 392, 178, 391, 338,
> - 397, 404, 413, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 147
> -};
> -
> -static const short int yycheck[] =
> -{
> - 101, 43, 190, 71, 181, 158, 71, 293, 50, 44,
> - 5, 36, 336, 19, 36, 30, 21, 85, 43, 5,
> - 344, 19, 90, 54, 66, 281, 19, 20, 59, 353,
> - 23, 125, 30, 56, 19, 20, 59, 30, 23, 64,
> - 364, 56, 64, 329, 86, 222, 130, 131, 116, 55,
> - 19, 19, 20, 121, 96, 23, 342, 19, 19, 127,
> - 384, 238, 97, 251, 252, 253, 61, 92, 53, 19,
> - 56, 165, 65, 59, 330, 331, 362, 19, 402, 403,
> - 65, 182, 19, 19, 20, 53, 170, 23, 172, 58,
> - 19, 133, 54, 177, 19, 20, 57, 65, 23, 385,
> - 19, 387, 19, 20, 54, 130, 23, 19, 296, 22,
> - 287, 19, 265, 301, 19, 57, 13, 19, 19, 56,
> - 19, 58, 58, 0, 14, 62, 63, 64, 57, 65,
> - 30, 53, 29, 175, 30, 25, 178, 56, 35, 58,
> - 65, 58, 55, 62, 63, 64, 58, 3, 65, 54,
> - 62, 63, 64, 9, 53, 223, 56, 345, 223, 347,
> - 56, 262, 263, 264, 341, 4, 343, 19, 24, 25,
> - 26, 27, 28, 29, 53, 19, 9, 219, 22, 31,
> - 32, 33, 34, 35, 36, 37, 38, 39, 13, 45,
> - 46, 24, 25, 26, 27, 28, 29, 19, 20, 21,
> - 21, 54, 54, 19, 29, 57, 59, 53, 30, 13,
> - 35, 55, 45, 46, 58, 31, 32, 33, 34, 35,
> - 36, 37, 38, 39, 266, 29, 380, 19, 54, 21,
> - 19, 35, 21, 59, 56, 53, 19, 391, 54, 19,
> - 19, 57, 31, 32, 33, 34, 19, 19, 37, 38,
> - 39, 31, 32, 33, 34, 53, 19, 56, 13, 57,
> - 59, 40, 41, 42, 43, 44, 55, 46, 47, 48,
> - 49, 50, 51, 52, 29, 55, 377, 378, 56, 56,
> - 35, 59, 59, 261, 55, 19, 264, 21, 19, 55,
> - 21, 392, 393, 19, 395, 21, 397, 5, 6, 7,
> - 8, 9, 19, 11, 12, 13, 14, 15, 16, 17,
> - 18, 19, 19, 21, 31, 32, 33, 34, 55, 58,
> - 37, 38, 39, 55, 31, 32, 33, 34, 19, 37,
> - 38, 5, 6, 7, 8, 9, 19, 11, 12, 13,
> - 14, 15, 16, 17, 18, 19, 19, 21, 21, 19,
> - 19, 5, 19, 19, 56, 61, 21, 31, 32, 33,
> - 34, 5, 6, 7, 8, 9, 10, 11, 12, 13,
> - 14, 15, 16, 17, 18, 19, 19, 21, 5, 6,
> - 7, 8, 9, 19, 11, 12, 13, 14, 15, 16,
> - 17, 18, 19, 21, 21, 5, 6, 7, 8, 9,
> - 21, 11, 12, 13, 14, 15, 16, 17, 18, 19,
> - 21, 21, 5, 6, 7, 8, 9, 19, 11, 12,
> - 13, 14, 15, 16, 17, 18, 19, 60, 21, 5,
> - 6, 7, 8, 9, 56, 11, 12, 13, 14, 15,
> - 16, 17, 18, 19, 19, 21, 5, 6, 55, 55,
> - 19, 19, 11, 12, 13, 14, 15, 16, 17, 18,
> - 5, 6, 21, 55, 5, 19, 11, 12, 13, 14,
> - 15, 16, 17, 18, 5, 6, 21, 56, 20, 19,
> - 11, 12, 13, 14, 15, 16, 17, 18, 21, 19,
> - 21, 57, 57, 21, 57, 21, 19, 55, 55, 55,
> - 55, 19, 19, 19, 55, 58, 19, 57, 56, 56,
> - 30, 57, 24, 57, 57, 19, 19, 19, 19, 58,
> - 58, 58, 58, 58, 58, 19, 58, 24, 24, 58,
> - 183, 58, 53, 58, 58, 24, 58, 56, 19, 19,
> - 24, 56, 19, 30, 55, 59, 55, 57, 56, 56,
> - 56, 56, 19, 53, 24, 19, 24, 56, 56, 24,
> - 55, 53, 13, 56, 55, 55, 184, 180, 56, 273,
> - 56, 56, 383, 56, 53, 48, 58, 137, 374, 284,
> - 58, 57, 57, -1, -1, -1, -1, -1, -1, -1,
> - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
> - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
> - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
> - -1, -1, -1, -1, -1, -1, -1, -1, -1, 103
> -};
> -
> -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
> - symbol of state STATE-NUM. */
> -static const unsigned char yystos[] =
> -{
> - 0, 3, 9, 24, 25, 26, 27, 28, 29, 45,
> - 46, 67, 68, 69, 70, 71, 111, 114, 116, 21,
> - 19, 19, 19, 0, 68, 70, 111, 114, 116, 69,
> - 53, 4, 53, 53, 53, 69, 19, 31, 32, 33,
> - 34, 35, 36, 37, 38, 39, 54, 57, 73, 74,
> - 75, 79, 80, 82, 102, 21, 19, 112, 113, 19,
> - 117, 19, 115, 19, 21, 55, 75, 102, 19, 55,
> - 89, 5, 6, 7, 8, 9, 11, 12, 13, 14,
> - 15, 16, 17, 18, 19, 21, 75, 91, 92, 93,
> - 94, 95, 89, 55, 54, 74, 37, 38, 91, 55,
> - 72, 58, 54, 59, 54, 59, 54, 59, 102, 19,
> - 91, 19, 19, 90, 19, 88, 5, 19, 93, 95,
> - 5, 5, 93, 91, 19, 61, 96, 5, 93, 19,
> - 19, 75, 97, 98, 99, 21, 91, 89, 19, 19,
> - 19, 20, 23, 65, 118, 21, 54, 113, 21, 19,
> - 54, 21, 19, 54, 56, 19, 55, 83, 60, 56,
> - 55, 19, 19, 19, 55, 5, 96, 5, 19, 55,
> - 75, 99, 19, 99, 91, 56, 19, 19, 97, 19,
> - 22, 55, 58, 76, 77, 78, 19, 20, 21, 30,
> - 56, 20, 57, 21, 57, 21, 57, 21, 53, 57,
> - 101, 19, 40, 41, 42, 43, 44, 46, 47, 48,
> - 49, 50, 51, 52, 84, 87, 19, 57, 90, 19,
> - 55, 81, 55, 5, 6, 19, 91, 105, 106, 107,
> - 108, 96, 19, 100, 99, 99, 19, 91, 55, 91,
> - 19, 53, 78, 105, 53, 118, 77, 19, 76, 57,
> - 30, 56, 56, 56, 30, 72, 57, 57, 57, 24,
> - 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
> - 58, 58, 56, 59, 53, 91, 19, 19, 105, 19,
> - 5, 59, 19, 56, 59, 56, 59, 55, 19, 105,
> - 19, 24, 57, 56, 24, 30, 56, 72, 72, 72,
> - 30, 56, 19, 30, 85, 85, 118, 118, 19, 85,
> - 86, 118, 90, 91, 19, 21, 19, 21, 19, 21,
> - 19, 21, 19, 21, 87, 24, 56, 56, 53, 56,
> - 59, 59, 106, 22, 55, 19, 103, 10, 108, 19,
> - 105, 55, 56, 55, 103, 56, 72, 56, 72, 55,
> - 19, 57, 24, 103, 106, 106, 55, 19, 53, 104,
> - 118, 101, 56, 105, 103, 105, 101, 72, 72, 30,
> - 53, 19, 57, 101, 19, 19, 58, 62, 63, 64,
> - 109, 110, 24, 19, 103, 56, 101, 56, 56, 24,
> - 53, 109, 58, 58, 118, 58, 118, 58, 56, 110,
> - 104, 101, 103, 103, 57, 24, 56, 118, 118, 118,
> - 118, 101, 101, 57
> -};
> -
> -#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
> -# define YYSIZE_T __SIZE_TYPE__
> -#endif
> -#if ! defined (YYSIZE_T) && defined (size_t)
> -# define YYSIZE_T size_t
> -#endif
> -#if ! defined (YYSIZE_T)
> -# if defined (__STDC__) || defined (__cplusplus)
> -# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
> -# define YYSIZE_T size_t
> -# endif
> -#endif
> -#if ! defined (YYSIZE_T)
> -# define YYSIZE_T unsigned int
> -#endif
> -
> -#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; \
> - goto yybackup; \
> - } \
> - else \
> - { \
> - yyerror ("syntax error: cannot back up");\
> - YYERROR; \
> - } \
> -while (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 (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 (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 (0)
> -
> -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
> -do { \
> - if (yydebug) \
> - { \
> - YYFPRINTF (stderr, "%s ", Title); \
> - yysymprint (stderr, \
> - Type, Value); \
> - YYFPRINTF (stderr, "\n"); \
> - } \
> -} while (0)
> -
> -/*------------------------------------------------------------------.
> -| yy_stack_print -- Print the state stack from its BOTTOM up to its |
> -| TOP (included). |
> -`------------------------------------------------------------------*/
> -
> -#if defined (__STDC__) || defined (__cplusplus)
> -static void
> -yy_stack_print (short int *bottom, short int *top)
> -#else
> -static void
> -yy_stack_print (bottom, top)
> - short int *bottom;
> - short int *top;
> -#endif
> -{
> - YYFPRINTF (stderr, "Stack now");
> - for (/* Nothing. */; bottom <= top; ++bottom)
> - YYFPRINTF (stderr, " %d", *bottom);
> - YYFPRINTF (stderr, "\n");
> -}
> -
> -# define YY_STACK_PRINT(Bottom, Top) \
> -do { \
> - if (yydebug) \
> - yy_stack_print ((Bottom), (Top)); \
> -} while (0)
> -
> -
> -/*------------------------------------------------.
> -| Report that the YYRULE is going to be reduced. |
> -`------------------------------------------------*/
> -
> -#if defined (__STDC__) || defined (__cplusplus)
> -static void
> -yy_reduce_print (int yyrule)
> -#else
> -static void
> -yy_reduce_print (yyrule)
> - int yyrule;
> -#endif
> -{
> - int yyi;
> - unsigned int yylno = yyrline[yyrule];
> - YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
> - yyrule - 1, yylno);
> - /* Print the symbols being reduced, and their result. */
> - for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
> - YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
> - YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
> -}
> -
> -# define YY_REDUCE_PRINT(Rule) \
> -do { \
> - if (yydebug) \
> - yy_reduce_print (Rule); \
> -} while (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
> - SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
> - evaluated with infinite-precision integer arithmetic. */
> -
> -#ifndef YYMAXDEPTH
> -# define YYMAXDEPTH 10000
> -#endif
> -
> -
> -
> -#if YYERROR_VERBOSE
> -
> -# ifndef yystrlen
> -# if defined (__GLIBC__) && defined (_STRING_H)
> -# define yystrlen strlen
> -# else
> -/* Return the length of YYSTR. */
> -static YYSIZE_T
> -# if defined (__STDC__) || defined (__cplusplus)
> -yystrlen (const char *yystr)
> -# else
> -yystrlen (yystr)
> - const char *yystr;
> -# endif
> -{
> - register const char *yys = yystr;
> -
> - while (*yys++ != '\0')
> - continue;
> -
> - return yys - yystr - 1;
> -}
> -# 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. */
> -static char *
> -# if defined (__STDC__) || defined (__cplusplus)
> -yystpcpy (char *yydest, const char *yysrc)
> -# else
> -yystpcpy (yydest, yysrc)
> - char *yydest;
> - const char *yysrc;
> -# endif
> -{
> - register char *yyd = yydest;
> - register const char *yys = yysrc;
> -
> - while ((*yyd++ = *yys++) != '\0')
> - continue;
> -
> - return yyd - 1;
> -}
> -# endif
> -# endif
> -
> -#endif /* !YYERROR_VERBOSE */
> -
> -
> -
> -#if YYDEBUG
> -/*--------------------------------.
> -| Print this symbol on YYOUTPUT. |
> -`--------------------------------*/
> -
> -#if defined (__STDC__) || defined (__cplusplus)
> -static void
> -yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
> -#else
> -static void
> -yysymprint (yyoutput, yytype, yyvaluep)
> - FILE *yyoutput;
> - int yytype;
> - YYSTYPE *yyvaluep;
> -#endif
> -{
> - /* Pacify ``unused variable'' warnings. */
> - (void) yyvaluep;
> -
> - if (yytype < YYNTOKENS)
> - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
> - else
> - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
> -
> -
> -# ifdef YYPRINT
> - if (yytype < YYNTOKENS)
> - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
> -# endif
> - switch (yytype)
> - {
> - default:
> - break;
> - }
> - YYFPRINTF (yyoutput, ")");
> -}
> -
> -#endif /* ! YYDEBUG */
> -/*-----------------------------------------------.
> -| Release the memory associated to this symbol. |
> -`-----------------------------------------------*/
> -
> -#if defined (__STDC__) || defined (__cplusplus)
> -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
> -{
> - /* Pacify ``unused variable'' warnings. */
> - (void) 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 look-ahead symbol. */
> -int yychar;
> -
> -/* The semantic value of the look-ahead symbol. */
> -YYSTYPE yylval;
> -
> -/* Number of syntax errors so far. */
> -int yynerrs;
> -
> -
> -
> -/*----------.
> -| yyparse. |
> -`----------*/
> -
> -#ifdef YYPARSE_PARAM
> -# if defined (__STDC__) || defined (__cplusplus)
> -int yyparse (void *YYPARSE_PARAM)
> -# else
> -int yyparse (YYPARSE_PARAM)
> - void *YYPARSE_PARAM;
> -# endif
> -#else /* ! YYPARSE_PARAM */
> -#if defined (__STDC__) || defined (__cplusplus)
> -int
> -yyparse (void)
> -#else
> -int
> -yyparse ()
> -
> -#endif
> -#endif
> -{
> -
> - register int yystate;
> - register int yyn;
> - int yyresult;
> - /* Number of tokens to shift before error messages enabled. */
> - int yyerrstatus;
> - /* Look-ahead token as an internal (translated) token number. */
> - int yytoken = 0;
> -
> - /* Three stacks and their tools:
> - `yyss': related to states,
> - `yyvs': related to semantic values,
> - `yyls': related to locations.
> -
> - Refer to the stacks thru separate pointers, to allow yyoverflow
> - to reallocate them elsewhere. */
> -
> - /* The state stack. */
> - short int yyssa[YYINITDEPTH];
> - short int *yyss = yyssa;
> - register short int *yyssp;
> -
> - /* The semantic value stack. */
> - YYSTYPE yyvsa[YYINITDEPTH];
> - YYSTYPE *yyvs = yyvsa;
> - register YYSTYPE *yyvsp;
> -
> -
> -
> -#define YYPOPSTACK (yyvsp--, yyssp--)
> -
> - YYSIZE_T yystacksize = YYINITDEPTH;
> -
> - /* The variables used to return semantic value and location from the
> - action routines. */
> - YYSTYPE yyval;
> -
> -
> - /* When reducing, the number of symbols on the RHS of the reduced
> - rule. */
> - int yylen;
> -
> - 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;
> -
> -
> - yyvsp[0] = yylval;
> -
> - 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;
> - short int *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 ("parser stack overflow",
> - &yyss1, yysize * sizeof (*yyssp),
> - &yyvs1, yysize * sizeof (*yyvsp),
> -
> - &yystacksize);
> -
> - yyss = yyss1;
> - yyvs = yyvs1;
> - }
> -#else /* no yyoverflow */
> -# ifndef YYSTACK_RELOCATE
> - goto yyoverflowlab;
> -# else
> - /* Extend the stack our own way. */
> - if (YYMAXDEPTH <= yystacksize)
> - goto yyoverflowlab;
> - yystacksize *= 2;
> - if (YYMAXDEPTH < yystacksize)
> - yystacksize = YYMAXDEPTH;
> -
> - {
> - short int *yyss1 = yyss;
> - union yyalloc *yyptr =
> - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
> - if (! yyptr)
> - goto yyoverflowlab;
> - YYSTACK_RELOCATE (yyss);
> - YYSTACK_RELOCATE (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));
> -
> - goto yybackup;
> -
> -/*-----------.
> -| yybackup. |
> -`-----------*/
> -yybackup:
> -
> -/* Do appropriate processing given the current state. */
> -/* Read a look-ahead token if we need one and don't already have one. */
> -/* yyresume: */
> -
> - /* First try to decide what to do without reference to look-ahead token. */
> -
> - yyn = yypact[yystate];
> - if (yyn == YYPACT_NINF)
> - goto yydefault;
> -
> - /* Not known => get a look-ahead token if don't already have one. */
> -
> - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead 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;
> - }
> -
> - if (yyn == YYFINAL)
> - YYACCEPT;
> -
> - /* Shift the look-ahead token. */
> - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
> -
> - /* Discard the token being shifted unless it is eof. */
> - if (yychar != YYEOF)
> - yychar = YYEMPTY;
> -
> - *++yyvsp = yylval;
> -
> -
> - /* Count tokens shifted since error; after three, turn off error
> - status. */
> - if (yyerrstatus)
> - yyerrstatus--;
> -
> - yystate = yyn;
> - 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 2:
> -#line 689 "parse.y"
> - { ; }
> - break;
> -
> - case 3:
> -#line 690 "parse.y"
> - { ; }
> - break;
> -
> - case 4:
> -#line 691 "parse.y"
> - { ; }
> - break;
> -
> - case 5:
> -#line 692 "parse.y"
> - { ; }
> - break;
> -
> - case 6:
> -#line 695 "parse.y"
> - {
> - Node *node = node_new (CCODE_NODE,
> - "cctype", C_CCODE,
> - "cbuf:steal", ((yyvsp[0].cbuf))->str,
> - "line_no", ccode_line,
> - NULL);
> - nodes = g_list_append(nodes,node);
> - g_string_free((yyvsp[0].cbuf),FALSE);
> - }
> - break;
> -
> - case 7:
> -#line 704 "parse.y"
> - {
> - Node *node = node_new (CCODE_NODE,
> - "cctype", H_CCODE,
> - "cbuf:steal", ((yyvsp[0].cbuf))->str,
> - "line_no", ccode_line,
> - NULL);
> - nodes = g_list_append(nodes,node);
> - g_string_free((yyvsp[0].cbuf),FALSE);
> - }
> - break;
> -
> - case 8:
> -#line 713 "parse.y"
> - {
> - Node *node = node_new (CCODE_NODE,
> - "cctype", HT_CCODE,
> - "cbuf:steal", ((yyvsp[0].cbuf))->str,
> - "line_no", ccode_line,
> - NULL);
> - nodes = g_list_append(nodes,node);
> - g_string_free((yyvsp[0].cbuf),FALSE);
> - }
> - break;
> -
> - case 9:
> -#line 722 "parse.y"
> - {
> - Node *node = node_new (CCODE_NODE,
> - "cctype", PH_CCODE,
> - "cbuf:steal", ((yyvsp[0].cbuf))->str,
> - "line_no", ccode_line,
> - NULL);
> - nodes = g_list_append(nodes,node);
> - g_string_free((yyvsp[0].cbuf),FALSE);
> - }
> - break;
> -
> - case 10:
> -#line 731 "parse.y"
> - {
> - Node *node = node_new (CCODE_NODE,
> - "cctype", A_CCODE,
> - "cbuf:steal", ((yyvsp[0].cbuf))->str,
> - "line_no", ccode_line,
> - NULL);
> - nodes = g_list_append(nodes,node);
> - g_string_free((yyvsp[0].cbuf),FALSE);
> - }
> - break;
> -
> - case 11:
> -#line 740 "parse.y"
> - {
> - Node *node = node_new (CCODE_NODE,
> - "cctype", AT_CCODE,
> - "cbuf:steal", ((yyvsp[0].cbuf))->str,
> - "line_no", ccode_line,
> - NULL);
> - nodes = g_list_append(nodes,node);
> - g_string_free((yyvsp[0].cbuf),FALSE);
> - }
> - break;
> -
> - case 12:
> -#line 751 "parse.y"
> - { ; }
> - break;
> -
> - case 13:
> -#line 752 "parse.y"
> - { ; }
> - break;
> -
> - case 14:
> -#line 753 "parse.y"
> - { ; }
> - break;
> -
> - case 15:
> -#line 754 "parse.y"
> - { ; }
> - break;
> -
> - case 16:
> -#line 755 "parse.y"
> - { ; }
> - break;
> -
> - case 17:
> -#line 756 "parse.y"
> - { ; }
> - break;
> -
> - case 18:
> -#line 757 "parse.y"
> - { ; }
> - break;
> -
> - case 19:
> -#line 758 "parse.y"
> - { ; }
> - break;
> -
> - case 20:
> -#line 761 "parse.y"
> - {
> - ((Class *)class)->nodes = class_nodes;
> - class_nodes = NULL;
> - nodes = g_list_append(nodes,class);
> - }
> - break;
> -
> - case 21:
> -#line 766 "parse.y"
> - {
> - ((Class *)class)->nodes = NULL;
> - class_nodes = NULL;
> - nodes = g_list_append(nodes,class);
> - }
> - break;
> -
> - case 22:
> -#line 773 "parse.y"
> - {
> - class = node_new (CLASS_NODE,
> - "otype:steal", (yyvsp[-3].id),
> - "ptype:steal", (yyvsp[-1].id),
> - "bonobo_object_class:steal", bonobo_object_class,
> - "glade_xml", glade_xml,
> - "interfaces:steal", interfaces,
> - "chunk_size:steal", chunk_size,
> - "abstract", abstract,
> - NULL);
> - bonobo_object_class = NULL;
> - glade_xml = FALSE;
> - chunk_size = NULL;
> - interfaces = NULL;
> - }
> - break;
> -
> - case 24:
> -#line 791 "parse.y"
> - {
> - if(strcmp((yyvsp[-2].id),"abstract") == 0) {
> - abstract = TRUE;
> - } else {
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 25:
> -#line 799 "parse.y"
> - {
> - if(strcmp((yyvsp[-3].id),"chunks") == 0) {
> - g_free (chunk_size);
> - chunk_size = g_strdup((yyvsp[-2].id));
> - } else if(strcmp((yyvsp[-3].id),"BonoboObject") == 0) {
> - g_free (bonobo_object_class);
> - bonobo_object_class = g_strdup((yyvsp[-2].id));
> - } else {
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 26:
> -#line 811 "parse.y"
> - {
> - if (strcmp ((yyvsp[-3].id), "interface") == 0) {
> - interfaces = g_list_append (interfaces,
> - g_strdup ((yyvsp[-2].id)));
> - } else {
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 27:
> -#line 820 "parse.y"
> - {
> - if(strcmp((yyvsp[-3].id),"chunks") == 0) {
> - g_free (chunk_size);
> - if(atoi((yyvsp[-2].id)) != 0)
> - chunk_size = g_strdup((yyvsp[-2].id));
> - else
> - chunk_size = NULL;
> - } else {
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 28:
> -#line 832 "parse.y"
> - {
> - if (strcmp ((yyvsp[-4].id), "GladeXML") == 0) {
> - glade_xml = TRUE;
> - add_construct_glade((yyvsp[-3].id), (yyvsp[-2].id), NULL);
> - } else {
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 29:
> -#line 841 "parse.y"
> - {
> - if (strcmp ((yyvsp[-5].id), "GladeXML") == 0) {
> - glade_xml = TRUE;
> - add_construct_glade((yyvsp[-4].id), (yyvsp[-3].id), (yyvsp[-2].id));
> - } else {
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 30:
> -#line 850 "parse.y"
> - {
> - if (strcmp ((yyvsp[-4].id), "GladeXML") == 0) {
> - glade_xml = TRUE;
> - add_construct_glade((yyvsp[-3].id), (yyvsp[-2].id), NULL);
> - } else {
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 31:
> -#line 859 "parse.y"
> - {
> - if (strcmp ((yyvsp[-5].id), "GladeXML") == 0) {
> - glade_xml = TRUE;
> - add_construct_glade((yyvsp[-4].id), (yyvsp[-3].id), (yyvsp[-2].id));
> - } else {
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 32:
> -#line 870 "parse.y"
> - { ; }
> - break;
> -
> - case 33:
> -#line 871 "parse.y"
> - { ; }
> - break;
> -
> - case 34:
> -#line 874 "parse.y"
> - { ; }
> - break;
> -
> - case 35:
> -#line 875 "parse.y"
> - {
> - if (strcmp ((yyvsp[-1].id), "BonoboObject") != 0) {
> - g_free ((yyvsp[-1].id));
> - yyerror (_("parse error"));
> - YYERROR;
> - }
> - g_free ((yyvsp[-1].id));
> - last_added_method->bonobo_object_func = TRUE;
> - }
> - break;
> -
> - case 36:
> -#line 884 "parse.y"
> - {
> - if (strcmp ((yyvsp[-2].id), "interface") != 0) {
> - g_free ((yyvsp[-2].id));
> - g_free ((yyvsp[-1].id));
> - yyerror (_("parse error"));
> - YYERROR;
> - }
> - g_free ((yyvsp[-2].id));
> - node_set ((Node *)last_added_method,
> - "interface:steal", (yyvsp[-1].id),
> - NULL);
> - }
> - break;
> -
> - case 37:
> -#line 896 "parse.y"
> - { ; }
> - break;
> -
> - case 38:
> -#line 897 "parse.y"
> - { ; }
> - break;
> -
> - case 39:
> -#line 898 "parse.y"
> - { ; }
> - break;
> -
> - case 40:
> -#line 899 "parse.y"
> - { ; }
> - break;
> -
> - case 41:
> -#line 902 "parse.y"
> - { the_scope = PUBLIC_SCOPE; }
> - break;
> -
> - case 42:
> -#line 903 "parse.y"
> - { the_scope = PRIVATE_SCOPE; }
> - break;
> -
> - case 43:
> -#line 904 "parse.y"
> - { the_scope = PROTECTED_SCOPE; }
> - break;
> -
> - case 44:
> -#line 905 "parse.y"
> - { the_scope = CLASS_SCOPE; }
> - break;
> -
> - case 45:
> -#line 908 "parse.y"
> - {
> - if (strcmp ((yyvsp[-1].id), "destroywith") == 0) {
> - g_free ((yyvsp[-1].id));
> - destructor_unref = FALSE;
> - destructor = (yyvsp[0].id);
> - destructor_line = line_no;
> - destructor_simple = TRUE;
> - } else if (strcmp ((yyvsp[-1].id), "unrefwith") == 0) {
> - g_free ((yyvsp[-1].id));
> - destructor_unref = TRUE;
> - destructor = (yyvsp[0].id);
> - destructor_line = line_no;
> - destructor_simple = TRUE;
> - } else {
> - g_free ((yyvsp[-1].id));
> - g_free ((yyvsp[0].id));
> - yyerror (_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 46:
> -#line 928 "parse.y"
> - {
> - if (strcmp ((yyvsp[-2].id), "destroy") == 0) {
> - g_free((yyvsp[-2].id));
> - destructor_unref = FALSE;
> - destructor = ((yyvsp[0].cbuf))->str;
> - g_string_free((yyvsp[0].cbuf), FALSE);
> - destructor_line = ccode_line;
> - destructor_simple = FALSE;
> - } else if (strcmp ((yyvsp[-2].id), "unref") == 0) {
> - g_free ((yyvsp[-2].id));
> - destructor_unref = TRUE;
> - destructor = ((yyvsp[0].cbuf))->str;
> - g_string_free ((yyvsp[0].cbuf), FALSE);
> - destructor_line = ccode_line;
> - destructor_simple = FALSE;
> - } else {
> - g_free ((yyvsp[-2].id));
> - g_string_free ((yyvsp[0].cbuf), TRUE);
> - yyerror (_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 47:
> -#line 952 "parse.y"
> - {
> - initializer = (yyvsp[0].id);
> - initializer_line = ccode_line;
> - }
> - break;
> -
> - case 48:
> -#line 956 "parse.y"
> - {
> - initializer = ((yyvsp[0].cbuf))->str;
> - initializer_line = ccode_line;
> - g_string_free((yyvsp[0].cbuf), FALSE);
> - }
> - break;
> -
> - case 49:
> -#line 964 "parse.y"
> - { ; }
> - break;
> -
> - case 50:
> -#line 965 "parse.y"
> - { ; }
> - break;
> -
> - case 51:
> -#line 966 "parse.y"
> - { destructor = NULL; }
> - break;
> -
> - case 52:
> -#line 967 "parse.y"
> - { initializer = NULL; }
> - break;
> -
> - case 53:
> -#line 968 "parse.y"
> - {
> - if (strcmp ((yyvsp[0].id), "GladeXML") == 0) {
> - glade_widget = TRUE;
> - } else {
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 54:
> -#line 976 "parse.y"
> - {
> - destructor = NULL;
> - initializer = NULL;
> - }
> - break;
> -
> - case 55:
> -#line 982 "parse.y"
> - {
> - push_variable((yyvsp[-2].id), the_scope,(yyvsp[-4].line), NULL);
> - }
> - break;
> -
> - case 56:
> -#line 985 "parse.y"
> - {
> - push_variable((yyvsp[-3].id), the_scope, (yyvsp[-5].line), (yyvsp[-2].id));
> - }
> - break;
> -
> - case 57:
> -#line 990 "parse.y"
> - {
> - Node *node = NULL;
> - if(strcmp((yyvsp[-6].id),"get")==0 &&
> - strcmp((yyvsp[-3].id),"set")==0) {
> - Type *type = pop_type();
> - g_free ((yyvsp[-6].id));
> - g_free ((yyvsp[-3].id));
> - node = node_new (ARGUMENT_NODE,
> - "gtktype:steal", (yyvsp[-9].id),
> - "atype:steal", type,
> - "flags:steal", (yyvsp[-10].list),
> - "name:steal", (yyvsp[-8].id),
> - "get:steal", ((yyvsp[-4].cbuf))->str,
> - "get_line", (yyvsp[-5].line),
> - "set:steal", ((yyvsp[-1].cbuf))->str,
> - "set_line", (yyvsp[-2].line),
> - "line_no", (yyvsp[-11].line),
> - NULL);
> -
> - class_nodes = g_list_append(class_nodes,node);
> -
> - g_string_free ((yyvsp[-4].cbuf), FALSE);
> - g_string_free ((yyvsp[-1].cbuf), FALSE);
> -
> - } else if(strcmp((yyvsp[-6].id),"set")==0 &&
> - strcmp((yyvsp[-3].id),"get")==0) {
> - Type *type = pop_type();
> - g_free ((yyvsp[-6].id));
> - g_free ((yyvsp[-3].id));
> - node = node_new (ARGUMENT_NODE,
> - "gtktype:steal", (yyvsp[-9].id),
> - "atype:steal", type,
> - "flags:steal", (yyvsp[-10].list),
> - "name:steal", (yyvsp[-8].id),
> - "get:steal", ((yyvsp[-1].cbuf))->str,
> - "get_line", (yyvsp[-2].line),
> - "set:steal", ((yyvsp[-4].cbuf))->str,
> - "set_line", (yyvsp[-5].line),
> - "line_no", (yyvsp[-11].line),
> - NULL);
> - g_string_free ((yyvsp[-1].cbuf), FALSE);
> - g_string_free ((yyvsp[-4].cbuf), FALSE);
> - class_nodes = g_list_append(class_nodes,node);
> - } else {
> - g_free ((yyvsp[-9].id));
> - g_free ((yyvsp[-8].id));
> - g_free ((yyvsp[-6].id));
> - g_free ((yyvsp[-3].id));
> - g_list_foreach ((yyvsp[-10].list), (GFunc)g_free, NULL);
> - g_list_free ((yyvsp[-10].list));
> - g_string_free ((yyvsp[-1].cbuf), TRUE);
> - g_string_free ((yyvsp[-4].cbuf), TRUE);
> - yyerror (_("parse error"));
> - YYERROR;
> - }
> -
> - if ((yyvsp[-7].id) != NULL) {
> - Argument *arg = (Argument *)node;
> - export_accessors (arg->name,
> - arg->get != NULL, arg->get_line,
> - arg->set != NULL, arg->set_line,
> - arg->atype,
> - arg->gtktype,
> - arg->line_no);
> - g_free ((yyvsp[-7].id));
> - }
> -
> - }
> - break;
> -
> - case 58:
> -#line 1058 "parse.y"
> - {
> - Node *node = NULL;
> - if(strcmp((yyvsp[-3].id), "get") == 0) {
> - Type *type = pop_type();
> - g_free ((yyvsp[-3].id));
> - node = node_new (ARGUMENT_NODE,
> - "gtktype:steal", (yyvsp[-6].id),
> - "atype:steal", type,
> - "flags:steal", (yyvsp[-7].list),
> - "name:steal", (yyvsp[-5].id),
> - "get:steal", ((yyvsp[-1].cbuf))->str,
> - "get_line", (yyvsp[-2].line),
> - "line_no", (yyvsp[-8].line),
> - NULL);
> -
> - g_string_free ((yyvsp[-1].cbuf), FALSE);
> - class_nodes = g_list_append(class_nodes, node);
> - } else if(strcmp((yyvsp[-3].id), "set") == 0) {
> - Type *type = pop_type();
> - g_free ((yyvsp[-3].id));
> - node = node_new (ARGUMENT_NODE,
> - "gtktype:steal", (yyvsp[-6].id),
> - "atype:steal", type,
> - "flags:steal", (yyvsp[-7].list),
> - "name:steal", (yyvsp[-5].id),
> - "set:steal", ((yyvsp[-1].cbuf))->str,
> - "set_line", (yyvsp[-2].line),
> - "line_no", (yyvsp[-8].line),
> - NULL);
> -
> - g_string_free ((yyvsp[-1].cbuf), FALSE);
> - class_nodes = g_list_append (class_nodes, node);
> - } else {
> - g_free ((yyvsp[-3].id));
> - g_free ((yyvsp[-6].id));
> - g_free ((yyvsp[-5].id));
> - g_list_foreach ((yyvsp[-7].list), (GFunc)g_free, NULL);
> - g_list_free ((yyvsp[-7].list));
> - g_string_free ((yyvsp[-1].cbuf), TRUE);
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> -
> - if ((yyvsp[-4].id) != NULL) {
> - Argument *arg = (Argument *)node;
> - export_accessors (arg->name,
> - arg->get != NULL, arg->get_line,
> - arg->set != NULL, arg->set_line,
> - arg->atype,
> - arg->gtktype,
> - arg->line_no);
> - g_free ((yyvsp[-4].id));
> - }
> - }
> - break;
> -
> - case 59:
> -#line 1112 "parse.y"
> - {
> - Node *node;
> - char *get, *set = NULL;
> - Variable *var;
> - Type *type;
> - const char *root;
> -
> - if(strcmp((yyvsp[0].id), "link")!=0 &&
> - strcmp((yyvsp[0].id), "stringlink")!=0 &&
> - strcmp((yyvsp[0].id), "objectlink")!=0) {
> - g_free((yyvsp[0].id));
> - g_free((yyvsp[-3].id));
> - g_free((yyvsp[-2].id));
> - g_list_foreach((yyvsp[-4].list),(GFunc)g_free,NULL);
> - g_list_free((yyvsp[-4].list));
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> -
> - type = pop_type();
> -
> - var = find_var_or_die((yyvsp[-2].id), (yyvsp[-5].line));
> - if(var->scope == PRIVATE_SCOPE) {
> - root = "self->_priv";
> - } else if(var->scope == CLASS_SCOPE) {
> - root = "SELF_GET_CLASS(self)";
> - if(no_self_alias)
> - error_print(GOB_ERROR, (yyvsp[-5].line),
> - _("Self aliases needed when autolinking to a classwide member"));
> - } else {
> - root = "self";
> - }
> -
> - if(strcmp((yyvsp[0].id), "link")==0) {
> - set = g_strdup_printf("%s->%s = ARG;",
> - root, (yyvsp[-2].id));
> - } else if(strcmp((yyvsp[0].id), "stringlink")==0) {
> - set = g_strdup_printf("g_free (%s->%s); "
> - "%s->%s = g_strdup (ARG);",
> - root, (yyvsp[-2].id),
> - root, (yyvsp[-2].id));
> - } else if(strcmp((yyvsp[0].id), "objectlink")==0) {
> - set = g_strdup_printf(
> - "if (ARG != NULL) "
> - "g_object_ref (G_OBJECT (ARG)); "
> - "if (%s->%s != NULL) "
> - "g_object_unref (G_OBJECT (%s->%s)); "
> - "%s->%s = ARG;",
> - root, (yyvsp[-2].id),
> - root, (yyvsp[-2].id),
> - root, (yyvsp[-2].id));
> - } else {
> - g_assert_not_reached();
> - }
> -
> - get = g_strdup_printf("ARG = %s->%s;", root, (yyvsp[-2].id));
> -
> - g_free ((yyvsp[0].id));
> -
> - if (type == NULL)
> - type = (Type *)node_copy ((Node *)var->vtype);
> -
> - node = node_new (ARGUMENT_NODE,
> - "gtktype:steal", (yyvsp[-3].id),
> - "atype:steal", type,
> - "flags:steal", (yyvsp[-4].list),
> - "name:steal", (yyvsp[-2].id),
> - "get:steal", get,
> - "get_line", (yyvsp[-5].line),
> - "set:steal", set,
> - "set_line", (yyvsp[-5].line),
> - "line_no", (yyvsp[-5].line),
> - NULL);
> -
> - if ((yyvsp[-1].id) != NULL) {
> - Argument *arg = (Argument *)node;
> - export_accessors (arg->name,
> - arg->get != NULL, arg->get_line,
> - arg->set != NULL, arg->set_line,
> - arg->atype,
> - arg->gtktype,
> - arg->line_no);
> - g_free ((yyvsp[-1].id));
> - }
> -
> - class_nodes = g_list_append (class_nodes, node);
> - }
> - break;
> -
> - case 60:
> -#line 1201 "parse.y"
> - {
> - if (strcmp ((yyvsp[-1].id), "export")!=0) {
> - g_free ((yyvsp[-1].id));
> - yyerror (_("parse error"));
> - YYERROR;
> - }
> - (yyval.id) = (yyvsp[-1].id);
> - }
> - break;
> -
> - case 61:
> -#line 1209 "parse.y"
> - {
> - (yyval.id) = NULL;
> - }
> - break;
> -
> - case 62:
> -#line 1214 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "line_no", (yyvsp[-10].line),
> - "gtktype:steal", debool ((yyvsp[-9].id)),
> - "name:steal", (yyvsp[-8].id),
> - NULL);
> - if (strcmp ((yyvsp[-6].id), "get") == 0 &&
> - strcmp ((yyvsp[-3].id), "set") == 0) {
> - node_set ((Node *)property,
> - "get:steal", ((yyvsp[-4].cbuf))->str,
> - "get_line", (yyvsp[-5].line),
> - "set:steal", ((yyvsp[-1].cbuf))->str,
> - "set_line", (yyvsp[-2].line),
> - NULL);
> - g_string_free ((yyvsp[-4].cbuf), FALSE);
> - g_string_free ((yyvsp[-1].cbuf), FALSE);
> - g_free ((yyvsp[-6].id));
> - g_free ((yyvsp[-3].id));
> - } else if (strcmp ((yyvsp[-6].id), "set") == 0 &&
> - strcmp ((yyvsp[-3].id), "get") == 0) {
> - node_set ((Node *)property,
> - "get:steal", ((yyvsp[-1].cbuf))->str,
> - "get_line", (yyvsp[-2].line),
> - "set:steal", ((yyvsp[-4].cbuf))->str,
> - "set_line", (yyvsp[-5].line),
> - NULL);
> - g_string_free ((yyvsp[-4].cbuf), FALSE);
> - g_string_free ((yyvsp[-1].cbuf), FALSE);
> - g_free ((yyvsp[-6].id));
> - g_free ((yyvsp[-3].id));
> - } else {
> - g_string_free ((yyvsp[-4].cbuf), TRUE);
> - g_string_free ((yyvsp[-1].cbuf), TRUE);
> - g_free ((yyvsp[-6].id));
> - g_free ((yyvsp[-3].id));
> - node_free ((Node *)property);
> - property = NULL;
> - yyerror (_("parse error"));
> - YYERROR;
> - }
> - property_link_and_export ((Node *)property);
> - if (property != NULL) {
> - class_nodes = g_list_append (class_nodes,
> - property);
> - property = NULL;
> - }
> - }
> - break;
> -
> - case 63:
> -#line 1262 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "line_no", (yyvsp[-7].line),
> - "gtktype:steal", debool ((yyvsp[-6].id)),
> - "name:steal", (yyvsp[-5].id),
> - NULL);
> - if (strcmp ((yyvsp[-3].id), "get") == 0) {
> - node_set ((Node *)property,
> - "get:steal", ((yyvsp[-1].cbuf))->str,
> - "get_line", (yyvsp[-2].line),
> - NULL);
> - g_string_free ((yyvsp[-1].cbuf), FALSE);
> - g_free ((yyvsp[-3].id));
> - } else if (strcmp ((yyvsp[-3].id), "set") == 0) {
> - node_set ((Node *)property,
> - "set:steal", ((yyvsp[-1].cbuf))->str,
> - "set_line", (yyvsp[-2].line),
> - NULL);
> - g_string_free ((yyvsp[-1].cbuf), FALSE);
> - g_free ((yyvsp[-3].id));
> - } else {
> - g_string_free ((yyvsp[-1].cbuf), TRUE);
> - g_free ((yyvsp[-3].id));
> - node_free ((Node *)property);
> - property = NULL;
> - yyerror (_("parse error"));
> - YYERROR;
> - }
> - property_link_and_export ((Node *)property);
> - if (property != NULL) {
> - class_nodes = g_list_append (class_nodes,
> - property);
> - property = NULL;
> - }
> - }
> - break;
> -
> - case 64:
> -#line 1298 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "line_no", (yyvsp[-4].line),
> - "gtktype:steal", debool ((yyvsp[-3].id)),
> - "name:steal", (yyvsp[-2].id),
> - NULL);
> - property_link_and_export ((Node *)property);
> - if (property != NULL) {
> - class_nodes = g_list_append (class_nodes,
> - property);
> - property = NULL;
> - }
> - }
> - break;
> -
> - case 65:
> -#line 1314 "parse.y"
> - { ; }
> - break;
> -
> - case 66:
> -#line 1315 "parse.y"
> - { ; }
> - break;
> -
> - case 67:
> -#line 1318 "parse.y"
> - { ; }
> - break;
> -
> - case 68:
> -#line 1319 "parse.y"
> - { ; }
> - break;
> -
> - case 69:
> -#line 1322 "parse.y"
> - { (yyval.id) = (yyvsp[0].id); }
> - break;
> -
> - case 70:
> -#line 1323 "parse.y"
> - {
> - if (strcmp ((yyvsp[-3].id), "_") != 0) {
> - g_free ((yyvsp[-3].id));
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - g_free ((yyvsp[-3].id));
> - (yyval.id) = g_strconcat ("_(", (yyvsp[-1].id), ")", NULL);
> - g_free ((yyvsp[-1].id));
> - }
> - break;
> -
> - case 71:
> -#line 1335 "parse.y"
> - { (yyval.id) = (yyvsp[0].id); }
> - break;
> -
> - case 72:
> -#line 1336 "parse.y"
> - { (yyval.id) = (yyvsp[0].id); }
> - break;
> -
> - case 73:
> -#line 1339 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "nick:steal", (yyvsp[0].id),
> - NULL);
> - }
> - break;
> -
> - case 74:
> -#line 1345 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "blurb:steal", (yyvsp[0].id),
> - NULL);
> - }
> - break;
> -
> - case 75:
> -#line 1351 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "maximum:steal", (yyvsp[0].id),
> - NULL);
> - }
> - break;
> -
> - case 76:
> -#line 1357 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "minimum:steal", (yyvsp[0].id),
> - NULL);
> - }
> - break;
> -
> - case 77:
> -#line 1363 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "default_value:steal", (yyvsp[0].id),
> - NULL);
> - }
> - break;
> -
> - case 78:
> -#line 1369 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "flags:steal", (yyvsp[0].list),
> - NULL);
> - }
> - break;
> -
> - case 79:
> -#line 1375 "parse.y"
> - {
> - Type *type = pop_type ();
> - ensure_property ();
> - node_set ((Node *)property,
> - "ptype:steal", type,
> - NULL);
> - }
> - break;
> -
> - case 80:
> -#line 1382 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "extra_gtktype:steal", (yyvsp[0].id),
> - NULL);
> - }
> - break;
> -
> - case 81:
> -#line 1388 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "extra_gtktype:steal", (yyvsp[0].id),
> - NULL);
> - }
> - break;
> -
> - case 82:
> -#line 1394 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "extra_gtktype:steal", (yyvsp[0].id),
> - NULL);
> - }
> - break;
> -
> - case 83:
> -#line 1400 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "extra_gtktype:steal", (yyvsp[0].id),
> - NULL);
> - }
> - break;
> -
> - case 84:
> -#line 1406 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "extra_gtktype:steal", (yyvsp[0].id),
> - NULL);
> - }
> - break;
> -
> - case 85:
> -#line 1412 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "extra_gtktype:steal", (yyvsp[0].id),
> - NULL);
> - }
> - break;
> -
> - case 86:
> -#line 1418 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "extra_gtktype:steal", (yyvsp[0].id),
> - NULL);
> - }
> - break;
> -
> - case 87:
> -#line 1424 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "extra_gtktype:steal", (yyvsp[0].id),
> - NULL);
> - }
> - break;
> -
> - case 88:
> -#line 1430 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "extra_gtktype:steal", (yyvsp[0].id),
> - NULL);
> - }
> - break;
> -
> - case 89:
> -#line 1436 "parse.y"
> - {
> - ensure_property ();
> - node_set ((Node *)property,
> - "extra_gtktype:steal", (yyvsp[0].id),
> - NULL);
> - }
> - break;
> -
> - case 90:
> -#line 1442 "parse.y"
> - {
> - ensure_property ();
> - if (strcmp ((yyvsp[0].id), "override") == 0) {
> - g_free((yyvsp[0].id));
> - node_set ((Node *)property,
> - "override", TRUE,
> - NULL);
> - } else if (strcmp ((yyvsp[0].id), "link") == 0) {
> - g_free((yyvsp[0].id));
> - node_set ((Node *)property,
> - "link", TRUE,
> - NULL);
> - } else if (strcmp ((yyvsp[0].id), "export") == 0) {
> - g_free((yyvsp[0].id));
> - node_set ((Node *)property,
> - "export", TRUE,
> - NULL);
> - } else {
> - g_free((yyvsp[0].id));
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 91:
> -#line 1467 "parse.y"
> - {
> - if(strcmp((yyvsp[-2].id),"type")!=0) {
> - g_free((yyvsp[-4].id));
> - g_free((yyvsp[-2].id));
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - (yyval.id) = debool ((yyvsp[-4].id));
> - }
> - break;
> -
> - case 92:
> -#line 1476 "parse.y"
> - {
> - (yyval.id) = debool ((yyvsp[0].id));
> - typestack = g_list_prepend(typestack,NULL);
> - }
> - break;
> -
> - case 93:
> -#line 1482 "parse.y"
> - { (yyval.list) = (yyvsp[-1].list); }
> - break;
> -
> - case 94:
> -#line 1483 "parse.y"
> - { (yyval.list) = NULL; }
> - break;
> -
> - case 95:
> -#line 1486 "parse.y"
> - {
> - (yyval.list) = g_list_append((yyvsp[0].list),(yyvsp[-2].id));
> - }
> - break;
> -
> - case 96:
> -#line 1489 "parse.y"
> - {
> - (yyval.list) = g_list_append(NULL,(yyvsp[0].id));
> - }
> - break;
> -
> - case 97:
> -#line 1495 "parse.y"
> - {
> - Node *node = node_new (TYPE_NODE,
> - "name:steal", (yyvsp[-1].id),
> - "pointer:steal", (yyvsp[0].id),
> - NULL);
> - typestack = g_list_prepend(typestack,node);
> - }
> - break;
> -
> - case 98:
> -#line 1502 "parse.y"
> - {
> - Node *node = node_new (TYPE_NODE,
> - "name:steal", (yyvsp[0].id),
> - NULL);
> - typestack = g_list_prepend(typestack,node);
> - }
> - break;
> -
> - case 99:
> -#line 1511 "parse.y"
> - {
> - (yyval.id) = (yyvsp[0].id);
> - }
> - break;
> -
> - case 100:
> -#line 1514 "parse.y"
> - {
> - (yyval.id) = (yyvsp[0].id);
> - }
> - break;
> -
> - case 101:
> -#line 1517 "parse.y"
> - {
> - (yyval.id) = g_strconcat("const ", (yyvsp[0].id), NULL);
> - g_free((yyvsp[0].id));
> - }
> - break;
> -
> - case 102:
> -#line 1521 "parse.y"
> - {
> - (yyval.id) = g_strconcat((yyvsp[-1].id), " const", NULL);
> - g_free((yyvsp[-1].id));
> - }
> - break;
> -
> - case 103:
> -#line 1525 "parse.y"
> - {
> - (yyval.id) = g_strconcat((yyvsp[-1].id), " ", (yyvsp[0].id), NULL);
> - g_free((yyvsp[0].id));
> - }
> - break;
> -
> - case 104:
> -#line 1529 "parse.y"
> - {
> - (yyval.id) = g_strconcat("const ", (yyvsp[-1].id), " ",
> - (yyvsp[0].id), NULL);
> - g_free((yyvsp[0].id));
> - }
> - break;
> -
> - case 105:
> -#line 1534 "parse.y"
> - {
> - (yyval.id) = g_strconcat((yyvsp[-2].id), " ",
> - (yyvsp[-1].id), " const", NULL);
> - g_free((yyvsp[-1].id));
> - }
> - break;
> -
> - case 106:
> -#line 1542 "parse.y"
> - {
> - (yyval.id) = g_strconcat((yyvsp[-1].id), " ", (yyvsp[0].id), NULL);
> - g_free((yyvsp[0].id));
> - }
> - break;
> -
> - case 107:
> -#line 1546 "parse.y"
> - {
> - (yyval.id) = g_strconcat((yyvsp[-1].id), " ", (yyvsp[0].id), NULL);
> - g_free((yyvsp[-1].id));
> - g_free((yyvsp[0].id));
> - }
> - break;
> -
> - case 108:
> -#line 1551 "parse.y"
> - {
> - (yyval.id) = g_strconcat("const ", (yyvsp[0].id), NULL);
> - g_free((yyvsp[0].id));
> - }
> - break;
> -
> - case 109:
> -#line 1555 "parse.y"
> - {
> - (yyval.id) = (yyvsp[0].id);
> - }
> - break;
> -
> - case 110:
> -#line 1558 "parse.y"
> - {
> - (yyval.id) = g_strconcat((yyvsp[-1].id), " const", NULL);
> - g_free((yyvsp[-1].id));
> - }
> - break;
> -
> - case 111:
> -#line 1562 "parse.y"
> - {
> - (yyval.id) = g_strdup((yyvsp[0].id));
> - }
> - break;
> -
> - case 112:
> -#line 1565 "parse.y"
> - {
> - (yyval.id) = g_strconcat((yyvsp[-1].id), " const", NULL);
> - }
> - break;
> -
> - case 113:
> -#line 1570 "parse.y"
> - { (yyval.id) = "void"; }
> - break;
> -
> - case 114:
> -#line 1571 "parse.y"
> - { (yyval.id) = "char"; }
> - break;
> -
> - case 115:
> -#line 1572 "parse.y"
> - { (yyval.id) = "short"; }
> - break;
> -
> - case 116:
> -#line 1573 "parse.y"
> - { (yyval.id) = "int"; }
> - break;
> -
> - case 117:
> -#line 1574 "parse.y"
> - { (yyval.id) = "long"; }
> - break;
> -
> - case 118:
> -#line 1575 "parse.y"
> - { (yyval.id) = "float"; }
> - break;
> -
> - case 119:
> -#line 1576 "parse.y"
> - { (yyval.id) = "double"; }
> - break;
> -
> - case 120:
> -#line 1577 "parse.y"
> - { (yyval.id) = "signed"; }
> - break;
> -
> - case 121:
> -#line 1578 "parse.y"
> - { (yyval.id) = "unsigned"; }
> - break;
> -
> - case 122:
> -#line 1581 "parse.y"
> - { (yyval.id) = "struct"; }
> - break;
> -
> - case 123:
> -#line 1582 "parse.y"
> - { (yyval.id) = "union"; }
> - break;
> -
> - case 124:
> -#line 1583 "parse.y"
> - { (yyval.id) = "enum"; }
> - break;
> -
> - case 125:
> -#line 1586 "parse.y"
> - { (yyval.id) = g_strdup("*"); }
> - break;
> -
> - case 126:
> -#line 1587 "parse.y"
> - { (yyval.id) = g_strdup("* const"); }
> - break;
> -
> - case 127:
> -#line 1588 "parse.y"
> - {
> - (yyval.id) = g_strconcat("*", (yyvsp[0].id), NULL);
> - g_free((yyvsp[0].id));
> - }
> - break;
> -
> - case 128:
> -#line 1592 "parse.y"
> - {
> - (yyval.id) = g_strconcat("* const", (yyvsp[0].id), NULL);
> - g_free((yyvsp[0].id));
> - }
> - break;
> -
> - case 129:
> -#line 1599 "parse.y"
> - {
> - if(strcmp((yyvsp[-1].id), "first")==0)
> - (yyval.sigtype) = SIGNAL_FIRST_METHOD;
> - else if(strcmp((yyvsp[-1].id), "last")==0)
> - (yyval.sigtype) = SIGNAL_LAST_METHOD;
> - else {
> - yyerror(_("signal must be 'first' or 'last'"));
> - g_free((yyvsp[-1].id));
> - YYERROR;
> - }
> - g_free((yyvsp[-1].id));
> - }
> - break;
> -
> - case 130:
> -#line 1611 "parse.y"
> - {
> - (yyval.sigtype) = SIGNAL_LAST_METHOD;
> - }
> - break;
> -
> - case 131:
> -#line 1617 "parse.y"
> - {
> - if(strcmp((yyvsp[-1].id),"first")==0)
> - (yyval.sigtype) = SIGNAL_FIRST_METHOD;
> - else if(strcmp((yyvsp[-1].id),"last")==0)
> - (yyval.sigtype) = SIGNAL_LAST_METHOD;
> - else {
> - yyerror(_("signal must be 'first' or 'last'"));
> - g_free((yyvsp[-1].id));
> - YYERROR;
> - }
> - g_free((yyvsp[-1].id));
> - }
> - break;
> -
> - case 132:
> -#line 1629 "parse.y"
> - {
> - if(strcmp((yyvsp[-2].id),"first")==0)
> - (yyval.sigtype) = SIGNAL_FIRST_METHOD;
> - else if(strcmp((yyvsp[-2].id),"last")==0)
> - (yyval.sigtype) = SIGNAL_LAST_METHOD;
> - else {
> - yyerror(_("signal must be 'first' or 'last'"));
> - g_free((yyvsp[-2].id));
> - YYERROR;
> - }
> - g_free((yyvsp[-2].id));
> - }
> - break;
> -
> - case 133:
> -#line 1641 "parse.y"
> - {
> - (yyval.sigtype) = SIGNAL_LAST_METHOD;
> - }
> - break;
> -
> - case 134:
> -#line 1644 "parse.y"
> - {
> - /* the_scope was default thus public */
> - the_scope = PUBLIC_SCOPE;
> - }
> - break;
> -
> - case 135:
> -#line 1650 "parse.y"
> - {
> - gtktypes = g_list_prepend(gtktypes, debool ((yyvsp[-3].id)));
> - }
> - break;
> -
> - case 136:
> -#line 1655 "parse.y"
> - {
> - gtktypes = g_list_append(gtktypes, debool ((yyvsp[0].id)));
> - }
> - break;
> -
> - case 137:
> -#line 1658 "parse.y"
> - {
> - gtktypes = g_list_append(gtktypes, debool ((yyvsp[0].id)));
> - }
> - break;
> -
> - case 138:
> -#line 1663 "parse.y"
> - { (yyval.cbuf) = (yyvsp[0].cbuf); }
> - break;
> -
> - case 139:
> -#line 1664 "parse.y"
> - { (yyval.cbuf) = NULL; }
> - break;
> -
> - case 140:
> -#line 1668 "parse.y"
> - {
> - if(!has_self) {
> - yyerror(_("signal without 'self' as "
> - "first parameter"));
> - free_all_global_state();
> - YYERROR;
> - }
> - if(the_scope == CLASS_SCOPE) {
> - yyerror(_("a method cannot be of class scope"));
> - free_all_global_state();
> - YYERROR;
> - }
> - push_function(the_scope, (yyvsp[-7].sigtype),NULL,
> - (yyvsp[-5].id), (yyvsp[0].cbuf),(yyvsp[-9].line),
> - ccode_line, vararg, (yyvsp[-8].list));
> - }
> - break;
> -
> - case 141:
> -#line 1684 "parse.y"
> - {
> - if(!has_self) {
> - yyerror(_("signal without 'self' as "
> - "first parameter"));
> - free_all_global_state();
> - YYERROR;
> - }
> - if(the_scope == CLASS_SCOPE) {
> - yyerror(_("a method cannot be of class scope"));
> - free_all_global_state();
> - YYERROR;
> - }
> - push_function(the_scope, (yyvsp[-7].sigtype), NULL,
> - (yyvsp[-5].id), (yyvsp[0].cbuf), (yyvsp[-9].line),
> - ccode_line, vararg, (yyvsp[-8].list));
> - }
> - break;
> -
> - case 142:
> -#line 1700 "parse.y"
> - {
> - if(!has_self) {
> - yyerror(_("virtual method without 'self' as "
> - "first parameter"));
> - free_all_global_state();
> - YYERROR;
> - }
> - if(the_scope == CLASS_SCOPE) {
> - yyerror(_("a method cannot be of class scope"));
> - free_all_global_state();
> - YYERROR;
> - }
> - push_function(the_scope, VIRTUAL_METHOD, NULL, (yyvsp[-5].id),
> - (yyvsp[0].cbuf), (yyvsp[-8].line),
> - ccode_line, vararg, NULL);
> - }
> - break;
> -
> - case 143:
> -#line 1716 "parse.y"
> - {
> - if(!has_self) {
> - yyerror(_("virtual method without 'self' as "
> - "first parameter"));
> - free_all_global_state();
> - YYERROR;
> - }
> - if(the_scope == CLASS_SCOPE) {
> - yyerror(_("a method cannot be of class scope"));
> - free_all_global_state();
> - YYERROR;
> - }
> - push_function(the_scope, VIRTUAL_METHOD, NULL, (yyvsp[-5].id),
> - (yyvsp[0].cbuf), (yyvsp[-7].line),
> - ccode_line, vararg, NULL);
> - }
> - break;
> -
> - case 144:
> -#line 1732 "parse.y"
> - {
> - if(!has_self) {
> - yyerror(_("virtual method without 'self' as "
> - "first parameter"));
> - free_all_global_state();
> - YYERROR;
> - }
> - push_function(PUBLIC_SCOPE, VIRTUAL_METHOD, NULL,
> - (yyvsp[-5].id), (yyvsp[0].cbuf), (yyvsp[-7].line),
> - ccode_line, vararg, NULL);
> - }
> - break;
> -
> - case 145:
> -#line 1743 "parse.y"
> - {
> - push_function(NO_SCOPE, OVERRIDE_METHOD, (yyvsp[-8].id),
> - (yyvsp[-5].id), (yyvsp[0].cbuf),
> - (yyvsp[-10].line), ccode_line,
> - vararg, NULL);
> - }
> - break;
> -
> - case 146:
> -#line 1749 "parse.y"
> - {
> - if(the_scope == CLASS_SCOPE) {
> - yyerror(_("a method cannot be of class scope"));
> - free_all_global_state();
> - YYERROR;
> - }
> - push_function(the_scope, REGULAR_METHOD, NULL, (yyvsp[-5].id),
> - (yyvsp[0].cbuf), (yyvsp[-7].line), ccode_line,
> - vararg, NULL);
> - }
> - break;
> -
> - case 147:
> -#line 1759 "parse.y"
> - {
> - if(strcmp((yyvsp[-4].id), "init")==0) {
> - push_init_arg((yyvsp[-2].id),FALSE);
> - push_function(NO_SCOPE, INIT_METHOD, NULL,
> - (yyvsp[-4].id), (yyvsp[0].cbuf), (yyvsp[-3].line),
> - ccode_line, FALSE, NULL);
> - } else if(strcmp((yyvsp[-4].id), "class_init")==0) {
> - push_init_arg((yyvsp[-2].id),TRUE);
> - push_function(NO_SCOPE, CLASS_INIT_METHOD, NULL,
> - (yyvsp[-4].id), (yyvsp[0].cbuf), (yyvsp[-3].line),
> - ccode_line, FALSE, NULL);
> - } else {
> - g_free((yyvsp[-4].id));
> - g_free((yyvsp[-2].id));
> - g_string_free((yyvsp[0].cbuf),TRUE);
> - yyerror(_("parse error "
> - "(untyped blocks must be init or "
> - "class_init)"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 148:
> -#line 1782 "parse.y"
> - {
> - g_free(onerror); onerror = NULL;
> - g_free(defreturn); defreturn = NULL;
> - if(!set_return_value((yyvsp[-1].id), (yyvsp[0].id))) {
> - g_free((yyvsp[-1].id));
> - g_free((yyvsp[0].id));
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - g_free((yyvsp[-1].id));
> - }
> - break;
> -
> - case 149:
> -#line 1793 "parse.y"
> - {
> - g_free(onerror); onerror = NULL;
> - g_free(defreturn); defreturn = NULL;
> - if(!set_return_value((yyvsp[-3].id), (yyvsp[-2].id))) {
> - g_free((yyvsp[-3].id)); g_free((yyvsp[-2].id));
> - g_free((yyvsp[-1].id)); g_free((yyvsp[0].id));
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - if(!set_return_value((yyvsp[-1].id), (yyvsp[0].id))) {
> - onerror = defreturn = NULL;
> - g_free((yyvsp[-3].id)); g_free((yyvsp[-2].id));
> - g_free((yyvsp[-1].id)); g_free((yyvsp[0].id));
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - g_free((yyvsp[-3].id));
> - g_free((yyvsp[-1].id));
> - }
> - break;
> -
> - case 150:
> -#line 1812 "parse.y"
> - {
> - g_free(onerror); onerror = NULL;
> - g_free(defreturn); defreturn = NULL;
> - }
> - break;
> -
> - case 151:
> -#line 1818 "parse.y"
> - { (yyval.id) = (yyvsp[0].id); }
> - break;
> -
> - case 152:
> -#line 1819 "parse.y"
> - {
> - (yyval.id) = ((yyvsp[0].cbuf))->str;
> - g_string_free((yyvsp[0].cbuf), FALSE);
> - }
> - break;
> -
> - case 153:
> -#line 1825 "parse.y"
> - { vararg = FALSE; has_self = FALSE; }
> - break;
> -
> - case 154:
> -#line 1826 "parse.y"
> - {
> - vararg = FALSE;
> - has_self = TRUE;
> - if(strcmp((yyvsp[0].id),"self")==0)
> - push_self((yyvsp[0].id), FALSE);
> - else {
> - g_free((yyvsp[0].id));
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 155:
> -#line 1837 "parse.y"
> - {
> - vararg = FALSE;
> - has_self = TRUE;
> - if(strcmp((yyvsp[-1].id),"self")==0)
> - push_self((yyvsp[-1].id), TRUE);
> - else {
> - g_free((yyvsp[-1].id));
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 156:
> -#line 1848 "parse.y"
> - {
> - vararg = FALSE;
> - has_self = TRUE;
> - if(strcmp((yyvsp[0].id),"self")==0)
> - push_self((yyvsp[0].id), TRUE);
> - else {
> - g_free((yyvsp[0].id));
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 157:
> -#line 1859 "parse.y"
> - {
> - has_self = TRUE;
> - if(strcmp((yyvsp[-2].id),"self")==0)
> - push_self((yyvsp[-2].id), FALSE);
> - else {
> - g_free((yyvsp[-2].id));
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 158:
> -#line 1869 "parse.y"
> - {
> - has_self = TRUE;
> - if(strcmp((yyvsp[-3].id),"self")==0)
> - push_self((yyvsp[-3].id), TRUE);
> - else {
> - g_free((yyvsp[-3].id));
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 159:
> -#line 1879 "parse.y"
> - {
> - has_self = TRUE;
> - if(strcmp((yyvsp[-2].id),"self")==0)
> - push_self((yyvsp[-2].id), TRUE);
> - else {
> - g_free((yyvsp[-2].id));
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - }
> - break;
> -
> - case 160:
> -#line 1889 "parse.y"
> - { has_self = FALSE; }
> - break;
> -
> - case 161:
> -#line 1892 "parse.y"
> - { vararg = TRUE; }
> - break;
> -
> - case 162:
> -#line 1893 "parse.y"
> - { vararg = FALSE; }
> - break;
> -
> - case 163:
> -#line 1896 "parse.y"
> - { ; }
> - break;
> -
> - case 164:
> -#line 1897 "parse.y"
> - { ; }
> - break;
> -
> - case 165:
> -#line 1900 "parse.y"
> - {
> - push_funcarg((yyvsp[0].id),NULL);
> - }
> - break;
> -
> - case 166:
> -#line 1903 "parse.y"
> - {
> - push_funcarg((yyvsp[-1].id),(yyvsp[0].id));
> - }
> - break;
> -
> - case 167:
> -#line 1906 "parse.y"
> - {
> - if(strcmp((yyvsp[-2].id),"check")!=0) {
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - g_free((yyvsp[-2].id));
> - push_funcarg((yyvsp[-4].id),NULL);
> - }
> - break;
> -
> - case 168:
> -#line 1914 "parse.y"
> - {
> - if(strcmp((yyvsp[-2].id),"check")!=0) {
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - g_free((yyvsp[-2].id));
> - push_funcarg((yyvsp[-5].id),(yyvsp[-4].id));
> - }
> - break;
> -
> - case 169:
> -#line 1924 "parse.y"
> - { ; }
> - break;
> -
> - case 170:
> -#line 1925 "parse.y"
> - { ; }
> - break;
> -
> - case 171:
> -#line 1928 "parse.y"
> - {
> - if(strcmp((yyvsp[0].id),"type")==0) {
> - Node *node = node_new (CHECK_NODE,
> - "chtype", TYPE_CHECK,
> - NULL);
> - checks = g_list_append(checks,node);
> - } else if(strcmp((yyvsp[0].id),"null")==0) {
> - Node *node = node_new (CHECK_NODE,
> - "chtype", NULL_CHECK,
> - NULL);
> - checks = g_list_append(checks,node);
> - } else {
> - yyerror(_("parse error"));
> - YYERROR;
> - }
> - g_free((yyvsp[0].id));
> - }
> - break;
> -
> - case 172:
> -#line 1945 "parse.y"
> - {
> - Node *node = node_new (CHECK_NODE,
> - "chtype", GT_CHECK,
> - "number:steal", (yyvsp[0].id),
> - NULL);
> - checks = g_list_append(checks,node);
> - }
> - break;
> -
> - case 173:
> -#line 1952 "parse.y"
> - {
> - Node *node = node_new (CHECK_NODE,
> - "chtype", LT_CHECK,
> - "number:steal", (yyvsp[0].id),
> - NULL);
> - checks = g_list_append(checks,node);
> - }
> - break;
> -
> - case 174:
> -#line 1959 "parse.y"
> - {
> - Node *node = node_new (CHECK_NODE,
> - "chtype", GE_CHECK,
> - "number:steal", (yyvsp[0].id),
> - NULL);
> - checks = g_list_append(checks,node);
> - }
> - break;
> -
> - case 175:
> -#line 1966 "parse.y"
> - {
> - Node *node = node_new (CHECK_NODE,
> - "chtype", LE_CHECK,
> - "number:steal", (yyvsp[0].id),
> - NULL);
> - checks = g_list_append(checks,node);
> - }
> - break;
> -
> - case 176:
> -#line 1973 "parse.y"
> - {
> - Node *node = node_new (CHECK_NODE,
> - "chtype", EQ_CHECK,
> - "number:steal", (yyvsp[0].id),
> - NULL);
> - checks = g_list_append(checks,node);
> - }
> - break;
> -
> - case 177:
> -#line 1980 "parse.y"
> - {
> - Node *node = node_new (CHECK_NODE,
> - "chtype", NE_CHECK,
> - "number:steal", (yyvsp[0].id),
> - NULL);
> - checks = g_list_append(checks,node);
> - }
> - break;
> -
> - case 178:
> -#line 1989 "parse.y"
> - {
> - Node *node = node_new (ENUMDEF_NODE,
> - "etype:steal", (yyvsp[-1].id),
> - "prefix:steal", (yyvsp[-5].id),
> - "values:steal", enum_vals,
> - NULL);
> - enum_vals = NULL;
> - nodes = g_list_append (nodes, node);
> - }
> - break;
> -
> - case 179:
> -#line 1998 "parse.y"
> - {
> - Node *node = node_new (ENUMDEF_NODE,
> - "etype:steal", (yyvsp[-1].id),
> - "prefix:steal", (yyvsp[-6].id),
> - "values:steal", enum_vals,
> - NULL);
> - enum_vals = NULL;
> - nodes = g_list_append (nodes, node);
> - }
> - break;
> -
> - case 180:
> -#line 2009 "parse.y"
> - {;}
> - break;
> -
> - case 181:
> -#line 2010 "parse.y"
> - {;}
> - break;
> -
> - case 182:
> -#line 2013 "parse.y"
> - {
> - Node *node;
> - char *num = (yyvsp[0].id);
> -
> - /* A float value, that's a bad enum */
> - if (num[0] >= '0' &&
> - num[0] <= '9' &&
> - strchr (num, '.') != NULL) {
> - g_free ((yyvsp[-2].id));
> - g_free (num);
> - yyerror(_("parse error (enumerator value not integer constant)"));
> - YYERROR;
> - }
> -
> - node = node_new (ENUMVALUE_NODE,
> - "name:steal", (yyvsp[-2].id),
> - "value:steal", num,
> - NULL);
> - enum_vals = g_list_append (enum_vals, node);
> - }
> - break;
> -
> - case 183:
> -#line 2033 "parse.y"
> - {
> - Node *node;
> -
> - node = node_new (ENUMVALUE_NODE,
> - "name:steal", (yyvsp[0].id),
> - NULL);
> - enum_vals = g_list_append (enum_vals, node);
> - }
> - break;
> -
> - case 184:
> -#line 2043 "parse.y"
> - {
> - Node *node = node_new (FLAGS_NODE,
> - "ftype:steal", (yyvsp[-1].id),
> - "prefix:steal", (yyvsp[-5].id),
> - "values:steal", flag_vals,
> - NULL);
> - flag_vals = NULL;
> - nodes = g_list_append (nodes, node);
> - }
> - break;
> -
> - case 185:
> -#line 2052 "parse.y"
> - {
> - Node *node = node_new (FLAGS_NODE,
> - "ftype:steal", (yyvsp[-1].id),
> - "prefix:steal", (yyvsp[-6].id),
> - "values:steal", flag_vals,
> - NULL);
> - flag_vals = NULL;
> - nodes = g_list_append (nodes, node);
> - }
> - break;
> -
> - case 186:
> -#line 2063 "parse.y"
> - {
> - flag_vals = g_list_append (flag_vals, (yyvsp[0].id));
> - }
> - break;
> -
> - case 187:
> -#line 2066 "parse.y"
> - {
> - flag_vals = g_list_append (flag_vals, (yyvsp[0].id));
> - }
> - break;
> -
> - case 188:
> -#line 2071 "parse.y"
> - {
> - Node *node = node_new (ERROR_NODE,
> - "etype:steal", (yyvsp[-1].id),
> - "prefix:steal", (yyvsp[-5].id),
> - "values:steal", error_vals,
> - NULL);
> - error_vals = NULL;
> - nodes = g_list_append (nodes, node);
> - }
> - break;
> -
> - case 189:
> -#line 2080 "parse.y"
> - {
> - Node *node = node_new (ERROR_NODE,
> - "etype:steal", (yyvsp[-1].id),
> - "prefix:steal", (yyvsp[-6].id),
> - "values:steal", error_vals,
> - NULL);
> - error_vals = NULL;
> - nodes = g_list_append (nodes, node);
> - }
> - break;
> -
> - case 190:
> -#line 2091 "parse.y"
> - {
> - error_vals = g_list_append (error_vals, (yyvsp[0].id));
> - }
> - break;
> -
> - case 191:
> -#line 2094 "parse.y"
> - {
> - error_vals = g_list_append (error_vals, (yyvsp[0].id));
> - }
> - break;
> -
> - case 192:
> -#line 2100 "parse.y"
> - { (yyval.id) = (yyvsp[0].id); }
> - break;
> -
> - case 193:
> -#line 2101 "parse.y"
> - {
> - (yyval.id) = g_strconcat("-",(yyvsp[0].id),NULL);
> - g_free((yyvsp[0].id));
> - }
> - break;
> -
> - case 194:
> -#line 2105 "parse.y"
> - { (yyval.id) = (yyvsp[0].id); }
> - break;
> -
> - case 195:
> -#line 2106 "parse.y"
> - { (yyval.id) = (yyvsp[0].id); }
> - break;
> -
> -
> - }
> -
> -/* Line 1037 of yacc.c. */
> -#line 4252 "y.tab.c"
> -
> - yyvsp -= yylen;
> - yyssp -= yylen;
> -
> -
> - 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
> - yyn = yypact[yystate];
> -
> - if (YYPACT_NINF < yyn && yyn < YYLAST)
> - {
> - YYSIZE_T yysize = 0;
> - int yytype = YYTRANSLATE (yychar);
> - const char* yyprefix;
> - char *yymsg;
> - int yyx;
> -
> - /* 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;
> - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
> - int yycount = 0;
> -
> - yyprefix = ", expecting ";
> - for (yyx = yyxbegin; yyx < yyxend; ++yyx)
> - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
> - {
> - yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
> - yycount += 1;
> - if (yycount == 5)
> - {
> - yysize = 0;
> - break;
> - }
> - }
> - yysize += (sizeof ("syntax error, unexpected ")
> - + yystrlen (yytname[yytype]));
> - yymsg = (char *) YYSTACK_ALLOC (yysize);
> - if (yymsg != 0)
> - {
> - char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
> - yyp = yystpcpy (yyp, yytname[yytype]);
> -
> - if (yycount < 5)
> - {
> - yyprefix = ", expecting ";
> - for (yyx = yyxbegin; yyx < yyxend; ++yyx)
> - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
> - {
> - yyp = yystpcpy (yyp, yyprefix);
> - yyp = yystpcpy (yyp, yytname[yyx]);
> - yyprefix = " or ";
> - }
> - }
> - yyerror (yymsg);
> - YYSTACK_FREE (yymsg);
> - }
> - else
> - yyerror ("syntax error; also virtual memory exhausted");
> - }
> - else
> -#endif /* YYERROR_VERBOSE */
> - yyerror ("syntax error");
> - }
> -
> -
> -
> - if (yyerrstatus == 3)
> - {
> - /* If just tried and failed to reuse look-ahead token after an
> - error, discard it. */
> -
> - if (yychar <= YYEOF)
> - {
> - /* If at end of input, pop the error token,
> - then the rest of the stack, then return failure. */
> - if (yychar == YYEOF)
> - for (;;)
> - {
> -
> - YYPOPSTACK;
> - if (yyssp == yyss)
> - YYABORT;
> - yydestruct ("Error: popping",
> - yystos[*yyssp], yyvsp);
> - }
> - }
> - else
> - {
> - yydestruct ("Error: discarding", yytoken, &yylval);
> - yychar = YYEMPTY;
> - }
> - }
> -
> - /* Else will try to reuse look-ahead token after shifting the error
> - token. */
> - goto yyerrlab1;
> -
> -
> -/*---------------------------------------------------.
> -| yyerrorlab -- error raised explicitly by YYERROR. |
> -`---------------------------------------------------*/
> -yyerrorlab:
> -
> -#ifdef __GNUC__
> - /* Pacify GCC when the user code never invokes YYERROR and the label
> - yyerrorlab therefore never appears in user code. */
> - if (0)
> - goto yyerrorlab;
> -#endif
> -
> -yyvsp -= yylen;
> - yyssp -= yylen;
> - yystate = *yyssp;
> - goto yyerrlab1;
> -
> -
> -/*-------------------------------------------------------------.
> -| 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;
> - yystate = *yyssp;
> - YY_STACK_PRINT (yyss, yyssp);
> - }
> -
> - if (yyn == YYFINAL)
> - YYACCEPT;
> -
> - *++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:
> - yydestruct ("Error: discarding lookahead",
> - yytoken, &yylval);
> - yychar = YYEMPTY;
> - yyresult = 1;
> - goto yyreturn;
> -
> -#ifndef yyoverflow
> -/*----------------------------------------------.
> -| yyoverflowlab -- parser overflow comes here. |
> -`----------------------------------------------*/
> -yyoverflowlab:
> - yyerror ("parser stack overflow");
> - yyresult = 2;
> - /* Fall through. */
> -#endif
> -
> -yyreturn:
> -#ifndef yyoverflow
> - if (yyss != yyssa)
> - YYSTACK_FREE (yyss);
> -#endif
> - return yyresult;
> -}
> -
> -
> -#line 2109 "parse.y"
> -
> -
> diff -u -Naur pristine/gob2-2.0.14/src/parse.h modified/gob2-2.0.14/src/parse.h
> --- pristine/gob2-2.0.14/src/parse.h 2005-12-16 15:23:03.000000000 -0500
> +++ modified/gob2-2.0.14/src/parse.h 1969-12-31 19:00:00.000000000 -0500
> @@ -1,157 +0,0 @@
> -/* A Bison parser, made by GNU Bison 2.0. */
> -
> -/* Skeleton parser for Yacc-like parsing with Bison,
> - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 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 2, 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, write to the Free Software
> - Foundation, Inc., 59 Temple Place - Suite 330,
> - Boston, MA 02111-1307, USA. */
> -
> -/* As a special exception, when this file is copied by Bison into a
> - Bison output file, you may use that output file without restriction.
> - This special exception was added by the Free Software Foundation
> - in version 1.24 of Bison. */
> -
> -/* Tokens. */
> -#ifndef YYTOKENTYPE
> -# define YYTOKENTYPE
> - /* Put the tokens into the symbol table, so that GDB and other debuggers
> - know about them. */
> - enum yytokentype {
> - CLASS = 258,
> - FROM = 259,
> - CONST = 260,
> - VOID = 261,
> - STRUCT = 262,
> - UNION = 263,
> - ENUM = 264,
> - THREEDOTS = 265,
> - SIGNED = 266,
> - UNSIGNED = 267,
> - LONG = 268,
> - SHORT = 269,
> - INT = 270,
> - FLOAT = 271,
> - DOUBLE = 272,
> - CHAR = 273,
> - TOKEN = 274,
> - NUMBER = 275,
> - TYPETOKEN = 276,
> - ARRAY_DIM = 277,
> - SINGLE_CHAR = 278,
> - CCODE = 279,
> - HTCODE = 280,
> - PHCODE = 281,
> - HCODE = 282,
> - ACODE = 283,
> - ATCODE = 284,
> - STRING = 285,
> - PUBLIC = 286,
> - PRIVATE = 287,
> - PROTECTED = 288,
> - CLASSWIDE = 289,
> - PROPERTY = 290,
> - ARGUMENT = 291,
> - VIRTUAL = 292,
> - SIGNAL = 293,
> - OVERRIDE = 294,
> - NICK = 295,
> - BLURB = 296,
> - MAXIMUM = 297,
> - MINIMUM = 298,
> - DEFAULT_VALUE = 299,
> - ERROR = 300,
> - FLAGS = 301,
> - TYPE = 302,
> - FLAGS_TYPE = 303,
> - ENUM_TYPE = 304,
> - PARAM_TYPE = 305,
> - BOXED_TYPE = 306,
> - OBJECT_TYPE = 307
> - };
> -#endif
> -#define CLASS 258
> -#define FROM 259
> -#define CONST 260
> -#define VOID 261
> -#define STRUCT 262
> -#define UNION 263
> -#define ENUM 264
> -#define THREEDOTS 265
> -#define SIGNED 266
> -#define UNSIGNED 267
> -#define LONG 268
> -#define SHORT 269
> -#define INT 270
> -#define FLOAT 271
> -#define DOUBLE 272
> -#define CHAR 273
> -#define TOKEN 274
> -#define NUMBER 275
> -#define TYPETOKEN 276
> -#define ARRAY_DIM 277
> -#define SINGLE_CHAR 278
> -#define CCODE 279
> -#define HTCODE 280
> -#define PHCODE 281
> -#define HCODE 282
> -#define ACODE 283
> -#define ATCODE 284
> -#define STRING 285
> -#define PUBLIC 286
> -#define PRIVATE 287
> -#define PROTECTED 288
> -#define CLASSWIDE 289
> -#define PROPERTY 290
> -#define ARGUMENT 291
> -#define VIRTUAL 292
> -#define SIGNAL 293
> -#define OVERRIDE 294
> -#define NICK 295
> -#define BLURB 296
> -#define MAXIMUM 297
> -#define MINIMUM 298
> -#define DEFAULT_VALUE 299
> -#define ERROR 300
> -#define FLAGS 301
> -#define TYPE 302
> -#define FLAGS_TYPE 303
> -#define ENUM_TYPE 304
> -#define PARAM_TYPE 305
> -#define BOXED_TYPE 306
> -#define OBJECT_TYPE 307
> -
> -
> -
> -
> -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
> -#line 668 "parse.y"
> -typedef union YYSTYPE {
> - char *id;
> - GString *cbuf;
> - GList *list;
> - int line;
> - int sigtype;
> -} YYSTYPE;
> -/* Line 1318 of yacc.c. */
> -#line 149 "y.tab.h"
> -# define yystype YYSTYPE /* obsolescent; will be withdrawn */
> -# define YYSTYPE_IS_DECLARED 1
> -# define YYSTYPE_IS_TRIVIAL 1
> -#endif
> -
> -extern YYSTYPE yylval;
> -
> -
> -
> diff -u -Naur pristine/gob2-2.0.14/src/parse.y modified/gob2-2.0.14/src/parse.y
> --- pristine/gob2-2.0.14/src/parse.y 2005-12-16 14:11:20.000000000 -0500
> +++ modified/gob2-2.0.14/src/parse.y 2007-02-26 14:58:30.000000000 -0500
> @@ -65,6 +65,38 @@
> static int initializer_line = 0;
> static int glade_widget = FALSE;
>
> +static GString *funcattrs = NULL;
> +static GString *attrargs = NULL;
> +
> +static void
> +clear_funcattrs(void)
> +{
> + if(!funcattrs) {
> + funcattrs = g_string_new("");
> + } else {
> + funcattrs = g_string_assign(funcattrs, "");
> + }
> +}
> +
> +static void
> +add_to_funcattrs(char *s, ...) G_GNUC_PRINTF (1, 2);
> +
> +static void
> +add_to_funcattrs(char *s, ...)
> +{
> + va_list ap;
> + va_start(ap, s);
> + gchar *tmp = g_strdup_vprintf (s, ap);
> + va_end(ap);
> +
> + if(!funcattrs)
> + funcattrs = g_string_new("");
> +
> + funcattrs = g_string_append (funcattrs,tmp);
> +
> + g_free(tmp);
> +}
> +
> static char *onerror = NULL;
> static char *defreturn = NULL;
>
> @@ -196,6 +228,9 @@
> } else
> c_cbuf = NULL;
>
> + if(funcattrs == NULL)
> + funcattrs = g_string_new("");
> +
> node = node_new (METHOD_NODE,
> "scope", scope,
> "method", method,
> @@ -205,6 +240,7 @@
> "flags:steal", flags,
> "id:steal", id,
> "args:steal", funcargs,
> + "funcattrs", funcattrs->str,
> "onerror:steal", onerror,
> "defreturn:steal", defreturn,
> "cbuf:steal", c_cbuf,
> @@ -216,6 +252,8 @@
>
> last_added_method = (Method *)node;
>
> + clear_funcattrs ();
> +
> if(cbuf)
> g_string_free(cbuf,
> /*only free segment if we haven't passed it
> @@ -233,6 +271,9 @@
> static void
> free_all_global_state(void)
> {
> + if(funcattrs != NULL)
> + g_string_free(funcattrs, TRUE);
> +
> g_free(onerror);
> onerror = NULL;
> g_free(defreturn);
> @@ -678,7 +719,7 @@
> %token SIGNED UNSIGNED LONG SHORT INT FLOAT DOUBLE CHAR
>
> %token <id> TOKEN NUMBER TYPETOKEN ARRAY_DIM SINGLE_CHAR
> -%token <cbuf> CCODE HTCODE PHCODE HCODE ACODE ATCODE STRING
> +%token <cbuf> CCODE HTCODE PHCODE HCODE ACODE ATCODE STRING FUNCATTR
> %token <line> PUBLIC PRIVATE PROTECTED CLASSWIDE PROPERTY ARGUMENT
> %token <line> VIRTUAL SIGNAL OVERRIDE
> %token <line> NICK BLURB MAXIMUM MINIMUM DEFAULT_VALUE ERROR FLAGS TYPE
> @@ -1746,7 +1787,7 @@
> $<line>1, ccode_line,
> vararg, NULL);
> }
> - | scope type TOKEN '(' funcargs ')' returnvals codenocode {
> + | scope type TOKEN '(' funcargs ')' methodmods codenocode {
> if(the_scope == CLASS_SCOPE) {
> yyerror(_("a method cannot be of class scope"));
> free_all_global_state();
> @@ -1779,7 +1820,50 @@
> }
> ;
>
> -returnvals: TOKEN retcode {
> +methodmods: funcattrlist { ; }
> + | returnvals_spec { ; }
> + | funcattrlist returnvals_spec { ; }
> + | {
> + g_free(onerror); onerror = NULL;
> + g_free(defreturn); defreturn = NULL;
> + }
> + ;
> +funcattrlist: funcattrlist funcattr { ; }
> + | funcattr { ; }
> + ;
> +
> +funcattr: FUNCATTR '(' attrarglist ')' {
> + g_assert(attrargs != NULL);
> + add_to_funcattrs("\t%s (%s)\n", $<id>1,
> + attrargs->str);
> + g_string_free(attrargs, TRUE);
> + attrargs = NULL;
> + }
> + | FUNCATTR {
> + add_to_funcattrs("\t%s\n", $<id>1);
> + }
> + ;
> +
> +attrarglist: attrarglist ',' NUMBER {
> + g_assert(attrargs != NULL);
> + g_string_append_printf(attrargs, ", %s", $<id>3);
> + }
> + | NUMBER {
> + if(attrargs == NULL)
> + attrargs = g_string_new($<id>1);
> + else
> + attrargs = g_string_append(attrargs, $<id>1);
> + }
> + ;
> +
> +returnvals: returnvals_spec
> + | {
> + g_free(onerror); onerror = NULL;
> + g_free(defreturn); defreturn = NULL;
> + }
> + ;
> +
> +returnvals_spec: TOKEN retcode {
> g_free(onerror); onerror = NULL;
> g_free(defreturn); defreturn = NULL;
> if(!set_return_value($<id>1, $<id>2)) {
> @@ -1809,10 +1893,6 @@
> g_free($<id>1);
> g_free($<id>3);
> }
> - | {
> - g_free(onerror); onerror = NULL;
> - g_free(defreturn); defreturn = NULL;
> - }
> ;
>
> retcode: numtok { $<id>$ = $<id>1; }
> diff -u -Naur pristine/gob2-2.0.14/src/str.gob modified/gob2-2.0.14/src/str.gob
> --- pristine/gob2-2.0.14/src/str.gob 1969-12-31 19:00:00.000000000 -0500
> +++ modified/gob2-2.0.14/src/str.gob 2007-02-26 14:13:32.000000000 -0500
> @@ -0,0 +1,73 @@
> +// A simple string class, a lot like GString but with full GObject
> +// machinery and really short method names for the lazy :)
> +
> +%{
> +#include <stdio.h>
> +%}
> +
> +class :Str from G:Object {
> +
> + private GString *contents;
> +
> + public
> + void
> + print (self)
> + {
> + g_print (self->_priv->contents->str);
> + }
> +
> + public
> + GObject *
> + new (const char *format (check null), ...) G_GNUC_PRINTF (1, 2)
> + onerror NULL defreturn NULL
> + {
> + va_list ap;
> + va_start (ap, format);
> + gchar *tmp = g_strdup_vprintf (format, ap);
> + va_end (ap);
> +
> + Self *self = (Self *) GET_NEW;
> +
> + self->_priv->contents = g_string_new (tmp);
> +
> + g_free (tmp);
> +
> + return G_OBJECT (self);
> + }
> +
> + // It seems gob accepts defreturn on non-virtual non-signal types
> + // without complaint, though from the man page I'm not sure the
> + // resulting behavior is well defined.
> + public
> + char *
> + nonvirt_test (self, const char *format (check null), ...)
> + G_GNUC_PRINTF (2,3)
> + defreturn NULL
> + {
> + return NULL;
> + }
> +
> + private
> + char *
> + private_test_method (self, const char *format (check null), ...)
> + G_GNUC_PRINTF (2, 3)
> + defreturn NULL
> + {
> + return NULL;
> + }
> +
> + public
> + char *
> + private_method_caller (self)
> + {
> + int much_too_general = 42;
> +
> + // This should trigger a warning.
> + self_private_test_method (self, "want a string: %s", much_too_general);
> +
> + // So should this.
> + str_private_test_method (self, "want a string: %s", much_too_general);
> +
> + return NULL;
> + }
> +}
> diff -u -Naur pristine/gob2-2.0.14/src/str_test.c modified/gob2-2.0.14/src/str_test.c
> --- pristine/gob2-2.0.14/src/str_test.c 1969-12-31 19:00:00.000000000 -0500
> +++ modified/gob2-2.0.14/src/str_test.c 2007-02-25 18:23:43.000000000 -0500
> @@ -0,0 +1,20 @@
> +#include "str.h"
> +
> +int
> +main (void)
> +{
> + g_type_init ();
> +
> + int the_answer = 42;
> + char *stupid_pointer = "ug";
> +
> + // This works fine.
> + Str *test_good = (Str *) (str_new ("%d", the_answer));
> + test_good = test_good;
> +
> + // This gets a warning thanks to our function attribute.
> + Str *test_bad = (Str *) (str_new ("%d", stupid_pointer));
> + test_bad = test_bad;
> +
> + return 0;
> +}
> diff -u -Naur pristine/gob2-2.0.14/src/test.gob modified/gob2-2.0.14/src/test.gob
> --- pristine/gob2-2.0.14/src/test.gob 2004-10-26 19:24:57.000000000 -0400
> +++ modified/gob2-2.0.14/src/test.gob 2007-02-25 18:13:32.000000000 -0500
> @@ -418,6 +418,58 @@
> i = 0;
> return 25;
> }
> + public gchar *funcattrtest(self, const char *format (check null), ...)
> + G_GNUC_PRINTF (2, 3)
> + {
> + gchar *result;
> +
> + va_list ap;
> + va_start(ap, format);
> + result = g_strdup_vprintf (format, ap);
> + va_end(ap);
> + return result;
> + }
> + private gchar *funcattrtest2(self, const char *format, ...)
> + G_GNUC_SCANF(2,3)
> + {
> + gchar *nonsense = NULL;
> + format = format;
> + return nonsense;
> + }
> + protected gchar *funcattrtest3(self, const char *format)
> + G_GNUC_FORMAT (2)
> + {
> + gchar *nonsense = NULL;
> + format = format;
> + return nonsense;
> + }
> + private char *funcattrtest4(self, const char *format, ...)
> + G_GNUC_PRINTF(2,3)
> + onerror NULL
> + {
> + gchar *nonsense = NULL;
> + format = format;
> + return nonsense;
> + }
> + protected char * funcattrtest5(self, const char *format, ...)
> + G_GNUC_PRINTF(2,3)
> + onerror NULL
> + {
> + gchar *nonsense = NULL;
> + format = format;
> + return nonsense;
> + }
> + public char * funcattrtest6(self, const char *format, ...)
> + G_GNUC_PRINTF(2,3)
> + onerror NULL
> + {
> + gchar *nonsense = NULL;
> + format = format;
> + return nonsense;
> + }
> + // Note that the parser should accept defreturn with function
> + // attributes as well, but this may not be a good thing since
> + // it probably doesn't make sense, so we don't test it.
> signal private first NONE (NONE)
> void googlegoogle(self)
> {
> diff -u -Naur pristine/gob2-2.0.14/src/treefuncs.c modified/gob2-2.0.14/src/treefuncs.c
> --- pristine/gob2-2.0.14/src/treefuncs.c 2005-12-16 14:11:38.000000000 -0500
> +++ modified/gob2-2.0.14/src/treefuncs.c 2007-02-20 07:30:51.000000000 -0500
> @@ -158,6 +158,8 @@
> QUARK_id_STEAL,
> QUARK_args,
> QUARK_args_STEAL,
> + QUARK_funcattrs,
> + QUARK_funcattrs_STEAL,
> QUARK_onerror,
> QUARK_onerror_STEAL,
> QUARK_defreturn,
> @@ -266,6 +268,8 @@
> g_hash_table_insert (quark_ht, "id:steal", GINT_TO_POINTER (QUARK_id_STEAL));
> g_hash_table_insert (quark_ht, "args", GINT_TO_POINTER (QUARK_args));
> g_hash_table_insert (quark_ht, "args:steal", GINT_TO_POINTER (QUARK_args_STEAL));
> + g_hash_table_insert (quark_ht, "funcattrs", GINT_TO_POINTER (QUARK_funcattrs));
> + g_hash_table_insert (quark_ht, "funcattrs:steal", GINT_TO_POINTER (QUARK_funcattrs_STEAL));
> g_hash_table_insert (quark_ht, "onerror", GINT_TO_POINTER (QUARK_onerror));
> g_hash_table_insert (quark_ht, "onerror:steal", GINT_TO_POINTER (QUARK_onerror_STEAL));
> g_hash_table_insert (quark_ht, "defreturn", GINT_TO_POINTER (QUARK_defreturn));
> @@ -451,6 +455,7 @@
> new->flags = g_list_copy (self->flags); COPY_LIST_VALS(new->flags, g_strdup);
> new->id = g_strdup (self->id);
> new->args = node_list_copy (self->args);
> + new->funcattrs = g_strdup (self->funcattrs);
> new->onerror = g_strdup (self->onerror);
> new->defreturn = g_strdup (self->defreturn);
> new->cbuf = g_strdup (self->cbuf);
> @@ -640,6 +645,7 @@
> g_list_foreach (self->flags, (GFunc)g_free, NULL); g_list_free (self->flags);
> g_free (self->id);
> node_list_free (self->args);
> + g_free (self->funcattrs);
> g_free (self->onerror);
> g_free (self->defreturn);
> g_free (self->cbuf);
> @@ -1301,6 +1307,18 @@
> self->args = args;
> break;
> }
> + case QUARK_funcattrs: {
> + char * funcattrs = va_arg (__ap, char *);
> + char * __old_value = self->funcattrs;
> + self->funcattrs = g_strdup (funcattrs);
> + g_free (__old_value);
> + break;
> + }
> + case QUARK_funcattrs_STEAL: {
> + char * funcattrs = va_arg (__ap, char *);
> + self->funcattrs = funcattrs;
> + break;
> + }
> case QUARK_onerror: {
> char * onerror = va_arg (__ap, char *);
> char * __old_value = self->onerror;
> diff -u -Naur pristine/gob2-2.0.14/src/treefuncs.def modified/gob2-2.0.14/src/treefuncs.def
> --- pristine/gob2-2.0.14/src/treefuncs.def 2005-12-16 14:11:20.000000000 -0500
> +++ modified/gob2-2.0.14/src/treefuncs.def 2007-02-20 07:29:16.000000000 -0500
> @@ -124,6 +124,7 @@
> STRINGLIST flags # G_SIGNAL_* flags for a signal
> STRING id
> NODELIST args
> + STRING funcattrs # GLib function attribute macros
> STRING onerror
> STRING defreturn
> STRING cbuf
> diff -u -Naur pristine/gob2-2.0.14/src/treefuncs.h modified/gob2-2.0.14/src/treefuncs.h
> --- pristine/gob2-2.0.14/src/treefuncs.h 2005-12-16 14:11:38.000000000 -0500
> +++ modified/gob2-2.0.14/src/treefuncs.h 2007-02-20 07:30:51.000000000 -0500
> @@ -165,6 +165,7 @@
> GList * flags;
> char * id;
> GList * args;
> + char * funcattrs;
> char * onerror;
> char * defreturn;
> char * cbuf;

-- 
George <jirka_at_5z.com>
   Glory is fleeting, but obscurity is forever.
                       -- Napoleon Bonaparte
Received on Fri Mar 09 2007 - 17:55:11 CST

This archive was generated by hypermail 2.2.0 : Sun Apr 17 2011 - 21:05:02 CDT