From f31590988781d77ff5249987801d03a986368ca2 Mon Sep 17 00:00:00 2001 From: George Lebl Date: Tue, 14 Dec 1999 09:38:00 -0800 Subject: [PATCH] Release 0.91.1 --- ChangeLog | 29 ++ Makefile.in | 2 +- NEWS | 8 + TODO | 0 configure | 2 +- configure.in | 2 +- doc/gob.1.in | 39 +- examples/my-person.gob | 1 + gob.spec | 5 +- gob.spec.in | 3 + src/Makefile.am | 2 +- src/Makefile.in | 2 +- src/lexer.c | 579 +++++++++++++++--------------- src/lexer.l | 5 + src/main.c | 192 +++++++--- src/out.c | 9 + src/parse.c | 793 ++++++++++++++++++++++------------------- src/parse.y | 47 ++- src/test.gob | 12 +- src/tree.c | 3 +- src/tree.h | 3 +- 21 files changed, 1001 insertions(+), 737 deletions(-) create mode 100644 TODO diff --git a/ChangeLog b/ChangeLog index 8fcd24a..03252a3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,32 @@ +Tue Dec 14 00:06:00 1999 George Lebl + + * Release 0.91.1 + +Mon Dec 13 23:25:06 1999 George Lebl + + * src/{main.c,out.c}: create a private header file and stick + the private structure definition inside it. Add option + --no-private-header for 0.91.0 behaviour and + --always-private-header to force private header creation + + * doc/gob.1.in: update WRT above changes + + * examples/my-person.gob: include the private header + + * NEWS: update + +Mon Dec 13 18:30:09 1999 George Lebl + + * src/main.c: don't print spurious #line's into the private + structure + + * src/{main.c,tree.[ch],lexer.l,parse.y}: implement support for + array types for data members and function arguments + +Mon Dec 13 00:48:47 1999 George Lebl + + * Release 0.91.0 + Sun Dec 12 22:55:12 1999 George Lebl * doc/gob.1.in: added paragraph noting that private data members diff --git a/Makefile.in b/Makefile.in index 3ae3ca7..5b29e9a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -86,7 +86,7 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = gob.spec DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \ -Makefile.am Makefile.in NEWS aclocal.m4 config.h.in configure \ +Makefile.am Makefile.in NEWS TODO aclocal.m4 config.h.in configure \ configure.in gob.spec.in install-sh missing mkinstalldirs diff --git a/NEWS b/NEWS index 7b870b1..20357b1 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,11 @@ +0.91.1 + * WARNING! slight change in the private stuff again, private + structure definition (_priv) is now in a private header file, + which you must include explicitly if you include the public + header file explicitly in your .gob file. 0.91.0 behaviour + is obtainable with the --no-private-header option + * added support for array data members and function arguments + 0.91.0 * WARNING! change the way private data members are done, now you need to access them through a private structure only available in the diff --git a/TODO b/TODO new file mode 100644 index 0000000..e69de29 diff --git a/configure b/configure index 8d5f67b..8253303 100755 --- a/configure +++ b/configure @@ -703,7 +703,7 @@ fi PACKAGE=gob -VERSION=0.91.0 +VERSION=0.91.1 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } diff --git a/configure.in b/configure.in index 96bfb36..f2ad73d 100644 --- a/configure.in +++ b/configure.in @@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.2) AC_INIT(src/tree.h) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(gob,0.91.0) +AM_INIT_AUTOMAKE(gob,0.91.1) if test -f ../NOINST_GOB ; then DOINSTGOB= diff --git a/doc/gob.1.in b/doc/gob.1.in index f18490d..9cada9a 100644 --- a/doc/gob.1.in +++ b/doc/gob.1.in @@ -41,7 +41,17 @@ Generate C++ code. Don't touch the generated header file unless it really changed, this avoids spurious rebuilds, but can confuse some make systems (automake in particular), so it is not enabled by default. - +.TP +.B --always-private-header +Always create a \fB-private.h\fR file, even if it would be empty. +Otherwise, it is only created when there are private data members in the class. +This option implicitly negates --no-private-header +.TP +.B --no-private-header +Never create a private header file. If we use any private datamembers, +define the private data structure at the point in the .c source where +the class definition begins. This option implicitly negates +--always-private-header .SH TYPENAMES .PP @@ -58,8 +68,13 @@ types. .PP The filenames are created from the typename. The words are separated by '-' and all in lower case. For example for an object named -"Gtk:New:Button", the files are gtk-new-button.c and gtk-new-button.h. -The header file is created to be human readable and to be used as a +"Gtk:New:Button", the files are \fBgtk-new-button.c\fR and +\fBgtk-new-button.h\fR. +If you are using C++ mode, the output .c file will in fact be a .cc file. +If you have any private data members, a private header file will also +be created, called \fB-private.h\fR (for the example above it +would be gtk-new-button-private.h). +The public header file is created to be human readable and to be used as a reference to the object. The .c source file is not created as a human readable source and is littered with #line statements, which make the compiler attempt to point you to the right line in your .gob file in @@ -96,6 +111,15 @@ source file. If you wish to include it somewhere else, put the include into some %{ %} section above the class definition, and gob will not include it automatically. This way you can avoid circular includes and control where in the file do you want to include the header. +.PP +If you made any data members private, gob will also create a source file +that will be called \fB-private.h\fR. Same rule as above applies +for this just as it does for the regular header file. If you do explicitly +include the regular header file, you should always include this private +header file below it. That is, if you use any private data members. If you +don't, the private header file automatically includes the public header file, +and thus the public header file will be indirectly included at the very top +of the file. .SH MAKING A NEW CLASS .PP @@ -145,9 +169,12 @@ where 'h' is the private data member (as in the above example): object->_priv->h = NULL; .fi -Note that the _priv structure is only accessible to C code blocks below or -inside the class definition in the .gob file. If you use it above, you will -get a 'dereferencing incomplete pointer type' error from the C compiler. +Note that the _priv structure is defined in the \fB-private.h\fR. +This file is automatically included if you don't include it yourself. You +should always explicitly include it if you explicitly also include the main +header file. In case you use the \fB--no-private-header\fR option, no +private header file is created and you can only access the _priv pointer +below the class definition in the .gob file. .PP The third type is an argument type. It is a named datamember which is one of the features of the GTK+ object system. You need to define a get diff --git a/examples/my-person.gob b/examples/my-person.gob index 516ee3e..abf1d01 100644 --- a/examples/my-person.gob +++ b/examples/my-person.gob @@ -1,6 +1,7 @@ %{ #include #include "my-person.h" +#include "my-person-private.h" %} class My:Person from Gtk:Object { diff --git a/gob.spec b/gob.spec index ad65ed9..764f38a 100644 --- a/gob.spec +++ b/gob.spec @@ -1,4 +1,4 @@ -%define ver 0.91.0 +%define ver 0.91.1 %define rel 1 %define prefix /usr @@ -19,6 +19,8 @@ from a single file which has inline C code so that you don't have to edit the generated files. Syntax is somewhat inspired by java and yacc. %changelog +* Tue Dec 14 1999 George Lebl +- added the examples dir to the %doc * Mon Aug 16 1999 George Lebl - added gob.spec.in file @@ -47,6 +49,7 @@ rm -rf $RPM_BUILD_ROOT %defattr(-, root, root) %doc README AUTHORS COPYING NEWS TODO ChangeLog +%doc examples %{prefix}/bin/* %{prefix}/man/man1/* diff --git a/gob.spec.in b/gob.spec.in index 3719afc..9f93d21 100644 --- a/gob.spec.in +++ b/gob.spec.in @@ -19,6 +19,8 @@ from a single file which has inline C code so that you don't have to edit the generated files. Syntax is somewhat inspired by java and yacc. %changelog +* Tue Dec 14 1999 George Lebl +- added the examples dir to the %doc * Mon Aug 16 1999 George Lebl - added gob.spec.in file @@ -47,6 +49,7 @@ rm -rf $RPM_BUILD_ROOT %defattr(-, root, root) %doc README AUTHORS COPYING NEWS TODO ChangeLog +%doc examples %{prefix}/bin/* %{prefix}/man/man1/* diff --git a/src/Makefile.am b/src/Makefile.am index 58a6157..fdd0dcd 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -28,7 +28,7 @@ gob_LDADD = \ BUILT_SOURCES = parse.h parse.c lexer.c -CLEANFILES += $(BUILT_SOURCES) gtk-weird-button.* +CLEANFILES += $(BUILT_SOURCES) gtk-weird-button.* gtk-weird-button-private.h EXTRA_DIST = test.gob diff --git a/src/Makefile.in b/src/Makefile.in index 00aff17..1b189c6 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -99,7 +99,7 @@ gob_LDADD = -lm $(GLIB_LIBS) @LEXLIB@ BUILT_SOURCES = parse.h parse.c lexer.c -CLEANFILES = $(BUILT_SOURCES) gtk-weird-button.* +CLEANFILES = $(BUILT_SOURCES) gtk-weird-button.* gtk-weird-button-private.h EXTRA_DIST = test.gob mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs diff --git a/src/lexer.c b/src/lexer.c index 5dadf6f..e500aae 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -284,80 +284,81 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); *yy_cp = '\0'; \ yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 67 -#define YY_END_OF_BUFFER 68 -static yyconst short int yy_acclist[340] = +#define YY_NUM_RULES 68 +#define YY_END_OF_BUFFER 69 +static yyconst short int yy_acclist[343] = { 0, - 68, 65, 67, 64, 65, 67, 1, 66, 67, 65, - 66, 67, 65, 67, 65, 67, 65, 67, 65, 67, - 13, 65, 67, 1, 14, 66, 67, 13, 65, 66, - 67, 13, 65, 67, 13, 65, 67, 32, 65, 67, - 1, 33, 66, 67, 32, 65, 66, 67, 25, 32, - 65, 67, 32, 65, 67, 32, 65, 67, 32, 65, - 67, 32, 65, 67, 30, 32, 65, 67, 31, 32, - 65, 67, 32, 65, 67, 32, 65, 67, 28, 65, - 67, 1, 29, 66, 67, 28, 65, 66, 67, 27, - 28, 65, 67, 28, 65, 67, 28, 65, 67, 65, - - 67, 65, 67, 60, 65, 67, 60, 65, 67, 60, - 65, 67, 60, 65, 67, 60, 65, 67, 61, 65, - 67, 65, 67, 65, 67, 58, 65, 67, 58, 65, - 67, 60, 65, 67, 60, 65, 67, 60, 65, 67, - 60, 65, 67, 60, 65, 67, 60, 65, 67, 60, - 65, 67, 60, 65, 67, 60, 65, 67, 60, 65, - 67, 60, 65, 67, 60, 65, 67, 62, 65, 67, - 63, 65, 67, 8, 16, 12, 9, 24, 17, 26, - 10, 60, 59, 60, 60, 60, 60, 58, 11, 58, - 58, 60, 60, 60, 60, 60, 60, 60, 60, 60, - - 60, 60, 60, 60, 60, 60, 60, 60, 60, 3, - 15, 22, 18, 20, 5, 6, 59, 60, 60, 60, - 60, 50, 58, 7, 58, 58, 60, 60, 60, 60, - 60, 60, 45, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 23, 19, 21, 60, - 60, 36, 60, 35, 60, 60, 48, 60, 60, 60, - 40, 60, 60, 43, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 37, 60, 34, 60, 60, - 49, 60, 60, 46, 60, 60, 60, 60, 60, 44, - 60, 60, 60, 60, 39, 60, 60, 60, 60, 60, - - 47, 60, 60, 60, 60, 51, 60, 55, 60, 41, - 60, 38, 60, 60, 60, 60, 60, 57, 60, 60, - 52, 60, 60, 54, 60, 60, 53, 60, 56, 60, - 42, 60, 60, 60, 4, 60, 2, 2, 60 + 69, 66, 68, 65, 66, 68, 1, 67, 68, 66, + 67, 68, 66, 68, 66, 68, 66, 68, 66, 68, + 13, 66, 68, 1, 14, 67, 68, 13, 66, 67, + 68, 13, 66, 68, 13, 66, 68, 32, 66, 68, + 1, 33, 67, 68, 32, 66, 67, 68, 25, 32, + 66, 68, 32, 66, 68, 32, 66, 68, 32, 66, + 68, 32, 66, 68, 30, 32, 66, 68, 31, 32, + 66, 68, 32, 66, 68, 32, 66, 68, 28, 66, + 68, 1, 29, 67, 68, 28, 66, 67, 68, 27, + 28, 66, 68, 28, 66, 68, 28, 66, 68, 66, + + 68, 66, 68, 60, 66, 68, 60, 66, 68, 60, + 66, 68, 60, 66, 68, 60, 66, 68, 62, 66, + 68, 66, 68, 66, 68, 58, 66, 68, 58, 66, + 68, 66, 68, 60, 66, 68, 60, 66, 68, 60, + 66, 68, 60, 66, 68, 60, 66, 68, 60, 66, + 68, 60, 66, 68, 60, 66, 68, 60, 66, 68, + 60, 66, 68, 60, 66, 68, 60, 66, 68, 63, + 66, 68, 64, 66, 68, 8, 16, 12, 9, 24, + 17, 26, 10, 60, 59, 60, 60, 60, 60, 58, + 11, 58, 58, 61, 60, 60, 60, 60, 60, 60, + + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 3, 15, 22, 18, 20, 5, 6, 59, + 60, 60, 60, 60, 50, 58, 7, 58, 58, 60, + 60, 60, 60, 60, 60, 45, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 23, + 19, 21, 60, 60, 36, 60, 35, 60, 60, 48, + 60, 60, 60, 40, 60, 60, 43, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 37, 60, + 34, 60, 60, 49, 60, 60, 46, 60, 60, 60, + 60, 60, 44, 60, 60, 60, 60, 39, 60, 60, + + 60, 60, 60, 47, 60, 60, 60, 60, 51, 60, + 55, 60, 41, 60, 38, 60, 60, 60, 60, 60, + 57, 60, 60, 52, 60, 60, 54, 60, 60, 53, + 60, 56, 60, 42, 60, 60, 60, 4, 60, 2, + 2, 60 } ; -static yyconst short int yy_accept[262] = +static yyconst short int yy_accept[266] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 7, 10, 13, 15, 17, 19, 21, 24, 28, 32, 35, 38, 41, 45, 49, 53, 56, 59, 62, 65, 69, 73, 76, 79, 82, 86, 90, 94, 97, 100, 102, 104, 107, 110, 113, - 116, 119, 122, 124, 126, 129, 132, 135, 138, 141, - 144, 147, 150, 153, 156, 159, 162, 165, 168, 171, - 174, 175, 175, 175, 175, 175, 176, 177, 177, 177, - 177, 177, 178, 178, 179, 179, 179, 180, 181, 182, - 182, 182, 183, 184, 185, 186, 187, 188, 188, 189, + 116, 119, 122, 124, 126, 129, 132, 134, 137, 140, + 143, 146, 149, 152, 155, 158, 161, 164, 167, 170, + 173, 176, 177, 177, 177, 177, 177, 178, 179, 179, + 179, 179, 179, 180, 180, 181, 181, 181, 182, 183, + 184, 184, 184, 185, 186, 187, 188, 189, 190, 190, - 190, 190, 190, 191, 191, 191, 192, 193, 194, 195, + 191, 192, 192, 192, 193, 193, 193, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - 206, 207, 208, 209, 210, 210, 211, 211, 211, 212, - 213, 213, 213, 213, 214, 215, 215, 216, 216, 216, - 217, 217, 218, 219, 220, 221, 222, 223, 224, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 235, - 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 247, 247, 248, 249, 250, 250, 251, 252, - 254, 256, 257, 259, 260, 261, 263, 264, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 278, - - 278, 279, 279, 280, 281, 283, 284, 286, 287, 288, - 289, 290, 292, 293, 294, 295, 297, 298, 299, 299, - 299, 300, 301, 303, 304, 305, 306, 308, 310, 312, - 314, 315, 316, 316, 316, 317, 318, 320, 321, 323, - 324, 326, 326, 326, 327, 329, 331, 333, 333, 333, - 334, 334, 334, 335, 335, 335, 336, 337, 338, 340, - 340 + 206, 207, 208, 209, 210, 211, 212, 213, 213, 214, + 214, 214, 215, 216, 216, 216, 216, 217, 218, 218, + 219, 219, 219, 220, 220, 221, 222, 223, 224, 225, + 226, 227, 227, 228, 229, 230, 230, 231, 232, 233, + 234, 235, 236, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 250, 250, 251, 252, + 253, 253, 254, 255, 257, 259, 260, 262, 263, 264, + 266, 267, 269, 270, 271, 272, 273, 274, 275, 276, + + 277, 278, 279, 281, 281, 282, 282, 283, 284, 286, + 287, 289, 290, 291, 292, 293, 295, 296, 297, 298, + 300, 301, 302, 302, 302, 303, 304, 306, 307, 308, + 309, 311, 313, 315, 317, 318, 319, 319, 319, 320, + 321, 323, 324, 326, 327, 329, 329, 329, 330, 332, + 334, 336, 336, 336, 337, 337, 337, 338, 338, 338, + 339, 340, 341, 343, 343 } ; static yyconst int yy_ec[256] = @@ -371,11 +372,11 @@ static yyconst int yy_ec[256] = 1, 17, 1, 1, 18, 18, 19, 18, 20, 21, 22, 23, 22, 22, 24, 22, 25, 22, 26, 22, 22, 27, 22, 28, 29, 22, 22, 22, 22, 22, - 1, 30, 1, 1, 22, 1, 31, 32, 33, 34, + 30, 31, 32, 1, 22, 1, 33, 34, 35, 36, - 35, 36, 37, 38, 39, 22, 22, 40, 41, 42, - 43, 44, 22, 45, 46, 47, 48, 49, 22, 50, - 22, 22, 51, 1, 52, 1, 1, 1, 1, 1, + 37, 38, 39, 40, 41, 22, 22, 42, 43, 44, + 45, 46, 22, 47, 48, 49, 50, 51, 22, 52, + 22, 22, 53, 1, 54, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -392,224 +393,228 @@ static yyconst int yy_ec[256] = 1, 1, 1, 1, 1 } ; -static yyconst int yy_meta[53] = +static yyconst int yy_meta[55] = { 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 4, 1, 1, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 1, - 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, + 1, 1, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 1, 1 + 6, 6, 1, 1 } ; -static yyconst short int yy_base[277] = +static yyconst short int yy_base[281] = { 0, - 0, 3, 9, 12, 35, 85, 19, 26, 137, 0, - 180, 0, 556, 557, 557, 557, 557, 8, 529, 514, - 3, 557, 557, 557, 542, 526, 557, 557, 557, 557, - 15, 39, 525, 0, 557, 557, 24, 498, 557, 557, - 557, 557, 523, 0, 44, 0, 533, 32, 12, 17, - 42, 557, 58, 50, 63, 69, 49, 59, 63, 27, - 69, 70, 80, 83, 85, 88, 86, 182, 557, 557, - 557, 544, 518, 514, 493, 557, 557, 535, 190, 534, - 533, 557, 537, 557, 194, 497, 557, 557, 557, 535, - 522, 521, 520, 89, 90, 184, 92, 524, 106, 557, - - 530, 188, 193, 224, 0, 233, 193, 93, 197, 202, - 203, 220, 207, 225, 99, 229, 233, 234, 237, 238, - 240, 242, 241, 243, 529, 557, 508, 484, 557, 557, - 521, 520, 519, 557, 557, 523, 557, 492, 521, 557, - 508, 507, 245, 244, 246, 247, 557, 257, 518, 557, - 264, 0, 250, 258, 259, 264, 268, 269, 505, 274, - 276, 277, 279, 280, 282, 284, 286, 287, 292, 289, - 291, 499, 472, 557, 557, 557, 477, 96, 293, 501, - 500, 297, 499, 295, 300, 498, 298, 497, 299, 301, - 302, 304, 303, 317, 308, 309, 320, 314, 496, 483, - - 557, 461, 183, 332, 493, 334, 492, 322, 338, 339, - 340, 491, 341, 344, 343, 490, 345, 348, 483, 469, - 349, 346, 487, 351, 357, 359, 486, 481, 478, 434, - 360, 353, 414, 380, 356, 361, 399, 365, 398, 367, - 397, 391, 407, 383, 392, 374, 369, 359, 387, 382, - 109, 394, 189, 95, 399, 557, 390, 557, 20, 557, - 417, 423, 429, 435, 441, 447, 449, 453, 459, 465, - 471, 475, 479, 485, 489, 494 + 0, 3, 9, 12, 36, 88, 26, 45, 142, 0, + 187, 0, 572, 573, 573, 573, 573, 8, 545, 528, + 2, 573, 573, 573, 558, 542, 573, 573, 573, 573, + 15, 13, 541, 0, 573, 573, 21, 512, 573, 573, + 573, 573, 539, 0, 34, 0, 549, 37, 11, 12, + 18, 573, 61, 45, 68, 73, 52, 57, 82, 62, + 64, 73, 85, 83, 86, 88, 91, 90, 189, 573, + 573, 573, 560, 534, 528, 507, 573, 573, 551, 197, + 550, 549, 573, 553, 573, 201, 511, 573, 573, 573, + 551, 538, 537, 536, 95, 103, 94, 190, 540, 194, + + 573, 546, 197, 202, 233, 0, 242, 245, 518, 21, + 203, 204, 211, 212, 224, 229, 238, 96, 234, 245, + 87, 248, 249, 250, 251, 253, 255, 544, 573, 523, + 497, 573, 573, 536, 535, 534, 573, 573, 538, 573, + 505, 536, 573, 523, 522, 102, 257, 252, 258, 573, + 262, 533, 573, 267, 0, 271, 272, 274, 275, 276, + 283, 279, 520, 286, 287, 289, 292, 293, 294, 296, + 298, 299, 301, 300, 302, 514, 485, 573, 573, 573, + 490, 304, 303, 516, 515, 312, 514, 305, 314, 513, + 313, 512, 316, 317, 324, 318, 322, 332, 315, 330, + + 331, 337, 511, 498, 573, 474, 99, 338, 508, 343, + 507, 345, 351, 346, 353, 506, 352, 357, 358, 505, + 361, 363, 498, 482, 362, 364, 502, 366, 367, 369, + 501, 500, 499, 498, 374, 370, 479, 468, 371, 376, + 446, 382, 440, 384, 413, 407, 422, 97, 408, 407, + 403, 380, 393, 386, 201, 397, 401, 186, 410, 573, + 402, 573, 17, 573, 429, 435, 441, 447, 453, 459, + 461, 465, 471, 477, 483, 487, 491, 497, 501, 506 } ; -static yyconst short int yy_def[277] = +static yyconst short int yy_def[281] = { 0, - 261, 261, 262, 262, 263, 263, 264, 264, 260, 9, - 9, 11, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 265, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 266, 260, 267, 268, 268, 268, 268, - 268, 260, 260, 260, 260, 260, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 260, 260, - 260, 269, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 270, 260, 260, 260, 260, 260, 260, 271, - 272, 268, 273, 268, 268, 268, 268, 260, 260, 260, - - 274, 260, 260, 260, 275, 260, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 269, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 270, 260, 260, 271, 260, - 272, 273, 268, 268, 268, 268, 260, 260, 274, 260, - 260, 275, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 260, 260, 260, 260, 260, 260, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 260, - - 260, 260, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 260, 260, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 260, 260, 268, 268, 268, 268, 268, 268, - 268, 260, 260, 268, 268, 268, 268, 260, 260, 268, - 260, 276, 268, 260, 276, 260, 268, 260, 268, 0, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260 + 265, 265, 266, 266, 267, 267, 268, 268, 264, 9, + 9, 11, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 269, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 270, 264, 271, 272, 272, 272, 272, + 272, 264, 264, 264, 264, 264, 264, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 264, + 264, 264, 273, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 274, 264, 264, 264, 264, 264, 264, + 275, 276, 272, 277, 272, 272, 272, 272, 264, 264, + + 264, 278, 264, 264, 264, 279, 264, 264, 264, 272, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 273, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 274, 264, + 264, 275, 264, 276, 277, 272, 272, 272, 272, 264, + 264, 278, 264, 264, 279, 264, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 264, 264, 264, 264, 264, + 264, 272, 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, + + 272, 272, 272, 264, 264, 264, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 264, 264, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 272, 264, 264, 272, 272, + 272, 272, 272, 272, 272, 264, 264, 272, 272, 272, + 272, 264, 264, 272, 264, 280, 272, 264, 280, 264, + 272, 264, 272, 0, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264 } ; -static yyconst short int yy_nxt[610] = +static yyconst short int yy_nxt[628] = { 0, - 260, 15, 16, 17, 15, 16, 17, 260, 260, 21, - 18, 23, 24, 18, 23, 24, 71, 25, 72, 78, - 25, 40, 41, 42, 19, 85, 93, 19, 40, 41, - 42, 93, 20, 26, 93, 20, 26, 28, 29, 30, - 75, 93, 31, 43, 79, 32, 93, 82, 44, 83, - 43, 95, 89, 76, 90, 44, 93, 94, 100, 33, - 101, 96, 86, 93, 34, 80, 81, 98, 111, 99, - 99, 99, 102, 93, 103, 103, 104, 93, 102, 97, - 106, 106, 106, 93, 93, 35, 36, 28, 29, 30, - 37, 38, 31, 107, 93, 32, 108, 93, 95, 93, - - 93, 109, 93, 93, 93, 110, 93, 93, 112, 33, - 93, 113, 105, 93, 34, 203, 143, 148, 148, 148, - 144, 258, 114, 154, 115, 119, 120, 122, 254, 117, - 146, 116, 118, 161, 121, 35, 36, 14, 15, 16, - 17, 14, 14, 14, 14, 14, 14, 45, 14, 14, - 14, 46, 14, 14, 47, 47, 47, 47, 47, 47, - 47, 48, 47, 47, 47, 47, 14, 47, 47, 49, - 47, 47, 50, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 51, 47, 47, 47, 52, 14, 53, - 54, 55, 56, 56, 131, 85, 93, 93, 93, 151, - - 151, 151, 102, 93, 103, 103, 104, 93, 257, 221, - 57, 93, 58, 59, 60, 61, 93, 93, 62, 63, - 123, 93, 64, 65, 124, 66, 145, 67, 68, 153, - 69, 70, 86, 102, 93, 104, 104, 104, 155, 93, - 132, 133, 102, 93, 106, 106, 106, 93, 93, 156, - 157, 93, 93, 159, 93, 93, 93, 93, 93, 93, - 93, 93, 158, 162, 93, 164, 160, 178, 148, 148, - 148, 163, 93, 93, 166, 151, 151, 151, 93, 165, - 168, 171, 93, 93, 167, 170, 180, 169, 93, 179, - 93, 93, 181, 93, 93, 185, 93, 182, 93, 187, - - 93, 93, 183, 93, 184, 93, 93, 93, 186, 93, - 188, 93, 93, 93, 93, 93, 93, 93, 93, 192, - 189, 190, 93, 93, 199, 194, 193, 191, 93, 196, - 197, 93, 210, 195, 93, 198, 93, 204, 181, 206, - 215, 205, 211, 208, 207, 209, 93, 213, 93, 212, - 216, 214, 93, 93, 93, 93, 217, 93, 93, 93, - 93, 218, 93, 93, 224, 93, 222, 93, 223, 235, - 93, 93, 227, 93, 93, 93, 225, 229, 232, 93, - 228, 93, 251, 93, 244, 226, 231, 236, 93, 230, - 238, 252, 241, 239, 240, 237, 93, 93, 256, 246, - - 247, 250, 252, 256, 93, 253, 93, 245, 249, 248, - 256, 93, 93, 93, 243, 256, 259, 14, 14, 14, - 14, 14, 14, 22, 22, 22, 22, 22, 22, 27, - 27, 27, 27, 27, 27, 39, 39, 39, 39, 39, - 39, 84, 242, 84, 84, 84, 84, 88, 93, 88, - 88, 88, 88, 91, 91, 92, 92, 92, 92, 125, - 125, 125, 125, 125, 125, 136, 136, 136, 136, 136, - 136, 139, 139, 139, 139, 139, 139, 141, 141, 141, - 141, 142, 142, 142, 142, 149, 149, 149, 149, 149, - 149, 152, 93, 152, 255, 93, 255, 255, 255, 255, - - 93, 93, 234, 233, 93, 93, 93, 93, 220, 219, - 93, 93, 93, 93, 93, 93, 202, 201, 200, 93, - 150, 93, 93, 140, 177, 137, 176, 175, 174, 173, - 172, 126, 150, 147, 93, 93, 93, 140, 138, 137, - 135, 134, 130, 129, 128, 127, 126, 93, 73, 87, - 73, 73, 77, 74, 73, 260, 13, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - - 260, 260, 260, 260, 260, 260, 260, 260, 260 + 264, 15, 16, 17, 15, 16, 17, 264, 264, 21, + 18, 23, 24, 18, 23, 24, 72, 25, 73, 79, + 25, 83, 86, 84, 19, 94, 94, 19, 40, 41, + 42, 94, 94, 26, 20, 94, 26, 20, 28, 29, + 30, 76, 90, 31, 91, 80, 32, 40, 41, 42, + 43, 94, 96, 101, 77, 102, 44, 98, 97, 157, + 33, 87, 95, 108, 108, 108, 34, 81, 82, 43, + 99, 94, 100, 100, 100, 44, 94, 103, 94, 104, + 104, 105, 103, 109, 107, 107, 107, 94, 35, 36, + 28, 29, 30, 37, 38, 31, 94, 94, 32, 94, + + 94, 94, 94, 110, 94, 94, 113, 114, 94, 94, + 94, 94, 33, 94, 115, 254, 94, 94, 34, 106, + 168, 111, 146, 96, 182, 225, 112, 117, 116, 118, + 122, 123, 165, 125, 120, 147, 119, 121, 148, 124, + 35, 36, 14, 15, 16, 17, 14, 14, 14, 14, + 14, 14, 45, 14, 14, 14, 46, 14, 14, 47, + 47, 47, 47, 47, 47, 47, 48, 47, 47, 47, + 47, 14, 14, 14, 47, 47, 49, 47, 47, 50, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 51, 47, 47, 47, 52, 14, 53, 54, 55, 56, + + 56, 134, 86, 94, 94, 151, 151, 151, 154, 154, + 154, 103, 262, 104, 104, 105, 57, 94, 94, 58, + 258, 59, 60, 61, 62, 94, 94, 63, 64, 126, + 149, 65, 66, 127, 67, 158, 68, 69, 94, 70, + 71, 87, 103, 94, 105, 105, 105, 159, 94, 135, + 136, 103, 94, 107, 107, 107, 108, 108, 108, 94, + 160, 161, 94, 94, 94, 94, 94, 94, 162, 94, + 166, 94, 94, 151, 151, 151, 109, 163, 154, 154, + 154, 164, 108, 108, 108, 167, 94, 170, 94, 94, + 94, 172, 169, 94, 184, 175, 171, 94, 173, 174, + + 94, 94, 109, 94, 183, 185, 94, 94, 94, 189, + 94, 191, 94, 94, 94, 94, 94, 94, 94, 94, + 187, 186, 188, 207, 192, 190, 94, 94, 94, 94, + 94, 94, 94, 193, 196, 194, 94, 203, 94, 198, + 197, 201, 195, 200, 94, 94, 94, 199, 202, 219, + 185, 94, 94, 209, 208, 210, 214, 94, 215, 94, + 94, 211, 212, 213, 217, 94, 94, 94, 218, 221, + 216, 94, 94, 220, 226, 94, 94, 94, 94, 227, + 94, 94, 239, 94, 94, 94, 222, 231, 94, 228, + 94, 229, 233, 232, 230, 236, 94, 256, 94, 248, + + 94, 260, 242, 255, 235, 243, 234, 240, 256, 257, + 244, 245, 241, 260, 260, 94, 94, 94, 250, 251, + 261, 94, 94, 253, 249, 252, 260, 94, 263, 14, + 14, 14, 14, 14, 14, 22, 22, 22, 22, 22, + 22, 27, 27, 27, 27, 27, 27, 39, 39, 39, + 39, 39, 39, 85, 94, 85, 85, 85, 85, 89, + 94, 89, 89, 89, 89, 92, 92, 93, 93, 93, + 93, 128, 128, 128, 128, 128, 128, 139, 139, 139, + 139, 139, 139, 142, 142, 142, 142, 142, 142, 144, + 144, 144, 144, 145, 145, 145, 145, 152, 152, 152, + + 152, 152, 152, 155, 247, 155, 259, 246, 259, 259, + 259, 259, 94, 94, 94, 94, 94, 238, 237, 94, + 94, 94, 94, 224, 223, 94, 94, 94, 94, 94, + 94, 206, 205, 204, 94, 153, 94, 94, 143, 181, + 140, 180, 179, 178, 177, 176, 129, 156, 153, 150, + 94, 94, 94, 143, 141, 140, 138, 137, 133, 132, + 131, 130, 129, 94, 74, 88, 74, 74, 78, 75, + 74, 264, 13, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264 } ; -static yyconst short int yy_chk[610] = +static yyconst short int yy_chk[628] = { 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 2, 1, 3, 3, 2, 4, 4, 18, 3, 18, 31, - 4, 7, 7, 7, 1, 37, 49, 2, 8, 8, - 8, 50, 1, 3, 259, 2, 4, 5, 5, 5, - 21, 60, 5, 7, 31, 5, 48, 32, 7, 32, - 8, 49, 45, 21, 45, 8, 51, 48, 54, 5, - 54, 50, 37, 57, 5, 31, 31, 53, 60, 53, - 53, 53, 55, 58, 55, 55, 55, 59, 56, 51, - 56, 56, 56, 61, 62, 5, 5, 6, 6, 6, - 6, 6, 6, 57, 63, 6, 58, 64, 58, 65, - - 67, 58, 66, 94, 95, 59, 97, 108, 61, 6, - 178, 62, 55, 115, 6, 178, 94, 99, 99, 99, - 95, 254, 63, 108, 64, 66, 66, 67, 251, 65, - 97, 64, 65, 115, 66, 6, 6, 9, 9, 9, + 4, 32, 37, 32, 1, 49, 50, 2, 7, 7, + 7, 263, 51, 3, 1, 110, 4, 2, 5, 5, + 5, 21, 45, 5, 45, 31, 5, 8, 8, 8, + 7, 48, 49, 54, 21, 54, 7, 51, 50, 110, + 5, 37, 48, 57, 57, 57, 5, 31, 31, 8, + 53, 58, 53, 53, 53, 8, 60, 55, 61, 55, + 55, 55, 56, 57, 56, 56, 56, 62, 5, 5, + 6, 6, 6, 6, 6, 6, 59, 64, 6, 63, + + 65, 121, 66, 58, 68, 67, 60, 61, 97, 95, + 118, 248, 6, 207, 62, 248, 146, 96, 6, 55, + 121, 59, 95, 59, 146, 207, 59, 64, 63, 65, + 67, 67, 118, 68, 66, 96, 65, 66, 97, 67, + 6, 6, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, - 11, 11, 11, 11, 79, 85, 68, 203, 96, 102, - - 102, 102, 103, 253, 103, 103, 103, 107, 253, 203, - 11, 109, 11, 11, 11, 11, 110, 111, 11, 11, - 68, 113, 11, 11, 68, 11, 96, 11, 11, 107, - 11, 11, 85, 104, 112, 104, 104, 104, 109, 114, - 79, 79, 106, 116, 106, 106, 106, 117, 118, 110, - 111, 119, 120, 113, 121, 123, 122, 124, 144, 143, - 145, 146, 112, 116, 153, 118, 114, 143, 148, 148, - 148, 117, 154, 155, 120, 151, 151, 151, 156, 119, - 122, 124, 157, 158, 121, 123, 145, 122, 160, 144, - 161, 162, 146, 163, 164, 156, 165, 153, 166, 158, - - 167, 168, 154, 170, 155, 171, 169, 179, 157, 184, - 160, 182, 187, 189, 185, 190, 191, 193, 192, 164, - 161, 162, 195, 196, 171, 166, 165, 163, 198, 168, - 169, 194, 191, 167, 197, 170, 208, 182, 179, 185, - 195, 184, 192, 189, 187, 190, 204, 194, 206, 193, - 196, 194, 209, 210, 211, 213, 197, 215, 214, 217, - 222, 198, 218, 221, 208, 224, 204, 232, 206, 221, - 235, 225, 211, 226, 231, 236, 209, 214, 218, 238, - 213, 240, 248, 247, 235, 210, 217, 222, 246, 215, - 225, 249, 232, 226, 231, 224, 250, 244, 252, 238, - - 240, 244, 249, 255, 257, 250, 245, 236, 243, 242, - 252, 241, 239, 237, 234, 255, 257, 261, 261, 261, - 261, 261, 261, 262, 262, 262, 262, 262, 262, 263, - 263, 263, 263, 263, 263, 264, 264, 264, 264, 264, - 264, 265, 233, 265, 265, 265, 265, 266, 230, 266, - 266, 266, 266, 267, 267, 268, 268, 268, 268, 269, - 269, 269, 269, 269, 269, 270, 270, 270, 270, 270, - 270, 271, 271, 271, 271, 271, 271, 272, 272, 272, - 272, 273, 273, 273, 273, 274, 274, 274, 274, 274, - 274, 275, 229, 275, 276, 228, 276, 276, 276, 276, - - 227, 223, 220, 219, 216, 212, 207, 205, 202, 200, - 199, 188, 186, 183, 181, 180, 177, 173, 172, 159, - 149, 142, 141, 139, 138, 136, 133, 132, 131, 128, - 127, 125, 101, 98, 93, 92, 91, 90, 86, 83, - 81, 80, 78, 75, 74, 73, 72, 47, 43, 38, - 33, 26, 25, 20, 19, 13, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - - 260, 260, 260, 260, 260, 260, 260, 260, 260 + 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, + + 11, 80, 86, 69, 98, 100, 100, 100, 103, 103, + 103, 104, 258, 104, 104, 104, 11, 111, 112, 11, + 255, 11, 11, 11, 11, 113, 114, 11, 11, 69, + 98, 11, 11, 69, 11, 111, 11, 11, 115, 11, + 11, 86, 105, 116, 105, 105, 105, 112, 119, 80, + 80, 107, 117, 107, 107, 107, 108, 108, 108, 120, + 113, 114, 122, 123, 124, 125, 148, 126, 115, 127, + 119, 147, 149, 151, 151, 151, 108, 116, 154, 154, + 154, 117, 156, 156, 156, 120, 157, 123, 158, 159, + 160, 125, 122, 162, 148, 127, 124, 161, 125, 126, + + 164, 165, 156, 166, 147, 149, 167, 168, 169, 160, + 170, 162, 171, 172, 174, 173, 175, 183, 182, 188, + 158, 157, 159, 182, 164, 161, 186, 191, 189, 199, + 193, 194, 196, 165, 168, 166, 197, 175, 195, 170, + 169, 173, 167, 172, 200, 201, 198, 171, 174, 199, + 183, 202, 208, 188, 186, 189, 195, 210, 196, 212, + 214, 191, 193, 194, 198, 213, 217, 215, 198, 201, + 197, 218, 219, 200, 208, 221, 225, 222, 226, 210, + 228, 229, 225, 230, 236, 239, 202, 215, 235, 212, + 240, 213, 218, 217, 214, 222, 242, 253, 244, 239, + + 254, 256, 229, 252, 221, 230, 219, 226, 253, 254, + 235, 236, 228, 256, 259, 257, 261, 251, 242, 244, + 257, 250, 249, 247, 240, 246, 259, 245, 261, 265, + 265, 265, 265, 265, 265, 266, 266, 266, 266, 266, + 266, 267, 267, 267, 267, 267, 267, 268, 268, 268, + 268, 268, 268, 269, 243, 269, 269, 269, 269, 270, + 241, 270, 270, 270, 270, 271, 271, 272, 272, 272, + 272, 273, 273, 273, 273, 273, 273, 274, 274, 274, + 274, 274, 274, 275, 275, 275, 275, 275, 275, 276, + 276, 276, 276, 277, 277, 277, 277, 278, 278, 278, + + 278, 278, 278, 279, 238, 279, 280, 237, 280, 280, + 280, 280, 234, 233, 232, 231, 227, 224, 223, 220, + 216, 211, 209, 206, 204, 203, 192, 190, 187, 185, + 184, 181, 177, 176, 163, 152, 145, 144, 142, 141, + 139, 136, 135, 134, 131, 130, 128, 109, 102, 99, + 94, 93, 92, 91, 87, 84, 82, 81, 79, 76, + 75, 74, 73, 47, 43, 38, 33, 26, 25, 20, + 19, 13, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264 } ; static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr; @@ -703,7 +708,7 @@ add_to_cbuf(char *s) #define CLASS_CODE_I 5 -#line 707 "lex.yy.c" +#line 712 "lex.yy.c" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -860,7 +865,7 @@ YY_DECL #line 74 "lexer.l" -#line 864 "lex.yy.c" +#line 869 "lex.yy.c" if ( yy_init ) { @@ -909,14 +914,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 >= 261 ) + if ( yy_current_state >= 265 ) 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] != 557 ); + while ( yy_base[yy_current_state] != 573 ); yy_find_action: yy_current_state = *--yy_state_ptr; @@ -1357,14 +1362,22 @@ YY_RULE_SETUP case 61: YY_RULE_SETUP #line 248 "lexer.l" +{ + yylval.id = g_strdup(yytext); + return ARRAY_DIM; + } + YY_BREAK +case 62: +YY_RULE_SETUP +#line 253 "lexer.l" { BEGIN(CLASS_CODE_I); return '{'; } YY_BREAK -case 62: +case 63: YY_RULE_SETUP -#line 252 "lexer.l" +#line 257 "lexer.l" { BEGIN(C_CODE); parenth_depth=1; @@ -1374,38 +1387,38 @@ YY_RULE_SETUP return '{'; } YY_BREAK -case 63: +case 64: YY_RULE_SETUP -#line 260 "lexer.l" +#line 265 "lexer.l" { BEGIN(INITIAL); return '}'; } YY_BREAK -case 64: +case 65: YY_RULE_SETUP -#line 265 "lexer.l" +#line 270 "lexer.l" ; /*ignore*/ YY_BREAK -case 65: +case 66: YY_RULE_SETUP -#line 267 "lexer.l" +#line 272 "lexer.l" { yylval.line = line_no; return yytext[0]; } YY_BREAK -case 66: +case 67: YY_RULE_SETUP -#line 272 "lexer.l" +#line 277 "lexer.l" ; /*ignore*/ YY_BREAK -case 67: +case 68: YY_RULE_SETUP -#line 273 "lexer.l" +#line 278 "lexer.l" ECHO; YY_BREAK -#line 1409 "lex.yy.c" +#line 1422 "lex.yy.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT): case YY_STATE_EOF(C_CODE): @@ -1700,7 +1713,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 >= 261 ) + if ( yy_current_state >= 265 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -1730,11 +1743,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 >= 261 ) + if ( yy_current_state >= 265 ) 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 == 260); + yy_is_jam = (yy_current_state == 264); if ( ! yy_is_jam ) *yy_state_ptr++ = yy_current_state; @@ -2292,4 +2305,4 @@ int main() return 0; } #endif -#line 273 "lexer.l" +#line 278 "lexer.l" diff --git a/src/lexer.l b/src/lexer.l index 320e25b..35e42cc 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -245,6 +245,11 @@ class { return TOKEN; } +(\[[0-9]*\])+ { + yylval.id = g_strdup(yytext); + return ARRAY_DIM; + } + \{ { BEGIN(CLASS_CODE_I); return '{'; diff --git a/src/main.c b/src/main.c index 07158f5..3a16554 100644 --- a/src/main.c +++ b/src/main.c @@ -60,14 +60,17 @@ static int arguments = 0; /* number of named arguments */ static int overrides = 0; /* number of override functions */ static int privates = 0; /* number of private data members */ -FILE *out; -FILE *outh; +FILE *out = NULL; +FILE *outh = NULL; +FILE *outph = NULL; gboolean no_touch_headers = FALSE; gboolean for_cpp = FALSE; gboolean exit_on_warn = FALSE; gboolean exit_on_error = TRUE; gboolean got_error = FALSE; +gboolean always_private_header = FALSE; +gboolean no_private_header = FALSE; void print_error(int is_warn, char *error,int line) @@ -182,15 +185,27 @@ make_bases(void) } static void -print_type(FILE *fp, Type *t) +print_type(FILE *fp, Type *t, gboolean postfix_to_stars) { char *s; int i; + int extra; + s = remove_sep(t->name); out_printf(fp,"%s ",s); g_free(s); + + extra = 0; + if(postfix_to_stars) { + 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 */ + for(p=t->postfix; p && *p; p++) + if(*p == '[') extra++; + } - for(i=0;istars;i++) + for(i=0;i<(t->stars+extra);i++) out_printf(fp,"*"); } @@ -202,7 +217,7 @@ print_method(FILE *fp, char *typeprefix, char *nameprefix, GList *li; out_printf(fp,"%s",typeprefix); - print_type(fp,m->mtype); + print_type(fp,m->mtype,TRUE); if(no_funcbase) out_printf(fp,"%s%s%s(", nameprefix,m->id,namepostfix); @@ -213,12 +228,15 @@ print_method(FILE *fp, char *typeprefix, char *nameprefix, if(m->args) { for(li=m->args;li;li=g_list_next(li)) { FuncArg *arg = li->data; - print_type(fp,arg->atype); + print_type(fp,arg->atype,FALSE); if(li->next) - out_printf(fp,"%s, ",arg->name); + out_printf(fp,"%s%s, ",arg->name, + arg->atype->postfix? + arg->atype->postfix:""); else - out_printf(fp,"%s",arg->name); - + out_printf(fp,"%s%s",arg->name, + arg->atype->postfix? + arg->atype->postfix:""); } if(m->vararg) out_printf(fp,", ..."); @@ -291,17 +309,13 @@ add_bad_hack_to_avoid_unused_warnings(Class *c) } static void -put_variable(Variable *v, FILE *fp, int priv) +put_variable(Variable *v, FILE *fp) { - if(v->scope == PRIVATE_SCOPE) { - if(!priv) return; - } else { - if(priv) return; - } - out_printf(fp,"\t"); - print_type(fp,v->vtype); - out_printf(fp,"%s;\n",v->id); + print_type(fp,v->vtype,FALSE); + out_printf(fp,"%s%s;\n",v->id, + v->vtype->postfix? + v->vtype->postfix:""); } static void @@ -368,7 +382,7 @@ make_func_arg(char *typename, int is_class, char *name) else tn = g_strdup(typename); - type = new_type(1,tn); + type = new_type(1,tn,NULL); node = new_funcarg((Type *)type,name,NULL); return g_list_prepend(NULL, node); } @@ -397,7 +411,7 @@ make_inits(Class *cl) } if(!got_class_init) { node = new_method(CLASS_INIT_METHOD, - (Type *)new_type(0,g_strdup("void")), + (Type *)new_type(0,g_strdup("void"),NULL), NULL,NULL,g_strdup("class_init"), make_func_arg(cl->otype,TRUE,g_strdup("c")), NULL, NULL,0,0,FALSE); @@ -405,7 +419,7 @@ make_inits(Class *cl) } if(!got_init) { node = new_method(INIT_METHOD, - (Type *)new_type(0,g_strdup("void")), + (Type *)new_type(0,g_strdup("void"),NULL), NULL,NULL,g_strdup("init"), make_func_arg(cl->otype,FALSE,g_strdup("o")), NULL, NULL,0,0,FALSE); @@ -439,7 +453,7 @@ make_destroy(Class *cl) } if(!got_destroy) { node = new_method(OVERRIDE_METHOD, - (Type *)new_type(0,g_strdup("void")), + (Type *)new_type(0,g_strdup("void"),NULL), g_strdup("Gtk:Object"), NULL,g_strdup("destroy"), make_func_arg("Gtk:Object",FALSE,g_strdup("o")), @@ -478,14 +492,14 @@ add_signal_prots(Method *m) g_hash_table_insert(marsh,m,s); out_printf(out,"\ntypedef "); - print_type(out,m->mtype); + print_type(out,m->mtype,TRUE); out_printf(out,"(*%s) (",s); for(li=m->args;li;li=g_list_next(li)) { FuncArg *arg = li->data; - print_type(out,arg->atype); - out_printf(out,", "); + print_type(out,arg->atype,TRUE); + out_printf(out,", "); } out_printf(out,"gpointer);\n"); @@ -511,7 +525,7 @@ add_signal_prots(Method *m) else { FuncArg *fa = ali->data; out_printf(out, ",\n\t\t("); - print_type(out,fa->atype); + print_type(out,fa->atype,TRUE); out_printf(out, ")GTK_VALUE_%s(args[%d])", (char *)li->data,i); } @@ -523,7 +537,7 @@ add_signal_prots(Method *m) } else { int i; out_printf(out, "\t%s rfunc;\n\t",s); - print_type(out,m->mtype); + print_type(out,m->mtype,TRUE); out_printf(out, " *retval;\n\n" "\trfunc = (%s)func;\n\n" "\tretval = GTK_RETLOC_%s(args[%d]);\n\n" @@ -540,7 +554,7 @@ add_signal_prots(Method *m) else { FuncArg *fa = ali->data; out_printf(out, ",\n\t\t("); - print_type(out,fa->atype); + print_type(out,fa->atype,TRUE); out_printf(out, ")GTK_VALUE_%s(args[%d])", (char *)li->data,i); } @@ -981,7 +995,7 @@ print_checks(Method *m, FuncArg *fa) out_printf(out,");\n"); else { out_printf(out,", ("); - print_type(out,m->mtype); + print_type(out,m->mtype,TRUE); out_printf(out,")%s);\n", m->onerror?m->onerror:"0"); } @@ -1080,7 +1094,7 @@ put_method(Method *m) } else { GList *li; out_printf(out,"\t"); - print_type(out,m->mtype); + print_type(out,m->mtype,TRUE); out_printf(out,"return_val;\n"); print_preconditions(m); out_printf(out,"\tgtk_signal_emit (GTK_OBJECT (%s),\n" @@ -1133,7 +1147,7 @@ put_method(Method *m) out_printf(out,");\n" "\telse\n" "\t\treturn ("); - print_type(out,m->mtype); + print_type(out,m->mtype,TRUE); out_printf(out,")(%s);\n}\n", m->onerror?m->onerror:"0"); } @@ -1442,7 +1456,7 @@ count_privates(Class *c) static void open_files(void) { - char *outfile,*outfileh; + char *outfile,*outfileh,*outfileph; if(!for_cpp) outfile = g_strconcat(filebase,".c",NULL); @@ -1452,6 +1466,13 @@ open_files(void) outfileh = g_strconcat("#gob#",filebase,".h#gob#",NULL); else outfileh = g_strconcat(filebase,".h",NULL); + + if((privates>0 || always_private_header) && + !no_private_header) + outfileph = g_strconcat(filebase,"-private.h",NULL); + else + outfileph = NULL; + out = fopen(outfile,"w"); if(!out) { @@ -1461,6 +1482,12 @@ open_files(void) if(!outh) { g_error("Cannot open outfile: %s",outfileh); } + if(outfileph) { + outph = fopen(outfileph,"w"); + if(!outph) { + g_error("Cannot open outfile: %s",outfileh); + } + } } static void @@ -1469,10 +1496,14 @@ generate_outfiles(void) char *p; GList *li; time_t curtime; + gboolean found_header; time(&curtime); out_printf(outh,"/* Generated by GOB (v%s)" " (do not edit directly) */\n\n",VERSION); + if(outph) + out_printf(outph,"/* Generated by GOB (v%s)" + " (do not edit directly) */\n\n",VERSION); out_printf(out,"/* Generated by GOB (v%s) on %s" " (do not edit directly) */\n\n",VERSION,ctime(&curtime)); @@ -1480,18 +1511,50 @@ generate_outfiles(void) g_strup(p); out_printf(outh,"#ifndef __%s_H__\n#define __%s_H__\n\n" "#include \n\n",p,p); + if(outph) + out_printf(outph,"#ifndef __%s_PRIVATE_H__\n" + "#define __%s_PRIVATE_H__\n\n" + "#include \"%s.h\"\n\n",p,p,filebase); g_free(p); - if(!for_cpp) + if(!for_cpp) { out_printf(outh,"#ifdef __cplusplus\n" "extern \"C\" {\n" "#endif /* __cplusplus */\n\n"); + if(outph) + out_printf(outph,"#ifdef __cplusplus\n" + "extern \"C\" {\n" + "#endif /* __cplusplus */\n\n"); + } p = g_strconcat(filebase,".h",NULL); - if(!g_list_find_custom(include_files,p,(GCompareFunc)strcmp)) + found_header = TRUE; + if(!g_list_find_custom(include_files,p,(GCompareFunc)strcmp)) { out_printf(out,"#include \"%s.h\"\n\n",filebase); + found_header = FALSE; + } g_free(p); + /* if we are creating a private header see if it was included */ + if(outph) { + p = g_strconcat(filebase,"-private.h",NULL); + if(!g_list_find_custom(include_files,p,(GCompareFunc)strcmp)) { + out_printf(out,"#include \"%s-private.h\"\n\n", + filebase); + if(found_header) + print_error(TRUE, + "Implicit private header include " + "added to top of\n" + "\tsource file, while public " + "header is at a custom location, " + "you should\n" + "\texplicitly include " + "the private header below the " + "public one.", 0); + } + g_free(p); + } + for(li=nodes;li;li=g_list_next(li)) { Node *node = li->data; if(node->type == CCODE_NODE) { @@ -1533,26 +1596,39 @@ generate_outfiles(void) typebase,ptypebase); for(l=c->nodes;l;l=g_list_next(l)) { Node *n = l->data; - if(n->type == VARIABLE_NODE) - put_variable((Variable *)n,outh,FALSE); + Variable *v = (Variable *)n; + if(n->type == VARIABLE_NODE && + v->scope == PUBLIC_SCOPE) + put_variable((Variable *)n,outh); } if(privates>0) out_printf(outh,"\t%sPrivate *_priv;\n",typebase); out_printf(outh,"};\n"); if(privates>0) { - out_printf(out,"struct _%sPrivate {\n", + FILE *outfp; + + /* if we are to stick this into the private + header, otherwise stick it directly into the + C file */ + if(outph) + outfp = outph; + else + outfp = out; + + out_printf(outfp,"struct _%sPrivate {\n", typebase); for(l=c->nodes;l;l=l->next) { Node *n = l->data; - if(n->type == VARIABLE_NODE) { - Variable *v = (Variable *)n; - out_addline_infile(out,v->line_no); - put_variable(v,out,TRUE); + Variable *v = (Variable *)n; + if(n->type == VARIABLE_NODE && + v->scope == PRIVATE_SCOPE) { + out_addline_infile(outfp,v->line_no); + put_variable(v,outfp); } } - out_addline_outfile(out); - out_printf(out,"};\n"); + out_addline_outfile(outfp); + out_printf(outfp,"};\n"); } out_printf(outh,"\ntypedef struct _%sClass %sClass;\n", @@ -1630,6 +1706,13 @@ generate_outfiles(void) "}\n" "#endif /* __cplusplus */\n"); out_printf(outh,"\n#endif"); + if(outph) { + if(!for_cpp) + out_printf(outph,"\n#ifdef __cplusplus\n" + "}\n" + "#endif /* __cplusplus */\n"); + out_printf(outph,"\n#endif"); + } } #if 0 @@ -1647,12 +1730,17 @@ print_help(void) { fprintf(stderr,"Gob version %s\n\n",VERSION); fprintf(stderr,"Options:\n" - "\t--help,-h,-? Display this help\n" - "\t--exit-on-warn,-w Exit with an error on warnings\n" - "\t--no-exit-on-warn Don't exit on warnings [default]\n" - "\t--for-cpp Create C++ files\n" - "\t--no-touch-headers Don't touch headers unless they " - "really changed\n"); + "\t--help,-h,-? Display this help\n" + "\t--exit-on-warn,-w Exit with an error on warnings\n" + "\t--no-exit-on-warn Don't exit on warnings [default]\n" + "\t--for-cpp Create C++ files\n" + "\t--no-touch-headers Don't touch headers unless they " + "really changed\n" + "\t--always-private-header Always create a private header " + "file, even if it would be empty\n" + "\t--no-private-header Don't create a private header, " + "put private structure inside c " + "file\n"); } static void @@ -1685,6 +1773,12 @@ parse_options(int argc, char *argv[]) for_cpp = TRUE; } else if(strcmp(argv[i],"--no-touch-headers")==0) { no_touch_headers = TRUE; + } else if(strcmp(argv[i],"--always-private-header")==0) { + no_private_header = FALSE; + always_private_header = TRUE; + } else if(strcmp(argv[i],"--no-private-header")==0) { + always_private_header = FALSE; + no_private_header = TRUE; } else if(strcmp(argv[i],"--")==0) { /*further arguments are files*/ no_opts = TRUE; diff --git a/src/out.c b/src/out.c index 6b3f48f..ee1d328 100644 --- a/src/out.c +++ b/src/out.c @@ -6,6 +6,7 @@ extern FILE *out; extern FILE *outh; +extern FILE *outph; extern gboolean for_cpp; @@ -14,6 +15,7 @@ extern char *filebase; int outline = 1; int outhline = 1; +int outphline = 1; static int strchrcnt(char *s, char c) @@ -39,6 +41,8 @@ out_printf(FILE *fp,char *format,...) outline += strchrcnt(s,'\n'); else if(fp == outh) outhline += strchrcnt(s,'\n'); + else if(fp == outph) + outphline += strchrcnt(s,'\n'); else g_assert_not_reached(); @@ -53,6 +57,8 @@ out_addline_infile(FILE *fp, int line) outline++; else if(fp == outh) outhline++; + else if(fp == outph) + outphline++; else g_assert_not_reached(); @@ -71,6 +77,9 @@ out_addline_outfile(FILE *fp) } else if(fp == outh) { outhline++; fprintf(fp,"#line %d \"%s.h\"\n",outhline,filebase); + } else if(fp == outph) { + outphline++; + fprintf(fp,"#line %d \"%s-private.h\"\n",outphline,filebase); } else g_assert_not_reached(); diff --git a/src/parse.c b/src/parse.c index 2316847..f8593b9 100644 --- a/src/parse.c +++ b/src/parse.c @@ -24,14 +24,15 @@ #define TOKEN 274 #define NUMBER 275 #define TYPETOKEN 276 -#define CCODE 277 -#define HCODE 278 -#define PUBLIC 279 -#define PRIVATE 280 -#define ARGUMENT 281 -#define VIRTUAL 282 -#define SIGNAL 283 -#define OVERRIDE 284 +#define ARRAY_DIM 277 +#define CCODE 278 +#define HCODE 279 +#define PUBLIC 280 +#define PRIVATE 281 +#define ARGUMENT 282 +#define VIRTUAL 283 +#define SIGNAL 284 +#define OVERRIDE 285 #line 21 "parse.y" @@ -96,11 +97,13 @@ yyerror(char *str) } static void -push_variable(char *name, int scope, int line_no) +push_variable(char *name, int scope, int line_no, char *postfix) { Node *var; Type *type = typestack->data; typestack = g_list_remove(typestack,typestack->data); + + type->postfix = postfix; var = new_variable(scope,type,name,line_no); class_nodes = g_list_append(class_nodes, var); @@ -117,7 +120,7 @@ push_function(int scope, char *oid, char *id, char *onerror, type = typestack->data; typestack = g_list_remove(typestack,typestack->data); } else { - type = (Type *)new_type(0,g_strdup("void")); + type = (Type *)new_type(0,g_strdup("void"),NULL); } /* a complicated and ugly test to figure out if we have @@ -143,11 +146,13 @@ push_function(int scope, char *oid, char *id, char *onerror, } static void -push_funcarg(char *name) +push_funcarg(char *name, char *postfix) { Node *node; Type *type = typestack->data; typestack = g_list_remove(typestack,typestack->data); + + type->postfix = postfix; node = new_funcarg(type,name,checks); checks = NULL; @@ -167,7 +172,7 @@ push_init_arg(char *name, int is_class) else tn = g_strdup(((Class *)class)->otype); - type = new_type(1,tn); + type = new_type(1,tn,NULL); node = new_funcarg((Type *)type,name,NULL); funcargs = g_list_prepend(funcargs, node); } @@ -178,7 +183,7 @@ push_self(char *id) Node *node; Node *type; GList *ch = NULL; - type = new_type(1,g_strdup(((Class *)class)->otype)); + type = new_type(1,g_strdup(((Class *)class)->otype),NULL); ch = g_list_append(ch,new_check(NULL_CHECK,NULL)); ch = g_list_append(ch,new_check(TYPE_CHECK,NULL)); node = new_funcarg((Type *)type,id,ch); @@ -186,7 +191,7 @@ push_self(char *id) } -#line 174 "parse.y" +#line 178 "parse.y" typedef union { char *id; GString *cbuf; @@ -208,26 +213,26 @@ typedef union { -#define YYFINAL 198 +#define YYFINAL 207 #define YYFLAG -32768 -#define YYNTBASE 45 +#define YYNTBASE 46 -#define YYTRANSLATE(x) ((unsigned)(x) <= 284 ? yytranslate[x] : 73) +#define YYTRANSLATE(x) ((unsigned)(x) <= 285 ? yytranslate[x] : 74) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 43, 2, 2, 2, 2, 2, 2, 34, - 35, 37, 2, 38, 44, 2, 2, 2, 40, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 33, 42, - 39, 41, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 44, 2, 2, 2, 2, 2, 2, 35, + 36, 38, 2, 39, 45, 2, 2, 2, 41, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 34, 43, + 40, 42, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 31, 36, 32, 2, 2, 2, 2, 2, + 2, 2, 32, 37, 33, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -243,73 +248,76 @@ static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30 + 27, 28, 29, 30, 31 }; #if YYDEBUG != 0 static const short yyprhs[] = { 0, 0, 4, 7, 10, 12, 15, 18, 20, 22, 27, - 32, 35, 38, 41, 43, 45, 47, 52, 57, 69, - 78, 82, 83, 87, 89, 91, 94, 96, 99, 102, - 105, 107, 110, 113, 115, 117, 119, 121, 124, 126, - 128, 131, 133, 136, 138, 140, 142, 144, 146, 149, - 151, 155, 159, 162, 165, 167, 172, 176, 178, 181, - 183, 193, 203, 212, 225, 235, 245, 251, 254, 258, - 261, 262, 264, 266, 270, 272, 276, 278, 282, 284, - 287, 294, 297, 299, 301, 304, 307, 311, 315, 319, - 323, 325, 328 + 32, 35, 38, 41, 43, 45, 47, 52, 58, 63, + 69, 81, 90, 94, 95, 99, 101, 103, 106, 108, + 111, 114, 117, 119, 122, 125, 127, 129, 131, 133, + 136, 138, 140, 143, 145, 148, 150, 152, 154, 156, + 158, 161, 163, 167, 171, 174, 177, 179, 184, 188, + 190, 193, 195, 205, 215, 224, 237, 247, 257, 263, + 266, 270, 273, 274, 276, 278, 282, 284, 288, 290, + 294, 296, 299, 303, 310, 318, 321, 323, 325, 328, + 331, 335, 339, 343, 347, 349, 352 }; -static const short yyrhs[] = { 46, - 47, 46, 0, 47, 46, 0, 46, 47, 0, 47, - 0, 46, 23, 0, 46, 24, 0, 23, 0, 24, - 0, 48, 31, 49, 32, 0, 3, 22, 4, 22, - 0, 49, 64, 0, 49, 50, 0, 49, 51, 0, - 64, 0, 50, 0, 51, 0, 25, 54, 20, 33, - 0, 26, 54, 20, 33, 0, 27, 52, 20, 20, - 20, 31, 23, 20, 31, 23, 33, 0, 27, 52, - 20, 20, 20, 31, 23, 33, 0, 34, 53, 35, - 0, 0, 20, 36, 53, 0, 20, 0, 55, 0, - 5, 55, 0, 56, 0, 56, 59, 0, 12, 57, - 0, 11, 57, 0, 57, 0, 12, 18, 0, 11, - 18, 0, 18, 0, 17, 0, 16, 0, 20, 0, - 58, 20, 0, 22, 0, 6, 0, 13, 15, 0, - 13, 0, 14, 15, 0, 14, 0, 15, 0, 9, - 0, 8, 0, 7, 0, 37, 59, 0, 37, 0, - 26, 20, 61, 0, 20, 26, 61, 0, 26, 61, - 0, 20, 61, 0, 61, 0, 20, 34, 62, 35, - 0, 62, 38, 20, 0, 20, 0, 31, 23, 0, - 33, 0, 29, 60, 54, 20, 34, 66, 35, 65, - 63, 0, 28, 26, 54, 20, 34, 66, 35, 65, - 63, 0, 28, 54, 20, 34, 66, 35, 65, 63, - 0, 30, 34, 22, 35, 54, 20, 34, 66, 35, - 65, 31, 23, 0, 25, 54, 20, 34, 66, 35, - 65, 31, 23, 0, 26, 54, 20, 34, 66, 35, - 65, 31, 23, 0, 20, 34, 20, 35, 63, 0, - 19, 72, 0, 19, 31, 23, 0, 39, 40, 0, - 0, 6, 0, 20, 0, 20, 38, 67, 0, 67, - 0, 68, 38, 10, 0, 68, 0, 68, 38, 69, - 0, 69, 0, 54, 20, 0, 54, 20, 34, 20, - 70, 35, 0, 70, 71, 0, 71, 0, 20, 0, - 41, 72, 0, 42, 72, 0, 41, 39, 72, 0, - 42, 39, 72, 0, 39, 39, 72, 0, 43, 39, - 72, 0, 21, 0, 44, 21, 0, 20, 0 +static const short yyrhs[] = { 47, + 48, 47, 0, 48, 47, 0, 47, 48, 0, 48, + 0, 47, 24, 0, 47, 25, 0, 24, 0, 25, + 0, 49, 32, 50, 33, 0, 3, 22, 4, 22, + 0, 50, 65, 0, 50, 51, 0, 50, 52, 0, + 65, 0, 51, 0, 52, 0, 26, 55, 20, 34, + 0, 26, 55, 20, 23, 34, 0, 27, 55, 20, + 34, 0, 27, 55, 20, 23, 34, 0, 28, 53, + 20, 20, 20, 32, 24, 20, 32, 24, 34, 0, + 28, 53, 20, 20, 20, 32, 24, 34, 0, 35, + 54, 36, 0, 0, 20, 37, 54, 0, 20, 0, + 56, 0, 5, 56, 0, 57, 0, 57, 60, 0, + 12, 58, 0, 11, 58, 0, 58, 0, 12, 18, + 0, 11, 18, 0, 18, 0, 17, 0, 16, 0, + 20, 0, 59, 20, 0, 22, 0, 6, 0, 13, + 15, 0, 13, 0, 14, 15, 0, 14, 0, 15, + 0, 9, 0, 8, 0, 7, 0, 38, 60, 0, + 38, 0, 27, 20, 62, 0, 20, 27, 62, 0, + 27, 62, 0, 20, 62, 0, 62, 0, 20, 35, + 63, 36, 0, 63, 39, 20, 0, 20, 0, 32, + 24, 0, 34, 0, 30, 61, 55, 20, 35, 67, + 36, 66, 64, 0, 29, 27, 55, 20, 35, 67, + 36, 66, 64, 0, 29, 55, 20, 35, 67, 36, + 66, 64, 0, 31, 35, 22, 36, 55, 20, 35, + 67, 36, 66, 32, 24, 0, 26, 55, 20, 35, + 67, 36, 66, 32, 24, 0, 27, 55, 20, 35, + 67, 36, 66, 32, 24, 0, 20, 35, 20, 36, + 64, 0, 19, 73, 0, 19, 32, 24, 0, 40, + 41, 0, 0, 6, 0, 20, 0, 20, 39, 68, + 0, 68, 0, 69, 39, 10, 0, 69, 0, 69, + 39, 70, 0, 70, 0, 55, 20, 0, 55, 20, + 23, 0, 55, 20, 35, 20, 71, 36, 0, 55, + 20, 23, 35, 20, 71, 36, 0, 71, 72, 0, + 72, 0, 20, 0, 42, 73, 0, 43, 73, 0, + 42, 40, 73, 0, 43, 40, 73, 0, 40, 40, + 73, 0, 44, 40, 73, 0, 21, 0, 45, 21, + 0, 20, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, - 193, 194, 195, 196, 199, 203, 207, 211, 217, 224, - 229, 230, 231, 232, 233, 234, 237, 240, 244, 273, - 299, 300, 303, 306, 312, 313, 321, 325, 332, 335, - 338, 341, 344, 347, 350, 353, 356, 359, 363, 366, - 371, 374, 377, 380, 383, 388, 391, 394, 399, 400, - 403, 415, 427, 430, 442, 447, 452, 455, 460, 461, - 465, 475, 485, 495, 501, 506, 511, 532, 533, 537, - 538, 541, 542, 553, 563, 566, 567, 570, 571, 574, - 577, 587, 588, 591, 604, 608, 612, 616, 620, 624, - 630, 631, 635 + 197, 198, 199, 200, 203, 207, 211, 215, 221, 228, + 233, 234, 235, 236, 237, 238, 241, 244, 247, 250, + 254, 283, 309, 310, 313, 316, 322, 323, 331, 335, + 342, 345, 348, 351, 354, 357, 360, 363, 366, 369, + 373, 376, 381, 384, 387, 390, 393, 398, 401, 404, + 409, 410, 413, 425, 437, 440, 452, 457, 462, 465, + 470, 471, 475, 485, 495, 505, 511, 516, 521, 542, + 543, 547, 548, 551, 552, 563, 573, 576, 577, 580, + 581, 584, 587, 590, 598, 608, 609, 612, 625, 629, + 633, 637, 641, 645, 651, 652, 656 }; #endif @@ -319,161 +327,165 @@ static const short yyrline[] = { 0, static const char * const yytname[] = { "$","error","$undefined.","CLASS", "FROM","CONST","VOID","STRUCT","UNION","ENUM","THREEDOTS","SIGNED","UNSIGNED", "LONG","SHORT","INT","FLOAT","DOUBLE","CHAR","ONERROR","TOKEN","NUMBER","TYPETOKEN", -"CCODE","HCODE","PUBLIC","PRIVATE","ARGUMENT","VIRTUAL","SIGNAL","OVERRIDE", -"'{'","'}'","';'","'('","')'","'|'","'*'","','","'='","'1'","'>'","'<'","'!'", -"'-'","prog","ccodes","class","classdec","classcode","variable","argument","argflags", -"flaglist","type","type1","type2","integer","tspecifier","stars","fullsigtype", -"sigtype","tokenlist","codenocode","method","onerror","funcargs","arglist","arglist1", -"arg","checklist","check","numtok", NULL +"ARRAY_DIM","CCODE","HCODE","PUBLIC","PRIVATE","ARGUMENT","VIRTUAL","SIGNAL", +"OVERRIDE","'{'","'}'","';'","'('","')'","'|'","'*'","','","'='","'1'","'>'", +"'<'","'!'","'-'","prog","ccodes","class","classdec","classcode","variable", +"argument","argflags","flaglist","type","type1","type2","integer","tspecifier", +"stars","fullsigtype","sigtype","tokenlist","codenocode","method","onerror", +"funcargs","arglist","arglist1","arg","checklist","check","numtok", NULL }; #endif static const short yyr1[] = { 0, - 45, 45, 45, 45, 46, 46, 46, 46, 47, 48, - 49, 49, 49, 49, 49, 49, 50, 50, 51, 51, + 46, 46, 46, 46, 47, 47, 47, 47, 48, 49, + 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 52, 52, 53, 53, 54, 54, 55, 55, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 57, 57, 57, 57, 57, 58, 58, 58, 59, 59, - 60, 60, 60, 60, 60, 61, 62, 62, 63, 63, - 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, - 65, 66, 66, 66, 66, 67, 67, 68, 68, 69, - 69, 70, 70, 71, 71, 71, 71, 71, 71, 71, - 72, 72, 72 + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 58, 58, 58, 58, 58, 59, 59, 59, + 60, 60, 61, 61, 61, 61, 61, 62, 63, 63, + 64, 64, 65, 65, 65, 65, 65, 65, 65, 66, + 66, 66, 66, 67, 67, 67, 67, 68, 68, 69, + 69, 70, 70, 70, 70, 71, 71, 72, 72, 72, + 72, 72, 72, 72, 73, 73, 73 }; static const short yyr2[] = { 0, 3, 2, 2, 1, 2, 2, 1, 1, 4, 4, - 2, 2, 2, 1, 1, 1, 4, 4, 11, 8, - 3, 0, 3, 1, 1, 2, 1, 2, 2, 2, - 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, - 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, - 3, 3, 2, 2, 1, 4, 3, 1, 2, 1, - 9, 9, 8, 12, 9, 9, 5, 2, 3, 2, - 0, 1, 1, 3, 1, 3, 1, 3, 1, 2, - 6, 2, 1, 1, 2, 2, 3, 3, 3, 3, - 1, 2, 1 + 2, 2, 2, 1, 1, 1, 4, 5, 4, 5, + 11, 8, 3, 0, 3, 1, 1, 2, 1, 2, + 2, 2, 1, 2, 2, 1, 1, 1, 1, 2, + 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, + 2, 1, 3, 3, 2, 2, 1, 4, 3, 1, + 2, 1, 9, 9, 8, 12, 9, 9, 5, 2, + 3, 2, 0, 1, 1, 3, 1, 3, 1, 3, + 1, 2, 3, 6, 7, 2, 1, 1, 2, 2, + 3, 3, 3, 3, 1, 2, 1 }; static const short yydefact[] = { 0, 0, 7, 8, 0, 4, 0, 0, 5, 6, 3, - 2, 0, 0, 1, 0, 0, 0, 22, 0, 0, - 0, 0, 15, 16, 14, 10, 0, 0, 40, 48, - 47, 46, 0, 0, 42, 44, 45, 36, 35, 34, - 37, 39, 0, 25, 27, 31, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 55, 0, 9, 12, 13, - 11, 0, 26, 33, 30, 32, 29, 41, 43, 0, - 50, 28, 38, 0, 24, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 53, 0, 0, 0, 17, 0, - 49, 18, 0, 0, 21, 0, 0, 0, 52, 58, - 0, 51, 0, 0, 0, 60, 67, 40, 37, 0, - 0, 75, 77, 79, 0, 23, 0, 0, 0, 56, - 0, 0, 0, 59, 0, 80, 71, 0, 71, 0, - 0, 71, 57, 0, 0, 74, 0, 0, 0, 0, - 76, 78, 0, 0, 71, 0, 71, 0, 0, 93, - 91, 0, 0, 68, 70, 0, 0, 0, 20, 0, - 63, 0, 0, 84, 0, 0, 0, 0, 0, 83, - 69, 92, 65, 66, 0, 62, 61, 71, 0, 0, - 85, 0, 86, 0, 81, 82, 0, 0, 89, 87, - 88, 90, 19, 0, 64, 0, 0, 0 + 2, 0, 0, 1, 0, 0, 0, 24, 0, 0, + 0, 0, 15, 16, 14, 10, 0, 0, 42, 50, + 49, 48, 0, 0, 44, 46, 47, 38, 37, 36, + 39, 41, 0, 27, 29, 33, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 57, 0, 9, 12, 13, + 11, 0, 28, 35, 32, 34, 31, 43, 45, 0, + 52, 30, 40, 0, 26, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 55, 0, 0, 0, 0, 17, + 0, 51, 0, 19, 0, 0, 23, 0, 0, 0, + 54, 60, 0, 53, 0, 0, 0, 62, 69, 18, + 42, 39, 0, 0, 77, 79, 81, 20, 0, 25, + 0, 0, 0, 58, 0, 0, 0, 61, 0, 82, + 73, 0, 73, 0, 0, 73, 59, 0, 0, 76, + 83, 0, 0, 0, 0, 78, 80, 0, 0, 73, + 0, 73, 0, 0, 0, 97, 95, 0, 0, 70, + 72, 0, 0, 0, 22, 0, 65, 0, 0, 0, + 88, 0, 0, 0, 0, 0, 87, 71, 96, 67, + 68, 0, 64, 63, 73, 0, 0, 0, 89, 0, + 90, 0, 84, 86, 0, 0, 85, 93, 91, 92, + 94, 21, 0, 66, 0, 0, 0 }; -static const short yydefgoto[] = { 196, - 4, 5, 6, 22, 23, 24, 50, 76, 110, 44, - 45, 46, 47, 72, 55, 56, 101, 107, 25, 140, - 111, 112, 113, 114, 169, 170, 154 +static const short yydefgoto[] = { 205, + 4, 5, 6, 22, 23, 24, 50, 76, 113, 44, + 45, 46, 47, 72, 55, 56, 103, 109, 25, 145, + 114, 115, 116, 117, 176, 177, 160 }; -static const short yypact[] = { 21, - -18,-32768,-32768, 68, 66, 20, 54,-32768,-32768, 66, - 155, 171, 0, 155, 48, 116, 116, 52, 61, -14, - 59, 160,-32768,-32768,-32768,-32768, 29, 151,-32768,-32768, --32768,-32768, 81, 189, 111, 120,-32768,-32768,-32768,-32768, --32768,-32768, 117,-32768, 64,-32768, 124, 133, 135, 152, - 116, 154, 150, 163, 116,-32768, 186,-32768,-32768,-32768, --32768, 158,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 148, - 64,-32768,-32768, 161, 173, 175, 191, 192, 179, 180, - 195, 196,-32768, 28,-32768, 197, 183, 86,-32768, 134, --32768,-32768, 134, 135,-32768, 199, 187, 134,-32768,-32768, - -22,-32768, 188, 116, 200,-32768,-32768, 185, 18, 204, - 190,-32768, 193,-32768, 194,-32768, 201, 134, 198,-32768, - 206, 134, 207,-32768, 116, 202, 41, 98, 41, 205, - 203, 41,-32768, 208, 210,-32768, 214, -6, 209, 211, --32768,-32768, 215, 26, 41, 86, 41, 134, 22,-32768, --32768, 212, 216,-32768,-32768, 217, 218, 219,-32768, 86, --32768, 86, 213,-32768, 220, -3, 8, 221, -9,-32768, --32768,-32768,-32768,-32768, 222,-32768,-32768, 41, -1, -1, --32768, -1,-32768, -1,-32768,-32768, 223, 224,-32768,-32768, --32768,-32768,-32768, 228,-32768, 230, 239,-32768 +static const short yypact[] = { 3, + 47,-32768,-32768, 70, 169, 94, 75,-32768,-32768, 169, + 182, 171, 79, 182, 100, 125, 125, 109, 69, 77, + 111, 159,-32768,-32768,-32768,-32768, 108, 160,-32768,-32768, +-32768,-32768, 190, 196, 138, 147,-32768,-32768,-32768,-32768, +-32768,-32768, 144,-32768, 132,-32768, 163, 193, 197, 198, + 125, 199, 32, 200, 125,-32768, 194,-32768,-32768,-32768, +-32768, 145,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 65, + 132,-32768,-32768, 161, 184, 186, 203, 204, 191, 192, + 205, 208,-32768, 26,-32768, 209, 195, 76, 201,-32768, + 143,-32768, 202,-32768, 143, 197,-32768, 210, 206, 143, +-32768,-32768, 66,-32768, 207, 125, 213,-32768,-32768,-32768, + 211, 176, 212, 214,-32768, 215,-32768,-32768, 216,-32768, + 217, 143, 219,-32768, 218, 143, 220,-32768, 125, 21, + -6, 107, -6, 221, 222, -6,-32768, 223, 225,-32768, + 226, 224, -9, 227, 230,-32768,-32768, 231, 29, -6, + 76, -6, 143, 228, 28,-32768,-32768, 229, 235,-32768, +-32768, 233, 240, 234,-32768, 76,-32768, 76, 236, 28, +-32768, 237, -2, 5, 238, 11,-32768,-32768,-32768,-32768, +-32768, 241,-32768,-32768, -6, 22, -4, -4,-32768, -4, +-32768, -4,-32768,-32768, 239, 242,-32768,-32768,-32768,-32768, +-32768,-32768, 243,-32768, 246, 251,-32768 }; static const short yypgoto[] = {-32768, - 45, 243,-32768,-32768, 231, 232,-32768, 164, -16, 229, --32768, 172,-32768, 181,-32768, -44,-32768, 15, 240, -124, - -91, 136,-32768, 137,-32768, 94, -82 + 93, 265,-32768,-32768, 248, 249,-32768, 137, -16, 247, +-32768, -13,-32768, 168,-32768, -44,-32768, -136, 254, -128, + -93, 105,-32768, 148, 73, -172, -81 }; -#define YYLAST 265 +#define YYLAST 280 static const short yytable[] = { 43, - 48, 115, 52, 7, 143, 53, 119, 146, 83, 85, - 164, 54, 120, 150, 151, 121, 150, 151, 150, 151, - 160, 26, 162, 1, 152, 185, 131, 150, 151, 165, - 134, 166, 167, 168, 78, 180, 99, 153, 86, 102, - 153, 164, 153, 2, 3, 158, 182, 80, 62, 11, - 12, 153, -73, 188, 14, 125, 163, 13, 159, 138, - 165, 82, 166, 167, 168, 28, 29, 30, 31, 32, - 1, 33, 34, 35, 36, 37, 38, 39, 40, 139, - 41, 27, 42, 181, 183, 49, 51, 123, 2, 3, - 8, 9, 57, 35, 36, 37, 189, 190, 64, 191, - 71, 192, 28, 29, 30, 31, 32, 141, 33, 34, - 35, 36, 37, 38, 39, 40, 105, 41, 106, 42, - 28, 29, 30, 31, 32, 68, 33, 34, 35, 36, - 37, 38, 39, 40, 69, 41, 70, 42, 28, 108, - 30, 31, 32, 73, 33, 34, 35, 36, 37, 38, - 39, 40, 74, 109, 75, 42, 29, 30, 31, 32, - 161, 33, 34, 35, 36, 37, 38, 39, 40, 80, - 41, 77, 42, 79, 176, 81, 177, 8, 9, 15, - 89, 90, 84, 82, 16, 17, 18, 19, 20, 21, - 15, 58, 88, 92, 93, 16, 17, 18, 19, 20, - 21, 35, 36, 37, 65, 67, 66, 87, 94, 95, - 96, 97, 98, 82, 80, 100, 103, 104, 117, -72, - 118, 122, 124, 126, 127, 133, 135, 144, 129, 197, - 128, 130, 132, 149, 171, 137, 172, 145, 198, 173, - 174, 156, 147, 148, 187, 157, 10, 178, 155, 175, - 195, 91, 59, 60, 194, 193, 63, 116, 179, 184, - 136, 61, 186, 0, 142 + 48, 119, 52, 194, 148, 1, 123, 151, 83, 85, + 156, 157, 143, 194, 167, 156, 157, 156, 157, 65, + 67, 166, 158, 168, 156, 157, 2, 3, 135, 183, + 171, 184, 138, 144, 78, 159, 101, 188, 86, 104, + 159, 171, 159, 141, 190, 80, 193, 171, 164, 159, + 172, 80, 173, 174, 175, 142, 196, 197, 81, 169, + 82, 172, 165, 173, 174, 175, 82, 172, 7, 173, + 174, 175, 1, 28, 29, 30, 31, 32, 13, 33, + 34, 35, 36, 37, 38, 39, 40, 89, 41, 127, + 42, 189, 191, 8, 9, 51, 53, 11, 90, 91, + 26, 124, 14, 54, 125, 198, 199, 107, 200, 108, + 201, 28, 29, 30, 31, 32, 146, 33, 34, 35, + 36, 37, 38, 39, 40, 12, 41, 62, 42, 28, + 29, 30, 31, 32, 27, 33, 34, 35, 36, 37, + 38, 39, 40, 49, 41, 57, 42, 28, 111, 30, + 31, 32, 68, 33, 34, 35, 36, 37, 38, 39, + 40, 69, 112, 70, 42, 29, 30, 31, 32, 71, + 33, 34, 35, 36, 37, 38, 39, 40, 15, 41, + 88, 42, 73, 93, 16, 17, 18, 19, 20, 21, + 15, 58, 2, 3, 94, 95, 16, 17, 18, 19, + 20, 21, 35, 36, 37, 8, 9, 64, 35, 36, + 37, -75, 74, 66, 129, 87, 75, 77, 79, 84, + 96, 97, 98, 99, 80, 100, 82, 102, 105, 121, + 106, 130, 120, 140, 110, 118, 128, 137, 92, 139, + 122, 126, 186, 155, 149, 206, -74, 170, 134, 131, + 207, 133, 178, 132, 136, 179, 180, 150, 152, 153, + 154, 162, 163, 181, 195, 182, 204, 161, 10, 59, + 60, 185, 202, 203, 63, 61, 187, 192, 0, 147 }; static const short yycheck[] = { 16, - 17, 93, 19, 22, 129, 20, 98, 132, 53, 54, - 20, 26, 35, 20, 21, 38, 20, 21, 20, 21, - 145, 22, 147, 3, 31, 35, 118, 20, 21, 39, - 122, 41, 42, 43, 51, 39, 81, 44, 55, 84, - 44, 20, 44, 23, 24, 20, 39, 20, 20, 5, - 31, 44, 35, 178, 10, 38, 148, 4, 33, 19, - 39, 34, 41, 42, 43, 5, 6, 7, 8, 9, - 3, 11, 12, 13, 14, 15, 16, 17, 18, 39, - 20, 34, 22, 166, 167, 34, 26, 104, 23, 24, - 23, 24, 34, 13, 14, 15, 179, 180, 18, 182, - 37, 184, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 31, 20, 33, 22, - 5, 6, 7, 8, 9, 15, 11, 12, 13, 14, - 15, 16, 17, 18, 15, 20, 20, 22, 5, 6, - 7, 8, 9, 20, 11, 12, 13, 14, 15, 16, - 17, 18, 20, 20, 20, 22, 6, 7, 8, 9, - 146, 11, 12, 13, 14, 15, 16, 17, 18, 20, - 20, 20, 22, 20, 160, 26, 162, 23, 24, 20, - 33, 34, 20, 34, 25, 26, 27, 28, 29, 30, - 20, 32, 35, 33, 34, 25, 26, 27, 28, 29, - 30, 13, 14, 15, 33, 34, 18, 22, 36, 35, - 20, 20, 34, 34, 20, 20, 20, 35, 20, 35, - 34, 34, 23, 20, 35, 20, 20, 23, 35, 0, - 38, 31, 35, 20, 23, 34, 21, 35, 0, 23, - 23, 31, 35, 34, 23, 31, 4, 35, 40, 31, - 23, 71, 22, 22, 31, 33, 28, 94, 39, 39, - 125, 22, 169, -1, 128 + 17, 95, 19, 176, 133, 3, 100, 136, 53, 54, + 20, 21, 19, 186, 151, 20, 21, 20, 21, 33, + 34, 150, 32, 152, 20, 21, 24, 25, 122, 166, + 20, 168, 126, 40, 51, 45, 81, 40, 55, 84, + 45, 20, 45, 23, 40, 20, 36, 20, 20, 45, + 40, 20, 42, 43, 44, 35, 185, 36, 27, 153, + 35, 40, 34, 42, 43, 44, 35, 40, 22, 42, + 43, 44, 3, 5, 6, 7, 8, 9, 4, 11, + 12, 13, 14, 15, 16, 17, 18, 23, 20, 106, + 22, 173, 174, 24, 25, 27, 20, 5, 34, 35, + 22, 36, 10, 27, 39, 187, 188, 32, 190, 34, + 192, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 32, 20, 20, 22, 5, + 6, 7, 8, 9, 35, 11, 12, 13, 14, 15, + 16, 17, 18, 35, 20, 35, 22, 5, 6, 7, + 8, 9, 15, 11, 12, 13, 14, 15, 16, 17, + 18, 15, 20, 20, 22, 6, 7, 8, 9, 38, + 11, 12, 13, 14, 15, 16, 17, 18, 20, 20, + 36, 22, 20, 23, 26, 27, 28, 29, 30, 31, + 20, 33, 24, 25, 34, 35, 26, 27, 28, 29, + 30, 31, 13, 14, 15, 24, 25, 18, 13, 14, + 15, 36, 20, 18, 39, 22, 20, 20, 20, 20, + 37, 36, 20, 20, 20, 35, 35, 20, 20, 20, + 36, 20, 96, 129, 34, 34, 24, 20, 71, 20, + 35, 35, 170, 20, 24, 0, 36, 20, 32, 36, + 0, 36, 24, 39, 36, 21, 24, 36, 36, 35, + 35, 32, 32, 24, 24, 32, 24, 41, 4, 22, + 22, 36, 34, 32, 28, 22, 40, 40, -1, 132 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/lib/bison.simple" @@ -1019,51 +1031,51 @@ yyreduce: switch (yyn) { case 1: -#line 193 "parse.y" +#line 197 "parse.y" { ; ; break;} case 2: -#line 194 "parse.y" +#line 198 "parse.y" { ; ; break;} case 3: -#line 195 "parse.y" +#line 199 "parse.y" { ; ; break;} case 4: -#line 196 "parse.y" +#line 200 "parse.y" { ; ; break;} case 5: -#line 199 "parse.y" +#line 203 "parse.y" { Node *node = new_ccode(FALSE,yyvsp[0].cbuf,ccode_line); nodes = g_list_append(nodes,node); ; break;} case 6: -#line 203 "parse.y" +#line 207 "parse.y" { Node *node = new_ccode(TRUE,yyvsp[0].cbuf,ccode_line); nodes = g_list_append(nodes,node); ; break;} case 7: -#line 207 "parse.y" +#line 211 "parse.y" { Node *node = new_ccode(FALSE,yyvsp[0].cbuf,ccode_line); nodes = g_list_append(nodes,node); ; break;} case 8: -#line 211 "parse.y" +#line 215 "parse.y" { Node *node = new_ccode(TRUE,yyvsp[0].cbuf,ccode_line); nodes = g_list_append(nodes,node); ; break;} case 9: -#line 217 "parse.y" +#line 221 "parse.y" { ((Class *)class)->nodes = class_nodes; class_nodes = NULL; @@ -1071,49 +1083,61 @@ case 9: ; break;} case 10: -#line 224 "parse.y" +#line 228 "parse.y" { class = new_class(yyvsp[-2].id,yyvsp[0].id,NULL); ; break;} case 11: -#line 229 "parse.y" +#line 233 "parse.y" { ; ; break;} case 12: -#line 230 "parse.y" +#line 234 "parse.y" { ; ; break;} case 13: -#line 231 "parse.y" +#line 235 "parse.y" { ; ; break;} case 14: -#line 232 "parse.y" +#line 236 "parse.y" { ; ; break;} case 15: -#line 233 "parse.y" +#line 237 "parse.y" { ; ; break;} case 16: -#line 234 "parse.y" +#line 238 "parse.y" { ; ; break;} case 17: -#line 237 "parse.y" +#line 241 "parse.y" { - push_variable(yyvsp[-1].id,PUBLIC_SCOPE,yyvsp[-3].line); + push_variable(yyvsp[-1].id,PUBLIC_SCOPE,yyvsp[-3].line,NULL); ; break;} case 18: -#line 240 "parse.y" +#line 244 "parse.y" { - push_variable(yyvsp[-1].id,PRIVATE_SCOPE,yyvsp[-3].line); + push_variable(yyvsp[-2].id,PUBLIC_SCOPE,yyvsp[-4].line,yyvsp[-1].id); ; break;} case 19: -#line 244 "parse.y" +#line 247 "parse.y" +{ + push_variable(yyvsp[-1].id,PRIVATE_SCOPE,yyvsp[-3].line,NULL); + ; + break;} +case 20: +#line 250 "parse.y" +{ + push_variable(yyvsp[-2].id,PRIVATE_SCOPE,yyvsp[-4].line,yyvsp[-1].id); + ; + break;} +case 21: +#line 254 "parse.y" { if(strcmp(yyvsp[-6].id,"get")==0 && strcmp(yyvsp[-3].id,"set")==0) { @@ -1144,8 +1168,8 @@ case 19: } ; break;} -case 20: -#line 273 "parse.y" +case 22: +#line 283 "parse.y" { if(strcmp(yyvsp[-3].id,"get")==0) { Node *node; @@ -1171,32 +1195,32 @@ case 20: } ; break;} -case 21: -#line 299 "parse.y" +case 23: +#line 309 "parse.y" { yyval.list = yyvsp[-1].list; ; break;} -case 22: -#line 300 "parse.y" +case 24: +#line 310 "parse.y" { yyval.list = NULL; ; break;} -case 23: -#line 303 "parse.y" +case 25: +#line 313 "parse.y" { yyval.list = g_list_append(yyvsp[0].list,yyvsp[-2].id); ; break;} -case 24: -#line 306 "parse.y" +case 26: +#line 316 "parse.y" { yyval.list = g_list_append(NULL,yyvsp[0].id); ; break;} -case 25: -#line 312 "parse.y" +case 27: +#line 322 "parse.y" { ; ; break;} -case 26: -#line 313 "parse.y" +case 28: +#line 323 "parse.y" { Type *type = typestack->data; char *oldname = type->name; @@ -1204,152 +1228,152 @@ case 26: g_free(oldname); ; break;} -case 27: -#line 321 "parse.y" +case 29: +#line 331 "parse.y" { - Node *node = new_type(0,yyvsp[0].id); + Node *node = new_type(0,yyvsp[0].id,NULL); typestack = g_list_prepend(typestack,node); ; break;} -case 28: -#line 325 "parse.y" +case 30: +#line 335 "parse.y" { - Node *node = new_type(stars,yyvsp[-1].id); + Node *node = new_type(stars,yyvsp[-1].id,NULL); stars = 0; typestack = g_list_prepend(typestack,node); ; break;} -case 29: -#line 332 "parse.y" +case 31: +#line 342 "parse.y" { yyval.id = g_strconcat("unsigned ",yyvsp[0].id,NULL); ; break;} -case 30: -#line 335 "parse.y" +case 32: +#line 345 "parse.y" { yyval.id = g_strconcat("signed ",yyvsp[0].id,NULL); ; break;} -case 31: -#line 338 "parse.y" +case 33: +#line 348 "parse.y" { yyval.id = g_strdup(yyvsp[0].id); ; break;} -case 32: -#line 341 "parse.y" +case 34: +#line 351 "parse.y" { yyval.id = g_strdup("unsigned char"); ; break;} -case 33: -#line 344 "parse.y" +case 35: +#line 354 "parse.y" { yyval.id = g_strdup("signed char"); ; break;} -case 34: -#line 347 "parse.y" +case 36: +#line 357 "parse.y" { yyval.id = g_strdup("char"); ; break;} -case 35: -#line 350 "parse.y" +case 37: +#line 360 "parse.y" { yyval.id = g_strdup("double"); ; break;} -case 36: -#line 353 "parse.y" +case 38: +#line 363 "parse.y" { yyval.id = g_strdup("float"); ; break;} -case 37: -#line 356 "parse.y" +case 39: +#line 366 "parse.y" { yyval.id = yyvsp[0].id; ; break;} -case 38: -#line 359 "parse.y" +case 40: +#line 369 "parse.y" { yyval.id = g_strconcat(yyvsp[-1].id,yyvsp[0].id,NULL); g_free(yyvsp[0].id); ; break;} -case 39: -#line 363 "parse.y" +case 41: +#line 373 "parse.y" { yyval.id = yyvsp[0].id; ; break;} -case 40: -#line 366 "parse.y" +case 42: +#line 376 "parse.y" { yyval.id = g_strdup("void"); ; break;} -case 41: -#line 371 "parse.y" +case 43: +#line 381 "parse.y" { yyval.id = "long int"; ; break;} -case 42: -#line 374 "parse.y" +case 44: +#line 384 "parse.y" { yyval.id = "long"; ; break;} -case 43: -#line 377 "parse.y" +case 45: +#line 387 "parse.y" { yyval.id = "short int"; ; break;} -case 44: -#line 380 "parse.y" +case 46: +#line 390 "parse.y" { yyval.id = "short"; ; break;} -case 45: -#line 383 "parse.y" +case 47: +#line 393 "parse.y" { yyval.id = "int"; ; break;} -case 46: -#line 388 "parse.y" +case 48: +#line 398 "parse.y" { yyval.id = "enum "; ; break;} -case 47: -#line 391 "parse.y" +case 49: +#line 401 "parse.y" { yyval.id = "union "; ; break;} -case 48: -#line 394 "parse.y" +case 50: +#line 404 "parse.y" { yyval.id = "struct "; ; break;} -case 49: -#line 399 "parse.y" +case 51: +#line 409 "parse.y" { stars++; ; break;} -case 50: -#line 400 "parse.y" +case 52: +#line 410 "parse.y" { stars++; ; break;} -case 51: -#line 403 "parse.y" +case 53: +#line 413 "parse.y" { if(strcmp(yyvsp[-1].id,"first")==0) yyval.sigtype = PRIVATE_SIGNAL_FIRST_METHOD; @@ -1363,8 +1387,8 @@ case 51: g_free(yyvsp[-1].id); ; break;} -case 52: -#line 415 "parse.y" +case 54: +#line 425 "parse.y" { if(strcmp(yyvsp[-2].id,"first")==0) yyval.sigtype = PRIVATE_SIGNAL_FIRST_METHOD; @@ -1378,14 +1402,14 @@ case 52: g_free(yyvsp[-2].id); ; break;} -case 53: -#line 427 "parse.y" +case 55: +#line 437 "parse.y" { yyval.sigtype = PRIVATE_SIGNAL_LAST_METHOD; ; break;} -case 54: -#line 430 "parse.y" +case 56: +#line 440 "parse.y" { if(strcmp(yyvsp[-1].id,"first")==0) yyval.sigtype = SIGNAL_FIRST_METHOD; @@ -1399,40 +1423,40 @@ case 54: g_free(yyvsp[-1].id); ; break;} -case 55: -#line 442 "parse.y" +case 57: +#line 452 "parse.y" { yyval.sigtype = SIGNAL_LAST_METHOD; ; break;} -case 56: -#line 447 "parse.y" +case 58: +#line 457 "parse.y" { gtktypes = g_list_prepend(gtktypes,yyvsp[-3].id); ; break;} -case 57: -#line 452 "parse.y" +case 59: +#line 462 "parse.y" { gtktypes = g_list_append(gtktypes,yyvsp[0].id); ; break;} -case 58: -#line 455 "parse.y" +case 60: +#line 465 "parse.y" { gtktypes = g_list_append(gtktypes,yyvsp[0].id); ; break;} -case 59: -#line 460 "parse.y" +case 61: +#line 470 "parse.y" { yyval.cbuf=yyvsp[0].cbuf; ; break;} -case 60: -#line 461 "parse.y" +case 62: +#line 471 "parse.y" { yyval.cbuf = NULL; ; break;} -case 61: -#line 465 "parse.y" +case 63: +#line 475 "parse.y" { if(!has_self) { yyerror(_("signal without 'self' as " @@ -1444,8 +1468,8 @@ case 61: ccode_line,vararg); ; break;} -case 62: -#line 475 "parse.y" +case 64: +#line 485 "parse.y" { if(!has_self) { yyerror(_("virtual method without 'self' as " @@ -1457,8 +1481,8 @@ case 62: ccode_line,vararg); ; break;} -case 63: -#line 485 "parse.y" +case 65: +#line 495 "parse.y" { if(!has_self) { yyerror(_("virtual method without 'self' as " @@ -1470,8 +1494,8 @@ case 63: ccode_line,vararg); ; break;} -case 64: -#line 495 "parse.y" +case 66: +#line 505 "parse.y" { push_function(OVERRIDE_METHOD, yyvsp[-9].id, yyvsp[-6].id, yyvsp[-2].id, yyvsp[0].cbuf, @@ -1479,24 +1503,24 @@ case 64: vararg); ; break;} -case 65: -#line 501 "parse.y" +case 67: +#line 511 "parse.y" { push_function(PUBLIC_SCOPE, NULL, yyvsp[-6].id, yyvsp[-2].id, yyvsp[0].cbuf,yyvsp[-8].line,yyvsp[-1].line, vararg); ; break;} -case 66: -#line 506 "parse.y" +case 68: +#line 516 "parse.y" { push_function(PRIVATE_SCOPE, NULL, yyvsp[-6].id, yyvsp[-2].id, yyvsp[0].cbuf,yyvsp[-8].line,yyvsp[-1].line, vararg); ; break;} -case 67: -#line 511 "parse.y" +case 69: +#line 521 "parse.y" { if(strcmp(yyvsp[-4].id,"init")==0) { push_init_arg(yyvsp[-2].id,FALSE); @@ -1517,31 +1541,31 @@ case 67: } ; break;} -case 68: -#line 532 "parse.y" +case 70: +#line 542 "parse.y" { yyval.id = yyvsp[0].id; ; break;} -case 69: -#line 533 "parse.y" +case 71: +#line 543 "parse.y" { yyval.id = (yyvsp[0].cbuf)->str; g_string_free(yyvsp[0].cbuf,FALSE); ; break;} -case 70: -#line 537 "parse.y" +case 72: +#line 547 "parse.y" { ; ; break;} -case 71: -#line 538 "parse.y" +case 73: +#line 548 "parse.y" { yyval.id = NULL; ; break;} -case 72: -#line 541 "parse.y" +case 74: +#line 551 "parse.y" { vararg = FALSE; has_self = FALSE; ; break;} -case 73: -#line 542 "parse.y" +case 75: +#line 552 "parse.y" { vararg = FALSE; has_self = TRUE; @@ -1554,8 +1578,8 @@ case 73: } ; break;} -case 74: -#line 553 "parse.y" +case 76: +#line 563 "parse.y" { has_self = TRUE; if(strcmp(yyvsp[-2].id,"self")==0) @@ -1567,53 +1591,70 @@ case 74: } ; break;} -case 75: -#line 563 "parse.y" +case 77: +#line 573 "parse.y" { has_self = FALSE; ; break;} -case 76: -#line 566 "parse.y" +case 78: +#line 576 "parse.y" { vararg = TRUE; ; break;} -case 77: -#line 567 "parse.y" +case 79: +#line 577 "parse.y" { vararg = FALSE; ; break;} -case 78: -#line 570 "parse.y" +case 80: +#line 580 "parse.y" { ; ; break;} -case 79: -#line 571 "parse.y" +case 81: +#line 581 "parse.y" { ; ; break;} -case 80: -#line 574 "parse.y" +case 82: +#line 584 "parse.y" { - push_funcarg(yyvsp[0].id); + push_funcarg(yyvsp[0].id,NULL); ; break;} -case 81: -#line 577 "parse.y" +case 83: +#line 587 "parse.y" +{ + push_funcarg(yyvsp[-1].id,yyvsp[0].id); + ; + break;} +case 84: +#line 590 "parse.y" { if(strcmp(yyvsp[-2].id,"check")!=0) { yyerror(_("parse error")); YYERROR; } g_free(yyvsp[-2].id); - push_funcarg(yyvsp[-4].id); + push_funcarg(yyvsp[-4].id,NULL); ; break;} -case 82: -#line 587 "parse.y" +case 85: +#line 598 "parse.y" +{ + if(strcmp(yyvsp[-2].id,"check")!=0) { + yyerror(_("parse error")); + YYERROR; + } + g_free(yyvsp[-2].id); + push_funcarg(yyvsp[-5].id,yyvsp[-4].id); + ; + break;} +case 86: +#line 608 "parse.y" { ; ; break;} -case 83: -#line 588 "parse.y" +case 87: +#line 609 "parse.y" { ; ; break;} -case 84: -#line 591 "parse.y" +case 88: +#line 612 "parse.y" { if(strcmp(yyvsp[0].id,"type")==0) { Node *node = new_check(TYPE_CHECK,NULL); @@ -1628,61 +1669,61 @@ case 84: g_free(yyvsp[0].id); ; break;} -case 85: -#line 604 "parse.y" +case 89: +#line 625 "parse.y" { Node *node = new_check(GT_CHECK,yyvsp[0].id); checks = g_list_append(checks,node); ; break;} -case 86: -#line 608 "parse.y" +case 90: +#line 629 "parse.y" { Node *node = new_check(LT_CHECK,yyvsp[0].id); checks = g_list_append(checks,node); ; break;} -case 87: -#line 612 "parse.y" +case 91: +#line 633 "parse.y" { Node *node = new_check(GE_CHECK,yyvsp[0].id); checks = g_list_append(checks,node); ; break;} -case 88: -#line 616 "parse.y" +case 92: +#line 637 "parse.y" { Node *node = new_check(LE_CHECK,yyvsp[0].id); checks = g_list_append(checks,node); ; break;} -case 89: -#line 620 "parse.y" +case 93: +#line 641 "parse.y" { Node *node = new_check(EQ_CHECK,yyvsp[0].id); checks = g_list_append(checks,node); ; break;} -case 90: -#line 624 "parse.y" +case 94: +#line 645 "parse.y" { Node *node = new_check(NE_CHECK,yyvsp[0].id); checks = g_list_append(checks,node); ; break;} -case 91: -#line 630 "parse.y" +case 95: +#line 651 "parse.y" { yyval.id = yyvsp[0].id; ; break;} -case 92: -#line 631 "parse.y" +case 96: +#line 652 "parse.y" { yyval.id = g_strconcat("-",yyvsp[0].id,NULL); g_free(yyvsp[0].id); ; break;} -case 93: -#line 635 "parse.y" +case 97: +#line 656 "parse.y" { yyval.id = yyvsp[0].id; ; break;} } @@ -1907,5 +1948,5 @@ yyerrhandle: } return 1; } -#line 638 "parse.y" +#line 659 "parse.y" diff --git a/src/parse.y b/src/parse.y index 7d01a5d..b5d9f10 100644 --- a/src/parse.y +++ b/src/parse.y @@ -80,11 +80,13 @@ yyerror(char *str) } static void -push_variable(char *name, int scope, int line_no) +push_variable(char *name, int scope, int line_no, char *postfix) { Node *var; Type *type = typestack->data; typestack = g_list_remove(typestack,typestack->data); + + type->postfix = postfix; var = new_variable(scope,type,name,line_no); class_nodes = g_list_append(class_nodes, var); @@ -101,7 +103,7 @@ push_function(int scope, char *oid, char *id, char *onerror, type = typestack->data; typestack = g_list_remove(typestack,typestack->data); } else { - type = (Type *)new_type(0,g_strdup("void")); + type = (Type *)new_type(0,g_strdup("void"),NULL); } /* a complicated and ugly test to figure out if we have @@ -127,11 +129,13 @@ push_function(int scope, char *oid, char *id, char *onerror, } static void -push_funcarg(char *name) +push_funcarg(char *name, char *postfix) { Node *node; Type *type = typestack->data; typestack = g_list_remove(typestack,typestack->data); + + type->postfix = postfix; node = new_funcarg(type,name,checks); checks = NULL; @@ -151,7 +155,7 @@ push_init_arg(char *name, int is_class) else tn = g_strdup(((Class *)class)->otype); - type = new_type(1,tn); + type = new_type(1,tn,NULL); node = new_funcarg((Type *)type,name,NULL); funcargs = g_list_prepend(funcargs, node); } @@ -162,7 +166,7 @@ push_self(char *id) Node *node; Node *type; GList *ch = NULL; - type = new_type(1,g_strdup(((Class *)class)->otype)); + type = new_type(1,g_strdup(((Class *)class)->otype),NULL); ch = g_list_append(ch,new_check(NULL_CHECK,NULL)); ch = g_list_append(ch,new_check(TYPE_CHECK,NULL)); node = new_funcarg((Type *)type,id,ch); @@ -184,7 +188,7 @@ push_self(char *id) %token SIGNED UNSIGNED LONG SHORT INT FLOAT DOUBLE CHAR %token ONERROR -%token TOKEN NUMBER TYPETOKEN +%token TOKEN NUMBER TYPETOKEN ARRAY_DIM %token CCODE HCODE %token PUBLIC PRIVATE ARGUMENT VIRTUAL SIGNAL OVERRIDE @@ -235,11 +239,17 @@ classcode: classcode method { ; } ; variable: PUBLIC type TOKEN ';' { - push_variable($3,PUBLIC_SCOPE,$1); + push_variable($3,PUBLIC_SCOPE,$1,NULL); } - | PRIVATE type TOKEN ';' { - push_variable($3,PRIVATE_SCOPE,$1); + | PUBLIC type TOKEN ARRAY_DIM ';' { + push_variable($3,PUBLIC_SCOPE,$1,$4); } + | PRIVATE type TOKEN ';' { + push_variable($3,PRIVATE_SCOPE,$1,NULL); + } + | PRIVATE type TOKEN ARRAY_DIM ';' { + push_variable($3,PRIVATE_SCOPE,$1,$4); + } ; argument: ARGUMENT argflags TOKEN TOKEN TOKEN '{' CCODE TOKEN '{' CCODE ';' { if(strcmp($5,"get")==0 && @@ -319,11 +329,11 @@ type: type1 { ; } ; type1: type2 { - Node *node = new_type(0,$1); + Node *node = new_type(0,$1,NULL); typestack = g_list_prepend(typestack,node); } | type2 stars { - Node *node = new_type(stars,$1); + Node *node = new_type(stars,$1,NULL); stars = 0; typestack = g_list_prepend(typestack,node); } @@ -572,7 +582,10 @@ arglist1: arglist1 ',' arg { ; } ; arg: type TOKEN { - push_funcarg($2); + push_funcarg($2,NULL); + } + | type TOKEN ARRAY_DIM { + push_funcarg($2,$3); } | type TOKEN '(' TOKEN checklist ')' { if(strcmp($4,"check")!=0) { @@ -580,7 +593,15 @@ arg: type TOKEN { YYERROR; } g_free($4); - push_funcarg($2); + push_funcarg($2,NULL); + } + | type TOKEN ARRAY_DIM '(' TOKEN checklist ')' { + if(strcmp($5,"check")!=0) { + yyerror(_("parse error")); + YYERROR; + } + g_free($5); + push_funcarg($2,$3); } ; diff --git a/src/test.gob b/src/test.gob index b5b180e..0152a00 100644 --- a/src/test.gob +++ b/src/test.gob @@ -5,6 +5,7 @@ the file itself. So you can this way select where the include file is at */ #include "gtk-weird-button.h" +#include "gtk-weird-button-private.h" static void jjjj(void); %} @@ -19,6 +20,7 @@ class Gtk:Weird:Button from Gtk:Button { private int j; public GtkWidget * h; public char *bleh; + public double array[23][18]; init(object) { GtkWeirdButton *but = GTK_WEIRD_BUTTON(object); @@ -67,15 +69,21 @@ class Gtk:Weird:Button from Gtk:Button { signal first private NONE (NONE) void googlegoogle2(self) { + int array[5][8][9]={{{0}}}; puts("TEST2"); - testprivvirtual(self); + testprivvirtual(self,array); } virtual private - void testprivvirtual(self) + void testprivvirtual(self, int some_array[5][8][9]) { puts("TEST3"); googlegoogle(self); } + signal first NONE (POINTER) + void testarrsignal(self, long arr[8]) + { + puts("TEST2"); + } } %{ diff --git a/src/tree.c b/src/tree.c index ab06d4f..c226273 100644 --- a/src/tree.c +++ b/src/tree.c @@ -46,12 +46,13 @@ new_class(char *otype, char *ptype, GList *nodes) } Node * -new_type(int stars, char *name) +new_type(int stars, char *name, char *postfix) { Type *node = (Type *)g_new(Node,1); node->type = TYPE_NODE; node->stars = stars; node->name = name; + node->postfix = postfix; return (Node *)node; } diff --git a/src/tree.h b/src/tree.h index f6b8caf..c47156f 100644 --- a/src/tree.h +++ b/src/tree.h @@ -58,6 +58,7 @@ struct _Type { int type; int stars; char *name; + char *postfix; }; enum { @@ -152,7 +153,7 @@ union _Node { Node *new_ccode(int header, GString *cbuf, int line_no); Node *new_class(char *otype, char *ptype, GList *nodes); -Node *new_type(int stars, char *name); +Node *new_type(int stars, char *name, char *postfix); Node *new_check(int chtype, char *number); Node *new_funcarg(Type *atype, char *name, GList *checks); Node *new_method(int scope, Type *mtype, char *otype, GList *gtktypes, char *id, GList *args, char *onerror, GString *cbuf,int line_no,int ccode_line, int vararg); -- 2.43.2