<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-1295</id>
	<title>Nabble - Gnome - GObject Builder</title>
	<updated>2009-11-23T20:11:43Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/Gnome---GObject-Builder-f1295.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Gnome---GObject-Builder-f1295.html" />
	<subtitle type="html">&lt;a href=&quot;http://www.5z.com/jirka/gob.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;GOB&lt;/a&gt;&amp;nbsp;(GOB2 anyway) is a preprocessor for making GObjects with inline C code so that generated files are not edited. Syntax is inspired by Java and Yacc or Lex. The implementation is intentionally kept simple, and no C actual code parsing is done.</subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26490237</id>
	<title>Patch for the bug on remove_sep().</title>
	<published>2009-11-23T20:11:43Z</published>
	<updated>2009-11-23T20:11:43Z</updated>
	<author>
		<name>Ding Yi Chen</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;I am using gob2 to develop various projects such as WritRecogn, ibus-chewing, and MakerDialog.
&lt;br&gt;Recently I found that those project are failed to compile. After investigation, I think the problem 
&lt;br&gt;might reside in remove_sep(), src/util.c.
&lt;br&gt;&lt;br&gt;In remove_sep(), the code that remove ':' is:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while((p = strchr(s, ':')))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; strcpy(p, p+1);
&lt;br&gt;&lt;br&gt;However, according to the man page of strcpy:
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;quot;The strings may not overlap, and the destination string dest must &amp;nbsp;be
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;large enough to receive the copy.&amp;quot;
&lt;br&gt;&lt;br&gt;In fact, this code block produces unexpected results in some systems.
&lt;br&gt;For example:
&lt;br&gt;&amp;nbsp; Ma:Class is converted to Ma:Clsss
&lt;br&gt;&amp;nbsp; Ma:Placement is converted to Ma:Plccemnnt
&lt;br&gt;&lt;br&gt;The patch that address this issue is attached.
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;-- 
&lt;br&gt;Ding-Yi Chen
&lt;br&gt;Software Engineer
&lt;br&gt;Internationalization Group
&lt;br&gt;Red Hat, Inc.
&lt;br&gt;&lt;br&gt;Register now for Red Hat Virtual Experience, December 9.
&lt;br&gt;Enterprise Linux, virtualization, cloud, and more.
&lt;br&gt;&lt;a href=&quot;http://www.redhat.com/virtualexperience&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.redhat.com/virtualexperience&lt;/a&gt;&lt;br&gt;&lt;br /&gt; &lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26490237&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;gob2-remove_sep.patch&lt;/strong&gt; (512 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/26490237/0/gob2-remove_sep.patch&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Patch-for-the-bug-on-remove_sep%28%29.-tp26490237p26490237.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-24590285</id>
	<title>ANNOUNCE: gob2 2.0.16 the &quot;I shot the sheriff&quot; release</title>
	<published>2009-07-21T08:44:10Z</published>
	<updated>2009-07-21T08:44:10Z</updated>
	<author>
		<name>Jiri Lebl</name>
	</author>
	<content type="html">&lt;br&gt;UGUGUGOBGOBGOBUGUGUSMOKEUFUFUGANJAEKIEKIWEEDUMFOOOOOOOOOOOOOOOOOOOO
&lt;br&gt;&lt;br&gt;Apparently perfection was not yet perfect (read last anouncement). &amp;nbsp;Anyway,
&lt;br&gt;it is time for a new gob. &amp;nbsp;No new major bug fixes or anything. &amp;nbsp;Mosty
&lt;br&gt;application and in some cases reworking of pending patches. &amp;nbsp;It is true that
&lt;br&gt;some users have suffered great mental anguish because of gob. &amp;nbsp;Their pain is
&lt;br&gt;not going away, because here is a new release of gob.
&lt;br&gt;&lt;br&gt;So what is this gob thing? &amp;nbsp;Well besides being the cure for cancer, it also
&lt;br&gt;generates GObjects (or GTK+ objects). &amp;nbsp;GOB2 is a replacement for the version
&lt;br&gt;1 GOB, that was for GTK+ 1.x mostly. &amp;nbsp;GOB2 can handle pretty much most of the
&lt;br&gt;GObject features. &amp;nbsp;At least most of the ones that anyone will ever use. &amp;nbsp;It
&lt;br&gt;only requires GLib 2.0 (or higher for some features) and can generate
&lt;br&gt;arbitrary GObjects. &amp;nbsp;You can have both versions installed at the same time if
&lt;br&gt;you wish, but if anyone is still using gob version 1 and GTK+ 1.x, they
&lt;br&gt;should get their head examined.
&lt;br&gt;&lt;br&gt;Here are the news in 2.0.16:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * add possibility of using function attributes such as
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; G_GNUC_PRINTF etc... (Britton Kerin, Jean-Yves Lefort, me)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * *_get_type methods are G_GNUC_CONST (Jean-Yves Lefort, me)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * move #line sections past opening brace of functions
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (Jean-Yves Lefort)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * handle finalize, dispose, constructor just like init
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (Jean-Yves Lefort)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Add %afterdecls{ %} code block
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (Jean-Yves Lefort)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Minor fixes to docs (me, Andrew Feren)
&lt;br&gt;&lt;br&gt;ftp://ftp.5z.com/pub/gob/
&lt;br&gt;&lt;a href=&quot;http://ftp.gnome.org/pub/GNOME/sources/gob2/2.0/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://ftp.gnome.org/pub/GNOME/sources/gob2/2.0/&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://www.5z.com/jirka/gob.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.5z.com/jirka/gob.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;Note: I no longer have fedora, so no rpms are built but the specfile is
&lt;br&gt;included. &amp;nbsp;Try it with &amp;quot;rpmbuild -ta gob2-...-tar.gz&amp;quot;
&lt;br&gt;&lt;br&gt;Have fun,
&lt;br&gt;&lt;br&gt;George
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Jiri (George) Lebl &lt;a href=&quot;http://www.jirka.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.jirka.org/&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;The only thing that interferes with my learning is my education.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-- Albert Einstein
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=24590285&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/ANNOUNCE%3A-gob2-2.0.16-the-%22I-shot-the-sheriff%22-release-tp24590285p24590285.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-24433567</id>
	<title>new version coming soon</title>
	<published>2009-07-10T12:52:01Z</published>
	<updated>2009-07-10T12:52:01Z</updated>
	<author>
		<name>Jiri Lebl</name>
	</author>
	<content type="html">So it took a long time, but I've spent the whole day today fixing up the 
&lt;br&gt;waiting patches for gob. &amp;nbsp;Anyway, instead of just making a release, I want to 
&lt;br&gt;make sure things work.
&lt;br&gt;&lt;br&gt;A TEST tarball release is at &lt;a href=&quot;http://www.jirka.org/gob2-2.0.16-test.tar.gz&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.jirka.org/gob2-2.0.16-test.tar.gz&lt;/a&gt;&lt;br&gt;&lt;br&gt;Let me know if it works or doesn't work. &amp;nbsp;If it all does work, I'll make a 
&lt;br&gt;release in a few days.
&lt;br&gt;&lt;br&gt;See the NEWS file and ChangeLog to see what I did.
&lt;br&gt;&lt;br&gt;One thing of note is how I handled the function attributes. &amp;nbsp;I erred on the 
&lt;br&gt;side of as little code change as possible and on the side of as little change 
&lt;br&gt;to syntax as possible. &amp;nbsp;I took Britton's patch, and then I realized it would 
&lt;br&gt;not be easy to handle the syntax in that way (though it looked nicer). 
&lt;br&gt;Jean-Yves patch was more flexible but I didn't like the fact that it 
&lt;br&gt;introduced new syntax. &amp;nbsp;So I opted to just handle it like onerror and 
&lt;br&gt;defreturn so that essentially no new looking syntax is created. &amp;nbsp;So you do
&lt;br&gt;&lt;br&gt;public void
&lt;br&gt;print (self, const char *format (check null), ...) attr {G_GNUC_PRINTF(2, 3)}
&lt;br&gt;&lt;br&gt;Somewhat uglier, yes, but more flexible and doesn't add new syntax, does not 
&lt;br&gt;touch the lexer, and is minimally code invasive.
&lt;br&gt;&lt;br&gt;Sorry about the long wait ...
&lt;br&gt;&lt;br&gt;Jiri
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;George &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=24433567&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jirka@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; I killed the cat. &amp;nbsp; -- Sid Vicious
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=24433567&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/new-version-coming-soon-tp24433567p24433567.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-24382714</id>
	<title>Re: Friendly poke on gob2</title>
	<published>2009-07-07T15:48:26Z</published>
	<updated>2009-07-07T15:48:26Z</updated>
	<author>
		<name>Jiri Lebl</name>
	</author>
	<content type="html">Richard Schwarting wrote:
&lt;br&gt;&amp;gt; Hello.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Thanks for the work you've already put into gob2. &amp;nbsp;I was wondering
&lt;br&gt;&amp;gt; whether you were still planning on pushing a new release including the
&lt;br&gt;&amp;gt; patches pending on the list.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Cheers,
&lt;br&gt;&amp;gt; &amp;nbsp; Richard
&lt;br&gt;&lt;br&gt;I am planning on doing it. &amp;nbsp;I think I will actually do it in the next few 
&lt;br&gt;weeks since I finally have some free time for the rest of july.
&lt;br&gt;&lt;br&gt;If there is someone on the list who thinks they can do a better job of 
&lt;br&gt;updating gob (perhaps implementing some newer features of gobject or some 
&lt;br&gt;things that were not yet finished (e.g. interfaces)), speak up. &amp;nbsp;Else it's up 
&lt;br&gt;to me and it's really a backburner kind of project for me (though it really 
&lt;br&gt;doesn't require too much more than a backburner kind of attention IMO).
&lt;br&gt;&lt;br&gt;Jiri
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=24382714&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-Friendly-poke-on-gob2-tp24382714p24382714.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-21727348</id>
	<title>Re: signals with GTK_TYPE_ADJUSTMENT</title>
	<published>2009-01-29T05:55:00Z</published>
	<updated>2009-01-29T05:55:00Z</updated>
	<author>
		<name>Jiri Lebl</name>
	</author>
	<content type="html">Dov Grobgeld wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; In hope that the mailing list isn't dead yet, I wonder if someone can 
&lt;br&gt;&amp;gt; help me with some gob2 syntax.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I got stuck on trying to create signals with the following signature 
&lt;br&gt;&amp;gt; (copied from GtkTextView) in gob:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; signals[SET_SCROLL_ADJUSTMENTS] =
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; g_signal_new (I_(&amp;quot;set_scroll_adjustments&amp;quot;),
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; G_OBJECT_CLASS_TYPE (gobject_class),
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; G_STRUCT_OFFSET (MyFooClass, set_scroll_adjustments),
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NULL, NULL,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _gtk_marshal_VOID__OBJECT_OBJECT,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; G_TYPE_NONE, 2,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GTK_TYPE_ADJUSTMENT,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GTK_TYPE_ADJUSTMENT);
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I tried the following:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp;signal last NONE (GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT)
&lt;br&gt;&amp;gt; &amp;nbsp; gboolean
&lt;br&gt;&amp;gt; &amp;nbsp; set_scroll_adjustments (self,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gtk:Adjustment &amp;nbsp; &amp;nbsp;*hadjustment,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Gtk:Adjustment &amp;nbsp; &amp;nbsp;*vadjustment)
&lt;/div&gt;&lt;br&gt;1) you have a gboolean return and you specify NONE for your return, you 
&lt;br&gt;should have BOOLEAN there
&lt;br&gt;2) Use OBJECT or POINTER instead of GTK_TYPE_ADJUSTMENT. &amp;nbsp;These types are 
&lt;br&gt;used for the marshalling, and it is sufficient to pass objects as OBJECTs or 
&lt;br&gt;even just POINTERs. &amp;nbsp;The type checking is done at a different place.
&lt;br&gt;&lt;br&gt;George
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;George &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=21727348&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jirka@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Few people can be happy unless they hate some other person,
&lt;br&gt;&amp;nbsp; &amp;nbsp; nation or creed.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -- Bertrand Russell
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=21727348&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/signals-with-GTK_TYPE_ADJUSTMENT-tp21655312p21727348.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-21655312</id>
	<title>signals with GTK_TYPE_ADJUSTMENT</title>
	<published>2009-01-25T10:56:20Z</published>
	<updated>2009-01-25T10:56:20Z</updated>
	<author>
		<name>Dov Grobgeld-2</name>
	</author>
	<content type="html">&lt;div dir=&quot;ltr&quot;&gt;In hope that the mailing list isn&amp;#39;t dead yet, I wonder if someone can help me with some gob2 syntax.&lt;br&gt;&lt;br&gt;I got stuck on trying to create signals with the following signature (copied from GtkTextView) in gob:&lt;br&gt;
&lt;br&gt;&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp; signals[SET_SCROLL_ADJUSTMENTS] =&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_signal_new (I_(&amp;quot;set_scroll_adjustments&amp;quot;),&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;
&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; G_OBJECT_CLASS_TYPE (gobject_class),&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;
&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; G_STRUCT_OFFSET (MyFooClass, set_scroll_adjustments),&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; NULL, NULL,&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;
&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; _gtk_marshal_VOID__OBJECT_OBJECT,&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; G_TYPE_NONE, 2,&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;
&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; GTK_TYPE_ADJUSTMENT,&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; GTK_TYPE_ADJUSTMENT);&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;
&lt;br&gt;I tried the following:&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;signal last NONE (GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT)&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp; gboolean&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;
&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp; set_scroll_adjustments (self,&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Gtk:Adjustment&amp;nbsp;&amp;nbsp;&amp;nbsp; *hadjustment,&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;
&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Gtk:Adjustment&amp;nbsp;&amp;nbsp;&amp;nbsp; *vadjustment)&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;&lt;br&gt;but got the error &amp;quot;Error: Unknown GTK+ type &amp;#39;GTK_TYPE_ADJUSTMENT&amp;#39; among signal types&amp;quot;.&lt;br&gt;
&lt;br&gt;This also failed:&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;signal last NONE (OBJECT=Gtk:Adjustment, OBJECT=Gtk:Adjustment)&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;
&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp; gboolean&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;
&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp; set_scroll_adjustments (self,&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;
&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Gtk:Adjustment&amp;nbsp;&amp;nbsp;&amp;nbsp; *hadjustment,&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;
&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Gtk:Adjustment&amp;nbsp;&amp;nbsp;&amp;nbsp; *vadjustment)&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;
&lt;br&gt;&lt;br&gt;which gave the error &amp;quot;Error: syntax error before &amp;#39;=&amp;#39;&amp;quot;.&lt;br&gt;&lt;br&gt;In the end I used:&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;signal last NONE (OBJECT, OBJECT)&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;


&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp; gboolean&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;

&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp; set_scroll_adjustments (self,&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;

&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Gtk:Adjustment&amp;nbsp;&amp;nbsp;&amp;nbsp; *hadjustment,&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;

&lt;span style=&quot;font-family: courier new,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Gtk:Adjustment&amp;nbsp;&amp;nbsp;&amp;nbsp; *vadjustment)&lt;/span&gt;&lt;br style=&quot;font-family: courier new,monospace;&quot;&gt;

&lt;br&gt;
and then applied an external patch:&lt;br&gt;&lt;br&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; G_TYPE_OBJECT,&lt;br&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; G_TYPE_OBJECT);&lt;br&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GTK_TYPE_ADJUSTMENT,&lt;br&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GTK_TYPE_ADJUSTMENT);&lt;br&gt;&lt;br&gt;But of course I wonder whether there is any syntax to do this in gob2?&lt;br&gt;
&lt;br&gt;Thanks!&lt;br&gt;Dov&lt;br&gt;&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;/div&gt;
&lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=21655312&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/signals-with-GTK_TYPE_ADJUSTMENT-tp21655312p21655312.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15677003</id>
	<title>patch adding G_GNUC_CONST to get_type()</title>
	<published>2008-02-25T12:29:41Z</published>
	<updated>2008-02-25T12:29:41Z</updated>
	<author>
		<name>Jean-Yves Lefort</name>
	</author>
	<content type="html">The attached patch adds the G_GNUC_CONST attribute to get_type()
&lt;br&gt;function declarations. It is a performance improvement which allows
&lt;br&gt;the compiler to move get_type() calls out of loops, etc.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15677003&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[gob2-jylefort-const-gettype.diff]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;Index: src/main.c
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /usr/local/cvsroot/gob2/src/main.c,v
&lt;br&gt;retrieving revision 1.4
&lt;br&gt;diff -u -r1.4 main.c
&lt;br&gt;--- src/main.c	1 Feb 2008 21:39:50 -0000	1.4
&lt;br&gt;+++ src/main.c	25 Feb 2008 20:23:09 -0000
&lt;br&gt;@@ -3644,7 +3644,7 @@
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp;&amp;quot; */\n&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if ( ! overrode_get_type) {
&lt;br&gt;-		out_printf (outh, &amp;quot;GType\t%s_get_type\t(void);\n&amp;quot;, funcbase);
&lt;br&gt;+		out_printf (outh, &amp;quot;GType\t%s_get_type\t(void) G_GNUC_CONST;\n&amp;quot;, funcbase);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	for(li = c-&amp;gt;nodes; li != NULL; li = li-&amp;gt;next) {
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt; &lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15677003&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;attachment0&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/15677003/0/attachment0&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/patch-adding-G_GNUC_CONST-to-get_type%28%29-tp15677003p15677003.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15236391</id>
	<title>function location patch</title>
	<published>2008-02-01T14:01:58Z</published>
	<updated>2008-02-01T14:01:58Z</updated>
	<author>
		<name>Jean-Yves Lefort</name>
	</author>
	<content type="html">The attached patch:
&lt;br&gt;&lt;br&gt;- puts the opening braces of functions in the .gob #line sections, eg:
&lt;br&gt;&lt;br&gt;&amp;nbsp; before:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #line 1007 &amp;quot;mn-mailbox.gob&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mn_mailbox_check (MNMailbox * self)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #line 2064 &amp;quot;mn-mailbox.c&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&lt;br&gt;&amp;nbsp; after:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #line 1007 &amp;quot;mn-mailbox.gob&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mn_mailbox_check (MNMailbox * self)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #line 2064 &amp;quot;mn-mailbox.c&amp;quot;
&lt;br&gt;&lt;br&gt;&amp;nbsp; This makes GCC use the .gob location when it has something to say
&lt;br&gt;&amp;nbsp; about a function.
&lt;br&gt;&lt;br&gt;- encloses function declarations in .gob #line sections. This makes
&lt;br&gt;&amp;nbsp; GCC use the .gob location when it has something to say about a
&lt;br&gt;&amp;nbsp; function prototype.
&lt;br&gt;&lt;br&gt;Note: the patch applies to gob2-jylefort (gob2 2.0.15 + my other
&lt;br&gt;patches).
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15236391&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[gob2-jylefort-function-locations.diff]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;Index: src/main.c
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /usr/local/cvsroot/gob2/src/main.c,v
&lt;br&gt;retrieving revision 1.3
&lt;br&gt;diff -u -r1.3 main.c
&lt;br&gt;--- src/main.c	1 Feb 2008 21:12:03 -0000	1.3
&lt;br&gt;+++ src/main.c	1 Feb 2008 21:33:04 -0000
&lt;br&gt;@@ -447,8 +447,10 @@
&lt;br&gt;&amp;nbsp;	if(m-&amp;gt;scope != PUBLIC_SCOPE)
&lt;br&gt;&amp;nbsp;		return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	out_addline_infile(outh, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;	print_method(outh, &amp;quot;&amp;quot;, &amp;quot;\t&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\t&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;, m,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp; TRUE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+	out_addline_outfile(outh);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;@@ -580,15 +582,17 @@
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;&amp;nbsp;put_prot_method(const Method *m)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;+	FILE *f;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	if(m-&amp;gt;scope != PROTECTED_SCOPE)
&lt;br&gt;&amp;nbsp;		return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	if(outph)
&lt;br&gt;-		print_method(outph, &amp;quot;&amp;quot;, &amp;quot;\t&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\t&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;-	else
&lt;br&gt;-		print_method(out, &amp;quot;&amp;quot;, &amp;quot;\t&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\t&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+	f = outph ? outph : out;
&lt;br&gt;+
&lt;br&gt;+	out_addline_infile(f, m-&amp;gt;line_no);
&lt;br&gt;+	print_method(f, &amp;quot;&amp;quot;, &amp;quot;\t&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\t&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+	out_addline_outfile(f);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;@@ -609,8 +613,10 @@
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp;m-&amp;gt;cbuf)) {
&lt;br&gt;&amp;nbsp;		/* add unique ID */
&lt;br&gt;&amp;nbsp;		char *s = g_strdup_printf(&amp;quot;___%x_&amp;quot;, (guint)m-&amp;gt;unique_id);
&lt;br&gt;+		out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		print_method(out, &amp;quot;static &amp;quot;, s, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, FALSE, FALSE, FALSE);
&lt;br&gt;+		out_addline_outfile(out);
&lt;br&gt;&amp;nbsp;		g_free(s);
&lt;br&gt;&amp;nbsp;	} else if(m-&amp;gt;scope == PRIVATE_SCOPE ||
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;@@ -618,8 +624,10 @@
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;m-&amp;gt;method == FINALIZE_METHOD) {
&lt;br&gt;+		out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+		out_addline_outfile(out);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -2395,10 +2403,10 @@
&lt;br&gt;&amp;nbsp;				out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, TRUE, FALSE);
&lt;br&gt;+			out_printf(out, &amp;quot;{\n&amp;quot;);
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;				out_addline_outfile(out);
&lt;br&gt;-			out_printf(out, &amp;quot;{\n&amp;quot;
&lt;br&gt;-				 &amp;nbsp; &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::init\&amp;quot;\n&amp;quot;,
&lt;br&gt;+			out_printf(out, &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::init\&amp;quot;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;&amp;nbsp;			if (privates &amp;gt; 0) {
&lt;br&gt;&amp;nbsp;				out_printf(out, &amp;quot;\t%s-&amp;gt;_priv = &amp;quot;
&lt;br&gt;@@ -2444,10 +2452,10 @@
&lt;br&gt;&amp;nbsp;				out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, TRUE, FALSE);
&lt;br&gt;+			out_printf(out, &amp;quot;{\n&amp;quot;);
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;				out_addline_outfile(out);
&lt;br&gt;-			out_printf(out, &amp;quot;{\n&amp;quot;
&lt;br&gt;-				 &amp;nbsp; &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::class_init\&amp;quot;\n&amp;quot;,
&lt;br&gt;+			out_printf(out, &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::class_init\&amp;quot;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;&amp;nbsp;			if (set_properties &amp;gt; 0 ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;get_properties &amp;gt; 0 ||
&lt;br&gt;@@ -2799,10 +2807,10 @@
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;&amp;nbsp;print_method_body (Method *m, gboolean pre, gboolean unused_self)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;+	out_printf(out, &amp;quot;{\n&amp;quot;);
&lt;br&gt;&amp;nbsp;	if (m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;		out_addline_outfile(out);
&lt;br&gt;-	out_printf(out, &amp;quot;{\n&amp;quot;
&lt;br&gt;-		 &amp;nbsp; &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::%s\&amp;quot;\n&amp;quot;,
&lt;br&gt;+	out_printf(out, &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::%s\&amp;quot;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; ((Class *)class)-&amp;gt;otype,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;	if (pre)
&lt;br&gt;@@ -2972,10 +2980,11 @@
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;&amp;nbsp;			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;-		out_addline_outfile (out);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		out_printf (out, &amp;quot;{\n&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+		out_addline_outfile (out);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;		out_printf (out,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\tGValue ___param_values[%d];\n&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\tGValue ___return_val;\n\n&amp;quot;
&lt;br&gt;@@ -3103,9 +3112,9 @@
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;&amp;nbsp;			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;+		out_printf(out, &amp;quot;{\n&amp;quot;);
&lt;br&gt;&amp;nbsp;		out_addline_outfile(out);
&lt;br&gt;-		out_printf(out, &amp;quot;{\n&amp;quot;
&lt;br&gt;-			&amp;quot;\t%sClass *klass;\n&amp;quot;, typebase);
&lt;br&gt;+		out_printf(out, &amp;quot;\t%sClass *klass;\n&amp;quot;, typebase);
&lt;br&gt;&amp;nbsp;		print_preconditions(m);
&lt;br&gt;&amp;nbsp;		out_printf(out, &amp;quot;\tklass = %s_GET_CLASS(%s);\n\n&amp;quot;
&lt;br&gt;&amp;nbsp;			&amp;quot;\tif(klass-&amp;gt;%s)\n&amp;quot;,
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt; &lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15236391&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;attachment0&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/15236391/0/attachment0&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/function-location-patch-tp15236391p15236391.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15229637</id>
	<title>patch adding %afterdecls C code section</title>
	<published>2008-02-01T05:12:50Z</published>
	<updated>2008-02-01T05:12:50Z</updated>
	<author>
		<name>Jean-Yves Lefort</name>
	</author>
	<content type="html">The attached patch allows to insert a C code section (in the .c file)
&lt;br&gt;between the declarations and the method implementations, eg:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %afterdecls{
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; static const struct
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void (*one) (Self *self);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void (*two) (Self *self);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } things[] = {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { self_foo, self_bar },
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %}
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; class Foo:Bar
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private void
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; foo (self)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private void
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bar (self)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;Without this patch, one has to make methods protected if he wants to
&lt;br&gt;refer to them from the %{} code section.
&lt;br&gt;&lt;br&gt;Or, alternatively, put things[] in a %{} section at the end of the
&lt;br&gt;file:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; typedef struct
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void (*one) (FooBar *self);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; void (*two) (FooBar *self);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } Thing;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; static const Thing things[];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %}
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; class Foo:Bar
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ...
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; static const Thing things[] = {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ...
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %}
&lt;br&gt;&lt;br&gt;But it's more verbose and forbids code such as:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; G_N_ELEMENTS(things)
&lt;br&gt;&lt;br&gt;since things[] is not yet defined in the class code.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15229637&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[gob2-2.0.15-afterdecls.diff]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;--- src/lexer.l.orig	2007-09-28 06:26:49.000000000 +0200
&lt;br&gt;+++ src/lexer.l	2008-02-01 13:33:53.000000000 +0100
&lt;br&gt;@@ -344,6 +344,14 @@
&lt;br&gt;&amp;nbsp;			if(look_for_includes==0)
&lt;br&gt;&amp;nbsp;				look_for_includes=1;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+^\%(ad|afterdecls)\{		{
&lt;br&gt;+			BEGIN(C_CODE);
&lt;br&gt;+			parenth_depth = 1;
&lt;br&gt;+			class_after_c = FALSE;
&lt;br&gt;+			code_type = ADCODE;
&lt;br&gt;+			clear_cbuf();
&lt;br&gt;+			ccode_line = line_no;
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;&amp;lt;C_CODE&amp;gt;^\%\}	{
&lt;br&gt;&amp;nbsp;			BEGIN(INITIAL);
&lt;br&gt;&amp;nbsp;			yylval.cbuf = cbuf;
&lt;br&gt;--- src/main.c.orig	2007-10-17 16:49:04.000000000 +0200
&lt;br&gt;+++ src/main.c	2008-02-01 13:36:42.000000000 +0100
&lt;br&gt;@@ -3293,6 +3293,7 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	out_printf(fp, &amp;quot;%s\n&amp;quot;, cc-&amp;gt;cbuf);
&lt;br&gt;&amp;nbsp;	if(cc-&amp;gt;cctype == C_CCODE ||
&lt;br&gt;+	 &amp;nbsp; cc-&amp;gt;cctype == AD_CCODE ||
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; cc-&amp;gt;cctype == A_CCODE ||
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; cc-&amp;gt;cctype == AT_CCODE ||
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; cc-&amp;gt;cctype == PH_CCODE)
&lt;br&gt;@@ -3633,6 +3634,15 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	for (li = nodes; li != NULL; li = li-&amp;gt;next) {
&lt;br&gt;+		Node *node = li-&amp;gt;data;
&lt;br&gt;+		if (node-&amp;gt;type == CCODE_NODE) {
&lt;br&gt;+			CCode *cc = (CCode *)node;
&lt;br&gt;+			if (cc-&amp;gt;cctype == AD_CCODE)
&lt;br&gt;+				print_ccode_block (cc);
&lt;br&gt;+		}
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	if (need_dispose)
&lt;br&gt;&amp;nbsp;		add_dispose (c);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -4064,7 +4074,8 @@
&lt;br&gt;&amp;nbsp;		if (node-&amp;gt;type == CCODE_NODE) {
&lt;br&gt;&amp;nbsp;			CCode *cc = (CCode *)node;
&lt;br&gt;&amp;nbsp;			if (cc-&amp;gt;cctype != HT_CCODE &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp;cc-&amp;gt;cctype != AT_CCODE)
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp;cc-&amp;gt;cctype != AT_CCODE &amp;&amp;
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp;cc-&amp;gt;cctype != AD_CCODE)
&lt;br&gt;&amp;nbsp;				print_ccode_block ((CCode *)node);
&lt;br&gt;&amp;nbsp;		} else if (node-&amp;gt;type == CLASS_NODE) {
&lt;br&gt;&amp;nbsp;			print_class_block ((Class *)node);
&lt;br&gt;--- src/parse.y.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/parse.y	2008-02-01 13:35:25.000000000 +0100
&lt;br&gt;@@ -678,7 +678,7 @@
&lt;br&gt;&amp;nbsp;%token SIGNED UNSIGNED LONG SHORT INT FLOAT DOUBLE CHAR
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;%token &amp;lt;id&amp;gt; TOKEN NUMBER TYPETOKEN ARRAY_DIM SINGLE_CHAR
&lt;br&gt;-%token &amp;lt;cbuf&amp;gt; CCODE HTCODE PHCODE HCODE ACODE ATCODE STRING
&lt;br&gt;+%token &amp;lt;cbuf&amp;gt; CCODE ADCODE HTCODE PHCODE HCODE ACODE ATCODE STRING
&lt;br&gt;&amp;nbsp;%token &amp;lt;line&amp;gt; PUBLIC PRIVATE PROTECTED CLASSWIDE PROPERTY ARGUMENT
&lt;br&gt;&amp;nbsp;%token &amp;lt;line&amp;gt; VIRTUAL SIGNAL OVERRIDE
&lt;br&gt;&amp;nbsp;%token &amp;lt;line&amp;gt; NICK BLURB MAXIMUM MINIMUM DEFAULT_VALUE ERROR FLAGS TYPE
&lt;br&gt;@@ -701,6 +701,15 @@
&lt;br&gt;&amp;nbsp;			nodes = g_list_append(nodes,node);
&lt;br&gt;&amp;nbsp;			g_string_free($&amp;lt;cbuf&amp;gt;1,FALSE);
&lt;br&gt;&amp;nbsp;					}
&lt;br&gt;+	|	ADCODE			{
&lt;br&gt;+			Node *node = node_new (CCODE_NODE,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;cctype&amp;quot;, AD_CCODE,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;cbuf:steal&amp;quot;, ($&amp;lt;cbuf&amp;gt;1)-&amp;gt;str,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;line_no&amp;quot;, ccode_line,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp; NULL);
&lt;br&gt;+			nodes = g_list_append(nodes,node);
&lt;br&gt;+			g_string_free($&amp;lt;cbuf&amp;gt;1,FALSE);
&lt;br&gt;+					}
&lt;br&gt;&amp;nbsp;	|	HCODE			{
&lt;br&gt;&amp;nbsp;			Node *node = node_new (CCODE_NODE,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;cctype&amp;quot;, H_CCODE,
&lt;br&gt;--- src/treefuncs.def.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/treefuncs.def	2008-02-01 13:33:53.000000000 +0100
&lt;br&gt;@@ -9,6 +9,7 @@
&lt;br&gt;&amp;nbsp;	A_CCODE,
&lt;br&gt;&amp;nbsp;	AT_CCODE,
&lt;br&gt;&amp;nbsp;	C_CCODE,
&lt;br&gt;+	AD_CCODE,
&lt;br&gt;&amp;nbsp;	H_CCODE,
&lt;br&gt;&amp;nbsp;	HT_CCODE,
&lt;br&gt;&amp;nbsp;	PH_CCODE
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt; &lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15229637&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;attachment0&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/15229637/0/attachment0&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/patch-adding--afterdecls-C-code-section-tp15229637p15229637.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15175614</id>
	<title>Re: Support for C++ syntax?</title>
	<published>2008-01-29T16:53:59Z</published>
	<updated>2008-01-29T16:53:59Z</updated>
	<author>
		<name>Jean-Yves Lefort</name>
	</author>
	<content type="html">On Tue, 29 Jan 2008 16:55:54 -0600
&lt;br&gt;George &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15175614&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jirka@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Tue, Jan 29, 2008 at 12:01:44PM +0100, Jean-Yves Lefort wrote:
&lt;br&gt;&amp;gt; &amp;gt; The namespace syntax is supported if you use the --for-cpp command
&lt;br&gt;&amp;gt; &amp;gt; line option. The template syntax isn't. Supporting it properly would
&lt;br&gt;&amp;gt; &amp;gt; involve moving the handling of C/C++ types from the lexer to the
&lt;br&gt;&amp;gt; &amp;gt; parser, to be able to handle more complex types such as:
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; 	A::B&amp;lt;C, D::E::F, G&amp;lt;H::I&amp;lt;J, K&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Perhaps supporting simple templates could be an easy option. &amp;nbsp;I mean
&lt;br&gt;&amp;gt; the example above is something to be avoided anyway I guess.
&lt;/div&gt;&lt;/div&gt;Yes, I'd definitely avoid it.
&lt;br&gt;&lt;br&gt;&amp;gt; PS: I know I have been kind of quiet on the submitted patches. &amp;nbsp;Fear not,
&lt;br&gt;&amp;gt; they are in my mailbox and are waiting for me to integrate them / test them /
&lt;br&gt;&amp;gt; make a release.
&lt;br&gt;&lt;br&gt;I have no fear, since none of my previous patches have been ignored.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15175614&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br /&gt; &lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15175614&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;attachment0&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/15175614/0/attachment0&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Support-for-C%2B%2B-syntax--tp15153284p15175614.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15171695</id>
	<title>Re: Support for C++ syntax?</title>
	<published>2008-01-29T14:55:54Z</published>
	<updated>2008-01-29T14:55:54Z</updated>
	<author>
		<name>Jiri Lebl</name>
	</author>
	<content type="html">On Tue, Jan 29, 2008 at 12:01:44PM +0100, Jean-Yves Lefort wrote:
&lt;br&gt;&amp;gt; The namespace syntax is supported if you use the --for-cpp command
&lt;br&gt;&amp;gt; line option. The template syntax isn't. Supporting it properly would
&lt;br&gt;&amp;gt; involve moving the handling of C/C++ types from the lexer to the
&lt;br&gt;&amp;gt; parser, to be able to handle more complex types such as:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 	A::B&amp;lt;C, D::E::F, G&amp;lt;H::I&amp;lt;J, K&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&lt;br&gt;Perhaps supporting simple templates could be an easy option. &amp;nbsp;I mean
&lt;br&gt;the example above is something to be avoided anyway I guess.
&lt;br&gt;&lt;br&gt;There is always the possibility of putting syntax that gob hates into
&lt;br&gt;a separate file to include. &amp;nbsp;I know this is ugly, but even if support for
&lt;br&gt;templates is done, then it would still require a new enough version
&lt;br&gt;of gob.
&lt;br&gt;&lt;br&gt;George
&lt;br&gt;&lt;br&gt;PS: I know I have been kind of quiet on the submitted patches. &amp;nbsp;Fear not,
&lt;br&gt;they are in my mailbox and are waiting for me to integrate them / test them /
&lt;br&gt;make a release.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;George &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15171695&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jirka@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;You can't say civilization isn't advancing: in every war they kill you
&lt;br&gt;&amp;nbsp; &amp;nbsp;in a new way.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-- Will Rogers
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15171695&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Support-for-C%2B%2B-syntax--tp15153284p15171695.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15158045</id>
	<title>Re: Support for C++ syntax?</title>
	<published>2008-01-29T03:01:44Z</published>
	<updated>2008-01-29T03:01:44Z</updated>
	<author>
		<name>Jean-Yves Lefort</name>
	</author>
	<content type="html">On Tue, 29 Jan 2008 08:24:42 +0200
&lt;br&gt;&amp;quot;Dov Grobgeld&amp;quot; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15158045&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dov.grobgeld@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I am using gob quite a lot with a Gtk+ and C++. Unfortunately gob barfs on
&lt;br&gt;&amp;gt; some C++ syntax that it should just pass along to the cc and h files.
&lt;br&gt;&amp;gt; Currently I'm able to work around this by introducing typedefs in the
&lt;br&gt;&amp;gt; private-h section and then using them in the class definition, but I see no
&lt;br&gt;&amp;gt; reason why the parser should not support them. The constructs in question
&lt;br&gt;&amp;gt; are:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;private foo&amp;lt;bar&amp;gt; baz;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;private foo::bar baz;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Neither the &amp;lt;&amp;gt; nor the :: syntaxes are supported.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Any chance of getting this fixed?
&lt;/div&gt;&lt;/div&gt;The namespace syntax is supported if you use the --for-cpp command
&lt;br&gt;line option. The template syntax isn't. Supporting it properly would
&lt;br&gt;involve moving the handling of C/C++ types from the lexer to the
&lt;br&gt;parser, to be able to handle more complex types such as:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; A::B&amp;lt;C, D::E::F, G&amp;lt;H::I&amp;lt;J, K&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On 29/01/2008, Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15158045&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; On Mon, 28 Jan 2008 18:10:20 +0100
&lt;br&gt;&amp;gt; &amp;gt; Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15158045&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; The attached patch allows to add GCC attributes to methods, using a
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; syntax borrowed from C#.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; There was a lexer conflict between array dimensions and
&lt;br&gt;&amp;gt; &amp;gt; attributes. The fixed patches are attached.
&lt;/div&gt;&lt;/div&gt;-- 
&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15158045&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br /&gt; &lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15158045&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;attachment0&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/15158045/0/attachment0&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Support-for-C%2B%2B-syntax--tp15153284p15158045.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15153284</id>
	<title>Support for C++ syntax?</title>
	<published>2008-01-28T22:24:42Z</published>
	<updated>2008-01-28T22:24:42Z</updated>
	<author>
		<name>Dov Grobgeld-2</name>
	</author>
	<content type="html">I am using gob quite a lot with a Gtk+ and C++. Unfortunately gob barfs on some C++ syntax that it should just pass along to the cc and h files. Currently I&amp;#39;m able to work around this by introducing typedefs in the private-h section and then using them in the class definition, but I see no reason why the parser should not support them. The constructs in question are:&lt;br&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private foo&amp;lt;bar&amp;gt; baz;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private foo::bar baz;&lt;br&gt;&lt;br&gt;Neither the &amp;lt;&amp;gt; nor the :: syntaxes are supported.&lt;br&gt;&lt;br&gt;Any chance of getting this fixed?&lt;br&gt;&lt;br&gt;Thanks,&lt;br&gt;Dov&lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;span class=&quot;gmail_quote&quot;&gt;On 29/01/2008, &lt;b class=&quot;gmail_sendername&quot;&gt;Jean-Yves Lefort&lt;/b&gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15153284&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt; wrote:&lt;/span&gt;&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;
On Mon, 28 Jan 2008 18:10:20 +0100&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15153284&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt; wrote:&lt;br&gt;&lt;br&gt;&amp;gt; The attached patch allows to add GCC attributes to methods, using a&lt;br&gt;&amp;gt; syntax borrowed from C#.&lt;br&gt;
&lt;br&gt;There was a lexer conflict between array dimensions and&lt;br&gt;attributes. The fixed patches are attached.&lt;br&gt;&lt;br&gt;--&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15153284&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt;&lt;br&gt;&lt;br&gt;--&lt;br&gt;to unsubscribe:&lt;br&gt;
send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15153284&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;
&lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15153284&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Support-for-C%2B%2B-syntax--tp15153284p15153284.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15149725</id>
	<title>Re: patch allowing to add GCC attributes to methods</title>
	<published>2008-01-28T16:39:26Z</published>
	<updated>2008-01-28T16:39:26Z</updated>
	<author>
		<name>Jean-Yves Lefort</name>
	</author>
	<content type="html">On Mon, 28 Jan 2008 18:10:20 +0100
&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15149725&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; The attached patch allows to add GCC attributes to methods, using a
&lt;br&gt;&amp;gt; syntax borrowed from C#.
&lt;br&gt;&lt;br&gt;I've fixed my other patch (gob2-2.0.15-gobject-overrides.diff), so I'm
&lt;br&gt;attaching the new unified patch.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15149725&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[gob2-2.0.15-gobject-overrides-and-attr.diff]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;--- src/lexer.l.orig	2007-09-28 06:26:49.000000000 +0200
&lt;br&gt;+++ src/lexer.l	2008-01-29 01:25:46.000000000 +0100
&lt;br&gt;@@ -31,6 +31,7 @@
&lt;br&gt;&amp;nbsp;#include &amp;quot;main.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;util.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static int bracket_depth = 0;
&lt;br&gt;&amp;nbsp;static int parenth_depth = 0;
&lt;br&gt;&amp;nbsp;static int before_comment
&lt;br&gt;&amp;nbsp;/* New flex is on drugs */
&lt;br&gt;@@ -102,6 +103,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;%x COMMENT
&lt;br&gt;&amp;nbsp;%x C_CODE
&lt;br&gt;+%x ATTR_CODE
&lt;br&gt;&amp;nbsp;%x CODE_STRING
&lt;br&gt;&amp;nbsp;%x CLASS_CODE
&lt;br&gt;&amp;nbsp;%x CLASS_STRING
&lt;br&gt;@@ -267,7 +269,7 @@
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\/\/.*$		{ add_to_cbuf(yytext); /*comment, ignore*/ }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\/\/.*$	{ add_to_cbuf(yytext); /*comment, ignore*/ }
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE&amp;gt;\/\/.*$	{ ; /*comment, ignore*/ }
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;\/\/.*$	{ ; /*comment, ignore*/ }
&lt;br&gt;&amp;nbsp;&amp;lt;PROPERTY_CODE_I&amp;gt;\/\/.*$	{ ; /*comment, ignore*/ }
&lt;br&gt;@@ -277,20 +279,25 @@
&lt;br&gt;&amp;nbsp;	BEGIN(COMMENT);
&lt;br&gt;&amp;nbsp;	before_comment = C_CODE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\/\*	{
&lt;br&gt;+	add_to_cbuf(yytext);
&lt;br&gt;+	BEGIN(COMMENT);
&lt;br&gt;+	before_comment = ATTR_CODE;
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE&amp;gt;\/\*	{BEGIN(COMMENT); before_comment = CLASS_CODE; }
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;\/\*	{BEGIN(COMMENT); before_comment = CLASS_CODE_I; }
&lt;br&gt;&amp;nbsp;&amp;lt;PROPERTY_CODE_I&amp;gt;\/\*	{BEGIN(COMMENT); before_comment = PROPERTY_CODE_I; }
&lt;br&gt;&amp;nbsp;&amp;lt;COMMENT&amp;gt;\*\/	{
&lt;br&gt;-	if(before_comment == C_CODE) add_to_cbuf(yytext);
&lt;br&gt;+	if(before_comment == C_CODE || before_comment == ATTR_CODE) add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;	BEGIN(before_comment);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;COMMENT&amp;gt;.	{
&lt;br&gt;&amp;nbsp;	/* comment, ignore */
&lt;br&gt;-	if(before_comment == C_CODE) add_to_cbuf(yytext);
&lt;br&gt;+	if(before_comment == C_CODE || before_comment == ATTR_CODE) add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;COMMENT&amp;gt;\n	{
&lt;br&gt;&amp;nbsp;	/* comment, ignore */
&lt;br&gt;-	if(before_comment == C_CODE) add_to_cbuf(yytext);
&lt;br&gt;+	if(before_comment == C_CODE || before_comment == ATTR_CODE) add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;^\%(a|all)\{		{
&lt;br&gt;@@ -353,14 +360,14 @@
&lt;br&gt;&amp;nbsp;			return code_type;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\{\'		{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\\\{\'	{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\}\'		{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\\\}\'	{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\&amp;quot;\'		{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\\\&amp;quot;\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\{\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\\\{\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\}\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\\\}\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\&amp;quot;\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\\\&amp;quot;\'	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\\.	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\\.	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;C_CODE&amp;gt;\&amp;quot;	{
&lt;br&gt;@@ -368,6 +375,11 @@
&lt;br&gt;&amp;nbsp;			before_string = C_CODE;
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\&amp;quot;	{
&lt;br&gt;+			BEGIN(CODE_STRING);
&lt;br&gt;+			before_string = ATTR_CODE;
&lt;br&gt;+			add_to_cbuf(yytext);
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;&amp;lt;PROPERTY_CODE_I&amp;gt;\&amp;quot;	{
&lt;br&gt;&amp;nbsp;			BEGIN(CODE_STRING);
&lt;br&gt;&amp;nbsp;			before_string = PROPERTY_CODE_I;
&lt;br&gt;@@ -391,6 +403,10 @@
&lt;br&gt;&amp;nbsp;			parenth_depth++;
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\[	{
&lt;br&gt;+			bracket_depth++;
&lt;br&gt;+			add_to_cbuf(yytext);
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;&amp;lt;C_CODE&amp;gt;\}	{
&lt;br&gt;&amp;nbsp;			parenth_depth--;
&lt;br&gt;&amp;nbsp;			if(parenth_depth&amp;lt;0) {
&lt;br&gt;@@ -403,9 +419,21 @@
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\]	{
&lt;br&gt;+			bracket_depth--;
&lt;br&gt;+			if(bracket_depth&amp;lt;0) {
&lt;br&gt;+				REJECT;
&lt;br&gt;+			} else if(bracket_depth==0) {
&lt;br&gt;+				BEGIN(CLASS_CODE_I);
&lt;br&gt;+				yylval.cbuf = cbuf;
&lt;br&gt;+				cbuf = NULL;
&lt;br&gt;+				return CCODE;
&lt;br&gt;+			}
&lt;br&gt;+			add_to_cbuf(yytext);
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;.	{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\n	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;.	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\n	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class		{
&lt;br&gt;&amp;nbsp;			static int found_classes = 0;
&lt;br&gt;@@ -588,12 +616,12 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;(\[[0-9]*\]|\[[A-Za-z_][A-Za-z0-9_]*\])+	{
&lt;br&gt;&amp;nbsp;			yylval.id = g_strdup(yytext);
&lt;br&gt;-			return ARRAY_DIM;
&lt;br&gt;+			return ARRAY_DIM_OR_ATTR;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;:[0-9]+ {
&lt;br&gt;&amp;nbsp;			/* cheat for bitfield */
&lt;br&gt;&amp;nbsp;			yylval.id = g_strdup(yytext);
&lt;br&gt;-			return ARRAY_DIM;
&lt;br&gt;+			return BITFIELD;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE&amp;gt;\{	{
&lt;br&gt;&amp;nbsp;			BEGIN(CLASS_CODE_I);
&lt;br&gt;@@ -612,6 +640,13 @@
&lt;br&gt;&amp;nbsp;				BEGIN(INITIAL);
&lt;br&gt;&amp;nbsp;				return '}';
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;+&amp;lt;CLASS_CODE_I&amp;gt;\[	{
&lt;br&gt;+			BEGIN(ATTR_CODE);
&lt;br&gt;+			bracket_depth=1;
&lt;br&gt;+			yylval.line = line_no;
&lt;br&gt;+			clear_cbuf();
&lt;br&gt;+			return '[';
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE,CLASS_CODE_I,INITIAL,PROPERTY_CODE,PROPERTY_CODE_I&amp;gt;[\f\t ]	; &amp;nbsp;/*ignore*/
&lt;br&gt;&amp;nbsp;
&lt;br&gt;--- src/main.c.orig	2007-10-17 16:49:04.000000000 +0200
&lt;br&gt;+++ src/main.c	2008-01-29 01:25:46.000000000 +0100
&lt;br&gt;@@ -92,11 +92,16 @@
&lt;br&gt;&amp;nbsp;static gboolean special_array[SPECIAL_LAST] = {0};
&lt;br&gt;&amp;nbsp;static gboolean any_special = FALSE;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static gboolean need_constructor = FALSE;
&lt;br&gt;+static Method * user_constructor = NULL;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;static gboolean need_dispose = FALSE;
&lt;br&gt;&amp;nbsp;static Method * dispose_handler = NULL;
&lt;br&gt;+static Method * user_dispose_method = NULL;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static gboolean need_finalize = FALSE;
&lt;br&gt;&amp;nbsp;static Method * finalize_handler = NULL;
&lt;br&gt;+static Method * user_finalize_method = NULL;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;FILE *out = NULL;
&lt;br&gt;&amp;nbsp;FILE *outh = NULL;
&lt;br&gt;@@ -189,21 +194,25 @@
&lt;br&gt;&amp;nbsp;	g_free(s);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;-static void
&lt;br&gt;-print_method (FILE *fp,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *typeprefix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *nameprefix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *subnameprefix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *namepostfix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *afterargs,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *postfix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const Method *m,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean one_arg_per_line,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean no_funcbase,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean kill_underscore,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean first_unused,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean fake_names)
&lt;br&gt;+typedef enum
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_ONE_ARG_PER_LINE		= 1 &amp;lt;&amp;lt; 0,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_NO_FUNCBASE		= 1 &amp;lt;&amp;lt; 1,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_FIRST_UNUSED		= 1 &amp;lt;&amp;lt; 2,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_FAKE_NAMES		= 1 &amp;lt;&amp;lt; 3,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_NO_ATTR			= 1 &amp;lt;&amp;lt; 4
&lt;br&gt;+} PrintMethodFlags;
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+print_method2 (FILE *fp,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *typeprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *nameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *subnameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *namepostfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *afterargs,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *postfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const Method *m,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; PrintMethodFlags flags)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	GList *li;
&lt;br&gt;&amp;nbsp;	const char *id;
&lt;br&gt;@@ -213,7 +222,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	id = m-&amp;gt;id;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	if(no_funcbase)
&lt;br&gt;+	if ((flags &amp; PRINT_METHOD_NO_FUNCBASE) != 0)
&lt;br&gt;&amp;nbsp;		out_printf(fp, &amp;quot;%s%s%s%s(&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; nameprefix, subnameprefix, id, namepostfix); 
&lt;br&gt;&amp;nbsp;	else
&lt;br&gt;@@ -229,19 +238,19 @@
&lt;br&gt;&amp;nbsp;			if ( ! no_gnu &amp;&amp;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; ! for_cpp &amp;&amp; /* g++ has a cow with this */
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;li == m-&amp;gt;args &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp;first_unused) {
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; (flags &amp; PRINT_METHOD_FIRST_UNUSED) != 0) {
&lt;br&gt;&amp;nbsp;				unused = &amp;quot; G_GNUC_UNUSED&amp;quot;;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			print_type(fp, arg-&amp;gt;atype, FALSE);
&lt;br&gt;-			if (fake_names)
&lt;br&gt;+			if ((flags &amp; PRINT_METHOD_FAKE_NAMES) != 0)
&lt;br&gt;&amp;nbsp;				out_printf (fp, &amp;quot;___fake___&amp;quot;);
&lt;br&gt;&amp;nbsp;			if(li-&amp;gt;next)
&lt;br&gt;&amp;nbsp;				out_printf(fp, &amp;quot;%s%s%s,%s&amp;quot;, arg-&amp;gt;name,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; arg-&amp;gt;atype-&amp;gt;postfix ?
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; arg-&amp;gt;atype-&amp;gt;postfix : &amp;quot;&amp;quot;,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; unused,
&lt;br&gt;-					 &amp;nbsp; one_arg_per_line ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;);
&lt;br&gt;+					 &amp;nbsp; (flags &amp; PRINT_METHOD_ONE_ARG_PER_LINE) != 0 ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;);
&lt;br&gt;&amp;nbsp;			else
&lt;br&gt;&amp;nbsp;				out_printf(fp, &amp;quot;%s%s%s&amp;quot;, arg-&amp;gt;name,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; arg-&amp;gt;atype-&amp;gt;postfix ?
&lt;br&gt;@@ -250,11 +259,54 @@
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;vararg)
&lt;br&gt;&amp;nbsp;			out_printf(fp, &amp;quot;,%s...&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; one_arg_per_line ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;); 
&lt;br&gt;+				 &amp;nbsp; (flags &amp; PRINT_METHOD_ONE_ARG_PER_LINE) != 0 ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;); 
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;&amp;nbsp;		out_printf(fp, &amp;quot;void&amp;quot;); 
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-	out_printf(fp, &amp;quot;%s)%s&amp;quot;, afterargs, postfix); 
&lt;br&gt;+
&lt;br&gt;+	out_printf(fp, &amp;quot;%s)&amp;quot;, afterargs);
&lt;br&gt;+
&lt;br&gt;+	if (m-&amp;gt;attr &amp;&amp; (flags &amp; PRINT_METHOD_NO_ATTR) == 0)
&lt;br&gt;+		out_printf(fp, &amp;quot; %s&amp;quot;, m-&amp;gt;attr);
&lt;br&gt;+
&lt;br&gt;+	out_printf(fp, &amp;quot;%s&amp;quot;, postfix);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+print_method (FILE *fp,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *typeprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *nameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *subnameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *namepostfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *afterargs,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *postfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const Method *m,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean one_arg_per_line,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean no_funcbase,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean kill_underscore,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean first_unused,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean fake_names)
&lt;br&gt;+{
&lt;br&gt;+	PrintMethodFlags flags = 0;
&lt;br&gt;+
&lt;br&gt;+	if (one_arg_per_line)
&lt;br&gt;+		flags |= PRINT_METHOD_ONE_ARG_PER_LINE;
&lt;br&gt;+	if (no_funcbase)
&lt;br&gt;+		flags |= PRINT_METHOD_NO_FUNCBASE;
&lt;br&gt;+	if (first_unused)
&lt;br&gt;+		flags |= PRINT_METHOD_FIRST_UNUSED;
&lt;br&gt;+	if (fake_names)
&lt;br&gt;+		flags |= PRINT_METHOD_FAKE_NAMES;
&lt;br&gt;+
&lt;br&gt;+	print_method2(fp,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;typeprefix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;nameprefix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;subnameprefix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;namepostfix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;afterargs,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;postfix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;m,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;flags);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static gboolean
&lt;br&gt;@@ -269,6 +321,9 @@
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == FINALIZE_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == OVERRIDE_METHOD)
&lt;br&gt;&amp;nbsp;				continue;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -291,6 +346,9 @@
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == FINALIZE_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == OVERRIDE_METHOD)
&lt;br&gt;&amp;nbsp;				continue;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -330,6 +388,9 @@
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == FINALIZE_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == OVERRIDE_METHOD)
&lt;br&gt;&amp;nbsp;				continue;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -371,11 +432,13 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/* if a signal mark it as such */
&lt;br&gt;&amp;nbsp;	if(m-&amp;gt;method != VIRTUAL_METHOD)
&lt;br&gt;-		print_method(outh, &amp;quot;\t/*signal*/&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, TRUE, TRUE, FALSE, FALSE);
&lt;br&gt;+		print_method2(outh, &amp;quot;\t/*signal*/&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_FUNCBASE |
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;	else
&lt;br&gt;-		print_method(outh, &amp;quot;\t&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, TRUE, TRUE, FALSE, FALSE);
&lt;br&gt;+		print_method2(outh, &amp;quot;\t&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_FUNCBASE |
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;@@ -422,8 +485,11 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\&amp;quot;%s\&amp;quot;,&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;(GCallback) __extension__ ({&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase, m-&amp;gt;id, macrobase, typebase, m-&amp;gt;id);
&lt;br&gt;-		print_method (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; = (func); &amp;quot;, m, FALSE, TRUE, TRUE, FALSE, TRUE);
&lt;br&gt;+		print_method2 (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot; = (func); &amp;quot;, m,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; PRINT_METHOD_NO_FUNCBASE
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_FAKE_NAMES
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_printf (outh, &amp;quot;___%s; }), (data))\n&amp;quot;, m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		/* connect_after */
&lt;br&gt;@@ -433,8 +499,11 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\&amp;quot;%s\&amp;quot;,&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;(GCallback) __extension__ ({&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase, m-&amp;gt;id, macrobase, typebase, m-&amp;gt;id);
&lt;br&gt;-		print_method (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; = (func); &amp;quot;, m, FALSE, TRUE, TRUE, FALSE, TRUE);
&lt;br&gt;+		print_method2 (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot; = (func); &amp;quot;, m,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; PRINT_METHOD_NO_FUNCBASE
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_FAKE_NAMES
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_printf (outh, &amp;quot;___%s; }), (data))\n&amp;quot;, m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		/* connect_data */
&lt;br&gt;@@ -445,8 +514,11 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\&amp;quot;%s\&amp;quot;,&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;(GCallback) __extension__ ({&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase, m-&amp;gt;id, macrobase, typebase, m-&amp;gt;id);
&lt;br&gt;-		print_method (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; = (func); &amp;quot;, m, FALSE, TRUE, TRUE, FALSE, TRUE);
&lt;br&gt;+		print_method2 (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot; = (func); &amp;quot;, m,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; PRINT_METHOD_NO_FUNCBASE
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_FAKE_NAMES
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_printf (outh, &amp;quot;___%s; }), (data), (destroy_data), (GConnectFlags)(flags))\n&amp;quot;, m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -526,9 +598,9 @@
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; m-&amp;gt;method == SIGNAL_FIRST_METHOD ||
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; m-&amp;gt;method == VIRTUAL_METHOD) {
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;cbuf)
&lt;br&gt;-			print_method(out,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;quot;static &amp;quot;, &amp;quot;___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;static &amp;quot;, &amp;quot;___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	/* no else, here, it might still have a private prototype, it's not
&lt;br&gt;&amp;nbsp;	 * exclusive */
&lt;br&gt;@@ -537,15 +609,16 @@
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp;m-&amp;gt;cbuf)) {
&lt;br&gt;&amp;nbsp;		/* add unique ID */
&lt;br&gt;&amp;nbsp;		char *s = g_strdup_printf(&amp;quot;___%x_&amp;quot;, (guint)m-&amp;gt;unique_id);
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, s, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; no_gnu?&amp;quot;;\n&amp;quot;:&amp;quot; G_GNUC_UNUSED;\n&amp;quot;,
&lt;br&gt;+		print_method(out, &amp;quot;static &amp;quot;, s, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, FALSE, FALSE, FALSE);
&lt;br&gt;&amp;nbsp;		g_free(s);
&lt;br&gt;&amp;nbsp;	} else if(m-&amp;gt;scope == PRIVATE_SCOPE ||
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;-		 &amp;nbsp;m-&amp;gt;method == CLASS_INIT_METHOD) {
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; no_gnu?&amp;quot;;\n&amp;quot;:&amp;quot; G_GNUC_UNUSED;\n&amp;quot;,
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == FINALIZE_METHOD) {
&lt;br&gt;+		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -629,66 +702,68 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static void
&lt;br&gt;-find_dispose(const Class *cl)
&lt;br&gt;+static Method *
&lt;br&gt;+find_method(const Class *cl, int method, const char *id)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	GList *li;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	dispose_handler = NULL;
&lt;br&gt;&amp;nbsp;	for(li=cl-&amp;gt;nodes;li;li=g_list_next(li)) {
&lt;br&gt;&amp;nbsp;		Node *n = li-&amp;gt;data;
&lt;br&gt;&amp;nbsp;		if(n-&amp;gt;type == METHOD_NODE) {
&lt;br&gt;&amp;nbsp;			Method *m = (Method *)n;
&lt;br&gt;-			if(m-&amp;gt;method == OVERRIDE_METHOD &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; strcmp(m-&amp;gt;id, &amp;quot;dispose&amp;quot;)==0) {
&lt;br&gt;-				if(strcmp(m-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				if(g_list_length(m-&amp;gt;args) != 1) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				dispose_handler = m;
&lt;br&gt;-				break;
&lt;br&gt;-			}
&lt;br&gt;+			if (m-&amp;gt;method == method
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp;&amp;&amp; (id == NULL || strcmp(m-&amp;gt;id, id)==0))
&lt;br&gt;+				return m;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+	return NULL;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;-find_finalize(const Class *cl)
&lt;br&gt;+find_constructor(const Class *cl)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	GList *li;
&lt;br&gt;+	user_constructor = find_method(cl, CONSTRUCTOR_METHOD, NULL);
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	finalize_handler = NULL;
&lt;br&gt;-	for(li=cl-&amp;gt;nodes;li;li=g_list_next(li)) {
&lt;br&gt;-		Node *n = li-&amp;gt;data;
&lt;br&gt;-		if(n-&amp;gt;type == METHOD_NODE) {
&lt;br&gt;-			Method *m = (Method *)n;
&lt;br&gt;-			if(m-&amp;gt;method == OVERRIDE_METHOD &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; strcmp(m-&amp;gt;id, &amp;quot;finalize&amp;quot;)==0) {
&lt;br&gt;-				if(strcmp(m-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				if(g_list_length(m-&amp;gt;args) != 1) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				finalize_handler = m;
&lt;br&gt;-				break;
&lt;br&gt;-			}
&lt;br&gt;-		}
&lt;br&gt;+static void
&lt;br&gt;+find_dispose(const Class *cl)
&lt;br&gt;+{
&lt;br&gt;+	dispose_handler = find_method(cl, OVERRIDE_METHOD, &amp;quot;dispose&amp;quot;);
&lt;br&gt;+	if (dispose_handler != NULL) {
&lt;br&gt;+		if(strcmp(dispose_handler-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0)
&lt;br&gt;+			error_print(GOB_ERROR, dispose_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;+		if(g_list_length(dispose_handler-&amp;gt;args) != 1)
&lt;br&gt;+			error_print(GOB_ERROR, dispose_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	user_dispose_method = find_method(cl, DISPOSE_METHOD, NULL);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+find_finalize(const Class *cl)
&lt;br&gt;+{
&lt;br&gt;+	finalize_handler = find_method(cl, OVERRIDE_METHOD, &amp;quot;finalize&amp;quot;);
&lt;br&gt;+	if (finalize_handler != NULL) {
&lt;br&gt;+		if(strcmp(finalize_handler-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0)
&lt;br&gt;+			error_print(GOB_ERROR, finalize_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;+		if(g_list_length(finalize_handler-&amp;gt;args) != 1)
&lt;br&gt;+			error_print(GOB_ERROR, finalize_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+	user_finalize_method = find_method(cl, FINALIZE_METHOD, NULL);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -2118,6 +2193,33 @@
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;+add_constructor (Class *c)
&lt;br&gt;+{
&lt;br&gt;+	out_printf(out, &amp;quot;\nstatic GObject *\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;___constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties)\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;{\n&amp;quot;);
&lt;br&gt;+	out_printf(out,
&lt;br&gt;+		 &amp;nbsp; &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::constructor\&amp;quot;\n&amp;quot;,
&lt;br&gt;+		 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;+
&lt;br&gt;+	out_printf(out, &amp;quot;\tGObject *obj_self;\n&amp;quot;);
&lt;br&gt;+	out_printf(out, &amp;quot;\t%s *self;\n&amp;quot;, typebase);
&lt;br&gt;+
&lt;br&gt;+	out_printf(out, &amp;quot;\tobj_self = G_OBJECT_CLASS (parent_class)-&amp;gt;constructor (type, n_construct_properties, construct_properties);\n&amp;quot;);
&lt;br&gt;+	out_printf(out, &amp;quot;\tself = %s (obj_self);\n&amp;quot;, macrobase);
&lt;br&gt;+
&lt;br&gt;+	if (user_constructor-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+		out_addline_infile (out, user_constructor-&amp;gt;line_no);
&lt;br&gt;+	out_printf (out, &amp;quot;\t%s_constructor (self);\n&amp;quot;, funcbase);
&lt;br&gt;+	if (user_constructor-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+		out_addline_outfile (out);
&lt;br&gt;+
&lt;br&gt;+	out_printf(out, &amp;quot;\treturn obj_self;\n&amp;quot;);
&lt;br&gt;+	out_printf(out, &amp;quot;}\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;#undef __GOB_FUNCTION__\n\n&amp;quot;);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;&amp;nbsp;add_dispose (Class *c)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	out_printf(out, &amp;quot;\nstatic void\n&amp;quot;
&lt;br&gt;@@ -2127,7 +2229,7 @@
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::dispose\&amp;quot;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	if (unreftors &amp;gt; 0) {
&lt;br&gt;+	if (unreftors &amp;gt; 0 || user_dispose_method != NULL) {
&lt;br&gt;&amp;nbsp;		out_printf (out, &amp;quot;\t%s *self%s = %s (obj_self);\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;typebase,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;! no_gnu ? &amp;quot; G_GNUC_UNUSED&amp;quot; : &amp;quot;&amp;quot;,
&lt;br&gt;@@ -2143,6 +2245,14 @@
&lt;br&gt;&amp;nbsp;		if (dispose_handler-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_outfile (out);
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;+		if (user_dispose_method != NULL) {
&lt;br&gt;+			if (user_dispose_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_infile (out, user_dispose_method-&amp;gt;line_no);
&lt;br&gt;+			out_printf (out, &amp;quot;\t%s_dispose (self);\n&amp;quot;, funcbase);
&lt;br&gt;+			if (user_dispose_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_outfile (out);
&lt;br&gt;+		}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;		out_printf (out,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\tif (G_OBJECT_CLASS (parent_class)-&amp;gt;dispose) \\\n&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\t\t(* G_OBJECT_CLASS (parent_class)-&amp;gt;dispose) (obj_self);\n&amp;quot;);
&lt;br&gt;@@ -2178,7 +2288,8 @@
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (privates &amp;gt; 0 ||
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;destructors &amp;gt; 0) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;destructors &amp;gt; 0 ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;user_finalize_method != NULL) {
&lt;br&gt;&amp;nbsp;		const char *unused = &amp;quot;&amp;quot;;
&lt;br&gt;&amp;nbsp;		if ( ! no_gnu)
&lt;br&gt;&amp;nbsp;			unused = &amp;quot; G_GNUC_UNUSED&amp;quot;;
&lt;br&gt;@@ -2202,6 +2313,14 @@
&lt;br&gt;&amp;nbsp;		if(finalize_handler-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_outfile(out);
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;+		if (user_finalize_method != NULL) {
&lt;br&gt;+			if (user_finalize_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_infile (out, user_finalize_method-&amp;gt;line_no);
&lt;br&gt;+			out_printf (out, &amp;quot;\t%s_finalize (self);\n&amp;quot;, funcbase);
&lt;br&gt;+			if (user_finalize_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_outfile (out);
&lt;br&gt;+		}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;		out_printf(out,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;quot;\tif(G_OBJECT_CLASS(parent_class)-&amp;gt;finalize) \\\n&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;quot;\t\t(* G_OBJECT_CLASS(parent_class)-&amp;gt;finalize)(obj_self);\n&amp;quot;);
&lt;br&gt;@@ -2333,6 +2452,7 @@
&lt;br&gt;&amp;nbsp;			if (set_properties &amp;gt; 0 ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;get_properties &amp;gt; 0 ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;signals &amp;gt; 0 ||
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp;need_constructor ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;need_dispose ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;need_finalize) {
&lt;br&gt;&amp;nbsp;				out_printf(out,
&lt;br&gt;@@ -2381,6 +2501,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			/* if there are no handlers for these things, we
&lt;br&gt;&amp;nbsp;			 * need to set them up here */
&lt;br&gt;+			if(need_constructor)
&lt;br&gt;+				out_printf(out, &amp;quot;\tg_object_class-&amp;gt;constructor &amp;quot;
&lt;br&gt;+					 &amp;nbsp; &amp;quot;= ___constructor;\n&amp;quot;);
&lt;br&gt;&amp;nbsp;			if(need_dispose &amp;&amp; !dispose_handler)
&lt;br&gt;&amp;nbsp;				out_printf(out, &amp;quot;\tg_object_class-&amp;gt;dispose &amp;quot;
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;quot;= ___dispose;\n&amp;quot;);
&lt;br&gt;@@ -2831,11 +2954,11 @@
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;scope == PRIVATE_SCOPE)
&lt;br&gt;-			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;-			print_method(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		print_method_body(m, TRUE, TRUE);
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;@@ -2844,11 +2967,11 @@
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;scope == PRIVATE_SCOPE)
&lt;br&gt;-			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;-			print_method(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_addline_outfile (out);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		out_printf (out, &amp;quot;{\n&amp;quot;);
&lt;br&gt;@@ -2966,8 +3089,8 @@
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, TRUE, FALSE);
&lt;br&gt;+		print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		print_method_body(m, FALSE, TRUE);
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;@@ -2975,11 +3098,11 @@
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;scope==PRIVATE_SCOPE)
&lt;br&gt;-			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;-			print_method(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_addline_outfile(out);
&lt;br&gt;&amp;nbsp;		out_printf(out, &amp;quot;{\n&amp;quot;
&lt;br&gt;&amp;nbsp;			&amp;quot;\t%sClass *klass;\n&amp;quot;, typebase);
&lt;br&gt;@@ -3024,8 +3147,9 @@
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, TRUE, FALSE);
&lt;br&gt;+		print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_FIRST_UNUSED
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;| PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		print_method_body(m, FALSE, TRUE);
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;@@ -3064,6 +3188,15 @@
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		out_printf(out, &amp;quot;#undef PARENT_HANDLER\n&amp;quot;);
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;+	case CONSTRUCTOR_METHOD:
&lt;br&gt;+	case DISPOSE_METHOD:
&lt;br&gt;+	case FINALIZE_METHOD:
&lt;br&gt;+		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;+		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+		print_method_body(m, TRUE, TRUE);
&lt;br&gt;+		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;	default:
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -3633,6 +3766,9 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	if (need_constructor)
&lt;br&gt;+		add_constructor (c);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	if (need_dispose)
&lt;br&gt;&amp;nbsp;		add_dispose (c);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -4441,15 +4577,24 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	make_bases ();
&lt;br&gt;&amp;nbsp;	make_inits ((Class *)class);
&lt;br&gt;-	if(unreftors &amp;gt; 0) {
&lt;br&gt;+
&lt;br&gt;+	find_constructor ((Class *)class);
&lt;br&gt;+	if (user_constructor != NULL)
&lt;br&gt;+		need_constructor = TRUE;
&lt;br&gt;+
&lt;br&gt;+	find_dispose ((Class *)class);
&lt;br&gt;+	if (unreftors &amp;gt; 0 ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;dispose_handler != NULL ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;user_dispose_method != NULL)
&lt;br&gt;&amp;nbsp;		need_dispose = TRUE;
&lt;br&gt;-		find_dispose ((Class *)class);
&lt;br&gt;-	}
&lt;br&gt;+
&lt;br&gt;+	find_finalize ((Class *)class);
&lt;br&gt;&amp;nbsp;	if (destructors &amp;gt; 0 ||
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;privates &amp;gt; 0) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;privates &amp;gt; 0 ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;user_finalize_method != NULL) {
&lt;br&gt;&amp;nbsp;		need_finalize = TRUE;
&lt;br&gt;-		find_finalize ((Class *)class);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	check_bad_symbols ((Class *)class);
&lt;br&gt;&amp;nbsp;	check_duplicate_symbols ((Class *)class);
&lt;br&gt;&amp;nbsp;	check_duplicate_overrides ((Class *)class);
&lt;br&gt;--- src/parse.y.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/parse.y	2008-01-29 01:25:46.000000000 +0100
&lt;br&gt;@@ -146,7 +146,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;&amp;nbsp;push_function (int scope, int method, char *oid, char *id,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; GString *cbuf, int line_no, int ccode_line,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; GString *attr, GString *cbuf, int line_no, int ccode_line,
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; &amp;nbsp; gboolean vararg, GList *flags)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	Node *node;
&lt;br&gt;@@ -155,7 +155,11 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	g_assert(scope != CLASS_SCOPE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;-	if(method == INIT_METHOD || method == CLASS_INIT_METHOD) {
&lt;br&gt;+	if(method == INIT_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == CLASS_INIT_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == CONSTRUCTOR_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == DISPOSE_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == FINALIZE_METHOD) {
&lt;br&gt;&amp;nbsp;		type = (Type *)node_new (TYPE_NODE,
&lt;br&gt;&amp;nbsp;					 &amp;quot;name&amp;quot;, &amp;quot;void&amp;quot;,
&lt;br&gt;&amp;nbsp;					 NULL);
&lt;br&gt;@@ -207,6 +211,7 @@
&lt;br&gt;&amp;nbsp;			 &amp;quot;args:steal&amp;quot;, funcargs,
&lt;br&gt;&amp;nbsp;			 &amp;quot;onerror:steal&amp;quot;, onerror,
&lt;br&gt;&amp;nbsp;			 &amp;quot;defreturn:steal&amp;quot;, defreturn,
&lt;br&gt;+			 &amp;quot;attr:steal&amp;quot;, attr ? attr-&amp;gt;str : NULL,
&lt;br&gt;&amp;nbsp;			 &amp;quot;cbuf:steal&amp;quot;, c_cbuf,
&lt;br&gt;&amp;nbsp;			 &amp;quot;line_no&amp;quot;, line_no,
&lt;br&gt;&amp;nbsp;			 &amp;quot;ccode_line&amp;quot;, ccode_line,
&lt;br&gt;@@ -216,6 +221,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	last_added_method = (Method *)node;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	if(attr)
&lt;br&gt;+		g_string_free(attr, FALSE);
&lt;br&gt;&amp;nbsp;	if(cbuf)
&lt;br&gt;&amp;nbsp;		g_string_free(cbuf,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp;/*only free segment if we haven't passed it
&lt;br&gt;@@ -405,7 +412,7 @@
&lt;br&gt;&amp;nbsp;		push_funcarg (&amp;quot;self&amp;quot;, FALSE);
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		push_function (PUBLIC_SCOPE, REGULAR_METHOD, NULL,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp; get_id, get_cbuf, get_lineno,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; get_id, NULL, get_cbuf, get_lineno,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; lineno, FALSE, NULL);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;@@ -439,7 +446,7 @@
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;&amp;nbsp;		typestack = g_list_prepend (typestack, node2);
&lt;br&gt;&amp;nbsp;		push_function (PUBLIC_SCOPE, REGULAR_METHOD, NULL,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp; set_id, set_cbuf, set_lineno,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; set_id, NULL, set_cbuf, set_lineno,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; lineno, FALSE, NULL);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -677,7 +684,7 @@
&lt;br&gt;&amp;nbsp;%token CONST VOID STRUCT UNION ENUM THREEDOTS
&lt;br&gt;&amp;nbsp;%token SIGNED UNSIGNED LONG SHORT INT FLOAT DOUBLE CHAR
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-%token &amp;lt;id&amp;gt; TOKEN NUMBER TYPETOKEN ARRAY_DIM SINGLE_CHAR
&lt;br&gt;+%token &amp;lt;id&amp;gt; TOKEN NUMBER TYPETOKEN ARRAY_DIM_OR_ATTR BITFIELD SINGLE_CHAR
&lt;br&gt;&amp;nbsp;%token &amp;lt;cbuf&amp;gt; CCODE HTCODE PHCODE HCODE ACODE ATCODE STRING
&lt;br&gt;&amp;nbsp;%token &amp;lt;line&amp;gt; PUBLIC PRIVATE PROTECTED CLASSWIDE PROPERTY ARGUMENT
&lt;br&gt;&amp;nbsp;%token &amp;lt;line&amp;gt; VIRTUAL SIGNAL OVERRIDE
&lt;br&gt;@@ -982,7 +989,7 @@
&lt;br&gt;&amp;nbsp;variable:	scope type TOKEN varoptions ';'		{
&lt;br&gt;&amp;nbsp;			push_variable($&amp;lt;id&amp;gt;3, the_scope,$&amp;lt;line&amp;gt;1, NULL);
&lt;br&gt;&amp;nbsp;						}
&lt;br&gt;-	|	scope type TOKEN ARRAY_DIM varoptions ';'	{
&lt;br&gt;+	|	scope type TOKEN array_dim varoptions ';'	{
&lt;br&gt;&amp;nbsp;			push_variable($&amp;lt;id&amp;gt;3, the_scope, $&amp;lt;line&amp;gt;1, $&amp;lt;id&amp;gt;4);
&lt;br&gt;&amp;nbsp;						}
&lt;br&gt;&amp;nbsp;	;
&lt;br&gt;@@ -1678,9 +1685,25 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, $&amp;lt;sigtype&amp;gt;3,NULL,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;5, $&amp;lt;cbuf&amp;gt;10,$&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;5, NULL, $&amp;lt;cbuf&amp;gt;10,$&amp;lt;line&amp;gt;1,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;2);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;+	|	attrs SIGNAL flags fullsigtype type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;signal without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, $&amp;lt;sigtype&amp;gt;4,NULL,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, $&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;11,$&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;3);
&lt;br&gt;+									}
&lt;br&gt;&amp;nbsp;	|	scope SIGNAL flags simplesigtype type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;&amp;nbsp;			if(!has_self) {
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;signal without 'self' as &amp;quot;
&lt;br&gt;@@ -1694,9 +1717,25 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, $&amp;lt;sigtype&amp;gt;4, NULL,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, $&amp;lt;cbuf&amp;gt;11, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, NULL, $&amp;lt;cbuf&amp;gt;11, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;3);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;+	|	attrs scope SIGNAL flags simplesigtype type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;signal without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, $&amp;lt;sigtype&amp;gt;5, NULL,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;7, $&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;12, $&amp;lt;line&amp;gt;3,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;4);
&lt;br&gt;+									}
&lt;br&gt;&amp;nbsp;	|	VIRTUAL scope type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;&amp;nbsp;			if(!has_self) {
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;@@ -1710,7 +1749,23 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;4,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;+									}
&lt;br&gt;+	|	attrs VIRTUAL scope type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;5,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;10, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;&amp;nbsp;	|	scope VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;@@ -1726,7 +1781,23 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;4,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;+									}
&lt;br&gt;+	|	attrs scope VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;5,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;10, $&amp;lt;line&amp;gt;3,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;&amp;nbsp;	|	VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;@@ -1737,12 +1808,23 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(PUBLIC_SCOPE, VIRTUAL_METHOD, NULL,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;3, $&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;3, NULL, $&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;+									}
&lt;br&gt;+	|	attrs VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(PUBLIC_SCOPE, VIRTUAL_METHOD, NULL,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;4, $&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;&amp;nbsp;	|	OVERRIDE '(' TYPETOKEN ')' type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;&amp;nbsp;			push_function(NO_SCOPE, OVERRIDE_METHOD, $&amp;lt;id&amp;gt;3,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, $&amp;lt;cbuf&amp;gt;11,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, NULL, $&amp;lt;cbuf&amp;gt;11,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;line&amp;gt;1, ccode_line,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;@@ -1753,32 +1835,74 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, REGULAR_METHOD, NULL, $&amp;lt;id&amp;gt;3,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1, ccode_line,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, $&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1, ccode_line,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;vararg, NULL);
&lt;br&gt;+								}
&lt;br&gt;+	|	attrs scope type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, REGULAR_METHOD, NULL, $&amp;lt;id&amp;gt;4,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2, ccode_line,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;vararg, NULL);
&lt;br&gt;&amp;nbsp;								}
&lt;br&gt;&amp;nbsp;	|	TOKEN '(' TOKEN ')' codenocode	{
&lt;br&gt;&amp;nbsp;			if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;init&amp;quot;)==0) {
&lt;br&gt;&amp;nbsp;				push_init_arg($&amp;lt;id&amp;gt;3,FALSE);
&lt;br&gt;&amp;nbsp;				push_function(NO_SCOPE, INIT_METHOD, NULL,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;&amp;nbsp;			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;class_init&amp;quot;)==0) {
&lt;br&gt;&amp;nbsp;				push_init_arg($&amp;lt;id&amp;gt;3,TRUE);
&lt;br&gt;&amp;nbsp;				push_function(NO_SCOPE, CLASS_INIT_METHOD, NULL,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;constructor&amp;quot;)==0) {
&lt;br&gt;+				push_init_arg($&amp;lt;id&amp;gt;3, FALSE);
&lt;br&gt;+				push_function(NO_SCOPE, CONSTRUCTOR_METHOD, NULL,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;dispose&amp;quot;)==0) {
&lt;br&gt;+				push_init_arg($&amp;lt;id&amp;gt;3, FALSE);
&lt;br&gt;+				push_function(NO_SCOPE, DISPOSE_METHOD, NULL,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;finalize&amp;quot;)==0) {
&lt;br&gt;+				push_init_arg($&amp;lt;id&amp;gt;3, FALSE);
&lt;br&gt;+				push_function(NO_SCOPE, FINALIZE_METHOD, NULL,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;&amp;nbsp;			} else {
&lt;br&gt;&amp;nbsp;				g_free($&amp;lt;id&amp;gt;1);
&lt;br&gt;&amp;nbsp;				g_free($&amp;lt;id&amp;gt;3);
&lt;br&gt;&amp;nbsp;				g_string_free($&amp;lt;cbuf&amp;gt;5,TRUE);
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;parse error &amp;quot;
&lt;br&gt;-					 &amp;nbsp;&amp;quot;(untyped blocks must be init or &amp;quot;
&lt;br&gt;-					 &amp;nbsp;&amp;quot;class_init)&amp;quot;));
&lt;br&gt;+					 &amp;nbsp;&amp;quot;(untyped blocks must be init, &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;class_init, constructor, dispose &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;or finalize)&amp;quot;));
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;						}
&lt;br&gt;&amp;nbsp;	;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+attrs:
&lt;br&gt;+		'[' CCODE {
&lt;br&gt;+			$&amp;lt;cbuf&amp;gt;$ = $&amp;lt;cbuf&amp;gt;2;
&lt;br&gt;+		}
&lt;br&gt;+	|	ARRAY_DIM_OR_ATTR {
&lt;br&gt;+			int len = strlen($&amp;lt;id&amp;gt;1);
&lt;br&gt;+
&lt;br&gt;+			g_assert($&amp;lt;id&amp;gt;1[0] == '[');
&lt;br&gt;+			g_assert(len &amp;gt;= 2 &amp;&amp; $&amp;lt;id&amp;gt;1[len - 1] == ']');
&lt;br&gt;+
&lt;br&gt;+			/* strip the brackets */
&lt;br&gt;+			$&amp;lt;cbuf&amp;gt;$ = g_string_new_len($&amp;lt;id&amp;gt;1 + 1, len - 2);
&lt;br&gt;+			g_free($&amp;lt;id&amp;gt;1);
&lt;br&gt;+		}
&lt;br&gt;+	;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;returnvals:	TOKEN retcode		{
&lt;br&gt;&amp;nbsp;			g_free(onerror); onerror = NULL;
&lt;br&gt;&amp;nbsp;			g_free(defreturn); defreturn = NULL;
&lt;br&gt;@@ -1900,7 +2024,7 @@
&lt;br&gt;&amp;nbsp;arg:		type TOKEN					{
&lt;br&gt;&amp;nbsp;			push_funcarg($&amp;lt;id&amp;gt;2,NULL);
&lt;br&gt;&amp;nbsp;								}
&lt;br&gt;-	|	type TOKEN ARRAY_DIM				{
&lt;br&gt;+	|	type TOKEN array_dim				{
&lt;br&gt;&amp;nbsp;			push_funcarg($&amp;lt;id&amp;gt;2,$&amp;lt;id&amp;gt;3);
&lt;br&gt;&amp;nbsp;								}
&lt;br&gt;&amp;nbsp;	|	type TOKEN '(' TOKEN checklist ')'		{
&lt;br&gt;@@ -1911,7 +2035,7 @@
&lt;br&gt;&amp;nbsp;			g_free($&amp;lt;id&amp;gt;4);
&lt;br&gt;&amp;nbsp;			push_funcarg($&amp;lt;id&amp;gt;2,NULL);
&lt;br&gt;&amp;nbsp;								}
&lt;br&gt;-	|	type TOKEN ARRAY_DIM '(' TOKEN checklist ')'	{
&lt;br&gt;+	|	type TOKEN array_dim '(' TOKEN checklist ')'	{
&lt;br&gt;&amp;nbsp;			if(strcmp($&amp;lt;id&amp;gt;5,&amp;quot;check&amp;quot;)!=0) {
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;@@ -2105,5 +2229,10 @@
&lt;br&gt;&amp;nbsp;	|	SINGLE_CHAR		{ $&amp;lt;id&amp;gt;$ = $&amp;lt;id&amp;gt;1; }
&lt;br&gt;&amp;nbsp;	|	TOKEN			{ $&amp;lt;id&amp;gt;$ = $&amp;lt;id&amp;gt;1; }
&lt;br&gt;&amp;nbsp;	;
&lt;br&gt;+
&lt;br&gt;+array_dim:
&lt;br&gt;+		ARRAY_DIM_OR_ATTR
&lt;br&gt;+	|	BITFIELD
&lt;br&gt;+	;
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;&amp;nbsp;%%
&lt;br&gt;--- src/treefuncs.def.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/treefuncs.def	2008-01-29 01:25:46.000000000 +0100
&lt;br&gt;@@ -40,6 +40,9 @@
&lt;br&gt;&amp;nbsp;	REGULAR_METHOD,
&lt;br&gt;&amp;nbsp;	INIT_METHOD,
&lt;br&gt;&amp;nbsp;	CLASS_INIT_METHOD,
&lt;br&gt;+	CONSTRUCTOR_METHOD,
&lt;br&gt;+	DISPOSE_METHOD,
&lt;br&gt;+	FINALIZE_METHOD,
&lt;br&gt;&amp;nbsp;	VIRTUAL_METHOD,
&lt;br&gt;&amp;nbsp;	SIGNAL_LAST_METHOD,
&lt;br&gt;&amp;nbsp;	SIGNAL_FIRST_METHOD,
&lt;br&gt;@@ -126,6 +129,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;NODELIST	args
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	onerror
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	defreturn
&lt;br&gt;+ &amp;nbsp;STRING	attr
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	cbuf
&lt;br&gt;&amp;nbsp; &amp;nbsp;INT		line_no
&lt;br&gt;&amp;nbsp; &amp;nbsp;INT		ccode_line
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt; &lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15149725&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;attachment0&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/15149725/0/attachment0&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/patch-allowing-to-add-GCC-attributes-to-methods-tp15141367p15149725.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15149993</id>
	<title>Re: patch adding first-class support of constructor/dispose/finalize methods</title>
	<published>2008-01-28T16:36:03Z</published>
	<updated>2008-01-28T16:36:03Z</updated>
	<author>
		<name>Jean-Yves Lefort</name>
	</author>
	<content type="html">On Mon, 21 Jan 2008 01:24:53 +0100
&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15149993&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; The attached patch allows to write:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 	constructor (self)
&lt;br&gt;&amp;gt; 	{
&lt;br&gt;&amp;gt; 		/* hi */
&lt;br&gt;&amp;gt; 	}
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 	dispose (self)
&lt;br&gt;&amp;gt; 	{
&lt;br&gt;&amp;gt; 		/* hi */
&lt;br&gt;&amp;gt; 	}
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 	finalize (self)
&lt;br&gt;&amp;gt; 	{
&lt;br&gt;&amp;gt; 		/* hi */
&lt;br&gt;&amp;gt; 	}
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; instead of:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 	override (G:Object) GObject *
&lt;br&gt;&amp;gt; 	constructor (GType type, unsigned int n_construct_properties, GObjectConstructParam *construct_params)
&lt;br&gt;&amp;gt; 	{
&lt;br&gt;&amp;gt; 		GObject *object;
&lt;br&gt;&amp;gt; 		Self *self;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 		object = PARENT_HANDLER(type, n_construct_properties, construct_params);
&lt;br&gt;&amp;gt; 		self = SELF(object);
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 		/* hi */
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 		return object;
&lt;br&gt;&amp;gt; 	}
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 	override (G:Object) void
&lt;br&gt;&amp;gt; 	dispose (GObject *object)
&lt;br&gt;&amp;gt; 	{
&lt;br&gt;&amp;gt; 		Self *self = SELF(object);
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 		/* hi */
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 		PARENT_HANDLER(object);
&lt;br&gt;&amp;gt; 	}
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 	override (G:Object) void
&lt;br&gt;&amp;gt; 	finalize (GObject *object)
&lt;br&gt;&amp;gt; 	{
&lt;br&gt;&amp;gt; 		Self *self = SELF(object);
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 		/* hi */
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 		PARENT_HANDLER(object);
&lt;br&gt;&amp;gt; 	}
&lt;/div&gt;&lt;/div&gt;In some cases, the generated class_init function used a nonexistent
&lt;br&gt;g_object_class variable. I've attached a fixed patch.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15149993&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[gob2-2.0.15-gobject-overrides.diff]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;--- src/main.c.orig	2007-10-17 16:49:04.000000000 +0200
&lt;br&gt;+++ src/main.c	2008-01-29 01:21:02.000000000 +0100
&lt;br&gt;@@ -92,11 +92,16 @@
&lt;br&gt;&amp;nbsp;static gboolean special_array[SPECIAL_LAST] = {0};
&lt;br&gt;&amp;nbsp;static gboolean any_special = FALSE;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static gboolean need_constructor = FALSE;
&lt;br&gt;+static Method * user_constructor = NULL;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;static gboolean need_dispose = FALSE;
&lt;br&gt;&amp;nbsp;static Method * dispose_handler = NULL;
&lt;br&gt;+static Method * user_dispose_method = NULL;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static gboolean need_finalize = FALSE;
&lt;br&gt;&amp;nbsp;static Method * finalize_handler = NULL;
&lt;br&gt;+static Method * user_finalize_method = NULL;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;FILE *out = NULL;
&lt;br&gt;&amp;nbsp;FILE *outh = NULL;
&lt;br&gt;@@ -269,6 +274,9 @@
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == FINALIZE_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == OVERRIDE_METHOD)
&lt;br&gt;&amp;nbsp;				continue;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -291,6 +299,9 @@
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == FINALIZE_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == OVERRIDE_METHOD)
&lt;br&gt;&amp;nbsp;				continue;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -330,6 +341,9 @@
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == FINALIZE_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == OVERRIDE_METHOD)
&lt;br&gt;&amp;nbsp;				continue;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -543,7 +557,10 @@
&lt;br&gt;&amp;nbsp;		g_free(s);
&lt;br&gt;&amp;nbsp;	} else if(m-&amp;gt;scope == PRIVATE_SCOPE ||
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;-		 &amp;nbsp;m-&amp;gt;method == CLASS_INIT_METHOD) {
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == CLASS_INIT_METHOD || 
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == FINALIZE_METHOD) {
&lt;br&gt;&amp;nbsp;		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; no_gnu?&amp;quot;;\n&amp;quot;:&amp;quot; G_GNUC_UNUSED;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;@@ -629,66 +646,68 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static void
&lt;br&gt;-find_dispose(const Class *cl)
&lt;br&gt;+static Method *
&lt;br&gt;+find_method(const Class *cl, int method, const char *id)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	GList *li;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	dispose_handler = NULL;
&lt;br&gt;&amp;nbsp;	for(li=cl-&amp;gt;nodes;li;li=g_list_next(li)) {
&lt;br&gt;&amp;nbsp;		Node *n = li-&amp;gt;data;
&lt;br&gt;&amp;nbsp;		if(n-&amp;gt;type == METHOD_NODE) {
&lt;br&gt;&amp;nbsp;			Method *m = (Method *)n;
&lt;br&gt;-			if(m-&amp;gt;method == OVERRIDE_METHOD &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; strcmp(m-&amp;gt;id, &amp;quot;dispose&amp;quot;)==0) {
&lt;br&gt;-				if(strcmp(m-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				if(g_list_length(m-&amp;gt;args) != 1) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				dispose_handler = m;
&lt;br&gt;-				break;
&lt;br&gt;-			}
&lt;br&gt;+			if (m-&amp;gt;method == method
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp;&amp;&amp; (id == NULL || strcmp(m-&amp;gt;id, id)==0))
&lt;br&gt;+				return m;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+	return NULL;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;-find_finalize(const Class *cl)
&lt;br&gt;+find_constructor(const Class *cl)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	GList *li;
&lt;br&gt;+	user_constructor = find_method(cl, CONSTRUCTOR_METHOD, NULL);
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	finalize_handler = NULL;
&lt;br&gt;-	for(li=cl-&amp;gt;nodes;li;li=g_list_next(li)) {
&lt;br&gt;-		Node *n = li-&amp;gt;data;
&lt;br&gt;-		if(n-&amp;gt;type == METHOD_NODE) {
&lt;br&gt;-			Method *m = (Method *)n;
&lt;br&gt;-			if(m-&amp;gt;method == OVERRIDE_METHOD &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; strcmp(m-&amp;gt;id, &amp;quot;finalize&amp;quot;)==0) {
&lt;br&gt;-				if(strcmp(m-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				if(g_list_length(m-&amp;gt;args) != 1) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				finalize_handler = m;
&lt;br&gt;-				break;
&lt;br&gt;-			}
&lt;br&gt;-		}
&lt;br&gt;+static void
&lt;br&gt;+find_dispose(const Class *cl)
&lt;br&gt;+{
&lt;br&gt;+	dispose_handler = find_method(cl, OVERRIDE_METHOD, &amp;quot;dispose&amp;quot;);
&lt;br&gt;+	if (dispose_handler != NULL) {
&lt;br&gt;+		if(strcmp(dispose_handler-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0)
&lt;br&gt;+			error_print(GOB_ERROR, dispose_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;+		if(g_list_length(dispose_handler-&amp;gt;args) != 1)
&lt;br&gt;+			error_print(GOB_ERROR, dispose_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+	user_dispose_method = find_method(cl, DISPOSE_METHOD, NULL);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+find_finalize(const Class *cl)
&lt;br&gt;+{
&lt;br&gt;+	finalize_handler = find_method(cl, OVERRIDE_METHOD, &amp;quot;finalize&amp;quot;);
&lt;br&gt;+	if (finalize_handler != NULL) {
&lt;br&gt;+		if(strcmp(finalize_handler-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0)
&lt;br&gt;+			error_print(GOB_ERROR, finalize_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;+		if(g_list_length(finalize_handler-&amp;gt;args) != 1)
&lt;br&gt;+			error_print(GOB_ERROR, finalize_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	user_finalize_method = find_method(cl, FINALIZE_METHOD, NULL);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -2118,6 +2137,33 @@
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;+add_constructor (Class *c)
&lt;br&gt;+{
&lt;br&gt;+	out_printf(out, &amp;quot;\nstatic GObject *\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;___constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties)\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;{\n&amp;quot;);
&lt;br&gt;+	out_printf(out,
&lt;br&gt;+		 &amp;nbsp; &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::constructor\&amp;quot;\n&amp;quot;,
&lt;br&gt;+		 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;+
&lt;br&gt;+	out_printf(out, &amp;quot;\tGObject *obj_self;\n&amp;quot;);
&lt;br&gt;+	out_printf(out, &amp;quot;\t%s *self;\n&amp;quot;, typebase);
&lt;br&gt;+
&lt;br&gt;+	out_printf(out, &amp;quot;\tobj_self = G_OBJECT_CLASS (parent_class)-&amp;gt;constructor (type, n_construct_properties, construct_properties);\n&amp;quot;);
&lt;br&gt;+	out_printf(out, &amp;quot;\tself = %s (obj_self);\n&amp;quot;, macrobase);
&lt;br&gt;+
&lt;br&gt;+	if (user_constructor-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+		out_addline_infile (out, user_constructor-&amp;gt;line_no);
&lt;br&gt;+	out_printf (out, &amp;quot;\t%s_constructor (self);\n&amp;quot;, funcbase);
&lt;br&gt;+	if (user_constructor-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+		out_addline_outfile (out);
&lt;br&gt;+
&lt;br&gt;+	out_printf(out, &amp;quot;\treturn obj_self;\n&amp;quot;);
&lt;br&gt;+	out_printf(out, &amp;quot;}\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;#undef __GOB_FUNCTION__\n\n&amp;quot;);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;&amp;nbsp;add_dispose (Class *c)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	out_printf(out, &amp;quot;\nstatic void\n&amp;quot;
&lt;br&gt;@@ -2127,7 +2173,7 @@
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::dispose\&amp;quot;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	if (unreftors &amp;gt; 0) {
&lt;br&gt;+	if (unreftors &amp;gt; 0 || user_dispose_method != NULL) {
&lt;br&gt;&amp;nbsp;		out_printf (out, &amp;quot;\t%s *self%s = %s (obj_self);\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;typebase,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;! no_gnu ? &amp;quot; G_GNUC_UNUSED&amp;quot; : &amp;quot;&amp;quot;,
&lt;br&gt;@@ -2143,6 +2189,14 @@
&lt;br&gt;&amp;nbsp;		if (dispose_handler-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_outfile (out);
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;+		if (user_dispose_method != NULL) {
&lt;br&gt;+			if (user_dispose_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_infile (out, user_dispose_method-&amp;gt;line_no);
&lt;br&gt;+			out_printf (out, &amp;quot;\t%s_dispose (self);\n&amp;quot;, funcbase);
&lt;br&gt;+			if (user_dispose_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_outfile (out);
&lt;br&gt;+		}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;		out_printf (out,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\tif (G_OBJECT_CLASS (parent_class)-&amp;gt;dispose) \\\n&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\t\t(* G_OBJECT_CLASS (parent_class)-&amp;gt;dispose) (obj_self);\n&amp;quot;);
&lt;br&gt;@@ -2178,7 +2232,8 @@
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (privates &amp;gt; 0 ||
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;destructors &amp;gt; 0) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;destructors &amp;gt; 0 ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;user_finalize_method != NULL) {
&lt;br&gt;&amp;nbsp;		const char *unused = &amp;quot;&amp;quot;;
&lt;br&gt;&amp;nbsp;		if ( ! no_gnu)
&lt;br&gt;&amp;nbsp;			unused = &amp;quot; G_GNUC_UNUSED&amp;quot;;
&lt;br&gt;@@ -2202,6 +2257,14 @@
&lt;br&gt;&amp;nbsp;		if(finalize_handler-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_outfile(out);
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;+		if (user_finalize_method != NULL) {
&lt;br&gt;+			if (user_finalize_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_infile (out, user_finalize_method-&amp;gt;line_no);
&lt;br&gt;+			out_printf (out, &amp;quot;\t%s_finalize (self);\n&amp;quot;, funcbase);
&lt;br&gt;+			if (user_finalize_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_outfile (out);
&lt;br&gt;+		}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;		out_printf(out,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;quot;\tif(G_OBJECT_CLASS(parent_class)-&amp;gt;finalize) \\\n&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;quot;\t\t(* G_OBJECT_CLASS(parent_class)-&amp;gt;finalize)(obj_self);\n&amp;quot;);
&lt;br&gt;@@ -2333,6 +2396,7 @@
&lt;br&gt;&amp;nbsp;			if (set_properties &amp;gt; 0 ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;get_properties &amp;gt; 0 ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;signals &amp;gt; 0 ||
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp;need_constructor ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;need_dispose ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;need_finalize) {
&lt;br&gt;&amp;nbsp;				out_printf(out,
&lt;br&gt;@@ -2381,6 +2445,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			/* if there are no handlers for these things, we
&lt;br&gt;&amp;nbsp;			 * need to set them up here */
&lt;br&gt;+			if(need_constructor)
&lt;br&gt;+				out_printf(out, &amp;quot;\tg_object_class-&amp;gt;constructor &amp;quot;
&lt;br&gt;+					 &amp;nbsp; &amp;quot;= ___constructor;\n&amp;quot;);
&lt;br&gt;&amp;nbsp;			if(need_dispose &amp;&amp; !dispose_handler)
&lt;br&gt;&amp;nbsp;				out_printf(out, &amp;quot;\tg_object_class-&amp;gt;dispose &amp;quot;
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;quot;= ___dispose;\n&amp;quot;);
&lt;br&gt;@@ -3064,6 +3131,15 @@
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		out_printf(out, &amp;quot;#undef PARENT_HANDLER\n&amp;quot;);
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;+	case CONSTRUCTOR_METHOD:
&lt;br&gt;+	case DISPOSE_METHOD:
&lt;br&gt;+	case FINALIZE_METHOD:
&lt;br&gt;+		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;+		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+		print_method_body(m, TRUE, TRUE);
&lt;br&gt;+		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;	default:
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -3633,6 +3709,9 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	if (need_constructor)
&lt;br&gt;+		add_constructor (c);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	if (need_dispose)
&lt;br&gt;&amp;nbsp;		add_dispose (c);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -4441,15 +4520,24 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	make_bases ();
&lt;br&gt;&amp;nbsp;	make_inits ((Class *)class);
&lt;br&gt;-	if(unreftors &amp;gt; 0) {
&lt;br&gt;+
&lt;br&gt;+	find_constructor ((Class *)class);
&lt;br&gt;+	if (user_constructor != NULL)
&lt;br&gt;+		need_constructor = TRUE;
&lt;br&gt;+
&lt;br&gt;+	find_dispose ((Class *)class);
&lt;br&gt;+	if (unreftors &amp;gt; 0 ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;dispose_handler != NULL ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;user_dispose_method != NULL)
&lt;br&gt;&amp;nbsp;		need_dispose = TRUE;
&lt;br&gt;-		find_dispose ((Class *)class);
&lt;br&gt;-	}
&lt;br&gt;+
&lt;br&gt;+	find_finalize ((Class *)class);
&lt;br&gt;&amp;nbsp;	if (destructors &amp;gt; 0 ||
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;privates &amp;gt; 0) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;privates &amp;gt; 0 ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;user_finalize_method != NULL) {
&lt;br&gt;&amp;nbsp;		need_finalize = TRUE;
&lt;br&gt;-		find_finalize ((Class *)class);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	check_bad_symbols ((Class *)class);
&lt;br&gt;&amp;nbsp;	check_duplicate_symbols ((Class *)class);
&lt;br&gt;&amp;nbsp;	check_duplicate_overrides ((Class *)class);
&lt;br&gt;--- src/parse.y.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/parse.y	2008-01-29 01:19:59.000000000 +0100
&lt;br&gt;@@ -155,7 +155,11 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	g_assert(scope != CLASS_SCOPE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;-	if(method == INIT_METHOD || method == CLASS_INIT_METHOD) {
&lt;br&gt;+	if(method == INIT_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == CLASS_INIT_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == CONSTRUCTOR_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == DISPOSE_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == FINALIZE_METHOD) {
&lt;br&gt;&amp;nbsp;		type = (Type *)node_new (TYPE_NODE,
&lt;br&gt;&amp;nbsp;					 &amp;quot;name&amp;quot;, &amp;quot;void&amp;quot;,
&lt;br&gt;&amp;nbsp;					 NULL);
&lt;br&gt;@@ -1767,13 +1771,29 @@
&lt;br&gt;&amp;nbsp;				push_function(NO_SCOPE, CLASS_INIT_METHOD, NULL,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;constructor&amp;quot;)==0) {
&lt;br&gt;+				push_init_arg($&amp;lt;id&amp;gt;3, FALSE);
&lt;br&gt;+				push_function(NO_SCOPE, CONSTRUCTOR_METHOD, NULL,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;dispose&amp;quot;)==0) {
&lt;br&gt;+				push_init_arg($&amp;lt;id&amp;gt;3, FALSE);
&lt;br&gt;+				push_function(NO_SCOPE, DISPOSE_METHOD, NULL,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;finalize&amp;quot;)==0) {
&lt;br&gt;+				push_init_arg($&amp;lt;id&amp;gt;3, FALSE);
&lt;br&gt;+				push_function(NO_SCOPE, FINALIZE_METHOD, NULL,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;&amp;nbsp;			} else {
&lt;br&gt;&amp;nbsp;				g_free($&amp;lt;id&amp;gt;1);
&lt;br&gt;&amp;nbsp;				g_free($&amp;lt;id&amp;gt;3);
&lt;br&gt;&amp;nbsp;				g_string_free($&amp;lt;cbuf&amp;gt;5,TRUE);
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;parse error &amp;quot;
&lt;br&gt;-					 &amp;nbsp;&amp;quot;(untyped blocks must be init or &amp;quot;
&lt;br&gt;-					 &amp;nbsp;&amp;quot;class_init)&amp;quot;));
&lt;br&gt;+					 &amp;nbsp;&amp;quot;(untyped blocks must be init, &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;class_init, constructor, dispose &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;or finalize)&amp;quot;));
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;						}
&lt;br&gt;--- src/treefuncs.def.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/treefuncs.def	2008-01-29 01:19:59.000000000 +0100
&lt;br&gt;@@ -40,6 +40,9 @@
&lt;br&gt;&amp;nbsp;	REGULAR_METHOD,
&lt;br&gt;&amp;nbsp;	INIT_METHOD,
&lt;br&gt;&amp;nbsp;	CLASS_INIT_METHOD,
&lt;br&gt;+	CONSTRUCTOR_METHOD,
&lt;br&gt;+	DISPOSE_METHOD,
&lt;br&gt;+	FINALIZE_METHOD,
&lt;br&gt;&amp;nbsp;	VIRTUAL_METHOD,
&lt;br&gt;&amp;nbsp;	SIGNAL_LAST_METHOD,
&lt;br&gt;&amp;nbsp;	SIGNAL_FIRST_METHOD,
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt; &lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15149993&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;attachment0&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/15149993/0/attachment0&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/patch-adding-first-class-support-of-constructor-dispose-finalize-methods-tp14989063p15149993.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15150156</id>
	<title>Re: patch allowing to add GCC attributes to methods</title>
	<published>2008-01-28T15:57:16Z</published>
	<updated>2008-01-28T15:57:16Z</updated>
	<author>
		<name>Jean-Yves Lefort</name>
	</author>
	<content type="html">On Mon, 28 Jan 2008 18:10:20 +0100
&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15150156&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; The attached patch allows to add GCC attributes to methods, using a
&lt;br&gt;&amp;gt; syntax borrowed from C#.
&lt;br&gt;&lt;br&gt;There was a lexer conflict between array dimensions and
&lt;br&gt;attributes. The fixed patches are attached.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15150156&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[gob2-2.0.15-attr.diff]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;--- src/lexer.l.orig	2007-09-28 06:26:49.000000000 +0200
&lt;br&gt;+++ src/lexer.l	2008-01-29 00:04:49.000000000 +0100
&lt;br&gt;@@ -31,6 +31,7 @@
&lt;br&gt;&amp;nbsp;#include &amp;quot;main.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;util.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static int bracket_depth = 0;
&lt;br&gt;&amp;nbsp;static int parenth_depth = 0;
&lt;br&gt;&amp;nbsp;static int before_comment
&lt;br&gt;&amp;nbsp;/* New flex is on drugs */
&lt;br&gt;@@ -102,6 +103,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;%x COMMENT
&lt;br&gt;&amp;nbsp;%x C_CODE
&lt;br&gt;+%x ATTR_CODE
&lt;br&gt;&amp;nbsp;%x CODE_STRING
&lt;br&gt;&amp;nbsp;%x CLASS_CODE
&lt;br&gt;&amp;nbsp;%x CLASS_STRING
&lt;br&gt;@@ -267,7 +269,7 @@
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\/\/.*$		{ add_to_cbuf(yytext); /*comment, ignore*/ }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\/\/.*$	{ add_to_cbuf(yytext); /*comment, ignore*/ }
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE&amp;gt;\/\/.*$	{ ; /*comment, ignore*/ }
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;\/\/.*$	{ ; /*comment, ignore*/ }
&lt;br&gt;&amp;nbsp;&amp;lt;PROPERTY_CODE_I&amp;gt;\/\/.*$	{ ; /*comment, ignore*/ }
&lt;br&gt;@@ -277,20 +279,25 @@
&lt;br&gt;&amp;nbsp;	BEGIN(COMMENT);
&lt;br&gt;&amp;nbsp;	before_comment = C_CODE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\/\*	{
&lt;br&gt;+	add_to_cbuf(yytext);
&lt;br&gt;+	BEGIN(COMMENT);
&lt;br&gt;+	before_comment = ATTR_CODE;
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE&amp;gt;\/\*	{BEGIN(COMMENT); before_comment = CLASS_CODE; }
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;\/\*	{BEGIN(COMMENT); before_comment = CLASS_CODE_I; }
&lt;br&gt;&amp;nbsp;&amp;lt;PROPERTY_CODE_I&amp;gt;\/\*	{BEGIN(COMMENT); before_comment = PROPERTY_CODE_I; }
&lt;br&gt;&amp;nbsp;&amp;lt;COMMENT&amp;gt;\*\/	{
&lt;br&gt;-	if(before_comment == C_CODE) add_to_cbuf(yytext);
&lt;br&gt;+	if(before_comment == C_CODE || before_comment == ATTR_CODE) add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;	BEGIN(before_comment);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;COMMENT&amp;gt;.	{
&lt;br&gt;&amp;nbsp;	/* comment, ignore */
&lt;br&gt;-	if(before_comment == C_CODE) add_to_cbuf(yytext);
&lt;br&gt;+	if(before_comment == C_CODE || before_comment == ATTR_CODE) add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;COMMENT&amp;gt;\n	{
&lt;br&gt;&amp;nbsp;	/* comment, ignore */
&lt;br&gt;-	if(before_comment == C_CODE) add_to_cbuf(yytext);
&lt;br&gt;+	if(before_comment == C_CODE || before_comment == ATTR_CODE) add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;^\%(a|all)\{		{
&lt;br&gt;@@ -353,14 +360,14 @@
&lt;br&gt;&amp;nbsp;			return code_type;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\{\'		{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\\\{\'	{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\}\'		{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\\\}\'	{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\&amp;quot;\'		{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\\\&amp;quot;\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\{\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\\\{\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\}\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\\\}\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\&amp;quot;\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\\\&amp;quot;\'	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\\.	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\\.	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;C_CODE&amp;gt;\&amp;quot;	{
&lt;br&gt;@@ -368,6 +375,11 @@
&lt;br&gt;&amp;nbsp;			before_string = C_CODE;
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\&amp;quot;	{
&lt;br&gt;+			BEGIN(CODE_STRING);
&lt;br&gt;+			before_string = ATTR_CODE;
&lt;br&gt;+			add_to_cbuf(yytext);
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;&amp;lt;PROPERTY_CODE_I&amp;gt;\&amp;quot;	{
&lt;br&gt;&amp;nbsp;			BEGIN(CODE_STRING);
&lt;br&gt;&amp;nbsp;			before_string = PROPERTY_CODE_I;
&lt;br&gt;@@ -391,6 +403,10 @@
&lt;br&gt;&amp;nbsp;			parenth_depth++;
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\[	{
&lt;br&gt;+			bracket_depth++;
&lt;br&gt;+			add_to_cbuf(yytext);
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;&amp;lt;C_CODE&amp;gt;\}	{
&lt;br&gt;&amp;nbsp;			parenth_depth--;
&lt;br&gt;&amp;nbsp;			if(parenth_depth&amp;lt;0) {
&lt;br&gt;@@ -403,9 +419,21 @@
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\]	{
&lt;br&gt;+			bracket_depth--;
&lt;br&gt;+			if(bracket_depth&amp;lt;0) {
&lt;br&gt;+				REJECT;
&lt;br&gt;+			} else if(bracket_depth==0) {
&lt;br&gt;+				BEGIN(CLASS_CODE_I);
&lt;br&gt;+				yylval.cbuf = cbuf;
&lt;br&gt;+				cbuf = NULL;
&lt;br&gt;+				return CCODE;
&lt;br&gt;+			}
&lt;br&gt;+			add_to_cbuf(yytext);
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;.	{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\n	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;.	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\n	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class		{
&lt;br&gt;&amp;nbsp;			static int found_classes = 0;
&lt;br&gt;@@ -588,12 +616,12 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;(\[[0-9]*\]|\[[A-Za-z_][A-Za-z0-9_]*\])+	{
&lt;br&gt;&amp;nbsp;			yylval.id = g_strdup(yytext);
&lt;br&gt;-			return ARRAY_DIM;
&lt;br&gt;+			return ARRAY_DIM_OR_ATTR;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;:[0-9]+ {
&lt;br&gt;&amp;nbsp;			/* cheat for bitfield */
&lt;br&gt;&amp;nbsp;			yylval.id = g_strdup(yytext);
&lt;br&gt;-			return ARRAY_DIM;
&lt;br&gt;+			return BITFIELD;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE&amp;gt;\{	{
&lt;br&gt;&amp;nbsp;			BEGIN(CLASS_CODE_I);
&lt;br&gt;@@ -612,6 +640,13 @@
&lt;br&gt;&amp;nbsp;				BEGIN(INITIAL);
&lt;br&gt;&amp;nbsp;				return '}';
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;+&amp;lt;CLASS_CODE_I&amp;gt;\[	{
&lt;br&gt;+			BEGIN(ATTR_CODE);
&lt;br&gt;+			bracket_depth=1;
&lt;br&gt;+			yylval.line = line_no;
&lt;br&gt;+			clear_cbuf();
&lt;br&gt;+			return '[';
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE,CLASS_CODE_I,INITIAL,PROPERTY_CODE,PROPERTY_CODE_I&amp;gt;[\f\t ]	; &amp;nbsp;/*ignore*/
&lt;br&gt;&amp;nbsp;
&lt;br&gt;--- src/main.c.orig	2007-10-17 16:49:04.000000000 +0200
&lt;br&gt;+++ src/main.c	2008-01-29 00:02:09.000000000 +0100
&lt;br&gt;@@ -189,21 +189,25 @@
&lt;br&gt;&amp;nbsp;	g_free(s);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;-static void
&lt;br&gt;-print_method (FILE *fp,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *typeprefix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *nameprefix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *subnameprefix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *namepostfix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *afterargs,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *postfix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const Method *m,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean one_arg_per_line,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean no_funcbase,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean kill_underscore,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean first_unused,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean fake_names)
&lt;br&gt;+typedef enum
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_ONE_ARG_PER_LINE		= 1 &amp;lt;&amp;lt; 0,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_NO_FUNCBASE		= 1 &amp;lt;&amp;lt; 1,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_FIRST_UNUSED		= 1 &amp;lt;&amp;lt; 2,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_FAKE_NAMES		= 1 &amp;lt;&amp;lt; 3,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_NO_ATTR			= 1 &amp;lt;&amp;lt; 4
&lt;br&gt;+} PrintMethodFlags;
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+print_method2 (FILE *fp,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *typeprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *nameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *subnameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *namepostfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *afterargs,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *postfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const Method *m,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; PrintMethodFlags flags)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	GList *li;
&lt;br&gt;&amp;nbsp;	const char *id;
&lt;br&gt;@@ -213,7 +217,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	id = m-&amp;gt;id;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	if(no_funcbase)
&lt;br&gt;+	if ((flags &amp; PRINT_METHOD_NO_FUNCBASE) != 0)
&lt;br&gt;&amp;nbsp;		out_printf(fp, &amp;quot;%s%s%s%s(&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; nameprefix, subnameprefix, id, namepostfix); 
&lt;br&gt;&amp;nbsp;	else
&lt;br&gt;@@ -229,19 +233,19 @@
&lt;br&gt;&amp;nbsp;			if ( ! no_gnu &amp;&amp;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; ! for_cpp &amp;&amp; /* g++ has a cow with this */
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;li == m-&amp;gt;args &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp;first_unused) {
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; (flags &amp; PRINT_METHOD_FIRST_UNUSED) != 0) {
&lt;br&gt;&amp;nbsp;				unused = &amp;quot; G_GNUC_UNUSED&amp;quot;;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			print_type(fp, arg-&amp;gt;atype, FALSE);
&lt;br&gt;-			if (fake_names)
&lt;br&gt;+			if ((flags &amp; PRINT_METHOD_FAKE_NAMES) != 0)
&lt;br&gt;&amp;nbsp;				out_printf (fp, &amp;quot;___fake___&amp;quot;);
&lt;br&gt;&amp;nbsp;			if(li-&amp;gt;next)
&lt;br&gt;&amp;nbsp;				out_printf(fp, &amp;quot;%s%s%s,%s&amp;quot;, arg-&amp;gt;name,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; arg-&amp;gt;atype-&amp;gt;postfix ?
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; arg-&amp;gt;atype-&amp;gt;postfix : &amp;quot;&amp;quot;,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; unused,
&lt;br&gt;-					 &amp;nbsp; one_arg_per_line ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;);
&lt;br&gt;+					 &amp;nbsp; (flags &amp; PRINT_METHOD_ONE_ARG_PER_LINE) != 0 ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;);
&lt;br&gt;&amp;nbsp;			else
&lt;br&gt;&amp;nbsp;				out_printf(fp, &amp;quot;%s%s%s&amp;quot;, arg-&amp;gt;name,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; arg-&amp;gt;atype-&amp;gt;postfix ?
&lt;br&gt;@@ -250,11 +254,54 @@
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;vararg)
&lt;br&gt;&amp;nbsp;			out_printf(fp, &amp;quot;,%s...&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; one_arg_per_line ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;); 
&lt;br&gt;+				 &amp;nbsp; (flags &amp; PRINT_METHOD_ONE_ARG_PER_LINE) != 0 ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;); 
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;&amp;nbsp;		out_printf(fp, &amp;quot;void&amp;quot;); 
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-	out_printf(fp, &amp;quot;%s)%s&amp;quot;, afterargs, postfix); 
&lt;br&gt;+
&lt;br&gt;+	out_printf(fp, &amp;quot;%s)&amp;quot;, afterargs);
&lt;br&gt;+
&lt;br&gt;+	if (m-&amp;gt;attr &amp;&amp; (flags &amp; PRINT_METHOD_NO_ATTR) == 0)
&lt;br&gt;+		out_printf(fp, &amp;quot; %s&amp;quot;, m-&amp;gt;attr);
&lt;br&gt;+
&lt;br&gt;+	out_printf(fp, &amp;quot;%s&amp;quot;, postfix);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+print_method (FILE *fp,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *typeprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *nameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *subnameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *namepostfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *afterargs,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *postfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const Method *m,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean one_arg_per_line,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean no_funcbase,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean kill_underscore,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean first_unused,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean fake_names)
&lt;br&gt;+{
&lt;br&gt;+	PrintMethodFlags flags = 0;
&lt;br&gt;+
&lt;br&gt;+	if (one_arg_per_line)
&lt;br&gt;+		flags |= PRINT_METHOD_ONE_ARG_PER_LINE;
&lt;br&gt;+	if (no_funcbase)
&lt;br&gt;+		flags |= PRINT_METHOD_NO_FUNCBASE;
&lt;br&gt;+	if (first_unused)
&lt;br&gt;+		flags |= PRINT_METHOD_FIRST_UNUSED;
&lt;br&gt;+	if (fake_names)
&lt;br&gt;+		flags |= PRINT_METHOD_FAKE_NAMES;
&lt;br&gt;+
&lt;br&gt;+	print_method2(fp,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;typeprefix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;nameprefix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;subnameprefix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;namepostfix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;afterargs,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;postfix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;m,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;flags);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static gboolean
&lt;br&gt;@@ -371,11 +418,13 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/* if a signal mark it as such */
&lt;br&gt;&amp;nbsp;	if(m-&amp;gt;method != VIRTUAL_METHOD)
&lt;br&gt;-		print_method(outh, &amp;quot;\t/*signal*/&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, TRUE, TRUE, FALSE, FALSE);
&lt;br&gt;+		print_method2(outh, &amp;quot;\t/*signal*/&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_FUNCBASE |
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;	else
&lt;br&gt;-		print_method(outh, &amp;quot;\t&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, TRUE, TRUE, FALSE, FALSE);
&lt;br&gt;+		print_method2(outh, &amp;quot;\t&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_FUNCBASE |
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;@@ -422,8 +471,11 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\&amp;quot;%s\&amp;quot;,&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;(GCallback) __extension__ ({&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase, m-&amp;gt;id, macrobase, typebase, m-&amp;gt;id);
&lt;br&gt;-		print_method (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; = (func); &amp;quot;, m, FALSE, TRUE, TRUE, FALSE, TRUE);
&lt;br&gt;+		print_method2 (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot; = (func); &amp;quot;, m,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; PRINT_METHOD_NO_FUNCBASE
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_FAKE_NAMES
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_printf (outh, &amp;quot;___%s; }), (data))\n&amp;quot;, m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		/* connect_after */
&lt;br&gt;@@ -433,8 +485,11 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\&amp;quot;%s\&amp;quot;,&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;(GCallback) __extension__ ({&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase, m-&amp;gt;id, macrobase, typebase, m-&amp;gt;id);
&lt;br&gt;-		print_method (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; = (func); &amp;quot;, m, FALSE, TRUE, TRUE, FALSE, TRUE);
&lt;br&gt;+		print_method2 (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot; = (func); &amp;quot;, m,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; PRINT_METHOD_NO_FUNCBASE
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_FAKE_NAMES
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_printf (outh, &amp;quot;___%s; }), (data))\n&amp;quot;, m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		/* connect_data */
&lt;br&gt;@@ -445,8 +500,11 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\&amp;quot;%s\&amp;quot;,&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;(GCallback) __extension__ ({&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase, m-&amp;gt;id, macrobase, typebase, m-&amp;gt;id);
&lt;br&gt;-		print_method (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; = (func); &amp;quot;, m, FALSE, TRUE, TRUE, FALSE, TRUE);
&lt;br&gt;+		print_method2 (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot; = (func); &amp;quot;, m,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; PRINT_METHOD_NO_FUNCBASE
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_FAKE_NAMES
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_printf (outh, &amp;quot;___%s; }), (data), (destroy_data), (GConnectFlags)(flags))\n&amp;quot;, m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -526,9 +584,9 @@
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; m-&amp;gt;method == SIGNAL_FIRST_METHOD ||
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; m-&amp;gt;method == VIRTUAL_METHOD) {
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;cbuf)
&lt;br&gt;-			print_method(out,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;quot;static &amp;quot;, &amp;quot;___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;static &amp;quot;, &amp;quot;___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	/* no else, here, it might still have a private prototype, it's not
&lt;br&gt;&amp;nbsp;	 * exclusive */
&lt;br&gt;@@ -537,15 +595,13 @@
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp;m-&amp;gt;cbuf)) {
&lt;br&gt;&amp;nbsp;		/* add unique ID */
&lt;br&gt;&amp;nbsp;		char *s = g_strdup_printf(&amp;quot;___%x_&amp;quot;, (guint)m-&amp;gt;unique_id);
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, s, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; no_gnu?&amp;quot;;\n&amp;quot;:&amp;quot; G_GNUC_UNUSED;\n&amp;quot;,
&lt;br&gt;+		print_method(out, &amp;quot;static &amp;quot;, s, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, FALSE, FALSE, FALSE);
&lt;br&gt;&amp;nbsp;		g_free(s);
&lt;br&gt;&amp;nbsp;	} else if(m-&amp;gt;scope == PRIVATE_SCOPE ||
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;m-&amp;gt;method == CLASS_INIT_METHOD) {
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; no_gnu?&amp;quot;;\n&amp;quot;:&amp;quot; G_GNUC_UNUSED;\n&amp;quot;,
&lt;br&gt;+		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -2831,11 +2887,11 @@
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;scope == PRIVATE_SCOPE)
&lt;br&gt;-			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;-			print_method(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		print_method_body(m, TRUE, TRUE);
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;@@ -2844,11 +2900,11 @@
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;scope == PRIVATE_SCOPE)
&lt;br&gt;-			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;-			print_method(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_addline_outfile (out);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		out_printf (out, &amp;quot;{\n&amp;quot;);
&lt;br&gt;@@ -2966,8 +3022,8 @@
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, TRUE, FALSE);
&lt;br&gt;+		print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		print_method_body(m, FALSE, TRUE);
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;@@ -2975,11 +3031,11 @@
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;scope==PRIVATE_SCOPE)
&lt;br&gt;-			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;-			print_method(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_addline_outfile(out);
&lt;br&gt;&amp;nbsp;		out_printf(out, &amp;quot;{\n&amp;quot;
&lt;br&gt;&amp;nbsp;			&amp;quot;\t%sClass *klass;\n&amp;quot;, typebase);
&lt;br&gt;@@ -3024,8 +3080,9 @@
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, TRUE, FALSE);
&lt;br&gt;+		print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_FIRST_UNUSED
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;| PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		print_method_body(m, FALSE, TRUE);
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;--- src/parse.y.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/parse.y	2008-01-29 00:19:27.000000000 +0100
&lt;br&gt;@@ -146,7 +146,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;&amp;nbsp;push_function (int scope, int method, char *oid, char *id,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; GString *cbuf, int line_no, int ccode_line,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; GString *attr, GString *cbuf, int line_no, int ccode_line,
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; &amp;nbsp; gboolean vararg, GList *flags)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	Node *node;
&lt;br&gt;@@ -207,6 +207,7 @@
&lt;br&gt;&amp;nbsp;			 &amp;quot;args:steal&amp;quot;, funcargs,
&lt;br&gt;&amp;nbsp;			 &amp;quot;onerror:steal&amp;quot;, onerror,
&lt;br&gt;&amp;nbsp;			 &amp;quot;defreturn:steal&amp;quot;, defreturn,
&lt;br&gt;+			 &amp;quot;attr:steal&amp;quot;, attr ? attr-&amp;gt;str : NULL,
&lt;br&gt;&amp;nbsp;			 &amp;quot;cbuf:steal&amp;quot;, c_cbuf,
&lt;br&gt;&amp;nbsp;			 &amp;quot;line_no&amp;quot;, line_no,
&lt;br&gt;&amp;nbsp;			 &amp;quot;ccode_line&amp;quot;, ccode_line,
&lt;br&gt;@@ -216,6 +217,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	last_added_method = (Method *)node;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	if(attr)
&lt;br&gt;+		g_string_free(attr, FALSE);
&lt;br&gt;&amp;nbsp;	if(cbuf)
&lt;br&gt;&amp;nbsp;		g_string_free(cbuf,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp;/*only free segment if we haven't passed it
&lt;br&gt;@@ -405,7 +408,7 @@
&lt;br&gt;&amp;nbsp;		push_funcarg (&amp;quot;self&amp;quot;, FALSE);
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		push_function (PUBLIC_SCOPE, REGULAR_METHOD, NULL,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp; get_id, get_cbuf, get_lineno,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; get_id, NULL, get_cbuf, get_lineno,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; lineno, FALSE, NULL);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;@@ -439,7 +442,7 @@
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;&amp;nbsp;		typestack = g_list_prepend (typestack, node2);
&lt;br&gt;&amp;nbsp;		push_function (PUBLIC_SCOPE, REGULAR_METHOD, NULL,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp; set_id, set_cbuf, set_lineno,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; set_id, NULL, set_cbuf, set_lineno,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; lineno, FALSE, NULL);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -677,7 +680,7 @@
&lt;br&gt;&amp;nbsp;%token CONST VOID STRUCT UNION ENUM THREEDOTS
&lt;br&gt;&amp;nbsp;%token SIGNED UNSIGNED LONG SHORT INT FLOAT DOUBLE CHAR
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-%token &amp;lt;id&amp;gt; TOKEN NUMBER TYPETOKEN ARRAY_DIM SINGLE_CHAR
&lt;br&gt;+%token &amp;lt;id&amp;gt; TOKEN NUMBER TYPETOKEN ARRAY_DIM_OR_ATTR BITFIELD SINGLE_CHAR
&lt;br&gt;&amp;nbsp;%token &amp;lt;cbuf&amp;gt; CCODE HTCODE PHCODE HCODE ACODE ATCODE STRING
&lt;br&gt;&amp;nbsp;%token &amp;lt;line&amp;gt; PUBLIC PRIVATE PROTECTED CLASSWIDE PROPERTY ARGUMENT
&lt;br&gt;&amp;nbsp;%token &amp;lt;line&amp;gt; VIRTUAL SIGNAL OVERRIDE
&lt;br&gt;@@ -982,7 +985,7 @@
&lt;br&gt;&amp;nbsp;variable:	scope type TOKEN varoptions ';'		{
&lt;br&gt;&amp;nbsp;			push_variable($&amp;lt;id&amp;gt;3, the_scope,$&amp;lt;line&amp;gt;1, NULL);
&lt;br&gt;&amp;nbsp;						}
&lt;br&gt;-	|	scope type TOKEN ARRAY_DIM varoptions ';'	{
&lt;br&gt;+	|	scope type TOKEN array_dim varoptions ';'	{
&lt;br&gt;&amp;nbsp;			push_variable($&amp;lt;id&amp;gt;3, the_scope, $&amp;lt;line&amp;gt;1, $&amp;lt;id&amp;gt;4);
&lt;br&gt;&amp;nbsp;						}
&lt;br&gt;&amp;nbsp;	;
&lt;br&gt;@@ -1678,9 +1681,25 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, $&amp;lt;sigtype&amp;gt;3,NULL,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;5, $&amp;lt;cbuf&amp;gt;10,$&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;5, NULL, $&amp;lt;cbuf&amp;gt;10,$&amp;lt;line&amp;gt;1,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;2);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;+	|	attrs SIGNAL flags fullsigtype type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;signal without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, $&amp;lt;sigtype&amp;gt;4,NULL,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, $&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;11,$&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;3);
&lt;br&gt;+									}
&lt;br&gt;&amp;nbsp;	|	scope SIGNAL flags simplesigtype type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;&amp;nbsp;			if(!has_self) {
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;signal without 'self' as &amp;quot;
&lt;br&gt;@@ -1694,9 +1713,25 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, $&amp;lt;sigtype&amp;gt;4, NULL,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, $&amp;lt;cbuf&amp;gt;11, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, NULL, $&amp;lt;cbuf&amp;gt;11, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;3);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;+	|	attrs scope SIGNAL flags simplesigtype type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;signal without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, $&amp;lt;sigtype&amp;gt;5, NULL,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;7, $&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;12, $&amp;lt;line&amp;gt;3,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;4);
&lt;br&gt;+									}
&lt;br&gt;&amp;nbsp;	|	VIRTUAL scope type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;&amp;nbsp;			if(!has_self) {
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;@@ -1710,7 +1745,23 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;4,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;+									}
&lt;br&gt;+	|	attrs VIRTUAL scope type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;5,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;10, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;&amp;nbsp;	|	scope VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;@@ -1726,7 +1777,23 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;4,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;+									}
&lt;br&gt;+	|	attrs scope VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;5,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;10, $&amp;lt;line&amp;gt;3,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;&amp;nbsp;	|	VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;@@ -1737,12 +1804,23 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(PUBLIC_SCOPE, VIRTUAL_METHOD, NULL,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;3, $&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;3, NULL, $&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;+									}
&lt;br&gt;+	|	attrs VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(PUBLIC_SCOPE, VIRTUAL_METHOD, NULL,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;4, $&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;&amp;nbsp;	|	OVERRIDE '(' TYPETOKEN ')' type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;&amp;nbsp;			push_function(NO_SCOPE, OVERRIDE_METHOD, $&amp;lt;id&amp;gt;3,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, $&amp;lt;cbuf&amp;gt;11,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, NULL, $&amp;lt;cbuf&amp;gt;11,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;line&amp;gt;1, ccode_line,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;@@ -1753,19 +1831,29 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, REGULAR_METHOD, NULL, $&amp;lt;id&amp;gt;3,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1, ccode_line,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, $&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1, ccode_line,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;vararg, NULL);
&lt;br&gt;+								}
&lt;br&gt;+	|	attrs scope type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, REGULAR_METHOD, NULL, $&amp;lt;id&amp;gt;4,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2, ccode_line,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;vararg, NULL);
&lt;br&gt;&amp;nbsp;								}
&lt;br&gt;&amp;nbsp;	|	TOKEN '(' TOKEN ')' codenocode	{
&lt;br&gt;&amp;nbsp;			if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;init&amp;quot;)==0) {
&lt;br&gt;&amp;nbsp;				push_init_arg($&amp;lt;id&amp;gt;3,FALSE);
&lt;br&gt;&amp;nbsp;				push_function(NO_SCOPE, INIT_METHOD, NULL,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;&amp;nbsp;			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;class_init&amp;quot;)==0) {
&lt;br&gt;&amp;nbsp;				push_init_arg($&amp;lt;id&amp;gt;3,TRUE);
&lt;br&gt;&amp;nbsp;				push_function(NO_SCOPE, CLASS_INIT_METHOD, NULL,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;&amp;nbsp;			} else {
&lt;br&gt;&amp;nbsp;				g_free($&amp;lt;id&amp;gt;1);
&lt;br&gt;@@ -1779,6 +1867,22 @@
&lt;br&gt;&amp;nbsp;						}
&lt;br&gt;&amp;nbsp;	;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+attrs:
&lt;br&gt;+		'[' CCODE {
&lt;br&gt;+			$&amp;lt;cbuf&amp;gt;$ = $&amp;lt;cbuf&amp;gt;2;
&lt;br&gt;+		}
&lt;br&gt;+	|	ARRAY_DIM_OR_ATTR {
&lt;br&gt;+			int len = strlen($&amp;lt;id&amp;gt;1);
&lt;br&gt;+
&lt;br&gt;+			g_assert($&amp;lt;id&amp;gt;1[0] == '[');
&lt;br&gt;+			g_assert(len &amp;gt;= 2 &amp;&amp; $&amp;lt;id&amp;gt;1[len - 1] == ']');
&lt;br&gt;+
&lt;br&gt;+			/* strip the brackets */
&lt;br&gt;+			$&amp;lt;cbuf&amp;gt;$ = g_string_new_len($&amp;lt;id&amp;gt;1 + 1, len - 2);
&lt;br&gt;+			g_free($&amp;lt;id&amp;gt;1);
&lt;br&gt;+		}
&lt;br&gt;+	;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;returnvals:	TOKEN retcode		{
&lt;br&gt;&amp;nbsp;			g_free(onerror); onerror = NULL;
&lt;br&gt;&amp;nbsp;			g_free(defreturn); defreturn = NULL;
&lt;br&gt;@@ -1900,7 +2004,7 @@
&lt;br&gt;&amp;nbsp;arg:		type TOKEN					{
&lt;br&gt;&amp;nbsp;			push_funcarg($&amp;lt;id&amp;gt;2,NULL);
&lt;br&gt;&amp;nbsp;								}
&lt;br&gt;-	|	type TOKEN ARRAY_DIM				{
&lt;br&gt;+	|	type TOKEN array_dim				{
&lt;br&gt;&amp;nbsp;			push_funcarg($&amp;lt;id&amp;gt;2,$&amp;lt;id&amp;gt;3);
&lt;br&gt;&amp;nbsp;								}
&lt;br&gt;&amp;nbsp;	|	type TOKEN '(' TOKEN checklist ')'		{
&lt;br&gt;@@ -1911,7 +2015,7 @@
&lt;br&gt;&amp;nbsp;			g_free($&amp;lt;id&amp;gt;4);
&lt;br&gt;&amp;nbsp;			push_funcarg($&amp;lt;id&amp;gt;2,NULL);
&lt;br&gt;&amp;nbsp;								}
&lt;br&gt;-	|	type TOKEN ARRAY_DIM '(' TOKEN checklist ')'	{
&lt;br&gt;+	|	type TOKEN array_dim '(' TOKEN checklist ')'	{
&lt;br&gt;&amp;nbsp;			if(strcmp($&amp;lt;id&amp;gt;5,&amp;quot;check&amp;quot;)!=0) {
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;@@ -2105,5 +2209,10 @@
&lt;br&gt;&amp;nbsp;	|	SINGLE_CHAR		{ $&amp;lt;id&amp;gt;$ = $&amp;lt;id&amp;gt;1; }
&lt;br&gt;&amp;nbsp;	|	TOKEN			{ $&amp;lt;id&amp;gt;$ = $&amp;lt;id&amp;gt;1; }
&lt;br&gt;&amp;nbsp;	;
&lt;br&gt;+
&lt;br&gt;+array_dim:
&lt;br&gt;+		ARRAY_DIM_OR_ATTR
&lt;br&gt;+	|	BITFIELD
&lt;br&gt;+	;
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;&amp;nbsp;%%
&lt;br&gt;--- src/treefuncs.def.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/treefuncs.def	2008-01-29 00:02:09.000000000 +0100
&lt;br&gt;@@ -126,6 +126,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;NODELIST	args
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	onerror
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	defreturn
&lt;br&gt;+ &amp;nbsp;STRING	attr
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	cbuf
&lt;br&gt;&amp;nbsp; &amp;nbsp;INT		line_no
&lt;br&gt;&amp;nbsp; &amp;nbsp;INT		ccode_line
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[gob2-2.0.15-gobject-overrides-and-attr.diff]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;--- src/lexer.l.orig	2007-09-28 06:26:49.000000000 +0200
&lt;br&gt;+++ src/lexer.l	2008-01-29 00:24:30.000000000 +0100
&lt;br&gt;@@ -31,6 +31,7 @@
&lt;br&gt;&amp;nbsp;#include &amp;quot;main.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;util.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static int bracket_depth = 0;
&lt;br&gt;&amp;nbsp;static int parenth_depth = 0;
&lt;br&gt;&amp;nbsp;static int before_comment
&lt;br&gt;&amp;nbsp;/* New flex is on drugs */
&lt;br&gt;@@ -102,6 +103,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;%x COMMENT
&lt;br&gt;&amp;nbsp;%x C_CODE
&lt;br&gt;+%x ATTR_CODE
&lt;br&gt;&amp;nbsp;%x CODE_STRING
&lt;br&gt;&amp;nbsp;%x CLASS_CODE
&lt;br&gt;&amp;nbsp;%x CLASS_STRING
&lt;br&gt;@@ -267,7 +269,7 @@
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\/\/.*$		{ add_to_cbuf(yytext); /*comment, ignore*/ }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\/\/.*$	{ add_to_cbuf(yytext); /*comment, ignore*/ }
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE&amp;gt;\/\/.*$	{ ; /*comment, ignore*/ }
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;\/\/.*$	{ ; /*comment, ignore*/ }
&lt;br&gt;&amp;nbsp;&amp;lt;PROPERTY_CODE_I&amp;gt;\/\/.*$	{ ; /*comment, ignore*/ }
&lt;br&gt;@@ -277,20 +279,25 @@
&lt;br&gt;&amp;nbsp;	BEGIN(COMMENT);
&lt;br&gt;&amp;nbsp;	before_comment = C_CODE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\/\*	{
&lt;br&gt;+	add_to_cbuf(yytext);
&lt;br&gt;+	BEGIN(COMMENT);
&lt;br&gt;+	before_comment = ATTR_CODE;
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE&amp;gt;\/\*	{BEGIN(COMMENT); before_comment = CLASS_CODE; }
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;\/\*	{BEGIN(COMMENT); before_comment = CLASS_CODE_I; }
&lt;br&gt;&amp;nbsp;&amp;lt;PROPERTY_CODE_I&amp;gt;\/\*	{BEGIN(COMMENT); before_comment = PROPERTY_CODE_I; }
&lt;br&gt;&amp;nbsp;&amp;lt;COMMENT&amp;gt;\*\/	{
&lt;br&gt;-	if(before_comment == C_CODE) add_to_cbuf(yytext);
&lt;br&gt;+	if(before_comment == C_CODE || before_comment == ATTR_CODE) add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;	BEGIN(before_comment);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;COMMENT&amp;gt;.	{
&lt;br&gt;&amp;nbsp;	/* comment, ignore */
&lt;br&gt;-	if(before_comment == C_CODE) add_to_cbuf(yytext);
&lt;br&gt;+	if(before_comment == C_CODE || before_comment == ATTR_CODE) add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;COMMENT&amp;gt;\n	{
&lt;br&gt;&amp;nbsp;	/* comment, ignore */
&lt;br&gt;-	if(before_comment == C_CODE) add_to_cbuf(yytext);
&lt;br&gt;+	if(before_comment == C_CODE || before_comment == ATTR_CODE) add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;^\%(a|all)\{		{
&lt;br&gt;@@ -353,14 +360,14 @@
&lt;br&gt;&amp;nbsp;			return code_type;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\{\'		{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\\\{\'	{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\}\'		{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\\\}\'	{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\&amp;quot;\'		{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\\\&amp;quot;\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\{\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\\\{\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\}\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\\\}\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\&amp;quot;\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\\\&amp;quot;\'	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\\.	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\\.	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;C_CODE&amp;gt;\&amp;quot;	{
&lt;br&gt;@@ -368,6 +375,11 @@
&lt;br&gt;&amp;nbsp;			before_string = C_CODE;
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\&amp;quot;	{
&lt;br&gt;+			BEGIN(CODE_STRING);
&lt;br&gt;+			before_string = ATTR_CODE;
&lt;br&gt;+			add_to_cbuf(yytext);
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;&amp;lt;PROPERTY_CODE_I&amp;gt;\&amp;quot;	{
&lt;br&gt;&amp;nbsp;			BEGIN(CODE_STRING);
&lt;br&gt;&amp;nbsp;			before_string = PROPERTY_CODE_I;
&lt;br&gt;@@ -391,6 +403,10 @@
&lt;br&gt;&amp;nbsp;			parenth_depth++;
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\[	{
&lt;br&gt;+			bracket_depth++;
&lt;br&gt;+			add_to_cbuf(yytext);
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;&amp;lt;C_CODE&amp;gt;\}	{
&lt;br&gt;&amp;nbsp;			parenth_depth--;
&lt;br&gt;&amp;nbsp;			if(parenth_depth&amp;lt;0) {
&lt;br&gt;@@ -403,9 +419,21 @@
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\]	{
&lt;br&gt;+			bracket_depth--;
&lt;br&gt;+			if(bracket_depth&amp;lt;0) {
&lt;br&gt;+				REJECT;
&lt;br&gt;+			} else if(bracket_depth==0) {
&lt;br&gt;+				BEGIN(CLASS_CODE_I);
&lt;br&gt;+				yylval.cbuf = cbuf;
&lt;br&gt;+				cbuf = NULL;
&lt;br&gt;+				return CCODE;
&lt;br&gt;+			}
&lt;br&gt;+			add_to_cbuf(yytext);
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;.	{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\n	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;.	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\n	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class		{
&lt;br&gt;&amp;nbsp;			static int found_classes = 0;
&lt;br&gt;@@ -588,12 +616,12 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;(\[[0-9]*\]|\[[A-Za-z_][A-Za-z0-9_]*\])+	{
&lt;br&gt;&amp;nbsp;			yylval.id = g_strdup(yytext);
&lt;br&gt;-			return ARRAY_DIM;
&lt;br&gt;+			return ARRAY_DIM_OR_ATTR;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;:[0-9]+ {
&lt;br&gt;&amp;nbsp;			/* cheat for bitfield */
&lt;br&gt;&amp;nbsp;			yylval.id = g_strdup(yytext);
&lt;br&gt;-			return ARRAY_DIM;
&lt;br&gt;+			return BITFIELD;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE&amp;gt;\{	{
&lt;br&gt;&amp;nbsp;			BEGIN(CLASS_CODE_I);
&lt;br&gt;@@ -612,6 +640,13 @@
&lt;br&gt;&amp;nbsp;				BEGIN(INITIAL);
&lt;br&gt;&amp;nbsp;				return '}';
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;+&amp;lt;CLASS_CODE_I&amp;gt;\[	{
&lt;br&gt;+			BEGIN(ATTR_CODE);
&lt;br&gt;+			bracket_depth=1;
&lt;br&gt;+			yylval.line = line_no;
&lt;br&gt;+			clear_cbuf();
&lt;br&gt;+			return '[';
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE,CLASS_CODE_I,INITIAL,PROPERTY_CODE,PROPERTY_CODE_I&amp;gt;[\f\t ]	; &amp;nbsp;/*ignore*/
&lt;br&gt;&amp;nbsp;
&lt;br&gt;--- src/main.c.orig	2007-10-17 16:49:04.000000000 +0200
&lt;br&gt;+++ src/main.c	2008-01-29 00:24:30.000000000 +0100
&lt;br&gt;@@ -92,11 +92,16 @@
&lt;br&gt;&amp;nbsp;static gboolean special_array[SPECIAL_LAST] = {0};
&lt;br&gt;&amp;nbsp;static gboolean any_special = FALSE;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static gboolean need_constructor = FALSE;
&lt;br&gt;+static Method * user_constructor = NULL;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;static gboolean need_dispose = FALSE;
&lt;br&gt;&amp;nbsp;static Method * dispose_handler = NULL;
&lt;br&gt;+static Method * user_dispose_method = NULL;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static gboolean need_finalize = FALSE;
&lt;br&gt;&amp;nbsp;static Method * finalize_handler = NULL;
&lt;br&gt;+static Method * user_finalize_method = NULL;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;FILE *out = NULL;
&lt;br&gt;&amp;nbsp;FILE *outh = NULL;
&lt;br&gt;@@ -189,21 +194,25 @@
&lt;br&gt;&amp;nbsp;	g_free(s);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;-static void
&lt;br&gt;-print_method (FILE *fp,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *typeprefix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *nameprefix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *subnameprefix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *namepostfix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *afterargs,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *postfix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const Method *m,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean one_arg_per_line,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean no_funcbase,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean kill_underscore,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean first_unused,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean fake_names)
&lt;br&gt;+typedef enum
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_ONE_ARG_PER_LINE		= 1 &amp;lt;&amp;lt; 0,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_NO_FUNCBASE		= 1 &amp;lt;&amp;lt; 1,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_FIRST_UNUSED		= 1 &amp;lt;&amp;lt; 2,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_FAKE_NAMES		= 1 &amp;lt;&amp;lt; 3,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_NO_ATTR			= 1 &amp;lt;&amp;lt; 4
&lt;br&gt;+} PrintMethodFlags;
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+print_method2 (FILE *fp,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *typeprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *nameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *subnameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *namepostfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *afterargs,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *postfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const Method *m,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; PrintMethodFlags flags)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	GList *li;
&lt;br&gt;&amp;nbsp;	const char *id;
&lt;br&gt;@@ -213,7 +222,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	id = m-&amp;gt;id;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	if(no_funcbase)
&lt;br&gt;+	if ((flags &amp; PRINT_METHOD_NO_FUNCBASE) != 0)
&lt;br&gt;&amp;nbsp;		out_printf(fp, &amp;quot;%s%s%s%s(&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; nameprefix, subnameprefix, id, namepostfix); 
&lt;br&gt;&amp;nbsp;	else
&lt;br&gt;@@ -229,19 +238,19 @@
&lt;br&gt;&amp;nbsp;			if ( ! no_gnu &amp;&amp;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; ! for_cpp &amp;&amp; /* g++ has a cow with this */
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;li == m-&amp;gt;args &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp;first_unused) {
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; (flags &amp; PRINT_METHOD_FIRST_UNUSED) != 0) {
&lt;br&gt;&amp;nbsp;				unused = &amp;quot; G_GNUC_UNUSED&amp;quot;;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			print_type(fp, arg-&amp;gt;atype, FALSE);
&lt;br&gt;-			if (fake_names)
&lt;br&gt;+			if ((flags &amp; PRINT_METHOD_FAKE_NAMES) != 0)
&lt;br&gt;&amp;nbsp;				out_printf (fp, &amp;quot;___fake___&amp;quot;);
&lt;br&gt;&amp;nbsp;			if(li-&amp;gt;next)
&lt;br&gt;&amp;nbsp;				out_printf(fp, &amp;quot;%s%s%s,%s&amp;quot;, arg-&amp;gt;name,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; arg-&amp;gt;atype-&amp;gt;postfix ?
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; arg-&amp;gt;atype-&amp;gt;postfix : &amp;quot;&amp;quot;,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; unused,
&lt;br&gt;-					 &amp;nbsp; one_arg_per_line ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;);
&lt;br&gt;+					 &amp;nbsp; (flags &amp; PRINT_METHOD_ONE_ARG_PER_LINE) != 0 ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;);
&lt;br&gt;&amp;nbsp;			else
&lt;br&gt;&amp;nbsp;				out_printf(fp, &amp;quot;%s%s%s&amp;quot;, arg-&amp;gt;name,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; arg-&amp;gt;atype-&amp;gt;postfix ?
&lt;br&gt;@@ -250,11 +259,54 @@
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;vararg)
&lt;br&gt;&amp;nbsp;			out_printf(fp, &amp;quot;,%s...&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; one_arg_per_line ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;); 
&lt;br&gt;+				 &amp;nbsp; (flags &amp; PRINT_METHOD_ONE_ARG_PER_LINE) != 0 ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;); 
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;&amp;nbsp;		out_printf(fp, &amp;quot;void&amp;quot;); 
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-	out_printf(fp, &amp;quot;%s)%s&amp;quot;, afterargs, postfix); 
&lt;br&gt;+
&lt;br&gt;+	out_printf(fp, &amp;quot;%s)&amp;quot;, afterargs);
&lt;br&gt;+
&lt;br&gt;+	if (m-&amp;gt;attr &amp;&amp; (flags &amp; PRINT_METHOD_NO_ATTR) == 0)
&lt;br&gt;+		out_printf(fp, &amp;quot; %s&amp;quot;, m-&amp;gt;attr);
&lt;br&gt;+
&lt;br&gt;+	out_printf(fp, &amp;quot;%s&amp;quot;, postfix);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+print_method (FILE *fp,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *typeprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *nameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *subnameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *namepostfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *afterargs,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *postfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const Method *m,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean one_arg_per_line,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean no_funcbase,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean kill_underscore,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean first_unused,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean fake_names)
&lt;br&gt;+{
&lt;br&gt;+	PrintMethodFlags flags = 0;
&lt;br&gt;+
&lt;br&gt;+	if (one_arg_per_line)
&lt;br&gt;+		flags |= PRINT_METHOD_ONE_ARG_PER_LINE;
&lt;br&gt;+	if (no_funcbase)
&lt;br&gt;+		flags |= PRINT_METHOD_NO_FUNCBASE;
&lt;br&gt;+	if (first_unused)
&lt;br&gt;+		flags |= PRINT_METHOD_FIRST_UNUSED;
&lt;br&gt;+	if (fake_names)
&lt;br&gt;+		flags |= PRINT_METHOD_FAKE_NAMES;
&lt;br&gt;+
&lt;br&gt;+	print_method2(fp,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;typeprefix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;nameprefix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;subnameprefix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;namepostfix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;afterargs,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;postfix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;m,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;flags);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static gboolean
&lt;br&gt;@@ -269,6 +321,9 @@
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == FINALIZE_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == OVERRIDE_METHOD)
&lt;br&gt;&amp;nbsp;				continue;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -291,6 +346,9 @@
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == FINALIZE_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == OVERRIDE_METHOD)
&lt;br&gt;&amp;nbsp;				continue;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -330,6 +388,9 @@
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == FINALIZE_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == OVERRIDE_METHOD)
&lt;br&gt;&amp;nbsp;				continue;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -371,11 +432,13 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/* if a signal mark it as such */
&lt;br&gt;&amp;nbsp;	if(m-&amp;gt;method != VIRTUAL_METHOD)
&lt;br&gt;-		print_method(outh, &amp;quot;\t/*signal*/&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, TRUE, TRUE, FALSE, FALSE);
&lt;br&gt;+		print_method2(outh, &amp;quot;\t/*signal*/&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_FUNCBASE |
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;	else
&lt;br&gt;-		print_method(outh, &amp;quot;\t&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, TRUE, TRUE, FALSE, FALSE);
&lt;br&gt;+		print_method2(outh, &amp;quot;\t&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_FUNCBASE |
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;@@ -422,8 +485,11 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\&amp;quot;%s\&amp;quot;,&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;(GCallback) __extension__ ({&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase, m-&amp;gt;id, macrobase, typebase, m-&amp;gt;id);
&lt;br&gt;-		print_method (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; = (func); &amp;quot;, m, FALSE, TRUE, TRUE, FALSE, TRUE);
&lt;br&gt;+		print_method2 (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot; = (func); &amp;quot;, m,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; PRINT_METHOD_NO_FUNCBASE
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_FAKE_NAMES
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_printf (outh, &amp;quot;___%s; }), (data))\n&amp;quot;, m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		/* connect_after */
&lt;br&gt;@@ -433,8 +499,11 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\&amp;quot;%s\&amp;quot;,&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;(GCallback) __extension__ ({&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase, m-&amp;gt;id, macrobase, typebase, m-&amp;gt;id);
&lt;br&gt;-		print_method (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; = (func); &amp;quot;, m, FALSE, TRUE, TRUE, FALSE, TRUE);
&lt;br&gt;+		print_method2 (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot; = (func); &amp;quot;, m,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; PRINT_METHOD_NO_FUNCBASE
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_FAKE_NAMES
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_printf (outh, &amp;quot;___%s; }), (data))\n&amp;quot;, m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		/* connect_data */
&lt;br&gt;@@ -445,8 +514,11 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\&amp;quot;%s\&amp;quot;,&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;(GCallback) __extension__ ({&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase, m-&amp;gt;id, macrobase, typebase, m-&amp;gt;id);
&lt;br&gt;-		print_method (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; = (func); &amp;quot;, m, FALSE, TRUE, TRUE, FALSE, TRUE);
&lt;br&gt;+		print_method2 (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot; = (func); &amp;quot;, m,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; PRINT_METHOD_NO_FUNCBASE
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_FAKE_NAMES
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_printf (outh, &amp;quot;___%s; }), (data), (destroy_data), (GConnectFlags)(flags))\n&amp;quot;, m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -526,9 +598,9 @@
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; m-&amp;gt;method == SIGNAL_FIRST_METHOD ||
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; m-&amp;gt;method == VIRTUAL_METHOD) {
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;cbuf)
&lt;br&gt;-			print_method(out,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;quot;static &amp;quot;, &amp;quot;___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;static &amp;quot;, &amp;quot;___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	/* no else, here, it might still have a private prototype, it's not
&lt;br&gt;&amp;nbsp;	 * exclusive */
&lt;br&gt;@@ -537,15 +609,16 @@
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp;m-&amp;gt;cbuf)) {
&lt;br&gt;&amp;nbsp;		/* add unique ID */
&lt;br&gt;&amp;nbsp;		char *s = g_strdup_printf(&amp;quot;___%x_&amp;quot;, (guint)m-&amp;gt;unique_id);
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, s, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; no_gnu?&amp;quot;;\n&amp;quot;:&amp;quot; G_GNUC_UNUSED;\n&amp;quot;,
&lt;br&gt;+		print_method(out, &amp;quot;static &amp;quot;, s, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, FALSE, FALSE, FALSE);
&lt;br&gt;&amp;nbsp;		g_free(s);
&lt;br&gt;&amp;nbsp;	} else if(m-&amp;gt;scope == PRIVATE_SCOPE ||
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;-		 &amp;nbsp;m-&amp;gt;method == CLASS_INIT_METHOD) {
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; no_gnu?&amp;quot;;\n&amp;quot;:&amp;quot; G_GNUC_UNUSED;\n&amp;quot;,
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == FINALIZE_METHOD) {
&lt;br&gt;+		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -629,66 +702,68 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static void
&lt;br&gt;-find_dispose(const Class *cl)
&lt;br&gt;+static Method *
&lt;br&gt;+find_method(const Class *cl, int method, const char *id)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	GList *li;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	dispose_handler = NULL;
&lt;br&gt;&amp;nbsp;	for(li=cl-&amp;gt;nodes;li;li=g_list_next(li)) {
&lt;br&gt;&amp;nbsp;		Node *n = li-&amp;gt;data;
&lt;br&gt;&amp;nbsp;		if(n-&amp;gt;type == METHOD_NODE) {
&lt;br&gt;&amp;nbsp;			Method *m = (Method *)n;
&lt;br&gt;-			if(m-&amp;gt;method == OVERRIDE_METHOD &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; strcmp(m-&amp;gt;id, &amp;quot;dispose&amp;quot;)==0) {
&lt;br&gt;-				if(strcmp(m-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				if(g_list_length(m-&amp;gt;args) != 1) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				dispose_handler = m;
&lt;br&gt;-				break;
&lt;br&gt;-			}
&lt;br&gt;+			if (m-&amp;gt;method == method
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp;&amp;&amp; (id == NULL || strcmp(m-&amp;gt;id, id)==0))
&lt;br&gt;+				return m;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+	return NULL;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;-find_finalize(const Class *cl)
&lt;br&gt;+find_constructor(const Class *cl)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	GList *li;
&lt;br&gt;+	user_constructor = find_method(cl, CONSTRUCTOR_METHOD, NULL);
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	finalize_handler = NULL;
&lt;br&gt;-	for(li=cl-&amp;gt;nodes;li;li=g_list_next(li)) {
&lt;br&gt;-		Node *n = li-&amp;gt;data;
&lt;br&gt;-		if(n-&amp;gt;type == METHOD_NODE) {
&lt;br&gt;-			Method *m = (Method *)n;
&lt;br&gt;-			if(m-&amp;gt;method == OVERRIDE_METHOD &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; strcmp(m-&amp;gt;id, &amp;quot;finalize&amp;quot;)==0) {
&lt;br&gt;-				if(strcmp(m-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				if(g_list_length(m-&amp;gt;args) != 1) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				finalize_handler = m;
&lt;br&gt;-				break;
&lt;br&gt;-			}
&lt;br&gt;-		}
&lt;br&gt;+static void
&lt;br&gt;+find_dispose(const Class *cl)
&lt;br&gt;+{
&lt;br&gt;+	dispose_handler = find_method(cl, OVERRIDE_METHOD, &amp;quot;dispose&amp;quot;);
&lt;br&gt;+	if (dispose_handler != NULL) {
&lt;br&gt;+		if(strcmp(dispose_handler-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0)
&lt;br&gt;+			error_print(GOB_ERROR, dispose_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;+		if(g_list_length(dispose_handler-&amp;gt;args) != 1)
&lt;br&gt;+			error_print(GOB_ERROR, dispose_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	user_dispose_method = find_method(cl, DISPOSE_METHOD, NULL);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+find_finalize(const Class *cl)
&lt;br&gt;+{
&lt;br&gt;+	finalize_handler = find_method(cl, OVERRIDE_METHOD, &amp;quot;finalize&amp;quot;);
&lt;br&gt;+	if (finalize_handler != NULL) {
&lt;br&gt;+		if(strcmp(finalize_handler-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0)
&lt;br&gt;+			error_print(GOB_ERROR, finalize_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;+		if(g_list_length(finalize_handler-&amp;gt;args) != 1)
&lt;br&gt;+			error_print(GOB_ERROR, finalize_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+	user_finalize_method = find_method(cl, FINALIZE_METHOD, NULL);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -2118,6 +2193,33 @@
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;+add_constructor (Class *c)
&lt;br&gt;+{
&lt;br&gt;+	out_printf(out, &amp;quot;\nstatic GObject *\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;___constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties)\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;{\n&amp;quot;);
&lt;br&gt;+	out_printf(out,
&lt;br&gt;+		 &amp;nbsp; &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::constructor\&amp;quot;\n&amp;quot;,
&lt;br&gt;+		 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;+
&lt;br&gt;+	out_printf(out, &amp;quot;\tGObject *obj_self;\n&amp;quot;);
&lt;br&gt;+	out_printf(out, &amp;quot;\t%s *self;\n&amp;quot;, typebase);
&lt;br&gt;+
&lt;br&gt;+	out_printf(out, &amp;quot;\tobj_self = G_OBJECT_CLASS (parent_class)-&amp;gt;constructor (type, n_construct_properties, construct_properties);\n&amp;quot;);
&lt;br&gt;+	out_printf(out, &amp;quot;\tself = %s (obj_self);\n&amp;quot;, macrobase);
&lt;br&gt;+
&lt;br&gt;+	if (user_constructor-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+		out_addline_infile (out, user_constructor-&amp;gt;line_no);
&lt;br&gt;+	out_printf (out, &amp;quot;\t%s_constructor (self);\n&amp;quot;, funcbase);
&lt;br&gt;+	if (user_constructor-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+		out_addline_outfile (out);
&lt;br&gt;+
&lt;br&gt;+	out_printf(out, &amp;quot;\treturn obj_self;\n&amp;quot;);
&lt;br&gt;+	out_printf(out, &amp;quot;}\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;#undef __GOB_FUNCTION__\n\n&amp;quot;);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;&amp;nbsp;add_dispose (Class *c)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	out_printf(out, &amp;quot;\nstatic void\n&amp;quot;
&lt;br&gt;@@ -2127,7 +2229,7 @@
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::dispose\&amp;quot;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	if (unreftors &amp;gt; 0) {
&lt;br&gt;+	if (unreftors &amp;gt; 0 || user_dispose_method != NULL) {
&lt;br&gt;&amp;nbsp;		out_printf (out, &amp;quot;\t%s *self%s = %s (obj_self);\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;typebase,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;! no_gnu ? &amp;quot; G_GNUC_UNUSED&amp;quot; : &amp;quot;&amp;quot;,
&lt;br&gt;@@ -2143,6 +2245,14 @@
&lt;br&gt;&amp;nbsp;		if (dispose_handler-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_outfile (out);
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;+		if (user_dispose_method != NULL) {
&lt;br&gt;+			if (user_dispose_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_infile (out, user_dispose_method-&amp;gt;line_no);
&lt;br&gt;+			out_printf (out, &amp;quot;\t%s_dispose (self);\n&amp;quot;, funcbase);
&lt;br&gt;+			if (user_dispose_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_outfile (out);
&lt;br&gt;+		}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;		out_printf (out,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\tif (G_OBJECT_CLASS (parent_class)-&amp;gt;dispose) \\\n&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\t\t(* G_OBJECT_CLASS (parent_class)-&amp;gt;dispose) (obj_self);\n&amp;quot;);
&lt;br&gt;@@ -2178,7 +2288,8 @@
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (privates &amp;gt; 0 ||
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;destructors &amp;gt; 0) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;destructors &amp;gt; 0 ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;user_finalize_method != NULL) {
&lt;br&gt;&amp;nbsp;		const char *unused = &amp;quot;&amp;quot;;
&lt;br&gt;&amp;nbsp;		if ( ! no_gnu)
&lt;br&gt;&amp;nbsp;			unused = &amp;quot; G_GNUC_UNUSED&amp;quot;;
&lt;br&gt;@@ -2202,6 +2313,14 @@
&lt;br&gt;&amp;nbsp;		if(finalize_handler-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_outfile(out);
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;+		if (user_finalize_method != NULL) {
&lt;br&gt;+			if (user_finalize_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_infile (out, user_finalize_method-&amp;gt;line_no);
&lt;br&gt;+			out_printf (out, &amp;quot;\t%s_finalize (self);\n&amp;quot;, funcbase);
&lt;br&gt;+			if (user_finalize_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_outfile (out);
&lt;br&gt;+		}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;		out_printf(out,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;quot;\tif(G_OBJECT_CLASS(parent_class)-&amp;gt;finalize) \\\n&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;quot;\t\t(* G_OBJECT_CLASS(parent_class)-&amp;gt;finalize)(obj_self);\n&amp;quot;);
&lt;br&gt;@@ -2381,6 +2500,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			/* if there are no handlers for these things, we
&lt;br&gt;&amp;nbsp;			 * need to set them up here */
&lt;br&gt;+			if(need_constructor)
&lt;br&gt;+				out_printf(out, &amp;quot;\tg_object_class-&amp;gt;constructor &amp;quot;
&lt;br&gt;+					 &amp;nbsp; &amp;quot;= ___constructor;\n&amp;quot;);
&lt;br&gt;&amp;nbsp;			if(need_dispose &amp;&amp; !dispose_handler)
&lt;br&gt;&amp;nbsp;				out_printf(out, &amp;quot;\tg_object_class-&amp;gt;dispose &amp;quot;
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;quot;= ___dispose;\n&amp;quot;);
&lt;br&gt;@@ -2831,11 +2953,11 @@
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;scope == PRIVATE_SCOPE)
&lt;br&gt;-			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;-			print_method(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		print_method_body(m, TRUE, TRUE);
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;@@ -2844,11 +2966,11 @@
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;scope == PRIVATE_SCOPE)
&lt;br&gt;-			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;-			print_method(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_addline_outfile (out);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		out_printf (out, &amp;quot;{\n&amp;quot;);
&lt;br&gt;@@ -2966,8 +3088,8 @@
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, TRUE, FALSE);
&lt;br&gt;+		print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		print_method_body(m, FALSE, TRUE);
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;@@ -2975,11 +3097,11 @@
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;scope==PRIVATE_SCOPE)
&lt;br&gt;-			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;-			print_method(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_addline_outfile(out);
&lt;br&gt;&amp;nbsp;		out_printf(out, &amp;quot;{\n&amp;quot;
&lt;br&gt;&amp;nbsp;			&amp;quot;\t%sClass *klass;\n&amp;quot;, typebase);
&lt;br&gt;@@ -3024,8 +3146,9 @@
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, TRUE, FALSE);
&lt;br&gt;+		print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_FIRST_UNUSED
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;| PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		print_method_body(m, FALSE, TRUE);
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;@@ -3064,6 +3187,15 @@
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		out_printf(out, &amp;quot;#undef PARENT_HANDLER\n&amp;quot;);
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;+	case CONSTRUCTOR_METHOD:
&lt;br&gt;+	case DISPOSE_METHOD:
&lt;br&gt;+	case FINALIZE_METHOD:
&lt;br&gt;+		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;+		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+		print_method_body(m, TRUE, TRUE);
&lt;br&gt;+		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;	default:
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -3633,6 +3765,9 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	if (need_constructor)
&lt;br&gt;+		add_constructor (c);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	if (need_dispose)
&lt;br&gt;&amp;nbsp;		add_dispose (c);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -4441,15 +4576,24 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	make_bases ();
&lt;br&gt;&amp;nbsp;	make_inits ((Class *)class);
&lt;br&gt;-	if(unreftors &amp;gt; 0) {
&lt;br&gt;+
&lt;br&gt;+	find_constructor ((Class *)class);
&lt;br&gt;+	if (user_constructor != NULL)
&lt;br&gt;+		need_constructor = TRUE;
&lt;br&gt;+
&lt;br&gt;+	find_dispose ((Class *)class);
&lt;br&gt;+	if (unreftors &amp;gt; 0 ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;dispose_handler != NULL ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;user_dispose_method != NULL)
&lt;br&gt;&amp;nbsp;		need_dispose = TRUE;
&lt;br&gt;-		find_dispose ((Class *)class);
&lt;br&gt;-	}
&lt;br&gt;+
&lt;br&gt;+	find_finalize ((Class *)class);
&lt;br&gt;&amp;nbsp;	if (destructors &amp;gt; 0 ||
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;privates &amp;gt; 0) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;privates &amp;gt; 0 ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;user_finalize_method != NULL) {
&lt;br&gt;&amp;nbsp;		need_finalize = TRUE;
&lt;br&gt;-		find_finalize ((Class *)class);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	check_bad_symbols ((Class *)class);
&lt;br&gt;&amp;nbsp;	check_duplicate_symbols ((Class *)class);
&lt;br&gt;&amp;nbsp;	check_duplicate_overrides ((Class *)class);
&lt;br&gt;--- src/parse.y.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/parse.y	2008-01-29 00:24:30.000000000 +0100
&lt;br&gt;@@ -146,7 +146,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;&amp;nbsp;push_function (int scope, int method, char *oid, char *id,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; GString *cbuf, int line_no, int ccode_line,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; GString *attr, GString *cbuf, int line_no, int ccode_line,
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; &amp;nbsp; gboolean vararg, GList *flags)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	Node *node;
&lt;br&gt;@@ -155,7 +155,11 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	g_assert(scope != CLASS_SCOPE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;-	if(method == INIT_METHOD || method == CLASS_INIT_METHOD) {
&lt;br&gt;+	if(method == INIT_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == CLASS_INIT_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == CONSTRUCTOR_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == DISPOSE_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == FINALIZE_METHOD) {
&lt;br&gt;&amp;nbsp;		type = (Type *)node_new (TYPE_NODE,
&lt;br&gt;&amp;nbsp;					 &amp;quot;name&amp;quot;, &amp;quot;void&amp;quot;,
&lt;br&gt;&amp;nbsp;					 NULL);
&lt;br&gt;@@ -207,6 +211,7 @@
&lt;br&gt;&amp;nbsp;			 &amp;quot;args:steal&amp;quot;, funcargs,
&lt;br&gt;&amp;nbsp;			 &amp;quot;onerror:steal&amp;quot;, onerror,
&lt;br&gt;&amp;nbsp;			 &amp;quot;defreturn:steal&amp;quot;, defreturn,
&lt;br&gt;+			 &amp;quot;attr:steal&amp;quot;, attr ? attr-&amp;gt;str : NULL,
&lt;br&gt;&amp;nbsp;			 &amp;quot;cbuf:steal&amp;quot;, c_cbuf,
&lt;br&gt;&amp;nbsp;			 &amp;quot;line_no&amp;quot;, line_no,
&lt;br&gt;&amp;nbsp;			 &amp;quot;ccode_line&amp;quot;, ccode_line,
&lt;br&gt;@@ -216,6 +221,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	last_added_method = (Method *)node;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	if(attr)
&lt;br&gt;+		g_string_free(attr, FALSE);
&lt;br&gt;&amp;nbsp;	if(cbuf)
&lt;br&gt;&amp;nbsp;		g_string_free(cbuf,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp;/*only free segment if we haven't passed it
&lt;br&gt;@@ -405,7 +412,7 @@
&lt;br&gt;&amp;nbsp;		push_funcarg (&amp;quot;self&amp;quot;, FALSE);
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		push_function (PUBLIC_SCOPE, REGULAR_METHOD, NULL,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp; get_id, get_cbuf, get_lineno,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; get_id, NULL, get_cbuf, get_lineno,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; lineno, FALSE, NULL);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;@@ -439,7 +446,7 @@
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;&amp;nbsp;		typestack = g_list_prepend (typestack, node2);
&lt;br&gt;&amp;nbsp;		push_function (PUBLIC_SCOPE, REGULAR_METHOD, NULL,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp; set_id, set_cbuf, set_lineno,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; set_id, NULL, set_cbuf, set_lineno,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; lineno, FALSE, NULL);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -677,7 +684,7 @@
&lt;br&gt;&amp;nbsp;%token CONST VOID STRUCT UNION ENUM THREEDOTS
&lt;br&gt;&amp;nbsp;%token SIGNED UNSIGNED LONG SHORT INT FLOAT DOUBLE CHAR
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-%token &amp;lt;id&amp;gt; TOKEN NUMBER TYPETOKEN ARRAY_DIM SINGLE_CHAR
&lt;br&gt;+%token &amp;lt;id&amp;gt; TOKEN NUMBER TYPETOKEN ARRAY_DIM_OR_ATTR BITFIELD SINGLE_CHAR
&lt;br&gt;&amp;nbsp;%token &amp;lt;cbuf&amp;gt; CCODE HTCODE PHCODE HCODE ACODE ATCODE STRING
&lt;br&gt;&amp;nbsp;%token &amp;lt;line&amp;gt; PUBLIC PRIVATE PROTECTED CLASSWIDE PROPERTY ARGUMENT
&lt;br&gt;&amp;nbsp;%token &amp;lt;line&amp;gt; VIRTUAL SIGNAL OVERRIDE
&lt;br&gt;@@ -982,7 +989,7 @@
&lt;br&gt;&amp;nbsp;variable:	scope type TOKEN varoptions ';'		{
&lt;br&gt;&amp;nbsp;			push_variable($&amp;lt;id&amp;gt;3, the_scope,$&amp;lt;line&amp;gt;1, NULL);
&lt;br&gt;&amp;nbsp;						}
&lt;br&gt;-	|	scope type TOKEN ARRAY_DIM varoptions ';'	{
&lt;br&gt;+	|	scope type TOKEN array_dim varoptions ';'	{
&lt;br&gt;&amp;nbsp;			push_variable($&amp;lt;id&amp;gt;3, the_scope, $&amp;lt;line&amp;gt;1, $&amp;lt;id&amp;gt;4);
&lt;br&gt;&amp;nbsp;						}
&lt;br&gt;&amp;nbsp;	;
&lt;br&gt;@@ -1678,9 +1685,25 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, $&amp;lt;sigtype&amp;gt;3,NULL,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;5, $&amp;lt;cbuf&amp;gt;10,$&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;5, NULL, $&amp;lt;cbuf&amp;gt;10,$&amp;lt;line&amp;gt;1,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;2);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;+	|	attrs SIGNAL flags fullsigtype type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;signal without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, $&amp;lt;sigtype&amp;gt;4,NULL,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, $&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;11,$&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;3);
&lt;br&gt;+									}
&lt;br&gt;&amp;nbsp;	|	scope SIGNAL flags simplesigtype type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;&amp;nbsp;			if(!has_self) {
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;signal without 'self' as &amp;quot;
&lt;br&gt;@@ -1694,9 +1717,25 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, $&amp;lt;sigtype&amp;gt;4, NULL,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, $&amp;lt;cbuf&amp;gt;11, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, NULL, $&amp;lt;cbuf&amp;gt;11, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;3);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;+	|	attrs scope SIGNAL flags simplesigtype type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;signal without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, $&amp;lt;sigtype&amp;gt;5, NULL,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;7, $&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;12, $&amp;lt;line&amp;gt;3,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;4);
&lt;br&gt;+									}
&lt;br&gt;&amp;nbsp;	|	VIRTUAL scope type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;&amp;nbsp;			if(!has_self) {
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;@@ -1710,7 +1749,23 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;4,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;+									}
&lt;br&gt;+	|	attrs VIRTUAL scope type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;5,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;10, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;&amp;nbsp;	|	scope VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;@@ -1726,7 +1781,23 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;4,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;+									}
&lt;br&gt;+	|	attrs scope VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;5,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;10, $&amp;lt;line&amp;gt;3,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;&amp;nbsp;	|	VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;@@ -1737,12 +1808,23 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(PUBLIC_SCOPE, VIRTUAL_METHOD, NULL,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;3, $&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;3, NULL, $&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;+									}
&lt;br&gt;+	|	attrs VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(PUBLIC_SCOPE, VIRTUAL_METHOD, NULL,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;4, $&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;&amp;nbsp;	|	OVERRIDE '(' TYPETOKEN ')' type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;&amp;nbsp;			push_function(NO_SCOPE, OVERRIDE_METHOD, $&amp;lt;id&amp;gt;3,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, $&amp;lt;cbuf&amp;gt;11,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, NULL, $&amp;lt;cbuf&amp;gt;11,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;line&amp;gt;1, ccode_line,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;@@ -1753,32 +1835,74 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, REGULAR_METHOD, NULL, $&amp;lt;id&amp;gt;3,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1, ccode_line,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, $&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1, ccode_line,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;vararg, NULL);
&lt;br&gt;+								}
&lt;br&gt;+	|	attrs scope type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, REGULAR_METHOD, NULL, $&amp;lt;id&amp;gt;4,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;1, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2, ccode_line,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;vararg, NULL);
&lt;br&gt;&amp;nbsp;								}
&lt;br&gt;&amp;nbsp;	|	TOKEN '(' TOKEN ')' codenocode	{
&lt;br&gt;&amp;nbsp;			if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;init&amp;quot;)==0) {
&lt;br&gt;&amp;nbsp;				push_init_arg($&amp;lt;id&amp;gt;3,FALSE);
&lt;br&gt;&amp;nbsp;				push_function(NO_SCOPE, INIT_METHOD, NULL,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;&amp;nbsp;			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;class_init&amp;quot;)==0) {
&lt;br&gt;&amp;nbsp;				push_init_arg($&amp;lt;id&amp;gt;3,TRUE);
&lt;br&gt;&amp;nbsp;				push_function(NO_SCOPE, CLASS_INIT_METHOD, NULL,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;constructor&amp;quot;)==0) {
&lt;br&gt;+				push_init_arg($&amp;lt;id&amp;gt;3, FALSE);
&lt;br&gt;+				push_function(NO_SCOPE, CONSTRUCTOR_METHOD, NULL,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;dispose&amp;quot;)==0) {
&lt;br&gt;+				push_init_arg($&amp;lt;id&amp;gt;3, FALSE);
&lt;br&gt;+				push_function(NO_SCOPE, DISPOSE_METHOD, NULL,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;finalize&amp;quot;)==0) {
&lt;br&gt;+				push_init_arg($&amp;lt;id&amp;gt;3, FALSE);
&lt;br&gt;+				push_function(NO_SCOPE, FINALIZE_METHOD, NULL,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;&amp;nbsp;			} else {
&lt;br&gt;&amp;nbsp;				g_free($&amp;lt;id&amp;gt;1);
&lt;br&gt;&amp;nbsp;				g_free($&amp;lt;id&amp;gt;3);
&lt;br&gt;&amp;nbsp;				g_string_free($&amp;lt;cbuf&amp;gt;5,TRUE);
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;parse error &amp;quot;
&lt;br&gt;-					 &amp;nbsp;&amp;quot;(untyped blocks must be init or &amp;quot;
&lt;br&gt;-					 &amp;nbsp;&amp;quot;class_init)&amp;quot;));
&lt;br&gt;+					 &amp;nbsp;&amp;quot;(untyped blocks must be init, &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;class_init, constructor, dispose &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;or finalize)&amp;quot;));
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;						}
&lt;br&gt;&amp;nbsp;	;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+attrs:
&lt;br&gt;+		'[' CCODE {
&lt;br&gt;+			$&amp;lt;cbuf&amp;gt;$ = $&amp;lt;cbuf&amp;gt;2;
&lt;br&gt;+		}
&lt;br&gt;+	|	ARRAY_DIM_OR_ATTR {
&lt;br&gt;+			int len = strlen($&amp;lt;id&amp;gt;1);
&lt;br&gt;+
&lt;br&gt;+			g_assert($&amp;lt;id&amp;gt;1[0] == '[');
&lt;br&gt;+			g_assert(len &amp;gt;= 2 &amp;&amp; $&amp;lt;id&amp;gt;1[len - 1] == ']');
&lt;br&gt;+
&lt;br&gt;+			/* strip the brackets */
&lt;br&gt;+			$&amp;lt;cbuf&amp;gt;$ = g_string_new_len($&amp;lt;id&amp;gt;1 + 1, len - 2);
&lt;br&gt;+			g_free($&amp;lt;id&amp;gt;1);
&lt;br&gt;+		}
&lt;br&gt;+	;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;returnvals:	TOKEN retcode		{
&lt;br&gt;&amp;nbsp;			g_free(onerror); onerror = NULL;
&lt;br&gt;&amp;nbsp;			g_free(defreturn); defreturn = NULL;
&lt;br&gt;@@ -1900,7 +2024,7 @@
&lt;br&gt;&amp;nbsp;arg:		type TOKEN					{
&lt;br&gt;&amp;nbsp;			push_funcarg($&amp;lt;id&amp;gt;2,NULL);
&lt;br&gt;&amp;nbsp;								}
&lt;br&gt;-	|	type TOKEN ARRAY_DIM				{
&lt;br&gt;+	|	type TOKEN array_dim				{
&lt;br&gt;&amp;nbsp;			push_funcarg($&amp;lt;id&amp;gt;2,$&amp;lt;id&amp;gt;3);
&lt;br&gt;&amp;nbsp;								}
&lt;br&gt;&amp;nbsp;	|	type TOKEN '(' TOKEN checklist ')'		{
&lt;br&gt;@@ -1911,7 +2035,7 @@
&lt;br&gt;&amp;nbsp;			g_free($&amp;lt;id&amp;gt;4);
&lt;br&gt;&amp;nbsp;			push_funcarg($&amp;lt;id&amp;gt;2,NULL);
&lt;br&gt;&amp;nbsp;								}
&lt;br&gt;-	|	type TOKEN ARRAY_DIM '(' TOKEN checklist ')'	{
&lt;br&gt;+	|	type TOKEN array_dim '(' TOKEN checklist ')'	{
&lt;br&gt;&amp;nbsp;			if(strcmp($&amp;lt;id&amp;gt;5,&amp;quot;check&amp;quot;)!=0) {
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;@@ -2105,5 +2229,10 @@
&lt;br&gt;&amp;nbsp;	|	SINGLE_CHAR		{ $&amp;lt;id&amp;gt;$ = $&amp;lt;id&amp;gt;1; }
&lt;br&gt;&amp;nbsp;	|	TOKEN			{ $&amp;lt;id&amp;gt;$ = $&amp;lt;id&amp;gt;1; }
&lt;br&gt;&amp;nbsp;	;
&lt;br&gt;+
&lt;br&gt;+array_dim:
&lt;br&gt;+		ARRAY_DIM_OR_ATTR
&lt;br&gt;+	|	BITFIELD
&lt;br&gt;+	;
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;&amp;nbsp;%%
&lt;br&gt;--- src/treefuncs.def.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/treefuncs.def	2008-01-29 00:24:30.000000000 +0100
&lt;br&gt;@@ -40,6 +40,9 @@
&lt;br&gt;&amp;nbsp;	REGULAR_METHOD,
&lt;br&gt;&amp;nbsp;	INIT_METHOD,
&lt;br&gt;&amp;nbsp;	CLASS_INIT_METHOD,
&lt;br&gt;+	CONSTRUCTOR_METHOD,
&lt;br&gt;+	DISPOSE_METHOD,
&lt;br&gt;+	FINALIZE_METHOD,
&lt;br&gt;&amp;nbsp;	VIRTUAL_METHOD,
&lt;br&gt;&amp;nbsp;	SIGNAL_LAST_METHOD,
&lt;br&gt;&amp;nbsp;	SIGNAL_FIRST_METHOD,
&lt;br&gt;@@ -126,6 +129,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;NODELIST	args
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	onerror
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	defreturn
&lt;br&gt;+ &amp;nbsp;STRING	attr
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	cbuf
&lt;br&gt;&amp;nbsp; &amp;nbsp;INT		line_no
&lt;br&gt;&amp;nbsp; &amp;nbsp;INT		ccode_line
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt; &lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15150156&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;attachment0&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/15150156/0/attachment0&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/patch-allowing-to-add-GCC-attributes-to-methods-tp15141367p15150156.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-15141367</id>
	<title>patch allowing to add GCC attributes to methods</title>
	<published>2008-01-28T09:10:20Z</published>
	<updated>2008-01-28T09:10:20Z</updated>
	<author>
		<name>Jean-Yves Lefort</name>
	</author>
	<content type="html">The attached patch allows to add GCC attributes to methods, using a
&lt;br&gt;syntax borrowed from C#. For instance:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [G_GNUC_PRINTF(1, 2)]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private void say_something (const char *format, ...)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;The text enclosed in brackets is not parsed (the lexer returns a CCODE
&lt;br&gt;token). It is inserted verbatim in the function declaration, before
&lt;br&gt;the trailing semicolon.
&lt;br&gt;&lt;br&gt;With this patch, gob no longer unconditionally adds G_GNUC_UNUSED to
&lt;br&gt;methods, which is a bad idea since it might hide programming
&lt;br&gt;errors. Users should now specify it manually when needed.
&lt;br&gt;&lt;br&gt;Attributes are not supported for overriden methods since these methods
&lt;br&gt;are not meant to be called directly. For signals and virtual methods,
&lt;br&gt;the attributes are added to the declaration of the invocation wrapper,
&lt;br&gt;but not to the &amp;quot;__real&amp;quot; default implementation method that gob emits.
&lt;br&gt;&lt;br&gt;Two patches are provided:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gob2-2.0.15-attr.diff
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; The attributes feature alone.
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gob2-2.0.15-gobject-overrides-and-attr.diff
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; The attributes feature and another feature I've
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; implemented previously (see the message with subject
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;patch adding first-class support of
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; constructor/dispose/finalize methods&amp;quot;). This unified
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; patch is provided because the two individual patches
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; conflict with each other and require merging.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15141367&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[gob2-2.0.15-attr.diff]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;--- src/lexer.l.orig	2007-09-28 06:26:49.000000000 +0200
&lt;br&gt;+++ src/lexer.l	2008-01-28 16:04:28.000000000 +0100
&lt;br&gt;@@ -31,6 +31,7 @@
&lt;br&gt;&amp;nbsp;#include &amp;quot;main.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;util.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static int bracket_depth = 0;
&lt;br&gt;&amp;nbsp;static int parenth_depth = 0;
&lt;br&gt;&amp;nbsp;static int before_comment
&lt;br&gt;&amp;nbsp;/* New flex is on drugs */
&lt;br&gt;@@ -102,6 +103,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;%x COMMENT
&lt;br&gt;&amp;nbsp;%x C_CODE
&lt;br&gt;+%x ATTR_CODE
&lt;br&gt;&amp;nbsp;%x CODE_STRING
&lt;br&gt;&amp;nbsp;%x CLASS_CODE
&lt;br&gt;&amp;nbsp;%x CLASS_STRING
&lt;br&gt;@@ -267,7 +269,7 @@
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\/\/.*$		{ add_to_cbuf(yytext); /*comment, ignore*/ }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\/\/.*$	{ add_to_cbuf(yytext); /*comment, ignore*/ }
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE&amp;gt;\/\/.*$	{ ; /*comment, ignore*/ }
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;\/\/.*$	{ ; /*comment, ignore*/ }
&lt;br&gt;&amp;nbsp;&amp;lt;PROPERTY_CODE_I&amp;gt;\/\/.*$	{ ; /*comment, ignore*/ }
&lt;br&gt;@@ -277,20 +279,25 @@
&lt;br&gt;&amp;nbsp;	BEGIN(COMMENT);
&lt;br&gt;&amp;nbsp;	before_comment = C_CODE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\/\*	{
&lt;br&gt;+	add_to_cbuf(yytext);
&lt;br&gt;+	BEGIN(COMMENT);
&lt;br&gt;+	before_comment = ATTR_CODE;
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE&amp;gt;\/\*	{BEGIN(COMMENT); before_comment = CLASS_CODE; }
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;\/\*	{BEGIN(COMMENT); before_comment = CLASS_CODE_I; }
&lt;br&gt;&amp;nbsp;&amp;lt;PROPERTY_CODE_I&amp;gt;\/\*	{BEGIN(COMMENT); before_comment = PROPERTY_CODE_I; }
&lt;br&gt;&amp;nbsp;&amp;lt;COMMENT&amp;gt;\*\/	{
&lt;br&gt;-	if(before_comment == C_CODE) add_to_cbuf(yytext);
&lt;br&gt;+	if(before_comment == C_CODE || before_comment == ATTR_CODE) add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;	BEGIN(before_comment);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;COMMENT&amp;gt;.	{
&lt;br&gt;&amp;nbsp;	/* comment, ignore */
&lt;br&gt;-	if(before_comment == C_CODE) add_to_cbuf(yytext);
&lt;br&gt;+	if(before_comment == C_CODE || before_comment == ATTR_CODE) add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;COMMENT&amp;gt;\n	{
&lt;br&gt;&amp;nbsp;	/* comment, ignore */
&lt;br&gt;-	if(before_comment == C_CODE) add_to_cbuf(yytext);
&lt;br&gt;+	if(before_comment == C_CODE || before_comment == ATTR_CODE) add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;^\%(a|all)\{		{
&lt;br&gt;@@ -353,14 +360,14 @@
&lt;br&gt;&amp;nbsp;			return code_type;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\{\'		{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\\\{\'	{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\}\'		{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\\\}\'	{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\&amp;quot;\'		{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\\\&amp;quot;\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\{\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\\\{\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\}\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\\\}\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\&amp;quot;\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\\\&amp;quot;\'	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\\.	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\\.	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;C_CODE&amp;gt;\&amp;quot;	{
&lt;br&gt;@@ -368,6 +375,11 @@
&lt;br&gt;&amp;nbsp;			before_string = C_CODE;
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\&amp;quot;	{
&lt;br&gt;+			BEGIN(CODE_STRING);
&lt;br&gt;+			before_string = ATTR_CODE;
&lt;br&gt;+			add_to_cbuf(yytext);
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;&amp;lt;PROPERTY_CODE_I&amp;gt;\&amp;quot;	{
&lt;br&gt;&amp;nbsp;			BEGIN(CODE_STRING);
&lt;br&gt;&amp;nbsp;			before_string = PROPERTY_CODE_I;
&lt;br&gt;@@ -391,6 +403,10 @@
&lt;br&gt;&amp;nbsp;			parenth_depth++;
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\[	{
&lt;br&gt;+			bracket_depth++;
&lt;br&gt;+			add_to_cbuf(yytext);
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;&amp;lt;C_CODE&amp;gt;\}	{
&lt;br&gt;&amp;nbsp;			parenth_depth--;
&lt;br&gt;&amp;nbsp;			if(parenth_depth&amp;lt;0) {
&lt;br&gt;@@ -403,9 +419,21 @@
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\]	{
&lt;br&gt;+			bracket_depth--;
&lt;br&gt;+			if(bracket_depth&amp;lt;0) {
&lt;br&gt;+				REJECT;
&lt;br&gt;+			} else if(bracket_depth==0) {
&lt;br&gt;+				BEGIN(CLASS_CODE_I);
&lt;br&gt;+				yylval.cbuf = cbuf;
&lt;br&gt;+				cbuf = NULL;
&lt;br&gt;+				return CCODE;
&lt;br&gt;+			}
&lt;br&gt;+			add_to_cbuf(yytext);
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;.	{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\n	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;.	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\n	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class		{
&lt;br&gt;&amp;nbsp;			static int found_classes = 0;
&lt;br&gt;@@ -612,6 +640,13 @@
&lt;br&gt;&amp;nbsp;				BEGIN(INITIAL);
&lt;br&gt;&amp;nbsp;				return '}';
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;+&amp;lt;CLASS_CODE_I&amp;gt;\[	{
&lt;br&gt;+			BEGIN(ATTR_CODE);
&lt;br&gt;+			bracket_depth=1;
&lt;br&gt;+			yylval.line = line_no;
&lt;br&gt;+			clear_cbuf();
&lt;br&gt;+			return '[';
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE,CLASS_CODE_I,INITIAL,PROPERTY_CODE,PROPERTY_CODE_I&amp;gt;[\f\t ]	; &amp;nbsp;/*ignore*/
&lt;br&gt;&amp;nbsp;
&lt;br&gt;--- src/main.c.orig	2007-10-17 16:49:04.000000000 +0200
&lt;br&gt;+++ src/main.c	2008-01-28 17:01:49.000000000 +0100
&lt;br&gt;@@ -189,21 +189,25 @@
&lt;br&gt;&amp;nbsp;	g_free(s);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;-static void
&lt;br&gt;-print_method (FILE *fp,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *typeprefix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *nameprefix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *subnameprefix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *namepostfix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *afterargs,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *postfix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const Method *m,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean one_arg_per_line,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean no_funcbase,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean kill_underscore,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean first_unused,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean fake_names)
&lt;br&gt;+typedef enum
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_ONE_ARG_PER_LINE		= 1 &amp;lt;&amp;lt; 0,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_NO_FUNCBASE		= 1 &amp;lt;&amp;lt; 1,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_FIRST_UNUSED		= 1 &amp;lt;&amp;lt; 2,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_FAKE_NAMES		= 1 &amp;lt;&amp;lt; 3,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_NO_ATTR			= 1 &amp;lt;&amp;lt; 4
&lt;br&gt;+} PrintMethodFlags;
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+print_method2 (FILE *fp,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *typeprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *nameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *subnameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *namepostfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *afterargs,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *postfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const Method *m,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; PrintMethodFlags flags)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	GList *li;
&lt;br&gt;&amp;nbsp;	const char *id;
&lt;br&gt;@@ -213,7 +217,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	id = m-&amp;gt;id;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	if(no_funcbase)
&lt;br&gt;+	if ((flags &amp; PRINT_METHOD_NO_FUNCBASE) != 0)
&lt;br&gt;&amp;nbsp;		out_printf(fp, &amp;quot;%s%s%s%s(&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; nameprefix, subnameprefix, id, namepostfix); 
&lt;br&gt;&amp;nbsp;	else
&lt;br&gt;@@ -229,19 +233,19 @@
&lt;br&gt;&amp;nbsp;			if ( ! no_gnu &amp;&amp;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; ! for_cpp &amp;&amp; /* g++ has a cow with this */
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;li == m-&amp;gt;args &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp;first_unused) {
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; (flags &amp; PRINT_METHOD_FIRST_UNUSED) != 0) {
&lt;br&gt;&amp;nbsp;				unused = &amp;quot; G_GNUC_UNUSED&amp;quot;;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			print_type(fp, arg-&amp;gt;atype, FALSE);
&lt;br&gt;-			if (fake_names)
&lt;br&gt;+			if ((flags &amp; PRINT_METHOD_FAKE_NAMES) != 0)
&lt;br&gt;&amp;nbsp;				out_printf (fp, &amp;quot;___fake___&amp;quot;);
&lt;br&gt;&amp;nbsp;			if(li-&amp;gt;next)
&lt;br&gt;&amp;nbsp;				out_printf(fp, &amp;quot;%s%s%s,%s&amp;quot;, arg-&amp;gt;name,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; arg-&amp;gt;atype-&amp;gt;postfix ?
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; arg-&amp;gt;atype-&amp;gt;postfix : &amp;quot;&amp;quot;,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; unused,
&lt;br&gt;-					 &amp;nbsp; one_arg_per_line ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;);
&lt;br&gt;+					 &amp;nbsp; (flags &amp; PRINT_METHOD_ONE_ARG_PER_LINE) != 0 ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;);
&lt;br&gt;&amp;nbsp;			else
&lt;br&gt;&amp;nbsp;				out_printf(fp, &amp;quot;%s%s%s&amp;quot;, arg-&amp;gt;name,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; arg-&amp;gt;atype-&amp;gt;postfix ?
&lt;br&gt;@@ -250,11 +254,54 @@
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;vararg)
&lt;br&gt;&amp;nbsp;			out_printf(fp, &amp;quot;,%s...&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; one_arg_per_line ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;); 
&lt;br&gt;+				 &amp;nbsp; (flags &amp; PRINT_METHOD_ONE_ARG_PER_LINE) != 0 ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;); 
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;&amp;nbsp;		out_printf(fp, &amp;quot;void&amp;quot;); 
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-	out_printf(fp, &amp;quot;%s)%s&amp;quot;, afterargs, postfix); 
&lt;br&gt;+
&lt;br&gt;+	out_printf(fp, &amp;quot;%s)&amp;quot;, afterargs);
&lt;br&gt;+
&lt;br&gt;+	if (m-&amp;gt;attr &amp;&amp; (flags &amp; PRINT_METHOD_NO_ATTR) == 0)
&lt;br&gt;+		out_printf(fp, &amp;quot; %s&amp;quot;, m-&amp;gt;attr);
&lt;br&gt;+
&lt;br&gt;+	out_printf(fp, &amp;quot;%s&amp;quot;, postfix);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+print_method (FILE *fp,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *typeprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *nameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *subnameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *namepostfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *afterargs,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *postfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const Method *m,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean one_arg_per_line,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean no_funcbase,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean kill_underscore,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean first_unused,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean fake_names)
&lt;br&gt;+{
&lt;br&gt;+	PrintMethodFlags flags = 0;
&lt;br&gt;+
&lt;br&gt;+	if (one_arg_per_line)
&lt;br&gt;+		flags |= PRINT_METHOD_ONE_ARG_PER_LINE;
&lt;br&gt;+	if (no_funcbase)
&lt;br&gt;+		flags |= PRINT_METHOD_NO_FUNCBASE;
&lt;br&gt;+	if (first_unused)
&lt;br&gt;+		flags |= PRINT_METHOD_FIRST_UNUSED;
&lt;br&gt;+	if (fake_names)
&lt;br&gt;+		flags |= PRINT_METHOD_FAKE_NAMES;
&lt;br&gt;+
&lt;br&gt;+	print_method2(fp,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;typeprefix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;nameprefix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;subnameprefix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;namepostfix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;afterargs,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;postfix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;m,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;flags);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static gboolean
&lt;br&gt;@@ -371,11 +418,13 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/* if a signal mark it as such */
&lt;br&gt;&amp;nbsp;	if(m-&amp;gt;method != VIRTUAL_METHOD)
&lt;br&gt;-		print_method(outh, &amp;quot;\t/*signal*/&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, TRUE, TRUE, FALSE, FALSE);
&lt;br&gt;+		print_method2(outh, &amp;quot;\t/*signal*/&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_FUNCBASE |
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;	else
&lt;br&gt;-		print_method(outh, &amp;quot;\t&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, TRUE, TRUE, FALSE, FALSE);
&lt;br&gt;+		print_method2(outh, &amp;quot;\t&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_FUNCBASE |
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;@@ -422,8 +471,11 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\&amp;quot;%s\&amp;quot;,&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;(GCallback) __extension__ ({&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase, m-&amp;gt;id, macrobase, typebase, m-&amp;gt;id);
&lt;br&gt;-		print_method (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; = (func); &amp;quot;, m, FALSE, TRUE, TRUE, FALSE, TRUE);
&lt;br&gt;+		print_method2 (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot; = (func); &amp;quot;, m,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; PRINT_METHOD_NO_FUNCBASE
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_FAKE_NAMES
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_printf (outh, &amp;quot;___%s; }), (data))\n&amp;quot;, m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		/* connect_after */
&lt;br&gt;@@ -433,8 +485,11 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\&amp;quot;%s\&amp;quot;,&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;(GCallback) __extension__ ({&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase, m-&amp;gt;id, macrobase, typebase, m-&amp;gt;id);
&lt;br&gt;-		print_method (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; = (func); &amp;quot;, m, FALSE, TRUE, TRUE, FALSE, TRUE);
&lt;br&gt;+		print_method2 (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot; = (func); &amp;quot;, m,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; PRINT_METHOD_NO_FUNCBASE
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_FAKE_NAMES
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_printf (outh, &amp;quot;___%s; }), (data))\n&amp;quot;, m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		/* connect_data */
&lt;br&gt;@@ -445,8 +500,11 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\&amp;quot;%s\&amp;quot;,&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;(GCallback) __extension__ ({&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase, m-&amp;gt;id, macrobase, typebase, m-&amp;gt;id);
&lt;br&gt;-		print_method (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; = (func); &amp;quot;, m, FALSE, TRUE, TRUE, FALSE, TRUE);
&lt;br&gt;+		print_method2 (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot; = (func); &amp;quot;, m,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; PRINT_METHOD_NO_FUNCBASE
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_FAKE_NAMES
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_printf (outh, &amp;quot;___%s; }), (data), (destroy_data), (GConnectFlags)(flags))\n&amp;quot;, m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -526,9 +584,9 @@
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; m-&amp;gt;method == SIGNAL_FIRST_METHOD ||
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; m-&amp;gt;method == VIRTUAL_METHOD) {
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;cbuf)
&lt;br&gt;-			print_method(out,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;quot;static &amp;quot;, &amp;quot;___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;static &amp;quot;, &amp;quot;___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	/* no else, here, it might still have a private prototype, it's not
&lt;br&gt;&amp;nbsp;	 * exclusive */
&lt;br&gt;@@ -537,15 +595,13 @@
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp;m-&amp;gt;cbuf)) {
&lt;br&gt;&amp;nbsp;		/* add unique ID */
&lt;br&gt;&amp;nbsp;		char *s = g_strdup_printf(&amp;quot;___%x_&amp;quot;, (guint)m-&amp;gt;unique_id);
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, s, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; no_gnu?&amp;quot;;\n&amp;quot;:&amp;quot; G_GNUC_UNUSED;\n&amp;quot;,
&lt;br&gt;+		print_method(out, &amp;quot;static &amp;quot;, s, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, FALSE, FALSE, FALSE);
&lt;br&gt;&amp;nbsp;		g_free(s);
&lt;br&gt;&amp;nbsp;	} else if(m-&amp;gt;scope == PRIVATE_SCOPE ||
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;m-&amp;gt;method == CLASS_INIT_METHOD) {
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; no_gnu?&amp;quot;;\n&amp;quot;:&amp;quot; G_GNUC_UNUSED;\n&amp;quot;,
&lt;br&gt;+		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -2831,11 +2887,11 @@
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;scope == PRIVATE_SCOPE)
&lt;br&gt;-			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;-			print_method(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		print_method_body(m, TRUE, TRUE);
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;@@ -2844,11 +2900,11 @@
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;scope == PRIVATE_SCOPE)
&lt;br&gt;-			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;-			print_method(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_addline_outfile (out);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		out_printf (out, &amp;quot;{\n&amp;quot;);
&lt;br&gt;@@ -2966,8 +3022,8 @@
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, TRUE, FALSE);
&lt;br&gt;+		print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		print_method_body(m, FALSE, TRUE);
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;@@ -2975,11 +3031,11 @@
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;scope==PRIVATE_SCOPE)
&lt;br&gt;-			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;-			print_method(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_addline_outfile(out);
&lt;br&gt;&amp;nbsp;		out_printf(out, &amp;quot;{\n&amp;quot;
&lt;br&gt;&amp;nbsp;			&amp;quot;\t%sClass *klass;\n&amp;quot;, typebase);
&lt;br&gt;@@ -3024,8 +3080,9 @@
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, TRUE, FALSE);
&lt;br&gt;+		print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_FIRST_UNUSED
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;| PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		print_method_body(m, FALSE, TRUE);
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;--- src/parse.y.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/parse.y	2008-01-28 16:58:25.000000000 +0100
&lt;br&gt;@@ -146,7 +146,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;&amp;nbsp;push_function (int scope, int method, char *oid, char *id,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; GString *cbuf, int line_no, int ccode_line,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; GString *attr, GString *cbuf, int line_no, int ccode_line,
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; &amp;nbsp; gboolean vararg, GList *flags)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	Node *node;
&lt;br&gt;@@ -207,6 +207,7 @@
&lt;br&gt;&amp;nbsp;			 &amp;quot;args:steal&amp;quot;, funcargs,
&lt;br&gt;&amp;nbsp;			 &amp;quot;onerror:steal&amp;quot;, onerror,
&lt;br&gt;&amp;nbsp;			 &amp;quot;defreturn:steal&amp;quot;, defreturn,
&lt;br&gt;+			 &amp;quot;attr:steal&amp;quot;, attr ? attr-&amp;gt;str : NULL,
&lt;br&gt;&amp;nbsp;			 &amp;quot;cbuf:steal&amp;quot;, c_cbuf,
&lt;br&gt;&amp;nbsp;			 &amp;quot;line_no&amp;quot;, line_no,
&lt;br&gt;&amp;nbsp;			 &amp;quot;ccode_line&amp;quot;, ccode_line,
&lt;br&gt;@@ -216,6 +217,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	last_added_method = (Method *)node;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	if(attr)
&lt;br&gt;+		g_string_free(attr, FALSE);
&lt;br&gt;&amp;nbsp;	if(cbuf)
&lt;br&gt;&amp;nbsp;		g_string_free(cbuf,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp;/*only free segment if we haven't passed it
&lt;br&gt;@@ -405,7 +408,7 @@
&lt;br&gt;&amp;nbsp;		push_funcarg (&amp;quot;self&amp;quot;, FALSE);
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		push_function (PUBLIC_SCOPE, REGULAR_METHOD, NULL,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp; get_id, get_cbuf, get_lineno,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; get_id, NULL, get_cbuf, get_lineno,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; lineno, FALSE, NULL);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;@@ -439,7 +442,7 @@
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;&amp;nbsp;		typestack = g_list_prepend (typestack, node2);
&lt;br&gt;&amp;nbsp;		push_function (PUBLIC_SCOPE, REGULAR_METHOD, NULL,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp; set_id, set_cbuf, set_lineno,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; set_id, NULL, set_cbuf, set_lineno,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; lineno, FALSE, NULL);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1678,9 +1681,25 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, $&amp;lt;sigtype&amp;gt;3,NULL,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;5, $&amp;lt;cbuf&amp;gt;10,$&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;5, NULL, $&amp;lt;cbuf&amp;gt;10,$&amp;lt;line&amp;gt;1,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;2);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;+	|	'[' CCODE SIGNAL flags fullsigtype type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;signal without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, $&amp;lt;sigtype&amp;gt;5,NULL,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;7, $&amp;lt;cbuf&amp;gt;2, $&amp;lt;cbuf&amp;gt;12,$&amp;lt;line&amp;gt;3,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;4);
&lt;br&gt;+									}
&lt;br&gt;&amp;nbsp;	|	scope SIGNAL flags simplesigtype type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;&amp;nbsp;			if(!has_self) {
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;signal without 'self' as &amp;quot;
&lt;br&gt;@@ -1694,9 +1713,25 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, $&amp;lt;sigtype&amp;gt;4, NULL,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, $&amp;lt;cbuf&amp;gt;11, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, NULL, $&amp;lt;cbuf&amp;gt;11, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;3);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;+	|	'[' CCODE scope SIGNAL flags simplesigtype type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;signal without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, $&amp;lt;sigtype&amp;gt;6, NULL,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;8, $&amp;lt;cbuf&amp;gt;2, $&amp;lt;cbuf&amp;gt;13, $&amp;lt;line&amp;gt;4,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;5);
&lt;br&gt;+									}
&lt;br&gt;&amp;nbsp;	|	VIRTUAL scope type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;&amp;nbsp;			if(!has_self) {
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;@@ -1710,7 +1745,23 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;4,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;+									}
&lt;br&gt;+	|	'[' CCODE VIRTUAL scope type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;6,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;2, $&amp;lt;cbuf&amp;gt;11, $&amp;lt;line&amp;gt;3,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;&amp;nbsp;	|	scope VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;@@ -1726,7 +1777,23 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;4,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;+									}
&lt;br&gt;+	|	'[' CCODE scope VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;6,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;2, $&amp;lt;cbuf&amp;gt;11, $&amp;lt;line&amp;gt;4,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;&amp;nbsp;	|	VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;@@ -1737,12 +1804,23 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(PUBLIC_SCOPE, VIRTUAL_METHOD, NULL,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;3, $&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;3, NULL, $&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;+									}
&lt;br&gt;+	|	'[' CCODE VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(PUBLIC_SCOPE, VIRTUAL_METHOD, NULL,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;5, $&amp;lt;cbuf&amp;gt;2, $&amp;lt;cbuf&amp;gt;10, $&amp;lt;line&amp;gt;3,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;&amp;nbsp;	|	OVERRIDE '(' TYPETOKEN ')' type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;&amp;nbsp;			push_function(NO_SCOPE, OVERRIDE_METHOD, $&amp;lt;id&amp;gt;3,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, $&amp;lt;cbuf&amp;gt;11,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, NULL, $&amp;lt;cbuf&amp;gt;11,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;line&amp;gt;1, ccode_line,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;@@ -1753,19 +1831,29 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, REGULAR_METHOD, NULL, $&amp;lt;id&amp;gt;3,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1, ccode_line,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, $&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1, ccode_line,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;vararg, NULL);
&lt;br&gt;+								}
&lt;br&gt;+	|	'[' CCODE scope type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, REGULAR_METHOD, NULL, $&amp;lt;id&amp;gt;5,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;2, $&amp;lt;cbuf&amp;gt;10, $&amp;lt;line&amp;gt;3, ccode_line,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;vararg, NULL);
&lt;br&gt;&amp;nbsp;								}
&lt;br&gt;&amp;nbsp;	|	TOKEN '(' TOKEN ')' codenocode	{
&lt;br&gt;&amp;nbsp;			if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;init&amp;quot;)==0) {
&lt;br&gt;&amp;nbsp;				push_init_arg($&amp;lt;id&amp;gt;3,FALSE);
&lt;br&gt;&amp;nbsp;				push_function(NO_SCOPE, INIT_METHOD, NULL,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;&amp;nbsp;			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;class_init&amp;quot;)==0) {
&lt;br&gt;&amp;nbsp;				push_init_arg($&amp;lt;id&amp;gt;3,TRUE);
&lt;br&gt;&amp;nbsp;				push_function(NO_SCOPE, CLASS_INIT_METHOD, NULL,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;&amp;nbsp;			} else {
&lt;br&gt;&amp;nbsp;				g_free($&amp;lt;id&amp;gt;1);
&lt;br&gt;--- src/treefuncs.def.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/treefuncs.def	2008-01-28 16:16:21.000000000 +0100
&lt;br&gt;@@ -126,6 +126,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;NODELIST	args
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	onerror
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	defreturn
&lt;br&gt;+ &amp;nbsp;STRING	attr
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	cbuf
&lt;br&gt;&amp;nbsp; &amp;nbsp;INT		line_no
&lt;br&gt;&amp;nbsp; &amp;nbsp;INT		ccode_line
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[gob2-2.0.15-gobject-overrides-and-attr.diff]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;--- src/lexer.l.orig	2007-09-28 06:26:49.000000000 +0200
&lt;br&gt;+++ src/lexer.l	2008-01-28 17:15:53.000000000 +0100
&lt;br&gt;@@ -31,6 +31,7 @@
&lt;br&gt;&amp;nbsp;#include &amp;quot;main.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;util.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static int bracket_depth = 0;
&lt;br&gt;&amp;nbsp;static int parenth_depth = 0;
&lt;br&gt;&amp;nbsp;static int before_comment
&lt;br&gt;&amp;nbsp;/* New flex is on drugs */
&lt;br&gt;@@ -102,6 +103,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;%x COMMENT
&lt;br&gt;&amp;nbsp;%x C_CODE
&lt;br&gt;+%x ATTR_CODE
&lt;br&gt;&amp;nbsp;%x CODE_STRING
&lt;br&gt;&amp;nbsp;%x CLASS_CODE
&lt;br&gt;&amp;nbsp;%x CLASS_STRING
&lt;br&gt;@@ -267,7 +269,7 @@
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\/\/.*$		{ add_to_cbuf(yytext); /*comment, ignore*/ }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\/\/.*$	{ add_to_cbuf(yytext); /*comment, ignore*/ }
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE&amp;gt;\/\/.*$	{ ; /*comment, ignore*/ }
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;\/\/.*$	{ ; /*comment, ignore*/ }
&lt;br&gt;&amp;nbsp;&amp;lt;PROPERTY_CODE_I&amp;gt;\/\/.*$	{ ; /*comment, ignore*/ }
&lt;br&gt;@@ -277,20 +279,25 @@
&lt;br&gt;&amp;nbsp;	BEGIN(COMMENT);
&lt;br&gt;&amp;nbsp;	before_comment = C_CODE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\/\*	{
&lt;br&gt;+	add_to_cbuf(yytext);
&lt;br&gt;+	BEGIN(COMMENT);
&lt;br&gt;+	before_comment = ATTR_CODE;
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE&amp;gt;\/\*	{BEGIN(COMMENT); before_comment = CLASS_CODE; }
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE_I&amp;gt;\/\*	{BEGIN(COMMENT); before_comment = CLASS_CODE_I; }
&lt;br&gt;&amp;nbsp;&amp;lt;PROPERTY_CODE_I&amp;gt;\/\*	{BEGIN(COMMENT); before_comment = PROPERTY_CODE_I; }
&lt;br&gt;&amp;nbsp;&amp;lt;COMMENT&amp;gt;\*\/	{
&lt;br&gt;-	if(before_comment == C_CODE) add_to_cbuf(yytext);
&lt;br&gt;+	if(before_comment == C_CODE || before_comment == ATTR_CODE) add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;	BEGIN(before_comment);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;COMMENT&amp;gt;.	{
&lt;br&gt;&amp;nbsp;	/* comment, ignore */
&lt;br&gt;-	if(before_comment == C_CODE) add_to_cbuf(yytext);
&lt;br&gt;+	if(before_comment == C_CODE || before_comment == ATTR_CODE) add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;&amp;lt;COMMENT&amp;gt;\n	{
&lt;br&gt;&amp;nbsp;	/* comment, ignore */
&lt;br&gt;-	if(before_comment == C_CODE) add_to_cbuf(yytext);
&lt;br&gt;+	if(before_comment == C_CODE || before_comment == ATTR_CODE) add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;^\%(a|all)\{		{
&lt;br&gt;@@ -353,14 +360,14 @@
&lt;br&gt;&amp;nbsp;			return code_type;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\{\'		{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\\\{\'	{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\}\'		{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\\\}\'	{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\&amp;quot;\'		{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\'\\\&amp;quot;\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\{\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\\\{\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\}\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\\\}\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\&amp;quot;\'	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\'\\\&amp;quot;\'	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\\.	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\\.	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;C_CODE&amp;gt;\&amp;quot;	{
&lt;br&gt;@@ -368,6 +375,11 @@
&lt;br&gt;&amp;nbsp;			before_string = C_CODE;
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\&amp;quot;	{
&lt;br&gt;+			BEGIN(CODE_STRING);
&lt;br&gt;+			before_string = ATTR_CODE;
&lt;br&gt;+			add_to_cbuf(yytext);
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;&amp;lt;PROPERTY_CODE_I&amp;gt;\&amp;quot;	{
&lt;br&gt;&amp;nbsp;			BEGIN(CODE_STRING);
&lt;br&gt;&amp;nbsp;			before_string = PROPERTY_CODE_I;
&lt;br&gt;@@ -391,6 +403,10 @@
&lt;br&gt;&amp;nbsp;			parenth_depth++;
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\[	{
&lt;br&gt;+			bracket_depth++;
&lt;br&gt;+			add_to_cbuf(yytext);
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;&amp;lt;C_CODE&amp;gt;\}	{
&lt;br&gt;&amp;nbsp;			parenth_depth--;
&lt;br&gt;&amp;nbsp;			if(parenth_depth&amp;lt;0) {
&lt;br&gt;@@ -403,9 +419,21 @@
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			add_to_cbuf(yytext);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+&amp;lt;ATTR_CODE&amp;gt;\]	{
&lt;br&gt;+			bracket_depth--;
&lt;br&gt;+			if(bracket_depth&amp;lt;0) {
&lt;br&gt;+				REJECT;
&lt;br&gt;+			} else if(bracket_depth==0) {
&lt;br&gt;+				BEGIN(CLASS_CODE_I);
&lt;br&gt;+				yylval.cbuf = cbuf;
&lt;br&gt;+				cbuf = NULL;
&lt;br&gt;+				return CCODE;
&lt;br&gt;+			}
&lt;br&gt;+			add_to_cbuf(yytext);
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;.	{ add_to_cbuf(yytext); }
&lt;br&gt;-&amp;lt;C_CODE&amp;gt;\n	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;.	{ add_to_cbuf(yytext); }
&lt;br&gt;+&amp;lt;C_CODE,ATTR_CODE&amp;gt;\n	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class		{
&lt;br&gt;&amp;nbsp;			static int found_classes = 0;
&lt;br&gt;@@ -612,6 +640,13 @@
&lt;br&gt;&amp;nbsp;				BEGIN(INITIAL);
&lt;br&gt;&amp;nbsp;				return '}';
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;+&amp;lt;CLASS_CODE_I&amp;gt;\[	{
&lt;br&gt;+			BEGIN(ATTR_CODE);
&lt;br&gt;+			bracket_depth=1;
&lt;br&gt;+			yylval.line = line_no;
&lt;br&gt;+			clear_cbuf();
&lt;br&gt;+			return '[';
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;CLASS_CODE,CLASS_CODE_I,INITIAL,PROPERTY_CODE,PROPERTY_CODE_I&amp;gt;[\f\t ]	; &amp;nbsp;/*ignore*/
&lt;br&gt;&amp;nbsp;
&lt;br&gt;--- src/main.c.orig	2007-10-17 16:49:04.000000000 +0200
&lt;br&gt;+++ src/main.c	2008-01-28 17:15:53.000000000 +0100
&lt;br&gt;@@ -92,11 +92,16 @@
&lt;br&gt;&amp;nbsp;static gboolean special_array[SPECIAL_LAST] = {0};
&lt;br&gt;&amp;nbsp;static gboolean any_special = FALSE;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static gboolean need_constructor = FALSE;
&lt;br&gt;+static Method * user_constructor = NULL;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;static gboolean need_dispose = FALSE;
&lt;br&gt;&amp;nbsp;static Method * dispose_handler = NULL;
&lt;br&gt;+static Method * user_dispose_method = NULL;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static gboolean need_finalize = FALSE;
&lt;br&gt;&amp;nbsp;static Method * finalize_handler = NULL;
&lt;br&gt;+static Method * user_finalize_method = NULL;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;FILE *out = NULL;
&lt;br&gt;&amp;nbsp;FILE *outh = NULL;
&lt;br&gt;@@ -189,21 +194,25 @@
&lt;br&gt;&amp;nbsp;	g_free(s);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;-static void
&lt;br&gt;-print_method (FILE *fp,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *typeprefix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *nameprefix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *subnameprefix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *namepostfix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *afterargs,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *postfix,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const Method *m,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean one_arg_per_line,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean no_funcbase,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean kill_underscore,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean first_unused,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean fake_names)
&lt;br&gt;+typedef enum
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_ONE_ARG_PER_LINE		= 1 &amp;lt;&amp;lt; 0,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_NO_FUNCBASE		= 1 &amp;lt;&amp;lt; 1,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_FIRST_UNUSED		= 1 &amp;lt;&amp;lt; 2,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_FAKE_NAMES		= 1 &amp;lt;&amp;lt; 3,
&lt;br&gt;+ &amp;nbsp;PRINT_METHOD_NO_ATTR			= 1 &amp;lt;&amp;lt; 4
&lt;br&gt;+} PrintMethodFlags;
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+print_method2 (FILE *fp,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *typeprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *nameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *subnameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *namepostfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *afterargs,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *postfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; const Method *m,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; PrintMethodFlags flags)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	GList *li;
&lt;br&gt;&amp;nbsp;	const char *id;
&lt;br&gt;@@ -213,7 +222,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	id = m-&amp;gt;id;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	if(no_funcbase)
&lt;br&gt;+	if ((flags &amp; PRINT_METHOD_NO_FUNCBASE) != 0)
&lt;br&gt;&amp;nbsp;		out_printf(fp, &amp;quot;%s%s%s%s(&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; nameprefix, subnameprefix, id, namepostfix); 
&lt;br&gt;&amp;nbsp;	else
&lt;br&gt;@@ -229,19 +238,19 @@
&lt;br&gt;&amp;nbsp;			if ( ! no_gnu &amp;&amp;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; ! for_cpp &amp;&amp; /* g++ has a cow with this */
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;li == m-&amp;gt;args &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp;first_unused) {
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; (flags &amp; PRINT_METHOD_FIRST_UNUSED) != 0) {
&lt;br&gt;&amp;nbsp;				unused = &amp;quot; G_GNUC_UNUSED&amp;quot;;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			print_type(fp, arg-&amp;gt;atype, FALSE);
&lt;br&gt;-			if (fake_names)
&lt;br&gt;+			if ((flags &amp; PRINT_METHOD_FAKE_NAMES) != 0)
&lt;br&gt;&amp;nbsp;				out_printf (fp, &amp;quot;___fake___&amp;quot;);
&lt;br&gt;&amp;nbsp;			if(li-&amp;gt;next)
&lt;br&gt;&amp;nbsp;				out_printf(fp, &amp;quot;%s%s%s,%s&amp;quot;, arg-&amp;gt;name,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; arg-&amp;gt;atype-&amp;gt;postfix ?
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; arg-&amp;gt;atype-&amp;gt;postfix : &amp;quot;&amp;quot;,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; unused,
&lt;br&gt;-					 &amp;nbsp; one_arg_per_line ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;);
&lt;br&gt;+					 &amp;nbsp; (flags &amp; PRINT_METHOD_ONE_ARG_PER_LINE) != 0 ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;);
&lt;br&gt;&amp;nbsp;			else
&lt;br&gt;&amp;nbsp;				out_printf(fp, &amp;quot;%s%s%s&amp;quot;, arg-&amp;gt;name,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; arg-&amp;gt;atype-&amp;gt;postfix ?
&lt;br&gt;@@ -250,11 +259,54 @@
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;vararg)
&lt;br&gt;&amp;nbsp;			out_printf(fp, &amp;quot;,%s...&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; one_arg_per_line ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;); 
&lt;br&gt;+				 &amp;nbsp; (flags &amp; PRINT_METHOD_ONE_ARG_PER_LINE) != 0 ? &amp;quot;\n\t\t\t\t\t&amp;quot; : &amp;quot; &amp;quot;); 
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;&amp;nbsp;		out_printf(fp, &amp;quot;void&amp;quot;); 
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-	out_printf(fp, &amp;quot;%s)%s&amp;quot;, afterargs, postfix); 
&lt;br&gt;+
&lt;br&gt;+	out_printf(fp, &amp;quot;%s)&amp;quot;, afterargs);
&lt;br&gt;+
&lt;br&gt;+	if (m-&amp;gt;attr &amp;&amp; (flags &amp; PRINT_METHOD_NO_ATTR) == 0)
&lt;br&gt;+		out_printf(fp, &amp;quot; %s&amp;quot;, m-&amp;gt;attr);
&lt;br&gt;+
&lt;br&gt;+	out_printf(fp, &amp;quot;%s&amp;quot;, postfix);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+print_method (FILE *fp,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *typeprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *nameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *subnameprefix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *namepostfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *afterargs,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *postfix,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;const Method *m,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean one_arg_per_line,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean no_funcbase,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean kill_underscore,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean first_unused,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp;gboolean fake_names)
&lt;br&gt;+{
&lt;br&gt;+	PrintMethodFlags flags = 0;
&lt;br&gt;+
&lt;br&gt;+	if (one_arg_per_line)
&lt;br&gt;+		flags |= PRINT_METHOD_ONE_ARG_PER_LINE;
&lt;br&gt;+	if (no_funcbase)
&lt;br&gt;+		flags |= PRINT_METHOD_NO_FUNCBASE;
&lt;br&gt;+	if (first_unused)
&lt;br&gt;+		flags |= PRINT_METHOD_FIRST_UNUSED;
&lt;br&gt;+	if (fake_names)
&lt;br&gt;+		flags |= PRINT_METHOD_FAKE_NAMES;
&lt;br&gt;+
&lt;br&gt;+	print_method2(fp,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;typeprefix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;nameprefix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;subnameprefix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;namepostfix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;afterargs,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;postfix,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;m,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;flags);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static gboolean
&lt;br&gt;@@ -269,6 +321,9 @@
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == FINALIZE_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == OVERRIDE_METHOD)
&lt;br&gt;&amp;nbsp;				continue;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -291,6 +346,9 @@
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == FINALIZE_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == OVERRIDE_METHOD)
&lt;br&gt;&amp;nbsp;				continue;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -330,6 +388,9 @@
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == FINALIZE_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == OVERRIDE_METHOD)
&lt;br&gt;&amp;nbsp;				continue;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -371,11 +432,13 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/* if a signal mark it as such */
&lt;br&gt;&amp;nbsp;	if(m-&amp;gt;method != VIRTUAL_METHOD)
&lt;br&gt;-		print_method(outh, &amp;quot;\t/*signal*/&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, TRUE, TRUE, FALSE, FALSE);
&lt;br&gt;+		print_method2(outh, &amp;quot;\t/*signal*/&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_FUNCBASE |
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;	else
&lt;br&gt;-		print_method(outh, &amp;quot;\t&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, TRUE, TRUE, FALSE, FALSE);
&lt;br&gt;+		print_method2(outh, &amp;quot;\t&amp;quot;, &amp;quot;(* &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_FUNCBASE |
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;@@ -422,8 +485,11 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\&amp;quot;%s\&amp;quot;,&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;(GCallback) __extension__ ({&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase, m-&amp;gt;id, macrobase, typebase, m-&amp;gt;id);
&lt;br&gt;-		print_method (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; = (func); &amp;quot;, m, FALSE, TRUE, TRUE, FALSE, TRUE);
&lt;br&gt;+		print_method2 (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot; = (func); &amp;quot;, m,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; PRINT_METHOD_NO_FUNCBASE
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_FAKE_NAMES
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_printf (outh, &amp;quot;___%s; }), (data))\n&amp;quot;, m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		/* connect_after */
&lt;br&gt;@@ -433,8 +499,11 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\&amp;quot;%s\&amp;quot;,&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;(GCallback) __extension__ ({&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase, m-&amp;gt;id, macrobase, typebase, m-&amp;gt;id);
&lt;br&gt;-		print_method (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; = (func); &amp;quot;, m, FALSE, TRUE, TRUE, FALSE, TRUE);
&lt;br&gt;+		print_method2 (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot; = (func); &amp;quot;, m,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; PRINT_METHOD_NO_FUNCBASE
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_FAKE_NAMES
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_printf (outh, &amp;quot;___%s; }), (data))\n&amp;quot;, m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		/* connect_data */
&lt;br&gt;@@ -445,8 +514,11 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\&amp;quot;%s\&amp;quot;,&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;(GCallback) __extension__ ({&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase, m-&amp;gt;id, macrobase, typebase, m-&amp;gt;id);
&lt;br&gt;-		print_method (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; = (func); &amp;quot;, m, FALSE, TRUE, TRUE, FALSE, TRUE);
&lt;br&gt;+		print_method2 (outh, &amp;quot;&amp;quot;, &amp;quot;(* ___&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;) &amp;quot;, &amp;quot;, gpointer ___data &amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot; = (func); &amp;quot;, m,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; PRINT_METHOD_NO_FUNCBASE
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_FAKE_NAMES
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_printf (outh, &amp;quot;___%s; }), (data), (destroy_data), (GConnectFlags)(flags))\n&amp;quot;, m-&amp;gt;id);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -526,9 +598,9 @@
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; m-&amp;gt;method == SIGNAL_FIRST_METHOD ||
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; m-&amp;gt;method == VIRTUAL_METHOD) {
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;cbuf)
&lt;br&gt;-			print_method(out,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;quot;static &amp;quot;, &amp;quot;___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;static &amp;quot;, &amp;quot;___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	/* no else, here, it might still have a private prototype, it's not
&lt;br&gt;&amp;nbsp;	 * exclusive */
&lt;br&gt;@@ -537,15 +609,16 @@
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp;m-&amp;gt;cbuf)) {
&lt;br&gt;&amp;nbsp;		/* add unique ID */
&lt;br&gt;&amp;nbsp;		char *s = g_strdup_printf(&amp;quot;___%x_&amp;quot;, (guint)m-&amp;gt;unique_id);
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, s, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; no_gnu?&amp;quot;;\n&amp;quot;:&amp;quot; G_GNUC_UNUSED;\n&amp;quot;,
&lt;br&gt;+		print_method(out, &amp;quot;static &amp;quot;, s, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, FALSE, FALSE, FALSE);
&lt;br&gt;&amp;nbsp;		g_free(s);
&lt;br&gt;&amp;nbsp;	} else if(m-&amp;gt;scope == PRIVATE_SCOPE ||
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;-		 &amp;nbsp;m-&amp;gt;method == CLASS_INIT_METHOD) {
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; no_gnu?&amp;quot;;\n&amp;quot;:&amp;quot; G_GNUC_UNUSED;\n&amp;quot;,
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == FINALIZE_METHOD) {
&lt;br&gt;+		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -629,66 +702,68 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static void
&lt;br&gt;-find_dispose(const Class *cl)
&lt;br&gt;+static Method *
&lt;br&gt;+find_method(const Class *cl, int method, const char *id)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	GList *li;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	dispose_handler = NULL;
&lt;br&gt;&amp;nbsp;	for(li=cl-&amp;gt;nodes;li;li=g_list_next(li)) {
&lt;br&gt;&amp;nbsp;		Node *n = li-&amp;gt;data;
&lt;br&gt;&amp;nbsp;		if(n-&amp;gt;type == METHOD_NODE) {
&lt;br&gt;&amp;nbsp;			Method *m = (Method *)n;
&lt;br&gt;-			if(m-&amp;gt;method == OVERRIDE_METHOD &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; strcmp(m-&amp;gt;id, &amp;quot;dispose&amp;quot;)==0) {
&lt;br&gt;-				if(strcmp(m-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				if(g_list_length(m-&amp;gt;args) != 1) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				dispose_handler = m;
&lt;br&gt;-				break;
&lt;br&gt;-			}
&lt;br&gt;+			if (m-&amp;gt;method == method
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp;&amp;&amp; (id == NULL || strcmp(m-&amp;gt;id, id)==0))
&lt;br&gt;+				return m;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+	return NULL;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;-find_finalize(const Class *cl)
&lt;br&gt;+find_constructor(const Class *cl)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	GList *li;
&lt;br&gt;+	user_constructor = find_method(cl, CONSTRUCTOR_METHOD, NULL);
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	finalize_handler = NULL;
&lt;br&gt;-	for(li=cl-&amp;gt;nodes;li;li=g_list_next(li)) {
&lt;br&gt;-		Node *n = li-&amp;gt;data;
&lt;br&gt;-		if(n-&amp;gt;type == METHOD_NODE) {
&lt;br&gt;-			Method *m = (Method *)n;
&lt;br&gt;-			if(m-&amp;gt;method == OVERRIDE_METHOD &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; strcmp(m-&amp;gt;id, &amp;quot;finalize&amp;quot;)==0) {
&lt;br&gt;-				if(strcmp(m-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				if(g_list_length(m-&amp;gt;args) != 1) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				finalize_handler = m;
&lt;br&gt;-				break;
&lt;br&gt;-			}
&lt;br&gt;-		}
&lt;br&gt;+static void
&lt;br&gt;+find_dispose(const Class *cl)
&lt;br&gt;+{
&lt;br&gt;+	dispose_handler = find_method(cl, OVERRIDE_METHOD, &amp;quot;dispose&amp;quot;);
&lt;br&gt;+	if (dispose_handler != NULL) {
&lt;br&gt;+		if(strcmp(dispose_handler-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0)
&lt;br&gt;+			error_print(GOB_ERROR, dispose_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;+		if(g_list_length(dispose_handler-&amp;gt;args) != 1)
&lt;br&gt;+			error_print(GOB_ERROR, dispose_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	user_dispose_method = find_method(cl, DISPOSE_METHOD, NULL);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+find_finalize(const Class *cl)
&lt;br&gt;+{
&lt;br&gt;+	finalize_handler = find_method(cl, OVERRIDE_METHOD, &amp;quot;finalize&amp;quot;);
&lt;br&gt;+	if (finalize_handler != NULL) {
&lt;br&gt;+		if(strcmp(finalize_handler-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0)
&lt;br&gt;+			error_print(GOB_ERROR, finalize_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;+		if(g_list_length(finalize_handler-&amp;gt;args) != 1)
&lt;br&gt;+			error_print(GOB_ERROR, finalize_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+	user_finalize_method = find_method(cl, FINALIZE_METHOD, NULL);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -2118,6 +2193,33 @@
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;+add_constructor (Class *c)
&lt;br&gt;+{
&lt;br&gt;+	out_printf(out, &amp;quot;\nstatic GObject *\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;___constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties)\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;{\n&amp;quot;);
&lt;br&gt;+	out_printf(out,
&lt;br&gt;+		 &amp;nbsp; &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::constructor\&amp;quot;\n&amp;quot;,
&lt;br&gt;+		 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;+
&lt;br&gt;+	out_printf(out, &amp;quot;\tGObject *obj_self;\n&amp;quot;);
&lt;br&gt;+	out_printf(out, &amp;quot;\t%s *self;\n&amp;quot;, typebase);
&lt;br&gt;+
&lt;br&gt;+	out_printf(out, &amp;quot;\tobj_self = G_OBJECT_CLASS (parent_class)-&amp;gt;constructor (type, n_construct_properties, construct_properties);\n&amp;quot;);
&lt;br&gt;+	out_printf(out, &amp;quot;\tself = %s (obj_self);\n&amp;quot;, macrobase);
&lt;br&gt;+
&lt;br&gt;+	if (user_constructor-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+		out_addline_infile (out, user_constructor-&amp;gt;line_no);
&lt;br&gt;+	out_printf (out, &amp;quot;\t%s_constructor (self);\n&amp;quot;, funcbase);
&lt;br&gt;+	if (user_constructor-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+		out_addline_outfile (out);
&lt;br&gt;+
&lt;br&gt;+	out_printf(out, &amp;quot;\treturn obj_self;\n&amp;quot;);
&lt;br&gt;+	out_printf(out, &amp;quot;}\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;#undef __GOB_FUNCTION__\n\n&amp;quot;);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;&amp;nbsp;add_dispose (Class *c)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	out_printf(out, &amp;quot;\nstatic void\n&amp;quot;
&lt;br&gt;@@ -2127,7 +2229,7 @@
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::dispose\&amp;quot;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	if (unreftors &amp;gt; 0) {
&lt;br&gt;+	if (unreftors &amp;gt; 0 || user_dispose_method != NULL) {
&lt;br&gt;&amp;nbsp;		out_printf (out, &amp;quot;\t%s *self%s = %s (obj_self);\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;typebase,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;! no_gnu ? &amp;quot; G_GNUC_UNUSED&amp;quot; : &amp;quot;&amp;quot;,
&lt;br&gt;@@ -2143,6 +2245,14 @@
&lt;br&gt;&amp;nbsp;		if (dispose_handler-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_outfile (out);
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;+		if (user_dispose_method != NULL) {
&lt;br&gt;+			if (user_dispose_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_infile (out, user_dispose_method-&amp;gt;line_no);
&lt;br&gt;+			out_printf (out, &amp;quot;\t%s_dispose (self);\n&amp;quot;, funcbase);
&lt;br&gt;+			if (user_dispose_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_outfile (out);
&lt;br&gt;+		}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;		out_printf (out,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\tif (G_OBJECT_CLASS (parent_class)-&amp;gt;dispose) \\\n&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\t\t(* G_OBJECT_CLASS (parent_class)-&amp;gt;dispose) (obj_self);\n&amp;quot;);
&lt;br&gt;@@ -2178,7 +2288,8 @@
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (privates &amp;gt; 0 ||
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;destructors &amp;gt; 0) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;destructors &amp;gt; 0 ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;user_finalize_method != NULL) {
&lt;br&gt;&amp;nbsp;		const char *unused = &amp;quot;&amp;quot;;
&lt;br&gt;&amp;nbsp;		if ( ! no_gnu)
&lt;br&gt;&amp;nbsp;			unused = &amp;quot; G_GNUC_UNUSED&amp;quot;;
&lt;br&gt;@@ -2202,6 +2313,14 @@
&lt;br&gt;&amp;nbsp;		if(finalize_handler-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_outfile(out);
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;+		if (user_finalize_method != NULL) {
&lt;br&gt;+			if (user_finalize_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_infile (out, user_finalize_method-&amp;gt;line_no);
&lt;br&gt;+			out_printf (out, &amp;quot;\t%s_finalize (self);\n&amp;quot;, funcbase);
&lt;br&gt;+			if (user_finalize_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_outfile (out);
&lt;br&gt;+		}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;		out_printf(out,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;quot;\tif(G_OBJECT_CLASS(parent_class)-&amp;gt;finalize) \\\n&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;quot;\t\t(* G_OBJECT_CLASS(parent_class)-&amp;gt;finalize)(obj_self);\n&amp;quot;);
&lt;br&gt;@@ -2381,6 +2500,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			/* if there are no handlers for these things, we
&lt;br&gt;&amp;nbsp;			 * need to set them up here */
&lt;br&gt;+			if(need_constructor)
&lt;br&gt;+				out_printf(out, &amp;quot;\tg_object_class-&amp;gt;constructor &amp;quot;
&lt;br&gt;+					 &amp;nbsp; &amp;quot;= ___constructor;\n&amp;quot;);
&lt;br&gt;&amp;nbsp;			if(need_dispose &amp;&amp; !dispose_handler)
&lt;br&gt;&amp;nbsp;				out_printf(out, &amp;quot;\tg_object_class-&amp;gt;dispose &amp;quot;
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;quot;= ___dispose;\n&amp;quot;);
&lt;br&gt;@@ -2831,11 +2953,11 @@
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;scope == PRIVATE_SCOPE)
&lt;br&gt;-			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;-			print_method(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		print_method_body(m, TRUE, TRUE);
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;@@ -2844,11 +2966,11 @@
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;scope == PRIVATE_SCOPE)
&lt;br&gt;-			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;-			print_method(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_addline_outfile (out);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		out_printf (out, &amp;quot;{\n&amp;quot;);
&lt;br&gt;@@ -2966,8 +3088,8 @@
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, TRUE, FALSE);
&lt;br&gt;+		print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		print_method_body(m, FALSE, TRUE);
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;@@ -2975,11 +3097,11 @@
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;scope==PRIVATE_SCOPE)
&lt;br&gt;-			print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		else /* PUBLIC, PROTECTED */
&lt;br&gt;-			print_method(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+			print_method2(out, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		out_addline_outfile(out);
&lt;br&gt;&amp;nbsp;		out_printf(out, &amp;quot;{\n&amp;quot;
&lt;br&gt;&amp;nbsp;			&amp;quot;\t%sClass *klass;\n&amp;quot;, typebase);
&lt;br&gt;@@ -3024,8 +3146,9 @@
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;-		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, TRUE, FALSE);
&lt;br&gt;+		print_method2(out, &amp;quot;static &amp;quot;, &amp;quot;\n___real_&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;m, PRINT_METHOD_FIRST_UNUSED
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp;| PRINT_METHOD_NO_ATTR);
&lt;br&gt;&amp;nbsp;		print_method_body(m, FALSE, TRUE);
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;@@ -3064,6 +3187,15 @@
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		out_printf(out, &amp;quot;#undef PARENT_HANDLER\n&amp;quot;);
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;+	case CONSTRUCTOR_METHOD:
&lt;br&gt;+	case DISPOSE_METHOD:
&lt;br&gt;+	case FINALIZE_METHOD:
&lt;br&gt;+		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;+		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+		print_method_body(m, TRUE, TRUE);
&lt;br&gt;+		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;	default:
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -3633,6 +3765,9 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	if (need_constructor)
&lt;br&gt;+		add_constructor (c);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	if (need_dispose)
&lt;br&gt;&amp;nbsp;		add_dispose (c);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -4441,15 +4576,24 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	make_bases ();
&lt;br&gt;&amp;nbsp;	make_inits ((Class *)class);
&lt;br&gt;-	if(unreftors &amp;gt; 0) {
&lt;br&gt;+
&lt;br&gt;+	find_constructor ((Class *)class);
&lt;br&gt;+	if (user_constructor != NULL)
&lt;br&gt;+		need_constructor = TRUE;
&lt;br&gt;+
&lt;br&gt;+	find_dispose ((Class *)class);
&lt;br&gt;+	if (unreftors &amp;gt; 0 ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;dispose_handler != NULL ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;user_dispose_method != NULL)
&lt;br&gt;&amp;nbsp;		need_dispose = TRUE;
&lt;br&gt;-		find_dispose ((Class *)class);
&lt;br&gt;-	}
&lt;br&gt;+
&lt;br&gt;+	find_finalize ((Class *)class);
&lt;br&gt;&amp;nbsp;	if (destructors &amp;gt; 0 ||
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;privates &amp;gt; 0) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;privates &amp;gt; 0 ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;user_finalize_method != NULL) {
&lt;br&gt;&amp;nbsp;		need_finalize = TRUE;
&lt;br&gt;-		find_finalize ((Class *)class);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	check_bad_symbols ((Class *)class);
&lt;br&gt;&amp;nbsp;	check_duplicate_symbols ((Class *)class);
&lt;br&gt;&amp;nbsp;	check_duplicate_overrides ((Class *)class);
&lt;br&gt;--- src/parse.y.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/parse.y	2008-01-28 17:16:24.000000000 +0100
&lt;br&gt;@@ -146,7 +146,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;&amp;nbsp;push_function (int scope, int method, char *oid, char *id,
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; GString *cbuf, int line_no, int ccode_line,
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp; &amp;nbsp; GString *attr, GString *cbuf, int line_no, int ccode_line,
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp; &amp;nbsp; gboolean vararg, GList *flags)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	Node *node;
&lt;br&gt;@@ -155,7 +155,11 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	g_assert(scope != CLASS_SCOPE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;-	if(method == INIT_METHOD || method == CLASS_INIT_METHOD) {
&lt;br&gt;+	if(method == INIT_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == CLASS_INIT_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == CONSTRUCTOR_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == DISPOSE_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == FINALIZE_METHOD) {
&lt;br&gt;&amp;nbsp;		type = (Type *)node_new (TYPE_NODE,
&lt;br&gt;&amp;nbsp;					 &amp;quot;name&amp;quot;, &amp;quot;void&amp;quot;,
&lt;br&gt;&amp;nbsp;					 NULL);
&lt;br&gt;@@ -207,6 +211,7 @@
&lt;br&gt;&amp;nbsp;			 &amp;quot;args:steal&amp;quot;, funcargs,
&lt;br&gt;&amp;nbsp;			 &amp;quot;onerror:steal&amp;quot;, onerror,
&lt;br&gt;&amp;nbsp;			 &amp;quot;defreturn:steal&amp;quot;, defreturn,
&lt;br&gt;+			 &amp;quot;attr:steal&amp;quot;, attr ? attr-&amp;gt;str : NULL,
&lt;br&gt;&amp;nbsp;			 &amp;quot;cbuf:steal&amp;quot;, c_cbuf,
&lt;br&gt;&amp;nbsp;			 &amp;quot;line_no&amp;quot;, line_no,
&lt;br&gt;&amp;nbsp;			 &amp;quot;ccode_line&amp;quot;, ccode_line,
&lt;br&gt;@@ -216,6 +221,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	last_added_method = (Method *)node;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	if(attr)
&lt;br&gt;+		g_string_free(attr, FALSE);
&lt;br&gt;&amp;nbsp;	if(cbuf)
&lt;br&gt;&amp;nbsp;		g_string_free(cbuf,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp;/*only free segment if we haven't passed it
&lt;br&gt;@@ -405,7 +412,7 @@
&lt;br&gt;&amp;nbsp;		push_funcarg (&amp;quot;self&amp;quot;, FALSE);
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		push_function (PUBLIC_SCOPE, REGULAR_METHOD, NULL,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp; get_id, get_cbuf, get_lineno,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; get_id, NULL, get_cbuf, get_lineno,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; lineno, FALSE, NULL);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;@@ -439,7 +446,7 @@
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;&amp;nbsp;		typestack = g_list_prepend (typestack, node2);
&lt;br&gt;&amp;nbsp;		push_function (PUBLIC_SCOPE, REGULAR_METHOD, NULL,
&lt;br&gt;-			 &amp;nbsp; &amp;nbsp; &amp;nbsp; set_id, set_cbuf, set_lineno,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; set_id, NULL, set_cbuf, set_lineno,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; lineno, FALSE, NULL);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1678,9 +1685,25 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, $&amp;lt;sigtype&amp;gt;3,NULL,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;5, $&amp;lt;cbuf&amp;gt;10,$&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;5, NULL, $&amp;lt;cbuf&amp;gt;10,$&amp;lt;line&amp;gt;1,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;2);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;+	|	'[' CCODE SIGNAL flags fullsigtype type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;signal without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, $&amp;lt;sigtype&amp;gt;5,NULL,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;7, $&amp;lt;cbuf&amp;gt;2, $&amp;lt;cbuf&amp;gt;12,$&amp;lt;line&amp;gt;3,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;4);
&lt;br&gt;+									}
&lt;br&gt;&amp;nbsp;	|	scope SIGNAL flags simplesigtype type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;&amp;nbsp;			if(!has_self) {
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;signal without 'self' as &amp;quot;
&lt;br&gt;@@ -1694,9 +1717,25 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, $&amp;lt;sigtype&amp;gt;4, NULL,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, $&amp;lt;cbuf&amp;gt;11, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, NULL, $&amp;lt;cbuf&amp;gt;11, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;3);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;+	|	'[' CCODE scope SIGNAL flags simplesigtype type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;signal without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, $&amp;lt;sigtype&amp;gt;6, NULL,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;8, $&amp;lt;cbuf&amp;gt;2, $&amp;lt;cbuf&amp;gt;13, $&amp;lt;line&amp;gt;4,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, $&amp;lt;list&amp;gt;5);
&lt;br&gt;+									}
&lt;br&gt;&amp;nbsp;	|	VIRTUAL scope type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;&amp;nbsp;			if(!has_self) {
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;@@ -1710,7 +1749,23 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;4,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;+									}
&lt;br&gt;+	|	'[' CCODE VIRTUAL scope type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;6,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;2, $&amp;lt;cbuf&amp;gt;11, $&amp;lt;line&amp;gt;3,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;&amp;nbsp;	|	scope VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;@@ -1726,7 +1781,23 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;4,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, $&amp;lt;cbuf&amp;gt;9, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;+									}
&lt;br&gt;+	|	'[' CCODE scope VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, VIRTUAL_METHOD, NULL, $&amp;lt;id&amp;gt;6,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;2, $&amp;lt;cbuf&amp;gt;11, $&amp;lt;line&amp;gt;4,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;&amp;nbsp;	|	VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;@@ -1737,12 +1808,23 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(PUBLIC_SCOPE, VIRTUAL_METHOD, NULL,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;3, $&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;3, NULL, $&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;+									}
&lt;br&gt;+	|	'[' CCODE VIRTUAL type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;+			if(!has_self) {
&lt;br&gt;+				yyerror(_(&amp;quot;virtual method without 'self' as &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;first parameter&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(PUBLIC_SCOPE, VIRTUAL_METHOD, NULL,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;5, $&amp;lt;cbuf&amp;gt;2, $&amp;lt;cbuf&amp;gt;10, $&amp;lt;line&amp;gt;3,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;&amp;nbsp;	|	OVERRIDE '(' TYPETOKEN ')' type TOKEN '(' funcargs ')' returnvals codenocode	{
&lt;br&gt;&amp;nbsp;			push_function(NO_SCOPE, OVERRIDE_METHOD, $&amp;lt;id&amp;gt;3,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, $&amp;lt;cbuf&amp;gt;11,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;6, NULL, $&amp;lt;cbuf&amp;gt;11,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;line&amp;gt;1, ccode_line,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;vararg, NULL);
&lt;br&gt;&amp;nbsp;									}
&lt;br&gt;@@ -1753,27 +1835,53 @@
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;			push_function(the_scope, REGULAR_METHOD, NULL, $&amp;lt;id&amp;gt;3,
&lt;br&gt;-				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1, ccode_line,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, $&amp;lt;cbuf&amp;gt;8, $&amp;lt;line&amp;gt;1, ccode_line,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;vararg, NULL);
&lt;br&gt;+								}
&lt;br&gt;+	|	'[' CCODE scope type TOKEN '(' funcargs ')' returnvals codenocode {
&lt;br&gt;+			if(the_scope == CLASS_SCOPE) {
&lt;br&gt;+				yyerror(_(&amp;quot;a method cannot be of class scope&amp;quot;));
&lt;br&gt;+				free_all_global_state();
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			push_function(the_scope, REGULAR_METHOD, NULL, $&amp;lt;id&amp;gt;5,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;cbuf&amp;gt;2, $&amp;lt;cbuf&amp;gt;10, $&amp;lt;line&amp;gt;3, ccode_line,
&lt;br&gt;&amp;nbsp;				 &amp;nbsp; &amp;nbsp; &amp;nbsp;vararg, NULL);
&lt;br&gt;&amp;nbsp;								}
&lt;br&gt;&amp;nbsp;	|	TOKEN '(' TOKEN ')' codenocode	{
&lt;br&gt;&amp;nbsp;			if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;init&amp;quot;)==0) {
&lt;br&gt;&amp;nbsp;				push_init_arg($&amp;lt;id&amp;gt;3,FALSE);
&lt;br&gt;&amp;nbsp;				push_function(NO_SCOPE, INIT_METHOD, NULL,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;&amp;nbsp;			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;class_init&amp;quot;)==0) {
&lt;br&gt;&amp;nbsp;				push_init_arg($&amp;lt;id&amp;gt;3,TRUE);
&lt;br&gt;&amp;nbsp;				push_function(NO_SCOPE, CLASS_INIT_METHOD, NULL,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;constructor&amp;quot;)==0) {
&lt;br&gt;+				push_init_arg($&amp;lt;id&amp;gt;3, FALSE);
&lt;br&gt;+				push_function(NO_SCOPE, CONSTRUCTOR_METHOD, NULL,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;dispose&amp;quot;)==0) {
&lt;br&gt;+				push_init_arg($&amp;lt;id&amp;gt;3, FALSE);
&lt;br&gt;+				push_function(NO_SCOPE, DISPOSE_METHOD, NULL,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;finalize&amp;quot;)==0) {
&lt;br&gt;+				push_init_arg($&amp;lt;id&amp;gt;3, FALSE);
&lt;br&gt;+				push_function(NO_SCOPE, FINALIZE_METHOD, NULL,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, NULL, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;&amp;nbsp;			} else {
&lt;br&gt;&amp;nbsp;				g_free($&amp;lt;id&amp;gt;1);
&lt;br&gt;&amp;nbsp;				g_free($&amp;lt;id&amp;gt;3);
&lt;br&gt;&amp;nbsp;				g_string_free($&amp;lt;cbuf&amp;gt;5,TRUE);
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;parse error &amp;quot;
&lt;br&gt;-					 &amp;nbsp;&amp;quot;(untyped blocks must be init or &amp;quot;
&lt;br&gt;-					 &amp;nbsp;&amp;quot;class_init)&amp;quot;));
&lt;br&gt;+					 &amp;nbsp;&amp;quot;(untyped blocks must be init, &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;class_init, constructor, dispose &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;or finalize)&amp;quot;));
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;						}
&lt;br&gt;--- src/treefuncs.def.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/treefuncs.def	2008-01-28 17:15:53.000000000 +0100
&lt;br&gt;@@ -40,6 +40,9 @@
&lt;br&gt;&amp;nbsp;	REGULAR_METHOD,
&lt;br&gt;&amp;nbsp;	INIT_METHOD,
&lt;br&gt;&amp;nbsp;	CLASS_INIT_METHOD,
&lt;br&gt;+	CONSTRUCTOR_METHOD,
&lt;br&gt;+	DISPOSE_METHOD,
&lt;br&gt;+	FINALIZE_METHOD,
&lt;br&gt;&amp;nbsp;	VIRTUAL_METHOD,
&lt;br&gt;&amp;nbsp;	SIGNAL_LAST_METHOD,
&lt;br&gt;&amp;nbsp;	SIGNAL_FIRST_METHOD,
&lt;br&gt;@@ -126,6 +129,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;NODELIST	args
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	onerror
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	defreturn
&lt;br&gt;+ &amp;nbsp;STRING	attr
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	cbuf
&lt;br&gt;&amp;nbsp; &amp;nbsp;INT		line_no
&lt;br&gt;&amp;nbsp; &amp;nbsp;INT		ccode_line
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt; &lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=15141367&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;attachment0&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/15141367/0/attachment0&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/patch-allowing-to-add-GCC-attributes-to-methods-tp15141367p15141367.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-14989223</id>
	<title>patch allowing to omit &quot;from G:Object&quot; in class declaration</title>
	<published>2008-01-20T16:43:42Z</published>
	<updated>2008-01-20T16:43:42Z</updated>
	<author>
		<name>Jean-Yves Lefort</name>
	</author>
	<content type="html">Well, I think the subject says it all.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=14989223&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[gob2-2.0.15-optional-baseclass.diff]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;--- src/parse.y.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/parse.y	2008-01-21 01:30:42.000000000 +0100
&lt;br&gt;@@ -770,10 +770,10 @@
&lt;br&gt;&amp;nbsp;						}
&lt;br&gt;&amp;nbsp;	;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-classdec:	CLASS TYPETOKEN FROM TYPETOKEN	classflags {
&lt;br&gt;+classdec:	CLASS TYPETOKEN classbase classflags {
&lt;br&gt;&amp;nbsp;			class = node_new (CLASS_NODE,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp;&amp;quot;otype:steal&amp;quot;, $&amp;lt;id&amp;gt;2,
&lt;br&gt;-					 &amp;nbsp;&amp;quot;ptype:steal&amp;quot;, $&amp;lt;id&amp;gt;4,
&lt;br&gt;+					 &amp;nbsp;&amp;quot;ptype:steal&amp;quot;, $&amp;lt;id&amp;gt;3,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp;&amp;quot;bonobo_object_class:steal&amp;quot;, bonobo_object_class,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp;&amp;quot;glade_xml&amp;quot;, glade_xml,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp;&amp;quot;interfaces:steal&amp;quot;, interfaces,
&lt;br&gt;@@ -787,6 +787,15 @@
&lt;br&gt;&amp;nbsp;						}
&lt;br&gt;&amp;nbsp;	;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+classbase:
&lt;br&gt;+		/* empty */ {
&lt;br&gt;+		 &amp;nbsp;$&amp;lt;id&amp;gt;$ = g_strdup(&amp;quot;G:Object&amp;quot;);
&lt;br&gt;+		}
&lt;br&gt;+	|	FROM TYPETOKEN {
&lt;br&gt;+		 &amp;nbsp;$&amp;lt;id&amp;gt;$ = $&amp;lt;id&amp;gt;2;
&lt;br&gt;+		}
&lt;br&gt;+	;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;classflags:
&lt;br&gt;&amp;nbsp;	| '(' TOKEN ')' classflags {
&lt;br&gt;&amp;nbsp;			if(strcmp($&amp;lt;id&amp;gt;2,&amp;quot;abstract&amp;quot;) == 0) {
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt; &lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=14989223&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;attachment0&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/14989223/0/attachment0&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/patch-allowing-to-omit-%22from-G%3AObject%22-in-class-declaration-tp14989223p14989223.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-14989063</id>
	<title>patch adding first-class support of constructor/dispose/finalize methods</title>
	<published>2008-01-20T16:24:53Z</published>
	<updated>2008-01-20T16:24:53Z</updated>
	<author>
		<name>Jean-Yves Lefort</name>
	</author>
	<content type="html">The attached patch allows to write:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; constructor (self)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* hi */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dispose (self)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* hi */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; finalize (self)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* hi */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;instead of:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; override (G:Object) GObject *
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; constructor (GType type, unsigned int n_construct_properties, GObjectConstructParam *construct_params)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GObject *object;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Self *self;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; object = PARENT_HANDLER(type, n_construct_properties, construct_params);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self = SELF(object);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* hi */
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return object;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; override (G:Object) void
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dispose (GObject *object)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Self *self = SELF(object);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* hi */
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PARENT_HANDLER(object);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; override (G:Object) void
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; finalize (GObject *object)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Self *self = SELF(object);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* hi */
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PARENT_HANDLER(object);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;In my opinion, these virtual methods are used so often that they
&lt;br&gt;deserve such first-class support.
&lt;br&gt;&lt;br&gt;Of course, to preserve backwards compatibility, the normal override
&lt;br&gt;syntax is still supported.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=14989063&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br /&gt;&lt;tt&gt;[gob2-2.0.15-gobject-overrides.diff]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;--- src/main.c.orig	2007-10-17 16:49:04.000000000 +0200
&lt;br&gt;+++ src/main.c	2008-01-21 00:53:57.000000000 +0100
&lt;br&gt;@@ -92,11 +92,16 @@
&lt;br&gt;&amp;nbsp;static gboolean special_array[SPECIAL_LAST] = {0};
&lt;br&gt;&amp;nbsp;static gboolean any_special = FALSE;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+static gboolean need_constructor = FALSE;
&lt;br&gt;+static Method * user_constructor = NULL;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;static gboolean need_dispose = FALSE;
&lt;br&gt;&amp;nbsp;static Method * dispose_handler = NULL;
&lt;br&gt;+static Method * user_dispose_method = NULL;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static gboolean need_finalize = FALSE;
&lt;br&gt;&amp;nbsp;static Method * finalize_handler = NULL;
&lt;br&gt;+static Method * user_finalize_method = NULL;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;FILE *out = NULL;
&lt;br&gt;&amp;nbsp;FILE *outh = NULL;
&lt;br&gt;@@ -269,6 +274,9 @@
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == FINALIZE_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == OVERRIDE_METHOD)
&lt;br&gt;&amp;nbsp;				continue;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -291,6 +299,9 @@
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == FINALIZE_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == OVERRIDE_METHOD)
&lt;br&gt;&amp;nbsp;				continue;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -330,6 +341,9 @@
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			if(m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == CLASS_INIT_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+			 &amp;nbsp; m-&amp;gt;method == FINALIZE_METHOD ||
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; m-&amp;gt;method == OVERRIDE_METHOD)
&lt;br&gt;&amp;nbsp;				continue;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -543,7 +557,10 @@
&lt;br&gt;&amp;nbsp;		g_free(s);
&lt;br&gt;&amp;nbsp;	} else if(m-&amp;gt;scope == PRIVATE_SCOPE ||
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;m-&amp;gt;method == INIT_METHOD ||
&lt;br&gt;-		 &amp;nbsp;m-&amp;gt;method == CLASS_INIT_METHOD) {
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == CLASS_INIT_METHOD || 
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == CONSTRUCTOR_METHOD ||
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == DISPOSE_METHOD ||
&lt;br&gt;+		 &amp;nbsp;m-&amp;gt;method == FINALIZE_METHOD) {
&lt;br&gt;&amp;nbsp;		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; no_gnu?&amp;quot;;\n&amp;quot;:&amp;quot; G_GNUC_UNUSED;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;@@ -629,66 +646,68 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static void
&lt;br&gt;-find_dispose(const Class *cl)
&lt;br&gt;+static Method *
&lt;br&gt;+find_method(const Class *cl, int method, const char *id)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	GList *li;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	dispose_handler = NULL;
&lt;br&gt;&amp;nbsp;	for(li=cl-&amp;gt;nodes;li;li=g_list_next(li)) {
&lt;br&gt;&amp;nbsp;		Node *n = li-&amp;gt;data;
&lt;br&gt;&amp;nbsp;		if(n-&amp;gt;type == METHOD_NODE) {
&lt;br&gt;&amp;nbsp;			Method *m = (Method *)n;
&lt;br&gt;-			if(m-&amp;gt;method == OVERRIDE_METHOD &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; strcmp(m-&amp;gt;id, &amp;quot;dispose&amp;quot;)==0) {
&lt;br&gt;-				if(strcmp(m-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				if(g_list_length(m-&amp;gt;args) != 1) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				dispose_handler = m;
&lt;br&gt;-				break;
&lt;br&gt;-			}
&lt;br&gt;+			if (m-&amp;gt;method == method
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp;&amp;&amp; (id == NULL || strcmp(m-&amp;gt;id, id)==0))
&lt;br&gt;+				return m;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+	return NULL;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;-find_finalize(const Class *cl)
&lt;br&gt;+find_constructor(const Class *cl)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	GList *li;
&lt;br&gt;+	user_constructor = find_method(cl, CONSTRUCTOR_METHOD, NULL);
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	finalize_handler = NULL;
&lt;br&gt;-	for(li=cl-&amp;gt;nodes;li;li=g_list_next(li)) {
&lt;br&gt;-		Node *n = li-&amp;gt;data;
&lt;br&gt;-		if(n-&amp;gt;type == METHOD_NODE) {
&lt;br&gt;-			Method *m = (Method *)n;
&lt;br&gt;-			if(m-&amp;gt;method == OVERRIDE_METHOD &amp;&amp;
&lt;br&gt;-			 &amp;nbsp; strcmp(m-&amp;gt;id, &amp;quot;finalize&amp;quot;)==0) {
&lt;br&gt;-				if(strcmp(m-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				if(g_list_length(m-&amp;gt;args) != 1) {
&lt;br&gt;-					error_print(GOB_ERROR, m-&amp;gt;line_no,
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;-						 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;-				}
&lt;br&gt;-				finalize_handler = m;
&lt;br&gt;-				break;
&lt;br&gt;-			}
&lt;br&gt;-		}
&lt;br&gt;+static void
&lt;br&gt;+find_dispose(const Class *cl)
&lt;br&gt;+{
&lt;br&gt;+	dispose_handler = find_method(cl, OVERRIDE_METHOD, &amp;quot;dispose&amp;quot;);
&lt;br&gt;+	if (dispose_handler != NULL) {
&lt;br&gt;+		if(strcmp(dispose_handler-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0)
&lt;br&gt;+			error_print(GOB_ERROR, dispose_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;+		if(g_list_length(dispose_handler-&amp;gt;args) != 1)
&lt;br&gt;+			error_print(GOB_ERROR, dispose_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;dispose method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;+	user_dispose_method = find_method(cl, DISPOSE_METHOD, NULL);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+find_finalize(const Class *cl)
&lt;br&gt;+{
&lt;br&gt;+	finalize_handler = find_method(cl, OVERRIDE_METHOD, &amp;quot;finalize&amp;quot;);
&lt;br&gt;+	if (finalize_handler != NULL) {
&lt;br&gt;+		if(strcmp(finalize_handler-&amp;gt;otype, &amp;quot;G:Object&amp;quot;) != 0)
&lt;br&gt;+			error_print(GOB_ERROR, finalize_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;of class other then &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;G:Object&amp;quot;);
&lt;br&gt;+		if(g_list_length(finalize_handler-&amp;gt;args) != 1)
&lt;br&gt;+			error_print(GOB_ERROR, finalize_handler-&amp;gt;line_no,
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;finalize method override &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;with more then one &amp;quot;
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;&amp;quot;parameter&amp;quot;);
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	user_finalize_method = find_method(cl, FINALIZE_METHOD, NULL);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -2118,6 +2137,33 @@
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;+add_constructor (Class *c)
&lt;br&gt;+{
&lt;br&gt;+	out_printf(out, &amp;quot;\nstatic GObject *\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;___constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties)\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;{\n&amp;quot;);
&lt;br&gt;+	out_printf(out,
&lt;br&gt;+		 &amp;nbsp; &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::constructor\&amp;quot;\n&amp;quot;,
&lt;br&gt;+		 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;+
&lt;br&gt;+	out_printf(out, &amp;quot;\tGObject *obj_self;\n&amp;quot;);
&lt;br&gt;+	out_printf(out, &amp;quot;\t%s *self;\n&amp;quot;, typebase);
&lt;br&gt;+
&lt;br&gt;+	out_printf(out, &amp;quot;\tobj_self = G_OBJECT_CLASS (parent_class)-&amp;gt;constructor (type, n_construct_properties, construct_properties);\n&amp;quot;);
&lt;br&gt;+	out_printf(out, &amp;quot;\tself = %s (obj_self);\n&amp;quot;, macrobase);
&lt;br&gt;+
&lt;br&gt;+	if (user_constructor-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+		out_addline_infile (out, user_constructor-&amp;gt;line_no);
&lt;br&gt;+	out_printf (out, &amp;quot;\t%s_constructor (self);\n&amp;quot;, funcbase);
&lt;br&gt;+	if (user_constructor-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+		out_addline_outfile (out);
&lt;br&gt;+
&lt;br&gt;+	out_printf(out, &amp;quot;\treturn obj_self;\n&amp;quot;);
&lt;br&gt;+	out_printf(out, &amp;quot;}\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;#undef __GOB_FUNCTION__\n\n&amp;quot;);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;&amp;nbsp;add_dispose (Class *c)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	out_printf(out, &amp;quot;\nstatic void\n&amp;quot;
&lt;br&gt;@@ -2127,7 +2173,7 @@
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;quot;#define __GOB_FUNCTION__ \&amp;quot;%s::dispose\&amp;quot;\n&amp;quot;,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	if (unreftors &amp;gt; 0) {
&lt;br&gt;+	if (unreftors &amp;gt; 0 || user_dispose_method != NULL) {
&lt;br&gt;&amp;nbsp;		out_printf (out, &amp;quot;\t%s *self%s = %s (obj_self);\n&amp;quot;,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;typebase,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;! no_gnu ? &amp;quot; G_GNUC_UNUSED&amp;quot; : &amp;quot;&amp;quot;,
&lt;br&gt;@@ -2143,6 +2189,14 @@
&lt;br&gt;&amp;nbsp;		if (dispose_handler-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_outfile (out);
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;+		if (user_dispose_method != NULL) {
&lt;br&gt;+			if (user_dispose_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_infile (out, user_dispose_method-&amp;gt;line_no);
&lt;br&gt;+			out_printf (out, &amp;quot;\t%s_dispose (self);\n&amp;quot;, funcbase);
&lt;br&gt;+			if (user_dispose_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_outfile (out);
&lt;br&gt;+		}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;		out_printf (out,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\tif (G_OBJECT_CLASS (parent_class)-&amp;gt;dispose) \\\n&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;&amp;quot;\t\t(* G_OBJECT_CLASS (parent_class)-&amp;gt;dispose) (obj_self);\n&amp;quot;);
&lt;br&gt;@@ -2178,7 +2232,8 @@
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; c-&amp;gt;otype);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (privates &amp;gt; 0 ||
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;destructors &amp;gt; 0) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;destructors &amp;gt; 0 ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;user_finalize_method != NULL) {
&lt;br&gt;&amp;nbsp;		const char *unused = &amp;quot;&amp;quot;;
&lt;br&gt;&amp;nbsp;		if ( ! no_gnu)
&lt;br&gt;&amp;nbsp;			unused = &amp;quot; G_GNUC_UNUSED&amp;quot;;
&lt;br&gt;@@ -2202,6 +2257,14 @@
&lt;br&gt;&amp;nbsp;		if(finalize_handler-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;&amp;nbsp;			out_addline_outfile(out);
&lt;br&gt;&amp;nbsp;	} else {
&lt;br&gt;+		if (user_finalize_method != NULL) {
&lt;br&gt;+			if (user_finalize_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_infile (out, user_finalize_method-&amp;gt;line_no);
&lt;br&gt;+			out_printf (out, &amp;quot;\t%s_finalize (self);\n&amp;quot;, funcbase);
&lt;br&gt;+			if (user_finalize_method-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+				out_addline_outfile (out);
&lt;br&gt;+		}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;		out_printf(out,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;quot;\tif(G_OBJECT_CLASS(parent_class)-&amp;gt;finalize) \\\n&amp;quot;
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;quot;\t\t(* G_OBJECT_CLASS(parent_class)-&amp;gt;finalize)(obj_self);\n&amp;quot;);
&lt;br&gt;@@ -2381,6 +2444,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			/* if there are no handlers for these things, we
&lt;br&gt;&amp;nbsp;			 * need to set them up here */
&lt;br&gt;+			if(need_constructor)
&lt;br&gt;+				out_printf(out, &amp;quot;\tg_object_class-&amp;gt;constructor &amp;quot;
&lt;br&gt;+					 &amp;nbsp; &amp;quot;= ___constructor;\n&amp;quot;);
&lt;br&gt;&amp;nbsp;			if(need_dispose &amp;&amp; !dispose_handler)
&lt;br&gt;&amp;nbsp;				out_printf(out, &amp;quot;\tg_object_class-&amp;gt;dispose &amp;quot;
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;quot;= ___dispose;\n&amp;quot;);
&lt;br&gt;@@ -3064,6 +3130,15 @@
&lt;br&gt;&amp;nbsp;		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;		out_printf(out, &amp;quot;#undef PARENT_HANDLER\n&amp;quot;);
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;+	case CONSTRUCTOR_METHOD:
&lt;br&gt;+	case DISPOSE_METHOD:
&lt;br&gt;+	case FINALIZE_METHOD:
&lt;br&gt;+		if(m-&amp;gt;line_no &amp;gt; 0)
&lt;br&gt;+			out_addline_infile(out, m-&amp;gt;line_no);
&lt;br&gt;+		print_method(out, &amp;quot;static &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;\n&amp;quot;,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; m, FALSE, FALSE, TRUE, FALSE, FALSE);
&lt;br&gt;+		print_method_body(m, TRUE, TRUE);
&lt;br&gt;+		/* the outfile line was added above */
&lt;br&gt;&amp;nbsp;	default:
&lt;br&gt;&amp;nbsp;		break;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -3633,6 +3708,9 @@
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp;funcbase);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	if (need_constructor)
&lt;br&gt;+		add_constructor (c);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	if (need_dispose)
&lt;br&gt;&amp;nbsp;		add_dispose (c);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -4441,15 +4519,24 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	make_bases ();
&lt;br&gt;&amp;nbsp;	make_inits ((Class *)class);
&lt;br&gt;-	if(unreftors &amp;gt; 0) {
&lt;br&gt;+
&lt;br&gt;+	find_constructor ((Class *)class);
&lt;br&gt;+	if (user_constructor != NULL)
&lt;br&gt;+		need_constructor = TRUE;
&lt;br&gt;+
&lt;br&gt;+	find_dispose ((Class *)class);
&lt;br&gt;+	if (unreftors &amp;gt; 0 ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;dispose_handler != NULL ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;user_dispose_method != NULL)
&lt;br&gt;&amp;nbsp;		need_dispose = TRUE;
&lt;br&gt;-		find_dispose ((Class *)class);
&lt;br&gt;-	}
&lt;br&gt;+
&lt;br&gt;+	find_finalize ((Class *)class);
&lt;br&gt;&amp;nbsp;	if (destructors &amp;gt; 0 ||
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;privates &amp;gt; 0) {
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;privates &amp;gt; 0 ||
&lt;br&gt;+	 &amp;nbsp; &amp;nbsp;user_finalize_method != NULL) {
&lt;br&gt;&amp;nbsp;		need_finalize = TRUE;
&lt;br&gt;-		find_finalize ((Class *)class);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	check_bad_symbols ((Class *)class);
&lt;br&gt;&amp;nbsp;	check_duplicate_symbols ((Class *)class);
&lt;br&gt;&amp;nbsp;	check_duplicate_overrides ((Class *)class);
&lt;br&gt;--- src/parse.y.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/parse.y	2008-01-21 00:53:13.000000000 +0100
&lt;br&gt;@@ -155,7 +155,11 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	g_assert(scope != CLASS_SCOPE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;-	if(method == INIT_METHOD || method == CLASS_INIT_METHOD) {
&lt;br&gt;+	if(method == INIT_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == CLASS_INIT_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == CONSTRUCTOR_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == DISPOSE_METHOD
&lt;br&gt;+	 &amp;nbsp; || method == FINALIZE_METHOD) {
&lt;br&gt;&amp;nbsp;		type = (Type *)node_new (TYPE_NODE,
&lt;br&gt;&amp;nbsp;					 &amp;quot;name&amp;quot;, &amp;quot;void&amp;quot;,
&lt;br&gt;&amp;nbsp;					 NULL);
&lt;br&gt;@@ -1767,13 +1771,29 @@
&lt;br&gt;&amp;nbsp;				push_function(NO_SCOPE, CLASS_INIT_METHOD, NULL,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;constructor&amp;quot;)==0) {
&lt;br&gt;+				push_init_arg($&amp;lt;id&amp;gt;3, FALSE);
&lt;br&gt;+				push_function(NO_SCOPE, CONSTRUCTOR_METHOD, NULL,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;dispose&amp;quot;)==0) {
&lt;br&gt;+				push_init_arg($&amp;lt;id&amp;gt;3, FALSE);
&lt;br&gt;+				push_function(NO_SCOPE, DISPOSE_METHOD, NULL,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;1, &amp;quot;finalize&amp;quot;)==0) {
&lt;br&gt;+				push_init_arg($&amp;lt;id&amp;gt;3, FALSE);
&lt;br&gt;+				push_function(NO_SCOPE, FINALIZE_METHOD, NULL,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;lt;id&amp;gt;1, $&amp;lt;cbuf&amp;gt;5, $&amp;lt;line&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp; &amp;nbsp;ccode_line, FALSE, NULL);
&lt;br&gt;&amp;nbsp;			} else {
&lt;br&gt;&amp;nbsp;				g_free($&amp;lt;id&amp;gt;1);
&lt;br&gt;&amp;nbsp;				g_free($&amp;lt;id&amp;gt;3);
&lt;br&gt;&amp;nbsp;				g_string_free($&amp;lt;cbuf&amp;gt;5,TRUE);
&lt;br&gt;&amp;nbsp;				yyerror(_(&amp;quot;parse error &amp;quot;
&lt;br&gt;-					 &amp;nbsp;&amp;quot;(untyped blocks must be init or &amp;quot;
&lt;br&gt;-					 &amp;nbsp;&amp;quot;class_init)&amp;quot;));
&lt;br&gt;+					 &amp;nbsp;&amp;quot;(untyped blocks must be init, &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;class_init, constructor, dispose &amp;quot;
&lt;br&gt;+					 &amp;nbsp;&amp;quot;or finalize)&amp;quot;));
&lt;br&gt;&amp;nbsp;				YYERROR;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;						}
&lt;br&gt;--- src/treefuncs.def.orig	2007-03-09 18:46:14.000000000 +0100
&lt;br&gt;+++ src/treefuncs.def	2008-01-21 00:53:13.000000000 +0100
&lt;br&gt;@@ -40,6 +40,9 @@
&lt;br&gt;&amp;nbsp;	REGULAR_METHOD,
&lt;br&gt;&amp;nbsp;	INIT_METHOD,
&lt;br&gt;&amp;nbsp;	CLASS_INIT_METHOD,
&lt;br&gt;+	CONSTRUCTOR_METHOD,
&lt;br&gt;+	DISPOSE_METHOD,
&lt;br&gt;+	FINALIZE_METHOD,
&lt;br&gt;&amp;nbsp;	VIRTUAL_METHOD,
&lt;br&gt;&amp;nbsp;	SIGNAL_LAST_METHOD,
&lt;br&gt;&amp;nbsp;	SIGNAL_FIRST_METHOD,
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt; &lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=14989063&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;attachment0&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/14989063/0/attachment0&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/patch-adding-first-class-support-of-constructor-dispose-finalize-methods-tp14989063p14989063.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-13871547</id>
	<title>ANNOUNCE: gob2 2.0.15 the &quot;Can't improve perfection&quot; release</title>
	<published>2007-11-20T21:50:16Z</published>
	<updated>2007-11-20T21:50:16Z</updated>
	<author>
		<name>Jiri Lebl</name>
	</author>
	<content type="html">&lt;br&gt;WOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOGUGUGUGUGPEEEEEKAAAAAA
&lt;br&gt;&lt;br&gt;So quite apparently gob is totally perfect. &amp;nbsp;This is just illustrated by the
&lt;br&gt;fact that there was no release for almost 2 years (was it two years? &amp;nbsp;WOW!)
&lt;br&gt;In any case here are the accumulated patches from users. &amp;nbsp;While the world has
&lt;br&gt;not clearly become a better place for all humankind because of gob, it is
&lt;br&gt;clear that the world has been changed forever by such an important project
&lt;br&gt;such as gob.
&lt;br&gt;&lt;br&gt;So what is this gob thing? &amp;nbsp;Well besides being the cure for cancer, it also
&lt;br&gt;generates GObjects (or GTK+ objects). &amp;nbsp;GOB2 is a replacement for the version
&lt;br&gt;1 GOB, that was for GTK+ 1.x mostly. &amp;nbsp;GOB2 can handle pretty much most of the
&lt;br&gt;GObject features. &amp;nbsp;At least most of the ones that anyone will ever use. &amp;nbsp;It
&lt;br&gt;only requires GLib 2.0 (or higher for some features) and can generate
&lt;br&gt;arbitrary GObjects. &amp;nbsp;You can have both versions installed at the same time if
&lt;br&gt;you wish, but if anyone is still using gob version 1 and GTK+ 1.x, they
&lt;br&gt;should get their head examined.
&lt;br&gt;&lt;br&gt;Here are the news in 2.0.15:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Fix the United States electoral system
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Fix --file-sep usage with respect to private headers
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Don't use /dev/null to help portability on non-unix
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Allow usage of gob as pet food
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Fix segfault on bad include statement (debian bug #443907)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Fix my-person.gob example
&lt;br&gt;&lt;br&gt;ftp://ftp.5z.com/pub/gob/
&lt;br&gt;&lt;a href=&quot;http://ftp.gnome.org/pub/GNOME/sources/gob2/2.0/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://ftp.gnome.org/pub/GNOME/sources/gob2/2.0/&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://www.5z.com/jirka/gob.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.5z.com/jirka/gob.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;Note: I no longer have fedora, so no rpms are built but the specfile is
&lt;br&gt;included. &amp;nbsp;Try it with &amp;quot;rpmbuild -ta gob2-...-tar.gz&amp;quot;
&lt;br&gt;&lt;br&gt;Have fun,
&lt;br&gt;&lt;br&gt;George
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;George &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13871547&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jirka@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;Examine what is said, not who speaks.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-- Arabian Proverb
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13871547&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/ANNOUNCE%3A-gob2-2.0.15-the-%22Can%27t-improve-perfection%22-release-tp13871547p13871547.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-13255842</id>
	<title>Re: [BUG] Incorrectly includes private.h when --file-sep=_</title>
	<published>2007-10-17T08:53:08Z</published>
	<updated>2007-10-17T08:53:08Z</updated>
	<author>
		<name>Jiri Lebl</name>
	</author>
	<content type="html">Jan Hudec wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hello,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; When I use --file-sep=_ (but I suspect it would be the same with any
&lt;br&gt;&amp;gt; non-default value), the .c file includes:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; #include &amp;lt;foo_bar-private.h&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; but the file generated is called:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; foo_bar_private.h
&lt;/div&gt;&lt;br&gt;Fixed in svn, I will make a release soonish with this and all the other
&lt;br&gt;things that are fixed.
&lt;br&gt;&lt;br&gt;George
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;George &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13255842&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jirka@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;The surprising thing about this paper is that a man who could write
&lt;br&gt;&amp;nbsp; &amp;nbsp;it would.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-- J. E. Littlewood
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13255842&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-BUG--Incorrectly-includes-private.h-when---file-sep%3D_-tp13234792p13255842.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-13234792</id>
	<title>[BUG] Incorrectly includes private.h when --file-sep=_</title>
	<published>2007-10-15T14:51:13Z</published>
	<updated>2007-10-15T14:51:13Z</updated>
	<author>
		<name>Jan Hudec</name>
	</author>
	<content type="html">Hello,
&lt;br&gt;&lt;br&gt;When I use --file-sep=_ (but I suspect it would be the same with any
&lt;br&gt;non-default value), the .c file includes:
&lt;br&gt;&lt;br&gt;#include &amp;lt;foo_bar-private.h&amp;gt;
&lt;br&gt;&lt;br&gt;but the file generated is called:
&lt;br&gt;&lt;br&gt;foo_bar_private.h
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;&lt;br&gt;Jan
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Jan 'Bulb' Hudec &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13234792&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bulb@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br /&gt; &lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13234792&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;signature.asc&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/13234792/0/signature.asc&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-BUG--Incorrectly-includes-private.h-when---file-sep%3D_-tp13234792p13234792.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-13074223</id>
	<title>Re: feature request: base_init</title>
	<published>2007-09-27T23:38:20Z</published>
	<updated>2007-09-27T23:38:20Z</updated>
	<author>
		<name>Jiri Lebl</name>
	</author>
	<content type="html">alberto colombo wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; hello,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Gob2 manual says that there are two methods that handle the construction
&lt;br&gt;&amp;gt; of an object: init(self) and class_init(class). However, there is a
&lt;br&gt;&amp;gt; third method, base_init(gclass), that gob2 doesn't know about.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; would it be possible to define the base_init constructor from gob, just
&lt;br&gt;&amp;gt; like we do with base_init? It is actually required to write GStreamer
&lt;br&gt;&amp;gt; objects.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Thank you very much
&lt;br&gt;&amp;gt; alberto
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; PS: at the moment, I'm putting the base_init code in the class_init
&lt;br&gt;&amp;gt; constructor, and it works, but this will screw up inheritance, as far as
&lt;br&gt;&amp;gt; I understand.
&lt;/div&gt;&lt;br&gt;I know this is a year late, but I just did a search for messages matching
&lt;br&gt;&amp;quot;gob&amp;quot; in my inbox and noticed this:
&lt;br&gt;&lt;br&gt;You want to overide the get_type method. &amp;nbsp;See OVERRIDING THE GET_TYPE METHOD
&lt;br&gt;in the manpage.
&lt;br&gt;&lt;br&gt;George
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;George &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13074223&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jirka@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;I can live with doubt and uncertainty and not knowing. I think it is much
&lt;br&gt;&amp;nbsp; &amp;nbsp;more interesting to live not knowing than to have answers that might be
&lt;br&gt;&amp;nbsp; &amp;nbsp;wrong.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-- Richard P. Feynman
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13074223&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/feature-request%3A-base_init-tp7008109p13074223.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-13074222</id>
	<title>Re: new version of interface patch</title>
	<published>2007-09-27T22:52:08Z</published>
	<updated>2007-09-27T22:52:08Z</updated>
	<author>
		<name>Rudi Cilibrasi, Ph.D.</name>
	</author>
	<content type="html">Hi Jiri,
&lt;br&gt;&lt;br&gt;I don't think it was ever quite good enough to go in. &amp;nbsp;There is no
&lt;br&gt;more recent version yet. &amp;nbsp;If I get inspired I may take another crack
&lt;br&gt;at it. &amp;nbsp;If I remember correctly, this version worked ok for my
&lt;br&gt;purposes but was terribly limitted in some way. &amp;nbsp;I forget how though
&lt;br&gt;because it has been a while. &amp;nbsp;I think the patch is close but not good
&lt;br&gt;enough yet. &amp;nbsp;Best regards,
&lt;br&gt;&lt;br&gt;Rudi
&lt;br&gt;&lt;br&gt;On 9/27/07, Jiri Lebl &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13074222&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jirka@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Rudi Cilibrasi, Ph.D. wrote:
&lt;br&gt;&amp;gt; &amp;gt; new version of patch
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Is there a newer version of this patch? &amp;nbsp;If so I will put it into svn test
&lt;br&gt;&amp;gt; and make a release of gob in the very near future (I have slightly more time
&lt;br&gt;&amp;gt; recently than up till now)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Also can you please document the new features as well?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; George
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; George &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13074222&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jirka@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;If the facts don't fit the theory, change the facts.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-- Albert Einstein
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;We can try to do it by breaking free of the mental prison of
&lt;br&gt;separation and exclusion and see the world in its interconnectedness
&lt;br&gt;and non-separability, allowing new alternatives to emerge.&amp;quot; -- after
&lt;br&gt;Vandana Shiva
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13074222&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/new-version-of-interface-patch-tp10292584p13074222.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-13074221</id>
	<title>Re: new version of interface patch</title>
	<published>2007-09-27T22:46:31Z</published>
	<updated>2007-09-27T22:46:31Z</updated>
	<author>
		<name>Jiri Lebl</name>
	</author>
	<content type="html">Rudi Cilibrasi, Ph.D. wrote:
&lt;br&gt;&amp;gt; new version of patch
&lt;br&gt;&lt;br&gt;Is there a newer version of this patch? &amp;nbsp;If so I will put it into svn test
&lt;br&gt;and make a release of gob in the very near future (I have slightly more time
&lt;br&gt;recently than up till now)
&lt;br&gt;&lt;br&gt;Also can you please document the new features as well?
&lt;br&gt;&lt;br&gt;George
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;George &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13074221&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jirka@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;If the facts don't fit the theory, change the facts.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-- Albert Einstein
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=13074221&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/new-version-of-interface-patch-tp10292584p13074221.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-12382733</id>
	<title>Re: How do to use a gtk_type as a property type</title>
	<published>2007-08-29T02:22:53Z</published>
	<updated>2007-08-29T02:22:53Z</updated>
	<author>
		<name>Dov Grobgeld-2</name>
	</author>
	<content type="html">Thanks! We need an example for this in the documentation.&lt;br&gt;&lt;br&gt;Btw, I had another idea for gob. It seems like it would be quite straightforward to generate language bindings from a gob files. Perhaps some kind of plug-in system for different language backends? What do you think?
&lt;br&gt;&lt;br&gt;Regards,&lt;br&gt;Dov&lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;span class=&quot;gmail_quote&quot;&gt;On 8/28/07, &lt;b class=&quot;gmail_sendername&quot;&gt;Jean-Yves Lefort&lt;/b&gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12382733&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt; wrote:&lt;/span&gt;&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;
property OBJECT hadjustment (..., object_type = Gtk:Adjustment)&lt;br&gt;&lt;br&gt;--&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12382733&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt;&lt;br&gt;&lt;br&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;
&lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12382733&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/How-do-to-use-a-gtk_type-as-a-property-type-tp12373110p12382733.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-12374793</id>
	<title>Re: How do to use a gtk_type as a property type</title>
	<published>2007-08-28T13:50:44Z</published>
	<updated>2007-08-28T13:50:44Z</updated>
	<author>
		<name>Jean-Yves Lefort</name>
	</author>
	<content type="html">On Tue, 28 Aug 2007 20:55:41 +0300
&lt;br&gt;&amp;quot;Dov Grobgeld&amp;quot; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12374793&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dov.grobgeld@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; After having used gob2 extensively I finally and for the first time got
&lt;br&gt;&amp;gt; stuck on something that I could not find in the documentation. How do I
&lt;br&gt;&amp;gt; define a property that is defined by Gtk and not by Glib? It seems like the
&lt;br&gt;&amp;gt; name mangling of the property name always sticks on G_TYPE_ to the property
&lt;br&gt;&amp;gt; name. Shouldn't this be modifyable e.g. by doing GTK:ADJUSTMENT to make the
&lt;br&gt;&amp;gt; property GTK_TYPE_ADJUSTMENT instead of G_TYPE_ADJUSTMENT?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; In particular, I'm trying to convert the following code from my
&lt;br&gt;&amp;gt; gtk_image_viewer widget to gob:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; g_object_class_install_property (gobject_class,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PROP_HADJUSTMENT,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;g_param_spec_object (&amp;quot;hadjustment&amp;quot;,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (&amp;quot;Horizontal adjustment&amp;quot;),
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (&amp;quot;The GtkAdjustment that determines the values
&lt;br&gt;&amp;gt; of the horizontal position for this image_viewer.&amp;quot;),
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GTK_TYPE_ADJUSTMENT,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; G_PARAM_READWRITE));
&lt;/div&gt;&lt;/div&gt;property OBJECT hadjustment (..., object_type = Gtk:Adjustment)
&lt;br&gt;&lt;br&gt;--
&lt;br&gt;Jean-Yves Lefort &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12374793&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jylefort@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br /&gt; &lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12374793&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;attachment0&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/12374793/0/attachment0&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/How-do-to-use-a-gtk_type-as-a-property-type-tp12373110p12374793.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-12373110</id>
	<title>How do to use a gtk_type as a property type</title>
	<published>2007-08-28T11:55:41Z</published>
	<updated>2007-08-28T11:55:41Z</updated>
	<author>
		<name>Dov Grobgeld-2</name>
	</author>
	<content type="html">After having used gob2 extensively I finally and for the first time got stuck on something that I could not find in the documentation. How do I define a property that is defined by Gtk and not by Glib? It seems like the name mangling of the property name always sticks on G_TYPE_ to the property name. Shouldn&amp;#39;t this be modifyable 
e.g. by doing GTK:ADJUSTMENT to make the property GTK_TYPE_ADJUSTMENT instead of G_TYPE_ADJUSTMENT?&lt;br&gt;&lt;br&gt;In particular, I&amp;#39;m trying to convert the following code from my gtk_image_viewer widget to gob:&lt;br&gt;&lt;br&gt;&amp;nbsp; g_object_class_install_property (gobject_class,
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PROP_HADJUSTMENT,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_param_spec_object (&amp;quot;hadjustment&amp;quot;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (&amp;quot;Horizontal adjustment&amp;quot;),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (&amp;quot;The GtkAdjustment that determines the values of the horizontal position for this image_viewer.&amp;quot;),
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GTK_TYPE_ADJUSTMENT,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; G_PARAM_READWRITE));&lt;br&gt;&lt;br&gt;&lt;br&gt;Thanks a lot for gob!&lt;br&gt;&lt;br&gt;Regards,&lt;br&gt;Dov&lt;br&gt;&lt;br&gt;
&lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12373110&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/How-do-to-use-a-gtk_type-as-a-property-type-tp12373110p12373110.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-10980611</id>
	<title>default property values</title>
	<published>2007-06-05T18:44:40Z</published>
	<updated>2007-06-05T18:44:40Z</updated>
	<author>
		<name>Paul Forgey-2</name>
	</author>
	<content type="html">&lt;br&gt;I have an object with a string property as such:
&lt;br&gt;&lt;br&gt;class My:Example from G:Object
&lt;br&gt;{
&lt;br&gt;..
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private char *databasePath destroywith g_free;
&lt;br&gt;&lt;br&gt;..
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;property STRING databasePath
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;( nick &amp;nbsp;= &amp;quot;databasePath&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;blurb = &amp;quot;Full path to database&amp;quot;,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;default_value = &amp;quot;/tmp/database.db&amp;quot; )
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;set
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;g_free (selfp-&amp;gt;databasePath);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;selfp-&amp;gt;databasePath = g_value_dup_string (VAL);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;get
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;g_value_set_string (VAL, selfp-&amp;gt;databasePath);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;&lt;br&gt;..
&lt;br&gt;&lt;br&gt;&amp;nbsp;From the documentation, I am assuming this will be set after GET_NEW:
&lt;br&gt;&lt;br&gt;&amp;gt; Almost all types also have a 'default_value' attribute which sets &amp;nbsp;
&lt;br&gt;&amp;gt; the initial value of this property (on object initialization, the &amp;nbsp;
&lt;br&gt;&amp;gt; set handler will be run automatically with this value). This value &amp;nbsp;
&lt;br&gt;&amp;gt; will be overriden if the user sets a value of this property on the &amp;nbsp;
&lt;br&gt;&amp;gt; call to g_object_new.
&lt;br&gt;&lt;br&gt;The set handler is never getting called and selfp-&amp;gt;databasePath is &amp;nbsp;
&lt;br&gt;NULL after GET_NEW.
&lt;br&gt;&lt;br&gt;I can set the property during g_object_new () or once instantiated &amp;nbsp;
&lt;br&gt;with g_object_set ().
&lt;br&gt;&lt;br&gt;Why aren't the default values being properly set?
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=10980611&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/default-property-values-tp10980611p10980611.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-10292583</id>
	<title>new patch and thanks to George for putting gob2 together</title>
	<published>2007-05-02T13:02:02Z</published>
	<updated>2007-05-02T13:02:02Z</updated>
	<author>
		<name>Rudi Cilibrasi, Ph.D.</name>
	</author>
	<content type="html">Dear George,&lt;br&gt;&lt;br&gt;Thanks so much for taking the time to make the great gob2 utility.&lt;br&gt;I have tried to improve my patch a bit; particularly the body of the&lt;br&gt;interface functions.&amp;nbsp; It is now &amp;quot;pretty close&amp;quot;; I am actually using it
&lt;br&gt;in a project of mine and it is mostly ok but not 100% clean compile&lt;br&gt;yet.&amp;nbsp; It requires a little hand tweaking to use and I am hoping you or&lt;br&gt;somebody else can improve this patch a bit more (or make a better one)&lt;br&gt;

to provide our interface gob2 functionality.&amp;nbsp; I attach two versions of the patch&lt;br&gt;(against 2.0.14 again) in the recent email to the list.&lt;br&gt;&lt;br&gt;Also congratulations on reaching your phd defense! I also just defended mine
&lt;br&gt;and wish you luck.&amp;nbsp; Best regards,&lt;br&gt;&lt;br&gt;Rudi&lt;br clear=&quot;all&quot;&gt;&lt;br&gt;-- &lt;br&gt;Democracy is two wolves and a sheep deciding what to eat for lunch.&lt;br&gt;Liberty is a well-armed sheep contesting the vote.
&lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=10292583&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/new-patch-and-thanks-to-George-for-putting-gob2-together-tp10292583p10292583.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-10292584</id>
	<title>new version of interface patch</title>
	<published>2007-05-02T13:01:20Z</published>
	<updated>2007-05-02T13:01:20Z</updated>
	<author>
		<name>Rudi Cilibrasi, Ph.D.</name>
	</author>
	<content type="html">new version of patch&lt;br&gt;
&lt;br /&gt;&lt;tt&gt;[second-interface-r.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;Only in gobnew: config.h
&lt;br&gt;Only in gobnew: config.log
&lt;br&gt;Only in gobnew: config.status
&lt;br&gt;Only in gobnew/doc: gob2.1
&lt;br&gt;Only in gobnew/doc: Makefile
&lt;br&gt;Only in gobnew/examples: Makefile
&lt;br&gt;Only in gobnew: Makefile
&lt;br&gt;Only in gobnew: o
&lt;br&gt;diff -r gob2-2.0.14/src/checks.c gobnew/src/checks.c
&lt;br&gt;316c316,336
&lt;br&gt;&amp;lt; 				m-&amp;gt;cbuf = g_strdup(&amp;quot;/*empty*/&amp;quot;);
&lt;br&gt;---
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (c-&amp;gt;isinterface) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FuncArg *fa;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fa = m-&amp;gt;args-&amp;gt;data;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GSList *iter;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GString *gs = g_string_new(&amp;quot;&amp;quot;);
&lt;br&gt;&amp;gt; // &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;m-&amp;gt;cbuf = g_strdup(&amp;quot;/*interempty*/&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char *retstr = (strcmp(m-&amp;gt;mtype-&amp;gt;name, &amp;quot;void&amp;quot;)==0) ? &amp;quot;&amp;quot; : &amp;quot;return &amp;quot;;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; g_string_sprintf(gs, &amp;quot;%s%s-&amp;gt;%s(&amp;quot;, retstr, fa-&amp;gt;name, m-&amp;gt;id);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; iter = g_slist_next(m-&amp;gt;args);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char *sep2 = &amp;quot;&amp;quot;;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (;iter; iter = iter-&amp;gt;next) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; g_string_append(gs, sep2);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; g_string_append(gs, ((FuncArg *) (iter-&amp;gt;data))-&amp;gt;name);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sep2 = &amp;quot;,&amp;quot;;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; g_string_append(gs, &amp;quot;);&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; m-&amp;gt;cbuf = gs-&amp;gt;str;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; g_string_free(gs, FALSE);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; m-&amp;gt;cbuf = g_strdup(&amp;quot;/*empty*/&amp;quot;);
&lt;/div&gt;Only in gobnew/src: .checks.c.swp
&lt;br&gt;Only in gobnew/src: complearn-real-compressor.c
&lt;br&gt;Only in gobnew/src: complearn-real-compressor.h
&lt;br&gt;Only in gob2-2.0.14/src: lexer.c
&lt;br&gt;diff -r gob2-2.0.14/src/lexer.l gobnew/src/lexer.l
&lt;br&gt;407a408,420
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; interface		{
&lt;br&gt;&amp;gt; 			static int found_classes = 0;
&lt;br&gt;&amp;gt; 			look_for_includes = 2;
&lt;br&gt;&amp;gt; 			BEGIN(CLASS_CODE);
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 			if(++found_classes &amp;gt; 1) {
&lt;br&gt;&amp;gt; 				error_print(GOB_ERROR, line_no,
&lt;br&gt;&amp;gt; 					 &amp;nbsp; &amp;nbsp;&amp;quot;Only one interface per file allowed&amp;quot;);
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 			return INTERFACE;
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 
&lt;/div&gt;diff -r gob2-2.0.14/src/main.c gobnew/src/main.c
&lt;br&gt;1068c1068,1089
&lt;br&gt;&amp;lt; 	out_printf(out,
&lt;br&gt;---
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;nbsp; if (((Class *)class)-&amp;gt;isinterface)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; out_printf(out,
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;GType\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;%s_get_type (void)\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;{\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\tstatic GType type = 0;\n\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\tif ___GOB_UNLIKELY(type == 0) {\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\tstatic const GTypeInfo info = {\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\tsizeof (%sClass),\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\t(GBaseInitFunc) %s_class_init,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\t(GBaseFinalizeFunc) NULL,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\t(GClassInitFunc) NULL,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\t(GClassFinalizeFunc) NULL,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\tNULL /* class_data */,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\t0,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\t0,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\tNULL,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\tNULL\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t};\n\n&amp;quot;,
&lt;br&gt;&amp;gt; 		 &amp;nbsp; funcbase, typebase, funcbase);
&lt;br&gt;&amp;gt; &amp;nbsp; else
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; out_printf(out,
&lt;/div&gt;2400,2401c2421,2427
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 		if(m-&amp;gt;cbuf) {
&lt;br&gt;---
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; if (c-&amp;gt;isinterface) {
&lt;br&gt;&amp;gt; 			out_printf(out, &amp;quot; {\n&amp;quot;);
&lt;br&gt;&amp;gt; 			out_printf(out, &amp;quot; %s_GET_CLASS (self)-&amp;gt;%s (self);&amp;quot;,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;macrobase, m-&amp;gt;id);
&lt;br&gt;&amp;gt; 			out_printf(out, &amp;quot; }\n&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; 		if(!c-&amp;gt;isinterface &amp;&amp; m-&amp;gt;cbuf) {
&lt;br&gt;Only in gobnew/src: Makefile
&lt;br&gt;Only in gobnew/src: o
&lt;br&gt;Only in gob2-2.0.14/src: parse.c
&lt;br&gt;Only in gob2-2.0.14/src: parse.h
&lt;br&gt;diff -r gob2-2.0.14/src/parse.y gobnew/src/parse.y
&lt;br&gt;47a48
&lt;br&gt;&amp;gt; static gboolean isinterface = FALSE;
&lt;br&gt;676c677
&lt;br&gt;&amp;lt; %token CLASS FROM
&lt;br&gt;---
&lt;br&gt;&amp;gt; %token CLASS INTERFACE FROM
&lt;br&gt;689,692c690,697
&lt;br&gt;&amp;lt; prog:		ccodes class ccodes	{ ; }
&lt;br&gt;&amp;lt; 	|	class ccodes		{ ; }
&lt;br&gt;&amp;lt; 	|	ccodes class		{ ; }
&lt;br&gt;&amp;lt; 	|	class			{ ; }
&lt;br&gt;---
&lt;br&gt;&amp;gt; prog:		ccodes iclass ccodes	{ ; }
&lt;br&gt;&amp;gt; 	|	iclass ccodes		{ ; }
&lt;br&gt;&amp;gt; 	|	ccodes iclass		{ ; }
&lt;br&gt;&amp;gt; 	|	iclass			{ ; }
&lt;br&gt;&amp;gt; 	;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; iclass:	class	{ ; }
&lt;br&gt;&amp;gt; 	|	interface		{ ; }
&lt;br&gt;760a766,786
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; interface:		interfacedec '{' interfacecode '}'{
&lt;br&gt;&amp;gt; 			((Class *)class)-&amp;gt;nodes = class_nodes;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; isinterface = TRUE;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ((Class *)class)-&amp;gt;isinterface = TRUE;
&lt;br&gt;&amp;gt; 			class_nodes = NULL;
&lt;br&gt;&amp;gt; 			nodes = g_list_append(nodes,class);
&lt;br&gt;&amp;gt; 						}
&lt;br&gt;&amp;gt; 	|	interfacedec ';'	{
&lt;br&gt;&amp;gt; 			((Class *)class)-&amp;gt;nodes = class_nodes;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; isinterface = TRUE;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ((Class *)class)-&amp;gt;isinterface = TRUE;
&lt;br&gt;&amp;gt; 			class_nodes = NULL;
&lt;br&gt;&amp;gt; 			nodes = g_list_append(nodes,class);
&lt;br&gt;&amp;gt; 						}
&lt;br&gt;&amp;gt; 	|	interfacedec '{' '}'		{
&lt;br&gt;&amp;gt; 			((Class *)class)-&amp;gt;nodes = NULL;
&lt;br&gt;&amp;gt; 			class_nodes = NULL;
&lt;br&gt;&amp;gt; 			nodes = g_list_append(nodes,class);
&lt;br&gt;&amp;gt; 						}
&lt;br&gt;&amp;gt; 	;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;772a799,897
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; interfacedec:	INTERFACE TYPETOKEN FROM TYPETOKEN interfaceflags	{
&lt;br&gt;&amp;gt; 			class = node_new (CLASS_NODE,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;&amp;quot;otype:steal&amp;quot;, $&amp;lt;id&amp;gt;2,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;&amp;quot;ptype:steal&amp;quot;, $&amp;lt;id&amp;gt;4,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;&amp;quot;bonobo_object_class:steal&amp;quot;, bonobo_object_class,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;&amp;quot;glade_xml&amp;quot;, glade_xml,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;&amp;quot;interfaces:steal&amp;quot;, interfaces,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;&amp;quot;chunk_size:steal&amp;quot;, chunk_size,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;&amp;quot;abstract&amp;quot;, abstract,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;isinterface&amp;quot;, isinterface,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;NULL);
&lt;br&gt;&amp;gt; 			bonobo_object_class = NULL;
&lt;br&gt;&amp;gt; 			glade_xml = FALSE;
&lt;br&gt;&amp;gt; 			chunk_size = NULL;
&lt;br&gt;&amp;gt; 			interfaces = NULL;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; isinterface = FALSE;
&lt;br&gt;&amp;gt; 						}
&lt;br&gt;&amp;gt; 	;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; interfaceflags:
&lt;br&gt;&amp;gt; 	| '(' TOKEN ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if(strcmp($&amp;lt;id&amp;gt;2,&amp;quot;abstract&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				abstract = TRUE;
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	| '(' TOKEN TOKEN ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if(strcmp($&amp;lt;id&amp;gt;2,&amp;quot;chunks&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				g_free (chunk_size);
&lt;br&gt;&amp;gt; 				chunk_size = g_strdup($&amp;lt;id&amp;gt;3);
&lt;br&gt;&amp;gt; 			} else if(strcmp($&amp;lt;id&amp;gt;2,&amp;quot;BonoboObject&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				g_free (bonobo_object_class);
&lt;br&gt;&amp;gt; 				bonobo_object_class = g_strdup($&amp;lt;id&amp;gt;3);
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	| '(' TOKEN TYPETOKEN ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if (strcmp ($&amp;lt;id&amp;gt;2, &amp;quot;interface&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				interfaces = g_list_append (interfaces,
&lt;br&gt;&amp;gt; 							 &amp;nbsp; &amp;nbsp;g_strdup ($&amp;lt;id&amp;gt;3));
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	| '(' TOKEN NUMBER ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if(strcmp($&amp;lt;id&amp;gt;2,&amp;quot;chunks&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				g_free (chunk_size);
&lt;br&gt;&amp;gt; 				if(atoi($&amp;lt;id&amp;gt;3) != 0)
&lt;br&gt;&amp;gt; 					chunk_size = g_strdup($&amp;lt;id&amp;gt;3);
&lt;br&gt;&amp;gt; 				else
&lt;br&gt;&amp;gt; 					chunk_size = NULL;
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	| '(' TOKEN STRING STRING ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if (strcmp ($&amp;lt;id&amp;gt;2, &amp;quot;GladeXML&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				glade_xml = TRUE;
&lt;br&gt;&amp;gt; 				add_construct_glade($&amp;lt;id&amp;gt;3, $&amp;lt;id&amp;gt;4, NULL);
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	| '(' TOKEN STRING STRING STRING ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if (strcmp ($&amp;lt;id&amp;gt;2, &amp;quot;GladeXML&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				glade_xml = TRUE;
&lt;br&gt;&amp;gt; 				add_construct_glade($&amp;lt;id&amp;gt;3, $&amp;lt;id&amp;gt;4, $&amp;lt;id&amp;gt;5);
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	| '(' TOKEN TOKEN STRING ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if (strcmp ($&amp;lt;id&amp;gt;2, &amp;quot;GladeXML&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				glade_xml = TRUE;
&lt;br&gt;&amp;gt; 				add_construct_glade($&amp;lt;id&amp;gt;3, $&amp;lt;id&amp;gt;4, NULL);
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	| '(' TOKEN TOKEN STRING STRING ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if (strcmp ($&amp;lt;id&amp;gt;2, &amp;quot;GladeXML&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				glade_xml = TRUE;
&lt;br&gt;&amp;gt; 				add_construct_glade($&amp;lt;id&amp;gt;3, $&amp;lt;id&amp;gt;4, $&amp;lt;id&amp;gt;5);
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	;	
&lt;br&gt;&amp;gt; 
&lt;/div&gt;873a999,1027
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; interfacecode:	interfacecode interfacething			{ ; }
&lt;br&gt;&amp;gt; 	|	interfacething		{ ; }
&lt;br&gt;&amp;gt; 	;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; interfacething: 		method				{ ; }
&lt;br&gt;&amp;gt; 	|	TOKEN method			{
&lt;br&gt;&amp;gt; 			if (strcmp ($&amp;lt;id&amp;gt;1, &amp;quot;BonoboObject&amp;quot;) != 0) {
&lt;br&gt;&amp;gt; 				g_free ($&amp;lt;id&amp;gt;1);
&lt;br&gt;&amp;gt; 				yyerror (_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 			g_free ($&amp;lt;id&amp;gt;1);
&lt;br&gt;&amp;gt; 			last_added_method-&amp;gt;bonobo_object_func = TRUE;
&lt;br&gt;&amp;gt; 						}
&lt;br&gt;&amp;gt; 	|	TOKEN TYPETOKEN method			{
&lt;br&gt;&amp;gt; 			if (strcmp ($&amp;lt;id&amp;gt;1, &amp;quot;interface&amp;quot;) != 0) {
&lt;br&gt;&amp;gt; 				g_free ($&amp;lt;id&amp;gt;1);
&lt;br&gt;&amp;gt; 				g_free ($&amp;lt;id&amp;gt;2);
&lt;br&gt;&amp;gt; 				yyerror (_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 			g_free ($&amp;lt;id&amp;gt;1);
&lt;br&gt;&amp;gt; 			node_set ((Node *)last_added_method,
&lt;br&gt;&amp;gt; 				 &amp;nbsp;&amp;quot;interface:steal&amp;quot;, $&amp;lt;id&amp;gt;2,
&lt;br&gt;&amp;gt; 				 &amp;nbsp;NULL);
&lt;br&gt;&amp;gt; 						}
&lt;br&gt;&amp;gt; 	|	';'				{ ; }
&lt;br&gt;&amp;gt; 	;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;Only in gobnew/src: t2.gob
&lt;br&gt;diff -r gob2-2.0.14/src/test.gob gobnew/src/test.gob
&lt;br&gt;1,11c1
&lt;br&gt;&amp;lt; /* this is a TEST file, it's VERY VERY ugly, it's just supposed to test
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp;the parser of gob and somewhat test some output as well, you can
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp;look in here to see a whole array of different syntax options, but
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp;don't expect this to be an easy to read file */
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; requires 1.99.0
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; %at{
&lt;br&gt;&amp;lt; /* ALL TOP */
&lt;br&gt;&amp;lt; %}
&lt;br&gt;&amp;lt; 
&lt;br&gt;---
&lt;br&gt;&amp;gt; requires 2.0.0
&lt;br&gt;13,44c3,4
&lt;br&gt;&amp;lt; /* this should go on the very top of the header */
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; %}
&lt;br&gt;&amp;lt; %ht{
&lt;br&gt;&amp;lt; /* this should go on the very top of the header as well */
&lt;br&gt;&amp;lt; %}
&lt;br&gt;&amp;lt; %ph{
&lt;br&gt;&amp;lt; /* this should go into the private header */
&lt;br&gt;&amp;lt; %}
&lt;br&gt;&amp;lt; %privateheader{
&lt;br&gt;&amp;lt; /* this should go into the private header as well*/
&lt;br&gt;&amp;lt; %}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; %{
&lt;br&gt;&amp;lt; #include &amp;lt;stdio.h&amp;gt;
&lt;br&gt;&amp;lt; #include &amp;lt;gtk/gtk.h&amp;gt;
&lt;br&gt;&amp;lt; /* the next line is not mandatory, but if gob finds an include in one of
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp;the %{ %} sections above the class definitions, it will not put it in
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp;the file itself. &amp;nbsp;So you can this way select where the include file is
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp;at */
&lt;br&gt;&amp;lt; #include &amp;quot;test-object.h&amp;quot;
&lt;br&gt;&amp;lt; #include &amp;quot;test-object-private.h&amp;quot;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; /* this is to test if the lexer won't get confused by requires inside
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp;some c code
&lt;br&gt;&amp;lt; requires 99.99.99
&lt;br&gt;&amp;lt; */
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; static void jjjj(void);
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; #define _(x) x
&lt;br&gt;---
&lt;br&gt;&amp;gt; #include &amp;lt;glib/garray.h&amp;gt;
&lt;br&gt;&amp;gt; #include &amp;quot;real-compressor.h&amp;quot;
&lt;br&gt;47,629c7
&lt;br&gt;&amp;lt; %h{
&lt;br&gt;&amp;lt; enum _gob__enum_t {
&lt;br&gt;&amp;lt; 	BUDLIKY, BUDLIKY2
&lt;br&gt;&amp;lt; };
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; struct _gob__struct_t {
&lt;br&gt;&amp;lt; 	int i, x, y, z;
&lt;br&gt;&amp;lt; };
&lt;br&gt;&amp;lt; union _gob__union_t {
&lt;br&gt;&amp;lt; 	int i, x, y, z;
&lt;br&gt;&amp;lt; };
&lt;br&gt;&amp;lt; void bubu(void);
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; /* Fake boxed */
&lt;br&gt;&amp;lt; #define PACKAGE_TYPE_BOXED 1
&lt;br&gt;&amp;lt; typedef void * PackageBoxed;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; %}
&lt;br&gt;&amp;lt; %header{
&lt;br&gt;&amp;lt; /* this should be in the header, just under bubu prototype */
&lt;br&gt;&amp;lt; #define TEST_ARRAY 5
&lt;br&gt;&amp;lt; %}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; enum LAME_CLIENT {
&lt;br&gt;&amp;lt; 	IS_CONNECTED,
&lt;br&gt;&amp;lt; 	NONE = 9,
&lt;br&gt;&amp;lt; 	LAST
&lt;br&gt;&amp;lt; } Test:Enum;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; flags BUGA_BUGA {
&lt;br&gt;&amp;lt; 	ONE,
&lt;br&gt;&amp;lt; 	TWO,
&lt;br&gt;&amp;lt; 	MANY,
&lt;br&gt;&amp;lt; } Some:Flags;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; error TEST_OBJECT_ERROR {
&lt;br&gt;&amp;lt; 	BAD_THIS,
&lt;br&gt;&amp;lt; 	BAD_THAT
&lt;br&gt;&amp;lt; } Test:Object:Error;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; enum BUBLE {
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; KEIN = 0,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; STANDARD,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; STANDARD_RO,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; KOMPLETT,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ALT
&lt;br&gt;&amp;lt; } Buble:Enum;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; class Test:Object from /*G:Object*/ Gtk:Container
&lt;br&gt;&amp;lt; 	(interface Gtk:Tree:Model)
&lt;br&gt;&amp;lt; 	/* We can add more interfaces by adding more lines like the above */
&lt;br&gt;&amp;lt; 	/* Note that there must exist a GtkTreeModelIface structure */
&lt;br&gt;&amp;lt; {
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	/* function implemented for the Gtk:Tree:Model interface */
&lt;br&gt;&amp;lt; 	interface Gtk:Tree:Model
&lt;br&gt;&amp;lt; 	private GtkTreeModelFlags
&lt;br&gt;&amp;lt; 	get_flags (Gtk:Tree:Model *self (check null type))
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		/* FOO */
&lt;br&gt;&amp;lt; 		return (GtkTreeModelFlags)0;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	public int test_array[TEST_ARRAY];
&lt;br&gt;&amp;lt; 	public int i;
&lt;br&gt;&amp;lt; 	argument INT i set { self-&amp;gt;i = ARG; } get { ARG = self-&amp;gt;i; } ;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	public int testing = 1;
&lt;br&gt;&amp;lt; 	argument INT testing link;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	public char * testingstring = {g_strdup(&amp;quot;test&amp;quot;)}
&lt;br&gt;&amp;lt; 		destroywith g_free;
&lt;br&gt;&amp;lt; 	argument POINTER testingstring stringlink;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	public Test:Object * testingobj
&lt;br&gt;&amp;lt; 		unrefwith g_object_unref;
&lt;br&gt;&amp;lt; 	argument POINTER testingobj objectlink;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	public Test:Object * testingobjllll
&lt;br&gt;&amp;lt; 		unrefwith gtk_widget_destroy;
&lt;br&gt;&amp;lt; 	argument POINTER testingobjllll objectlink;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	public Test:Object * testingobjfoo
&lt;br&gt;&amp;lt; 		unref { if (VAR) g_object_unref (VAR); };
&lt;br&gt;&amp;lt; 	argument POINTER testingobjfoo objectlink;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	classwide int foo = 20;
&lt;br&gt;&amp;lt; 	argument INT foo link;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	public G:Object * testingobj2
&lt;br&gt;&amp;lt; 		destroy {
&lt;br&gt;&amp;lt; 			if(VAR)
&lt;br&gt;&amp;lt; 				g_object_unref(G_OBJECT(VAR));
&lt;br&gt;&amp;lt; 		};
&lt;br&gt;&amp;lt; 	argument POINTER (type G:Object *) testingobj2 objectlink;
&lt;br&gt;&amp;lt; 	
&lt;br&gt;&amp;lt; 	argument POINTER (type GObject *) some_object
&lt;br&gt;&amp;lt; 		set { /* set some_object */ }
&lt;br&gt;&amp;lt; 		get { /* get some_object */
&lt;br&gt;&amp;lt; 			ARG=NULL; };
&lt;br&gt;&amp;lt; 	argument (CONSTRUCT) LONG (type long) write_only_long
&lt;br&gt;&amp;lt; 		set { /* set write_only_long */ };
&lt;br&gt;&amp;lt; 	argument POINTER (type char *) read_only_string
&lt;br&gt;&amp;lt; 		get { /* get readonly_long */
&lt;br&gt;&amp;lt; 			ARG = g_strdup(&amp;quot;BLAH&amp;quot;); };
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	private char a_property;
&lt;br&gt;&amp;lt; 	property CHAR a_property
&lt;br&gt;&amp;lt; 		(nick = _(&amp;quot;Nick&amp;quot;),
&lt;br&gt;&amp;lt; 		 blurb = _(&amp;quot;Blurb&amp;quot;),
&lt;br&gt;&amp;lt; 		 minimum = 'a',
&lt;br&gt;&amp;lt; 		 maximum = 'Z',
&lt;br&gt;&amp;lt; 		 default_value = 'C',
&lt;br&gt;&amp;lt; 		 export)
&lt;br&gt;&amp;lt; 		set { self-&amp;gt;_priv-&amp;gt;a_property = g_value_get_char (VAL); }
&lt;br&gt;&amp;lt; 		get { g_value_set_char (VAL, self-&amp;gt;_priv-&amp;gt;a_property); };
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	property OBJECT foobarblahllll1
&lt;br&gt;&amp;lt; 		(nick = &amp;quot;xxxxxxx1&amp;quot;,
&lt;br&gt;&amp;lt; 		 blurb = &amp;quot;yyyyyy&amp;quot;,
&lt;br&gt;&amp;lt; 		 object_type = Gtk:Button)
&lt;br&gt;&amp;lt; 		get { /* FOO1 */ };
&lt;br&gt;&amp;lt; 	property OBJECT foobarblahllll2
&lt;br&gt;&amp;lt; 		(nick = &amp;quot;xxxxxxx2&amp;quot;,
&lt;br&gt;&amp;lt; 		 blurb = &amp;quot;yyyyyy&amp;quot;,
&lt;br&gt;&amp;lt; 		 object_type = G:Object)
&lt;br&gt;&amp;lt; 		set { /* FOO2 */ };
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	private double dblnum;
&lt;br&gt;&amp;lt; 	property DOUBLE dblnum
&lt;br&gt;&amp;lt; 		(nick = _(&amp;quot;dblnum&amp;quot;),
&lt;br&gt;&amp;lt; 		 blurb = _(&amp;quot;dblnum&amp;quot;),
&lt;br&gt;&amp;lt; 		 minimum = 0.1,
&lt;br&gt;&amp;lt; 		 maximum = 99.1,
&lt;br&gt;&amp;lt; 		 default_value = 0.3,
&lt;br&gt;&amp;lt; 		 flags = CONSTRUCT|CONSTRUCT_ONLY,
&lt;br&gt;&amp;lt; 		 export,
&lt;br&gt;&amp;lt; 		 link);
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	private char *b_property;
&lt;br&gt;&amp;lt; 	property STRING b_property
&lt;br&gt;&amp;lt; 		(nick = _(&amp;quot;Nick b&amp;quot;),
&lt;br&gt;&amp;lt; 		 blurb = _(&amp;quot;Blurb b&amp;quot;),
&lt;br&gt;&amp;lt; 		 default_value = &amp;quot;default&amp;quot;,
&lt;br&gt;&amp;lt; 		 type = char *,
&lt;br&gt;&amp;lt; 		 flags = CONSTRUCT,
&lt;br&gt;&amp;lt; 		 export,
&lt;br&gt;&amp;lt; 		 link);
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	private Test:Object *objectproperty;
&lt;br&gt;&amp;lt; 	property OBJECT objectproperty (nick &amp;nbsp; = &amp;quot;object&amp;quot;,
&lt;br&gt;&amp;lt; 				blurb &amp;nbsp;= &amp;quot;obj property&amp;quot;,
&lt;br&gt;&amp;lt; 				object_type = Test:Object,
&lt;br&gt;&amp;lt; 				link);
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	private Test:Enum enum_property;
&lt;br&gt;&amp;lt; 	property ENUM enum_property (nick &amp;nbsp; = &amp;quot;enumprop&amp;quot;,
&lt;br&gt;&amp;lt; 				blurb &amp;nbsp;= &amp;quot;enumprop&amp;quot;,
&lt;br&gt;&amp;lt; 				enum_type = Test:Enum,
&lt;br&gt;&amp;lt; 				link);
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	private Some:Flags flags_property;
&lt;br&gt;&amp;lt; 	property FLAGS flags_property (nick &amp;nbsp; = &amp;quot;flagsprop&amp;quot;,
&lt;br&gt;&amp;lt; 				blurb &amp;nbsp;= &amp;quot;flagsprop&amp;quot;,
&lt;br&gt;&amp;lt; 				flags_type = Some:Flags,
&lt;br&gt;&amp;lt; 				link);
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	 &amp;nbsp;private PackageBoxed prop;
&lt;br&gt;&amp;lt; 	 &amp;nbsp;property BOXED prop (nick=&amp;quot;prop&amp;quot;,
&lt;br&gt;&amp;lt; 			 &amp;nbsp; &amp;nbsp; &amp;nbsp; blurb=&amp;quot;prop&amp;quot;,
&lt;br&gt;&amp;lt; 			 &amp;nbsp; &amp;nbsp; &amp;nbsp; boxed_type=Package:Boxed,
&lt;br&gt;&amp;lt; 			 &amp;nbsp; &amp;nbsp; &amp;nbsp; link);
&lt;br&gt;&amp;lt; 	 &amp;nbsp;/* testing old semantics */
&lt;br&gt;&amp;lt; 	 &amp;nbsp;private PackageBoxed prop2;
&lt;br&gt;&amp;lt; 	 &amp;nbsp;property BOXED prop2 (nick=&amp;quot;prop2&amp;quot;,
&lt;br&gt;&amp;lt; 			 &amp;nbsp; &amp;nbsp; &amp;nbsp; blurb=&amp;quot;prop2&amp;quot;,
&lt;br&gt;&amp;lt; 			 &amp;nbsp; &amp;nbsp; &amp;nbsp; boxed_type=PACKAGE_TYPE_BOXED,
&lt;br&gt;&amp;lt; 			 &amp;nbsp; &amp;nbsp; &amp;nbsp; link);
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	private char ov_prop;
&lt;br&gt;&amp;lt; 	property CHAR ov_prop
&lt;br&gt;&amp;lt; 		(export,
&lt;br&gt;&amp;lt; 		 override)
&lt;br&gt;&amp;lt; 		set { self-&amp;gt;_priv-&amp;gt;ov_prop = g_value_get_char (VAL); }
&lt;br&gt;&amp;lt; 		get { g_value_set_char (VAL, self-&amp;gt;_priv-&amp;gt;ov_prop); };
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	private int j;
&lt;br&gt;&amp;lt; 	public GObject * h;
&lt;br&gt;&amp;lt; 	public char *bleh;
&lt;br&gt;&amp;lt; 	public double array[23][18];
&lt;br&gt;&amp;lt; 	protected unsigned long int wagawaga;
&lt;br&gt;&amp;lt; 	public int wagawaga_should_be_after_this_in_the_header;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	init(object) {
&lt;br&gt;&amp;lt; 		object-&amp;gt;i=0;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	class_init(klass);
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	/**
&lt;br&gt;&amp;lt; 	 * new:
&lt;br&gt;&amp;lt; 	 * @j: foo
&lt;br&gt;&amp;lt; 	 *
&lt;br&gt;&amp;lt; 	 * budliky budliky
&lt;br&gt;&amp;lt; 	 *
&lt;br&gt;&amp;lt; 	 * Returns: new object
&lt;br&gt;&amp;lt; 	 */
&lt;br&gt;&amp;lt; 	public GObject * new(int j (check &amp;gt; 0)) {
&lt;br&gt;&amp;lt; 		GObject *ret;
&lt;br&gt;&amp;lt; 		ret = G_OBJECT (GET_NEW);
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 		SELF(ret)-&amp;gt;_priv-&amp;gt;j = j;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 		return ret;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	private int blah(self, G:Object * wid (check null type),
&lt;br&gt;&amp;lt; 			 int h (check &amp;gt; 0)) onerror -1 {
&lt;br&gt;&amp;lt; 		g_object_set (G_OBJECT (self),
&lt;br&gt;&amp;lt; 			 &amp;nbsp; &amp;nbsp; &amp;nbsp;TEST_OBJECT_PROP_I (99),
&lt;br&gt;&amp;lt; 			 &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL);
&lt;br&gt;&amp;lt; 		return h;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	/**
&lt;br&gt;&amp;lt; 	 * bleh:
&lt;br&gt;&amp;lt; 	 * @self: foo
&lt;br&gt;&amp;lt; 	 * @wid: foo
&lt;br&gt;&amp;lt; 	 * @h: foo
&lt;br&gt;&amp;lt; 	 *
&lt;br&gt;&amp;lt; 	 * budliky budliky 2
&lt;br&gt;&amp;lt; 	 *
&lt;br&gt;&amp;lt; 	 * Returns: new object
&lt;br&gt;&amp;lt; 	 **/
&lt;br&gt;&amp;lt; 	signal last STRING (POINTER, INT)
&lt;br&gt;&amp;lt; 	char * bleh(self, G:Object * wid (check null type),
&lt;br&gt;&amp;lt; 		 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int h (check &amp;gt; 0)) {
&lt;br&gt;&amp;lt; 		return self_blah(self,wid,h) &amp;gt; 0 ? g_strdup (&amp;quot;foo&amp;quot;) : g_strdup (&amp;quot;bar&amp;quot;);
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	private
&lt;br&gt;&amp;lt; 	char *
&lt;br&gt;&amp;lt; 	test_handler (self, GObject *w, int h, gpointer data)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		data = w = NULL;
&lt;br&gt;&amp;lt; 		h = 0;
&lt;br&gt;&amp;lt; 			
&lt;br&gt;&amp;lt; 		return NULL;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	/**
&lt;br&gt;&amp;lt; 	 * gtk_weird_button_bleh2:
&lt;br&gt;&amp;lt; 	 * @self: foo
&lt;br&gt;&amp;lt; 	 * @wid: foo
&lt;br&gt;&amp;lt; 	 * @h: foo
&lt;br&gt;&amp;lt; 	 *
&lt;br&gt;&amp;lt; 	 * budliky budliky 3
&lt;br&gt;&amp;lt; 	 *
&lt;br&gt;&amp;lt; 	 * Returns: new object */
&lt;br&gt;&amp;lt; 	signal last INT (POINTER, INT)
&lt;br&gt;&amp;lt; 	int bleh2(self, const G:Object * wid (check null type),
&lt;br&gt;&amp;lt; 		 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int h (check &amp;gt; 0)) {
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 		test_object_connect__bleh (self, self_test_handler, NULL);
&lt;br&gt;&amp;lt; 		self_connect__bleh (self, self_test_handler, NULL);
&lt;br&gt;&amp;lt; 		test_object_connect_after__bleh (self, self_test_handler, NULL);
&lt;br&gt;&amp;lt; 		self_connect_after__bleh (self, self_test_handler, NULL);
&lt;br&gt;&amp;lt; 		test_object_connect_data__bleh (self, self_test_handler, NULL, NULL, 0);
&lt;br&gt;&amp;lt; 		self_connect_data__bleh (self, self_test_handler, NULL, NULL, 0);
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 		wid = NULL;
&lt;br&gt;&amp;lt; 		h = 0;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 		/* testing multiple marshaller support */
&lt;br&gt;&amp;lt; 		return 0;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	/* this should not get documented as it's nonstandard */
&lt;br&gt;&amp;lt; 	/**
&lt;br&gt;&amp;lt; 	 * bloh:
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	 ******/
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	/* Here we are testing how the gtk-doc extraction code error handeling
&lt;br&gt;&amp;lt; 	 &amp;nbsp; it should just ingore these */
&lt;br&gt;&amp;lt; 	/**
&lt;br&gt;&amp;lt; 	 &amp;nbsp;*/
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	/** */
&lt;br&gt;&amp;lt; 	/**
&lt;br&gt;&amp;lt; 	 *
&lt;br&gt;&amp;lt; 	 * bubu
&lt;br&gt;&amp;lt; 	 *********/
&lt;br&gt;&amp;lt; 	/**
&lt;br&gt;&amp;lt; 	 *
&lt;br&gt;&amp;lt; 	 * bubu
&lt;br&gt;&amp;lt; 	 **zblunk*******/
&lt;br&gt;&amp;lt; 	/**
&lt;br&gt;&amp;lt; 	 *
&lt;br&gt;&amp;lt; 	 * bubu
&lt;br&gt;&amp;lt; 	 *zblunk*******//**//**/
&lt;br&gt;&amp;lt; 	signal first NONE (NONE)
&lt;br&gt;&amp;lt; 	void bloh(self);
&lt;br&gt;&amp;lt; 	virtual void * bah(self, int h (check &amp;gt; 0)) onerror NULL defreturn 0 {
&lt;br&gt;&amp;lt; 		self_beh(self,h);
&lt;br&gt;&amp;lt; 		return NULL;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	virtual int beh(self, int h (check &amp;gt; 0));
&lt;br&gt;&amp;lt; 	override(Gtk:Container)
&lt;br&gt;&amp;lt; 	void add(Gtk:Container * self (check null type),
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Gtk:Widget * wid (check null type)) {
&lt;br&gt;&amp;lt; 		PARENT_HANDLER(self,wid);
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	override(G:Object)
&lt;br&gt;&amp;lt; 	void dispatch_properties_changed (G:Object &amp;nbsp; &amp;nbsp; &amp;nbsp;*object,
&lt;br&gt;&amp;lt; 					 &amp;nbsp;guint	 &amp;nbsp; n_pspecs,
&lt;br&gt;&amp;lt; 					 &amp;nbsp;GParamSpec &amp;nbsp;**pspecs)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		object = NULL;
&lt;br&gt;&amp;lt; 		n_pspecs = 0;
&lt;br&gt;&amp;lt; 		pspecs = NULL;
&lt;br&gt;&amp;lt; 		/* EKI! */
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	public int consttest(self, const gchar *text, ...)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		text = NULL;
&lt;br&gt;&amp;lt; 		return 25;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	public int consttest2(self, gchar const *text, ...)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		text = NULL;
&lt;br&gt;&amp;lt; 		return 25;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	public int consttest3(self, G:Object const *wid (check null type))
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		wid = NULL;
&lt;br&gt;&amp;lt; 		return 25;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	public int consttest4(const self)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		return 25;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	public int consttest5(self const)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		return 25;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	virtual int consttest6(const self)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		return 25;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	virtual int consttest7(self const)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		return 25;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	public int consttest8(self)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		Self const *selfconst1, *selfconst2;
&lt;br&gt;&amp;lt; 		selfconst1 = SELF_CONST(self);
&lt;br&gt;&amp;lt; 		selfconst2 = TEST_OBJECT_CONST(self);
&lt;br&gt;&amp;lt; 		return 25;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	public int consttest9(const self, int i, double b)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		b = 0.0;
&lt;br&gt;&amp;lt; 		i = 0;
&lt;br&gt;&amp;lt; 		return 25;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	public int consttest10(self const, int i, double b)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		b = 0.0;
&lt;br&gt;&amp;lt; 		i = 0;
&lt;br&gt;&amp;lt; 		return 25;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	signal private first NONE (NONE)
&lt;br&gt;&amp;lt; 	void googlegoogle(self)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		puts(&amp;quot;TEST1&amp;quot;);
&lt;br&gt;&amp;lt; 		self_googlegoogle2(self);
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	signal first private NONE (NONE)
&lt;br&gt;&amp;lt; 	void googlegoogle2(self)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		int array[5][8][9]={{{0}}};
&lt;br&gt;&amp;lt; 		Self *foo = self;
&lt;br&gt;&amp;lt; 		puts(&amp;quot;TEST2&amp;quot;);
&lt;br&gt;&amp;lt; 		self_testprivvirtual(foo, array);
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	private signal first NONE (NONE)
&lt;br&gt;&amp;lt; 	void googlegoogle3(self)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		puts(&amp;quot;TEST3&amp;quot;);
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	protected signal first NONE (NONE)
&lt;br&gt;&amp;lt; 	void googlegoogle4(self)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		puts(&amp;quot;TEST4&amp;quot;);
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	protected signal first NONE (NONE)
&lt;br&gt;&amp;lt; 	void googlegoogle_const1(const self)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		puts(&amp;quot;TEST4&amp;quot;);
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	protected signal first NONE (NONE)
&lt;br&gt;&amp;lt; 	void googlegoogle_const2(self const)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		puts(&amp;quot;TEST4&amp;quot;);
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	virtual private
&lt;br&gt;&amp;lt; 	void testprivvirtual(self, int some_array[5][8][9])
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		puts(&amp;quot;TEST3&amp;quot;);
&lt;br&gt;&amp;lt; 		self_googlegoogle(self);
&lt;br&gt;&amp;lt; 		if (some_array[0]) return;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	private virtual
&lt;br&gt;&amp;lt; 	void testprivvirtual2(self, const int some_array[5][8][9])
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		/* nothing here */
&lt;br&gt;&amp;lt; 		if (some_array[0]) return;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	public virtual
&lt;br&gt;&amp;lt; 	void testpublicvirtual(self, int const some_array[5][8][9])
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		/* nothing here */
&lt;br&gt;&amp;lt; 		if (some_array[0]) return;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	protected virtual
&lt;br&gt;&amp;lt; 	void testprotectedvirtual(self, int some_array[5][8][9])
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		/* nothing here */
&lt;br&gt;&amp;lt; 		if (some_array[0]) return;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 	signal first NONE (POINTER, ENUM)
&lt;br&gt;&amp;lt; 	void testarrsignal(self, long arr[8], Buble:Enum foo)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		/* foo */
&lt;br&gt;&amp;lt; 		arr[0] = 1;
&lt;br&gt;&amp;lt; 		foo = BUBLE_KEIN;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	/* testing empty func */
&lt;br&gt;&amp;lt; 	public void foofoofoo(self) {}
&lt;br&gt;&amp;lt; 	/* testing empty func 2 */
&lt;br&gt;&amp;lt; 	public void foofoofoo2(self);
&lt;br&gt;&amp;lt; 	/* testing empty func 3 */
&lt;br&gt;&amp;lt; 	public void foofoofoo3(self) { &amp;nbsp; }
&lt;br&gt;&amp;lt; 	/* testing empty func 4 */
&lt;br&gt;&amp;lt; 	public void foofoofoo4(self)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; //	override (Gtk:Widget)
&lt;br&gt;&amp;lt; //	int event(Gtk:Widget *self (check null type),
&lt;br&gt;&amp;lt; //		 &amp;nbsp;GdkEvent *event (check null)) onerror FALSE
&lt;br&gt;&amp;lt; //	{
&lt;br&gt;&amp;lt; //		int ret;
&lt;br&gt;&amp;lt; //		/* some code */
&lt;br&gt;&amp;lt; //		ret = PARENT_HANDLER(self,event);
&lt;br&gt;&amp;lt; //		/* some code */
&lt;br&gt;&amp;lt; //		return ret;
&lt;br&gt;&amp;lt; //	}
&lt;br&gt;&amp;lt; //	override(Gtk:Container)
&lt;br&gt;&amp;lt; //	void
&lt;br&gt;&amp;lt; //	remove(Gtk:Container * self (check null type),
&lt;br&gt;&amp;lt; //	 &amp;nbsp; &amp;nbsp; &amp;nbsp; Gtk:Widget * wid (check null type));
&lt;br&gt;&amp;lt; //
&lt;br&gt;&amp;lt; //	override(Gtk:Object)
&lt;br&gt;&amp;lt; //	void
&lt;br&gt;&amp;lt; //	destroy(Gtk:Object * self (check null type))
&lt;br&gt;&amp;lt; //	{
&lt;br&gt;&amp;lt; //		/* foo bar */
&lt;br&gt;&amp;lt; //		PARENT_HANDLER(self);
&lt;br&gt;&amp;lt; //	}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	protected
&lt;br&gt;&amp;lt; 	int foobar(self) {
&lt;br&gt;&amp;lt; 		/* just an empty function */
&lt;br&gt;&amp;lt; 		return 5;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	signal last NONE(CHAR,UCHAR,BOOLEAN,INT,UINT,LONG,ULONG,FLOAT,DOUBLE,
&lt;br&gt;&amp;lt; 			 STRING,ENUM,POINTER,OBJECT)
&lt;br&gt;&amp;lt; 	void
&lt;br&gt;&amp;lt; 	testargs(self, gchar a, guchar b, gboolean c, gint d, guint e, glong f,
&lt;br&gt;&amp;lt; 		 gulong g, gfloat h, gdouble i, gchar * j, gint k,
&lt;br&gt;&amp;lt; 		 gpointer o, GObject *p)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		h = i = k = 0;
&lt;br&gt;&amp;lt; 		a = b = c = d = e = f = g = 0;
&lt;br&gt;&amp;lt; 		o = p = (GObject *)NULL;
&lt;br&gt;&amp;lt; 		j = (char *)NULL;
&lt;br&gt;&amp;lt; 		/* ugh, testing casting */
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	public signal (NO_HOOKS) last INT (INT)
&lt;br&gt;&amp;lt; 	int testflags(self, int w (check &amp;gt; 0)) defreturn -99 {
&lt;br&gt;&amp;lt; 		/*foo*/
&lt;br&gt;&amp;lt; 		return w;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	/* testing NONE */
&lt;br&gt;&amp;lt; 	signal BOOLEAN (NONE)
&lt;br&gt;&amp;lt; 	gboolean
&lt;br&gt;&amp;lt; 	test_none_thing (self)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		return FALSE;
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	/* some more enum testing */
&lt;br&gt;&amp;lt; 	public BubleEnum buble;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; property ENUM buble
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (nick = &amp;quot;Buble&amp;quot;,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;blurb = &amp;quot;Buble&amp;quot;,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;enum_type = Buble:Enum,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;default_value = BUBLE_STANDARD,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;link, export);
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	/* testing types */
&lt;br&gt;&amp;lt; 	public int t1;
&lt;br&gt;&amp;lt; 	public long int t2;
&lt;br&gt;&amp;lt; 	public int long t3;
&lt;br&gt;&amp;lt; 	public int long const t4;
&lt;br&gt;&amp;lt; 	public const int long t5;
&lt;br&gt;&amp;lt; 	public const char * const t6;
&lt;br&gt;&amp;lt; 	public char const * const t7;
&lt;br&gt;&amp;lt; 	public enum _gob__enum_t const * const t8;
&lt;br&gt;&amp;lt; 	public union _gob__union_t t9;
&lt;br&gt;&amp;lt; 	public union _gob__union_t * const * const * t10;
&lt;br&gt;&amp;lt; 	public struct _gob__struct_t * const * const * t11;
&lt;br&gt;&amp;lt; 	public const struct _gob__struct_t * const * const * t13;
&lt;br&gt;&amp;lt; 	public const enum _gob__enum_t * const * const * t14;
&lt;br&gt;&amp;lt; 	public enum _gob__enum_t t15;
&lt;br&gt;&amp;lt; 	public gchar const t16;
&lt;br&gt;&amp;lt; 	public const gchar * const t17;
&lt;br&gt;&amp;lt; 	public const gchar t18;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	/* testing method with no arguments */
&lt;br&gt;&amp;lt; 	public void method_with_no_arguments (void)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		/* FOO */
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	/* testing calling the above method */
&lt;br&gt;&amp;lt; 	public void foo (self) {
&lt;br&gt;&amp;lt; 		self_method_with_no_arguments ();
&lt;br&gt;&amp;lt; 	}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	/* this is to test custom get_type */
&lt;br&gt;&amp;lt; 	/*public GtkType
&lt;br&gt;&amp;lt; 	get_type (void)
&lt;br&gt;&amp;lt; 	{
&lt;br&gt;&amp;lt; 		static guint type = 0;
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 		if ( ! type) {
&lt;br&gt;&amp;lt; 			static const GtkTypeInfo info = {
&lt;br&gt;&amp;lt; 				&amp;quot;GtkWeirdButton&amp;quot;,
&lt;br&gt;&amp;lt; 				sizeof (GtkWeirdButton),
&lt;br&gt;&amp;lt; 				sizeof (GtkWeirdButtonClass),
&lt;br&gt;&amp;lt; 				(GtkClassInitFunc) gtk_weird_button_class_init,
&lt;br&gt;&amp;lt; 				(GtkObjectInitFunc) gtk_weird_button_init,
&lt;br&gt;&amp;lt; 				NULL,
&lt;br&gt;&amp;lt; 				NULL,
&lt;br&gt;&amp;lt; 				(GtkClassInitFunc) NULL
&lt;br&gt;&amp;lt; 			};
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 			type = gtk_type_unique (gtk_button_get_type(), &amp;info);
&lt;br&gt;&amp;lt; 		}
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 		return type;
&lt;br&gt;&amp;lt; 	}*/
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 	/* testing empty statements */
&lt;br&gt;&amp;lt; 	;
&lt;br&gt;&amp;lt; 	;
&lt;br&gt;&amp;lt; 	;
&lt;br&gt;&amp;lt; }
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; %{
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; static void
&lt;br&gt;&amp;lt; jjjj(void)
&lt;br&gt;---
&lt;br&gt;&amp;gt; interface CompLearn:Real:Compressor from G:Type:Interface
&lt;br&gt;630a9,39
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;nbsp; public G:Object *
&lt;br&gt;&amp;gt; &amp;nbsp; new(void) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; GObject *ret = (GObject *) GET_NEW;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; return G_OBJECT (ret);
&lt;br&gt;&amp;gt; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; public GString *
&lt;br&gt;&amp;gt; &amp;nbsp; compress(CompLearnRealCompressor *rc,const GString *input);
&lt;br&gt;&amp;gt; &amp;nbsp; public GString *
&lt;br&gt;&amp;gt; &amp;nbsp; decompress(CompLearnRealCompressor *rc,const GString *input);
&lt;br&gt;&amp;gt; &amp;nbsp; public GString *
&lt;br&gt;&amp;gt; &amp;nbsp; canonical_extension(CompLearnRealCompressor *rc);
&lt;br&gt;&amp;gt; public GString *
&lt;br&gt;&amp;gt; &amp;nbsp; blurb(CompLearnRealCompressor *rc);
&lt;br&gt;&amp;gt; public GString *
&lt;br&gt;&amp;gt; &amp;nbsp; name(CompLearnRealCompressor *rc);
&lt;br&gt;&amp;gt; public GString *
&lt;br&gt;&amp;gt; &amp;nbsp; compressor_version(CompLearnRealCompressor *rc);
&lt;br&gt;&amp;gt; public GString *
&lt;br&gt;&amp;gt; &amp;nbsp; binding_version(CompLearnRealCompressor *rc);
&lt;br&gt;&amp;gt; public gdouble
&lt;br&gt;&amp;gt; &amp;nbsp; compressed_size(CompLearnRealCompressor *rc, const GString *input);
&lt;br&gt;&amp;gt; public gboolean
&lt;br&gt;&amp;gt; &amp;nbsp; is_just_size(CompLearnRealCompressor *rc);
&lt;br&gt;&amp;gt; public gboolean
&lt;br&gt;&amp;gt; &amp;nbsp; is_operational(CompLearnRealCompressor *self);
&lt;br&gt;&amp;gt; public gboolean
&lt;br&gt;&amp;gt; &amp;nbsp; is_decompressible(CompLearnRealCompressor *rc, const GString *input);
&lt;br&gt;&amp;gt; public gboolean
&lt;br&gt;&amp;gt; &amp;nbsp; is_private_property(CompLearnRealCompressor *rc, const char *input);
&lt;br&gt;&amp;gt; public guint64
&lt;br&gt;&amp;gt; &amp;nbsp; window_size(CompLearnRealCompressor *rc);
&lt;/div&gt;632,639d40
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; void
&lt;br&gt;&amp;lt; bubu(void)
&lt;br&gt;&amp;lt; {
&lt;br&gt;&amp;lt; 	jjjj();
&lt;br&gt;&amp;lt; }
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; %}
&lt;br&gt;diff -r gob2-2.0.14/src/treefuncs.c gobnew/src/treefuncs.c
&lt;br&gt;108a109
&lt;br&gt;&amp;gt; 	QUARK_isinterface,
&lt;br&gt;216a218
&lt;br&gt;&amp;gt; 	g_hash_table_insert (quark_ht, &amp;quot;isinterface&amp;quot;, GINT_TO_POINTER (QUARK_isinterface));
&lt;br&gt;365a368
&lt;br&gt;&amp;gt; 	new-&amp;gt;isinterface = self-&amp;gt;isinterface;
&lt;br&gt;957a961,965
&lt;br&gt;&amp;gt; 		case QUARK_isinterface: {
&lt;br&gt;&amp;gt; 			gboolean isinterface = va_arg (__ap, gboolean);
&lt;br&gt;&amp;gt; 			self-&amp;gt;isinterface = isinterface;
&lt;br&gt;&amp;gt; 			break;
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;diff -r gob2-2.0.14/src/treefuncs.def gobnew/src/treefuncs.def
&lt;br&gt;59c59,60
&lt;br&gt;&amp;lt; &amp;nbsp; BOOL		abstract # if G_TYPE_FLAG_ABSTRACT should be used
&lt;br&gt;---
&lt;br&gt;&amp;gt; &amp;nbsp; BOOL		abstract &amp;nbsp; &amp;nbsp;# if G_TYPE_FLAG_ABSTRACT should be used
&lt;br&gt;&amp;gt; &amp;nbsp; BOOL		isinterface # if it is an interface instead of a class
&lt;br&gt;diff -r gob2-2.0.14/src/treefuncs.h gobnew/src/treefuncs.h
&lt;br&gt;121a122
&lt;br&gt;&amp;gt; 	gboolean isinterface;
&lt;br&gt;Only in gobnew: stamp-h
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;tt&gt;[second-interface-u.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;Only in gobnew: config.h
&lt;br&gt;Only in gobnew: config.log
&lt;br&gt;Only in gobnew: config.status
&lt;br&gt;Common subdirectories: gob2-2.0.14/debian and gobnew/debian
&lt;br&gt;Common subdirectories: gob2-2.0.14/doc and gobnew/doc
&lt;br&gt;Common subdirectories: gob2-2.0.14/examples and gobnew/examples
&lt;br&gt;Only in gobnew: Makefile
&lt;br&gt;Only in gobnew: o
&lt;br&gt;Common subdirectories: gob2-2.0.14/src and gobnew/src
&lt;br&gt;Only in gobnew: stamp-h
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=10292584&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/new-version-of-interface-patch-tp10292584p10292584.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-10264753</id>
	<title>delays in responding</title>
	<published>2007-04-30T23:09:14Z</published>
	<updated>2007-04-30T23:09:14Z</updated>
	<author>
		<name>Jiri Lebl</name>
	</author>
	<content type="html">&lt;br&gt;Hi,
&lt;br&gt;To all that have emailed the mailing list recently and I have not responded.
&lt;br&gt;The mailing list was not broken, but I'm very busy at the moment. &amp;nbsp;I just
&lt;br&gt;defended my phd thesis, am in the process of moving to illinois, and have
&lt;br&gt;lots of work. &amp;nbsp;I see there have been some recent new activity in the form of
&lt;br&gt;patches to gob, I will look at all of them as I can hopefully in the next
&lt;br&gt;week. &amp;nbsp;Apply those that merit it and perhaps make a new release in the near
&lt;br&gt;future.
&lt;br&gt;&lt;br&gt;George
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;George &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=10264753&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jirka@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;If Christ were here now there is one thing he would not be - a Christian.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-- Mark Twain
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=10264753&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/delays-in-responding-tp10264753p10264753.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-10234043</id>
	<title>Circular includes</title>
	<published>2007-04-28T09:22:00Z</published>
	<updated>2007-04-28T09:22:00Z</updated>
	<author>
		<name>Patrik Fimml-3</name>
	</author>
	<content type="html">Hello,
&lt;br&gt;&lt;br&gt;I just discovered gob as a great thing hopefully simplifying my GObject
&lt;br&gt;programming a lot. &amp;nbsp;There's just one thing that seems awkward to me: the
&lt;br&gt;__TYPEDEF_*__ approach to circular type dependencies. &amp;nbsp;In hand-written
&lt;br&gt;classes, I usually just put the typedefs before the includes—e.g.
&lt;br&gt;instead of
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;begin %h code&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #include &amp;quot;another-class.h&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;end %h code&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [...]
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #ifndef __TYPEDEF_A_CLASS__
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #define __TYPEDEF_A_CLASS__
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; typedef struct _aClass aClass;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #endif
&lt;br&gt;&lt;br&gt;I would suggest
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; typedef struct _aClass aClass;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;begin %h code&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #include &amp;quot;another-class.h&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;end %h code&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;and circular includes would resolve comfortably. &amp;nbsp;Is there a reason why
&lt;br&gt;gob2 doesn't do it like that?
&lt;br&gt;&lt;br&gt;&lt;br&gt;Kind regards,
&lt;br&gt;Patrik
&lt;br&gt;&lt;br /&gt; &lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=10234043&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;signature.asc&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/10234043/0/signature.asc&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Circular-includes-tp10234043p10234043.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-10125826</id>
	<title>Re: introduction, gob2 interface patch, misc</title>
	<published>2007-04-22T05:46:36Z</published>
	<updated>2007-04-22T05:46:36Z</updated>
	<author>
		<name>Rudi Cilibrasi, Ph.D.</name>
	</author>
	<content type="html">Sure; it is attached.&amp;nbsp; I hope we can get this patch into something useful.&lt;br&gt;Cheers,&lt;br&gt;&lt;br&gt;Rudi&lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;span class=&quot;gmail_quote&quot;&gt;On 4/22/07, &lt;b class=&quot;gmail_sendername&quot;&gt;Behdad Esfahbod&lt;/b&gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=10125826&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;behdad@...&lt;/a&gt;&amp;gt; wrote:&lt;/span&gt;&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;On Sun, 2007-04-22 at 05:52 -0400, Rudi Cilibrasi, Ph.D
. wrote:&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi everybody,&lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt; I have recently started learning about GObject, GType, and DBus.&amp;nbsp;&amp;nbsp;It&lt;br&gt;&amp;gt; is a nice system and seems very well&lt;br&gt;&amp;gt; designed.&amp;nbsp;&amp;nbsp;But it is a bit rough and so I was led to find Gob2.&amp;nbsp;&amp;nbsp;It
&lt;br&gt;&amp;gt; seems like just about exactly what I needed&lt;br&gt;&amp;gt; for my purposes and so I wanted to use it but I found one small&lt;br&gt;&amp;gt; problem: no interface support.&amp;nbsp;&amp;nbsp;I have spent&lt;br&gt;&amp;gt; some time trying to add interface support to gob2.&amp;nbsp;&amp;nbsp;Since I have very
&lt;br&gt;&amp;gt; little experience with GType it is a bit&lt;br&gt;&amp;gt; challenging for me, however I think I have made some good progress.&lt;br&gt;&amp;gt; At this point I have a patch and wanted&lt;br&gt;&amp;gt; to find out if anybody else is interested.&amp;nbsp;&amp;nbsp;I think it is reasonably
&lt;br&gt;&amp;gt; close to useful but would like more experienced&lt;br&gt;&amp;gt; GObject opinions on the matter (maybe help finish whatever is still&lt;br&gt;&amp;gt; broken) before I move on to the next part of&lt;br&gt;&amp;gt; my project. I&amp;nbsp;&amp;nbsp;would also like to eventually get this functionality
&lt;br&gt;&amp;gt; into the main Gob2 source base if we can figure&lt;br&gt;&amp;gt; out how to properly clean it up.&amp;nbsp;&amp;nbsp;I had a look at the mailing list&lt;br&gt;&amp;gt; archives and it seems they might be broken; or&lt;br&gt;&amp;gt; is it just otherwise low activity?&amp;nbsp;&amp;nbsp;I attach the patch in this email.
&lt;br&gt;&amp;gt; Best regards,&lt;/div&gt;&lt;br&gt;Nice work.&amp;nbsp;&amp;nbsp;Can you send the patch again, producing it with diff -u&lt;br&gt;instead?&lt;br&gt;&lt;br&gt;behdad&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;gt; Rudi&lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt; --&lt;br&gt;&amp;gt; Democracy is two wolves and a sheep deciding what to eat for lunch.
&lt;br&gt;&amp;gt; Liberty is a well-armed sheep contesting the vote.&lt;br&gt;--&lt;br&gt;behdad&lt;br&gt;&lt;a href=&quot;http://behdad.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://behdad.org/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;quot;Those who would give up Essential Liberty to purchase a little&lt;br&gt; Temporary Safety, deserve neither Liberty nor Safety.&amp;quot;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-- Benjamin Franklin, 1759&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;&lt;br clear=&quot;all&quot;&gt;&lt;br&gt;-- &lt;br&gt;Democracy is two wolves and a sheep deciding what to eat for lunch.&lt;br&gt;Liberty is a well-armed sheep contesting the vote.
&lt;br /&gt;&lt;tt&gt;[interface-gob2u-2.0.14.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;Only in gob2-2.0.14/src: lexer.c
&lt;br&gt;diff -u gob2-2.0.14/src/lexer.l gobnew/src/lexer.l
&lt;br&gt;--- gob2-2.0.14/src/lexer.l	2005-07-22 20:50:37.000000000 +0200
&lt;br&gt;+++ gobnew/src/lexer.l	2007-04-22 11:45:14.000000000 +0200
&lt;br&gt;@@ -405,6 +405,19 @@
&lt;br&gt;&amp;nbsp;&amp;lt;C_CODE&amp;gt;.	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;&amp;lt;C_CODE&amp;gt;\n	{ add_to_cbuf(yytext); }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+interface		{
&lt;br&gt;+			static int found_classes = 0;
&lt;br&gt;+			look_for_includes = 2;
&lt;br&gt;+			BEGIN(CLASS_CODE);
&lt;br&gt;+
&lt;br&gt;+			if(++found_classes &amp;gt; 1) {
&lt;br&gt;+				error_print(GOB_ERROR, line_no,
&lt;br&gt;+					 &amp;nbsp; &amp;nbsp;&amp;quot;Only one interface per file allowed&amp;quot;);
&lt;br&gt;+			}
&lt;br&gt;+
&lt;br&gt;+			return INTERFACE;
&lt;br&gt;+		}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;class		{
&lt;br&gt;&amp;nbsp;			static int found_classes = 0;
&lt;br&gt;&amp;nbsp;			look_for_includes = 2;
&lt;br&gt;diff -u gob2-2.0.14/src/main.c gobnew/src/main.c
&lt;br&gt;--- gob2-2.0.14/src/main.c	2006-01-05 19:05:45.000000000 +0100
&lt;br&gt;+++ gobnew/src/main.c	2007-04-22 11:45:14.000000000 +0200
&lt;br&gt;@@ -1065,7 +1065,28 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	/*char *chunk_size = ((Class*)class)-&amp;gt;chunk_size;*/
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	out_printf(out,
&lt;br&gt;+ &amp;nbsp;if (((Class *)class)-&amp;gt;isinterface)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;out_printf(out,
&lt;br&gt;+		 &amp;nbsp; &amp;quot;GType\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;%s_get_type (void)\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;{\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;\tstatic GType type = 0;\n\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;\tif ___GOB_UNLIKELY(type == 0) {\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;\t\tstatic const GTypeInfo info = {\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;\t\t\tsizeof (%sClass),\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;\t\t\t(GBaseInitFunc) %s_class_init,\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;\t\t\t(GBaseFinalizeFunc) NULL,\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;\t\t\t(GClassInitFunc) NULL,\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;\t\t\t(GClassFinalizeFunc) NULL,\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;\t\t\tNULL /* class_data */,\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;\t\t\t0,\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;\t\t\t0,\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;\t\t\tNULL,\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;\t\t\tNULL\n&amp;quot;
&lt;br&gt;+		 &amp;nbsp; &amp;quot;\t\t};\n\n&amp;quot;,
&lt;br&gt;+		 &amp;nbsp; funcbase, typebase, funcbase);
&lt;br&gt;+ &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;out_printf(out,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;quot;GType\n&amp;quot;
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;quot;%s_get_type (void)\n&amp;quot;
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;quot;{\n&amp;quot;
&lt;br&gt;@@ -2397,8 +2418,13 @@
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;		} else
&lt;br&gt;&amp;nbsp;			continue;
&lt;br&gt;-
&lt;br&gt;-		if(m-&amp;gt;cbuf) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (c-&amp;gt;isinterface) {
&lt;br&gt;+			out_printf(out, &amp;quot; {\n&amp;quot;);
&lt;br&gt;+			out_printf(out, &amp;quot; %s_GET_CLASS (self)-&amp;gt;%s (self);&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; macrobase, m-&amp;gt;id);
&lt;br&gt;+			out_printf(out, &amp;quot; }\n&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+		if(!c-&amp;gt;isinterface &amp;&amp; m-&amp;gt;cbuf) {
&lt;br&gt;&amp;nbsp;			out_printf(out, &amp;quot; {\n&amp;quot;);
&lt;br&gt;&amp;nbsp;			out_addline_infile(out, m-&amp;gt;ccode_line);
&lt;br&gt;&amp;nbsp;			out_printf(out, &amp;quot;%s\n&amp;quot;, m-&amp;gt;cbuf);
&lt;br&gt;Only in gobnew/src: .main.c.swp
&lt;br&gt;Only in gobnew/src: Makefile
&lt;br&gt;Only in gobnew/src: o
&lt;br&gt;Only in gob2-2.0.14/src: parse.c
&lt;br&gt;Only in gob2-2.0.14/src: parse.h
&lt;br&gt;diff -u gob2-2.0.14/src/parse.y gobnew/src/parse.y
&lt;br&gt;--- gob2-2.0.14/src/parse.y	2005-12-16 20:11:20.000000000 +0100
&lt;br&gt;+++ gobnew/src/parse.y	2007-04-22 11:45:14.000000000 +0200
&lt;br&gt;@@ -45,6 +45,7 @@
&lt;br&gt;&amp;nbsp;static GList *error_vals = NULL;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static gboolean abstract = FALSE;
&lt;br&gt;+static gboolean isinterface = FALSE;
&lt;br&gt;&amp;nbsp;static char *chunk_size = NULL;
&lt;br&gt;&amp;nbsp;static char *bonobo_object_class = NULL;
&lt;br&gt;&amp;nbsp;static int glade_xml = FALSE;
&lt;br&gt;@@ -673,7 +674,7 @@
&lt;br&gt;&amp;nbsp;	int sigtype;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-%token CLASS FROM
&lt;br&gt;+%token CLASS INTERFACE FROM
&lt;br&gt;&amp;nbsp;%token CONST VOID STRUCT UNION ENUM THREEDOTS
&lt;br&gt;&amp;nbsp;%token SIGNED UNSIGNED LONG SHORT INT FLOAT DOUBLE CHAR
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -686,10 +687,14 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;%%
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-prog:		ccodes class ccodes	{ ; }
&lt;br&gt;-	|	class ccodes		{ ; }
&lt;br&gt;-	|	ccodes class		{ ; }
&lt;br&gt;-	|	class			{ ; }
&lt;br&gt;+prog:		ccodes iclass ccodes	{ ; }
&lt;br&gt;+	|	iclass ccodes		{ ; }
&lt;br&gt;+	|	ccodes iclass		{ ; }
&lt;br&gt;+	|	iclass			{ ; }
&lt;br&gt;+	;
&lt;br&gt;+
&lt;br&gt;+iclass:	class	{ ; }
&lt;br&gt;+	|	interface		{ ; }
&lt;br&gt;&amp;nbsp;	;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;ccode:		CCODE			{
&lt;br&gt;@@ -758,6 +763,20 @@
&lt;br&gt;&amp;nbsp;	|	errorcode		{ ; }
&lt;br&gt;&amp;nbsp;	;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+interface:		interfacedec '{' interfacecode '}'	{
&lt;br&gt;+			((Class *)class)-&amp;gt;nodes = class_nodes;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;isinterface = TRUE;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((Class *)class)-&amp;gt;isinterface = TRUE;
&lt;br&gt;+			class_nodes = NULL;
&lt;br&gt;+			nodes = g_list_append(nodes,class);
&lt;br&gt;+						}
&lt;br&gt;+	|	interfacedec '{' '}'		{
&lt;br&gt;+			((Class *)class)-&amp;gt;nodes = NULL;
&lt;br&gt;+			class_nodes = NULL;
&lt;br&gt;+			nodes = g_list_append(nodes,class);
&lt;br&gt;+						}
&lt;br&gt;+	;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;class:		classdec '{' classcode '}'	{
&lt;br&gt;&amp;nbsp;			((Class *)class)-&amp;gt;nodes = class_nodes;
&lt;br&gt;&amp;nbsp;			class_nodes = NULL;
&lt;br&gt;@@ -770,6 +789,105 @@
&lt;br&gt;&amp;nbsp;						}
&lt;br&gt;&amp;nbsp;	;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+interfacedec:	INTERFACE TYPETOKEN FROM TYPETOKEN interfaceflags	{
&lt;br&gt;+			class = node_new (CLASS_NODE,
&lt;br&gt;+					 &amp;nbsp;&amp;quot;otype:steal&amp;quot;, $&amp;lt;id&amp;gt;2,
&lt;br&gt;+					 &amp;nbsp;&amp;quot;ptype:steal&amp;quot;, $&amp;lt;id&amp;gt;4,
&lt;br&gt;+					 &amp;nbsp;&amp;quot;bonobo_object_class:steal&amp;quot;, bonobo_object_class,
&lt;br&gt;+					 &amp;nbsp;&amp;quot;glade_xml&amp;quot;, glade_xml,
&lt;br&gt;+					 &amp;nbsp;&amp;quot;interfaces:steal&amp;quot;, interfaces,
&lt;br&gt;+					 &amp;nbsp;&amp;quot;chunk_size:steal&amp;quot;, chunk_size,
&lt;br&gt;+					 &amp;nbsp;&amp;quot;abstract&amp;quot;, abstract,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;isinterface&amp;quot;, isinterface,
&lt;br&gt;+					 &amp;nbsp;NULL);
&lt;br&gt;+			bonobo_object_class = NULL;
&lt;br&gt;+			glade_xml = FALSE;
&lt;br&gt;+			chunk_size = NULL;
&lt;br&gt;+			interfaces = NULL;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;isinterface = FALSE;
&lt;br&gt;+						}
&lt;br&gt;+	;
&lt;br&gt;+
&lt;br&gt;+interfaceflags:
&lt;br&gt;+	| '(' TOKEN ')' interfaceflags {
&lt;br&gt;+			if(strcmp($&amp;lt;id&amp;gt;2,&amp;quot;abstract&amp;quot;) == 0) {
&lt;br&gt;+				abstract = TRUE;
&lt;br&gt;+			} else {
&lt;br&gt;+				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+		}
&lt;br&gt;+	| '(' TOKEN TOKEN ')' interfaceflags {
&lt;br&gt;+			if(strcmp($&amp;lt;id&amp;gt;2,&amp;quot;chunks&amp;quot;) == 0) {
&lt;br&gt;+				g_free (chunk_size);
&lt;br&gt;+				chunk_size = g_strdup($&amp;lt;id&amp;gt;3);
&lt;br&gt;+			} else if(strcmp($&amp;lt;id&amp;gt;2,&amp;quot;BonoboObject&amp;quot;) == 0) {
&lt;br&gt;+				g_free (bonobo_object_class);
&lt;br&gt;+				bonobo_object_class = g_strdup($&amp;lt;id&amp;gt;3);
&lt;br&gt;+			} else {
&lt;br&gt;+				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+		}
&lt;br&gt;+	| '(' TOKEN TYPETOKEN ')' interfaceflags {
&lt;br&gt;+			if (strcmp ($&amp;lt;id&amp;gt;2, &amp;quot;interface&amp;quot;) == 0) {
&lt;br&gt;+				interfaces = g_list_append (interfaces,
&lt;br&gt;+							 &amp;nbsp; &amp;nbsp;g_strdup ($&amp;lt;id&amp;gt;3));
&lt;br&gt;+			} else {
&lt;br&gt;+				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+		}
&lt;br&gt;+	| '(' TOKEN NUMBER ')' interfaceflags {
&lt;br&gt;+			if(strcmp($&amp;lt;id&amp;gt;2,&amp;quot;chunks&amp;quot;) == 0) {
&lt;br&gt;+				g_free (chunk_size);
&lt;br&gt;+				if(atoi($&amp;lt;id&amp;gt;3) != 0)
&lt;br&gt;+					chunk_size = g_strdup($&amp;lt;id&amp;gt;3);
&lt;br&gt;+				else
&lt;br&gt;+					chunk_size = NULL;
&lt;br&gt;+			} else {
&lt;br&gt;+				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+		}
&lt;br&gt;+	| '(' TOKEN STRING STRING ')' interfaceflags {
&lt;br&gt;+			if (strcmp ($&amp;lt;id&amp;gt;2, &amp;quot;GladeXML&amp;quot;) == 0) {
&lt;br&gt;+				glade_xml = TRUE;
&lt;br&gt;+				add_construct_glade($&amp;lt;id&amp;gt;3, $&amp;lt;id&amp;gt;4, NULL);
&lt;br&gt;+			} else {
&lt;br&gt;+				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+		}
&lt;br&gt;+	| '(' TOKEN STRING STRING STRING ')' interfaceflags {
&lt;br&gt;+			if (strcmp ($&amp;lt;id&amp;gt;2, &amp;quot;GladeXML&amp;quot;) == 0) {
&lt;br&gt;+				glade_xml = TRUE;
&lt;br&gt;+				add_construct_glade($&amp;lt;id&amp;gt;3, $&amp;lt;id&amp;gt;4, $&amp;lt;id&amp;gt;5);
&lt;br&gt;+			} else {
&lt;br&gt;+				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+		}
&lt;br&gt;+	| '(' TOKEN TOKEN STRING ')' interfaceflags {
&lt;br&gt;+			if (strcmp ($&amp;lt;id&amp;gt;2, &amp;quot;GladeXML&amp;quot;) == 0) {
&lt;br&gt;+				glade_xml = TRUE;
&lt;br&gt;+				add_construct_glade($&amp;lt;id&amp;gt;3, $&amp;lt;id&amp;gt;4, NULL);
&lt;br&gt;+			} else {
&lt;br&gt;+				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+		}
&lt;br&gt;+	| '(' TOKEN TOKEN STRING STRING ')' interfaceflags {
&lt;br&gt;+			if (strcmp ($&amp;lt;id&amp;gt;2, &amp;quot;GladeXML&amp;quot;) == 0) {
&lt;br&gt;+				glade_xml = TRUE;
&lt;br&gt;+				add_construct_glade($&amp;lt;id&amp;gt;3, $&amp;lt;id&amp;gt;4, $&amp;lt;id&amp;gt;5);
&lt;br&gt;+			} else {
&lt;br&gt;+				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+		}
&lt;br&gt;+	;	
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;classdec:	CLASS TYPETOKEN FROM TYPETOKEN	classflags {
&lt;br&gt;&amp;nbsp;			class = node_new (CLASS_NODE,
&lt;br&gt;&amp;nbsp;					 &amp;nbsp;&amp;quot;otype:steal&amp;quot;, $&amp;lt;id&amp;gt;2,
&lt;br&gt;@@ -871,6 +989,35 @@
&lt;br&gt;&amp;nbsp;	|	thing				{ ; }
&lt;br&gt;&amp;nbsp;	;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+interfacecode:	interfacecode interfacething			{ ; }
&lt;br&gt;+	|	interfacething		{ ; }
&lt;br&gt;+	;
&lt;br&gt;+
&lt;br&gt;+interfacething: 		method				{ ; }
&lt;br&gt;+	|	TOKEN method			{
&lt;br&gt;+			if (strcmp ($&amp;lt;id&amp;gt;1, &amp;quot;BonoboObject&amp;quot;) != 0) {
&lt;br&gt;+				g_free ($&amp;lt;id&amp;gt;1);
&lt;br&gt;+				yyerror (_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			g_free ($&amp;lt;id&amp;gt;1);
&lt;br&gt;+			last_added_method-&amp;gt;bonobo_object_func = TRUE;
&lt;br&gt;+						}
&lt;br&gt;+	|	TOKEN TYPETOKEN method			{
&lt;br&gt;+			if (strcmp ($&amp;lt;id&amp;gt;1, &amp;quot;interface&amp;quot;) != 0) {
&lt;br&gt;+				g_free ($&amp;lt;id&amp;gt;1);
&lt;br&gt;+				g_free ($&amp;lt;id&amp;gt;2);
&lt;br&gt;+				yyerror (_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;+				YYERROR;
&lt;br&gt;+			}
&lt;br&gt;+			g_free ($&amp;lt;id&amp;gt;1);
&lt;br&gt;+			node_set ((Node *)last_added_method,
&lt;br&gt;+				 &amp;nbsp;&amp;quot;interface:steal&amp;quot;, $&amp;lt;id&amp;gt;2,
&lt;br&gt;+				 &amp;nbsp;NULL);
&lt;br&gt;+						}
&lt;br&gt;+	|	';'				{ ; }
&lt;br&gt;+	;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;thing: 		method				{ ; }
&lt;br&gt;&amp;nbsp;	|	TOKEN method			{
&lt;br&gt;&amp;nbsp;			if (strcmp ($&amp;lt;id&amp;gt;1, &amp;quot;BonoboObject&amp;quot;) != 0) {
&lt;br&gt;Only in gobnew/src: t2.gob
&lt;br&gt;diff -u gob2-2.0.14/src/treefuncs.c gobnew/src/treefuncs.c
&lt;br&gt;--- gob2-2.0.14/src/treefuncs.c	2005-12-16 20:11:38.000000000 +0100
&lt;br&gt;+++ gobnew/src/treefuncs.c	2007-04-22 11:45:14.000000000 +0200
&lt;br&gt;@@ -106,6 +106,7 @@
&lt;br&gt;&amp;nbsp;	QUARK_nodes,
&lt;br&gt;&amp;nbsp;	QUARK_nodes_STEAL,
&lt;br&gt;&amp;nbsp;	QUARK_abstract,
&lt;br&gt;+	QUARK_isinterface,
&lt;br&gt;&amp;nbsp;	QUARK_name,
&lt;br&gt;&amp;nbsp;	QUARK_name_STEAL,
&lt;br&gt;&amp;nbsp;	QUARK_pointer,
&lt;br&gt;@@ -214,6 +215,7 @@
&lt;br&gt;&amp;nbsp;	g_hash_table_insert (quark_ht, &amp;quot;nodes&amp;quot;, GINT_TO_POINTER (QUARK_nodes));
&lt;br&gt;&amp;nbsp;	g_hash_table_insert (quark_ht, &amp;quot;nodes:steal&amp;quot;, GINT_TO_POINTER (QUARK_nodes_STEAL));
&lt;br&gt;&amp;nbsp;	g_hash_table_insert (quark_ht, &amp;quot;abstract&amp;quot;, GINT_TO_POINTER (QUARK_abstract));
&lt;br&gt;+	g_hash_table_insert (quark_ht, &amp;quot;isinterface&amp;quot;, GINT_TO_POINTER (QUARK_isinterface));
&lt;br&gt;&amp;nbsp;	g_hash_table_insert (quark_ht, &amp;quot;name&amp;quot;, GINT_TO_POINTER (QUARK_name));
&lt;br&gt;&amp;nbsp;	g_hash_table_insert (quark_ht, &amp;quot;name:steal&amp;quot;, GINT_TO_POINTER (QUARK_name_STEAL));
&lt;br&gt;&amp;nbsp;	g_hash_table_insert (quark_ht, &amp;quot;pointer&amp;quot;, GINT_TO_POINTER (QUARK_pointer));
&lt;br&gt;@@ -363,6 +365,7 @@
&lt;br&gt;&amp;nbsp;	new-&amp;gt;interfaces = g_list_copy (self-&amp;gt;interfaces); COPY_LIST_VALS(new-&amp;gt;interfaces, g_strdup);
&lt;br&gt;&amp;nbsp;	new-&amp;gt;nodes = node_list_copy (self-&amp;gt;nodes);
&lt;br&gt;&amp;nbsp;	new-&amp;gt;abstract = self-&amp;gt;abstract;
&lt;br&gt;+	new-&amp;gt;isinterface = self-&amp;gt;isinterface;
&lt;br&gt;&amp;nbsp;	return new;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -955,6 +958,11 @@
&lt;br&gt;&amp;nbsp;			self-&amp;gt;abstract = abstract;
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+		case QUARK_isinterface: {
&lt;br&gt;+			gboolean isinterface = va_arg (__ap, gboolean);
&lt;br&gt;+			self-&amp;gt;isinterface = isinterface;
&lt;br&gt;+			break;
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;		default:
&lt;br&gt;&amp;nbsp;			g_warning (&amp;quot;Argument named 'Class::%s' does not exist&amp;quot;, arg);
&lt;br&gt;&amp;nbsp;			break;
&lt;br&gt;diff -u gob2-2.0.14/src/treefuncs.def gobnew/src/treefuncs.def
&lt;br&gt;--- gob2-2.0.14/src/treefuncs.def	2005-12-16 20:11:20.000000000 +0100
&lt;br&gt;+++ gobnew/src/treefuncs.def	2007-04-22 11:45:14.000000000 +0200
&lt;br&gt;@@ -56,7 +56,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRING	chunk_size # if the object should be allocated with mem_chunks
&lt;br&gt;&amp;nbsp; &amp;nbsp;STRINGLIST	interfaces # GObject interfaces this class exports
&lt;br&gt;&amp;nbsp; &amp;nbsp;NODELIST	nodes
&lt;br&gt;- &amp;nbsp;BOOL		abstract # if G_TYPE_FLAG_ABSTRACT should be used
&lt;br&gt;+ &amp;nbsp;BOOL		abstract &amp;nbsp; &amp;nbsp;# if G_TYPE_FLAG_ABSTRACT should be used
&lt;br&gt;+ &amp;nbsp;BOOL		isinterface # if it is an interface instead of a class
&lt;br&gt;&amp;nbsp;ENDCLASS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;CLASS Type
&lt;br&gt;diff -u gob2-2.0.14/src/treefuncs.h gobnew/src/treefuncs.h
&lt;br&gt;--- gob2-2.0.14/src/treefuncs.h	2005-12-16 20:11:38.000000000 +0100
&lt;br&gt;+++ gobnew/src/treefuncs.h	2007-04-22 11:45:14.000000000 +0200
&lt;br&gt;@@ -119,6 +119,7 @@
&lt;br&gt;&amp;nbsp;	GList * interfaces;
&lt;br&gt;&amp;nbsp;	GList * nodes;
&lt;br&gt;&amp;nbsp;	gboolean abstract;
&lt;br&gt;+	gboolean isinterface;
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;struct _EnumDef {
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=10125826&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/introduction%2C-gob2-interface-patch%2C-misc-tp10125081p10125826.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-10125081</id>
	<title>introduction, gob2 interface patch, misc</title>
	<published>2007-04-22T03:52:45Z</published>
	<updated>2007-04-22T03:52:45Z</updated>
	<author>
		<name>Rudi Cilibrasi, Ph.D.</name>
	</author>
	<content type="html">Hi everybody,&lt;br&gt;&lt;br&gt;I have recently started learning about GObject, GType, and DBus.&amp;nbsp; It is a nice system and seems very well&lt;br&gt;designed.&amp;nbsp; But it is a bit rough and so I was led to find Gob2.&amp;nbsp; It seems like just about exactly what I needed
&lt;br&gt;for my purposes and so I wanted to use it but I found one small problem: no interface support.&amp;nbsp; I have spent&lt;br&gt;some time trying to add interface support to gob2.&amp;nbsp; Since I have very little experience with GType it is a bit
&lt;br&gt;challenging for me, however I think I have made some good progress.&amp;nbsp; At this point I have a patch and wanted&lt;br&gt;to find out if anybody else is interested.&amp;nbsp; I think it is reasonably close to useful but would like more experienced
&lt;br&gt;GObject opinions on the matter (maybe help finish whatever is still broken) before I move on to the next part of &lt;br&gt;my project. I&amp;nbsp; would also like to eventually get this functionality into the main Gob2 source base if we can figure 
&lt;br&gt;out how to properly clean it up.&amp;nbsp; I had a look at the mailing list archives and it seems they might be broken; or &lt;br&gt;is it just otherwise low activity?&amp;nbsp; I attach the patch in this email.&amp;nbsp; Best regards,&lt;br&gt;&lt;br&gt;Rudi&lt;br clear=&quot;all&quot;&gt;
&lt;br&gt;-- &lt;br&gt;Democracy is two wolves and a sheep deciding what to eat for lunch.&lt;br&gt;Liberty is a well-armed sheep contesting the vote.
&lt;br /&gt;&lt;tt&gt;[interface-gob2-2.0.14.patch]&lt;/tt&gt;&lt;br /&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;tt&gt;diff -r gob2-2.0.14/src/lexer.l gobnew/src/lexer.l
&lt;br&gt;407a408,420
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; interface		{
&lt;br&gt;&amp;gt; 			static int found_classes = 0;
&lt;br&gt;&amp;gt; 			look_for_includes = 2;
&lt;br&gt;&amp;gt; 			BEGIN(CLASS_CODE);
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 			if(++found_classes &amp;gt; 1) {
&lt;br&gt;&amp;gt; 				error_print(GOB_ERROR, line_no,
&lt;br&gt;&amp;gt; 					 &amp;nbsp; &amp;nbsp;&amp;quot;Only one interface per file allowed&amp;quot;);
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 			return INTERFACE;
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 
&lt;/div&gt;diff -r gob2-2.0.14/src/main.c gobnew/src/main.c
&lt;br&gt;1068c1068,1089
&lt;br&gt;&amp;lt; 	out_printf(out,
&lt;br&gt;---
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;nbsp; if (((Class *)class)-&amp;gt;isinterface)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; out_printf(out,
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;GType\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;%s_get_type (void)\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;{\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\tstatic GType type = 0;\n\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\tif ___GOB_UNLIKELY(type == 0) {\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\tstatic const GTypeInfo info = {\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\tsizeof (%sClass),\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\t(GBaseInitFunc) %s_class_init,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\t(GBaseFinalizeFunc) NULL,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\t(GClassInitFunc) NULL,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\t(GClassFinalizeFunc) NULL,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\tNULL /* class_data */,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\t0,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\t0,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\tNULL,\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t\tNULL\n&amp;quot;
&lt;br&gt;&amp;gt; 		 &amp;nbsp; &amp;quot;\t\t};\n\n&amp;quot;,
&lt;br&gt;&amp;gt; 		 &amp;nbsp; funcbase, typebase, funcbase);
&lt;br&gt;&amp;gt; &amp;nbsp; else
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; out_printf(out,
&lt;/div&gt;2400,2401c2421,2427
&lt;br&gt;&amp;lt; 
&lt;br&gt;&amp;lt; 		if(m-&amp;gt;cbuf) {
&lt;br&gt;---
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; if (c-&amp;gt;isinterface) {
&lt;br&gt;&amp;gt; 			out_printf(out, &amp;quot; {\n&amp;quot;);
&lt;br&gt;&amp;gt; 			out_printf(out, &amp;quot; %s_GET_CLASS (self)-&amp;gt;%s (self);&amp;quot;,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;macrobase, m-&amp;gt;id);
&lt;br&gt;&amp;gt; 			out_printf(out, &amp;quot; }\n&amp;quot;);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; 		if(!c-&amp;gt;isinterface &amp;&amp; m-&amp;gt;cbuf) {
&lt;br&gt;diff -r gob2-2.0.14/src/parse.y gobnew/src/parse.y
&lt;br&gt;47a48
&lt;br&gt;&amp;gt; static gboolean isinterface = FALSE;
&lt;br&gt;676c677
&lt;br&gt;&amp;lt; %token CLASS FROM
&lt;br&gt;---
&lt;br&gt;&amp;gt; %token CLASS INTERFACE FROM
&lt;br&gt;689,692c690,697
&lt;br&gt;&amp;lt; prog:		ccodes class ccodes	{ ; }
&lt;br&gt;&amp;lt; 	|	class ccodes		{ ; }
&lt;br&gt;&amp;lt; 	|	ccodes class		{ ; }
&lt;br&gt;&amp;lt; 	|	class			{ ; }
&lt;br&gt;---
&lt;br&gt;&amp;gt; prog:		ccodes iclass ccodes	{ ; }
&lt;br&gt;&amp;gt; 	|	iclass ccodes		{ ; }
&lt;br&gt;&amp;gt; 	|	ccodes iclass		{ ; }
&lt;br&gt;&amp;gt; 	|	iclass			{ ; }
&lt;br&gt;&amp;gt; 	;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; iclass:	class	{ ; }
&lt;br&gt;&amp;gt; 	|	interface		{ ; }
&lt;br&gt;760a766,779
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; interface:		interfacedec '{' interfacecode '}'	{
&lt;br&gt;&amp;gt; 			((Class *)class)-&amp;gt;nodes = class_nodes;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; isinterface = TRUE;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ((Class *)class)-&amp;gt;isinterface = TRUE;
&lt;br&gt;&amp;gt; 			class_nodes = NULL;
&lt;br&gt;&amp;gt; 			nodes = g_list_append(nodes,class);
&lt;br&gt;&amp;gt; 						}
&lt;br&gt;&amp;gt; 	|	interfacedec '{' '}'		{
&lt;br&gt;&amp;gt; 			((Class *)class)-&amp;gt;nodes = NULL;
&lt;br&gt;&amp;gt; 			class_nodes = NULL;
&lt;br&gt;&amp;gt; 			nodes = g_list_append(nodes,class);
&lt;br&gt;&amp;gt; 						}
&lt;br&gt;&amp;gt; 	;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;772a792,890
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; interfacedec:	INTERFACE TYPETOKEN FROM TYPETOKEN interfaceflags	{
&lt;br&gt;&amp;gt; 			class = node_new (CLASS_NODE,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;&amp;quot;otype:steal&amp;quot;, $&amp;lt;id&amp;gt;2,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;&amp;quot;ptype:steal&amp;quot;, $&amp;lt;id&amp;gt;4,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;&amp;quot;bonobo_object_class:steal&amp;quot;, bonobo_object_class,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;&amp;quot;glade_xml&amp;quot;, glade_xml,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;&amp;quot;interfaces:steal&amp;quot;, interfaces,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;&amp;quot;chunk_size:steal&amp;quot;, chunk_size,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;&amp;quot;abstract&amp;quot;, abstract,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;isinterface&amp;quot;, isinterface,
&lt;br&gt;&amp;gt; 					 &amp;nbsp;NULL);
&lt;br&gt;&amp;gt; 			bonobo_object_class = NULL;
&lt;br&gt;&amp;gt; 			glade_xml = FALSE;
&lt;br&gt;&amp;gt; 			chunk_size = NULL;
&lt;br&gt;&amp;gt; 			interfaces = NULL;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; isinterface = FALSE;
&lt;br&gt;&amp;gt; 						}
&lt;br&gt;&amp;gt; 	;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; interfaceflags:
&lt;br&gt;&amp;gt; 	| '(' TOKEN ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if(strcmp($&amp;lt;id&amp;gt;2,&amp;quot;abstract&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				abstract = TRUE;
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	| '(' TOKEN TOKEN ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if(strcmp($&amp;lt;id&amp;gt;2,&amp;quot;chunks&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				g_free (chunk_size);
&lt;br&gt;&amp;gt; 				chunk_size = g_strdup($&amp;lt;id&amp;gt;3);
&lt;br&gt;&amp;gt; 			} else if(strcmp($&amp;lt;id&amp;gt;2,&amp;quot;BonoboObject&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				g_free (bonobo_object_class);
&lt;br&gt;&amp;gt; 				bonobo_object_class = g_strdup($&amp;lt;id&amp;gt;3);
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	| '(' TOKEN TYPETOKEN ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if (strcmp ($&amp;lt;id&amp;gt;2, &amp;quot;interface&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				interfaces = g_list_append (interfaces,
&lt;br&gt;&amp;gt; 							 &amp;nbsp; &amp;nbsp;g_strdup ($&amp;lt;id&amp;gt;3));
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	| '(' TOKEN NUMBER ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if(strcmp($&amp;lt;id&amp;gt;2,&amp;quot;chunks&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				g_free (chunk_size);
&lt;br&gt;&amp;gt; 				if(atoi($&amp;lt;id&amp;gt;3) != 0)
&lt;br&gt;&amp;gt; 					chunk_size = g_strdup($&amp;lt;id&amp;gt;3);
&lt;br&gt;&amp;gt; 				else
&lt;br&gt;&amp;gt; 					chunk_size = NULL;
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	| '(' TOKEN STRING STRING ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if (strcmp ($&amp;lt;id&amp;gt;2, &amp;quot;GladeXML&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				glade_xml = TRUE;
&lt;br&gt;&amp;gt; 				add_construct_glade($&amp;lt;id&amp;gt;3, $&amp;lt;id&amp;gt;4, NULL);
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	| '(' TOKEN STRING STRING STRING ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if (strcmp ($&amp;lt;id&amp;gt;2, &amp;quot;GladeXML&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				glade_xml = TRUE;
&lt;br&gt;&amp;gt; 				add_construct_glade($&amp;lt;id&amp;gt;3, $&amp;lt;id&amp;gt;4, $&amp;lt;id&amp;gt;5);
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	| '(' TOKEN TOKEN STRING ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if (strcmp ($&amp;lt;id&amp;gt;2, &amp;quot;GladeXML&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				glade_xml = TRUE;
&lt;br&gt;&amp;gt; 				add_construct_glade($&amp;lt;id&amp;gt;3, $&amp;lt;id&amp;gt;4, NULL);
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	| '(' TOKEN TOKEN STRING STRING ')' interfaceflags {
&lt;br&gt;&amp;gt; 			if (strcmp ($&amp;lt;id&amp;gt;2, &amp;quot;GladeXML&amp;quot;) == 0) {
&lt;br&gt;&amp;gt; 				glade_xml = TRUE;
&lt;br&gt;&amp;gt; 				add_construct_glade($&amp;lt;id&amp;gt;3, $&amp;lt;id&amp;gt;4, $&amp;lt;id&amp;gt;5);
&lt;br&gt;&amp;gt; 			} else {
&lt;br&gt;&amp;gt; 				yyerror(_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;&amp;gt; 	;	
&lt;br&gt;&amp;gt; 
&lt;/div&gt;873a992,1020
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; interfacecode:	interfacecode interfacething			{ ; }
&lt;br&gt;&amp;gt; 	|	interfacething		{ ; }
&lt;br&gt;&amp;gt; 	;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; interfacething: 		method				{ ; }
&lt;br&gt;&amp;gt; 	|	TOKEN method			{
&lt;br&gt;&amp;gt; 			if (strcmp ($&amp;lt;id&amp;gt;1, &amp;quot;BonoboObject&amp;quot;) != 0) {
&lt;br&gt;&amp;gt; 				g_free ($&amp;lt;id&amp;gt;1);
&lt;br&gt;&amp;gt; 				yyerror (_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 			g_free ($&amp;lt;id&amp;gt;1);
&lt;br&gt;&amp;gt; 			last_added_method-&amp;gt;bonobo_object_func = TRUE;
&lt;br&gt;&amp;gt; 						}
&lt;br&gt;&amp;gt; 	|	TOKEN TYPETOKEN method			{
&lt;br&gt;&amp;gt; 			if (strcmp ($&amp;lt;id&amp;gt;1, &amp;quot;interface&amp;quot;) != 0) {
&lt;br&gt;&amp;gt; 				g_free ($&amp;lt;id&amp;gt;1);
&lt;br&gt;&amp;gt; 				g_free ($&amp;lt;id&amp;gt;2);
&lt;br&gt;&amp;gt; 				yyerror (_(&amp;quot;parse error&amp;quot;));
&lt;br&gt;&amp;gt; 				YYERROR;
&lt;br&gt;&amp;gt; 			}
&lt;br&gt;&amp;gt; 			g_free ($&amp;lt;id&amp;gt;1);
&lt;br&gt;&amp;gt; 			node_set ((Node *)last_added_method,
&lt;br&gt;&amp;gt; 				 &amp;nbsp;&amp;quot;interface:steal&amp;quot;, $&amp;lt;id&amp;gt;2,
&lt;br&gt;&amp;gt; 				 &amp;nbsp;NULL);
&lt;br&gt;&amp;gt; 						}
&lt;br&gt;&amp;gt; 	|	';'				{ ; }
&lt;br&gt;&amp;gt; 	;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;diff -r gob2-2.0.14/src/treefuncs.c gobnew/src/treefuncs.c
&lt;br&gt;108a109
&lt;br&gt;&amp;gt; 	QUARK_isinterface,
&lt;br&gt;216a218
&lt;br&gt;&amp;gt; 	g_hash_table_insert (quark_ht, &amp;quot;isinterface&amp;quot;, GINT_TO_POINTER (QUARK_isinterface));
&lt;br&gt;365a368
&lt;br&gt;&amp;gt; 	new-&amp;gt;isinterface = self-&amp;gt;isinterface;
&lt;br&gt;957a961,965
&lt;br&gt;&amp;gt; 		case QUARK_isinterface: {
&lt;br&gt;&amp;gt; 			gboolean isinterface = va_arg (__ap, gboolean);
&lt;br&gt;&amp;gt; 			self-&amp;gt;isinterface = isinterface;
&lt;br&gt;&amp;gt; 			break;
&lt;br&gt;&amp;gt; 		}
&lt;br&gt;diff -r gob2-2.0.14/src/treefuncs.def gobnew/src/treefuncs.def
&lt;br&gt;59c59,60
&lt;br&gt;&amp;lt; &amp;nbsp; BOOL		abstract # if G_TYPE_FLAG_ABSTRACT should be used
&lt;br&gt;---
&lt;br&gt;&amp;gt; &amp;nbsp; BOOL		abstract &amp;nbsp; &amp;nbsp;# if G_TYPE_FLAG_ABSTRACT should be used
&lt;br&gt;&amp;gt; &amp;nbsp; BOOL		isinterface # if it is an interface instead of a class
&lt;br&gt;diff -r gob2-2.0.14/src/treefuncs.h gobnew/src/treefuncs.h
&lt;br&gt;121a122
&lt;br&gt;&amp;gt; 	gboolean isinterface;
&lt;br&gt;&lt;/tt&gt;&lt;hr align=&quot;left&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;--
&lt;br&gt;to unsubscribe:
&lt;br&gt;send mail to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=10125081&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;minimalist@...&lt;/a&gt; with &amp;quot;unsubscribe gob-list&amp;quot; in the subject
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/introduction%2C-gob2-interface-patch%2C-misc-tp10125081p10125081.html" />
</entry>

</feed>
