]> git.draconx.ca Git - gob-dx.git/commitdiff
Release 2.0.1 v2.0.1
authorGeorge Lebl <jirka@5z.com>
Thu, 18 Jul 2002 03:51:00 +0000 (19:51 -0800)
committerNick Bowler <nbowler@draconx.ca>
Tue, 19 Feb 2019 17:33:17 +0000 (12:33 -0500)
14 files changed:
ChangeLog
NEWS
configure
configure.in
doc/gob2.1.in
gob2.spec
src/lexer.c
src/lexer.l
src/main.c
src/parse.c
src/parse.y
src/test.gob
src/util.c
src/util.h

index e6c85fe3a0315acc2cc518c3013b190010de137b..73b1e6a6985a516e190f9edbc92e841010e95193 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,30 @@
+Wed Jul 17 10:53:22 2002  George Lebl <jirka@5z.com>
+
+       * Release 2.0.1
+
+Wed Jul 17 10:52:29 2002  George Lebl <jirka@5z.com>
+
+       * src/test.gob: add more tests
+
+       * doc/gob2.1.in: minor updates
+
+       * src/lexer.l: allow comments in property definition code
+
+Tue Jul 16 13:33:51 2002  George Lebl <jirka@5z.com>
+
+       * NEWS, configure.in: prepare for 2.0.1
+
+Tue Jul 16 13:31:42 2002  George Lebl <jirka@5z.com>
+
+       * src/main.c, src/parse.y: Fix extra property types but still
+         recognize if someone used the broken undocumented way which
+         worked.  Also fix object linking to not rely on GtkObject, and
+         fix BOXED linking as well.
+
+       * src/test.gob: add some tests for the above
+
+       * src/parse.y: fix C++ compilation for flags and enum linking
+
 Mon Jul 15 13:05:18 2002  George Lebl <jirka@5z.com>
 
        * Release 2.0.0
diff --git a/NEWS b/NEWS
index e5f0a5492ae410efb1c7b4a08da7fd4d2924f958..94dc3302056911feb1db05dc9b5a71662b36bfcc 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,10 @@
+2.0.1
+       * Fixed property types for all the types that require an extra
+         GObject type
+       * Fix object and boxed linking
+       * Fixed C++ mode for flags and enum linking
+       * Allow comments in property code
+
 2.0.0:
        * Update examples and documentation
 
index 64fec14f77fdf324b28b1d9926f7a6cd7ca428d3..be5d0f200f81be7a2df0cc833726ab999f5e6173 100755 (executable)
--- a/configure
+++ b/configure
@@ -1119,7 +1119,7 @@ fi
 
 PACKAGE=gob2
 
-VERSION=2.0.0
+VERSION=2.0.1
 
 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
   { { echo "$as_me:1125: error: source directory already configured; run \"make distclean\" there first" >&5
index 684759227b31aef7ac69802b3f13ee8086952a83..812c1ed891fd0c869ed61d3e4062fbf5b98c2ec9 100644 (file)
@@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script.
 AC_PREREQ(2.2)
 AC_INIT(src/treefuncs.h)
 AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(gob2,2.0.0)
+AM_INIT_AUTOMAKE(gob2,2.0.1)
 AM_MAINTAINER_MODE
 
 GLIB_REQUIRED=1.3.12
index c51e7e663fcb97849ce784c6e339edafeeadbe09..4af57f130029e931b11bfb5227d309d1c43f528f 100644 (file)
@@ -408,11 +408,13 @@ of them.
 All property types have a 'nick' and a 'blurb' attribute and you should
 set those accordingly.  This will make runtime querying the object
 nicer as things such as gui editors and class browsers can be more
-verbose about the class itself.  Almost all types also have a
-'default_value'
-attribute which sets the initial value of this property (on object
-initialization, the set handler will be run automatically with this
-value).  
+verbose about the class itself.  You can use the '_("string")' notation
+instead of just "string", and that will mark the string for translation.
+.PP
+Almost all types also have a 'default_value' attribute which sets the initial
+value of this property (on object initialization, the set handler will be run
+automatically with this value).  This value will be overriden if the user 
+sets a value of this property on the call to g_object_new.
 .PP
 All the numeric types (including CHAR) have 'minimum' and 'maximum'
 attributes which can restrict the range.  If you do not specify these
@@ -441,7 +443,7 @@ There is a BOXED type which is a pointer which has a boxed type defined
 you will need to specify the 'boxed_type' attribute with the specific
 type of the boxed pointer.
 .PP
-There is also a POINTER type, which has only the nick and blurb
+There is also a POINTER type, which has only the 'nick' and 'blurb'
 attributes.  This is for storing arbitrary pointers.  You should be
 careful with this one, as GObject knows nothing about the data
 stored at this pointer.  It is somewhat like a 'void *' type.
index fa4b8bbf466986e9b7a243b2c2d40d8db63b8977..01fd06c35190da2de01a36cbbed37991039ead0c 100644 (file)
--- a/gob2.spec
+++ b/gob2.spec
@@ -1,4 +1,4 @@
-%define  ver     2.0.0
+%define  ver     2.0.1
 %define  rel     1
 %define  prefix  /usr
 
index dd2c64f68dc2bcfe9ec75a14e57ee3837ca2510c..73f65b7fa6ec7dd0b691df5e9998157f1763fcee 100644 (file)
@@ -284,80 +284,80 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
        *yy_cp = '\0'; \
        yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 110
-#define YY_END_OF_BUFFER 111
-static yyconst short int yy_acclist[606] =
+#define YY_NUM_RULES 112
+#define YY_END_OF_BUFFER 113
+static yyconst short int yy_acclist[610] =
     {   0,
-      111,  108,  110,  107,  108,  110,    1,  109,  110,  108,
-      109,  110,  108,  110,  108,  110,  108,  110,   98,  108,
-      110,   98,  108,  110,  108,  110,  101,  108,  110,  101,
-      108,  110,  101,  108,  110,  101,  108,  110,  107,  108,
-      110,  108,  110,  108,  110,  101,  108,  110,   27,  108,
-      110,    1,   28,  109,  110,   27,  108,  109,  110,   27,
-      108,  110,   27,  108,  110,   27,  108,  110,   51,  108,
-      110,    1,   52,  109,  110,   51,  108,  109,  110,   43,
-       51,  108,  110,   51,  108,  110,   51,  108,  110,   51,
-      108,  110,   49,   51,  108,  110,   50,   51,  108,  110,
-
-       51,  108,  110,   51,  108,  110,   47,  108,  110,    1,
-       48,  109,  110,   47,  108,  109,  110,   46,   47,  108,
-      110,   47,  108,  110,   47,  108,  110,  108,  110,  101,
-      108,  110,  101,  108,  110,  101,  108,  110,  104,  108,
-      110,  108,  110,  108,  110,  108,  110,  101,  108,  110,
-      101,  108,  110,  101,  108,  110,  101,  108,  110,  101,
-      108,  110,  101,  108,  110,  101,  108,  110,  101,  108,
-      110,  101,  108,  110,  101,  108,  110,  101,  108,  110,
-      101,  108,  110,  105,  108,  110,  106,  108,  110,   95,
-      108,  110,   44,  108,  110,   96,  108,  110,   97,  108,
-
-      110,  101,  108,  110,  101,  108,  110,  101,  108,  110,
-      101,  108,  110,  101,  108,  110,  101,  108,  110,  101,
-      108,  110,  101,  108,  110,  101,  108,  110,  101,  108,
-      110,  101,  108,  110,  101,  108,  110,   10,  108,  110,
-       10,  108,  109,  110,   10,  108,  110,   10,  108,  110,
-       10,  108,  110,   10,  108,  110,   15,  108,  110,   15,
-      108,  109,  110,   15,  108,  110,   15,  108,  110,   15,
-      108,  110,   15,  108,  110,   18,  108,  110,   18,  108,
-      109,  110,   18,  108,  110,   18,  108,  110,   98,   22,
-       98,   98,  100,  101,   99,  101,  101,  101,  101,   34,
-
-      101,   26,   23,   42,   35,   45,   24,  101,  101,  101,
-       25,  103,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,    9,    7,   14,   11,   13,   12,   14,   17,
-       16,  102,  102,   98,    3,   98,   98,  100,  100,   99,
-      101,  101,  101,  101,   29,   33,  101,   40,   36,   38,
-       19,   20,  101,  101,  101,   73,   21,  101,  101,  101,
-      101,  101,  101,  101,   68,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-       12,  100,  101,   55,  101,  101,  101,   30,   31,   32,
-      101,   41,   37,   39,  101,   59,  101,   58,  101,    6,
-      101,   71,  101,  101,  101,  101,   63,  101,  101,   66,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,   60,  101,  101,  101,  101,   63,  101,  101,
-      101,  101,   83,  101,  101,  101,  101,   89,  101,    8,
-       53,  101,   54,  101,   56,  101,  101,  101,   58,  101,
-       72,  101,  101,   69,  101,  101,  101,  101,  101,  101,
-       67,  101,  101,  101,  101,   62,  101,  101,  101,   84,
-
-      101,  101,  101,  101,   88,  101,  101,  101,  101,  101,
-      101,  101,  101,   70,  101,  101,  101,  101,  101,   74,
-      101,   80,  101,   64,  101,   61,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,    4,  101,  101,
-      101,  101,   75,  101,  101,  101,  101,   79,  101,  101,
-      101,  101,  101,   85,  101,   86,  101,  101,  101,  101,
-       78,  101,  101,   81,  101,   82,  101,  101,   65,  101,
-      101,  101,  101,  101,  101,  101,   77,  101,   76,  101,
-      101,  101,   91,  101,  101,  101,  101,    4,    2,   93,
-      101,  101,   90,  101,  101,   92,  101,    5,  101,   94,
-
-      101,  101,   87,  101,   57
+      113,  110,  112,  109,  110,  112,    1,  111,  112,  110,
+      111,  112,  110,  112,  110,  112,  110,  112,  100,  110,
+      112,  100,  110,  112,  110,  112,  103,  110,  112,  103,
+      110,  112,  103,  110,  112,  103,  110,  112,  109,  110,
+      112,  110,  112,  110,  112,  103,  110,  112,   29,  110,
+      112,    1,   30,  111,  112,   29,  110,  111,  112,   29,
+      110,  112,   29,  110,  112,   29,  110,  112,   53,  110,
+      112,    1,   54,  111,  112,   53,  110,  111,  112,   45,
+       53,  110,  112,   53,  110,  112,   53,  110,  112,   53,
+      110,  112,   51,   53,  110,  112,   52,   53,  110,  112,
+
+       53,  110,  112,   53,  110,  112,   49,  110,  112,    1,
+       50,  111,  112,   49,  110,  111,  112,   48,   49,  110,
+      112,   49,  110,  112,   49,  110,  112,  110,  112,  103,
+      110,  112,  103,  110,  112,  103,  110,  112,  106,  110,
+      112,  110,  112,  110,  112,  110,  112,  103,  110,  112,
+      103,  110,  112,  103,  110,  112,  103,  110,  112,  103,
+      110,  112,  103,  110,  112,  103,  110,  112,  103,  110,
+      112,  103,  110,  112,  103,  110,  112,  103,  110,  112,
+      103,  110,  112,  107,  110,  112,  108,  110,  112,   97,
+      110,  112,   46,  110,  112,   98,  110,  112,   99,  110,
+
+      112,  110,  112,  103,  110,  112,  103,  110,  112,  103,
+      110,  112,  103,  110,  112,  103,  110,  112,  103,  110,
+      112,  103,  110,  112,  103,  110,  112,  103,  110,  112,
+      103,  110,  112,  103,  110,  112,  103,  110,  112,   10,
+      110,  112,   10,  110,  111,  112,   10,  110,  112,   10,
+      110,  112,   10,  110,  112,   10,  110,  112,   15,  110,
+      112,   15,  110,  111,  112,   15,  110,  112,   15,  110,
+      112,   15,  110,  112,   15,  110,  112,   18,  110,  112,
+       18,  110,  111,  112,   18,  110,  112,   18,  110,  112,
+      100,   23,  100,  100,  102,  103,  101,  103,  103,  103,
+
+      103,   36,  103,   28,   24,   44,   37,   47,   25,  103,
+      103,  103,   26,  105,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,   27,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,    9,    7,   14,   11,   13,
+       12,   14,   17,   16,  104,  104,  100,    3,  100,  100,
+      102,  102,  101,  103,  103,  103,  103,   31,   35,  103,
+       42,   38,   40,   19,   20,  103,  103,  103,   75,   21,
+      103,  103,  103,  103,  103,  103,  103,   70,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+
+      103,   22,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,   12,  102,  103,   57,  103,  103,
+      103,   32,   33,   34,  103,   43,   39,   41,  103,   61,
+      103,   60,  103,    6,  103,   73,  103,  103,  103,  103,
+       65,  103,  103,   68,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,   62,  103,  103,  103,
+      103,   65,  103,  103,  103,  103,   85,  103,  103,  103,
+      103,   91,  103,    8,   55,  103,   56,  103,   58,  103,
+      103,  103,   60,  103,   74,  103,  103,   71,  103,  103,
+      103,  103,  103,  103,   69,  103,  103,  103,  103,   64,
+
+      103,  103,  103,   86,  103,  103,  103,  103,   90,  103,
+      103,  103,  103,  103,  103,  103,  103,   72,  103,  103,
+      103,  103,  103,   76,  103,   82,  103,   66,  103,   63,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,    4,  103,  103,  103,  103,   77,  103,  103,  103,
+      103,   81,  103,  103,  103,  103,  103,   87,  103,   88,
+      103,  103,  103,  103,   80,  103,  103,   83,  103,   84,
+      103,  103,   67,  103,  103,  103,  103,  103,  103,  103,
+       79,  103,   78,  103,  103,  103,   93,  103,  103,  103,
+      103,    4,    2,   95,  103,  103,   92,  103,  103,   94,
+
+      103,    5,  103,   96,  103,  103,   89,  103,   59
     } ;
 
-static yyconst short int yy_accept[509] =
+static yyconst short int yy_accept[514] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -368,53 +368,54 @@ static yyconst short int yy_accept[509] =
       114,  118,  122,  125,  128,  130,  133,  136,  139,  142,
       144,  146,  148,  151,  154,  157,  160,  163,  166,  169,
       172,  175,  178,  181,  184,  187,  190,  193,  196,  199,
-      202,  205,  208,  211,  214,  217,  220,  223,  226,  229,
-
-      232,  235,  238,  241,  245,  248,  251,  254,  257,  260,
-      264,  267,  270,  273,  276,  279,  283,  286,  289,  289,
-      289,  290,  291,  291,  291,  292,  292,  292,  293,  294,
-      295,  296,  297,  298,  299,  300,  300,  300,  300,  300,
-      300,  300,  300,  301,  302,  303,  303,  303,  303,  303,
-      303,  304,  304,  305,  305,  305,  306,  307,  308,  308,
-      309,  310,  311,  311,  312,  312,  312,  312,  313,  314,
-      315,  316,  317,  318,  319,  320,  321,  322,  323,  324,
-      325,  326,  327,  328,  329,  330,  331,  332,  333,  334,
+      202,  204,  207,  210,  213,  216,  219,  222,  225,  228,
+
+      231,  234,  237,  240,  243,  247,  250,  253,  256,  259,
+      262,  266,  269,  272,  275,  278,  281,  285,  288,  291,
+      291,  291,  292,  293,  293,  293,  294,  294,  294,  295,
+      296,  297,  298,  299,  300,  301,  302,  302,  302,  302,
+      302,  302,  302,  302,  303,  304,  305,  305,  305,  305,
+      305,  305,  306,  306,  307,  307,  307,  308,  309,  310,
+      310,  311,  312,  313,  313,  314,  314,  314,  314,  315,
+      316,  317,  318,  319,  320,  321,  322,  323,  324,  325,
+      326,  327,  328,  329,  330,  331,  332,  333,  334,  334,
       335,  336,  337,  338,  339,  340,  341,  342,  343,  344,
 
-      344,  344,  344,  345,  345,  346,  346,  346,  346,  347,
-      348,  348,  350,  351,  352,  353,  353,  354,  355,  355,
-      356,  357,  358,  359,  360,  361,  362,  363,  364,  365,
-      365,  365,  365,  365,  366,  366,  366,  367,  367,  367,
-      368,  368,  369,  369,  369,  369,  370,  371,  371,  372,
-      372,  372,  373,  374,  375,  376,  377,  377,  377,  378,
-      378,  378,  379,  380,  381,  382,  383,  384,  385,  387,
-      388,  389,  390,  391,  392,  393,  394,  395,  396,  397,
-      398,  399,  400,  401,  402,  403,  404,  405,  406,  407,
-      408,  409,  410,  411,  411,  412,  413,  414,  416,  417,
-
-      418,  418,  418,  418,  419,  419,  420,  421,  421,  422,
-      422,  423,  424,  425,  425,  426,  428,  430,  430,  431,
-      432,  434,  435,  436,  437,  439,  440,  442,  443,  444,
-      445,  446,  447,  448,  449,  450,  451,  452,  453,  455,
-      456,  457,  458,  460,  461,  462,  463,  465,  466,  467,
-      468,  470,  470,  471,  471,  471,  473,  475,  477,  477,
-      477,  477,  477,  477,  478,  478,  478,  479,  481,  483,
-      484,  486,  487,  488,  489,  490,  491,  493,  494,  495,
-      496,  498,  499,  500,  502,  503,  504,  505,  507,  508,
-      509,  510,  511,  511,  511,  511,  511,  511,  512,  512,
-
-      512,  513,  514,  516,  517,  518,  519,  520,  522,  524,
-      526,  528,  529,  530,  531,  532,  533,  534,  535,  536,
-      537,  538,  538,  539,  539,  539,  540,  540,  540,  541,
-      542,  543,  545,  546,  547,  548,  550,  551,  552,  553,
-      554,  556,  558,  559,  560,  560,  560,  560,  560,  561,
-      561,  561,  563,  564,  566,  568,  569,  571,  572,  573,
-      574,  575,  576,  577,  577,  577,  577,  577,  577,  577,
-      577,  577,  579,  581,  582,  583,  585,  586,  587,  588,
-      588,  589,  589,  589,  589,  590,  590,  592,  593,  595,
-      596,  598,  598,  598,  598,  599,  600,  602,  602,  602,
-
-      603,  603,  603,  605,  605,  605,  606,  606
+      345,  346,  347,  347,  347,  347,  348,  348,  349,  349,
+      349,  349,  350,  351,  351,  353,  354,  355,  356,  356,
+      357,  358,  358,  359,  360,  361,  362,  363,  364,  365,
+      366,  367,  368,  368,  368,  368,  368,  369,  369,  369,
+      370,  370,  370,  371,  371,  372,  372,  372,  372,  373,
+      374,  374,  375,  375,  375,  376,  377,  378,  379,  380,
+      380,  380,  381,  381,  381,  382,  383,  384,  385,  386,
+      387,  388,  390,  391,  392,  393,  394,  395,  396,  397,
+      398,  399,  400,  401,  402,  402,  403,  404,  405,  406,
+      407,  408,  409,  410,  411,  412,  413,  414,  415,  415,
+
+      416,  417,  418,  420,  421,  422,  422,  422,  422,  423,
+      423,  424,  425,  425,  426,  426,  427,  428,  429,  429,
+      430,  432,  434,  434,  435,  436,  438,  439,  440,  441,
+      443,  444,  446,  447,  448,  449,  450,  451,  452,  453,
+      454,  455,  456,  457,  459,  460,  461,  462,  464,  465,
+      466,  467,  469,  470,  471,  472,  474,  474,  475,  475,
+      475,  477,  479,  481,  481,  481,  481,  481,  481,  482,
+      482,  482,  483,  485,  487,  488,  490,  491,  492,  493,
+      494,  495,  497,  498,  499,  500,  502,  503,  504,  506,
+      507,  508,  509,  511,  512,  513,  514,  515,  515,  515,
+
+      515,  515,  515,  516,  516,  516,  517,  518,  520,  521,
+      522,  523,  524,  526,  528,  530,  532,  533,  534,  535,
+      536,  537,  538,  539,  540,  541,  542,  542,  543,  543,
+      543,  544,  544,  544,  545,  546,  547,  549,  550,  551,
+      552,  554,  555,  556,  557,  558,  560,  562,  563,  564,
+      564,  564,  564,  564,  565,  565,  565,  567,  568,  570,
+      572,  573,  575,  576,  577,  578,  579,  580,  581,  581,
+      581,  581,  581,  581,  581,  581,  581,  583,  585,  586,
+      587,  589,  590,  591,  592,  592,  593,  593,  593,  593,
+      594,  594,  596,  597,  599,  600,  602,  602,  602,  602,
+
+      603,  604,  606,  606,  606,  607,  607,  607,  609,  609,
+      609,  610,  610
     } ;
 
 static yyconst int yy_ec[256] =
@@ -459,133 +460,135 @@ static yyconst int yy_meta[60] =
         8,    8,    8,    8,    8,    8,    8,    1,    1
     } ;
 
-static yyconst short int yy_base[536] =
+static yyconst short int yy_base[542] =
     {   0,
         0,   58,   58,   65,   69,  126,   80,   85,   60,   86,
-      172, 1204,  102,  111,  225, 1203,  101,  149,  140,  158,
-      162,  165, 1210, 1213, 1213, 1213, 1213, 1179,  163,   67,
-      177,  225,    0, 1188,   42,   57,   45,  196,  103,  164,
-      105, 1213, 1213, 1213, 1192,  114, 1178, 1213, 1213, 1213,
-     1213,  169,   87,    0, 1213, 1213,  209, 1146, 1213, 1213,
-     1213, 1213,    0,  212,  117,  130,   61,  149, 1213,  266,
+      172, 1217,  102,  111,  225, 1216,  101,  149,  140,  158,
+      162,  165, 1223, 1226, 1226, 1226, 1226, 1192,  163,   67,
+      177,  225,    0, 1201,   42,   57,   45,  196,  103,  164,
+      105, 1226, 1226, 1226, 1205,  114, 1191, 1226, 1226, 1226,
+     1226,  169,   87,    0, 1226, 1226,  209, 1159, 1226, 1226,
+     1226, 1226,    0,  212,  117,  130,   61,  149, 1226,  266,
       175,  270,  197,  255,   49,  157,  139,  209,  201,  152,
-      214,  270,  245,  272, 1213, 1213, 1213, 1213, 1213, 1213,
-      261,  274,  278,  254,  273,  283,  277,  215,  218,  286,
-
-      276,  284, 1213, 1213, 1189,  326,  328,  334, 1213, 1213,
-     1188,  339,  340,  341, 1199, 1198,  242,  355, 1190, 1189,
-      346, 1213, 1195,  350,  357,  363,    0,  369, 1177, 1176,
-     1175,  287,  339,  303,  315,  387, 1157,  388, 1152,  351,
-      354,  218, 1213,  358, 1213,    0, 1182,  343, 1181, 1180,
-     1213, 1186, 1213,  394, 1142, 1213, 1213, 1213, 1184,  377,
-      378,  385, 1172, 1172, 1181,  397, 1152, 1153,  331,  384,
-      388,  309,  391,  398,  399,  400,  402,  403,  409,  407,
-      410,  404,  411,  413,  416,  414,  419,  422,  425,  427,
-      429,  433,  438,  439,  440,  445,  447,  448, 1213,  475,
-
-      467,  488, 1213,  495, 1213,  497,  502,  510, 1213,  516,
-     1166, 1213, 1213, 1213, 1213, 1170, 1169,  507, 1175, 1213,
-      511,    0, 1157, 1156, 1155,  451,  455,  459,  472, 1125,
-     1127, 1128, 1113, 1213, 1137, 1111, 1213, 1110, 1126,  467,
-     1139, 1213, 1155, 1154, 1153, 1213, 1213, 1159, 1213, 1126,
-     1157, 1213,  463,  487,  489, 1213,  531, 1156, 1213, 1127,
-      525,  501,  511,  515,  516,  518,  519,  525, 1137,  526,
-      527,  528,  531,  529,  530,  535,  533,  537,  548,  539,
-      540,  542,  550,  552,  543,  551,  554,  555,  558,  573,
-      574,  577,  578,  597, 1213, 1136,  582, 1135,  584,  585,
-
-     1101, 1116,  554, 1213, 1116, 1213, 1213, 1097,  588, 1124,
-     1213, 1213, 1213, 1105,  589, 1128, 1127,  616, 1213,  593,
-     1126,  591,  594,  600, 1125,  596, 1124,  601,  604,  606,
-      608,  611,  605,  621,  612,  607,  610,  615, 1123,  630,
-      619,  636,  639,  640,  641,  642, 1122,  643,  645,  646,
-     1121,  667, 1213,  673,  678, 1120, 1119, 1118, 1096,  686,
-     1089, 1098, 1101,  647,    0, 1080,  657,  652, 1112,  662,
-     1111,  654,  665,  676,  678,  680, 1110,  681,  682,  683,
-     1109,  684,  686, 1108,  688,  685,  689,  690,  691,  692,
-      694,  696, 1077,  721, 1078, 1075, 1072,  711, 1099, 1086,
-
-      701,  712, 1095,  713,  714,  704,  716, 1087, 1086, 1077,
-     1070,  722,  723,  730,  732,  734,  735,  738,  740,  737,
-      741, 1044,  760,  712, 1043,  743, 1068, 1036,  745,  752,
-      753, 1018,  751,  755,  760, 1006,  754,  766,  761,  769,
-      989,  983,  775,  779,  944,  979,  924,  870,  798,  784,
-      804,  889,  785,  888,  886,  787,  885,  792,  793,  794,
-      795,  796,  797,  818,  897,  838,  838,  832,  838,  846,
-      812,  819,  810,  805,  808,  801,  809,  812,  815,  562,
-     1213,  460,  852,  860, 1213,  837,  465,  817,  340,  847,
-      292,  273,  864,  866, 1213,  854,  234,  215,  873,  865,
-
-      150,  877,  172,  895,  897, 1213, 1213,  914,  923,  932,
-      941,  950,  959,  968,  971,  975,  983,  992,  997, 1006,
-     1015, 1020, 1023, 1027, 1035, 1044, 1053, 1062, 1067, 1075,
-     1079, 1086, 1094, 1103, 1112
+      214,  270,  245,  272, 1226, 1226, 1226, 1226, 1226, 1226,
+      236,  261,  274,  278,  254,  273,  283,  277,  218,  225,
+
+      286,  276,  284, 1226, 1226, 1202,  326,  328,  334, 1226,
+     1226, 1201,  339,  340,  341, 1212, 1211,  320,  355, 1203,
+     1202,  346, 1226, 1208,  350,  357,  363,    0,  369, 1190,
+     1189, 1188,  287,  215,  309,  358,  387, 1170,  388, 1165,
+      348,  358,  310, 1226,  376, 1226,    0, 1195,  344, 1194,
+     1193, 1226, 1199, 1226,  395, 1155, 1226, 1226, 1226, 1197,
+      378,  384,  385, 1185, 1185, 1194,  396, 1165, 1166,  389,
+      387,  388,  397,  398,  399,  402,  403,  404,  333,  413,
+      410,  409,  414,  415,  418,  420,  421, 1226, 1191,  422,
+      292,  425,  426,  438,  427,  428,  437,  444,  441,  448,
+
+      446, 1226,  471,  486,  493, 1226,  495, 1226,  498,  500,
+      506, 1226,  514, 1178, 1226, 1226, 1226, 1226, 1182, 1181,
+      505, 1187, 1226,  509,    0, 1169, 1168, 1167,  456,  460,
+      490,  494, 1137, 1139, 1140, 1125, 1226, 1149, 1123, 1226,
+     1122, 1138,  498, 1151, 1226, 1167, 1166, 1165, 1226, 1226,
+     1171, 1226, 1138, 1169, 1226,  499,  509,  510, 1226,  529,
+     1168, 1226, 1139,  522,  514,  516,  522,  523,  447,  524,
+      525, 1149,  526,  527,  528,  532,  535,  536,  529,  537,
+      540,  542,  539,  552, 1165, 1226,  543,  544,  556,  550,
+      558,  551,  565,  574,  576,  578,  579,  581,  601, 1226,
+
+     1147,  580, 1146,  582,  585, 1112, 1127,  556, 1226, 1127,
+     1226, 1226, 1108,  589, 1135, 1226, 1226, 1226, 1116,  590,
+     1139, 1138,  613, 1226,  592, 1137,  600,  602,  603, 1136,
+      604, 1135,  607,  606,  608,  609,  614,  613,  615,  458,
+      618,  620,  622, 1134,  624,  630,  623,  629,  633,  640,
+      642, 1133,  643,  647,  649, 1132,  668, 1226,  677,  687,
+     1131, 1130, 1129, 1107,  666, 1100, 1109, 1112,  653,    0,
+     1091,  657,  661, 1123,  662, 1122,  668,  671,  675,  676,
+      678, 1121,  680,  681,  682, 1120,  684,  685, 1113,  687,
+      688,  686,  690,  692,  694,  700,  695, 1075,  737, 1076,
+
+     1065, 1056,  709, 1075, 1062,  711,  701, 1077,  708,  713,
+      706,  715, 1062, 1027, 1015,  998,  728,  716,  717,  720,
+      721,  729,  731,  739,  741,  742,  975,  769,  712,  967,
+      746,  984,  943,  743,  754,  759,  899,  748,  762,  757,
+      898,  760,  769,  763,  771,  897,  896,  772,  778,  864,
+      907,  866,  872,  798,  789,  807,  889,  782,  888,  880,
+      790,  879,  783,  792,  795,  794,  796,  800,  819,  884,
+      842,  850,  821,  833,  842,  815,  824,  821,  810,  823,
+      814,  825,  809,  835,  826, 1226,  535,  849,  857, 1226,
+      857,  470,  850,  462,  851,  335,  273,  864,  870, 1226,
+
+      858,  237,  217,  879,  864,  150,  886,  172,  904,  883,
+     1226, 1226,  923,  932,  941,  950,  959,  968,  977,  980,
+      984,  992, 1001, 1006, 1015, 1024, 1029, 1032, 1036, 1044,
+     1053, 1062, 1071, 1076, 1085, 1093, 1097, 1104, 1112, 1121,
+     1130
     } ;
 
-static yyconst short int yy_def[536] =
+static yyconst short int yy_def[542] =
     {   0,
-      507,    1,  508,  508,  509,  509,  510,  510,    1,    1,
-        1,   11,    1,    1,    1,   15,  511,  511,  512,  512,
-      513,  513,  507,  507,  507,  507,  507,  514,  507,  507,
-      507,  507,  515,  516,  516,  516,  516,  507,  507,  507,
-      516,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  517,  507,  507,  507,  507,  507,  507,
-      507,  507,  518,  507,  507,  516,  516,  516,  507,  507,
-      507,  519,  516,  516,  516,  516,  516,  516,  516,  516,
-      516,  516,  516,  516,  507,  507,  507,  507,  507,  507,
-      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
-
-      516,  516,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  520,
-      507,  507,  521,  507,  507,  507,  522,  507,  523,  516,
-      524,  516,  516,  516,  516,  507,  507,  507,  507,  507,
-      507,  507,  507,  516,  507,  525,  507,  507,  507,  507,
-      507,  526,  507,  507,  507,  507,  507,  507,  527,  516,
-      516,  516,  507,  507,  528,  507,  529,  507,  516,  516,
-      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
-      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
-      516,  516,  516,  516,  516,  516,  516,  516,  507,  507,
-
-      507,  507,  507,  530,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  521,  507,
-      507,  522,  523,  531,  524,  516,  516,  516,  516,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  516,
-      507,  507,  507,  507,  507,  507,  507,  526,  507,  507,
-      527,  507,  516,  516,  516,  507,  507,  528,  507,  529,
-      519,  516,  516,  516,  516,  516,  516,  516,  516,  516,
-      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
-      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
-      516,  516,  516,  532,  507,  531,  516,  516,  516,  516,
-
-      507,  507,  507,  507,  507,  507,  507,  507,  516,  507,
-      507,  507,  507,  507,  516,  516,  516,  507,  507,  516,
-      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
-      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
-      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
-      516,  507,  507,  532,  507,  516,  516,  516,  507,  507,
-      507,  507,  507,  516,  533,  507,  516,  516,  516,  516,
-      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
-      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
-      516,  516,  507,  507,  507,  507,  507,  516,  507,  507,
-
-      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
-      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
-      516,  507,  507,  507,  507,  516,  507,  507,  516,  516,
-      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
-      516,  516,  516,  516,  507,  507,  507,  507,  516,  507,
-      507,  516,  516,  516,  516,  516,  516,  516,  516,  516,
-      516,  516,  516,  507,  534,  507,  507,  507,  507,  507,
-      507,  516,  516,  516,  516,  516,  516,  516,  516,  534,
-      507,  507,  507,  507,  507,  535,  516,  516,  516,  516,
-      516,  507,  507,  535,  507,  516,  516,  507,  507,  516,
-
-      507,  507,  516,  507,  507,  507,    0,  507,  507,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507
+      512,    1,  513,  513,  514,  514,  515,  515,    1,    1,
+        1,   11,    1,    1,    1,   15,  516,  516,  517,  517,
+      518,  518,  512,  512,  512,  512,  512,  519,  512,  512,
+      512,  512,  520,  521,  521,  521,  521,  512,  512,  512,
+      521,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  522,  512,  512,  512,  512,  512,  512,
+      512,  512,  523,  512,  512,  521,  521,  521,  512,  512,
+      512,  524,  521,  521,  521,  521,  521,  521,  521,  521,
+      521,  521,  521,  521,  512,  512,  512,  512,  512,  512,
+      512,  521,  521,  521,  521,  521,  521,  521,  521,  521,
+
+      521,  521,  521,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      525,  512,  512,  526,  512,  512,  512,  527,  512,  528,
+      521,  529,  521,  521,  521,  521,  512,  512,  512,  512,
+      512,  512,  512,  512,  521,  512,  530,  512,  512,  512,
+      512,  512,  531,  512,  512,  512,  512,  512,  512,  532,
+      521,  521,  521,  512,  512,  533,  512,  534,  512,  521,
+      521,  521,  521,  521,  521,  521,  521,  521,  521,  521,
+      521,  521,  521,  521,  521,  521,  521,  512,  535,  521,
+      521,  521,  521,  521,  521,  521,  521,  521,  521,  521,
+
+      521,  512,  512,  512,  512,  512,  536,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  526,  512,  512,  527,  528,  537,  529,  521,  521,
+      521,  521,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  521,  512,  512,  512,  512,  512,  512,  512,
+      531,  512,  512,  532,  512,  521,  521,  521,  512,  512,
+      533,  512,  534,  524,  521,  521,  521,  521,  521,  521,
+      521,  521,  521,  521,  521,  521,  521,  521,  521,  521,
+      521,  521,  521,  521,  535,  512,  521,  521,  521,  521,
+      521,  521,  521,  521,  521,  521,  521,  521,  538,  512,
+
+      537,  521,  521,  521,  521,  512,  512,  512,  512,  512,
+      512,  512,  512,  521,  512,  512,  512,  512,  512,  521,
+      521,  521,  512,  512,  521,  521,  521,  521,  521,  521,
+      521,  521,  521,  521,  521,  521,  521,  521,  521,  521,
+      521,  521,  521,  521,  521,  521,  521,  521,  521,  521,
+      521,  521,  521,  521,  521,  521,  512,  512,  538,  512,
+      521,  521,  521,  512,  512,  512,  512,  512,  521,  539,
+      512,  521,  521,  521,  521,  521,  521,  521,  521,  521,
+      521,  521,  521,  521,  521,  521,  521,  521,  521,  521,
+      521,  521,  521,  521,  521,  521,  521,  512,  512,  512,
+
+      512,  512,  521,  512,  512,  521,  521,  521,  521,  521,
+      521,  521,  521,  521,  521,  521,  521,  521,  521,  521,
+      521,  521,  521,  521,  521,  521,  512,  512,  512,  512,
+      521,  512,  512,  521,  521,  521,  521,  521,  521,  521,
+      521,  521,  521,  521,  521,  521,  521,  521,  521,  512,
+      512,  512,  512,  521,  512,  512,  521,  521,  521,  521,
+      521,  521,  521,  521,  521,  521,  521,  521,  512,  540,
+      512,  512,  512,  512,  512,  512,  521,  521,  521,  521,
+      521,  521,  521,  521,  540,  512,  512,  512,  512,  512,
+      541,  521,  521,  521,  521,  521,  512,  512,  541,  512,
+
+      521,  521,  512,  512,  521,  512,  512,  521,  512,  512,
+      512,    0,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512
     } ;
 
-static yyconst short int yy_nxt[1273] =
+static yyconst short int yy_nxt[1286] =
     {   0,
        24,   25,   26,   25,   27,   25,   24,   24,   24,   28,
        24,   24,   24,   29,   30,   31,   32,   32,   32,   33,
@@ -593,143 +596,144 @@ static yyconst short int yy_nxt[1273] =
        24,   34,   34,   34,   35,   34,   36,   37,   34,   34,
        34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
        34,   34,   34,   34,   34,   34,   34,   24,   24,   38,
-       43,  131,   44,   38,  131,   39,   40,   43,  131,   44,
-       45,   49,   46,   50,   65,   51,  131,   45,   52,  122,
-      131,  123,   60,   53,   61,  132,   62,   60,  135,   61,
-       47,   62,   64,   39,   66,  173,   34,   67,   54,  151,
-
-       65,  152,  133,   26,  138,  104,  134,   41,  138,   63,
-      161,   68,   87,  105,   63,  138,   24,   69,   39,  138,
-       66,   87,   34,   67,  131,   24,   55,   56,   49,  158,
-       50,  159,   51,   57,   58,   52,   34,   68,   34,   34,
-       53,  144,   26,   69,  110,   34,  139,   34,   34,  131,
-      106,   26,  111,  104,  106,   54,  107,  139,  131,  112,
-       26,  108,  110,  112,   26,  113,  116,   26,  131,  116,
-      114,  131,  118,  160,  117,  147,  131,  117,  121,  121,
-      121,  121,  175,   55,   56,   70,   71,  164,  162,  165,
-      124,  131,  125,  125,  125,  126,  140,  136,  148,  238,
-
-       72,  136,  174,  141,   73,  178,   74,   75,   76,   77,
-      154,  142,   78,  138,  154,   79,  131,  138,   80,   81,
-      131,  143,   82,   68,   83,   84,  149,  150,  131,   85,
-       86,   88,  127,  131,  131,   89,   90,  131,  124,   24,
-      128,  128,  128,  128,  213,  137,  169,  177,  195,  155,
-      196,  501,  139,  131,  176,  139,  214,  238,   91,   92,
-       93,   94,   95,  179,  131,   78,  180,  239,   79,   96,
-       97,   98,   99,  131,  131,  100,  101,   83,  102,  163,
-      131,  121,  121,  121,  121,  166,  166,  166,  166,  131,
-      184,  131,  131,  131,  170,  131,  131,  131,  171,  190,
-
-      168,  172,  131,  131,  187,  131,  131,  188,  498,  181,
-      182,  131,  185,  170,  189,  192,  191,  194,  186,  226,
-      172,  183,  131,  193,  173,  181,  197,  200,  131,  138,
-      186,  200,  198,  138,  131,  202,  203,  183,  201,  204,
-      206,  138,  208,  209,  206,  138,  210,  229,  199,  243,
-      131,  207,  228,  211,  265,  212,  138,  213,  131,  131,
-      138,  218,  218,  218,  218,  221,  221,  221,  221,  262,
-      124,  139,  125,  125,  125,  126,  124,  131,  126,  126,
-      126,  126,  124,  139,  128,  128,  128,  128,  136,  138,
-      235,  227,  136,  138,  232,  154,  131,  131,  139,  154,
-
-      244,  245,  233,  131,  131,  236,  240,  131,  234,  253,
-      131,  237,  166,  166,  166,  166,  263,  131,  131,  131,
-      264,  131,  131,  131,  254,  255,  131,  168,  131,  131,
-      131,  139,  131,  131,  155,  131,  137,  139,  131,  271,
-      274,  131,  276,  266,  131,  268,  131,  270,  131,  272,
-      267,  269,  131,  278,  281,  273,  275,  131,  131,  131,
-      277,  286,  284,  279,  131,  280,  131,  131,  202,  203,
-      131,  282,  204,  289,  131,  268,  200,  283,  131,  285,
-      200,  290,  131,  288,  131,  292,  131,  201,  287,  202,
-      203,  131,  492,  202,  291,  293,  202,  203,  206,  298,
-
-      202,  297,  206,  208,  209,  299,  131,  210,  131,  207,
-      300,  208,  209,  315,  211,  208,  295,  208,  209,  309,
-      131,  208,  218,  218,  218,  218,  221,  221,  221,  221,
-      131,  316,  318,  319,  131,  131,  318,  131,  131,  317,
-      166,  166,  166,  166,  131,  131,  131,  131,  131,  131,
-      131,  324,  131,  320,  131,  168,  131,  326,  131,  131,
-      321,  131,  131,  325,  327,  322,  323,  131,  481,  131,
-      131,  131,  332,  131,  131,  339,  328,  131,  330,  333,
-      334,  329,  331,  336,  342,  335,  341,  343,  337,  344,
-      338,  340,  131,  131,  345,  346,  131,  131,  352,  353,
-
-      347,  131,  352,  131,  131,  361,  349,  131,  131,  348,
-      131,  234,  131,  131,  351,  131,  355,  318,  319,  131,
-      131,  318,  350,  131,  131,  131,  131,  131,  364,  131,
-      131,  131,  356,  357,  131,  358,  373,  367,  131,  317,
-      131,  368,  374,  370,  375,  369,  380,  371,  382,  131,
-      372,  376,  381,  378,  385,  131,  377,  379,  131,  131,
-      131,  131,  131,  384,  131,  131,  131,  383,  352,  353,
-      387,  131,  352,  131,  352,  353,  131,  391,  352,  352,
-      353,  131,  379,  352,  131,  389,  390,  394,  386,  392,
-      388,  394,  355,  401,  404,  131,  398,  131,  403,  131,
-
-      131,  131,  131,  131,  131,  131,  402,  131,  131,  131,
-      131,  131,  407,  131,  408,  131,  405,  410,  413,  414,
-      131,  417,  394,  131,  409,  406,  394,  421,  415,  412,
-      131,  131,  131,  131,  411,  131,  423,  423,  423,  423,
-      416,  131,  131,  418,  419,  420,  429,  426,  431,  131,
-      432,  131,  430,  131,  131,  433,  131,  131,  435,  131,
-      131,  446,  131,  447,  131,  446,  436,  434,  443,  237,
-      131,  131,  131,  131,  131,  423,  423,  423,  423,  131,
-      131,  437,  441,  438,  442,  131,  440,  453,  131,  454,
-      439,  456,  444,  449,  131,  457,  452,  459,  131,  468,
-
-      469,  470,  470,  468,  131,  471,  131,  455,  460,  471,
-      458,  131,  131,  131,  131,  131,  131,  131,  486,  468,
-      131,  472,  473,  468,  131,  461,  462,  131,  131,  131,
-      476,  131,  486,  468,  131,  463,  131,  468,  131,  474,
-      488,  487,  477,  495,  479,  489,  475,  483,  483,  483,
-      483,  491,  478,  484,  484,  484,  484,  485,  495,  490,
-      496,  484,  484,  484,  484,  493,  131,  483,  483,  483,
-      483,  485,  495,  131,  482,  484,  484,  484,  484,  499,
-      499,  499,  499,  497,  131,  236,  502,  495,  499,  499,
-      499,  499,  504,  504,  504,  504,  505,  506,  505,  506,
-
-      505,  503,  505,  481,  131,  131,  500,  131,  131,  467,
-      504,  504,  504,  504,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   48,   48,   48,   48,   48,   48,   48,
-       48,   48,   59,   59,   59,   59,   59,   59,   59,   59,
-       59,  103,  103,  103,  103,  103,  103,  103,  103,  103,
-      109,  109,  109,  109,  109,  109,  109,  109,  109,  115,
-      115,  115,  115,  115,  115,  115,  115,  115,  119,  119,
-      466,  119,  119,  119,  119,  119,  119,  129,  129,  130,
-      130,  130,  130,  153,  153,  465,  153,  153,  153,  153,
-      153,  153,  157,  157,  464,  157,  157,  157,  157,  157,
-
-      157,  167,  131,  167,  167,  167,  216,  216,  131,  216,
-      216,  216,  216,  216,  216,  219,  219,  219,  219,  219,
-      219,  219,  219,  219,  222,  131,  222,  223,  223,  223,
-      223,  225,  225,  225,  225,  241,  241,  131,  241,  241,
-      241,  241,  241,  241,  248,  248,  248,  248,  248,  248,
-      248,  248,  248,  251,  251,  251,  251,  251,  251,  251,
-      251,  251,  258,  258,  258,  258,  258,  258,  258,  258,
-      258,  260,  451,  260,  260,  260,  294,  294,  450,  448,
-      445,  294,  294,  296,  296,  296,  296,  354,  354,  131,
-      354,  354,  354,  354,  399,  399,  131,  399,  399,  399,
-
-      399,  399,  399,  480,  480,  131,  131,  480,  480,  480,
-      480,  480,  494,  494,  131,  494,  494,  494,  494,  494,
-      494,  428,  427,  425,  424,  233,  422,  131,  131,  131,
-      131,  131,  400,  397,  396,  395,  393,  131,  131,  131,
-      131,  131,  131,  131,  131,  131,  131,  131,  366,  365,
-      363,  362,  360,  359,  131,  224,  131,  168,  259,  252,
-      314,  249,  313,  312,  311,  310,  308,  307,  306,  305,
-      304,  303,  302,  301,  131,  224,  224,  220,  215,  215,
-      295,  261,  168,  259,  257,  256,  252,  250,  249,  247,
-      246,  242,  231,  230,  131,  131,  224,  220,  217,  215,
-
-      213,  213,  205,  199,  156,  146,  145,  131,  120,  507,
-       39,   39,   23,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507
+       43,  132,   44,   38,  132,   39,   40,   43,  132,   44,
+       45,   49,   46,   50,   65,   51,  132,   45,   52,  123,
+      132,  124,   60,   53,   61,  133,   62,   60,  136,   61,
+       47,   62,   64,   39,   66,  174,   34,   67,   54,  152,
+
+       65,  153,  134,   26,  139,  105,  135,   41,  139,   63,
+      162,   68,   87,  106,   63,  139,   24,   69,   39,  139,
+       66,   87,   34,   67,  132,   24,   55,   56,   49,  159,
+       50,  160,   51,   57,   58,   52,   34,   68,   34,   34,
+       53,  145,   26,   69,  111,   34,  140,   34,   34,  132,
+      107,   26,  112,  105,  107,   54,  108,  140,  132,  113,
+       26,  109,  111,  113,   26,  114,  117,   26,  132,  117,
+      115,  132,  119,  161,  118,  148,  132,  118,  122,  122,
+      122,  122,  176,   55,   56,   70,   71,  165,  163,  166,
+      125,  132,  126,  126,  126,  127,  141,  137,  149,  241,
+
+       72,  137,  175,  142,   73,  179,   74,   75,   76,   77,
+      155,  143,   78,  139,  155,   79,  132,  139,   80,   81,
+      132,  144,   82,   68,   83,   84,  150,  151,  132,   85,
+       86,   88,  128,  132,  132,   89,   90,  132,  125,   91,
+      129,  129,  129,  129,  132,  138,  170,  178,  188,  156,
+      189,  198,  140,  506,  177,  140,  132,  199,   92,   93,
+       94,   95,   96,  180,  132,   78,  181,  230,   79,   97,
+       98,   99,  100,  132,  132,  101,  102,   83,  103,  164,
+      132,  122,  122,  122,  122,  167,  167,  167,  167,  132,
+      185,  132,  132,  132,  171,  132,  132,  132,  172,  193,
+
+      169,  173,  132,  132,  190,  132,  132,  191,  503,  182,
+      183,  132,  186,  171,  192,  195,  194,  197,  187,  229,
+      173,  184,  216,  196,  174,  182,  200,  203,  132,  139,
+      187,  203,  201,  139,  217,  205,  206,  184,  204,  207,
+      209,  139,  211,  212,  209,  139,  213,  288,  202,  241,
+      246,  210,  132,  214,  132,  215,  139,  216,  231,  242,
+      139,  221,  221,  221,  221,  224,  224,  224,  224,  274,
+      125,  140,  126,  126,  126,  127,  125,  132,  127,  127,
+      127,  127,  125,  140,  129,  129,  129,  129,  137,  139,
+      232,  235,  137,  139,  238,  132,  155,  132,  140,  236,
+
+      155,  247,  248,  132,  132,  237,  132,  132,  132,  239,
+      256,  167,  167,  167,  167,  240,  132,  132,  132,  266,
+      267,  132,  132,  132,  243,  258,  169,  265,  132,  132,
+      257,  140,  132,  132,  132,  156,  138,  132,  140,  132,
+      132,  132,  268,  277,  132,  132,  132,  132,  271,  273,
+      269,  270,  279,  275,  272,  278,  132,  132,  281,  276,
+      132,  284,  289,  132,  280,  132,  132,  132,  282,  283,
+      291,  294,  203,  293,  287,  132,  203,  132,  290,  132,
+      329,  132,  292,  204,  271,  295,  297,  205,  206,  132,
+      296,  207,  385,  298,  205,  206,  205,  206,  205,  209,
+
+      205,  211,  212,  209,  303,  213,  302,  211,  212,  132,
+      210,  211,  214,  132,  300,  211,  212,  132,  132,  211,
+      221,  221,  221,  221,  224,  224,  224,  224,  132,  132,
+      323,  324,  305,  132,  323,  132,  304,  167,  167,  167,
+      167,  132,  132,  132,  132,  132,  132,  132,  132,  320,
+      314,  132,  169,  321,  132,  132,  132,  331,  132,  132,
+      322,  132,  132,  132,  332,  326,  325,  497,  330,  132,
+      132,  132,  327,  328,  339,  132,  333,  132,  337,  335,
+      346,  334,  342,  336,  132,  338,  341,  344,  347,  340,
+      343,  350,  345,  132,  348,  132,  349,  132,  132,  132,
+
+      132,  132,  357,  358,  132,  351,  357,  366,  132,  132,
+      354,  132,  353,  237,  323,  324,  352,  356,  323,  132,
+      360,  132,  132,  132,  355,  132,  132,  132,  132,  369,
+      361,  362,  132,  132,  132,  363,  372,  132,  378,  132,
+      322,  132,  132,  132,  379,  380,  375,  383,  132,  132,
+      373,  384,  132,  374,  381,  376,  377,  389,  387,  132,
+      392,  132,  132,  386,  382,  390,  132,  399,  132,  357,
+      358,  399,  132,  357,  388,  391,  132,  396,  357,  358,
+      132,  132,  357,  393,  394,  384,  395,  132,  357,  358,
+      132,  397,  357,  406,  132,  132,  360,  132,  408,  132,
+
+      132,  132,  403,  132,  132,  132,  132,  132,  409,  132,
+      412,  132,  413,  132,  132,  407,  415,  418,  419,  132,
+      132,  422,  410,  414,  411,  132,  426,  132,  132,  417,
+      132,  420,  132,  416,  132,  132,  132,  421,  399,  132,
+      132,  435,  399,  436,  423,  431,  424,  132,  132,  437,
+      132,  425,  428,  428,  428,  428,  434,  438,  132,  441,
+      132,  132,  132,  452,  440,  132,  439,  132,  442,  240,
+      451,  443,  448,  132,  451,  446,  132,  444,  132,  132,
+      445,  132,  132,  447,  428,  428,  428,  428,  132,  458,
+      132,  132,  462,  449,  457,  459,  454,  132,  461,  473,
+
+      464,  132,  132,  473,  460,  474,  475,  475,  476,  132,
+      465,  132,  476,  132,  132,  132,  463,  132,  477,  132,
+      473,  491,  473,  467,  473,  478,  473,  466,  132,  132,
+      479,  481,  486,  132,  468,  491,  488,  488,  488,  488,
+      132,  482,  132,  132,  132,  480,  492,  484,  489,  489,
+      489,  489,  483,  490,  132,  493,  495,  489,  489,  489,
+      489,  494,  498,  500,  488,  488,  488,  488,  490,  132,
+      132,  496,  489,  489,  489,  489,  500,  132,  500,  504,
+      504,  504,  504,  132,  510,  511,  487,  502,  510,  239,
+      486,  500,  507,  501,  504,  504,  504,  504,  132,  132,
+
+      508,  509,  509,  509,  509,  510,  511,  132,  132,  510,
+      505,  472,  471,  470,  469,  132,  132,  132,  132,  509,
+      509,  509,  509,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   48,   48,   48,   48,   48,   48,   48,   48,
+       48,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+      104,  104,  104,  104,  104,  104,  104,  104,  104,  110,
+      110,  110,  110,  110,  110,  110,  110,  110,  116,  116,
+      116,  116,  116,  116,  116,  116,  116,  120,  120,  456,
+      120,  120,  120,  120,  120,  120,  130,  130,  131,  131,
+      131,  131,  154,  154,  455,  154,  154,  154,  154,  154,
+
+      154,  158,  158,  453,  158,  158,  158,  158,  158,  158,
+      168,  450,  168,  168,  168,  219,  219,  132,  219,  219,
+      219,  219,  219,  219,  222,  222,  222,  222,  222,  222,
+      222,  222,  222,  225,  132,  225,  226,  226,  226,  226,
+      228,  228,  228,  228,  244,  244,  132,  244,  244,  244,
+      244,  244,  244,  251,  251,  251,  251,  251,  251,  251,
+      251,  251,  254,  254,  254,  254,  254,  254,  254,  254,
+      254,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      263,  132,  263,  263,  263,  285,  285,  285,  285,  285,
+      285,  285,  285,  285,  299,  299,  132,  433,  432,  299,
+
+      299,  301,  301,  301,  301,  359,  359,  430,  359,  359,
+      359,  359,  404,  404,  429,  404,  404,  404,  404,  404,
+      404,  485,  485,  236,  427,  485,  485,  485,  485,  485,
+      499,  499,  132,  499,  499,  499,  499,  499,  499,  132,
+      132,  132,  132,  405,  402,  401,  400,  398,  132,  132,
+      132,  132,  132,  132,  132,  132,  132,  132,  132,  371,
+      370,  368,  367,  365,  364,  132,  227,  286,  132,  169,
+      262,  255,  319,  252,  318,  317,  316,  315,  313,  312,
+      311,  310,  309,  308,  307,  306,  132,  227,  227,  223,
+      218,  218,  300,  286,  264,  169,  262,  260,  259,  255,
+
+      253,  252,  250,  249,  245,  234,  233,  132,  132,  227,
+      223,  220,  218,  216,  216,  208,  202,  157,  147,  146,
+      132,  121,  512,   39,   39,   23,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512
     } ;
 
-static yyconst short int yy_chk[1273] =
+static yyconst short int yy_chk[1286] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -751,126 +755,127 @@ static yyconst short int yy_chk[1273] =
        20,   18,   20,   20,   21,   20,   21,   22,   68,   22,
        20,   80,   22,   66,   21,   52,   76,   22,   29,   29,
        29,   29,   77,    6,    6,   11,   11,   71,   68,   71,
-       31,  503,   31,   31,   31,   31,   40,   38,   52,  501,
+       31,  508,   31,   31,   31,   31,   40,   38,   52,  506,
 
        11,   38,   76,   40,   11,   80,   11,   11,   11,   11,
        57,   40,   11,   64,   57,   11,   73,   64,   11,   11,
        79,   40,   11,   11,   11,   11,   52,   52,   78,   11,
-       11,   15,   31,   81,   98,   15,   15,   99,   32,   15,
-       32,   32,   32,   32,  117,   38,   73,   79,   98,   57,
-       99,  498,   57,  497,   78,   64,  117,  142,   15,   15,
-       15,   15,   15,   81,   83,   15,   81,  142,   15,   15,
-       15,   15,   15,   94,   74,   15,   15,   15,   15,   70,
-       91,   70,   70,   70,   70,   72,   72,   72,   72,   82,
-       83,   84,   95,   92,   74,  101,   97,   93,   74,   94,
-
-       72,   74,   96,  102,   91,  100,  132,   91,  492,   82,
-       82,  491,   84,   92,   93,   96,   95,   97,   84,  132,
-       92,   82,  134,   96,   93,  100,  100,  106,  172,  107,
-      102,  106,  101,  107,  135,  108,  108,  100,  106,  108,
-      112,  113,  114,  114,  112,  113,  114,  135,  108,  148,
-      169,  112,  134,  114,  172,  114,  118,  118,  133,  489,
-      118,  121,  121,  121,  121,  124,  124,  124,  124,  169,
-      125,  107,  125,  125,  125,  125,  126,  144,  126,  126,
-      126,  126,  128,  113,  128,  128,  128,  128,  136,  138,
-      141,  133,  136,  138,  140,  154,  160,  161,  118,  154,
-
-      148,  148,  140,  170,  162,  141,  144,  171,  140,  160,
-      173,  141,  166,  166,  166,  166,  170,  174,  175,  176,
-      171,  177,  178,  182,  161,  162,  180,  166,  179,  181,
-      183,  138,  184,  186,  154,  185,  136,  154,  187,  178,
-      180,  188,  182,  173,  189,  175,  190,  177,  191,  179,
-      174,  176,  192,  184,  186,  179,  181,  193,  194,  195,
-      183,  191,  189,  184,  196,  185,  197,  198,  201,  201,
-      226,  187,  201,  194,  227,  191,  200,  188,  228,  190,
-      200,  195,  253,  193,  487,  197,  240,  200,  192,  202,
-      202,  229,  482,  202,  196,  198,  204,  204,  206,  227,
-
-      204,  226,  206,  207,  207,  228,  254,  207,  255,  206,
-      229,  208,  208,  253,  207,  208,  207,  210,  210,  240,
-      262,  210,  218,  218,  218,  218,  221,  221,  221,  221,
-      263,  254,  257,  257,  264,  265,  257,  266,  267,  255,
-      261,  261,  261,  261,  268,  270,  271,  272,  274,  275,
-      273,  266,  277,  262,  276,  261,  278,  268,  280,  281,
-      263,  282,  285,  267,  270,  264,  265,  279,  480,  283,
-      286,  284,  274,  287,  288,  281,  271,  289,  273,  275,
-      276,  272,  273,  278,  284,  277,  283,  285,  279,  286,
-      280,  282,  290,  291,  287,  288,  292,  293,  294,  294,
-
-      289,  297,  294,  299,  300,  303,  291,  309,  315,  290,
-      322,  303,  320,  323,  293,  326,  294,  318,  318,  324,
-      328,  318,  292,  329,  333,  330,  336,  331,  309,  337,
-      332,  335,  297,  299,  338,  300,  329,  320,  341,  315,
-      334,  322,  330,  324,  331,  323,  335,  326,  337,  340,
-      328,  332,  336,  334,  341,  342,  333,  334,  343,  344,
-      345,  346,  348,  340,  349,  350,  364,  338,  352,  352,
-      343,  368,  352,  372,  354,  354,  367,  348,  354,  355,
-      355,  370,  350,  355,  373,  345,  346,  360,  342,  349,
-      344,  360,  354,  367,  372,  374,  364,  375,  370,  376,
-
-      378,  379,  380,  382,  386,  383,  368,  385,  387,  388,
-      389,  390,  375,  391,  376,  392,  373,  379,  383,  385,
-      401,  388,  394,  406,  378,  374,  394,  392,  386,  382,
-      398,  402,  404,  405,  380,  407,  394,  394,  394,  394,
-      387,  412,  413,  389,  390,  391,  401,  398,  404,  414,
-      405,  415,  402,  416,  417,  406,  420,  418,  412,  419,
-      421,  423,  426,  424,  429,  423,  413,  407,  420,  424,
-      433,  430,  431,  437,  434,  423,  423,  423,  423,  435,
-      439,  414,  418,  415,  419,  438,  417,  430,  440,  431,
-      416,  434,  421,  426,  443,  435,  429,  438,  444,  449,
-
-      450,  450,  450,  449,  453,  451,  456,  433,  439,  451,
-      437,  458,  459,  460,  461,  462,  463,  449,  471,  464,
-      476,  453,  456,  464,  474,  440,  443,  475,  477,  473,
-      460,  478,  471,  468,  479,  444,  488,  468,  472,  458,
-      475,  474,  461,  486,  463,  477,  459,  468,  468,  468,
-      468,  479,  462,  469,  469,  469,  469,  470,  486,  478,
-      488,  470,  470,  470,  470,  483,  490,  483,  483,  483,
-      483,  484,  494,  496,  467,  484,  484,  484,  484,  493,
-      493,  493,  493,  490,  500,  466,  499,  494,  499,  499,
-      499,  499,  502,  502,  502,  502,  504,  504,  505,  505,
-
-      504,  500,  505,  465,  457,  455,  496,  454,  452,  448,
-      504,  504,  504,  504,  508,  508,  508,  508,  508,  508,
-      508,  508,  508,  509,  509,  509,  509,  509,  509,  509,
-      509,  509,  510,  510,  510,  510,  510,  510,  510,  510,
-      510,  511,  511,  511,  511,  511,  511,  511,  511,  511,
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  513,
-      513,  513,  513,  513,  513,  513,  513,  513,  514,  514,
-      447,  514,  514,  514,  514,  514,  514,  515,  515,  516,
-      516,  516,  516,  517,  517,  446,  517,  517,  517,  517,
-      517,  517,  518,  518,  445,  518,  518,  518,  518,  518,
-
-      518,  519,  442,  519,  519,  519,  520,  520,  441,  520,
-      520,  520,  520,  520,  520,  521,  521,  521,  521,  521,
-      521,  521,  521,  521,  522,  436,  522,  523,  523,  523,
-      523,  524,  524,  524,  524,  525,  525,  432,  525,  525,
+       11,   15,   31,   81,  134,   15,   15,   99,   32,   15,
+       32,   32,   32,   32,  100,   38,   73,   79,   91,   57,
+       91,   99,   57,  503,   78,   64,  502,  100,   15,   15,
+       15,   15,   15,   81,   83,   15,   81,  134,   15,   15,
+       15,   15,   15,   95,   74,   15,   15,   15,   15,   70,
+       92,   70,   70,   70,   70,   72,   72,   72,   72,   82,
+       83,   84,   96,   93,   74,  102,   98,   94,   74,   95,
+
+       72,   74,   97,  103,   92,  101,  133,   92,  497,   82,
+       82,  191,   84,   93,   94,   97,   96,   98,   84,  133,
+       93,   82,  118,   97,   94,  101,  101,  107,  135,  108,
+      103,  107,  102,  108,  118,  109,  109,  101,  107,  109,
+      113,  114,  115,  115,  113,  114,  115,  191,  109,  143,
+      149,  113,  179,  115,  496,  115,  119,  119,  135,  143,
+      119,  122,  122,  122,  122,  125,  125,  125,  125,  179,
+      126,  108,  126,  126,  126,  126,  127,  136,  127,  127,
+      127,  127,  129,  114,  129,  129,  129,  129,  137,  139,
+      136,  141,  137,  139,  142,  145,  155,  161,  119,  141,
+
+      155,  149,  149,  162,  163,  141,  171,  172,  170,  142,
+      161,  167,  167,  167,  167,  142,  173,  174,  175,  171,
+      172,  176,  177,  178,  145,  163,  167,  170,  182,  181,
+      162,  139,  180,  183,  184,  155,  137,  185,  155,  186,
+      187,  190,  173,  181,  192,  193,  195,  196,  176,  178,
+      174,  175,  183,  180,  177,  182,  197,  194,  185,  180,
+      199,  187,  192,  198,  184,  201,  269,  200,  185,  186,
+      194,  197,  203,  196,  190,  229,  203,  340,  193,  230,
+      269,  494,  195,  203,  194,  198,  200,  204,  204,  492,
+      199,  204,  340,  201,  205,  205,  207,  207,  205,  209,
+
+      207,  210,  210,  209,  230,  210,  229,  211,  211,  231,
+      209,  211,  210,  232,  210,  213,  213,  243,  256,  213,
+      221,  221,  221,  221,  224,  224,  224,  224,  257,  258,
+      260,  260,  232,  265,  260,  266,  231,  264,  264,  264,
+      264,  267,  268,  270,  271,  273,  274,  275,  279,  256,
+      243,  276,  264,  257,  277,  278,  280,  271,  283,  281,
+      258,  282,  287,  288,  273,  266,  265,  487,  270,  290,
+      292,  284,  267,  268,  279,  289,  274,  291,  277,  276,
+      288,  275,  282,  276,  293,  278,  281,  284,  289,  280,
+      283,  292,  287,  294,  290,  295,  291,  296,  297,  302,
+
+      298,  304,  299,  299,  305,  293,  299,  308,  314,  320,
+      296,  325,  295,  308,  323,  323,  294,  298,  323,  327,
+      299,  328,  329,  331,  297,  334,  333,  335,  336,  314,
+      302,  304,  338,  337,  339,  305,  325,  341,  334,  342,
+      320,  343,  347,  345,  335,  336,  329,  339,  348,  346,
+      327,  339,  349,  328,  337,  331,  333,  345,  342,  350,
+      348,  351,  353,  341,  338,  346,  354,  365,  355,  357,
+      357,  365,  369,  357,  343,  347,  372,  353,  359,  359,
+      373,  375,  359,  349,  350,  355,  351,  377,  360,  360,
+      378,  354,  360,  372,  379,  380,  359,  381,  375,  383,
+
+      384,  385,  369,  387,  388,  392,  390,  391,  377,  393,
+      380,  394,  381,  395,  397,  373,  384,  388,  390,  396,
+      407,  393,  378,  383,  379,  411,  397,  409,  403,  387,
+      406,  391,  410,  385,  412,  418,  419,  392,  399,  420,
+      421,  407,  399,  409,  394,  403,  395,  417,  422,  410,
+      423,  396,  399,  399,  399,  399,  406,  411,  424,  418,
+      425,  426,  434,  429,  417,  431,  412,  438,  419,  429,
+      428,  420,  425,  435,  428,  423,  440,  421,  436,  442,
+      422,  439,  444,  424,  428,  428,  428,  428,  443,  435,
+      445,  448,  440,  426,  434,  436,  431,  449,  439,  454,
+
+      443,  458,  463,  454,  438,  455,  455,  455,  456,  461,
+      444,  464,  456,  466,  465,  467,  442,  454,  458,  468,
+      469,  476,  473,  448,  469,  461,  473,  445,  483,  479,
+      463,  465,  485,  481,  449,  476,  473,  473,  473,  473,
+      478,  466,  480,  477,  482,  464,  479,  468,  474,  474,
+      474,  474,  467,  475,  484,  480,  483,  475,  475,  475,
+      475,  482,  488,  491,  488,  488,  488,  488,  489,  493,
+      495,  484,  489,  489,  489,  489,  499,  501,  491,  498,
+      498,  498,  498,  505,  510,  510,  472,  495,  510,  471,
+      470,  499,  504,  493,  504,  504,  504,  504,  462,  460,
+
+      505,  507,  507,  507,  507,  509,  509,  459,  457,  509,
+      501,  453,  452,  451,  450,  447,  446,  441,  437,  509,
+      509,  509,  509,  513,  513,  513,  513,  513,  513,  513,
+      513,  513,  514,  514,  514,  514,  514,  514,  514,  514,
+      514,  515,  515,  515,  515,  515,  515,  515,  515,  515,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  517,
+      517,  517,  517,  517,  517,  517,  517,  517,  518,  518,
+      518,  518,  518,  518,  518,  518,  518,  519,  519,  433,
+      519,  519,  519,  519,  519,  519,  520,  520,  521,  521,
+      521,  521,  522,  522,  432,  522,  522,  522,  522,  522,
+
+      522,  523,  523,  430,  523,  523,  523,  523,  523,  523,
+      524,  427,  524,  524,  524,  525,  525,  416,  525,  525,
       525,  525,  525,  525,  526,  526,  526,  526,  526,  526,
-      526,  526,  526,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  528,  528,  528,  528,  528,  528,  528,  528,
-      528,  529,  428,  529,  529,  529,  530,  530,  427,  425,
-      422,  530,  530,  531,  531,  531,  531,  532,  532,  411,
-      532,  532,  532,  532,  533,  533,  410,  533,  533,  533,
-
-      533,  533,  533,  534,  534,  409,  408,  534,  534,  534,
-      534,  534,  535,  535,  403,  535,  535,  535,  535,  535,
-      535,  400,  399,  397,  396,  395,  393,  384,  381,  377,
-      371,  369,  366,  363,  362,  361,  359,  358,  357,  356,
-      351,  347,  339,  327,  325,  321,  317,  316,  314,  310,
-      308,  305,  302,  301,  298,  296,  269,  260,  258,  251,
-      250,  248,  245,  244,  243,  241,  239,  238,  236,  235,
-      233,  232,  231,  230,  225,  224,  223,  219,  217,  216,
-      211,  168,  167,  165,  164,  163,  159,  155,  152,  150,
-      149,  147,  139,  137,  131,  130,  129,  123,  120,  119,
-
-      116,  115,  111,  105,   58,   47,   45,   34,   28,   23,
-       16,   12,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
-      507,  507
+      526,  526,  526,  527,  415,  527,  528,  528,  528,  528,
+      529,  529,  529,  529,  530,  530,  414,  530,  530,  530,
+      530,  530,  530,  531,  531,  531,  531,  531,  531,  531,
+      531,  531,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  533,  533,  533,  533,  533,  533,  533,  533,  533,
+      534,  413,  534,  534,  534,  535,  535,  535,  535,  535,
+      535,  535,  535,  535,  536,  536,  408,  405,  404,  536,
+
+      536,  537,  537,  537,  537,  538,  538,  402,  538,  538,
+      538,  538,  539,  539,  401,  539,  539,  539,  539,  539,
+      539,  540,  540,  400,  398,  540,  540,  540,  540,  540,
+      541,  541,  389,  541,  541,  541,  541,  541,  541,  386,
+      382,  376,  374,  371,  368,  367,  366,  364,  363,  362,
+      361,  356,  352,  344,  332,  330,  326,  322,  321,  319,
+      315,  313,  310,  307,  306,  303,  301,  285,  272,  263,
+      261,  254,  253,  251,  248,  247,  246,  244,  242,  241,
+      239,  238,  236,  235,  234,  233,  228,  227,  226,  222,
+      220,  219,  214,  189,  169,  168,  166,  165,  164,  160,
+
+      156,  153,  151,  150,  148,  140,  138,  132,  131,  130,
+      124,  121,  120,  117,  116,  112,  106,   58,   47,   45,
+       34,   28,   23,   16,   12,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512
     } ;
 
 static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
@@ -1002,7 +1007,7 @@ int yylex(void);
 
 #define GTK_DOC_LINE 10
 
-#line 1006 "lex.yy.c"
+#line 1011 "lex.yy.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1167,7 +1172,7 @@ yy_current_state = 0;
 
 
 
-#line 1171 "lex.yy.c"
+#line 1176 "lex.yy.c"
 
        if ( yy_init )
                {
@@ -1216,14 +1221,14 @@ yy_match:
                        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 >= 508 )
+                               if ( yy_current_state >= 513 )
                                        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] != 1213 );
+               while ( yy_base[yy_current_state] != 1226 );
 
 yy_find_action:
                yy_current_state = *--yy_state_ptr;
@@ -1505,56 +1510,69 @@ YY_RULE_SETUP
 { ; /*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 263 "lexer.l"
-{BEGIN(COMMENT); before_comment = INITIAL; }
+{ ; /*comment, ignore*/ }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 264 "lexer.l"
+{BEGIN(COMMENT); before_comment = INITIAL; }
+       YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 265 "lexer.l"
 {
        add_to_cbuf(yytext);
        BEGIN(COMMENT);
        before_comment = C_CODE;
 }
        YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 269 "lexer.l"
-{BEGIN(COMMENT); before_comment = CLASS_CODE; }
-       YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 270 "lexer.l"
-{BEGIN(COMMENT); before_comment = CLASS_CODE_I; }
+{BEGIN(COMMENT); before_comment = CLASS_CODE; }
        YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 271 "lexer.l"
+{BEGIN(COMMENT); before_comment = CLASS_CODE_I; }
+       YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 272 "lexer.l"
+{BEGIN(COMMENT); before_comment = PROPERTY_CODE_I; }
+       YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 273 "lexer.l"
 {
        if(before_comment == C_CODE) add_to_cbuf(yytext);
        BEGIN(before_comment);
                }
        YY_BREAK
-case 27:
+case 29:
 YY_RULE_SETUP
-#line 275 "lexer.l"
+#line 277 "lexer.l"
 {
        /* comment, ignore */
        if(before_comment == C_CODE) add_to_cbuf(yytext);
                }
        YY_BREAK
-case 28:
+case 30:
 YY_RULE_SETUP
-#line 279 "lexer.l"
+#line 281 "lexer.l"
 {
        /* comment, ignore */
        if(before_comment == C_CODE) add_to_cbuf(yytext);
                }
        YY_BREAK
-case 29:
+case 31:
 YY_RULE_SETUP
-#line 284 "lexer.l"
+#line 286 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1564,9 +1582,9 @@ YY_RULE_SETUP
                        ccode_line = line_no;
                }
        YY_BREAK
-case 30:
+case 32:
 YY_RULE_SETUP
-#line 292 "lexer.l"
+#line 294 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1576,9 +1594,9 @@ YY_RULE_SETUP
                        ccode_line = line_no;
                }
        YY_BREAK
-case 31:
+case 33:
 YY_RULE_SETUP
-#line 301 "lexer.l"
+#line 303 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1588,9 +1606,9 @@ YY_RULE_SETUP
                        ccode_line = line_no;
                }
        YY_BREAK
-case 32:
+case 34:
 YY_RULE_SETUP
-#line 309 "lexer.l"
+#line 311 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1600,9 +1618,9 @@ YY_RULE_SETUP
                        ccode_line = line_no;
                }
        YY_BREAK
-case 33:
+case 35:
 YY_RULE_SETUP
-#line 317 "lexer.l"
+#line 319 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1612,9 +1630,9 @@ YY_RULE_SETUP
                        ccode_line = line_no;
                }
        YY_BREAK
-case 34:
+case 36:
 YY_RULE_SETUP
-#line 325 "lexer.l"
+#line 327 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1626,9 +1644,9 @@ YY_RULE_SETUP
                                look_for_includes=1;
                }
        YY_BREAK
-case 35:
+case 37:
 YY_RULE_SETUP
-#line 335 "lexer.l"
+#line 337 "lexer.l"
 {
                        BEGIN(INITIAL);
                        yylval.cbuf = cbuf;
@@ -1638,16 +1656,6 @@ YY_RULE_SETUP
                        return code_type;
                }
        YY_BREAK
-case 36:
-YY_RULE_SETUP
-#line 344 "lexer.l"
-{ add_to_cbuf(yytext); }
-       YY_BREAK
-case 37:
-YY_RULE_SETUP
-#line 345 "lexer.l"
-{ add_to_cbuf(yytext); }
-       YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 346 "lexer.l"
@@ -1670,35 +1678,45 @@ YY_RULE_SETUP
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 351 "lexer.l"
+#line 350 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 354 "lexer.l"
+#line 351 "lexer.l"
+{ add_to_cbuf(yytext); }
+       YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 353 "lexer.l"
+{ add_to_cbuf(yytext); }
+       YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 356 "lexer.l"
 {
                        BEGIN(CODE_STRING);
                        before_string = C_CODE;
                        add_to_cbuf(yytext);
                }
        YY_BREAK
-case 44:
+case 46:
 YY_RULE_SETUP
-#line 359 "lexer.l"
+#line 361 "lexer.l"
 {
                        BEGIN(CODE_STRING);
                        before_string = PROPERTY_CODE_I;
                        add_to_cbuf(yytext);
                }
        YY_BREAK
-case 45:
+case 47:
 YY_RULE_SETUP
-#line 364 "lexer.l"
+#line 366 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
-case 46:
+case 48:
 YY_RULE_SETUP
-#line 365 "lexer.l"
+#line 367 "lexer.l"
 {
                        BEGIN(before_string);
                        add_to_cbuf(yytext);
@@ -1710,27 +1728,27 @@ YY_RULE_SETUP
                        }
                }
        YY_BREAK
-case 47:
+case 49:
 YY_RULE_SETUP
-#line 375 "lexer.l"
+#line 377 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
-case 48:
+case 50:
 YY_RULE_SETUP
-#line 376 "lexer.l"
+#line 378 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
-case 49:
+case 51:
 YY_RULE_SETUP
-#line 378 "lexer.l"
+#line 380 "lexer.l"
 {
                        parenth_depth++;
                        add_to_cbuf(yytext);
                }
        YY_BREAK
-case 50:
+case 52:
 YY_RULE_SETUP
-#line 382 "lexer.l"
+#line 384 "lexer.l"
 {
                        parenth_depth--;
                        if(parenth_depth<0) {
@@ -1744,19 +1762,19 @@ YY_RULE_SETUP
                        add_to_cbuf(yytext);
                }
        YY_BREAK
-case 51:
+case 53:
 YY_RULE_SETUP
-#line 395 "lexer.l"
+#line 397 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
-case 52:
+case 54:
 YY_RULE_SETUP
-#line 396 "lexer.l"
+#line 398 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
-case 53:
+case 55:
 YY_RULE_SETUP
-#line 398 "lexer.l"
+#line 400 "lexer.l"
 {
                        static int found_classes = 0;
                        look_for_includes = 2;
@@ -1770,27 +1788,27 @@ YY_RULE_SETUP
                        return CLASS;
                }
        YY_BREAK
-case 54:
+case 56:
 YY_RULE_SETUP
-#line 411 "lexer.l"
+#line 413 "lexer.l"
 { return ERROR; }
        YY_BREAK
-case 55:
+case 57:
 YY_RULE_SETUP
-#line 412 "lexer.l"
+#line 414 "lexer.l"
 { return ENUM; }
        YY_BREAK
-case 56:
+case 58:
 YY_RULE_SETUP
-#line 413 "lexer.l"
+#line 415 "lexer.l"
 { return FLAGS; }
        YY_BREAK
-case 57:
+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 415 "lexer.l"
+#line 417 "lexer.l"
 {
                        int maj = 0, min = 0, pl = 0;
                        int rmaj = 0, rmin = 0, rpl = 0;
@@ -1832,9 +1850,9 @@ YY_RULE_SETUP
 
                }
        YY_BREAK
-case 58:
+case 60:
 YY_RULE_SETUP
-#line 456 "lexer.l"
+#line 458 "lexer.l"
 {
                        if(for_cpp) {
                                error_printf(GOB_WARN, line_no,
@@ -1845,193 +1863,193 @@ YY_RULE_SETUP
                        REJECT;
                }
        YY_BREAK
-case 59:
-YY_RULE_SETUP
-#line 466 "lexer.l"
-{return FROM;}
-       YY_BREAK
-case 60:
-YY_RULE_SETUP
-#line 468 "lexer.l"
-{return VOID;}
-       YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 469 "lexer.l"
-{return STRUCT;}
+#line 468 "lexer.l"
+{return FROM;}
        YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 470 "lexer.l"
-{return UNION;}
+{return VOID;}
        YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 471 "lexer.l"
-{return ENUM;}
+{return STRUCT;}
        YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 472 "lexer.l"
-{return SIGNED;}
+{return UNION;}
        YY_BREAK
 case 65:
 YY_RULE_SETUP
 #line 473 "lexer.l"
-{return UNSIGNED;}
+{return ENUM;}
        YY_BREAK
 case 66:
 YY_RULE_SETUP
 #line 474 "lexer.l"
-{return LONG;}
+{return SIGNED;}
        YY_BREAK
 case 67:
 YY_RULE_SETUP
 #line 475 "lexer.l"
-{return SHORT;}
+{return UNSIGNED;}
        YY_BREAK
 case 68:
 YY_RULE_SETUP
 #line 476 "lexer.l"
-{return INT;}
+{return LONG;}
        YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 477 "lexer.l"
-{return FLOAT;}
+{return SHORT;}
        YY_BREAK
 case 70:
 YY_RULE_SETUP
 #line 478 "lexer.l"
-{return DOUBLE;}
+{return INT;}
        YY_BREAK
 case 71:
 YY_RULE_SETUP
 #line 479 "lexer.l"
-{return CHAR;}
+{return FLOAT;}
        YY_BREAK
 case 72:
 YY_RULE_SETUP
 #line 480 "lexer.l"
-{return CONST;}
+{return DOUBLE;}
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 482 "lexer.l"
-{return THREEDOTS;}
+#line 481 "lexer.l"
+{return CHAR;}
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 484 "lexer.l"
-{yylval.line = line_no; return PUBLIC;}
+#line 482 "lexer.l"
+{return CONST;}
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 485 "lexer.l"
-{yylval.line = line_no; return PRIVATE;}
+#line 484 "lexer.l"
+{return THREEDOTS;}
        YY_BREAK
 case 76:
 YY_RULE_SETUP
 #line 486 "lexer.l"
-{yylval.line = line_no; return PROTECTED;}
+{yylval.line = line_no; return PUBLIC;}
        YY_BREAK
 case 77:
 YY_RULE_SETUP
 #line 487 "lexer.l"
-{yylval.line = line_no; return CLASSWIDE;}
+{yylval.line = line_no; return PRIVATE;}
        YY_BREAK
 case 78:
 YY_RULE_SETUP
 #line 488 "lexer.l"
-{yylval.line = line_no; return ARGUMENT;}
+{yylval.line = line_no; return PROTECTED;}
        YY_BREAK
 case 79:
 YY_RULE_SETUP
 #line 489 "lexer.l"
-{yylval.line = line_no; return VIRTUAL;}
+{yylval.line = line_no; return CLASSWIDE;}
        YY_BREAK
 case 80:
 YY_RULE_SETUP
 #line 490 "lexer.l"
-{yylval.line = line_no; return SIGNAL;}
+{yylval.line = line_no; return ARGUMENT;}
        YY_BREAK
 case 81:
 YY_RULE_SETUP
 #line 491 "lexer.l"
-{yylval.line = line_no; return OVERRIDE;}
+{yylval.line = line_no; return VIRTUAL;}
        YY_BREAK
 case 82:
 YY_RULE_SETUP
 #line 492 "lexer.l"
-{
-                               yylval.line = line_no;
-                               BEGIN(PROPERTY_CODE);
-                               return PROPERTY;
-                       }
+{yylval.line = line_no; return SIGNAL;}
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 497 "lexer.l"
-{ yylval.line = line_no; return NICK; }
+#line 493 "lexer.l"
+{yylval.line = line_no; return OVERRIDE;}
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 498 "lexer.l"
-{ yylval.line = line_no; return BLURB; }
+#line 494 "lexer.l"
+{
+                               yylval.line = line_no;
+                               BEGIN(PROPERTY_CODE);
+                               return PROPERTY;
+                       }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
 #line 499 "lexer.l"
-{ yylval.line = line_no; return MAXIMUM; }
+{ yylval.line = line_no; return NICK; }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
 #line 500 "lexer.l"
-{ yylval.line = line_no; return MINIMUM; }
+{ yylval.line = line_no; return BLURB; }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
 #line 501 "lexer.l"
-{ yylval.line = line_no; return DEFAULT_VALUE; }
+{ yylval.line = line_no; return MAXIMUM; }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
 #line 502 "lexer.l"
-{ yylval.line = line_no; return FLAGS; }
+{ yylval.line = line_no; return MINIMUM; }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
 #line 503 "lexer.l"
-{ yylval.line = line_no; return TYPE; }
+{ yylval.line = line_no; return DEFAULT_VALUE; }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
 #line 504 "lexer.l"
-{ yylval.line = line_no; return FLAGS_TYPE; }
+{ yylval.line = line_no; return FLAGS; }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
 #line 505 "lexer.l"
-{ yylval.line = line_no; return ENUM_TYPE; }
+{ yylval.line = line_no; return TYPE; }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
 #line 506 "lexer.l"
-{ yylval.line = line_no; return PARAM_TYPE; }
+{ yylval.line = line_no; return FLAGS_TYPE; }
        YY_BREAK
 case 93:
 YY_RULE_SETUP
 #line 507 "lexer.l"
-{ yylval.line = line_no; return BOXED_TYPE; }
+{ yylval.line = line_no; return ENUM_TYPE; }
        YY_BREAK
 case 94:
 YY_RULE_SETUP
 #line 508 "lexer.l"
-{ yylval.line = line_no; return OBJECT_TYPE; }
+{ yylval.line = line_no; return PARAM_TYPE; }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
 #line 509 "lexer.l"
+{ yylval.line = line_no; return BOXED_TYPE; }
+       YY_BREAK
+case 96:
+YY_RULE_SETUP
+#line 510 "lexer.l"
+{ yylval.line = line_no; return OBJECT_TYPE; }
+       YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 511 "lexer.l"
 {
                yylval.line = line_no;
                property_paren_depth = 1;
@@ -2039,18 +2057,18 @@ YY_RULE_SETUP
                return '(';
                        }
        YY_BREAK
-case 96:
+case 98:
 YY_RULE_SETUP
-#line 515 "lexer.l"
+#line 517 "lexer.l"
 {
                yylval.line = line_no;
                property_paren_depth++;
                return '(';
                        }
        YY_BREAK
-case 97:
+case 99:
 YY_RULE_SETUP
-#line 520 "lexer.l"
+#line 522 "lexer.l"
 {
                yylval.line = line_no;
                property_paren_depth--;
@@ -2060,67 +2078,67 @@ YY_RULE_SETUP
                return ')';
                        }
        YY_BREAK
-case 98:
+case 100:
 YY_RULE_SETUP
-#line 529 "lexer.l"
+#line 531 "lexer.l"
 {
                        yylval.id = g_strdup(yytext);
                        return NUMBER;
                }
        YY_BREAK
-case 99:
+case 101:
 YY_RULE_SETUP
-#line 533 "lexer.l"
+#line 535 "lexer.l"
 {
                        /* this one is for a classname with a namespace */
                        yylval.id = g_strdup(yytext);
                        return TYPETOKEN;
                }
        YY_BREAK
-case 100:
+case 102:
 YY_RULE_SETUP
-#line 538 "lexer.l"
+#line 540 "lexer.l"
 {
                        /* this is for a classname with an empty namespace */
                        yylval.id = g_strdup(yytext);
                        return TYPETOKEN;
                }
        YY_BREAK
-case 101:
+case 103:
 YY_RULE_SETUP
-#line 543 "lexer.l"
+#line 545 "lexer.l"
 {
                        yylval.id = g_strdup(yytext);
                        return TOKEN;
                }
        YY_BREAK
-case 102:
+case 104:
 YY_RULE_SETUP
-#line 547 "lexer.l"
+#line 549 "lexer.l"
 {
                        yylval.id = g_strdup(yytext);
                        return SINGLE_CHAR;
                }
        YY_BREAK
-case 103:
+case 105:
 YY_RULE_SETUP
-#line 552 "lexer.l"
+#line 554 "lexer.l"
 {
                        yylval.id = g_strdup(yytext);
                        return ARRAY_DIM;
                }
        YY_BREAK
-case 104:
+case 106:
 YY_RULE_SETUP
-#line 557 "lexer.l"
+#line 559 "lexer.l"
 {
                        BEGIN(CLASS_CODE_I);
                        return '{';
                }
        YY_BREAK
-case 105:
+case 107:
 YY_RULE_SETUP
-#line 561 "lexer.l"
+#line 563 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth=1;
@@ -2131,38 +2149,38 @@ YY_RULE_SETUP
                        return '{';
                }
        YY_BREAK
-case 106:
+case 108:
 YY_RULE_SETUP
-#line 570 "lexer.l"
+#line 572 "lexer.l"
 {
                                BEGIN(INITIAL);
                                return '}';
                        }
        YY_BREAK
-case 107:
+case 109:
 YY_RULE_SETUP
-#line 575 "lexer.l"
+#line 577 "lexer.l"
 ;  /*ignore*/
        YY_BREAK
-case 108:
+case 110:
 YY_RULE_SETUP
-#line 577 "lexer.l"
+#line 579 "lexer.l"
 {
                        yylval.line = line_no;
                        return yytext[0];
                }
        YY_BREAK
-case 109:
+case 111:
 YY_RULE_SETUP
-#line 582 "lexer.l"
+#line 584 "lexer.l"
 ;  /*ignore*/
        YY_BREAK
-case 110:
+case 112:
 YY_RULE_SETUP
-#line 584 "lexer.l"
+#line 586 "lexer.l"
 ECHO;
        YY_BREAK
-#line 2166 "lex.yy.c"
+#line 2184 "lex.yy.c"
                        case YY_STATE_EOF(INITIAL):
                        case YY_STATE_EOF(COMMENT):
                        case YY_STATE_EOF(C_CODE):
@@ -2462,7 +2480,7 @@ static yy_state_type yy_get_previous_state()
                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 >= 508 )
+                       if ( yy_current_state >= 513 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2492,11 +2510,11 @@ yy_state_type yy_current_state;
        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 >= 508 )
+               if ( yy_current_state >= 513 )
                        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 == 507);
+       yy_is_jam = (yy_current_state == 512);
        if ( ! yy_is_jam )
                *yy_state_ptr++ = yy_current_state;
 
@@ -3049,7 +3067,7 @@ int main()
        return 0;
        }
 #endif
-#line 584 "lexer.l"
+#line 586 "lexer.l"
 
 
 /* Ugly warning avoiding */
index 08326211214b03f1e41a212a8f2b28bc13625b26..aa9b6d28d3bde86b015f1f593699ba70cc68716e 100644 (file)
@@ -260,6 +260,7 @@ REJECT;
 <C_CODE>\/\/.*$                { add_to_cbuf(yytext); /*comment, ignore*/ }
 <CLASS_CODE>\/\/.*$    { ; /*comment, ignore*/ }
 <CLASS_CODE_I>\/\/.*$  { ; /*comment, ignore*/ }
+<PROPERTY_CODE_I>\/\/.*$       { ; /*comment, ignore*/ }
 \/\*           {BEGIN(COMMENT); before_comment = INITIAL; }
 <C_CODE>\/\*   {
        add_to_cbuf(yytext);
@@ -268,6 +269,7 @@ REJECT;
 }
 <CLASS_CODE>\/\*       {BEGIN(COMMENT); before_comment = CLASS_CODE; }
 <CLASS_CODE_I>\/\*     {BEGIN(COMMENT); before_comment = CLASS_CODE_I; }
+<PROPERTY_CODE_I>\/\*  {BEGIN(COMMENT); before_comment = PROPERTY_CODE_I; }
 <COMMENT>\*\/  {
        if(before_comment == C_CODE) add_to_cbuf(yytext);
        BEGIN(before_comment);
index 3909cb02ffd43ddf8a4f07eabb4e1b78f7ab28bb..fce8cb00774037ef6ae82508204a0648832462d0 100644 (file)
@@ -142,42 +142,6 @@ make_bases (void)
        ptypebase = remove_sep (((Class *)class)->ptype);
 }
 
-static char *
-get_type (const Type *t, gboolean postfix_to_stars)
-{
-       char *s;
-       int i;
-       int extra;
-       GString *gs;
-
-       s = remove_sep(t->name);
-       gs = g_string_new(s);
-       g_free(s);
-
-       extra = 0;
-       if (postfix_to_stars) {
-               const char *p;
-               /*XXX: this is ugly perhaps we can do this whole postfix thing
-                 in a nicer way, we just count the number of '[' s and from
-                 that we deduce the number of dimensions, so that we can print
-                 that many stars */
-               for (p = t->postfix; p && *p; p++)
-                       if(*p == '[') extra++;
-       }
-       g_string_append_c(gs, ' ');
-
-       if (t->pointer != NULL) {
-               g_string_append (gs, t->pointer);
-               for (i=0; i < extra; i++)
-                       g_string_append_c (gs, '*');
-               g_string_append_c (gs, ' ');
-       }
-       
-       s = gs->str;
-       g_string_free (gs, FALSE);
-       return s;
-}
-
 static char *
 get_gtk_doc (const char *id)
 {
@@ -1591,6 +1555,21 @@ make_argument (Argument *a)
 
 #define value_for_print(str, alt) (str != NULL ? str : alt)
 
+static char *
+make_me_type (const char *type, const char *alt)
+{
+       if (type == NULL)
+               return g_strdup (alt);
+       /* HACK!  just in case someone made this
+        * work with 2.0.0 by using the TYPE
+        * macro directly */
+       if ((strstr (type, "_TYPE_") != NULL ||
+            strstr (type, "TYPE_") == type) &&
+           strchr (type, ':') == NULL)
+               return g_strdup (type);
+       return make_pre_macro (type, "TYPE");
+}
+
 static void
 make_property (Property *p)
 {
@@ -1645,7 +1624,7 @@ make_property (Property *p)
 
        g_string_append (flags, ")");
 
-       if (strcmp (p->gtktype, "CHAR") == 0)
+       if (strcmp (p->gtktype, "CHAR") == 0) {
                out_printf (out, "\tparam_spec = g_param_spec_char\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1661,7 +1640,7 @@ make_property (Property *p)
                            value_for_print (p->maximum, "127"),
                            value_for_print (p->default_value, "0"),
                            flags->str);
-       else if (strcmp (p->gtktype, "UCHAR") == 0)
+       } else if (strcmp (p->gtktype, "UCHAR") == 0) {
                out_printf (out, "\tparam_spec = g_param_spec_uchar\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1677,7 +1656,7 @@ make_property (Property *p)
                            value_for_print (p->maximum, "0xFF"),
                            value_for_print (p->default_value, "0"),
                            flags->str);
-       else if (strcmp (p->gtktype, "BOOLEAN") == 0)
+       } else if (strcmp (p->gtktype, "BOOLEAN") == 0) {
                out_printf (out, "\tparam_spec = g_param_spec_boolean\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1689,7 +1668,7 @@ make_property (Property *p)
                            value_for_print (p->blurb, "NULL"),
                            value_for_print (p->default_value, "FALSE"),
                            flags->str);
-       else if (strcmp (p->gtktype, "INT") == 0)
+       } else if (strcmp (p->gtktype, "INT") == 0) {
                out_printf (out, "\tparam_spec = g_param_spec_int\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1705,7 +1684,7 @@ make_property (Property *p)
                            value_for_print (p->maximum, "G_MAXINT"),
                            value_for_print (p->default_value, "0"),
                            flags->str);
-       else if (strcmp (p->gtktype, "UINT") == 0)
+       } else if (strcmp (p->gtktype, "UINT") == 0) {
                out_printf (out, "\tparam_spec = g_param_spec_uint\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1721,7 +1700,7 @@ make_property (Property *p)
                            value_for_print (p->maximum, "G_MAXUINT"),
                            value_for_print (p->default_value, "0"),
                            flags->str);
-       else if (strcmp (p->gtktype, "LONG") == 0)
+       } else if (strcmp (p->gtktype, "LONG") == 0) {
                out_printf (out, "\tparam_spec = g_param_spec_long\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1737,7 +1716,7 @@ make_property (Property *p)
                            value_for_print (p->maximum, "G_MAXLONG"),
                            value_for_print (p->default_value, "0"),
                            flags->str);
-       else if (strcmp (p->gtktype, "ULONG") == 0)
+       } else if (strcmp (p->gtktype, "ULONG") == 0) {
                out_printf (out, "\tparam_spec = g_param_spec_ulong\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1753,7 +1732,7 @@ make_property (Property *p)
                            value_for_print (p->maximum, "G_MAXULONG"),
                            value_for_print (p->default_value, "0"),
                            flags->str);
-       else if (strcmp (p->gtktype, "UNICHAR") == 0)
+       } else if (strcmp (p->gtktype, "UNICHAR") == 0) {
                out_printf (out, "\tparam_spec = g_param_spec_unichar\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1765,7 +1744,9 @@ make_property (Property *p)
                            value_for_print (p->blurb, "NULL"),
                            value_for_print (p->default_value, "0"),
                            flags->str);
-       else if (strcmp (p->gtktype, "ENUM") == 0)
+       } else if (strcmp (p->gtktype, "ENUM") == 0) {
+               char *type = make_me_type (p->extra_gtktype,
+                                          "G_TYPE_ENUM");
                out_printf (out, "\tparam_spec = g_param_spec_enum\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1776,10 +1757,13 @@ make_property (Property *p)
                            p->name,
                            value_for_print (p->nick, "NULL"),
                            value_for_print (p->blurb, "NULL"),
-                           value_for_print (p->extra_gtktype, "G_TYPE_ENUM"),
+                           type,
                            value_for_print (p->default_value, "0"),
                            flags->str);
-       else if (strcmp (p->gtktype, "FLAGS") == 0)
+               g_free (type);
+       } else if (strcmp (p->gtktype, "FLAGS") == 0) {
+               char *type = make_me_type (p->extra_gtktype,
+                                          "G_TYPE_FLAGS");
                out_printf (out, "\tparam_spec = g_param_spec_flags\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1790,10 +1774,11 @@ make_property (Property *p)
                            p->name,
                            value_for_print (p->nick, "NULL"),
                            value_for_print (p->blurb, "NULL"),
-                           value_for_print (p->extra_gtktype, "G_TYPE_FLAGS"),
+                           type,
                            value_for_print (p->default_value, "0"),
                            flags->str);
-       else if (strcmp (p->gtktype, "FLOAT") == 0)
+               g_free (type);
+       } else if (strcmp (p->gtktype, "FLOAT") == 0) {
                out_printf (out, "\tparam_spec = g_param_spec_float\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1809,7 +1794,7 @@ make_property (Property *p)
                            value_for_print (p->maximum, "G_MAXFLOAT"),
                            value_for_print (p->default_value, "0.0"),
                            flags->str);
-       else if (strcmp (p->gtktype, "DOUBLE") == 0)
+       } else if (strcmp (p->gtktype, "DOUBLE") == 0) {
                out_printf (out, "\tparam_spec = g_param_spec_double\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1825,7 +1810,7 @@ make_property (Property *p)
                            value_for_print (p->maximum, "G_MAXDOUBLE"),
                            value_for_print (p->default_value, "0.0"),
                            flags->str);
-       else if (strcmp (p->gtktype, "STRING") == 0)
+       } else if (strcmp (p->gtktype, "STRING") == 0) {
                out_printf (out, "\tparam_spec = g_param_spec_string\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1837,7 +1822,9 @@ make_property (Property *p)
                            value_for_print (p->blurb, "NULL"),
                            value_for_print (p->default_value, "NULL"),
                            flags->str);
-       else if (strcmp (p->gtktype, "PARAM") == 0)
+       } else if (strcmp (p->gtktype, "PARAM") == 0) {
+               char *type = make_me_type (p->extra_gtktype,
+                                          "G_TYPE_PARAM");
                out_printf (out, "\tparam_spec = g_param_spec_param\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1847,9 +1834,12 @@ make_property (Property *p)
                            p->name,
                            value_for_print (p->nick, "NULL"),
                            value_for_print (p->blurb, "NULL"),
-                           value_for_print (p->extra_gtktype, "G_TYPE_PARAM"),
+                           type,
                            flags->str);
-       else if (strcmp (p->gtktype, "BOXED") == 0)
+               g_free (type);
+       } else if (strcmp (p->gtktype, "BOXED") == 0) {
+               char *type = make_me_type (p->extra_gtktype,
+                                          "G_TYPE_BOXED");
                out_printf (out, "\tparam_spec = g_param_spec_boxed\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1859,9 +1849,10 @@ make_property (Property *p)
                            p->name,
                            value_for_print (p->nick, "NULL"),
                            value_for_print (p->blurb, "NULL"),
-                           value_for_print (p->extra_gtktype, "G_TYPE_BOXED"),
+                           type,
                            flags->str);
-       else if (strcmp (p->gtktype, "POINTER") == 0)
+               g_free (type);
+       } else if (strcmp (p->gtktype, "POINTER") == 0) {
                out_printf (out, "\tparam_spec = g_param_spec_pointer\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1872,7 +1863,7 @@ make_property (Property *p)
                            value_for_print (p->blurb, "NULL"),
                            flags->str);
        /* FIXME: VALUE_ARRAY */
-       else if (strcmp (p->gtktype, "CLOSURE") == 0)
+       } else if (strcmp (p->gtktype, "CLOSURE") == 0) {
                out_printf (out, "\tparam_spec = g_param_spec_pointer\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1882,7 +1873,9 @@ make_property (Property *p)
                            value_for_print (p->nick, "NULL"),
                            value_for_print (p->blurb, "NULL"),
                            flags->str);
-       else if (strcmp (p->gtktype, "OBJECT") == 0)
+       } else if (strcmp (p->gtktype, "OBJECT") == 0) {
+               char *type = make_me_type (p->extra_gtktype,
+                                          "G_TYPE_BOXED");
                out_printf (out, "\tparam_spec = g_param_spec_object\n"
                            "\t\t(\"%s\" /* name */,\n"
                            "\t\t %s /* nick */,\n"
@@ -1892,12 +1885,14 @@ make_property (Property *p)
                            p->name,
                            value_for_print (p->nick, "NULL"),
                            value_for_print (p->blurb, "NULL"),
-                           value_for_print (p->extra_gtktype, "G_TYPE_OBJECT"),
+                           type,
                            flags->str);
-       else
+               g_free (type);
+       } else {
                error_printf (GOB_ERROR, p->line_no,
                              "%s type is not supported by properties",
                              p->gtktype);
+       }
 
        s = g_strdup (p->name);
        g_strup (s);
index a7c88bf654f34c0b8fc5f813ec1ca0355c1ce0f0..948309fb36641ec9fda1d9e7b40aec40ae397aa0 100644 (file)
@@ -475,6 +475,28 @@ export_accessors (const char *var_name,
        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
 property_link_and_export (Node *node)
 {
@@ -512,23 +534,25 @@ property_link_and_export (Node *node)
                        get = g_strdup_printf("g_value_set_string (VAL, %s->%s);",
                                              root, prop->name);
                } else if (strcmp (prop->gtktype, "OBJECT") == 0) {
-                       set = g_strdup_printf("{ GtkObject *___old = (GtkObject *)%s->%s; "
-                                             "GtkObject *___new = (GtkObject *)gtk_value_get_object (VAL); "
-                                             "if (___new != NULL) { "
-                                               "gtk_object_ref (GTK_OBJECT (___new)); "
-                                               "%s->%s = GTK_OBJECT (___new); "
-                                             "} else { "
-                                               "%s->%s = NULL; "
-                                             "} "
+                       char *cast;
+                       if (prop->extra_gtktype != NULL) {
+                               cast = remove_sep (prop->extra_gtktype);
+                       } else {
+                               cast = "void";
+                       }
+                       set = g_strdup_printf("{ GObject *___old = (GObject *)%s->%s; "
+                                             "%s->%s = (%s *)g_value_dup_object (VAL); "
                                              "if (___old != NULL) { "
-                                               "gtk_object_unref (GTK_OBJECT (___old)); "
+                                               "g_object_unref (G_OBJECT (___old)); "
                                              "} "
                                              "}",
                                              root, prop->name,
                                              root, prop->name,
-                                             root, prop->name);
-                       get = g_strdup_printf("g_value_set_object (VAL, %s->%s);",
-                                             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) {
                        if (prop->extra_gtktype == NULL) {
                                error_print (GOB_ERROR, prop->line_no,
@@ -536,7 +560,7 @@ property_link_and_export (Node *node)
                                               "boxed_type not set"));
                        }
                        set = g_strdup_printf("{ gpointer ___old = (gpointer)%s->%s; "
-                                             "gpointer ___new = (gpointer)gtk_value_get_boxed (VAL); "
+                                             "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); "
@@ -553,20 +577,36 @@ property_link_and_export (Node *node)
                } 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);
 
-                       set = g_strdup_printf("%s->%s = %s (VAL);",
+                       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);
+                       }
+
+                       set = g_strdup_printf("%s->%s = %s%s (VAL);",
                                              root, prop->name,
+                                             getcast,
                                              get_func);
-                       get = g_strdup_printf("%s (VAL, %s->%s);",
+                       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,
@@ -609,7 +649,7 @@ ensure_property (void)
 }
 
 
-#line 576 "parse.y"
+#line 616 "parse.y"
 typedef union {
        char *id;
        GString *cbuf;
@@ -631,7 +671,7 @@ typedef union {
 
 
 
-#define        YYFINAL         393
+#define        YYFINAL         398
 #define        YYFLAG          -32768
 #define        YYNTBASE        66
 
@@ -680,18 +720,18 @@ static const short yyprhs[] = {     0,
    115,   118,   122,   125,   128,   130,   132,   133,   139,   146,
    159,   169,   176,   180,   181,   193,   202,   208,   212,   213,
    217,   219,   221,   226,   228,   230,   234,   238,   242,   246,
-   250,   254,   258,   262,   266,   270,   274,   278,   280,   286,
-   288,   292,   293,   297,   299,   302,   304,   306,   308,   311,
-   314,   317,   321,   325,   328,   331,   334,   336,   339,   341,
-   344,   346,   348,   350,   352,   354,   356,   358,   360,   362,
-   364,   366,   368,   370,   373,   376,   380,   383,   385,   389,
-   393,   396,   398,   403,   407,   409,   412,   414,   425,   437,
-   447,   457,   466,   478,   487,   493,   496,   501,   502,   504,
-   507,   509,   511,   514,   517,   521,   526,   531,   533,   537,
-   539,   543,   545,   548,   552,   559,   567,   570,   572,   574,
-   577,   580,   584,   588,   592,   596,   604,   613,   617,   619,
-   623,   625,   633,   642,   646,   648,   656,   665,   669,   671,
-   673,   676,   678
+   250,   254,   258,   262,   266,   270,   274,   278,   282,   286,
+   290,   294,   298,   300,   306,   308,   312,   313,   317,   319,
+   322,   324,   326,   328,   331,   334,   337,   341,   345,   348,
+   351,   354,   356,   359,   361,   364,   366,   368,   370,   372,
+   374,   376,   378,   380,   382,   384,   386,   388,   390,   393,
+   396,   400,   403,   405,   409,   413,   416,   418,   423,   427,
+   429,   432,   434,   445,   457,   467,   477,   486,   498,   507,
+   513,   516,   521,   522,   524,   527,   529,   531,   534,   537,
+   541,   546,   551,   553,   557,   559,   563,   565,   568,   572,
+   579,   587,   590,   592,   594,   597,   600,   604,   608,   612,
+   616,   624,   633,   637,   639,   643,   645,   653,   662,   666,
+   668,   676,   685,   689,   691,   693,   696,   698
 };
 
 static const short yyrhs[] = {    68,
@@ -720,9 +760,11 @@ static const short yyrhs[] = {    68,
     19,    55,    30,    56,     0,   117,     0,    84,     0,    40,
     58,    84,     0,    41,    58,    84,     0,    42,    58,   117,
      0,    43,    58,   117,     0,    44,    58,    85,     0,    46,
-    58,    89,     0,    47,    58,    90,     0,    48,    58,    19,
-     0,    49,    58,    19,     0,    50,    58,    19,     0,    51,
-    58,    19,     0,    52,    58,    19,     0,    19,     0,    19,
+    58,    89,     0,    47,    58,    90,     0,    48,    58,    21,
+     0,    48,    58,    19,     0,    49,    58,    21,     0,    49,
+    58,    19,     0,    50,    58,    21,     0,    50,    58,    19,
+     0,    51,    58,    21,     0,    51,    58,    19,     0,    52,
+    58,    21,     0,    52,    58,    19,     0,    19,     0,    19,
     55,    19,    90,    56,     0,    19,     0,    55,    89,    56,
      0,     0,    19,    60,    89,     0,    19,     0,    91,    95,
      0,    91,     0,    92,     0,    19,     0,     5,    19,     0,
@@ -769,25 +811,25 @@ static const short yyrhs[] = {    68,
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   597,   598,   599,   600,   603,   612,   621,   630,   639,   648,
-   659,   660,   661,   662,   663,   664,   665,   666,   669,   674,
-   681,   695,   696,   708,   717,   731,   732,   735,   736,   745,
-   757,   758,   759,   760,   763,   764,   765,   766,   769,   789,
-   813,   817,   825,   826,   827,   828,   829,   835,   838,   843,
-   911,   965,  1053,  1061,  1066,  1114,  1150,  1166,  1167,  1170,
-  1171,  1174,  1175,  1187,  1188,  1191,  1197,  1203,  1209,  1215,
-  1221,  1227,  1234,  1240,  1246,  1252,  1258,  1264,  1284,  1293,
-  1299,  1300,  1303,  1306,  1312,  1319,  1328,  1331,  1334,  1338,
-  1342,  1346,  1351,  1359,  1363,  1368,  1372,  1375,  1379,  1382,
-  1387,  1388,  1389,  1390,  1391,  1392,  1393,  1394,  1395,  1398,
-  1399,  1400,  1403,  1404,  1405,  1409,  1416,  1428,  1434,  1446,
-  1458,  1461,  1467,  1472,  1475,  1480,  1481,  1485,  1501,  1517,
-  1533,  1549,  1560,  1566,  1576,  1599,  1610,  1629,  1635,  1636,
-  1642,  1643,  1654,  1665,  1676,  1686,  1696,  1706,  1709,  1710,
-  1713,  1714,  1717,  1720,  1723,  1731,  1741,  1742,  1745,  1762,
-  1769,  1776,  1783,  1790,  1797,  1806,  1815,  1826,  1827,  1830,
-  1850,  1860,  1869,  1880,  1883,  1888,  1897,  1908,  1911,  1917,
-  1918,  1922,  1923
+   637,   638,   639,   640,   643,   652,   661,   670,   679,   688,
+   699,   700,   701,   702,   703,   704,   705,   706,   709,   714,
+   721,   735,   736,   748,   757,   771,   772,   775,   776,   785,
+   797,   798,   799,   800,   803,   804,   805,   806,   809,   829,
+   853,   857,   865,   866,   867,   868,   869,   875,   878,   883,
+   951,  1005,  1093,  1101,  1106,  1154,  1190,  1206,  1207,  1210,
+  1211,  1214,  1215,  1227,  1228,  1231,  1237,  1243,  1249,  1255,
+  1261,  1267,  1274,  1280,  1286,  1292,  1298,  1304,  1310,  1316,
+  1322,  1328,  1334,  1354,  1363,  1369,  1370,  1373,  1376,  1382,
+  1389,  1398,  1401,  1404,  1408,  1412,  1416,  1421,  1429,  1433,
+  1438,  1442,  1445,  1449,  1452,  1457,  1458,  1459,  1460,  1461,
+  1462,  1463,  1464,  1465,  1468,  1469,  1470,  1473,  1474,  1475,
+  1479,  1486,  1498,  1504,  1516,  1528,  1531,  1537,  1542,  1545,
+  1550,  1551,  1555,  1571,  1587,  1603,  1619,  1630,  1636,  1646,
+  1669,  1680,  1699,  1705,  1706,  1712,  1713,  1724,  1735,  1746,
+  1756,  1766,  1776,  1779,  1780,  1783,  1784,  1787,  1790,  1793,
+  1801,  1811,  1812,  1815,  1832,  1839,  1846,  1853,  1860,  1867,
+  1876,  1885,  1896,  1897,  1900,  1920,  1930,  1939,  1950,  1953,
+  1958,  1967,  1978,  1981,  1987,  1988,  1992,  1993
 };
 #endif
 
@@ -820,18 +862,18 @@ static const short yyr1[] = {     0,
     76,    76,    77,    77,    77,    77,    77,    78,    78,    79,
     79,    79,    80,    80,    81,    81,    81,    82,    82,    83,
     83,    84,    84,    85,    85,    86,    86,    86,    86,    86,
-    86,    86,    86,    86,    86,    86,    86,    86,    87,    87,
-    88,    88,    89,    89,    90,    90,    91,    91,    91,    91,
-    91,    91,    91,    92,    92,    92,    92,    92,    92,    92,
-    93,    93,    93,    93,    93,    93,    93,    93,    93,    94,
-    94,    94,    95,    95,    95,    95,    96,    96,    97,    97,
-    97,    97,    98,    99,    99,   100,   100,   101,   101,   101,
-   101,   101,   101,   101,   101,   102,   102,   102,   103,   103,
-   104,   104,   104,   104,   104,   104,   104,   104,   105,   105,
-   106,   106,   107,   107,   107,   107,   108,   108,   109,   109,
-   109,   109,   109,   109,   109,   110,   110,   111,   111,   112,
-   112,   113,   113,   114,   114,   115,   115,   116,   116,   117,
-   117,   117,   117
+    86,    86,    86,    86,    86,    86,    86,    86,    86,    86,
+    86,    86,    86,    87,    87,    88,    88,    89,    89,    90,
+    90,    91,    91,    91,    91,    91,    91,    91,    92,    92,
+    92,    92,    92,    92,    92,    93,    93,    93,    93,    93,
+    93,    93,    93,    93,    94,    94,    94,    95,    95,    95,
+    95,    96,    96,    97,    97,    97,    97,    98,    99,    99,
+   100,   100,   101,   101,   101,   101,   101,   101,   101,   101,
+   102,   102,   102,   103,   103,   104,   104,   104,   104,   104,
+   104,   104,   104,   105,   105,   106,   106,   107,   107,   107,
+   107,   108,   108,   109,   109,   109,   109,   109,   109,   109,
+   110,   110,   111,   111,   112,   112,   113,   113,   114,   114,
+   115,   115,   116,   116,   117,   117,   117,   117
 };
 
 static const short yyr2[] = {     0,
@@ -842,250 +884,254 @@ static const short yyr2[] = {     0,
      2,     3,     2,     2,     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,     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
+     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
 };
 
 static const short yydefact[] = {     0,
      0,     0,     5,     7,     8,     6,     9,    10,     0,     0,
     15,     0,     4,     0,    16,    17,    18,     0,     0,     0,
      0,    11,     3,    12,    13,    14,     2,     0,     0,     0,
-     0,     0,     1,     0,    35,    36,    37,    38,     0,    82,
-     0,    82,     0,    20,    34,     0,    27,     0,    31,    32,
-    33,    28,    22,   171,     0,   169,   179,     0,   175,     0,
-     0,     0,     0,     0,    29,     0,     0,     0,     0,   101,
-   110,   111,   112,   108,   109,   105,   103,   104,   106,   107,
-   102,    88,    97,     0,     0,    86,    87,    99,     0,     0,
-     0,    19,    26,     0,    82,     0,     0,    21,     0,     0,
-     0,     0,     0,     0,     0,    30,     0,     0,    59,    84,
-     0,    80,     0,     0,    89,    96,     0,    90,    98,    95,
-     0,     0,   113,    85,   100,    94,    91,     0,     0,   122,
-     0,   118,     0,     0,     0,    47,     0,   183,   180,   182,
-     0,   170,     0,     0,   168,     0,   178,     0,     0,   174,
-     0,     0,     0,     0,     0,     0,    81,     0,    54,    92,
-     0,     0,   114,   115,    93,     0,     0,     0,   117,     0,
-   121,     0,     0,     0,     0,     0,     0,    47,     0,     0,
-    46,    45,     0,     0,     0,     0,   181,   166,     0,   176,
-     0,   172,     0,     0,   127,   135,    78,     0,     0,     0,
+     0,     0,     1,     0,    35,    36,    37,    38,     0,    87,
+     0,    87,     0,    20,    34,     0,    27,     0,    31,    32,
+    33,    28,    22,   176,     0,   174,   184,     0,   180,     0,
+     0,     0,     0,     0,    29,     0,     0,     0,     0,   106,
+   115,   116,   117,   113,   114,   110,   108,   109,   111,   112,
+   107,    93,   102,     0,     0,    91,    92,   104,     0,     0,
+     0,    19,    26,     0,    87,     0,     0,    21,     0,     0,
+     0,     0,     0,     0,     0,    30,     0,     0,    59,    89,
+     0,    85,     0,     0,    94,   101,     0,    95,   103,   100,
+     0,     0,   118,    90,   105,    99,    96,     0,     0,   127,
+     0,   123,     0,     0,     0,    47,     0,   188,   185,   187,
+     0,   175,     0,     0,   173,     0,   183,     0,     0,   179,
+     0,     0,     0,     0,     0,     0,    86,     0,    54,    97,
+     0,     0,   119,   120,    98,     0,     0,     0,   122,     0,
+   126,     0,     0,     0,     0,     0,     0,    47,     0,     0,
+    46,    45,     0,     0,     0,     0,   186,   171,     0,   181,
+     0,   177,     0,     0,   132,   140,    83,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    61,     0,    57,    83,     0,     0,     0,     0,     0,   101,
-    88,     0,     0,   148,   150,   152,   116,   125,     0,   120,
-   119,     0,     0,     0,     0,    39,     0,     0,     0,     0,
-    41,    43,    44,    48,    22,    22,    22,   167,   177,   173,
-   126,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    61,     0,    57,    88,     0,     0,     0,     0,     0,   106,
+    93,     0,     0,   153,   155,   157,   121,   130,     0,   125,
+   124,     0,     0,     0,     0,    39,     0,     0,     0,     0,
+    41,    43,    44,    48,    22,    22,    22,   172,   182,   178,
+   131,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    58,     0,     0,     0,     0,    52,     0,
-    89,    90,     0,   153,   138,     0,   123,     0,     0,     0,
-     0,     0,    40,    49,   138,    42,    23,    25,    24,     0,
-    62,    66,    67,    68,    69,   183,    65,    70,    64,    71,
-    72,    73,    74,    75,    76,    77,    60,     0,    79,    53,
-     0,   138,     0,     0,   145,   154,     0,     0,     0,   149,
-   151,   124,     0,     0,   138,     0,     0,     0,     0,    56,
-     0,     0,   147,   146,     0,     0,     0,   136,   139,   132,
-   138,     0,     0,     0,   134,     0,     0,     0,    51,   130,
-     0,   159,     0,     0,     0,     0,     0,   158,   140,     0,
-     0,   138,   131,   138,    63,     0,     0,     0,     0,     0,
-   160,     0,   161,     0,   155,   157,   137,   128,     0,     0,
-    55,     0,   156,   164,   162,   163,   165,   133,   129,    50,
-     0,     0,     0
+    94,    95,     0,   158,   143,     0,   128,     0,     0,     0,
+     0,     0,    40,    49,   143,    42,    23,    25,    24,     0,
+    62,    66,    67,    68,    69,   188,    65,    70,    64,    71,
+    72,    74,    73,    76,    75,    78,    77,    80,    79,    82,
+    81,    60,     0,    84,    53,     0,   143,     0,     0,   150,
+   159,     0,     0,     0,   154,   156,   129,     0,     0,   143,
+     0,     0,     0,     0,    56,     0,     0,   152,   151,     0,
+     0,     0,   141,   144,   137,   143,     0,     0,     0,   139,
+     0,     0,     0,    51,   135,     0,   164,     0,     0,     0,
+     0,     0,   163,   145,     0,     0,   143,   136,   143,    63,
+     0,     0,     0,     0,     0,   165,     0,   166,     0,   160,
+   162,   142,   133,     0,     0,    55,     0,   161,   169,   167,
+   168,   170,   138,   134,    50,     0,     0,     0
 };
 
-static const short yydefgoto[] = {   391,
+static const short yydefgoto[] = {   396,
     11,    12,    13,    14,    98,    46,    47,    48,   181,   182,
    183,    49,    50,   217,    51,   155,   210,   292,   298,   211,
    113,    68,   111,   222,    86,    87,    88,    89,   124,   130,
-   131,   132,   229,   196,    52,   319,   338,   223,   224,   225,
-   226,   357,   358,    15,    55,    56,    16,    60,    17,    58,
-   339
+   131,   132,   229,   196,    52,   324,   343,   223,   224,   225,
+   226,   362,   363,    15,    55,    56,    16,    60,    17,    58,
+   344
 };
 
-static const short yypact[] = {   168,
-    18,    21,-32768,-32768,-32768,-32768,-32768,-32768,    41,    89,
--32768,   168,   213,    56,-32768,-32768,-32768,   138,    77,   109,
-   110,-32768,   213,-32768,-32768,-32768,   213,   167,   123,   153,
-   155,   189,   213,   230,-32768,-32768,-32768,-32768,   190,   156,
-   309,   156,   161,-32768,-32768,   196,-32768,   275,-32768,-32768,
--32768,-32768,   162,   165,   -17,-32768,-32768,   -13,-32768,    91,
-   164,   300,   201,   275,-32768,   206,   207,   217,   356,-32768,
+static const short yypact[] = {   137,
+    16,    24,-32768,-32768,-32768,-32768,-32768,-32768,    45,    99,
+-32768,   137,   170,    72,-32768,-32768,-32768,   106,    73,    81,
+    98,-32768,   170,-32768,-32768,-32768,   170,   154,   111,   151,
+   183,   186,   170,   215,-32768,-32768,-32768,-32768,   187,   158,
+   310,   158,   182,-32768,-32768,   188,-32768,   276,-32768,-32768,
+-32768,-32768,   195,   210,    69,-32768,-32768,   113,-32768,   115,
+   214,   301,   190,   276,-32768,   248,   252,   254,   357,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   269,   425,   374,   267,   235,-32768,   439,   284,   444,
+   290,-32768,-32768,   374,   158,   293,   311,-32768,    74,   315,
+    76,   316,    84,   339,    90,-32768,   321,   348,   329,   334,
+   345,   356,   399,   453,-32768,-32768,   409,-32768,   453,-32768,
+   413,   378,     2,-32768,   453,-32768,   429,   224,   416,-32768,
+   374,-32768,   392,   428,   430,   126,   220,-32768,-32768,-32768,
+   441,-32768,   405,   451,-32768,   422,-32768,   452,   423,-32768,
+   460,   -32,   427,   258,    21,   252,-32768,   464,   431,-32768,
+   432,   391,   235,-32768,-32768,   433,   465,   466,-32768,    -6,
+-32768,   470,   374,   435,    -6,   374,    26,     0,   391,     7,
+   434,   472,   436,   438,   440,   442,-32768,-32768,   443,-32768,
+   445,-32768,   446,   471,-32768,-32768,-32768,   447,   448,   449,
+   450,   454,   455,   456,   457,   458,   459,   461,   462,    91,
+-32768,   468,-32768,-32768,   374,   478,   480,   391,   408,   467,
+     6,   482,   469,-32768,   463,-32768,-32768,-32768,   112,-32768,
+-32768,   473,   485,   391,   490,-32768,   486,   474,   476,   487,
+-32768,-32768,-32768,-32768,   195,   195,   195,-32768,-32768,-32768,
+-32768,     1,     1,    74,    74,     9,   252,   374,   139,   157,
+   191,   209,   212,-32768,   258,   494,   477,   479,   481,   483,
+   121,   144,   374,    94,   505,   340,-32768,   507,   391,   475,
+   484,   488,-32768,-32768,   505,-32768,-32768,-32768,-32768,   489,
+-32768,-32768,-32768,-32768,-32768,   489,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   247,   424,   373,   235,   199,-32768,   438,   238,   443,
-   244,-32768,-32768,   373,   156,   253,   255,-32768,     6,   245,
-    -1,   256,    26,   258,    73,-32768,   222,   276,   274,   242,
-   254,   280,   292,   452,-32768,-32768,   317,-32768,   452,-32768,
-   340,   311,     2,-32768,   452,-32768,   371,   157,   364,-32768,
-   373,-32768,   337,   381,   391,    88,   224,-32768,-32768,-32768,
-   397,-32768,   370,   410,-32768,   375,-32768,   412,   377,-32768,
-   425,   -34,   392,   257,    -7,   207,-32768,   429,   405,-32768,
-   406,   390,   199,-32768,-32768,   416,   453,   459,-32768,    14,
--32768,   460,   373,   426,    14,   373,    13,     9,   390,    59,
-   422,   463,   427,   430,   431,   432,-32768,-32768,   428,-32768,
-   433,-32768,   434,   465,-32768,-32768,-32768,   435,   436,   437,
-   439,   440,   441,   442,   444,   445,   446,   447,   448,   122,
--32768,   454,-32768,-32768,   373,   464,   473,   390,   407,   455,
-     5,   477,   456,-32768,   449,-32768,-32768,-32768,   124,-32768,
--32768,   458,   482,   390,   490,-32768,   486,   457,   461,   491,
--32768,-32768,-32768,-32768,   162,   162,   162,-32768,-32768,-32768,
--32768,    84,    84,     6,     6,    64,   207,   373,   497,   499,
-   500,   501,   502,-32768,   257,   498,   467,   468,   472,   470,
-   126,   128,   373,    63,   508,   339,-32768,   509,   390,   474,
-   475,   478,-32768,-32768,   508,-32768,-32768,-32768,-32768,   479,
--32768,-32768,-32768,-32768,-32768,   479,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,    -2,-32768,-32768,
-   506,   508,   373,   373,-32768,   480,   513,    70,   -34,-32768,
--32768,-32768,   481,   390,   508,   390,   -34,   510,   483,-32768,
-    16,   -34,-32768,-32768,   519,   106,   515,   522,-32768,-32768,
-   508,   487,   -34,   488,-32768,   489,   518,   493,-32768,-32768,
-   106,-32768,   492,    76,    82,   494,    57,-32768,-32768,    70,
-   -34,   508,-32768,   508,-32768,   496,   523,   103,     6,     6,
--32768,     6,-32768,     6,-32768,-32768,-32768,-32768,   -34,   -34,
--32768,   503,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   548,   549,-32768
+-32768,-32768,    47,-32768,-32768,   503,   505,   374,   374,-32768,
+   491,   510,    27,   -32,-32768,-32768,-32768,   492,   391,   505,
+   391,   -32,   506,   496,-32768,    54,   -32,-32768,-32768,   518,
+    57,   514,   522,-32768,-32768,   505,   495,   -32,   497,-32768,
+   498,   521,   499,-32768,-32768,    57,-32768,   500,    64,    66,
+   501,    50,-32768,-32768,    27,   -32,   505,-32768,   505,-32768,
+   493,   523,    79,    74,    74,-32768,    74,-32768,    74,-32768,
+-32768,-32768,-32768,   -32,   -32,-32768,   504,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,   542,   555,-32768
 };
 
 static const short yypgoto[] = {-32768,
-    99,   125,   539,-32768,     1,-32768,   511,   -28,   372,   374,
-   378,-32768,-32768,-32768,-32768,-32768,-32768,   -46,-32768,   293,
--32768,   -27,  -151,   -40,-32768,   -67,-32768,   -66,  -112,   450,
--32768,   -98,-32768,  -305,   -14,  -276,   202,  -175,  -216,-32768,
-   283,   210,  -240,   104,-32768,   462,   127,-32768,   146,-32768,
+   202,   104,   544,-32768,    17,-32768,   511,   -29,   380,   379,
+   385,-32768,-32768,-32768,-32768,-32768,-32768,   -52,-32768,   299,
+-32768,   -27,  -152,   -40,-32768,   -66,-32768,   -60,  -107,   437,
+-32768,   -93,-32768,  -314,   -20,  -279,   200,  -177,  -218,-32768,
+   291,   213,  -266,   205,-32768,   502,   232,-32768,   239,-32768,
    -99
 };
 
 
-#define        YYLAST          585
+#define        YYLAST          603
 
 
 static const short yytable[] = {   142,
-    85,   116,   117,   239,   214,    64,   163,    96,   327,   272,
-   164,   212,    84,   340,    90,   120,   329,    54,   194,    65,
-   126,   345,   195,   108,   138,   139,   350,   177,   140,   169,
-   171,   236,   166,    64,   348,   332,   100,   363,    18,    19,
-   102,   101,   270,   121,   147,   103,   116,   106,   343,   213,
-   227,   116,   144,   134,   330,   378,   315,   116,   281,    20,
-  -142,   129,   123,   273,   361,   237,   180,   135,   167,   230,
-   141,   231,   349,   388,   389,   352,   169,   138,   139,   148,
-   241,   140,   296,   139,   316,   379,   140,   380,   138,   139,
-   172,   150,   140,   291,   138,   139,   333,   334,   140,   168,
-   138,   139,   290,   323,   140,   300,   177,    21,    28,   178,
-    22,   240,   375,   291,   353,    24,   376,   317,   354,   355,
-   356,   352,   337,   141,   352,    22,   151,   376,   141,    30,
-    24,    22,   233,   370,   141,   235,    24,    27,    25,   372,
-   141,    29,   179,    53,   104,   180,   141,    33,   342,   105,
-   344,   116,   117,    25,   294,   295,   299,    26,   383,    25,
-   353,    31,    32,   353,   354,   355,   356,   354,   355,   356,
-     1,    54,    26,    57,   267,   166,     2,   264,    26,   277,
-   265,  -144,   278,  -143,   313,    34,   314,    35,    36,    37,
-    38,     3,     4,     5,     6,     7,     8,    35,    36,    37,
-    38,    39,    40,    41,    42,    43,   293,    59,    66,   297,
-    67,   167,     9,    10,    34,    91,    97,   301,    63,   107,
-    44,     2,    99,    45,   109,   110,    35,    36,    37,    38,
-    39,    40,    41,    42,    43,   112,     3,     4,     5,     6,
-     7,     8,   184,   185,   186,   287,   288,   289,    61,    92,
-    62,   118,    45,   122,   371,   373,   127,     9,    10,   123,
-    35,    36,    37,    38,   133,   143,    41,    42,    43,   384,
-   385,   136,   386,   137,   387,   197,   146,   152,   149,    69,
-    70,    71,    72,    73,    63,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,   153,    83,   198,   199,   200,   201,
-   202,   156,   203,   204,   205,   206,   207,   208,   209,   157,
-   159,    94,    95,    69,    70,    71,    72,    73,    61,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,   154,    83,
-    35,    36,    37,    38,   158,   160,    41,    42,    43,    35,
-    36,    37,    38,    69,    70,    71,    72,    73,   320,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,   161,    83,
-   114,    70,    71,    72,    73,   162,    74,    75,    76,    77,
-    78,    79,    80,    81,   115,   165,    83,    69,    70,    71,
-    72,    73,   170,    74,    75,    76,    77,    78,    79,    80,
-    81,    82,   173,    83,   219,   220,    71,    72,    73,   174,
-    74,    75,    76,    77,    78,    79,    80,    81,   221,   175,
-    83,   114,    70,    71,    72,    73,   187,    74,    75,    76,
-    77,    78,    79,    80,    81,   271,   188,    83,   119,    70,
-   189,   190,   191,   192,    74,    75,    76,    77,    78,    79,
-    80,    81,   125,    70,    83,   193,   179,   215,    74,    75,
-    76,    77,    78,    79,    80,    81,   114,    70,    83,   216,
-   218,   128,    74,    75,    76,    77,    78,    79,    80,    81,
-   167,   228,    83,    35,    36,    37,    38,   166,   232,   180,
-   234,   177,   268,   244,   248,   245,   246,   247,   251,   249,
-   250,   269,   252,   253,   254,   274,   255,   256,   257,   258,
-   280,   259,   260,   261,   262,   263,   266,   276,   282,   283,
-  -141,   275,   279,   284,   286,   302,   285,   303,   304,   305,
-   306,   308,   309,   310,   311,   312,   318,   322,   324,   331,
-   325,   336,   326,   328,   335,   347,   341,   351,   359,   346,
-   360,   366,   362,   364,   365,   367,   382,   392,   393,   369,
-    23,   374,   381,   243,   242,   238,    93,   307,   321,   390,
-   368,   377,   145,     0,     0,     0,     0,     0,     0,     0,
+    85,   239,   116,   214,    64,   332,   163,    96,   117,   345,
+   272,    84,   166,    65,    90,   164,   120,   350,   177,   290,
+   194,   126,   355,   108,   195,   138,   139,   296,   139,   140,
+   291,   140,    64,   368,   169,   171,    18,   337,   291,   212,
+   270,   106,    19,   121,   236,   138,   139,   116,   167,   140,
+   348,   383,   116,   134,   320,   227,   281,   180,   116,   240,
+   129,  -147,   123,    20,   273,   334,   366,   135,   357,   393,
+   394,   141,   353,   141,   230,   357,   231,   213,   237,   342,
+   241,   169,   138,   139,   138,   139,   140,   384,   140,   385,
+   172,   141,   138,   139,    54,   381,   140,   357,   168,   338,
+   339,   328,   147,   335,   300,   380,   381,   358,   150,    29,
+   354,   359,   360,   361,   358,   321,    27,    21,   359,   360,
+   361,   375,   100,   377,    28,    30,    33,   101,   141,   144,
+   141,    53,   233,    31,   388,   235,   358,   148,   141,     1,
+   359,   360,   361,   151,   177,     2,   264,   178,   322,   265,
+    32,   347,   116,   349,   294,   295,   299,   302,   117,   303,
+     3,     4,     5,     6,     7,     8,   102,   277,   104,    54,
+   278,   103,    34,   105,   267,   304,  -149,   305,     2,   318,
+   179,     9,    10,   180,    35,    36,    37,    38,    39,    40,
+    41,    42,    43,     3,     4,     5,     6,     7,     8,  -148,
+   293,    57,   319,   297,    59,    66,    34,    44,   107,   306,
+    45,   307,    67,    22,     9,    10,    24,   301,    35,    36,
+    37,    38,    39,    40,    41,    42,    43,   308,    22,   309,
+   310,    24,   311,    61,    22,    62,    91,    24,   184,   185,
+   186,    92,   166,    25,    45,    35,    36,    37,    38,    97,
+    26,    41,    42,    43,    35,    36,    37,    38,    25,   376,
+   378,   287,   288,   289,    25,    26,   109,    99,    63,    63,
+   110,    26,   112,   118,   389,   390,   197,   391,   167,   392,
+    69,    70,    71,    72,    73,   122,    74,    75,    76,    77,
+    78,    79,    80,    81,    82,   123,    83,   198,   199,   200,
+   201,   202,   127,   203,   204,   205,   206,   207,   208,   209,
+   133,   136,    94,    95,    69,    70,    71,    72,    73,    61,
+    74,    75,    76,    77,    78,    79,    80,    81,    82,   137,
+    83,    35,    36,    37,    38,   143,   146,    41,    42,    43,
+    35,    36,    37,    38,    69,    70,    71,    72,    73,   325,
+    74,    75,    76,    77,    78,    79,    80,    81,    82,   149,
+    83,   114,    70,    71,    72,    73,   153,    74,    75,    76,
+    77,    78,    79,    80,    81,   115,   152,    83,    69,    70,
+    71,    72,    73,   154,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,   156,    83,   219,   220,    71,    72,    73,
+   157,    74,    75,    76,    77,    78,    79,    80,    81,   221,
+   158,    83,   114,    70,    71,    72,    73,   159,    74,    75,
+    76,    77,    78,    79,    80,    81,   271,   160,    83,   119,
+    70,   161,   162,   165,   170,    74,    75,    76,    77,    78,
+    79,    80,    81,   125,    70,    83,   174,   173,   175,    74,
+    75,    76,    77,    78,    79,    80,    81,   114,    70,    83,
+   187,   188,   128,    74,    75,    76,    77,    78,    79,    80,
+    81,   189,   191,    83,    35,    36,    37,    38,   190,   192,
+   193,   179,   215,   228,   166,   216,   218,   167,   232,   234,
+   177,   180,   244,   245,   251,   246,   268,   247,   269,   248,
+   274,   249,   250,   280,   252,   253,   254,   255,   282,   283,
+   286,   256,   257,   258,   259,   260,   261,   313,   262,   263,
+   266,   276,  -146,   323,   275,   327,   336,   279,   341,   329,
+   284,   285,   314,   316,   315,   351,   356,   364,   317,   330,
+   365,   397,   331,   333,   371,   340,   387,   346,   352,   386,
+   367,   372,   369,   370,   398,    23,    93,   374,   379,   242,
+   395,   243,   238,   312,   382,     0,   326,     0,   373,     0,
+     0,   176,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   176
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   145
 };
 
 static const short yycheck[] = {    99,
-    41,    69,    69,   179,   156,    34,     5,    48,   285,     5,
-   123,    19,    41,   319,    42,    83,    19,    19,    53,    34,
-    88,   327,    57,    64,    19,    20,   332,    19,    23,   128,
-   129,    19,    19,    62,    19,   312,    54,   343,    21,    19,
-    54,    59,   218,    84,    19,    59,   114,    62,   325,    57,
-   163,   119,    54,    94,    57,   361,   273,   125,   234,    19,
-    56,    90,    61,    59,   341,    53,    58,    95,    55,   168,
-    65,   170,    57,   379,   380,    19,   175,    19,    20,    54,
-   180,    23,    19,    20,    22,   362,    23,   364,    19,    20,
-   131,    19,    23,    30,    19,    20,   313,   314,    23,   128,
-    19,    20,    19,   279,    23,   257,    19,    19,    53,    22,
-    12,    53,    56,    30,    58,    12,   357,    55,    62,    63,
-    64,    19,    53,    65,    19,    27,    54,   368,    65,    53,
-    27,    33,   173,    58,    65,   176,    33,    13,    12,    58,
-    65,     4,    55,    21,    54,    58,    65,    23,   324,    59,
-   326,   219,   219,    27,   254,   255,   256,    12,    56,    33,
-    58,    53,    53,    58,    62,    63,    64,    62,    63,    64,
-     3,    19,    27,    19,   215,    19,     9,    56,    33,    56,
-    59,    56,    59,    56,    59,    19,    59,    31,    32,    33,
-    34,    24,    25,    26,    27,    28,    29,    31,    32,    33,
-    34,    35,    36,    37,    38,    39,   253,    19,    19,   256,
-    55,    55,    45,    46,    19,    55,    55,   258,    55,    19,
-    54,     9,    58,    57,    19,    19,    31,    32,    33,    34,
-    35,    36,    37,    38,    39,    19,    24,    25,    26,    27,
-    28,    29,    19,    20,    21,   245,   246,   247,    19,    54,
-    21,     5,    57,    19,   354,   355,    19,    45,    46,    61,
-    31,    32,    33,    34,    21,    21,    37,    38,    39,   369,
-   370,    19,   372,    19,   374,    19,    21,    56,    21,     5,
-     6,     7,     8,     9,    55,    11,    12,    13,    14,    15,
-    16,    17,    18,    19,    19,    21,    40,    41,    42,    43,
-    44,    60,    46,    47,    48,    49,    50,    51,    52,    56,
-    19,    37,    38,     5,     6,     7,     8,     9,    19,    11,
-    12,    13,    14,    15,    16,    17,    18,    19,    55,    21,
-    31,    32,    33,    34,    55,    19,    37,    38,    39,    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,    55,    11,    12,    13,    14,
-    15,    16,    17,    18,    19,     5,    21,     5,     6,     7,
-     8,     9,    19,    11,    12,    13,    14,    15,    16,    17,
-    18,    19,    56,    21,     5,     6,     7,     8,     9,    19,
+    41,   179,    69,   156,    34,   285,     5,    48,    69,   324,
+     5,    41,    19,    34,    42,   123,    83,   332,    19,    19,
+    53,    88,   337,    64,    57,    19,    20,    19,    20,    23,
+    30,    23,    62,   348,   128,   129,    21,   317,    30,    19,
+   218,    62,    19,    84,    19,    19,    20,   114,    55,    23,
+   330,   366,   119,    94,   273,   163,   234,    58,   125,    53,
+    90,    56,    61,    19,    59,    19,   346,    95,    19,   384,
+   385,    65,    19,    65,   168,    19,   170,    57,    53,    53,
+   180,   175,    19,    20,    19,    20,    23,   367,    23,   369,
+   131,    65,    19,    20,    19,   362,    23,    19,   128,   318,
+   319,   279,    19,    57,   257,    56,   373,    58,    19,     4,
+    57,    62,    63,    64,    58,    22,    13,    19,    62,    63,
+    64,    58,    54,    58,    53,    53,    23,    59,    65,    54,
+    65,    21,   173,    53,    56,   176,    58,    54,    65,     3,
+    62,    63,    64,    54,    19,     9,    56,    22,    55,    59,
+    53,   329,   219,   331,   254,   255,   256,    19,   219,    21,
+    24,    25,    26,    27,    28,    29,    54,    56,    54,    19,
+    59,    59,    19,    59,   215,    19,    56,    21,     9,    59,
+    55,    45,    46,    58,    31,    32,    33,    34,    35,    36,
+    37,    38,    39,    24,    25,    26,    27,    28,    29,    56,
+   253,    19,    59,   256,    19,    19,    19,    54,    19,    19,
+    57,    21,    55,    12,    45,    46,    12,   258,    31,    32,
+    33,    34,    35,    36,    37,    38,    39,    19,    27,    21,
+    19,    27,    21,    19,    33,    21,    55,    33,    19,    20,
+    21,    54,    19,    12,    57,    31,    32,    33,    34,    55,
+    12,    37,    38,    39,    31,    32,    33,    34,    27,   359,
+   360,   245,   246,   247,    33,    27,    19,    58,    55,    55,
+    19,    33,    19,     5,   374,   375,    19,   377,    55,   379,
+     5,     6,     7,     8,     9,    19,    11,    12,    13,    14,
+    15,    16,    17,    18,    19,    61,    21,    40,    41,    42,
+    43,    44,    19,    46,    47,    48,    49,    50,    51,    52,
+    21,    19,    37,    38,     5,     6,     7,     8,     9,    19,
     11,    12,    13,    14,    15,    16,    17,    18,    19,    19,
-    21,     5,     6,     7,     8,     9,    20,    11,    12,    13,
-    14,    15,    16,    17,    18,    19,    57,    21,     5,     6,
-    21,    57,    21,    57,    11,    12,    13,    14,    15,    16,
-    17,    18,     5,     6,    21,    21,    55,    19,    11,    12,
-    13,    14,    15,    16,    17,    18,     5,     6,    21,    55,
-    55,    19,    11,    12,    13,    14,    15,    16,    17,    18,
-    55,    19,    21,    31,    32,    33,    34,    19,    19,    58,
-    55,    19,    19,    57,    57,    56,    56,    56,    24,    57,
-    57,    19,    58,    58,    58,    19,    58,    58,    58,    58,
-    19,    58,    58,    58,    58,    58,    53,    59,    19,    24,
-    56,    56,    55,    57,    24,    19,    56,    19,    19,    19,
-    19,    24,    56,    56,    53,    56,    19,    19,    55,    24,
-    56,    19,    55,    55,    55,    53,    56,    19,    24,    30,
-    19,    24,    56,    56,    56,    53,    24,     0,     0,    58,
-    12,    58,    57,   182,   181,   178,    46,   265,   276,    57,
-   351,   360,   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    21,    31,    32,    33,    34,    21,    21,    37,    38,    39,
+    31,    32,    33,    34,     5,     6,     7,     8,     9,    10,
+    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,    56,    21,     5,     6,
+     7,     8,     9,    55,    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,
+    55,    21,     5,     6,     7,     8,     9,    19,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    19,    21,     5,
+     6,    19,    55,     5,    19,    11,    12,    13,    14,    15,
+    16,    17,    18,     5,     6,    21,    19,    56,    19,    11,
+    12,    13,    14,    15,    16,    17,    18,     5,     6,    21,
+    20,    57,    19,    11,    12,    13,    14,    15,    16,    17,
+    18,    21,    21,    21,    31,    32,    33,    34,    57,    57,
+    21,    55,    19,    19,    19,    55,    55,    55,    19,    55,
+    19,    58,    57,    56,    24,    56,    19,    56,    19,    57,
+    19,    57,    57,    19,    58,    58,    58,    58,    19,    24,
+    24,    58,    58,    58,    58,    58,    58,    24,    58,    58,
+    53,    59,    56,    19,    56,    19,    24,    55,    19,    55,
+    57,    56,    56,    53,    56,    30,    19,    24,    56,    56,
+    19,     0,    55,    55,    24,    55,    24,    56,    53,    57,
+    56,    53,    56,    56,     0,    12,    46,    58,    58,   181,
+    57,   182,   178,   265,   365,    -1,   276,    -1,   356,    -1,
+    -1,   135,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   135
+    -1,    -1,   101
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 #line 3 "/usr/lib/bison.simple"
@@ -1631,23 +1677,23 @@ yyreduce:
   switch (yyn) {
 
 case 1:
-#line 597 "parse.y"
+#line 637 "parse.y"
 { ; ;
     break;}
 case 2:
-#line 598 "parse.y"
+#line 638 "parse.y"
 { ; ;
     break;}
 case 3:
-#line 599 "parse.y"
+#line 639 "parse.y"
 { ; ;
     break;}
 case 4:
-#line 600 "parse.y"
+#line 640 "parse.y"
 { ; ;
     break;}
 case 5:
-#line 603 "parse.y"
+#line 643 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", C_CCODE,
@@ -1659,7 +1705,7 @@ case 5:
                                        ;
     break;}
 case 6:
-#line 612 "parse.y"
+#line 652 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", H_CCODE,
@@ -1671,7 +1717,7 @@ case 6:
                                        ;
     break;}
 case 7:
-#line 621 "parse.y"
+#line 661 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", HT_CCODE,
@@ -1683,7 +1729,7 @@ case 7:
                                        ;
     break;}
 case 8:
-#line 630 "parse.y"
+#line 670 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", PH_CCODE,
@@ -1695,7 +1741,7 @@ case 8:
                                        ;
     break;}
 case 9:
-#line 639 "parse.y"
+#line 679 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", A_CCODE,
@@ -1707,7 +1753,7 @@ case 9:
                                        ;
     break;}
 case 10:
-#line 648 "parse.y"
+#line 688 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", AT_CCODE,
@@ -1719,39 +1765,39 @@ case 10:
                                        ;
     break;}
 case 11:
-#line 659 "parse.y"
+#line 699 "parse.y"
 { ; ;
     break;}
 case 12:
-#line 660 "parse.y"
+#line 700 "parse.y"
 { ; ;
     break;}
 case 13:
-#line 661 "parse.y"
+#line 701 "parse.y"
 { ; ;
     break;}
 case 14:
-#line 662 "parse.y"
+#line 702 "parse.y"
 { ; ;
     break;}
 case 15:
-#line 663 "parse.y"
+#line 703 "parse.y"
 { ; ;
     break;}
 case 16:
-#line 664 "parse.y"
+#line 704 "parse.y"
 { ; ;
     break;}
 case 17:
-#line 665 "parse.y"
+#line 705 "parse.y"
 { ; ;
     break;}
 case 18:
-#line 666 "parse.y"
+#line 706 "parse.y"
 { ; ;
     break;}
 case 19:
-#line 669 "parse.y"
+#line 709 "parse.y"
 {
                        ((Class *)class)->nodes = class_nodes;
                        class_nodes = NULL;
@@ -1759,7 +1805,7 @@ case 19:
                                                ;
     break;}
 case 20:
-#line 674 "parse.y"
+#line 714 "parse.y"
 {
                        ((Class *)class)->nodes = NULL;
                        class_nodes = NULL;
@@ -1767,7 +1813,7 @@ case 20:
                                                ;
     break;}
 case 21:
-#line 681 "parse.y"
+#line 721 "parse.y"
 {
                        class = node_new (CLASS_NODE,
                                          "otype:steal", yyvsp[-3].id,
@@ -1782,7 +1828,7 @@ case 21:
                                                ;
     break;}
 case 23:
-#line 696 "parse.y"
+#line 736 "parse.y"
 {
                        if(strcmp(yyvsp[-3].id,"chunks") == 0) {
                                g_free (chunk_size);
@@ -1797,7 +1843,7 @@ case 23:
                ;
     break;}
 case 24:
-#line 708 "parse.y"
+#line 748 "parse.y"
 {
                        if (strcmp (yyvsp[-3].id, "interface") == 0) {
                                interfaces = g_list_append (interfaces,
@@ -1809,7 +1855,7 @@ case 24:
                ;
     break;}
 case 25:
-#line 717 "parse.y"
+#line 757 "parse.y"
 {
                        if(strcmp(yyvsp[-3].id,"chunks") == 0) {
                                g_free (chunk_size);
@@ -1824,19 +1870,19 @@ case 25:
                ;
     break;}
 case 26:
-#line 731 "parse.y"
+#line 771 "parse.y"
 { ; ;
     break;}
 case 27:
-#line 732 "parse.y"
+#line 772 "parse.y"
 { ; ;
     break;}
 case 28:
-#line 735 "parse.y"
+#line 775 "parse.y"
 { ; ;
     break;}
 case 29:
-#line 736 "parse.y"
+#line 776 "parse.y"
 {
                        if (strcmp (yyvsp[-1].id, "BonoboObject") != 0) {
                                g_free (yyvsp[-1].id);
@@ -1848,7 +1894,7 @@ case 29:
                                                ;
     break;}
 case 30:
-#line 745 "parse.y"
+#line 785 "parse.y"
 {
                        if (strcmp (yyvsp[-2].id, "interface") != 0) {
                                g_free (yyvsp[-2].id);
@@ -1863,39 +1909,39 @@ case 30:
                                                ;
     break;}
 case 31:
-#line 757 "parse.y"
+#line 797 "parse.y"
 { ; ;
     break;}
 case 32:
-#line 758 "parse.y"
+#line 798 "parse.y"
 { ; ;
     break;}
 case 33:
-#line 759 "parse.y"
+#line 799 "parse.y"
 { ; ;
     break;}
 case 34:
-#line 760 "parse.y"
+#line 800 "parse.y"
 { ; ;
     break;}
 case 35:
-#line 763 "parse.y"
+#line 803 "parse.y"
 { the_scope = PUBLIC_SCOPE; ;
     break;}
 case 36:
-#line 764 "parse.y"
+#line 804 "parse.y"
 { the_scope = PRIVATE_SCOPE; ;
     break;}
 case 37:
-#line 765 "parse.y"
+#line 805 "parse.y"
 { the_scope = PROTECTED_SCOPE; ;
     break;}
 case 38:
-#line 766 "parse.y"
+#line 806 "parse.y"
 { the_scope = CLASS_SCOPE; ;
     break;}
 case 39:
-#line 769 "parse.y"
+#line 809 "parse.y"
 {
                        if (strcmp (yyvsp[-1].id, "destroywith") == 0) {
                                g_free (yyvsp[-1].id);
@@ -1918,7 +1964,7 @@ case 39:
                                ;
     break;}
 case 40:
-#line 789 "parse.y"
+#line 829 "parse.y"
 {
                        if (strcmp (yyvsp[-2].id, "destroy") == 0) {
                                g_free(yyvsp[-2].id);
@@ -1943,14 +1989,14 @@ case 40:
                                        ;
     break;}
 case 41:
-#line 813 "parse.y"
+#line 853 "parse.y"
 {
                        initializer = yyvsp[0].id;
                        initializer_line = ccode_line;
                                ;
     break;}
 case 42:
-#line 817 "parse.y"
+#line 857 "parse.y"
 {
                        initializer = (yyvsp[0].cbuf)->str;
                        initializer_line = ccode_line;
@@ -1958,42 +2004,42 @@ case 42:
                                ;
     break;}
 case 43:
-#line 825 "parse.y"
+#line 865 "parse.y"
 { ; ;
     break;}
 case 44:
-#line 826 "parse.y"
+#line 866 "parse.y"
 { ; ;
     break;}
 case 45:
-#line 827 "parse.y"
+#line 867 "parse.y"
 { destructor = NULL; ;
     break;}
 case 46:
-#line 828 "parse.y"
+#line 868 "parse.y"
 { initializer = NULL; ;
     break;}
 case 47:
-#line 829 "parse.y"
+#line 869 "parse.y"
 {
                        destructor = NULL;
                        initializer = NULL;
                                        ;
     break;}
 case 48:
-#line 835 "parse.y"
+#line 875 "parse.y"
 {
                        push_variable(yyvsp[-2].id, the_scope,yyvsp[-4].line, NULL);
                                                ;
     break;}
 case 49:
-#line 838 "parse.y"
+#line 878 "parse.y"
 {
                        push_variable(yyvsp[-3].id, the_scope, yyvsp[-5].line, yyvsp[-2].id);
                                                ;
     break;}
 case 50:
-#line 843 "parse.y"
+#line 883 "parse.y"
 {
                        Node *node = NULL;
                        if(strcmp(yyvsp[-6].id,"get")==0 &&
@@ -2064,7 +2110,7 @@ case 50:
                                                ;
     break;}
 case 51:
-#line 911 "parse.y"
+#line 951 "parse.y"
 {
                        Node *node = NULL;
                        if(strcmp(yyvsp[-3].id, "get") == 0) {
@@ -2121,7 +2167,7 @@ case 51:
                                                ;
     break;}
 case 52:
-#line 965 "parse.y"
+#line 1005 "parse.y"
 {
                        Node *node;
                        char *get, *set = NULL;
@@ -2210,7 +2256,7 @@ case 52:
                                                ;
     break;}
 case 53:
-#line 1053 "parse.y"
+#line 1093 "parse.y"
 {
                        if (strcmp (yyvsp[-1].id, "export")!=0) {
                                g_free (yyvsp[-1].id); 
@@ -2221,13 +2267,13 @@ case 53:
                                                ;
     break;}
 case 54:
-#line 1061 "parse.y"
+#line 1101 "parse.y"
 {
                        yyval.id = NULL;
                                                ;
     break;}
 case 55:
-#line 1066 "parse.y"
+#line 1106 "parse.y"
 {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2278,7 +2324,7 @@ case 55:
                ;
     break;}
 case 56:
-#line 1114 "parse.y"
+#line 1154 "parse.y"
 {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2317,7 +2363,7 @@ case 56:
                ;
     break;}
 case 57:
-#line 1150 "parse.y"
+#line 1190 "parse.y"
 {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2334,27 +2380,27 @@ case 57:
                ;
     break;}
 case 58:
-#line 1166 "parse.y"
+#line 1206 "parse.y"
 { ; ;
     break;}
 case 59:
-#line 1167 "parse.y"
+#line 1207 "parse.y"
 { ; ;
     break;}
 case 60:
-#line 1170 "parse.y"
+#line 1210 "parse.y"
 { ; ;
     break;}
 case 61:
-#line 1171 "parse.y"
+#line 1211 "parse.y"
 { ; ;
     break;}
 case 62:
-#line 1174 "parse.y"
+#line 1214 "parse.y"
 { yyval.id = yyvsp[0].id; ;
     break;}
 case 63:
-#line 1175 "parse.y"
+#line 1215 "parse.y"
 {
                        if (strcmp (yyvsp[-3].id, "_") != 0) {
                                g_free (yyvsp[-3].id);
@@ -2367,15 +2413,15 @@ case 63:
                ;
     break;}
 case 64:
-#line 1187 "parse.y"
+#line 1227 "parse.y"
 { yyval.id = yyvsp[0].id; ;
     break;}
 case 65:
-#line 1188 "parse.y"
+#line 1228 "parse.y"
 { yyval.id = yyvsp[0].id; ;
     break;}
 case 66:
-#line 1191 "parse.y"
+#line 1231 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2384,7 +2430,7 @@ case 66:
                  ;
     break;}
 case 67:
-#line 1197 "parse.y"
+#line 1237 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2393,7 +2439,7 @@ case 67:
                  ;
     break;}
 case 68:
-#line 1203 "parse.y"
+#line 1243 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2402,7 +2448,7 @@ case 68:
                  ;
     break;}
 case 69:
-#line 1209 "parse.y"
+#line 1249 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2411,7 +2457,7 @@ case 69:
                  ;
     break;}
 case 70:
-#line 1215 "parse.y"
+#line 1255 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2420,7 +2466,7 @@ case 70:
                  ;
     break;}
 case 71:
-#line 1221 "parse.y"
+#line 1261 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2429,7 +2475,7 @@ case 71:
                  ;
     break;}
 case 72:
-#line 1227 "parse.y"
+#line 1267 "parse.y"
 {
                Type *type = pop_type ();
                ensure_property ();
@@ -2439,7 +2485,7 @@ case 72:
                  ;
     break;}
 case 73:
-#line 1234 "parse.y"
+#line 1274 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2448,7 +2494,7 @@ case 73:
                  ;
     break;}
 case 74:
-#line 1240 "parse.y"
+#line 1280 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2457,7 +2503,7 @@ case 74:
                  ;
     break;}
 case 75:
-#line 1246 "parse.y"
+#line 1286 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2466,7 +2512,7 @@ case 75:
                  ;
     break;}
 case 76:
-#line 1252 "parse.y"
+#line 1292 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2475,7 +2521,7 @@ case 76:
                  ;
     break;}
 case 77:
-#line 1258 "parse.y"
+#line 1298 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2484,7 +2530,52 @@ case 77:
                  ;
     break;}
 case 78:
-#line 1264 "parse.y"
+#line 1304 "parse.y"
+{
+               ensure_property ();
+               node_set ((Node *)property,
+                         "extra_gtktype:steal", yyvsp[0].id,
+                         NULL);
+                 ;
+    break;}
+case 79:
+#line 1310 "parse.y"
+{
+               ensure_property ();
+               node_set ((Node *)property,
+                         "extra_gtktype:steal", yyvsp[0].id,
+                         NULL);
+                 ;
+    break;}
+case 80:
+#line 1316 "parse.y"
+{
+               ensure_property ();
+               node_set ((Node *)property,
+                         "extra_gtktype:steal", yyvsp[0].id,
+                         NULL);
+                 ;
+    break;}
+case 81:
+#line 1322 "parse.y"
+{
+               ensure_property ();
+               node_set ((Node *)property,
+                         "extra_gtktype:steal", yyvsp[0].id,
+                         NULL);
+                 ;
+    break;}
+case 82:
+#line 1328 "parse.y"
+{
+               ensure_property ();
+               node_set ((Node *)property,
+                         "extra_gtktype:steal", yyvsp[0].id,
+                         NULL);
+                 ;
+    break;}
+case 83:
+#line 1334 "parse.y"
 {
                ensure_property ();
                if (strcmp (yyvsp[0].id, "link") == 0) {
@@ -2504,8 +2595,8 @@ case 78:
                }
                  ;
     break;}
-case 79:
-#line 1284 "parse.y"
+case 84:
+#line 1354 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"type")!=0) {
                                g_free(yyvsp[-4].id);
@@ -2516,35 +2607,35 @@ case 79:
                        yyval.id = debool (yyvsp[-4].id);
                                                ;
     break;}
-case 80:
-#line 1293 "parse.y"
+case 85:
+#line 1363 "parse.y"
 {
                        yyval.id = debool (yyvsp[0].id);
                        typestack = g_list_prepend(typestack,NULL);
                                                ;
     break;}
-case 81:
-#line 1299 "parse.y"
+case 86:
+#line 1369 "parse.y"
 { yyval.list = yyvsp[-1].list; ;
     break;}
-case 82:
-#line 1300 "parse.y"
+case 87:
+#line 1370 "parse.y"
 { yyval.list = NULL; ;
     break;}
-case 83:
-#line 1303 "parse.y"
+case 88:
+#line 1373 "parse.y"
 {
                        yyval.list = g_list_append(yyvsp[0].list,yyvsp[-2].id);
                                                ;
     break;}
-case 84:
-#line 1306 "parse.y"
+case 89:
+#line 1376 "parse.y"
 {
                        yyval.list = g_list_append(NULL,yyvsp[0].id);
                                                ;
     break;}
-case 85:
-#line 1312 "parse.y"
+case 90:
+#line 1382 "parse.y"
 {
                        Node *node = node_new (TYPE_NODE, 
                                               "name:steal", yyvsp[-1].id,
@@ -2553,8 +2644,8 @@ case 85:
                        typestack = g_list_prepend(typestack,node);
                                                        ;
     break;}
-case 86:
-#line 1319 "parse.y"
+case 91:
+#line 1389 "parse.y"
 {
                        Node *node = node_new (TYPE_NODE, 
                                               "name:steal", yyvsp[0].id,
@@ -2562,174 +2653,174 @@ case 86:
                        typestack = g_list_prepend(typestack,node);
                                                        ;
     break;}
-case 87:
-#line 1328 "parse.y"
+case 92:
+#line 1398 "parse.y"
 {
                        yyval.id = yyvsp[0].id;
                                                        ;
     break;}
-case 88:
-#line 1331 "parse.y"
+case 93:
+#line 1401 "parse.y"
 {
                        yyval.id = yyvsp[0].id;
                                                        ;
     break;}
-case 89:
-#line 1334 "parse.y"
+case 94:
+#line 1404 "parse.y"
 {
                        yyval.id = g_strconcat("const ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        ;
     break;}
-case 90:
-#line 1338 "parse.y"
+case 95:
+#line 1408 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
                                                        ;
     break;}
-case 91:
-#line 1342 "parse.y"
+case 96:
+#line 1412 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        ;
     break;}
-case 92:
-#line 1346 "parse.y"
+case 97:
+#line 1416 "parse.y"
 {
                        yyval.id = g_strconcat("const ", yyvsp[-1].id, " ",
                                             yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        ;
     break;}
-case 93:
-#line 1351 "parse.y"
+case 98:
+#line 1421 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-2].id, " ",
                                             yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
                                                        ;
     break;}
-case 94:
-#line 1359 "parse.y"
+case 99:
+#line 1429 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        ;
     break;}
-case 95:
-#line 1363 "parse.y"
+case 100:
+#line 1433 "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 96:
-#line 1368 "parse.y"
+case 101:
+#line 1438 "parse.y"
 {
                        yyval.id = g_strconcat("const ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        ;
     break;}
-case 97:
-#line 1372 "parse.y"
+case 102:
+#line 1442 "parse.y"
 {
                        yyval.id = yyvsp[0].id;
                                                        ;
     break;}
-case 98:
-#line 1375 "parse.y"
+case 103:
+#line 1445 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
                                                        ;
     break;}
-case 99:
-#line 1379 "parse.y"
+case 104:
+#line 1449 "parse.y"
 {
                        yyval.id = g_strdup(yyvsp[0].id);
                                                        ;
     break;}
-case 100:
-#line 1382 "parse.y"
+case 105:
+#line 1452 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                                                        ;
     break;}
-case 101:
-#line 1387 "parse.y"
+case 106:
+#line 1457 "parse.y"
 { yyval.id = "void"; ;
     break;}
-case 102:
-#line 1388 "parse.y"
+case 107:
+#line 1458 "parse.y"
 { yyval.id = "char"; ;
     break;}
-case 103:
-#line 1389 "parse.y"
+case 108:
+#line 1459 "parse.y"
 { yyval.id = "short"; ;
     break;}
-case 104:
-#line 1390 "parse.y"
+case 109:
+#line 1460 "parse.y"
 { yyval.id = "int"; ;
     break;}
-case 105:
-#line 1391 "parse.y"
+case 110:
+#line 1461 "parse.y"
 { yyval.id = "long"; ;
     break;}
-case 106:
-#line 1392 "parse.y"
+case 111:
+#line 1462 "parse.y"
 { yyval.id = "float"; ;
     break;}
-case 107:
-#line 1393 "parse.y"
+case 112:
+#line 1463 "parse.y"
 { yyval.id = "double"; ;
     break;}
-case 108:
-#line 1394 "parse.y"
+case 113:
+#line 1464 "parse.y"
 { yyval.id = "signed"; ;
     break;}
-case 109:
-#line 1395 "parse.y"
+case 114:
+#line 1465 "parse.y"
 { yyval.id = "unsigned"; ;
     break;}
-case 110:
-#line 1398 "parse.y"
+case 115:
+#line 1468 "parse.y"
 { yyval.id = "struct"; ;
     break;}
-case 111:
-#line 1399 "parse.y"
+case 116:
+#line 1469 "parse.y"
 { yyval.id = "union"; ;
     break;}
-case 112:
-#line 1400 "parse.y"
+case 117:
+#line 1470 "parse.y"
 { yyval.id = "enum"; ;
     break;}
-case 113:
-#line 1403 "parse.y"
+case 118:
+#line 1473 "parse.y"
 { yyval.id = g_strdup("*"); ;
     break;}
-case 114:
-#line 1404 "parse.y"
+case 119:
+#line 1474 "parse.y"
 { yyval.id = g_strdup("* const"); ;
     break;}
-case 115:
-#line 1405 "parse.y"
+case 120:
+#line 1475 "parse.y"
 {
                                yyval.id = g_strconcat("*", yyvsp[0].id, NULL);
                                g_free(yyvsp[0].id);
                                        ;
     break;}
-case 116:
-#line 1409 "parse.y"
+case 121:
+#line 1479 "parse.y"
 {
                                yyval.id = g_strconcat("* const", yyvsp[0].id, NULL);
                                g_free(yyvsp[0].id);
                                        ;
     break;}
-case 117:
-#line 1416 "parse.y"
+case 122:
+#line 1486 "parse.y"
 {
                        if(strcmp(yyvsp[-1].id, "first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -2743,14 +2834,14 @@ case 117:
                        g_free(yyvsp[-1].id);
                                        ;
     break;}
-case 118:
-#line 1428 "parse.y"
+case 123:
+#line 1498 "parse.y"
 {
                        yyval.sigtype = SIGNAL_LAST_METHOD;
                                        ;
     break;}
-case 119:
-#line 1434 "parse.y"
+case 124:
+#line 1504 "parse.y"
 {
                        if(strcmp(yyvsp[-1].id,"first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -2764,8 +2855,8 @@ case 119:
                        g_free(yyvsp[-1].id);
                                        ;
     break;}
-case 120:
-#line 1446 "parse.y"
+case 125:
+#line 1516 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -2779,47 +2870,47 @@ case 120:
                        g_free(yyvsp[-2].id);
                                        ;
     break;}
-case 121:
-#line 1458 "parse.y"
+case 126:
+#line 1528 "parse.y"
 {
                        yyval.sigtype = SIGNAL_LAST_METHOD;
                                        ;
     break;}
-case 122:
-#line 1461 "parse.y"
+case 127:
+#line 1531 "parse.y"
 {
                        /* the_scope was default thus public */
                        the_scope = PUBLIC_SCOPE;
                                        ;
     break;}
-case 123:
-#line 1467 "parse.y"
+case 128:
+#line 1537 "parse.y"
 {
                        gtktypes = g_list_prepend(gtktypes, debool (yyvsp[-3].id));
                                                ;
     break;}
-case 124:
-#line 1472 "parse.y"
+case 129:
+#line 1542 "parse.y"
 {
                        gtktypes = g_list_append(gtktypes, debool (yyvsp[0].id));
                                                ;
     break;}
-case 125:
-#line 1475 "parse.y"
+case 130:
+#line 1545 "parse.y"
 { 
                        gtktypes = g_list_append(gtktypes, debool (yyvsp[0].id));
                                                        ;
     break;}
-case 126:
-#line 1480 "parse.y"
+case 131:
+#line 1550 "parse.y"
 { yyval.cbuf = yyvsp[0].cbuf; ;
     break;}
-case 127:
-#line 1481 "parse.y"
+case 132:
+#line 1551 "parse.y"
 { yyval.cbuf = NULL; ;
     break;}
-case 128:
-#line 1485 "parse.y"
+case 133:
+#line 1555 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("signal without 'self' as "
@@ -2837,8 +2928,8 @@ case 128:
                                      ccode_line, vararg, yyvsp[-8].list);
                                                                        ;
     break;}
-case 129:
-#line 1501 "parse.y"
+case 134:
+#line 1571 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("signal without 'self' as "
@@ -2856,8 +2947,8 @@ case 129:
                                      ccode_line, vararg, yyvsp[-8].list);
                                                                        ;
     break;}
-case 130:
-#line 1517 "parse.y"
+case 135:
+#line 1587 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -2875,8 +2966,8 @@ case 130:
                                      ccode_line, vararg, NULL);
                                                                        ;
     break;}
-case 131:
-#line 1533 "parse.y"
+case 136:
+#line 1603 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -2894,8 +2985,8 @@ case 131:
                                      ccode_line, vararg, NULL);
                                                                        ;
     break;}
-case 132:
-#line 1549 "parse.y"
+case 137:
+#line 1619 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -2908,8 +2999,8 @@ case 132:
                                      ccode_line, vararg, NULL);
                                                                        ;
     break;}
-case 133:
-#line 1560 "parse.y"
+case 138:
+#line 1630 "parse.y"
 {
                        push_function(NO_SCOPE, OVERRIDE_METHOD, yyvsp[-8].id,
                                      yyvsp[-5].id, yyvsp[0].cbuf,
@@ -2917,8 +3008,8 @@ case 133:
                                      vararg, NULL);
                                                                        ;
     break;}
-case 134:
-#line 1566 "parse.y"
+case 139:
+#line 1636 "parse.y"
 {
                        if(the_scope == CLASS_SCOPE) {
                                yyerror(_("a method cannot be of class scope"));
@@ -2930,8 +3021,8 @@ case 134:
                                      vararg, NULL);
                                                                ;
     break;}
-case 135:
-#line 1576 "parse.y"
+case 140:
+#line 1646 "parse.y"
 {
                        if(strcmp(yyvsp[-4].id, "init")==0) {
                                push_init_arg(yyvsp[-2].id,FALSE);
@@ -2954,8 +3045,8 @@ case 135:
                        }
                                                ;
     break;}
-case 136:
-#line 1599 "parse.y"
+case 141:
+#line 1669 "parse.y"
 {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
@@ -2968,8 +3059,8 @@ case 136:
                        g_free(yyvsp[-1].id);
                                        ;
     break;}
-case 137:
-#line 1610 "parse.y"
+case 142:
+#line 1680 "parse.y"
 {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
@@ -2990,30 +3081,30 @@ case 137:
                        g_free(yyvsp[-1].id);
                                                ;
     break;}
-case 138:
-#line 1629 "parse.y"
+case 143:
+#line 1699 "parse.y"
 {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
                                        ;
     break;}
-case 139:
-#line 1635 "parse.y"
+case 144:
+#line 1705 "parse.y"
 { yyval.id = yyvsp[0].id; ;
     break;}
-case 140:
-#line 1636 "parse.y"
+case 145:
+#line 1706 "parse.y"
 {
                        yyval.id = (yyvsp[1].cbuf)->str;
                        g_string_free(yyvsp[1].cbuf, FALSE);
                                        ;
     break;}
-case 141:
-#line 1642 "parse.y"
+case 146:
+#line 1712 "parse.y"
 { vararg = FALSE; has_self = FALSE; ;
     break;}
-case 142:
-#line 1643 "parse.y"
+case 147:
+#line 1713 "parse.y"
 {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3026,8 +3117,8 @@ case 142:
                        }
                                                ;
     break;}
-case 143:
-#line 1654 "parse.y"
+case 148:
+#line 1724 "parse.y"
 {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3040,8 +3131,8 @@ case 143:
                        }
                                                ;
     break;}
-case 144:
-#line 1665 "parse.y"
+case 149:
+#line 1735 "parse.y"
 {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -3054,8 +3145,8 @@ case 144:
                        }
                                                ;
     break;}
-case 145:
-#line 1676 "parse.y"
+case 150:
+#line 1746 "parse.y"
 {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-2].id,"self")==0)
@@ -3067,8 +3158,8 @@ case 145:
                        }
                                        ;
     break;}
-case 146:
-#line 1686 "parse.y"
+case 151:
+#line 1756 "parse.y"
 {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-3].id,"self")==0)
@@ -3080,8 +3171,8 @@ case 146:
                        }
                                        ;
     break;}
-case 147:
-#line 1696 "parse.y"
+case 152:
+#line 1766 "parse.y"
 {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-2].id,"self")==0)
@@ -3093,40 +3184,40 @@ case 147:
                        }
                                        ;
     break;}
-case 148:
-#line 1706 "parse.y"
+case 153:
+#line 1776 "parse.y"
 { has_self = FALSE; ;
     break;}
-case 149:
-#line 1709 "parse.y"
+case 154:
+#line 1779 "parse.y"
 { vararg = TRUE; ;
     break;}
-case 150:
-#line 1710 "parse.y"
+case 155:
+#line 1780 "parse.y"
 { vararg = FALSE; ;
     break;}
-case 151:
-#line 1713 "parse.y"
+case 156:
+#line 1783 "parse.y"
 { ; ;
     break;}
-case 152:
-#line 1714 "parse.y"
+case 157:
+#line 1784 "parse.y"
 { ; ;
     break;}
-case 153:
-#line 1717 "parse.y"
+case 158:
+#line 1787 "parse.y"
 {
                        push_funcarg(yyvsp[0].id,NULL);
                                                                ;
     break;}
-case 154:
-#line 1720 "parse.y"
+case 159:
+#line 1790 "parse.y"
 {
                        push_funcarg(yyvsp[-1].id,yyvsp[0].id);
                                                                ;
     break;}
-case 155:
-#line 1723 "parse.y"
+case 160:
+#line 1793 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"check")!=0) {
                                yyerror(_("parse error"));
@@ -3136,8 +3227,8 @@ case 155:
                        push_funcarg(yyvsp[-4].id,NULL);
                                                                ;
     break;}
-case 156:
-#line 1731 "parse.y"
+case 161:
+#line 1801 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"check")!=0) {
                                yyerror(_("parse error"));
@@ -3147,16 +3238,16 @@ case 156:
                        push_funcarg(yyvsp[-5].id,yyvsp[-4].id);
                                                                ;
     break;}
-case 157:
-#line 1741 "parse.y"
+case 162:
+#line 1811 "parse.y"
 { ; ;
     break;}
-case 158:
-#line 1742 "parse.y"
+case 163:
+#line 1812 "parse.y"
 { ; ;
     break;}
-case 159:
-#line 1745 "parse.y"
+case 164:
+#line 1815 "parse.y"
 {
                        if(strcmp(yyvsp[0].id,"type")==0) {
                                Node *node = node_new (CHECK_NODE,
@@ -3175,8 +3266,8 @@ case 159:
                        g_free(yyvsp[0].id);
                                        ;
     break;}
-case 160:
-#line 1762 "parse.y"
+case 165:
+#line 1832 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", GT_CHECK,
@@ -3185,8 +3276,8 @@ case 160:
                        checks = g_list_append(checks,node);
                                        ;
     break;}
-case 161:
-#line 1769 "parse.y"
+case 166:
+#line 1839 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", LT_CHECK,
@@ -3195,8 +3286,8 @@ case 161:
                        checks = g_list_append(checks,node);
                                        ;
     break;}
-case 162:
-#line 1776 "parse.y"
+case 167:
+#line 1846 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", GE_CHECK,
@@ -3205,8 +3296,8 @@ case 162:
                        checks = g_list_append(checks,node);
                                        ;
     break;}
-case 163:
-#line 1783 "parse.y"
+case 168:
+#line 1853 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", LE_CHECK,
@@ -3215,8 +3306,8 @@ case 163:
                        checks = g_list_append(checks,node);
                                        ;
     break;}
-case 164:
-#line 1790 "parse.y"
+case 169:
+#line 1860 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", EQ_CHECK,
@@ -3225,8 +3316,8 @@ case 164:
                        checks = g_list_append(checks,node);
                                        ;
     break;}
-case 165:
-#line 1797 "parse.y"
+case 170:
+#line 1867 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", NE_CHECK,
@@ -3235,8 +3326,8 @@ case 165:
                        checks = g_list_append(checks,node);
                                        ;
     break;}
-case 166:
-#line 1806 "parse.y"
+case 171:
+#line 1876 "parse.y"
 {
                        Node *node = node_new (ENUMDEF_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3247,8 +3338,8 @@ case 166:
                        nodes = g_list_append (nodes, node);
                        ;
     break;}
-case 167:
-#line 1815 "parse.y"
+case 172:
+#line 1885 "parse.y"
 {
                        Node *node = node_new (ENUMDEF_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3259,16 +3350,16 @@ case 167:
                        nodes = g_list_append (nodes, node);
                        ;
     break;}
-case 168:
-#line 1826 "parse.y"
+case 173:
+#line 1896 "parse.y"
 {;;
     break;}
-case 169:
-#line 1827 "parse.y"
+case 174:
+#line 1897 "parse.y"
 {;;
     break;}
-case 170:
-#line 1830 "parse.y"
+case 175:
+#line 1900 "parse.y"
 {
                        Node *node;
                        char *num = yyvsp[0].id;
@@ -3290,8 +3381,8 @@ case 170:
                        enum_vals = g_list_append (enum_vals, node);
                        ;
     break;}
-case 171:
-#line 1850 "parse.y"
+case 176:
+#line 1920 "parse.y"
 {
                        Node *node;
 
@@ -3301,8 +3392,8 @@ case 171:
                        enum_vals = g_list_append (enum_vals, node);
        ;
     break;}
-case 172:
-#line 1860 "parse.y"
+case 177:
+#line 1930 "parse.y"
 {
                        Node *node = node_new (FLAGS_NODE,
                                               "ftype:steal", yyvsp[-1].id,
@@ -3313,8 +3404,8 @@ case 172:
                        nodes = g_list_append (nodes, node);
                        ;
     break;}
-case 173:
-#line 1869 "parse.y"
+case 178:
+#line 1939 "parse.y"
 {
                        Node *node = node_new (FLAGS_NODE,
                                               "ftype:steal", yyvsp[-1].id,
@@ -3325,20 +3416,20 @@ case 173:
                        nodes = g_list_append (nodes, node);
                        ;
     break;}
-case 174:
-#line 1880 "parse.y"
+case 179:
+#line 1950 "parse.y"
 {
                        flag_vals = g_list_append (flag_vals, yyvsp[0].id);
                ;
     break;}
-case 175:
-#line 1883 "parse.y"
+case 180:
+#line 1953 "parse.y"
 {
                        flag_vals = g_list_append (flag_vals, yyvsp[0].id);
                ;
     break;}
-case 176:
-#line 1888 "parse.y"
+case 181:
+#line 1958 "parse.y"
 {
                        Node *node = node_new (ERROR_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3349,8 +3440,8 @@ case 176:
                        nodes = g_list_append (nodes, node);
                        ;
     break;}
-case 177:
-#line 1897 "parse.y"
+case 182:
+#line 1967 "parse.y"
 {
                        Node *node = node_new (ERROR_NODE,
                                               "etype:steal", yyvsp[-1].id,
@@ -3361,35 +3452,35 @@ case 177:
                        nodes = g_list_append (nodes, node);
                        ;
     break;}
-case 178:
-#line 1908 "parse.y"
+case 183:
+#line 1978 "parse.y"
 {
                        error_vals = g_list_append (error_vals, yyvsp[0].id);
                ;
     break;}
-case 179:
-#line 1911 "parse.y"
+case 184:
+#line 1981 "parse.y"
 {
                        error_vals = g_list_append (error_vals, yyvsp[0].id);
                ;
     break;}
-case 180:
-#line 1917 "parse.y"
+case 185:
+#line 1987 "parse.y"
 { yyval.id = yyvsp[0].id; ;
     break;}
-case 181:
-#line 1918 "parse.y"
+case 186:
+#line 1988 "parse.y"
 {
                        yyval.id = g_strconcat("-",yyvsp[0].id,NULL);
                        g_free(yyvsp[0].id);
                                        ;
     break;}
-case 182:
-#line 1922 "parse.y"
+case 187:
+#line 1992 "parse.y"
 { yyval.id = yyvsp[0].id; ;
     break;}
-case 183:
-#line 1923 "parse.y"
+case 188:
+#line 1993 "parse.y"
 { yyval.id = yyvsp[0].id; ;
     break;}
 }
@@ -3614,5 +3705,5 @@ yyerrhandle:
     }
   return 1;
 }
-#line 1926 "parse.y"
+#line 1996 "parse.y"
 
index 7ad3af5d1bb1ae89fa7f2c7f3b57af0f5a7e8a3a..c7c0847e8d02a0333a72457cea04d80a8f59fa2e 100644 (file)
@@ -438,6 +438,28 @@ export_accessors (const char *var_name,
        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
 property_link_and_export (Node *node)
 {
@@ -475,23 +497,25 @@ property_link_and_export (Node *node)
                        get = g_strdup_printf("g_value_set_string (VAL, %s->%s);",
                                              root, prop->name);
                } else if (strcmp (prop->gtktype, "OBJECT") == 0) {
-                       set = g_strdup_printf("{ GtkObject *___old = (GtkObject *)%s->%s; "
-                                             "GtkObject *___new = (GtkObject *)gtk_value_get_object (VAL); "
-                                             "if (___new != NULL) { "
-                                               "gtk_object_ref (GTK_OBJECT (___new)); "
-                                               "%s->%s = GTK_OBJECT (___new); "
-                                             "} else { "
-                                               "%s->%s = NULL; "
-                                             "} "
+                       char *cast;
+                       if (prop->extra_gtktype != NULL) {
+                               cast = remove_sep (prop->extra_gtktype);
+                       } else {
+                               cast = "void";
+                       }
+                       set = g_strdup_printf("{ GObject *___old = (GObject *)%s->%s; "
+                                             "%s->%s = (%s *)g_value_dup_object (VAL); "
                                              "if (___old != NULL) { "
-                                               "gtk_object_unref (GTK_OBJECT (___old)); "
+                                               "g_object_unref (G_OBJECT (___old)); "
                                              "} "
                                              "}",
                                              root, prop->name,
                                              root, prop->name,
-                                             root, prop->name);
-                       get = g_strdup_printf("g_value_set_object (VAL, %s->%s);",
-                                             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) {
                        if (prop->extra_gtktype == NULL) {
                                error_print (GOB_ERROR, prop->line_no,
@@ -499,7 +523,7 @@ property_link_and_export (Node *node)
                                               "boxed_type not set"));
                        }
                        set = g_strdup_printf("{ gpointer ___old = (gpointer)%s->%s; "
-                                             "gpointer ___new = (gpointer)gtk_value_get_boxed (VAL); "
+                                             "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); "
@@ -516,20 +540,36 @@ property_link_and_export (Node *node)
                } 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);
 
-                       set = g_strdup_printf("%s->%s = %s (VAL);",
+                       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);
+                       }
+
+                       set = g_strdup_printf("%s->%s = %s%s (VAL);",
                                              root, prop->name,
+                                             getcast,
                                              get_func);
-                       get = g_strdup_printf("%s (VAL, %s->%s);",
+                       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,
@@ -1231,30 +1271,60 @@ param_spec_value: NICK '=' string               {
                          "ptype:steal", type,
                          NULL);
                  }
+       |       FLAGS_TYPE '=' TYPETOKEN        {
+               ensure_property ();
+               node_set ((Node *)property,
+                         "extra_gtktype:steal", $<id>3,
+                         NULL);
+                 }
        |       FLAGS_TYPE '=' TOKEN            {
                ensure_property ();
                node_set ((Node *)property,
                          "extra_gtktype:steal", $<id>3,
                          NULL);
                  }
+       |       ENUM_TYPE '=' TYPETOKEN         {
+               ensure_property ();
+               node_set ((Node *)property,
+                         "extra_gtktype:steal", $<id>3,
+                         NULL);
+                 }
        |       ENUM_TYPE '=' TOKEN             {
                ensure_property ();
                node_set ((Node *)property,
                          "extra_gtktype:steal", $<id>3,
                          NULL);
                  }
+       |       PARAM_TYPE '=' TYPETOKEN        {
+               ensure_property ();
+               node_set ((Node *)property,
+                         "extra_gtktype:steal", $<id>3,
+                         NULL);
+                 }
        |       PARAM_TYPE '=' TOKEN            {
                ensure_property ();
                node_set ((Node *)property,
                          "extra_gtktype:steal", $<id>3,
                          NULL);
                  }
+       |       BOXED_TYPE '=' TYPETOKEN        {
+               ensure_property ();
+               node_set ((Node *)property,
+                         "extra_gtktype:steal", $<id>3,
+                         NULL);
+                 }
        |       BOXED_TYPE '=' TOKEN            {
                ensure_property ();
                node_set ((Node *)property,
                          "extra_gtktype:steal", $<id>3,
                          NULL);
                  }
+       |       OBJECT_TYPE '=' TYPETOKEN       {
+               ensure_property ();
+               node_set ((Node *)property,
+                         "extra_gtktype:steal", $<id>3,
+                         NULL);
+                 }
        |       OBJECT_TYPE '=' TOKEN           {
                ensure_property ();
                node_set ((Node *)property,
index 67f25cf9e9fd998e6f453aa0f85bdd20da29b2b6..9dca3c87f57ef7994f3fc3813142ebf13a606ab7 100644 (file)
@@ -142,6 +142,27 @@ class Test:Object from G:Object
                set { self->_priv->a_property = g_value_get_char (VAL); }
                get { g_value_set_char (VAL, self->_priv->a_property); };
 
+       property OBJECT foobarblahllll1
+               (nick = "xxxxxxx1",
+                blurb = "yyyyyy",
+                object_type = Gtk:Button)
+               get { /* FOO1 */ };
+       property OBJECT foobarblahllll2
+               (nick = "xxxxxxx2",
+                blurb = "yyyyyy",
+                object_type = G:Object)
+               set { /* FOO2 */ };
+
+       private double dblnum;
+       property DOUBLE dblnum
+               (nick = _("dblnum"),
+                blurb = _("dblnum"),
+                minimum = 0.1,
+                maximum = 99.1,
+                default_value = 0.3,
+                flags = CONSTRUCT|CONSTRUCT_ONLY,
+                export,
+                link);
 
        private char *b_property;
        property STRING b_property
@@ -153,6 +174,23 @@ class Test:Object from G:Object
                 export,
                 link);
 
+       private Test:Object *objectproperty;
+       property OBJECT objectproperty (nick   = "object",
+                               blurb  = "obj property",
+                               object_type = Test:Object,
+                               link);
+
+       private Test:Enum enum_property;
+       property ENUM enum_property (nick   = "enumprop",
+                               blurb  = "enumprop",
+                               enum_type = Test:Enum,
+                               link);
+
+       private Some:Flags flags_property;
+       property ENUM flags_property (nick   = "flagsprop",
+                               blurb  = "flagsprop",
+                               flags_type = Some:Flags,
+                               link);
 
        private int j;
        public GObject * h;
index cc523ed529a4e0d7bbce4e62416adbcfa0d8a2bf..78eaaaa6c02b32b857677568bf81545d95895345 100644 (file)
@@ -310,3 +310,38 @@ setup_special_array(Class *c, gboolean *special_array)
 
        return any_special;
 }
+
+char *
+get_type (const Type *t, gboolean postfix_to_stars)
+{
+       char *s;
+       int i;
+       int extra;
+       GString *gs;
+
+       s = remove_sep(t->name);
+       gs = g_string_new(s);
+       g_free(s);
+
+       extra = 0;
+       if (postfix_to_stars) {
+               const char *p;
+               /*XXX: this is ugly perhaps we can do this whole postfix thing
+                 in a nicer way, we just count the number of '[' s and from
+                 that we deduce the number of dimensions, so that we can print
+                 that many stars */
+               for (p = t->postfix; p && *p; p++)
+                       if(*p == '[') extra++;
+       }
+       g_string_append_c(gs, ' ');
+
+       if (t->pointer != NULL) {
+               g_string_append (gs, t->pointer);
+               for (i=0; i < extra; i++)
+                       g_string_append_c (gs, '*');
+               g_string_append_c (gs, ' ');
+       }
+       
+       return g_string_free (gs, FALSE);
+}
+
index f80eafccc082b5cdcdf4cc1871e34b3c504155df..8551876fe2db535ea9542dcfa5149a7ce86d211d 100644 (file)
@@ -46,9 +46,10 @@ void separns_replace_sep(const char *base, char **ns, char **name, char r);
    namespace */
 char * make_pre_macro(const char *base,const  char *pre);
 
-/* get a name usable for a cast from a GTK+ type (without GTK_TYPE_)*/
+/* get a name usable for a cast from a GObject (without G_TYPE_)*/
 const char * get_cast (const char *type, gboolean simple_only);
 Type * get_tree_type (const char *type, gboolean simple_only);
+char * get_type (const Type *t, gboolean postfix_to_stars);
 
 enum {
        SPECIAL_2POINTER,