[vala-bootstrap] Update to 0.16.1



commit b2beeaccdf2307ced172646c2ada9765e1747b28
Author: JÃrg Billeter <j bitron ch>
Date:   Mon Aug 6 18:02:24 2012 +0200

    Update to 0.16.1

 .tarball-version                         |    2 +-
 .version                                 |    2 +-
 ChangeLog                                |  897 ++
 INSTALL                                  |   15 +-
 Makefile.am                              |    5 +-
 Makefile.in                              |  271 +-
 NEWS                                     |   31 +
 aclocal.m4                               |  425 +-
 build-aux/compile                        |  227 +-
 build-aux/config.guess                   |  259 +-
 build-aux/config.sub                     |  210 +-
 build-aux/depcomp                        |  189 +-
 build-aux/install-sh                     |   35 +-
 build-aux/ltmain.sh                      |   95 +-
 build-aux/missing                        |  148 +-
 build-aux/ylwrap                         |   70 +-
 ccode/Makefile.in                        |  156 +-
 codegen/Makefile.in                      |  136 +-
 codegen/codegen.vapi                     |   24 +
 codegen/valaccodeassignmentmodule.c      |   54 +-
 codegen/valaccodeassignmentmodule.vala   |    2 +
 codegen/valaccodeattribute.c             | 1638 ++--
 codegen/valaccodeattribute.vala          |   68 +-
 codegen/valaccodebasemodule.c            |14411 ++++++++++++++++--------------
 codegen/valaccodebasemodule.vala         |  360 +-
 codegen/valaccodecontrolflowmodule.c     |   28 +-
 codegen/valaccodecontrolflowmodule.vala  |    8 +-
 codegen/valaccodedelegatemodule.c        | 1481 ++--
 codegen/valaccodedelegatemodule.vala     |    6 +-
 codegen/valaccodememberaccessmodule.c    | 2936 +++---
 codegen/valaccodememberaccessmodule.vala |   40 +-
 codegen/valaccodemethodcallmodule.c      | 1869 ++--
 codegen/valaccodemethodcallmodule.vala   |    5 +
 codegen/valaccodemethodmodule.c          | 3208 ++++----
 codegen/valaccodemethodmodule.vala       |    9 +-
 codegen/valaccodestructmodule.c          | 1255 ++--
 codegen/valaccodestructmodule.vala       |   33 +-
 codegen/valacodegen.h                    |   41 +
 codegen/valagasyncmodule.c               | 1327 ++--
 codegen/valagasyncmodule.vala            |   18 +-
 codegen/valagirwriter.c                  | 3381 ++++---
 codegen/valagirwriter.vala               |  207 +-
 codegen/valagobjectmodule.c              |  170 +-
 codegen/valagobjectmodule.vala           |   21 +-
 codegen/valagtypemodule.c                | 1021 ++--
 codegen/valagtypemodule.vala             |    4 +-
 codegen/valagvariantmodule.c             |   19 +-
 codegen/valagvariantmodule.vala          |    2 +
 compiler/Makefile.in                     |  132 +-
 compiler/valacompiler.c                  |    6 +-
 configure                                |  648 +-
 configure.ac                             |    6 +
 doc/Makefile.in                          |  152 +-
 doc/vala/Makefile.in                     |   70 +-
 gee/Makefile.am                          |    1 +
 gee/Makefile.in                          |  161 +-
 gee/gee.vapi                             |    9 +
 gee/hashmap.c                            |  272 +
 gee/hashmap.vala                         |   47 +
 gee/map.c                                |   40 +
 gee/map.vala                             |    9 +
 gee/mapiterator.c                        |  325 +
 gee/mapiterator.vala                     |   52 +
 gee/valagee.h                            |   38 +
 gobject-introspection/Makefile.in        |  154 +-
 gobject-introspection/scannerparser.c    |  360 +-
 gobject-introspection/scannerparser.h    |    8 +-
 m4/libtool.m4                            |  265 +-
 m4/ltoptions.m4                          |   19 +-
 m4/ltversion.m4                          |   10 +-
 tests/Makefile.am                        |   10 +-
 tests/Makefile.in                        |   97 +-
 tests/basic-types/arrays.vala            |    7 +
 tests/basic-types/sizeof.vala            |   12 +
 tests/control-flow/bug665904.vala        |    6 +
 tests/methods/bug639054.vala             |   22 +
 tests/objects/bug667668.vala             |   13 +
 tests/objects/properties.vala            |   13 +
 tests/structs/bug667890.vala             |   10 +
 tests/structs/bug669580.vala             |   10 +
 tests/testrunner.sh                      |    6 +
 vala/Makefile.am                         |    1 +
 vala/Makefile.in                         |  160 +-
 vala/vala.h                              |   31 +-
 vala/vala.vapi                           |   12 +-
 vala/valaarraytype.c                     |   71 +-
 vala/valaarraytype.vala                  |    4 +
 vala/valaassignment.c                    |  593 +-
 vala/valaassignment.vala                 |    3 +-
 vala/valacastexpression.c                | 1224 +++-
 vala/valacastexpression.vala             |    9 +
 vala/valacomment.c                       |   22 +-
 vala/valacomment.vala                    |    2 +-
 vala/valadatatype.c                      |   70 +-
 vala/valadatatype.vala                   |    5 +
 vala/valageniescanner.c                  | 4330 +++++-----
 vala/valagircomment.c                    |  271 +
 vala/valagircomment.vala                 |   50 +
 vala/valagirparser.c                     | 6913 ++++++++-------
 vala/valagirparser.vala                  |  152 +-
 vala/valainitializerlist.c               |  616 +-
 vala/valainitializerlist.vala            |    3 +
 vala/valamarkupreader.c                  |  586 +-
 vala/valamemberaccess.c                  | 2354 +++---
 vala/valamemberaccess.vala               |   10 +-
 vala/valamethod.c                        |  367 +-
 vala/valamethod.vala                     |   22 +-
 vala/valaparameter.c                     |  215 +-
 vala/valaparameter.vala                  |    2 +
 vala/valaparser.c                        |  433 +-
 vala/valaparser.vala                     |   15 +
 vala/valaproperty.c                      |  569 +-
 vala/valaproperty.vala                   |   49 +-
 vala/valascanner.c                       | 3308 ++++----
 vala/valasizeofexpression.c              |   11 +
 vala/valasizeofexpression.vala           |    4 +
 vala/valatypecheck.c                     |  114 +-
 vala/valatypecheck.vala                  |   10 +
 vala/valatypeofexpression.c              |   60 +-
 vala/valatypeofexpression.vala           |    4 +
 vapi/Makefile.am                         |  129 +-
 vapi/Makefile.in                         |  219 +-
 vapi/alsa.vapi                           |    2 +-
 vapi/atk.vapi                            |    2 +-
 vapi/avahi-client.vapi                   |   76 +-
 vapi/clutter-1.0.vapi                    | 5107 +++++++++++-
 vapi/clutter-gtk-1.0.vapi                |   29 +-
 vapi/cogl-1.0.vapi                       |   19 +-
 vapi/cogl-pango-1.0.deps                 |    2 +
 vapi/cogl-pango-1.0.vapi                 |   30 +
 vapi/dbus-glib-1.vapi                    |    4 +-
 vapi/gdk-2.0.vapi                        |    4 +-
 vapi/gdk-3.0.vapi                        |  121 +-
 vapi/gdk-pixbuf-2.0.vapi                 |    5 +-
 vapi/gdl-3.0.deps                        |    2 +
 vapi/gdl-3.0.vapi                        |  337 +
 vapi/gio-2.0.vapi                        | 1908 +++--
 vapi/glib-2.0.vapi                       |  251 +-
 vapi/gnome-keyring-1.vapi                |    2 +-
 vapi/gobject-2.0.vapi                    |   17 +-
 vapi/gsl.vapi                            |    4 +-
 vapi/gstreamer-0.10.vapi                 |   13 +-
 vapi/gtk+-2.0.vapi                       |   22 +-
 vapi/gtk+-3.0.vapi                       |  274 +-
 vapi/gtksourceview-3.0.vapi              |   18 +-
 vapi/libgdata.vapi                       |  608 +-
 vapi/libnl-3.0.deps                      |    1 +
 vapi/libnl-3.0.vapi                      |  443 +
 vapi/libosso.vapi                        |    2 +-
 vapi/libpeas-1.0.vapi                    |   18 +-
 vapi/libsoup-2.4.vapi                    |  436 +-
 vapi/libvala-0.16.vapi                   |   45 +-
 vapi/libwnck-3.0.vapi                    |    4 +-
 vapi/libxml-2.0.vapi                     |   21 +
 vapi/linux.vapi                          |   28 +-
 vapi/mx-1.0.vapi                         |   63 +-
 vapi/pango.vapi                          |    2 +-
 vapi/pangocairo.vapi                     |   10 +-
 vapi/pixman-1.vapi                       |   24 +-
 vapi/poppler-glib.vapi                   |  432 +-
 vapi/posix.vapi                          |  109 +-
 vapi/readline.vapi                       |    2 +-
 vapi/rest-0.7.vapi                       |   38 +-
 vapi/sdl.vapi                            |   19 +-
 vapi/udisks2.deps                        |    1 +
 vapi/udisks2.vapi                        |  740 ++
 vapi/vte-2.90.vapi                       |   28 +-
 vapi/webkit-1.0.vapi                     | 4168 +++++++++-
 vapi/x11.vapi                            |   60 +-
 vapi/xtst.deps                           |    1 +
 vapi/xtst.vapi                           |   56 +
 vapigen/Makefile.am                      |   30 +-
 vapigen/Makefile.in                      |  306 +-
 vapigen/Makefile.vapigen                 |   60 +
 vapigen/vala-gen-introspect/Makefile.in  |   70 +-
 vapigen/valagidlparser.c                 | 3534 ++++----
 vapigen/valagidlparser.vala              |    4 +
 vapigen/vapigen.m4                       |   88 +
 vapigen/vapigen.pc.in                    |   15 +
 179 files changed, 51754 insertions(+), 30793 deletions(-)
---
diff --git a/.tarball-version b/.tarball-version
index a551051..2a0970c 100644
--- a/.tarball-version
+++ b/.tarball-version
@@ -1 +1 @@
-0.15.0
+0.16.1
diff --git a/.version b/.version
index a551051..2a0970c 100644
--- a/.version
+++ b/.version
@@ -1 +1 @@
-0.15.0
+0.16.1
diff --git a/ChangeLog b/ChangeLog
index 62a016d..d16f9e5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,900 @@
+2012-06-23  JÃrg Billeter  <j bitron ch>
+
+	Release 0.16.1
+
+	codegen: Fix memory leak accessing automatic property with owned getter
+	Fixes bug 678630.
+
+2012-06-23  Evan Nemerson  <evan coeus-group com>
+
+	glib-2.0: make GLib.Pid inherit from int
+	Partially fixes bug 678420.
+
+	gdk-3.0: Gdk.EventKey does not have a GType
+	Fixes bug 678217.
+
+	bindings: update GIR-based bindings
+
+2012-06-23  JÃrg Billeter  <j bitron ch>
+
+	codegen: Fix .begin on async methods returning structs
+
+	gtk+-3.0: Fix gtk_entry_get_text_area bindings
+
+2012-06-23  Michal Hruby  <michal mhr gmail com>
+
+	girwriter: Use transfer-ownership=none for InitiallyUnowned based constructors
+
+2012-06-23  Alberto Ruiz  <alberto ruiz canonical com>
+
+	bindings: Add gir_namespace and gir_version to dbus-glib-1.vapi
+
+2012-06-23  Evan Nemerson  <evan coeus-group com>
+
+	gtk+-2.0, gtk+-3.0: include necessary headers for IMContext(Info) types
+	Fixes bug 635664.
+
+2012-06-23  Robert Ancell  <robert ancell canonical com>
+
+	gtk+-3.0: Gtk.Scrollbar constructor allows null adjustment
+	Fixes bug 669516.
+
+2012-06-23  David King  <amigadave amigadave com>
+
+	gtk+-2.0, gtk+-3.0: fix Gtk.test_init
+	Fixes bug 669767.
+
+2012-06-23  Jesse van den Kieboom  <jesse vandenkieboom epfl ch>
+
+	Added is_out annotation for StyleContext.lookup_color
+	Fixes bug 675403.
+
+2012-06-23  Evan Nemerson  <evan coeus-group com>
+
+	gtk+-3.0: hide SelectionData.get_data_with_length length parameter
+	Fixes bug 676849.
+
+	gtk+-3.0: add information to generate 2d0e7f49
+
+	dbus-glib-1: add dbus_g_connection_open binding
+	Fixes bug 622043.
+
+2012-06-23  Alexander Kurtz  <kurtz alex googlemail com>
+
+	x11: Enable some fields which were previously commented out.
+	https://bugzilla.gnome.org/show_bug.cgi?id=669374
+
+2012-06-23  Evan Nemerson  <evan coeus-group com>
+
+	gstreamer-0.10: correct type id of Gst.TypeFindFactory
+	Partially fixes bug 675364.
+
+2012-06-23  Richard Schwarting  <aquarichy gmail com>
+
+	libxml-2.0: add missing cnames to some Doc fields
+	Fixes bug 677354.
+
+2012-06-23  Evan Nemerson  <evan coeus-group com>
+
+	gdk-3.0: mark Gdk.Atom as derived from uint
+
+2012-06-23  Richard Schwarting  <aquarichy gmail com>
+
+	libxml-2.0: add SaveCtxt bindings
+	Partially fixes bug 677355.
+
+2012-06-23  JÃrg Billeter  <j bitron ch>
+
+	codegen: Fix assertion failure on empty string switch statement
+	Fixes bug 677205.
+
+	GVariant: Fix memory leak when boxing and unboxing variants
+	Fixes bug 674201.
+
+	gnome-keyring-1: Fix gnome_keyring_item_get_info_sync binding
+	Fixes bug 677256.
+
+	codegen: Fix infinite recursion when using lambda in destructor
+	Fixes bug 677261.
+
+	glib-2.0: Fix typo in FileSeek attribute
+
+2012-06-23  Evan Nemerson  <evan coeus-group com>
+
+	glib-2.0: set FileSeek cname to "int"
+
+2012-06-23  JÃrg Billeter  <j bitron ch>
+
+	glib-2.0: Include glib/gstdio.h when using DirUtils or Stat
+
+2012-06-23  Alexander Larsson  <alexl redhat com>
+
+	Update clutter vapi to final Clutter 1.10.
+
+2012-06-23  Evan Nemerson  <evan coeus-group com>
+
+	gdk-3.0, libsoup-2.4, poppler-glib, rest-0.7, vte-2.90: update
+
+2012-06-23  Michal Hruby  <michal mhr gmail com>
+
+	glib-2.0: Add a few Source methods
+
+2012-06-23  JÃrg Billeter  <j bitron ch>
+
+	codegen: Fix capturing element variable of foreach without iterator
+
+	Support virtual interface signals
+	Fixes bug 676802.
+
+2012-06-23  Marc-Andrà Lureau  <marcandre lureau gmail com>
+
+	glib-2.0: annotate nullable GLib.Uri arguments and return values
+	g_uri_*() functions can take null values, return null as a normal
+	operation, ex: parse_scheme() returns null when no scheme...
+
+	https://bugzilla.gnome.org/show_bug.cgi?id=676609
+
+2012-06-23  Evan Nemerson  <evan coeus-group com>
+
+	posix: add statvfs and fstatvfs function bindings
+	statvfs is called statvfs_exec since just using statvfs would conflict
+	with the existing statvfs type.
+
+2012-06-23  Colin Walters  <walters verbum org>
+
+	build: Note that we don't support srcdir != builddir
+
+2012-06-23  Evan Nemerson  <evan coeus-group com>
+
+	gtk+-2.0, gtk+-3.0: make TextTag constructor's parameter nullable
+
+2012-06-23  Philip Flarsheim  <philip flarsheim gmail com>
+
+	glib-2.0: add Hmac bindings
+	Fixes bug 670243.
+
+2012-06-23  Evan Nemerson  <evan coeus-group com>
+
+	gobject-2.0: add Type.{get,set}_qdata methods
+	Fixes bug 673392.
+
+	rest-0.7: update to git master
+	Fixes bug 670488.
+
+	gsl: correct MultifitLinearWorkspace construct/free C names
+	Fixes bug 670838.
+
+2012-06-23  Jesus Menendez-Castellano  <jesus menendez castellano gmail com>
+
+	posix: add execv(p) and sigqueue methods, make sigval_t a simple type
+	Fixes bug 673391.
+
+2012-06-23  Christian Persch  <chpe gnome org>
+
+	Use correct variable name to add vapigen directories
+	Fixes bug 675097.
+
+2012-06-23  JÃrg Billeter  <j bitron ch>
+
+	glib-2.0: Update GUnicodeScript and GUnicodeBreakType bindings
+	Fixes bug 674660.
+
+2012-06-23  Robert Ancell  <robert ancell canonical com>
+
+	posix: Add stat fields for high precision access/modification/status change timestamps (POSIX.1-2008)
+
+	posix: Add utimensat and futimens bindings
+
+2012-06-23  JÃrg Billeter  <j bitron ch>
+
+	posix: Add ffs binding
+
+2012-06-23  Luca Bruno  <lucabru src gnome org>
+
+	gtk+-2.0, gtk+-3.0: Fix TargetList.add_table binding
+	Based on patch by Axel FILMORE.
+
+	Fixes bug 673117.
+
+2012-05-17  Alexander Larsson  <alexl redhat com>
+
+	Add direct vfunc accessors for Widget.get_preferred_height/width
+	These are available as get_preferred_height_internal and get_preferred_width_internal
+	similarly to the existing get_preferred_height_for_width_internal and
+	get_preferred_width_for_height_internal methods.
+	(cherry picked from commit 2d0e7f49c2b14946a0c16e024c14bef333e43c59)
+
+2012-03-26  JÃrg Billeter  <j bitron ch>
+
+	Release 0.16.0
+
+	glib-2.0: Add g_dir_make_tmp binding
+	Fixes bug 672846.
+
+2012-03-21  JÃrg Billeter  <j bitron ch>
+
+	codegen: Fix delegate target C name for static fields
+	Fixes bug 671110.
+
+2012-03-17  JÃrg Billeter  <j bitron ch>
+
+	glib-2.0: Hide Thread constructors when targeting GLib < 2.32
+	Fixes bug 672284.
+
+2012-03-11  Alberto Ruiz  <alberto ruiz canonical com>
+
+	glib-2.0: Adds PREFIX_ERROR_POSITION to GLib.MarkupParseFlags
+
+2012-03-11  Alberto Ruiz  <aruiz gnome org>
+
+	glib-2.0: Adds GLib.MarkupParseContext.get_user_data ()
+	Fixes bug #671749
+
+2012-03-09  JÃrg Billeter  <j bitron ch>
+
+	Add udisks2 bindings
+
+2012-03-09  Luca Bruno  <lucabru src gnome org>
+
+	gtk+-3.0: Fix autogeneration of ColorButton.get_rgba
+	Apologies for approving commit 51044a92ed44776e6.
+
+	gio-2.0: Mark TlsCertificate as a concrete class
+	Keep the class concrete for backward compatibility.
+
+	Fixes bug 671459.
+
+2012-03-06  Robert Ancell  <robert ancell canonical com>
+
+	gtk+-3.0: Fix output parameter of Gtk.ColorButton.get_rgba
+	Fixes bug 669386.
+
+2012-03-06  Luca Bruno  <lucabru src gnome org>
+
+	glib-2.0: Add generic to ThreadPool.set_sort_function callback
+	Thanks to Paul Jakma for the patch.
+
+	Fixes bug 670205.
+
+2012-03-06  Aaron Andersen  <aaron fosslib net>
+
+	posix: Fix several string functions
+	Fixes bug 671309.
+
+2012-03-06  Luca Bruno  <lucabru src gnome org>
+
+	gtk+-2.0, gtk+-3.0: Unset virtual to Container.forall
+	Fixes bug 671394.
+
+2012-02-25  JÃrg Billeter  <j bitron ch>
+
+	Release 0.15.2
+
+	gtk+-3.0: Add Widget.get_preferred_width_for_height_internal
+
+2012-02-24  Jens Georg  <mail jensge org>
+
+	libsoup2.4: Fix arguments for MessageHeaders.get_range
+	https://bugzilla.gnome.org/show_bug.cgi?id=670602
+
+2012-02-23  JÃrg Billeter  <j bitron ch>
+
+	gdk-3.0: Fix gdk_window_destroy binding again
+
+2012-02-21  Stefano Debenedetti  <ste demaledetti net>
+
+	posix: Add SockAddrIn6, In6Addr and inet_pton
+	Fixes bug 670492.
+
+2012-02-17  Luca Bruno  <lucabru src gnome org>
+
+	glib-2.0: Make SourceFuncs a struct
+	Thanks to Paula Jakma for the patch.
+
+	Fixes bug 669756.
+
+2012-02-13  Evan Nemerson  <evan coeus-group com>
+
+	glib-2.0: add g_thread_new and g_thread_try_new bindings
+
+2012-02-12  Evan Nemerson  <evan coeus-group com>
+
+	gtk+-3.0: update to 3.3.15
+
+2012-02-11  Luca Bruno  <lucabru src gnome org>
+
+	gio-2.0: Include gunixfdlist.h for UnixFDList
+
+2012-02-11  Jens Georg  <mail jensge org>
+
+	gstreamer-0.10: Add returns_floatin_reference to Element.make_from_uri
+	https://bugzilla.gnome.org/show_bug.cgi?id=669166
+
+2012-02-10  Luca Bruno  <lucabru src gnome org>
+
+	codegen: Allow usage of gtype structs inheriting non-gtype struct
+	The behavior of type_id is different, but get/set/take/marshaller aren't
+	as specific as type_id. Therefore this patch enhances without breaking.
+
+	Fixes bug 669604.
+
+2012-02-10  Evan Nemerson  <evan coeus-group com>
+
+	glib-2.0: add some missing deprecation information
+
+2012-02-09  Luca Bruno  <lucabru src gnome org>
+
+	gio-2.0: send_message_with_reply.out_serial is not out in vala
+	Fixes a regression introduced by the switch to GIR.
+
+	Support initializer list for structs that have a base type
+	Fixes bug 669580.
+
+2012-02-08  Jesse van den Kieboom  <jesse vandenkieboom epfl ch>
+
+	Added bindings for Object.new_valist
+	https://bugzilla.gnome.org/show_bug.cgi?id=669654
+
+	Added bindings for HashTable<K,V>.foreach_remove
+	https://bugzilla.gnome.org/show_bug.cgi?id=669653
+
+	Added error when not exporting any namespaces for GIR
+	https://bugzilla.gnome.org/show_bug.cgi?id=669551
+
+2012-02-07  Luca Bruno  <lucabru src gnome org>
+
+	gdk-pixbuf-2.0: Fix regression against PixbufSaveFunc
+	The regression was introduced by the switch to gir.
+
+	Fixes bug 669518.
+
+2012-02-06  Luca Bruno  <lucabru src gnome org>
+
+	codegen: Fix C warning when passing lambda free functions
+	Fixes bug 663651.
+
+2012-02-06  Alexander Kurtz  <kurtz alex googlemail com>
+
+	sdl: Make AudioSpec a struct, then fix Audio.open(), load() and mix()
+	Fixes bug 669279.
+
+2012-02-06  Luca Bruno  <lucabru src gnome org>
+
+	codegen: Add support for delegate_target_cname in CCode
+
+2012-02-05  Philip Withnall  <philip tecnocode co uk>
+
+	vapi: Add glib-unix.h functions to glib-2.0.vapi
+	To bind the things in glib-unix.h. Creating a separate glib-unix-2.0.vapi is
+	unneccessary because these functions are present in libglib-2.0.so itself,
+	rather than a separate library. They just require the glib-unix.h header to
+	be included.
+
+	Closes: https://bugzilla.gnome.org/show_bug.cgi?id=667894
+
+2012-02-05  Ryan Lortie  <desrt desrt ca>
+
+	glib: add .data to StringBuilder
+	To do the same thing as string.data, but without the strlen() (since we
+	already know this from the GString's length field).
+
+	https://bugzilla.gnome.org/show_bug.cgi?id=669313
+
+2012-02-03  Ryan Lortie  <desrt desrt ca>
+
+	gtk+-3.0: some updates
+	 - complete the move of the app-menu and menubar properties into
+	   GtkApplication
+
+	 - add GtkActionable interface and its implementations
+
+	 - add gtk_menu_(bar_)new_from_model() APIs
+
+	 - drop a premature add of gtk_window_setup_persistent_state()
+
+2012-02-02  Alexander Kurtz  <kurtz alex googlemail com>
+
+	glib-2.0: Mark OptionEntry.arg_description as nullable
+	Fixes bug 669241.
+
+	glib-2.0: AsyncQueue.try_pop() and timed_pop() may return null
+	Fixes bug 669242.
+
+2012-02-01  Luca Bruno  <lucabru src gnome org>
+
+	clutter-1.0: Add Box.layout_manager to not break code using old clutter
+	The Box.layout_manager property has been removed in commit 81cade2a
+	and broke code using old clutter versions.
+
+2012-02-01  Nathan Phillip Brink  <binki gentoo org>
+
+	tests: Honor CFLAGS, LDFLAGS, and CPPFLAGS
+	Fixes bug 664606.
+
+2012-02-01  Jens Georg  <mail jensge org>
+
+	gstreamer-0.10: Add returns_floating_reference to gst_parse_bin_*
+	https://bugzilla.gnome.org/show_bug.cgi?id=669060
+
+2012-02-01  Evan Nemerson  <evan coeus-group com>
+
+	libsoup-2.4: add type arguments for datalist arguments to form funcs
+
+	x11: add GIR name for XID
+
+	Add gir-bindings and gidl-bindings Makefile targets in vapi/
+
+	poppler-glib: switch to GIR
+
+	clutter-1.0: update bindings
+
+	girparser: support changing names of virtual methods without wrappers
+	Fixes bug 668991.
+
+	codegen: support virtual functions with vfunc_name but no invokers
+	Partially fixes 668991.
+
+2012-01-31  Luca Bruno  <lucabru src gnome org>
+
+	gtk+-2.0, gtk+-3.0: Mark Button.set_label parameter as nullable
+	Fixes bug 669058.
+
+2012-01-29  Luca Bruno  <lucabru src gnome org>
+
+	cogl-1.0: Use a static method instead of a constructor for Cogl.Path
+	The Cogl.Path constructor never worked, use a static method instead.
+
+	codegen: Fix getting NoAccessorMethod properties of real struct type
+
+	libpeas-1.0: Fix ExtensionSetForeachFunc binding
+	Fixes bug 660362.
+
+2012-01-28  Luca Bruno  <lucabru src gnome org>
+
+	gtk+-3.0: Mark WidgetPath.iter_has_region.flags as out
+	Fixes bug 668854.
+
+2012-01-26  JÃrg Billeter  <j bitron ch>
+
+	Release 0.15.1
+
+	Consider GLib.Object?[] compatible to GLib.Object[]
+	Fixes bug 667600.
+
+	Update .gitignore
+
+	Add missing file
+
+2012-01-26  Florian Brosch  <flo brosch gmail com>
+
+	Check type of default arguments
+
+	Report warning for type arguments in type check expressions
+
+	Report warning for type arguments in typeof expressions
+
+	girwriter: Add <doc> support
+
+	girparser: Add support for comments
+
+	Do not allow overriding content property in Comment class
+
+	gee: Add MapIterator
+
+2012-01-26  Luca Bruno  <lucabru src gnome org>
+
+	cogl-1.0: Cogl.get_viewport parameter has no array length
+
+2012-01-26  JÃrg Billeter  <j bitron ch>
+
+	Add packagekit-glib2 bindings
+
+2012-01-24  JÃrg Billeter  <j bitron ch>
+
+	Fix possibly unassigned parameter
+
+2012-01-24  Ryan Lortie  <desrt desrt ca>
+
+	codegen: Do not use g_object_class_override_property
+	Instead, always install our own new property with what we believe the
+	correct type is.  This avoids a problem with libgee providing properties
+	on some classes that implement two interfaces having the same property
+	name with different types.
+
+	Fixes bug 666728.
+
+2012-01-24  Luca Bruno  <lucabru src gnome org>
+
+	Allow specialization of generic properties
+	Fixes bug 667668.
+
+2012-01-23  Colin Walters  <walters verbum org>
+
+	vapigen: Use install-data-hook for .pc file symbolic link
+	The $(pkgconfigdir) may not have been created when we're just in
+	the install-exec phase.
+
+2012-01-23  Luca Bruno  <lucabru src gnome org>
+
+	codegen: Use NULL as default C value for nullable structs
+	Fixes bug 665904.
+
+	codegen: MemberAccess already refers to base property
+	Fixes bug 667803.
+
+	Initialize the variable directly when assigning a struct creation
+	Some structs like WeakRef or potentially Mutex can't use temporary
+	variables during initialization.
+
+2012-01-22  Alexander Kurtz  <kurtz alex googlemail com>
+
+	Add xtst bindings
+	Fixes bug 647465.
+
+2012-01-22  Evan Nemerson  <evan coeus-group com>
+
+	posix: don't use owned for resolved_path argument
+
+2012-01-22  Luca Bruno  <lucabru src gnome org>
+
+	posix: add realpath binding
+	Fixes bug 655020.
+
+2012-01-22  Rico Tzschichholz  <ricotz t-online de>
+
+	Add some missing files to EXTRA_DIST
+
+2012-01-22  Evan Nemerson  <evan coeus-group com>
+
+	glib-2.0, gobject-2.0: add new symbols from 2.32
+
+	gio-2.0: update to 2.31.12
+
+	gtk+-3.0: make ThemingEngine.register_property.parse_func nullable
+	Fixes bug 666906.
+
+	gdk-2.0: use uint8[] for Bitmap and Pixmap.create_from_data data
+	Fixes bug 646339.
+
+2012-01-22  Nicolas Bruguier  <nicolas bruguier supersonicimagine fr>
+
+	pixman-1: Fix pixman Region[16/32] and add Fixed from double/int funcs
+	Fixes bug 641962.
+
+2012-01-22  Alexander Kurtz  <kurtz alex googlemail com>
+
+	x11: add several type definitions from X.h
+	Fixes bug 647464.
+
+2012-01-21  Florian Brosch  <flo brosch gmail com>
+
+	tag sizeof as constant
+
+2012-01-21  Evan Nemerson  <evan coeus-group com>
+
+	Makefile.vapigen: use *_FILES instead of *_GIR
+	The more generic variable name is more appropriate since there may be
+	one or more custom vala file in addition to the GIR.
+
+	Add autotools vapigen integration for upstream bindings
+	Fixes bug 649526.
+
+2012-01-20  Evan Nemerson  <evan coeus-group com>
+
+	mx-1.0: various fixes for Image.set_from_buffer/data methods
+	Fixes bug 668318.
+
+2012-01-19  Evan Nemerson  <evan coeus-group com>
+
+	codegen: support free_function_address_of annotation
+
+	glib-2.0: add GByteArray bindings
+
+2012-01-18  Michael 'Mickey' Lauer  <mickey vanille-media de>
+
+	linux: change IfAddrs structure to be more useful in conjunction with getnameinfo()
+
+	posix: fix socklen_t and its usage in getnameinfo
+	Acked-by: Luca Bruno <lethalman88 gmail com>
+
+2012-01-18  Luca Bruno  <lucabru src gnome org>
+
+	codegen: Reintroduce memory leak when using generics in interfaces
+	The bug was present in older Vala versions. Reintroducing it to avoid
+	breaking old code, until a proper fix is found.
+
+	See bug 666480.
+
+2012-01-17  Florian Brosch  <flo brosch gmail com>
+
+	Check left parameter of is
+
+2012-01-17  Evan Nemerson  <evan coeus-group com>
+
+	Add gdl-3.0 bindings
+
+	clutter-gtk-1.0: switch to GIR
+
+	Add cogl-pango-1.0 bindings
+
+	gio-2.0: re-add custom delegates for ActionEntry callbacks
+
+2012-01-14  Luca Bruno  <lucabru src gnome org>
+
+	Check accessibility of type arguments
+
+2012-01-13  Luca Bruno  <lucabru src gnome org>
+
+	codegen: Fix type check for vfunc returning SimpleType structs
+	Fixes bug 667890.
+
+2012-01-13  Philip Withnall  <philip tecnocode co uk>
+
+	readline: Make the parameter of VcpFunc be nullable
+	Fixes bug 667893.
+
+2012-01-13  Fabian Deutsch  <fabian deutsch gmx de>
+
+	avahi-client: deprecated wrapper methods which throw errors
+	First step towards fixing 665375.
+
+2012-01-12  Evan Nemerson  <evan coeus-group com>
+
+	gio-2.0: don't hide UnixSocketAddressType in gio-2.0
+
+2012-01-12  Luca Bruno  <lucabru src gnome org>
+
+	gio-2.0: Ultimate fixes
+
+	gio-2.0: Fix some regressions intruduced by the GIR switch
+
+2012-01-12  Evan Nemerson  <evan coeus-group com>
+
+	gio-2.0: remove obsolete gio-2.0 GIDL data
+
+	libgdata, libpeas-1.0, libwnck-3.0, pangocairo, rest-0.7: update
+
+	girwriter: do not emit a package as a dependency of itself
+
+	atk, gdk-3.0, gdk-pixbuf-2.0, gtksourceview-3.0, mx-1.0: update
+
+	libsoup-2.4: update to 2.37.3
+
+	gio-2.0: switch to GIR
+
+2012-01-09  Fabian Deutsch  <fabian deutsch gmx de>
+
+	gtk+-2.0, gtk+-3.0: Mark BuilderConnectFunc.connect_object as nullable
+	Fixes bug 667524.
+
+2012-01-07  Luca Bruno  <lucabru src gnome org>
+
+	codegen: Don't copy array parameters when captured
+	Also allow uncopiable compact classes to be captured.
+
+	Fixes bug 639054.
+
+2012-01-07  Evan Nemerson  <evan coeus-group com>
+
+	webkit-1.0: update to 1.6.1
+
+2012-01-07  Michael 'Mickey' Lauer  <mickey vanille-media de>
+
+	posix: add getnameinfo(3) and assorted constants
+
+	posix: add members for SockAddr struct
+
+2012-01-07  Evan Nemerson  <evan coeus-group com>
+
+	clutter-1.0: add keysyms
+	Fixes bug 628103.
+
+	clutter-1.0: update to 1.9.2
+
+2012-01-06  Ryan Lortie  <desrt desrt ca>
+
+	gtk+-3.0: add gtk_window_setup_persistent_state()
+
+2012-01-06  Marc-Andrà Lureau  <marcandre lureau gmail com>
+
+	gio-2.0: add a few nullable from Menu
+	https://bugzilla.gnome.org/show_bug.cgi?id=667431
+
+	gio-2.0: add a few nullable from GSimpleAction
+	https://bugzilla.gnome.org/show_bug.cgi?id=667428
+
+2012-01-06  Ryan Lortie  <desrt desrt ca>
+
+	glib-2.0.vapi: add new GHashTable API
+	g_hash_table_add() and g_hash_table_contains() were just added to GLib
+	so add them here.
+
+	It's now possible to say 'if (key in table) { }'.
+
+	gio-2.0.vapi: some action related updates
+
+2012-01-05  Marc-Andrà Lureau  <marcandre lureau gmail com>
+
+	Set correct default value for Pango.Weight
+	https://bugzilla.gnome.org/show_bug.cgi?id=662974
+
+	gidl parse default_value for enums
+	It can be useful for correct default value in properties
+
+	https://bugzilla.gnome.org/show_bug.cgi?id=662974
+
+2012-01-05  Luca Bruno  <lucabru src gnome org>
+
+	girparser: Only reparent static methods within the same GIR
+
+2012-01-05  Zeeshan Ali (Khattak)  <zeeshanak gnome org>
+
+	gtk+-3.0: Correct binding for GtkSpinButton::input.new_value
+	Fixes bug 667329.
+
+2012-01-04  Luca Bruno  <lucabru src gnome org>
+
+	gtk+-3.0: Mark ThemingEngine.has_region.flags as out parameter
+	Fixes bug 667208.
+
+2011-12-25  Aaron Andersen  <aaron fosslib net>
+
+	codegen: Generate _dup() and _free() for structs in the posix profile
+	Fixes bug 665815.
+
+2011-12-25  Jacques-Pascal Deplaix  <jp deplaix gmail com>
+
+	glib-2.0: Fix some issues for the experimental non-null checks
+	Fixes bug 651841.
+
+2011-12-25  Marc-Andrà Lureau  <marcandre lureau gmail com>
+
+	clutter-1.0: Make State.set_key.source_state_name parameter nullable
+	Fixes bug 661018.
+
+2011-12-25  Luca Bruno  <lucabru src gnome org>
+
+	clutter-1.0: Regenerate bindings from debian sid GIR
+
+2011-12-24  Michael 'Mickey' Lauer  <mickey vanille-media de>
+
+	posix: add tzset(3) and assorted constants
+
+2011-12-23  Evan Nemerson  <evan coeus-group com>
+
+	gtk+-2.0, gtk+-3.0: make IconTheme.list_icons.context nullable
+
+2011-12-23  Philip Withnall  <philip tecnocode co uk>
+
+	glib-2.0, gio-2.0: Fix some nullable types in ContentType, Icon, HashTable
+	Fixes bug 666699.
+
+2011-12-23  Olaf  <yggtrash googlemail com>
+
+	x11: Set array_length to false for ModifierKeymap.modifiermap
+	Fixes bug 666099.
+
+2011-12-22  Luca Bruno  <lucabru src gnome org>
+
+	gdk-3.0: Drop the abstract keyword from the Cursor class
+	Vala does not allow creating new Cursor if the class is abstract.
+	As it doesn't affect its usage at all, drop the keyword
+	instead of breaking the backward compatibility.
+
+	Fixes bug 665624.
+
+	girparser: Allow specifying abstract metadata for classes
+
+	cogl-1.0: Use cogl-pango/cogl-pango.h header for pango symbols
+	Fixes bug 665953.
+
+2011-12-22  Jens Georg  <mail jensge org>
+
+	gstreamer-0.10: Fix several ownership transfer when adding children
+	gst_bin_add, gst_bin_add_many and gst_element_add_pad only transfer
+	ownership if the reference is floating, otherwise increasing the
+	refcount. The reference is added by gst_object_set_parent.
+
+	Fixes bug 666358.
+
+2011-12-22  Zeeshan Ali (Khattak)  <zeeshanak gnome org>
+
+	gtk+-2.0, gtk+-3.0: Make Editable.insert_text.position be a ref parameter
+	Fixes bug 666021.
+
+2011-12-22  Timo Kluck  <tkluck infty nl>
+
+	gobject-2.0: Fix ValueTransform and BindingTransformFunc
+	The destination GValue is already being initialized by the caller.
+
+	Fixes bug 665966.
+
+2011-12-21  JÃrg Billeter  <j bitron ch>
+
+	gtk+-3.0: Update to 3.3.6
+
+	gio-2.0: Update to 2.31.6
+
+2011-12-21  Luca Bruno  <lucabru src gnome org>
+
+	gio-2.0: Make AsyncInitable.init_async virtual instead of abstract
+	Fixes bug 666348.
+
+2011-12-20  Simon Busch  <morphis gravedo de>
+
+	linux: Add bindings for rtc_time and fix the Rtc.WakeAlarm.time field
+
+	posix: Fix termios and fd_set related functions
+
+2011-12-20  Luca Bruno  <lucabru src gnome org>
+
+	Revert "posix: Mark several termios and fd_set parameters as ref"
+	This reverts commit 7b34e0ca7dc5d6cef5b75e8d8f7dc2723050df0d.
+
+2011-12-20  Ryan Lortie  <desrt desrt ca>
+
+	gtk3 vapi: GtkApplication additions
+
+	gio vapi: GApplication, Menus, ActionGroup updates
+
+2011-12-18  JÃrg Billeter  <j bitron ch>
+
+	codegen: Fix external fields
+
+2011-12-17  Klaus Kurzmann  <mok fluxnetz de>
+
+	libnl-3.0: add bindings
+
+2011-12-16  Evan Nemerson  <evan coeus-group com>
+
+	gtk+-2.0, gtk+-3.0: fix IconTheme.get_search_path argument type
+
+2011-12-16  JÃrg Billeter  <j bitron ch>
+
+	gtk+-3.0: Improve Dialog.get_content_area binding
+	gtk_dialog_get_content_area always returns a pointer to GtkBox.
+
+2011-12-15  JÃrg Billeter  <j bitron ch>
+
+	Do not install vala.m4 with --disable-unversioned
+	This avoids file conflicts with parallel installations.
+
+2011-12-11  Simon Busch  <morphis gravedo de>
+
+	posix: Mark several termios and fd_set parameters as ref
+
+	GVariant: Close the switch statement in the generated to_string() of enums
+
+	posix: Set the C name of Posix.tm to "struct tm"
+
+2011-12-10  Aaron Andersen  <aaron fosslib net>
+
+	Support creation of arrays with nullable elements
+	Partially fixes bug 571486.
+
+2011-12-09  JÃrg Billeter  <j bitron ch>
+
+	Report error on duplicate attributes
+
+	gtk+-3.0: Fix gtk_widgets_compute_expand bindings
+	Based on patch by Alexander Larsson.
+
+	Fixes bug 665860.
+
+2011-12-09  Luca Bruno  <lucabru src gnome org>
+
+	girparser: Fix criticals on calculate_common_prefix
+
+2011-12-08  Simon Busch  <morphis gravedo de>
+
+	alsa: Fix default value of a Mixer.register() parameter
+
+	linux: Squash declaration of multiple CCode into a single CCode attribute
+
+2011-12-07  Simon Busch  <morphis gravedo de>
+
+	linux: Set array_length=false for IfReq.ifr_name
+
 2011-12-05  JÃrg Billeter  <j bitron ch>
 
 	Release 0.15.0
diff --git a/INSTALL b/INSTALL
index 7d1c323..6e90e07 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,8 +1,8 @@
 Installation Instructions
 *************************
 
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
-2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+Copyright (C) 1994-1996, 1999-2002, 2004-2012 Free Software Foundation,
+Inc.
 
    Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
@@ -226,6 +226,11 @@ order to use an ANSI C compiler:
 
 and if that doesn't work, install pre-built binaries of GCC for HP-UX.
 
+   HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved.  Use GNU `make'
+instead.
+
    On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
 parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
 a workaround.  If GNU CC is not installed, it is therefore recommended
@@ -304,9 +309,10 @@ causes the specified `gcc' to be used as the C compiler (unless it is
 overridden in the site shell script).
 
 Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf bug.  Until the bug is fixed you can use this workaround:
+an Autoconf limitation.  Until the limitation is lifted, you can use
+this workaround:
 
-     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
 
 `configure' Invocation
 ======================
@@ -362,4 +368,3 @@ operates.
 
 `configure' also accepts some other, not widely useful, options.  Run
 `configure --help' for more details.
-
diff --git a/Makefile.am b/Makefile.am
index 943e23d..3a8fc6c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -33,8 +33,10 @@ DIST_SUBDIRS = \
 	vapigen \
 	$(NULL)
 
+if ENABLE_UNVERSIONED
 aclocaldir = $(datadir)/aclocal
-dist_aclocal_DATA = vala.m4
+aclocal_DATA = vala.m4
+endif
 
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libvala PACKAGE_SUFFIX@.pc
@@ -104,6 +106,7 @@ EXTRA_DIST = \
 	ChangeLog.pre-0-5-7 \
 	MAINTAINERS \
 	libvala.pc.in \
+	vala.m4 \
 	.version \
 	build-aux/git-version-gen \
 	build-aux/gitlog-to-changelog \
diff --git a/Makefile.in b/Makefile.in
index 0dbe076..0a8dc88 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,6 +15,23 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkglibexecdir = $(libexecdir)/@PACKAGE@
@@ -34,13 +50,17 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = .
-DIST_COMMON = README $(am__configure_deps) $(dist_aclocal_DATA) \
-	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(srcdir)/config.h.in $(srcdir)/libvala.pc.in \
-	$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
-	THANKS build-aux/compile build-aux/config.guess \
-	build-aux/config.sub build-aux/depcomp build-aux/install-sh \
-	build-aux/ltmain.sh build-aux/missing build-aux/ylwrap
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
+	$(srcdir)/libvala.pc.in $(top_srcdir)/build-aux/compile \
+	$(top_srcdir)/build-aux/config.guess \
+	$(top_srcdir)/build-aux/config.sub \
+	$(top_srcdir)/build-aux/install-sh \
+	$(top_srcdir)/build-aux/ltmain.sh \
+	$(top_srcdir)/build-aux/missing $(top_srcdir)/configure \
+	AUTHORS COPYING ChangeLog INSTALL NEWS THANKS \
+	build-aux/compile build-aux/config.guess build-aux/config.sub \
+	build-aux/install-sh build-aux/ltmain.sh build-aux/missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -54,11 +74,11 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES = libvala.pc
 CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_ AM_V@)
+am__v_GEN_ = $(am__v_GEN_ AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+AM_V_at = $(am__v_at_ AM_V@)
+am__v_at_ = $(am__v_at_ AM_DEFAULT_V@)
 am__v_at_0 = @
 SOURCES =
 DIST_SOURCES =
@@ -69,6 +89,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -90,23 +115,33 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(aclocaldir)" \
 	"$(DESTDIR)$(pkgconfigdir)"
-DATA = $(dist_aclocal_DATA) $(pkgconfig_DATA)
+DATA = $(aclocal_DATA) $(pkgconfig_DATA)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
 AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
 	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir dist dist-all distcheck
+	cscope distdir dist dist-all distcheck
 ETAGS = etags
 CTAGS = ctags
+CSCOPE = cscope
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
 am__remove_distdir = \
-  { test ! -d "$(distdir)" \
-    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr "$(distdir)"; }; }
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
 am__relativize = \
   dir0=`pwd`; \
   sed_first='s,^\([^/]*\)/.*$$,\1,'; \
@@ -134,7 +169,10 @@ am__relativize = \
   reldir="$$dir2"
 DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
 GZIP_ENV = --best
+DIST_TARGETS = dist-bzip2 dist-gzip
 distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
 distcleancheck_listfiles = find . -type f -print
 pkgdatadir = @pkgdatadir@
 ACLOCAL = @ACLOCAL@
@@ -259,7 +297,6 @@ libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 prefix = @prefix@
@@ -307,8 +344,8 @@ DIST_SUBDIRS = \
 	vapigen \
 	$(NULL)
 
-aclocaldir = $(datadir)/aclocal
-dist_aclocal_DATA = vala.m4
+ ENABLE_UNVERSIONED_TRUE@aclocaldir = $(datadir)/aclocal
+ ENABLE_UNVERSIONED_TRUE@aclocal_DATA = vala.m4
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libvala PACKAGE_SUFFIX@.pc
 BUILT_SOURCES = $(top_srcdir)/.version
@@ -321,6 +358,7 @@ EXTRA_DIST = \
 	ChangeLog.pre-0-5-7 \
 	MAINTAINERS \
 	libvala.pc.in \
+	vala.m4 \
 	.version \
 	build-aux/git-version-gen \
 	build-aux/gitlog-to-changelog \
@@ -331,7 +369,7 @@ all: $(BUILT_SOURCES) config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
-am--refresh:
+am--refresh: Makefile
 	@:
 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
@@ -367,10 +405,8 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 
 config.h: stamp-h1
-	@if test ! -f $@; then \
-	  rm -f stamp-h1; \
-	  $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
-	else :; fi
+	@if test ! -f $@; then rm -f stamp-h1; else :; fi
+	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
 
 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
 	@rm -f stamp-h1
@@ -393,10 +429,13 @@ clean-libtool:
 
 distclean-libtool:
 	-rm -f libtool config.lt
-install-dist_aclocalDATA: $(dist_aclocal_DATA)
+install-aclocalDATA: $(aclocal_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(aclocaldir)" || $(MKDIR_P) "$(DESTDIR)$(aclocaldir)"
-	@list='$(dist_aclocal_DATA)'; test -n "$(aclocaldir)" || list=; \
+	@list='$(aclocal_DATA)'; test -n "$(aclocaldir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(aclocaldir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(aclocaldir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -406,17 +445,18 @@ install-dist_aclocalDATA: $(dist_aclocal_DATA)
 	  $(INSTALL_DATA) $$files "$(DESTDIR)$(aclocaldir)" || exit $$?; \
 	done
 
-uninstall-dist_aclocalDATA:
+uninstall-aclocalDATA:
 	@$(NORMAL_UNINSTALL)
-	@list='$(dist_aclocal_DATA)'; test -n "$(aclocaldir)" || list=; \
+	@list='$(aclocal_DATA)'; test -n "$(aclocaldir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(aclocaldir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(aclocaldir)" && rm -f $$files
+	dir='$(DESTDIR)$(aclocaldir)'; $(am__uninstall_files_from_dir)
 install-pkgconfigDATA: $(pkgconfig_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
 	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -430,16 +470,14 @@ uninstall-pkgconfigDATA:
 	@$(NORMAL_UNINSTALL)
 	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
+	dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
 $(RECURSIVE_TARGETS):
 	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
@@ -503,6 +541,10 @@ ctags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
 	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
 	done
+cscopelist-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+	done
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -566,8 +608,32 @@ GTAGS:
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
 
+cscope: cscope.files
+	test ! -s cscope.files \
+	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+
+clean-cscope:
+	-rm -f cscope.files
+
+cscope.files: clean-cscope cscopelist-recursive cscopelist
+
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
 
 distdir: $(DISTFILES)
 	$(am__remove_distdir)
@@ -603,13 +669,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
@@ -641,36 +704,35 @@ distdir: $(DISTFILES)
 	|| chmod -R a+r "$(distdir)"
 dist-gzip: distdir
 	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 dist-bzip2: distdir
-	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
-	$(am__remove_distdir)
+	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+	$(am__post_remove_distdir)
 
-dist-lzma: distdir
-	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
-	$(am__remove_distdir)
+dist-lzip: distdir
+	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+	$(am__post_remove_distdir)
 
 dist-xz: distdir
-	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
-	$(am__remove_distdir)
+	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+	$(am__post_remove_distdir)
 
 dist-tarZ: distdir
 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
 dist-shar: distdir
 	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
 dist-zip: distdir
 	-rm -f $(distdir).zip
 	zip -rq $(distdir).zip $(distdir)
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
-dist dist-all: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
-	$(am__remove_distdir)
+dist dist-all:
+	$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+	$(am__post_remove_distdir)
 
 # This target untars the dist file and tries a VPATH configuration.  Then
 # it guarantees that the distribution is self-contained by making another
@@ -681,8 +743,8 @@ distcheck: dist
 	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
 	*.tar.bz2*) \
 	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
-	*.tar.lzma*) \
-	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.lz*) \
+	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
 	*.tar.xz*) \
 	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
 	*.tar.Z*) \
@@ -702,6 +764,7 @@ distcheck: dist
 	  && am__cwd=`pwd` \
 	  && $(am__cd) $(distdir)/_build \
 	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
 	    $(DISTCHECK_CONFIGURE_FLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
@@ -725,13 +788,21 @@ distcheck: dist
 	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
 	  && cd "$$am__cwd" \
 	  || exit 1
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 	@(echo "$(distdir) archives ready for distribution: "; \
 	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
 	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
 distuninstallcheck:
-	@$(am__cd) '$(distuninstallcheck_dir)' \
-	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	@test -n '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: trying to run $@ with an empty' \
+	       '$$(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	$(am__cd) '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
 	   || { echo "ERROR: files left after uninstall:" ; \
 	        if test -n "$(DESTDIR)"; then \
 	          echo "  (check DESTDIR support)"; \
@@ -767,10 +838,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -807,7 +883,7 @@ info: info-recursive
 
 info-am:
 
-install-data-am: install-dist_aclocalDATA install-pkgconfigDATA
+install-data-am: install-aclocalDATA install-pkgconfigDATA
 
 install-dvi: install-dvi-recursive
 
@@ -853,29 +929,30 @@ ps: ps-recursive
 
 ps-am:
 
-uninstall-am: uninstall-dist_aclocalDATA uninstall-pkgconfigDATA
+uninstall-am: uninstall-aclocalDATA uninstall-pkgconfigDATA
 
 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
-	ctags-recursive install install-am install-strip \
-	tags-recursive
+	cscopelist-recursive ctags-recursive install install-am \
+	install-strip tags-recursive
 
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am am--refresh check check-am clean clean-generic \
-	clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
-	dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-xz \
-	dist-zip distcheck distclean distclean-generic distclean-hdr \
-	distclean-libtool distclean-tags distcleancheck distdir \
-	distuninstallcheck dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am \
-	install-dist_aclocalDATA install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-pkgconfigDATA install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am tags tags-recursive uninstall uninstall-am \
-	uninstall-dist_aclocalDATA uninstall-pkgconfigDATA
+	all all-am am--refresh check check-am clean clean-cscope \
+	clean-generic clean-libtool cscope cscopelist \
+	cscopelist-recursive ctags ctags-recursive dist dist-all \
+	dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar dist-tarZ \
+	dist-xz dist-zip distcheck distclean distclean-generic \
+	distclean-hdr distclean-libtool distclean-tags distcleancheck \
+	distdir distuninstallcheck dvi dvi-am html html-am info \
+	info-am install install-aclocalDATA install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-pkgconfigDATA install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs installdirs-am \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-aclocalDATA \
+	uninstall-am uninstall-pkgconfigDATA
 
 
 libvala PACKAGE_SUFFIX@.pc: libvala.pc
diff --git a/NEWS b/NEWS
index e4c833b..4cebb56 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,34 @@
+Vala 0.16.1
+===========
+
+ * Bug fixes and binding updates.
+
+Vala 0.16.0
+===========
+
+ * Add udisks2 bindings.
+ * Bug fixes and binding updates.
+
+Vala 0.15.2
+===========
+
+ * Switch poppler-glib bindings to .gir.
+ * Many bug fixes and binding updates.
+
+Vala 0.15.1
+===========
+
+ * Support arrays with nullable elements.
+ * Add <doc> support to .gir reader and writer.
+ * Switch clutter-gtk-1.0 bindings to .gir.
+ * Switch gio-2.0 bindings to .gir.
+ * Add cogl-pango-1.0 bindings.
+ * Add gdl-3.0 bindings.
+ * Add libnl-3.0 bindings.
+ * Add packagekit-glib2 bindings.
+ * Add xtst bindings.
+ * Many bug fixes and binding updates.
+
 Vala 0.15.0
 ===========
 
diff --git a/aclocal.m4 b/aclocal.m4
index e5cf593..0c309b9 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,7 +1,7 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.12.1 -*- Autoconf -*-
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -13,11 +13,11 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
-[m4_warning([this file was generated for autoconf 2.68.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically `autoreconf'.])])
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
 
 # pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
 # serial 1 (pkg-config-0.24)
@@ -179,22 +179,24 @@ else
 fi[]dnl
 ])# PKG_CHECK_MODULES
 
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2002-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 8
+
 # AM_AUTOMAKE_VERSION(VERSION)
 # ----------------------------
 # Automake X.Y traces this macro to ensure aclocal.m4 has been
 # generated from the m4 files accompanying Automake X.Y.
 # (This private macro should not be called outside this file.)
 AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.11'
+[am__api_version='1.12'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11.1], [],
+m4_if([$1], [1.12.1], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -210,22 +212,24 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.1])dnl
+[AM_AUTOMAKE_VERSION([1.12.1])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 2
+
 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+# $ac_aux_dir to '$srcdir/foo'.  In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
 #
 # Of course, Automake must honor this variable whenever it calls a
 # tool from the auxiliary directory.  The problem is that $srcdir (and
@@ -244,7 +248,7 @@ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 #
 # The reason of the latter failure is that $top_srcdir and $ac_aux_dir
 # are both prefixed by $srcdir.  In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
+# harmless because $srcdir is '.', but things will broke when you
 # start a VPATH build or use an absolute $srcdir.
 #
 # So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
@@ -270,22 +274,21 @@ am_aux_dir=`cd $ac_aux_dir && pwd`
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1997-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 9
+# serial 10
 
 # AM_CONDITIONAL(NAME, SHELL-CONDITION)
 # -------------------------------------
 # Define a conditional.
 AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
- ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
 AC_SUBST([$1_TRUE])dnl
 AC_SUBST([$1_FALSE])dnl
 _AM_SUBST_NOTMAKE([$1_TRUE])dnl
@@ -304,16 +307,15 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
-# Free Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 10
+# serial 17
 
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
 # written in clear, in which case automake, when reading aclocal.m4,
 # will think it sees a *use*, and therefore will trigger all it's
 # C support machinery.  Also note that it means that autoscan, seeing
@@ -323,7 +325,7 @@ fi])])
 # _AM_DEPENDENCIES(NAME)
 # ----------------------
 # See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
 # We try a few techniques and use that to set a single cache variable.
 #
 # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
@@ -336,12 +338,13 @@ AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
 AC_REQUIRE([AM_MAKE_INCLUDE])dnl
 AC_REQUIRE([AM_DEP_TRACK])dnl
 
-ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
-       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
-       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
-       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
-                   [depcc="$$1"   am_compiler_list=])
+m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
+      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
+      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+      [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+      [$1], [UPC],  [depcc="$UPC"  am_compiler_list=],
+      [$1], [GCJ],  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                    [depcc="$$1"   am_compiler_list=])
 
 AC_CACHE_CHECK([dependency style of $depcc],
                [am_cv_$1_dependencies_compiler_type],
@@ -349,8 +352,9 @@ AC_CACHE_CHECK([dependency style of $depcc],
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -389,16 +393,16 @@ AC_CACHE_CHECK([dependency style of $depcc],
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
     # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
@@ -407,16 +411,16 @@ AC_CACHE_CHECK([dependency style of $depcc],
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
 	continue
       else
 	break
       fi
       ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
@@ -464,7 +468,7 @@ AM_CONDITIONAL([am__fastdep$1], [
 # AM_SET_DEPDIR
 # -------------
 # Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
 AC_DEFUN([AM_SET_DEPDIR],
 [AC_REQUIRE([AM_SET_LEADING_DOT])dnl
 AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
@@ -474,28 +478,34 @@ AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
 # AM_DEP_TRACK
 # ------------
 AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors])
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+  [--enable-dependency-tracking],
+  [do not reject slow dependency extractors])
+AS_HELP_STRING(
+  [--disable-dependency-tracking],
+  [speeds up one-time build])])
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
 AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
 AC_SUBST([AMDEPBACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
 ])
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-#serial 5
+# serial 6
 
 # _AM_OUTPUT_DEPENDENCY_COMMANDS
 # ------------------------------
@@ -514,7 +524,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
     # Strip MF so we end up with the name of the file.
     mf=`echo "$mf" | sed -e 's/:.*$//'`
     # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
+    # We used to match only the files named 'Makefile.in', but
     # some people rename them; so instead we look at the file content.
     # Grep'ing the first line is not enough: some people post-process
     # each Makefile.in and add a new line on top of each file to say so.
@@ -526,21 +536,19 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
       continue
     fi
     # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
+    # from the Makefile without running 'make'.
     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
     test -z "$DEPDIR" && continue
     am__include=`sed -n 's/^am__include = //p' < "$mf"`
     test -z "am__include" && continue
     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
     # Find all dependency output files, they are included files with
     # $(DEPDIR) in their names.  We invoke sed twice because it is the
     # simplest approach to changing $(DEPDIR) to its actual value in the
     # expansion.
     for file in `sed -n "
       s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
       # Make sure the directory exists.
       test -f "$dirpart/$file" && continue
       fdir=`AS_DIRNAME(["$file"])`
@@ -558,7 +566,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
 # This macro should only be invoked once -- use via AC_REQUIRE.
 #
 # This code is only required when automatic dependency tracking
-# is enabled.  FIXME.  This creates each `.P' file that we will
+# is enabled.  FIXME.  This creates each '.P' file that we will
 # need in order to bootstrap the dependency handling code.
 AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 [AC_CONFIG_COMMANDS([depfiles],
@@ -568,14 +576,13 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 16
+# serial 19
 
 # This macro actually does too much.  Some checks are only needed if
 # your package does certain things.  But this isn't really a big deal.
@@ -621,31 +628,36 @@ AC_SUBST([CYGPATH_W])
 # Define the identity of the package.
 dnl Distinguish between old-style and new-style calls.
 m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+[AC_DIAGNOSE([obsolete],
+[$0: two- and three-arguments forms are deprecated.  For more info, see:
+http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
  AC_SUBST([PACKAGE], [$1])dnl
  AC_SUBST([VERSION], [$2])],
 [_AM_SET_OPTIONS([$1])dnl
 dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+m4_if(
+  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  [ok:ok],,
   [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
  AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
  AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
 
 _AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
 
 # Some tools Automake needs.
 AC_REQUIRE([AM_SANITY_CHECK])dnl
 AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
 AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
 AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
 AC_REQUIRE([AC_PROG_AWK])dnl
@@ -656,28 +668,35 @@ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
 			     [_AM_PROG_TAR([v7])])])
 _AM_IF_OPTION([no-dependencies],,
 [AC_PROVIDE_IFELSE([AC_PROG_CC],
-		  [_AM_DEPENDENCIES(CC)],
-		  [define([AC_PROG_CC],
-			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+		  [_AM_DEPENDENCIES([CC])],
+		  [m4_define([AC_PROG_CC],
+			     m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_CXX],
-		  [_AM_DEPENDENCIES(CXX)],
-		  [define([AC_PROG_CXX],
-			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+		  [_AM_DEPENDENCIES([CXX])],
+		  [m4_define([AC_PROG_CXX],
+			     m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_OBJC],
-		  [_AM_DEPENDENCIES(OBJC)],
-		  [define([AC_PROG_OBJC],
-			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+		  [_AM_DEPENDENCIES([OBJC])],
+		  [m4_define([AC_PROG_OBJC],
+			     m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+dnl Support for Objective C++ was only introduced in Autoconf 2.65,
+dnl but we still cater to Autoconf 2.62.
+m4_ifdef([AC_PROG_OBJCXX],
+[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+		  [_AM_DEPENDENCIES([OBJCXX])],
+		  [m4_define([AC_PROG_OBJCXX],
+			     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl
 ])
 _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
-dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
-dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
 dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
 AC_CONFIG_COMMANDS_PRE(dnl
 [m4_provide_if([_AM_COMPILER_EXEEXT],
   [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
 ])
 
-dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
 dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
 dnl mangled by Autoconf and run in a shell conditional statement.
 m4_define([_AC_COMPILER_EXEEXT],
@@ -705,12 +724,14 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 8
+
 # AM_PROG_INSTALL_SH
 # ------------------
 # Define $install_sh.
@@ -724,9 +745,9 @@ if test x"${install_sh}" != xset; then
     install_sh="\${SHELL} $am_aux_dir/install-sh"
   esac
 fi
-AC_SUBST(install_sh)])
+AC_SUBST([install_sh])])
 
-# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2003-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -750,20 +771,19 @@ AC_SUBST([am__leading_dot])])
 # Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
 # From Jim Meyering
 
-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 5
+# serial 7
 
 # AM_MAINTAINER_MODE([DEFAULT-MODE])
 # ----------------------------------
 # Control maintainer-specific portions of Makefiles.
-# Default is to disable them, unless `enable' is passed literally.
-# For symmetry, `disable' may be passed as well.  Anyway, the user
+# Default is to disable them, unless 'enable' is passed literally.
+# For symmetry, 'disable' may be passed as well.  Anyway, the user
 # can override the default with the --enable/--disable switch.
 AC_DEFUN([AM_MAINTAINER_MODE],
 [m4_case(m4_default([$1], [disable]),
@@ -771,13 +791,14 @@ AC_DEFUN([AM_MAINTAINER_MODE],
        [disable], [m4_define([am_maintainer_other], [enable])],
        [m4_define([am_maintainer_other], [enable])
         m4_warn([syntax], [unexpected argument to AM@&t _MAINTAINER_MODE: $1])])
-AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
   dnl maintainer-mode's default is 'disable' unless 'enable' is passed
   AC_ARG_ENABLE([maintainer-mode],
-[  --][am_maintainer_other][-maintainer-mode  am_maintainer_other make rules and dependencies not useful
-			  (and sometimes confusing) to the casual installer],
-      [USE_MAINTAINER_MODE=$enableval],
-      [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+    [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
+      am_maintainer_other[ make rules and dependencies not useful
+      (and sometimes confusing) to the casual installer])],
+    [USE_MAINTAINER_MODE=$enableval],
+    [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
   AC_MSG_RESULT([$USE_MAINTAINER_MODE])
   AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
   MAINT=$MAINTAINER_MODE_TRUE
@@ -789,13 +810,13 @@ AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
 
 # Check to see how 'make' treats includes.	            -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 4
+# serial 5
 
 # AM_MAKE_INCLUDE()
 # -----------------
@@ -814,7 +835,7 @@ am__quote=
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
+# Ignore all kinds of additional output from 'make'.
 case `$am_make -s -f confmf 2> /dev/null` in #(
 *the\ am__doit\ target*)
   am__include=include
@@ -839,8 +860,7 @@ AC_MSG_RESULT([$_am_result])
 rm -f confinc confmf
 ])
 
-# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -876,14 +896,13 @@ m4_define([AC_PROG_CC],
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1997-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 6
+# serial 7
 
 # AM_MISSING_PROG(NAME, PROGRAM)
 # ------------------------------
@@ -913,45 +932,19 @@ if eval "$MISSING --run true"; then
   am_missing_run="$MISSING --run "
 else
   am_missing_run=
-  AC_MSG_WARN([`missing' script is too old or missing])
+  AC_MSG_WARN(['missing' script is too old or missing])
 fi
 ])
 
-# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for `mkdir -p'.
-AC_DEFUN([AM_PROG_MKDIR_P],
-[AC_PREREQ([2.60])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
-dnl while keeping a definition of mkdir_p for backward compatibility.
-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
-dnl Makefile.ins that do not define MKDIR_P, so we do our own
-dnl adjustment using top_builddir (which is defined more often than
-dnl MKDIR_P).
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-case $mkdir_p in
-  [[\\/$]]* | ?:[[\\/]]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-])
-
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 4
+# serial 6
 
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
@@ -959,13 +952,13 @@ AC_DEFUN([_AM_MANGLE_OPTION],
 [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
 
 # _AM_SET_OPTION(NAME)
-# ------------------------------
+# --------------------
 # Set option NAME.  Presently that only means defining a flag for this option.
 AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
 
 # _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
+# ------------------------
 # OPTIONS is a space-separated list of Automake options.
 AC_DEFUN([_AM_SET_OPTIONS],
 [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
@@ -978,22 +971,18 @@ AC_DEFUN([_AM_IF_OPTION],
 
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 5
+# serial 9
 
 # AM_SANITY_CHECK
 # ---------------
 AC_DEFUN([AM_SANITY_CHECK],
 [AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
 # Reject unsafe characters in $srcdir or the absolute working directory
 # name.  Accept space and tab only in the latter.
 am_lf='
@@ -1004,32 +993,40 @@ case `pwd` in
 esac
 case $srcdir in
   *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
-    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
 esac
 
-# Do `set' in a subshell so we don't clobber the current shell's
+# Do 'set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$[*]" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$[*]" != "X $srcdir/configure conftest.file" \
-      && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-alias in your environment])
-   fi
-
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$[*]" = "X"; then
+	# -L didn't work.
+	set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$[*]" != "X $srcdir/configure conftest.file" \
+	&& test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+	# If neither matched, then we have a broken ls.  This can happen
+	# if, for instance, CONFIG_SHELL is bash and it inherits a
+	# broken ls alias from the environment.  This has actually
+	# happened.  Such a system could not be considered "sane".
+	AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment])
+     fi
+     if test "$[2]" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
    test "$[2]" = conftest.file
    )
 then
@@ -1039,70 +1036,123 @@ else
    AC_MSG_ERROR([newly created file is older than distributed files!
 Check your system clock])
 fi
-AC_MSG_RESULT(yes)])
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+  [AC_MSG_CHECKING([that generated files are newer than configure])
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
 
-# Copyright (C) 2009  Free Software Foundation, Inc.
+# Copyright (C) 2009-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 1
+# serial 3
 
 # AM_SILENT_RULES([DEFAULT])
 # --------------------------
 # Enable less verbose build rules; with the default set to DEFAULT
-# (`yes' being less verbose, `no' or empty being verbose).
+# ("yes" being less verbose, "no" or empty being verbose).
 AC_DEFUN([AM_SILENT_RULES],
-[AC_ARG_ENABLE([silent-rules],
-[  --enable-silent-rules          less verbose build output (undo: `make V=1')
-  --disable-silent-rules         verbose build output (undo: `make V=0')])
-case $enable_silent_rules in
-yes) AM_DEFAULT_VERBOSITY=0;;
-no)  AM_DEFAULT_VERBOSITY=1;;
-*)   AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+  [--enable-silent-rules],
+  [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+  [--disable-silent-rules],
+  [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
 esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+   [am_cv_make_support_nested_variables],
+   [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+  dnl Using '$V' instead of '$(V)' breaks IRIX make.
+  AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
 AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
 AM_BACKSLASH='\'
 AC_SUBST([AM_BACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 ])
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 2
+
 # AM_PROG_INSTALL_STRIP
 # ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
+# One issue with vendor 'install' (even GNU) is that you can't
 # specify the program used to strip binaries.  This is especially
 # annoying in cross-compiling environments, where the build's strip
 # is unlikely to handle the host's binaries.
 # Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
+# always use install-sh in "make install-strip", and initialize
 # STRIPPROG with the value of the STRIP variable (set by the user).
 AC_DEFUN([AM_PROG_INSTALL_STRIP],
 [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
 # tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
 if test "$cross_compiling" != no; then
   AC_CHECK_TOOL([STRIP], [strip], :)
 fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -1111,24 +1161,24 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2004-2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_PROG_TAR(FORMAT)
 # --------------------
 # Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
 #
 # Substitute a variable $(am__tar) that is a command
 # writing to stdout a FORMAT-tarball containing the directory
@@ -1139,10 +1189,11 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
 AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
+[# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
 m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
      [m4_case([$1], [ustar],, [pax],,
               [m4_fatal([Unknown tar format])])
 AC_MSG_CHECKING([how to create a $1 tar archive])
@@ -1150,7 +1201,7 @@ AC_MSG_CHECKING([how to create a $1 tar archive])
 _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
 _am_tools=${am_cv_prog_tar_$1-$_am_tools}
 # Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
+# Solaris sh will not grok spaces in the rhs of '-'.
 for _am_tool in $_am_tools
 do
   case $_am_tool in
diff --git a/build-aux/compile b/build-aux/compile
index c0096a7..7b4a9a7 100755
--- a/build-aux/compile
+++ b/build-aux/compile
@@ -1,10 +1,9 @@
 #! /bin/sh
-# Wrapper for compilers which do not understand `-c -o'.
+# Wrapper for compilers which do not understand '-c -o'.
 
-scriptversion=2009-10-06.20; # UTC
+scriptversion=2012-03-05.13; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009  Free Software
-# Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
 # Written by Tom Tromey <tromey cygnus com>.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -29,21 +28,219 @@ scriptversion=2009-10-06.20; # UTC
 # bugs to <bug-automake gnu org> or send patches to
 # <automake-patches gnu org>.
 
+nl='
+'
+
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" ""	$nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+  file=$1
+  case $file in
+    / | /[!/]*) # absolute file, and not a UNC file
+      if test -z "$file_conv"; then
+	# lazily determine how to convert abs files
+	case `uname -s` in
+	  MINGW*)
+	    file_conv=mingw
+	    ;;
+	  CYGWIN*)
+	    file_conv=cygwin
+	    ;;
+	  *)
+	    file_conv=wine
+	    ;;
+	esac
+      fi
+      case $file_conv/,$2, in
+	*,$file_conv,*)
+	  ;;
+	mingw/*)
+	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+	  ;;
+	cygwin/*)
+	  file=`cygpath -m "$file" || echo "$file"`
+	  ;;
+	wine/*)
+	  file=`winepath -w "$file" || echo "$file"`
+	  ;;
+      esac
+      ;;
+  esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+  func_file_conv "$1"
+  if test -z "$lib_path"; then
+    lib_path=$file
+  else
+    lib_path="$lib_path;$file"
+  fi
+  linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+  lib=$1
+  found=no
+  save_IFS=$IFS
+  IFS=';'
+  for dir in $lib_path $LIB
+  do
+    IFS=$save_IFS
+    if $shared && test -f "$dir/$lib.dll.lib"; then
+      found=yes
+      lib=$dir/$lib.dll.lib
+      break
+    fi
+    if test -f "$dir/$lib.lib"; then
+      found=yes
+      lib=$dir/$lib.lib
+      break
+    fi
+  done
+  IFS=$save_IFS
+
+  if test "$found" != yes; then
+    lib=$lib.lib
+  fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+  # Assume a capable shell
+  lib_path=
+  shared=:
+  linker_opts=
+  for arg
+  do
+    if test -n "$eat"; then
+      eat=
+    else
+      case $1 in
+	-o)
+	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
+	  eat=1
+	  case $2 in
+	    *.o | *.[oO][bB][jJ])
+	      func_file_conv "$2"
+	      set x "$@" -Fo"$file"
+	      shift
+	      ;;
+	    *)
+	      func_file_conv "$2"
+	      set x "$@" -Fe"$file"
+	      shift
+	      ;;
+	  esac
+	  ;;
+	-I)
+	  eat=1
+	  func_file_conv "$2" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
+	-I*)
+	  func_file_conv "${1#-I}" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
+	-l)
+	  eat=1
+	  func_cl_dashl "$2"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-l*)
+	  func_cl_dashl "${1#-l}"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-L)
+	  eat=1
+	  func_cl_dashL "$2"
+	  ;;
+	-L*)
+	  func_cl_dashL "${1#-L}"
+	  ;;
+	-static)
+	  shared=false
+	  ;;
+	-Wl,*)
+	  arg=${1#-Wl,}
+	  save_ifs="$IFS"; IFS=','
+	  for flag in $arg; do
+	    IFS="$save_ifs"
+	    linker_opts="$linker_opts $flag"
+	  done
+	  IFS="$save_ifs"
+	  ;;
+	-Xlinker)
+	  eat=1
+	  linker_opts="$linker_opts $2"
+	  ;;
+	-*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+	  func_file_conv "$1"
+	  set x "$@" -Tp"$file"
+	  shift
+	  ;;
+	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+	  func_file_conv "$1" mingw
+	  set x "$@" "$file"
+	  shift
+	  ;;
+	*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+      esac
+    fi
+    shift
+  done
+  if test -n "$linker_opts"; then
+    linker_opts="-link$linker_opts"
+  fi
+  exec "$@" $linker_opts
+  exit 1
+}
+
+eat=
+
 case $1 in
   '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
      exit 1;
      ;;
   -h | --h*)
     cat <<\EOF
 Usage: compile [--help] [--version] PROGRAM [ARGS]
 
-Wrapper for compilers which do not understand `-c -o'.
-Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
 arguments, and rename the output as expected.
 
 If you are trying to build a whole package this is not the
-right script to run: please start by reading the file `INSTALL'.
+right script to run: please start by reading the file 'INSTALL'.
 
 Report bugs to <bug-automake gnu org>.
 EOF
@@ -53,11 +250,13 @@ EOF
     echo "compile $scriptversion"
     exit $?
     ;;
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+    func_cl_wrapper "$@"      # Doesn't return...
+    ;;
 esac
 
 ofile=
 cfile=
-eat=
 
 for arg
 do
@@ -66,8 +265,8 @@ do
   else
     case $1 in
       -o)
-	# configure might choose to run compile as `compile cc -o foo foo.c'.
-	# So we strip `-o arg' only if arg is an object.
+	# configure might choose to run compile as 'compile cc -o foo foo.c'.
+	# So we strip '-o arg' only if arg is an object.
 	eat=1
 	case $2 in
 	  *.o | *.obj)
@@ -94,10 +293,10 @@ do
 done
 
 if test -z "$ofile" || test -z "$cfile"; then
-  # If no `-o' option was seen then we might have been invoked from a
+  # If no '-o' option was seen then we might have been invoked from a
   # pattern rule where we don't need one.  That is ok -- this is a
   # normal compilation that the losing compiler can handle.  If no
-  # `.c' file was seen then we are probably linking.  That is also
+  # '.c' file was seen then we are probably linking.  That is also
   # ok.
   exec "$@"
 fi
@@ -106,7 +305,7 @@ fi
 cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
 
 # Create the lock directory.
-# Note: use `[/\\:.-]' here to ensure that we don't use the same name
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
 # that we are using for the .o file.  Also, base the name on the expected
 # object file name, since that is what matters with a parallel build.
 lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
diff --git a/build-aux/config.guess b/build-aux/config.guess
index dc84c68..d622a44 100755
--- a/build-aux/config.guess
+++ b/build-aux/config.guess
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-#   Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2009-11-20'
+timestamp='2012-02-10'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -17,9 +17,7 @@ timestamp='2009-11-20'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -56,8 +54,9 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -144,7 +143,7 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:NetBSD:*:*)
 	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
 	# switched to ELF, *-*-netbsd* would select the old
 	# object file format.  This provides both forward
@@ -180,7 +179,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		fi
 		;;
 	    *)
-	        os=netbsd
+		os=netbsd
 		;;
 	esac
 	# The OS release
@@ -223,7 +222,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
 		;;
 	*5.*)
-	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
 		;;
 	esac
 	# According to Compaq, /usr/sbin/psrinfo has been available on
@@ -269,7 +268,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit ;;
+	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+	exitcode=$?
+	trap '' 0
+	exit $exitcode ;;
     Alpha\ *:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# Should we change UNAME_MACHINE based on the output of uname instead
@@ -295,7 +297,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	echo s390-ibm-zvmoe
 	exit ;;
     *:OS400:*:*)
-        echo powerpc-ibm-os400
+	echo powerpc-ibm-os400
 	exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
@@ -394,23 +396,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+	echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
 	echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
+	exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+	echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-milan-mint${UNAME_RELEASE}
+	exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-hades-mint${UNAME_RELEASE}
+	exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-unknown-mint${UNAME_RELEASE}
+	exit ;;
     m68k:machten:*:*)
 	echo m68k-apple-machten${UNAME_RELEASE}
 	exit ;;
@@ -480,8 +482,8 @@ EOF
 	echo m88k-motorola-sysv3
 	exit ;;
     AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	# DG/UX returns AViiON for all architectures
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
 	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
 	then
 	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
@@ -494,7 +496,7 @@ EOF
 	else
 	    echo i586-dg-dgux${UNAME_RELEASE}
 	fi
- 	exit ;;
+	exit ;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
 	echo m88k-dolphin-sysv3
 	exit ;;
@@ -551,7 +553,7 @@ EOF
 		echo rs6000-ibm-aix3.2
 	fi
 	exit ;;
-    *:AIX:*:[456])
+    *:AIX:*:[4567])
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
 		IBM_ARCH=rs6000
@@ -594,52 +596,52 @@ EOF
 	    9000/[678][0-9][0-9])
 		if [ -x /usr/bin/getconf ]; then
 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
+		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+		    case "${sc_cpu_version}" in
+		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+		      532)                      # CPU_PA_RISC2_0
+			case "${sc_kernel_bits}" in
+			  32) HP_ARCH="hppa2.0n" ;;
+			  64) HP_ARCH="hppa2.0w" ;;
 			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
+			esac ;;
+		    esac
 		fi
 		if [ "${HP_ARCH}" = "" ]; then
 		    eval $set_cc_for_build
-		    sed 's/^              //' << EOF >$dummy.c
+		    sed 's/^		//' << EOF >$dummy.c
 
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
+		#define _HPUX_SOURCE
+		#include <stdlib.h>
+		#include <unistd.h>
 
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
+		int main ()
+		{
+		#if defined(_SC_KERNEL_BITS)
+		    long bits = sysconf(_SC_KERNEL_BITS);
+		#endif
+		    long cpu  = sysconf (_SC_CPU_VERSION);
 
-                  switch (cpu)
-              	{
-              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-              	case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-              	    switch (bits)
-              		{
-              		case 64: puts ("hppa2.0w"); break;
-              		case 32: puts ("hppa2.0n"); break;
-              		default: puts ("hppa2.0"); break;
-              		} break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-              	    puts ("hppa2.0"); break;
-              #endif
-              	default: puts ("hppa1.0"); break;
-              	}
-                  exit (0);
-              }
+		    switch (cpu)
+			{
+			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+			case CPU_PA_RISC2_0:
+		#if defined(_SC_KERNEL_BITS)
+			    switch (bits)
+				{
+				case 64: puts ("hppa2.0w"); break;
+				case 32: puts ("hppa2.0n"); break;
+				default: puts ("hppa2.0"); break;
+				} break;
+		#else  /* !defined(_SC_KERNEL_BITS) */
+			    puts ("hppa2.0"); break;
+		#endif
+			default: puts ("hppa1.0"); break;
+			}
+		    exit (0);
+		}
 EOF
 		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
@@ -730,22 +732,22 @@ EOF
 	exit ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 	echo c1-convex-bsd
-        exit ;;
+	exit ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
 	else echo c2-convex-bsd
 	fi
-        exit ;;
+	exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
 	echo c34-convex-bsd
-        exit ;;
+	exit ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
 	echo c38-convex-bsd
-        exit ;;
+	exit ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 	echo c4-convex-bsd
-        exit ;;
+	exit ;;
     CRAY*Y-MP:*:*:*)
 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
@@ -769,14 +771,14 @@ EOF
 	exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit ;;
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
     5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
@@ -788,13 +790,12 @@ EOF
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
 	exit ;;
     *:FreeBSD:*:*)
-	case ${UNAME_MACHINE} in
-	    pc98)
-		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	case ${UNAME_PROCESSOR} in
 	    amd64)
 		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	    *)
-		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	esac
 	exit ;;
     i*:CYGWIN*:*)
@@ -803,15 +804,18 @@ EOF
     *:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
 	exit ;;
+    i*:MSYS*:*)
+	echo ${UNAME_MACHINE}-pc-msys
+	exit ;;
     i*:windows32*:*)
-    	# uname -m includes "-pc" on this system.
-    	echo ${UNAME_MACHINE}-mingw32
+	# uname -m includes "-pc" on this system.
+	echo ${UNAME_MACHINE}-mingw32
 	exit ;;
     i*:PW*:*)
 	echo ${UNAME_MACHINE}-pc-pw32
 	exit ;;
     *:Interix*:*)
-    	case ${UNAME_MACHINE} in
+	case ${UNAME_MACHINE} in
 	    x86)
 		echo i586-pc-interix${UNAME_RELEASE}
 		exit ;;
@@ -857,6 +861,13 @@ EOF
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
 	exit ;;
+    aarch64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    aarch64_be:Linux:*:*)
+	UNAME_MACHINE=aarch64_be
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
     alpha:Linux:*:*)
 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
 	  EV5)   UNAME_MACHINE=alphaev5 ;;
@@ -866,7 +877,7 @@ EOF
 	  EV6)   UNAME_MACHINE=alphaev6 ;;
 	  EV67)  UNAME_MACHINE=alphaev67 ;;
 	  EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
+	esac
 	objdump --private-headers /bin/sh | grep -q ld.so.1
 	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
 	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
@@ -878,20 +889,29 @@ EOF
 	then
 	    echo ${UNAME_MACHINE}-unknown-linux-gnu
 	else
-	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+		| grep -q __ARM_PCS_VFP
+	    then
+		echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	    else
+		echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+	    fi
 	fi
 	exit ;;
     avr32*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     cris:Linux:*:*)
-	echo cris-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-gnu
 	exit ;;
     crisv32:Linux:*:*)
-	echo crisv32-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-gnu
 	exit ;;
     frv:Linux:*:*)
-    	echo frv-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    hexagon:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     i*86:Linux:*:*)
 	LIBC=gnu
@@ -933,7 +953,7 @@ EOF
 	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
 	;;
     or32:Linux:*:*)
-	echo or32-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     padre:Linux:*:*)
 	echo sparc-unknown-linux-gnu
@@ -959,7 +979,7 @@ EOF
 	echo ${UNAME_MACHINE}-ibm-linux
 	exit ;;
     sh64*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     sh*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -967,14 +987,17 @@ EOF
     sparc:Linux:*:* | sparc64:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
+    tile*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
     vax:Linux:*:*)
 	echo ${UNAME_MACHINE}-dec-linux-gnu
 	exit ;;
     x86_64:Linux:*:*)
-	echo x86_64-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     xtensa*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -983,11 +1006,11 @@ EOF
 	echo i386-sequent-sysv4
 	exit ;;
     i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
+	# Unixware is an offshoot of SVR4, but it has its own version
+	# number series starting with 2...
+	# I am not positive that other SVR4 systems won't match this,
 	# I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
+	# Use sysv4.2uw... so that sysv4* matches it.
 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
 	exit ;;
     i*86:OS/2:*:*)
@@ -1019,7 +1042,7 @@ EOF
 	fi
 	exit ;;
     i*86:*:5:[678]*)
-    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	# UnixWare 7.x, OpenUNIX and OpenServer 6.
 	case `/bin/uname -X | grep "^Machine"` in
 	    *486*)	     UNAME_MACHINE=i486 ;;
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
@@ -1047,13 +1070,13 @@ EOF
 	exit ;;
     pc:*:*:*)
 	# Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i586.
+	# uname -m prints for DJGPP always 'pc', but it prints nothing about
+	# the processor, so we play safe by assuming i586.
 	# Note: whatever this is, it MUST be the same as what config.sub
 	# prints for the "djgpp" host, or else GDB configury will decide that
 	# this is a cross-build.
 	echo i586-pc-msdosdjgpp
-        exit ;;
+	exit ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
 	exit ;;
@@ -1088,8 +1111,8 @@ EOF
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
 	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4; exit; } ;;
     NCR*:*:4.2:* | MPRAS*:*:4.2:*)
 	OS_REL='.3'
 	test -r /etc/.relid \
@@ -1132,10 +1155,10 @@ EOF
 		echo ns32k-sni-sysv
 	fi
 	exit ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard M Bartel ccMail Census GOV>
-        echo i586-unisys-sysv4
-        exit ;;
+    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+			# says <Richard M Bartel ccMail Census GOV>
+	echo i586-unisys-sysv4
+	exit ;;
     *:UNIX_System_V:4*:FTX*)
 	# From Gerald Hewes <hewes openmarket com>.
 	# How about differentiating between stratus architectures? -djm
@@ -1161,11 +1184,11 @@ EOF
 	exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
 	if [ -d /usr/nec ]; then
-	        echo mips-nec-sysv${UNAME_RELEASE}
+		echo mips-nec-sysv${UNAME_RELEASE}
 	else
-	        echo mips-unknown-sysv${UNAME_RELEASE}
+		echo mips-unknown-sysv${UNAME_RELEASE}
 	fi
-        exit ;;
+	exit ;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
 	echo powerpc-be-beos
 	exit ;;
@@ -1230,6 +1253,9 @@ EOF
     *:QNX:*:4*)
 	echo i386-pc-qnx
 	exit ;;
+    NEO-?:NONSTOP_KERNEL:*:*)
+	echo neo-tandem-nsk${UNAME_RELEASE}
+	exit ;;
     NSE-?:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
 	exit ;;
@@ -1275,13 +1301,13 @@ EOF
 	echo pdp10-unknown-its
 	exit ;;
     SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
+	echo mips-sei-seiux${UNAME_RELEASE}
 	exit ;;
     *:DragonFly:*:*)
 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit ;;
     *:*VMS:*:*)
-    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	UNAME_MACHINE=`(uname -p) 2>/dev/null`
 	case "${UNAME_MACHINE}" in
 	    A*) echo alpha-dec-vms ; exit ;;
 	    I*) echo ia64-dec-vms ; exit ;;
@@ -1299,6 +1325,9 @@ EOF
     i*86:AROS:*:*)
 	echo ${UNAME_MACHINE}-pc-aros
 	exit ;;
+    x86_64:VMkernel:*:*)
+	echo ${UNAME_MACHINE}-unknown-esx
+	exit ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
@@ -1321,11 +1350,11 @@ main ()
 #include <sys/param.h>
   printf ("m68k-sony-newsos%s\n",
 #ifdef NEWSOS4
-          "4"
+	"4"
 #else
-	  ""
+	""
 #endif
-         ); exit (0);
+	); exit (0);
 #endif
 #endif
 
diff --git a/build-aux/config.sub b/build-aux/config.sub
index 2a55a50..59bb593 100755
--- a/build-aux/config.sub
+++ b/build-aux/config.sub
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-#   Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2009-11-20'
+timestamp='2012-04-18'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -21,9 +21,7 @@ timestamp='2009-11-20'
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -75,8 +73,9 @@ Report bugs and patches to <config-patches gnu org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -123,13 +122,18 @@ esac
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
-  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
   *)
     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
     if [ $basic_machine != $1 ]
@@ -156,8 +160,8 @@ case $os in
 		os=
 		basic_machine=$1
 		;;
-        -bluegene*)
-	        os=-cnk
+	-bluegene*)
+		os=-cnk
 		;;
 	-sim | -cisco | -oki | -wec | -winbond)
 		os=
@@ -173,10 +177,10 @@ case $os in
 		os=-chorusos
 		basic_machine=$1
 		;;
- 	-chorusrdb)
- 		os=-chorusrdb
+	-chorusrdb)
+		os=-chorusrdb
 		basic_machine=$1
- 		;;
+		;;
 	-hiux*)
 		os=-hiuxwe2
 		;;
@@ -221,6 +225,12 @@ case $os in
 	-isc*)
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
+	-lynx*178)
+		os=-lynxos178
+		;;
+	-lynx*5)
+		os=-lynxos5
+		;;
 	-lynx*)
 		os=-lynxos
 		;;
@@ -245,17 +255,22 @@ case $basic_machine in
 	# Some are omitted here because they have special meanings below.
 	1750a | 580 \
 	| a29k \
+	| aarch64 | aarch64_be \
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
 	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+        | be32 | be64 \
 	| bfin \
 	| c4x | clipper \
 	| d10v | d30v | dlx | dsp16xx \
+	| epiphany \
 	| fido | fr30 | frv \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| hexagon \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
+	| le32 | le64 \
 	| lm32 \
 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
 	| maxq | mb | microblaze | mcore | mep | metag \
@@ -281,29 +296,39 @@ case $basic_machine in
 	| moxie \
 	| mt \
 	| msp430 \
+	| nds32 | nds32le | nds32be \
 	| nios | nios2 \
 	| ns16k | ns32k \
+	| open8 \
 	| or32 \
 	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| powerpc | powerpc64 | powerpc64le | powerpcle \
 	| pyramid \
-	| rx \
+	| rl78 | rx \
 	| score \
 	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
 	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-	| spu | strongarm \
-	| tahoe | thumb | tic4x | tic80 | tron \
+	| spu \
+	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
 	| ubicom32 \
-	| v850 | v850e \
+	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
 	| we32k \
-	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| x86 | xc16x | xstormy16 | xtensa \
 	| z8k | z80)
 		basic_machine=$basic_machine-unknown
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | picochip)
-		# Motorola 68HC11/12.
+	c54x)
+		basic_machine=tic54x-unknown
+		;;
+	c55x)
+		basic_machine=tic55x-unknown
+		;;
+	c6x)
+		basic_machine=tic6x-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
@@ -313,6 +338,21 @@ case $basic_machine in
 		basic_machine=mt-unknown
 		;;
 
+	strongarm | thumb | xscale)
+		basic_machine=arm-unknown
+		;;
+	xgate)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	xscaleeb)
+		basic_machine=armeb-unknown
+		;;
+
+	xscaleel)
+		basic_machine=armel-unknown
+		;;
+
 	# We use `pc' rather than `unknown'
 	# because (1) that's what they normally are, and
 	# (2) the word "unknown" tends to confuse beginning users.
@@ -327,21 +367,25 @@ case $basic_machine in
 	# Recognize the basic CPU types with company name.
 	580-* \
 	| a29k-* \
+	| aarch64-* | aarch64_be-* \
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* | avr32-* \
+	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* \
 	| clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
 	| elxsi-* \
 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| hexagon-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
+	| le32-* | le64-* \
 	| lm32-* \
 	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
@@ -367,25 +411,29 @@ case $basic_machine in
 	| mmix-* \
 	| mt-* \
 	| msp430-* \
+	| nds32-* | nds32le-* | nds32be-* \
 	| nios-* | nios2-* \
 	| none-* | np1-* | ns16k-* | ns32k-* \
+	| open8-* \
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
 	| pyramid-* \
-	| romp-* | rs6000-* | rx-* \
+	| rl78-* | romp-* | rs6000-* | rx-* \
 	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
 	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
-	| tahoe-* | thumb-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+	| tahoe-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tile*-* \
 	| tron-* \
 	| ubicom32-* \
-	| v850-* | v850e-* | vax-* \
+	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+	| vax-* \
 	| we32k-* \
-	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* \
 	| xstormy16-* | xtensa*-* \
 	| ymp-* \
 	| z8k-* | z80-*)
@@ -410,7 +458,7 @@ case $basic_machine in
 		basic_machine=a29k-amd
 		os=-udi
 		;;
-    	abacus)
+	abacus)
 		basic_machine=abacus-unknown
 		;;
 	adobe68k)
@@ -480,11 +528,20 @@ case $basic_machine in
 		basic_machine=powerpc-ibm
 		os=-cnk
 		;;
+	c54x-*)
+		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c55x-*)
+		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c6x-*)
+		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	c90)
 		basic_machine=c90-cray
 		os=-unicos
 		;;
-        cegcc)
+	cegcc)
 		basic_machine=arm-unknown
 		os=-cegcc
 		;;
@@ -516,7 +573,7 @@ case $basic_machine in
 		basic_machine=craynv-cray
 		os=-unicosmp
 		;;
-	cr16)
+	cr16 | cr16-*)
 		basic_machine=cr16-unknown
 		os=-elf
 		;;
@@ -674,7 +731,6 @@ case $basic_machine in
 	i370-ibm* | ibm*)
 		basic_machine=i370-ibm
 		;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
 	i*86v32)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv32
@@ -732,7 +788,7 @@ case $basic_machine in
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
-        microblaze)
+	microblaze)
 		basic_machine=microblaze-xilinx
 		;;
 	mingw32)
@@ -771,10 +827,18 @@ case $basic_machine in
 	ms1-*)
 		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
 		;;
+	msys)
+		basic_machine=i386-pc
+		os=-msys
+		;;
 	mvs)
 		basic_machine=i370-ibm
 		os=-mvs
 		;;
+	nacl)
+		basic_machine=le32-unknown
+		os=-nacl
+		;;
 	ncr3000)
 		basic_machine=i486-ncr
 		os=-sysv4
@@ -839,6 +903,12 @@ case $basic_machine in
 	np1)
 		basic_machine=np1-gould
 		;;
+	neo-tandem)
+		basic_machine=neo-tandem
+		;;
+	nse-tandem)
+		basic_machine=nse-tandem
+		;;
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		;;
@@ -921,9 +991,10 @@ case $basic_machine in
 		;;
 	power)	basic_machine=power-ibm
 		;;
-	ppc)	basic_machine=powerpc-unknown
+	ppc | ppcbe)	basic_machine=powerpc-unknown
 		;;
-	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+	ppc-* | ppcbe-*)
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	ppcle | powerpclittle | ppc-le | powerpc-little)
 		basic_machine=powerpcle-unknown
@@ -1017,6 +1088,9 @@ case $basic_machine in
 		basic_machine=i860-stratus
 		os=-sysv4
 		;;
+	strongarm-* | thumb-*)
+		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	sun2)
 		basic_machine=m68000-sun
 		;;
@@ -1073,20 +1147,8 @@ case $basic_machine in
 		basic_machine=t90-cray
 		os=-unicos
 		;;
-	tic54x | c54x*)
-		basic_machine=tic54x-unknown
-		os=-coff
-		;;
-	tic55x | c55x*)
-		basic_machine=tic55x-unknown
-		os=-coff
-		;;
-	tic6x | c6x*)
-		basic_machine=tic6x-unknown
-		os=-coff
-		;;
 	tile*)
-		basic_machine=tile-unknown
+		basic_machine=$basic_machine-unknown
 		os=-linux-gnu
 		;;
 	tx39)
@@ -1156,6 +1218,9 @@ case $basic_machine in
 	xps | xps100)
 		basic_machine=xps100-honeywell
 		;;
+	xscale-* | xscalee[bl]-*)
+		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+		;;
 	ymp)
 		basic_machine=ymp-cray
 		os=-unicos
@@ -1253,11 +1318,11 @@ esac
 if [ x"$os" != x"" ]
 then
 case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
+	# First match some system type aliases
+	# that might get confused with valid system types.
 	# -solaris* is a basic system type, with this one exception.
-        -auroraux)
-	        os=-auroraux
+	-auroraux)
+		os=-auroraux
 		;;
 	-solaris1 | -solaris1.*)
 		os=`echo $os | sed -e 's|solaris1|sunos4|'`
@@ -1293,8 +1358,9 @@ case $os in
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
 	      | -chorusos* | -chorusrdb* | -cegcc* \
-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-uclibc* \
 	      | -uxpv* | -beos* | -mpeix* | -udk* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1341,7 +1407,7 @@ case $os in
 	-opened*)
 		os=-openedition
 		;;
-        -os400*)
+	-os400*)
 		os=-os400
 		;;
 	-wince*)
@@ -1390,7 +1456,7 @@ case $os in
 	-sinix*)
 		os=-sysv4
 		;;
-        -tpf*)
+	-tpf*)
 		os=-tpf
 		;;
 	-triton*)
@@ -1435,6 +1501,8 @@ case $os in
 	-dicos*)
 		os=-dicos
 		;;
+	-nacl*)
+		;;
 	-none)
 		;;
 	*)
@@ -1457,10 +1525,10 @@ else
 # system, and we'll never get to this point.
 
 case $basic_machine in
-        score-*)
+	score-*)
 		os=-elf
 		;;
-        spu-*)
+	spu-*)
 		os=-elf
 		;;
 	*-acorn)
@@ -1472,8 +1540,17 @@ case $basic_machine in
 	arm*-semi)
 		os=-aout
 		;;
-        c4x-* | tic4x-*)
-        	os=-coff
+	c4x-* | tic4x-*)
+		os=-coff
+		;;
+	tic54x-*)
+		os=-coff
+		;;
+	tic55x-*)
+		os=-coff
+		;;
+	tic6x-*)
+		os=-coff
 		;;
 	# This must come before the *-dec entry.
 	pdp10-*)
@@ -1493,14 +1570,11 @@ case $basic_machine in
 		;;
 	m68000-sun)
 		os=-sunos3
-		# This also exists in the configure program, but was not the
-		# default.
-		# os=-sunos4
 		;;
 	m68*-cisco)
 		os=-aout
 		;;
-        mep-*)
+	mep-*)
 		os=-elf
 		;;
 	mips*-cisco)
@@ -1527,7 +1601,7 @@ case $basic_machine in
 	*-ibm)
 		os=-aix
 		;;
-    	*-knuth)
+	*-knuth)
 		os=-mmixware
 		;;
 	*-wec)
diff --git a/build-aux/depcomp b/build-aux/depcomp
index df8eea7..debb6ff 100755
--- a/build-aux/depcomp
+++ b/build-aux/depcomp
@@ -1,10 +1,9 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2012-03-27.16; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
-# Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -28,7 +27,7 @@ scriptversion=2009-04-28.21; # UTC
 
 case $1 in
   '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
      exit 1;
      ;;
   -h | --h*)
@@ -40,11 +39,11 @@ as side-effects.
 
 Environment variables:
   depmode     Dependency tracking mode.
-  source      Source file read by `PROGRAMS ARGS'.
-  object      Object file output by `PROGRAMS ARGS'.
+  source      Source file read by 'PROGRAMS ARGS'.
+  object      Object file output by 'PROGRAMS ARGS'.
   DEPDIR      directory where to store dependencies.
   depfile     Dependency file to output.
-  tmpdepfile  Temporary file to use when outputing dependencies.
+  tmpdepfile  Temporary file to use when outputting dependencies.
   libtool     Whether libtool is used (yes/no).
 
 Report bugs to <bug-automake gnu org>.
@@ -57,6 +56,12 @@ EOF
     ;;
 esac
 
+# A tabulation character.
+tab='	'
+# A newline character.
+nl='
+'
+
 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   echo "depcomp: Variables source, object and depmode must be set" 1>&2
   exit 1
@@ -90,10 +95,24 @@ if test "$depmode" = msvcmsys; then
    # This is just like msvisualcpp but w/o cygpath translation.
    # Just convert the backslash-escaped backslashes to single forward
    # slashes to satisfy depend.m4
-   cygpath_u="sed s,\\\\\\\\,/,g"
+   cygpath_u='sed s,\\\\,/,g'
    depmode=msvisualcpp
 fi
 
+if test "$depmode" = msvc7msys; then
+   # This is just like msvc7 but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u='sed s,\\\\,/,g'
+   depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+   # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
+   gccflag=-qmakedep=gcc,-MF
+   depmode=gcc
+fi
+
 case "$depmode" in
 gcc3)
 ## gcc 3 implements dependency tracking that does exactly what
@@ -148,20 +167,21 @@ gcc)
 ## The second -e expression handles DOS-style file names with drive letters.
   sed -e 's/^[^:]*: / /' \
       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
+## This next piece of magic avoids the "deleted header file" problem.
 ## The problem is that when a header file which appears in a .P file
 ## is deleted, the dependency causes make to die (because there is
 ## typically no way to rebuild the header).  We avoid this by adding
 ## dummy dependencies for each header file.  Too bad gcc doesn't do
 ## this for us directly.
-  tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'.  On the theory
+  tr ' ' "$nl" < "$tmpdepfile" |
+## Some versions of gcc put a space before the ':'.  On the theory
 ## that the space means something, we add a space to the output as
-## well.
+## well.  hp depmode also adds that space, but also prefixes the VPATH
+## to the object.  Take care to not repeat it in the output.
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+      | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -193,18 +213,15 @@ sgi)
     # clever and replace this with sed code, as IRIX sed won't handle
     # lines with more than a fixed number of characters (4096 in
     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
-    # the IRIX cc adds comments like `#:fec' to the end of the
+    # the IRIX cc adds comments like '#:fec' to the end of the
     # dependency line.
-    tr ' ' '
-' < "$tmpdepfile" \
+    tr ' ' "$nl" < "$tmpdepfile" \
     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
-    tr '
-' ' ' >> "$depfile"
+    tr "$nl" ' ' >> "$depfile"
     echo >> "$depfile"
 
     # The second pass generates a dummy entry for each header file.
-    tr ' ' '
-' < "$tmpdepfile" \
+    tr ' ' "$nl" < "$tmpdepfile" \
    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
    >> "$depfile"
   else
@@ -216,10 +233,17 @@ sgi)
   rm -f "$tmpdepfile"
   ;;
 
+xlc)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 aix)
   # The C for AIX Compiler uses -M and outputs the dependencies
   # in a .u file.  In older versions, this file always lives in the
-  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # current directory.  Also, the AIX compiler puts '$object:' at the
   # start of each line; $object doesn't have directory information.
   # Version 6 uses the directory in both cases.
   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
@@ -249,12 +273,11 @@ aix)
     test -f "$tmpdepfile" && break
   done
   if test -f "$tmpdepfile"; then
-    # Each line is of the form `foo.o: dependent.h'.
+    # Each line is of the form 'foo.o: dependent.h'.
     # Do two passes, one to just change these to
-    # `$object: dependent.h' and one to simply `dependent.h:'.
+    # '$object: dependent.h' and one to simply 'dependent.h:'.
     sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-    # That's a tab and a space in the [].
-    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+    sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
   else
     # The sourcefile does not contain any dependencies, so just
     # store a dummy comment line, to avoid errors with the Makefile
@@ -265,23 +288,26 @@ aix)
   ;;
 
 icc)
-  # Intel's C compiler understands `-MD -MF file'.  However on
-  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
+  # However on
+  #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
   # ICC 7.0 will fill foo.d with something like
   #    foo.o: sub/foo.c
   #    foo.o: sub/foo.h
-  # which is wrong.  We want:
+  # which is wrong.  We want
   #    sub/foo.o: sub/foo.c
   #    sub/foo.o: sub/foo.h
   #    sub/foo.c:
   #    sub/foo.h:
   # ICC 7.1 will output
   #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using \ :
+  # and will wrap long lines using '\':
   #    foo.o: sub/foo.c ... \
   #     sub/foo.h ... \
   #     ...
-
+  # tcc 0.9.26 (FIXME still under development at the moment of writing)
+  # will emit a similar output, but also prepend the continuation lines
+  # with horizontal tabulation characters.
   "$@" -MD -MF "$tmpdepfile"
   stat=$?
   if test $stat -eq 0; then :
@@ -290,15 +316,21 @@ icc)
     exit $stat
   fi
   rm -f "$depfile"
-  # Each line is of the form `foo.o: dependent.h',
-  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Each line is of the form 'foo.o: dependent.h',
+  # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
   # Do two passes, one to just change these to
-  # `$object: dependent.h' and one to simply `dependent.h:'.
-  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
-  # Some versions of the HPUX 10.20 sed can't process this invocation
-  # correctly.  Breaking it into two sed invocations is a workaround.
-  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
-    sed -e 's/$/ :/' >> "$depfile"
+  # '$object: dependent.h' and one to simply 'dependent.h:'.
+  sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
+    < "$tmpdepfile" > "$depfile"
+  sed '
+    s/[ '"$tab"'][ '"$tab"']*/ /g
+    s/^ *//
+    s/ *\\*$//
+    s/^[^:]*: *//
+    /^$/d
+    /:$/d
+    s/$/ :/
+  ' < "$tmpdepfile" >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -334,7 +366,7 @@ hp2)
   done
   if test -f "$tmpdepfile"; then
     sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
-    # Add `dependent.h:' lines.
+    # Add 'dependent.h:' lines.
     sed -ne '2,${
 	       s/^ *//
 	       s/ \\*$//
@@ -349,9 +381,9 @@ hp2)
 
 tru64)
    # The Tru64 compiler uses -MD to generate dependencies as a side
-   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
    # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-   # dependencies in `foo.d' instead, so we check for that too.
+   # dependencies in 'foo.d' instead, so we check for that too.
    # Subdirectories are respected.
    dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
    test "x$dir" = "x$object" && dir=
@@ -397,14 +429,59 @@ tru64)
    done
    if test -f "$tmpdepfile"; then
       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      # That's a tab and a space in the [].
-      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+      sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
    else
       echo "#dummy" > "$depfile"
    fi
    rm -f "$tmpdepfile"
    ;;
 
+msvc7)
+  if test "$libtool" = yes; then
+    showIncludes=-Wc,-showIncludes
+  else
+    showIncludes=-showIncludes
+  fi
+  "$@" $showIncludes > "$tmpdepfile"
+  stat=$?
+  grep -v '^Note: including file: ' "$tmpdepfile"
+  if test "$stat" = 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The first sed program below extracts the file names and escapes
+  # backslashes for cygpath.  The second sed program outputs the file
+  # name when reading, but also accumulates all include files in the
+  # hold buffer in order to output them again at the end.  This only
+  # works with sed implementations that can handle large buffers.
+  sed < "$tmpdepfile" -n '
+/^Note: including file:  *\(.*\)/ {
+  s//\1/
+  s/\\/\\\\/g
+  p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+  s/.*/'"$tab"'/
+  G
+  p
+}' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvc7msys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 #nosideeffect)
   # This comment above is used by automake to tell side-effect
   # dependency tracking mechanisms from slower ones.
@@ -422,7 +499,7 @@ dashmstdout)
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -442,15 +519,14 @@ dashmstdout)
   done
 
   test -z "$dashmflag" && dashmflag=-M
-  # Require at least two characters before searching for `:'
+  # Require at least two characters before searching for ':'
   # in the target name.  This is to cope with DOS-style filenames:
-  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
   "$@" $dashmflag |
-    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+    sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
   rm -f "$depfile"
   cat < "$tmpdepfile" > "$depfile"
-  tr ' ' '
-' < "$tmpdepfile" | \
+  tr ' ' "$nl" < "$tmpdepfile" | \
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
@@ -503,9 +579,10 @@ makedepend)
   touch "$tmpdepfile"
   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
   rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
+  # makedepend may prepend the VPATH from the source file name to the object.
+  # No need to regex-escape $object, excess matching of '.' is harmless.
+  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
@@ -525,7 +602,7 @@ cpp)
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -594,8 +671,8 @@ msvisualcpp)
   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
-  echo "	" >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+  echo "$tab" >> "$depfile"
   sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
diff --git a/build-aux/install-sh b/build-aux/install-sh
index 6781b98..377bb86 100755
--- a/build-aux/install-sh
+++ b/build-aux/install-sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2011-11-20.07; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -35,7 +35,7 @@ scriptversion=2009-04-28.21; # UTC
 # FSF changes to this file are in the public domain.
 #
 # Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
+# 'make' implicit rules from creating a file called install from it
 # when there is no Makefile.
 #
 # This script is compatible with the BSD install script, but was written
@@ -156,6 +156,10 @@ while test $# -ne 0; do
     -s) stripcmd=$stripprog;;
 
     -t) dst_arg=$2
+	# Protect names problematic for 'test' and other utilities.
+	case $dst_arg in
+	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
+	esac
 	shift;;
 
     -T) no_target_directory=true;;
@@ -186,6 +190,10 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
     fi
     shift # arg
     dst_arg=$arg
+    # Protect names problematic for 'test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
   done
 fi
 
@@ -194,13 +202,17 @@ if test $# -eq 0; then
     echo "$0: no input file specified." >&2
     exit 1
   fi
-  # It's OK to call `install-sh -d' without argument.
+  # It's OK to call 'install-sh -d' without argument.
   # This can happen when creating conditional directories.
   exit 0
 fi
 
 if test -z "$dir_arg"; then
-  trap '(exit $?); exit' 1 2 13 15
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
 
   # Set umask so as not to create temps with too-generous modes.
   # However, 'strip' requires both read and write access to temps.
@@ -228,9 +240,9 @@ fi
 
 for src
 do
-  # Protect names starting with `-'.
+  # Protect names problematic for 'test' and other utilities.
   case $src in
-    -*) src=./$src;;
+    -* | [=\(\)!]) src=./$src;;
   esac
 
   if test -n "$dir_arg"; then
@@ -252,12 +264,7 @@ do
       echo "$0: no destination specified." >&2
       exit 1
     fi
-
     dst=$dst_arg
-    # Protect names starting with `-'.
-    case $dst in
-      -*) dst=./$dst;;
-    esac
 
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
@@ -347,7 +354,7 @@ do
 	      if test -z "$dir_arg" || {
 		   # Check for POSIX incompatibilities with -m.
 		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-		   # other-writeable bit of parent directory when it shouldn't.
+		   # other-writable bit of parent directory when it shouldn't.
 		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
 		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
 		   case $ls_ld_tmpdir in
@@ -385,7 +392,7 @@ do
 
       case $dstdir in
 	/*) prefix='/';;
-	-*) prefix='./';;
+	[-=\(\)!]*) prefix='./';;
 	*)  prefix='';;
       esac
 
@@ -403,7 +410,7 @@ do
 
       for d
       do
-	test -z "$d" && continue
+	test X"$d" = X && continue
 
 	prefix=$prefix$d
 	if test -d "$prefix"; then
diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
index 3061e3c..63ae69d 100755
--- a/build-aux/ltmain.sh
+++ b/build-aux/ltmain.sh
@@ -1,9 +1,9 @@
 
-# libtool (GNU libtool) 2.4
+# libtool (GNU libtool) 2.4.2
 # Written by Gordon Matzigkeit <gord gnu ai mit edu>, 1996
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
-# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 # This is free software; see the source for copying conditions.  There is NO
 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
@@ -41,6 +41,7 @@
 #       --quiet, --silent    don't print informational messages
 #       --no-quiet, --no-silent
 #                            print informational messages (default)
+#       --no-warn            don't display warning messages
 #       --tag=TAG            use configuration variables from tag TAG
 #   -v, --verbose            print more informational messages than default
 #       --no-verbose         don't print the extra informational messages
@@ -69,7 +70,7 @@
 #         compiler:		$LTCC
 #         compiler flags:		$LTCFLAGS
 #         linker:		$LD (gnu? $with_gnu_ld)
-#         $progname:	(GNU libtool) 2.4
+#         $progname:	(GNU libtool) 2.4.2
 #         automake:	$automake_version
 #         autoconf:	$autoconf_version
 #
@@ -79,9 +80,9 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION=2.4
+VERSION=2.4.2
 TIMESTAMP=""
-package_revision=1.3293
+package_revision=1.3337
 
 # Be Bourne compatible
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
@@ -136,15 +137,10 @@ progpath="$0"
 
 : ${CP="cp -f"}
 test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
-: ${EGREP="grep -E"}
-: ${FGREP="grep -F"}
-: ${GREP="grep"}
-: ${LN_S="ln -s"}
 : ${MAKE="make"}
 : ${MKDIR="mkdir"}
 : ${MV="mv -f"}
 : ${RM="rm -f"}
-: ${SED="sed"}
 : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
 : ${Xsed="$SED -e 1s/^X//"}
 
@@ -387,7 +383,7 @@ case $progpath in
      ;;
   *)
      save_IFS="$IFS"
-     IFS=:
+     IFS=${PATH_SEPARATOR-:}
      for progdir in $PATH; do
        IFS="$save_IFS"
        test -x "$progdir/$progname" && break
@@ -771,8 +767,8 @@ func_help ()
 	s*\$LTCFLAGS*'"$LTCFLAGS"'*
 	s*\$LD*'"$LD"'*
 	s/\$with_gnu_ld/'"$with_gnu_ld"'/
-	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
-	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
+	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
 	p
 	d
      }
@@ -1052,6 +1048,7 @@ opt_finish=false
 opt_help=false
 opt_help_all=false
 opt_silent=:
+opt_warning=:
 opt_verbose=:
 opt_silent=false
 opt_verbose=false
@@ -1120,6 +1117,10 @@ esac
 			opt_silent=false
 func_append preserve_args " $opt"
 			;;
+      --no-warning|--no-warn)
+			opt_warning=false
+func_append preserve_args " $opt"
+			;;
       --no-verbose)
 			opt_verbose=false
 func_append preserve_args " $opt"
@@ -2059,7 +2060,7 @@ func_mode_compile ()
     *.[cCFSifmso] | \
     *.ada | *.adb | *.ads | *.asm | \
     *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
-    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
+    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
       func_xform "$libobj"
       libobj=$func_xform_result
       ;;
@@ -3201,11 +3202,13 @@ func_mode_install ()
 
       # Set up the ranlib parameters.
       oldlib="$destdir/$name"
+      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+      tool_oldlib=$func_to_tool_file_result
 
       func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
 
       if test -n "$stripme" && test -n "$old_striplib"; then
-	func_show_eval "$old_striplib $oldlib" 'exit $?'
+	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
       fi
 
       # Do each command in the postinstall commands.
@@ -3470,7 +3473,7 @@ static const void *lt_preloaded_setup() {
 	  # linked before any other PIC object.  But we must not use
 	  # pic_flag when linking with -static.  The problem exists in
 	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
 	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
 	  *-*-hpux*)
 	    pic_flag_for_symtable=" $pic_flag"  ;;
@@ -3982,14 +3985,17 @@ func_exec_program_core ()
 # launches target application with the remaining arguments.
 func_exec_program ()
 {
-  for lt_wr_arg
-  do
-    case \$lt_wr_arg in
-    --lt-*) ;;
-    *) set x \"\$ \" \"\$lt_wr_arg\"; shift;;
-    esac
-    shift
-  done
+  case \" \$* \" in
+  *\\ --lt-*)
+    for lt_wr_arg
+    do
+      case \$lt_wr_arg in
+      --lt-*) ;;
+      *) set x \"\$ \" \"\$lt_wr_arg\"; shift;;
+      esac
+      shift
+    done ;;
+  esac
   func_exec_program_core \${1+\"\$ \"}
 }
 
@@ -5057,9 +5063,15 @@ void lt_dump_script (FILE* f)
 {
 EOF
 	    func_emit_wrapper yes |
-              $SED -e 's/\([\\"]\)/\\\1/g' \
-	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
-
+	      $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/  fputs ("\1", f);/p
+g
+D'
             cat <<"EOF"
 }
 EOF
@@ -5643,7 +5655,8 @@ func_mode_link ()
 	continue
 	;;
 
-      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
 	func_append compiler_flags " $arg"
 	func_append compile_command " $arg"
 	func_append finalize_command " $arg"
@@ -6147,7 +6160,8 @@ func_mode_link ()
 	lib=
 	found=no
 	case $deplib in
-	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
 	  if test "$linkmode,$pass" = "prog,link"; then
 	    compile_deplibs="$deplib $compile_deplibs"
 	    finalize_deplibs="$deplib $finalize_deplibs"
@@ -6831,7 +6845,7 @@ func_mode_link ()
 	         test "$hardcode_direct_absolute" = no; then
 		add="$dir/$linklib"
 	      elif test "$hardcode_minus_L" = yes; then
-		add_dir="-L$dir"
+		add_dir="-L$absdir"
 		# Try looking first in the location we're being installed to.
 		if test -n "$inst_prefix_dir"; then
 		  case $libdir in
@@ -7316,6 +7330,7 @@ func_mode_link ()
 	  # which has an extra 1 added just for fun
 	  #
 	  case $version_type in
+	  # correct linux to gnu/linux during the next big refactor
 	  darwin|linux|osf|windows|none)
 	    func_arith $number_major + $number_minor
 	    current=$func_arith_result
@@ -7432,7 +7447,7 @@ func_mode_link ()
 	  versuffix="$major.$revision"
 	  ;;
 
-	linux)
+	linux) # correct to gnu/linux during the next big refactor
 	  func_arith $current - $age
 	  major=.$func_arith_result
 	  versuffix="$major.$age.$revision"
@@ -8020,6 +8035,11 @@ EOF
 
       # Test again, we may have decided not to build it any more
       if test "$build_libtool_libs" = yes; then
+	# Remove ${wl} instances when linking with ld.
+	# FIXME: should test the right _cmds variable.
+	case $archive_cmds in
+	  *\$LD\ *) wl= ;;
+        esac
 	if test "$hardcode_into_libs" = yes; then
 	  # Hardcode the library paths
 	  hardcode_libdirs=
@@ -8050,7 +8070,7 @@ EOF
 	    elif test -n "$runpath_var"; then
 	      case "$perm_rpath " in
 	      *" $libdir "*) ;;
-	      *) func_apped perm_rpath " $libdir" ;;
+	      *) func_append perm_rpath " $libdir" ;;
 	      esac
 	    fi
 	  done
@@ -8058,11 +8078,7 @@ EOF
 	  if test -n "$hardcode_libdir_separator" &&
 	     test -n "$hardcode_libdirs"; then
 	    libdir="$hardcode_libdirs"
-	    if test -n "$hardcode_libdir_flag_spec_ld"; then
-	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
-	    else
-	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
-	    fi
+	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
 	  fi
 	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
 	    # We should set the runpath_var.
@@ -9152,6 +9168,8 @@ EOF
 	    esac
 	  done
 	fi
+	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+	tool_oldlib=$func_to_tool_file_result
 	eval cmds=\"$old_archive_cmds\"
 
 	func_len " $cmds"
@@ -9261,7 +9279,8 @@ EOF
 	      *.la)
 		func_basename "$deplib"
 		name="$func_basename_result"
-		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		func_resolve_sysroot "$deplib"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
 		test -z "$libdir" && \
 		  func_fatal_error "\`$deplib' is not a valid libtool archive"
 		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
diff --git a/build-aux/missing b/build-aux/missing
index 28055d2..9a55648 100755
--- a/build-aux/missing
+++ b/build-aux/missing
@@ -1,10 +1,9 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2012-01-06.18; # UTC
 
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
-# 2008, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
 # Originally by Fran,cois Pinard <pinard iro umontreal ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -26,7 +25,7 @@ scriptversion=2009-04-28.21; # UTC
 # the same distribution terms that you use for the rest of that program.
 
 if test $# -eq 0; then
-  echo 1>&2 "Try \`$0 --help' for more information"
+  echo 1>&2 "Try '$0 --help' for more information"
   exit 1
 fi
 
@@ -34,7 +33,7 @@ run=:
 sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
 sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
 
-# In the cases where this matters, `missing' is being run in the
+# In the cases where this matters, 'missing' is being run in the
 # srcdir already.
 if test -f configure.ac; then
   configure_ac=configure.ac
@@ -65,7 +64,7 @@ case $1 in
     echo "\
 $0 [OPTION]... PROGRAM [ARGUMENT]...
 
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
 error status if there is no known handling for PROGRAM.
 
 Options:
@@ -74,21 +73,20 @@ Options:
   --run           try to run the given command, and emulate it if it fails
 
 Supported PROGRAM values:
-  aclocal      touch file \`aclocal.m4'
-  autoconf     touch file \`configure'
-  autoheader   touch file \`config.h.in'
+  aclocal      touch file 'aclocal.m4'
+  autoconf     touch file 'configure'
+  autoheader   touch file 'config.h.in'
   autom4te     touch the output file, or create a stub one
-  automake     touch all \`Makefile.in' files
-  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
-  flex         create \`lex.yy.c', if possible, from existing .c
+  automake     touch all 'Makefile.in' files
+  bison        create 'y.tab.[ch]', if possible, from existing .[ch]
+  flex         create 'lex.yy.c', if possible, from existing .c
   help2man     touch the output file
-  lex          create \`lex.yy.c', if possible, from existing .c
+  lex          create 'lex.yy.c', if possible, from existing .c
   makeinfo     touch the output file
-  tar          try tar, gnutar, gtar, then tar without non-portable flags
-  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+  yacc         create 'y.tab.[ch]', if possible, from existing .[ch]
 
-Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
-\`g' are ignored when checking the name.
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
 
 Send bug reports to <bug-automake gnu org>."
     exit $?
@@ -100,8 +98,8 @@ Send bug reports to <bug-automake gnu org>."
     ;;
 
   -*)
-    echo 1>&2 "$0: Unknown \`$1' option"
-    echo 1>&2 "Try \`$0 --help' for more information"
+    echo 1>&2 "$0: Unknown '$1' option"
+    echo 1>&2 "Try '$0 --help' for more information"
     exit 1
     ;;
 
@@ -122,22 +120,13 @@ case $1 in
     # Not GNU programs, they don't have --version.
     ;;
 
-  tar*)
-    if test -n "$run"; then
-       echo 1>&2 "ERROR: \`tar' requires --run"
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       exit 1
-    fi
-    ;;
-
   *)
     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
        # We have it, but it failed.
        exit 1
     elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
        # Could not run --version or --help.  This is probably someone
-       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # running '$TOOL --version' or '$TOOL --help' to check whether
        # $TOOL exists and not knowing $TOOL uses missing.
        exit 1
     fi
@@ -149,27 +138,27 @@ esac
 case $program in
   aclocal*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
-         to install the \`Automake' and \`Perl' packages.  Grab them from
+WARNING: '$1' is $msg.  You should only need it if
+         you modified 'acinclude.m4' or '${configure_ac}'.  You might want
+         to install the Automake and Perl packages.  Grab them from
          any GNU archive site."
     touch aclocal.m4
     ;;
 
   autoconf*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`${configure_ac}'.  You might want to install the
-         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+WARNING: '$1' is $msg.  You should only need it if
+         you modified '${configure_ac}'.  You might want to install the
+         Autoconf and GNU m4 packages.  Grab them from any GNU
          archive site."
     touch configure
     ;;
 
   autoheader*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
-         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+WARNING: '$1' is $msg.  You should only need it if
+         you modified 'acconfig.h' or '${configure_ac}'.  You might want
+         to install the Autoconf and GNU m4 packages.  Grab them
          from any GNU archive site."
     files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
     test -z "$files" && files="config.h"
@@ -186,9 +175,9 @@ WARNING: \`$1' is $msg.  You should only need it if
 
   automake*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
-         You might want to install the \`Automake' and \`Perl' packages.
+WARNING: '$1' is $msg.  You should only need it if
+         you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
+         You might want to install the Automake and Perl packages.
          Grab them from any GNU archive site."
     find . -type f -name Makefile.am -print |
 	   sed 's/\.am$/.in/' |
@@ -197,10 +186,10 @@ WARNING: \`$1' is $msg.  You should only need it if
 
   autom4te*)
     echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
+WARNING: '$1' is needed, but is $msg.
          You might have modified some files without having the
          proper tools for further handling them.
-         You can get \`$1' as part of \`Autoconf' from any GNU
+         You can get '$1' as part of Autoconf from any GNU
          archive site."
 
     file=`echo "$*" | sed -n "$sed_output"`
@@ -220,13 +209,13 @@ WARNING: \`$1' is needed, but is $msg.
 
   bison*|yacc*)
     echo 1>&2 "\
-WARNING: \`$1' $msg.  You should only need it if
-         you modified a \`.y' file.  You may need the \`Bison' package
+WARNING: '$1' $msg.  You should only need it if
+         you modified a '.y' file.  You may need the Bison package
          in order for those modifications to take effect.  You can get
-         \`Bison' from any GNU archive site."
+         Bison from any GNU archive site."
     rm -f y.tab.c y.tab.h
     if test $# -ne 1; then
-        eval LASTARG="\${$#}"
+        eval LASTARG=\${$#}
 	case $LASTARG in
 	*.y)
 	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
@@ -250,13 +239,13 @@ WARNING: \`$1' $msg.  You should only need it if
 
   lex*|flex*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.l' file.  You may need the \`Flex' package
+WARNING: '$1' is $msg.  You should only need it if
+         you modified a '.l' file.  You may need the Flex package
          in order for those modifications to take effect.  You can get
-         \`Flex' from any GNU archive site."
+         Flex from any GNU archive site."
     rm -f lex.yy.c
     if test $# -ne 1; then
-        eval LASTARG="\${$#}"
+        eval LASTARG=\${$#}
 	case $LASTARG in
 	*.l)
 	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
@@ -273,10 +262,10 @@ WARNING: \`$1' is $msg.  You should only need it if
 
   help2man*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
+WARNING: '$1' is $msg.  You should only need it if
 	 you modified a dependency of a manual page.  You may need the
-	 \`Help2man' package in order for those modifications to take
-	 effect.  You can get \`Help2man' from any GNU archive site."
+	 Help2man package in order for those modifications to take
+	 effect.  You can get Help2man from any GNU archive site."
 
     file=`echo "$*" | sed -n "$sed_output"`
     test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
@@ -291,12 +280,12 @@ WARNING: \`$1' is $msg.  You should only need it if
 
   makeinfo*)
     echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.texi' or \`.texinfo' file, or any other file
+WARNING: '$1' is $msg.  You should only need it if
+         you modified a '.texi' or '.texinfo' file, or any other file
          indirectly affecting the aspect of the manual.  The spurious
-         call might also be the consequence of using a buggy \`make' (AIX,
-         DU, IRIX).  You might want to install the \`Texinfo' package or
-         the \`GNU make' package.  Grab either from any GNU archive site."
+         call might also be the consequence of using a buggy 'make' (AIX,
+         DU, IRIX).  You might want to install the Texinfo package or
+         the GNU make package.  Grab either from any GNU archive site."
     # The file to touch is that specified with -o ...
     file=`echo "$*" | sed -n "$sed_output"`
     test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
@@ -318,49 +307,14 @@ WARNING: \`$1' is $msg.  You should only need it if
     touch $file
     ;;
 
-  tar*)
-    shift
-
-    # We have already tried tar in the generic part.
-    # Look for gnutar/gtar before invocation to avoid ugly error
-    # messages.
-    if (gnutar --version > /dev/null 2>&1); then
-       gnutar "$@" && exit 0
-    fi
-    if (gtar --version > /dev/null 2>&1); then
-       gtar "$@" && exit 0
-    fi
-    firstarg="$1"
-    if shift; then
-	case $firstarg in
-	*o*)
-	    firstarg=`echo "$firstarg" | sed s/o//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-	case $firstarg in
-	*h*)
-	    firstarg=`echo "$firstarg" | sed s/h//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-    fi
-
-    echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
-         You may want to install GNU tar or Free paxutils, or check the
-         command line arguments."
-    exit 1
-    ;;
-
   *)
     echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
+WARNING: '$1' is needed, and is $msg.
          You might have modified some files without having the
-         proper tools for further handling them.  Check the \`README' file,
+         proper tools for further handling them.  Check the 'README' file,
          it often tells you about the needed prerequisites for installing
          this package.  You may also peek at any GNU archive site, in case
-         some other package would contain this missing \`$1' program."
+         some other package would contain this missing '$1' program."
     exit 1
     ;;
 esac
diff --git a/build-aux/ylwrap b/build-aux/ylwrap
index 84d5634..6879d8d 100755
--- a/build-aux/ylwrap
+++ b/build-aux/ylwrap
@@ -1,10 +1,9 @@
 #! /bin/sh
 # ylwrap - wrapper for lex/yacc invocations.
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2011-08-25.18; # UTC
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
-# 2007, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
 #
 # Written by Tom Tromey <tromey cygnus com>.
 #
@@ -32,7 +31,7 @@ scriptversion=2009-04-28.21; # UTC
 
 case "$1" in
   '')
-    echo "$0: No files given.  Try \`$0 --help' for more information." 1>&2
+    echo "$0: No files given.  Try '$0 --help' for more information." 1>&2
     exit 1
     ;;
   --basedir)
@@ -63,10 +62,25 @@ EOF
     ;;
 esac
 
+get_dirname ()
+{
+  case $1 in
+    */*|*\\*) printf '%s\n' "$1" | sed -e 's,\([\\/]\)[^\\/]*$,\1,';;
+    # Otherwise,  we want the empty string (not ".").
+  esac
+}
+
+quote_for_sed ()
+{
+  # FIXME: really we should care about more than '.' and '\'.
+  sed -e 's,[\\.],\\&,g'
+}
 
 # The input.
 input="$1"
 shift
+# We'll later need for a correct munging of "#line" directives.
+input_sub_rx=`get_dirname "$input" | quote_for_sed`
 case "$input" in
   [\\/]* | ?:[\\/]*)
     # Absolute path; do nothing.
@@ -99,7 +113,11 @@ esac
 # FIXME: add hostname here for parallel makes that run commands on
 # other machines.  But that might take us over the 14-char limit.
 dirname=ylwrap$$
-trap "cd '`pwd`'; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
+do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret'
+trap "ret=129; $do_exit" 1
+trap "ret=130; $do_exit" 2
+trap "ret=141; $do_exit" 13
+trap "ret=143; $do_exit" 15
 mkdir $dirname || exit 1
 
 cd $dirname
@@ -122,30 +140,26 @@ if test $ret -eq 0; then
     y_tab_nodot="yes"
   fi
 
-  # The directory holding the input.
-  input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
-  # Quote $INPUT_DIR so we can use it in a regexp.
-  # FIXME: really we should care about more than `.' and `\'.
-  input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
+  input_rx=`get_dirname "$input" | quote_for_sed`
 
   while test "$#" -ne 0; do
     from="$1"
     # Handle y_tab.c and y_tab.h output by DOS
     if test $y_tab_nodot = "yes"; then
       if test $from = "y.tab.c"; then
-    	from="y_tab.c"
+        from="y_tab.c"
       else
-    	if test $from = "y.tab.h"; then
-    	  from="y_tab.h"
-    	fi
+        if test $from = "y.tab.h"; then
+          from="y_tab.h"
+        fi
       fi
     fi
     if test -f "$from"; then
       # If $2 is an absolute path name, then just use that,
-      # otherwise prepend `../'.
+      # otherwise prepend '../'.
       case "$2" in
-    	[\\/]* | ?:[\\/]*) target="$2";;
-    	*) target="../$2";;
+        [\\/]* | ?:[\\/]*) target="$2";;
+        *) target="../$2";;
       esac
 
       # We do not want to overwrite a header file if it hasn't
@@ -155,18 +169,14 @@ if test $ret -eq 0; then
       # Makefile.  Divert the output of all other files to a temporary
       # file so we can compare them to existing versions.
       if test $first = no; then
-	realtarget="$target"
-	target="tmp-`echo $target | sed s/.*[\\/]//g`"
+        realtarget="$target"
+        target="tmp-`echo $target | sed s/.*[\\/]//g`"
       fi
-      # Edit out `#line' or `#' directives.
-      #
+      # Munge "#line" or "#" directives.
       # We don't want the resulting debug information to point at
-      # an absolute srcdir; it is better for it to just mention the
-      # .y file with no path.
-      #
+      # an absolute srcdir.
       # We want to use the real output file name, not yy.lex.c for
       # instance.
-      #
       # We want the include guards to be adjusted too.
       FROM=`echo "$from" | sed \
             -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
@@ -175,15 +185,15 @@ if test $ret -eq 0; then
             -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
             -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
 
-      sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \
+      sed -e "/^#/!b" -e "s,$input_rx,$input_sub_rx," -e "s,$from,$2," \
           -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
 
       # Check whether header files must be updated.
       if test $first = no; then
-	if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
-	  echo "$2" is unchanged
-	  rm -f "$target"
-	else
+        if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
+          echo "$2" is unchanged
+          rm -f "$target"
+        else
           echo updating "$2"
           mv -f "$target" "$realtarget"
         fi
diff --git a/ccode/Makefile.in b/ccode/Makefile.in
index 0214ec0..d19dd5e 100644
--- a/ccode/Makefile.in
+++ b/ccode/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -17,6 +16,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkglibexecdir = $(libexecdir)/@PACKAGE@
@@ -36,7 +52,7 @@ build_triplet = @build@
 host_triplet = @host@
 subdir = ccode
 DIST_COMMON = $(ccodeinclude_HEADERS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in
+	$(srcdir)/Makefile.in $(top_srcdir)/build-aux/depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -80,8 +96,8 @@ am__objects_2 = valaccodeassignment.lo valaccodebinaryexpression.lo \
 	valaccodewriter.lo valaccodeelementaccess.lo $(am__objects_1)
 am_libvalaccode_la_OBJECTS = $(am__objects_2) $(am__objects_1)
 libvalaccode_la_OBJECTS = $(am_libvalaccode_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_ AM_V@)
+am__v_lt_ = $(am__v_lt_ AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 DEFAULT_INCLUDES = -I  am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
@@ -93,24 +109,29 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
 	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
 	$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_ AM_V@)
+am__v_CC_ = $(am__v_CC_ AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+AM_V_at = $(am__v_at_ AM_V@)
+am__v_at_ = $(am__v_at_ AM_DEFAULT_V@)
 am__v_at_0 = @
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_CCLD = $(am__v_CCLD_ AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+AM_V_GEN = $(am__v_GEN_ AM_V@)
+am__v_GEN_ = $(am__v_GEN_ AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
 SOURCES = $(libvalaccode_la_SOURCES)
 DIST_SOURCES = $(libvalaccode_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -132,6 +153,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(ccodeincludedir)"
 HEADERS = $(ccodeinclude_HEADERS)
 ETAGS = etags
@@ -260,7 +287,6 @@ libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 prefix = @prefix@
@@ -404,13 +430,15 @@ $(am__aclocal_m4_deps):
 
 clean-noinstLTLIBRARIES:
 	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
-	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-	  test "$$dir" != "$$p" || dir=.; \
-	  echo "rm -f \"$${dir}/so_locations\""; \
-	  rm -f "$${dir}/so_locations"; \
-	done
-libvalaccode.la: $(libvalaccode_la_OBJECTS) $(libvalaccode_la_DEPENDENCIES) 
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libvalaccode.la: $(libvalaccode_la_OBJECTS) $(libvalaccode_la_DEPENDENCIES) $(EXTRA_libvalaccode_la_DEPENDENCIES) 
 	$(AM_V_CCLD)$(LINK)  $(libvalaccode_la_OBJECTS) $(libvalaccode_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
@@ -474,26 +502,23 @@ distclean-compile:
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(COMPILE) -c $<
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -502,8 +527,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-ccodeincludeHEADERS: $(ccodeinclude_HEADERS)
 	@$(NORMAL_INSTALL)
-	test -z "$(ccodeincludedir)" || $(MKDIR_P) "$(DESTDIR)$(ccodeincludedir)"
 	@list='$(ccodeinclude_HEADERS)'; test -n "$(ccodeincludedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(ccodeincludedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(ccodeincludedir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -517,9 +545,7 @@ uninstall-ccodeincludeHEADERS:
 	@$(NORMAL_UNINSTALL)
 	@list='$(ccodeinclude_HEADERS)'; test -n "$(ccodeincludedir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(ccodeincludedir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(ccodeincludedir)" && rm -f $$files
+	dir='$(DESTDIR)$(ccodeincludedir)'; $(am__uninstall_files_from_dir)
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -570,6 +596,20 @@ GTAGS:
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
 
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
@@ -622,10 +662,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -713,18 +758,19 @@ uninstall-am: uninstall-ccodeincludeHEADERS
 .MAKE: all check install install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-ccodeincludeHEADERS install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-ccodeincludeHEADERS
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am \
+	install-ccodeincludeHEADERS install-data install-data-am \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-ccodeincludeHEADERS
 
 	$(NULL)
 
diff --git a/codegen/Makefile.in b/codegen/Makefile.in
index 787ec0d..4f17914 100644
--- a/codegen/Makefile.in
+++ b/codegen/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -17,6 +16,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkglibexecdir = $(libexecdir)/@PACKAGE@
@@ -36,7 +52,7 @@ build_triplet = @build@
 host_triplet = @host@
 subdir = codegen
 DIST_COMMON = $(codegeninclude_HEADERS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in
+	$(srcdir)/Makefile.in $(top_srcdir)/build-aux/depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -69,6 +85,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(libdir)" \
 	"$(DESTDIR)$(codegenincludedir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
@@ -100,8 +122,8 @@ am_libvala PACKAGE_SUFFIX@_la_OBJECTS = $(am__objects_2) \
 	$(am__objects_1)
 libvala PACKAGE_SUFFIX@_la_OBJECTS =  \
 	$(am_libvala PACKAGE_SUFFIX@_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_ AM_V@)
+am__v_lt_ = $(am__v_lt_ AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 libvala PACKAGE_SUFFIX@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
@@ -117,24 +139,29 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
 	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
 	$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_ AM_V@)
+am__v_CC_ = $(am__v_CC_ AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+AM_V_at = $(am__v_at_ AM_V@)
+am__v_at_ = $(am__v_at_ AM_DEFAULT_V@)
 am__v_at_0 = @
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_CCLD = $(am__v_CCLD_ AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+AM_V_GEN = $(am__v_GEN_ AM_V@)
+am__v_GEN_ = $(am__v_GEN_ AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
 SOURCES = $(libvala PACKAGE_SUFFIX@_la_SOURCES)
 DIST_SOURCES = $(libvala PACKAGE_SUFFIX@_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 HEADERS = $(codegeninclude_HEADERS)
 ETAGS = etags
 CTAGS = ctags
@@ -262,7 +289,6 @@ libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 prefix = @prefix@
@@ -398,7 +424,6 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 install-libLTLIBRARIES: $(lib_LTLIBRARIES)
 	@$(NORMAL_INSTALL)
-	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
 	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
 	list2=; for p in $$list; do \
 	  if test -f $$p; then \
@@ -406,6 +431,8 @@ install-libLTLIBRARIES: $(lib_LTLIBRARIES)
 	  else :; fi; \
 	done; \
 	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
 	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
 	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
 	}
@@ -421,13 +448,15 @@ uninstall-libLTLIBRARIES:
 
 clean-libLTLIBRARIES:
 	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-	  test "$$dir" != "$$p" || dir=.; \
-	  echo "rm -f \"$${dir}/so_locations\""; \
-	  rm -f "$${dir}/so_locations"; \
-	done
-libvala PACKAGE_SUFFIX@.la: $(libvala PACKAGE_SUFFIX@_la_OBJECTS) $(libvala PACKAGE_SUFFIX@_la_DEPENDENCIES) 
+	@list='$(lib_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libvala PACKAGE_SUFFIX@.la: $(libvala PACKAGE_SUFFIX@_la_OBJECTS) $(libvala PACKAGE_SUFFIX@_la_DEPENDENCIES) $(EXTRA_libvala PACKAGE_SUFFIX@_la_DEPENDENCIES) 
 	$(AM_V_CCLD)$(libvala PACKAGE_SUFFIX@_la_LINK) -rpath $(libdir) $(libvala PACKAGE_SUFFIX@_la_OBJECTS) $(libvala PACKAGE_SUFFIX@_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
@@ -479,26 +508,23 @@ distclean-compile:
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(COMPILE) -c $<
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -507,8 +533,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-codegenincludeHEADERS: $(codegeninclude_HEADERS)
 	@$(NORMAL_INSTALL)
-	test -z "$(codegenincludedir)" || $(MKDIR_P) "$(DESTDIR)$(codegenincludedir)"
 	@list='$(codegeninclude_HEADERS)'; test -n "$(codegenincludedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(codegenincludedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(codegenincludedir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -522,9 +551,7 @@ uninstall-codegenincludeHEADERS:
 	@$(NORMAL_UNINSTALL)
 	@list='$(codegeninclude_HEADERS)'; test -n "$(codegenincludedir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(codegenincludedir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(codegenincludedir)" && rm -f $$files
+	dir='$(DESTDIR)$(codegenincludedir)'; $(am__uninstall_files_from_dir)
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -575,6 +602,20 @@ GTAGS:
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
 
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
@@ -627,10 +668,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -718,7 +764,7 @@ uninstall-am: uninstall-codegenincludeHEADERS uninstall-libLTLIBRARIES
 .MAKE: all check install install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \
 	distclean-compile distclean-generic distclean-libtool \
 	distclean-tags distdir dvi dvi-am html html-am info info-am \
 	install install-am install-codegenincludeHEADERS install-data \
diff --git a/codegen/codegen.vapi b/codegen/codegen.vapi
index 3ebf8c6..b6f195d 100644
--- a/codegen/codegen.vapi
+++ b/codegen/codegen.vapi
@@ -43,11 +43,13 @@ namespace Vala {
 		public string copy_function { get; }
 		public string default_value { get; }
 		public bool delegate_target { get; private set; }
+		public string delegate_target_name { get; }
 		public string destroy_function { get; }
 		public string finish_name { get; }
 		public string finish_real_name { get; }
 		public string finish_vfunc_name { get; }
 		public string free_function { get; }
+		public bool free_function_address_of { get; }
 		public string get_value_function { get; }
 		public string header_filenames { get; }
 		public string lower_case_prefix { get; }
@@ -200,6 +202,7 @@ namespace Vala {
 		public virtual void generate_error_domain_declaration (Vala.ErrorDomain edomain, Vala.CCodeFile decl_space);
 		public void generate_field_declaration (Vala.Field f, Vala.CCodeFile decl_space);
 		protected string generate_free_func_wrapper (Vala.DataType type);
+		protected string generate_free_function_address_of_wrapper (Vala.DataType type);
 		public Vala.CCodeFunctionCall generate_instance_cast (Vala.CCodeExpression expr, Vala.TypeSymbol type);
 		public virtual void generate_interface_declaration (Vala.Interface iface, Vala.CCodeFile decl_space);
 		public virtual void generate_method_declaration (Vala.Method m, Vala.CCodeFile decl_space);
@@ -229,6 +232,7 @@ namespace Vala {
 		public static string get_ccode_declarator_suffix (Vala.DataType type);
 		public static string get_ccode_default_value (Vala.TypeSymbol sym);
 		public static bool get_ccode_delegate_target (Vala.CodeNode node);
+		public static string get_ccode_delegate_target_name (Vala.Variable variable);
 		public static double get_ccode_delegate_target_pos (Vala.CodeNode node);
 		public static string get_ccode_destroy_function (Vala.TypeSymbol sym);
 		public static double get_ccode_destroy_notify_pos (Vala.CodeNode node);
@@ -237,6 +241,7 @@ namespace Vala {
 		public static string get_ccode_finish_real_name (Vala.Method m);
 		public static string get_ccode_finish_vfunc_name (Vala.Method m);
 		public static string get_ccode_free_function (Vala.TypeSymbol sym);
+		public static bool get_ccode_free_function_address_of (Vala.Class cl);
 		public static double get_ccode_generic_type_pos (Vala.Method m);
 		public static string get_ccode_get_value_function (Vala.CodeNode sym);
 		public static bool get_ccode_has_copy_function (Vala.Struct st);
@@ -329,11 +334,13 @@ namespace Vala {
 		public bool is_lvalue_access_allowed (Vala.DataType type);
 		public bool is_pure_ccode_expression (Vala.CCodeExpression cexpr);
 		public static bool is_reference_counting (Vala.TypeSymbol sym);
+		public bool is_simple_struct_creation (Vala.Variable variable, Vala.Expression expr);
 		public Vala.TargetValue load_temp_value (Vala.TargetValue lvalue);
 		public abstract Vala.TargetValue load_this_parameter (Vala.TypeSymbol sym);
 		public abstract Vala.TargetValue load_variable (Vala.Variable variable, Vala.TargetValue value);
 		public virtual bool method_has_wrapper (Vala.Method method);
 		public unowned Vala.Block? next_closure_block (Vala.Symbol sym);
+		public bool no_implicit_copy (Vala.DataType type);
 		public void pop_context ();
 		public void pop_function ();
 		public void pop_line ();
@@ -851,6 +858,23 @@ namespace Vala {
 	[CCode (cheader_filename = "valacodegen.h")]
 	public class GIRWriter : Vala.CodeVisitor {
 		public GIRWriter ();
+		protected virtual string? get_class_comment (Vala.Class c);
+		protected virtual string? get_constant_comment (Vala.Constant c);
+		protected virtual string? get_delegate_comment (Vala.Delegate cb);
+		protected virtual string? get_delegate_return_comment (Vala.Delegate cb);
+		protected virtual string? get_enum_comment (Vala.Enum en);
+		protected virtual string? get_enum_value_comment (Vala.EnumValue ev);
+		protected virtual string? get_error_code_comment (Vala.ErrorCode ecode);
+		protected virtual string? get_error_domain_comment (Vala.ErrorDomain edomain);
+		protected virtual string? get_field_comment (Vala.Field f);
+		protected virtual string? get_interface_comment (Vala.Interface iface);
+		protected virtual string? get_method_comment (Vala.Method m);
+		protected virtual string? get_method_return_comment (Vala.Method m);
+		protected virtual string? get_parameter_comment (Vala.Parameter param);
+		protected virtual string? get_property_comment (Vala.Property prop);
+		protected virtual string? get_signal_comment (Vala.Signal sig);
+		protected virtual string? get_signal_return_comment (Vala.Signal sig);
+		protected virtual string? get_struct_comment (Vala.Struct st);
 		public override void visit_class (Vala.Class cl);
 		public override void visit_constant (Vala.Constant c);
 		public override void visit_creation_method (Vala.CreationMethod m);
diff --git a/codegen/valaccodeassignmentmodule.c b/codegen/valaccodeassignmentmodule.c
index df6c74e..f500340 100644
--- a/codegen/valaccodeassignmentmodule.c
+++ b/codegen/valaccodeassignmentmodule.c
@@ -349,6 +349,7 @@ ValaTargetValue* vala_ccode_base_module_load_variable (ValaCCodeBaseModule* self
 ValaTargetValue* vala_ccode_base_module_store_temp_value (ValaCCodeBaseModule* self, ValaTargetValue* initializer, ValaCodeNode* node_reference, gboolean* value_owned);
 static void vala_ccode_assignment_module_real_visit_assignment (ValaCodeVisitor* base, ValaAssignment* assignment);
 void vala_ccode_base_module_store_property (ValaCCodeBaseModule* self, ValaProperty* prop, ValaExpression* instance, ValaTargetValue* value);
+gboolean vala_ccode_base_module_is_simple_struct_creation (ValaCCodeBaseModule* self, ValaVariable* variable, ValaExpression* expr);
 static void vala_ccode_assignment_module_real_store_value (ValaCCodeBaseModule* base, ValaTargetValue* lvalue, ValaTargetValue* value);
 gchar* vala_ccode_base_module_get_ccode_name (ValaCodeNode* node);
 ValaCCodeExpression* vala_ccode_base_module_get_cvalue_ (ValaCCodeBaseModule* self, ValaTargetValue* value);
@@ -780,16 +781,55 @@ static void vala_ccode_assignment_module_real_visit_assignment (ValaCodeVisitor*
 		_vala_code_node_unref0 (prop);
 		_vala_code_node_unref0 (ma);
 	} else {
-		ValaAssignment* _tmp43_;
+		gboolean _tmp43_ = FALSE;
 		ValaAssignment* _tmp44_;
-		ValaTargetValue* _tmp45_ = NULL;
-		ValaTargetValue* _tmp46_;
-		_tmp43_ = assignment;
+		ValaExpression* _tmp45_;
+		ValaExpression* _tmp46_;
+		ValaSymbol* _tmp47_;
+		ValaSymbol* _tmp48_;
+		gboolean _tmp58_;
 		_tmp44_ = assignment;
-		_tmp45_ = vala_ccode_assignment_module_emit_simple_assignment (self, _tmp44_);
+		_tmp45_ = vala_assignment_get_left (_tmp44_);
 		_tmp46_ = _tmp45_;
-		vala_expression_set_target_value ((ValaExpression*) _tmp43_, _tmp46_);
-		_vala_target_value_unref0 (_tmp46_);
+		_tmp47_ = vala_expression_get_symbol_reference (_tmp46_);
+		_tmp48_ = _tmp47_;
+		if (VALA_IS_VARIABLE (_tmp48_)) {
+			ValaAssignment* _tmp49_;
+			ValaExpression* _tmp50_;
+			ValaExpression* _tmp51_;
+			ValaSymbol* _tmp52_;
+			ValaSymbol* _tmp53_;
+			ValaAssignment* _tmp54_;
+			ValaExpression* _tmp55_;
+			ValaExpression* _tmp56_;
+			gboolean _tmp57_ = FALSE;
+			_tmp49_ = assignment;
+			_tmp50_ = vala_assignment_get_left (_tmp49_);
+			_tmp51_ = _tmp50_;
+			_tmp52_ = vala_expression_get_symbol_reference (_tmp51_);
+			_tmp53_ = _tmp52_;
+			_tmp54_ = assignment;
+			_tmp55_ = vala_assignment_get_right (_tmp54_);
+			_tmp56_ = _tmp55_;
+			_tmp57_ = vala_ccode_base_module_is_simple_struct_creation ((ValaCCodeBaseModule*) self, VALA_VARIABLE (_tmp53_), _tmp56_);
+			_tmp43_ = _tmp57_;
+		} else {
+			_tmp43_ = FALSE;
+		}
+		_tmp58_ = _tmp43_;
+		if (_tmp58_) {
+		} else {
+			ValaAssignment* _tmp59_;
+			ValaAssignment* _tmp60_;
+			ValaTargetValue* _tmp61_ = NULL;
+			ValaTargetValue* _tmp62_;
+			_tmp59_ = assignment;
+			_tmp60_ = assignment;
+			_tmp61_ = vala_ccode_assignment_module_emit_simple_assignment (self, _tmp60_);
+			_tmp62_ = _tmp61_;
+			vala_expression_set_target_value ((ValaExpression*) _tmp59_, _tmp62_);
+			_vala_target_value_unref0 (_tmp62_);
+		}
 	}
 }
 
diff --git a/codegen/valaccodeassignmentmodule.vala b/codegen/valaccodeassignmentmodule.vala
index 47985a1..b25bd8d 100644
--- a/codegen/valaccodeassignmentmodule.vala
+++ b/codegen/valaccodeassignmentmodule.vala
@@ -87,6 +87,8 @@ public class Vala.CCodeAssignmentModule : CCodeMemberAccessModule {
 
 			store_property (prop, ma.inner, assignment.right.target_value);
 			assignment.target_value = assignment.right.target_value;
+		} else if (assignment.left.symbol_reference is Variable && is_simple_struct_creation ((Variable) assignment.left.symbol_reference, assignment.right)) {
+			// delegate to visit_object_creation_expression
 		} else {
 			assignment.target_value = emit_simple_assignment (assignment);
 		}
diff --git a/codegen/valaccodeattribute.c b/codegen/valaccodeattribute.c
index fa878c5..7501031 100644
--- a/codegen/valaccodeattribute.c
+++ b/codegen/valaccodeattribute.c
@@ -98,6 +98,7 @@ struct _ValaCCodeAttributePrivate {
 	gboolean destroy_function_set;
 	gchar* _free_function;
 	gboolean free_function_set;
+	gboolean* _free_function_address_of;
 	gchar* _type_id;
 	gchar* _marshaller_type_name;
 	gchar* _get_value_function;
@@ -111,6 +112,7 @@ struct _ValaCCodeAttributePrivate {
 	gchar* _finish_vfunc_name;
 	gchar* _finish_real_name;
 	gchar* _real_name;
+	gchar* _delegate_target_name;
 };
 
 
@@ -195,6 +197,8 @@ const gchar* vala_ccode_attribute_get_ref_sink_function (ValaCCodeAttribute* sel
 const gchar* vala_ccode_attribute_get_copy_function (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_destroy_function (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_free_function (ValaCCodeAttribute* self);
+gboolean vala_ccode_attribute_get_free_function_address_of (ValaCCodeAttribute* self);
+gboolean vala_ccode_base_module_get_ccode_free_function_address_of (ValaClass* cl);
 const gchar* vala_ccode_attribute_get_marshaller_type_name (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_get_value_function (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_set_value_function (ValaCCodeAttribute* self);
@@ -207,6 +211,7 @@ const gchar* vala_ccode_attribute_get_vfunc_name (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_finish_name (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_finish_vfunc_name (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_finish_real_name (ValaCCodeAttribute* self);
+const gchar* vala_ccode_attribute_get_delegate_target_name (ValaCCodeAttribute* self);
 gboolean vala_ccode_attribute_get_array_length (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_array_length_type (ValaCCodeAttribute* self);
 gboolean vala_ccode_attribute_get_array_null_terminated (ValaCCodeAttribute* self);
@@ -1038,30 +1043,56 @@ static gchar* vala_ccode_attribute_get_default_name (ValaCCodeAttribute* self) {
 										}
 										_vala_code_node_unref0 (st);
 									} else {
-										ValaSymbol* _tmp207_;
+										gboolean _tmp207_ = FALSE;
 										ValaSymbol* _tmp208_;
-										ValaSymbol* _tmp209_;
-										gchar* _tmp210_ = NULL;
-										gchar* _tmp211_;
-										ValaSymbol* _tmp212_;
-										const gchar* _tmp213_;
-										const gchar* _tmp214_;
-										gchar* _tmp215_ = NULL;
-										gchar* _tmp216_;
-										_tmp207_ = sym;
-										_tmp208_ = vala_symbol_get_parent_symbol (_tmp207_);
-										_tmp209_ = _tmp208_;
-										_tmp210_ = vala_ccode_base_module_get_ccode_prefix (_tmp209_);
-										_tmp211_ = _tmp210_;
-										_tmp212_ = sym;
-										_tmp213_ = vala_symbol_get_name (_tmp212_);
-										_tmp214_ = _tmp213_;
-										_tmp215_ = g_strdup_printf ("%s%s", _tmp211_, _tmp214_);
-										_tmp216_ = _tmp215_;
-										_g_free0 (_tmp211_);
-										result = _tmp216_;
-										_vala_code_node_unref0 (sym);
-										return result;
+										gboolean _tmp210_;
+										_tmp208_ = sym;
+										if (VALA_IS_LOCAL_VARIABLE (_tmp208_)) {
+											_tmp207_ = TRUE;
+										} else {
+											ValaSymbol* _tmp209_;
+											_tmp209_ = sym;
+											_tmp207_ = VALA_IS_PARAMETER (_tmp209_);
+										}
+										_tmp210_ = _tmp207_;
+										if (_tmp210_) {
+											ValaSymbol* _tmp211_;
+											const gchar* _tmp212_;
+											const gchar* _tmp213_;
+											gchar* _tmp214_;
+											_tmp211_ = sym;
+											_tmp212_ = vala_symbol_get_name (_tmp211_);
+											_tmp213_ = _tmp212_;
+											_tmp214_ = g_strdup (_tmp213_);
+											result = _tmp214_;
+											_vala_code_node_unref0 (sym);
+											return result;
+										} else {
+											ValaSymbol* _tmp215_;
+											ValaSymbol* _tmp216_;
+											ValaSymbol* _tmp217_;
+											gchar* _tmp218_ = NULL;
+											gchar* _tmp219_;
+											ValaSymbol* _tmp220_;
+											const gchar* _tmp221_;
+											const gchar* _tmp222_;
+											gchar* _tmp223_ = NULL;
+											gchar* _tmp224_;
+											_tmp215_ = sym;
+											_tmp216_ = vala_symbol_get_parent_symbol (_tmp215_);
+											_tmp217_ = _tmp216_;
+											_tmp218_ = vala_ccode_base_module_get_ccode_prefix (_tmp217_);
+											_tmp219_ = _tmp218_;
+											_tmp220_ = sym;
+											_tmp221_ = vala_symbol_get_name (_tmp220_);
+											_tmp222_ = _tmp221_;
+											_tmp223_ = g_strdup_printf ("%s%s", _tmp219_, _tmp222_);
+											_tmp224_ = _tmp223_;
+											_g_free0 (_tmp219_);
+											result = _tmp224_;
+											_vala_code_node_unref0 (sym);
+											return result;
+										}
 									}
 								}
 							}
@@ -1071,145 +1102,145 @@ static gchar* vala_ccode_attribute_get_default_name (ValaCCodeAttribute* self) {
 			}
 		}
 	} else {
-		ValaCodeNode* _tmp217_;
-		_tmp217_ = self->priv->node;
-		if (VALA_IS_OBJECT_TYPE (_tmp217_)) {
-			ValaCodeNode* _tmp218_;
-			ValaObjectType* _tmp219_;
+		ValaCodeNode* _tmp225_;
+		_tmp225_ = self->priv->node;
+		if (VALA_IS_OBJECT_TYPE (_tmp225_)) {
+			ValaCodeNode* _tmp226_;
+			ValaObjectType* _tmp227_;
 			ValaObjectType* type;
-			ValaCodeContext* _tmp220_ = NULL;
-			ValaCodeContext* _tmp221_;
-			ValaProfile _tmp222_;
-			ValaProfile _tmp223_;
-			gboolean _tmp224_;
+			ValaCodeContext* _tmp228_ = NULL;
+			ValaCodeContext* _tmp229_;
+			ValaProfile _tmp230_;
+			ValaProfile _tmp231_;
+			gboolean _tmp232_;
 			gchar* cname = NULL;
-			ValaObjectType* _tmp232_;
-			gboolean _tmp233_;
-			gboolean _tmp234_;
-			const gchar* _tmp243_;
-			gchar* _tmp244_ = NULL;
-			_tmp218_ = self->priv->node;
-			_tmp219_ = _vala_code_node_ref0 (VALA_OBJECT_TYPE (_tmp218_));
-			type = _tmp219_;
-			_tmp220_ = vala_code_context_get ();
-			_tmp221_ = _tmp220_;
-			_tmp222_ = vala_code_context_get_profile (_tmp221_);
-			_tmp223_ = _tmp222_;
-			_tmp224_ = _tmp223_ == VALA_PROFILE_DOVA;
-			_vala_code_context_unref0 (_tmp221_);
-			if (_tmp224_) {
-				ValaObjectType* _tmp225_;
-				ValaObjectTypeSymbol* _tmp226_;
-				ValaObjectTypeSymbol* _tmp227_;
-				gchar* _tmp228_ = NULL;
-				gchar* _tmp229_;
-				gboolean _tmp230_;
-				_tmp225_ = type;
-				_tmp226_ = vala_object_type_get_type_symbol (_tmp225_);
-				_tmp227_ = _tmp226_;
-				_tmp228_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp227_);
-				_tmp229_ = _tmp228_;
-				_tmp230_ = g_strcmp0 (_tmp229_, "string") == 0;
-				_g_free0 (_tmp229_);
-				if (_tmp230_) {
-					gchar* _tmp231_;
-					_tmp231_ = g_strdup ("string_t");
-					result = _tmp231_;
+			ValaObjectType* _tmp240_;
+			gboolean _tmp241_;
+			gboolean _tmp242_;
+			const gchar* _tmp251_;
+			gchar* _tmp252_ = NULL;
+			_tmp226_ = self->priv->node;
+			_tmp227_ = _vala_code_node_ref0 (VALA_OBJECT_TYPE (_tmp226_));
+			type = _tmp227_;
+			_tmp228_ = vala_code_context_get ();
+			_tmp229_ = _tmp228_;
+			_tmp230_ = vala_code_context_get_profile (_tmp229_);
+			_tmp231_ = _tmp230_;
+			_tmp232_ = _tmp231_ == VALA_PROFILE_DOVA;
+			_vala_code_context_unref0 (_tmp229_);
+			if (_tmp232_) {
+				ValaObjectType* _tmp233_;
+				ValaObjectTypeSymbol* _tmp234_;
+				ValaObjectTypeSymbol* _tmp235_;
+				gchar* _tmp236_ = NULL;
+				gchar* _tmp237_;
+				gboolean _tmp238_;
+				_tmp233_ = type;
+				_tmp234_ = vala_object_type_get_type_symbol (_tmp233_);
+				_tmp235_ = _tmp234_;
+				_tmp236_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp235_);
+				_tmp237_ = _tmp236_;
+				_tmp238_ = g_strcmp0 (_tmp237_, "string") == 0;
+				_g_free0 (_tmp237_);
+				if (_tmp238_) {
+					gchar* _tmp239_;
+					_tmp239_ = g_strdup ("string_t");
+					result = _tmp239_;
 					_vala_code_node_unref0 (type);
 					_vala_code_node_unref0 (sym);
 					return result;
 				}
 			}
-			_tmp232_ = type;
-			_tmp233_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp232_);
-			_tmp234_ = _tmp233_;
-			if (!_tmp234_) {
-				ValaObjectType* _tmp235_;
-				ValaObjectTypeSymbol* _tmp236_;
-				ValaObjectTypeSymbol* _tmp237_;
-				gchar* _tmp238_ = NULL;
-				_tmp235_ = type;
-				_tmp236_ = vala_object_type_get_type_symbol (_tmp235_);
-				_tmp237_ = _tmp236_;
-				_tmp238_ = vala_ccode_base_module_get_ccode_const_name ((ValaCodeNode*) _tmp237_);
+			_tmp240_ = type;
+			_tmp241_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp240_);
+			_tmp242_ = _tmp241_;
+			if (!_tmp242_) {
+				ValaObjectType* _tmp243_;
+				ValaObjectTypeSymbol* _tmp244_;
+				ValaObjectTypeSymbol* _tmp245_;
+				gchar* _tmp246_ = NULL;
+				_tmp243_ = type;
+				_tmp244_ = vala_object_type_get_type_symbol (_tmp243_);
+				_tmp245_ = _tmp244_;
+				_tmp246_ = vala_ccode_base_module_get_ccode_const_name ((ValaCodeNode*) _tmp245_);
 				_g_free0 (cname);
-				cname = _tmp238_;
+				cname = _tmp246_;
 			} else {
-				ValaObjectType* _tmp239_;
-				ValaObjectTypeSymbol* _tmp240_;
-				ValaObjectTypeSymbol* _tmp241_;
-				gchar* _tmp242_ = NULL;
-				_tmp239_ = type;
-				_tmp240_ = vala_object_type_get_type_symbol (_tmp239_);
-				_tmp241_ = _tmp240_;
-				_tmp242_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp241_);
+				ValaObjectType* _tmp247_;
+				ValaObjectTypeSymbol* _tmp248_;
+				ValaObjectTypeSymbol* _tmp249_;
+				gchar* _tmp250_ = NULL;
+				_tmp247_ = type;
+				_tmp248_ = vala_object_type_get_type_symbol (_tmp247_);
+				_tmp249_ = _tmp248_;
+				_tmp250_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp249_);
 				_g_free0 (cname);
-				cname = _tmp242_;
+				cname = _tmp250_;
 			}
-			_tmp243_ = cname;
-			_tmp244_ = g_strdup_printf ("%s*", _tmp243_);
-			result = _tmp244_;
+			_tmp251_ = cname;
+			_tmp252_ = g_strdup_printf ("%s*", _tmp251_);
+			result = _tmp252_;
 			_g_free0 (cname);
 			_vala_code_node_unref0 (type);
 			_vala_code_node_unref0 (sym);
 			return result;
 		} else {
-			ValaCodeNode* _tmp245_;
-			_tmp245_ = self->priv->node;
-			if (VALA_IS_ARRAY_TYPE (_tmp245_)) {
-				ValaCodeNode* _tmp246_;
-				ValaArrayType* _tmp247_;
+			ValaCodeNode* _tmp253_;
+			_tmp253_ = self->priv->node;
+			if (VALA_IS_ARRAY_TYPE (_tmp253_)) {
+				ValaCodeNode* _tmp254_;
+				ValaArrayType* _tmp255_;
 				ValaArrayType* type;
-				ValaArrayType* _tmp248_;
-				ValaDataType* _tmp249_;
-				ValaDataType* _tmp250_;
-				gchar* _tmp251_ = NULL;
+				ValaArrayType* _tmp256_;
+				ValaDataType* _tmp257_;
+				ValaDataType* _tmp258_;
+				gchar* _tmp259_ = NULL;
 				gchar* cname;
-				ValaArrayType* _tmp252_;
-				gboolean _tmp253_;
-				gboolean _tmp254_;
-				_tmp246_ = self->priv->node;
-				_tmp247_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp246_));
-				type = _tmp247_;
-				_tmp248_ = type;
-				_tmp249_ = vala_array_type_get_element_type (_tmp248_);
-				_tmp250_ = _tmp249_;
-				_tmp251_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp250_);
-				cname = _tmp251_;
-				_tmp252_ = type;
-				_tmp253_ = vala_array_type_get_inline_allocated (_tmp252_);
-				_tmp254_ = _tmp253_;
-				if (_tmp254_) {
+				ValaArrayType* _tmp260_;
+				gboolean _tmp261_;
+				gboolean _tmp262_;
+				_tmp254_ = self->priv->node;
+				_tmp255_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp254_));
+				type = _tmp255_;
+				_tmp256_ = type;
+				_tmp257_ = vala_array_type_get_element_type (_tmp256_);
+				_tmp258_ = _tmp257_;
+				_tmp259_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp258_);
+				cname = _tmp259_;
+				_tmp260_ = type;
+				_tmp261_ = vala_array_type_get_inline_allocated (_tmp260_);
+				_tmp262_ = _tmp261_;
+				if (_tmp262_) {
 					result = cname;
 					_vala_code_node_unref0 (type);
 					_vala_code_node_unref0 (sym);
 					return result;
 				} else {
-					ValaCodeContext* _tmp255_ = NULL;
-					ValaCodeContext* _tmp256_;
-					ValaProfile _tmp257_;
-					ValaProfile _tmp258_;
-					gboolean _tmp259_;
-					_tmp255_ = vala_code_context_get ();
-					_tmp256_ = _tmp255_;
-					_tmp257_ = vala_code_context_get_profile (_tmp256_);
-					_tmp258_ = _tmp257_;
-					_tmp259_ = _tmp258_ == VALA_PROFILE_DOVA;
-					_vala_code_context_unref0 (_tmp256_);
-					if (_tmp259_) {
-						gchar* _tmp260_;
-						_tmp260_ = g_strdup ("DovaArray");
-						result = _tmp260_;
+					ValaCodeContext* _tmp263_ = NULL;
+					ValaCodeContext* _tmp264_;
+					ValaProfile _tmp265_;
+					ValaProfile _tmp266_;
+					gboolean _tmp267_;
+					_tmp263_ = vala_code_context_get ();
+					_tmp264_ = _tmp263_;
+					_tmp265_ = vala_code_context_get_profile (_tmp264_);
+					_tmp266_ = _tmp265_;
+					_tmp267_ = _tmp266_ == VALA_PROFILE_DOVA;
+					_vala_code_context_unref0 (_tmp264_);
+					if (_tmp267_) {
+						gchar* _tmp268_;
+						_tmp268_ = g_strdup ("DovaArray");
+						result = _tmp268_;
 						_g_free0 (cname);
 						_vala_code_node_unref0 (type);
 						_vala_code_node_unref0 (sym);
 						return result;
 					} else {
-						const gchar* _tmp261_;
-						gchar* _tmp262_ = NULL;
-						_tmp261_ = cname;
-						_tmp262_ = g_strdup_printf ("%s*", _tmp261_);
-						result = _tmp262_;
+						const gchar* _tmp269_;
+						gchar* _tmp270_ = NULL;
+						_tmp269_ = cname;
+						_tmp270_ = g_strdup_printf ("%s*", _tmp269_);
+						result = _tmp270_;
 						_g_free0 (cname);
 						_vala_code_node_unref0 (type);
 						_vala_code_node_unref0 (sym);
@@ -1219,332 +1250,332 @@ static gchar* vala_ccode_attribute_get_default_name (ValaCCodeAttribute* self) {
 				_g_free0 (cname);
 				_vala_code_node_unref0 (type);
 			} else {
-				ValaCodeNode* _tmp263_;
-				_tmp263_ = self->priv->node;
-				if (VALA_IS_DELEGATE_TYPE (_tmp263_)) {
-					ValaCodeNode* _tmp264_;
-					ValaDelegateType* _tmp265_;
+				ValaCodeNode* _tmp271_;
+				_tmp271_ = self->priv->node;
+				if (VALA_IS_DELEGATE_TYPE (_tmp271_)) {
+					ValaCodeNode* _tmp272_;
+					ValaDelegateType* _tmp273_;
 					ValaDelegateType* type;
-					ValaCodeContext* _tmp266_ = NULL;
-					ValaCodeContext* _tmp267_;
-					ValaProfile _tmp268_;
-					ValaProfile _tmp269_;
-					gboolean _tmp270_;
-					_tmp264_ = self->priv->node;
-					_tmp265_ = _vala_code_node_ref0 (VALA_DELEGATE_TYPE (_tmp264_));
-					type = _tmp265_;
-					_tmp266_ = vala_code_context_get ();
-					_tmp267_ = _tmp266_;
-					_tmp268_ = vala_code_context_get_profile (_tmp267_);
-					_tmp269_ = _tmp268_;
-					_tmp270_ = _tmp269_ == VALA_PROFILE_DOVA;
-					_vala_code_context_unref0 (_tmp267_);
-					if (_tmp270_) {
-						ValaDelegateType* _tmp271_;
-						ValaDelegate* _tmp272_;
-						ValaDelegate* _tmp273_;
-						gchar* _tmp274_ = NULL;
-						gchar* _tmp275_;
-						gchar* _tmp276_ = NULL;
-						gchar* _tmp277_;
-						_tmp271_ = type;
-						_tmp272_ = vala_delegate_type_get_delegate_symbol (_tmp271_);
-						_tmp273_ = _tmp272_;
-						_tmp274_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp273_);
-						_tmp275_ = _tmp274_;
-						_tmp276_ = g_strdup_printf ("%s*", _tmp275_);
-						_tmp277_ = _tmp276_;
-						_g_free0 (_tmp275_);
-						result = _tmp277_;
+					ValaCodeContext* _tmp274_ = NULL;
+					ValaCodeContext* _tmp275_;
+					ValaProfile _tmp276_;
+					ValaProfile _tmp277_;
+					gboolean _tmp278_;
+					_tmp272_ = self->priv->node;
+					_tmp273_ = _vala_code_node_ref0 (VALA_DELEGATE_TYPE (_tmp272_));
+					type = _tmp273_;
+					_tmp274_ = vala_code_context_get ();
+					_tmp275_ = _tmp274_;
+					_tmp276_ = vala_code_context_get_profile (_tmp275_);
+					_tmp277_ = _tmp276_;
+					_tmp278_ = _tmp277_ == VALA_PROFILE_DOVA;
+					_vala_code_context_unref0 (_tmp275_);
+					if (_tmp278_) {
+						ValaDelegateType* _tmp279_;
+						ValaDelegate* _tmp280_;
+						ValaDelegate* _tmp281_;
+						gchar* _tmp282_ = NULL;
+						gchar* _tmp283_;
+						gchar* _tmp284_ = NULL;
+						gchar* _tmp285_;
+						_tmp279_ = type;
+						_tmp280_ = vala_delegate_type_get_delegate_symbol (_tmp279_);
+						_tmp281_ = _tmp280_;
+						_tmp282_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp281_);
+						_tmp283_ = _tmp282_;
+						_tmp284_ = g_strdup_printf ("%s*", _tmp283_);
+						_tmp285_ = _tmp284_;
+						_g_free0 (_tmp283_);
+						result = _tmp285_;
 						_vala_code_node_unref0 (type);
 						_vala_code_node_unref0 (sym);
 						return result;
 					} else {
-						ValaDelegateType* _tmp278_;
-						ValaDelegate* _tmp279_;
-						ValaDelegate* _tmp280_;
-						gchar* _tmp281_ = NULL;
-						_tmp278_ = type;
-						_tmp279_ = vala_delegate_type_get_delegate_symbol (_tmp278_);
-						_tmp280_ = _tmp279_;
-						_tmp281_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp280_);
-						result = _tmp281_;
+						ValaDelegateType* _tmp286_;
+						ValaDelegate* _tmp287_;
+						ValaDelegate* _tmp288_;
+						gchar* _tmp289_ = NULL;
+						_tmp286_ = type;
+						_tmp287_ = vala_delegate_type_get_delegate_symbol (_tmp286_);
+						_tmp288_ = _tmp287_;
+						_tmp289_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp288_);
+						result = _tmp289_;
 						_vala_code_node_unref0 (type);
 						_vala_code_node_unref0 (sym);
 						return result;
 					}
 					_vala_code_node_unref0 (type);
 				} else {
-					ValaCodeNode* _tmp282_;
-					_tmp282_ = self->priv->node;
-					if (VALA_IS_ERROR_TYPE (_tmp282_)) {
-						gchar* _tmp283_;
-						_tmp283_ = g_strdup ("GError*");
-						result = _tmp283_;
+					ValaCodeNode* _tmp290_;
+					_tmp290_ = self->priv->node;
+					if (VALA_IS_ERROR_TYPE (_tmp290_)) {
+						gchar* _tmp291_;
+						_tmp291_ = g_strdup ("GError*");
+						result = _tmp291_;
 						_vala_code_node_unref0 (sym);
 						return result;
 					} else {
-						ValaCodeNode* _tmp284_;
-						_tmp284_ = self->priv->node;
-						if (VALA_IS_GENERIC_TYPE (_tmp284_)) {
-							ValaCodeContext* _tmp285_ = NULL;
-							ValaCodeContext* _tmp286_;
-							ValaProfile _tmp287_;
-							ValaProfile _tmp288_;
-							gboolean _tmp289_;
-							_tmp285_ = vala_code_context_get ();
-							_tmp286_ = _tmp285_;
-							_tmp287_ = vala_code_context_get_profile (_tmp286_);
-							_tmp288_ = _tmp287_;
-							_tmp289_ = _tmp288_ == VALA_PROFILE_GOBJECT;
-							_vala_code_context_unref0 (_tmp286_);
-							if (_tmp289_) {
-								ValaCodeNode* _tmp290_;
-								ValaGenericType* _tmp291_;
+						ValaCodeNode* _tmp292_;
+						_tmp292_ = self->priv->node;
+						if (VALA_IS_GENERIC_TYPE (_tmp292_)) {
+							ValaCodeContext* _tmp293_ = NULL;
+							ValaCodeContext* _tmp294_;
+							ValaProfile _tmp295_;
+							ValaProfile _tmp296_;
+							gboolean _tmp297_;
+							_tmp293_ = vala_code_context_get ();
+							_tmp294_ = _tmp293_;
+							_tmp295_ = vala_code_context_get_profile (_tmp294_);
+							_tmp296_ = _tmp295_;
+							_tmp297_ = _tmp296_ == VALA_PROFILE_GOBJECT;
+							_vala_code_context_unref0 (_tmp294_);
+							if (_tmp297_) {
+								ValaCodeNode* _tmp298_;
+								ValaGenericType* _tmp299_;
 								ValaGenericType* type;
-								ValaGenericType* _tmp292_;
-								gboolean _tmp293_;
-								gboolean _tmp294_;
-								_tmp290_ = self->priv->node;
-								_tmp291_ = _vala_code_node_ref0 (VALA_GENERIC_TYPE (_tmp290_));
-								type = _tmp291_;
-								_tmp292_ = type;
-								_tmp293_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp292_);
-								_tmp294_ = _tmp293_;
-								if (_tmp294_) {
-									gchar* _tmp295_;
-									_tmp295_ = g_strdup ("gpointer");
-									result = _tmp295_;
+								ValaGenericType* _tmp300_;
+								gboolean _tmp301_;
+								gboolean _tmp302_;
+								_tmp298_ = self->priv->node;
+								_tmp299_ = _vala_code_node_ref0 (VALA_GENERIC_TYPE (_tmp298_));
+								type = _tmp299_;
+								_tmp300_ = type;
+								_tmp301_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp300_);
+								_tmp302_ = _tmp301_;
+								if (_tmp302_) {
+									gchar* _tmp303_;
+									_tmp303_ = g_strdup ("gpointer");
+									result = _tmp303_;
 									_vala_code_node_unref0 (type);
 									_vala_code_node_unref0 (sym);
 									return result;
 								} else {
-									gchar* _tmp296_;
-									_tmp296_ = g_strdup ("gconstpointer");
-									result = _tmp296_;
+									gchar* _tmp304_;
+									_tmp304_ = g_strdup ("gconstpointer");
+									result = _tmp304_;
 									_vala_code_node_unref0 (type);
 									_vala_code_node_unref0 (sym);
 									return result;
 								}
 								_vala_code_node_unref0 (type);
 							} else {
-								gchar* _tmp297_;
-								_tmp297_ = g_strdup ("void *");
-								result = _tmp297_;
+								gchar* _tmp305_;
+								_tmp305_ = g_strdup ("void *");
+								result = _tmp305_;
 								_vala_code_node_unref0 (sym);
 								return result;
 							}
 						} else {
-							ValaCodeNode* _tmp298_;
-							_tmp298_ = self->priv->node;
-							if (VALA_IS_METHOD_TYPE (_tmp298_)) {
-								gchar* _tmp299_;
-								_tmp299_ = g_strdup ("gpointer");
-								result = _tmp299_;
+							ValaCodeNode* _tmp306_;
+							_tmp306_ = self->priv->node;
+							if (VALA_IS_METHOD_TYPE (_tmp306_)) {
+								gchar* _tmp307_;
+								_tmp307_ = g_strdup ("gpointer");
+								result = _tmp307_;
 								_vala_code_node_unref0 (sym);
 								return result;
 							} else {
-								ValaCodeNode* _tmp300_;
-								_tmp300_ = self->priv->node;
-								if (VALA_IS_NULL_TYPE (_tmp300_)) {
-									ValaCodeContext* _tmp301_ = NULL;
-									ValaCodeContext* _tmp302_;
-									ValaProfile _tmp303_;
-									ValaProfile _tmp304_;
-									gboolean _tmp305_;
-									_tmp301_ = vala_code_context_get ();
-									_tmp302_ = _tmp301_;
-									_tmp303_ = vala_code_context_get_profile (_tmp302_);
-									_tmp304_ = _tmp303_;
-									_tmp305_ = _tmp304_ == VALA_PROFILE_GOBJECT;
-									_vala_code_context_unref0 (_tmp302_);
-									if (_tmp305_) {
-										gchar* _tmp306_;
-										_tmp306_ = g_strdup ("gpointer");
-										result = _tmp306_;
+								ValaCodeNode* _tmp308_;
+								_tmp308_ = self->priv->node;
+								if (VALA_IS_NULL_TYPE (_tmp308_)) {
+									ValaCodeContext* _tmp309_ = NULL;
+									ValaCodeContext* _tmp310_;
+									ValaProfile _tmp311_;
+									ValaProfile _tmp312_;
+									gboolean _tmp313_;
+									_tmp309_ = vala_code_context_get ();
+									_tmp310_ = _tmp309_;
+									_tmp311_ = vala_code_context_get_profile (_tmp310_);
+									_tmp312_ = _tmp311_;
+									_tmp313_ = _tmp312_ == VALA_PROFILE_GOBJECT;
+									_vala_code_context_unref0 (_tmp310_);
+									if (_tmp313_) {
+										gchar* _tmp314_;
+										_tmp314_ = g_strdup ("gpointer");
+										result = _tmp314_;
 										_vala_code_node_unref0 (sym);
 										return result;
 									} else {
-										gchar* _tmp307_;
-										_tmp307_ = g_strdup ("void *");
-										result = _tmp307_;
+										gchar* _tmp315_;
+										_tmp315_ = g_strdup ("void *");
+										result = _tmp315_;
 										_vala_code_node_unref0 (sym);
 										return result;
 									}
 								} else {
-									ValaCodeNode* _tmp308_;
-									_tmp308_ = self->priv->node;
-									if (VALA_IS_POINTER_TYPE (_tmp308_)) {
-										ValaCodeNode* _tmp309_;
-										ValaPointerType* _tmp310_;
+									ValaCodeNode* _tmp316_;
+									_tmp316_ = self->priv->node;
+									if (VALA_IS_POINTER_TYPE (_tmp316_)) {
+										ValaCodeNode* _tmp317_;
+										ValaPointerType* _tmp318_;
 										ValaPointerType* type;
-										gboolean _tmp311_ = FALSE;
-										ValaPointerType* _tmp312_;
-										ValaDataType* _tmp313_;
-										ValaDataType* _tmp314_;
-										ValaTypeSymbol* _tmp315_;
-										ValaTypeSymbol* _tmp316_;
-										gboolean _tmp323_;
-										_tmp309_ = self->priv->node;
-										_tmp310_ = _vala_code_node_ref0 (VALA_POINTER_TYPE (_tmp309_));
-										type = _tmp310_;
-										_tmp312_ = type;
-										_tmp313_ = vala_pointer_type_get_base_type (_tmp312_);
-										_tmp314_ = _tmp313_;
-										_tmp315_ = vala_data_type_get_data_type (_tmp314_);
-										_tmp316_ = _tmp315_;
-										if (_tmp316_ != NULL) {
-											ValaPointerType* _tmp317_;
-											ValaDataType* _tmp318_;
-											ValaDataType* _tmp319_;
-											ValaTypeSymbol* _tmp320_;
-											ValaTypeSymbol* _tmp321_;
-											gboolean _tmp322_ = FALSE;
-											_tmp317_ = type;
-											_tmp318_ = vala_pointer_type_get_base_type (_tmp317_);
-											_tmp319_ = _tmp318_;
-											_tmp320_ = vala_data_type_get_data_type (_tmp319_);
-											_tmp321_ = _tmp320_;
-											_tmp322_ = vala_typesymbol_is_reference_type (_tmp321_);
-											_tmp311_ = _tmp322_;
+										gboolean _tmp319_ = FALSE;
+										ValaPointerType* _tmp320_;
+										ValaDataType* _tmp321_;
+										ValaDataType* _tmp322_;
+										ValaTypeSymbol* _tmp323_;
+										ValaTypeSymbol* _tmp324_;
+										gboolean _tmp331_;
+										_tmp317_ = self->priv->node;
+										_tmp318_ = _vala_code_node_ref0 (VALA_POINTER_TYPE (_tmp317_));
+										type = _tmp318_;
+										_tmp320_ = type;
+										_tmp321_ = vala_pointer_type_get_base_type (_tmp320_);
+										_tmp322_ = _tmp321_;
+										_tmp323_ = vala_data_type_get_data_type (_tmp322_);
+										_tmp324_ = _tmp323_;
+										if (_tmp324_ != NULL) {
+											ValaPointerType* _tmp325_;
+											ValaDataType* _tmp326_;
+											ValaDataType* _tmp327_;
+											ValaTypeSymbol* _tmp328_;
+											ValaTypeSymbol* _tmp329_;
+											gboolean _tmp330_ = FALSE;
+											_tmp325_ = type;
+											_tmp326_ = vala_pointer_type_get_base_type (_tmp325_);
+											_tmp327_ = _tmp326_;
+											_tmp328_ = vala_data_type_get_data_type (_tmp327_);
+											_tmp329_ = _tmp328_;
+											_tmp330_ = vala_typesymbol_is_reference_type (_tmp329_);
+											_tmp319_ = _tmp330_;
 										} else {
-											_tmp311_ = FALSE;
+											_tmp319_ = FALSE;
 										}
-										_tmp323_ = _tmp311_;
-										if (_tmp323_) {
-											ValaPointerType* _tmp324_;
-											ValaDataType* _tmp325_;
-											ValaDataType* _tmp326_;
-											gchar* _tmp327_ = NULL;
-											_tmp324_ = type;
-											_tmp325_ = vala_pointer_type_get_base_type (_tmp324_);
-											_tmp326_ = _tmp325_;
-											_tmp327_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp326_);
-											result = _tmp327_;
+										_tmp331_ = _tmp319_;
+										if (_tmp331_) {
+											ValaPointerType* _tmp332_;
+											ValaDataType* _tmp333_;
+											ValaDataType* _tmp334_;
+											gchar* _tmp335_ = NULL;
+											_tmp332_ = type;
+											_tmp333_ = vala_pointer_type_get_base_type (_tmp332_);
+											_tmp334_ = _tmp333_;
+											_tmp335_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp334_);
+											result = _tmp335_;
 											_vala_code_node_unref0 (type);
 											_vala_code_node_unref0 (sym);
 											return result;
 										} else {
-											ValaPointerType* _tmp328_;
-											ValaDataType* _tmp329_;
-											ValaDataType* _tmp330_;
-											gchar* _tmp331_ = NULL;
-											gchar* _tmp332_;
-											gchar* _tmp333_ = NULL;
-											gchar* _tmp334_;
-											_tmp328_ = type;
-											_tmp329_ = vala_pointer_type_get_base_type (_tmp328_);
-											_tmp330_ = _tmp329_;
-											_tmp331_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp330_);
-											_tmp332_ = _tmp331_;
-											_tmp333_ = g_strdup_printf ("%s*", _tmp332_);
-											_tmp334_ = _tmp333_;
-											_g_free0 (_tmp332_);
-											result = _tmp334_;
+											ValaPointerType* _tmp336_;
+											ValaDataType* _tmp337_;
+											ValaDataType* _tmp338_;
+											gchar* _tmp339_ = NULL;
+											gchar* _tmp340_;
+											gchar* _tmp341_ = NULL;
+											gchar* _tmp342_;
+											_tmp336_ = type;
+											_tmp337_ = vala_pointer_type_get_base_type (_tmp336_);
+											_tmp338_ = _tmp337_;
+											_tmp339_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp338_);
+											_tmp340_ = _tmp339_;
+											_tmp341_ = g_strdup_printf ("%s*", _tmp340_);
+											_tmp342_ = _tmp341_;
+											_g_free0 (_tmp340_);
+											result = _tmp342_;
 											_vala_code_node_unref0 (type);
 											_vala_code_node_unref0 (sym);
 											return result;
 										}
 										_vala_code_node_unref0 (type);
 									} else {
-										ValaCodeNode* _tmp335_;
-										_tmp335_ = self->priv->node;
-										if (VALA_IS_VOID_TYPE (_tmp335_)) {
-											gchar* _tmp336_;
-											_tmp336_ = g_strdup ("void");
-											result = _tmp336_;
+										ValaCodeNode* _tmp343_;
+										_tmp343_ = self->priv->node;
+										if (VALA_IS_VOID_TYPE (_tmp343_)) {
+											gchar* _tmp344_;
+											_tmp344_ = g_strdup ("void");
+											result = _tmp344_;
 											_vala_code_node_unref0 (sym);
 											return result;
 										} else {
-											ValaCodeNode* _tmp337_;
-											_tmp337_ = self->priv->node;
-											if (VALA_IS_CLASS_TYPE (_tmp337_)) {
-												ValaCodeNode* _tmp338_;
-												ValaClassType* _tmp339_;
+											ValaCodeNode* _tmp345_;
+											_tmp345_ = self->priv->node;
+											if (VALA_IS_CLASS_TYPE (_tmp345_)) {
+												ValaCodeNode* _tmp346_;
+												ValaClassType* _tmp347_;
 												ValaClassType* type;
-												ValaClassType* _tmp340_;
-												ValaClass* _tmp341_;
-												ValaClass* _tmp342_;
-												gchar* _tmp343_ = NULL;
-												gchar* _tmp344_;
-												gchar* _tmp345_ = NULL;
-												gchar* _tmp346_;
-												_tmp338_ = self->priv->node;
-												_tmp339_ = _vala_code_node_ref0 (VALA_CLASS_TYPE (_tmp338_));
-												type = _tmp339_;
-												_tmp340_ = type;
-												_tmp341_ = vala_class_type_get_class_symbol (_tmp340_);
-												_tmp342_ = _tmp341_;
-												_tmp343_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp342_);
-												_tmp344_ = _tmp343_;
-												_tmp345_ = g_strdup_printf ("%sClass*", _tmp344_);
-												_tmp346_ = _tmp345_;
-												_g_free0 (_tmp344_);
-												result = _tmp346_;
+												ValaClassType* _tmp348_;
+												ValaClass* _tmp349_;
+												ValaClass* _tmp350_;
+												gchar* _tmp351_ = NULL;
+												gchar* _tmp352_;
+												gchar* _tmp353_ = NULL;
+												gchar* _tmp354_;
+												_tmp346_ = self->priv->node;
+												_tmp347_ = _vala_code_node_ref0 (VALA_CLASS_TYPE (_tmp346_));
+												type = _tmp347_;
+												_tmp348_ = type;
+												_tmp349_ = vala_class_type_get_class_symbol (_tmp348_);
+												_tmp350_ = _tmp349_;
+												_tmp351_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp350_);
+												_tmp352_ = _tmp351_;
+												_tmp353_ = g_strdup_printf ("%sClass*", _tmp352_);
+												_tmp354_ = _tmp353_;
+												_g_free0 (_tmp352_);
+												result = _tmp354_;
 												_vala_code_node_unref0 (type);
 												_vala_code_node_unref0 (sym);
 												return result;
 											} else {
-												ValaCodeNode* _tmp347_;
-												_tmp347_ = self->priv->node;
-												if (VALA_IS_INTERFACE_TYPE (_tmp347_)) {
-													ValaCodeNode* _tmp348_;
-													ValaInterfaceType* _tmp349_;
+												ValaCodeNode* _tmp355_;
+												_tmp355_ = self->priv->node;
+												if (VALA_IS_INTERFACE_TYPE (_tmp355_)) {
+													ValaCodeNode* _tmp356_;
+													ValaInterfaceType* _tmp357_;
 													ValaInterfaceType* type;
-													ValaInterfaceType* _tmp350_;
-													ValaInterface* _tmp351_;
-													ValaInterface* _tmp352_;
-													gchar* _tmp353_ = NULL;
-													gchar* _tmp354_;
-													gchar* _tmp355_ = NULL;
-													gchar* _tmp356_;
-													_tmp348_ = self->priv->node;
-													_tmp349_ = _vala_code_node_ref0 (VALA_INTERFACE_TYPE (_tmp348_));
-													type = _tmp349_;
-													_tmp350_ = type;
-													_tmp351_ = vala_interface_type_get_interface_symbol (_tmp350_);
-													_tmp352_ = _tmp351_;
-													_tmp353_ = vala_ccode_base_module_get_ccode_type_name (_tmp352_);
-													_tmp354_ = _tmp353_;
-													_tmp355_ = g_strdup_printf ("%s*", _tmp354_);
-													_tmp356_ = _tmp355_;
-													_g_free0 (_tmp354_);
-													result = _tmp356_;
+													ValaInterfaceType* _tmp358_;
+													ValaInterface* _tmp359_;
+													ValaInterface* _tmp360_;
+													gchar* _tmp361_ = NULL;
+													gchar* _tmp362_;
+													gchar* _tmp363_ = NULL;
+													gchar* _tmp364_;
+													_tmp356_ = self->priv->node;
+													_tmp357_ = _vala_code_node_ref0 (VALA_INTERFACE_TYPE (_tmp356_));
+													type = _tmp357_;
+													_tmp358_ = type;
+													_tmp359_ = vala_interface_type_get_interface_symbol (_tmp358_);
+													_tmp360_ = _tmp359_;
+													_tmp361_ = vala_ccode_base_module_get_ccode_type_name (_tmp360_);
+													_tmp362_ = _tmp361_;
+													_tmp363_ = g_strdup_printf ("%s*", _tmp362_);
+													_tmp364_ = _tmp363_;
+													_g_free0 (_tmp362_);
+													result = _tmp364_;
 													_vala_code_node_unref0 (type);
 													_vala_code_node_unref0 (sym);
 													return result;
 												} else {
-													ValaCodeNode* _tmp357_;
-													_tmp357_ = self->priv->node;
-													if (VALA_IS_VALUE_TYPE (_tmp357_)) {
-														ValaCodeNode* _tmp358_;
-														ValaValueType* _tmp359_;
+													ValaCodeNode* _tmp365_;
+													_tmp365_ = self->priv->node;
+													if (VALA_IS_VALUE_TYPE (_tmp365_)) {
+														ValaCodeNode* _tmp366_;
+														ValaValueType* _tmp367_;
 														ValaValueType* type;
-														ValaValueType* _tmp360_;
-														ValaTypeSymbol* _tmp361_;
-														ValaTypeSymbol* _tmp362_;
-														gchar* _tmp363_ = NULL;
+														ValaValueType* _tmp368_;
+														ValaTypeSymbol* _tmp369_;
+														ValaTypeSymbol* _tmp370_;
+														gchar* _tmp371_ = NULL;
 														gchar* cname;
-														ValaValueType* _tmp364_;
-														gboolean _tmp365_;
-														gboolean _tmp366_;
-														_tmp358_ = self->priv->node;
-														_tmp359_ = _vala_code_node_ref0 (VALA_VALUE_TYPE (_tmp358_));
-														type = _tmp359_;
-														_tmp360_ = type;
-														_tmp361_ = vala_value_type_get_type_symbol (_tmp360_);
-														_tmp362_ = _tmp361_;
-														_tmp363_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp362_);
-														cname = _tmp363_;
-														_tmp364_ = type;
-														_tmp365_ = vala_data_type_get_nullable ((ValaDataType*) _tmp364_);
-														_tmp366_ = _tmp365_;
-														if (_tmp366_) {
-															const gchar* _tmp367_;
-															gchar* _tmp368_ = NULL;
-															_tmp367_ = cname;
-															_tmp368_ = g_strdup_printf ("%s*", _tmp367_);
-															result = _tmp368_;
+														ValaValueType* _tmp372_;
+														gboolean _tmp373_;
+														gboolean _tmp374_;
+														_tmp366_ = self->priv->node;
+														_tmp367_ = _vala_code_node_ref0 (VALA_VALUE_TYPE (_tmp366_));
+														type = _tmp367_;
+														_tmp368_ = type;
+														_tmp369_ = vala_value_type_get_type_symbol (_tmp368_);
+														_tmp370_ = _tmp369_;
+														_tmp371_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp370_);
+														cname = _tmp371_;
+														_tmp372_ = type;
+														_tmp373_ = vala_data_type_get_nullable ((ValaDataType*) _tmp372_);
+														_tmp374_ = _tmp373_;
+														if (_tmp374_) {
+															const gchar* _tmp375_;
+															gchar* _tmp376_ = NULL;
+															_tmp375_ = cname;
+															_tmp376_ = g_strdup_printf ("%s*", _tmp375_);
+															result = _tmp376_;
 															_g_free0 (cname);
 															_vala_code_node_unref0 (type);
 															_vala_code_node_unref0 (sym);
@@ -1558,31 +1589,31 @@ static gchar* vala_ccode_attribute_get_default_name (ValaCCodeAttribute* self) {
 														_g_free0 (cname);
 														_vala_code_node_unref0 (type);
 													} else {
-														ValaCodeNode* _tmp369_;
-														_tmp369_ = self->priv->node;
-														if (VALA_IS_CTYPE (_tmp369_)) {
-															ValaCodeNode* _tmp370_;
-															const gchar* _tmp371_;
-															const gchar* _tmp372_;
-															gchar* _tmp373_;
-															_tmp370_ = self->priv->node;
-															_tmp371_ = vala_ctype_get_ctype_name (VALA_CTYPE (_tmp370_));
-															_tmp372_ = _tmp371_;
-															_tmp373_ = g_strdup (_tmp372_);
-															result = _tmp373_;
+														ValaCodeNode* _tmp377_;
+														_tmp377_ = self->priv->node;
+														if (VALA_IS_CTYPE (_tmp377_)) {
+															ValaCodeNode* _tmp378_;
+															const gchar* _tmp379_;
+															const gchar* _tmp380_;
+															gchar* _tmp381_;
+															_tmp378_ = self->priv->node;
+															_tmp379_ = vala_ctype_get_ctype_name (VALA_CTYPE (_tmp378_));
+															_tmp380_ = _tmp379_;
+															_tmp381_ = g_strdup (_tmp380_);
+															result = _tmp381_;
 															_vala_code_node_unref0 (sym);
 															return result;
 														} else {
-															ValaCodeNode* _tmp374_;
-															ValaSourceReference* _tmp375_;
-															ValaSourceReference* _tmp376_;
-															gchar* _tmp377_;
-															_tmp374_ = self->priv->node;
-															_tmp375_ = vala_code_node_get_source_reference (_tmp374_);
-															_tmp376_ = _tmp375_;
-															vala_report_error (_tmp376_, "Unresolved type reference");
-															_tmp377_ = g_strdup ("");
-															result = _tmp377_;
+															ValaCodeNode* _tmp382_;
+															ValaSourceReference* _tmp383_;
+															ValaSourceReference* _tmp384_;
+															gchar* _tmp385_;
+															_tmp382_ = self->priv->node;
+															_tmp383_ = vala_code_node_get_source_reference (_tmp382_);
+															_tmp384_ = _tmp383_;
+															vala_report_error (_tmp384_, "Unresolved type reference");
+															_tmp385_ = g_strdup ("");
+															result = _tmp385_;
 															_vala_code_node_unref0 (sym);
 															return result;
 														}
@@ -2740,7 +2771,7 @@ static gchar* vala_ccode_attribute_get_default_type_id (ValaCCodeAttribute* self
 static gchar* vala_ccode_attribute_get_default_marshaller_type_name (ValaCCodeAttribute* self) {
 	gchar* result = NULL;
 	ValaSymbol* _tmp0_;
-	gchar* _tmp115_;
+	gchar* _tmp121_;
 	g_return_val_if_fail (self != NULL, NULL);
 	_tmp0_ = self->priv->sym;
 	if (_tmp0_ != NULL) {
@@ -2942,9 +2973,8 @@ static gchar* vala_ccode_attribute_get_default_marshaller_type_name (ValaCCodeAt
 						ValaStruct* _tmp58_;
 						ValaStruct* _tmp59_;
 						ValaStruct* base_st;
-						ValaStruct* _tmp60_;
-						ValaStruct* _tmp63_;
-						gboolean _tmp64_ = FALSE;
+						ValaStruct* _tmp69_;
+						gboolean _tmp70_ = FALSE;
 						_tmp54_ = self->priv->sym;
 						_tmp55_ = _vala_code_node_ref0 (VALA_STRUCT (_tmp54_));
 						st = _tmp55_;
@@ -2953,55 +2983,76 @@ static gchar* vala_ccode_attribute_get_default_marshaller_type_name (ValaCCodeAt
 						_tmp58_ = _tmp57_;
 						_tmp59_ = _vala_code_node_ref0 (_tmp58_);
 						base_st = _tmp59_;
-						_tmp60_ = base_st;
-						if (_tmp60_ != NULL) {
+						while (TRUE) {
+							ValaStruct* _tmp60_;
 							ValaStruct* _tmp61_;
-							gchar* _tmp62_ = NULL;
+							gboolean _tmp62_ = FALSE;
+							_tmp60_ = base_st;
+							if (!(_tmp60_ != NULL)) {
+								break;
+							}
 							_tmp61_ = base_st;
-							_tmp62_ = vala_ccode_base_module_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp61_);
-							result = _tmp62_;
-							_vala_code_node_unref0 (base_st);
-							_vala_code_node_unref0 (st);
-							return result;
+							_tmp62_ = vala_ccode_base_module_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp61_);
+							if (_tmp62_) {
+								ValaStruct* _tmp63_;
+								gchar* _tmp64_ = NULL;
+								_tmp63_ = base_st;
+								_tmp64_ = vala_ccode_base_module_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp63_);
+								result = _tmp64_;
+								_vala_code_node_unref0 (base_st);
+								_vala_code_node_unref0 (st);
+								return result;
+							} else {
+								ValaStruct* _tmp65_;
+								ValaStruct* _tmp66_;
+								ValaStruct* _tmp67_;
+								ValaStruct* _tmp68_;
+								_tmp65_ = base_st;
+								_tmp66_ = vala_struct_get_base_struct (_tmp65_);
+								_tmp67_ = _tmp66_;
+								_tmp68_ = _vala_code_node_ref0 (_tmp67_);
+								_vala_code_node_unref0 (base_st);
+								base_st = _tmp68_;
+							}
 						}
-						_tmp63_ = st;
-						_tmp64_ = vala_struct_is_simple_type (_tmp63_);
-						if (_tmp64_) {
-							ValaStruct* _tmp65_;
-							ValaSourceReference* _tmp66_;
-							ValaSourceReference* _tmp67_;
-							ValaStruct* _tmp68_;
-							gchar* _tmp69_ = NULL;
-							gchar* _tmp70_;
-							gchar* _tmp71_ = NULL;
-							gchar* _tmp72_;
-							_tmp65_ = st;
-							_tmp66_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp65_);
-							_tmp67_ = _tmp66_;
-							_tmp68_ = st;
-							_tmp69_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp68_);
-							_tmp70_ = _tmp69_;
-							_tmp71_ = g_strdup_printf ("The type `%s` doesn't declare a marshaller type name", _tmp70_);
-							_tmp72_ = _tmp71_;
-							vala_report_error (_tmp67_, _tmp72_);
-							_g_free0 (_tmp72_);
-							_g_free0 (_tmp70_);
+						_tmp69_ = st;
+						_tmp70_ = vala_struct_is_simple_type (_tmp69_);
+						if (_tmp70_) {
+							ValaStruct* _tmp71_;
+							ValaSourceReference* _tmp72_;
+							ValaSourceReference* _tmp73_;
+							ValaStruct* _tmp74_;
+							gchar* _tmp75_ = NULL;
+							gchar* _tmp76_;
+							gchar* _tmp77_ = NULL;
+							gchar* _tmp78_;
+							_tmp71_ = st;
+							_tmp72_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp71_);
+							_tmp73_ = _tmp72_;
+							_tmp74_ = st;
+							_tmp75_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp74_);
+							_tmp76_ = _tmp75_;
+							_tmp77_ = g_strdup_printf ("The type `%s` doesn't declare a marshaller type name", _tmp76_);
+							_tmp78_ = _tmp77_;
+							vala_report_error (_tmp73_, _tmp78_);
+							_g_free0 (_tmp78_);
+							_g_free0 (_tmp76_);
 						} else {
-							ValaStruct* _tmp73_;
-							gboolean _tmp74_ = FALSE;
-							_tmp73_ = st;
-							_tmp74_ = vala_ccode_base_module_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp73_);
-							if (_tmp74_) {
-								gchar* _tmp75_;
-								_tmp75_ = g_strdup ("BOXED");
-								result = _tmp75_;
+							ValaStruct* _tmp79_;
+							gboolean _tmp80_ = FALSE;
+							_tmp79_ = st;
+							_tmp80_ = vala_ccode_base_module_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp79_);
+							if (_tmp80_) {
+								gchar* _tmp81_;
+								_tmp81_ = g_strdup ("BOXED");
+								result = _tmp81_;
 								_vala_code_node_unref0 (base_st);
 								_vala_code_node_unref0 (st);
 								return result;
 							} else {
-								gchar* _tmp76_;
-								_tmp76_ = g_strdup ("POINTER");
-								result = _tmp76_;
+								gchar* _tmp82_;
+								_tmp82_ = g_strdup ("POINTER");
+								result = _tmp82_;
 								_vala_code_node_unref0 (base_st);
 								_vala_code_node_unref0 (st);
 								return result;
@@ -3010,45 +3061,45 @@ static gchar* vala_ccode_attribute_get_default_marshaller_type_name (ValaCCodeAt
 						_vala_code_node_unref0 (base_st);
 						_vala_code_node_unref0 (st);
 					} else {
-						ValaSymbol* _tmp77_;
-						_tmp77_ = self->priv->sym;
-						if (VALA_IS_PARAMETER (_tmp77_)) {
-							ValaSymbol* _tmp78_;
-							ValaParameter* _tmp79_;
+						ValaSymbol* _tmp83_;
+						_tmp83_ = self->priv->sym;
+						if (VALA_IS_PARAMETER (_tmp83_)) {
+							ValaSymbol* _tmp84_;
+							ValaParameter* _tmp85_;
 							ValaParameter* param;
-							ValaParameter* _tmp80_;
-							ValaParameterDirection _tmp81_;
-							ValaParameterDirection _tmp82_;
-							_tmp78_ = self->priv->sym;
-							_tmp79_ = _vala_code_node_ref0 (VALA_PARAMETER (_tmp78_));
-							param = _tmp79_;
-							_tmp80_ = param;
-							_tmp81_ = vala_parameter_get_direction (_tmp80_);
-							_tmp82_ = _tmp81_;
-							if (_tmp82_ != VALA_PARAMETER_DIRECTION_IN) {
-								gchar* _tmp83_;
-								_tmp83_ = g_strdup ("POINTER");
-								result = _tmp83_;
+							ValaParameter* _tmp86_;
+							ValaParameterDirection _tmp87_;
+							ValaParameterDirection _tmp88_;
+							_tmp84_ = self->priv->sym;
+							_tmp85_ = _vala_code_node_ref0 (VALA_PARAMETER (_tmp84_));
+							param = _tmp85_;
+							_tmp86_ = param;
+							_tmp87_ = vala_parameter_get_direction (_tmp86_);
+							_tmp88_ = _tmp87_;
+							if (_tmp88_ != VALA_PARAMETER_DIRECTION_IN) {
+								gchar* _tmp89_;
+								_tmp89_ = g_strdup ("POINTER");
+								result = _tmp89_;
 								_vala_code_node_unref0 (param);
 								return result;
 							} else {
-								ValaParameter* _tmp84_;
-								ValaDataType* _tmp85_;
-								ValaDataType* _tmp86_;
-								gchar* _tmp87_ = NULL;
-								_tmp84_ = param;
-								_tmp85_ = vala_variable_get_variable_type ((ValaVariable*) _tmp84_);
-								_tmp86_ = _tmp85_;
-								_tmp87_ = vala_ccode_base_module_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp86_);
-								result = _tmp87_;
+								ValaParameter* _tmp90_;
+								ValaDataType* _tmp91_;
+								ValaDataType* _tmp92_;
+								gchar* _tmp93_ = NULL;
+								_tmp90_ = param;
+								_tmp91_ = vala_variable_get_variable_type ((ValaVariable*) _tmp90_);
+								_tmp92_ = _tmp91_;
+								_tmp93_ = vala_ccode_base_module_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp92_);
+								result = _tmp93_;
 								_vala_code_node_unref0 (param);
 								return result;
 							}
 							_vala_code_node_unref0 (param);
 						} else {
-							gchar* _tmp88_;
-							_tmp88_ = g_strdup ("POINTER");
-							result = _tmp88_;
+							gchar* _tmp94_;
+							_tmp94_ = g_strdup ("POINTER");
+							result = _tmp94_;
 							return result;
 						}
 					}
@@ -3056,93 +3107,93 @@ static gchar* vala_ccode_attribute_get_default_marshaller_type_name (ValaCCodeAt
 			}
 		}
 	} else {
-		gboolean _tmp89_ = FALSE;
-		ValaCodeNode* _tmp90_;
-		gboolean _tmp94_;
-		_tmp90_ = self->priv->node;
-		if (VALA_IS_POINTER_TYPE (_tmp90_)) {
-			_tmp89_ = TRUE;
+		gboolean _tmp95_ = FALSE;
+		ValaCodeNode* _tmp96_;
+		gboolean _tmp100_;
+		_tmp96_ = self->priv->node;
+		if (VALA_IS_POINTER_TYPE (_tmp96_)) {
+			_tmp95_ = TRUE;
 		} else {
-			ValaCodeNode* _tmp91_;
-			ValaTypeParameter* _tmp92_;
-			ValaTypeParameter* _tmp93_;
-			_tmp91_ = self->priv->node;
-			_tmp92_ = vala_data_type_get_type_parameter (VALA_DATA_TYPE (_tmp91_));
-			_tmp93_ = _tmp92_;
-			_tmp89_ = _tmp93_ != NULL;
+			ValaCodeNode* _tmp97_;
+			ValaTypeParameter* _tmp98_;
+			ValaTypeParameter* _tmp99_;
+			_tmp97_ = self->priv->node;
+			_tmp98_ = vala_data_type_get_type_parameter (VALA_DATA_TYPE (_tmp97_));
+			_tmp99_ = _tmp98_;
+			_tmp95_ = _tmp99_ != NULL;
 		}
-		_tmp94_ = _tmp89_;
-		if (_tmp94_) {
-			gchar* _tmp95_;
-			_tmp95_ = g_strdup ("POINTER");
-			result = _tmp95_;
+		_tmp100_ = _tmp95_;
+		if (_tmp100_) {
+			gchar* _tmp101_;
+			_tmp101_ = g_strdup ("POINTER");
+			result = _tmp101_;
 			return result;
 		} else {
-			ValaCodeNode* _tmp96_;
-			_tmp96_ = self->priv->node;
-			if (VALA_IS_ERROR_TYPE (_tmp96_)) {
-				gchar* _tmp97_;
-				_tmp97_ = g_strdup ("POINTER");
-				result = _tmp97_;
+			ValaCodeNode* _tmp102_;
+			_tmp102_ = self->priv->node;
+			if (VALA_IS_ERROR_TYPE (_tmp102_)) {
+				gchar* _tmp103_;
+				_tmp103_ = g_strdup ("POINTER");
+				result = _tmp103_;
 				return result;
 			} else {
-				ValaCodeNode* _tmp98_;
-				_tmp98_ = self->priv->node;
-				if (VALA_IS_ARRAY_TYPE (_tmp98_)) {
-					ValaCodeNode* _tmp99_;
-					ValaDataType* _tmp100_;
-					ValaDataType* _tmp101_;
-					ValaTypeSymbol* _tmp102_;
-					ValaTypeSymbol* _tmp103_;
-					gchar* _tmp104_ = NULL;
-					gchar* _tmp105_;
-					gboolean _tmp106_;
-					_tmp99_ = self->priv->node;
-					_tmp100_ = vala_array_type_get_element_type (VALA_ARRAY_TYPE (_tmp99_));
-					_tmp101_ = _tmp100_;
-					_tmp102_ = vala_data_type_get_data_type (_tmp101_);
-					_tmp103_ = _tmp102_;
-					_tmp104_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp103_);
-					_tmp105_ = _tmp104_;
-					_tmp106_ = g_strcmp0 (_tmp105_, "string") == 0;
-					_g_free0 (_tmp105_);
-					if (_tmp106_) {
-						gchar* _tmp107_;
-						_tmp107_ = g_strdup ("BOXED,INT");
-						result = _tmp107_;
+				ValaCodeNode* _tmp104_;
+				_tmp104_ = self->priv->node;
+				if (VALA_IS_ARRAY_TYPE (_tmp104_)) {
+					ValaCodeNode* _tmp105_;
+					ValaDataType* _tmp106_;
+					ValaDataType* _tmp107_;
+					ValaTypeSymbol* _tmp108_;
+					ValaTypeSymbol* _tmp109_;
+					gchar* _tmp110_ = NULL;
+					gchar* _tmp111_;
+					gboolean _tmp112_;
+					_tmp105_ = self->priv->node;
+					_tmp106_ = vala_array_type_get_element_type (VALA_ARRAY_TYPE (_tmp105_));
+					_tmp107_ = _tmp106_;
+					_tmp108_ = vala_data_type_get_data_type (_tmp107_);
+					_tmp109_ = _tmp108_;
+					_tmp110_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp109_);
+					_tmp111_ = _tmp110_;
+					_tmp112_ = g_strcmp0 (_tmp111_, "string") == 0;
+					_g_free0 (_tmp111_);
+					if (_tmp112_) {
+						gchar* _tmp113_;
+						_tmp113_ = g_strdup ("BOXED,INT");
+						result = _tmp113_;
 						return result;
 					} else {
-						gchar* _tmp108_;
-						_tmp108_ = g_strdup ("POINTER,INT");
-						result = _tmp108_;
+						gchar* _tmp114_;
+						_tmp114_ = g_strdup ("POINTER,INT");
+						result = _tmp114_;
 						return result;
 					}
 				} else {
-					ValaCodeNode* _tmp109_;
-					_tmp109_ = self->priv->node;
-					if (VALA_IS_VOID_TYPE (_tmp109_)) {
-						gchar* _tmp110_;
-						_tmp110_ = g_strdup ("VOID");
-						result = _tmp110_;
+					ValaCodeNode* _tmp115_;
+					_tmp115_ = self->priv->node;
+					if (VALA_IS_VOID_TYPE (_tmp115_)) {
+						gchar* _tmp116_;
+						_tmp116_ = g_strdup ("VOID");
+						result = _tmp116_;
 						return result;
 					} else {
-						ValaCodeNode* _tmp111_;
-						ValaTypeSymbol* _tmp112_;
-						ValaTypeSymbol* _tmp113_;
-						gchar* _tmp114_ = NULL;
-						_tmp111_ = self->priv->node;
-						_tmp112_ = vala_data_type_get_data_type (VALA_DATA_TYPE (_tmp111_));
-						_tmp113_ = _tmp112_;
-						_tmp114_ = vala_ccode_base_module_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp113_);
-						result = _tmp114_;
+						ValaCodeNode* _tmp117_;
+						ValaTypeSymbol* _tmp118_;
+						ValaTypeSymbol* _tmp119_;
+						gchar* _tmp120_ = NULL;
+						_tmp117_ = self->priv->node;
+						_tmp118_ = vala_data_type_get_data_type (VALA_DATA_TYPE (_tmp117_));
+						_tmp119_ = _tmp118_;
+						_tmp120_ = vala_ccode_base_module_get_ccode_marshaller_type_name ((ValaCodeNode*) _tmp119_);
+						result = _tmp120_;
 						return result;
 					}
 				}
 			}
 		}
 	}
-	_tmp115_ = g_strdup ("");
-	result = _tmp115_;
+	_tmp121_ = g_strdup ("");
+	result = _tmp121_;
 	return result;
 }
 
@@ -3150,7 +3201,7 @@ static gchar* vala_ccode_attribute_get_default_marshaller_type_name (ValaCCodeAt
 static gchar* vala_ccode_attribute_get_default_get_value_function (ValaCCodeAttribute* self) {
 	gchar* result = NULL;
 	ValaSymbol* _tmp0_;
-	gchar* _tmp76_;
+	gchar* _tmp82_;
 	g_return_val_if_fail (self != NULL, NULL);
 	_tmp0_ = self->priv->sym;
 	if (VALA_IS_CLASS (_tmp0_)) {
@@ -3347,9 +3398,8 @@ static gchar* vala_ccode_attribute_get_default_get_value_function (ValaCCodeAttr
 					ValaStruct* _tmp56_;
 					ValaStruct* _tmp57_;
 					ValaStruct* base_st;
-					ValaStruct* _tmp58_;
-					ValaStruct* _tmp61_;
-					gboolean _tmp62_ = FALSE;
+					ValaStruct* _tmp67_;
+					gboolean _tmp68_ = FALSE;
 					_tmp52_ = self->priv->sym;
 					_tmp53_ = _vala_code_node_ref0 (VALA_STRUCT (_tmp52_));
 					st = _tmp53_;
@@ -3358,55 +3408,76 @@ static gchar* vala_ccode_attribute_get_default_get_value_function (ValaCCodeAttr
 					_tmp56_ = _tmp55_;
 					_tmp57_ = _vala_code_node_ref0 (_tmp56_);
 					base_st = _tmp57_;
-					_tmp58_ = base_st;
-					if (_tmp58_ != NULL) {
+					while (TRUE) {
+						ValaStruct* _tmp58_;
 						ValaStruct* _tmp59_;
-						gchar* _tmp60_ = NULL;
+						gboolean _tmp60_ = FALSE;
+						_tmp58_ = base_st;
+						if (!(_tmp58_ != NULL)) {
+							break;
+						}
 						_tmp59_ = base_st;
-						_tmp60_ = vala_ccode_base_module_get_ccode_get_value_function ((ValaCodeNode*) _tmp59_);
-						result = _tmp60_;
-						_vala_code_node_unref0 (base_st);
-						_vala_code_node_unref0 (st);
-						return result;
+						_tmp60_ = vala_ccode_base_module_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp59_);
+						if (_tmp60_) {
+							ValaStruct* _tmp61_;
+							gchar* _tmp62_ = NULL;
+							_tmp61_ = base_st;
+							_tmp62_ = vala_ccode_base_module_get_ccode_get_value_function ((ValaCodeNode*) _tmp61_);
+							result = _tmp62_;
+							_vala_code_node_unref0 (base_st);
+							_vala_code_node_unref0 (st);
+							return result;
+						} else {
+							ValaStruct* _tmp63_;
+							ValaStruct* _tmp64_;
+							ValaStruct* _tmp65_;
+							ValaStruct* _tmp66_;
+							_tmp63_ = base_st;
+							_tmp64_ = vala_struct_get_base_struct (_tmp63_);
+							_tmp65_ = _tmp64_;
+							_tmp66_ = _vala_code_node_ref0 (_tmp65_);
+							_vala_code_node_unref0 (base_st);
+							base_st = _tmp66_;
+						}
 					}
-					_tmp61_ = st;
-					_tmp62_ = vala_struct_is_simple_type (_tmp61_);
-					if (_tmp62_) {
-						ValaStruct* _tmp63_;
-						ValaSourceReference* _tmp64_;
-						ValaSourceReference* _tmp65_;
-						ValaStruct* _tmp66_;
-						gchar* _tmp67_ = NULL;
-						gchar* _tmp68_;
-						gchar* _tmp69_ = NULL;
-						gchar* _tmp70_;
-						_tmp63_ = st;
-						_tmp64_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp63_);
-						_tmp65_ = _tmp64_;
-						_tmp66_ = st;
-						_tmp67_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp66_);
-						_tmp68_ = _tmp67_;
-						_tmp69_ = g_strdup_printf ("The type `%s` doesn't declare a GValue get function", _tmp68_);
-						_tmp70_ = _tmp69_;
-						vala_report_error (_tmp65_, _tmp70_);
-						_g_free0 (_tmp70_);
-						_g_free0 (_tmp68_);
+					_tmp67_ = st;
+					_tmp68_ = vala_struct_is_simple_type (_tmp67_);
+					if (_tmp68_) {
+						ValaStruct* _tmp69_;
+						ValaSourceReference* _tmp70_;
+						ValaSourceReference* _tmp71_;
+						ValaStruct* _tmp72_;
+						gchar* _tmp73_ = NULL;
+						gchar* _tmp74_;
+						gchar* _tmp75_ = NULL;
+						gchar* _tmp76_;
+						_tmp69_ = st;
+						_tmp70_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp69_);
+						_tmp71_ = _tmp70_;
+						_tmp72_ = st;
+						_tmp73_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp72_);
+						_tmp74_ = _tmp73_;
+						_tmp75_ = g_strdup_printf ("The type `%s` doesn't declare a GValue get function", _tmp74_);
+						_tmp76_ = _tmp75_;
+						vala_report_error (_tmp71_, _tmp76_);
+						_g_free0 (_tmp76_);
+						_g_free0 (_tmp74_);
 					} else {
-						ValaStruct* _tmp71_;
-						gboolean _tmp72_ = FALSE;
-						_tmp71_ = st;
-						_tmp72_ = vala_ccode_base_module_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp71_);
-						if (_tmp72_) {
-							gchar* _tmp73_;
-							_tmp73_ = g_strdup ("g_value_get_boxed");
-							result = _tmp73_;
+						ValaStruct* _tmp77_;
+						gboolean _tmp78_ = FALSE;
+						_tmp77_ = st;
+						_tmp78_ = vala_ccode_base_module_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp77_);
+						if (_tmp78_) {
+							gchar* _tmp79_;
+							_tmp79_ = g_strdup ("g_value_get_boxed");
+							result = _tmp79_;
 							_vala_code_node_unref0 (base_st);
 							_vala_code_node_unref0 (st);
 							return result;
 						} else {
-							gchar* _tmp74_;
-							_tmp74_ = g_strdup ("g_value_get_pointer");
-							result = _tmp74_;
+							gchar* _tmp80_;
+							_tmp80_ = g_strdup ("g_value_get_pointer");
+							result = _tmp80_;
 							_vala_code_node_unref0 (base_st);
 							_vala_code_node_unref0 (st);
 							return result;
@@ -3415,16 +3486,16 @@ static gchar* vala_ccode_attribute_get_default_get_value_function (ValaCCodeAttr
 					_vala_code_node_unref0 (base_st);
 					_vala_code_node_unref0 (st);
 				} else {
-					gchar* _tmp75_;
-					_tmp75_ = g_strdup ("g_value_get_pointer");
-					result = _tmp75_;
+					gchar* _tmp81_;
+					_tmp81_ = g_strdup ("g_value_get_pointer");
+					result = _tmp81_;
 					return result;
 				}
 			}
 		}
 	}
-	_tmp76_ = g_strdup ("");
-	result = _tmp76_;
+	_tmp82_ = g_strdup ("");
+	result = _tmp82_;
 	return result;
 }
 
@@ -3432,7 +3503,7 @@ static gchar* vala_ccode_attribute_get_default_get_value_function (ValaCCodeAttr
 static gchar* vala_ccode_attribute_get_default_set_value_function (ValaCCodeAttribute* self) {
 	gchar* result = NULL;
 	ValaSymbol* _tmp0_;
-	gchar* _tmp76_;
+	gchar* _tmp82_;
 	g_return_val_if_fail (self != NULL, NULL);
 	_tmp0_ = self->priv->sym;
 	if (VALA_IS_CLASS (_tmp0_)) {
@@ -3629,9 +3700,8 @@ static gchar* vala_ccode_attribute_get_default_set_value_function (ValaCCodeAttr
 					ValaStruct* _tmp56_;
 					ValaStruct* _tmp57_;
 					ValaStruct* base_st;
-					ValaStruct* _tmp58_;
-					ValaStruct* _tmp61_;
-					gboolean _tmp62_ = FALSE;
+					ValaStruct* _tmp67_;
+					gboolean _tmp68_ = FALSE;
 					_tmp52_ = self->priv->sym;
 					_tmp53_ = _vala_code_node_ref0 (VALA_STRUCT (_tmp52_));
 					st = _tmp53_;
@@ -3640,55 +3710,76 @@ static gchar* vala_ccode_attribute_get_default_set_value_function (ValaCCodeAttr
 					_tmp56_ = _tmp55_;
 					_tmp57_ = _vala_code_node_ref0 (_tmp56_);
 					base_st = _tmp57_;
-					_tmp58_ = base_st;
-					if (_tmp58_ != NULL) {
+					while (TRUE) {
+						ValaStruct* _tmp58_;
 						ValaStruct* _tmp59_;
-						gchar* _tmp60_ = NULL;
+						gboolean _tmp60_ = FALSE;
+						_tmp58_ = base_st;
+						if (!(_tmp58_ != NULL)) {
+							break;
+						}
 						_tmp59_ = base_st;
-						_tmp60_ = vala_ccode_base_module_get_ccode_set_value_function ((ValaCodeNode*) _tmp59_);
-						result = _tmp60_;
-						_vala_code_node_unref0 (base_st);
-						_vala_code_node_unref0 (st);
-						return result;
+						_tmp60_ = vala_ccode_base_module_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp59_);
+						if (_tmp60_) {
+							ValaStruct* _tmp61_;
+							gchar* _tmp62_ = NULL;
+							_tmp61_ = base_st;
+							_tmp62_ = vala_ccode_base_module_get_ccode_set_value_function ((ValaCodeNode*) _tmp61_);
+							result = _tmp62_;
+							_vala_code_node_unref0 (base_st);
+							_vala_code_node_unref0 (st);
+							return result;
+						} else {
+							ValaStruct* _tmp63_;
+							ValaStruct* _tmp64_;
+							ValaStruct* _tmp65_;
+							ValaStruct* _tmp66_;
+							_tmp63_ = base_st;
+							_tmp64_ = vala_struct_get_base_struct (_tmp63_);
+							_tmp65_ = _tmp64_;
+							_tmp66_ = _vala_code_node_ref0 (_tmp65_);
+							_vala_code_node_unref0 (base_st);
+							base_st = _tmp66_;
+						}
 					}
-					_tmp61_ = st;
-					_tmp62_ = vala_struct_is_simple_type (_tmp61_);
-					if (_tmp62_) {
-						ValaStruct* _tmp63_;
-						ValaSourceReference* _tmp64_;
-						ValaSourceReference* _tmp65_;
-						ValaStruct* _tmp66_;
-						gchar* _tmp67_ = NULL;
-						gchar* _tmp68_;
-						gchar* _tmp69_ = NULL;
-						gchar* _tmp70_;
-						_tmp63_ = st;
-						_tmp64_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp63_);
-						_tmp65_ = _tmp64_;
-						_tmp66_ = st;
-						_tmp67_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp66_);
-						_tmp68_ = _tmp67_;
-						_tmp69_ = g_strdup_printf ("The type `%s` doesn't declare a GValue set function", _tmp68_);
-						_tmp70_ = _tmp69_;
-						vala_report_error (_tmp65_, _tmp70_);
-						_g_free0 (_tmp70_);
-						_g_free0 (_tmp68_);
+					_tmp67_ = st;
+					_tmp68_ = vala_struct_is_simple_type (_tmp67_);
+					if (_tmp68_) {
+						ValaStruct* _tmp69_;
+						ValaSourceReference* _tmp70_;
+						ValaSourceReference* _tmp71_;
+						ValaStruct* _tmp72_;
+						gchar* _tmp73_ = NULL;
+						gchar* _tmp74_;
+						gchar* _tmp75_ = NULL;
+						gchar* _tmp76_;
+						_tmp69_ = st;
+						_tmp70_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp69_);
+						_tmp71_ = _tmp70_;
+						_tmp72_ = st;
+						_tmp73_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp72_);
+						_tmp74_ = _tmp73_;
+						_tmp75_ = g_strdup_printf ("The type `%s` doesn't declare a GValue set function", _tmp74_);
+						_tmp76_ = _tmp75_;
+						vala_report_error (_tmp71_, _tmp76_);
+						_g_free0 (_tmp76_);
+						_g_free0 (_tmp74_);
 					} else {
-						ValaStruct* _tmp71_;
-						gboolean _tmp72_ = FALSE;
-						_tmp71_ = st;
-						_tmp72_ = vala_ccode_base_module_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp71_);
-						if (_tmp72_) {
-							gchar* _tmp73_;
-							_tmp73_ = g_strdup ("g_value_set_boxed");
-							result = _tmp73_;
+						ValaStruct* _tmp77_;
+						gboolean _tmp78_ = FALSE;
+						_tmp77_ = st;
+						_tmp78_ = vala_ccode_base_module_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp77_);
+						if (_tmp78_) {
+							gchar* _tmp79_;
+							_tmp79_ = g_strdup ("g_value_set_boxed");
+							result = _tmp79_;
 							_vala_code_node_unref0 (base_st);
 							_vala_code_node_unref0 (st);
 							return result;
 						} else {
-							gchar* _tmp74_;
-							_tmp74_ = g_strdup ("g_value_set_pointer");
-							result = _tmp74_;
+							gchar* _tmp80_;
+							_tmp80_ = g_strdup ("g_value_set_pointer");
+							result = _tmp80_;
 							_vala_code_node_unref0 (base_st);
 							_vala_code_node_unref0 (st);
 							return result;
@@ -3697,16 +3788,16 @@ static gchar* vala_ccode_attribute_get_default_set_value_function (ValaCCodeAttr
 					_vala_code_node_unref0 (base_st);
 					_vala_code_node_unref0 (st);
 				} else {
-					gchar* _tmp75_;
-					_tmp75_ = g_strdup ("g_value_set_pointer");
-					result = _tmp75_;
+					gchar* _tmp81_;
+					_tmp81_ = g_strdup ("g_value_set_pointer");
+					result = _tmp81_;
 					return result;
 				}
 			}
 		}
 	}
-	_tmp76_ = g_strdup ("");
-	result = _tmp76_;
+	_tmp82_ = g_strdup ("");
+	result = _tmp82_;
 	return result;
 }
 
@@ -3714,7 +3805,7 @@ static gchar* vala_ccode_attribute_get_default_set_value_function (ValaCCodeAttr
 static gchar* vala_ccode_attribute_get_default_take_value_function (ValaCCodeAttribute* self) {
 	gchar* result = NULL;
 	ValaSymbol* _tmp0_;
-	gchar* _tmp76_;
+	gchar* _tmp82_;
 	g_return_val_if_fail (self != NULL, NULL);
 	_tmp0_ = self->priv->sym;
 	if (VALA_IS_CLASS (_tmp0_)) {
@@ -3911,9 +4002,8 @@ static gchar* vala_ccode_attribute_get_default_take_value_function (ValaCCodeAtt
 					ValaStruct* _tmp56_;
 					ValaStruct* _tmp57_;
 					ValaStruct* base_st;
-					ValaStruct* _tmp58_;
-					ValaStruct* _tmp61_;
-					gboolean _tmp62_ = FALSE;
+					ValaStruct* _tmp67_;
+					gboolean _tmp68_ = FALSE;
 					_tmp52_ = self->priv->sym;
 					_tmp53_ = _vala_code_node_ref0 (VALA_STRUCT (_tmp52_));
 					st = _tmp53_;
@@ -3922,55 +4012,76 @@ static gchar* vala_ccode_attribute_get_default_take_value_function (ValaCCodeAtt
 					_tmp56_ = _tmp55_;
 					_tmp57_ = _vala_code_node_ref0 (_tmp56_);
 					base_st = _tmp57_;
-					_tmp58_ = base_st;
-					if (_tmp58_ != NULL) {
+					while (TRUE) {
+						ValaStruct* _tmp58_;
 						ValaStruct* _tmp59_;
-						gchar* _tmp60_ = NULL;
+						gboolean _tmp60_ = FALSE;
+						_tmp58_ = base_st;
+						if (!(_tmp58_ != NULL)) {
+							break;
+						}
 						_tmp59_ = base_st;
-						_tmp60_ = vala_ccode_base_module_get_ccode_take_value_function ((ValaCodeNode*) _tmp59_);
-						result = _tmp60_;
-						_vala_code_node_unref0 (base_st);
-						_vala_code_node_unref0 (st);
-						return result;
+						_tmp60_ = vala_ccode_base_module_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp59_);
+						if (_tmp60_) {
+							ValaStruct* _tmp61_;
+							gchar* _tmp62_ = NULL;
+							_tmp61_ = base_st;
+							_tmp62_ = vala_ccode_base_module_get_ccode_take_value_function ((ValaCodeNode*) _tmp61_);
+							result = _tmp62_;
+							_vala_code_node_unref0 (base_st);
+							_vala_code_node_unref0 (st);
+							return result;
+						} else {
+							ValaStruct* _tmp63_;
+							ValaStruct* _tmp64_;
+							ValaStruct* _tmp65_;
+							ValaStruct* _tmp66_;
+							_tmp63_ = base_st;
+							_tmp64_ = vala_struct_get_base_struct (_tmp63_);
+							_tmp65_ = _tmp64_;
+							_tmp66_ = _vala_code_node_ref0 (_tmp65_);
+							_vala_code_node_unref0 (base_st);
+							base_st = _tmp66_;
+						}
 					}
-					_tmp61_ = st;
-					_tmp62_ = vala_struct_is_simple_type (_tmp61_);
-					if (_tmp62_) {
-						ValaStruct* _tmp63_;
-						ValaSourceReference* _tmp64_;
-						ValaSourceReference* _tmp65_;
-						ValaStruct* _tmp66_;
-						gchar* _tmp67_ = NULL;
-						gchar* _tmp68_;
-						gchar* _tmp69_ = NULL;
-						gchar* _tmp70_;
-						_tmp63_ = st;
-						_tmp64_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp63_);
-						_tmp65_ = _tmp64_;
-						_tmp66_ = st;
-						_tmp67_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp66_);
-						_tmp68_ = _tmp67_;
-						_tmp69_ = g_strdup_printf ("The type `%s` doesn't declare a GValue take function", _tmp68_);
-						_tmp70_ = _tmp69_;
-						vala_report_error (_tmp65_, _tmp70_);
-						_g_free0 (_tmp70_);
-						_g_free0 (_tmp68_);
+					_tmp67_ = st;
+					_tmp68_ = vala_struct_is_simple_type (_tmp67_);
+					if (_tmp68_) {
+						ValaStruct* _tmp69_;
+						ValaSourceReference* _tmp70_;
+						ValaSourceReference* _tmp71_;
+						ValaStruct* _tmp72_;
+						gchar* _tmp73_ = NULL;
+						gchar* _tmp74_;
+						gchar* _tmp75_ = NULL;
+						gchar* _tmp76_;
+						_tmp69_ = st;
+						_tmp70_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp69_);
+						_tmp71_ = _tmp70_;
+						_tmp72_ = st;
+						_tmp73_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp72_);
+						_tmp74_ = _tmp73_;
+						_tmp75_ = g_strdup_printf ("The type `%s` doesn't declare a GValue take function", _tmp74_);
+						_tmp76_ = _tmp75_;
+						vala_report_error (_tmp71_, _tmp76_);
+						_g_free0 (_tmp76_);
+						_g_free0 (_tmp74_);
 					} else {
-						ValaStruct* _tmp71_;
-						gboolean _tmp72_ = FALSE;
-						_tmp71_ = st;
-						_tmp72_ = vala_ccode_base_module_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp71_);
-						if (_tmp72_) {
-							gchar* _tmp73_;
-							_tmp73_ = g_strdup ("g_value_take_boxed");
-							result = _tmp73_;
+						ValaStruct* _tmp77_;
+						gboolean _tmp78_ = FALSE;
+						_tmp77_ = st;
+						_tmp78_ = vala_ccode_base_module_get_ccode_has_type_id ((ValaTypeSymbol*) _tmp77_);
+						if (_tmp78_) {
+							gchar* _tmp79_;
+							_tmp79_ = g_strdup ("g_value_take_boxed");
+							result = _tmp79_;
 							_vala_code_node_unref0 (base_st);
 							_vala_code_node_unref0 (st);
 							return result;
 						} else {
-							gchar* _tmp74_;
-							_tmp74_ = g_strdup ("g_value_set_pointer");
-							result = _tmp74_;
+							gchar* _tmp80_;
+							_tmp80_ = g_strdup ("g_value_set_pointer");
+							result = _tmp80_;
 							_vala_code_node_unref0 (base_st);
 							_vala_code_node_unref0 (st);
 							return result;
@@ -3979,16 +4090,16 @@ static gchar* vala_ccode_attribute_get_default_take_value_function (ValaCCodeAtt
 					_vala_code_node_unref0 (base_st);
 					_vala_code_node_unref0 (st);
 				} else {
-					gchar* _tmp75_;
-					_tmp75_ = g_strdup ("g_value_set_pointer");
-					result = _tmp75_;
+					gchar* _tmp81_;
+					_tmp81_ = g_strdup ("g_value_set_pointer");
+					result = _tmp81_;
 					return result;
 				}
 			}
 		}
 	}
-	_tmp76_ = g_strdup ("");
-	result = _tmp76_;
+	_tmp82_ = g_strdup ("");
+	result = _tmp82_;
 	return result;
 }
 
@@ -5352,6 +5463,79 @@ const gchar* vala_ccode_attribute_get_free_function (ValaCCodeAttribute* self) {
 }
 
 
+gboolean vala_ccode_attribute_get_free_function_address_of (ValaCCodeAttribute* self) {
+	gboolean result;
+	gboolean* _tmp0_;
+	gboolean* _tmp21_;
+	g_return_val_if_fail (self != NULL, FALSE);
+	_tmp0_ = self->priv->_free_function_address_of;
+	if (_tmp0_ == NULL) {
+		gboolean _tmp1_ = FALSE;
+		ValaAttribute* _tmp2_;
+		gboolean _tmp5_;
+		_tmp2_ = self->priv->ccode;
+		if (_tmp2_ != NULL) {
+			ValaAttribute* _tmp3_;
+			gboolean _tmp4_ = FALSE;
+			_tmp3_ = self->priv->ccode;
+			_tmp4_ = vala_attribute_has_argument (_tmp3_, "free_function_address_of");
+			_tmp1_ = _tmp4_;
+		} else {
+			_tmp1_ = FALSE;
+		}
+		_tmp5_ = _tmp1_;
+		if (_tmp5_) {
+			ValaAttribute* _tmp6_;
+			gboolean _tmp7_ = FALSE;
+			gboolean* _tmp8_;
+			_tmp6_ = self->priv->ccode;
+			_tmp7_ = vala_attribute_get_bool (_tmp6_, "free_function_address_of", FALSE);
+			_tmp8_ = __bool_dup0 (&_tmp7_);
+			_g_free0 (self->priv->_free_function_address_of);
+			self->priv->_free_function_address_of = _tmp8_;
+		} else {
+			ValaSymbol* _tmp9_;
+			ValaClass* _tmp10_;
+			ValaClass* cl;
+			ValaClass* _tmp11_;
+			ValaClass* _tmp12_;
+			ValaClass* _tmp13_;
+			_tmp9_ = self->priv->sym;
+			_tmp10_ = _vala_code_node_ref0 (VALA_CLASS (_tmp9_));
+			cl = _tmp10_;
+			_tmp11_ = cl;
+			_tmp12_ = vala_class_get_base_class (_tmp11_);
+			_tmp13_ = _tmp12_;
+			if (_tmp13_ != NULL) {
+				ValaClass* _tmp14_;
+				ValaClass* _tmp15_;
+				ValaClass* _tmp16_;
+				gboolean _tmp17_ = FALSE;
+				gboolean* _tmp18_;
+				_tmp14_ = cl;
+				_tmp15_ = vala_class_get_base_class (_tmp14_);
+				_tmp16_ = _tmp15_;
+				_tmp17_ = vala_ccode_base_module_get_ccode_free_function_address_of (_tmp16_);
+				_tmp18_ = __bool_dup0 (&_tmp17_);
+				_g_free0 (self->priv->_free_function_address_of);
+				self->priv->_free_function_address_of = _tmp18_;
+			} else {
+				gboolean _tmp19_;
+				gboolean* _tmp20_;
+				_tmp19_ = FALSE;
+				_tmp20_ = __bool_dup0 (&_tmp19_);
+				_g_free0 (self->priv->_free_function_address_of);
+				self->priv->_free_function_address_of = _tmp20_;
+			}
+			_vala_code_node_unref0 (cl);
+		}
+	}
+	_tmp21_ = self->priv->_free_function_address_of;
+	result = *_tmp21_;
+	return result;
+}
+
+
 const gchar* vala_ccode_attribute_get_type_id (ValaCCodeAttribute* self) {
 	const gchar* result;
 	const gchar* _tmp0_;
@@ -5865,6 +6049,42 @@ const gchar* vala_ccode_attribute_get_finish_real_name (ValaCCodeAttribute* self
 }
 
 
+const gchar* vala_ccode_attribute_get_delegate_target_name (ValaCCodeAttribute* self) {
+	const gchar* result;
+	const gchar* _tmp0_;
+	const gchar* _tmp8_;
+	g_return_val_if_fail (self != NULL, NULL);
+	_tmp0_ = self->priv->_delegate_target_name;
+	if (_tmp0_ == NULL) {
+		ValaAttribute* _tmp1_;
+		const gchar* _tmp4_;
+		_tmp1_ = self->priv->ccode;
+		if (_tmp1_ != NULL) {
+			ValaAttribute* _tmp2_;
+			gchar* _tmp3_ = NULL;
+			_tmp2_ = self->priv->ccode;
+			_tmp3_ = vala_attribute_get_string (_tmp2_, "delegate_target_cname");
+			_g_free0 (self->priv->_delegate_target_name);
+			self->priv->_delegate_target_name = _tmp3_;
+		}
+		_tmp4_ = self->priv->_delegate_target_name;
+		if (_tmp4_ == NULL) {
+			const gchar* _tmp5_;
+			const gchar* _tmp6_;
+			gchar* _tmp7_ = NULL;
+			_tmp5_ = vala_ccode_attribute_get_name (self);
+			_tmp6_ = _tmp5_;
+			_tmp7_ = g_strdup_printf ("%s_target", _tmp6_);
+			_g_free0 (self->priv->_delegate_target_name);
+			self->priv->_delegate_target_name = _tmp7_;
+		}
+	}
+	_tmp8_ = self->priv->_delegate_target_name;
+	result = _tmp8_;
+	return result;
+}
+
+
 gboolean vala_ccode_attribute_get_array_length (ValaCCodeAttribute* self) {
 	gboolean result;
 	gboolean _tmp0_;
@@ -6038,6 +6258,7 @@ static void vala_ccode_attribute_finalize (ValaAttributeCache* obj) {
 	_g_free0 (self->priv->_copy_function);
 	_g_free0 (self->priv->_destroy_function);
 	_g_free0 (self->priv->_free_function);
+	_g_free0 (self->priv->_free_function_address_of);
 	_g_free0 (self->priv->_type_id);
 	_g_free0 (self->priv->_marshaller_type_name);
 	_g_free0 (self->priv->_get_value_function);
@@ -6051,6 +6272,7 @@ static void vala_ccode_attribute_finalize (ValaAttributeCache* obj) {
 	_g_free0 (self->priv->_finish_vfunc_name);
 	_g_free0 (self->priv->_finish_real_name);
 	_g_free0 (self->priv->_real_name);
+	_g_free0 (self->priv->_delegate_target_name);
 	VALA_ATTRIBUTE_CACHE_CLASS (vala_ccode_attribute_parent_class)->finalize (obj);
 }
 
diff --git a/codegen/valaccodeattribute.vala b/codegen/valaccodeattribute.vala
index cf7ce89..49900dc 100644
--- a/codegen/valaccodeattribute.vala
+++ b/codegen/valaccodeattribute.vala
@@ -255,6 +255,24 @@ public class Vala.CCodeAttribute : AttributeCache {
 		}
 	}
 
+	public bool free_function_address_of {
+		get {
+			if (_free_function_address_of == null) {
+				if (ccode != null && ccode.has_argument ("free_function_address_of")) {
+					_free_function_address_of = ccode.get_bool ("free_function_address_of");
+				} else {
+					var cl = (Class) sym;
+					if (cl.base_class != null) {
+						_free_function_address_of = CCodeBaseModule.get_ccode_free_function_address_of (cl.base_class);
+					} else {
+						_free_function_address_of = false;
+					}
+				}
+			}
+			return _free_function_address_of;
+		}
+	}
+
 	public string type_id {
 		get {
 			if (_type_id == null) {
@@ -436,6 +454,20 @@ public class Vala.CCodeAttribute : AttributeCache {
 		}
 	}
 
+	public string delegate_target_name {
+		get {
+			if (_delegate_target_name == null) {
+				if (ccode != null) {
+					_delegate_target_name = ccode.get_string ("delegate_target_cname");
+				}
+				if (_delegate_target_name == null) {
+					_delegate_target_name = "%s_target".printf (name);
+				}
+			}
+			return _delegate_target_name;
+		}
+	}
+
 	public bool array_length { get; private set; }
 	public string? array_length_type { get; private set; }
 	public bool array_null_terminated { get; private set; }
@@ -464,6 +496,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 	private bool destroy_function_set;
 	private string? _free_function;
 	private bool free_function_set;
+	private bool? _free_function_address_of;
 	private string _type_id;
 	private string _marshaller_type_name;
 	private string _get_value_function;
@@ -477,6 +510,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 	private string _finish_vfunc_name;
 	private string _finish_real_name;
 	private string _real_name;
+	private string _delegate_target_name;
 
 	private static int dynamic_method_id;
 
@@ -576,6 +610,8 @@ public class Vala.CCodeAttribute : AttributeCache {
 				} else {
 					return "%s%s".printf (CCodeBaseModule.get_ccode_prefix (sym.parent_symbol), sym.name);
 				}
+			} else if (sym is LocalVariable || sym is Parameter) {
+				return sym.name;
 			} else {
 				return "%s%s".printf (CCodeBaseModule.get_ccode_prefix (sym.parent_symbol), sym.name);
 			}
@@ -894,8 +930,12 @@ public class Vala.CCodeAttribute : AttributeCache {
 			} else if (sym is Struct) {
 				var st = (Struct) sym;
 				var base_st = st.base_struct;
-				if (base_st != null) {
-					return CCodeBaseModule.get_ccode_marshaller_type_name (base_st);
+				while (base_st != null) {
+					if (CCodeBaseModule.get_ccode_has_type_id (base_st)) {
+						return CCodeBaseModule.get_ccode_marshaller_type_name (base_st);
+					} else {
+						base_st = base_st.base_struct;
+					}
 				}
 				if (st.is_simple_type ()) {
 					Report.error (st.source_reference, "The type `%s` doesn't declare a marshaller type name".printf (st.get_full_name ()));
@@ -970,8 +1010,12 @@ public class Vala.CCodeAttribute : AttributeCache {
 		} else if (sym is Struct) {
 			var st = (Struct) sym;
 			var base_st = st.base_struct;
-			if (base_st != null) {
-				return CCodeBaseModule.get_ccode_get_value_function (base_st);
+			while (base_st != null) {
+				if (CCodeBaseModule.get_ccode_has_type_id (base_st)) {
+					return CCodeBaseModule.get_ccode_get_value_function (base_st);
+				} else {
+					base_st = base_st.base_struct;
+				}
 			}
 			if (st.is_simple_type ()) {
 				Report.error (st.source_reference, "The type `%s` doesn't declare a GValue get function".printf (st.get_full_name ()));
@@ -1024,8 +1068,12 @@ public class Vala.CCodeAttribute : AttributeCache {
 		} else if (sym is Struct) {
 			var st = (Struct) sym;
 			var base_st = st.base_struct;
-			if (base_st != null) {
-				return CCodeBaseModule.get_ccode_set_value_function (base_st);
+			while (base_st != null) {
+				if (CCodeBaseModule.get_ccode_has_type_id (base_st)) {
+					return CCodeBaseModule.get_ccode_set_value_function (base_st);
+				} else {
+					base_st = base_st.base_struct;
+				}
 			}
 			if (st.is_simple_type ()) {
 				Report.error (st.source_reference, "The type `%s` doesn't declare a GValue set function".printf (st.get_full_name ()));
@@ -1078,8 +1126,12 @@ public class Vala.CCodeAttribute : AttributeCache {
 		} else if (sym is Struct) {
 			var st = (Struct) sym;
 			var base_st = st.base_struct;
-			if (base_st != null) {
-				return CCodeBaseModule.get_ccode_take_value_function (base_st);
+			while (base_st != null) {
+				if (CCodeBaseModule.get_ccode_has_type_id (base_st)) {
+					return CCodeBaseModule.get_ccode_take_value_function (base_st);
+				} else {
+					base_st = base_st.base_struct;
+				}
 			}
 			if (st.is_simple_type ()) {
 				Report.error (st.source_reference, "The type `%s` doesn't declare a GValue take function".printf (st.get_full_name ()));
diff --git a/codegen/valaccodebasemodule.c b/codegen/valaccodebasemodule.c
index aabfbdd..40cab5c 100644
--- a/codegen/valaccodebasemodule.c
+++ b/codegen/valaccodebasemodule.c
@@ -358,7 +358,7 @@ void vala_ccode_base_module_generate_field_declaration (ValaCCodeBaseModule* sel
 gchar* vala_ccode_base_module_get_ccode_declarator_suffix (ValaDataType* type);
 gboolean vala_ccode_base_module_get_ccode_array_length (ValaCodeNode* node);
 gchar* vala_ccode_base_module_get_array_length_cname (ValaCCodeBaseModule* self, const gchar* array_cname, gint dim);
-gchar* vala_ccode_base_module_get_delegate_target_cname (ValaCCodeBaseModule* self, const gchar* delegate_cname);
+gchar* vala_ccode_base_module_get_ccode_delegate_target_name (ValaVariable* variable);
 gchar* vala_ccode_base_module_get_delegate_target_destroy_notify_cname (ValaCCodeBaseModule* self, const gchar* delegate_cname);
 static void vala_ccode_base_module_real_visit_field (ValaCodeVisitor* base, ValaField* f);
 void vala_ccode_base_module_check_type (ValaCCodeBaseModule* self, ValaDataType* type);
@@ -392,6 +392,7 @@ void vala_ccode_base_module_generate_cparameters (ValaCCodeBaseModule* self, Val
 static void vala_ccode_base_module_real_generate_cparameters (ValaCCodeBaseModule* self, ValaMethod* m, ValaCCodeFile* decl_space, ValaMap* cparam_map, ValaCCodeFunction* func, ValaCCodeFunctionDeclarator* vdeclarator, ValaMap* carg_map, ValaCCodeFunctionCall* vcall, gint direction);
 void vala_ccode_base_module_generate_property_accessor_declaration (ValaCCodeBaseModule* self, ValaPropertyAccessor* acc, ValaCCodeFile* decl_space);
 ValaDataType* vala_ccode_base_module_get_data_type_for_symbol (ValaTypeSymbol* sym);
+gchar* vala_ccode_base_module_get_delegate_target_cname (ValaCCodeBaseModule* self, const gchar* delegate_cname);
 static void vala_ccode_base_module_real_visit_property_accessor (ValaCodeVisitor* base, ValaPropertyAccessor* acc);
 gboolean vala_ccode_base_module_is_gobject_property (ValaCCodeBaseModule* self, ValaProperty* prop);
 ValaDataType* vala_ccode_base_module_get_current_return_type (ValaCCodeBaseModule* self);
@@ -407,6 +408,9 @@ gboolean vala_ccode_base_module_get_ccode_notify (ValaProperty* prop);
 ValaCCodeConstant* vala_ccode_base_module_get_property_canonical_cconstant (ValaCCodeBaseModule* self, ValaProperty* prop);
 static void vala_ccode_base_module_real_visit_destructor (ValaCodeVisitor* base, ValaDestructor* d);
 gint vala_ccode_base_module_get_block_id (ValaCCodeBaseModule* self, ValaBlock* b);
+gboolean vala_ccode_base_module_no_implicit_copy (ValaCCodeBaseModule* self, ValaDataType* type);
+gboolean vala_ccode_base_module_is_reference_counting (ValaTypeSymbol* sym);
+gboolean vala_ccode_base_module_get_ccode_is_gboxed (ValaTypeSymbol* sym);
 static void vala_ccode_base_module_capture_parameter (ValaCCodeBaseModule* self, ValaParameter* param, ValaCCodeStruct* data, gint block_id);
 gboolean vala_ccode_base_module_requires_copy (ValaCCodeBaseModule* self, ValaDataType* type);
 ValaTargetValue* vala_ccode_base_module_copy_value (ValaCCodeBaseModule* self, ValaTargetValue* value, ValaCodeNode* node);
@@ -430,7 +434,8 @@ ValaCCodeExpression* vala_ccode_base_module_get_local_cexpression (ValaCCodeBase
 ValaMap* vala_ccode_base_module_get_variable_name_map (ValaCCodeBaseModule* self);
 gint vala_ccode_base_module_get_next_temp_var_id (ValaCCodeBaseModule* self);
 void vala_ccode_base_module_set_next_temp_var_id (ValaCCodeBaseModule* self, gint value);
-static gboolean vala_ccode_base_module_has_simple_struct_initializer (ValaCCodeBaseModule* self, ValaLocalVariable* local);
+gboolean vala_ccode_base_module_is_simple_struct_creation (ValaCCodeBaseModule* self, ValaVariable* variable, ValaExpression* expr);
+static gboolean vala_ccode_base_module_is_foreach_element_variable (ValaCCodeBaseModule* self, ValaLocalVariable* local);
 static void vala_ccode_base_module_real_visit_local_variable (ValaCodeVisitor* base, ValaLocalVariable* local);
 void vala_ccode_base_module_emit_temp_var (ValaCCodeBaseModule* self, ValaLocalVariable* local);
 void vala_ccode_base_module_add_simple_check (ValaCCodeBaseModule* self, ValaCodeNode* node, gboolean always_fails);
@@ -450,10 +455,8 @@ static gboolean vala_ccode_base_module_is_in_generic_type (ValaCCodeBaseModule*
 ValaCCodeExpression* vala_ccode_base_module_get_type_id_expression (ValaCCodeBaseModule* self, ValaDataType* type, gboolean is_chainup);
 gboolean vala_ccode_base_module_get_in_creation_method (ValaCCodeBaseModule* self);
 static ValaCCodeExpression* vala_ccode_base_module_real_get_dup_func_expression (ValaCCodeBaseModule* self, ValaDataType* type, ValaSourceReference* source_reference, gboolean is_chainup);
-gboolean vala_ccode_base_module_is_reference_counting (ValaTypeSymbol* sym);
 gchar* vala_ccode_base_module_get_ccode_ref_function (ValaTypeSymbol* sym);
 gchar* vala_ccode_base_module_get_ccode_dup_function (ValaTypeSymbol* sym);
-gboolean vala_ccode_base_module_get_ccode_is_gboxed (ValaTypeSymbol* sym);
 gchar* vala_ccode_base_module_generate_dup_func_wrapper (ValaCCodeBaseModule* self, ValaDataType* type);
 static gchar* vala_ccode_base_module_generate_struct_dup_wrapper (ValaCCodeBaseModule* self, ValaValueType* value_type);
 static void vala_ccode_base_module_make_comparable_cexpression (ValaCCodeBaseModule* self, ValaDataType** left_type, ValaCCodeExpression** cleft, ValaDataType** right_type, ValaCCodeExpression** cright);
@@ -466,6 +469,8 @@ static gchar* vala_ccode_base_module_generate_numeric_equal_function (ValaCCodeB
 gboolean vala_ccode_base_module_get_ccode_has_copy_function (ValaStruct* st);
 static void vala_ccode_base_module_generate_struct_copy_function (ValaCCodeBaseModule* self, ValaStruct* st);
 gchar* vala_ccode_base_module_get_ccode_copy_function (ValaTypeSymbol* sym);
+gchar* vala_ccode_base_module_generate_free_function_address_of_wrapper (ValaCCodeBaseModule* self, ValaDataType* type);
+gchar* vala_ccode_base_module_get_ccode_free_function (ValaTypeSymbol* sym);
 gchar* vala_ccode_base_module_generate_free_func_wrapper (ValaCCodeBaseModule* self, ValaDataType* type);
 gboolean vala_ccode_base_module_get_ccode_has_destroy_function (ValaStruct* st);
 static void vala_ccode_base_module_generate_struct_destroy_function (ValaCCodeBaseModule* self, ValaStruct* st);
@@ -473,8 +478,8 @@ gchar* vala_ccode_base_module_get_ccode_destroy_function (ValaTypeSymbol* sym);
 ValaCCodeExpression* vala_ccode_base_module_get_destroy0_func_expression (ValaCCodeBaseModule* self, ValaDataType* type, gboolean is_chainup);
 ValaCCodeExpression* vala_ccode_base_module_get_destroy_func_expression (ValaCCodeBaseModule* self, ValaDataType* type, gboolean is_chainup);
 static gchar* vala_ccode_base_module_generate_collection_free_wrapper (ValaCCodeBaseModule* self, ValaDataType* collection_type, ValaCCodeIdentifier* element_destroy_func_expression);
-gchar* vala_ccode_base_module_get_ccode_free_function (ValaTypeSymbol* sym);
 gchar* vala_ccode_base_module_get_ccode_unref_function (ValaObjectTypeSymbol* sym);
+static gboolean vala_ccode_base_module_is_free_function_address_of (ValaCCodeBaseModule* self, ValaDataType* type);
 gchar* vala_ccode_base_module_append_struct_array_free (ValaCCodeBaseModule* self, ValaStruct* st);
 static gchar* vala_ccode_base_module_real_append_struct_array_free (ValaCCodeBaseModule* self, ValaStruct* st);
 static ValaCCodeExpression* vala_ccode_base_module_real_destroy_value (ValaCCodeBaseModule* self, ValaTargetValue* value, gboolean is_macro_definition);
@@ -532,6 +537,7 @@ static gboolean vala_ccode_base_module_is_ref_function_void (ValaCCodeBaseModule
 gboolean vala_ccode_base_module_get_ccode_ref_function_void (ValaClass* cl);
 static gboolean vala_ccode_base_module_is_ref_sink_function_void (ValaCCodeBaseModule* self, ValaDataType* type);
 gboolean vala_ccode_base_module_get_ccode_ref_sink_function_void (ValaClass* cl);
+gboolean vala_ccode_base_module_get_ccode_free_function_address_of (ValaClass* cl);
 static ValaTargetValue* vala_ccode_base_module_real_copy_value (ValaCCodeBaseModule* self, ValaTargetValue* value, ValaCodeNode* node);
 gboolean vala_ccode_base_module_get_non_null (ValaCCodeBaseModule* self, ValaTargetValue* value);
 static gboolean vala_ccode_base_module_is_reference_type_argument (ValaCCodeBaseModule* self, ValaDataType* type_arg);
@@ -608,6 +614,7 @@ const gchar* vala_ccode_attribute_get_lower_case_prefix (ValaCCodeAttribute* sel
 const gchar* vala_ccode_attribute_get_lower_case_suffix (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_ref_function (ValaCCodeAttribute* self);
 gboolean vala_ccode_attribute_get_ref_function_void (ValaCCodeAttribute* self);
+gboolean vala_ccode_attribute_get_free_function_address_of (ValaCCodeAttribute* self);
 gboolean vala_ccode_attribute_get_ref_sink_function_void (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_unref_function (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_ref_sink_function (ValaCCodeAttribute* self);
@@ -634,6 +641,7 @@ const gchar* vala_ccode_attribute_get_array_length_expr (ValaCCodeAttribute* sel
 gdouble vala_ccode_base_module_get_ccode_destroy_notify_pos (ValaCodeNode* node);
 gboolean vala_ccode_base_module_get_ccode_delegate_target (ValaCodeNode* node);
 gboolean vala_ccode_attribute_get_delegate_target (ValaCCodeAttribute* self);
+const gchar* vala_ccode_attribute_get_delegate_target_name (ValaCCodeAttribute* self);
 gdouble vala_ccode_attribute_get_pos (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_real_name (ValaCCodeAttribute* self);
 gchar* vala_ccode_base_module_get_ccode_vfunc_name (ValaMethod* m);
@@ -4380,92 +4388,87 @@ void vala_ccode_base_module_generate_field_declaration (ValaCCodeBaseModule* sel
 				ValaField* _tmp126_;
 				gchar* _tmp127_ = NULL;
 				gchar* _tmp128_;
-				gchar* _tmp129_ = NULL;
-				gchar* _tmp130_;
-				ValaCCodeVariableDeclarator* _tmp131_;
-				ValaCCodeVariableDeclarator* _tmp132_;
-				ValaField* _tmp133_;
-				gboolean _tmp134_ = FALSE;
-				ValaCCodeFile* _tmp137_;
-				ValaCCodeDeclaration* _tmp138_;
-				ValaDelegateType* _tmp139_;
-				gboolean _tmp140_;
-				gboolean _tmp141_;
+				ValaCCodeVariableDeclarator* _tmp129_;
+				ValaCCodeVariableDeclarator* _tmp130_;
+				ValaField* _tmp131_;
+				gboolean _tmp132_ = FALSE;
+				ValaCCodeFile* _tmp135_;
+				ValaCCodeDeclaration* _tmp136_;
+				ValaDelegateType* _tmp137_;
+				gboolean _tmp138_;
+				gboolean _tmp139_;
 				_tmp124_ = vala_ccode_declaration_new ("gpointer");
 				_vala_ccode_node_unref0 (_cdecl_);
 				_cdecl_ = _tmp124_;
 				_tmp125_ = _cdecl_;
 				_tmp126_ = f;
-				_tmp127_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp126_);
+				_tmp127_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp126_);
 				_tmp128_ = _tmp127_;
-				_tmp129_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp128_);
+				_tmp129_ = vala_ccode_variable_declarator_new (_tmp128_, NULL, NULL);
 				_tmp130_ = _tmp129_;
-				_tmp131_ = vala_ccode_variable_declarator_new (_tmp130_, NULL, NULL);
-				_tmp132_ = _tmp131_;
-				vala_ccode_declaration_add_declarator (_tmp125_, (ValaCCodeDeclarator*) _tmp132_);
-				_vala_ccode_node_unref0 (_tmp132_);
-				_g_free0 (_tmp130_);
+				vala_ccode_declaration_add_declarator (_tmp125_, (ValaCCodeDeclarator*) _tmp130_);
+				_vala_ccode_node_unref0 (_tmp130_);
 				_g_free0 (_tmp128_);
-				_tmp133_ = f;
-				_tmp134_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp133_);
-				if (_tmp134_) {
-					ValaCCodeDeclaration* _tmp135_;
-					_tmp135_ = _cdecl_;
-					vala_ccode_declaration_set_modifiers (_tmp135_, VALA_CCODE_MODIFIERS_STATIC);
+				_tmp131_ = f;
+				_tmp132_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp131_);
+				if (_tmp132_) {
+					ValaCCodeDeclaration* _tmp133_;
+					_tmp133_ = _cdecl_;
+					vala_ccode_declaration_set_modifiers (_tmp133_, VALA_CCODE_MODIFIERS_STATIC);
 				} else {
-					ValaCCodeDeclaration* _tmp136_;
-					_tmp136_ = _cdecl_;
-					vala_ccode_declaration_set_modifiers (_tmp136_, VALA_CCODE_MODIFIERS_EXTERN);
+					ValaCCodeDeclaration* _tmp134_;
+					_tmp134_ = _cdecl_;
+					vala_ccode_declaration_set_modifiers (_tmp134_, VALA_CCODE_MODIFIERS_EXTERN);
 				}
-				_tmp137_ = decl_space;
-				_tmp138_ = _cdecl_;
-				vala_ccode_file_add_type_member_declaration (_tmp137_, (ValaCCodeNode*) _tmp138_);
-				_tmp139_ = delegate_type;
-				_tmp140_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp139_);
-				_tmp141_ = _tmp140_;
-				if (_tmp141_) {
-					ValaCCodeDeclaration* _tmp142_;
-					ValaCCodeDeclaration* _tmp143_;
-					ValaField* _tmp144_;
+				_tmp135_ = decl_space;
+				_tmp136_ = _cdecl_;
+				vala_ccode_file_add_type_member_declaration (_tmp135_, (ValaCCodeNode*) _tmp136_);
+				_tmp137_ = delegate_type;
+				_tmp138_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp137_);
+				_tmp139_ = _tmp138_;
+				if (_tmp139_) {
+					ValaCCodeDeclaration* _tmp140_;
+					ValaCCodeDeclaration* _tmp141_;
+					ValaField* _tmp142_;
+					gchar* _tmp143_ = NULL;
+					gchar* _tmp144_;
 					gchar* _tmp145_ = NULL;
 					gchar* _tmp146_;
-					gchar* _tmp147_ = NULL;
-					gchar* _tmp148_;
-					ValaCCodeVariableDeclarator* _tmp149_;
-					ValaCCodeVariableDeclarator* _tmp150_;
-					ValaField* _tmp151_;
-					gboolean _tmp152_ = FALSE;
-					ValaCCodeFile* _tmp155_;
-					ValaCCodeDeclaration* _tmp156_;
-					_tmp142_ = vala_ccode_declaration_new ("GDestroyNotify");
+					ValaCCodeVariableDeclarator* _tmp147_;
+					ValaCCodeVariableDeclarator* _tmp148_;
+					ValaField* _tmp149_;
+					gboolean _tmp150_ = FALSE;
+					ValaCCodeFile* _tmp153_;
+					ValaCCodeDeclaration* _tmp154_;
+					_tmp140_ = vala_ccode_declaration_new ("GDestroyNotify");
 					_vala_ccode_node_unref0 (_cdecl_);
-					_cdecl_ = _tmp142_;
-					_tmp143_ = _cdecl_;
-					_tmp144_ = f;
-					_tmp145_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp144_);
+					_cdecl_ = _tmp140_;
+					_tmp141_ = _cdecl_;
+					_tmp142_ = f;
+					_tmp143_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp142_);
+					_tmp144_ = _tmp143_;
+					_tmp145_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp144_);
 					_tmp146_ = _tmp145_;
-					_tmp147_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp146_);
+					_tmp147_ = vala_ccode_variable_declarator_new (_tmp146_, NULL, NULL);
 					_tmp148_ = _tmp147_;
-					_tmp149_ = vala_ccode_variable_declarator_new (_tmp148_, NULL, NULL);
-					_tmp150_ = _tmp149_;
-					vala_ccode_declaration_add_declarator (_tmp143_, (ValaCCodeDeclarator*) _tmp150_);
-					_vala_ccode_node_unref0 (_tmp150_);
-					_g_free0 (_tmp148_);
+					vala_ccode_declaration_add_declarator (_tmp141_, (ValaCCodeDeclarator*) _tmp148_);
+					_vala_ccode_node_unref0 (_tmp148_);
 					_g_free0 (_tmp146_);
-					_tmp151_ = f;
-					_tmp152_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp151_);
-					if (_tmp152_) {
-						ValaCCodeDeclaration* _tmp153_;
-						_tmp153_ = _cdecl_;
-						vala_ccode_declaration_set_modifiers (_tmp153_, VALA_CCODE_MODIFIERS_STATIC);
+					_g_free0 (_tmp144_);
+					_tmp149_ = f;
+					_tmp150_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp149_);
+					if (_tmp150_) {
+						ValaCCodeDeclaration* _tmp151_;
+						_tmp151_ = _cdecl_;
+						vala_ccode_declaration_set_modifiers (_tmp151_, VALA_CCODE_MODIFIERS_STATIC);
 					} else {
-						ValaCCodeDeclaration* _tmp154_;
-						_tmp154_ = _cdecl_;
-						vala_ccode_declaration_set_modifiers (_tmp154_, VALA_CCODE_MODIFIERS_EXTERN);
+						ValaCCodeDeclaration* _tmp152_;
+						_tmp152_ = _cdecl_;
+						vala_ccode_declaration_set_modifiers (_tmp152_, VALA_CCODE_MODIFIERS_EXTERN);
 					}
-					_tmp155_ = decl_space;
-					_tmp156_ = _cdecl_;
-					vala_ccode_file_add_type_member_declaration (_tmp155_, (ValaCCodeNode*) _tmp156_);
+					_tmp153_ = decl_space;
+					_tmp154_ = _cdecl_;
+					vala_ccode_file_add_type_member_declaration (_tmp153_, (ValaCCodeNode*) _tmp154_);
 				}
 			}
 			_vala_code_node_unref0 (delegate_type);
@@ -5141,47 +5144,8 @@ static void vala_ccode_base_module_real_visit_field (ValaCodeVisitor* base, Vala
 			ValaField* _tmp237_;
 			gboolean _tmp238_ = FALSE;
 			ValaField* _tmp241_;
-			gchar* _tmp242_ = NULL;
-			gchar* _tmp243_;
-			ValaCCodeIdentifier* _tmp244_;
-			ValaField* _tmp245_;
-			gchar* _tmp246_ = NULL;
-			gchar* _tmp247_;
-			ValaField* _tmp248_;
-			ValaDataType* _tmp249_;
-			ValaDataType* _tmp250_;
-			gchar* _tmp251_ = NULL;
-			gchar* _tmp252_;
-			ValaCCodeVariableDeclarator* _tmp253_;
-			ValaCCodeVariableDeclarator* _tmp254_;
-			ValaCCodeVariableDeclarator* var_decl;
-			ValaCCodeVariableDeclarator* _tmp255_;
-			ValaField* _tmp256_;
-			ValaDataType* _tmp257_;
-			ValaDataType* _tmp258_;
-			ValaCCodeExpression* _tmp259_ = NULL;
-			ValaCCodeExpression* _tmp260_;
-			ValaCCodeBaseModuleEmitContext* _tmp261_;
-			ValaField* _tmp265_;
-			ValaExpression* _tmp266_;
-			ValaExpression* _tmp267_;
-			const gchar* _tmp279_;
-			ValaCCodeDeclaration* _tmp280_;
-			ValaCCodeDeclaration* var_def;
-			ValaCCodeDeclaration* _tmp281_;
-			ValaCCodeVariableDeclarator* _tmp282_;
-			ValaField* _tmp283_;
-			gboolean _tmp284_ = FALSE;
-			ValaCCodeFile* _tmp287_;
-			ValaCCodeDeclaration* _tmp288_;
-			gboolean _tmp289_ = FALSE;
-			ValaField* _tmp290_;
-			ValaDataType* _tmp291_;
-			ValaDataType* _tmp292_;
-			gboolean _tmp295_;
-			ValaField* _tmp410_;
-			ValaExpression* _tmp411_;
-			ValaExpression* _tmp412_;
+			gboolean _tmp242_;
+			gboolean _tmp243_;
 			_tmp231_ = f;
 			_tmp232_ = self->cfile;
 			vala_ccode_base_module_generate_field_declaration (self, _tmp231_, _tmp232_);
@@ -5204,711 +5168,753 @@ static void vala_ccode_base_module_real_visit_field (ValaCodeVisitor* base, Vala
 				vala_ccode_base_module_generate_field_declaration (self, _tmp239_, _tmp240_);
 			}
 			_tmp241_ = f;
-			_tmp242_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp241_);
+			_tmp242_ = vala_symbol_get_external ((ValaSymbol*) _tmp241_);
 			_tmp243_ = _tmp242_;
-			_tmp244_ = vala_ccode_identifier_new (_tmp243_);
-			_vala_ccode_node_unref0 (lhs);
-			lhs = (ValaCCodeExpression*) _tmp244_;
-			_g_free0 (_tmp243_);
-			_tmp245_ = f;
-			_tmp246_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp245_);
-			_tmp247_ = _tmp246_;
-			_tmp248_ = f;
-			_tmp249_ = vala_variable_get_variable_type ((ValaVariable*) _tmp248_);
-			_tmp250_ = _tmp249_;
-			_tmp251_ = vala_ccode_base_module_get_ccode_declarator_suffix (_tmp250_);
-			_tmp252_ = _tmp251_;
-			_tmp253_ = vala_ccode_variable_declarator_new (_tmp247_, NULL, _tmp252_);
-			_tmp254_ = _tmp253_;
-			_g_free0 (_tmp252_);
-			_g_free0 (_tmp247_);
-			var_decl = _tmp254_;
-			_tmp255_ = var_decl;
-			_tmp256_ = f;
-			_tmp257_ = vala_variable_get_variable_type ((ValaVariable*) _tmp256_);
-			_tmp258_ = _tmp257_;
-			_tmp259_ = vala_ccode_base_module_default_value_for_type (self, _tmp258_, TRUE);
-			_tmp260_ = _tmp259_;
-			vala_ccode_variable_declarator_set_initializer (_tmp255_, _tmp260_);
-			_vala_ccode_node_unref0 (_tmp260_);
-			_tmp261_ = self->class_init_context;
-			if (_tmp261_ != NULL) {
-				ValaCCodeBaseModuleEmitContext* _tmp262_;
-				_tmp262_ = self->class_init_context;
-				vala_ccode_base_module_push_context (self, _tmp262_);
-			} else {
-				ValaCCodeBaseModuleEmitContext* _tmp263_;
+			if (!_tmp243_) {
+				ValaField* _tmp244_;
+				gchar* _tmp245_ = NULL;
+				gchar* _tmp246_;
+				ValaCCodeIdentifier* _tmp247_;
+				ValaField* _tmp248_;
+				gchar* _tmp249_ = NULL;
+				gchar* _tmp250_;
+				ValaField* _tmp251_;
+				ValaDataType* _tmp252_;
+				ValaDataType* _tmp253_;
+				gchar* _tmp254_ = NULL;
+				gchar* _tmp255_;
+				ValaCCodeVariableDeclarator* _tmp256_;
+				ValaCCodeVariableDeclarator* _tmp257_;
+				ValaCCodeVariableDeclarator* var_decl;
+				ValaCCodeVariableDeclarator* _tmp258_;
+				ValaField* _tmp259_;
+				ValaDataType* _tmp260_;
+				ValaDataType* _tmp261_;
+				ValaCCodeExpression* _tmp262_ = NULL;
+				ValaCCodeExpression* _tmp263_;
 				ValaCCodeBaseModuleEmitContext* _tmp264_;
-				_tmp263_ = vala_ccode_base_module_emit_context_new (NULL);
-				_tmp264_ = _tmp263_;
-				vala_ccode_base_module_push_context (self, _tmp264_);
-				_vala_ccode_base_module_emit_context_unref0 (_tmp264_);
-			}
-			_tmp265_ = f;
-			_tmp266_ = vala_variable_get_initializer ((ValaVariable*) _tmp265_);
-			_tmp267_ = _tmp266_;
-			if (_tmp267_ != NULL) {
 				ValaField* _tmp268_;
 				ValaExpression* _tmp269_;
 				ValaExpression* _tmp270_;
-				ValaField* _tmp271_;
-				ValaExpression* _tmp272_;
-				ValaExpression* _tmp273_;
-				ValaCCodeExpression* _tmp274_ = NULL;
-				ValaCCodeExpression* init;
-				ValaCCodeExpression* _tmp275_;
-				gboolean _tmp276_ = FALSE;
+				const gchar* _tmp282_;
+				ValaCCodeDeclaration* _tmp283_;
+				ValaCCodeDeclaration* var_def;
+				ValaCCodeDeclaration* _tmp284_;
+				ValaCCodeVariableDeclarator* _tmp285_;
+				ValaField* _tmp286_;
+				gboolean _tmp287_ = FALSE;
+				ValaCCodeFile* _tmp290_;
+				ValaCCodeDeclaration* _tmp291_;
+				gboolean _tmp292_ = FALSE;
+				ValaField* _tmp293_;
+				ValaDataType* _tmp294_;
+				ValaDataType* _tmp295_;
+				gboolean _tmp298_;
+				ValaField* _tmp411_;
+				ValaExpression* _tmp412_;
+				ValaExpression* _tmp413_;
+				_tmp244_ = f;
+				_tmp245_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp244_);
+				_tmp246_ = _tmp245_;
+				_tmp247_ = vala_ccode_identifier_new (_tmp246_);
+				_vala_ccode_node_unref0 (lhs);
+				lhs = (ValaCCodeExpression*) _tmp247_;
+				_g_free0 (_tmp246_);
+				_tmp248_ = f;
+				_tmp249_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp248_);
+				_tmp250_ = _tmp249_;
+				_tmp251_ = f;
+				_tmp252_ = vala_variable_get_variable_type ((ValaVariable*) _tmp251_);
+				_tmp253_ = _tmp252_;
+				_tmp254_ = vala_ccode_base_module_get_ccode_declarator_suffix (_tmp253_);
+				_tmp255_ = _tmp254_;
+				_tmp256_ = vala_ccode_variable_declarator_new (_tmp250_, NULL, _tmp255_);
+				_tmp257_ = _tmp256_;
+				_g_free0 (_tmp255_);
+				_g_free0 (_tmp250_);
+				var_decl = _tmp257_;
+				_tmp258_ = var_decl;
+				_tmp259_ = f;
+				_tmp260_ = vala_variable_get_variable_type ((ValaVariable*) _tmp259_);
+				_tmp261_ = _tmp260_;
+				_tmp262_ = vala_ccode_base_module_default_value_for_type (self, _tmp261_, TRUE);
+				_tmp263_ = _tmp262_;
+				vala_ccode_variable_declarator_set_initializer (_tmp258_, _tmp263_);
+				_vala_ccode_node_unref0 (_tmp263_);
+				_tmp264_ = self->class_init_context;
+				if (_tmp264_ != NULL) {
+					ValaCCodeBaseModuleEmitContext* _tmp265_;
+					_tmp265_ = self->class_init_context;
+					vala_ccode_base_module_push_context (self, _tmp265_);
+				} else {
+					ValaCCodeBaseModuleEmitContext* _tmp266_;
+					ValaCCodeBaseModuleEmitContext* _tmp267_;
+					_tmp266_ = vala_ccode_base_module_emit_context_new (NULL);
+					_tmp267_ = _tmp266_;
+					vala_ccode_base_module_push_context (self, _tmp267_);
+					_vala_ccode_base_module_emit_context_unref0 (_tmp267_);
+				}
 				_tmp268_ = f;
 				_tmp269_ = vala_variable_get_initializer ((ValaVariable*) _tmp268_);
 				_tmp270_ = _tmp269_;
-				vala_code_node_emit ((ValaCodeNode*) _tmp270_, (ValaCodeGenerator*) self);
-				_tmp271_ = f;
-				_tmp272_ = vala_variable_get_initializer ((ValaVariable*) _tmp271_);
-				_tmp273_ = _tmp272_;
-				_tmp274_ = vala_ccode_base_module_get_cvalue (self, _tmp273_);
-				init = _tmp274_;
-				_tmp275_ = init;
-				_tmp276_ = vala_ccode_base_module_is_constant_ccode_expression (self, _tmp275_);
-				if (_tmp276_) {
-					ValaCCodeVariableDeclarator* _tmp277_;
+				if (_tmp270_ != NULL) {
+					ValaField* _tmp271_;
+					ValaExpression* _tmp272_;
+					ValaExpression* _tmp273_;
+					ValaField* _tmp274_;
+					ValaExpression* _tmp275_;
+					ValaExpression* _tmp276_;
+					ValaCCodeExpression* _tmp277_ = NULL;
+					ValaCCodeExpression* init;
 					ValaCCodeExpression* _tmp278_;
-					_tmp277_ = var_decl;
+					gboolean _tmp279_ = FALSE;
+					_tmp271_ = f;
+					_tmp272_ = vala_variable_get_initializer ((ValaVariable*) _tmp271_);
+					_tmp273_ = _tmp272_;
+					vala_code_node_emit ((ValaCodeNode*) _tmp273_, (ValaCodeGenerator*) self);
+					_tmp274_ = f;
+					_tmp275_ = vala_variable_get_initializer ((ValaVariable*) _tmp274_);
+					_tmp276_ = _tmp275_;
+					_tmp277_ = vala_ccode_base_module_get_cvalue (self, _tmp276_);
+					init = _tmp277_;
 					_tmp278_ = init;
-					vala_ccode_variable_declarator_set_initializer (_tmp277_, _tmp278_);
+					_tmp279_ = vala_ccode_base_module_is_constant_ccode_expression (self, _tmp278_);
+					if (_tmp279_) {
+						ValaCCodeVariableDeclarator* _tmp280_;
+						ValaCCodeExpression* _tmp281_;
+						_tmp280_ = var_decl;
+						_tmp281_ = init;
+						vala_ccode_variable_declarator_set_initializer (_tmp280_, _tmp281_);
+					}
+					_vala_ccode_node_unref0 (init);
 				}
-				_vala_ccode_node_unref0 (init);
-			}
-			_tmp279_ = field_ctype;
-			_tmp280_ = vala_ccode_declaration_new (_tmp279_);
-			var_def = _tmp280_;
-			_tmp281_ = var_def;
-			_tmp282_ = var_decl;
-			vala_ccode_declaration_add_declarator (_tmp281_, (ValaCCodeDeclarator*) _tmp282_);
-			_tmp283_ = f;
-			_tmp284_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp283_);
-			if (!_tmp284_) {
-				ValaCCodeDeclaration* _tmp285_;
-				_tmp285_ = var_def;
-				vala_ccode_declaration_set_modifiers (_tmp285_, VALA_CCODE_MODIFIERS_EXTERN);
-			} else {
-				ValaCCodeDeclaration* _tmp286_;
-				_tmp286_ = var_def;
-				vala_ccode_declaration_set_modifiers (_tmp286_, VALA_CCODE_MODIFIERS_STATIC);
-			}
-			_tmp287_ = self->cfile;
-			_tmp288_ = var_def;
-			vala_ccode_file_add_type_member_declaration (_tmp287_, (ValaCCodeNode*) _tmp288_);
-			_tmp290_ = f;
-			_tmp291_ = vala_variable_get_variable_type ((ValaVariable*) _tmp290_);
-			_tmp292_ = _tmp291_;
-			if (VALA_IS_ARRAY_TYPE (_tmp292_)) {
-				ValaField* _tmp293_;
-				gboolean _tmp294_ = FALSE;
+				_tmp282_ = field_ctype;
+				_tmp283_ = vala_ccode_declaration_new (_tmp282_);
+				var_def = _tmp283_;
+				_tmp284_ = var_def;
+				_tmp285_ = var_decl;
+				vala_ccode_declaration_add_declarator (_tmp284_, (ValaCCodeDeclarator*) _tmp285_);
+				_tmp286_ = f;
+				_tmp287_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp286_);
+				if (!_tmp287_) {
+					ValaCCodeDeclaration* _tmp288_;
+					_tmp288_ = var_def;
+					vala_ccode_declaration_set_modifiers (_tmp288_, VALA_CCODE_MODIFIERS_EXTERN);
+				} else {
+					ValaCCodeDeclaration* _tmp289_;
+					_tmp289_ = var_def;
+					vala_ccode_declaration_set_modifiers (_tmp289_, VALA_CCODE_MODIFIERS_STATIC);
+				}
+				_tmp290_ = self->cfile;
+				_tmp291_ = var_def;
+				vala_ccode_file_add_type_member_declaration (_tmp290_, (ValaCCodeNode*) _tmp291_);
 				_tmp293_ = f;
-				_tmp294_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp293_);
-				_tmp289_ = _tmp294_;
-			} else {
-				_tmp289_ = FALSE;
-			}
-			_tmp295_ = _tmp289_;
-			if (_tmp295_) {
-				ValaField* _tmp296_;
-				ValaDataType* _tmp297_;
-				ValaDataType* _tmp298_;
-				ValaArrayType* _tmp299_;
-				ValaArrayType* array_type;
-				ValaArrayType* _tmp300_;
-				gboolean _tmp301_;
-				gboolean _tmp302_;
-				_tmp296_ = f;
-				_tmp297_ = vala_variable_get_variable_type ((ValaVariable*) _tmp296_);
-				_tmp298_ = _tmp297_;
-				_tmp299_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp298_));
-				array_type = _tmp299_;
-				_tmp300_ = array_type;
-				_tmp301_ = vala_array_type_get_fixed_length (_tmp300_);
-				_tmp302_ = _tmp301_;
-				if (!_tmp302_) {
-					gboolean _tmp334_ = FALSE;
-					ValaArrayType* _tmp335_;
-					gint _tmp336_;
-					gint _tmp337_;
-					gboolean _tmp340_;
-					{
-						gint dim;
-						dim = 1;
+				_tmp294_ = vala_variable_get_variable_type ((ValaVariable*) _tmp293_);
+				_tmp295_ = _tmp294_;
+				if (VALA_IS_ARRAY_TYPE (_tmp295_)) {
+					ValaField* _tmp296_;
+					gboolean _tmp297_ = FALSE;
+					_tmp296_ = f;
+					_tmp297_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp296_);
+					_tmp292_ = _tmp297_;
+				} else {
+					_tmp292_ = FALSE;
+				}
+				_tmp298_ = _tmp292_;
+				if (_tmp298_) {
+					ValaField* _tmp299_;
+					ValaDataType* _tmp300_;
+					ValaDataType* _tmp301_;
+					ValaArrayType* _tmp302_;
+					ValaArrayType* array_type;
+					ValaArrayType* _tmp303_;
+					gboolean _tmp304_;
+					gboolean _tmp305_;
+					_tmp299_ = f;
+					_tmp300_ = vala_variable_get_variable_type ((ValaVariable*) _tmp299_);
+					_tmp301_ = _tmp300_;
+					_tmp302_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp301_));
+					array_type = _tmp302_;
+					_tmp303_ = array_type;
+					_tmp304_ = vala_array_type_get_fixed_length (_tmp303_);
+					_tmp305_ = _tmp304_;
+					if (!_tmp305_) {
+						gboolean _tmp337_ = FALSE;
+						ValaArrayType* _tmp338_;
+						gint _tmp339_;
+						gint _tmp340_;
+						gboolean _tmp343_;
 						{
-							gboolean _tmp303_;
-							_tmp303_ = TRUE;
-							while (TRUE) {
-								gboolean _tmp304_;
-								gint _tmp306_;
-								ValaArrayType* _tmp307_;
-								gint _tmp308_;
-								gint _tmp309_;
-								ValaDataType* _tmp310_;
-								ValaDataType* _tmp311_ = NULL;
-								ValaDataType* len_type;
-								ValaDataType* _tmp312_;
-								gchar* _tmp313_ = NULL;
-								gchar* _tmp314_;
-								ValaCCodeDeclaration* _tmp315_;
-								ValaCCodeDeclaration* _tmp316_;
-								ValaCCodeDeclaration* len_def;
-								ValaCCodeDeclaration* _tmp317_;
-								ValaField* _tmp318_;
-								gchar* _tmp319_ = NULL;
-								gchar* _tmp320_;
-								gint _tmp321_;
-								gchar* _tmp322_ = NULL;
-								gchar* _tmp323_;
-								ValaCCodeConstant* _tmp324_;
-								ValaCCodeConstant* _tmp325_;
-								ValaCCodeVariableDeclarator* _tmp326_;
-								ValaCCodeVariableDeclarator* _tmp327_;
-								ValaField* _tmp328_;
-								gboolean _tmp329_ = FALSE;
-								ValaCCodeFile* _tmp332_;
-								ValaCCodeDeclaration* _tmp333_;
-								_tmp304_ = _tmp303_;
-								if (!_tmp304_) {
-									gint _tmp305_;
-									_tmp305_ = dim;
-									dim = _tmp305_ + 1;
-								}
-								_tmp303_ = FALSE;
-								_tmp306_ = dim;
-								_tmp307_ = array_type;
-								_tmp308_ = vala_array_type_get_rank (_tmp307_);
-								_tmp309_ = _tmp308_;
-								if (!(_tmp306_ <= _tmp309_)) {
-									break;
-								}
-								_tmp310_ = self->int_type;
-								_tmp311_ = vala_data_type_copy (_tmp310_);
-								len_type = _tmp311_;
-								_tmp312_ = len_type;
-								_tmp313_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp312_);
-								_tmp314_ = _tmp313_;
-								_tmp315_ = vala_ccode_declaration_new (_tmp314_);
-								_tmp316_ = _tmp315_;
-								_g_free0 (_tmp314_);
-								len_def = _tmp316_;
-								_tmp317_ = len_def;
-								_tmp318_ = f;
-								_tmp319_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp318_);
-								_tmp320_ = _tmp319_;
-								_tmp321_ = dim;
-								_tmp322_ = vala_ccode_base_module_get_array_length_cname (self, _tmp320_, _tmp321_);
-								_tmp323_ = _tmp322_;
-								_tmp324_ = vala_ccode_constant_new ("0");
-								_tmp325_ = _tmp324_;
-								_tmp326_ = vala_ccode_variable_declarator_new (_tmp323_, (ValaCCodeExpression*) _tmp325_, NULL);
-								_tmp327_ = _tmp326_;
-								vala_ccode_declaration_add_declarator (_tmp317_, (ValaCCodeDeclarator*) _tmp327_);
-								_vala_ccode_node_unref0 (_tmp327_);
-								_vala_ccode_node_unref0 (_tmp325_);
-								_g_free0 (_tmp323_);
-								_g_free0 (_tmp320_);
-								_tmp328_ = f;
-								_tmp329_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp328_);
-								if (!_tmp329_) {
-									ValaCCodeDeclaration* _tmp330_;
-									_tmp330_ = len_def;
-									vala_ccode_declaration_set_modifiers (_tmp330_, VALA_CCODE_MODIFIERS_EXTERN);
-								} else {
-									ValaCCodeDeclaration* _tmp331_;
-									_tmp331_ = len_def;
-									vala_ccode_declaration_set_modifiers (_tmp331_, VALA_CCODE_MODIFIERS_STATIC);
+							gint dim;
+							dim = 1;
+							{
+								gboolean _tmp306_;
+								_tmp306_ = TRUE;
+								while (TRUE) {
+									gboolean _tmp307_;
+									gint _tmp309_;
+									ValaArrayType* _tmp310_;
+									gint _tmp311_;
+									gint _tmp312_;
+									ValaDataType* _tmp313_;
+									ValaDataType* _tmp314_ = NULL;
+									ValaDataType* len_type;
+									ValaDataType* _tmp315_;
+									gchar* _tmp316_ = NULL;
+									gchar* _tmp317_;
+									ValaCCodeDeclaration* _tmp318_;
+									ValaCCodeDeclaration* _tmp319_;
+									ValaCCodeDeclaration* len_def;
+									ValaCCodeDeclaration* _tmp320_;
+									ValaField* _tmp321_;
+									gchar* _tmp322_ = NULL;
+									gchar* _tmp323_;
+									gint _tmp324_;
+									gchar* _tmp325_ = NULL;
+									gchar* _tmp326_;
+									ValaCCodeConstant* _tmp327_;
+									ValaCCodeConstant* _tmp328_;
+									ValaCCodeVariableDeclarator* _tmp329_;
+									ValaCCodeVariableDeclarator* _tmp330_;
+									ValaField* _tmp331_;
+									gboolean _tmp332_ = FALSE;
+									ValaCCodeFile* _tmp335_;
+									ValaCCodeDeclaration* _tmp336_;
+									_tmp307_ = _tmp306_;
+									if (!_tmp307_) {
+										gint _tmp308_;
+										_tmp308_ = dim;
+										dim = _tmp308_ + 1;
+									}
+									_tmp306_ = FALSE;
+									_tmp309_ = dim;
+									_tmp310_ = array_type;
+									_tmp311_ = vala_array_type_get_rank (_tmp310_);
+									_tmp312_ = _tmp311_;
+									if (!(_tmp309_ <= _tmp312_)) {
+										break;
+									}
+									_tmp313_ = self->int_type;
+									_tmp314_ = vala_data_type_copy (_tmp313_);
+									len_type = _tmp314_;
+									_tmp315_ = len_type;
+									_tmp316_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp315_);
+									_tmp317_ = _tmp316_;
+									_tmp318_ = vala_ccode_declaration_new (_tmp317_);
+									_tmp319_ = _tmp318_;
+									_g_free0 (_tmp317_);
+									len_def = _tmp319_;
+									_tmp320_ = len_def;
+									_tmp321_ = f;
+									_tmp322_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp321_);
+									_tmp323_ = _tmp322_;
+									_tmp324_ = dim;
+									_tmp325_ = vala_ccode_base_module_get_array_length_cname (self, _tmp323_, _tmp324_);
+									_tmp326_ = _tmp325_;
+									_tmp327_ = vala_ccode_constant_new ("0");
+									_tmp328_ = _tmp327_;
+									_tmp329_ = vala_ccode_variable_declarator_new (_tmp326_, (ValaCCodeExpression*) _tmp328_, NULL);
+									_tmp330_ = _tmp329_;
+									vala_ccode_declaration_add_declarator (_tmp320_, (ValaCCodeDeclarator*) _tmp330_);
+									_vala_ccode_node_unref0 (_tmp330_);
+									_vala_ccode_node_unref0 (_tmp328_);
+									_g_free0 (_tmp326_);
+									_g_free0 (_tmp323_);
+									_tmp331_ = f;
+									_tmp332_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp331_);
+									if (!_tmp332_) {
+										ValaCCodeDeclaration* _tmp333_;
+										_tmp333_ = len_def;
+										vala_ccode_declaration_set_modifiers (_tmp333_, VALA_CCODE_MODIFIERS_EXTERN);
+									} else {
+										ValaCCodeDeclaration* _tmp334_;
+										_tmp334_ = len_def;
+										vala_ccode_declaration_set_modifiers (_tmp334_, VALA_CCODE_MODIFIERS_STATIC);
+									}
+									_tmp335_ = self->cfile;
+									_tmp336_ = len_def;
+									vala_ccode_file_add_type_member_declaration (_tmp335_, (ValaCCodeNode*) _tmp336_);
+									_vala_ccode_node_unref0 (len_def);
+									_vala_code_node_unref0 (len_type);
 								}
-								_tmp332_ = self->cfile;
-								_tmp333_ = len_def;
-								vala_ccode_file_add_type_member_declaration (_tmp332_, (ValaCCodeNode*) _tmp333_);
-								_vala_ccode_node_unref0 (len_def);
-								_vala_code_node_unref0 (len_type);
 							}
 						}
+						_tmp338_ = array_type;
+						_tmp339_ = vala_array_type_get_rank (_tmp338_);
+						_tmp340_ = _tmp339_;
+						if (_tmp340_ == 1) {
+							ValaField* _tmp341_;
+							gboolean _tmp342_ = FALSE;
+							_tmp341_ = f;
+							_tmp342_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp341_);
+							_tmp337_ = _tmp342_;
+						} else {
+							_tmp337_ = FALSE;
+						}
+						_tmp343_ = _tmp337_;
+						if (_tmp343_) {
+							ValaDataType* _tmp344_;
+							ValaDataType* _tmp345_ = NULL;
+							ValaDataType* len_type;
+							ValaDataType* _tmp346_;
+							gchar* _tmp347_ = NULL;
+							gchar* _tmp348_;
+							ValaCCodeDeclaration* _tmp349_;
+							ValaCCodeDeclaration* _tmp350_;
+							ValaCCodeDeclaration* _cdecl_;
+							ValaCCodeDeclaration* _tmp351_;
+							ValaField* _tmp352_;
+							gchar* _tmp353_ = NULL;
+							gchar* _tmp354_;
+							gchar* _tmp355_ = NULL;
+							gchar* _tmp356_;
+							ValaCCodeConstant* _tmp357_;
+							ValaCCodeConstant* _tmp358_;
+							ValaCCodeVariableDeclarator* _tmp359_;
+							ValaCCodeVariableDeclarator* _tmp360_;
+							ValaCCodeDeclaration* _tmp361_;
+							ValaCCodeFile* _tmp362_;
+							ValaCCodeDeclaration* _tmp363_;
+							_tmp344_ = self->int_type;
+							_tmp345_ = vala_data_type_copy (_tmp344_);
+							len_type = _tmp345_;
+							_tmp346_ = len_type;
+							_tmp347_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp346_);
+							_tmp348_ = _tmp347_;
+							_tmp349_ = vala_ccode_declaration_new (_tmp348_);
+							_tmp350_ = _tmp349_;
+							_g_free0 (_tmp348_);
+							_cdecl_ = _tmp350_;
+							_tmp351_ = _cdecl_;
+							_tmp352_ = f;
+							_tmp353_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp352_);
+							_tmp354_ = _tmp353_;
+							_tmp355_ = vala_ccode_base_module_get_array_size_cname (self, _tmp354_);
+							_tmp356_ = _tmp355_;
+							_tmp357_ = vala_ccode_constant_new ("0");
+							_tmp358_ = _tmp357_;
+							_tmp359_ = vala_ccode_variable_declarator_new (_tmp356_, (ValaCCodeExpression*) _tmp358_, NULL);
+							_tmp360_ = _tmp359_;
+							vala_ccode_declaration_add_declarator (_tmp351_, (ValaCCodeDeclarator*) _tmp360_);
+							_vala_ccode_node_unref0 (_tmp360_);
+							_vala_ccode_node_unref0 (_tmp358_);
+							_g_free0 (_tmp356_);
+							_g_free0 (_tmp354_);
+							_tmp361_ = _cdecl_;
+							vala_ccode_declaration_set_modifiers (_tmp361_, VALA_CCODE_MODIFIERS_STATIC);
+							_tmp362_ = self->cfile;
+							_tmp363_ = _cdecl_;
+							vala_ccode_file_add_type_member_declaration (_tmp362_, (ValaCCodeNode*) _tmp363_);
+							_vala_ccode_node_unref0 (_cdecl_);
+							_vala_code_node_unref0 (len_type);
+						}
 					}
-					_tmp335_ = array_type;
-					_tmp336_ = vala_array_type_get_rank (_tmp335_);
-					_tmp337_ = _tmp336_;
-					if (_tmp337_ == 1) {
-						ValaField* _tmp338_;
-						gboolean _tmp339_ = FALSE;
-						_tmp338_ = f;
-						_tmp339_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp338_);
-						_tmp334_ = _tmp339_;
-					} else {
-						_tmp334_ = FALSE;
-					}
-					_tmp340_ = _tmp334_;
-					if (_tmp340_) {
-						ValaDataType* _tmp341_;
-						ValaDataType* _tmp342_ = NULL;
-						ValaDataType* len_type;
-						ValaDataType* _tmp343_;
-						gchar* _tmp344_ = NULL;
-						gchar* _tmp345_;
-						ValaCCodeDeclaration* _tmp346_;
-						ValaCCodeDeclaration* _tmp347_;
-						ValaCCodeDeclaration* _cdecl_;
-						ValaCCodeDeclaration* _tmp348_;
-						ValaField* _tmp349_;
-						gchar* _tmp350_ = NULL;
-						gchar* _tmp351_;
-						gchar* _tmp352_ = NULL;
-						gchar* _tmp353_;
-						ValaCCodeConstant* _tmp354_;
-						ValaCCodeConstant* _tmp355_;
-						ValaCCodeVariableDeclarator* _tmp356_;
-						ValaCCodeVariableDeclarator* _tmp357_;
-						ValaCCodeDeclaration* _tmp358_;
-						ValaCCodeFile* _tmp359_;
-						ValaCCodeDeclaration* _tmp360_;
-						_tmp341_ = self->int_type;
-						_tmp342_ = vala_data_type_copy (_tmp341_);
-						len_type = _tmp342_;
-						_tmp343_ = len_type;
-						_tmp344_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp343_);
-						_tmp345_ = _tmp344_;
-						_tmp346_ = vala_ccode_declaration_new (_tmp345_);
-						_tmp347_ = _tmp346_;
-						_g_free0 (_tmp345_);
-						_cdecl_ = _tmp347_;
-						_tmp348_ = _cdecl_;
-						_tmp349_ = f;
-						_tmp350_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp349_);
-						_tmp351_ = _tmp350_;
-						_tmp352_ = vala_ccode_base_module_get_array_size_cname (self, _tmp351_);
-						_tmp353_ = _tmp352_;
-						_tmp354_ = vala_ccode_constant_new ("0");
-						_tmp355_ = _tmp354_;
-						_tmp356_ = vala_ccode_variable_declarator_new (_tmp353_, (ValaCCodeExpression*) _tmp355_, NULL);
-						_tmp357_ = _tmp356_;
-						vala_ccode_declaration_add_declarator (_tmp348_, (ValaCCodeDeclarator*) _tmp357_);
-						_vala_ccode_node_unref0 (_tmp357_);
-						_vala_ccode_node_unref0 (_tmp355_);
-						_g_free0 (_tmp353_);
-						_g_free0 (_tmp351_);
-						_tmp358_ = _cdecl_;
-						vala_ccode_declaration_set_modifiers (_tmp358_, VALA_CCODE_MODIFIERS_STATIC);
-						_tmp359_ = self->cfile;
-						_tmp360_ = _cdecl_;
-						vala_ccode_file_add_type_member_declaration (_tmp359_, (ValaCCodeNode*) _tmp360_);
-						_vala_ccode_node_unref0 (_cdecl_);
-						_vala_code_node_unref0 (len_type);
-					}
-				}
-				_vala_code_node_unref0 (array_type);
-			} else {
-				ValaField* _tmp361_;
-				ValaDataType* _tmp362_;
-				ValaDataType* _tmp363_;
-				_tmp361_ = f;
-				_tmp362_ = vala_variable_get_variable_type ((ValaVariable*) _tmp361_);
-				_tmp363_ = _tmp362_;
-				if (VALA_IS_DELEGATE_TYPE (_tmp363_)) {
+					_vala_code_node_unref0 (array_type);
+				} else {
 					ValaField* _tmp364_;
 					ValaDataType* _tmp365_;
 					ValaDataType* _tmp366_;
-					ValaDelegateType* _tmp367_;
-					ValaDelegateType* delegate_type;
-					ValaDelegateType* _tmp368_;
-					ValaDelegate* _tmp369_;
-					ValaDelegate* _tmp370_;
-					gboolean _tmp371_;
-					gboolean _tmp372_;
 					_tmp364_ = f;
 					_tmp365_ = vala_variable_get_variable_type ((ValaVariable*) _tmp364_);
 					_tmp366_ = _tmp365_;
-					_tmp367_ = _vala_code_node_ref0 (VALA_DELEGATE_TYPE (_tmp366_));
-					delegate_type = _tmp367_;
-					_tmp368_ = delegate_type;
-					_tmp369_ = vala_delegate_type_get_delegate_symbol (_tmp368_);
-					_tmp370_ = _tmp369_;
-					_tmp371_ = vala_delegate_get_has_target (_tmp370_);
-					_tmp372_ = _tmp371_;
-					if (_tmp372_) {
-						ValaCCodeDeclaration* _tmp373_;
-						ValaCCodeDeclaration* target_def;
-						ValaCCodeDeclaration* _tmp374_;
-						ValaField* _tmp375_;
-						gchar* _tmp376_ = NULL;
-						gchar* _tmp377_;
-						gchar* _tmp378_ = NULL;
-						gchar* _tmp379_;
-						ValaCCodeConstant* _tmp380_;
-						ValaCCodeConstant* _tmp381_;
-						ValaCCodeVariableDeclarator* _tmp382_;
-						ValaCCodeVariableDeclarator* _tmp383_;
-						ValaField* _tmp384_;
-						gboolean _tmp385_ = FALSE;
-						ValaCCodeFile* _tmp388_;
-						ValaCCodeDeclaration* _tmp389_;
-						ValaDelegateType* _tmp390_;
-						gboolean _tmp391_;
-						gboolean _tmp392_;
-						_tmp373_ = vala_ccode_declaration_new ("gpointer");
-						target_def = _tmp373_;
-						_tmp374_ = target_def;
-						_tmp375_ = f;
-						_tmp376_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp375_);
-						_tmp377_ = _tmp376_;
-						_tmp378_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp377_);
-						_tmp379_ = _tmp378_;
-						_tmp380_ = vala_ccode_constant_new ("NULL");
-						_tmp381_ = _tmp380_;
-						_tmp382_ = vala_ccode_variable_declarator_new (_tmp379_, (ValaCCodeExpression*) _tmp381_, NULL);
-						_tmp383_ = _tmp382_;
-						vala_ccode_declaration_add_declarator (_tmp374_, (ValaCCodeDeclarator*) _tmp383_);
-						_vala_ccode_node_unref0 (_tmp383_);
-						_vala_ccode_node_unref0 (_tmp381_);
-						_g_free0 (_tmp379_);
-						_g_free0 (_tmp377_);
-						_tmp384_ = f;
-						_tmp385_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp384_);
-						if (!_tmp385_) {
-							ValaCCodeDeclaration* _tmp386_;
-							_tmp386_ = target_def;
-							vala_ccode_declaration_set_modifiers (_tmp386_, VALA_CCODE_MODIFIERS_EXTERN);
-						} else {
-							ValaCCodeDeclaration* _tmp387_;
-							_tmp387_ = target_def;
-							vala_ccode_declaration_set_modifiers (_tmp387_, VALA_CCODE_MODIFIERS_STATIC);
-						}
-						_tmp388_ = self->cfile;
-						_tmp389_ = target_def;
-						vala_ccode_file_add_type_member_declaration (_tmp388_, (ValaCCodeNode*) _tmp389_);
-						_tmp390_ = delegate_type;
-						_tmp391_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp390_);
-						_tmp392_ = _tmp391_;
-						if (_tmp392_) {
-							ValaCCodeDeclaration* _tmp393_;
-							ValaCCodeDeclaration* target_destroy_notify_def;
-							ValaCCodeDeclaration* _tmp394_;
-							ValaField* _tmp395_;
-							gchar* _tmp396_ = NULL;
-							gchar* _tmp397_;
-							gchar* _tmp398_ = NULL;
-							gchar* _tmp399_;
-							ValaCCodeConstant* _tmp400_;
-							ValaCCodeConstant* _tmp401_;
-							ValaCCodeVariableDeclarator* _tmp402_;
-							ValaCCodeVariableDeclarator* _tmp403_;
-							ValaField* _tmp404_;
-							gboolean _tmp405_ = FALSE;
-							ValaCCodeFile* _tmp408_;
-							ValaCCodeDeclaration* _tmp409_;
-							_tmp393_ = vala_ccode_declaration_new ("GDestroyNotify");
-							target_destroy_notify_def = _tmp393_;
-							_tmp394_ = target_destroy_notify_def;
-							_tmp395_ = f;
-							_tmp396_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp395_);
-							_tmp397_ = _tmp396_;
-							_tmp398_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp397_);
-							_tmp399_ = _tmp398_;
-							_tmp400_ = vala_ccode_constant_new ("NULL");
-							_tmp401_ = _tmp400_;
-							_tmp402_ = vala_ccode_variable_declarator_new (_tmp399_, (ValaCCodeExpression*) _tmp401_, NULL);
-							_tmp403_ = _tmp402_;
-							vala_ccode_declaration_add_declarator (_tmp394_, (ValaCCodeDeclarator*) _tmp403_);
-							_vala_ccode_node_unref0 (_tmp403_);
-							_vala_ccode_node_unref0 (_tmp401_);
-							_g_free0 (_tmp399_);
-							_g_free0 (_tmp397_);
-							_tmp404_ = f;
-							_tmp405_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp404_);
-							if (!_tmp405_) {
-								ValaCCodeDeclaration* _tmp406_;
-								_tmp406_ = target_destroy_notify_def;
-								vala_ccode_declaration_set_modifiers (_tmp406_, VALA_CCODE_MODIFIERS_EXTERN);
+					if (VALA_IS_DELEGATE_TYPE (_tmp366_)) {
+						ValaField* _tmp367_;
+						ValaDataType* _tmp368_;
+						ValaDataType* _tmp369_;
+						ValaDelegateType* _tmp370_;
+						ValaDelegateType* delegate_type;
+						ValaDelegateType* _tmp371_;
+						ValaDelegate* _tmp372_;
+						ValaDelegate* _tmp373_;
+						gboolean _tmp374_;
+						gboolean _tmp375_;
+						_tmp367_ = f;
+						_tmp368_ = vala_variable_get_variable_type ((ValaVariable*) _tmp367_);
+						_tmp369_ = _tmp368_;
+						_tmp370_ = _vala_code_node_ref0 (VALA_DELEGATE_TYPE (_tmp369_));
+						delegate_type = _tmp370_;
+						_tmp371_ = delegate_type;
+						_tmp372_ = vala_delegate_type_get_delegate_symbol (_tmp371_);
+						_tmp373_ = _tmp372_;
+						_tmp374_ = vala_delegate_get_has_target (_tmp373_);
+						_tmp375_ = _tmp374_;
+						if (_tmp375_) {
+							ValaCCodeDeclaration* _tmp376_;
+							ValaCCodeDeclaration* target_def;
+							ValaCCodeDeclaration* _tmp377_;
+							ValaField* _tmp378_;
+							gchar* _tmp379_ = NULL;
+							gchar* _tmp380_;
+							ValaCCodeConstant* _tmp381_;
+							ValaCCodeConstant* _tmp382_;
+							ValaCCodeVariableDeclarator* _tmp383_;
+							ValaCCodeVariableDeclarator* _tmp384_;
+							ValaField* _tmp385_;
+							gboolean _tmp386_ = FALSE;
+							ValaCCodeFile* _tmp389_;
+							ValaCCodeDeclaration* _tmp390_;
+							ValaDelegateType* _tmp391_;
+							gboolean _tmp392_;
+							gboolean _tmp393_;
+							_tmp376_ = vala_ccode_declaration_new ("gpointer");
+							target_def = _tmp376_;
+							_tmp377_ = target_def;
+							_tmp378_ = f;
+							_tmp379_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp378_);
+							_tmp380_ = _tmp379_;
+							_tmp381_ = vala_ccode_constant_new ("NULL");
+							_tmp382_ = _tmp381_;
+							_tmp383_ = vala_ccode_variable_declarator_new (_tmp380_, (ValaCCodeExpression*) _tmp382_, NULL);
+							_tmp384_ = _tmp383_;
+							vala_ccode_declaration_add_declarator (_tmp377_, (ValaCCodeDeclarator*) _tmp384_);
+							_vala_ccode_node_unref0 (_tmp384_);
+							_vala_ccode_node_unref0 (_tmp382_);
+							_g_free0 (_tmp380_);
+							_tmp385_ = f;
+							_tmp386_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp385_);
+							if (!_tmp386_) {
+								ValaCCodeDeclaration* _tmp387_;
+								_tmp387_ = target_def;
+								vala_ccode_declaration_set_modifiers (_tmp387_, VALA_CCODE_MODIFIERS_EXTERN);
 							} else {
-								ValaCCodeDeclaration* _tmp407_;
-								_tmp407_ = target_destroy_notify_def;
-								vala_ccode_declaration_set_modifiers (_tmp407_, VALA_CCODE_MODIFIERS_STATIC);
+								ValaCCodeDeclaration* _tmp388_;
+								_tmp388_ = target_def;
+								vala_ccode_declaration_set_modifiers (_tmp388_, VALA_CCODE_MODIFIERS_STATIC);
+							}
+							_tmp389_ = self->cfile;
+							_tmp390_ = target_def;
+							vala_ccode_file_add_type_member_declaration (_tmp389_, (ValaCCodeNode*) _tmp390_);
+							_tmp391_ = delegate_type;
+							_tmp392_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp391_);
+							_tmp393_ = _tmp392_;
+							if (_tmp393_) {
+								ValaCCodeDeclaration* _tmp394_;
+								ValaCCodeDeclaration* target_destroy_notify_def;
+								ValaCCodeDeclaration* _tmp395_;
+								ValaField* _tmp396_;
+								gchar* _tmp397_ = NULL;
+								gchar* _tmp398_;
+								gchar* _tmp399_ = NULL;
+								gchar* _tmp400_;
+								ValaCCodeConstant* _tmp401_;
+								ValaCCodeConstant* _tmp402_;
+								ValaCCodeVariableDeclarator* _tmp403_;
+								ValaCCodeVariableDeclarator* _tmp404_;
+								ValaField* _tmp405_;
+								gboolean _tmp406_ = FALSE;
+								ValaCCodeFile* _tmp409_;
+								ValaCCodeDeclaration* _tmp410_;
+								_tmp394_ = vala_ccode_declaration_new ("GDestroyNotify");
+								target_destroy_notify_def = _tmp394_;
+								_tmp395_ = target_destroy_notify_def;
+								_tmp396_ = f;
+								_tmp397_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp396_);
+								_tmp398_ = _tmp397_;
+								_tmp399_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp398_);
+								_tmp400_ = _tmp399_;
+								_tmp401_ = vala_ccode_constant_new ("NULL");
+								_tmp402_ = _tmp401_;
+								_tmp403_ = vala_ccode_variable_declarator_new (_tmp400_, (ValaCCodeExpression*) _tmp402_, NULL);
+								_tmp404_ = _tmp403_;
+								vala_ccode_declaration_add_declarator (_tmp395_, (ValaCCodeDeclarator*) _tmp404_);
+								_vala_ccode_node_unref0 (_tmp404_);
+								_vala_ccode_node_unref0 (_tmp402_);
+								_g_free0 (_tmp400_);
+								_g_free0 (_tmp398_);
+								_tmp405_ = f;
+								_tmp406_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp405_);
+								if (!_tmp406_) {
+									ValaCCodeDeclaration* _tmp407_;
+									_tmp407_ = target_destroy_notify_def;
+									vala_ccode_declaration_set_modifiers (_tmp407_, VALA_CCODE_MODIFIERS_EXTERN);
+								} else {
+									ValaCCodeDeclaration* _tmp408_;
+									_tmp408_ = target_destroy_notify_def;
+									vala_ccode_declaration_set_modifiers (_tmp408_, VALA_CCODE_MODIFIERS_STATIC);
+								}
+								_tmp409_ = self->cfile;
+								_tmp410_ = target_destroy_notify_def;
+								vala_ccode_file_add_type_member_declaration (_tmp409_, (ValaCCodeNode*) _tmp410_);
+								_vala_ccode_node_unref0 (target_destroy_notify_def);
 							}
-							_tmp408_ = self->cfile;
-							_tmp409_ = target_destroy_notify_def;
-							vala_ccode_file_add_type_member_declaration (_tmp408_, (ValaCCodeNode*) _tmp409_);
-							_vala_ccode_node_unref0 (target_destroy_notify_def);
+							_vala_ccode_node_unref0 (target_def);
 						}
-						_vala_ccode_node_unref0 (target_def);
+						_vala_code_node_unref0 (delegate_type);
 					}
-					_vala_code_node_unref0 (delegate_type);
 				}
-			}
-			_tmp410_ = f;
-			_tmp411_ = vala_variable_get_initializer ((ValaVariable*) _tmp410_);
-			_tmp412_ = _tmp411_;
-			if (_tmp412_ != NULL) {
-				ValaField* _tmp413_;
-				ValaExpression* _tmp414_;
-				ValaExpression* _tmp415_;
-				ValaCCodeExpression* _tmp416_ = NULL;
-				ValaCCodeExpression* rhs;
-				ValaCCodeExpression* _tmp417_;
-				gboolean _tmp418_ = FALSE;
-				_tmp413_ = f;
-				_tmp414_ = vala_variable_get_initializer ((ValaVariable*) _tmp413_);
-				_tmp415_ = _tmp414_;
-				_tmp416_ = vala_ccode_base_module_get_cvalue (self, _tmp415_);
-				rhs = _tmp416_;
-				_tmp417_ = rhs;
-				_tmp418_ = vala_ccode_base_module_is_constant_ccode_expression (self, _tmp417_);
-				if (!_tmp418_) {
-					ValaField* _tmp419_;
-					ValaSymbol* _tmp420_;
-					ValaSymbol* _tmp421_;
-					_tmp419_ = f;
-					_tmp420_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp419_);
-					_tmp421_ = _tmp420_;
-					if (VALA_IS_CLASS (_tmp421_)) {
-						ValaField* _tmp422_;
-						ValaExpression* _tmp423_;
-						ValaExpression* _tmp424_;
-						gboolean _tmp461_ = FALSE;
-						gboolean _tmp462_ = FALSE;
-						ValaField* _tmp463_;
-						ValaDataType* _tmp464_;
-						ValaDataType* _tmp465_;
-						gboolean _tmp468_;
-						gboolean _tmp472_;
-						_tmp422_ = f;
-						_tmp423_ = vala_variable_get_initializer ((ValaVariable*) _tmp422_);
-						_tmp424_ = _tmp423_;
-						if (VALA_IS_INITIALIZER_LIST (_tmp424_)) {
-							ValaCCodeFunction* _tmp425_;
-							ValaCCodeFunction* _tmp426_;
-							ValaField* _tmp427_;
-							ValaDataType* _tmp428_;
-							ValaDataType* _tmp429_;
-							ValaLocalVariable* _tmp430_ = NULL;
-							ValaLocalVariable* temp_decl;
-							ValaLocalVariable* _tmp431_;
-							const gchar* _tmp432_;
-							const gchar* _tmp433_;
-							ValaCCodeExpression* _tmp434_;
-							ValaCCodeVariableDeclarator* _tmp435_;
-							ValaCCodeVariableDeclarator* vardecl;
-							ValaCCodeFunction* _tmp436_;
-							ValaCCodeFunction* _tmp437_;
-							ValaLocalVariable* _tmp438_;
-							ValaDataType* _tmp439_;
-							ValaDataType* _tmp440_;
-							gchar* _tmp441_ = NULL;
-							gchar* _tmp442_;
-							ValaCCodeVariableDeclarator* _tmp443_;
-							ValaLocalVariable* _tmp444_;
-							const gchar* _tmp445_;
-							const gchar* _tmp446_;
-							gchar* _tmp447_ = NULL;
-							gchar* _tmp448_;
-							ValaCCodeExpression* _tmp449_ = NULL;
-							ValaCCodeExpression* _tmp450_;
-							ValaCCodeExpression* tmp;
-							ValaCCodeFunction* _tmp451_;
-							ValaCCodeFunction* _tmp452_;
-							ValaCCodeExpression* _tmp453_;
-							ValaCCodeExpression* _tmp454_;
-							ValaCCodeFunction* _tmp455_;
-							ValaCCodeFunction* _tmp456_;
-							_tmp425_ = vala_ccode_base_module_get_ccode (self);
-							_tmp426_ = _tmp425_;
-							vala_ccode_function_open_block (_tmp426_);
-							_tmp427_ = f;
-							_tmp428_ = vala_variable_get_variable_type ((ValaVariable*) _tmp427_);
-							_tmp429_ = _tmp428_;
-							_tmp430_ = vala_ccode_base_module_get_temp_variable (self, _tmp429_, TRUE, NULL, TRUE);
-							temp_decl = _tmp430_;
-							_tmp431_ = temp_decl;
-							_tmp432_ = vala_symbol_get_name ((ValaSymbol*) _tmp431_);
-							_tmp433_ = _tmp432_;
-							_tmp434_ = rhs;
-							_tmp435_ = vala_ccode_variable_declarator_new_zero (_tmp433_, _tmp434_, NULL);
-							vardecl = _tmp435_;
-							_tmp436_ = vala_ccode_base_module_get_ccode (self);
-							_tmp437_ = _tmp436_;
-							_tmp438_ = temp_decl;
-							_tmp439_ = vala_variable_get_variable_type ((ValaVariable*) _tmp438_);
-							_tmp440_ = _tmp439_;
-							_tmp441_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp440_);
-							_tmp442_ = _tmp441_;
-							_tmp443_ = vardecl;
-							vala_ccode_function_add_declaration (_tmp437_, _tmp442_, (ValaCCodeDeclarator*) _tmp443_, 0);
-							_g_free0 (_tmp442_);
-							_tmp444_ = temp_decl;
-							_tmp445_ = vala_symbol_get_name ((ValaSymbol*) _tmp444_);
-							_tmp446_ = _tmp445_;
-							_tmp447_ = vala_ccode_base_module_get_variable_cname (self, _tmp446_);
-							_tmp448_ = _tmp447_;
-							_tmp449_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp448_);
-							_tmp450_ = _tmp449_;
-							_g_free0 (_tmp448_);
-							tmp = _tmp450_;
-							_tmp451_ = vala_ccode_base_module_get_ccode (self);
-							_tmp452_ = _tmp451_;
-							_tmp453_ = lhs;
-							_tmp454_ = tmp;
-							vala_ccode_function_add_assignment (_tmp452_, _tmp453_, _tmp454_);
-							_tmp455_ = vala_ccode_base_module_get_ccode (self);
-							_tmp456_ = _tmp455_;
-							vala_ccode_function_close (_tmp456_);
-							_vala_ccode_node_unref0 (tmp);
-							_vala_ccode_node_unref0 (vardecl);
-							_vala_code_node_unref0 (temp_decl);
-						} else {
-							ValaCCodeFunction* _tmp457_;
-							ValaCCodeFunction* _tmp458_;
-							ValaCCodeExpression* _tmp459_;
-							ValaCCodeExpression* _tmp460_;
-							_tmp457_ = vala_ccode_base_module_get_ccode (self);
-							_tmp458_ = _tmp457_;
-							_tmp459_ = lhs;
-							_tmp460_ = rhs;
-							vala_ccode_function_add_assignment (_tmp458_, _tmp459_, _tmp460_);
-						}
-						_tmp463_ = f;
-						_tmp464_ = vala_variable_get_variable_type ((ValaVariable*) _tmp463_);
-						_tmp465_ = _tmp464_;
-						if (VALA_IS_ARRAY_TYPE (_tmp465_)) {
-							ValaField* _tmp466_;
-							gboolean _tmp467_ = FALSE;
-							_tmp466_ = f;
-							_tmp467_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp466_);
-							_tmp462_ = _tmp467_;
-						} else {
-							_tmp462_ = FALSE;
-						}
-						_tmp468_ = _tmp462_;
-						if (_tmp468_) {
-							ValaField* _tmp469_;
-							ValaExpression* _tmp470_;
-							ValaExpression* _tmp471_;
-							_tmp469_ = f;
-							_tmp470_ = vala_variable_get_initializer ((ValaVariable*) _tmp469_);
-							_tmp471_ = _tmp470_;
-							_tmp461_ = VALA_IS_ARRAY_CREATION_EXPRESSION (_tmp471_);
-						} else {
-							_tmp461_ = FALSE;
-						}
-						_tmp472_ = _tmp461_;
-						if (_tmp472_) {
-							ValaField* _tmp473_;
-							ValaDataType* _tmp474_;
-							ValaDataType* _tmp475_;
-							ValaArrayType* _tmp476_;
-							ValaArrayType* array_type;
-							ValaField* _tmp477_;
-							ValaTargetValue* _tmp478_ = NULL;
-							ValaTargetValue* field_value;
-							ValaField* _tmp479_;
-							ValaExpression* _tmp480_;
-							ValaExpression* _tmp481_;
-							ValaList* _tmp482_ = NULL;
-							ValaList* sizes;
-							_tmp473_ = f;
-							_tmp474_ = vala_variable_get_variable_type ((ValaVariable*) _tmp473_);
-							_tmp475_ = _tmp474_;
-							_tmp476_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp475_));
-							array_type = _tmp476_;
-							_tmp477_ = f;
-							_tmp478_ = vala_ccode_base_module_get_field_cvalue (self, _tmp477_, NULL);
-							field_value = _tmp478_;
-							_tmp479_ = f;
-							_tmp480_ = vala_variable_get_initializer ((ValaVariable*) _tmp479_);
-							_tmp481_ = _tmp480_;
-							_tmp482_ = vala_array_creation_expression_get_sizes (VALA_ARRAY_CREATION_EXPRESSION (_tmp481_));
-							sizes = _tmp482_;
-							{
-								gint dim;
-								dim = 1;
+				_tmp411_ = f;
+				_tmp412_ = vala_variable_get_initializer ((ValaVariable*) _tmp411_);
+				_tmp413_ = _tmp412_;
+				if (_tmp413_ != NULL) {
+					ValaField* _tmp414_;
+					ValaExpression* _tmp415_;
+					ValaExpression* _tmp416_;
+					ValaCCodeExpression* _tmp417_ = NULL;
+					ValaCCodeExpression* rhs;
+					ValaCCodeExpression* _tmp418_;
+					gboolean _tmp419_ = FALSE;
+					_tmp414_ = f;
+					_tmp415_ = vala_variable_get_initializer ((ValaVariable*) _tmp414_);
+					_tmp416_ = _tmp415_;
+					_tmp417_ = vala_ccode_base_module_get_cvalue (self, _tmp416_);
+					rhs = _tmp417_;
+					_tmp418_ = rhs;
+					_tmp419_ = vala_ccode_base_module_is_constant_ccode_expression (self, _tmp418_);
+					if (!_tmp419_) {
+						ValaField* _tmp420_;
+						ValaSymbol* _tmp421_;
+						ValaSymbol* _tmp422_;
+						_tmp420_ = f;
+						_tmp421_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp420_);
+						_tmp422_ = _tmp421_;
+						if (VALA_IS_CLASS (_tmp422_)) {
+							ValaField* _tmp423_;
+							ValaExpression* _tmp424_;
+							ValaExpression* _tmp425_;
+							gboolean _tmp462_ = FALSE;
+							gboolean _tmp463_ = FALSE;
+							ValaField* _tmp464_;
+							ValaDataType* _tmp465_;
+							ValaDataType* _tmp466_;
+							gboolean _tmp469_;
+							gboolean _tmp473_;
+							_tmp423_ = f;
+							_tmp424_ = vala_variable_get_initializer ((ValaVariable*) _tmp423_);
+							_tmp425_ = _tmp424_;
+							if (VALA_IS_INITIALIZER_LIST (_tmp425_)) {
+								ValaCCodeFunction* _tmp426_;
+								ValaCCodeFunction* _tmp427_;
+								ValaField* _tmp428_;
+								ValaDataType* _tmp429_;
+								ValaDataType* _tmp430_;
+								ValaLocalVariable* _tmp431_ = NULL;
+								ValaLocalVariable* temp_decl;
+								ValaLocalVariable* _tmp432_;
+								const gchar* _tmp433_;
+								const gchar* _tmp434_;
+								ValaCCodeExpression* _tmp435_;
+								ValaCCodeVariableDeclarator* _tmp436_;
+								ValaCCodeVariableDeclarator* vardecl;
+								ValaCCodeFunction* _tmp437_;
+								ValaCCodeFunction* _tmp438_;
+								ValaLocalVariable* _tmp439_;
+								ValaDataType* _tmp440_;
+								ValaDataType* _tmp441_;
+								gchar* _tmp442_ = NULL;
+								gchar* _tmp443_;
+								ValaCCodeVariableDeclarator* _tmp444_;
+								ValaLocalVariable* _tmp445_;
+								const gchar* _tmp446_;
+								const gchar* _tmp447_;
+								gchar* _tmp448_ = NULL;
+								gchar* _tmp449_;
+								ValaCCodeExpression* _tmp450_ = NULL;
+								ValaCCodeExpression* _tmp451_;
+								ValaCCodeExpression* tmp;
+								ValaCCodeFunction* _tmp452_;
+								ValaCCodeFunction* _tmp453_;
+								ValaCCodeExpression* _tmp454_;
+								ValaCCodeExpression* _tmp455_;
+								ValaCCodeFunction* _tmp456_;
+								ValaCCodeFunction* _tmp457_;
+								_tmp426_ = vala_ccode_base_module_get_ccode (self);
+								_tmp427_ = _tmp426_;
+								vala_ccode_function_open_block (_tmp427_);
+								_tmp428_ = f;
+								_tmp429_ = vala_variable_get_variable_type ((ValaVariable*) _tmp428_);
+								_tmp430_ = _tmp429_;
+								_tmp431_ = vala_ccode_base_module_get_temp_variable (self, _tmp430_, TRUE, NULL, TRUE);
+								temp_decl = _tmp431_;
+								_tmp432_ = temp_decl;
+								_tmp433_ = vala_symbol_get_name ((ValaSymbol*) _tmp432_);
+								_tmp434_ = _tmp433_;
+								_tmp435_ = rhs;
+								_tmp436_ = vala_ccode_variable_declarator_new_zero (_tmp434_, _tmp435_, NULL);
+								vardecl = _tmp436_;
+								_tmp437_ = vala_ccode_base_module_get_ccode (self);
+								_tmp438_ = _tmp437_;
+								_tmp439_ = temp_decl;
+								_tmp440_ = vala_variable_get_variable_type ((ValaVariable*) _tmp439_);
+								_tmp441_ = _tmp440_;
+								_tmp442_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp441_);
+								_tmp443_ = _tmp442_;
+								_tmp444_ = vardecl;
+								vala_ccode_function_add_declaration (_tmp438_, _tmp443_, (ValaCCodeDeclarator*) _tmp444_, 0);
+								_g_free0 (_tmp443_);
+								_tmp445_ = temp_decl;
+								_tmp446_ = vala_symbol_get_name ((ValaSymbol*) _tmp445_);
+								_tmp447_ = _tmp446_;
+								_tmp448_ = vala_ccode_base_module_get_variable_cname (self, _tmp447_);
+								_tmp449_ = _tmp448_;
+								_tmp450_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp449_);
+								_tmp451_ = _tmp450_;
+								_g_free0 (_tmp449_);
+								tmp = _tmp451_;
+								_tmp452_ = vala_ccode_base_module_get_ccode (self);
+								_tmp453_ = _tmp452_;
+								_tmp454_ = lhs;
+								_tmp455_ = tmp;
+								vala_ccode_function_add_assignment (_tmp453_, _tmp454_, _tmp455_);
+								_tmp456_ = vala_ccode_base_module_get_ccode (self);
+								_tmp457_ = _tmp456_;
+								vala_ccode_function_close (_tmp457_);
+								_vala_ccode_node_unref0 (tmp);
+								_vala_ccode_node_unref0 (vardecl);
+								_vala_code_node_unref0 (temp_decl);
+							} else {
+								ValaCCodeFunction* _tmp458_;
+								ValaCCodeFunction* _tmp459_;
+								ValaCCodeExpression* _tmp460_;
+								ValaCCodeExpression* _tmp461_;
+								_tmp458_ = vala_ccode_base_module_get_ccode (self);
+								_tmp459_ = _tmp458_;
+								_tmp460_ = lhs;
+								_tmp461_ = rhs;
+								vala_ccode_function_add_assignment (_tmp459_, _tmp460_, _tmp461_);
+							}
+							_tmp464_ = f;
+							_tmp465_ = vala_variable_get_variable_type ((ValaVariable*) _tmp464_);
+							_tmp466_ = _tmp465_;
+							if (VALA_IS_ARRAY_TYPE (_tmp466_)) {
+								ValaField* _tmp467_;
+								gboolean _tmp468_ = FALSE;
+								_tmp467_ = f;
+								_tmp468_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp467_);
+								_tmp463_ = _tmp468_;
+							} else {
+								_tmp463_ = FALSE;
+							}
+							_tmp469_ = _tmp463_;
+							if (_tmp469_) {
+								ValaField* _tmp470_;
+								ValaExpression* _tmp471_;
+								ValaExpression* _tmp472_;
+								_tmp470_ = f;
+								_tmp471_ = vala_variable_get_initializer ((ValaVariable*) _tmp470_);
+								_tmp472_ = _tmp471_;
+								_tmp462_ = VALA_IS_ARRAY_CREATION_EXPRESSION (_tmp472_);
+							} else {
+								_tmp462_ = FALSE;
+							}
+							_tmp473_ = _tmp462_;
+							if (_tmp473_) {
+								ValaField* _tmp474_;
+								ValaDataType* _tmp475_;
+								ValaDataType* _tmp476_;
+								ValaArrayType* _tmp477_;
+								ValaArrayType* array_type;
+								ValaField* _tmp478_;
+								ValaTargetValue* _tmp479_ = NULL;
+								ValaTargetValue* field_value;
+								ValaField* _tmp480_;
+								ValaExpression* _tmp481_;
+								ValaExpression* _tmp482_;
+								ValaList* _tmp483_ = NULL;
+								ValaList* sizes;
+								_tmp474_ = f;
+								_tmp475_ = vala_variable_get_variable_type ((ValaVariable*) _tmp474_);
+								_tmp476_ = _tmp475_;
+								_tmp477_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp476_));
+								array_type = _tmp477_;
+								_tmp478_ = f;
+								_tmp479_ = vala_ccode_base_module_get_field_cvalue (self, _tmp478_, NULL);
+								field_value = _tmp479_;
+								_tmp480_ = f;
+								_tmp481_ = vala_variable_get_initializer ((ValaVariable*) _tmp480_);
+								_tmp482_ = _tmp481_;
+								_tmp483_ = vala_array_creation_expression_get_sizes (VALA_ARRAY_CREATION_EXPRESSION (_tmp482_));
+								sizes = _tmp483_;
 								{
-									gboolean _tmp483_;
-									_tmp483_ = TRUE;
-									while (TRUE) {
+									gint dim;
+									dim = 1;
+									{
 										gboolean _tmp484_;
-										gint _tmp486_;
-										ValaArrayType* _tmp487_;
-										gint _tmp488_;
-										gint _tmp489_;
-										ValaTargetValue* _tmp490_;
-										gint _tmp491_;
-										ValaCCodeExpression* _tmp492_ = NULL;
-										ValaCCodeExpression* array_len_lhs;
-										ValaList* _tmp493_;
-										gint _tmp494_;
-										gpointer _tmp495_ = NULL;
-										ValaExpression* size;
-										ValaCCodeFunction* _tmp496_;
-										ValaCCodeFunction* _tmp497_;
-										ValaCCodeExpression* _tmp498_;
-										ValaExpression* _tmp499_;
-										ValaCCodeExpression* _tmp500_ = NULL;
-										ValaCCodeExpression* _tmp501_;
-										_tmp484_ = _tmp483_;
-										if (!_tmp484_) {
-											gint _tmp485_;
-											_tmp485_ = dim;
-											dim = _tmp485_ + 1;
-										}
-										_tmp483_ = FALSE;
-										_tmp486_ = dim;
-										_tmp487_ = array_type;
-										_tmp488_ = vala_array_type_get_rank (_tmp487_);
-										_tmp489_ = _tmp488_;
-										if (!(_tmp486_ <= _tmp489_)) {
-											break;
+										_tmp484_ = TRUE;
+										while (TRUE) {
+											gboolean _tmp485_;
+											gint _tmp487_;
+											ValaArrayType* _tmp488_;
+											gint _tmp489_;
+											gint _tmp490_;
+											ValaTargetValue* _tmp491_;
+											gint _tmp492_;
+											ValaCCodeExpression* _tmp493_ = NULL;
+											ValaCCodeExpression* array_len_lhs;
+											ValaList* _tmp494_;
+											gint _tmp495_;
+											gpointer _tmp496_ = NULL;
+											ValaExpression* size;
+											ValaCCodeFunction* _tmp497_;
+											ValaCCodeFunction* _tmp498_;
+											ValaCCodeExpression* _tmp499_;
+											ValaExpression* _tmp500_;
+											ValaCCodeExpression* _tmp501_ = NULL;
+											ValaCCodeExpression* _tmp502_;
+											_tmp485_ = _tmp484_;
+											if (!_tmp485_) {
+												gint _tmp486_;
+												_tmp486_ = dim;
+												dim = _tmp486_ + 1;
+											}
+											_tmp484_ = FALSE;
+											_tmp487_ = dim;
+											_tmp488_ = array_type;
+											_tmp489_ = vala_array_type_get_rank (_tmp488_);
+											_tmp490_ = _tmp489_;
+											if (!(_tmp487_ <= _tmp490_)) {
+												break;
+											}
+											_tmp491_ = field_value;
+											_tmp492_ = dim;
+											_tmp493_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp491_, _tmp492_);
+											array_len_lhs = _tmp493_;
+											_tmp494_ = sizes;
+											_tmp495_ = dim;
+											_tmp496_ = vala_list_get (_tmp494_, _tmp495_ - 1);
+											size = (ValaExpression*) _tmp496_;
+											_tmp497_ = vala_ccode_base_module_get_ccode (self);
+											_tmp498_ = _tmp497_;
+											_tmp499_ = array_len_lhs;
+											_tmp500_ = size;
+											_tmp501_ = vala_ccode_base_module_get_cvalue (self, _tmp500_);
+											_tmp502_ = _tmp501_;
+											vala_ccode_function_add_assignment (_tmp498_, _tmp499_, _tmp502_);
+											_vala_ccode_node_unref0 (_tmp502_);
+											_vala_code_node_unref0 (size);
+											_vala_ccode_node_unref0 (array_len_lhs);
 										}
-										_tmp490_ = field_value;
-										_tmp491_ = dim;
-										_tmp492_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp490_, _tmp491_);
-										array_len_lhs = _tmp492_;
-										_tmp493_ = sizes;
-										_tmp494_ = dim;
-										_tmp495_ = vala_list_get (_tmp493_, _tmp494_ - 1);
-										size = (ValaExpression*) _tmp495_;
-										_tmp496_ = vala_ccode_base_module_get_ccode (self);
-										_tmp497_ = _tmp496_;
-										_tmp498_ = array_len_lhs;
-										_tmp499_ = size;
-										_tmp500_ = vala_ccode_base_module_get_cvalue (self, _tmp499_);
-										_tmp501_ = _tmp500_;
-										vala_ccode_function_add_assignment (_tmp497_, _tmp498_, _tmp501_);
-										_vala_ccode_node_unref0 (_tmp501_);
-										_vala_code_node_unref0 (size);
-										_vala_ccode_node_unref0 (array_len_lhs);
 									}
 								}
+								_vala_iterable_unref0 (sizes);
+								_vala_target_value_unref0 (field_value);
+								_vala_code_node_unref0 (array_type);
 							}
-							_vala_iterable_unref0 (sizes);
-							_vala_target_value_unref0 (field_value);
-							_vala_code_node_unref0 (array_type);
+						} else {
+							ValaField* _tmp503_;
+							ValaField* _tmp504_;
+							ValaSourceReference* _tmp505_;
+							ValaSourceReference* _tmp506_;
+							_tmp503_ = f;
+							vala_code_node_set_error ((ValaCodeNode*) _tmp503_, TRUE);
+							_tmp504_ = f;
+							_tmp505_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp504_);
+							_tmp506_ = _tmp505_;
+							vala_report_error (_tmp506_, "Non-constant field initializers not supported in this context");
+							_vala_ccode_node_unref0 (rhs);
+							_vala_ccode_node_unref0 (var_def);
+							_vala_ccode_node_unref0 (var_decl);
+							_g_free0 (field_ctype);
+							_vala_ccode_node_unref0 (lhs);
+							_vala_code_node_unref0 (cl);
+							return;
 						}
-					} else {
-						ValaField* _tmp502_;
-						ValaField* _tmp503_;
-						ValaSourceReference* _tmp504_;
-						ValaSourceReference* _tmp505_;
-						_tmp502_ = f;
-						vala_code_node_set_error ((ValaCodeNode*) _tmp502_, TRUE);
-						_tmp503_ = f;
-						_tmp504_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp503_);
-						_tmp505_ = _tmp504_;
-						vala_report_error (_tmp505_, "Non-constant field initializers not supported in this context");
-						_vala_ccode_node_unref0 (rhs);
-						_vala_ccode_node_unref0 (var_def);
-						_vala_ccode_node_unref0 (var_decl);
-						_g_free0 (field_ctype);
-						_vala_ccode_node_unref0 (lhs);
-						_vala_code_node_unref0 (cl);
-						return;
 					}
+					_vala_ccode_node_unref0 (rhs);
 				}
-				_vala_ccode_node_unref0 (rhs);
+				vala_ccode_base_module_pop_context (self);
+				_vala_ccode_node_unref0 (var_def);
+				_vala_ccode_node_unref0 (var_decl);
 			}
-			vala_ccode_base_module_pop_context (self);
-			_vala_ccode_node_unref0 (var_def);
-			_vala_ccode_node_unref0 (var_decl);
 		}
 	}
 	vala_ccode_base_module_pop_line (self);
@@ -9407,6 +9413,88 @@ gint vala_ccode_base_module_get_block_id (ValaCCodeBaseModule* self, ValaBlock*
 }
 
 
+gboolean vala_ccode_base_module_no_implicit_copy (ValaCCodeBaseModule* self, ValaDataType* type) {
+	gboolean result = FALSE;
+	ValaDataType* _tmp0_;
+	ValaTypeSymbol* _tmp1_;
+	ValaTypeSymbol* _tmp2_;
+	ValaClass* _tmp3_;
+	ValaClass* cl;
+	gboolean _tmp4_ = FALSE;
+	gboolean _tmp5_ = FALSE;
+	ValaDataType* _tmp6_;
+	gboolean _tmp9_;
+	gboolean _tmp24_;
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (type != NULL, FALSE);
+	_tmp0_ = type;
+	_tmp1_ = vala_data_type_get_data_type (_tmp0_);
+	_tmp2_ = _tmp1_;
+	_tmp3_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp2_) ? ((ValaClass*) _tmp2_) : NULL);
+	cl = _tmp3_;
+	_tmp6_ = type;
+	if (VALA_IS_DELEGATE_TYPE (_tmp6_)) {
+		_tmp5_ = TRUE;
+	} else {
+		ValaDataType* _tmp7_;
+		gboolean _tmp8_ = FALSE;
+		_tmp7_ = type;
+		_tmp8_ = vala_data_type_is_array (_tmp7_);
+		_tmp5_ = _tmp8_;
+	}
+	_tmp9_ = _tmp5_;
+	if (_tmp9_) {
+		_tmp4_ = TRUE;
+	} else {
+		gboolean _tmp10_ = FALSE;
+		gboolean _tmp11_ = FALSE;
+		gboolean _tmp12_ = FALSE;
+		ValaClass* _tmp13_;
+		gboolean _tmp17_;
+		gboolean _tmp20_;
+		gboolean _tmp23_;
+		_tmp13_ = cl;
+		if (_tmp13_ != NULL) {
+			ValaClass* _tmp14_;
+			gboolean _tmp15_;
+			gboolean _tmp16_;
+			_tmp14_ = cl;
+			_tmp15_ = vala_class_get_is_immutable (_tmp14_);
+			_tmp16_ = _tmp15_;
+			_tmp12_ = !_tmp16_;
+		} else {
+			_tmp12_ = FALSE;
+		}
+		_tmp17_ = _tmp12_;
+		if (_tmp17_) {
+			ValaClass* _tmp18_;
+			gboolean _tmp19_ = FALSE;
+			_tmp18_ = cl;
+			_tmp19_ = vala_ccode_base_module_is_reference_counting ((ValaTypeSymbol*) _tmp18_);
+			_tmp11_ = !_tmp19_;
+		} else {
+			_tmp11_ = FALSE;
+		}
+		_tmp20_ = _tmp11_;
+		if (_tmp20_) {
+			ValaClass* _tmp21_;
+			gboolean _tmp22_ = FALSE;
+			_tmp21_ = cl;
+			_tmp22_ = vala_ccode_base_module_get_ccode_is_gboxed ((ValaTypeSymbol*) _tmp21_);
+			_tmp10_ = !_tmp22_;
+		} else {
+			_tmp10_ = FALSE;
+		}
+		_tmp23_ = _tmp10_;
+		_tmp4_ = _tmp23_;
+	}
+	_tmp24_ = _tmp4_;
+	result = _tmp24_;
+	_vala_code_node_unref0 (cl);
+	return result;
+}
+
+
 static void vala_ccode_base_module_capture_parameter (ValaCCodeBaseModule* self, ValaParameter* param, ValaCCodeStruct* data, gint block_id) {
 	ValaParameter* _tmp0_;
 	ValaDataType* _tmp1_;
@@ -9417,48 +9505,44 @@ static void vala_ccode_base_module_capture_parameter (ValaCCodeBaseModule* self,
 	ValaDataType* _tmp6_;
 	ValaDataType* _tmp7_ = NULL;
 	ValaDataType* param_type;
-	ValaDataType* _tmp8_;
-	ValaCCodeStruct* _tmp9_;
+	ValaParameter* _tmp8_;
+	ValaDataType* _tmp9_;
 	ValaDataType* _tmp10_;
-	gchar* _tmp11_ = NULL;
-	gchar* _tmp12_;
-	ValaParameter* _tmp13_;
-	const gchar* _tmp14_;
-	const gchar* _tmp15_;
-	gchar* _tmp16_ = NULL;
-	gchar* _tmp17_;
-	gboolean _tmp18_ = FALSE;
-	ValaParameter* _tmp19_;
-	ValaDataType* _tmp20_;
-	ValaDataType* _tmp21_;
-	gboolean _tmp27_;
-	gboolean is_unowned_delegate;
+	gboolean _tmp11_;
+	gboolean _tmp12_;
+	ValaCCodeStruct* _tmp18_;
+	ValaDataType* _tmp19_;
+	gchar* _tmp20_ = NULL;
+	gchar* _tmp21_;
+	ValaParameter* _tmp22_;
+	const gchar* _tmp23_;
+	const gchar* _tmp24_;
+	gchar* _tmp25_ = NULL;
+	gchar* _tmp26_;
+	ValaParameter* _tmp27_;
 	ValaParameter* _tmp28_;
-	ValaParameter* _tmp29_;
-	ValaTargetValue* _tmp30_ = NULL;
+	ValaTargetValue* _tmp29_ = NULL;
 	ValaTargetValue* value;
-	gboolean _tmp31_ = FALSE;
+	gboolean _tmp30_ = FALSE;
+	ValaDataType* _tmp31_;
 	gboolean _tmp32_ = FALSE;
-	ValaDataType* _tmp33_;
-	gboolean _tmp34_ = FALSE;
-	gboolean _tmp40_;
-	gboolean _tmp42_;
+	gboolean _tmp38_;
+	ValaParameter* _tmp42_;
+	ValaDataType* _tmp43_;
+	ValaDataType* _tmp44_;
+	ValaArrayType* _tmp45_;
+	ValaArrayType* array_type;
 	ValaParameter* _tmp46_;
 	ValaDataType* _tmp47_;
 	ValaDataType* _tmp48_;
-	ValaArrayType* _tmp49_;
-	ValaArrayType* array_type;
-	ValaParameter* _tmp50_;
-	ValaDataType* _tmp51_;
-	ValaDataType* _tmp52_;
-	ValaDelegateType* _tmp53_;
+	ValaDelegateType* _tmp49_;
 	ValaDelegateType* deleg_type;
-	gboolean _tmp54_ = FALSE;
-	ValaArrayType* _tmp55_;
-	gboolean _tmp58_;
-	ValaParameter* _tmp105_;
-	ValaParameter* _tmp106_;
-	ValaTargetValue* _tmp107_;
+	gboolean _tmp50_ = FALSE;
+	ValaArrayType* _tmp51_;
+	gboolean _tmp54_;
+	ValaParameter* _tmp97_;
+	ValaParameter* _tmp98_;
+	ValaTargetValue* _tmp99_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (param != NULL);
 	g_return_if_fail (data != NULL);
@@ -9472,238 +9556,217 @@ static void vala_ccode_base_module_capture_parameter (ValaCCodeBaseModule* self,
 	_tmp6_ = _tmp5_;
 	_tmp7_ = vala_data_type_copy (_tmp6_);
 	param_type = _tmp7_;
-	_tmp8_ = param_type;
-	vala_data_type_set_value_owned (_tmp8_, TRUE);
-	_tmp9_ = data;
-	_tmp10_ = param_type;
-	_tmp11_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp10_);
+	_tmp8_ = param;
+	_tmp9_ = vala_variable_get_variable_type ((ValaVariable*) _tmp8_);
+	_tmp10_ = _tmp9_;
+	_tmp11_ = vala_data_type_get_value_owned (_tmp10_);
 	_tmp12_ = _tmp11_;
-	_tmp13_ = param;
-	_tmp14_ = vala_symbol_get_name ((ValaSymbol*) _tmp13_);
-	_tmp15_ = _tmp14_;
-	_tmp16_ = vala_ccode_base_module_get_variable_cname (self, _tmp15_);
-	_tmp17_ = _tmp16_;
-	vala_ccode_struct_add_field (_tmp9_, _tmp12_, _tmp17_, NULL);
-	_g_free0 (_tmp17_);
-	_g_free0 (_tmp12_);
-	_tmp19_ = param;
-	_tmp20_ = vala_variable_get_variable_type ((ValaVariable*) _tmp19_);
-	_tmp21_ = _tmp20_;
-	if (VALA_IS_DELEGATE_TYPE (_tmp21_)) {
-		ValaParameter* _tmp22_;
-		ValaDataType* _tmp23_;
-		ValaDataType* _tmp24_;
-		gboolean _tmp25_;
-		gboolean _tmp26_;
-		_tmp22_ = param;
-		_tmp23_ = vala_variable_get_variable_type ((ValaVariable*) _tmp22_);
-		_tmp24_ = _tmp23_;
-		_tmp25_ = vala_data_type_get_value_owned (_tmp24_);
-		_tmp26_ = _tmp25_;
-		_tmp18_ = !_tmp26_;
-	} else {
-		_tmp18_ = FALSE;
+	if (!_tmp12_) {
+		ValaDataType* _tmp13_;
+		ValaParameter* _tmp14_;
+		ValaDataType* _tmp15_;
+		ValaDataType* _tmp16_;
+		gboolean _tmp17_ = FALSE;
+		_tmp13_ = param_type;
+		_tmp14_ = param;
+		_tmp15_ = vala_variable_get_variable_type ((ValaVariable*) _tmp14_);
+		_tmp16_ = _tmp15_;
+		_tmp17_ = vala_ccode_base_module_no_implicit_copy (self, _tmp16_);
+		vala_data_type_set_value_owned (_tmp13_, !_tmp17_);
 	}
-	_tmp27_ = _tmp18_;
-	is_unowned_delegate = _tmp27_;
+	_tmp18_ = data;
+	_tmp19_ = param_type;
+	_tmp20_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp19_);
+	_tmp21_ = _tmp20_;
+	_tmp22_ = param;
+	_tmp23_ = vala_symbol_get_name ((ValaSymbol*) _tmp22_);
+	_tmp24_ = _tmp23_;
+	_tmp25_ = vala_ccode_base_module_get_variable_cname (self, _tmp24_);
+	_tmp26_ = _tmp25_;
+	vala_ccode_struct_add_field (_tmp18_, _tmp21_, _tmp26_, NULL);
+	_g_free0 (_tmp26_);
+	_g_free0 (_tmp21_);
+	_tmp27_ = param;
+	vala_parameter_set_captured (_tmp27_, FALSE);
 	_tmp28_ = param;
-	vala_parameter_set_captured (_tmp28_, FALSE);
-	_tmp29_ = param;
-	_tmp30_ = vala_code_generator_load_parameter ((ValaCodeGenerator*) self, _tmp29_);
-	value = _tmp30_;
-	_tmp33_ = param_type;
-	_tmp34_ = vala_ccode_base_module_requires_copy (self, _tmp33_);
-	if (_tmp34_) {
-		ValaParameter* _tmp35_;
-		ValaDataType* _tmp36_;
-		ValaDataType* _tmp37_;
-		gboolean _tmp38_;
-		gboolean _tmp39_;
-		_tmp35_ = param;
-		_tmp36_ = vala_variable_get_variable_type ((ValaVariable*) _tmp35_);
+	_tmp29_ = vala_code_generator_load_parameter ((ValaCodeGenerator*) self, _tmp28_);
+	value = _tmp29_;
+	_tmp31_ = param_type;
+	_tmp32_ = vala_ccode_base_module_requires_copy (self, _tmp31_);
+	if (_tmp32_) {
+		ValaParameter* _tmp33_;
+		ValaDataType* _tmp34_;
+		ValaDataType* _tmp35_;
+		gboolean _tmp36_;
+		gboolean _tmp37_;
+		_tmp33_ = param;
+		_tmp34_ = vala_variable_get_variable_type ((ValaVariable*) _tmp33_);
+		_tmp35_ = _tmp34_;
+		_tmp36_ = vala_data_type_get_value_owned (_tmp35_);
 		_tmp37_ = _tmp36_;
-		_tmp38_ = vala_data_type_get_value_owned (_tmp37_);
-		_tmp39_ = _tmp38_;
-		_tmp32_ = !_tmp39_;
+		_tmp30_ = !_tmp37_;
 	} else {
-		_tmp32_ = FALSE;
+		_tmp30_ = FALSE;
 	}
-	_tmp40_ = _tmp32_;
-	if (_tmp40_) {
-		gboolean _tmp41_;
-		_tmp41_ = is_unowned_delegate;
-		_tmp31_ = !_tmp41_;
-	} else {
-		_tmp31_ = FALSE;
-	}
-	_tmp42_ = _tmp31_;
-	if (_tmp42_) {
-		ValaTargetValue* _tmp43_;
-		ValaParameter* _tmp44_;
-		ValaTargetValue* _tmp45_ = NULL;
-		_tmp43_ = value;
-		_tmp44_ = param;
-		_tmp45_ = vala_ccode_base_module_copy_value (self, _tmp43_, (ValaCodeNode*) _tmp44_);
-		_vala_target_value_unref0 (value);
-		value = _tmp45_;
+	_tmp38_ = _tmp30_;
+	if (_tmp38_) {
+		ValaTargetValue* _tmp39_;
+		ValaParameter* _tmp40_;
+		ValaTargetValue* _tmp41_ = NULL;
+		_tmp39_ = value;
+		_tmp40_ = param;
+		_tmp41_ = vala_ccode_base_module_copy_value (self, _tmp39_, (ValaCodeNode*) _tmp40_);
+		_vala_target_value_unref0 (value);
+		value = _tmp41_;
 	}
+	_tmp42_ = param;
+	_tmp43_ = vala_variable_get_variable_type ((ValaVariable*) _tmp42_);
+	_tmp44_ = _tmp43_;
+	_tmp45_ = _vala_code_node_ref0 (VALA_IS_ARRAY_TYPE (_tmp44_) ? ((ValaArrayType*) _tmp44_) : NULL);
+	array_type = _tmp45_;
 	_tmp46_ = param;
 	_tmp47_ = vala_variable_get_variable_type ((ValaVariable*) _tmp46_);
 	_tmp48_ = _tmp47_;
-	_tmp49_ = _vala_code_node_ref0 (VALA_IS_ARRAY_TYPE (_tmp48_) ? ((ValaArrayType*) _tmp48_) : NULL);
-	array_type = _tmp49_;
-	_tmp50_ = param;
-	_tmp51_ = vala_variable_get_variable_type ((ValaVariable*) _tmp50_);
-	_tmp52_ = _tmp51_;
-	_tmp53_ = _vala_code_node_ref0 (VALA_IS_DELEGATE_TYPE (_tmp52_) ? ((ValaDelegateType*) _tmp52_) : NULL);
-	deleg_type = _tmp53_;
-	_tmp55_ = array_type;
-	if (_tmp55_ != NULL) {
-		ValaParameter* _tmp56_;
-		gboolean _tmp57_ = FALSE;
-		_tmp56_ = param;
-		_tmp57_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp56_);
-		_tmp54_ = _tmp57_;
+	_tmp49_ = _vala_code_node_ref0 (VALA_IS_DELEGATE_TYPE (_tmp48_) ? ((ValaDelegateType*) _tmp48_) : NULL);
+	deleg_type = _tmp49_;
+	_tmp51_ = array_type;
+	if (_tmp51_ != NULL) {
+		ValaParameter* _tmp52_;
+		gboolean _tmp53_ = FALSE;
+		_tmp52_ = param;
+		_tmp53_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp52_);
+		_tmp50_ = _tmp53_;
 	} else {
-		_tmp54_ = FALSE;
+		_tmp50_ = FALSE;
 	}
-	_tmp58_ = _tmp54_;
-	if (_tmp58_) {
+	_tmp54_ = _tmp50_;
+	if (_tmp54_) {
 		{
 			gint dim;
 			dim = 1;
 			{
-				gboolean _tmp59_;
-				_tmp59_ = TRUE;
+				gboolean _tmp55_;
+				_tmp55_ = TRUE;
 				while (TRUE) {
-					gboolean _tmp60_;
-					gint _tmp62_;
-					ValaArrayType* _tmp63_;
+					gboolean _tmp56_;
+					gint _tmp58_;
+					ValaArrayType* _tmp59_;
+					gint _tmp60_;
+					gint _tmp61_;
+					ValaCCodeStruct* _tmp62_;
+					ValaParameter* _tmp63_;
 					gint _tmp64_;
-					gint _tmp65_;
-					ValaCCodeStruct* _tmp66_;
-					ValaParameter* _tmp67_;
-					gint _tmp68_;
-					gchar* _tmp69_ = NULL;
-					gchar* _tmp70_;
-					_tmp60_ = _tmp59_;
-					if (!_tmp60_) {
-						gint _tmp61_;
-						_tmp61_ = dim;
-						dim = _tmp61_ + 1;
+					gchar* _tmp65_ = NULL;
+					gchar* _tmp66_;
+					_tmp56_ = _tmp55_;
+					if (!_tmp56_) {
+						gint _tmp57_;
+						_tmp57_ = dim;
+						dim = _tmp57_ + 1;
 					}
-					_tmp59_ = FALSE;
-					_tmp62_ = dim;
-					_tmp63_ = array_type;
-					_tmp64_ = vala_array_type_get_rank (_tmp63_);
-					_tmp65_ = _tmp64_;
-					if (!(_tmp62_ <= _tmp65_)) {
+					_tmp55_ = FALSE;
+					_tmp58_ = dim;
+					_tmp59_ = array_type;
+					_tmp60_ = vala_array_type_get_rank (_tmp59_);
+					_tmp61_ = _tmp60_;
+					if (!(_tmp58_ <= _tmp61_)) {
 						break;
 					}
-					_tmp66_ = data;
-					_tmp67_ = param;
-					_tmp68_ = dim;
-					_tmp69_ = vala_ccode_base_module_get_parameter_array_length_cname (self, _tmp67_, _tmp68_);
-					_tmp70_ = _tmp69_;
-					vala_ccode_struct_add_field (_tmp66_, "gint", _tmp70_, NULL);
-					_g_free0 (_tmp70_);
+					_tmp62_ = data;
+					_tmp63_ = param;
+					_tmp64_ = dim;
+					_tmp65_ = vala_ccode_base_module_get_parameter_array_length_cname (self, _tmp63_, _tmp64_);
+					_tmp66_ = _tmp65_;
+					vala_ccode_struct_add_field (_tmp62_, "gint", _tmp66_, NULL);
+					_g_free0 (_tmp66_);
 				}
 			}
 		}
 	} else {
-		gboolean _tmp71_ = FALSE;
-		ValaDelegateType* _tmp72_;
-		gboolean _tmp78_;
-		_tmp72_ = deleg_type;
-		if (_tmp72_ != NULL) {
-			ValaDelegateType* _tmp73_;
-			ValaDelegate* _tmp74_;
-			ValaDelegate* _tmp75_;
-			gboolean _tmp76_;
-			gboolean _tmp77_;
-			_tmp73_ = deleg_type;
-			_tmp74_ = vala_delegate_type_get_delegate_symbol (_tmp73_);
-			_tmp75_ = _tmp74_;
-			_tmp76_ = vala_delegate_get_has_target (_tmp75_);
-			_tmp77_ = _tmp76_;
-			_tmp71_ = _tmp77_;
+		gboolean _tmp67_ = FALSE;
+		ValaDelegateType* _tmp68_;
+		gboolean _tmp74_;
+		_tmp68_ = deleg_type;
+		if (_tmp68_ != NULL) {
+			ValaDelegateType* _tmp69_;
+			ValaDelegate* _tmp70_;
+			ValaDelegate* _tmp71_;
+			gboolean _tmp72_;
+			gboolean _tmp73_;
+			_tmp69_ = deleg_type;
+			_tmp70_ = vala_delegate_type_get_delegate_symbol (_tmp69_);
+			_tmp71_ = _tmp70_;
+			_tmp72_ = vala_delegate_get_has_target (_tmp71_);
+			_tmp73_ = _tmp72_;
+			_tmp67_ = _tmp73_;
 		} else {
-			_tmp71_ = FALSE;
-		}
-		_tmp78_ = _tmp71_;
-		if (_tmp78_) {
-			ValaCCodeStruct* _tmp79_;
-			ValaParameter* _tmp80_;
-			const gchar* _tmp81_;
-			const gchar* _tmp82_;
-			gchar* _tmp83_ = NULL;
-			gchar* _tmp84_;
-			gchar* _tmp85_ = NULL;
-			gchar* _tmp86_;
-			ValaParameter* _tmp87_;
-			ValaDataType* _tmp88_;
-			ValaDataType* _tmp89_;
-			gboolean _tmp90_;
-			gboolean _tmp91_;
-			_tmp79_ = data;
-			_tmp80_ = param;
-			_tmp81_ = vala_symbol_get_name ((ValaSymbol*) _tmp80_);
-			_tmp82_ = _tmp81_;
-			_tmp83_ = vala_ccode_base_module_get_variable_cname (self, _tmp82_);
-			_tmp84_ = _tmp83_;
-			_tmp85_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp84_);
-			_tmp86_ = _tmp85_;
-			vala_ccode_struct_add_field (_tmp79_, "gpointer", _tmp86_, NULL);
-			_g_free0 (_tmp86_);
-			_g_free0 (_tmp84_);
-			_tmp87_ = param;
-			_tmp88_ = vala_variable_get_variable_type ((ValaVariable*) _tmp87_);
-			_tmp89_ = _tmp88_;
-			_tmp90_ = vala_data_type_get_value_owned (_tmp89_);
-			_tmp91_ = _tmp90_;
-			if (_tmp91_) {
-				ValaCCodeStruct* _tmp92_;
-				ValaParameter* _tmp93_;
-				const gchar* _tmp94_;
-				const gchar* _tmp95_;
-				gchar* _tmp96_ = NULL;
-				gchar* _tmp97_;
-				gchar* _tmp98_ = NULL;
-				gchar* _tmp99_;
-				ValaParameter* _tmp100_;
-				ValaTargetValue* _tmp101_ = NULL;
+			_tmp67_ = FALSE;
+		}
+		_tmp74_ = _tmp67_;
+		if (_tmp74_) {
+			ValaCCodeStruct* _tmp75_;
+			ValaParameter* _tmp76_;
+			gchar* _tmp77_ = NULL;
+			gchar* _tmp78_;
+			ValaParameter* _tmp79_;
+			ValaDataType* _tmp80_;
+			ValaDataType* _tmp81_;
+			gboolean _tmp82_;
+			gboolean _tmp83_;
+			_tmp75_ = data;
+			_tmp76_ = param;
+			_tmp77_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp76_);
+			_tmp78_ = _tmp77_;
+			vala_ccode_struct_add_field (_tmp75_, "gpointer", _tmp78_, NULL);
+			_g_free0 (_tmp78_);
+			_tmp79_ = param;
+			_tmp80_ = vala_variable_get_variable_type ((ValaVariable*) _tmp79_);
+			_tmp81_ = _tmp80_;
+			_tmp82_ = vala_data_type_get_value_owned (_tmp81_);
+			_tmp83_ = _tmp82_;
+			if (_tmp83_) {
+				ValaCCodeStruct* _tmp84_;
+				ValaParameter* _tmp85_;
+				const gchar* _tmp86_;
+				const gchar* _tmp87_;
+				gchar* _tmp88_ = NULL;
+				gchar* _tmp89_;
+				gchar* _tmp90_ = NULL;
+				gchar* _tmp91_;
+				ValaParameter* _tmp92_;
+				ValaTargetValue* _tmp93_ = NULL;
 				ValaTargetValue* lvalue;
-				ValaTargetValue* _tmp102_;
-				ValaTargetValue* _tmp103_;
-				ValaCCodeExpression* _tmp104_ = NULL;
-				_tmp92_ = data;
-				_tmp93_ = param;
-				_tmp94_ = vala_symbol_get_name ((ValaSymbol*) _tmp93_);
-				_tmp95_ = _tmp94_;
-				_tmp96_ = vala_ccode_base_module_get_variable_cname (self, _tmp95_);
-				_tmp97_ = _tmp96_;
-				_tmp98_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp97_);
-				_tmp99_ = _tmp98_;
-				vala_ccode_struct_add_field (_tmp92_, "GDestroyNotify", _tmp99_, NULL);
-				_g_free0 (_tmp99_);
-				_g_free0 (_tmp97_);
-				_tmp100_ = param;
-				_tmp101_ = vala_ccode_base_module_get_parameter_cvalue (self, _tmp100_);
-				lvalue = _tmp101_;
-				_tmp102_ = value;
-				_tmp103_ = lvalue;
-				_tmp104_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp103_);
-				_vala_ccode_node_unref0 (VALA_GLIB_VALUE (_tmp102_)->delegate_target_destroy_notify_cvalue);
-				VALA_GLIB_VALUE (_tmp102_)->delegate_target_destroy_notify_cvalue = _tmp104_;
+				ValaTargetValue* _tmp94_;
+				ValaTargetValue* _tmp95_;
+				ValaCCodeExpression* _tmp96_ = NULL;
+				_tmp84_ = data;
+				_tmp85_ = param;
+				_tmp86_ = vala_symbol_get_name ((ValaSymbol*) _tmp85_);
+				_tmp87_ = _tmp86_;
+				_tmp88_ = vala_ccode_base_module_get_variable_cname (self, _tmp87_);
+				_tmp89_ = _tmp88_;
+				_tmp90_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp89_);
+				_tmp91_ = _tmp90_;
+				vala_ccode_struct_add_field (_tmp84_, "GDestroyNotify", _tmp91_, NULL);
+				_g_free0 (_tmp91_);
+				_g_free0 (_tmp89_);
+				_tmp92_ = param;
+				_tmp93_ = vala_ccode_base_module_get_parameter_cvalue (self, _tmp92_);
+				lvalue = _tmp93_;
+				_tmp94_ = value;
+				_tmp95_ = lvalue;
+				_tmp96_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp95_);
+				_vala_ccode_node_unref0 (VALA_GLIB_VALUE (_tmp94_)->delegate_target_destroy_notify_cvalue);
+				VALA_GLIB_VALUE (_tmp94_)->delegate_target_destroy_notify_cvalue = _tmp96_;
 				_vala_target_value_unref0 (lvalue);
 			}
 		}
 	}
-	_tmp105_ = param;
-	vala_parameter_set_captured (_tmp105_, TRUE);
-	_tmp106_ = param;
-	_tmp107_ = value;
-	vala_code_generator_store_parameter ((ValaCodeGenerator*) self, _tmp106_, _tmp107_);
+	_tmp97_ = param;
+	vala_parameter_set_captured (_tmp97_, TRUE);
+	_tmp98_ = param;
+	_tmp99_ = value;
+	vala_code_generator_store_parameter ((ValaCodeGenerator*) self, _tmp98_, _tmp99_);
 	_vala_code_node_unref0 (deleg_type);
 	_vala_code_node_unref0 (array_type);
 	_vala_target_value_unref0 (value);
@@ -9728,20 +9791,20 @@ static void vala_ccode_base_module_real_visit_block (ValaCodeVisitor* base, Vala
 	ValaBlock* _tmp19_;
 	gboolean _tmp20_;
 	gboolean _tmp21_;
-	ValaBlock* _tmp867_;
-	ValaSymbol* _tmp868_;
-	ValaSymbol* _tmp869_;
-	ValaBlock* _tmp950_;
-	gboolean _tmp951_;
-	gboolean _tmp952_;
-	gboolean _tmp980_ = FALSE;
-	gboolean _tmp981_ = FALSE;
-	ValaBlock* _tmp982_;
-	ValaCodeNode* _tmp983_;
-	ValaCodeNode* _tmp984_;
+	ValaBlock* _tmp904_;
+	ValaSymbol* _tmp905_;
+	ValaSymbol* _tmp906_;
+	ValaBlock* _tmp987_;
 	gboolean _tmp988_;
-	gboolean _tmp992_;
-	ValaCCodeBaseModuleEmitContext* _tmp995_;
+	gboolean _tmp989_;
+	gboolean _tmp1017_ = FALSE;
+	gboolean _tmp1018_ = FALSE;
+	ValaBlock* _tmp1019_;
+	ValaCodeNode* _tmp1020_;
+	ValaCodeNode* _tmp1021_;
+	gboolean _tmp1025_;
+	gboolean _tmp1029_;
+	ValaCCodeBaseModuleEmitContext* _tmp1032_;
 	self = (ValaCCodeBaseModule*) base;
 	g_return_if_fail (b != NULL);
 	_tmp0_ = self->emit_context;
@@ -9838,145 +9901,156 @@ static void vala_ccode_base_module_real_visit_block (ValaCodeVisitor* base, Vala
 		ValaCCodeIdentifier* _tmp219_;
 		ValaCCodeIdentifier* _tmp220_;
 		ValaBlock* _tmp221_;
-		ValaBlock* _tmp340_;
-		ValaSymbol* _tmp341_;
-		ValaSymbol* _tmp342_;
-		const gchar* _tmp401_;
-		gchar* _tmp402_;
-		gchar* _tmp403_;
-		const gchar* _tmp404_;
-		ValaCCodeVariableDeclarator* _tmp405_;
-		ValaCCodeVariableDeclarator* _tmp406_;
-		ValaCCodeTypeDefinition* _tmp407_;
-		ValaCCodeTypeDefinition* _tmp408_;
+		ValaBlock* _tmp347_;
+		ValaSymbol* _tmp348_;
+		ValaSymbol* _tmp349_;
+		const gchar* _tmp446_;
+		gchar* _tmp447_;
+		gchar* _tmp448_;
+		const gchar* _tmp449_;
+		ValaCCodeVariableDeclarator* _tmp450_;
+		ValaCCodeVariableDeclarator* _tmp451_;
+		ValaCCodeTypeDefinition* _tmp452_;
+		ValaCCodeTypeDefinition* _tmp453_;
 		ValaCCodeTypeDefinition* _typedef_;
-		ValaCCodeFile* _tmp409_;
-		ValaCCodeTypeDefinition* _tmp410_;
-		ValaCCodeFile* _tmp411_;
-		ValaCCodeStruct* _tmp412_;
-		gint _tmp413_;
-		gchar* _tmp414_ = NULL;
-		gchar* _tmp415_;
-		const gchar* _tmp416_;
-		gchar* _tmp417_;
-		gchar* _tmp418_;
-		ValaCCodeFunction* _tmp419_;
-		ValaCCodeFunction* _tmp420_;
-		ValaCCodeFunction* ref_fun;
-		ValaCCodeFunction* _tmp421_;
-		gint _tmp422_;
-		gchar* _tmp423_ = NULL;
-		gchar* _tmp424_;
-		const gchar* _tmp425_;
-		gchar* _tmp426_;
-		gchar* _tmp427_;
-		ValaCCodeParameter* _tmp428_;
-		ValaCCodeParameter* _tmp429_;
-		ValaCCodeFunction* _tmp430_;
-		ValaCCodeFunction* _tmp431_;
-		ValaCCodeIdentifier* _tmp432_;
-		ValaCCodeIdentifier* _tmp433_;
-		ValaCCodeFunctionCall* _tmp434_;
-		ValaCCodeFunctionCall* _tmp435_;
-		ValaCCodeFunctionCall* ccall;
-		ValaCCodeFunctionCall* _tmp436_;
-		gint _tmp437_;
-		gchar* _tmp438_ = NULL;
-		gchar* _tmp439_;
-		ValaCCodeIdentifier* _tmp440_;
-		ValaCCodeIdentifier* _tmp441_;
-		ValaCCodeMemberAccess* _tmp442_;
-		ValaCCodeMemberAccess* _tmp443_;
-		ValaCCodeUnaryExpression* _tmp444_;
-		ValaCCodeUnaryExpression* _tmp445_;
-		ValaCCodeFunction* _tmp446_;
-		ValaCCodeFunction* _tmp447_;
-		ValaCCodeFunctionCall* _tmp448_;
-		ValaCCodeFunction* _tmp449_;
-		ValaCCodeFunction* _tmp450_;
-		gint _tmp451_;
-		gchar* _tmp452_ = NULL;
-		gchar* _tmp453_;
-		ValaCCodeIdentifier* _tmp454_;
-		ValaCCodeIdentifier* _tmp455_;
+		ValaCCodeFile* _tmp454_;
+		ValaCCodeTypeDefinition* _tmp455_;
 		ValaCCodeFile* _tmp456_;
-		ValaCCodeFunction* _tmp457_;
-		ValaCCodeFile* _tmp458_;
-		ValaCCodeFunction* _tmp459_;
-		gint _tmp460_;
-		gchar* _tmp461_ = NULL;
+		ValaCCodeStruct* _tmp457_;
+		gint _tmp458_;
+		gchar* _tmp459_ = NULL;
+		gchar* _tmp460_;
+		const gchar* _tmp461_;
 		gchar* _tmp462_;
-		ValaCCodeFunction* _tmp463_;
+		gchar* _tmp463_;
 		ValaCCodeFunction* _tmp464_;
-		ValaCCodeFunction* unref_fun;
 		ValaCCodeFunction* _tmp465_;
-		gint _tmp466_;
-		gchar* _tmp467_ = NULL;
-		gchar* _tmp468_;
-		const gchar* _tmp469_;
-		gchar* _tmp470_;
+		ValaCCodeFunction* ref_fun;
+		ValaCCodeFunction* _tmp466_;
+		gint _tmp467_;
+		gchar* _tmp468_ = NULL;
+		gchar* _tmp469_;
+		const gchar* _tmp470_;
 		gchar* _tmp471_;
-		ValaCCodeParameter* _tmp472_;
+		gchar* _tmp472_;
 		ValaCCodeParameter* _tmp473_;
-		ValaCCodeFunction* _tmp474_;
+		ValaCCodeParameter* _tmp474_;
 		ValaCCodeFunction* _tmp475_;
-		ValaCCodeIdentifier* _tmp476_;
+		ValaCCodeFunction* _tmp476_;
 		ValaCCodeIdentifier* _tmp477_;
-		ValaCCodeFunctionCall* _tmp478_;
+		ValaCCodeIdentifier* _tmp478_;
 		ValaCCodeFunctionCall* _tmp479_;
-		gint _tmp480_;
-		gchar* _tmp481_ = NULL;
-		gchar* _tmp482_;
-		ValaCCodeIdentifier* _tmp483_;
-		ValaCCodeIdentifier* _tmp484_;
-		ValaCCodeMemberAccess* _tmp485_;
-		ValaCCodeMemberAccess* _tmp486_;
-		ValaCCodeUnaryExpression* _tmp487_;
-		ValaCCodeUnaryExpression* _tmp488_;
-		ValaCCodeFunction* _tmp489_;
-		ValaCCodeFunction* _tmp490_;
-		ValaCCodeFunctionCall* _tmp491_;
-		gint _tmp492_;
-		gchar* _tmp493_ = NULL;
-		gchar* _tmp494_;
-		ValaCCodeIdentifier* _tmp495_;
-		ValaCCodeExpression* _tmp496_;
+		ValaCCodeFunctionCall* _tmp480_;
+		ValaCCodeFunctionCall* ccall;
+		ValaCCodeFunctionCall* _tmp481_;
+		gint _tmp482_;
+		gchar* _tmp483_ = NULL;
+		gchar* _tmp484_;
+		ValaCCodeIdentifier* _tmp485_;
+		ValaCCodeIdentifier* _tmp486_;
+		ValaCCodeMemberAccess* _tmp487_;
+		ValaCCodeMemberAccess* _tmp488_;
+		ValaCCodeUnaryExpression* _tmp489_;
+		ValaCCodeUnaryExpression* _tmp490_;
+		ValaCCodeFunction* _tmp491_;
+		ValaCCodeFunction* _tmp492_;
+		ValaCCodeFunctionCall* _tmp493_;
+		ValaCCodeFunction* _tmp494_;
+		ValaCCodeFunction* _tmp495_;
+		gint _tmp496_;
+		gchar* _tmp497_ = NULL;
+		gchar* _tmp498_;
+		ValaCCodeIdentifier* _tmp499_;
+		ValaCCodeIdentifier* _tmp500_;
+		ValaCCodeFile* _tmp501_;
+		ValaCCodeFunction* _tmp502_;
+		ValaCCodeFile* _tmp503_;
+		ValaCCodeFunction* _tmp504_;
+		gint _tmp505_;
+		gchar* _tmp506_ = NULL;
+		gchar* _tmp507_;
+		ValaCCodeFunction* _tmp508_;
+		ValaCCodeFunction* _tmp509_;
+		ValaCCodeFunction* unref_fun;
+		ValaCCodeFunction* _tmp510_;
+		ValaCCodeParameter* _tmp511_;
+		ValaCCodeParameter* _tmp512_;
+		ValaCCodeFunction* _tmp513_;
+		ValaCCodeFunction* _tmp514_;
+		ValaCCodeFunction* _tmp515_;
+		ValaCCodeFunction* _tmp516_;
+		const gchar* _tmp517_;
+		gchar* _tmp518_;
+		gchar* _tmp519_;
+		gint _tmp520_;
+		gchar* _tmp521_ = NULL;
+		gchar* _tmp522_;
+		ValaCCodeIdentifier* _tmp523_;
+		ValaCCodeIdentifier* _tmp524_;
+		const gchar* _tmp525_;
+		gchar* _tmp526_;
+		gchar* _tmp527_;
+		ValaCCodeCastExpression* _tmp528_;
+		ValaCCodeCastExpression* _tmp529_;
+		ValaCCodeVariableDeclarator* _tmp530_;
+		ValaCCodeVariableDeclarator* _tmp531_;
+		ValaCCodeIdentifier* _tmp532_;
+		ValaCCodeIdentifier* _tmp533_;
+		ValaCCodeFunctionCall* _tmp534_;
+		ValaCCodeFunctionCall* _tmp535_;
+		gint _tmp536_;
+		gchar* _tmp537_ = NULL;
+		gchar* _tmp538_;
+		ValaCCodeIdentifier* _tmp539_;
+		ValaCCodeIdentifier* _tmp540_;
+		ValaCCodeMemberAccess* _tmp541_;
+		ValaCCodeMemberAccess* _tmp542_;
+		ValaCCodeUnaryExpression* _tmp543_;
+		ValaCCodeUnaryExpression* _tmp544_;
+		ValaCCodeFunction* _tmp545_;
+		ValaCCodeFunction* _tmp546_;
+		ValaCCodeFunctionCall* _tmp547_;
+		gint _tmp548_;
+		gchar* _tmp549_ = NULL;
+		gchar* _tmp550_;
+		ValaCCodeIdentifier* _tmp551_;
+		ValaCCodeExpression* _tmp552_;
 		ValaCCodeExpression* outer_block;
-		ValaBlock* _tmp497_;
+		ValaBlock* _tmp553_;
 		ValaBlock* parent_closure_block;
-		ValaDataType* _tmp510_ = NULL;
-		ValaDataType* _tmp511_;
-		gboolean _tmp512_;
-		ValaMethod* _tmp530_;
-		ValaMethod* _tmp531_;
-		ValaBlock* _tmp637_;
-		ValaSymbol* _tmp638_;
-		ValaSymbol* _tmp639_;
-		ValaBlock* _tmp740_;
-		ValaCCodeIdentifier* _tmp794_;
-		ValaCCodeIdentifier* _tmp795_;
-		ValaCCodeFunctionCall* _tmp796_;
-		ValaCCodeFunctionCall* _tmp797_;
+		ValaDataType* _tmp566_ = NULL;
+		ValaDataType* _tmp567_;
+		gboolean _tmp568_;
+		ValaMethod* _tmp586_;
+		ValaMethod* _tmp587_;
+		ValaBlock* _tmp693_;
+		ValaSymbol* _tmp694_;
+		ValaSymbol* _tmp695_;
+		ValaBlock* _tmp776_;
+		ValaCCodeIdentifier* _tmp831_;
+		ValaCCodeIdentifier* _tmp832_;
+		ValaCCodeFunctionCall* _tmp833_;
+		ValaCCodeFunctionCall* _tmp834_;
 		ValaCCodeFunctionCall* data_free;
-		ValaCCodeFunctionCall* _tmp798_;
-		const gchar* _tmp799_;
-		ValaCCodeIdentifier* _tmp800_;
-		ValaCCodeIdentifier* _tmp801_;
-		ValaCCodeFunctionCall* _tmp802_;
-		gint _tmp803_;
-		gchar* _tmp804_ = NULL;
-		gchar* _tmp805_;
-		ValaCCodeIdentifier* _tmp806_;
-		ValaCCodeIdentifier* _tmp807_;
-		ValaCCodeFunction* _tmp808_;
-		ValaCCodeFunction* _tmp809_;
-		ValaCCodeFunctionCall* _tmp810_;
-		ValaCCodeFunction* _tmp811_;
-		ValaCCodeFunction* _tmp812_;
-		ValaCCodeFile* _tmp813_;
-		ValaCCodeFunction* _tmp814_;
-		ValaCCodeFile* _tmp815_;
-		ValaCCodeFunction* _tmp816_;
+		ValaCCodeFunctionCall* _tmp835_;
+		const gchar* _tmp836_;
+		ValaCCodeIdentifier* _tmp837_;
+		ValaCCodeIdentifier* _tmp838_;
+		ValaCCodeFunctionCall* _tmp839_;
+		gint _tmp840_;
+		gchar* _tmp841_ = NULL;
+		gchar* _tmp842_;
+		ValaCCodeIdentifier* _tmp843_;
+		ValaCCodeIdentifier* _tmp844_;
+		ValaCCodeFunction* _tmp845_;
+		ValaCCodeFunction* _tmp846_;
+		ValaCCodeFunctionCall* _tmp847_;
+		ValaCCodeFunction* _tmp848_;
+		ValaCCodeFunction* _tmp849_;
+		ValaCCodeFile* _tmp850_;
+		ValaCCodeFunction* _tmp851_;
+		ValaCCodeFile* _tmp852_;
+		ValaCCodeFunction* _tmp853_;
 		_tmp22_ = b;
 		_tmp23_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp22_);
 		_tmp24_ = _tmp23_;
@@ -10556,8 +10630,8 @@ static void vala_ccode_base_module_real_visit_block (ValaCodeVisitor* base, Vala
 			ValaDataType* _tmp264_;
 			gboolean _tmp265_;
 			gboolean _tmp274_;
-			ValaMethod* _tmp299_;
-			ValaMethod* _tmp300_;
+			ValaMethod* _tmp306_;
+			ValaMethod* _tmp307_;
 			_tmp252_ = vala_ccode_base_module_get_current_method (self);
 			_tmp253_ = _tmp252_;
 			if (VALA_IS_CREATION_METHOD (_tmp253_)) {
@@ -10631,16 +10705,21 @@ static void vala_ccode_base_module_real_visit_block (ValaCodeVisitor* base, Vala
 				ValaCCodeFunctionCall* _tmp286_;
 				ValaCCodeExpression* _tmp287_ = NULL;
 				ValaCCodeExpression* _tmp288_;
-				ValaCCodeFunction* _tmp289_;
-				ValaCCodeFunction* _tmp290_;
-				gint _tmp291_;
-				gchar* _tmp292_ = NULL;
-				gchar* _tmp293_;
-				ValaCCodeExpression* _tmp294_ = NULL;
+				ValaCCodeExpression* _tmp289_ = NULL;
+				gboolean _tmp290_ = FALSE;
+				ValaCCodeExpression* _tmp294_;
 				ValaCCodeExpression* _tmp295_;
-				ValaCCodeMemberAccess* _tmp296_;
-				ValaCCodeMemberAccess* _tmp297_;
-				ValaCCodeFunctionCall* _tmp298_;
+				ValaCCodeExpression* instance;
+				ValaCCodeFunction* _tmp296_;
+				ValaCCodeFunction* _tmp297_;
+				gint _tmp298_;
+				gchar* _tmp299_ = NULL;
+				gchar* _tmp300_;
+				ValaCCodeExpression* _tmp301_ = NULL;
+				ValaCCodeExpression* _tmp302_;
+				ValaCCodeMemberAccess* _tmp303_;
+				ValaCCodeMemberAccess* _tmp304_;
+				ValaCCodeExpression* _tmp305_;
 				_tmp275_ = vala_ccode_base_module_get_current_type_symbol (self);
 				_tmp276_ = _tmp275_;
 				_tmp277_ = vala_ccode_base_module_get_data_type_for_symbol (_tmp276_);
@@ -10660,147 +10739,166 @@ static void vala_ccode_base_module_real_visit_block (ValaCodeVisitor* base, Vala
 				_tmp288_ = _tmp287_;
 				vala_ccode_function_call_add_argument (_tmp286_, _tmp288_);
 				_vala_ccode_node_unref0 (_tmp288_);
-				_tmp289_ = vala_ccode_base_module_get_ccode (self);
-				_tmp290_ = _tmp289_;
-				_tmp291_ = block_id;
-				_tmp292_ = g_strdup_printf ("_data%d_", _tmp291_);
-				_tmp293_ = _tmp292_;
-				_tmp294_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp293_);
-				_tmp295_ = _tmp294_;
-				_tmp296_ = vala_ccode_member_access_new_pointer (_tmp295_, "self");
+				_tmp290_ = vala_ccode_base_module_is_in_destructor (self);
+				if (_tmp290_) {
+					ValaCCodeIdentifier* _tmp291_;
+					_tmp291_ = vala_ccode_identifier_new ("self");
+					_vala_ccode_node_unref0 (_tmp289_);
+					_tmp289_ = VALA_CCODE_EXPRESSION (_tmp291_);
+				} else {
+					ValaCCodeFunctionCall* _tmp292_;
+					ValaCCodeExpression* _tmp293_;
+					_tmp292_ = ref_call;
+					_tmp293_ = _vala_ccode_node_ref0 (VALA_CCODE_EXPRESSION (_tmp292_));
+					_vala_ccode_node_unref0 (_tmp289_);
+					_tmp289_ = _tmp293_;
+				}
+				_tmp294_ = _tmp289_;
+				_tmp295_ = _vala_ccode_node_ref0 (_tmp294_);
+				instance = _tmp295_;
+				_tmp296_ = vala_ccode_base_module_get_ccode (self);
 				_tmp297_ = _tmp296_;
-				_tmp298_ = ref_call;
-				vala_ccode_function_add_assignment (_tmp290_, (ValaCCodeExpression*) _tmp297_, (ValaCCodeExpression*) _tmp298_);
-				_vala_ccode_node_unref0 (_tmp297_);
-				_vala_ccode_node_unref0 (_tmp295_);
-				_g_free0 (_tmp293_);
+				_tmp298_ = block_id;
+				_tmp299_ = g_strdup_printf ("_data%d_", _tmp298_);
+				_tmp300_ = _tmp299_;
+				_tmp301_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp300_);
+				_tmp302_ = _tmp301_;
+				_tmp303_ = vala_ccode_member_access_new_pointer (_tmp302_, "self");
+				_tmp304_ = _tmp303_;
+				_tmp305_ = instance;
+				vala_ccode_function_add_assignment (_tmp297_, (ValaCCodeExpression*) _tmp304_, _tmp305_);
+				_vala_ccode_node_unref0 (_tmp304_);
+				_vala_ccode_node_unref0 (_tmp302_);
+				_g_free0 (_tmp300_);
+				_vala_ccode_node_unref0 (instance);
+				_vala_ccode_node_unref0 (_tmp289_);
 				_vala_ccode_node_unref0 (ref_call);
 			}
-			_tmp299_ = vala_ccode_base_module_get_current_method (self);
-			_tmp300_ = _tmp299_;
-			if (_tmp300_ != NULL) {
-				gchar* _tmp301_;
-				gchar* _tmp302_;
-				gchar* _tmp303_;
-				gchar** _tmp304_ = NULL;
+			_tmp306_ = vala_ccode_base_module_get_current_method (self);
+			_tmp307_ = _tmp306_;
+			if (_tmp307_ != NULL) {
+				gchar* _tmp308_;
+				gchar* _tmp309_;
+				gchar* _tmp310_;
+				gchar** _tmp311_ = NULL;
 				gchar** suffices;
 				gint suffices_length1;
 				gint _suffices_size_;
-				_tmp301_ = g_strdup ("type");
-				_tmp302_ = g_strdup ("dup_func");
-				_tmp303_ = g_strdup ("destroy_func");
-				_tmp304_ = g_new0 (gchar*, 3 + 1);
-				_tmp304_[0] = _tmp301_;
-				_tmp304_[1] = _tmp302_;
-				_tmp304_[2] = _tmp303_;
-				suffices = _tmp304_;
+				_tmp308_ = g_strdup ("type");
+				_tmp309_ = g_strdup ("dup_func");
+				_tmp310_ = g_strdup ("destroy_func");
+				_tmp311_ = g_new0 (gchar*, 3 + 1);
+				_tmp311_[0] = _tmp308_;
+				_tmp311_[1] = _tmp309_;
+				_tmp311_[2] = _tmp310_;
+				suffices = _tmp311_;
 				suffices_length1 = 3;
 				_suffices_size_ = suffices_length1;
 				{
-					ValaMethod* _tmp305_;
-					ValaMethod* _tmp306_;
-					ValaList* _tmp307_ = NULL;
+					ValaMethod* _tmp312_;
+					ValaMethod* _tmp313_;
+					ValaList* _tmp314_ = NULL;
 					ValaList* _type_param_list;
-					ValaList* _tmp308_;
-					gint _tmp309_;
-					gint _tmp310_;
+					ValaList* _tmp315_;
+					gint _tmp316_;
+					gint _tmp317_;
 					gint _type_param_size;
 					gint _type_param_index;
-					_tmp305_ = vala_ccode_base_module_get_current_method (self);
-					_tmp306_ = _tmp305_;
-					_tmp307_ = vala_method_get_type_parameters (_tmp306_);
-					_type_param_list = _tmp307_;
-					_tmp308_ = _type_param_list;
-					_tmp309_ = vala_collection_get_size ((ValaCollection*) _tmp308_);
-					_tmp310_ = _tmp309_;
-					_type_param_size = _tmp310_;
+					_tmp312_ = vala_ccode_base_module_get_current_method (self);
+					_tmp313_ = _tmp312_;
+					_tmp314_ = vala_method_get_type_parameters (_tmp313_);
+					_type_param_list = _tmp314_;
+					_tmp315_ = _type_param_list;
+					_tmp316_ = vala_collection_get_size ((ValaCollection*) _tmp315_);
+					_tmp317_ = _tmp316_;
+					_type_param_size = _tmp317_;
 					_type_param_index = -1;
 					while (TRUE) {
-						gint _tmp311_;
-						gint _tmp312_;
-						gint _tmp313_;
-						ValaList* _tmp314_;
-						gint _tmp315_;
-						gpointer _tmp316_ = NULL;
+						gint _tmp318_;
+						gint _tmp319_;
+						gint _tmp320_;
+						ValaList* _tmp321_;
+						gint _tmp322_;
+						gpointer _tmp323_ = NULL;
 						ValaTypeParameter* type_param;
-						gchar** _tmp317_;
-						gint _tmp317__length1;
-						_tmp311_ = _type_param_index;
-						_type_param_index = _tmp311_ + 1;
-						_tmp312_ = _type_param_index;
-						_tmp313_ = _type_param_size;
-						if (!(_tmp312_ < _tmp313_)) {
+						gchar** _tmp324_;
+						gint _tmp324__length1;
+						_tmp318_ = _type_param_index;
+						_type_param_index = _tmp318_ + 1;
+						_tmp319_ = _type_param_index;
+						_tmp320_ = _type_param_size;
+						if (!(_tmp319_ < _tmp320_)) {
 							break;
 						}
-						_tmp314_ = _type_param_list;
-						_tmp315_ = _type_param_index;
-						_tmp316_ = vala_list_get (_tmp314_, _tmp315_);
-						type_param = (ValaTypeParameter*) _tmp316_;
-						_tmp317_ = suffices;
-						_tmp317__length1 = suffices_length1;
+						_tmp321_ = _type_param_list;
+						_tmp322_ = _type_param_index;
+						_tmp323_ = vala_list_get (_tmp321_, _tmp322_);
+						type_param = (ValaTypeParameter*) _tmp323_;
+						_tmp324_ = suffices;
+						_tmp324__length1 = suffices_length1;
 						{
 							gchar** suffix_collection = NULL;
 							gint suffix_collection_length1 = 0;
 							gint _suffix_collection_size_ = 0;
 							gint suffix_it = 0;
-							suffix_collection = _tmp317_;
-							suffix_collection_length1 = _tmp317__length1;
-							for (suffix_it = 0; suffix_it < _tmp317__length1; suffix_it = suffix_it + 1) {
-								gchar* _tmp318_;
+							suffix_collection = _tmp324_;
+							suffix_collection_length1 = _tmp324__length1;
+							for (suffix_it = 0; suffix_it < _tmp324__length1; suffix_it = suffix_it + 1) {
+								gchar* _tmp325_;
 								gchar* suffix = NULL;
-								_tmp318_ = g_strdup (suffix_collection[suffix_it]);
-								suffix = _tmp318_;
+								_tmp325_ = g_strdup (suffix_collection[suffix_it]);
+								suffix = _tmp325_;
 								{
-									ValaTypeParameter* _tmp319_;
-									const gchar* _tmp320_;
-									const gchar* _tmp321_;
-									gchar* _tmp322_ = NULL;
-									gchar* _tmp323_;
-									const gchar* _tmp324_;
-									gchar* _tmp325_ = NULL;
-									gchar* _tmp326_;
+									ValaTypeParameter* _tmp326_;
+									const gchar* _tmp327_;
+									const gchar* _tmp328_;
+									gchar* _tmp329_ = NULL;
+									gchar* _tmp330_;
+									const gchar* _tmp331_;
+									gchar* _tmp332_ = NULL;
+									gchar* _tmp333_;
 									gchar* func_name;
-									ValaCCodeFunction* _tmp327_;
-									ValaCCodeFunction* _tmp328_;
-									gint _tmp329_;
-									gchar* _tmp330_ = NULL;
-									gchar* _tmp331_;
-									ValaCCodeExpression* _tmp332_ = NULL;
-									ValaCCodeExpression* _tmp333_;
-									const gchar* _tmp334_;
-									ValaCCodeMemberAccess* _tmp335_;
-									ValaCCodeMemberAccess* _tmp336_;
-									const gchar* _tmp337_;
-									ValaCCodeExpression* _tmp338_ = NULL;
-									ValaCCodeExpression* _tmp339_;
-									_tmp319_ = type_param;
-									_tmp320_ = vala_symbol_get_name ((ValaSymbol*) _tmp319_);
-									_tmp321_ = _tmp320_;
-									_tmp322_ = g_utf8_strdown (_tmp321_, (gssize) (-1));
-									_tmp323_ = _tmp322_;
-									_tmp324_ = suffix;
-									_tmp325_ = g_strdup_printf ("%s_%s", _tmp323_, _tmp324_);
-									_tmp326_ = _tmp325_;
-									_g_free0 (_tmp323_);
-									func_name = _tmp326_;
-									_tmp327_ = vala_ccode_base_module_get_ccode (self);
+									ValaCCodeFunction* _tmp334_;
+									ValaCCodeFunction* _tmp335_;
+									gint _tmp336_;
+									gchar* _tmp337_ = NULL;
+									gchar* _tmp338_;
+									ValaCCodeExpression* _tmp339_ = NULL;
+									ValaCCodeExpression* _tmp340_;
+									const gchar* _tmp341_;
+									ValaCCodeMemberAccess* _tmp342_;
+									ValaCCodeMemberAccess* _tmp343_;
+									const gchar* _tmp344_;
+									ValaCCodeExpression* _tmp345_ = NULL;
+									ValaCCodeExpression* _tmp346_;
+									_tmp326_ = type_param;
+									_tmp327_ = vala_symbol_get_name ((ValaSymbol*) _tmp326_);
 									_tmp328_ = _tmp327_;
-									_tmp329_ = block_id;
-									_tmp330_ = g_strdup_printf ("_data%d_", _tmp329_);
-									_tmp331_ = _tmp330_;
-									_tmp332_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp331_);
+									_tmp329_ = g_utf8_strdown (_tmp328_, (gssize) (-1));
+									_tmp330_ = _tmp329_;
+									_tmp331_ = suffix;
+									_tmp332_ = g_strdup_printf ("%s_%s", _tmp330_, _tmp331_);
 									_tmp333_ = _tmp332_;
-									_tmp334_ = func_name;
-									_tmp335_ = vala_ccode_member_access_new_pointer (_tmp333_, _tmp334_);
-									_tmp336_ = _tmp335_;
-									_tmp337_ = func_name;
-									_tmp338_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp337_);
-									_tmp339_ = _tmp338_;
-									vala_ccode_function_add_assignment (_tmp328_, (ValaCCodeExpression*) _tmp336_, _tmp339_);
-									_vala_ccode_node_unref0 (_tmp339_);
-									_vala_ccode_node_unref0 (_tmp336_);
-									_vala_ccode_node_unref0 (_tmp333_);
-									_g_free0 (_tmp331_);
+									_g_free0 (_tmp330_);
+									func_name = _tmp333_;
+									_tmp334_ = vala_ccode_base_module_get_ccode (self);
+									_tmp335_ = _tmp334_;
+									_tmp336_ = block_id;
+									_tmp337_ = g_strdup_printf ("_data%d_", _tmp336_);
+									_tmp338_ = _tmp337_;
+									_tmp339_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp338_);
+									_tmp340_ = _tmp339_;
+									_tmp341_ = func_name;
+									_tmp342_ = vala_ccode_member_access_new_pointer (_tmp340_, _tmp341_);
+									_tmp343_ = _tmp342_;
+									_tmp344_ = func_name;
+									_tmp345_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp344_);
+									_tmp346_ = _tmp345_;
+									vala_ccode_function_add_assignment (_tmp335_, (ValaCCodeExpression*) _tmp343_, _tmp346_);
+									_vala_ccode_node_unref0 (_tmp346_);
+									_vala_ccode_node_unref0 (_tmp343_);
+									_vala_ccode_node_unref0 (_tmp340_);
+									_g_free0 (_tmp338_);
 									_g_free0 (func_name);
 									_g_free0 (suffix);
 								}
@@ -10813,585 +10911,696 @@ static void vala_ccode_base_module_real_visit_block (ValaCodeVisitor* base, Vala
 				suffices = (_vala_array_free (suffices, suffices_length1, (GDestroyNotify) g_free), NULL);
 			}
 		}
-		_tmp340_ = b;
-		_tmp341_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp340_);
-		_tmp342_ = _tmp341_;
-		if (VALA_IS_METHOD (_tmp342_)) {
-			ValaBlock* _tmp343_;
-			ValaSymbol* _tmp344_;
-			ValaSymbol* _tmp345_;
-			ValaMethod* _tmp346_;
+		_tmp347_ = b;
+		_tmp348_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp347_);
+		_tmp349_ = _tmp348_;
+		if (VALA_IS_METHOD (_tmp349_)) {
+			ValaBlock* _tmp350_;
+			ValaSymbol* _tmp351_;
+			ValaSymbol* _tmp352_;
+			ValaMethod* _tmp353_;
 			ValaMethod* m;
-			ValaMethod* _tmp364_;
-			gboolean _tmp365_;
-			gboolean _tmp366_;
-			_tmp343_ = b;
-			_tmp344_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp343_);
-			_tmp345_ = _tmp344_;
-			_tmp346_ = _vala_code_node_ref0 (VALA_METHOD (_tmp345_));
-			m = _tmp346_;
+			ValaMethod* _tmp371_;
+			gboolean _tmp372_;
+			gboolean _tmp373_;
+			_tmp350_ = b;
+			_tmp351_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp350_);
+			_tmp352_ = _tmp351_;
+			_tmp353_ = _vala_code_node_ref0 (VALA_METHOD (_tmp352_));
+			m = _tmp353_;
 			{
-				ValaMethod* _tmp347_;
-				ValaList* _tmp348_ = NULL;
+				ValaMethod* _tmp354_;
+				ValaList* _tmp355_ = NULL;
 				ValaList* _param_list;
-				ValaList* _tmp349_;
-				gint _tmp350_;
-				gint _tmp351_;
+				ValaList* _tmp356_;
+				gint _tmp357_;
+				gint _tmp358_;
 				gint _param_size;
 				gint _param_index;
-				_tmp347_ = m;
-				_tmp348_ = vala_method_get_parameters (_tmp347_);
-				_param_list = _tmp348_;
-				_tmp349_ = _param_list;
-				_tmp350_ = vala_collection_get_size ((ValaCollection*) _tmp349_);
-				_tmp351_ = _tmp350_;
-				_param_size = _tmp351_;
+				_tmp354_ = m;
+				_tmp355_ = vala_method_get_parameters (_tmp354_);
+				_param_list = _tmp355_;
+				_tmp356_ = _param_list;
+				_tmp357_ = vala_collection_get_size ((ValaCollection*) _tmp356_);
+				_tmp358_ = _tmp357_;
+				_param_size = _tmp358_;
 				_param_index = -1;
 				while (TRUE) {
-					gint _tmp352_;
-					gint _tmp353_;
-					gint _tmp354_;
-					ValaList* _tmp355_;
-					gint _tmp356_;
-					gpointer _tmp357_ = NULL;
+					gint _tmp359_;
+					gint _tmp360_;
+					gint _tmp361_;
+					ValaList* _tmp362_;
+					gint _tmp363_;
+					gpointer _tmp364_ = NULL;
 					ValaParameter* param;
-					ValaParameter* _tmp358_;
-					gboolean _tmp359_;
-					gboolean _tmp360_;
-					_tmp352_ = _param_index;
-					_param_index = _tmp352_ + 1;
-					_tmp353_ = _param_index;
-					_tmp354_ = _param_size;
-					if (!(_tmp353_ < _tmp354_)) {
+					ValaParameter* _tmp365_;
+					gboolean _tmp366_;
+					gboolean _tmp367_;
+					_tmp359_ = _param_index;
+					_param_index = _tmp359_ + 1;
+					_tmp360_ = _param_index;
+					_tmp361_ = _param_size;
+					if (!(_tmp360_ < _tmp361_)) {
 						break;
 					}
-					_tmp355_ = _param_list;
-					_tmp356_ = _param_index;
-					_tmp357_ = vala_list_get (_tmp355_, _tmp356_);
-					param = (ValaParameter*) _tmp357_;
-					_tmp358_ = param;
-					_tmp359_ = vala_parameter_get_captured (_tmp358_);
-					_tmp360_ = _tmp359_;
-					if (_tmp360_) {
-						ValaParameter* _tmp361_;
-						ValaCCodeStruct* _tmp362_;
-						gint _tmp363_;
-						_tmp361_ = param;
-						_tmp362_ = data;
-						_tmp363_ = block_id;
-						vala_ccode_base_module_capture_parameter (self, _tmp361_, _tmp362_, _tmp363_);
+					_tmp362_ = _param_list;
+					_tmp363_ = _param_index;
+					_tmp364_ = vala_list_get (_tmp362_, _tmp363_);
+					param = (ValaParameter*) _tmp364_;
+					_tmp365_ = param;
+					_tmp366_ = vala_parameter_get_captured (_tmp365_);
+					_tmp367_ = _tmp366_;
+					if (_tmp367_) {
+						ValaParameter* _tmp368_;
+						ValaCCodeStruct* _tmp369_;
+						gint _tmp370_;
+						_tmp368_ = param;
+						_tmp369_ = data;
+						_tmp370_ = block_id;
+						vala_ccode_base_module_capture_parameter (self, _tmp368_, _tmp369_, _tmp370_);
 					}
 					_vala_code_node_unref0 (param);
 				}
 				_vala_iterable_unref0 (_param_list);
 			}
-			_tmp364_ = m;
-			_tmp365_ = vala_method_get_coroutine (_tmp364_);
-			_tmp366_ = _tmp365_;
-			if (_tmp366_) {
-				ValaCCodeStruct* _tmp367_;
-				ValaCCodeFunction* _tmp368_;
-				ValaCCodeFunction* _tmp369_;
-				gint _tmp370_;
-				gchar* _tmp371_ = NULL;
-				gchar* _tmp372_;
-				ValaCCodeExpression* _tmp373_ = NULL;
-				ValaCCodeExpression* _tmp374_;
-				ValaCCodeMemberAccess* _tmp375_;
-				ValaCCodeMemberAccess* _tmp376_;
-				ValaCCodeIdentifier* _tmp377_;
-				ValaCCodeIdentifier* _tmp378_;
-				_tmp367_ = data;
-				vala_ccode_struct_add_field (_tmp367_, "gpointer", "_async_data_", NULL);
-				_tmp368_ = vala_ccode_base_module_get_ccode (self);
-				_tmp369_ = _tmp368_;
-				_tmp370_ = block_id;
-				_tmp371_ = g_strdup_printf ("_data%d_", _tmp370_);
-				_tmp372_ = _tmp371_;
-				_tmp373_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp372_);
-				_tmp374_ = _tmp373_;
-				_tmp375_ = vala_ccode_member_access_new_pointer (_tmp374_, "_async_data_");
+			_tmp371_ = m;
+			_tmp372_ = vala_method_get_coroutine (_tmp371_);
+			_tmp373_ = _tmp372_;
+			if (_tmp373_) {
+				ValaCCodeStruct* _tmp374_;
+				ValaCCodeFunction* _tmp375_;
+				ValaCCodeFunction* _tmp376_;
+				gint _tmp377_;
+				gchar* _tmp378_ = NULL;
+				gchar* _tmp379_;
+				ValaCCodeExpression* _tmp380_ = NULL;
+				ValaCCodeExpression* _tmp381_;
+				ValaCCodeMemberAccess* _tmp382_;
+				ValaCCodeMemberAccess* _tmp383_;
+				ValaCCodeIdentifier* _tmp384_;
+				ValaCCodeIdentifier* _tmp385_;
+				_tmp374_ = data;
+				vala_ccode_struct_add_field (_tmp374_, "gpointer", "_async_data_", NULL);
+				_tmp375_ = vala_ccode_base_module_get_ccode (self);
 				_tmp376_ = _tmp375_;
-				_tmp377_ = vala_ccode_identifier_new ("_data_");
-				_tmp378_ = _tmp377_;
-				vala_ccode_function_add_assignment (_tmp369_, (ValaCCodeExpression*) _tmp376_, (ValaCCodeExpression*) _tmp378_);
-				_vala_ccode_node_unref0 (_tmp378_);
-				_vala_ccode_node_unref0 (_tmp376_);
-				_vala_ccode_node_unref0 (_tmp374_);
-				_g_free0 (_tmp372_);
+				_tmp377_ = block_id;
+				_tmp378_ = g_strdup_printf ("_data%d_", _tmp377_);
+				_tmp379_ = _tmp378_;
+				_tmp380_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp379_);
+				_tmp381_ = _tmp380_;
+				_tmp382_ = vala_ccode_member_access_new_pointer (_tmp381_, "_async_data_");
+				_tmp383_ = _tmp382_;
+				_tmp384_ = vala_ccode_identifier_new ("_data_");
+				_tmp385_ = _tmp384_;
+				vala_ccode_function_add_assignment (_tmp376_, (ValaCCodeExpression*) _tmp383_, (ValaCCodeExpression*) _tmp385_);
+				_vala_ccode_node_unref0 (_tmp385_);
+				_vala_ccode_node_unref0 (_tmp383_);
+				_vala_ccode_node_unref0 (_tmp381_);
+				_g_free0 (_tmp379_);
 			}
 			_vala_code_node_unref0 (m);
 		} else {
-			ValaBlock* _tmp379_;
-			ValaSymbol* _tmp380_;
-			ValaSymbol* _tmp381_;
-			_tmp379_ = b;
-			_tmp380_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp379_);
-			_tmp381_ = _tmp380_;
-			if (VALA_IS_PROPERTY_ACCESSOR (_tmp381_)) {
-				ValaBlock* _tmp382_;
-				ValaSymbol* _tmp383_;
-				ValaSymbol* _tmp384_;
-				ValaPropertyAccessor* _tmp385_;
+			ValaBlock* _tmp386_;
+			ValaSymbol* _tmp387_;
+			ValaSymbol* _tmp388_;
+			_tmp386_ = b;
+			_tmp387_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp386_);
+			_tmp388_ = _tmp387_;
+			if (VALA_IS_PROPERTY_ACCESSOR (_tmp388_)) {
+				ValaBlock* _tmp389_;
+				ValaSymbol* _tmp390_;
+				ValaSymbol* _tmp391_;
+				ValaPropertyAccessor* _tmp392_;
 				ValaPropertyAccessor* acc;
-				gboolean _tmp386_ = FALSE;
-				ValaPropertyAccessor* _tmp387_;
-				gboolean _tmp388_;
-				gboolean _tmp389_;
+				gboolean _tmp393_ = FALSE;
+				ValaPropertyAccessor* _tmp394_;
 				gboolean _tmp395_;
-				_tmp382_ = b;
-				_tmp383_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp382_);
-				_tmp384_ = _tmp383_;
-				_tmp385_ = _vala_code_node_ref0 (VALA_PROPERTY_ACCESSOR (_tmp384_));
-				acc = _tmp385_;
-				_tmp387_ = acc;
-				_tmp388_ = vala_property_accessor_get_readable (_tmp387_);
-				_tmp389_ = _tmp388_;
-				if (!_tmp389_) {
-					ValaPropertyAccessor* _tmp390_;
-					ValaParameter* _tmp391_;
-					ValaParameter* _tmp392_;
-					gboolean _tmp393_;
-					gboolean _tmp394_;
-					_tmp390_ = acc;
-					_tmp391_ = vala_property_accessor_get_value_parameter (_tmp390_);
-					_tmp392_ = _tmp391_;
-					_tmp393_ = vala_parameter_get_captured (_tmp392_);
-					_tmp394_ = _tmp393_;
-					_tmp386_ = _tmp394_;
+				gboolean _tmp396_;
+				gboolean _tmp402_;
+				_tmp389_ = b;
+				_tmp390_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp389_);
+				_tmp391_ = _tmp390_;
+				_tmp392_ = _vala_code_node_ref0 (VALA_PROPERTY_ACCESSOR (_tmp391_));
+				acc = _tmp392_;
+				_tmp394_ = acc;
+				_tmp395_ = vala_property_accessor_get_readable (_tmp394_);
+				_tmp396_ = _tmp395_;
+				if (!_tmp396_) {
+					ValaPropertyAccessor* _tmp397_;
+					ValaParameter* _tmp398_;
+					ValaParameter* _tmp399_;
+					gboolean _tmp400_;
+					gboolean _tmp401_;
+					_tmp397_ = acc;
+					_tmp398_ = vala_property_accessor_get_value_parameter (_tmp397_);
+					_tmp399_ = _tmp398_;
+					_tmp400_ = vala_parameter_get_captured (_tmp399_);
+					_tmp401_ = _tmp400_;
+					_tmp393_ = _tmp401_;
 				} else {
-					_tmp386_ = FALSE;
+					_tmp393_ = FALSE;
 				}
-				_tmp395_ = _tmp386_;
-				if (_tmp395_) {
-					ValaPropertyAccessor* _tmp396_;
-					ValaParameter* _tmp397_;
-					ValaParameter* _tmp398_;
-					ValaCCodeStruct* _tmp399_;
-					gint _tmp400_;
-					_tmp396_ = acc;
-					_tmp397_ = vala_property_accessor_get_value_parameter (_tmp396_);
-					_tmp398_ = _tmp397_;
-					_tmp399_ = data;
-					_tmp400_ = block_id;
-					vala_ccode_base_module_capture_parameter (self, _tmp398_, _tmp399_, _tmp400_);
+				_tmp402_ = _tmp393_;
+				if (_tmp402_) {
+					ValaPropertyAccessor* _tmp403_;
+					ValaParameter* _tmp404_;
+					ValaParameter* _tmp405_;
+					ValaCCodeStruct* _tmp406_;
+					gint _tmp407_;
+					_tmp403_ = acc;
+					_tmp404_ = vala_property_accessor_get_value_parameter (_tmp403_);
+					_tmp405_ = _tmp404_;
+					_tmp406_ = data;
+					_tmp407_ = block_id;
+					vala_ccode_base_module_capture_parameter (self, _tmp405_, _tmp406_, _tmp407_);
 				}
 				_vala_code_node_unref0 (acc);
+			} else {
+				ValaBlock* _tmp408_;
+				ValaSymbol* _tmp409_;
+				ValaSymbol* _tmp410_;
+				_tmp408_ = b;
+				_tmp409_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp408_);
+				_tmp410_ = _tmp409_;
+				if (VALA_IS_FOREACH_STATEMENT (_tmp410_)) {
+					ValaBlock* _tmp411_;
+					ValaSymbol* _tmp412_;
+					ValaSymbol* _tmp413_;
+					ValaForeachStatement* _tmp414_;
+					ValaForeachStatement* stmt;
+					gboolean _tmp415_ = FALSE;
+					ValaForeachStatement* _tmp416_;
+					gboolean _tmp417_;
+					gboolean _tmp418_;
+					gboolean _tmp424_;
+					_tmp411_ = b;
+					_tmp412_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp411_);
+					_tmp413_ = _tmp412_;
+					_tmp414_ = _vala_code_node_ref0 (VALA_FOREACH_STATEMENT (_tmp413_));
+					stmt = _tmp414_;
+					_tmp416_ = stmt;
+					_tmp417_ = vala_foreach_statement_get_use_iterator (_tmp416_);
+					_tmp418_ = _tmp417_;
+					if (!_tmp418_) {
+						ValaForeachStatement* _tmp419_;
+						ValaLocalVariable* _tmp420_;
+						ValaLocalVariable* _tmp421_;
+						gboolean _tmp422_;
+						gboolean _tmp423_;
+						_tmp419_ = stmt;
+						_tmp420_ = vala_foreach_statement_get_element_variable (_tmp419_);
+						_tmp421_ = _tmp420_;
+						_tmp422_ = vala_local_variable_get_captured (_tmp421_);
+						_tmp423_ = _tmp422_;
+						_tmp415_ = _tmp423_;
+					} else {
+						_tmp415_ = FALSE;
+					}
+					_tmp424_ = _tmp415_;
+					if (_tmp424_) {
+						ValaCCodeFunction* _tmp425_;
+						ValaCCodeFunction* _tmp426_;
+						gint _tmp427_;
+						gchar* _tmp428_ = NULL;
+						gchar* _tmp429_;
+						ValaCCodeExpression* _tmp430_ = NULL;
+						ValaCCodeExpression* _tmp431_;
+						ValaForeachStatement* _tmp432_;
+						ValaLocalVariable* _tmp433_;
+						ValaLocalVariable* _tmp434_;
+						gchar* _tmp435_ = NULL;
+						gchar* _tmp436_;
+						ValaCCodeMemberAccess* _tmp437_;
+						ValaCCodeMemberAccess* _tmp438_;
+						ValaForeachStatement* _tmp439_;
+						ValaLocalVariable* _tmp440_;
+						ValaLocalVariable* _tmp441_;
+						gchar* _tmp442_ = NULL;
+						gchar* _tmp443_;
+						ValaCCodeExpression* _tmp444_ = NULL;
+						ValaCCodeExpression* _tmp445_;
+						_tmp425_ = vala_ccode_base_module_get_ccode (self);
+						_tmp426_ = _tmp425_;
+						_tmp427_ = block_id;
+						_tmp428_ = g_strdup_printf ("_data%d_", _tmp427_);
+						_tmp429_ = _tmp428_;
+						_tmp430_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp429_);
+						_tmp431_ = _tmp430_;
+						_tmp432_ = stmt;
+						_tmp433_ = vala_foreach_statement_get_element_variable (_tmp432_);
+						_tmp434_ = _tmp433_;
+						_tmp435_ = vala_ccode_base_module_get_local_cname (self, _tmp434_);
+						_tmp436_ = _tmp435_;
+						_tmp437_ = vala_ccode_member_access_new_pointer (_tmp431_, _tmp436_);
+						_tmp438_ = _tmp437_;
+						_tmp439_ = stmt;
+						_tmp440_ = vala_foreach_statement_get_element_variable (_tmp439_);
+						_tmp441_ = _tmp440_;
+						_tmp442_ = vala_ccode_base_module_get_local_cname (self, _tmp441_);
+						_tmp443_ = _tmp442_;
+						_tmp444_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp443_);
+						_tmp445_ = _tmp444_;
+						vala_ccode_function_add_assignment (_tmp426_, (ValaCCodeExpression*) _tmp438_, _tmp445_);
+						_vala_ccode_node_unref0 (_tmp445_);
+						_g_free0 (_tmp443_);
+						_vala_ccode_node_unref0 (_tmp438_);
+						_g_free0 (_tmp436_);
+						_vala_ccode_node_unref0 (_tmp431_);
+						_g_free0 (_tmp429_);
+					}
+					_vala_code_node_unref0 (stmt);
+				}
 			}
 		}
-		_tmp401_ = struct_name;
-		_tmp402_ = g_strconcat ("struct _", _tmp401_, NULL);
-		_tmp403_ = _tmp402_;
-		_tmp404_ = struct_name;
-		_tmp405_ = vala_ccode_variable_declarator_new (_tmp404_, NULL, NULL);
-		_tmp406_ = _tmp405_;
-		_tmp407_ = vala_ccode_type_definition_new (_tmp403_, (ValaCCodeDeclarator*) _tmp406_);
-		_tmp408_ = _tmp407_;
-		_vala_ccode_node_unref0 (_tmp406_);
-		_g_free0 (_tmp403_);
-		_typedef_ = _tmp408_;
-		_tmp409_ = self->cfile;
-		_tmp410_ = _typedef_;
-		vala_ccode_file_add_type_declaration (_tmp409_, (ValaCCodeNode*) _tmp410_);
-		_tmp411_ = self->cfile;
-		_tmp412_ = data;
-		vala_ccode_file_add_type_definition (_tmp411_, (ValaCCodeNode*) _tmp412_);
-		_tmp413_ = block_id;
-		_tmp414_ = g_strdup_printf ("block%d_data_ref", _tmp413_);
-		_tmp415_ = _tmp414_;
-		_tmp416_ = struct_name;
-		_tmp417_ = g_strconcat (_tmp416_, "*", NULL);
-		_tmp418_ = _tmp417_;
-		_tmp419_ = vala_ccode_function_new (_tmp415_, _tmp418_);
-		_tmp420_ = _tmp419_;
-		_g_free0 (_tmp418_);
-		_g_free0 (_tmp415_);
-		ref_fun = _tmp420_;
-		_tmp421_ = ref_fun;
-		_tmp422_ = block_id;
-		_tmp423_ = g_strdup_printf ("_data%d_", _tmp422_);
-		_tmp424_ = _tmp423_;
-		_tmp425_ = struct_name;
-		_tmp426_ = g_strconcat (_tmp425_, "*", NULL);
-		_tmp427_ = _tmp426_;
-		_tmp428_ = vala_ccode_parameter_new (_tmp424_, _tmp427_);
-		_tmp429_ = _tmp428_;
-		vala_ccode_function_add_parameter (_tmp421_, _tmp429_);
-		_vala_ccode_node_unref0 (_tmp429_);
-		_g_free0 (_tmp427_);
-		_g_free0 (_tmp424_);
-		_tmp430_ = ref_fun;
-		vala_ccode_function_set_modifiers (_tmp430_, VALA_CCODE_MODIFIERS_STATIC);
-		_tmp431_ = ref_fun;
-		vala_ccode_base_module_push_function (self, _tmp431_);
-		_tmp432_ = vala_ccode_identifier_new ("g_atomic_int_inc");
-		_tmp433_ = _tmp432_;
-		_tmp434_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp433_);
-		_tmp435_ = _tmp434_;
-		_vala_ccode_node_unref0 (_tmp433_);
-		ccall = _tmp435_;
-		_tmp436_ = ccall;
-		_tmp437_ = block_id;
-		_tmp438_ = g_strdup_printf ("_data%d_", _tmp437_);
-		_tmp439_ = _tmp438_;
-		_tmp440_ = vala_ccode_identifier_new (_tmp439_);
-		_tmp441_ = _tmp440_;
-		_tmp442_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp441_, "_ref_count_");
-		_tmp443_ = _tmp442_;
-		_tmp444_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp443_);
-		_tmp445_ = _tmp444_;
-		vala_ccode_function_call_add_argument (_tmp436_, (ValaCCodeExpression*) _tmp445_);
-		_vala_ccode_node_unref0 (_tmp445_);
-		_vala_ccode_node_unref0 (_tmp443_);
-		_vala_ccode_node_unref0 (_tmp441_);
-		_g_free0 (_tmp439_);
-		_tmp446_ = vala_ccode_base_module_get_ccode (self);
-		_tmp447_ = _tmp446_;
-		_tmp448_ = ccall;
-		vala_ccode_function_add_expression (_tmp447_, (ValaCCodeExpression*) _tmp448_);
-		_tmp449_ = vala_ccode_base_module_get_ccode (self);
-		_tmp450_ = _tmp449_;
-		_tmp451_ = block_id;
-		_tmp452_ = g_strdup_printf ("_data%d_", _tmp451_);
+		_tmp446_ = struct_name;
+		_tmp447_ = g_strconcat ("struct _", _tmp446_, NULL);
+		_tmp448_ = _tmp447_;
+		_tmp449_ = struct_name;
+		_tmp450_ = vala_ccode_variable_declarator_new (_tmp449_, NULL, NULL);
+		_tmp451_ = _tmp450_;
+		_tmp452_ = vala_ccode_type_definition_new (_tmp448_, (ValaCCodeDeclarator*) _tmp451_);
 		_tmp453_ = _tmp452_;
-		_tmp454_ = vala_ccode_identifier_new (_tmp453_);
-		_tmp455_ = _tmp454_;
-		vala_ccode_function_add_return (_tmp450_, (ValaCCodeExpression*) _tmp455_);
-		_vala_ccode_node_unref0 (_tmp455_);
-		_g_free0 (_tmp453_);
-		vala_ccode_base_module_pop_function (self);
+		_vala_ccode_node_unref0 (_tmp451_);
+		_g_free0 (_tmp448_);
+		_typedef_ = _tmp453_;
+		_tmp454_ = self->cfile;
+		_tmp455_ = _typedef_;
+		vala_ccode_file_add_type_declaration (_tmp454_, (ValaCCodeNode*) _tmp455_);
 		_tmp456_ = self->cfile;
-		_tmp457_ = ref_fun;
-		vala_ccode_file_add_function_declaration (_tmp456_, _tmp457_);
-		_tmp458_ = self->cfile;
-		_tmp459_ = ref_fun;
-		vala_ccode_file_add_function (_tmp458_, _tmp459_);
-		_tmp460_ = block_id;
-		_tmp461_ = g_strdup_printf ("block%d_data_unref", _tmp460_);
-		_tmp462_ = _tmp461_;
-		_tmp463_ = vala_ccode_function_new (_tmp462_, "void");
-		_tmp464_ = _tmp463_;
-		_g_free0 (_tmp462_);
-		unref_fun = _tmp464_;
-		_tmp465_ = unref_fun;
-		_tmp466_ = block_id;
-		_tmp467_ = g_strdup_printf ("_data%d_", _tmp466_);
-		_tmp468_ = _tmp467_;
-		_tmp469_ = struct_name;
-		_tmp470_ = g_strconcat (_tmp469_, "*", NULL);
-		_tmp471_ = _tmp470_;
-		_tmp472_ = vala_ccode_parameter_new (_tmp468_, _tmp471_);
-		_tmp473_ = _tmp472_;
-		vala_ccode_function_add_parameter (_tmp465_, _tmp473_);
-		_vala_ccode_node_unref0 (_tmp473_);
-		_g_free0 (_tmp471_);
-		_g_free0 (_tmp468_);
-		_tmp474_ = unref_fun;
-		vala_ccode_function_set_modifiers (_tmp474_, VALA_CCODE_MODIFIERS_STATIC);
-		_tmp475_ = unref_fun;
-		vala_ccode_base_module_push_function (self, _tmp475_);
-		_tmp476_ = vala_ccode_identifier_new ("g_atomic_int_dec_and_test");
-		_tmp477_ = _tmp476_;
-		_tmp478_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp477_);
-		_vala_ccode_node_unref0 (ccall);
-		ccall = _tmp478_;
-		_vala_ccode_node_unref0 (_tmp477_);
-		_tmp479_ = ccall;
-		_tmp480_ = block_id;
-		_tmp481_ = g_strdup_printf ("_data%d_", _tmp480_);
-		_tmp482_ = _tmp481_;
-		_tmp483_ = vala_ccode_identifier_new (_tmp482_);
+		_tmp457_ = data;
+		vala_ccode_file_add_type_definition (_tmp456_, (ValaCCodeNode*) _tmp457_);
+		_tmp458_ = block_id;
+		_tmp459_ = g_strdup_printf ("block%d_data_ref", _tmp458_);
+		_tmp460_ = _tmp459_;
+		_tmp461_ = struct_name;
+		_tmp462_ = g_strconcat (_tmp461_, "*", NULL);
+		_tmp463_ = _tmp462_;
+		_tmp464_ = vala_ccode_function_new (_tmp460_, _tmp463_);
+		_tmp465_ = _tmp464_;
+		_g_free0 (_tmp463_);
+		_g_free0 (_tmp460_);
+		ref_fun = _tmp465_;
+		_tmp466_ = ref_fun;
+		_tmp467_ = block_id;
+		_tmp468_ = g_strdup_printf ("_data%d_", _tmp467_);
+		_tmp469_ = _tmp468_;
+		_tmp470_ = struct_name;
+		_tmp471_ = g_strconcat (_tmp470_, "*", NULL);
+		_tmp472_ = _tmp471_;
+		_tmp473_ = vala_ccode_parameter_new (_tmp469_, _tmp472_);
+		_tmp474_ = _tmp473_;
+		vala_ccode_function_add_parameter (_tmp466_, _tmp474_);
+		_vala_ccode_node_unref0 (_tmp474_);
+		_g_free0 (_tmp472_);
+		_g_free0 (_tmp469_);
+		_tmp475_ = ref_fun;
+		vala_ccode_function_set_modifiers (_tmp475_, VALA_CCODE_MODIFIERS_STATIC);
+		_tmp476_ = ref_fun;
+		vala_ccode_base_module_push_function (self, _tmp476_);
+		_tmp477_ = vala_ccode_identifier_new ("g_atomic_int_inc");
+		_tmp478_ = _tmp477_;
+		_tmp479_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp478_);
+		_tmp480_ = _tmp479_;
+		_vala_ccode_node_unref0 (_tmp478_);
+		ccall = _tmp480_;
+		_tmp481_ = ccall;
+		_tmp482_ = block_id;
+		_tmp483_ = g_strdup_printf ("_data%d_", _tmp482_);
 		_tmp484_ = _tmp483_;
-		_tmp485_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp484_, "_ref_count_");
+		_tmp485_ = vala_ccode_identifier_new (_tmp484_);
 		_tmp486_ = _tmp485_;
-		_tmp487_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp486_);
+		_tmp487_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp486_, "_ref_count_");
 		_tmp488_ = _tmp487_;
-		vala_ccode_function_call_add_argument (_tmp479_, (ValaCCodeExpression*) _tmp488_);
+		_tmp489_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp488_);
+		_tmp490_ = _tmp489_;
+		vala_ccode_function_call_add_argument (_tmp481_, (ValaCCodeExpression*) _tmp490_);
+		_vala_ccode_node_unref0 (_tmp490_);
 		_vala_ccode_node_unref0 (_tmp488_);
 		_vala_ccode_node_unref0 (_tmp486_);
-		_vala_ccode_node_unref0 (_tmp484_);
-		_g_free0 (_tmp482_);
-		_tmp489_ = vala_ccode_base_module_get_ccode (self);
-		_tmp490_ = _tmp489_;
-		_tmp491_ = ccall;
-		vala_ccode_function_open_if (_tmp490_, (ValaCCodeExpression*) _tmp491_);
-		_tmp492_ = block_id;
-		_tmp493_ = g_strdup_printf ("_data%d_", _tmp492_);
-		_tmp494_ = _tmp493_;
-		_tmp495_ = vala_ccode_identifier_new (_tmp494_);
-		_tmp496_ = (ValaCCodeExpression*) _tmp495_;
-		_g_free0 (_tmp494_);
-		outer_block = _tmp496_;
-		_tmp497_ = b;
-		parent_closure_block = _tmp497_;
+		_g_free0 (_tmp484_);
+		_tmp491_ = vala_ccode_base_module_get_ccode (self);
+		_tmp492_ = _tmp491_;
+		_tmp493_ = ccall;
+		vala_ccode_function_add_expression (_tmp492_, (ValaCCodeExpression*) _tmp493_);
+		_tmp494_ = vala_ccode_base_module_get_ccode (self);
+		_tmp495_ = _tmp494_;
+		_tmp496_ = block_id;
+		_tmp497_ = g_strdup_printf ("_data%d_", _tmp496_);
+		_tmp498_ = _tmp497_;
+		_tmp499_ = vala_ccode_identifier_new (_tmp498_);
+		_tmp500_ = _tmp499_;
+		vala_ccode_function_add_return (_tmp495_, (ValaCCodeExpression*) _tmp500_);
+		_vala_ccode_node_unref0 (_tmp500_);
+		_g_free0 (_tmp498_);
+		vala_ccode_base_module_pop_function (self);
+		_tmp501_ = self->cfile;
+		_tmp502_ = ref_fun;
+		vala_ccode_file_add_function_declaration (_tmp501_, _tmp502_);
+		_tmp503_ = self->cfile;
+		_tmp504_ = ref_fun;
+		vala_ccode_file_add_function (_tmp503_, _tmp504_);
+		_tmp505_ = block_id;
+		_tmp506_ = g_strdup_printf ("block%d_data_unref", _tmp505_);
+		_tmp507_ = _tmp506_;
+		_tmp508_ = vala_ccode_function_new (_tmp507_, "void");
+		_tmp509_ = _tmp508_;
+		_g_free0 (_tmp507_);
+		unref_fun = _tmp509_;
+		_tmp510_ = unref_fun;
+		_tmp511_ = vala_ccode_parameter_new ("_userdata_", "void *");
+		_tmp512_ = _tmp511_;
+		vala_ccode_function_add_parameter (_tmp510_, _tmp512_);
+		_vala_ccode_node_unref0 (_tmp512_);
+		_tmp513_ = unref_fun;
+		vala_ccode_function_set_modifiers (_tmp513_, VALA_CCODE_MODIFIERS_STATIC);
+		_tmp514_ = unref_fun;
+		vala_ccode_base_module_push_function (self, _tmp514_);
+		_tmp515_ = vala_ccode_base_module_get_ccode (self);
+		_tmp516_ = _tmp515_;
+		_tmp517_ = struct_name;
+		_tmp518_ = g_strconcat (_tmp517_, "*", NULL);
+		_tmp519_ = _tmp518_;
+		_tmp520_ = block_id;
+		_tmp521_ = g_strdup_printf ("_data%d_", _tmp520_);
+		_tmp522_ = _tmp521_;
+		_tmp523_ = vala_ccode_identifier_new ("_userdata_");
+		_tmp524_ = _tmp523_;
+		_tmp525_ = struct_name;
+		_tmp526_ = g_strconcat (_tmp525_, "*", NULL);
+		_tmp527_ = _tmp526_;
+		_tmp528_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp524_, _tmp527_);
+		_tmp529_ = _tmp528_;
+		_tmp530_ = vala_ccode_variable_declarator_new (_tmp522_, (ValaCCodeExpression*) _tmp529_, NULL);
+		_tmp531_ = _tmp530_;
+		vala_ccode_function_add_declaration (_tmp516_, _tmp519_, (ValaCCodeDeclarator*) _tmp531_, 0);
+		_vala_ccode_node_unref0 (_tmp531_);
+		_vala_ccode_node_unref0 (_tmp529_);
+		_g_free0 (_tmp527_);
+		_vala_ccode_node_unref0 (_tmp524_);
+		_g_free0 (_tmp522_);
+		_g_free0 (_tmp519_);
+		_tmp532_ = vala_ccode_identifier_new ("g_atomic_int_dec_and_test");
+		_tmp533_ = _tmp532_;
+		_tmp534_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp533_);
+		_vala_ccode_node_unref0 (ccall);
+		ccall = _tmp534_;
+		_vala_ccode_node_unref0 (_tmp533_);
+		_tmp535_ = ccall;
+		_tmp536_ = block_id;
+		_tmp537_ = g_strdup_printf ("_data%d_", _tmp536_);
+		_tmp538_ = _tmp537_;
+		_tmp539_ = vala_ccode_identifier_new (_tmp538_);
+		_tmp540_ = _tmp539_;
+		_tmp541_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp540_, "_ref_count_");
+		_tmp542_ = _tmp541_;
+		_tmp543_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp542_);
+		_tmp544_ = _tmp543_;
+		vala_ccode_function_call_add_argument (_tmp535_, (ValaCCodeExpression*) _tmp544_);
+		_vala_ccode_node_unref0 (_tmp544_);
+		_vala_ccode_node_unref0 (_tmp542_);
+		_vala_ccode_node_unref0 (_tmp540_);
+		_g_free0 (_tmp538_);
+		_tmp545_ = vala_ccode_base_module_get_ccode (self);
+		_tmp546_ = _tmp545_;
+		_tmp547_ = ccall;
+		vala_ccode_function_open_if (_tmp546_, (ValaCCodeExpression*) _tmp547_);
+		_tmp548_ = block_id;
+		_tmp549_ = g_strdup_printf ("_data%d_", _tmp548_);
+		_tmp550_ = _tmp549_;
+		_tmp551_ = vala_ccode_identifier_new (_tmp550_);
+		_tmp552_ = (ValaCCodeExpression*) _tmp551_;
+		_g_free0 (_tmp550_);
+		outer_block = _tmp552_;
+		_tmp553_ = b;
+		parent_closure_block = _tmp553_;
 		while (TRUE) {
-			ValaBlock* _tmp498_;
-			ValaSymbol* _tmp499_;
-			ValaSymbol* _tmp500_;
-			ValaBlock* _tmp501_ = NULL;
-			ValaBlock* _tmp502_;
-			ValaBlock* _tmp503_;
-			gint _tmp504_ = 0;
+			ValaBlock* _tmp554_;
+			ValaSymbol* _tmp555_;
+			ValaSymbol* _tmp556_;
+			ValaBlock* _tmp557_ = NULL;
+			ValaBlock* _tmp558_;
+			ValaBlock* _tmp559_;
+			gint _tmp560_ = 0;
 			gint parent_block_id;
-			ValaCCodeExpression* _tmp505_;
-			gint _tmp506_;
-			gchar* _tmp507_ = NULL;
-			gchar* _tmp508_;
-			ValaCCodeMemberAccess* _tmp509_;
-			_tmp498_ = parent_closure_block;
-			_tmp499_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp498_);
-			_tmp500_ = _tmp499_;
-			_tmp501_ = vala_ccode_base_module_next_closure_block (self, _tmp500_);
-			parent_closure_block = _tmp501_;
-			_tmp502_ = parent_closure_block;
-			if (_tmp502_ == NULL) {
+			ValaCCodeExpression* _tmp561_;
+			gint _tmp562_;
+			gchar* _tmp563_ = NULL;
+			gchar* _tmp564_;
+			ValaCCodeMemberAccess* _tmp565_;
+			_tmp554_ = parent_closure_block;
+			_tmp555_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp554_);
+			_tmp556_ = _tmp555_;
+			_tmp557_ = vala_ccode_base_module_next_closure_block (self, _tmp556_);
+			parent_closure_block = _tmp557_;
+			_tmp558_ = parent_closure_block;
+			if (_tmp558_ == NULL) {
 				break;
 			}
-			_tmp503_ = parent_closure_block;
-			_tmp504_ = vala_ccode_base_module_get_block_id (self, _tmp503_);
-			parent_block_id = _tmp504_;
-			_tmp505_ = outer_block;
-			_tmp506_ = parent_block_id;
-			_tmp507_ = g_strdup_printf ("_data%d_", _tmp506_);
-			_tmp508_ = _tmp507_;
-			_tmp509_ = vala_ccode_member_access_new_pointer (_tmp505_, _tmp508_);
+			_tmp559_ = parent_closure_block;
+			_tmp560_ = vala_ccode_base_module_get_block_id (self, _tmp559_);
+			parent_block_id = _tmp560_;
+			_tmp561_ = outer_block;
+			_tmp562_ = parent_block_id;
+			_tmp563_ = g_strdup_printf ("_data%d_", _tmp562_);
+			_tmp564_ = _tmp563_;
+			_tmp565_ = vala_ccode_member_access_new_pointer (_tmp561_, _tmp564_);
 			_vala_ccode_node_unref0 (outer_block);
-			outer_block = (ValaCCodeExpression*) _tmp509_;
-			_g_free0 (_tmp508_);
-		}
-		_tmp510_ = vala_ccode_base_module_get_this_type (self);
-		_tmp511_ = _tmp510_;
-		_tmp512_ = _tmp511_ != NULL;
-		_vala_code_node_unref0 (_tmp511_);
-		if (_tmp512_) {
-			ValaCCodeFunction* _tmp513_;
-			ValaCCodeFunction* _tmp514_;
-			ValaTypeSymbol* _tmp515_;
-			ValaTypeSymbol* _tmp516_;
-			gchar* _tmp517_ = NULL;
-			gchar* _tmp518_;
-			gchar* _tmp519_ = NULL;
-			gchar* _tmp520_;
-			ValaCCodeVariableDeclarator* _tmp521_;
-			ValaCCodeVariableDeclarator* _tmp522_;
-			ValaCCodeFunction* _tmp523_;
-			ValaCCodeFunction* _tmp524_;
-			ValaCCodeIdentifier* _tmp525_;
-			ValaCCodeIdentifier* _tmp526_;
-			ValaCCodeExpression* _tmp527_;
-			ValaCCodeMemberAccess* _tmp528_;
-			ValaCCodeMemberAccess* _tmp529_;
-			_tmp513_ = vala_ccode_base_module_get_ccode (self);
-			_tmp514_ = _tmp513_;
-			_tmp515_ = vala_ccode_base_module_get_current_type_symbol (self);
-			_tmp516_ = _tmp515_;
-			_tmp517_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp516_);
-			_tmp518_ = _tmp517_;
-			_tmp519_ = g_strdup_printf ("%s *", _tmp518_);
-			_tmp520_ = _tmp519_;
-			_tmp521_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
-			_tmp522_ = _tmp521_;
-			vala_ccode_function_add_declaration (_tmp514_, _tmp520_, (ValaCCodeDeclarator*) _tmp522_, 0);
-			_vala_ccode_node_unref0 (_tmp522_);
-			_g_free0 (_tmp520_);
-			_g_free0 (_tmp518_);
-			_tmp523_ = vala_ccode_base_module_get_ccode (self);
-			_tmp524_ = _tmp523_;
-			_tmp525_ = vala_ccode_identifier_new ("self");
-			_tmp526_ = _tmp525_;
-			_tmp527_ = outer_block;
-			_tmp528_ = vala_ccode_member_access_new_pointer (_tmp527_, "self");
-			_tmp529_ = _tmp528_;
-			vala_ccode_function_add_assignment (_tmp524_, (ValaCCodeExpression*) _tmp526_, (ValaCCodeExpression*) _tmp529_);
-			_vala_ccode_node_unref0 (_tmp529_);
-			_vala_ccode_node_unref0 (_tmp526_);
-		}
-		_tmp530_ = vala_ccode_base_module_get_current_method (self);
-		_tmp531_ = _tmp530_;
-		if (_tmp531_ != NULL) {
+			outer_block = (ValaCCodeExpression*) _tmp565_;
+			_g_free0 (_tmp564_);
+		}
+		_tmp566_ = vala_ccode_base_module_get_this_type (self);
+		_tmp567_ = _tmp566_;
+		_tmp568_ = _tmp567_ != NULL;
+		_vala_code_node_unref0 (_tmp567_);
+		if (_tmp568_) {
+			ValaCCodeFunction* _tmp569_;
+			ValaCCodeFunction* _tmp570_;
+			ValaTypeSymbol* _tmp571_;
+			ValaTypeSymbol* _tmp572_;
+			gchar* _tmp573_ = NULL;
+			gchar* _tmp574_;
+			gchar* _tmp575_ = NULL;
+			gchar* _tmp576_;
+			ValaCCodeVariableDeclarator* _tmp577_;
+			ValaCCodeVariableDeclarator* _tmp578_;
+			ValaCCodeFunction* _tmp579_;
+			ValaCCodeFunction* _tmp580_;
+			ValaCCodeIdentifier* _tmp581_;
+			ValaCCodeIdentifier* _tmp582_;
+			ValaCCodeExpression* _tmp583_;
+			ValaCCodeMemberAccess* _tmp584_;
+			ValaCCodeMemberAccess* _tmp585_;
+			_tmp569_ = vala_ccode_base_module_get_ccode (self);
+			_tmp570_ = _tmp569_;
+			_tmp571_ = vala_ccode_base_module_get_current_type_symbol (self);
+			_tmp572_ = _tmp571_;
+			_tmp573_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp572_);
+			_tmp574_ = _tmp573_;
+			_tmp575_ = g_strdup_printf ("%s *", _tmp574_);
+			_tmp576_ = _tmp575_;
+			_tmp577_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
+			_tmp578_ = _tmp577_;
+			vala_ccode_function_add_declaration (_tmp570_, _tmp576_, (ValaCCodeDeclarator*) _tmp578_, 0);
+			_vala_ccode_node_unref0 (_tmp578_);
+			_g_free0 (_tmp576_);
+			_g_free0 (_tmp574_);
+			_tmp579_ = vala_ccode_base_module_get_ccode (self);
+			_tmp580_ = _tmp579_;
+			_tmp581_ = vala_ccode_identifier_new ("self");
+			_tmp582_ = _tmp581_;
+			_tmp583_ = outer_block;
+			_tmp584_ = vala_ccode_member_access_new_pointer (_tmp583_, "self");
+			_tmp585_ = _tmp584_;
+			vala_ccode_function_add_assignment (_tmp580_, (ValaCCodeExpression*) _tmp582_, (ValaCCodeExpression*) _tmp585_);
+			_vala_ccode_node_unref0 (_tmp585_);
+			_vala_ccode_node_unref0 (_tmp582_);
+		}
+		_tmp586_ = vala_ccode_base_module_get_current_method (self);
+		_tmp587_ = _tmp586_;
+		if (_tmp587_ != NULL) {
 			{
-				ValaMethod* _tmp532_;
-				ValaMethod* _tmp533_;
-				ValaList* _tmp534_ = NULL;
+				ValaMethod* _tmp588_;
+				ValaMethod* _tmp589_;
+				ValaList* _tmp590_ = NULL;
 				ValaList* _type_param_list;
-				ValaList* _tmp535_;
-				gint _tmp536_;
-				gint _tmp537_;
+				ValaList* _tmp591_;
+				gint _tmp592_;
+				gint _tmp593_;
 				gint _type_param_size;
 				gint _type_param_index;
-				_tmp532_ = vala_ccode_base_module_get_current_method (self);
-				_tmp533_ = _tmp532_;
-				_tmp534_ = vala_method_get_type_parameters (_tmp533_);
-				_type_param_list = _tmp534_;
-				_tmp535_ = _type_param_list;
-				_tmp536_ = vala_collection_get_size ((ValaCollection*) _tmp535_);
-				_tmp537_ = _tmp536_;
-				_type_param_size = _tmp537_;
+				_tmp588_ = vala_ccode_base_module_get_current_method (self);
+				_tmp589_ = _tmp588_;
+				_tmp590_ = vala_method_get_type_parameters (_tmp589_);
+				_type_param_list = _tmp590_;
+				_tmp591_ = _type_param_list;
+				_tmp592_ = vala_collection_get_size ((ValaCollection*) _tmp591_);
+				_tmp593_ = _tmp592_;
+				_type_param_size = _tmp593_;
 				_type_param_index = -1;
 				while (TRUE) {
-					gint _tmp538_;
-					gint _tmp539_;
-					gint _tmp540_;
-					ValaList* _tmp541_;
-					gint _tmp542_;
-					gpointer _tmp543_ = NULL;
+					gint _tmp594_;
+					gint _tmp595_;
+					gint _tmp596_;
+					ValaList* _tmp597_;
+					gint _tmp598_;
+					gpointer _tmp599_ = NULL;
 					ValaTypeParameter* type_param;
 					gchar* func_name = NULL;
-					ValaTypeParameter* _tmp544_;
-					const gchar* _tmp545_;
-					const gchar* _tmp546_;
-					gchar* _tmp547_ = NULL;
-					gchar* _tmp548_;
-					gchar* _tmp549_ = NULL;
-					ValaCCodeFunction* _tmp550_;
-					ValaCCodeFunction* _tmp551_;
-					const gchar* _tmp552_;
-					ValaCCodeVariableDeclarator* _tmp553_;
-					ValaCCodeVariableDeclarator* _tmp554_;
-					ValaCCodeFunction* _tmp555_;
-					ValaCCodeFunction* _tmp556_;
-					const gchar* _tmp557_;
-					ValaCCodeIdentifier* _tmp558_;
-					ValaCCodeIdentifier* _tmp559_;
-					ValaCCodeExpression* _tmp560_;
-					const gchar* _tmp561_;
-					ValaCCodeMemberAccess* _tmp562_;
-					ValaCCodeMemberAccess* _tmp563_;
-					ValaTypeParameter* _tmp564_;
-					const gchar* _tmp565_;
-					const gchar* _tmp566_;
-					gchar* _tmp567_ = NULL;
-					gchar* _tmp568_;
-					gchar* _tmp569_ = NULL;
-					ValaCCodeFunction* _tmp570_;
-					ValaCCodeFunction* _tmp571_;
-					const gchar* _tmp572_;
-					ValaCCodeVariableDeclarator* _tmp573_;
-					ValaCCodeVariableDeclarator* _tmp574_;
-					ValaCCodeFunction* _tmp575_;
-					ValaCCodeFunction* _tmp576_;
-					const gchar* _tmp577_;
-					ValaCCodeIdentifier* _tmp578_;
-					ValaCCodeIdentifier* _tmp579_;
-					ValaCCodeExpression* _tmp580_;
-					const gchar* _tmp581_;
-					ValaCCodeMemberAccess* _tmp582_;
-					ValaCCodeMemberAccess* _tmp583_;
-					ValaTypeParameter* _tmp584_;
-					const gchar* _tmp585_;
-					const gchar* _tmp586_;
-					gchar* _tmp587_ = NULL;
-					gchar* _tmp588_;
-					gchar* _tmp589_ = NULL;
-					ValaCCodeFunction* _tmp590_;
-					ValaCCodeFunction* _tmp591_;
-					const gchar* _tmp592_;
-					ValaCCodeVariableDeclarator* _tmp593_;
-					ValaCCodeVariableDeclarator* _tmp594_;
-					ValaCCodeFunction* _tmp595_;
-					ValaCCodeFunction* _tmp596_;
-					const gchar* _tmp597_;
-					ValaCCodeIdentifier* _tmp598_;
-					ValaCCodeIdentifier* _tmp599_;
-					ValaCCodeExpression* _tmp600_;
+					ValaTypeParameter* _tmp600_;
 					const gchar* _tmp601_;
-					ValaCCodeMemberAccess* _tmp602_;
-					ValaCCodeMemberAccess* _tmp603_;
-					_tmp538_ = _type_param_index;
-					_type_param_index = _tmp538_ + 1;
-					_tmp539_ = _type_param_index;
-					_tmp540_ = _type_param_size;
-					if (!(_tmp539_ < _tmp540_)) {
+					const gchar* _tmp602_;
+					gchar* _tmp603_ = NULL;
+					gchar* _tmp604_;
+					gchar* _tmp605_ = NULL;
+					ValaCCodeFunction* _tmp606_;
+					ValaCCodeFunction* _tmp607_;
+					const gchar* _tmp608_;
+					ValaCCodeVariableDeclarator* _tmp609_;
+					ValaCCodeVariableDeclarator* _tmp610_;
+					ValaCCodeFunction* _tmp611_;
+					ValaCCodeFunction* _tmp612_;
+					const gchar* _tmp613_;
+					ValaCCodeIdentifier* _tmp614_;
+					ValaCCodeIdentifier* _tmp615_;
+					ValaCCodeExpression* _tmp616_;
+					const gchar* _tmp617_;
+					ValaCCodeMemberAccess* _tmp618_;
+					ValaCCodeMemberAccess* _tmp619_;
+					ValaTypeParameter* _tmp620_;
+					const gchar* _tmp621_;
+					const gchar* _tmp622_;
+					gchar* _tmp623_ = NULL;
+					gchar* _tmp624_;
+					gchar* _tmp625_ = NULL;
+					ValaCCodeFunction* _tmp626_;
+					ValaCCodeFunction* _tmp627_;
+					const gchar* _tmp628_;
+					ValaCCodeVariableDeclarator* _tmp629_;
+					ValaCCodeVariableDeclarator* _tmp630_;
+					ValaCCodeFunction* _tmp631_;
+					ValaCCodeFunction* _tmp632_;
+					const gchar* _tmp633_;
+					ValaCCodeIdentifier* _tmp634_;
+					ValaCCodeIdentifier* _tmp635_;
+					ValaCCodeExpression* _tmp636_;
+					const gchar* _tmp637_;
+					ValaCCodeMemberAccess* _tmp638_;
+					ValaCCodeMemberAccess* _tmp639_;
+					ValaTypeParameter* _tmp640_;
+					const gchar* _tmp641_;
+					const gchar* _tmp642_;
+					gchar* _tmp643_ = NULL;
+					gchar* _tmp644_;
+					gchar* _tmp645_ = NULL;
+					ValaCCodeFunction* _tmp646_;
+					ValaCCodeFunction* _tmp647_;
+					const gchar* _tmp648_;
+					ValaCCodeVariableDeclarator* _tmp649_;
+					ValaCCodeVariableDeclarator* _tmp650_;
+					ValaCCodeFunction* _tmp651_;
+					ValaCCodeFunction* _tmp652_;
+					const gchar* _tmp653_;
+					ValaCCodeIdentifier* _tmp654_;
+					ValaCCodeIdentifier* _tmp655_;
+					ValaCCodeExpression* _tmp656_;
+					const gchar* _tmp657_;
+					ValaCCodeMemberAccess* _tmp658_;
+					ValaCCodeMemberAccess* _tmp659_;
+					_tmp594_ = _type_param_index;
+					_type_param_index = _tmp594_ + 1;
+					_tmp595_ = _type_param_index;
+					_tmp596_ = _type_param_size;
+					if (!(_tmp595_ < _tmp596_)) {
 						break;
 					}
-					_tmp541_ = _type_param_list;
-					_tmp542_ = _type_param_index;
-					_tmp543_ = vala_list_get (_tmp541_, _tmp542_);
-					type_param = (ValaTypeParameter*) _tmp543_;
-					_tmp544_ = type_param;
-					_tmp545_ = vala_symbol_get_name ((ValaSymbol*) _tmp544_);
-					_tmp546_ = _tmp545_;
-					_tmp547_ = g_utf8_strdown (_tmp546_, (gssize) (-1));
-					_tmp548_ = _tmp547_;
-					_tmp549_ = g_strdup_printf ("%s_type", _tmp548_);
+					_tmp597_ = _type_param_list;
+					_tmp598_ = _type_param_index;
+					_tmp599_ = vala_list_get (_tmp597_, _tmp598_);
+					type_param = (ValaTypeParameter*) _tmp599_;
+					_tmp600_ = type_param;
+					_tmp601_ = vala_symbol_get_name ((ValaSymbol*) _tmp600_);
+					_tmp602_ = _tmp601_;
+					_tmp603_ = g_utf8_strdown (_tmp602_, (gssize) (-1));
+					_tmp604_ = _tmp603_;
+					_tmp605_ = g_strdup_printf ("%s_type", _tmp604_);
 					_g_free0 (func_name);
-					func_name = _tmp549_;
-					_g_free0 (_tmp548_);
-					_tmp550_ = vala_ccode_base_module_get_ccode (self);
-					_tmp551_ = _tmp550_;
-					_tmp552_ = func_name;
-					_tmp553_ = vala_ccode_variable_declarator_new (_tmp552_, NULL, NULL);
-					_tmp554_ = _tmp553_;
-					vala_ccode_function_add_declaration (_tmp551_, "GType", (ValaCCodeDeclarator*) _tmp554_, 0);
-					_vala_ccode_node_unref0 (_tmp554_);
-					_tmp555_ = vala_ccode_base_module_get_ccode (self);
-					_tmp556_ = _tmp555_;
-					_tmp557_ = func_name;
-					_tmp558_ = vala_ccode_identifier_new (_tmp557_);
-					_tmp559_ = _tmp558_;
-					_tmp560_ = outer_block;
-					_tmp561_ = func_name;
-					_tmp562_ = vala_ccode_member_access_new_pointer (_tmp560_, _tmp561_);
-					_tmp563_ = _tmp562_;
-					vala_ccode_function_add_assignment (_tmp556_, (ValaCCodeExpression*) _tmp559_, (ValaCCodeExpression*) _tmp563_);
-					_vala_ccode_node_unref0 (_tmp563_);
-					_vala_ccode_node_unref0 (_tmp559_);
-					_tmp564_ = type_param;
-					_tmp565_ = vala_symbol_get_name ((ValaSymbol*) _tmp564_);
-					_tmp566_ = _tmp565_;
-					_tmp567_ = g_utf8_strdown (_tmp566_, (gssize) (-1));
-					_tmp568_ = _tmp567_;
-					_tmp569_ = g_strdup_printf ("%s_dup_func", _tmp568_);
+					func_name = _tmp605_;
+					_g_free0 (_tmp604_);
+					_tmp606_ = vala_ccode_base_module_get_ccode (self);
+					_tmp607_ = _tmp606_;
+					_tmp608_ = func_name;
+					_tmp609_ = vala_ccode_variable_declarator_new (_tmp608_, NULL, NULL);
+					_tmp610_ = _tmp609_;
+					vala_ccode_function_add_declaration (_tmp607_, "GType", (ValaCCodeDeclarator*) _tmp610_, 0);
+					_vala_ccode_node_unref0 (_tmp610_);
+					_tmp611_ = vala_ccode_base_module_get_ccode (self);
+					_tmp612_ = _tmp611_;
+					_tmp613_ = func_name;
+					_tmp614_ = vala_ccode_identifier_new (_tmp613_);
+					_tmp615_ = _tmp614_;
+					_tmp616_ = outer_block;
+					_tmp617_ = func_name;
+					_tmp618_ = vala_ccode_member_access_new_pointer (_tmp616_, _tmp617_);
+					_tmp619_ = _tmp618_;
+					vala_ccode_function_add_assignment (_tmp612_, (ValaCCodeExpression*) _tmp615_, (ValaCCodeExpression*) _tmp619_);
+					_vala_ccode_node_unref0 (_tmp619_);
+					_vala_ccode_node_unref0 (_tmp615_);
+					_tmp620_ = type_param;
+					_tmp621_ = vala_symbol_get_name ((ValaSymbol*) _tmp620_);
+					_tmp622_ = _tmp621_;
+					_tmp623_ = g_utf8_strdown (_tmp622_, (gssize) (-1));
+					_tmp624_ = _tmp623_;
+					_tmp625_ = g_strdup_printf ("%s_dup_func", _tmp624_);
 					_g_free0 (func_name);
-					func_name = _tmp569_;
-					_g_free0 (_tmp568_);
-					_tmp570_ = vala_ccode_base_module_get_ccode (self);
-					_tmp571_ = _tmp570_;
-					_tmp572_ = func_name;
-					_tmp573_ = vala_ccode_variable_declarator_new (_tmp572_, NULL, NULL);
-					_tmp574_ = _tmp573_;
-					vala_ccode_function_add_declaration (_tmp571_, "GBoxedCopyFunc", (ValaCCodeDeclarator*) _tmp574_, 0);
-					_vala_ccode_node_unref0 (_tmp574_);
-					_tmp575_ = vala_ccode_base_module_get_ccode (self);
-					_tmp576_ = _tmp575_;
-					_tmp577_ = func_name;
-					_tmp578_ = vala_ccode_identifier_new (_tmp577_);
-					_tmp579_ = _tmp578_;
-					_tmp580_ = outer_block;
-					_tmp581_ = func_name;
-					_tmp582_ = vala_ccode_member_access_new_pointer (_tmp580_, _tmp581_);
-					_tmp583_ = _tmp582_;
-					vala_ccode_function_add_assignment (_tmp576_, (ValaCCodeExpression*) _tmp579_, (ValaCCodeExpression*) _tmp583_);
-					_vala_ccode_node_unref0 (_tmp583_);
-					_vala_ccode_node_unref0 (_tmp579_);
-					_tmp584_ = type_param;
-					_tmp585_ = vala_symbol_get_name ((ValaSymbol*) _tmp584_);
-					_tmp586_ = _tmp585_;
-					_tmp587_ = g_utf8_strdown (_tmp586_, (gssize) (-1));
-					_tmp588_ = _tmp587_;
-					_tmp589_ = g_strdup_printf ("%s_destroy_func", _tmp588_);
+					func_name = _tmp625_;
+					_g_free0 (_tmp624_);
+					_tmp626_ = vala_ccode_base_module_get_ccode (self);
+					_tmp627_ = _tmp626_;
+					_tmp628_ = func_name;
+					_tmp629_ = vala_ccode_variable_declarator_new (_tmp628_, NULL, NULL);
+					_tmp630_ = _tmp629_;
+					vala_ccode_function_add_declaration (_tmp627_, "GBoxedCopyFunc", (ValaCCodeDeclarator*) _tmp630_, 0);
+					_vala_ccode_node_unref0 (_tmp630_);
+					_tmp631_ = vala_ccode_base_module_get_ccode (self);
+					_tmp632_ = _tmp631_;
+					_tmp633_ = func_name;
+					_tmp634_ = vala_ccode_identifier_new (_tmp633_);
+					_tmp635_ = _tmp634_;
+					_tmp636_ = outer_block;
+					_tmp637_ = func_name;
+					_tmp638_ = vala_ccode_member_access_new_pointer (_tmp636_, _tmp637_);
+					_tmp639_ = _tmp638_;
+					vala_ccode_function_add_assignment (_tmp632_, (ValaCCodeExpression*) _tmp635_, (ValaCCodeExpression*) _tmp639_);
+					_vala_ccode_node_unref0 (_tmp639_);
+					_vala_ccode_node_unref0 (_tmp635_);
+					_tmp640_ = type_param;
+					_tmp641_ = vala_symbol_get_name ((ValaSymbol*) _tmp640_);
+					_tmp642_ = _tmp641_;
+					_tmp643_ = g_utf8_strdown (_tmp642_, (gssize) (-1));
+					_tmp644_ = _tmp643_;
+					_tmp645_ = g_strdup_printf ("%s_destroy_func", _tmp644_);
 					_g_free0 (func_name);
-					func_name = _tmp589_;
-					_g_free0 (_tmp588_);
-					_tmp590_ = vala_ccode_base_module_get_ccode (self);
-					_tmp591_ = _tmp590_;
-					_tmp592_ = func_name;
-					_tmp593_ = vala_ccode_variable_declarator_new (_tmp592_, NULL, NULL);
-					_tmp594_ = _tmp593_;
-					vala_ccode_function_add_declaration (_tmp591_, "GDestroyNotify", (ValaCCodeDeclarator*) _tmp594_, 0);
-					_vala_ccode_node_unref0 (_tmp594_);
-					_tmp595_ = vala_ccode_base_module_get_ccode (self);
-					_tmp596_ = _tmp595_;
-					_tmp597_ = func_name;
-					_tmp598_ = vala_ccode_identifier_new (_tmp597_);
-					_tmp599_ = _tmp598_;
-					_tmp600_ = outer_block;
-					_tmp601_ = func_name;
-					_tmp602_ = vala_ccode_member_access_new_pointer (_tmp600_, _tmp601_);
-					_tmp603_ = _tmp602_;
-					vala_ccode_function_add_assignment (_tmp596_, (ValaCCodeExpression*) _tmp599_, (ValaCCodeExpression*) _tmp603_);
-					_vala_ccode_node_unref0 (_tmp603_);
-					_vala_ccode_node_unref0 (_tmp599_);
+					func_name = _tmp645_;
+					_g_free0 (_tmp644_);
+					_tmp646_ = vala_ccode_base_module_get_ccode (self);
+					_tmp647_ = _tmp646_;
+					_tmp648_ = func_name;
+					_tmp649_ = vala_ccode_variable_declarator_new (_tmp648_, NULL, NULL);
+					_tmp650_ = _tmp649_;
+					vala_ccode_function_add_declaration (_tmp647_, "GDestroyNotify", (ValaCCodeDeclarator*) _tmp650_, 0);
+					_vala_ccode_node_unref0 (_tmp650_);
+					_tmp651_ = vala_ccode_base_module_get_ccode (self);
+					_tmp652_ = _tmp651_;
+					_tmp653_ = func_name;
+					_tmp654_ = vala_ccode_identifier_new (_tmp653_);
+					_tmp655_ = _tmp654_;
+					_tmp656_ = outer_block;
+					_tmp657_ = func_name;
+					_tmp658_ = vala_ccode_member_access_new_pointer (_tmp656_, _tmp657_);
+					_tmp659_ = _tmp658_;
+					vala_ccode_function_add_assignment (_tmp652_, (ValaCCodeExpression*) _tmp655_, (ValaCCodeExpression*) _tmp659_);
+					_vala_ccode_node_unref0 (_tmp659_);
+					_vala_ccode_node_unref0 (_tmp655_);
 					_g_free0 (func_name);
 					_vala_code_node_unref0 (type_param);
 				}
@@ -11399,97 +11608,97 @@ static void vala_ccode_base_module_real_visit_block (ValaCodeVisitor* base, Vala
 			}
 		}
 		{
-			ValaList* _tmp604_;
-			gint _tmp605_;
-			gint _tmp606_;
+			ValaList* _tmp660_;
+			gint _tmp661_;
+			gint _tmp662_;
 			gint i;
-			_tmp604_ = local_vars;
-			_tmp605_ = vala_collection_get_size ((ValaCollection*) _tmp604_);
-			_tmp606_ = _tmp605_;
-			i = _tmp606_ - 1;
+			_tmp660_ = local_vars;
+			_tmp661_ = vala_collection_get_size ((ValaCollection*) _tmp660_);
+			_tmp662_ = _tmp661_;
+			i = _tmp662_ - 1;
 			{
-				gboolean _tmp607_;
-				_tmp607_ = TRUE;
+				gboolean _tmp663_;
+				_tmp663_ = TRUE;
 				while (TRUE) {
-					gboolean _tmp608_;
-					gint _tmp610_;
-					ValaList* _tmp611_;
-					gint _tmp612_;
-					gpointer _tmp613_ = NULL;
+					gboolean _tmp664_;
+					gint _tmp666_;
+					ValaList* _tmp667_;
+					gint _tmp668_;
+					gpointer _tmp669_ = NULL;
 					ValaLocalVariable* local;
-					ValaLocalVariable* _tmp614_;
-					gboolean _tmp615_;
-					gboolean _tmp616_;
-					_tmp608_ = _tmp607_;
-					if (!_tmp608_) {
-						gint _tmp609_;
-						_tmp609_ = i;
-						i = _tmp609_ - 1;
+					ValaLocalVariable* _tmp670_;
+					gboolean _tmp671_;
+					gboolean _tmp672_;
+					_tmp664_ = _tmp663_;
+					if (!_tmp664_) {
+						gint _tmp665_;
+						_tmp665_ = i;
+						i = _tmp665_ - 1;
 					}
-					_tmp607_ = FALSE;
-					_tmp610_ = i;
-					if (!(_tmp610_ >= 0)) {
+					_tmp663_ = FALSE;
+					_tmp666_ = i;
+					if (!(_tmp666_ >= 0)) {
 						break;
 					}
-					_tmp611_ = local_vars;
-					_tmp612_ = i;
-					_tmp613_ = vala_list_get (_tmp611_, _tmp612_);
-					local = (ValaLocalVariable*) _tmp613_;
-					_tmp614_ = local;
-					_tmp615_ = vala_local_variable_get_captured (_tmp614_);
-					_tmp616_ = _tmp615_;
-					if (_tmp616_) {
-						ValaLocalVariable* _tmp617_;
-						ValaDataType* _tmp618_;
-						ValaDataType* _tmp619_;
-						gboolean _tmp620_ = FALSE;
-						_tmp617_ = local;
-						_tmp618_ = vala_variable_get_variable_type ((ValaVariable*) _tmp617_);
-						_tmp619_ = _tmp618_;
-						_tmp620_ = vala_ccode_base_module_requires_destroy (self, _tmp619_);
-						if (_tmp620_) {
+					_tmp667_ = local_vars;
+					_tmp668_ = i;
+					_tmp669_ = vala_list_get (_tmp667_, _tmp668_);
+					local = (ValaLocalVariable*) _tmp669_;
+					_tmp670_ = local;
+					_tmp671_ = vala_local_variable_get_captured (_tmp670_);
+					_tmp672_ = _tmp671_;
+					if (_tmp672_) {
+						ValaLocalVariable* _tmp673_;
+						ValaDataType* _tmp674_;
+						ValaDataType* _tmp675_;
+						gboolean _tmp676_ = FALSE;
+						_tmp673_ = local;
+						_tmp674_ = vala_variable_get_variable_type ((ValaVariable*) _tmp673_);
+						_tmp675_ = _tmp674_;
+						_tmp676_ = vala_ccode_base_module_requires_destroy (self, _tmp675_);
+						if (_tmp676_) {
 							gboolean old_coroutine;
-							ValaMethod* _tmp621_;
-							ValaMethod* _tmp622_;
-							ValaCCodeFunction* _tmp629_;
-							ValaCCodeFunction* _tmp630_;
-							ValaLocalVariable* _tmp631_;
-							ValaCCodeExpression* _tmp632_ = NULL;
-							ValaCCodeExpression* _tmp633_;
-							gboolean _tmp634_;
+							ValaMethod* _tmp677_;
+							ValaMethod* _tmp678_;
+							ValaCCodeFunction* _tmp685_;
+							ValaCCodeFunction* _tmp686_;
+							ValaLocalVariable* _tmp687_;
+							ValaCCodeExpression* _tmp688_ = NULL;
+							ValaCCodeExpression* _tmp689_;
+							gboolean _tmp690_;
 							old_coroutine = FALSE;
-							_tmp621_ = vala_ccode_base_module_get_current_method (self);
-							_tmp622_ = _tmp621_;
-							if (_tmp622_ != NULL) {
-								ValaMethod* _tmp623_;
-								ValaMethod* _tmp624_;
-								gboolean _tmp625_;
-								gboolean _tmp626_;
-								ValaMethod* _tmp627_;
-								ValaMethod* _tmp628_;
-								_tmp623_ = vala_ccode_base_module_get_current_method (self);
-								_tmp624_ = _tmp623_;
-								_tmp625_ = vala_method_get_coroutine (_tmp624_);
-								_tmp626_ = _tmp625_;
-								old_coroutine = _tmp626_;
-								_tmp627_ = vala_ccode_base_module_get_current_method (self);
-								_tmp628_ = _tmp627_;
-								vala_method_set_coroutine (_tmp628_, FALSE);
+							_tmp677_ = vala_ccode_base_module_get_current_method (self);
+							_tmp678_ = _tmp677_;
+							if (_tmp678_ != NULL) {
+								ValaMethod* _tmp679_;
+								ValaMethod* _tmp680_;
+								gboolean _tmp681_;
+								gboolean _tmp682_;
+								ValaMethod* _tmp683_;
+								ValaMethod* _tmp684_;
+								_tmp679_ = vala_ccode_base_module_get_current_method (self);
+								_tmp680_ = _tmp679_;
+								_tmp681_ = vala_method_get_coroutine (_tmp680_);
+								_tmp682_ = _tmp681_;
+								old_coroutine = _tmp682_;
+								_tmp683_ = vala_ccode_base_module_get_current_method (self);
+								_tmp684_ = _tmp683_;
+								vala_method_set_coroutine (_tmp684_, FALSE);
 							}
-							_tmp629_ = vala_ccode_base_module_get_ccode (self);
-							_tmp630_ = _tmp629_;
-							_tmp631_ = local;
-							_tmp632_ = vala_ccode_base_module_destroy_local (self, _tmp631_);
-							_tmp633_ = _tmp632_;
-							vala_ccode_function_add_expression (_tmp630_, _tmp633_);
-							_vala_ccode_node_unref0 (_tmp633_);
-							_tmp634_ = old_coroutine;
-							if (_tmp634_) {
-								ValaMethod* _tmp635_;
-								ValaMethod* _tmp636_;
-								_tmp635_ = vala_ccode_base_module_get_current_method (self);
-								_tmp636_ = _tmp635_;
-								vala_method_set_coroutine (_tmp636_, TRUE);
+							_tmp685_ = vala_ccode_base_module_get_ccode (self);
+							_tmp686_ = _tmp685_;
+							_tmp687_ = local;
+							_tmp688_ = vala_ccode_base_module_destroy_local (self, _tmp687_);
+							_tmp689_ = _tmp688_;
+							vala_ccode_function_add_expression (_tmp686_, _tmp689_);
+							_vala_ccode_node_unref0 (_tmp689_);
+							_tmp690_ = old_coroutine;
+							if (_tmp690_) {
+								ValaMethod* _tmp691_;
+								ValaMethod* _tmp692_;
+								_tmp691_ = vala_ccode_base_module_get_current_method (self);
+								_tmp692_ = _tmp691_;
+								vala_method_set_coroutine (_tmp692_, TRUE);
 							}
 						}
 					}
@@ -11497,151 +11706,127 @@ static void vala_ccode_base_module_real_visit_block (ValaCodeVisitor* base, Vala
 				}
 			}
 		}
-		_tmp637_ = b;
-		_tmp638_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp637_);
-		_tmp639_ = _tmp638_;
-		if (VALA_IS_METHOD (_tmp639_)) {
-			ValaBlock* _tmp640_;
-			ValaSymbol* _tmp641_;
-			ValaSymbol* _tmp642_;
-			ValaMethod* _tmp643_;
+		_tmp693_ = b;
+		_tmp694_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp693_);
+		_tmp695_ = _tmp694_;
+		if (VALA_IS_METHOD (_tmp695_)) {
+			ValaBlock* _tmp696_;
+			ValaSymbol* _tmp697_;
+			ValaSymbol* _tmp698_;
+			ValaMethod* _tmp699_;
 			ValaMethod* m;
-			_tmp640_ = b;
-			_tmp641_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp640_);
-			_tmp642_ = _tmp641_;
-			_tmp643_ = _vala_code_node_ref0 (VALA_METHOD (_tmp642_));
-			m = _tmp643_;
+			_tmp696_ = b;
+			_tmp697_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp696_);
+			_tmp698_ = _tmp697_;
+			_tmp699_ = _vala_code_node_ref0 (VALA_METHOD (_tmp698_));
+			m = _tmp699_;
 			{
-				ValaMethod* _tmp644_;
-				ValaList* _tmp645_ = NULL;
+				ValaMethod* _tmp700_;
+				ValaList* _tmp701_ = NULL;
 				ValaList* _param_list;
-				ValaList* _tmp646_;
-				gint _tmp647_;
-				gint _tmp648_;
+				ValaList* _tmp702_;
+				gint _tmp703_;
+				gint _tmp704_;
 				gint _param_size;
 				gint _param_index;
-				_tmp644_ = m;
-				_tmp645_ = vala_method_get_parameters (_tmp644_);
-				_param_list = _tmp645_;
-				_tmp646_ = _param_list;
-				_tmp647_ = vala_collection_get_size ((ValaCollection*) _tmp646_);
-				_tmp648_ = _tmp647_;
-				_param_size = _tmp648_;
+				_tmp700_ = m;
+				_tmp701_ = vala_method_get_parameters (_tmp700_);
+				_param_list = _tmp701_;
+				_tmp702_ = _param_list;
+				_tmp703_ = vala_collection_get_size ((ValaCollection*) _tmp702_);
+				_tmp704_ = _tmp703_;
+				_param_size = _tmp704_;
 				_param_index = -1;
 				while (TRUE) {
-					gint _tmp649_;
-					gint _tmp650_;
-					gint _tmp651_;
-					ValaList* _tmp652_;
-					gint _tmp653_;
-					gpointer _tmp654_ = NULL;
+					gint _tmp705_;
+					gint _tmp706_;
+					gint _tmp707_;
+					ValaList* _tmp708_;
+					gint _tmp709_;
+					gpointer _tmp710_ = NULL;
 					ValaParameter* param;
-					ValaParameter* _tmp655_;
-					gboolean _tmp656_;
-					gboolean _tmp657_;
-					_tmp649_ = _param_index;
-					_param_index = _tmp649_ + 1;
-					_tmp650_ = _param_index;
-					_tmp651_ = _param_size;
-					if (!(_tmp650_ < _tmp651_)) {
+					ValaParameter* _tmp711_;
+					gboolean _tmp712_;
+					gboolean _tmp713_;
+					_tmp705_ = _param_index;
+					_param_index = _tmp705_ + 1;
+					_tmp706_ = _param_index;
+					_tmp707_ = _param_size;
+					if (!(_tmp706_ < _tmp707_)) {
 						break;
 					}
-					_tmp652_ = _param_list;
-					_tmp653_ = _param_index;
-					_tmp654_ = vala_list_get (_tmp652_, _tmp653_);
-					param = (ValaParameter*) _tmp654_;
-					_tmp655_ = param;
-					_tmp656_ = vala_parameter_get_captured (_tmp655_);
-					_tmp657_ = _tmp656_;
-					if (_tmp657_) {
-						ValaParameter* _tmp658_;
-						ValaDataType* _tmp659_;
-						ValaDataType* _tmp660_;
-						ValaDataType* _tmp661_ = NULL;
+					_tmp708_ = _param_list;
+					_tmp709_ = _param_index;
+					_tmp710_ = vala_list_get (_tmp708_, _tmp709_);
+					param = (ValaParameter*) _tmp710_;
+					_tmp711_ = param;
+					_tmp712_ = vala_parameter_get_captured (_tmp711_);
+					_tmp713_ = _tmp712_;
+					if (_tmp713_) {
+						ValaParameter* _tmp714_;
+						ValaDataType* _tmp715_;
+						ValaDataType* _tmp716_;
+						ValaDataType* _tmp717_ = NULL;
 						ValaDataType* param_type;
-						ValaDataType* _tmp662_;
-						gboolean _tmp663_ = FALSE;
-						ValaParameter* _tmp664_;
-						ValaDataType* _tmp665_;
-						ValaDataType* _tmp666_;
-						gboolean _tmp672_;
-						gboolean is_unowned_delegate;
-						gboolean _tmp673_ = FALSE;
-						ValaDataType* _tmp674_;
-						gboolean _tmp675_ = FALSE;
-						gboolean _tmp677_;
-						_tmp658_ = param;
-						_tmp659_ = vala_variable_get_variable_type ((ValaVariable*) _tmp658_);
-						_tmp660_ = _tmp659_;
-						_tmp661_ = vala_data_type_copy (_tmp660_);
-						param_type = _tmp661_;
-						_tmp662_ = param_type;
-						vala_data_type_set_value_owned (_tmp662_, TRUE);
-						_tmp664_ = param;
-						_tmp665_ = vala_variable_get_variable_type ((ValaVariable*) _tmp664_);
-						_tmp666_ = _tmp665_;
-						if (VALA_IS_DELEGATE_TYPE (_tmp666_)) {
-							ValaParameter* _tmp667_;
-							ValaDataType* _tmp668_;
-							ValaDataType* _tmp669_;
-							gboolean _tmp670_;
-							gboolean _tmp671_;
-							_tmp667_ = param;
-							_tmp668_ = vala_variable_get_variable_type ((ValaVariable*) _tmp667_);
-							_tmp669_ = _tmp668_;
-							_tmp670_ = vala_data_type_get_value_owned (_tmp669_);
-							_tmp671_ = _tmp670_;
-							_tmp663_ = !_tmp671_;
-						} else {
-							_tmp663_ = FALSE;
-						}
-						_tmp672_ = _tmp663_;
-						is_unowned_delegate = _tmp672_;
-						_tmp674_ = param_type;
-						_tmp675_ = vala_ccode_base_module_requires_destroy (self, _tmp674_);
-						if (_tmp675_) {
-							gboolean _tmp676_;
-							_tmp676_ = is_unowned_delegate;
-							_tmp673_ = !_tmp676_;
-						} else {
-							_tmp673_ = FALSE;
+						ValaDataType* _tmp718_;
+						gboolean _tmp719_;
+						gboolean _tmp720_;
+						ValaDataType* _tmp724_;
+						gboolean _tmp725_ = FALSE;
+						_tmp714_ = param;
+						_tmp715_ = vala_variable_get_variable_type ((ValaVariable*) _tmp714_);
+						_tmp716_ = _tmp715_;
+						_tmp717_ = vala_data_type_copy (_tmp716_);
+						param_type = _tmp717_;
+						_tmp718_ = param_type;
+						_tmp719_ = vala_data_type_get_value_owned (_tmp718_);
+						_tmp720_ = _tmp719_;
+						if (!_tmp720_) {
+							ValaDataType* _tmp721_;
+							ValaDataType* _tmp722_;
+							gboolean _tmp723_ = FALSE;
+							_tmp721_ = param_type;
+							_tmp722_ = param_type;
+							_tmp723_ = vala_ccode_base_module_no_implicit_copy (self, _tmp722_);
+							vala_data_type_set_value_owned (_tmp721_, !_tmp723_);
 						}
-						_tmp677_ = _tmp673_;
-						if (_tmp677_) {
+						_tmp724_ = param_type;
+						_tmp725_ = vala_ccode_base_module_requires_destroy (self, _tmp724_);
+						if (_tmp725_) {
 							gboolean old_coroutine;
-							ValaMethod* _tmp678_;
-							ValaCCodeFunction* _tmp683_;
-							ValaCCodeFunction* _tmp684_;
-							ValaParameter* _tmp685_;
-							ValaCCodeExpression* _tmp686_ = NULL;
-							ValaCCodeExpression* _tmp687_;
-							gboolean _tmp688_;
+							ValaMethod* _tmp726_;
+							ValaCCodeFunction* _tmp731_;
+							ValaCCodeFunction* _tmp732_;
+							ValaParameter* _tmp733_;
+							ValaCCodeExpression* _tmp734_ = NULL;
+							ValaCCodeExpression* _tmp735_;
+							gboolean _tmp736_;
 							old_coroutine = FALSE;
-							_tmp678_ = m;
-							if (_tmp678_ != NULL) {
-								ValaMethod* _tmp679_;
-								gboolean _tmp680_;
-								gboolean _tmp681_;
-								ValaMethod* _tmp682_;
-								_tmp679_ = m;
-								_tmp680_ = vala_method_get_coroutine (_tmp679_);
-								_tmp681_ = _tmp680_;
-								old_coroutine = _tmp681_;
-								_tmp682_ = m;
-								vala_method_set_coroutine (_tmp682_, FALSE);
+							_tmp726_ = m;
+							if (_tmp726_ != NULL) {
+								ValaMethod* _tmp727_;
+								gboolean _tmp728_;
+								gboolean _tmp729_;
+								ValaMethod* _tmp730_;
+								_tmp727_ = m;
+								_tmp728_ = vala_method_get_coroutine (_tmp727_);
+								_tmp729_ = _tmp728_;
+								old_coroutine = _tmp729_;
+								_tmp730_ = m;
+								vala_method_set_coroutine (_tmp730_, FALSE);
 							}
-							_tmp683_ = vala_ccode_base_module_get_ccode (self);
-							_tmp684_ = _tmp683_;
-							_tmp685_ = param;
-							_tmp686_ = vala_ccode_base_module_destroy_parameter (self, _tmp685_);
-							_tmp687_ = _tmp686_;
-							vala_ccode_function_add_expression (_tmp684_, _tmp687_);
-							_vala_ccode_node_unref0 (_tmp687_);
-							_tmp688_ = old_coroutine;
-							if (_tmp688_) {
-								ValaMethod* _tmp689_;
-								_tmp689_ = m;
-								vala_method_set_coroutine (_tmp689_, TRUE);
+							_tmp731_ = vala_ccode_base_module_get_ccode (self);
+							_tmp732_ = _tmp731_;
+							_tmp733_ = param;
+							_tmp734_ = vala_ccode_base_module_destroy_parameter (self, _tmp733_);
+							_tmp735_ = _tmp734_;
+							vala_ccode_function_add_expression (_tmp732_, _tmp735_);
+							_vala_ccode_node_unref0 (_tmp735_);
+							_tmp736_ = old_coroutine;
+							if (_tmp736_) {
+								ValaMethod* _tmp737_;
+								_tmp737_ = m;
+								vala_method_set_coroutine (_tmp737_, TRUE);
 							}
 						}
 						_vala_code_node_unref0 (param_type);
@@ -11652,310 +11837,282 @@ static void vala_ccode_base_module_real_visit_block (ValaCodeVisitor* base, Vala
 			}
 			_vala_code_node_unref0 (m);
 		} else {
-			ValaBlock* _tmp690_;
-			ValaSymbol* _tmp691_;
-			ValaSymbol* _tmp692_;
-			_tmp690_ = b;
-			_tmp691_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp690_);
-			_tmp692_ = _tmp691_;
-			if (VALA_IS_PROPERTY_ACCESSOR (_tmp692_)) {
-				ValaBlock* _tmp693_;
-				ValaSymbol* _tmp694_;
-				ValaSymbol* _tmp695_;
-				ValaPropertyAccessor* _tmp696_;
+			ValaBlock* _tmp738_;
+			ValaSymbol* _tmp739_;
+			ValaSymbol* _tmp740_;
+			_tmp738_ = b;
+			_tmp739_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp738_);
+			_tmp740_ = _tmp739_;
+			if (VALA_IS_PROPERTY_ACCESSOR (_tmp740_)) {
+				ValaBlock* _tmp741_;
+				ValaSymbol* _tmp742_;
+				ValaSymbol* _tmp743_;
+				ValaPropertyAccessor* _tmp744_;
 				ValaPropertyAccessor* acc;
-				gboolean _tmp697_ = FALSE;
-				ValaPropertyAccessor* _tmp698_;
-				gboolean _tmp699_;
-				gboolean _tmp700_;
-				gboolean _tmp706_;
-				_tmp693_ = b;
-				_tmp694_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp693_);
-				_tmp695_ = _tmp694_;
-				_tmp696_ = _vala_code_node_ref0 (VALA_PROPERTY_ACCESSOR (_tmp695_));
-				acc = _tmp696_;
-				_tmp698_ = acc;
-				_tmp699_ = vala_property_accessor_get_readable (_tmp698_);
-				_tmp700_ = _tmp699_;
-				if (!_tmp700_) {
-					ValaPropertyAccessor* _tmp701_;
-					ValaParameter* _tmp702_;
-					ValaParameter* _tmp703_;
-					gboolean _tmp704_;
-					gboolean _tmp705_;
-					_tmp701_ = acc;
-					_tmp702_ = vala_property_accessor_get_value_parameter (_tmp701_);
-					_tmp703_ = _tmp702_;
-					_tmp704_ = vala_parameter_get_captured (_tmp703_);
-					_tmp705_ = _tmp704_;
-					_tmp697_ = _tmp705_;
+				gboolean _tmp745_ = FALSE;
+				ValaPropertyAccessor* _tmp746_;
+				gboolean _tmp747_;
+				gboolean _tmp748_;
+				gboolean _tmp754_;
+				_tmp741_ = b;
+				_tmp742_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp741_);
+				_tmp743_ = _tmp742_;
+				_tmp744_ = _vala_code_node_ref0 (VALA_PROPERTY_ACCESSOR (_tmp743_));
+				acc = _tmp744_;
+				_tmp746_ = acc;
+				_tmp747_ = vala_property_accessor_get_readable (_tmp746_);
+				_tmp748_ = _tmp747_;
+				if (!_tmp748_) {
+					ValaPropertyAccessor* _tmp749_;
+					ValaParameter* _tmp750_;
+					ValaParameter* _tmp751_;
+					gboolean _tmp752_;
+					gboolean _tmp753_;
+					_tmp749_ = acc;
+					_tmp750_ = vala_property_accessor_get_value_parameter (_tmp749_);
+					_tmp751_ = _tmp750_;
+					_tmp752_ = vala_parameter_get_captured (_tmp751_);
+					_tmp753_ = _tmp752_;
+					_tmp745_ = _tmp753_;
 				} else {
-					_tmp697_ = FALSE;
+					_tmp745_ = FALSE;
 				}
-				_tmp706_ = _tmp697_;
-				if (_tmp706_) {
-					ValaPropertyAccessor* _tmp707_;
-					ValaParameter* _tmp708_;
-					ValaParameter* _tmp709_;
-					ValaDataType* _tmp710_;
-					ValaDataType* _tmp711_;
-					ValaDataType* _tmp712_ = NULL;
+				_tmp754_ = _tmp745_;
+				if (_tmp754_) {
+					ValaPropertyAccessor* _tmp755_;
+					ValaParameter* _tmp756_;
+					ValaParameter* _tmp757_;
+					ValaDataType* _tmp758_;
+					ValaDataType* _tmp759_;
+					ValaDataType* _tmp760_ = NULL;
 					ValaDataType* param_type;
-					ValaDataType* _tmp713_;
-					gboolean _tmp714_ = FALSE;
-					ValaPropertyAccessor* _tmp715_;
-					ValaParameter* _tmp716_;
-					ValaParameter* _tmp717_;
-					ValaDataType* _tmp718_;
-					ValaDataType* _tmp719_;
-					gboolean _tmp727_;
-					gboolean is_unowned_delegate;
-					gboolean _tmp728_ = FALSE;
-					ValaDataType* _tmp729_;
-					gboolean _tmp730_ = FALSE;
-					gboolean _tmp732_;
-					_tmp707_ = acc;
-					_tmp708_ = vala_property_accessor_get_value_parameter (_tmp707_);
-					_tmp709_ = _tmp708_;
-					_tmp710_ = vala_variable_get_variable_type ((ValaVariable*) _tmp709_);
-					_tmp711_ = _tmp710_;
-					_tmp712_ = vala_data_type_copy (_tmp711_);
-					param_type = _tmp712_;
-					_tmp713_ = param_type;
-					vala_data_type_set_value_owned (_tmp713_, TRUE);
-					_tmp715_ = acc;
-					_tmp716_ = vala_property_accessor_get_value_parameter (_tmp715_);
-					_tmp717_ = _tmp716_;
-					_tmp718_ = vala_variable_get_variable_type ((ValaVariable*) _tmp717_);
-					_tmp719_ = _tmp718_;
-					if (VALA_IS_DELEGATE_TYPE (_tmp719_)) {
-						ValaPropertyAccessor* _tmp720_;
-						ValaParameter* _tmp721_;
-						ValaParameter* _tmp722_;
-						ValaDataType* _tmp723_;
-						ValaDataType* _tmp724_;
-						gboolean _tmp725_;
-						gboolean _tmp726_;
-						_tmp720_ = acc;
-						_tmp721_ = vala_property_accessor_get_value_parameter (_tmp720_);
-						_tmp722_ = _tmp721_;
-						_tmp723_ = vala_variable_get_variable_type ((ValaVariable*) _tmp722_);
-						_tmp724_ = _tmp723_;
-						_tmp725_ = vala_data_type_get_value_owned (_tmp724_);
-						_tmp726_ = _tmp725_;
-						_tmp714_ = !_tmp726_;
-					} else {
-						_tmp714_ = FALSE;
+					ValaDataType* _tmp761_;
+					gboolean _tmp762_;
+					gboolean _tmp763_;
+					ValaDataType* _tmp767_;
+					gboolean _tmp768_ = FALSE;
+					_tmp755_ = acc;
+					_tmp756_ = vala_property_accessor_get_value_parameter (_tmp755_);
+					_tmp757_ = _tmp756_;
+					_tmp758_ = vala_variable_get_variable_type ((ValaVariable*) _tmp757_);
+					_tmp759_ = _tmp758_;
+					_tmp760_ = vala_data_type_copy (_tmp759_);
+					param_type = _tmp760_;
+					_tmp761_ = param_type;
+					_tmp762_ = vala_data_type_get_value_owned (_tmp761_);
+					_tmp763_ = _tmp762_;
+					if (!_tmp763_) {
+						ValaDataType* _tmp764_;
+						ValaDataType* _tmp765_;
+						gboolean _tmp766_ = FALSE;
+						_tmp764_ = param_type;
+						_tmp765_ = param_type;
+						_tmp766_ = vala_ccode_base_module_no_implicit_copy (self, _tmp765_);
+						vala_data_type_set_value_owned (_tmp764_, !_tmp766_);
 					}
-					_tmp727_ = _tmp714_;
-					is_unowned_delegate = _tmp727_;
-					_tmp729_ = param_type;
-					_tmp730_ = vala_ccode_base_module_requires_destroy (self, _tmp729_);
-					if (_tmp730_) {
-						gboolean _tmp731_;
-						_tmp731_ = is_unowned_delegate;
-						_tmp728_ = !_tmp731_;
-					} else {
-						_tmp728_ = FALSE;
-					}
-					_tmp732_ = _tmp728_;
-					if (_tmp732_) {
-						ValaCCodeFunction* _tmp733_;
-						ValaCCodeFunction* _tmp734_;
-						ValaPropertyAccessor* _tmp735_;
-						ValaParameter* _tmp736_;
-						ValaParameter* _tmp737_;
-						ValaCCodeExpression* _tmp738_ = NULL;
-						ValaCCodeExpression* _tmp739_;
-						_tmp733_ = vala_ccode_base_module_get_ccode (self);
-						_tmp734_ = _tmp733_;
-						_tmp735_ = acc;
-						_tmp736_ = vala_property_accessor_get_value_parameter (_tmp735_);
-						_tmp737_ = _tmp736_;
-						_tmp738_ = vala_ccode_base_module_destroy_parameter (self, _tmp737_);
-						_tmp739_ = _tmp738_;
-						vala_ccode_function_add_expression (_tmp734_, _tmp739_);
-						_vala_ccode_node_unref0 (_tmp739_);
+					_tmp767_ = param_type;
+					_tmp768_ = vala_ccode_base_module_requires_destroy (self, _tmp767_);
+					if (_tmp768_) {
+						ValaCCodeFunction* _tmp769_;
+						ValaCCodeFunction* _tmp770_;
+						ValaPropertyAccessor* _tmp771_;
+						ValaParameter* _tmp772_;
+						ValaParameter* _tmp773_;
+						ValaCCodeExpression* _tmp774_ = NULL;
+						ValaCCodeExpression* _tmp775_;
+						_tmp769_ = vala_ccode_base_module_get_ccode (self);
+						_tmp770_ = _tmp769_;
+						_tmp771_ = acc;
+						_tmp772_ = vala_property_accessor_get_value_parameter (_tmp771_);
+						_tmp773_ = _tmp772_;
+						_tmp774_ = vala_ccode_base_module_destroy_parameter (self, _tmp773_);
+						_tmp775_ = _tmp774_;
+						vala_ccode_function_add_expression (_tmp770_, _tmp775_);
+						_vala_ccode_node_unref0 (_tmp775_);
 					}
 					_vala_code_node_unref0 (param_type);
 				}
 				_vala_code_node_unref0 (acc);
 			}
 		}
-		_tmp740_ = parent_block;
-		if (_tmp740_ != NULL) {
-			ValaBlock* _tmp741_;
-			gint _tmp742_ = 0;
+		_tmp776_ = parent_block;
+		if (_tmp776_ != NULL) {
+			ValaBlock* _tmp777_;
+			gint _tmp778_ = 0;
 			gint parent_block_id;
-			gint _tmp743_;
-			gchar* _tmp744_ = NULL;
-			gchar* _tmp745_;
-			ValaCCodeIdentifier* _tmp746_;
-			ValaCCodeIdentifier* _tmp747_;
-			ValaCCodeFunctionCall* _tmp748_;
-			ValaCCodeFunctionCall* _tmp749_;
+			gint _tmp779_;
+			gchar* _tmp780_ = NULL;
+			gchar* _tmp781_;
+			ValaCCodeIdentifier* _tmp782_;
+			ValaCCodeIdentifier* _tmp783_;
+			ValaCCodeFunctionCall* _tmp784_;
+			ValaCCodeFunctionCall* _tmp785_;
 			ValaCCodeFunctionCall* unref_call;
-			ValaCCodeFunctionCall* _tmp750_;
-			gint _tmp751_;
-			gchar* _tmp752_ = NULL;
-			gchar* _tmp753_;
-			ValaCCodeIdentifier* _tmp754_;
-			ValaCCodeIdentifier* _tmp755_;
-			gint _tmp756_;
-			gchar* _tmp757_ = NULL;
-			gchar* _tmp758_;
-			ValaCCodeMemberAccess* _tmp759_;
-			ValaCCodeMemberAccess* _tmp760_;
-			ValaCCodeFunction* _tmp761_;
-			ValaCCodeFunction* _tmp762_;
-			ValaCCodeFunctionCall* _tmp763_;
-			ValaCCodeFunction* _tmp764_;
-			ValaCCodeFunction* _tmp765_;
-			gint _tmp766_;
-			gchar* _tmp767_ = NULL;
-			gchar* _tmp768_;
-			ValaCCodeIdentifier* _tmp769_;
-			ValaCCodeIdentifier* _tmp770_;
-			gint _tmp771_;
-			gchar* _tmp772_ = NULL;
-			gchar* _tmp773_;
-			ValaCCodeMemberAccess* _tmp774_;
-			ValaCCodeMemberAccess* _tmp775_;
-			ValaCCodeConstant* _tmp776_;
-			ValaCCodeConstant* _tmp777_;
-			_tmp741_ = parent_block;
-			_tmp742_ = vala_ccode_base_module_get_block_id (self, _tmp741_);
-			parent_block_id = _tmp742_;
-			_tmp743_ = parent_block_id;
-			_tmp744_ = g_strdup_printf ("block%d_data_unref", _tmp743_);
-			_tmp745_ = _tmp744_;
-			_tmp746_ = vala_ccode_identifier_new (_tmp745_);
-			_tmp747_ = _tmp746_;
-			_tmp748_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp747_);
-			_tmp749_ = _tmp748_;
-			_vala_ccode_node_unref0 (_tmp747_);
-			_g_free0 (_tmp745_);
-			unref_call = _tmp749_;
-			_tmp750_ = unref_call;
-			_tmp751_ = block_id;
-			_tmp752_ = g_strdup_printf ("_data%d_", _tmp751_);
-			_tmp753_ = _tmp752_;
-			_tmp754_ = vala_ccode_identifier_new (_tmp753_);
-			_tmp755_ = _tmp754_;
-			_tmp756_ = parent_block_id;
-			_tmp757_ = g_strdup_printf ("_data%d_", _tmp756_);
-			_tmp758_ = _tmp757_;
-			_tmp759_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp755_, _tmp758_);
-			_tmp760_ = _tmp759_;
-			vala_ccode_function_call_add_argument (_tmp750_, (ValaCCodeExpression*) _tmp760_);
-			_vala_ccode_node_unref0 (_tmp760_);
-			_g_free0 (_tmp758_);
-			_vala_ccode_node_unref0 (_tmp755_);
-			_g_free0 (_tmp753_);
-			_tmp761_ = vala_ccode_base_module_get_ccode (self);
-			_tmp762_ = _tmp761_;
-			_tmp763_ = unref_call;
-			vala_ccode_function_add_expression (_tmp762_, (ValaCCodeExpression*) _tmp763_);
-			_tmp764_ = vala_ccode_base_module_get_ccode (self);
-			_tmp765_ = _tmp764_;
-			_tmp766_ = block_id;
-			_tmp767_ = g_strdup_printf ("_data%d_", _tmp766_);
-			_tmp768_ = _tmp767_;
-			_tmp769_ = vala_ccode_identifier_new (_tmp768_);
-			_tmp770_ = _tmp769_;
-			_tmp771_ = parent_block_id;
-			_tmp772_ = g_strdup_printf ("_data%d_", _tmp771_);
-			_tmp773_ = _tmp772_;
-			_tmp774_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp770_, _tmp773_);
-			_tmp775_ = _tmp774_;
-			_tmp776_ = vala_ccode_constant_new ("NULL");
-			_tmp777_ = _tmp776_;
-			vala_ccode_function_add_assignment (_tmp765_, (ValaCCodeExpression*) _tmp775_, (ValaCCodeExpression*) _tmp777_);
-			_vala_ccode_node_unref0 (_tmp777_);
-			_vala_ccode_node_unref0 (_tmp775_);
-			_g_free0 (_tmp773_);
-			_vala_ccode_node_unref0 (_tmp770_);
-			_g_free0 (_tmp768_);
+			ValaCCodeFunctionCall* _tmp786_;
+			gint _tmp787_;
+			gchar* _tmp788_ = NULL;
+			gchar* _tmp789_;
+			ValaCCodeIdentifier* _tmp790_;
+			ValaCCodeIdentifier* _tmp791_;
+			gint _tmp792_;
+			gchar* _tmp793_ = NULL;
+			gchar* _tmp794_;
+			ValaCCodeMemberAccess* _tmp795_;
+			ValaCCodeMemberAccess* _tmp796_;
+			ValaCCodeFunction* _tmp797_;
+			ValaCCodeFunction* _tmp798_;
+			ValaCCodeFunctionCall* _tmp799_;
+			ValaCCodeFunction* _tmp800_;
+			ValaCCodeFunction* _tmp801_;
+			gint _tmp802_;
+			gchar* _tmp803_ = NULL;
+			gchar* _tmp804_;
+			ValaCCodeIdentifier* _tmp805_;
+			ValaCCodeIdentifier* _tmp806_;
+			gint _tmp807_;
+			gchar* _tmp808_ = NULL;
+			gchar* _tmp809_;
+			ValaCCodeMemberAccess* _tmp810_;
+			ValaCCodeMemberAccess* _tmp811_;
+			ValaCCodeConstant* _tmp812_;
+			ValaCCodeConstant* _tmp813_;
+			_tmp777_ = parent_block;
+			_tmp778_ = vala_ccode_base_module_get_block_id (self, _tmp777_);
+			parent_block_id = _tmp778_;
+			_tmp779_ = parent_block_id;
+			_tmp780_ = g_strdup_printf ("block%d_data_unref", _tmp779_);
+			_tmp781_ = _tmp780_;
+			_tmp782_ = vala_ccode_identifier_new (_tmp781_);
+			_tmp783_ = _tmp782_;
+			_tmp784_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp783_);
+			_tmp785_ = _tmp784_;
+			_vala_ccode_node_unref0 (_tmp783_);
+			_g_free0 (_tmp781_);
+			unref_call = _tmp785_;
+			_tmp786_ = unref_call;
+			_tmp787_ = block_id;
+			_tmp788_ = g_strdup_printf ("_data%d_", _tmp787_);
+			_tmp789_ = _tmp788_;
+			_tmp790_ = vala_ccode_identifier_new (_tmp789_);
+			_tmp791_ = _tmp790_;
+			_tmp792_ = parent_block_id;
+			_tmp793_ = g_strdup_printf ("_data%d_", _tmp792_);
+			_tmp794_ = _tmp793_;
+			_tmp795_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp791_, _tmp794_);
+			_tmp796_ = _tmp795_;
+			vala_ccode_function_call_add_argument (_tmp786_, (ValaCCodeExpression*) _tmp796_);
+			_vala_ccode_node_unref0 (_tmp796_);
+			_g_free0 (_tmp794_);
+			_vala_ccode_node_unref0 (_tmp791_);
+			_g_free0 (_tmp789_);
+			_tmp797_ = vala_ccode_base_module_get_ccode (self);
+			_tmp798_ = _tmp797_;
+			_tmp799_ = unref_call;
+			vala_ccode_function_add_expression (_tmp798_, (ValaCCodeExpression*) _tmp799_);
+			_tmp800_ = vala_ccode_base_module_get_ccode (self);
+			_tmp801_ = _tmp800_;
+			_tmp802_ = block_id;
+			_tmp803_ = g_strdup_printf ("_data%d_", _tmp802_);
+			_tmp804_ = _tmp803_;
+			_tmp805_ = vala_ccode_identifier_new (_tmp804_);
+			_tmp806_ = _tmp805_;
+			_tmp807_ = parent_block_id;
+			_tmp808_ = g_strdup_printf ("_data%d_", _tmp807_);
+			_tmp809_ = _tmp808_;
+			_tmp810_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp806_, _tmp809_);
+			_tmp811_ = _tmp810_;
+			_tmp812_ = vala_ccode_constant_new ("NULL");
+			_tmp813_ = _tmp812_;
+			vala_ccode_function_add_assignment (_tmp801_, (ValaCCodeExpression*) _tmp811_, (ValaCCodeExpression*) _tmp813_);
+			_vala_ccode_node_unref0 (_tmp813_);
+			_vala_ccode_node_unref0 (_tmp811_);
+			_g_free0 (_tmp809_);
+			_vala_ccode_node_unref0 (_tmp806_);
+			_g_free0 (_tmp804_);
 			_vala_ccode_node_unref0 (unref_call);
 		} else {
-			ValaDataType* _tmp778_ = NULL;
-			ValaDataType* _tmp779_;
-			gboolean _tmp780_;
-			_tmp778_ = vala_ccode_base_module_get_this_type (self);
-			_tmp779_ = _tmp778_;
-			_tmp780_ = _tmp779_ != NULL;
-			_vala_code_node_unref0 (_tmp779_);
-			if (_tmp780_) {
-				ValaTypeSymbol* _tmp781_;
-				ValaTypeSymbol* _tmp782_;
-				ValaDataType* _tmp783_ = NULL;
-				ValaDataType* _tmp784_;
-				ValaCCodeIdentifier* _tmp785_;
-				ValaCCodeIdentifier* _tmp786_;
-				ValaGLibValue* _tmp787_;
-				ValaGLibValue* _tmp788_;
-				ValaGLibValue* this_value;
-				ValaCCodeFunction* _tmp789_;
-				ValaCCodeFunction* _tmp790_;
-				ValaGLibValue* _tmp791_;
-				ValaCCodeExpression* _tmp792_ = NULL;
-				ValaCCodeExpression* _tmp793_;
-				_tmp781_ = vala_ccode_base_module_get_current_type_symbol (self);
-				_tmp782_ = _tmp781_;
-				_tmp783_ = vala_ccode_base_module_get_data_type_for_symbol (_tmp782_);
-				_tmp784_ = _tmp783_;
-				_tmp785_ = vala_ccode_identifier_new ("self");
-				_tmp786_ = _tmp785_;
-				_tmp787_ = vala_glib_value_new (_tmp784_, (ValaCCodeExpression*) _tmp786_, TRUE);
-				_tmp788_ = _tmp787_;
-				_vala_ccode_node_unref0 (_tmp786_);
-				_vala_code_node_unref0 (_tmp784_);
-				this_value = _tmp788_;
-				_tmp789_ = vala_ccode_base_module_get_ccode (self);
-				_tmp790_ = _tmp789_;
-				_tmp791_ = this_value;
-				_tmp792_ = vala_ccode_base_module_destroy_value (self, (ValaTargetValue*) _tmp791_, FALSE);
-				_tmp793_ = _tmp792_;
-				vala_ccode_function_add_expression (_tmp790_, _tmp793_);
-				_vala_ccode_node_unref0 (_tmp793_);
-				_vala_target_value_unref0 (this_value);
+			ValaDataType* _tmp814_ = NULL;
+			ValaDataType* _tmp815_;
+			gboolean _tmp816_;
+			_tmp814_ = vala_ccode_base_module_get_this_type (self);
+			_tmp815_ = _tmp814_;
+			_tmp816_ = _tmp815_ != NULL;
+			_vala_code_node_unref0 (_tmp815_);
+			if (_tmp816_) {
+				gboolean _tmp817_ = FALSE;
+				_tmp817_ = vala_ccode_base_module_is_in_destructor (self);
+				if (!_tmp817_) {
+					ValaTypeSymbol* _tmp818_;
+					ValaTypeSymbol* _tmp819_;
+					ValaDataType* _tmp820_ = NULL;
+					ValaDataType* _tmp821_;
+					ValaCCodeIdentifier* _tmp822_;
+					ValaCCodeIdentifier* _tmp823_;
+					ValaGLibValue* _tmp824_;
+					ValaGLibValue* _tmp825_;
+					ValaGLibValue* this_value;
+					ValaCCodeFunction* _tmp826_;
+					ValaCCodeFunction* _tmp827_;
+					ValaGLibValue* _tmp828_;
+					ValaCCodeExpression* _tmp829_ = NULL;
+					ValaCCodeExpression* _tmp830_;
+					_tmp818_ = vala_ccode_base_module_get_current_type_symbol (self);
+					_tmp819_ = _tmp818_;
+					_tmp820_ = vala_ccode_base_module_get_data_type_for_symbol (_tmp819_);
+					_tmp821_ = _tmp820_;
+					_tmp822_ = vala_ccode_identifier_new ("self");
+					_tmp823_ = _tmp822_;
+					_tmp824_ = vala_glib_value_new (_tmp821_, (ValaCCodeExpression*) _tmp823_, TRUE);
+					_tmp825_ = _tmp824_;
+					_vala_ccode_node_unref0 (_tmp823_);
+					_vala_code_node_unref0 (_tmp821_);
+					this_value = _tmp825_;
+					_tmp826_ = vala_ccode_base_module_get_ccode (self);
+					_tmp827_ = _tmp826_;
+					_tmp828_ = this_value;
+					_tmp829_ = vala_ccode_base_module_destroy_value (self, (ValaTargetValue*) _tmp828_, FALSE);
+					_tmp830_ = _tmp829_;
+					vala_ccode_function_add_expression (_tmp827_, _tmp830_);
+					_vala_ccode_node_unref0 (_tmp830_);
+					_vala_target_value_unref0 (this_value);
+				}
 			}
 		}
-		_tmp794_ = vala_ccode_identifier_new ("g_slice_free");
-		_tmp795_ = _tmp794_;
-		_tmp796_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp795_);
-		_tmp797_ = _tmp796_;
-		_vala_ccode_node_unref0 (_tmp795_);
-		data_free = _tmp797_;
-		_tmp798_ = data_free;
-		_tmp799_ = struct_name;
-		_tmp800_ = vala_ccode_identifier_new (_tmp799_);
-		_tmp801_ = _tmp800_;
-		vala_ccode_function_call_add_argument (_tmp798_, (ValaCCodeExpression*) _tmp801_);
-		_vala_ccode_node_unref0 (_tmp801_);
-		_tmp802_ = data_free;
-		_tmp803_ = block_id;
-		_tmp804_ = g_strdup_printf ("_data%d_", _tmp803_);
-		_tmp805_ = _tmp804_;
-		_tmp806_ = vala_ccode_identifier_new (_tmp805_);
-		_tmp807_ = _tmp806_;
-		vala_ccode_function_call_add_argument (_tmp802_, (ValaCCodeExpression*) _tmp807_);
-		_vala_ccode_node_unref0 (_tmp807_);
-		_g_free0 (_tmp805_);
-		_tmp808_ = vala_ccode_base_module_get_ccode (self);
-		_tmp809_ = _tmp808_;
-		_tmp810_ = data_free;
-		vala_ccode_function_add_expression (_tmp809_, (ValaCCodeExpression*) _tmp810_);
-		_tmp811_ = vala_ccode_base_module_get_ccode (self);
-		_tmp812_ = _tmp811_;
-		vala_ccode_function_close (_tmp812_);
+		_tmp831_ = vala_ccode_identifier_new ("g_slice_free");
+		_tmp832_ = _tmp831_;
+		_tmp833_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp832_);
+		_tmp834_ = _tmp833_;
+		_vala_ccode_node_unref0 (_tmp832_);
+		data_free = _tmp834_;
+		_tmp835_ = data_free;
+		_tmp836_ = struct_name;
+		_tmp837_ = vala_ccode_identifier_new (_tmp836_);
+		_tmp838_ = _tmp837_;
+		vala_ccode_function_call_add_argument (_tmp835_, (ValaCCodeExpression*) _tmp838_);
+		_vala_ccode_node_unref0 (_tmp838_);
+		_tmp839_ = data_free;
+		_tmp840_ = block_id;
+		_tmp841_ = g_strdup_printf ("_data%d_", _tmp840_);
+		_tmp842_ = _tmp841_;
+		_tmp843_ = vala_ccode_identifier_new (_tmp842_);
+		_tmp844_ = _tmp843_;
+		vala_ccode_function_call_add_argument (_tmp839_, (ValaCCodeExpression*) _tmp844_);
+		_vala_ccode_node_unref0 (_tmp844_);
+		_g_free0 (_tmp842_);
+		_tmp845_ = vala_ccode_base_module_get_ccode (self);
+		_tmp846_ = _tmp845_;
+		_tmp847_ = data_free;
+		vala_ccode_function_add_expression (_tmp846_, (ValaCCodeExpression*) _tmp847_);
+		_tmp848_ = vala_ccode_base_module_get_ccode (self);
+		_tmp849_ = _tmp848_;
+		vala_ccode_function_close (_tmp849_);
 		vala_ccode_base_module_pop_function (self);
-		_tmp813_ = self->cfile;
-		_tmp814_ = unref_fun;
-		vala_ccode_file_add_function_declaration (_tmp813_, _tmp814_);
-		_tmp815_ = self->cfile;
-		_tmp816_ = unref_fun;
-		vala_ccode_file_add_function (_tmp815_, _tmp816_);
+		_tmp850_ = self->cfile;
+		_tmp851_ = unref_fun;
+		vala_ccode_file_add_function_declaration (_tmp850_, _tmp851_);
+		_tmp852_ = self->cfile;
+		_tmp853_ = unref_fun;
+		vala_ccode_file_add_function (_tmp852_, _tmp853_);
 		_vala_ccode_node_unref0 (data_free);
 		_vala_ccode_node_unref0 (outer_block);
 		_vala_ccode_node_unref0 (unref_fun);
@@ -11968,299 +12125,299 @@ static void vala_ccode_base_module_real_visit_block (ValaCodeVisitor* base, Vala
 		_vala_code_node_unref0 (parent_block);
 	}
 	{
-		ValaBlock* _tmp817_;
-		ValaList* _tmp818_ = NULL;
+		ValaBlock* _tmp854_;
+		ValaList* _tmp855_ = NULL;
 		ValaList* _stmt_list;
-		ValaList* _tmp819_;
-		gint _tmp820_;
-		gint _tmp821_;
+		ValaList* _tmp856_;
+		gint _tmp857_;
+		gint _tmp858_;
 		gint _stmt_size;
 		gint _stmt_index;
-		_tmp817_ = b;
-		_tmp818_ = vala_block_get_statements (_tmp817_);
-		_stmt_list = _tmp818_;
-		_tmp819_ = _stmt_list;
-		_tmp820_ = vala_collection_get_size ((ValaCollection*) _tmp819_);
-		_tmp821_ = _tmp820_;
-		_stmt_size = _tmp821_;
+		_tmp854_ = b;
+		_tmp855_ = vala_block_get_statements (_tmp854_);
+		_stmt_list = _tmp855_;
+		_tmp856_ = _stmt_list;
+		_tmp857_ = vala_collection_get_size ((ValaCollection*) _tmp856_);
+		_tmp858_ = _tmp857_;
+		_stmt_size = _tmp858_;
 		_stmt_index = -1;
 		while (TRUE) {
-			gint _tmp822_;
-			gint _tmp823_;
-			gint _tmp824_;
-			ValaList* _tmp825_;
-			gint _tmp826_;
-			gpointer _tmp827_ = NULL;
+			gint _tmp859_;
+			gint _tmp860_;
+			gint _tmp861_;
+			ValaList* _tmp862_;
+			gint _tmp863_;
+			gpointer _tmp864_ = NULL;
 			ValaStatement* stmt;
-			ValaStatement* _tmp828_;
-			ValaSourceReference* _tmp829_;
-			ValaSourceReference* _tmp830_;
-			ValaStatement* _tmp831_;
-			_tmp822_ = _stmt_index;
-			_stmt_index = _tmp822_ + 1;
-			_tmp823_ = _stmt_index;
-			_tmp824_ = _stmt_size;
-			if (!(_tmp823_ < _tmp824_)) {
+			ValaStatement* _tmp865_;
+			ValaSourceReference* _tmp866_;
+			ValaSourceReference* _tmp867_;
+			ValaStatement* _tmp868_;
+			_tmp859_ = _stmt_index;
+			_stmt_index = _tmp859_ + 1;
+			_tmp860_ = _stmt_index;
+			_tmp861_ = _stmt_size;
+			if (!(_tmp860_ < _tmp861_)) {
 				break;
 			}
-			_tmp825_ = _stmt_list;
-			_tmp826_ = _stmt_index;
-			_tmp827_ = vala_list_get (_tmp825_, _tmp826_);
-			stmt = (ValaStatement*) _tmp827_;
-			_tmp828_ = stmt;
-			_tmp829_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp828_);
-			_tmp830_ = _tmp829_;
-			vala_ccode_base_module_push_line (self, _tmp830_);
-			_tmp831_ = stmt;
-			vala_code_node_emit ((ValaCodeNode*) _tmp831_, (ValaCodeGenerator*) self);
+			_tmp862_ = _stmt_list;
+			_tmp863_ = _stmt_index;
+			_tmp864_ = vala_list_get (_tmp862_, _tmp863_);
+			stmt = (ValaStatement*) _tmp864_;
+			_tmp865_ = stmt;
+			_tmp866_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp865_);
+			_tmp867_ = _tmp866_;
+			vala_ccode_base_module_push_line (self, _tmp867_);
+			_tmp868_ = stmt;
+			vala_code_node_emit ((ValaCodeNode*) _tmp868_, (ValaCodeGenerator*) self);
 			vala_ccode_base_module_pop_line (self);
 			_vala_code_node_unref0 (stmt);
 		}
 		_vala_iterable_unref0 (_stmt_list);
 	}
 	{
-		ValaList* _tmp832_;
-		gint _tmp833_;
-		gint _tmp834_;
+		ValaList* _tmp869_;
+		gint _tmp870_;
+		gint _tmp871_;
 		gint i;
-		_tmp832_ = local_vars;
-		_tmp833_ = vala_collection_get_size ((ValaCollection*) _tmp832_);
-		_tmp834_ = _tmp833_;
-		i = _tmp834_ - 1;
+		_tmp869_ = local_vars;
+		_tmp870_ = vala_collection_get_size ((ValaCollection*) _tmp869_);
+		_tmp871_ = _tmp870_;
+		i = _tmp871_ - 1;
 		{
-			gboolean _tmp835_;
-			_tmp835_ = TRUE;
+			gboolean _tmp872_;
+			_tmp872_ = TRUE;
 			while (TRUE) {
-				gboolean _tmp836_;
-				gint _tmp838_;
-				ValaList* _tmp839_;
-				gint _tmp840_;
-				gpointer _tmp841_ = NULL;
+				gboolean _tmp873_;
+				gint _tmp875_;
+				ValaList* _tmp876_;
+				gint _tmp877_;
+				gpointer _tmp878_ = NULL;
 				ValaLocalVariable* local;
-				ValaLocalVariable* _tmp842_;
-				gboolean _tmp843_ = FALSE;
-				gboolean _tmp844_ = FALSE;
-				gboolean _tmp845_ = FALSE;
-				ValaLocalVariable* _tmp846_;
-				gboolean _tmp847_;
-				gboolean _tmp848_;
-				gboolean _tmp852_;
-				gboolean _tmp856_;
-				gboolean _tmp861_;
-				_tmp836_ = _tmp835_;
-				if (!_tmp836_) {
-					gint _tmp837_;
-					_tmp837_ = i;
-					i = _tmp837_ - 1;
+				ValaLocalVariable* _tmp879_;
+				gboolean _tmp880_ = FALSE;
+				gboolean _tmp881_ = FALSE;
+				gboolean _tmp882_ = FALSE;
+				ValaLocalVariable* _tmp883_;
+				gboolean _tmp884_;
+				gboolean _tmp885_;
+				gboolean _tmp889_;
+				gboolean _tmp893_;
+				gboolean _tmp898_;
+				_tmp873_ = _tmp872_;
+				if (!_tmp873_) {
+					gint _tmp874_;
+					_tmp874_ = i;
+					i = _tmp874_ - 1;
 				}
-				_tmp835_ = FALSE;
-				_tmp838_ = i;
-				if (!(_tmp838_ >= 0)) {
+				_tmp872_ = FALSE;
+				_tmp875_ = i;
+				if (!(_tmp875_ >= 0)) {
 					break;
 				}
-				_tmp839_ = local_vars;
-				_tmp840_ = i;
-				_tmp841_ = vala_list_get (_tmp839_, _tmp840_);
-				local = (ValaLocalVariable*) _tmp841_;
-				_tmp842_ = local;
-				vala_symbol_set_active ((ValaSymbol*) _tmp842_, FALSE);
-				_tmp846_ = local;
-				_tmp847_ = vala_code_node_get_unreachable ((ValaCodeNode*) _tmp846_);
-				_tmp848_ = _tmp847_;
-				if (!_tmp848_) {
-					ValaLocalVariable* _tmp849_;
-					gboolean _tmp850_;
-					gboolean _tmp851_;
-					_tmp849_ = local;
-					_tmp850_ = vala_local_variable_get_floating (_tmp849_);
-					_tmp851_ = _tmp850_;
-					_tmp845_ = !_tmp851_;
+				_tmp876_ = local_vars;
+				_tmp877_ = i;
+				_tmp878_ = vala_list_get (_tmp876_, _tmp877_);
+				local = (ValaLocalVariable*) _tmp878_;
+				_tmp879_ = local;
+				vala_symbol_set_active ((ValaSymbol*) _tmp879_, FALSE);
+				_tmp883_ = local;
+				_tmp884_ = vala_code_node_get_unreachable ((ValaCodeNode*) _tmp883_);
+				_tmp885_ = _tmp884_;
+				if (!_tmp885_) {
+					ValaLocalVariable* _tmp886_;
+					gboolean _tmp887_;
+					gboolean _tmp888_;
+					_tmp886_ = local;
+					_tmp887_ = vala_local_variable_get_floating (_tmp886_);
+					_tmp888_ = _tmp887_;
+					_tmp882_ = !_tmp888_;
 				} else {
-					_tmp845_ = FALSE;
+					_tmp882_ = FALSE;
 				}
-				_tmp852_ = _tmp845_;
-				if (_tmp852_) {
-					ValaLocalVariable* _tmp853_;
-					gboolean _tmp854_;
-					gboolean _tmp855_;
-					_tmp853_ = local;
-					_tmp854_ = vala_local_variable_get_captured (_tmp853_);
-					_tmp855_ = _tmp854_;
-					_tmp844_ = !_tmp855_;
+				_tmp889_ = _tmp882_;
+				if (_tmp889_) {
+					ValaLocalVariable* _tmp890_;
+					gboolean _tmp891_;
+					gboolean _tmp892_;
+					_tmp890_ = local;
+					_tmp891_ = vala_local_variable_get_captured (_tmp890_);
+					_tmp892_ = _tmp891_;
+					_tmp881_ = !_tmp892_;
 				} else {
-					_tmp844_ = FALSE;
+					_tmp881_ = FALSE;
 				}
-				_tmp856_ = _tmp844_;
-				if (_tmp856_) {
-					ValaLocalVariable* _tmp857_;
-					ValaDataType* _tmp858_;
-					ValaDataType* _tmp859_;
-					gboolean _tmp860_ = FALSE;
-					_tmp857_ = local;
-					_tmp858_ = vala_variable_get_variable_type ((ValaVariable*) _tmp857_);
-					_tmp859_ = _tmp858_;
-					_tmp860_ = vala_ccode_base_module_requires_destroy (self, _tmp859_);
-					_tmp843_ = _tmp860_;
+				_tmp893_ = _tmp881_;
+				if (_tmp893_) {
+					ValaLocalVariable* _tmp894_;
+					ValaDataType* _tmp895_;
+					ValaDataType* _tmp896_;
+					gboolean _tmp897_ = FALSE;
+					_tmp894_ = local;
+					_tmp895_ = vala_variable_get_variable_type ((ValaVariable*) _tmp894_);
+					_tmp896_ = _tmp895_;
+					_tmp897_ = vala_ccode_base_module_requires_destroy (self, _tmp896_);
+					_tmp880_ = _tmp897_;
 				} else {
-					_tmp843_ = FALSE;
+					_tmp880_ = FALSE;
 				}
-				_tmp861_ = _tmp843_;
-				if (_tmp861_) {
-					ValaCCodeFunction* _tmp862_;
-					ValaCCodeFunction* _tmp863_;
-					ValaLocalVariable* _tmp864_;
-					ValaCCodeExpression* _tmp865_ = NULL;
-					ValaCCodeExpression* _tmp866_;
-					_tmp862_ = vala_ccode_base_module_get_ccode (self);
-					_tmp863_ = _tmp862_;
-					_tmp864_ = local;
-					_tmp865_ = vala_ccode_base_module_destroy_local (self, _tmp864_);
-					_tmp866_ = _tmp865_;
-					vala_ccode_function_add_expression (_tmp863_, _tmp866_);
-					_vala_ccode_node_unref0 (_tmp866_);
+				_tmp898_ = _tmp880_;
+				if (_tmp898_) {
+					ValaCCodeFunction* _tmp899_;
+					ValaCCodeFunction* _tmp900_;
+					ValaLocalVariable* _tmp901_;
+					ValaCCodeExpression* _tmp902_ = NULL;
+					ValaCCodeExpression* _tmp903_;
+					_tmp899_ = vala_ccode_base_module_get_ccode (self);
+					_tmp900_ = _tmp899_;
+					_tmp901_ = local;
+					_tmp902_ = vala_ccode_base_module_destroy_local (self, _tmp901_);
+					_tmp903_ = _tmp902_;
+					vala_ccode_function_add_expression (_tmp900_, _tmp903_);
+					_vala_ccode_node_unref0 (_tmp903_);
 				}
 				_vala_code_node_unref0 (local);
 			}
 		}
 	}
-	_tmp867_ = b;
-	_tmp868_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp867_);
-	_tmp869_ = _tmp868_;
-	if (VALA_IS_METHOD (_tmp869_)) {
-		ValaBlock* _tmp870_;
-		ValaSymbol* _tmp871_;
-		ValaSymbol* _tmp872_;
-		ValaMethod* _tmp873_;
+	_tmp904_ = b;
+	_tmp905_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp904_);
+	_tmp906_ = _tmp905_;
+	if (VALA_IS_METHOD (_tmp906_)) {
+		ValaBlock* _tmp907_;
+		ValaSymbol* _tmp908_;
+		ValaSymbol* _tmp909_;
+		ValaMethod* _tmp910_;
 		ValaMethod* m;
-		_tmp870_ = b;
-		_tmp871_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp870_);
-		_tmp872_ = _tmp871_;
-		_tmp873_ = _vala_code_node_ref0 (VALA_METHOD (_tmp872_));
-		m = _tmp873_;
+		_tmp907_ = b;
+		_tmp908_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp907_);
+		_tmp909_ = _tmp908_;
+		_tmp910_ = _vala_code_node_ref0 (VALA_METHOD (_tmp909_));
+		m = _tmp910_;
 		{
-			ValaMethod* _tmp874_;
-			ValaList* _tmp875_ = NULL;
+			ValaMethod* _tmp911_;
+			ValaList* _tmp912_ = NULL;
 			ValaList* _param_list;
-			ValaList* _tmp876_;
-			gint _tmp877_;
-			gint _tmp878_;
+			ValaList* _tmp913_;
+			gint _tmp914_;
+			gint _tmp915_;
 			gint _param_size;
 			gint _param_index;
-			_tmp874_ = m;
-			_tmp875_ = vala_method_get_parameters (_tmp874_);
-			_param_list = _tmp875_;
-			_tmp876_ = _param_list;
-			_tmp877_ = vala_collection_get_size ((ValaCollection*) _tmp876_);
-			_tmp878_ = _tmp877_;
-			_param_size = _tmp878_;
+			_tmp911_ = m;
+			_tmp912_ = vala_method_get_parameters (_tmp911_);
+			_param_list = _tmp912_;
+			_tmp913_ = _param_list;
+			_tmp914_ = vala_collection_get_size ((ValaCollection*) _tmp913_);
+			_tmp915_ = _tmp914_;
+			_param_size = _tmp915_;
 			_param_index = -1;
 			while (TRUE) {
-				gint _tmp879_;
-				gint _tmp880_;
-				gint _tmp881_;
-				ValaList* _tmp882_;
-				gint _tmp883_;
-				gpointer _tmp884_ = NULL;
+				gint _tmp916_;
+				gint _tmp917_;
+				gint _tmp918_;
+				ValaList* _tmp919_;
+				gint _tmp920_;
+				gpointer _tmp921_ = NULL;
 				ValaParameter* param;
-				gboolean _tmp885_ = FALSE;
-				gboolean _tmp886_ = FALSE;
-				gboolean _tmp887_ = FALSE;
-				ValaParameter* _tmp888_;
-				gboolean _tmp889_;
-				gboolean _tmp890_;
-				gboolean _tmp894_;
-				gboolean _tmp899_;
-				gboolean _tmp903_;
-				_tmp879_ = _param_index;
-				_param_index = _tmp879_ + 1;
-				_tmp880_ = _param_index;
-				_tmp881_ = _param_size;
-				if (!(_tmp880_ < _tmp881_)) {
+				gboolean _tmp922_ = FALSE;
+				gboolean _tmp923_ = FALSE;
+				gboolean _tmp924_ = FALSE;
+				ValaParameter* _tmp925_;
+				gboolean _tmp926_;
+				gboolean _tmp927_;
+				gboolean _tmp931_;
+				gboolean _tmp936_;
+				gboolean _tmp940_;
+				_tmp916_ = _param_index;
+				_param_index = _tmp916_ + 1;
+				_tmp917_ = _param_index;
+				_tmp918_ = _param_size;
+				if (!(_tmp917_ < _tmp918_)) {
 					break;
 				}
-				_tmp882_ = _param_list;
-				_tmp883_ = _param_index;
-				_tmp884_ = vala_list_get (_tmp882_, _tmp883_);
-				param = (ValaParameter*) _tmp884_;
-				_tmp888_ = param;
-				_tmp889_ = vala_parameter_get_captured (_tmp888_);
-				_tmp890_ = _tmp889_;
-				if (!_tmp890_) {
-					ValaParameter* _tmp891_;
-					gboolean _tmp892_;
-					gboolean _tmp893_;
-					_tmp891_ = param;
-					_tmp892_ = vala_parameter_get_ellipsis (_tmp891_);
-					_tmp893_ = _tmp892_;
-					_tmp887_ = !_tmp893_;
+				_tmp919_ = _param_list;
+				_tmp920_ = _param_index;
+				_tmp921_ = vala_list_get (_tmp919_, _tmp920_);
+				param = (ValaParameter*) _tmp921_;
+				_tmp925_ = param;
+				_tmp926_ = vala_parameter_get_captured (_tmp925_);
+				_tmp927_ = _tmp926_;
+				if (!_tmp927_) {
+					ValaParameter* _tmp928_;
+					gboolean _tmp929_;
+					gboolean _tmp930_;
+					_tmp928_ = param;
+					_tmp929_ = vala_parameter_get_ellipsis (_tmp928_);
+					_tmp930_ = _tmp929_;
+					_tmp924_ = !_tmp930_;
 				} else {
-					_tmp887_ = FALSE;
+					_tmp924_ = FALSE;
 				}
-				_tmp894_ = _tmp887_;
-				if (_tmp894_) {
-					ValaParameter* _tmp895_;
-					ValaDataType* _tmp896_;
-					ValaDataType* _tmp897_;
-					gboolean _tmp898_ = FALSE;
-					_tmp895_ = param;
-					_tmp896_ = vala_variable_get_variable_type ((ValaVariable*) _tmp895_);
-					_tmp897_ = _tmp896_;
-					_tmp898_ = vala_ccode_base_module_requires_destroy (self, _tmp897_);
-					_tmp886_ = _tmp898_;
+				_tmp931_ = _tmp924_;
+				if (_tmp931_) {
+					ValaParameter* _tmp932_;
+					ValaDataType* _tmp933_;
+					ValaDataType* _tmp934_;
+					gboolean _tmp935_ = FALSE;
+					_tmp932_ = param;
+					_tmp933_ = vala_variable_get_variable_type ((ValaVariable*) _tmp932_);
+					_tmp934_ = _tmp933_;
+					_tmp935_ = vala_ccode_base_module_requires_destroy (self, _tmp934_);
+					_tmp923_ = _tmp935_;
 				} else {
-					_tmp886_ = FALSE;
+					_tmp923_ = FALSE;
 				}
-				_tmp899_ = _tmp886_;
-				if (_tmp899_) {
-					ValaParameter* _tmp900_;
-					ValaParameterDirection _tmp901_;
-					ValaParameterDirection _tmp902_;
-					_tmp900_ = param;
-					_tmp901_ = vala_parameter_get_direction (_tmp900_);
-					_tmp902_ = _tmp901_;
-					_tmp885_ = _tmp902_ == VALA_PARAMETER_DIRECTION_IN;
+				_tmp936_ = _tmp923_;
+				if (_tmp936_) {
+					ValaParameter* _tmp937_;
+					ValaParameterDirection _tmp938_;
+					ValaParameterDirection _tmp939_;
+					_tmp937_ = param;
+					_tmp938_ = vala_parameter_get_direction (_tmp937_);
+					_tmp939_ = _tmp938_;
+					_tmp922_ = _tmp939_ == VALA_PARAMETER_DIRECTION_IN;
 				} else {
-					_tmp885_ = FALSE;
+					_tmp922_ = FALSE;
 				}
-				_tmp903_ = _tmp885_;
-				if (_tmp903_) {
-					ValaCCodeFunction* _tmp904_;
-					ValaCCodeFunction* _tmp905_;
-					ValaParameter* _tmp906_;
-					ValaCCodeExpression* _tmp907_ = NULL;
-					ValaCCodeExpression* _tmp908_;
-					_tmp904_ = vala_ccode_base_module_get_ccode (self);
-					_tmp905_ = _tmp904_;
-					_tmp906_ = param;
-					_tmp907_ = vala_ccode_base_module_destroy_parameter (self, _tmp906_);
-					_tmp908_ = _tmp907_;
-					vala_ccode_function_add_expression (_tmp905_, _tmp908_);
-					_vala_ccode_node_unref0 (_tmp908_);
+				_tmp940_ = _tmp922_;
+				if (_tmp940_) {
+					ValaCCodeFunction* _tmp941_;
+					ValaCCodeFunction* _tmp942_;
+					ValaParameter* _tmp943_;
+					ValaCCodeExpression* _tmp944_ = NULL;
+					ValaCCodeExpression* _tmp945_;
+					_tmp941_ = vala_ccode_base_module_get_ccode (self);
+					_tmp942_ = _tmp941_;
+					_tmp943_ = param;
+					_tmp944_ = vala_ccode_base_module_destroy_parameter (self, _tmp943_);
+					_tmp945_ = _tmp944_;
+					vala_ccode_function_add_expression (_tmp942_, _tmp945_);
+					_vala_ccode_node_unref0 (_tmp945_);
 				} else {
-					gboolean _tmp909_ = FALSE;
-					ValaParameter* _tmp910_;
-					ValaParameterDirection _tmp911_;
-					ValaParameterDirection _tmp912_;
-					gboolean _tmp916_;
-					_tmp910_ = param;
-					_tmp911_ = vala_parameter_get_direction (_tmp910_);
-					_tmp912_ = _tmp911_;
-					if (_tmp912_ == VALA_PARAMETER_DIRECTION_OUT) {
-						ValaMethod* _tmp913_;
-						gboolean _tmp914_;
-						gboolean _tmp915_;
-						_tmp913_ = m;
-						_tmp914_ = vala_method_get_coroutine (_tmp913_);
-						_tmp915_ = _tmp914_;
-						_tmp909_ = !_tmp915_;
+					gboolean _tmp946_ = FALSE;
+					ValaParameter* _tmp947_;
+					ValaParameterDirection _tmp948_;
+					ValaParameterDirection _tmp949_;
+					gboolean _tmp953_;
+					_tmp947_ = param;
+					_tmp948_ = vala_parameter_get_direction (_tmp947_);
+					_tmp949_ = _tmp948_;
+					if (_tmp949_ == VALA_PARAMETER_DIRECTION_OUT) {
+						ValaMethod* _tmp950_;
+						gboolean _tmp951_;
+						gboolean _tmp952_;
+						_tmp950_ = m;
+						_tmp951_ = vala_method_get_coroutine (_tmp950_);
+						_tmp952_ = _tmp951_;
+						_tmp946_ = !_tmp952_;
 					} else {
-						_tmp909_ = FALSE;
+						_tmp946_ = FALSE;
 					}
-					_tmp916_ = _tmp909_;
-					if (_tmp916_) {
-						ValaParameter* _tmp917_;
-						_tmp917_ = param;
-						vala_ccode_base_module_return_out_parameter (self, _tmp917_);
+					_tmp953_ = _tmp946_;
+					if (_tmp953_) {
+						ValaParameter* _tmp954_;
+						_tmp954_ = param;
+						vala_ccode_base_module_return_out_parameter (self, _tmp954_);
 					}
 				}
 				_vala_code_node_unref0 (param);
@@ -12269,198 +12426,198 @@ static void vala_ccode_base_module_real_visit_block (ValaCodeVisitor* base, Vala
 		}
 		_vala_code_node_unref0 (m);
 	} else {
-		ValaBlock* _tmp918_;
-		ValaSymbol* _tmp919_;
-		ValaSymbol* _tmp920_;
-		_tmp918_ = b;
-		_tmp919_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp918_);
-		_tmp920_ = _tmp919_;
-		if (VALA_IS_PROPERTY_ACCESSOR (_tmp920_)) {
-			ValaBlock* _tmp921_;
-			ValaSymbol* _tmp922_;
-			ValaSymbol* _tmp923_;
-			ValaPropertyAccessor* _tmp924_;
+		ValaBlock* _tmp955_;
+		ValaSymbol* _tmp956_;
+		ValaSymbol* _tmp957_;
+		_tmp955_ = b;
+		_tmp956_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp955_);
+		_tmp957_ = _tmp956_;
+		if (VALA_IS_PROPERTY_ACCESSOR (_tmp957_)) {
+			ValaBlock* _tmp958_;
+			ValaSymbol* _tmp959_;
+			ValaSymbol* _tmp960_;
+			ValaPropertyAccessor* _tmp961_;
 			ValaPropertyAccessor* acc;
-			gboolean _tmp925_ = FALSE;
-			gboolean _tmp926_ = FALSE;
-			ValaPropertyAccessor* _tmp927_;
-			ValaParameter* _tmp928_;
-			ValaParameter* _tmp929_;
-			gboolean _tmp935_;
-			gboolean _tmp942_;
-			_tmp921_ = b;
-			_tmp922_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp921_);
-			_tmp923_ = _tmp922_;
-			_tmp924_ = _vala_code_node_ref0 (VALA_PROPERTY_ACCESSOR (_tmp923_));
-			acc = _tmp924_;
-			_tmp927_ = acc;
-			_tmp928_ = vala_property_accessor_get_value_parameter (_tmp927_);
-			_tmp929_ = _tmp928_;
-			if (_tmp929_ != NULL) {
-				ValaPropertyAccessor* _tmp930_;
-				ValaParameter* _tmp931_;
-				ValaParameter* _tmp932_;
-				gboolean _tmp933_;
-				gboolean _tmp934_;
-				_tmp930_ = acc;
-				_tmp931_ = vala_property_accessor_get_value_parameter (_tmp930_);
-				_tmp932_ = _tmp931_;
-				_tmp933_ = vala_parameter_get_captured (_tmp932_);
-				_tmp934_ = _tmp933_;
-				_tmp926_ = !_tmp934_;
+			gboolean _tmp962_ = FALSE;
+			gboolean _tmp963_ = FALSE;
+			ValaPropertyAccessor* _tmp964_;
+			ValaParameter* _tmp965_;
+			ValaParameter* _tmp966_;
+			gboolean _tmp972_;
+			gboolean _tmp979_;
+			_tmp958_ = b;
+			_tmp959_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp958_);
+			_tmp960_ = _tmp959_;
+			_tmp961_ = _vala_code_node_ref0 (VALA_PROPERTY_ACCESSOR (_tmp960_));
+			acc = _tmp961_;
+			_tmp964_ = acc;
+			_tmp965_ = vala_property_accessor_get_value_parameter (_tmp964_);
+			_tmp966_ = _tmp965_;
+			if (_tmp966_ != NULL) {
+				ValaPropertyAccessor* _tmp967_;
+				ValaParameter* _tmp968_;
+				ValaParameter* _tmp969_;
+				gboolean _tmp970_;
+				gboolean _tmp971_;
+				_tmp967_ = acc;
+				_tmp968_ = vala_property_accessor_get_value_parameter (_tmp967_);
+				_tmp969_ = _tmp968_;
+				_tmp970_ = vala_parameter_get_captured (_tmp969_);
+				_tmp971_ = _tmp970_;
+				_tmp963_ = !_tmp971_;
 			} else {
-				_tmp926_ = FALSE;
+				_tmp963_ = FALSE;
 			}
-			_tmp935_ = _tmp926_;
-			if (_tmp935_) {
-				ValaPropertyAccessor* _tmp936_;
-				ValaParameter* _tmp937_;
-				ValaParameter* _tmp938_;
-				ValaDataType* _tmp939_;
-				ValaDataType* _tmp940_;
-				gboolean _tmp941_ = FALSE;
-				_tmp936_ = acc;
-				_tmp937_ = vala_property_accessor_get_value_parameter (_tmp936_);
-				_tmp938_ = _tmp937_;
-				_tmp939_ = vala_variable_get_variable_type ((ValaVariable*) _tmp938_);
-				_tmp940_ = _tmp939_;
-				_tmp941_ = vala_ccode_base_module_requires_destroy (self, _tmp940_);
-				_tmp925_ = _tmp941_;
+			_tmp972_ = _tmp963_;
+			if (_tmp972_) {
+				ValaPropertyAccessor* _tmp973_;
+				ValaParameter* _tmp974_;
+				ValaParameter* _tmp975_;
+				ValaDataType* _tmp976_;
+				ValaDataType* _tmp977_;
+				gboolean _tmp978_ = FALSE;
+				_tmp973_ = acc;
+				_tmp974_ = vala_property_accessor_get_value_parameter (_tmp973_);
+				_tmp975_ = _tmp974_;
+				_tmp976_ = vala_variable_get_variable_type ((ValaVariable*) _tmp975_);
+				_tmp977_ = _tmp976_;
+				_tmp978_ = vala_ccode_base_module_requires_destroy (self, _tmp977_);
+				_tmp962_ = _tmp978_;
 			} else {
-				_tmp925_ = FALSE;
+				_tmp962_ = FALSE;
 			}
-			_tmp942_ = _tmp925_;
-			if (_tmp942_) {
-				ValaCCodeFunction* _tmp943_;
-				ValaCCodeFunction* _tmp944_;
-				ValaPropertyAccessor* _tmp945_;
-				ValaParameter* _tmp946_;
-				ValaParameter* _tmp947_;
-				ValaCCodeExpression* _tmp948_ = NULL;
-				ValaCCodeExpression* _tmp949_;
-				_tmp943_ = vala_ccode_base_module_get_ccode (self);
-				_tmp944_ = _tmp943_;
-				_tmp945_ = acc;
-				_tmp946_ = vala_property_accessor_get_value_parameter (_tmp945_);
-				_tmp947_ = _tmp946_;
-				_tmp948_ = vala_ccode_base_module_destroy_parameter (self, _tmp947_);
-				_tmp949_ = _tmp948_;
-				vala_ccode_function_add_expression (_tmp944_, _tmp949_);
-				_vala_ccode_node_unref0 (_tmp949_);
+			_tmp979_ = _tmp962_;
+			if (_tmp979_) {
+				ValaCCodeFunction* _tmp980_;
+				ValaCCodeFunction* _tmp981_;
+				ValaPropertyAccessor* _tmp982_;
+				ValaParameter* _tmp983_;
+				ValaParameter* _tmp984_;
+				ValaCCodeExpression* _tmp985_ = NULL;
+				ValaCCodeExpression* _tmp986_;
+				_tmp980_ = vala_ccode_base_module_get_ccode (self);
+				_tmp981_ = _tmp980_;
+				_tmp982_ = acc;
+				_tmp983_ = vala_property_accessor_get_value_parameter (_tmp982_);
+				_tmp984_ = _tmp983_;
+				_tmp985_ = vala_ccode_base_module_destroy_parameter (self, _tmp984_);
+				_tmp986_ = _tmp985_;
+				vala_ccode_function_add_expression (_tmp981_, _tmp986_);
+				_vala_ccode_node_unref0 (_tmp986_);
 			}
 			_vala_code_node_unref0 (acc);
 		}
 	}
-	_tmp950_ = b;
-	_tmp951_ = vala_block_get_captured (_tmp950_);
-	_tmp952_ = _tmp951_;
-	if (_tmp952_) {
-		ValaBlock* _tmp953_;
-		gint _tmp954_ = 0;
+	_tmp987_ = b;
+	_tmp988_ = vala_block_get_captured (_tmp987_);
+	_tmp989_ = _tmp988_;
+	if (_tmp989_) {
+		ValaBlock* _tmp990_;
+		gint _tmp991_ = 0;
 		gint block_id;
-		gint _tmp955_;
-		gchar* _tmp956_ = NULL;
-		gchar* _tmp957_;
-		ValaCCodeIdentifier* _tmp958_;
-		ValaCCodeIdentifier* _tmp959_;
-		ValaCCodeFunctionCall* _tmp960_;
-		ValaCCodeFunctionCall* _tmp961_;
+		gint _tmp992_;
+		gchar* _tmp993_ = NULL;
+		gchar* _tmp994_;
+		ValaCCodeIdentifier* _tmp995_;
+		ValaCCodeIdentifier* _tmp996_;
+		ValaCCodeFunctionCall* _tmp997_;
+		ValaCCodeFunctionCall* _tmp998_;
 		ValaCCodeFunctionCall* data_unref;
-		ValaCCodeFunctionCall* _tmp962_;
-		gint _tmp963_;
-		gchar* _tmp964_ = NULL;
-		gchar* _tmp965_;
-		ValaCCodeExpression* _tmp966_ = NULL;
-		ValaCCodeExpression* _tmp967_;
-		ValaCCodeFunction* _tmp968_;
-		ValaCCodeFunction* _tmp969_;
-		ValaCCodeFunctionCall* _tmp970_;
-		ValaCCodeFunction* _tmp971_;
-		ValaCCodeFunction* _tmp972_;
-		gint _tmp973_;
-		gchar* _tmp974_ = NULL;
-		gchar* _tmp975_;
-		ValaCCodeExpression* _tmp976_ = NULL;
-		ValaCCodeExpression* _tmp977_;
-		ValaCCodeConstant* _tmp978_;
-		ValaCCodeConstant* _tmp979_;
-		_tmp953_ = b;
-		_tmp954_ = vala_ccode_base_module_get_block_id (self, _tmp953_);
-		block_id = _tmp954_;
-		_tmp955_ = block_id;
-		_tmp956_ = g_strdup_printf ("block%d_data_unref", _tmp955_);
-		_tmp957_ = _tmp956_;
-		_tmp958_ = vala_ccode_identifier_new (_tmp957_);
-		_tmp959_ = _tmp958_;
-		_tmp960_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp959_);
-		_tmp961_ = _tmp960_;
-		_vala_ccode_node_unref0 (_tmp959_);
-		_g_free0 (_tmp957_);
-		data_unref = _tmp961_;
-		_tmp962_ = data_unref;
-		_tmp963_ = block_id;
-		_tmp964_ = g_strdup_printf ("_data%d_", _tmp963_);
-		_tmp965_ = _tmp964_;
-		_tmp966_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp965_);
-		_tmp967_ = _tmp966_;
-		vala_ccode_function_call_add_argument (_tmp962_, _tmp967_);
-		_vala_ccode_node_unref0 (_tmp967_);
-		_g_free0 (_tmp965_);
-		_tmp968_ = vala_ccode_base_module_get_ccode (self);
-		_tmp969_ = _tmp968_;
-		_tmp970_ = data_unref;
-		vala_ccode_function_add_expression (_tmp969_, (ValaCCodeExpression*) _tmp970_);
-		_tmp971_ = vala_ccode_base_module_get_ccode (self);
-		_tmp972_ = _tmp971_;
-		_tmp973_ = block_id;
-		_tmp974_ = g_strdup_printf ("_data%d_", _tmp973_);
-		_tmp975_ = _tmp974_;
-		_tmp976_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp975_);
-		_tmp977_ = _tmp976_;
-		_tmp978_ = vala_ccode_constant_new ("NULL");
-		_tmp979_ = _tmp978_;
-		vala_ccode_function_add_assignment (_tmp972_, _tmp977_, (ValaCCodeExpression*) _tmp979_);
-		_vala_ccode_node_unref0 (_tmp979_);
-		_vala_ccode_node_unref0 (_tmp977_);
-		_g_free0 (_tmp975_);
+		ValaCCodeFunctionCall* _tmp999_;
+		gint _tmp1000_;
+		gchar* _tmp1001_ = NULL;
+		gchar* _tmp1002_;
+		ValaCCodeExpression* _tmp1003_ = NULL;
+		ValaCCodeExpression* _tmp1004_;
+		ValaCCodeFunction* _tmp1005_;
+		ValaCCodeFunction* _tmp1006_;
+		ValaCCodeFunctionCall* _tmp1007_;
+		ValaCCodeFunction* _tmp1008_;
+		ValaCCodeFunction* _tmp1009_;
+		gint _tmp1010_;
+		gchar* _tmp1011_ = NULL;
+		gchar* _tmp1012_;
+		ValaCCodeExpression* _tmp1013_ = NULL;
+		ValaCCodeExpression* _tmp1014_;
+		ValaCCodeConstant* _tmp1015_;
+		ValaCCodeConstant* _tmp1016_;
+		_tmp990_ = b;
+		_tmp991_ = vala_ccode_base_module_get_block_id (self, _tmp990_);
+		block_id = _tmp991_;
+		_tmp992_ = block_id;
+		_tmp993_ = g_strdup_printf ("block%d_data_unref", _tmp992_);
+		_tmp994_ = _tmp993_;
+		_tmp995_ = vala_ccode_identifier_new (_tmp994_);
+		_tmp996_ = _tmp995_;
+		_tmp997_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp996_);
+		_tmp998_ = _tmp997_;
+		_vala_ccode_node_unref0 (_tmp996_);
+		_g_free0 (_tmp994_);
+		data_unref = _tmp998_;
+		_tmp999_ = data_unref;
+		_tmp1000_ = block_id;
+		_tmp1001_ = g_strdup_printf ("_data%d_", _tmp1000_);
+		_tmp1002_ = _tmp1001_;
+		_tmp1003_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp1002_);
+		_tmp1004_ = _tmp1003_;
+		vala_ccode_function_call_add_argument (_tmp999_, _tmp1004_);
+		_vala_ccode_node_unref0 (_tmp1004_);
+		_g_free0 (_tmp1002_);
+		_tmp1005_ = vala_ccode_base_module_get_ccode (self);
+		_tmp1006_ = _tmp1005_;
+		_tmp1007_ = data_unref;
+		vala_ccode_function_add_expression (_tmp1006_, (ValaCCodeExpression*) _tmp1007_);
+		_tmp1008_ = vala_ccode_base_module_get_ccode (self);
+		_tmp1009_ = _tmp1008_;
+		_tmp1010_ = block_id;
+		_tmp1011_ = g_strdup_printf ("_data%d_", _tmp1010_);
+		_tmp1012_ = _tmp1011_;
+		_tmp1013_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp1012_);
+		_tmp1014_ = _tmp1013_;
+		_tmp1015_ = vala_ccode_constant_new ("NULL");
+		_tmp1016_ = _tmp1015_;
+		vala_ccode_function_add_assignment (_tmp1009_, _tmp1014_, (ValaCCodeExpression*) _tmp1016_);
+		_vala_ccode_node_unref0 (_tmp1016_);
+		_vala_ccode_node_unref0 (_tmp1014_);
+		_g_free0 (_tmp1012_);
 		_vala_ccode_node_unref0 (data_unref);
 	}
-	_tmp982_ = b;
-	_tmp983_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp982_);
-	_tmp984_ = _tmp983_;
-	if (VALA_IS_BLOCK (_tmp984_)) {
-		_tmp981_ = TRUE;
+	_tmp1019_ = b;
+	_tmp1020_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp1019_);
+	_tmp1021_ = _tmp1020_;
+	if (VALA_IS_BLOCK (_tmp1021_)) {
+		_tmp1018_ = TRUE;
 	} else {
-		ValaBlock* _tmp985_;
-		ValaCodeNode* _tmp986_;
-		ValaCodeNode* _tmp987_;
-		_tmp985_ = b;
-		_tmp986_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp985_);
-		_tmp987_ = _tmp986_;
-		_tmp981_ = VALA_IS_SWITCH_STATEMENT (_tmp987_);
-	}
-	_tmp988_ = _tmp981_;
-	if (_tmp988_) {
-		_tmp980_ = TRUE;
+		ValaBlock* _tmp1022_;
+		ValaCodeNode* _tmp1023_;
+		ValaCodeNode* _tmp1024_;
+		_tmp1022_ = b;
+		_tmp1023_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp1022_);
+		_tmp1024_ = _tmp1023_;
+		_tmp1018_ = VALA_IS_SWITCH_STATEMENT (_tmp1024_);
+	}
+	_tmp1025_ = _tmp1018_;
+	if (_tmp1025_) {
+		_tmp1017_ = TRUE;
 	} else {
-		ValaBlock* _tmp989_;
-		ValaCodeNode* _tmp990_;
-		ValaCodeNode* _tmp991_;
-		_tmp989_ = b;
-		_tmp990_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp989_);
-		_tmp991_ = _tmp990_;
-		_tmp980_ = VALA_IS_TRY_STATEMENT (_tmp991_);
-	}
-	_tmp992_ = _tmp980_;
-	if (_tmp992_) {
-		ValaCCodeFunction* _tmp993_;
-		ValaCCodeFunction* _tmp994_;
-		_tmp993_ = vala_ccode_base_module_get_ccode (self);
-		_tmp994_ = _tmp993_;
-		vala_ccode_function_close (_tmp994_);
-	}
-	_tmp995_ = self->emit_context;
-	vala_ccode_base_module_emit_context_pop_symbol (_tmp995_);
+		ValaBlock* _tmp1026_;
+		ValaCodeNode* _tmp1027_;
+		ValaCodeNode* _tmp1028_;
+		_tmp1026_ = b;
+		_tmp1027_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp1026_);
+		_tmp1028_ = _tmp1027_;
+		_tmp1017_ = VALA_IS_TRY_STATEMENT (_tmp1028_);
+	}
+	_tmp1029_ = _tmp1017_;
+	if (_tmp1029_) {
+		ValaCCodeFunction* _tmp1030_;
+		ValaCCodeFunction* _tmp1031_;
+		_tmp1030_ = vala_ccode_base_module_get_ccode (self);
+		_tmp1031_ = _tmp1030_;
+		vala_ccode_function_close (_tmp1031_);
+	}
+	_tmp1032_ = self->emit_context;
+	vala_ccode_base_module_emit_context_pop_symbol (_tmp1032_);
 	_vala_iterable_unref0 (local_vars);
 }
 
@@ -12737,47 +12894,52 @@ ValaCCodeExpression* vala_ccode_base_module_get_result_cexpression (ValaCCodeBas
 }
 
 
-static gboolean vala_ccode_base_module_has_simple_struct_initializer (ValaCCodeBaseModule* self, ValaLocalVariable* local) {
+gboolean vala_ccode_base_module_is_simple_struct_creation (ValaCCodeBaseModule* self, ValaVariable* variable, ValaExpression* expr) {
 	gboolean result = FALSE;
-	ValaLocalVariable* _tmp0_;
+	ValaVariable* _tmp0_;
 	ValaDataType* _tmp1_;
 	ValaDataType* _tmp2_;
 	ValaTypeSymbol* _tmp3_;
 	ValaTypeSymbol* _tmp4_;
 	ValaStruct* _tmp5_;
 	ValaStruct* st;
-	ValaLocalVariable* _tmp6_;
-	ValaExpression* _tmp7_;
-	ValaExpression* _tmp8_;
-	ValaObjectCreationExpression* _tmp9_;
-	ValaObjectCreationExpression* initializer;
+	ValaExpression* _tmp6_;
+	ValaObjectCreationExpression* _tmp7_;
+	ValaObjectCreationExpression* creation;
+	gboolean _tmp8_ = FALSE;
+	gboolean _tmp9_ = FALSE;
 	gboolean _tmp10_ = FALSE;
 	gboolean _tmp11_ = FALSE;
 	gboolean _tmp12_ = FALSE;
-	gboolean _tmp13_ = FALSE;
-	gboolean _tmp14_ = FALSE;
-	ValaStruct* _tmp15_;
+	ValaObjectCreationExpression* _tmp13_;
+	gboolean _tmp15_;
 	gboolean _tmp23_;
 	gboolean _tmp29_;
 	gboolean _tmp36_;
-	gboolean _tmp38_;
-	gboolean _tmp44_;
+	gboolean _tmp42_;
 	g_return_val_if_fail (self != NULL, FALSE);
-	g_return_val_if_fail (local != NULL, FALSE);
-	_tmp0_ = local;
-	_tmp1_ = vala_variable_get_variable_type ((ValaVariable*) _tmp0_);
+	g_return_val_if_fail (variable != NULL, FALSE);
+	g_return_val_if_fail (expr != NULL, FALSE);
+	_tmp0_ = variable;
+	_tmp1_ = vala_variable_get_variable_type (_tmp0_);
 	_tmp2_ = _tmp1_;
 	_tmp3_ = vala_data_type_get_data_type (_tmp2_);
 	_tmp4_ = _tmp3_;
 	_tmp5_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp4_) ? ((ValaStruct*) _tmp4_) : NULL);
 	st = _tmp5_;
-	_tmp6_ = local;
-	_tmp7_ = vala_variable_get_initializer ((ValaVariable*) _tmp6_);
-	_tmp8_ = _tmp7_;
-	_tmp9_ = _vala_code_node_ref0 (VALA_IS_OBJECT_CREATION_EXPRESSION (_tmp8_) ? ((ValaObjectCreationExpression*) _tmp8_) : NULL);
-	initializer = _tmp9_;
-	_tmp15_ = st;
-	if (_tmp15_ != NULL) {
+	_tmp6_ = expr;
+	_tmp7_ = _vala_code_node_ref0 (VALA_IS_OBJECT_CREATION_EXPRESSION (_tmp6_) ? ((ValaObjectCreationExpression*) _tmp6_) : NULL);
+	creation = _tmp7_;
+	_tmp13_ = creation;
+	if (_tmp13_ != NULL) {
+		ValaStruct* _tmp14_;
+		_tmp14_ = st;
+		_tmp12_ = _tmp14_ != NULL;
+	} else {
+		_tmp12_ = FALSE;
+	}
+	_tmp15_ = _tmp12_;
+	if (_tmp15_) {
 		gboolean _tmp16_ = FALSE;
 		ValaStruct* _tmp17_;
 		gboolean _tmp18_ = FALSE;
@@ -12797,86 +12959,151 @@ static gboolean vala_ccode_base_module_has_simple_struct_initializer (ValaCCodeB
 			_g_free0 (_tmp21_);
 		}
 		_tmp22_ = _tmp16_;
-		_tmp14_ = _tmp22_;
+		_tmp11_ = _tmp22_;
 	} else {
-		_tmp14_ = FALSE;
+		_tmp11_ = FALSE;
 	}
-	_tmp23_ = _tmp14_;
+	_tmp23_ = _tmp11_;
 	if (_tmp23_) {
-		ValaLocalVariable* _tmp24_;
+		ValaVariable* _tmp24_;
 		ValaDataType* _tmp25_;
 		ValaDataType* _tmp26_;
 		gboolean _tmp27_;
 		gboolean _tmp28_;
-		_tmp24_ = local;
-		_tmp25_ = vala_variable_get_variable_type ((ValaVariable*) _tmp24_);
+		_tmp24_ = variable;
+		_tmp25_ = vala_variable_get_variable_type (_tmp24_);
 		_tmp26_ = _tmp25_;
 		_tmp27_ = vala_data_type_get_nullable (_tmp26_);
 		_tmp28_ = _tmp27_;
-		_tmp13_ = !_tmp28_;
+		_tmp10_ = !_tmp28_;
 	} else {
-		_tmp13_ = FALSE;
+		_tmp10_ = FALSE;
 	}
-	_tmp29_ = _tmp13_;
+	_tmp29_ = _tmp10_;
 	if (_tmp29_) {
-		ValaLocalVariable* _tmp30_;
+		ValaVariable* _tmp30_;
 		ValaDataType* _tmp31_;
 		ValaDataType* _tmp32_;
 		ValaTypeSymbol* _tmp33_;
 		ValaTypeSymbol* _tmp34_;
 		ValaStruct* _tmp35_;
-		_tmp30_ = local;
-		_tmp31_ = vala_variable_get_variable_type ((ValaVariable*) _tmp30_);
+		_tmp30_ = variable;
+		_tmp31_ = vala_variable_get_variable_type (_tmp30_);
 		_tmp32_ = _tmp31_;
 		_tmp33_ = vala_data_type_get_data_type (_tmp32_);
 		_tmp34_ = _tmp33_;
 		_tmp35_ = self->gvalue_type;
-		_tmp12_ = _tmp34_ != VALA_TYPESYMBOL (_tmp35_);
+		_tmp9_ = _tmp34_ != VALA_TYPESYMBOL (_tmp35_);
 	} else {
-		_tmp12_ = FALSE;
+		_tmp9_ = FALSE;
 	}
-	_tmp36_ = _tmp12_;
+	_tmp36_ = _tmp9_;
 	if (_tmp36_) {
 		ValaObjectCreationExpression* _tmp37_;
-		_tmp37_ = initializer;
-		_tmp11_ = _tmp37_ != NULL;
-	} else {
-		_tmp11_ = FALSE;
-	}
-	_tmp38_ = _tmp11_;
-	if (_tmp38_) {
-		ValaObjectCreationExpression* _tmp39_;
-		ValaList* _tmp40_ = NULL;
-		ValaList* _tmp41_;
-		gint _tmp42_;
-		gint _tmp43_;
-		_tmp39_ = initializer;
-		_tmp40_ = vala_object_creation_expression_get_object_initializer (_tmp39_);
+		ValaList* _tmp38_ = NULL;
+		ValaList* _tmp39_;
+		gint _tmp40_;
+		gint _tmp41_;
+		_tmp37_ = creation;
+		_tmp38_ = vala_object_creation_expression_get_object_initializer (_tmp37_);
+		_tmp39_ = _tmp38_;
+		_tmp40_ = vala_collection_get_size ((ValaCollection*) _tmp39_);
 		_tmp41_ = _tmp40_;
-		_tmp42_ = vala_collection_get_size ((ValaCollection*) _tmp41_);
-		_tmp43_ = _tmp42_;
-		_tmp10_ = _tmp43_ == 0;
-		_vala_iterable_unref0 (_tmp41_);
+		_tmp8_ = _tmp41_ == 0;
+		_vala_iterable_unref0 (_tmp39_);
 	} else {
-		_tmp10_ = FALSE;
+		_tmp8_ = FALSE;
 	}
-	_tmp44_ = _tmp10_;
-	if (_tmp44_) {
+	_tmp42_ = _tmp8_;
+	if (_tmp42_) {
 		result = TRUE;
-		_vala_code_node_unref0 (initializer);
+		_vala_code_node_unref0 (creation);
 		_vala_code_node_unref0 (st);
 		return result;
 	} else {
 		result = FALSE;
-		_vala_code_node_unref0 (initializer);
+		_vala_code_node_unref0 (creation);
 		_vala_code_node_unref0 (st);
 		return result;
 	}
-	_vala_code_node_unref0 (initializer);
+	_vala_code_node_unref0 (creation);
 	_vala_code_node_unref0 (st);
 }
 
 
+static gboolean vala_ccode_base_module_is_foreach_element_variable (ValaCCodeBaseModule* self, ValaLocalVariable* local) {
+	gboolean result = FALSE;
+	ValaLocalVariable* _tmp0_;
+	ValaSymbol* _tmp1_;
+	ValaSymbol* _tmp2_;
+	ValaSymbol* _tmp3_;
+	ValaSymbol* block;
+	ValaSymbol* _tmp4_;
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (local != NULL, FALSE);
+	_tmp0_ = local;
+	_tmp1_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp0_);
+	_tmp2_ = _tmp1_;
+	_tmp3_ = _vala_code_node_ref0 (_tmp2_);
+	block = _tmp3_;
+	_tmp4_ = block;
+	if (_tmp4_ != NULL) {
+		ValaSymbol* _tmp5_;
+		ValaSymbol* _tmp6_;
+		ValaSymbol* _tmp7_;
+		ValaForeachStatement* _tmp8_;
+		ValaForeachStatement* stmt;
+		gboolean _tmp9_ = FALSE;
+		gboolean _tmp10_ = FALSE;
+		ValaForeachStatement* _tmp11_;
+		gboolean _tmp15_;
+		gboolean _tmp20_;
+		_tmp5_ = block;
+		_tmp6_ = vala_symbol_get_parent_symbol (_tmp5_);
+		_tmp7_ = _tmp6_;
+		_tmp8_ = _vala_code_node_ref0 (VALA_IS_FOREACH_STATEMENT (_tmp7_) ? ((ValaForeachStatement*) _tmp7_) : NULL);
+		stmt = _tmp8_;
+		_tmp11_ = stmt;
+		if (_tmp11_ != NULL) {
+			ValaForeachStatement* _tmp12_;
+			gboolean _tmp13_;
+			gboolean _tmp14_;
+			_tmp12_ = stmt;
+			_tmp13_ = vala_foreach_statement_get_use_iterator (_tmp12_);
+			_tmp14_ = _tmp13_;
+			_tmp10_ = !_tmp14_;
+		} else {
+			_tmp10_ = FALSE;
+		}
+		_tmp15_ = _tmp10_;
+		if (_tmp15_) {
+			ValaForeachStatement* _tmp16_;
+			ValaLocalVariable* _tmp17_;
+			ValaLocalVariable* _tmp18_;
+			ValaLocalVariable* _tmp19_;
+			_tmp16_ = stmt;
+			_tmp17_ = vala_foreach_statement_get_element_variable (_tmp16_);
+			_tmp18_ = _tmp17_;
+			_tmp19_ = local;
+			_tmp9_ = _tmp18_ == _tmp19_;
+		} else {
+			_tmp9_ = FALSE;
+		}
+		_tmp20_ = _tmp9_;
+		if (_tmp20_) {
+			result = TRUE;
+			_vala_code_node_unref0 (stmt);
+			_vala_code_node_unref0 (block);
+			return result;
+		}
+		_vala_code_node_unref0 (stmt);
+	}
+	result = FALSE;
+	_vala_code_node_unref0 (block);
+	return result;
+}
+
+
 static void vala_ccode_base_module_real_visit_local_variable (ValaCodeVisitor* base, ValaLocalVariable* local) {
 	ValaCCodeBaseModule * self;
 	ValaLocalVariable* _tmp0_;
@@ -12895,16 +13122,18 @@ static void vala_ccode_base_module_real_visit_local_variable (ValaCodeVisitor* b
 	ValaExpression* _tmp18_;
 	ValaExpression* _tmp19_;
 	gboolean _tmp25_;
-	ValaLocalVariable* _tmp30_;
-	gboolean _tmp31_;
+	gboolean _tmp30_ = FALSE;
+	ValaLocalVariable* _tmp31_;
 	gboolean _tmp32_;
-	ValaCCodeExpression* _tmp194_;
-	gboolean _tmp203_ = FALSE;
-	ValaLocalVariable* _tmp204_;
-	ValaExpression* _tmp205_;
-	ValaExpression* _tmp206_;
-	gboolean _tmp212_;
-	ValaLocalVariable* _tmp216_;
+	gboolean _tmp33_;
+	gboolean _tmp36_;
+	ValaCCodeExpression* _tmp201_;
+	gboolean _tmp213_ = FALSE;
+	ValaLocalVariable* _tmp214_;
+	ValaExpression* _tmp215_;
+	ValaExpression* _tmp216_;
+	gboolean _tmp222_;
+	ValaLocalVariable* _tmp226_;
 	self = (ValaCCodeBaseModule*) base;
 	g_return_if_fail (local != NULL);
 	_tmp0_ = local;
@@ -12968,423 +13197,439 @@ static void vala_ccode_base_module_real_visit_local_variable (ValaCodeVisitor* b
 		_vala_ccode_node_unref0 (rhs);
 		rhs = _tmp29_;
 	}
-	_tmp30_ = local;
-	_tmp31_ = vala_local_variable_get_captured (_tmp30_);
-	_tmp32_ = _tmp31_;
-	if (!_tmp32_) {
-		gboolean _tmp33_ = FALSE;
-		ValaLocalVariable* _tmp97_;
-		ValaDataType* _tmp98_;
-		ValaDataType* _tmp99_;
-		_tmp33_ = vala_ccode_base_module_is_in_coroutine (self);
-		if (_tmp33_) {
-			ValaCCodeBaseModuleEmitContext* _tmp34_;
-			ValaMap* _tmp35_;
-			ValaLocalVariable* _tmp36_;
-			const gchar* _tmp37_;
-			const gchar* _tmp38_;
-			gpointer _tmp39_ = NULL;
+	_tmp31_ = local;
+	_tmp32_ = vala_local_variable_get_captured (_tmp31_);
+	_tmp33_ = _tmp32_;
+	if (!_tmp33_) {
+		_tmp30_ = TRUE;
+	} else {
+		ValaLocalVariable* _tmp34_;
+		gboolean _tmp35_ = FALSE;
+		_tmp34_ = local;
+		_tmp35_ = vala_ccode_base_module_is_foreach_element_variable (self, _tmp34_);
+		_tmp30_ = _tmp35_;
+	}
+	_tmp36_ = _tmp30_;
+	if (_tmp36_) {
+		gboolean _tmp37_ = FALSE;
+		ValaLocalVariable* _tmp104_;
+		ValaDataType* _tmp105_;
+		ValaDataType* _tmp106_;
+		_tmp37_ = vala_ccode_base_module_is_in_coroutine (self);
+		if (_tmp37_) {
+			ValaCCodeBaseModuleEmitContext* _tmp38_;
+			ValaMap* _tmp39_;
+			ValaLocalVariable* _tmp40_;
+			const gchar* _tmp41_;
+			const gchar* _tmp42_;
+			gpointer _tmp43_ = NULL;
 			gint count;
-			gint _tmp40_;
-			ValaCCodeBaseModuleEmitContext* _tmp45_;
-			ValaMap* _tmp46_;
-			ValaLocalVariable* _tmp47_;
-			const gchar* _tmp48_;
-			const gchar* _tmp49_;
-			gint _tmp50_;
-			ValaCCodeStruct* _tmp51_;
-			ValaLocalVariable* _tmp52_;
-			ValaDataType* _tmp53_;
-			ValaDataType* _tmp54_;
-			gchar* _tmp55_ = NULL;
-			gchar* _tmp56_;
-			ValaLocalVariable* _tmp57_;
-			gchar* _tmp58_ = NULL;
-			gchar* _tmp59_;
-			ValaLocalVariable* _tmp60_;
-			ValaDataType* _tmp61_;
-			ValaDataType* _tmp62_;
-			gchar* _tmp63_ = NULL;
-			gchar* _tmp64_;
-			gchar* _tmp65_;
-			gchar* _tmp66_;
-			_tmp34_ = self->emit_context;
-			_tmp35_ = _tmp34_->closure_variable_count_map;
-			_tmp36_ = local;
-			_tmp37_ = vala_symbol_get_name ((ValaSymbol*) _tmp36_);
-			_tmp38_ = _tmp37_;
-			_tmp39_ = vala_map_get (_tmp35_, _tmp38_);
-			count = GPOINTER_TO_INT (_tmp39_);
-			_tmp40_ = count;
-			if (_tmp40_ > 0) {
-				ValaCCodeBaseModuleEmitContext* _tmp41_;
-				ValaMap* _tmp42_;
-				ValaLocalVariable* _tmp43_;
-				gint _tmp44_;
-				_tmp41_ = self->emit_context;
-				_tmp42_ = _tmp41_->closure_variable_clash_map;
-				_tmp43_ = local;
-				_tmp44_ = count;
-				vala_map_set (_tmp42_, _tmp43_, GINT_TO_POINTER (_tmp44_));
+			gint _tmp44_;
+			ValaCCodeBaseModuleEmitContext* _tmp49_;
+			ValaMap* _tmp50_;
+			ValaLocalVariable* _tmp51_;
+			const gchar* _tmp52_;
+			const gchar* _tmp53_;
+			gint _tmp54_;
+			ValaCCodeStruct* _tmp55_;
+			ValaLocalVariable* _tmp56_;
+			ValaDataType* _tmp57_;
+			ValaDataType* _tmp58_;
+			gchar* _tmp59_ = NULL;
+			gchar* _tmp60_;
+			ValaLocalVariable* _tmp61_;
+			gchar* _tmp62_ = NULL;
+			gchar* _tmp63_;
+			ValaLocalVariable* _tmp64_;
+			ValaDataType* _tmp65_;
+			ValaDataType* _tmp66_;
+			gchar* _tmp67_ = NULL;
+			gchar* _tmp68_;
+			gchar* _tmp69_;
+			gchar* _tmp70_;
+			_tmp38_ = self->emit_context;
+			_tmp39_ = _tmp38_->closure_variable_count_map;
+			_tmp40_ = local;
+			_tmp41_ = vala_symbol_get_name ((ValaSymbol*) _tmp40_);
+			_tmp42_ = _tmp41_;
+			_tmp43_ = vala_map_get (_tmp39_, _tmp42_);
+			count = GPOINTER_TO_INT (_tmp43_);
+			_tmp44_ = count;
+			if (_tmp44_ > 0) {
+				ValaCCodeBaseModuleEmitContext* _tmp45_;
+				ValaMap* _tmp46_;
+				ValaLocalVariable* _tmp47_;
+				gint _tmp48_;
+				_tmp45_ = self->emit_context;
+				_tmp46_ = _tmp45_->closure_variable_clash_map;
+				_tmp47_ = local;
+				_tmp48_ = count;
+				vala_map_set (_tmp46_, _tmp47_, GINT_TO_POINTER (_tmp48_));
 			}
-			_tmp45_ = self->emit_context;
-			_tmp46_ = _tmp45_->closure_variable_count_map;
-			_tmp47_ = local;
-			_tmp48_ = vala_symbol_get_name ((ValaSymbol*) _tmp47_);
-			_tmp49_ = _tmp48_;
-			_tmp50_ = count;
-			vala_map_set (_tmp46_, _tmp49_, GINT_TO_POINTER (_tmp50_ + 1));
-			_tmp51_ = self->closure_struct;
-			_tmp52_ = local;
-			_tmp53_ = vala_variable_get_variable_type ((ValaVariable*) _tmp52_);
-			_tmp54_ = _tmp53_;
-			_tmp55_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp54_);
-			_tmp56_ = _tmp55_;
-			_tmp57_ = local;
-			_tmp58_ = vala_ccode_base_module_get_local_cname (self, _tmp57_);
-			_tmp59_ = _tmp58_;
-			_tmp60_ = local;
-			_tmp61_ = vala_variable_get_variable_type ((ValaVariable*) _tmp60_);
-			_tmp62_ = _tmp61_;
-			_tmp63_ = vala_ccode_base_module_get_ccode_declarator_suffix (_tmp62_);
-			_tmp64_ = _tmp63_;
-			_tmp65_ = g_strconcat (_tmp59_, _tmp64_, NULL);
+			_tmp49_ = self->emit_context;
+			_tmp50_ = _tmp49_->closure_variable_count_map;
+			_tmp51_ = local;
+			_tmp52_ = vala_symbol_get_name ((ValaSymbol*) _tmp51_);
+			_tmp53_ = _tmp52_;
+			_tmp54_ = count;
+			vala_map_set (_tmp50_, _tmp53_, GINT_TO_POINTER (_tmp54_ + 1));
+			_tmp55_ = self->closure_struct;
+			_tmp56_ = local;
+			_tmp57_ = vala_variable_get_variable_type ((ValaVariable*) _tmp56_);
+			_tmp58_ = _tmp57_;
+			_tmp59_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp58_);
+			_tmp60_ = _tmp59_;
+			_tmp61_ = local;
+			_tmp62_ = vala_ccode_base_module_get_local_cname (self, _tmp61_);
+			_tmp63_ = _tmp62_;
+			_tmp64_ = local;
+			_tmp65_ = vala_variable_get_variable_type ((ValaVariable*) _tmp64_);
 			_tmp66_ = _tmp65_;
-			vala_ccode_struct_add_field (_tmp51_, _tmp56_, _tmp66_, NULL);
-			_g_free0 (_tmp66_);
-			_g_free0 (_tmp64_);
-			_g_free0 (_tmp59_);
-			_g_free0 (_tmp56_);
+			_tmp67_ = vala_ccode_base_module_get_ccode_declarator_suffix (_tmp66_);
+			_tmp68_ = _tmp67_;
+			_tmp69_ = g_strconcat (_tmp63_, _tmp68_, NULL);
+			_tmp70_ = _tmp69_;
+			vala_ccode_struct_add_field (_tmp55_, _tmp60_, _tmp70_, NULL);
+			_g_free0 (_tmp70_);
+			_g_free0 (_tmp68_);
+			_g_free0 (_tmp63_);
+			_g_free0 (_tmp60_);
 		} else {
-			ValaLocalVariable* _tmp67_;
-			gchar* _tmp68_ = NULL;
-			gchar* _tmp69_;
-			ValaLocalVariable* _tmp70_;
-			ValaDataType* _tmp71_;
-			ValaDataType* _tmp72_;
-			gchar* _tmp73_ = NULL;
-			gchar* _tmp74_;
-			ValaCCodeVariableDeclarator* _tmp75_;
-			ValaCCodeVariableDeclarator* _tmp76_;
+			ValaLocalVariable* _tmp71_;
+			gchar* _tmp72_ = NULL;
+			gchar* _tmp73_;
+			ValaLocalVariable* _tmp74_;
+			ValaDataType* _tmp75_;
+			ValaDataType* _tmp76_;
+			gchar* _tmp77_ = NULL;
+			gchar* _tmp78_;
+			ValaCCodeVariableDeclarator* _tmp79_;
+			ValaCCodeVariableDeclarator* _tmp80_;
 			ValaCCodeVariableDeclarator* cvar;
-			gboolean _tmp77_ = FALSE;
-			ValaCCodeExpression* _tmp78_;
-			gboolean _tmp81_;
-			ValaCCodeFunction* _tmp89_;
-			ValaCCodeFunction* _tmp90_;
-			ValaLocalVariable* _tmp91_;
-			ValaDataType* _tmp92_;
-			ValaDataType* _tmp93_;
-			gchar* _tmp94_ = NULL;
-			gchar* _tmp95_;
-			ValaCCodeVariableDeclarator* _tmp96_;
-			_tmp67_ = local;
-			_tmp68_ = vala_ccode_base_module_get_local_cname (self, _tmp67_);
-			_tmp69_ = _tmp68_;
-			_tmp70_ = local;
-			_tmp71_ = vala_variable_get_variable_type ((ValaVariable*) _tmp70_);
-			_tmp72_ = _tmp71_;
-			_tmp73_ = vala_ccode_base_module_get_ccode_declarator_suffix (_tmp72_);
-			_tmp74_ = _tmp73_;
-			_tmp75_ = vala_ccode_variable_declarator_new (_tmp69_, NULL, _tmp74_);
+			gboolean _tmp81_ = FALSE;
+			ValaCCodeExpression* _tmp82_;
+			gboolean _tmp88_;
+			ValaCCodeFunction* _tmp96_;
+			ValaCCodeFunction* _tmp97_;
+			ValaLocalVariable* _tmp98_;
+			ValaDataType* _tmp99_;
+			ValaDataType* _tmp100_;
+			gchar* _tmp101_ = NULL;
+			gchar* _tmp102_;
+			ValaCCodeVariableDeclarator* _tmp103_;
+			_tmp71_ = local;
+			_tmp72_ = vala_ccode_base_module_get_local_cname (self, _tmp71_);
+			_tmp73_ = _tmp72_;
+			_tmp74_ = local;
+			_tmp75_ = vala_variable_get_variable_type ((ValaVariable*) _tmp74_);
 			_tmp76_ = _tmp75_;
-			_g_free0 (_tmp74_);
-			_g_free0 (_tmp69_);
-			cvar = _tmp76_;
-			_tmp78_ = rhs;
-			if (_tmp78_ == NULL) {
-				_tmp77_ = TRUE;
+			_tmp77_ = vala_ccode_base_module_get_ccode_declarator_suffix (_tmp76_);
+			_tmp78_ = _tmp77_;
+			_tmp79_ = vala_ccode_variable_declarator_new (_tmp73_, NULL, _tmp78_);
+			_tmp80_ = _tmp79_;
+			_g_free0 (_tmp78_);
+			_g_free0 (_tmp73_);
+			cvar = _tmp80_;
+			_tmp82_ = rhs;
+			if (_tmp82_ == NULL) {
+				_tmp81_ = TRUE;
 			} else {
-				ValaLocalVariable* _tmp79_;
-				gboolean _tmp80_ = FALSE;
-				_tmp79_ = local;
-				_tmp80_ = vala_ccode_base_module_has_simple_struct_initializer (self, _tmp79_);
-				_tmp77_ = _tmp80_;
-			}
-			_tmp81_ = _tmp77_;
-			if (_tmp81_) {
-				ValaCCodeVariableDeclarator* _tmp82_;
 				ValaLocalVariable* _tmp83_;
-				ValaDataType* _tmp84_;
-				ValaDataType* _tmp85_;
-				ValaCCodeExpression* _tmp86_ = NULL;
-				ValaCCodeExpression* _tmp87_;
-				ValaCCodeVariableDeclarator* _tmp88_;
-				_tmp82_ = cvar;
+				ValaLocalVariable* _tmp84_;
+				ValaExpression* _tmp85_;
+				ValaExpression* _tmp86_;
+				gboolean _tmp87_ = FALSE;
 				_tmp83_ = local;
-				_tmp84_ = vala_variable_get_variable_type ((ValaVariable*) _tmp83_);
-				_tmp85_ = _tmp84_;
-				_tmp86_ = vala_ccode_base_module_default_value_for_type (self, _tmp85_, TRUE);
-				_tmp87_ = _tmp86_;
-				vala_ccode_variable_declarator_set_initializer (_tmp82_, _tmp87_);
-				_vala_ccode_node_unref0 (_tmp87_);
-				_tmp88_ = cvar;
-				vala_ccode_variable_declarator_set_init0 (_tmp88_, TRUE);
+				_tmp84_ = local;
+				_tmp85_ = vala_variable_get_initializer ((ValaVariable*) _tmp84_);
+				_tmp86_ = _tmp85_;
+				_tmp87_ = vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) _tmp83_, _tmp86_);
+				_tmp81_ = _tmp87_;
 			}
-			_tmp89_ = vala_ccode_base_module_get_ccode (self);
-			_tmp90_ = _tmp89_;
-			_tmp91_ = local;
-			_tmp92_ = vala_variable_get_variable_type ((ValaVariable*) _tmp91_);
-			_tmp93_ = _tmp92_;
-			_tmp94_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp93_);
-			_tmp95_ = _tmp94_;
-			_tmp96_ = cvar;
-			vala_ccode_function_add_declaration (_tmp90_, _tmp95_, (ValaCCodeDeclarator*) _tmp96_, 0);
-			_g_free0 (_tmp95_);
+			_tmp88_ = _tmp81_;
+			if (_tmp88_) {
+				ValaCCodeVariableDeclarator* _tmp89_;
+				ValaLocalVariable* _tmp90_;
+				ValaDataType* _tmp91_;
+				ValaDataType* _tmp92_;
+				ValaCCodeExpression* _tmp93_ = NULL;
+				ValaCCodeExpression* _tmp94_;
+				ValaCCodeVariableDeclarator* _tmp95_;
+				_tmp89_ = cvar;
+				_tmp90_ = local;
+				_tmp91_ = vala_variable_get_variable_type ((ValaVariable*) _tmp90_);
+				_tmp92_ = _tmp91_;
+				_tmp93_ = vala_ccode_base_module_default_value_for_type (self, _tmp92_, TRUE);
+				_tmp94_ = _tmp93_;
+				vala_ccode_variable_declarator_set_initializer (_tmp89_, _tmp94_);
+				_vala_ccode_node_unref0 (_tmp94_);
+				_tmp95_ = cvar;
+				vala_ccode_variable_declarator_set_init0 (_tmp95_, TRUE);
+			}
+			_tmp96_ = vala_ccode_base_module_get_ccode (self);
+			_tmp97_ = _tmp96_;
+			_tmp98_ = local;
+			_tmp99_ = vala_variable_get_variable_type ((ValaVariable*) _tmp98_);
+			_tmp100_ = _tmp99_;
+			_tmp101_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp100_);
+			_tmp102_ = _tmp101_;
+			_tmp103_ = cvar;
+			vala_ccode_function_add_declaration (_tmp97_, _tmp102_, (ValaCCodeDeclarator*) _tmp103_, 0);
+			_g_free0 (_tmp102_);
 			_vala_ccode_node_unref0 (cvar);
 		}
-		_tmp97_ = local;
-		_tmp98_ = vala_variable_get_variable_type ((ValaVariable*) _tmp97_);
-		_tmp99_ = _tmp98_;
-		if (VALA_IS_ARRAY_TYPE (_tmp99_)) {
-			ValaLocalVariable* _tmp100_;
-			ValaDataType* _tmp101_;
-			ValaDataType* _tmp102_;
-			ValaArrayType* _tmp103_;
+		_tmp104_ = local;
+		_tmp105_ = vala_variable_get_variable_type ((ValaVariable*) _tmp104_);
+		_tmp106_ = _tmp105_;
+		if (VALA_IS_ARRAY_TYPE (_tmp106_)) {
+			ValaLocalVariable* _tmp107_;
+			ValaDataType* _tmp108_;
+			ValaDataType* _tmp109_;
+			ValaArrayType* _tmp110_;
 			ValaArrayType* array_type;
-			ValaArrayType* _tmp104_;
-			gboolean _tmp105_;
-			gboolean _tmp106_;
-			_tmp100_ = local;
-			_tmp101_ = vala_variable_get_variable_type ((ValaVariable*) _tmp100_);
-			_tmp102_ = _tmp101_;
-			_tmp103_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp102_));
-			array_type = _tmp103_;
-			_tmp104_ = array_type;
-			_tmp105_ = vala_array_type_get_fixed_length (_tmp104_);
-			_tmp106_ = _tmp105_;
-			if (!_tmp106_) {
-				ValaArrayType* _tmp130_;
-				gint _tmp131_;
-				gint _tmp132_;
+			ValaArrayType* _tmp111_;
+			gboolean _tmp112_;
+			gboolean _tmp113_;
+			_tmp107_ = local;
+			_tmp108_ = vala_variable_get_variable_type ((ValaVariable*) _tmp107_);
+			_tmp109_ = _tmp108_;
+			_tmp110_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp109_));
+			array_type = _tmp110_;
+			_tmp111_ = array_type;
+			_tmp112_ = vala_array_type_get_fixed_length (_tmp111_);
+			_tmp113_ = _tmp112_;
+			if (!_tmp113_) {
+				ValaArrayType* _tmp137_;
+				gint _tmp138_;
+				gint _tmp139_;
 				{
 					gint dim;
 					dim = 1;
 					{
-						gboolean _tmp107_;
-						_tmp107_ = TRUE;
+						gboolean _tmp114_;
+						_tmp114_ = TRUE;
 						while (TRUE) {
-							gboolean _tmp108_;
-							gint _tmp110_;
-							ValaArrayType* _tmp111_;
-							gint _tmp112_;
-							gint _tmp113_;
-							ValaDataType* _tmp114_;
-							ValaDataType* _tmp115_ = NULL;
-							ValaDataType* _tmp116_;
-							ValaLocalVariable* _tmp117_;
-							gchar* _tmp118_ = NULL;
-							gchar* _tmp119_;
+							gboolean _tmp115_;
+							gint _tmp117_;
+							ValaArrayType* _tmp118_;
+							gint _tmp119_;
 							gint _tmp120_;
-							gchar* _tmp121_ = NULL;
-							gchar* _tmp122_;
-							ValaLocalVariable* _tmp123_;
+							ValaDataType* _tmp121_;
+							ValaDataType* _tmp122_ = NULL;
+							ValaDataType* _tmp123_;
 							ValaLocalVariable* _tmp124_;
+							gchar* _tmp125_ = NULL;
+							gchar* _tmp126_;
+							gint _tmp127_;
+							gchar* _tmp128_ = NULL;
+							gchar* _tmp129_;
+							ValaLocalVariable* _tmp130_;
+							ValaLocalVariable* _tmp131_;
 							ValaLocalVariable* len_var;
-							ValaLocalVariable* _tmp125_;
-							ValaLocalVariable* _tmp126_;
-							ValaExpression* _tmp127_;
-							ValaExpression* _tmp128_;
-							ValaLocalVariable* _tmp129_;
-							_tmp108_ = _tmp107_;
-							if (!_tmp108_) {
-								gint _tmp109_;
-								_tmp109_ = dim;
-								dim = _tmp109_ + 1;
+							ValaLocalVariable* _tmp132_;
+							ValaLocalVariable* _tmp133_;
+							ValaExpression* _tmp134_;
+							ValaExpression* _tmp135_;
+							ValaLocalVariable* _tmp136_;
+							_tmp115_ = _tmp114_;
+							if (!_tmp115_) {
+								gint _tmp116_;
+								_tmp116_ = dim;
+								dim = _tmp116_ + 1;
 							}
-							_tmp107_ = FALSE;
-							_tmp110_ = dim;
-							_tmp111_ = array_type;
-							_tmp112_ = vala_array_type_get_rank (_tmp111_);
-							_tmp113_ = _tmp112_;
-							if (!(_tmp110_ <= _tmp113_)) {
+							_tmp114_ = FALSE;
+							_tmp117_ = dim;
+							_tmp118_ = array_type;
+							_tmp119_ = vala_array_type_get_rank (_tmp118_);
+							_tmp120_ = _tmp119_;
+							if (!(_tmp117_ <= _tmp120_)) {
 								break;
 							}
-							_tmp114_ = self->int_type;
-							_tmp115_ = vala_data_type_copy (_tmp114_);
-							_tmp116_ = _tmp115_;
-							_tmp117_ = local;
-							_tmp118_ = vala_ccode_base_module_get_local_cname (self, _tmp117_);
-							_tmp119_ = _tmp118_;
-							_tmp120_ = dim;
-							_tmp121_ = vala_ccode_base_module_get_array_length_cname (self, _tmp119_, _tmp120_);
-							_tmp122_ = _tmp121_;
-							_tmp123_ = vala_local_variable_new (_tmp116_, _tmp122_, NULL, NULL);
-							_tmp124_ = _tmp123_;
-							_g_free0 (_tmp122_);
-							_g_free0 (_tmp119_);
-							_vala_code_node_unref0 (_tmp116_);
-							len_var = _tmp124_;
-							_tmp125_ = len_var;
-							_tmp126_ = local;
-							_tmp127_ = vala_variable_get_initializer ((ValaVariable*) _tmp126_);
-							_tmp128_ = _tmp127_;
-							vala_local_variable_set_no_init (_tmp125_, _tmp128_ != NULL);
-							_tmp129_ = len_var;
-							vala_ccode_base_module_emit_temp_var (self, _tmp129_);
+							_tmp121_ = self->int_type;
+							_tmp122_ = vala_data_type_copy (_tmp121_);
+							_tmp123_ = _tmp122_;
+							_tmp124_ = local;
+							_tmp125_ = vala_ccode_base_module_get_local_cname (self, _tmp124_);
+							_tmp126_ = _tmp125_;
+							_tmp127_ = dim;
+							_tmp128_ = vala_ccode_base_module_get_array_length_cname (self, _tmp126_, _tmp127_);
+							_tmp129_ = _tmp128_;
+							_tmp130_ = vala_local_variable_new (_tmp123_, _tmp129_, NULL, NULL);
+							_tmp131_ = _tmp130_;
+							_g_free0 (_tmp129_);
+							_g_free0 (_tmp126_);
+							_vala_code_node_unref0 (_tmp123_);
+							len_var = _tmp131_;
+							_tmp132_ = len_var;
+							_tmp133_ = local;
+							_tmp134_ = vala_variable_get_initializer ((ValaVariable*) _tmp133_);
+							_tmp135_ = _tmp134_;
+							vala_local_variable_set_no_init (_tmp132_, _tmp135_ != NULL);
+							_tmp136_ = len_var;
+							vala_ccode_base_module_emit_temp_var (self, _tmp136_);
 							_vala_code_node_unref0 (len_var);
 						}
 					}
 				}
-				_tmp130_ = array_type;
-				_tmp131_ = vala_array_type_get_rank (_tmp130_);
-				_tmp132_ = _tmp131_;
-				if (_tmp132_ == 1) {
-					ValaDataType* _tmp133_;
-					ValaDataType* _tmp134_ = NULL;
-					ValaDataType* _tmp135_;
-					ValaLocalVariable* _tmp136_;
-					gchar* _tmp137_ = NULL;
-					gchar* _tmp138_;
-					gchar* _tmp139_ = NULL;
-					gchar* _tmp140_;
-					ValaLocalVariable* _tmp141_;
-					ValaLocalVariable* _tmp142_;
-					ValaLocalVariable* size_var;
+				_tmp137_ = array_type;
+				_tmp138_ = vala_array_type_get_rank (_tmp137_);
+				_tmp139_ = _tmp138_;
+				if (_tmp139_ == 1) {
+					ValaDataType* _tmp140_;
+					ValaDataType* _tmp141_ = NULL;
+					ValaDataType* _tmp142_;
 					ValaLocalVariable* _tmp143_;
-					ValaLocalVariable* _tmp144_;
-					ValaExpression* _tmp145_;
-					ValaExpression* _tmp146_;
-					ValaLocalVariable* _tmp147_;
-					_tmp133_ = self->int_type;
-					_tmp134_ = vala_data_type_copy (_tmp133_);
-					_tmp135_ = _tmp134_;
-					_tmp136_ = local;
-					_tmp137_ = vala_ccode_base_module_get_local_cname (self, _tmp136_);
-					_tmp138_ = _tmp137_;
-					_tmp139_ = vala_ccode_base_module_get_array_size_cname (self, _tmp138_);
-					_tmp140_ = _tmp139_;
-					_tmp141_ = vala_local_variable_new (_tmp135_, _tmp140_, NULL, NULL);
+					gchar* _tmp144_ = NULL;
+					gchar* _tmp145_;
+					gchar* _tmp146_ = NULL;
+					gchar* _tmp147_;
+					ValaLocalVariable* _tmp148_;
+					ValaLocalVariable* _tmp149_;
+					ValaLocalVariable* size_var;
+					ValaLocalVariable* _tmp150_;
+					ValaLocalVariable* _tmp151_;
+					ValaExpression* _tmp152_;
+					ValaExpression* _tmp153_;
+					ValaLocalVariable* _tmp154_;
+					_tmp140_ = self->int_type;
+					_tmp141_ = vala_data_type_copy (_tmp140_);
 					_tmp142_ = _tmp141_;
-					_g_free0 (_tmp140_);
-					_g_free0 (_tmp138_);
-					_vala_code_node_unref0 (_tmp135_);
-					size_var = _tmp142_;
-					_tmp143_ = size_var;
-					_tmp144_ = local;
-					_tmp145_ = vala_variable_get_initializer ((ValaVariable*) _tmp144_);
-					_tmp146_ = _tmp145_;
-					vala_local_variable_set_no_init (_tmp143_, _tmp146_ != NULL);
-					_tmp147_ = size_var;
-					vala_ccode_base_module_emit_temp_var (self, _tmp147_);
+					_tmp143_ = local;
+					_tmp144_ = vala_ccode_base_module_get_local_cname (self, _tmp143_);
+					_tmp145_ = _tmp144_;
+					_tmp146_ = vala_ccode_base_module_get_array_size_cname (self, _tmp145_);
+					_tmp147_ = _tmp146_;
+					_tmp148_ = vala_local_variable_new (_tmp142_, _tmp147_, NULL, NULL);
+					_tmp149_ = _tmp148_;
+					_g_free0 (_tmp147_);
+					_g_free0 (_tmp145_);
+					_vala_code_node_unref0 (_tmp142_);
+					size_var = _tmp149_;
+					_tmp150_ = size_var;
+					_tmp151_ = local;
+					_tmp152_ = vala_variable_get_initializer ((ValaVariable*) _tmp151_);
+					_tmp153_ = _tmp152_;
+					vala_local_variable_set_no_init (_tmp150_, _tmp153_ != NULL);
+					_tmp154_ = size_var;
+					vala_ccode_base_module_emit_temp_var (self, _tmp154_);
 					_vala_code_node_unref0 (size_var);
 				}
 			}
 			_vala_code_node_unref0 (array_type);
 		} else {
-			ValaLocalVariable* _tmp148_;
-			ValaDataType* _tmp149_;
-			ValaDataType* _tmp150_;
-			_tmp148_ = local;
-			_tmp149_ = vala_variable_get_variable_type ((ValaVariable*) _tmp148_);
-			_tmp150_ = _tmp149_;
-			if (VALA_IS_DELEGATE_TYPE (_tmp150_)) {
-				ValaLocalVariable* _tmp151_;
-				ValaDataType* _tmp152_;
-				ValaDataType* _tmp153_;
-				ValaDelegateType* _tmp154_;
+			ValaLocalVariable* _tmp155_;
+			ValaDataType* _tmp156_;
+			ValaDataType* _tmp157_;
+			_tmp155_ = local;
+			_tmp156_ = vala_variable_get_variable_type ((ValaVariable*) _tmp155_);
+			_tmp157_ = _tmp156_;
+			if (VALA_IS_DELEGATE_TYPE (_tmp157_)) {
+				ValaLocalVariable* _tmp158_;
+				ValaDataType* _tmp159_;
+				ValaDataType* _tmp160_;
+				ValaDelegateType* _tmp161_;
 				ValaDelegateType* deleg_type;
-				ValaDelegateType* _tmp155_;
-				ValaDelegate* _tmp156_;
-				ValaDelegate* _tmp157_;
-				ValaDelegate* _tmp158_;
+				ValaDelegateType* _tmp162_;
+				ValaDelegate* _tmp163_;
+				ValaDelegate* _tmp164_;
+				ValaDelegate* _tmp165_;
 				ValaDelegate* d;
-				ValaDelegate* _tmp159_;
-				gboolean _tmp160_;
-				gboolean _tmp161_;
-				_tmp151_ = local;
-				_tmp152_ = vala_variable_get_variable_type ((ValaVariable*) _tmp151_);
-				_tmp153_ = _tmp152_;
-				_tmp154_ = _vala_code_node_ref0 (VALA_DELEGATE_TYPE (_tmp153_));
-				deleg_type = _tmp154_;
-				_tmp155_ = deleg_type;
-				_tmp156_ = vala_delegate_type_get_delegate_symbol (_tmp155_);
-				_tmp157_ = _tmp156_;
-				_tmp158_ = _vala_code_node_ref0 (_tmp157_);
-				d = _tmp158_;
-				_tmp159_ = d;
-				_tmp160_ = vala_delegate_get_has_target (_tmp159_);
-				_tmp161_ = _tmp160_;
-				if (_tmp161_) {
-					ValaVoidType* _tmp162_;
-					ValaVoidType* _tmp163_;
-					ValaPointerType* _tmp164_;
-					ValaPointerType* _tmp165_;
-					ValaLocalVariable* _tmp166_;
-					gchar* _tmp167_ = NULL;
-					gchar* _tmp168_;
-					gchar* _tmp169_ = NULL;
-					gchar* _tmp170_;
-					ValaLocalVariable* _tmp171_;
-					ValaLocalVariable* _tmp172_;
-					ValaLocalVariable* target_var;
+				ValaDelegate* _tmp166_;
+				gboolean _tmp167_;
+				gboolean _tmp168_;
+				_tmp158_ = local;
+				_tmp159_ = vala_variable_get_variable_type ((ValaVariable*) _tmp158_);
+				_tmp160_ = _tmp159_;
+				_tmp161_ = _vala_code_node_ref0 (VALA_DELEGATE_TYPE (_tmp160_));
+				deleg_type = _tmp161_;
+				_tmp162_ = deleg_type;
+				_tmp163_ = vala_delegate_type_get_delegate_symbol (_tmp162_);
+				_tmp164_ = _tmp163_;
+				_tmp165_ = _vala_code_node_ref0 (_tmp164_);
+				d = _tmp165_;
+				_tmp166_ = d;
+				_tmp167_ = vala_delegate_get_has_target (_tmp166_);
+				_tmp168_ = _tmp167_;
+				if (_tmp168_) {
+					ValaVoidType* _tmp169_;
+					ValaVoidType* _tmp170_;
+					ValaPointerType* _tmp171_;
+					ValaPointerType* _tmp172_;
 					ValaLocalVariable* _tmp173_;
-					ValaLocalVariable* _tmp174_;
-					ValaExpression* _tmp175_;
-					ValaExpression* _tmp176_;
-					ValaLocalVariable* _tmp177_;
-					ValaDelegateType* _tmp178_;
-					gboolean _tmp179_;
-					gboolean _tmp180_;
-					_tmp162_ = vala_void_type_new (NULL);
-					_tmp163_ = _tmp162_;
-					_tmp164_ = vala_pointer_type_new ((ValaDataType*) _tmp163_, NULL);
-					_tmp165_ = _tmp164_;
-					_tmp166_ = local;
-					_tmp167_ = vala_ccode_base_module_get_local_cname (self, _tmp166_);
-					_tmp168_ = _tmp167_;
-					_tmp169_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp168_);
+					gchar* _tmp174_ = NULL;
+					gchar* _tmp175_;
+					gchar* _tmp176_ = NULL;
+					gchar* _tmp177_;
+					ValaLocalVariable* _tmp178_;
+					ValaLocalVariable* _tmp179_;
+					ValaLocalVariable* target_var;
+					ValaLocalVariable* _tmp180_;
+					ValaLocalVariable* _tmp181_;
+					ValaExpression* _tmp182_;
+					ValaExpression* _tmp183_;
+					ValaLocalVariable* _tmp184_;
+					ValaDelegateType* _tmp185_;
+					gboolean _tmp186_;
+					gboolean _tmp187_;
+					_tmp169_ = vala_void_type_new (NULL);
 					_tmp170_ = _tmp169_;
-					_tmp171_ = vala_local_variable_new ((ValaDataType*) _tmp165_, _tmp170_, NULL, NULL);
+					_tmp171_ = vala_pointer_type_new ((ValaDataType*) _tmp170_, NULL);
 					_tmp172_ = _tmp171_;
-					_g_free0 (_tmp170_);
-					_g_free0 (_tmp168_);
-					_vala_code_node_unref0 (_tmp165_);
-					_vala_code_node_unref0 (_tmp163_);
-					target_var = _tmp172_;
-					_tmp173_ = target_var;
-					_tmp174_ = local;
-					_tmp175_ = vala_variable_get_initializer ((ValaVariable*) _tmp174_);
-					_tmp176_ = _tmp175_;
-					vala_local_variable_set_no_init (_tmp173_, _tmp176_ != NULL);
-					_tmp177_ = target_var;
-					vala_ccode_base_module_emit_temp_var (self, _tmp177_);
-					_tmp178_ = deleg_type;
-					_tmp179_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp178_);
-					_tmp180_ = _tmp179_;
-					if (_tmp180_) {
-						ValaDataType* _tmp181_;
-						ValaLocalVariable* _tmp182_;
-						gchar* _tmp183_ = NULL;
-						gchar* _tmp184_;
-						gchar* _tmp185_ = NULL;
-						gchar* _tmp186_;
-						ValaLocalVariable* _tmp187_;
-						ValaLocalVariable* _tmp188_;
-						ValaLocalVariable* target_destroy_notify_var;
+					_tmp173_ = local;
+					_tmp174_ = vala_ccode_base_module_get_local_cname (self, _tmp173_);
+					_tmp175_ = _tmp174_;
+					_tmp176_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp175_);
+					_tmp177_ = _tmp176_;
+					_tmp178_ = vala_local_variable_new ((ValaDataType*) _tmp172_, _tmp177_, NULL, NULL);
+					_tmp179_ = _tmp178_;
+					_g_free0 (_tmp177_);
+					_g_free0 (_tmp175_);
+					_vala_code_node_unref0 (_tmp172_);
+					_vala_code_node_unref0 (_tmp170_);
+					target_var = _tmp179_;
+					_tmp180_ = target_var;
+					_tmp181_ = local;
+					_tmp182_ = vala_variable_get_initializer ((ValaVariable*) _tmp181_);
+					_tmp183_ = _tmp182_;
+					vala_local_variable_set_no_init (_tmp180_, _tmp183_ != NULL);
+					_tmp184_ = target_var;
+					vala_ccode_base_module_emit_temp_var (self, _tmp184_);
+					_tmp185_ = deleg_type;
+					_tmp186_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp185_);
+					_tmp187_ = _tmp186_;
+					if (_tmp187_) {
+						ValaDataType* _tmp188_;
 						ValaLocalVariable* _tmp189_;
-						ValaLocalVariable* _tmp190_;
-						ValaExpression* _tmp191_;
-						ValaExpression* _tmp192_;
-						ValaLocalVariable* _tmp193_;
-						_tmp181_ = self->gdestroynotify_type;
-						_tmp182_ = local;
-						_tmp183_ = vala_ccode_base_module_get_local_cname (self, _tmp182_);
-						_tmp184_ = _tmp183_;
-						_tmp185_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp184_);
-						_tmp186_ = _tmp185_;
-						_tmp187_ = vala_local_variable_new (_tmp181_, _tmp186_, NULL, NULL);
-						_tmp188_ = _tmp187_;
-						_g_free0 (_tmp186_);
-						_g_free0 (_tmp184_);
-						target_destroy_notify_var = _tmp188_;
-						_tmp189_ = target_destroy_notify_var;
-						_tmp190_ = local;
-						_tmp191_ = vala_variable_get_initializer ((ValaVariable*) _tmp190_);
-						_tmp192_ = _tmp191_;
-						vala_local_variable_set_no_init (_tmp189_, _tmp192_ != NULL);
-						_tmp193_ = target_destroy_notify_var;
-						vala_ccode_base_module_emit_temp_var (self, _tmp193_);
+						gchar* _tmp190_ = NULL;
+						gchar* _tmp191_;
+						gchar* _tmp192_ = NULL;
+						gchar* _tmp193_;
+						ValaLocalVariable* _tmp194_;
+						ValaLocalVariable* _tmp195_;
+						ValaLocalVariable* target_destroy_notify_var;
+						ValaLocalVariable* _tmp196_;
+						ValaLocalVariable* _tmp197_;
+						ValaExpression* _tmp198_;
+						ValaExpression* _tmp199_;
+						ValaLocalVariable* _tmp200_;
+						_tmp188_ = self->gdestroynotify_type;
+						_tmp189_ = local;
+						_tmp190_ = vala_ccode_base_module_get_local_cname (self, _tmp189_);
+						_tmp191_ = _tmp190_;
+						_tmp192_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp191_);
+						_tmp193_ = _tmp192_;
+						_tmp194_ = vala_local_variable_new (_tmp188_, _tmp193_, NULL, NULL);
+						_tmp195_ = _tmp194_;
+						_g_free0 (_tmp193_);
+						_g_free0 (_tmp191_);
+						target_destroy_notify_var = _tmp195_;
+						_tmp196_ = target_destroy_notify_var;
+						_tmp197_ = local;
+						_tmp198_ = vala_variable_get_initializer ((ValaVariable*) _tmp197_);
+						_tmp199_ = _tmp198_;
+						vala_local_variable_set_no_init (_tmp196_, _tmp199_ != NULL);
+						_tmp200_ = target_destroy_notify_var;
+						vala_ccode_base_module_emit_temp_var (self, _tmp200_);
 						_vala_code_node_unref0 (target_destroy_notify_var);
 					}
 					_vala_code_node_unref0 (target_var);
@@ -13394,58 +13639,64 @@ static void vala_ccode_base_module_real_visit_local_variable (ValaCodeVisitor* b
 			}
 		}
 	}
-	_tmp194_ = rhs;
-	if (_tmp194_ != NULL) {
-		ValaLocalVariable* _tmp195_;
-		gboolean _tmp196_ = FALSE;
-		_tmp195_ = local;
-		_tmp196_ = vala_ccode_base_module_has_simple_struct_initializer (self, _tmp195_);
-		if (!_tmp196_) {
-			ValaLocalVariable* _tmp197_;
-			ValaLocalVariable* _tmp198_;
-			ValaExpression* _tmp199_;
-			ValaExpression* _tmp200_;
-			ValaTargetValue* _tmp201_;
-			ValaTargetValue* _tmp202_;
-			_tmp197_ = local;
-			_tmp198_ = local;
-			_tmp199_ = vala_variable_get_initializer ((ValaVariable*) _tmp198_);
-			_tmp200_ = _tmp199_;
-			_tmp201_ = vala_expression_get_target_value (_tmp200_);
-			_tmp202_ = _tmp201_;
-			vala_code_generator_store_local ((ValaCodeGenerator*) self, _tmp197_, _tmp202_, TRUE);
-		}
-	}
-	_tmp204_ = local;
-	_tmp205_ = vala_variable_get_initializer ((ValaVariable*) _tmp204_);
-	_tmp206_ = _tmp205_;
-	if (_tmp206_ != NULL) {
-		ValaLocalVariable* _tmp207_;
-		ValaExpression* _tmp208_;
-		ValaExpression* _tmp209_;
-		gboolean _tmp210_;
-		gboolean _tmp211_;
-		_tmp207_ = local;
-		_tmp208_ = vala_variable_get_initializer ((ValaVariable*) _tmp207_);
-		_tmp209_ = _tmp208_;
-		_tmp210_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp209_);
-		_tmp211_ = _tmp210_;
-		_tmp203_ = _tmp211_;
+	_tmp201_ = rhs;
+	if (_tmp201_ != NULL) {
+		ValaLocalVariable* _tmp202_;
+		ValaLocalVariable* _tmp203_;
+		ValaExpression* _tmp204_;
+		ValaExpression* _tmp205_;
+		gboolean _tmp206_ = FALSE;
+		_tmp202_ = local;
+		_tmp203_ = local;
+		_tmp204_ = vala_variable_get_initializer ((ValaVariable*) _tmp203_);
+		_tmp205_ = _tmp204_;
+		_tmp206_ = vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) _tmp202_, _tmp205_);
+		if (!_tmp206_) {
+			ValaLocalVariable* _tmp207_;
+			ValaLocalVariable* _tmp208_;
+			ValaExpression* _tmp209_;
+			ValaExpression* _tmp210_;
+			ValaTargetValue* _tmp211_;
+			ValaTargetValue* _tmp212_;
+			_tmp207_ = local;
+			_tmp208_ = local;
+			_tmp209_ = vala_variable_get_initializer ((ValaVariable*) _tmp208_);
+			_tmp210_ = _tmp209_;
+			_tmp211_ = vala_expression_get_target_value (_tmp210_);
+			_tmp212_ = _tmp211_;
+			vala_code_generator_store_local ((ValaCodeGenerator*) self, _tmp207_, _tmp212_, TRUE);
+		}
+	}
+	_tmp214_ = local;
+	_tmp215_ = vala_variable_get_initializer ((ValaVariable*) _tmp214_);
+	_tmp216_ = _tmp215_;
+	if (_tmp216_ != NULL) {
+		ValaLocalVariable* _tmp217_;
+		ValaExpression* _tmp218_;
+		ValaExpression* _tmp219_;
+		gboolean _tmp220_;
+		gboolean _tmp221_;
+		_tmp217_ = local;
+		_tmp218_ = vala_variable_get_initializer ((ValaVariable*) _tmp217_);
+		_tmp219_ = _tmp218_;
+		_tmp220_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp219_);
+		_tmp221_ = _tmp220_;
+		_tmp213_ = _tmp221_;
 	} else {
-		_tmp203_ = FALSE;
-	}
-	_tmp212_ = _tmp203_;
-	if (_tmp212_) {
-		ValaLocalVariable* _tmp213_;
-		ValaExpression* _tmp214_;
-		ValaExpression* _tmp215_;
-		_tmp213_ = local;
-		_tmp214_ = vala_variable_get_initializer ((ValaVariable*) _tmp213_);
-		_tmp215_ = _tmp214_;
-		vala_ccode_base_module_add_simple_check (self, (ValaCodeNode*) _tmp215_, FALSE);
-	}
-	_tmp216_ = local;
-	vala_symbol_set_active ((ValaSymbol*) _tmp216_, TRUE);
+		_tmp213_ = FALSE;
+	}
+	_tmp222_ = _tmp213_;
+	if (_tmp222_) {
+		ValaLocalVariable* _tmp223_;
+		ValaExpression* _tmp224_;
+		ValaExpression* _tmp225_;
+		_tmp223_ = local;
+		_tmp224_ = vala_variable_get_initializer ((ValaVariable*) _tmp223_);
+		_tmp225_ = _tmp224_;
+		vala_ccode_base_module_add_simple_check (self, (ValaCodeNode*) _tmp225_, FALSE);
+	}
+	_tmp226_ = local;
+	vala_symbol_set_active ((ValaSymbol*) _tmp226_, TRUE);
 	_vala_ccode_node_unref0 (rhs);
 }
 
@@ -13856,13 +14107,13 @@ static void vala_ccode_base_module_real_visit_initializer_list (ValaCodeVisitor*
 		ValaTypeSymbol* _tmp9_;
 		ValaStruct* _tmp10_;
 		ValaStruct* st;
-		gboolean _tmp11_ = FALSE;
-		gboolean _tmp12_ = FALSE;
-		ValaInitializerList* _tmp13_;
-		ValaCodeNode* _tmp14_;
-		ValaCodeNode* _tmp15_;
-		gboolean _tmp19_;
-		gboolean _tmp23_;
+		gboolean _tmp18_ = FALSE;
+		gboolean _tmp19_ = FALSE;
+		ValaInitializerList* _tmp20_;
+		ValaCodeNode* _tmp21_;
+		ValaCodeNode* _tmp22_;
+		gboolean _tmp26_;
+		gboolean _tmp30_;
 		_tmp5_ = list;
 		_tmp6_ = vala_expression_get_target_type ((ValaExpression*) _tmp5_);
 		_tmp7_ = _tmp6_;
@@ -13870,225 +14121,246 @@ static void vala_ccode_base_module_real_visit_initializer_list (ValaCodeVisitor*
 		_tmp9_ = _tmp8_;
 		_tmp10_ = _vala_code_node_ref0 (VALA_STRUCT (_tmp9_));
 		st = _tmp10_;
-		_tmp13_ = list;
-		_tmp14_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp13_);
-		_tmp15_ = _tmp14_;
-		if (VALA_IS_CONSTANT (_tmp15_)) {
-			_tmp12_ = TRUE;
+		while (TRUE) {
+			ValaStruct* _tmp11_;
+			ValaStruct* _tmp12_;
+			ValaStruct* _tmp13_;
+			ValaStruct* _tmp14_;
+			ValaStruct* _tmp15_;
+			ValaStruct* _tmp16_;
+			ValaStruct* _tmp17_;
+			_tmp11_ = st;
+			_tmp12_ = vala_struct_get_base_struct (_tmp11_);
+			_tmp13_ = _tmp12_;
+			if (!(_tmp13_ != NULL)) {
+				break;
+			}
+			_tmp14_ = st;
+			_tmp15_ = vala_struct_get_base_struct (_tmp14_);
+			_tmp16_ = _tmp15_;
+			_tmp17_ = _vala_code_node_ref0 (_tmp16_);
+			_vala_code_node_unref0 (st);
+			st = _tmp17_;
+		}
+		_tmp20_ = list;
+		_tmp21_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp20_);
+		_tmp22_ = _tmp21_;
+		if (VALA_IS_CONSTANT (_tmp22_)) {
+			_tmp19_ = TRUE;
 		} else {
-			ValaInitializerList* _tmp16_;
-			ValaCodeNode* _tmp17_;
-			ValaCodeNode* _tmp18_;
-			_tmp16_ = list;
-			_tmp17_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp16_);
-			_tmp18_ = _tmp17_;
-			_tmp12_ = VALA_IS_FIELD (_tmp18_);
+			ValaInitializerList* _tmp23_;
+			ValaCodeNode* _tmp24_;
+			ValaCodeNode* _tmp25_;
+			_tmp23_ = list;
+			_tmp24_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp23_);
+			_tmp25_ = _tmp24_;
+			_tmp19_ = VALA_IS_FIELD (_tmp25_);
 		}
-		_tmp19_ = _tmp12_;
-		if (_tmp19_) {
-			_tmp11_ = TRUE;
+		_tmp26_ = _tmp19_;
+		if (_tmp26_) {
+			_tmp18_ = TRUE;
 		} else {
-			ValaInitializerList* _tmp20_;
-			ValaCodeNode* _tmp21_;
-			ValaCodeNode* _tmp22_;
-			_tmp20_ = list;
-			_tmp21_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp20_);
-			_tmp22_ = _tmp21_;
-			_tmp11_ = VALA_IS_INITIALIZER_LIST (_tmp22_);
+			ValaInitializerList* _tmp27_;
+			ValaCodeNode* _tmp28_;
+			ValaCodeNode* _tmp29_;
+			_tmp27_ = list;
+			_tmp28_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp27_);
+			_tmp29_ = _tmp28_;
+			_tmp18_ = VALA_IS_INITIALIZER_LIST (_tmp29_);
 		}
-		_tmp23_ = _tmp11_;
-		if (_tmp23_) {
-			ValaCCodeInitializerList* _tmp24_;
+		_tmp30_ = _tmp18_;
+		if (_tmp30_) {
+			ValaCCodeInitializerList* _tmp31_;
 			ValaCCodeInitializerList* clist;
-			ValaStruct* _tmp25_;
-			ValaList* _tmp26_ = NULL;
-			ValaList* _tmp27_;
-			ValaIterator* _tmp28_ = NULL;
-			ValaIterator* _tmp29_;
+			ValaStruct* _tmp32_;
+			ValaList* _tmp33_ = NULL;
+			ValaList* _tmp34_;
+			ValaIterator* _tmp35_ = NULL;
+			ValaIterator* _tmp36_;
 			ValaIterator* field_it;
-			ValaInitializerList* _tmp85_;
-			ValaCCodeInitializerList* _tmp86_;
-			_tmp24_ = vala_ccode_initializer_list_new ();
-			clist = _tmp24_;
-			_tmp25_ = st;
-			_tmp26_ = vala_struct_get_fields (_tmp25_);
-			_tmp27_ = _tmp26_;
-			_tmp28_ = vala_iterable_iterator ((ValaIterable*) _tmp27_);
-			_tmp29_ = _tmp28_;
-			_vala_iterable_unref0 (_tmp27_);
-			field_it = _tmp29_;
+			ValaInitializerList* _tmp92_;
+			ValaCCodeInitializerList* _tmp93_;
+			_tmp31_ = vala_ccode_initializer_list_new ();
+			clist = _tmp31_;
+			_tmp32_ = st;
+			_tmp33_ = vala_struct_get_fields (_tmp32_);
+			_tmp34_ = _tmp33_;
+			_tmp35_ = vala_iterable_iterator ((ValaIterable*) _tmp34_);
+			_tmp36_ = _tmp35_;
+			_vala_iterable_unref0 (_tmp34_);
+			field_it = _tmp36_;
 			{
-				ValaInitializerList* _tmp30_;
-				ValaList* _tmp31_ = NULL;
+				ValaInitializerList* _tmp37_;
+				ValaList* _tmp38_ = NULL;
 				ValaList* _expr_list;
-				ValaList* _tmp32_;
-				gint _tmp33_;
-				gint _tmp34_;
+				ValaList* _tmp39_;
+				gint _tmp40_;
+				gint _tmp41_;
 				gint _expr_size;
 				gint _expr_index;
-				_tmp30_ = list;
-				_tmp31_ = vala_initializer_list_get_initializers (_tmp30_);
-				_expr_list = _tmp31_;
-				_tmp32_ = _expr_list;
-				_tmp33_ = vala_collection_get_size ((ValaCollection*) _tmp32_);
-				_tmp34_ = _tmp33_;
-				_expr_size = _tmp34_;
+				_tmp37_ = list;
+				_tmp38_ = vala_initializer_list_get_initializers (_tmp37_);
+				_expr_list = _tmp38_;
+				_tmp39_ = _expr_list;
+				_tmp40_ = vala_collection_get_size ((ValaCollection*) _tmp39_);
+				_tmp41_ = _tmp40_;
+				_expr_size = _tmp41_;
 				_expr_index = -1;
 				while (TRUE) {
-					gint _tmp35_;
-					gint _tmp36_;
-					gint _tmp37_;
-					ValaList* _tmp38_;
-					gint _tmp39_;
-					gpointer _tmp40_ = NULL;
+					gint _tmp42_;
+					gint _tmp43_;
+					gint _tmp44_;
+					ValaList* _tmp45_;
+					gint _tmp46_;
+					gpointer _tmp47_ = NULL;
 					ValaExpression* expr;
 					ValaField* field;
-					ValaExpression* _tmp48_;
-					ValaCCodeExpression* _tmp49_ = NULL;
+					ValaExpression* _tmp55_;
+					ValaCCodeExpression* _tmp56_ = NULL;
 					ValaCCodeExpression* cexpr;
-					ValaField* _tmp50_;
-					gchar* _tmp51_ = NULL;
+					ValaField* _tmp57_;
+					gchar* _tmp58_ = NULL;
 					gchar* ctype;
-					const gchar* _tmp52_;
-					ValaCCodeInitializerList* _tmp56_;
-					ValaCCodeExpression* _tmp57_;
-					ValaField* _tmp58_;
-					ValaDataType* _tmp59_;
-					ValaDataType* _tmp60_;
-					ValaArrayType* _tmp61_;
+					const gchar* _tmp59_;
+					ValaCCodeInitializerList* _tmp63_;
+					ValaCCodeExpression* _tmp64_;
+					ValaField* _tmp65_;
+					ValaDataType* _tmp66_;
+					ValaDataType* _tmp67_;
+					ValaArrayType* _tmp68_;
 					ValaArrayType* array_type;
-					gboolean _tmp62_ = FALSE;
-					gboolean _tmp63_ = FALSE;
-					ValaArrayType* _tmp64_;
-					gboolean _tmp67_;
-					gboolean _tmp70_;
-					_tmp35_ = _expr_index;
-					_expr_index = _tmp35_ + 1;
-					_tmp36_ = _expr_index;
-					_tmp37_ = _expr_size;
-					if (!(_tmp36_ < _tmp37_)) {
+					gboolean _tmp69_ = FALSE;
+					gboolean _tmp70_ = FALSE;
+					ValaArrayType* _tmp71_;
+					gboolean _tmp74_;
+					gboolean _tmp77_;
+					_tmp42_ = _expr_index;
+					_expr_index = _tmp42_ + 1;
+					_tmp43_ = _expr_index;
+					_tmp44_ = _expr_size;
+					if (!(_tmp43_ < _tmp44_)) {
 						break;
 					}
-					_tmp38_ = _expr_list;
-					_tmp39_ = _expr_index;
-					_tmp40_ = vala_list_get (_tmp38_, _tmp39_);
-					expr = (ValaExpression*) _tmp40_;
+					_tmp45_ = _expr_list;
+					_tmp46_ = _expr_index;
+					_tmp47_ = vala_list_get (_tmp45_, _tmp46_);
+					expr = (ValaExpression*) _tmp47_;
 					field = NULL;
 					while (TRUE) {
-						ValaField* _tmp41_;
-						ValaIterator* _tmp42_;
-						ValaIterator* _tmp43_;
-						gpointer _tmp44_ = NULL;
-						ValaField* _tmp45_;
-						ValaMemberBinding _tmp46_;
-						ValaMemberBinding _tmp47_;
-						_tmp41_ = field;
-						if (!(_tmp41_ == NULL)) {
+						ValaField* _tmp48_;
+						ValaIterator* _tmp49_;
+						ValaIterator* _tmp50_;
+						gpointer _tmp51_ = NULL;
+						ValaField* _tmp52_;
+						ValaMemberBinding _tmp53_;
+						ValaMemberBinding _tmp54_;
+						_tmp48_ = field;
+						if (!(_tmp48_ == NULL)) {
 							break;
 						}
-						_tmp42_ = field_it;
-						vala_iterator_next (_tmp42_);
-						_tmp43_ = field_it;
-						_tmp44_ = vala_iterator_get (_tmp43_);
+						_tmp49_ = field_it;
+						vala_iterator_next (_tmp49_);
+						_tmp50_ = field_it;
+						_tmp51_ = vala_iterator_get (_tmp50_);
 						_vala_code_node_unref0 (field);
-						field = (ValaField*) _tmp44_;
-						_tmp45_ = field;
-						_tmp46_ = vala_field_get_binding (_tmp45_);
-						_tmp47_ = _tmp46_;
-						if (_tmp47_ != VALA_MEMBER_BINDING_INSTANCE) {
+						field = (ValaField*) _tmp51_;
+						_tmp52_ = field;
+						_tmp53_ = vala_field_get_binding (_tmp52_);
+						_tmp54_ = _tmp53_;
+						if (_tmp54_ != VALA_MEMBER_BINDING_INSTANCE) {
 							_vala_code_node_unref0 (field);
 							field = NULL;
 						}
 					}
-					_tmp48_ = expr;
-					_tmp49_ = vala_ccode_base_module_get_cvalue (self, _tmp48_);
-					cexpr = _tmp49_;
-					_tmp50_ = field;
-					_tmp51_ = vala_ccode_base_module_get_ccode_type ((ValaCodeNode*) _tmp50_);
-					ctype = _tmp51_;
-					_tmp52_ = ctype;
-					if (_tmp52_ != NULL) {
-						ValaCCodeExpression* _tmp53_;
-						const gchar* _tmp54_;
-						ValaCCodeCastExpression* _tmp55_;
-						_tmp53_ = cexpr;
-						_tmp54_ = ctype;
-						_tmp55_ = vala_ccode_cast_expression_new (_tmp53_, _tmp54_);
+					_tmp55_ = expr;
+					_tmp56_ = vala_ccode_base_module_get_cvalue (self, _tmp55_);
+					cexpr = _tmp56_;
+					_tmp57_ = field;
+					_tmp58_ = vala_ccode_base_module_get_ccode_type ((ValaCodeNode*) _tmp57_);
+					ctype = _tmp58_;
+					_tmp59_ = ctype;
+					if (_tmp59_ != NULL) {
+						ValaCCodeExpression* _tmp60_;
+						const gchar* _tmp61_;
+						ValaCCodeCastExpression* _tmp62_;
+						_tmp60_ = cexpr;
+						_tmp61_ = ctype;
+						_tmp62_ = vala_ccode_cast_expression_new (_tmp60_, _tmp61_);
 						_vala_ccode_node_unref0 (cexpr);
-						cexpr = (ValaCCodeExpression*) _tmp55_;
+						cexpr = (ValaCCodeExpression*) _tmp62_;
 					}
-					_tmp56_ = clist;
-					_tmp57_ = cexpr;
-					vala_ccode_initializer_list_append (_tmp56_, _tmp57_);
-					_tmp58_ = field;
-					_tmp59_ = vala_variable_get_variable_type ((ValaVariable*) _tmp58_);
-					_tmp60_ = _tmp59_;
-					_tmp61_ = _vala_code_node_ref0 (VALA_IS_ARRAY_TYPE (_tmp60_) ? ((ValaArrayType*) _tmp60_) : NULL);
-					array_type = _tmp61_;
-					_tmp64_ = array_type;
-					if (_tmp64_ != NULL) {
-						ValaField* _tmp65_;
-						gboolean _tmp66_ = FALSE;
-						_tmp65_ = field;
-						_tmp66_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp65_);
-						_tmp63_ = _tmp66_;
+					_tmp63_ = clist;
+					_tmp64_ = cexpr;
+					vala_ccode_initializer_list_append (_tmp63_, _tmp64_);
+					_tmp65_ = field;
+					_tmp66_ = vala_variable_get_variable_type ((ValaVariable*) _tmp65_);
+					_tmp67_ = _tmp66_;
+					_tmp68_ = _vala_code_node_ref0 (VALA_IS_ARRAY_TYPE (_tmp67_) ? ((ValaArrayType*) _tmp67_) : NULL);
+					array_type = _tmp68_;
+					_tmp71_ = array_type;
+					if (_tmp71_ != NULL) {
+						ValaField* _tmp72_;
+						gboolean _tmp73_ = FALSE;
+						_tmp72_ = field;
+						_tmp73_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp72_);
+						_tmp70_ = _tmp73_;
 					} else {
-						_tmp63_ = FALSE;
+						_tmp70_ = FALSE;
 					}
-					_tmp67_ = _tmp63_;
-					if (_tmp67_) {
-						ValaField* _tmp68_;
-						gboolean _tmp69_ = FALSE;
-						_tmp68_ = field;
-						_tmp69_ = vala_ccode_base_module_get_ccode_array_null_terminated ((ValaCodeNode*) _tmp68_);
-						_tmp62_ = !_tmp69_;
+					_tmp74_ = _tmp70_;
+					if (_tmp74_) {
+						ValaField* _tmp75_;
+						gboolean _tmp76_ = FALSE;
+						_tmp75_ = field;
+						_tmp76_ = vala_ccode_base_module_get_ccode_array_null_terminated ((ValaCodeNode*) _tmp75_);
+						_tmp69_ = !_tmp76_;
 					} else {
-						_tmp62_ = FALSE;
+						_tmp69_ = FALSE;
 					}
-					_tmp70_ = _tmp62_;
-					if (_tmp70_) {
+					_tmp77_ = _tmp69_;
+					if (_tmp77_) {
 						{
 							gint dim;
 							dim = 1;
 							{
-								gboolean _tmp71_;
-								_tmp71_ = TRUE;
+								gboolean _tmp78_;
+								_tmp78_ = TRUE;
 								while (TRUE) {
-									gboolean _tmp72_;
-									gint _tmp74_;
-									ValaArrayType* _tmp75_;
-									gint _tmp76_;
-									gint _tmp77_;
-									ValaCCodeInitializerList* _tmp78_;
-									ValaExpression* _tmp79_;
-									ValaTargetValue* _tmp80_;
-									ValaTargetValue* _tmp81_;
-									gint _tmp82_;
-									ValaCCodeExpression* _tmp83_ = NULL;
-									ValaCCodeExpression* _tmp84_;
-									_tmp72_ = _tmp71_;
-									if (!_tmp72_) {
-										gint _tmp73_;
-										_tmp73_ = dim;
-										dim = _tmp73_ + 1;
+									gboolean _tmp79_;
+									gint _tmp81_;
+									ValaArrayType* _tmp82_;
+									gint _tmp83_;
+									gint _tmp84_;
+									ValaCCodeInitializerList* _tmp85_;
+									ValaExpression* _tmp86_;
+									ValaTargetValue* _tmp87_;
+									ValaTargetValue* _tmp88_;
+									gint _tmp89_;
+									ValaCCodeExpression* _tmp90_ = NULL;
+									ValaCCodeExpression* _tmp91_;
+									_tmp79_ = _tmp78_;
+									if (!_tmp79_) {
+										gint _tmp80_;
+										_tmp80_ = dim;
+										dim = _tmp80_ + 1;
 									}
-									_tmp71_ = FALSE;
-									_tmp74_ = dim;
-									_tmp75_ = array_type;
-									_tmp76_ = vala_array_type_get_rank (_tmp75_);
-									_tmp77_ = _tmp76_;
-									if (!(_tmp74_ <= _tmp77_)) {
+									_tmp78_ = FALSE;
+									_tmp81_ = dim;
+									_tmp82_ = array_type;
+									_tmp83_ = vala_array_type_get_rank (_tmp82_);
+									_tmp84_ = _tmp83_;
+									if (!(_tmp81_ <= _tmp84_)) {
 										break;
 									}
-									_tmp78_ = clist;
-									_tmp79_ = expr;
-									_tmp80_ = vala_expression_get_target_value (_tmp79_);
-									_tmp81_ = _tmp80_;
-									_tmp82_ = dim;
-									_tmp83_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp81_, _tmp82_);
-									_tmp84_ = _tmp83_;
-									vala_ccode_initializer_list_append (_tmp78_, _tmp84_);
-									_vala_ccode_node_unref0 (_tmp84_);
+									_tmp85_ = clist;
+									_tmp86_ = expr;
+									_tmp87_ = vala_expression_get_target_value (_tmp86_);
+									_tmp88_ = _tmp87_;
+									_tmp89_ = dim;
+									_tmp90_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp88_, _tmp89_);
+									_tmp91_ = _tmp90_;
+									vala_ccode_initializer_list_append (_tmp85_, _tmp91_);
+									_vala_ccode_node_unref0 (_tmp91_);
 								}
 							}
 						}
@@ -14101,186 +14373,186 @@ static void vala_ccode_base_module_real_visit_initializer_list (ValaCodeVisitor*
 				}
 				_vala_iterable_unref0 (_expr_list);
 			}
-			_tmp85_ = list;
-			_tmp86_ = clist;
-			vala_ccode_base_module_set_cvalue (self, (ValaExpression*) _tmp85_, (ValaCCodeExpression*) _tmp86_);
+			_tmp92_ = list;
+			_tmp93_ = clist;
+			vala_ccode_base_module_set_cvalue (self, (ValaExpression*) _tmp92_, (ValaCCodeExpression*) _tmp93_);
 			_vala_iterator_unref0 (field_it);
 			_vala_ccode_node_unref0 (clist);
 		} else {
-			ValaInitializerList* _tmp87_;
-			ValaDataType* _tmp88_;
-			ValaDataType* _tmp89_;
-			ValaInitializerList* _tmp90_;
-			ValaTargetValue* _tmp91_ = NULL;
+			ValaInitializerList* _tmp94_;
+			ValaDataType* _tmp95_;
+			ValaDataType* _tmp96_;
+			ValaInitializerList* _tmp97_;
+			ValaTargetValue* _tmp98_ = NULL;
 			ValaTargetValue* instance;
-			ValaStruct* _tmp92_;
-			ValaList* _tmp93_ = NULL;
-			ValaList* _tmp94_;
-			ValaIterator* _tmp95_ = NULL;
-			ValaIterator* _tmp96_;
+			ValaStruct* _tmp99_;
+			ValaList* _tmp100_ = NULL;
+			ValaList* _tmp101_;
+			ValaIterator* _tmp102_ = NULL;
+			ValaIterator* _tmp103_;
 			ValaIterator* field_it;
-			ValaInitializerList* _tmp120_;
-			ValaTargetValue* _tmp121_;
-			_tmp87_ = list;
-			_tmp88_ = vala_expression_get_value_type ((ValaExpression*) _tmp87_);
-			_tmp89_ = _tmp88_;
-			_tmp90_ = list;
-			_tmp91_ = vala_ccode_base_module_create_temp_value (self, _tmp89_, TRUE, (ValaCodeNode*) _tmp90_, NULL);
-			instance = _tmp91_;
-			_tmp92_ = st;
-			_tmp93_ = vala_struct_get_fields (_tmp92_);
-			_tmp94_ = _tmp93_;
-			_tmp95_ = vala_iterable_iterator ((ValaIterable*) _tmp94_);
+			ValaInitializerList* _tmp127_;
+			ValaTargetValue* _tmp128_;
+			_tmp94_ = list;
+			_tmp95_ = vala_expression_get_value_type ((ValaExpression*) _tmp94_);
 			_tmp96_ = _tmp95_;
-			_vala_iterable_unref0 (_tmp94_);
-			field_it = _tmp96_;
+			_tmp97_ = list;
+			_tmp98_ = vala_ccode_base_module_create_temp_value (self, _tmp96_, TRUE, (ValaCodeNode*) _tmp97_, NULL);
+			instance = _tmp98_;
+			_tmp99_ = st;
+			_tmp100_ = vala_struct_get_fields (_tmp99_);
+			_tmp101_ = _tmp100_;
+			_tmp102_ = vala_iterable_iterator ((ValaIterable*) _tmp101_);
+			_tmp103_ = _tmp102_;
+			_vala_iterable_unref0 (_tmp101_);
+			field_it = _tmp103_;
 			{
-				ValaInitializerList* _tmp97_;
-				ValaList* _tmp98_ = NULL;
+				ValaInitializerList* _tmp104_;
+				ValaList* _tmp105_ = NULL;
 				ValaList* _expr_list;
-				ValaList* _tmp99_;
-				gint _tmp100_;
-				gint _tmp101_;
+				ValaList* _tmp106_;
+				gint _tmp107_;
+				gint _tmp108_;
 				gint _expr_size;
 				gint _expr_index;
-				_tmp97_ = list;
-				_tmp98_ = vala_initializer_list_get_initializers (_tmp97_);
-				_expr_list = _tmp98_;
-				_tmp99_ = _expr_list;
-				_tmp100_ = vala_collection_get_size ((ValaCollection*) _tmp99_);
-				_tmp101_ = _tmp100_;
-				_expr_size = _tmp101_;
+				_tmp104_ = list;
+				_tmp105_ = vala_initializer_list_get_initializers (_tmp104_);
+				_expr_list = _tmp105_;
+				_tmp106_ = _expr_list;
+				_tmp107_ = vala_collection_get_size ((ValaCollection*) _tmp106_);
+				_tmp108_ = _tmp107_;
+				_expr_size = _tmp108_;
 				_expr_index = -1;
 				while (TRUE) {
-					gint _tmp102_;
-					gint _tmp103_;
-					gint _tmp104_;
-					ValaList* _tmp105_;
-					gint _tmp106_;
-					gpointer _tmp107_ = NULL;
+					gint _tmp109_;
+					gint _tmp110_;
+					gint _tmp111_;
+					ValaList* _tmp112_;
+					gint _tmp113_;
+					gpointer _tmp114_ = NULL;
 					ValaExpression* expr;
 					ValaField* field;
-					ValaField* _tmp115_;
-					ValaTargetValue* _tmp116_;
-					ValaExpression* _tmp117_;
-					ValaTargetValue* _tmp118_;
-					ValaTargetValue* _tmp119_;
-					_tmp102_ = _expr_index;
-					_expr_index = _tmp102_ + 1;
-					_tmp103_ = _expr_index;
-					_tmp104_ = _expr_size;
-					if (!(_tmp103_ < _tmp104_)) {
+					ValaField* _tmp122_;
+					ValaTargetValue* _tmp123_;
+					ValaExpression* _tmp124_;
+					ValaTargetValue* _tmp125_;
+					ValaTargetValue* _tmp126_;
+					_tmp109_ = _expr_index;
+					_expr_index = _tmp109_ + 1;
+					_tmp110_ = _expr_index;
+					_tmp111_ = _expr_size;
+					if (!(_tmp110_ < _tmp111_)) {
 						break;
 					}
-					_tmp105_ = _expr_list;
-					_tmp106_ = _expr_index;
-					_tmp107_ = vala_list_get (_tmp105_, _tmp106_);
-					expr = (ValaExpression*) _tmp107_;
+					_tmp112_ = _expr_list;
+					_tmp113_ = _expr_index;
+					_tmp114_ = vala_list_get (_tmp112_, _tmp113_);
+					expr = (ValaExpression*) _tmp114_;
 					field = NULL;
 					while (TRUE) {
-						ValaField* _tmp108_;
-						ValaIterator* _tmp109_;
-						ValaIterator* _tmp110_;
-						gpointer _tmp111_ = NULL;
-						ValaField* _tmp112_;
-						ValaMemberBinding _tmp113_;
-						ValaMemberBinding _tmp114_;
-						_tmp108_ = field;
-						if (!(_tmp108_ == NULL)) {
+						ValaField* _tmp115_;
+						ValaIterator* _tmp116_;
+						ValaIterator* _tmp117_;
+						gpointer _tmp118_ = NULL;
+						ValaField* _tmp119_;
+						ValaMemberBinding _tmp120_;
+						ValaMemberBinding _tmp121_;
+						_tmp115_ = field;
+						if (!(_tmp115_ == NULL)) {
 							break;
 						}
-						_tmp109_ = field_it;
-						vala_iterator_next (_tmp109_);
-						_tmp110_ = field_it;
-						_tmp111_ = vala_iterator_get (_tmp110_);
+						_tmp116_ = field_it;
+						vala_iterator_next (_tmp116_);
+						_tmp117_ = field_it;
+						_tmp118_ = vala_iterator_get (_tmp117_);
 						_vala_code_node_unref0 (field);
-						field = (ValaField*) _tmp111_;
-						_tmp112_ = field;
-						_tmp113_ = vala_field_get_binding (_tmp112_);
-						_tmp114_ = _tmp113_;
-						if (_tmp114_ != VALA_MEMBER_BINDING_INSTANCE) {
+						field = (ValaField*) _tmp118_;
+						_tmp119_ = field;
+						_tmp120_ = vala_field_get_binding (_tmp119_);
+						_tmp121_ = _tmp120_;
+						if (_tmp121_ != VALA_MEMBER_BINDING_INSTANCE) {
 							_vala_code_node_unref0 (field);
 							field = NULL;
 						}
 					}
-					_tmp115_ = field;
-					_tmp116_ = instance;
-					_tmp117_ = expr;
-					_tmp118_ = vala_expression_get_target_value (_tmp117_);
-					_tmp119_ = _tmp118_;
-					vala_code_generator_store_field ((ValaCodeGenerator*) self, _tmp115_, _tmp116_, _tmp119_);
+					_tmp122_ = field;
+					_tmp123_ = instance;
+					_tmp124_ = expr;
+					_tmp125_ = vala_expression_get_target_value (_tmp124_);
+					_tmp126_ = _tmp125_;
+					vala_code_generator_store_field ((ValaCodeGenerator*) self, _tmp122_, _tmp123_, _tmp126_);
 					_vala_code_node_unref0 (field);
 					_vala_code_node_unref0 (expr);
 				}
 				_vala_iterable_unref0 (_expr_list);
 			}
-			_tmp120_ = list;
-			_tmp121_ = instance;
-			vala_expression_set_target_value ((ValaExpression*) _tmp120_, _tmp121_);
+			_tmp127_ = list;
+			_tmp128_ = instance;
+			vala_expression_set_target_value ((ValaExpression*) _tmp127_, _tmp128_);
 			_vala_iterator_unref0 (field_it);
 			_vala_target_value_unref0 (instance);
 		}
 		_vala_code_node_unref0 (st);
 	} else {
-		ValaCCodeInitializerList* _tmp122_;
+		ValaCCodeInitializerList* _tmp129_;
 		ValaCCodeInitializerList* clist;
-		ValaInitializerList* _tmp138_;
-		ValaCCodeInitializerList* _tmp139_;
-		_tmp122_ = vala_ccode_initializer_list_new ();
-		clist = _tmp122_;
+		ValaInitializerList* _tmp145_;
+		ValaCCodeInitializerList* _tmp146_;
+		_tmp129_ = vala_ccode_initializer_list_new ();
+		clist = _tmp129_;
 		{
-			ValaInitializerList* _tmp123_;
-			ValaList* _tmp124_ = NULL;
+			ValaInitializerList* _tmp130_;
+			ValaList* _tmp131_ = NULL;
 			ValaList* _expr_list;
-			ValaList* _tmp125_;
-			gint _tmp126_;
-			gint _tmp127_;
+			ValaList* _tmp132_;
+			gint _tmp133_;
+			gint _tmp134_;
 			gint _expr_size;
 			gint _expr_index;
-			_tmp123_ = list;
-			_tmp124_ = vala_initializer_list_get_initializers (_tmp123_);
-			_expr_list = _tmp124_;
-			_tmp125_ = _expr_list;
-			_tmp126_ = vala_collection_get_size ((ValaCollection*) _tmp125_);
-			_tmp127_ = _tmp126_;
-			_expr_size = _tmp127_;
+			_tmp130_ = list;
+			_tmp131_ = vala_initializer_list_get_initializers (_tmp130_);
+			_expr_list = _tmp131_;
+			_tmp132_ = _expr_list;
+			_tmp133_ = vala_collection_get_size ((ValaCollection*) _tmp132_);
+			_tmp134_ = _tmp133_;
+			_expr_size = _tmp134_;
 			_expr_index = -1;
 			while (TRUE) {
-				gint _tmp128_;
-				gint _tmp129_;
-				gint _tmp130_;
-				ValaList* _tmp131_;
-				gint _tmp132_;
-				gpointer _tmp133_ = NULL;
+				gint _tmp135_;
+				gint _tmp136_;
+				gint _tmp137_;
+				ValaList* _tmp138_;
+				gint _tmp139_;
+				gpointer _tmp140_ = NULL;
 				ValaExpression* expr;
-				ValaCCodeInitializerList* _tmp134_;
-				ValaExpression* _tmp135_;
-				ValaCCodeExpression* _tmp136_ = NULL;
-				ValaCCodeExpression* _tmp137_;
-				_tmp128_ = _expr_index;
-				_expr_index = _tmp128_ + 1;
-				_tmp129_ = _expr_index;
-				_tmp130_ = _expr_size;
-				if (!(_tmp129_ < _tmp130_)) {
+				ValaCCodeInitializerList* _tmp141_;
+				ValaExpression* _tmp142_;
+				ValaCCodeExpression* _tmp143_ = NULL;
+				ValaCCodeExpression* _tmp144_;
+				_tmp135_ = _expr_index;
+				_expr_index = _tmp135_ + 1;
+				_tmp136_ = _expr_index;
+				_tmp137_ = _expr_size;
+				if (!(_tmp136_ < _tmp137_)) {
 					break;
 				}
-				_tmp131_ = _expr_list;
-				_tmp132_ = _expr_index;
-				_tmp133_ = vala_list_get (_tmp131_, _tmp132_);
-				expr = (ValaExpression*) _tmp133_;
-				_tmp134_ = clist;
-				_tmp135_ = expr;
-				_tmp136_ = vala_ccode_base_module_get_cvalue (self, _tmp135_);
-				_tmp137_ = _tmp136_;
-				vala_ccode_initializer_list_append (_tmp134_, _tmp137_);
-				_vala_ccode_node_unref0 (_tmp137_);
+				_tmp138_ = _expr_list;
+				_tmp139_ = _expr_index;
+				_tmp140_ = vala_list_get (_tmp138_, _tmp139_);
+				expr = (ValaExpression*) _tmp140_;
+				_tmp141_ = clist;
+				_tmp142_ = expr;
+				_tmp143_ = vala_ccode_base_module_get_cvalue (self, _tmp142_);
+				_tmp144_ = _tmp143_;
+				vala_ccode_initializer_list_append (_tmp141_, _tmp144_);
+				_vala_ccode_node_unref0 (_tmp144_);
 				_vala_code_node_unref0 (expr);
 			}
 			_vala_iterable_unref0 (_expr_list);
 		}
-		_tmp138_ = list;
-		_tmp139_ = clist;
-		vala_ccode_base_module_set_cvalue (self, (ValaExpression*) _tmp138_, (ValaCCodeExpression*) _tmp139_);
+		_tmp145_ = list;
+		_tmp146_ = clist;
+		vala_ccode_base_module_set_cvalue (self, (ValaExpression*) _tmp145_, (ValaCCodeExpression*) _tmp146_);
 		_vala_ccode_node_unref0 (clist);
 	}
 }
@@ -16511,12 +16783,135 @@ gchar* vala_ccode_base_module_generate_dup_func_wrapper (ValaCCodeBaseModule* se
 	_tmp47_ = free_call;
 	vala_ccode_function_add_return (_tmp46_, (ValaCCodeExpression*) _tmp47_);
 	vala_ccode_base_module_pop_function (self);
-	_tmp48_ = self->cfile;
-	_tmp49_ = function;
-	vala_ccode_file_add_function_declaration (_tmp48_, _tmp49_);
-	_tmp50_ = self->cfile;
-	_tmp51_ = function;
-	vala_ccode_file_add_function (_tmp50_, _tmp51_);
+	_tmp48_ = self->cfile;
+	_tmp49_ = function;
+	vala_ccode_file_add_function_declaration (_tmp48_, _tmp49_);
+	_tmp50_ = self->cfile;
+	_tmp51_ = function;
+	vala_ccode_file_add_function (_tmp50_, _tmp51_);
+	result = destroy_func;
+	_vala_ccode_node_unref0 (free_call);
+	_vala_code_node_unref0 (cl);
+	_vala_ccode_node_unref0 (function);
+	return result;
+}
+
+
+gchar* vala_ccode_base_module_generate_free_function_address_of_wrapper (ValaCCodeBaseModule* self, ValaDataType* type) {
+	gchar* result = NULL;
+	ValaDataType* _tmp0_;
+	ValaTypeSymbol* _tmp1_;
+	ValaTypeSymbol* _tmp2_;
+	gchar* _tmp3_ = NULL;
+	gchar* _tmp4_;
+	gchar* _tmp5_ = NULL;
+	gchar* _tmp6_;
+	gchar* destroy_func;
+	const gchar* _tmp7_;
+	gboolean _tmp8_ = FALSE;
+	const gchar* _tmp9_;
+	ValaCCodeFunction* _tmp10_;
+	ValaCCodeFunction* function;
+	ValaCCodeFunction* _tmp11_;
+	ValaCCodeFunction* _tmp12_;
+	ValaDataType* _tmp13_;
+	gchar* _tmp14_ = NULL;
+	gchar* _tmp15_;
+	ValaCCodeParameter* _tmp16_;
+	ValaCCodeParameter* _tmp17_;
+	ValaCCodeFunction* _tmp18_;
+	ValaDataType* _tmp19_;
+	ValaTypeSymbol* _tmp20_;
+	ValaTypeSymbol* _tmp21_;
+	ValaClass* _tmp22_;
+	ValaClass* cl;
+	ValaClass* _tmp23_;
+	gchar* _tmp24_ = NULL;
+	gchar* _tmp25_;
+	ValaCCodeIdentifier* _tmp26_;
+	ValaCCodeIdentifier* _tmp27_;
+	ValaCCodeFunctionCall* _tmp28_;
+	ValaCCodeFunctionCall* _tmp29_;
+	ValaCCodeFunctionCall* free_call;
+	ValaCCodeFunctionCall* _tmp30_;
+	ValaCCodeIdentifier* _tmp31_;
+	ValaCCodeIdentifier* _tmp32_;
+	ValaCCodeUnaryExpression* _tmp33_;
+	ValaCCodeUnaryExpression* _tmp34_;
+	ValaCCodeFunction* _tmp35_;
+	ValaCCodeFunction* _tmp36_;
+	ValaCCodeFunctionCall* _tmp37_;
+	ValaCCodeFile* _tmp38_;
+	ValaCCodeFunction* _tmp39_;
+	ValaCCodeFile* _tmp40_;
+	ValaCCodeFunction* _tmp41_;
+	g_return_val_if_fail (self != NULL, NULL);
+	g_return_val_if_fail (type != NULL, NULL);
+	_tmp0_ = type;
+	_tmp1_ = vala_data_type_get_data_type (_tmp0_);
+	_tmp2_ = _tmp1_;
+	_tmp3_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp2_);
+	_tmp4_ = _tmp3_;
+	_tmp5_ = g_strdup_printf ("_vala_%s_free_function_address_of", _tmp4_);
+	_tmp6_ = _tmp5_;
+	_g_free0 (_tmp4_);
+	destroy_func = _tmp6_;
+	_tmp7_ = destroy_func;
+	_tmp8_ = vala_ccode_base_module_add_wrapper (self, _tmp7_);
+	if (!_tmp8_) {
+		result = destroy_func;
+		return result;
+	}
+	_tmp9_ = destroy_func;
+	_tmp10_ = vala_ccode_function_new (_tmp9_, "void");
+	function = _tmp10_;
+	_tmp11_ = function;
+	vala_ccode_function_set_modifiers (_tmp11_, VALA_CCODE_MODIFIERS_STATIC);
+	_tmp12_ = function;
+	_tmp13_ = type;
+	_tmp14_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp13_);
+	_tmp15_ = _tmp14_;
+	_tmp16_ = vala_ccode_parameter_new ("self", _tmp15_);
+	_tmp17_ = _tmp16_;
+	vala_ccode_function_add_parameter (_tmp12_, _tmp17_);
+	_vala_ccode_node_unref0 (_tmp17_);
+	_g_free0 (_tmp15_);
+	_tmp18_ = function;
+	vala_ccode_base_module_push_function (self, _tmp18_);
+	_tmp19_ = type;
+	_tmp20_ = vala_data_type_get_data_type (_tmp19_);
+	_tmp21_ = _tmp20_;
+	_tmp22_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp21_) ? ((ValaClass*) _tmp21_) : NULL);
+	cl = _tmp22_;
+	_tmp23_ = cl;
+	_tmp24_ = vala_ccode_base_module_get_ccode_free_function ((ValaTypeSymbol*) _tmp23_);
+	_tmp25_ = _tmp24_;
+	_tmp26_ = vala_ccode_identifier_new (_tmp25_);
+	_tmp27_ = _tmp26_;
+	_tmp28_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp27_);
+	_tmp29_ = _tmp28_;
+	_vala_ccode_node_unref0 (_tmp27_);
+	_g_free0 (_tmp25_);
+	free_call = _tmp29_;
+	_tmp30_ = free_call;
+	_tmp31_ = vala_ccode_identifier_new ("self");
+	_tmp32_ = _tmp31_;
+	_tmp33_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp32_);
+	_tmp34_ = _tmp33_;
+	vala_ccode_function_call_add_argument (_tmp30_, (ValaCCodeExpression*) _tmp34_);
+	_vala_ccode_node_unref0 (_tmp34_);
+	_vala_ccode_node_unref0 (_tmp32_);
+	_tmp35_ = vala_ccode_base_module_get_ccode (self);
+	_tmp36_ = _tmp35_;
+	_tmp37_ = free_call;
+	vala_ccode_function_add_expression (_tmp36_, (ValaCCodeExpression*) _tmp37_);
+	vala_ccode_base_module_pop_function (self);
+	_tmp38_ = self->cfile;
+	_tmp39_ = function;
+	vala_ccode_file_add_function_declaration (_tmp38_, _tmp39_);
+	_tmp40_ = self->cfile;
+	_tmp41_ = function;
+	vala_ccode_file_add_function (_tmp40_, _tmp41_);
 	result = destroy_func;
 	_vala_ccode_node_unref0 (free_call);
 	_vala_code_node_unref0 (cl);
@@ -17072,9 +17467,9 @@ ValaCCodeExpression* vala_ccode_base_module_get_destroy_func_expression (ValaCCo
 			if (_tmp64_ != NULL) {
 				gchar* unref_function = NULL;
 				ValaDataType* _tmp65_;
-				const gchar* _tmp134_;
-				const gchar* _tmp136_;
-				ValaCCodeIdentifier* _tmp137_;
+				const gchar* _tmp138_;
+				const gchar* _tmp140_;
+				ValaCCodeIdentifier* _tmp141_;
 				_tmp65_ = type;
 				if (VALA_IS_REFERENCE_TYPE (_tmp65_)) {
 					ValaDataType* _tmp66_;
@@ -17175,248 +17570,261 @@ ValaCCodeExpression* vala_ccode_base_module_get_destroy_func_expression (ValaCCo
 							unref_function = _tmp100_;
 						} else {
 							ValaDataType* _tmp101_;
-							ValaTypeSymbol* _tmp102_;
-							ValaTypeSymbol* _tmp103_;
-							gchar* _tmp104_ = NULL;
+							gboolean _tmp102_ = FALSE;
 							_tmp101_ = type;
-							_tmp102_ = vala_data_type_get_data_type (_tmp101_);
-							_tmp103_ = _tmp102_;
-							_tmp104_ = vala_ccode_base_module_get_ccode_free_function (_tmp103_);
-							_g_free0 (unref_function);
-							unref_function = _tmp104_;
+							_tmp102_ = vala_ccode_base_module_is_free_function_address_of (self, _tmp101_);
+							if (_tmp102_) {
+								ValaDataType* _tmp103_;
+								gchar* _tmp104_ = NULL;
+								_tmp103_ = type;
+								_tmp104_ = vala_ccode_base_module_generate_free_function_address_of_wrapper (self, _tmp103_);
+								_g_free0 (unref_function);
+								unref_function = _tmp104_;
+							} else {
+								ValaDataType* _tmp105_;
+								ValaTypeSymbol* _tmp106_;
+								ValaTypeSymbol* _tmp107_;
+								gchar* _tmp108_ = NULL;
+								_tmp105_ = type;
+								_tmp106_ = vala_data_type_get_data_type (_tmp105_);
+								_tmp107_ = _tmp106_;
+								_tmp108_ = vala_ccode_base_module_get_ccode_free_function (_tmp107_);
+								_g_free0 (unref_function);
+								unref_function = _tmp108_;
+							}
 						}
 						_vala_code_node_unref0 (cl);
 					}
 				} else {
-					ValaDataType* _tmp105_;
-					gboolean _tmp106_;
-					gboolean _tmp107_;
-					_tmp105_ = type;
-					_tmp106_ = vala_data_type_get_nullable (_tmp105_);
-					_tmp107_ = _tmp106_;
-					if (_tmp107_) {
-						ValaDataType* _tmp108_;
-						ValaTypeSymbol* _tmp109_;
-						ValaTypeSymbol* _tmp110_;
-						gchar* _tmp111_ = NULL;
-						const gchar* _tmp112_;
-						_tmp108_ = type;
-						_tmp109_ = vala_data_type_get_data_type (_tmp108_);
-						_tmp110_ = _tmp109_;
-						_tmp111_ = vala_ccode_base_module_get_ccode_free_function (_tmp110_);
+					ValaDataType* _tmp109_;
+					gboolean _tmp110_;
+					gboolean _tmp111_;
+					_tmp109_ = type;
+					_tmp110_ = vala_data_type_get_nullable (_tmp109_);
+					_tmp111_ = _tmp110_;
+					if (_tmp111_) {
+						ValaDataType* _tmp112_;
+						ValaTypeSymbol* _tmp113_;
+						ValaTypeSymbol* _tmp114_;
+						gchar* _tmp115_ = NULL;
+						const gchar* _tmp116_;
+						_tmp112_ = type;
+						_tmp113_ = vala_data_type_get_data_type (_tmp112_);
+						_tmp114_ = _tmp113_;
+						_tmp115_ = vala_ccode_base_module_get_ccode_free_function (_tmp114_);
 						_g_free0 (unref_function);
-						unref_function = _tmp111_;
-						_tmp112_ = unref_function;
-						if (_tmp112_ == NULL) {
-							gboolean _tmp113_ = FALSE;
-							ValaDataType* _tmp114_;
-							ValaTypeSymbol* _tmp115_;
-							ValaTypeSymbol* _tmp116_;
-							gboolean _tmp121_;
-							_tmp114_ = type;
-							_tmp115_ = vala_data_type_get_data_type (_tmp114_);
-							_tmp116_ = _tmp115_;
-							if (VALA_IS_STRUCT (_tmp116_)) {
-								ValaDataType* _tmp117_;
-								ValaTypeSymbol* _tmp118_;
-								ValaTypeSymbol* _tmp119_;
-								gboolean _tmp120_ = FALSE;
-								_tmp117_ = type;
-								_tmp118_ = vala_data_type_get_data_type (_tmp117_);
-								_tmp119_ = _tmp118_;
-								_tmp120_ = vala_struct_is_disposable (VALA_STRUCT (_tmp119_));
-								_tmp113_ = _tmp120_;
+						unref_function = _tmp115_;
+						_tmp116_ = unref_function;
+						if (_tmp116_ == NULL) {
+							gboolean _tmp117_ = FALSE;
+							ValaDataType* _tmp118_;
+							ValaTypeSymbol* _tmp119_;
+							ValaTypeSymbol* _tmp120_;
+							gboolean _tmp125_;
+							_tmp118_ = type;
+							_tmp119_ = vala_data_type_get_data_type (_tmp118_);
+							_tmp120_ = _tmp119_;
+							if (VALA_IS_STRUCT (_tmp120_)) {
+								ValaDataType* _tmp121_;
+								ValaTypeSymbol* _tmp122_;
+								ValaTypeSymbol* _tmp123_;
+								gboolean _tmp124_ = FALSE;
+								_tmp121_ = type;
+								_tmp122_ = vala_data_type_get_data_type (_tmp121_);
+								_tmp123_ = _tmp122_;
+								_tmp124_ = vala_struct_is_disposable (VALA_STRUCT (_tmp123_));
+								_tmp117_ = _tmp124_;
 							} else {
-								_tmp113_ = FALSE;
+								_tmp117_ = FALSE;
 							}
-							_tmp121_ = _tmp113_;
-							if (_tmp121_) {
-								ValaDataType* _tmp122_;
-								gchar* _tmp123_ = NULL;
-								_tmp122_ = type;
-								_tmp123_ = vala_ccode_base_module_generate_free_func_wrapper (self, _tmp122_);
+							_tmp125_ = _tmp117_;
+							if (_tmp125_) {
+								ValaDataType* _tmp126_;
+								gchar* _tmp127_ = NULL;
+								_tmp126_ = type;
+								_tmp127_ = vala_ccode_base_module_generate_free_func_wrapper (self, _tmp126_);
 								_g_free0 (unref_function);
-								unref_function = _tmp123_;
+								unref_function = _tmp127_;
 							} else {
-								gchar* _tmp124_;
-								_tmp124_ = g_strdup ("g_free");
+								gchar* _tmp128_;
+								_tmp128_ = g_strdup ("g_free");
 								_g_free0 (unref_function);
-								unref_function = _tmp124_;
+								unref_function = _tmp128_;
 							}
 						}
 					} else {
-						ValaDataType* _tmp125_;
-						ValaTypeSymbol* _tmp126_;
-						ValaTypeSymbol* _tmp127_;
-						ValaStruct* _tmp128_;
-						ValaStruct* st;
-						ValaStruct* _tmp129_;
-						gboolean _tmp130_ = FALSE;
+						ValaDataType* _tmp129_;
+						ValaTypeSymbol* _tmp130_;
+						ValaTypeSymbol* _tmp131_;
 						ValaStruct* _tmp132_;
-						gchar* _tmp133_ = NULL;
-						_tmp125_ = type;
-						_tmp126_ = vala_data_type_get_data_type (_tmp125_);
-						_tmp127_ = _tmp126_;
-						_tmp128_ = _vala_code_node_ref0 (VALA_STRUCT (_tmp127_));
-						st = _tmp128_;
-						_tmp129_ = st;
-						_tmp130_ = vala_ccode_base_module_get_ccode_has_destroy_function (_tmp129_);
-						if (!_tmp130_) {
-							ValaStruct* _tmp131_;
-							_tmp131_ = st;
-							vala_ccode_base_module_generate_struct_destroy_function (self, _tmp131_);
+						ValaStruct* st;
+						ValaStruct* _tmp133_;
+						gboolean _tmp134_ = FALSE;
+						ValaStruct* _tmp136_;
+						gchar* _tmp137_ = NULL;
+						_tmp129_ = type;
+						_tmp130_ = vala_data_type_get_data_type (_tmp129_);
+						_tmp131_ = _tmp130_;
+						_tmp132_ = _vala_code_node_ref0 (VALA_STRUCT (_tmp131_));
+						st = _tmp132_;
+						_tmp133_ = st;
+						_tmp134_ = vala_ccode_base_module_get_ccode_has_destroy_function (_tmp133_);
+						if (!_tmp134_) {
+							ValaStruct* _tmp135_;
+							_tmp135_ = st;
+							vala_ccode_base_module_generate_struct_destroy_function (self, _tmp135_);
 						}
-						_tmp132_ = st;
-						_tmp133_ = vala_ccode_base_module_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp132_);
+						_tmp136_ = st;
+						_tmp137_ = vala_ccode_base_module_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp136_);
 						_g_free0 (unref_function);
-						unref_function = _tmp133_;
+						unref_function = _tmp137_;
 						_vala_code_node_unref0 (st);
 					}
 				}
-				_tmp134_ = unref_function;
-				if (_tmp134_ == NULL) {
-					ValaCCodeConstant* _tmp135_;
-					_tmp135_ = vala_ccode_constant_new ("NULL");
-					result = (ValaCCodeExpression*) _tmp135_;
+				_tmp138_ = unref_function;
+				if (_tmp138_ == NULL) {
+					ValaCCodeConstant* _tmp139_;
+					_tmp139_ = vala_ccode_constant_new ("NULL");
+					result = (ValaCCodeExpression*) _tmp139_;
 					_g_free0 (unref_function);
 					return result;
 				}
-				_tmp136_ = unref_function;
-				_tmp137_ = vala_ccode_identifier_new (_tmp136_);
-				result = (ValaCCodeExpression*) _tmp137_;
+				_tmp140_ = unref_function;
+				_tmp141_ = vala_ccode_identifier_new (_tmp140_);
+				result = (ValaCCodeExpression*) _tmp141_;
 				_g_free0 (unref_function);
 				return result;
 			} else {
-				ValaDataType* _tmp138_;
-				ValaTypeParameter* _tmp139_;
-				ValaTypeParameter* _tmp140_;
-				_tmp138_ = type;
-				_tmp139_ = vala_data_type_get_type_parameter (_tmp138_);
-				_tmp140_ = _tmp139_;
-				if (_tmp140_ != NULL) {
-					ValaDataType* _tmp141_;
-					ValaTypeParameter* _tmp142_;
-					ValaTypeParameter* _tmp143_;
-					const gchar* _tmp144_;
-					const gchar* _tmp145_;
-					gchar* _tmp146_ = NULL;
-					gchar* _tmp147_;
-					gchar* _tmp148_ = NULL;
-					gchar* _tmp149_;
+				ValaDataType* _tmp142_;
+				ValaTypeParameter* _tmp143_;
+				ValaTypeParameter* _tmp144_;
+				_tmp142_ = type;
+				_tmp143_ = vala_data_type_get_type_parameter (_tmp142_);
+				_tmp144_ = _tmp143_;
+				if (_tmp144_ != NULL) {
+					ValaDataType* _tmp145_;
+					ValaTypeParameter* _tmp146_;
+					ValaTypeParameter* _tmp147_;
+					const gchar* _tmp148_;
+					const gchar* _tmp149_;
+					gchar* _tmp150_ = NULL;
+					gchar* _tmp151_;
+					gchar* _tmp152_ = NULL;
+					gchar* _tmp153_;
 					gchar* func_name;
-					gboolean _tmp150_ = FALSE;
-					gboolean _tmp151_ = FALSE;
-					ValaDataType* _tmp152_;
-					gboolean _tmp153_ = FALSE;
-					gboolean _tmp155_;
-					gboolean _tmp158_;
-					_tmp141_ = type;
-					_tmp142_ = vala_data_type_get_type_parameter (_tmp141_);
-					_tmp143_ = _tmp142_;
-					_tmp144_ = vala_symbol_get_name ((ValaSymbol*) _tmp143_);
-					_tmp145_ = _tmp144_;
-					_tmp146_ = g_utf8_strdown (_tmp145_, (gssize) (-1));
+					gboolean _tmp154_ = FALSE;
+					gboolean _tmp155_ = FALSE;
+					ValaDataType* _tmp156_;
+					gboolean _tmp157_ = FALSE;
+					gboolean _tmp159_;
+					gboolean _tmp162_;
+					_tmp145_ = type;
+					_tmp146_ = vala_data_type_get_type_parameter (_tmp145_);
 					_tmp147_ = _tmp146_;
-					_tmp148_ = g_strdup_printf ("%s_destroy_func", _tmp147_);
+					_tmp148_ = vala_symbol_get_name ((ValaSymbol*) _tmp147_);
 					_tmp149_ = _tmp148_;
-					_g_free0 (_tmp147_);
-					func_name = _tmp149_;
-					_tmp152_ = type;
-					_tmp153_ = vala_ccode_base_module_is_in_generic_type (self, _tmp152_);
-					if (_tmp153_) {
-						gboolean _tmp154_;
-						_tmp154_ = is_chainup;
-						_tmp151_ = !_tmp154_;
+					_tmp150_ = g_utf8_strdown (_tmp149_, (gssize) (-1));
+					_tmp151_ = _tmp150_;
+					_tmp152_ = g_strdup_printf ("%s_destroy_func", _tmp151_);
+					_tmp153_ = _tmp152_;
+					_g_free0 (_tmp151_);
+					func_name = _tmp153_;
+					_tmp156_ = type;
+					_tmp157_ = vala_ccode_base_module_is_in_generic_type (self, _tmp156_);
+					if (_tmp157_) {
+						gboolean _tmp158_;
+						_tmp158_ = is_chainup;
+						_tmp155_ = !_tmp158_;
 					} else {
-						_tmp151_ = FALSE;
+						_tmp155_ = FALSE;
 					}
-					_tmp155_ = _tmp151_;
-					if (_tmp155_) {
-						gboolean _tmp156_;
-						gboolean _tmp157_;
-						_tmp156_ = vala_ccode_base_module_get_in_creation_method (self);
-						_tmp157_ = _tmp156_;
-						_tmp150_ = !_tmp157_;
+					_tmp159_ = _tmp155_;
+					if (_tmp159_) {
+						gboolean _tmp160_;
+						gboolean _tmp161_;
+						_tmp160_ = vala_ccode_base_module_get_in_creation_method (self);
+						_tmp161_ = _tmp160_;
+						_tmp154_ = !_tmp161_;
 					} else {
-						_tmp150_ = FALSE;
+						_tmp154_ = FALSE;
 					}
-					_tmp158_ = _tmp150_;
-					if (_tmp158_) {
-						ValaCCodeExpression* _tmp159_ = NULL;
-						ValaCCodeExpression* _tmp160_;
-						ValaCCodeMemberAccess* _tmp161_;
-						ValaCCodeMemberAccess* _tmp162_;
-						const gchar* _tmp163_;
-						ValaCCodeMemberAccess* _tmp164_;
-						ValaCCodeExpression* _tmp165_;
-						_tmp159_ = vala_ccode_base_module_get_result_cexpression (self, "self");
-						_tmp160_ = _tmp159_;
-						_tmp161_ = vala_ccode_member_access_new_pointer (_tmp160_, "priv");
-						_tmp162_ = _tmp161_;
-						_tmp163_ = func_name;
-						_tmp164_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp162_, _tmp163_);
-						_tmp165_ = (ValaCCodeExpression*) _tmp164_;
-						_vala_ccode_node_unref0 (_tmp162_);
-						_vala_ccode_node_unref0 (_tmp160_);
-						result = _tmp165_;
+					_tmp162_ = _tmp154_;
+					if (_tmp162_) {
+						ValaCCodeExpression* _tmp163_ = NULL;
+						ValaCCodeExpression* _tmp164_;
+						ValaCCodeMemberAccess* _tmp165_;
+						ValaCCodeMemberAccess* _tmp166_;
+						const gchar* _tmp167_;
+						ValaCCodeMemberAccess* _tmp168_;
+						ValaCCodeExpression* _tmp169_;
+						_tmp163_ = vala_ccode_base_module_get_result_cexpression (self, "self");
+						_tmp164_ = _tmp163_;
+						_tmp165_ = vala_ccode_member_access_new_pointer (_tmp164_, "priv");
+						_tmp166_ = _tmp165_;
+						_tmp167_ = func_name;
+						_tmp168_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp166_, _tmp167_);
+						_tmp169_ = (ValaCCodeExpression*) _tmp168_;
+						_vala_ccode_node_unref0 (_tmp166_);
+						_vala_ccode_node_unref0 (_tmp164_);
+						result = _tmp169_;
 						_g_free0 (func_name);
 						return result;
 					} else {
-						const gchar* _tmp166_;
-						ValaCCodeExpression* _tmp167_ = NULL;
-						_tmp166_ = func_name;
-						_tmp167_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp166_);
-						result = _tmp167_;
+						const gchar* _tmp170_;
+						ValaCCodeExpression* _tmp171_ = NULL;
+						_tmp170_ = func_name;
+						_tmp171_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp170_);
+						result = _tmp171_;
 						_g_free0 (func_name);
 						return result;
 					}
 					_g_free0 (func_name);
 				} else {
-					ValaDataType* _tmp168_;
-					_tmp168_ = type;
-					if (VALA_IS_ARRAY_TYPE (_tmp168_)) {
-						ValaCodeContext* _tmp169_;
-						ValaProfile _tmp170_;
-						ValaProfile _tmp171_;
-						_tmp169_ = self->priv->_context;
-						_tmp170_ = vala_code_context_get_profile (_tmp169_);
-						_tmp171_ = _tmp170_;
-						if (_tmp171_ == VALA_PROFILE_POSIX) {
-							ValaCCodeIdentifier* _tmp172_;
-							_tmp172_ = vala_ccode_identifier_new ("free");
-							result = (ValaCCodeExpression*) _tmp172_;
+					ValaDataType* _tmp172_;
+					_tmp172_ = type;
+					if (VALA_IS_ARRAY_TYPE (_tmp172_)) {
+						ValaCodeContext* _tmp173_;
+						ValaProfile _tmp174_;
+						ValaProfile _tmp175_;
+						_tmp173_ = self->priv->_context;
+						_tmp174_ = vala_code_context_get_profile (_tmp173_);
+						_tmp175_ = _tmp174_;
+						if (_tmp175_ == VALA_PROFILE_POSIX) {
+							ValaCCodeIdentifier* _tmp176_;
+							_tmp176_ = vala_ccode_identifier_new ("free");
+							result = (ValaCCodeExpression*) _tmp176_;
 							return result;
 						} else {
-							ValaCCodeIdentifier* _tmp173_;
-							_tmp173_ = vala_ccode_identifier_new ("g_free");
-							result = (ValaCCodeExpression*) _tmp173_;
+							ValaCCodeIdentifier* _tmp177_;
+							_tmp177_ = vala_ccode_identifier_new ("g_free");
+							result = (ValaCCodeExpression*) _tmp177_;
 							return result;
 						}
 					} else {
-						ValaDataType* _tmp174_;
-						_tmp174_ = type;
-						if (VALA_IS_POINTER_TYPE (_tmp174_)) {
-							ValaCodeContext* _tmp175_;
-							ValaProfile _tmp176_;
-							ValaProfile _tmp177_;
-							_tmp175_ = self->priv->_context;
-							_tmp176_ = vala_code_context_get_profile (_tmp175_);
-							_tmp177_ = _tmp176_;
-							if (_tmp177_ == VALA_PROFILE_POSIX) {
-								ValaCCodeIdentifier* _tmp178_;
-								_tmp178_ = vala_ccode_identifier_new ("free");
-								result = (ValaCCodeExpression*) _tmp178_;
+						ValaDataType* _tmp178_;
+						_tmp178_ = type;
+						if (VALA_IS_POINTER_TYPE (_tmp178_)) {
+							ValaCodeContext* _tmp179_;
+							ValaProfile _tmp180_;
+							ValaProfile _tmp181_;
+							_tmp179_ = self->priv->_context;
+							_tmp180_ = vala_code_context_get_profile (_tmp179_);
+							_tmp181_ = _tmp180_;
+							if (_tmp181_ == VALA_PROFILE_POSIX) {
+								ValaCCodeIdentifier* _tmp182_;
+								_tmp182_ = vala_ccode_identifier_new ("free");
+								result = (ValaCCodeExpression*) _tmp182_;
 								return result;
 							} else {
-								ValaCCodeIdentifier* _tmp179_;
-								_tmp179_ = vala_ccode_identifier_new ("g_free");
-								result = (ValaCCodeExpression*) _tmp179_;
+								ValaCCodeIdentifier* _tmp183_;
+								_tmp183_ = vala_ccode_identifier_new ("g_free");
+								result = (ValaCCodeExpression*) _tmp183_;
 								return result;
 							}
 						} else {
-							ValaCCodeConstant* _tmp180_;
-							_tmp180_ = vala_ccode_constant_new ("NULL");
-							result = (ValaCCodeExpression*) _tmp180_;
+							ValaCCodeConstant* _tmp184_;
+							_tmp184_ = vala_ccode_constant_new ("NULL");
+							result = (ValaCCodeExpression*) _tmp184_;
 							return result;
 						}
 					}
@@ -17905,40 +18313,40 @@ static ValaCCodeExpression* vala_ccode_base_module_real_destroy_value (ValaCCode
 	ValaDataType* _tmp156_;
 	ValaTypeParameter* _tmp157_;
 	ValaTypeParameter* _tmp158_;
-	ValaCCodeFunctionCall* _tmp190_;
-	ValaCCodeExpression* _tmp191_;
-	ValaCCodeCommaExpression* _tmp192_;
+	ValaCCodeFunctionCall* _tmp193_;
+	ValaCCodeExpression* _tmp194_;
+	ValaCCodeCommaExpression* _tmp195_;
 	ValaCCodeCommaExpression* ccomma;
-	ValaCodeContext* _tmp193_;
-	ValaProfile _tmp194_;
-	ValaProfile _tmp195_;
-	ValaCCodeCommaExpression* _tmp301_;
-	ValaCCodeFunctionCall* _tmp302_;
-	ValaCCodeCommaExpression* _tmp303_;
-	ValaCCodeConstant* _tmp304_;
-	ValaCCodeConstant* _tmp305_;
-	ValaCCodeExpression* _tmp306_;
-	ValaCCodeCommaExpression* _tmp307_;
-	ValaCCodeAssignment* _tmp308_;
+	ValaCodeContext* _tmp196_;
+	ValaProfile _tmp197_;
+	ValaProfile _tmp198_;
+	ValaCCodeCommaExpression* _tmp304_;
+	ValaCCodeFunctionCall* _tmp305_;
+	ValaCCodeCommaExpression* _tmp306_;
+	ValaCCodeConstant* _tmp307_;
+	ValaCCodeConstant* _tmp308_;
+	ValaCCodeExpression* _tmp309_;
+	ValaCCodeCommaExpression* _tmp310_;
+	ValaCCodeAssignment* _tmp311_;
 	ValaCCodeAssignment* cassign;
-	gboolean _tmp309_ = FALSE;
-	gboolean _tmp310_ = FALSE;
-	ValaDataType* _tmp311_;
-	ValaTypeSymbol* _tmp312_;
-	ValaTypeSymbol* _tmp313_;
-	gboolean _tmp318_;
-	gboolean _tmp324_;
+	gboolean _tmp312_ = FALSE;
+	gboolean _tmp313_ = FALSE;
+	ValaDataType* _tmp314_;
+	ValaTypeSymbol* _tmp315_;
+	ValaTypeSymbol* _tmp316_;
+	gboolean _tmp321_;
+	gboolean _tmp327_;
 	gboolean uses_gfree;
-	gboolean _tmp325_ = FALSE;
-	gboolean _tmp326_;
-	gboolean _tmp328_;
+	gboolean _tmp328_ = FALSE;
 	gboolean _tmp329_;
-	ValaCCodeBinaryExpression* _tmp330_;
-	ValaCCodeConstant* _tmp331_;
-	ValaCCodeConstant* _tmp332_;
-	ValaCCodeAssignment* _tmp333_;
-	ValaCCodeConditionalExpression* _tmp334_;
-	ValaCCodeExpression* _tmp335_;
+	gboolean _tmp331_;
+	gboolean _tmp332_;
+	ValaCCodeBinaryExpression* _tmp333_;
+	ValaCCodeConstant* _tmp334_;
+	ValaCCodeConstant* _tmp335_;
+	ValaCCodeAssignment* _tmp336_;
+	ValaCCodeConditionalExpression* _tmp337_;
+	ValaCCodeExpression* _tmp338_;
 	g_return_val_if_fail (value != NULL, NULL);
 	_tmp0_ = value;
 	_tmp1_ = vala_target_value_get_value_type (_tmp0_);
@@ -18372,20 +18780,22 @@ static ValaCCodeExpression* vala_ccode_base_module_real_destroy_value (ValaCCode
 		ValaClass* cl;
 		gboolean _tmp167_ = FALSE;
 		gboolean _tmp168_ = FALSE;
-		ValaSymbol* _tmp169_;
-		gboolean _tmp171_;
-		gboolean _tmp178_;
-		ValaDataType* _tmp180_;
-		ValaCCodeExpression* _tmp181_ = NULL;
-		ValaCCodeExpression* _tmp182_;
-		ValaCCodeConstant* _tmp183_;
-		ValaCCodeConstant* _tmp184_;
-		ValaCCodeBinaryExpression* _tmp185_;
-		ValaCCodeBinaryExpression* _tmp186_;
-		ValaCCodeBinaryExpression* cunrefisnull;
-		ValaCCodeBinaryExpression* _tmp187_;
+		gboolean _tmp169_ = FALSE;
+		ValaSymbol* _tmp170_;
+		gboolean _tmp172_;
+		gboolean _tmp179_;
+		gboolean _tmp181_;
+		ValaDataType* _tmp183_;
+		ValaCCodeExpression* _tmp184_ = NULL;
+		ValaCCodeExpression* _tmp185_;
+		ValaCCodeConstant* _tmp186_;
+		ValaCCodeConstant* _tmp187_;
 		ValaCCodeBinaryExpression* _tmp188_;
 		ValaCCodeBinaryExpression* _tmp189_;
+		ValaCCodeBinaryExpression* cunrefisnull;
+		ValaCCodeBinaryExpression* _tmp190_;
+		ValaCCodeBinaryExpression* _tmp191_;
+		ValaCCodeBinaryExpression* _tmp192_;
 		_tmp159_ = type;
 		_tmp160_ = vala_data_type_get_type_parameter (_tmp159_);
 		_tmp161_ = _tmp160_;
@@ -18396,41 +18806,49 @@ static ValaCCodeExpression* vala_ccode_base_module_real_destroy_value (ValaCCode
 		_tmp165_ = parent;
 		_tmp166_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp165_) ? ((ValaClass*) _tmp165_) : NULL);
 		cl = _tmp166_;
-		_tmp169_ = parent;
-		if (!VALA_IS_METHOD (_tmp169_)) {
-			ValaSymbol* _tmp170_;
-			_tmp170_ = parent;
-			_tmp168_ = !VALA_IS_OBJECT_TYPE_SYMBOL (_tmp170_);
+		_tmp170_ = parent;
+		if (!VALA_IS_METHOD (_tmp170_)) {
+			ValaSymbol* _tmp171_;
+			_tmp171_ = parent;
+			_tmp169_ = !VALA_IS_OBJECT_TYPE_SYMBOL (_tmp171_);
 		} else {
-			_tmp168_ = FALSE;
+			_tmp169_ = FALSE;
 		}
-		_tmp171_ = _tmp168_;
-		if (_tmp171_) {
-			_tmp167_ = TRUE;
+		_tmp172_ = _tmp169_;
+		if (_tmp172_) {
+			_tmp168_ = TRUE;
 		} else {
-			gboolean _tmp172_ = FALSE;
-			ValaClass* _tmp173_;
-			gboolean _tmp177_;
-			_tmp173_ = cl;
-			if (_tmp173_ != NULL) {
-				ValaClass* _tmp174_;
-				gboolean _tmp175_;
+			gboolean _tmp173_ = FALSE;
+			ValaClass* _tmp174_;
+			gboolean _tmp178_;
+			_tmp174_ = cl;
+			if (_tmp174_ != NULL) {
+				ValaClass* _tmp175_;
 				gboolean _tmp176_;
-				_tmp174_ = cl;
-				_tmp175_ = vala_class_get_is_compact (_tmp174_);
-				_tmp176_ = _tmp175_;
-				_tmp172_ = _tmp176_;
+				gboolean _tmp177_;
+				_tmp175_ = cl;
+				_tmp176_ = vala_class_get_is_compact (_tmp175_);
+				_tmp177_ = _tmp176_;
+				_tmp173_ = _tmp177_;
 			} else {
-				_tmp172_ = FALSE;
+				_tmp173_ = FALSE;
 			}
-			_tmp177_ = _tmp172_;
-			_tmp167_ = _tmp177_;
+			_tmp178_ = _tmp173_;
+			_tmp168_ = _tmp178_;
 		}
-		_tmp178_ = _tmp167_;
-		if (_tmp178_) {
-			ValaCCodeConstant* _tmp179_;
-			_tmp179_ = vala_ccode_constant_new ("NULL");
-			result = (ValaCCodeExpression*) _tmp179_;
+		_tmp179_ = _tmp168_;
+		if (_tmp179_) {
+			_tmp167_ = TRUE;
+		} else {
+			ValaSymbol* _tmp180_;
+			_tmp180_ = parent;
+			_tmp167_ = VALA_IS_INTERFACE (_tmp180_);
+		}
+		_tmp181_ = _tmp167_;
+		if (_tmp181_) {
+			ValaCCodeConstant* _tmp182_;
+			_tmp182_ = vala_ccode_constant_new ("NULL");
+			result = (ValaCCodeExpression*) _tmp182_;
 			_vala_code_node_unref0 (cl);
 			_vala_code_node_unref0 (parent);
 			_vala_ccode_node_unref0 (cisnull);
@@ -18439,318 +18857,318 @@ static ValaCCodeExpression* vala_ccode_base_module_real_destroy_value (ValaCCode
 			_vala_code_node_unref0 (type);
 			return result;
 		}
-		_tmp180_ = type;
-		_tmp181_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp180_, FALSE);
-		_tmp182_ = _tmp181_;
-		_tmp183_ = vala_ccode_constant_new ("NULL");
-		_tmp184_ = _tmp183_;
-		_tmp185_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp182_, (ValaCCodeExpression*) _tmp184_);
-		_tmp186_ = _tmp185_;
-		_vala_ccode_node_unref0 (_tmp184_);
-		_vala_ccode_node_unref0 (_tmp182_);
-		cunrefisnull = _tmp186_;
-		_tmp187_ = cisnull;
-		_tmp188_ = cunrefisnull;
-		_tmp189_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_OR, (ValaCCodeExpression*) _tmp187_, (ValaCCodeExpression*) _tmp188_);
+		_tmp183_ = type;
+		_tmp184_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp183_, FALSE);
+		_tmp185_ = _tmp184_;
+		_tmp186_ = vala_ccode_constant_new ("NULL");
+		_tmp187_ = _tmp186_;
+		_tmp188_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp185_, (ValaCCodeExpression*) _tmp187_);
+		_tmp189_ = _tmp188_;
+		_vala_ccode_node_unref0 (_tmp187_);
+		_vala_ccode_node_unref0 (_tmp185_);
+		cunrefisnull = _tmp189_;
+		_tmp190_ = cisnull;
+		_tmp191_ = cunrefisnull;
+		_tmp192_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_OR, (ValaCCodeExpression*) _tmp190_, (ValaCCodeExpression*) _tmp191_);
 		_vala_ccode_node_unref0 (cisnull);
-		cisnull = _tmp189_;
+		cisnull = _tmp192_;
 		_vala_ccode_node_unref0 (cunrefisnull);
 		_vala_code_node_unref0 (cl);
 		_vala_code_node_unref0 (parent);
 	}
-	_tmp190_ = ccall;
-	_tmp191_ = cvar;
-	vala_ccode_function_call_add_argument (_tmp190_, _tmp191_);
-	_tmp192_ = vala_ccode_comma_expression_new ();
-	ccomma = _tmp192_;
-	_tmp193_ = self->priv->_context;
-	_tmp194_ = vala_code_context_get_profile (_tmp193_);
-	_tmp195_ = _tmp194_;
-	if (_tmp195_ == VALA_PROFILE_GOBJECT) {
-		gboolean _tmp196_ = FALSE;
-		gboolean _tmp197_ = FALSE;
-		ValaDataType* _tmp198_;
-		ValaTypeSymbol* _tmp199_;
-		ValaTypeSymbol* _tmp200_;
-		gboolean _tmp205_;
-		gboolean _tmp228_;
-		_tmp198_ = type;
-		_tmp199_ = vala_data_type_get_data_type (_tmp198_);
-		_tmp200_ = _tmp199_;
-		if (_tmp200_ != NULL) {
-			ValaDataType* _tmp201_;
-			ValaTypeSymbol* _tmp202_;
-			ValaTypeSymbol* _tmp203_;
-			gboolean _tmp204_ = FALSE;
-			_tmp201_ = type;
-			_tmp202_ = vala_data_type_get_data_type (_tmp201_);
-			_tmp203_ = _tmp202_;
-			_tmp204_ = vala_ccode_base_module_is_reference_counting (_tmp203_);
-			_tmp197_ = !_tmp204_;
+	_tmp193_ = ccall;
+	_tmp194_ = cvar;
+	vala_ccode_function_call_add_argument (_tmp193_, _tmp194_);
+	_tmp195_ = vala_ccode_comma_expression_new ();
+	ccomma = _tmp195_;
+	_tmp196_ = self->priv->_context;
+	_tmp197_ = vala_code_context_get_profile (_tmp196_);
+	_tmp198_ = _tmp197_;
+	if (_tmp198_ == VALA_PROFILE_GOBJECT) {
+		gboolean _tmp199_ = FALSE;
+		gboolean _tmp200_ = FALSE;
+		ValaDataType* _tmp201_;
+		ValaTypeSymbol* _tmp202_;
+		ValaTypeSymbol* _tmp203_;
+		gboolean _tmp208_;
+		gboolean _tmp231_;
+		_tmp201_ = type;
+		_tmp202_ = vala_data_type_get_data_type (_tmp201_);
+		_tmp203_ = _tmp202_;
+		if (_tmp203_ != NULL) {
+			ValaDataType* _tmp204_;
+			ValaTypeSymbol* _tmp205_;
+			ValaTypeSymbol* _tmp206_;
+			gboolean _tmp207_ = FALSE;
+			_tmp204_ = type;
+			_tmp205_ = vala_data_type_get_data_type (_tmp204_);
+			_tmp206_ = _tmp205_;
+			_tmp207_ = vala_ccode_base_module_is_reference_counting (_tmp206_);
+			_tmp200_ = !_tmp207_;
 		} else {
-			_tmp197_ = FALSE;
+			_tmp200_ = FALSE;
 		}
-		_tmp205_ = _tmp197_;
-		if (_tmp205_) {
-			gboolean _tmp206_ = FALSE;
-			gboolean _tmp207_ = FALSE;
-			gboolean _tmp208_ = FALSE;
-			ValaDataType* _tmp209_;
-			ValaTypeSymbol* _tmp210_;
-			ValaTypeSymbol* _tmp211_;
-			ValaTypeSymbol* _tmp212_;
-			gboolean _tmp217_;
-			gboolean _tmp222_;
-			gboolean _tmp227_;
-			_tmp209_ = type;
-			_tmp210_ = vala_data_type_get_data_type (_tmp209_);
-			_tmp211_ = _tmp210_;
-			_tmp212_ = self->gstringbuilder_type;
-			if (_tmp211_ == _tmp212_) {
-				_tmp208_ = TRUE;
-			} else {
-				ValaDataType* _tmp213_;
-				ValaTypeSymbol* _tmp214_;
-				ValaTypeSymbol* _tmp215_;
-				ValaTypeSymbol* _tmp216_;
-				_tmp213_ = type;
-				_tmp214_ = vala_data_type_get_data_type (_tmp213_);
-				_tmp215_ = _tmp214_;
-				_tmp216_ = self->garray_type;
-				_tmp208_ = _tmp215_ == _tmp216_;
-			}
-			_tmp217_ = _tmp208_;
-			if (_tmp217_) {
-				_tmp207_ = TRUE;
+		_tmp208_ = _tmp200_;
+		if (_tmp208_) {
+			gboolean _tmp209_ = FALSE;
+			gboolean _tmp210_ = FALSE;
+			gboolean _tmp211_ = FALSE;
+			ValaDataType* _tmp212_;
+			ValaTypeSymbol* _tmp213_;
+			ValaTypeSymbol* _tmp214_;
+			ValaTypeSymbol* _tmp215_;
+			gboolean _tmp220_;
+			gboolean _tmp225_;
+			gboolean _tmp230_;
+			_tmp212_ = type;
+			_tmp213_ = vala_data_type_get_data_type (_tmp212_);
+			_tmp214_ = _tmp213_;
+			_tmp215_ = self->gstringbuilder_type;
+			if (_tmp214_ == _tmp215_) {
+				_tmp211_ = TRUE;
 			} else {
-				ValaDataType* _tmp218_;
+				ValaDataType* _tmp216_;
+				ValaTypeSymbol* _tmp217_;
+				ValaTypeSymbol* _tmp218_;
 				ValaTypeSymbol* _tmp219_;
-				ValaTypeSymbol* _tmp220_;
-				ValaTypeSymbol* _tmp221_;
-				_tmp218_ = type;
-				_tmp219_ = vala_data_type_get_data_type (_tmp218_);
-				_tmp220_ = _tmp219_;
-				_tmp221_ = self->gbytearray_type;
-				_tmp207_ = _tmp220_ == _tmp221_;
+				_tmp216_ = type;
+				_tmp217_ = vala_data_type_get_data_type (_tmp216_);
+				_tmp218_ = _tmp217_;
+				_tmp219_ = self->garray_type;
+				_tmp211_ = _tmp218_ == _tmp219_;
 			}
-			_tmp222_ = _tmp207_;
-			if (_tmp222_) {
-				_tmp206_ = TRUE;
+			_tmp220_ = _tmp211_;
+			if (_tmp220_) {
+				_tmp210_ = TRUE;
 			} else {
-				ValaDataType* _tmp223_;
+				ValaDataType* _tmp221_;
+				ValaTypeSymbol* _tmp222_;
+				ValaTypeSymbol* _tmp223_;
 				ValaTypeSymbol* _tmp224_;
-				ValaTypeSymbol* _tmp225_;
-				ValaTypeSymbol* _tmp226_;
-				_tmp223_ = type;
-				_tmp224_ = vala_data_type_get_data_type (_tmp223_);
-				_tmp225_ = _tmp224_;
-				_tmp226_ = self->gptrarray_type;
-				_tmp206_ = _tmp225_ == _tmp226_;
+				_tmp221_ = type;
+				_tmp222_ = vala_data_type_get_data_type (_tmp221_);
+				_tmp223_ = _tmp222_;
+				_tmp224_ = self->gbytearray_type;
+				_tmp210_ = _tmp223_ == _tmp224_;
 			}
-			_tmp227_ = _tmp206_;
-			_tmp196_ = _tmp227_;
-		} else {
-			_tmp196_ = FALSE;
-		}
-		_tmp228_ = _tmp196_;
-		if (_tmp228_) {
-			ValaCCodeFunctionCall* _tmp229_;
-			ValaCCodeConstant* _tmp230_;
-			ValaCCodeConstant* _tmp231_;
-			_tmp229_ = ccall;
-			_tmp230_ = vala_ccode_constant_new ("TRUE");
-			_tmp231_ = _tmp230_;
-			vala_ccode_function_call_add_argument (_tmp229_, (ValaCCodeExpression*) _tmp231_);
-			_vala_ccode_node_unref0 (_tmp231_);
+			_tmp225_ = _tmp210_;
+			if (_tmp225_) {
+				_tmp209_ = TRUE;
+			} else {
+				ValaDataType* _tmp226_;
+				ValaTypeSymbol* _tmp227_;
+				ValaTypeSymbol* _tmp228_;
+				ValaTypeSymbol* _tmp229_;
+				_tmp226_ = type;
+				_tmp227_ = vala_data_type_get_data_type (_tmp226_);
+				_tmp228_ = _tmp227_;
+				_tmp229_ = self->gptrarray_type;
+				_tmp209_ = _tmp228_ == _tmp229_;
+			}
+			_tmp230_ = _tmp209_;
+			_tmp199_ = _tmp230_;
 		} else {
-			ValaDataType* _tmp232_;
-			ValaTypeSymbol* _tmp233_;
-			ValaTypeSymbol* _tmp234_;
-			ValaTypeSymbol* _tmp235_;
-			_tmp232_ = type;
-			_tmp233_ = vala_data_type_get_data_type (_tmp232_);
+			_tmp199_ = FALSE;
+		}
+		_tmp231_ = _tmp199_;
+		if (_tmp231_) {
+			ValaCCodeFunctionCall* _tmp232_;
+			ValaCCodeConstant* _tmp233_;
+			ValaCCodeConstant* _tmp234_;
+			_tmp232_ = ccall;
+			_tmp233_ = vala_ccode_constant_new ("TRUE");
 			_tmp234_ = _tmp233_;
-			_tmp235_ = self->gthreadpool_type;
-			if (_tmp234_ == _tmp235_) {
-				ValaCCodeFunctionCall* _tmp236_;
-				ValaCCodeConstant* _tmp237_;
-				ValaCCodeConstant* _tmp238_;
+			vala_ccode_function_call_add_argument (_tmp232_, (ValaCCodeExpression*) _tmp234_);
+			_vala_ccode_node_unref0 (_tmp234_);
+		} else {
+			ValaDataType* _tmp235_;
+			ValaTypeSymbol* _tmp236_;
+			ValaTypeSymbol* _tmp237_;
+			ValaTypeSymbol* _tmp238_;
+			_tmp235_ = type;
+			_tmp236_ = vala_data_type_get_data_type (_tmp235_);
+			_tmp237_ = _tmp236_;
+			_tmp238_ = self->gthreadpool_type;
+			if (_tmp237_ == _tmp238_) {
 				ValaCCodeFunctionCall* _tmp239_;
 				ValaCCodeConstant* _tmp240_;
 				ValaCCodeConstant* _tmp241_;
-				_tmp236_ = ccall;
-				_tmp237_ = vala_ccode_constant_new ("FALSE");
-				_tmp238_ = _tmp237_;
-				vala_ccode_function_call_add_argument (_tmp236_, (ValaCCodeExpression*) _tmp238_);
-				_vala_ccode_node_unref0 (_tmp238_);
+				ValaCCodeFunctionCall* _tmp242_;
+				ValaCCodeConstant* _tmp243_;
+				ValaCCodeConstant* _tmp244_;
 				_tmp239_ = ccall;
-				_tmp240_ = vala_ccode_constant_new ("TRUE");
+				_tmp240_ = vala_ccode_constant_new ("FALSE");
 				_tmp241_ = _tmp240_;
 				vala_ccode_function_call_add_argument (_tmp239_, (ValaCCodeExpression*) _tmp241_);
 				_vala_ccode_node_unref0 (_tmp241_);
+				_tmp242_ = ccall;
+				_tmp243_ = vala_ccode_constant_new ("TRUE");
+				_tmp244_ = _tmp243_;
+				vala_ccode_function_call_add_argument (_tmp242_, (ValaCCodeExpression*) _tmp244_);
+				_vala_ccode_node_unref0 (_tmp244_);
 			} else {
-				ValaDataType* _tmp242_;
-				_tmp242_ = type;
-				if (VALA_IS_ARRAY_TYPE (_tmp242_)) {
-					ValaDataType* _tmp243_;
-					ValaArrayType* _tmp244_;
-					ValaArrayType* array_type;
-					ValaArrayType* _tmp245_;
+				ValaDataType* _tmp245_;
+				_tmp245_ = type;
+				if (VALA_IS_ARRAY_TYPE (_tmp245_)) {
 					ValaDataType* _tmp246_;
-					ValaDataType* _tmp247_;
-					gboolean _tmp248_ = FALSE;
-					_tmp243_ = type;
-					_tmp244_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp243_));
-					array_type = _tmp244_;
-					_tmp245_ = array_type;
-					_tmp246_ = vala_array_type_get_element_type (_tmp245_);
-					_tmp247_ = _tmp246_;
-					_tmp248_ = vala_ccode_base_module_requires_destroy (self, _tmp247_);
-					if (_tmp248_) {
+					ValaArrayType* _tmp247_;
+					ValaArrayType* array_type;
+					ValaArrayType* _tmp248_;
+					ValaDataType* _tmp249_;
+					ValaDataType* _tmp250_;
+					gboolean _tmp251_ = FALSE;
+					_tmp246_ = type;
+					_tmp247_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp246_));
+					array_type = _tmp247_;
+					_tmp248_ = array_type;
+					_tmp249_ = vala_array_type_get_element_type (_tmp248_);
+					_tmp250_ = _tmp249_;
+					_tmp251_ = vala_ccode_base_module_requires_destroy (self, _tmp250_);
+					if (_tmp251_) {
 						ValaCCodeExpression* csizeexpr;
-						ValaTargetValue* _tmp249_;
-						ValaList* _tmp250_;
-						ValaCCodeExpression* _tmp265_;
+						ValaTargetValue* _tmp252_;
+						ValaList* _tmp253_;
+						ValaCCodeExpression* _tmp268_;
 						csizeexpr = NULL;
-						_tmp249_ = value;
-						_tmp250_ = VALA_GLIB_VALUE (_tmp249_)->array_length_cvalues;
-						if (_tmp250_ != NULL) {
-							ValaTargetValue* _tmp251_;
-							ValaCCodeExpression* _tmp252_ = NULL;
-							_tmp251_ = value;
-							_tmp252_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp251_, -1);
+						_tmp252_ = value;
+						_tmp253_ = VALA_GLIB_VALUE (_tmp252_)->array_length_cvalues;
+						if (_tmp253_ != NULL) {
+							ValaTargetValue* _tmp254_;
+							ValaCCodeExpression* _tmp255_ = NULL;
+							_tmp254_ = value;
+							_tmp255_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp254_, -1);
 							_vala_ccode_node_unref0 (csizeexpr);
-							csizeexpr = _tmp252_;
+							csizeexpr = _tmp255_;
 						} else {
-							ValaTargetValue* _tmp253_;
-							gboolean _tmp254_ = FALSE;
-							_tmp253_ = value;
-							_tmp254_ = vala_ccode_base_module_get_array_null_terminated (self, _tmp253_);
-							if (_tmp254_) {
-								ValaCCodeIdentifier* _tmp255_;
-								ValaCCodeIdentifier* _tmp256_;
-								ValaCCodeFunctionCall* _tmp257_;
-								ValaCCodeFunctionCall* _tmp258_;
-								ValaCCodeFunctionCall* len_call;
-								ValaCCodeFunctionCall* _tmp259_;
-								ValaCCodeExpression* _tmp260_;
+							ValaTargetValue* _tmp256_;
+							gboolean _tmp257_ = FALSE;
+							_tmp256_ = value;
+							_tmp257_ = vala_ccode_base_module_get_array_null_terminated (self, _tmp256_);
+							if (_tmp257_) {
+								ValaCCodeIdentifier* _tmp258_;
+								ValaCCodeIdentifier* _tmp259_;
+								ValaCCodeFunctionCall* _tmp260_;
 								ValaCCodeFunctionCall* _tmp261_;
-								ValaCCodeExpression* _tmp262_;
+								ValaCCodeFunctionCall* len_call;
+								ValaCCodeFunctionCall* _tmp262_;
+								ValaCCodeExpression* _tmp263_;
+								ValaCCodeFunctionCall* _tmp264_;
+								ValaCCodeExpression* _tmp265_;
 								self->requires_array_length = TRUE;
-								_tmp255_ = vala_ccode_identifier_new ("_vala_array_length");
-								_tmp256_ = _tmp255_;
-								_tmp257_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp256_);
-								_tmp258_ = _tmp257_;
-								_vala_ccode_node_unref0 (_tmp256_);
-								len_call = _tmp258_;
-								_tmp259_ = len_call;
-								_tmp260_ = cvar;
-								vala_ccode_function_call_add_argument (_tmp259_, _tmp260_);
-								_tmp261_ = len_call;
-								_tmp262_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp261_);
+								_tmp258_ = vala_ccode_identifier_new ("_vala_array_length");
+								_tmp259_ = _tmp258_;
+								_tmp260_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp259_);
+								_tmp261_ = _tmp260_;
+								_vala_ccode_node_unref0 (_tmp259_);
+								len_call = _tmp261_;
+								_tmp262_ = len_call;
+								_tmp263_ = cvar;
+								vala_ccode_function_call_add_argument (_tmp262_, _tmp263_);
+								_tmp264_ = len_call;
+								_tmp265_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp264_);
 								_vala_ccode_node_unref0 (csizeexpr);
-								csizeexpr = _tmp262_;
+								csizeexpr = _tmp265_;
 								_vala_ccode_node_unref0 (len_call);
 							} else {
-								ValaTargetValue* _tmp263_;
-								ValaCCodeExpression* _tmp264_ = NULL;
-								_tmp263_ = value;
-								_tmp264_ = vala_ccode_base_module_get_array_length_cexpr (self, _tmp263_);
+								ValaTargetValue* _tmp266_;
+								ValaCCodeExpression* _tmp267_ = NULL;
+								_tmp266_ = value;
+								_tmp267_ = vala_ccode_base_module_get_array_length_cexpr (self, _tmp266_);
 								_vala_ccode_node_unref0 (csizeexpr);
-								csizeexpr = _tmp264_;
+								csizeexpr = _tmp267_;
 							}
 						}
-						_tmp265_ = csizeexpr;
-						if (_tmp265_ != NULL) {
-							ValaArrayType* _tmp266_;
-							ValaDataType* _tmp267_;
-							ValaDataType* _tmp268_;
-							ValaTypeSymbol* _tmp269_;
-							ValaTypeSymbol* _tmp270_;
-							ValaStruct* _tmp271_;
+						_tmp268_ = csizeexpr;
+						if (_tmp268_ != NULL) {
+							ValaArrayType* _tmp269_;
+							ValaDataType* _tmp270_;
+							ValaDataType* _tmp271_;
+							ValaTypeSymbol* _tmp272_;
+							ValaTypeSymbol* _tmp273_;
+							ValaStruct* _tmp274_;
 							ValaStruct* st;
-							gboolean _tmp272_ = FALSE;
-							ValaStruct* _tmp273_;
-							gboolean _tmp279_;
-							_tmp266_ = array_type;
-							_tmp267_ = vala_array_type_get_element_type (_tmp266_);
-							_tmp268_ = _tmp267_;
-							_tmp269_ = vala_data_type_get_data_type (_tmp268_);
-							_tmp270_ = _tmp269_;
-							_tmp271_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp270_) ? ((ValaStruct*) _tmp270_) : NULL);
-							st = _tmp271_;
-							_tmp273_ = st;
-							if (_tmp273_ != NULL) {
-								ValaArrayType* _tmp274_;
-								ValaDataType* _tmp275_;
-								ValaDataType* _tmp276_;
-								gboolean _tmp277_;
-								gboolean _tmp278_;
-								_tmp274_ = array_type;
-								_tmp275_ = vala_array_type_get_element_type (_tmp274_);
-								_tmp276_ = _tmp275_;
-								_tmp277_ = vala_data_type_get_nullable (_tmp276_);
-								_tmp278_ = _tmp277_;
-								_tmp272_ = !_tmp278_;
+							gboolean _tmp275_ = FALSE;
+							ValaStruct* _tmp276_;
+							gboolean _tmp282_;
+							_tmp269_ = array_type;
+							_tmp270_ = vala_array_type_get_element_type (_tmp269_);
+							_tmp271_ = _tmp270_;
+							_tmp272_ = vala_data_type_get_data_type (_tmp271_);
+							_tmp273_ = _tmp272_;
+							_tmp274_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp273_) ? ((ValaStruct*) _tmp273_) : NULL);
+							st = _tmp274_;
+							_tmp276_ = st;
+							if (_tmp276_ != NULL) {
+								ValaArrayType* _tmp277_;
+								ValaDataType* _tmp278_;
+								ValaDataType* _tmp279_;
+								gboolean _tmp280_;
+								gboolean _tmp281_;
+								_tmp277_ = array_type;
+								_tmp278_ = vala_array_type_get_element_type (_tmp277_);
+								_tmp279_ = _tmp278_;
+								_tmp280_ = vala_data_type_get_nullable (_tmp279_);
+								_tmp281_ = _tmp280_;
+								_tmp275_ = !_tmp281_;
 							} else {
-								_tmp272_ = FALSE;
+								_tmp275_ = FALSE;
 							}
-							_tmp279_ = _tmp272_;
-							if (_tmp279_) {
-								ValaCCodeFunctionCall* _tmp280_;
-								ValaStruct* _tmp281_;
-								gchar* _tmp282_ = NULL;
-								gchar* _tmp283_;
-								ValaCCodeIdentifier* _tmp284_;
-								ValaCCodeIdentifier* _tmp285_;
-								ValaCCodeFunctionCall* _tmp286_;
-								ValaCCodeExpression* _tmp287_;
-								_tmp280_ = ccall;
-								_tmp281_ = st;
-								_tmp282_ = vala_ccode_base_module_append_struct_array_free (self, _tmp281_);
-								_tmp283_ = _tmp282_;
-								_tmp284_ = vala_ccode_identifier_new (_tmp283_);
-								_tmp285_ = _tmp284_;
-								vala_ccode_function_call_set_call (_tmp280_, (ValaCCodeExpression*) _tmp285_);
-								_vala_ccode_node_unref0 (_tmp285_);
-								_g_free0 (_tmp283_);
-								_tmp286_ = ccall;
-								_tmp287_ = csizeexpr;
-								vala_ccode_function_call_add_argument (_tmp286_, _tmp287_);
+							_tmp282_ = _tmp275_;
+							if (_tmp282_) {
+								ValaCCodeFunctionCall* _tmp283_;
+								ValaStruct* _tmp284_;
+								gchar* _tmp285_ = NULL;
+								gchar* _tmp286_;
+								ValaCCodeIdentifier* _tmp287_;
+								ValaCCodeIdentifier* _tmp288_;
+								ValaCCodeFunctionCall* _tmp289_;
+								ValaCCodeExpression* _tmp290_;
+								_tmp283_ = ccall;
+								_tmp284_ = st;
+								_tmp285_ = vala_ccode_base_module_append_struct_array_free (self, _tmp284_);
+								_tmp286_ = _tmp285_;
+								_tmp287_ = vala_ccode_identifier_new (_tmp286_);
+								_tmp288_ = _tmp287_;
+								vala_ccode_function_call_set_call (_tmp283_, (ValaCCodeExpression*) _tmp288_);
+								_vala_ccode_node_unref0 (_tmp288_);
+								_g_free0 (_tmp286_);
+								_tmp289_ = ccall;
+								_tmp290_ = csizeexpr;
+								vala_ccode_function_call_add_argument (_tmp289_, _tmp290_);
 							} else {
-								ValaCCodeFunctionCall* _tmp288_;
-								ValaCCodeIdentifier* _tmp289_;
-								ValaCCodeIdentifier* _tmp290_;
 								ValaCCodeFunctionCall* _tmp291_;
-								ValaCCodeExpression* _tmp292_;
-								ValaCCodeFunctionCall* _tmp293_;
-								ValaArrayType* _tmp294_;
-								ValaDataType* _tmp295_;
-								ValaDataType* _tmp296_;
-								ValaCCodeExpression* _tmp297_ = NULL;
-								ValaCCodeExpression* _tmp298_;
-								ValaCCodeCastExpression* _tmp299_;
-								ValaCCodeCastExpression* _tmp300_;
+								ValaCCodeIdentifier* _tmp292_;
+								ValaCCodeIdentifier* _tmp293_;
+								ValaCCodeFunctionCall* _tmp294_;
+								ValaCCodeExpression* _tmp295_;
+								ValaCCodeFunctionCall* _tmp296_;
+								ValaArrayType* _tmp297_;
+								ValaDataType* _tmp298_;
+								ValaDataType* _tmp299_;
+								ValaCCodeExpression* _tmp300_ = NULL;
+								ValaCCodeExpression* _tmp301_;
+								ValaCCodeCastExpression* _tmp302_;
+								ValaCCodeCastExpression* _tmp303_;
 								self->requires_array_free = TRUE;
-								_tmp288_ = ccall;
-								_tmp289_ = vala_ccode_identifier_new ("_vala_array_free");
-								_tmp290_ = _tmp289_;
-								vala_ccode_function_call_set_call (_tmp288_, (ValaCCodeExpression*) _tmp290_);
-								_vala_ccode_node_unref0 (_tmp290_);
 								_tmp291_ = ccall;
-								_tmp292_ = csizeexpr;
-								vala_ccode_function_call_add_argument (_tmp291_, _tmp292_);
-								_tmp293_ = ccall;
-								_tmp294_ = array_type;
-								_tmp295_ = vala_array_type_get_element_type (_tmp294_);
-								_tmp296_ = _tmp295_;
-								_tmp297_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp296_, FALSE);
-								_tmp298_ = _tmp297_;
-								_tmp299_ = vala_ccode_cast_expression_new (_tmp298_, "GDestroyNotify");
-								_tmp300_ = _tmp299_;
-								vala_ccode_function_call_add_argument (_tmp293_, (ValaCCodeExpression*) _tmp300_);
-								_vala_ccode_node_unref0 (_tmp300_);
-								_vala_ccode_node_unref0 (_tmp298_);
+								_tmp292_ = vala_ccode_identifier_new ("_vala_array_free");
+								_tmp293_ = _tmp292_;
+								vala_ccode_function_call_set_call (_tmp291_, (ValaCCodeExpression*) _tmp293_);
+								_vala_ccode_node_unref0 (_tmp293_);
+								_tmp294_ = ccall;
+								_tmp295_ = csizeexpr;
+								vala_ccode_function_call_add_argument (_tmp294_, _tmp295_);
+								_tmp296_ = ccall;
+								_tmp297_ = array_type;
+								_tmp298_ = vala_array_type_get_element_type (_tmp297_);
+								_tmp299_ = _tmp298_;
+								_tmp300_ = vala_ccode_base_module_get_destroy_func_expression (self, _tmp299_, FALSE);
+								_tmp301_ = _tmp300_;
+								_tmp302_ = vala_ccode_cast_expression_new (_tmp301_, "GDestroyNotify");
+								_tmp303_ = _tmp302_;
+								vala_ccode_function_call_add_argument (_tmp296_, (ValaCCodeExpression*) _tmp303_);
+								_vala_ccode_node_unref0 (_tmp303_);
+								_vala_ccode_node_unref0 (_tmp301_);
 							}
 							_vala_code_node_unref0 (st);
 						}
@@ -18761,65 +19179,65 @@ static ValaCCodeExpression* vala_ccode_base_module_real_destroy_value (ValaCCode
 			}
 		}
 	}
-	_tmp301_ = ccomma;
-	_tmp302_ = ccall;
-	vala_ccode_comma_expression_append_expression (_tmp301_, (ValaCCodeExpression*) _tmp302_);
-	_tmp303_ = ccomma;
-	_tmp304_ = vala_ccode_constant_new ("NULL");
-	_tmp305_ = _tmp304_;
-	vala_ccode_comma_expression_append_expression (_tmp303_, (ValaCCodeExpression*) _tmp305_);
-	_vala_ccode_node_unref0 (_tmp305_);
-	_tmp306_ = cvar;
-	_tmp307_ = ccomma;
-	_tmp308_ = vala_ccode_assignment_new (_tmp306_, (ValaCCodeExpression*) _tmp307_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
-	cassign = _tmp308_;
-	_tmp311_ = type;
-	_tmp312_ = vala_data_type_get_data_type (_tmp311_);
-	_tmp313_ = _tmp312_;
-	if (_tmp313_ != NULL) {
-		ValaDataType* _tmp314_;
-		ValaTypeSymbol* _tmp315_;
-		ValaTypeSymbol* _tmp316_;
-		gboolean _tmp317_ = FALSE;
-		_tmp314_ = type;
-		_tmp315_ = vala_data_type_get_data_type (_tmp314_);
-		_tmp316_ = _tmp315_;
-		_tmp317_ = vala_ccode_base_module_is_reference_counting (_tmp316_);
-		_tmp310_ = !_tmp317_;
+	_tmp304_ = ccomma;
+	_tmp305_ = ccall;
+	vala_ccode_comma_expression_append_expression (_tmp304_, (ValaCCodeExpression*) _tmp305_);
+	_tmp306_ = ccomma;
+	_tmp307_ = vala_ccode_constant_new ("NULL");
+	_tmp308_ = _tmp307_;
+	vala_ccode_comma_expression_append_expression (_tmp306_, (ValaCCodeExpression*) _tmp308_);
+	_vala_ccode_node_unref0 (_tmp308_);
+	_tmp309_ = cvar;
+	_tmp310_ = ccomma;
+	_tmp311_ = vala_ccode_assignment_new (_tmp309_, (ValaCCodeExpression*) _tmp310_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
+	cassign = _tmp311_;
+	_tmp314_ = type;
+	_tmp315_ = vala_data_type_get_data_type (_tmp314_);
+	_tmp316_ = _tmp315_;
+	if (_tmp316_ != NULL) {
+		ValaDataType* _tmp317_;
+		ValaTypeSymbol* _tmp318_;
+		ValaTypeSymbol* _tmp319_;
+		gboolean _tmp320_ = FALSE;
+		_tmp317_ = type;
+		_tmp318_ = vala_data_type_get_data_type (_tmp317_);
+		_tmp319_ = _tmp318_;
+		_tmp320_ = vala_ccode_base_module_is_reference_counting (_tmp319_);
+		_tmp313_ = !_tmp320_;
 	} else {
-		_tmp310_ = FALSE;
-	}
-	_tmp318_ = _tmp310_;
-	if (_tmp318_) {
-		ValaDataType* _tmp319_;
-		ValaTypeSymbol* _tmp320_;
-		ValaTypeSymbol* _tmp321_;
-		gchar* _tmp322_ = NULL;
-		gchar* _tmp323_;
-		_tmp319_ = type;
-		_tmp320_ = vala_data_type_get_data_type (_tmp319_);
-		_tmp321_ = _tmp320_;
-		_tmp322_ = vala_ccode_base_module_get_ccode_free_function (_tmp321_);
-		_tmp323_ = _tmp322_;
-		_tmp309_ = g_strcmp0 (_tmp323_, "g_free") == 0;
-		_g_free0 (_tmp323_);
+		_tmp313_ = FALSE;
+	}
+	_tmp321_ = _tmp313_;
+	if (_tmp321_) {
+		ValaDataType* _tmp322_;
+		ValaTypeSymbol* _tmp323_;
+		ValaTypeSymbol* _tmp324_;
+		gchar* _tmp325_ = NULL;
+		gchar* _tmp326_;
+		_tmp322_ = type;
+		_tmp323_ = vala_data_type_get_data_type (_tmp322_);
+		_tmp324_ = _tmp323_;
+		_tmp325_ = vala_ccode_base_module_get_ccode_free_function (_tmp324_);
+		_tmp326_ = _tmp325_;
+		_tmp312_ = g_strcmp0 (_tmp326_, "g_free") == 0;
+		_g_free0 (_tmp326_);
 	} else {
-		_tmp309_ = FALSE;
+		_tmp312_ = FALSE;
 	}
-	_tmp324_ = _tmp309_;
-	uses_gfree = _tmp324_;
-	_tmp326_ = uses_gfree;
-	if (_tmp326_) {
-		_tmp325_ = TRUE;
-	} else {
-		ValaDataType* _tmp327_;
-		_tmp327_ = type;
-		_tmp325_ = VALA_IS_ARRAY_TYPE (_tmp327_);
-	}
-	_tmp328_ = _tmp325_;
-	uses_gfree = _tmp328_;
+	_tmp327_ = _tmp312_;
+	uses_gfree = _tmp327_;
 	_tmp329_ = uses_gfree;
 	if (_tmp329_) {
+		_tmp328_ = TRUE;
+	} else {
+		ValaDataType* _tmp330_;
+		_tmp330_ = type;
+		_tmp328_ = VALA_IS_ARRAY_TYPE (_tmp330_);
+	}
+	_tmp331_ = _tmp328_;
+	uses_gfree = _tmp331_;
+	_tmp332_ = uses_gfree;
+	if (_tmp332_) {
 		result = (ValaCCodeExpression*) cassign;
 		_vala_ccode_node_unref0 (ccomma);
 		_vala_ccode_node_unref0 (cisnull);
@@ -18828,14 +19246,14 @@ static ValaCCodeExpression* vala_ccode_base_module_real_destroy_value (ValaCCode
 		_vala_code_node_unref0 (type);
 		return result;
 	}
-	_tmp330_ = cisnull;
-	_tmp331_ = vala_ccode_constant_new ("NULL");
-	_tmp332_ = _tmp331_;
-	_tmp333_ = cassign;
-	_tmp334_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp330_, (ValaCCodeExpression*) _tmp332_, (ValaCCodeExpression*) _tmp333_);
-	_tmp335_ = (ValaCCodeExpression*) _tmp334_;
-	_vala_ccode_node_unref0 (_tmp332_);
-	result = _tmp335_;
+	_tmp333_ = cisnull;
+	_tmp334_ = vala_ccode_constant_new ("NULL");
+	_tmp335_ = _tmp334_;
+	_tmp336_ = cassign;
+	_tmp337_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp333_, (ValaCCodeExpression*) _tmp335_, (ValaCCodeExpression*) _tmp336_);
+	_tmp338_ = (ValaCCodeExpression*) _tmp337_;
+	_vala_ccode_node_unref0 (_tmp335_);
+	result = _tmp338_;
 	_vala_ccode_node_unref0 (cassign);
 	_vala_ccode_node_unref0 (ccomma);
 	_vala_ccode_node_unref0 (cisnull);
@@ -18865,9 +19283,9 @@ static void vala_ccode_base_module_real_visit_end_full_expression (ValaCodeVisit
 	ValaLocalVariable* local_decl;
 	gboolean _tmp8_ = FALSE;
 	ValaLocalVariable* _tmp9_;
-	gboolean _tmp12_;
-	ValaArrayList* _tmp37_;
-	ValaArrayList* _tmp38_;
+	gboolean _tmp15_;
+	ValaArrayList* _tmp40_;
+	ValaArrayList* _tmp41_;
 	self = (ValaCCodeBaseModule*) base;
 	g_return_if_fail (expr != NULL);
 	_tmp0_ = vala_ccode_base_module_get_temp_ref_values (self);
@@ -18885,89 +19303,95 @@ static void vala_ccode_base_module_real_visit_end_full_expression (ValaCodeVisit
 	_tmp9_ = local_decl;
 	if (_tmp9_ != NULL) {
 		ValaLocalVariable* _tmp10_;
-		gboolean _tmp11_ = FALSE;
+		ValaLocalVariable* _tmp11_;
+		ValaExpression* _tmp12_;
+		ValaExpression* _tmp13_;
+		gboolean _tmp14_ = FALSE;
 		_tmp10_ = local_decl;
-		_tmp11_ = vala_ccode_base_module_has_simple_struct_initializer (self, _tmp10_);
-		_tmp8_ = _tmp11_;
+		_tmp11_ = local_decl;
+		_tmp12_ = vala_variable_get_initializer ((ValaVariable*) _tmp11_);
+		_tmp13_ = _tmp12_;
+		_tmp14_ = vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) _tmp10_, _tmp13_);
+		_tmp8_ = _tmp14_;
 	} else {
 		_tmp8_ = FALSE;
 	}
-	_tmp12_ = _tmp8_;
-	if (!_tmp12_) {
-		ValaExpression* _tmp13_;
-		ValaExpression* _tmp14_;
-		ValaTargetValue* _tmp15_;
-		ValaTargetValue* _tmp16_;
+	_tmp15_ = _tmp8_;
+	if (!_tmp15_) {
+		ValaExpression* _tmp16_;
 		ValaExpression* _tmp17_;
-		ValaTargetValue* _tmp18_ = NULL;
+		ValaTargetValue* _tmp18_;
 		ValaTargetValue* _tmp19_;
-		_tmp13_ = expr;
-		_tmp14_ = expr;
-		_tmp15_ = vala_expression_get_target_value (_tmp14_);
-		_tmp16_ = _tmp15_;
+		ValaExpression* _tmp20_;
+		ValaTargetValue* _tmp21_ = NULL;
+		ValaTargetValue* _tmp22_;
+		_tmp16_ = expr;
 		_tmp17_ = expr;
-		_tmp18_ = vala_ccode_base_module_store_temp_value (self, _tmp16_, (ValaCodeNode*) _tmp17_, NULL);
+		_tmp18_ = vala_expression_get_target_value (_tmp17_);
 		_tmp19_ = _tmp18_;
-		vala_expression_set_target_value (_tmp13_, _tmp19_);
-		_vala_target_value_unref0 (_tmp19_);
+		_tmp20_ = expr;
+		_tmp21_ = vala_ccode_base_module_store_temp_value (self, _tmp19_, (ValaCodeNode*) _tmp20_, NULL);
+		_tmp22_ = _tmp21_;
+		vala_expression_set_target_value (_tmp16_, _tmp22_);
+		_vala_target_value_unref0 (_tmp22_);
 	}
 	{
-		ValaArrayList* _tmp20_;
-		ValaArrayList* _tmp21_;
-		ValaArrayList* _tmp22_;
-		ValaArrayList* _value_list;
 		ValaArrayList* _tmp23_;
-		gint _tmp24_;
-		gint _tmp25_;
+		ValaArrayList* _tmp24_;
+		ValaArrayList* _tmp25_;
+		ValaArrayList* _value_list;
+		ValaArrayList* _tmp26_;
+		gint _tmp27_;
+		gint _tmp28_;
 		gint _value_size;
 		gint _value_index;
-		_tmp20_ = vala_ccode_base_module_get_temp_ref_values (self);
-		_tmp21_ = _tmp20_;
-		_tmp22_ = _vala_iterable_ref0 (_tmp21_);
-		_value_list = _tmp22_;
-		_tmp23_ = _value_list;
-		_tmp24_ = vala_collection_get_size ((ValaCollection*) _tmp23_);
-		_tmp25_ = _tmp24_;
-		_value_size = _tmp25_;
+		_tmp23_ = vala_ccode_base_module_get_temp_ref_values (self);
+		_tmp24_ = _tmp23_;
+		_tmp25_ = _vala_iterable_ref0 (_tmp24_);
+		_value_list = _tmp25_;
+		_tmp26_ = _value_list;
+		_tmp27_ = vala_collection_get_size ((ValaCollection*) _tmp26_);
+		_tmp28_ = _tmp27_;
+		_value_size = _tmp28_;
 		_value_index = -1;
 		while (TRUE) {
-			gint _tmp26_;
-			gint _tmp27_;
-			gint _tmp28_;
-			ValaArrayList* _tmp29_;
+			gint _tmp29_;
 			gint _tmp30_;
-			gpointer _tmp31_ = NULL;
+			gint _tmp31_;
+			ValaArrayList* _tmp32_;
+			gint _tmp33_;
+			gpointer _tmp34_ = NULL;
 			ValaTargetValue* value;
-			ValaCCodeFunction* _tmp32_;
-			ValaCCodeFunction* _tmp33_;
-			ValaTargetValue* _tmp34_;
-			ValaCCodeExpression* _tmp35_ = NULL;
-			ValaCCodeExpression* _tmp36_;
-			_tmp26_ = _value_index;
-			_value_index = _tmp26_ + 1;
-			_tmp27_ = _value_index;
-			_tmp28_ = _value_size;
-			if (!(_tmp27_ < _tmp28_)) {
+			ValaCCodeFunction* _tmp35_;
+			ValaCCodeFunction* _tmp36_;
+			ValaTargetValue* _tmp37_;
+			ValaCCodeExpression* _tmp38_ = NULL;
+			ValaCCodeExpression* _tmp39_;
+			_tmp29_ = _value_index;
+			_value_index = _tmp29_ + 1;
+			_tmp30_ = _value_index;
+			_tmp31_ = _value_size;
+			if (!(_tmp30_ < _tmp31_)) {
 				break;
 			}
-			_tmp29_ = _value_list;
-			_tmp30_ = _value_index;
-			_tmp31_ = vala_list_get ((ValaList*) _tmp29_, _tmp30_);
-			value = (ValaTargetValue*) _tmp31_;
-			_tmp32_ = vala_ccode_base_module_get_ccode (self);
-			_tmp33_ = _tmp32_;
-			_tmp34_ = value;
-			_tmp35_ = vala_ccode_base_module_destroy_value (self, _tmp34_, FALSE);
+			_tmp32_ = _value_list;
+			_tmp33_ = _value_index;
+			_tmp34_ = vala_list_get ((ValaList*) _tmp32_, _tmp33_);
+			value = (ValaTargetValue*) _tmp34_;
+			_tmp35_ = vala_ccode_base_module_get_ccode (self);
 			_tmp36_ = _tmp35_;
-			vala_ccode_function_add_expression (_tmp33_, _tmp36_);
-			_vala_ccode_node_unref0 (_tmp36_);
+			_tmp37_ = value;
+			_tmp38_ = vala_ccode_base_module_destroy_value (self, _tmp37_, FALSE);
+			_tmp39_ = _tmp38_;
+			vala_ccode_function_add_expression (_tmp36_, _tmp39_);
+			_vala_ccode_node_unref0 (_tmp39_);
 			_vala_target_value_unref0 (value);
 		}
 		_vala_iterable_unref0 (_value_list);
 	}
-	_tmp37_ = vala_ccode_base_module_get_temp_ref_values (self);
-	_tmp38_ = _tmp37_;
-	vala_collection_clear ((ValaCollection*) _tmp38_);
+	_tmp40_ = vala_ccode_base_module_get_temp_ref_values (self);
+	_tmp41_ = _tmp40_;
+	vala_collection_clear ((ValaCollection*) _tmp41_);
 	_vala_code_node_unref0 (local_decl);
 }
 
@@ -20003,25 +20427,25 @@ void vala_ccode_base_module_return_out_parameter (ValaCCodeBaseModule* self, Val
 	gboolean _tmp28_ = FALSE;
 	ValaDelegateType* _tmp29_;
 	gboolean _tmp35_;
-	ValaParameter* _tmp69_;
-	ValaDataType* _tmp70_;
-	ValaDataType* _tmp71_;
-	gboolean _tmp72_ = FALSE;
-	ValaCCodeFunction* _tmp85_;
-	ValaCCodeFunction* _tmp86_;
-	ValaParameter* _tmp87_;
-	ValaDataType* _tmp88_;
-	ValaDataType* _tmp89_;
-	ValaArrayType* _tmp90_;
+	ValaParameter* _tmp67_;
+	ValaDataType* _tmp68_;
+	ValaDataType* _tmp69_;
+	gboolean _tmp70_ = FALSE;
+	ValaCCodeFunction* _tmp83_;
+	ValaCCodeFunction* _tmp84_;
+	ValaParameter* _tmp85_;
+	ValaDataType* _tmp86_;
+	ValaDataType* _tmp87_;
+	ValaArrayType* _tmp88_;
 	ValaArrayType* array_type;
-	gboolean _tmp91_ = FALSE;
-	gboolean _tmp92_ = FALSE;
-	ValaArrayType* _tmp93_;
-	gboolean _tmp97_;
-	gboolean _tmp100_;
-	ValaMethod* _tmp132_;
-	ValaMethod* _tmp133_;
-	gboolean _tmp134_;
+	gboolean _tmp89_ = FALSE;
+	gboolean _tmp90_ = FALSE;
+	ValaArrayType* _tmp91_;
+	gboolean _tmp95_;
+	gboolean _tmp98_;
+	ValaMethod* _tmp130_;
+	ValaMethod* _tmp131_;
+	gboolean _tmp132_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (param != NULL);
 	_tmp0_ = param;
@@ -20083,241 +20507,237 @@ void vala_ccode_base_module_return_out_parameter (ValaCCodeBaseModule* self, Val
 		ValaCCodeFunction* _tmp36_;
 		ValaCCodeFunction* _tmp37_;
 		ValaParameter* _tmp38_;
-		const gchar* _tmp39_;
-		const gchar* _tmp40_;
-		gchar* _tmp41_ = NULL;
-		gchar* _tmp42_;
-		ValaCCodeExpression* _tmp43_ = NULL;
-		ValaCCodeExpression* _tmp44_;
-		ValaCCodeUnaryExpression* _tmp45_;
-		ValaCCodeUnaryExpression* _tmp46_;
-		ValaTargetValue* _tmp47_;
-		ValaCCodeExpression* _tmp48_ = NULL;
-		ValaCCodeExpression* _tmp49_;
-		ValaDelegateType* _tmp50_;
-		gboolean _tmp51_;
-		gboolean _tmp52_;
+		gchar* _tmp39_ = NULL;
+		gchar* _tmp40_;
+		ValaCCodeExpression* _tmp41_ = NULL;
+		ValaCCodeExpression* _tmp42_;
+		ValaCCodeUnaryExpression* _tmp43_;
+		ValaCCodeUnaryExpression* _tmp44_;
+		ValaTargetValue* _tmp45_;
+		ValaCCodeExpression* _tmp46_ = NULL;
+		ValaCCodeExpression* _tmp47_;
+		ValaDelegateType* _tmp48_;
+		gboolean _tmp49_;
+		gboolean _tmp50_;
 		_tmp36_ = vala_ccode_base_module_get_ccode (self);
 		_tmp37_ = _tmp36_;
 		_tmp38_ = param;
-		_tmp39_ = vala_symbol_get_name ((ValaSymbol*) _tmp38_);
+		_tmp39_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp38_);
 		_tmp40_ = _tmp39_;
-		_tmp41_ = vala_ccode_base_module_get_delegate_target_cname (self, _tmp40_);
+		_tmp41_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp40_);
 		_tmp42_ = _tmp41_;
-		_tmp43_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp42_);
+		_tmp43_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp42_);
 		_tmp44_ = _tmp43_;
-		_tmp45_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp44_);
-		_tmp46_ = _tmp45_;
-		_tmp47_ = value;
-		_tmp48_ = vala_ccode_base_module_get_delegate_target_cvalue (self, _tmp47_);
-		_tmp49_ = _tmp48_;
-		vala_ccode_function_add_assignment (_tmp37_, (ValaCCodeExpression*) _tmp46_, _tmp49_);
-		_vala_ccode_node_unref0 (_tmp49_);
-		_vala_ccode_node_unref0 (_tmp46_);
+		_tmp45_ = value;
+		_tmp46_ = vala_ccode_base_module_get_delegate_target_cvalue (self, _tmp45_);
+		_tmp47_ = _tmp46_;
+		vala_ccode_function_add_assignment (_tmp37_, (ValaCCodeExpression*) _tmp44_, _tmp47_);
+		_vala_ccode_node_unref0 (_tmp47_);
 		_vala_ccode_node_unref0 (_tmp44_);
-		_g_free0 (_tmp42_);
-		_tmp50_ = delegate_type;
-		_tmp51_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp50_);
-		_tmp52_ = _tmp51_;
-		if (_tmp52_) {
-			ValaCCodeFunction* _tmp53_;
-			ValaCCodeFunction* _tmp54_;
-			ValaParameter* _tmp55_;
-			const gchar* _tmp56_;
-			const gchar* _tmp57_;
-			gchar* _tmp58_ = NULL;
-			gchar* _tmp59_;
-			ValaCCodeExpression* _tmp60_ = NULL;
-			ValaCCodeExpression* _tmp61_;
-			ValaCCodeUnaryExpression* _tmp62_;
-			ValaCCodeUnaryExpression* _tmp63_;
-			ValaParameter* _tmp64_;
-			ValaTargetValue* _tmp65_ = NULL;
-			ValaTargetValue* _tmp66_;
-			ValaCCodeExpression* _tmp67_ = NULL;
-			ValaCCodeExpression* _tmp68_;
-			_tmp53_ = vala_ccode_base_module_get_ccode (self);
-			_tmp54_ = _tmp53_;
-			_tmp55_ = param;
-			_tmp56_ = vala_symbol_get_name ((ValaSymbol*) _tmp55_);
+		_vala_ccode_node_unref0 (_tmp42_);
+		_g_free0 (_tmp40_);
+		_tmp48_ = delegate_type;
+		_tmp49_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp48_);
+		_tmp50_ = _tmp49_;
+		if (_tmp50_) {
+			ValaCCodeFunction* _tmp51_;
+			ValaCCodeFunction* _tmp52_;
+			ValaParameter* _tmp53_;
+			const gchar* _tmp54_;
+			const gchar* _tmp55_;
+			gchar* _tmp56_ = NULL;
+			gchar* _tmp57_;
+			ValaCCodeExpression* _tmp58_ = NULL;
+			ValaCCodeExpression* _tmp59_;
+			ValaCCodeUnaryExpression* _tmp60_;
+			ValaCCodeUnaryExpression* _tmp61_;
+			ValaParameter* _tmp62_;
+			ValaTargetValue* _tmp63_ = NULL;
+			ValaTargetValue* _tmp64_;
+			ValaCCodeExpression* _tmp65_ = NULL;
+			ValaCCodeExpression* _tmp66_;
+			_tmp51_ = vala_ccode_base_module_get_ccode (self);
+			_tmp52_ = _tmp51_;
+			_tmp53_ = param;
+			_tmp54_ = vala_symbol_get_name ((ValaSymbol*) _tmp53_);
+			_tmp55_ = _tmp54_;
+			_tmp56_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp55_);
 			_tmp57_ = _tmp56_;
-			_tmp58_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp57_);
+			_tmp58_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp57_);
 			_tmp59_ = _tmp58_;
-			_tmp60_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp59_);
+			_tmp60_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp59_);
 			_tmp61_ = _tmp60_;
-			_tmp62_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp61_);
-			_tmp63_ = _tmp62_;
-			_tmp64_ = param;
-			_tmp65_ = vala_ccode_base_module_get_parameter_cvalue (self, _tmp64_);
+			_tmp62_ = param;
+			_tmp63_ = vala_ccode_base_module_get_parameter_cvalue (self, _tmp62_);
+			_tmp64_ = _tmp63_;
+			_tmp65_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp64_);
 			_tmp66_ = _tmp65_;
-			_tmp67_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp66_);
-			_tmp68_ = _tmp67_;
-			vala_ccode_function_add_assignment (_tmp54_, (ValaCCodeExpression*) _tmp63_, _tmp68_);
-			_vala_ccode_node_unref0 (_tmp68_);
-			_vala_target_value_unref0 (_tmp66_);
-			_vala_ccode_node_unref0 (_tmp63_);
+			vala_ccode_function_add_assignment (_tmp52_, (ValaCCodeExpression*) _tmp61_, _tmp66_);
+			_vala_ccode_node_unref0 (_tmp66_);
+			_vala_target_value_unref0 (_tmp64_);
 			_vala_ccode_node_unref0 (_tmp61_);
-			_g_free0 (_tmp59_);
+			_vala_ccode_node_unref0 (_tmp59_);
+			_g_free0 (_tmp57_);
 		}
 	}
-	_tmp69_ = param;
-	_tmp70_ = vala_variable_get_variable_type ((ValaVariable*) _tmp69_);
-	_tmp71_ = _tmp70_;
-	_tmp72_ = vala_data_type_is_disposable (_tmp71_);
-	if (_tmp72_) {
-		ValaCCodeFunction* _tmp73_;
-		ValaCCodeFunction* _tmp74_;
-		ValaMethod* _tmp75_;
-		ValaMethod* _tmp76_;
-		gboolean _tmp77_;
-		ValaCCodeFunction* _tmp78_;
-		ValaCCodeFunction* _tmp79_;
-		ValaParameter* _tmp80_;
-		ValaCCodeExpression* _tmp81_ = NULL;
-		ValaCCodeExpression* _tmp82_;
-		ValaMethod* _tmp83_;
-		ValaMethod* _tmp84_;
-		_tmp73_ = vala_ccode_base_module_get_ccode (self);
+	_tmp67_ = param;
+	_tmp68_ = vala_variable_get_variable_type ((ValaVariable*) _tmp67_);
+	_tmp69_ = _tmp68_;
+	_tmp70_ = vala_data_type_is_disposable (_tmp69_);
+	if (_tmp70_) {
+		ValaCCodeFunction* _tmp71_;
+		ValaCCodeFunction* _tmp72_;
+		ValaMethod* _tmp73_;
+		ValaMethod* _tmp74_;
+		gboolean _tmp75_;
+		ValaCCodeFunction* _tmp76_;
+		ValaCCodeFunction* _tmp77_;
+		ValaParameter* _tmp78_;
+		ValaCCodeExpression* _tmp79_ = NULL;
+		ValaCCodeExpression* _tmp80_;
+		ValaMethod* _tmp81_;
+		ValaMethod* _tmp82_;
+		_tmp71_ = vala_ccode_base_module_get_ccode (self);
+		_tmp72_ = _tmp71_;
+		vala_ccode_function_add_else (_tmp72_);
+		_tmp73_ = vala_ccode_base_module_get_current_method (self);
 		_tmp74_ = _tmp73_;
-		vala_ccode_function_add_else (_tmp74_);
-		_tmp75_ = vala_ccode_base_module_get_current_method (self);
-		_tmp76_ = _tmp75_;
-		_tmp77_ = old_coroutine;
-		vala_method_set_coroutine (_tmp76_, _tmp77_);
-		_tmp78_ = vala_ccode_base_module_get_ccode (self);
-		_tmp79_ = _tmp78_;
-		_tmp80_ = param;
-		_tmp81_ = vala_ccode_base_module_destroy_parameter (self, _tmp80_);
+		_tmp75_ = old_coroutine;
+		vala_method_set_coroutine (_tmp74_, _tmp75_);
+		_tmp76_ = vala_ccode_base_module_get_ccode (self);
+		_tmp77_ = _tmp76_;
+		_tmp78_ = param;
+		_tmp79_ = vala_ccode_base_module_destroy_parameter (self, _tmp78_);
+		_tmp80_ = _tmp79_;
+		vala_ccode_function_add_expression (_tmp77_, _tmp80_);
+		_vala_ccode_node_unref0 (_tmp80_);
+		_tmp81_ = vala_ccode_base_module_get_current_method (self);
 		_tmp82_ = _tmp81_;
-		vala_ccode_function_add_expression (_tmp79_, _tmp82_);
-		_vala_ccode_node_unref0 (_tmp82_);
-		_tmp83_ = vala_ccode_base_module_get_current_method (self);
-		_tmp84_ = _tmp83_;
-		vala_method_set_coroutine (_tmp84_, FALSE);
-	}
-	_tmp85_ = vala_ccode_base_module_get_ccode (self);
-	_tmp86_ = _tmp85_;
-	vala_ccode_function_close (_tmp86_);
-	_tmp87_ = param;
-	_tmp88_ = vala_variable_get_variable_type ((ValaVariable*) _tmp87_);
-	_tmp89_ = _tmp88_;
-	_tmp90_ = _vala_code_node_ref0 (VALA_IS_ARRAY_TYPE (_tmp89_) ? ((ValaArrayType*) _tmp89_) : NULL);
-	array_type = _tmp90_;
-	_tmp93_ = array_type;
-	if (_tmp93_ != NULL) {
-		ValaArrayType* _tmp94_;
-		gboolean _tmp95_;
-		gboolean _tmp96_;
-		_tmp94_ = array_type;
-		_tmp95_ = vala_array_type_get_fixed_length (_tmp94_);
-		_tmp96_ = _tmp95_;
-		_tmp92_ = !_tmp96_;
+		vala_method_set_coroutine (_tmp82_, FALSE);
+	}
+	_tmp83_ = vala_ccode_base_module_get_ccode (self);
+	_tmp84_ = _tmp83_;
+	vala_ccode_function_close (_tmp84_);
+	_tmp85_ = param;
+	_tmp86_ = vala_variable_get_variable_type ((ValaVariable*) _tmp85_);
+	_tmp87_ = _tmp86_;
+	_tmp88_ = _vala_code_node_ref0 (VALA_IS_ARRAY_TYPE (_tmp87_) ? ((ValaArrayType*) _tmp87_) : NULL);
+	array_type = _tmp88_;
+	_tmp91_ = array_type;
+	if (_tmp91_ != NULL) {
+		ValaArrayType* _tmp92_;
+		gboolean _tmp93_;
+		gboolean _tmp94_;
+		_tmp92_ = array_type;
+		_tmp93_ = vala_array_type_get_fixed_length (_tmp92_);
+		_tmp94_ = _tmp93_;
+		_tmp90_ = !_tmp94_;
 	} else {
-		_tmp92_ = FALSE;
-	}
-	_tmp97_ = _tmp92_;
-	if (_tmp97_) {
-		ValaParameter* _tmp98_;
-		gboolean _tmp99_ = FALSE;
-		_tmp98_ = param;
-		_tmp99_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp98_);
-		_tmp91_ = _tmp99_;
+		_tmp90_ = FALSE;
+	}
+	_tmp95_ = _tmp90_;
+	if (_tmp95_) {
+		ValaParameter* _tmp96_;
+		gboolean _tmp97_ = FALSE;
+		_tmp96_ = param;
+		_tmp97_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp96_);
+		_tmp89_ = _tmp97_;
 	} else {
-		_tmp91_ = FALSE;
+		_tmp89_ = FALSE;
 	}
-	_tmp100_ = _tmp91_;
-	if (_tmp100_) {
+	_tmp98_ = _tmp89_;
+	if (_tmp98_) {
 		{
 			gint dim;
 			dim = 1;
 			{
-				gboolean _tmp101_;
-				_tmp101_ = TRUE;
+				gboolean _tmp99_;
+				_tmp99_ = TRUE;
 				while (TRUE) {
-					gboolean _tmp102_;
-					gint _tmp104_;
-					ValaArrayType* _tmp105_;
-					gint _tmp106_;
-					gint _tmp107_;
-					ValaCCodeFunction* _tmp108_;
-					ValaCCodeFunction* _tmp109_;
-					ValaParameter* _tmp110_;
-					gint _tmp111_;
-					gchar* _tmp112_ = NULL;
-					gchar* _tmp113_;
-					ValaCCodeExpression* _tmp114_ = NULL;
-					ValaCCodeExpression* _tmp115_;
-					ValaCCodeFunction* _tmp116_;
-					ValaCCodeFunction* _tmp117_;
-					ValaParameter* _tmp118_;
-					gint _tmp119_;
-					gchar* _tmp120_ = NULL;
-					gchar* _tmp121_;
-					ValaCCodeExpression* _tmp122_ = NULL;
-					ValaCCodeExpression* _tmp123_;
-					ValaCCodeUnaryExpression* _tmp124_;
-					ValaCCodeUnaryExpression* _tmp125_;
-					ValaTargetValue* _tmp126_;
-					gint _tmp127_;
-					ValaCCodeExpression* _tmp128_ = NULL;
-					ValaCCodeExpression* _tmp129_;
-					ValaCCodeFunction* _tmp130_;
-					ValaCCodeFunction* _tmp131_;
-					_tmp102_ = _tmp101_;
-					if (!_tmp102_) {
-						gint _tmp103_;
-						_tmp103_ = dim;
-						dim = _tmp103_ + 1;
+					gboolean _tmp100_;
+					gint _tmp102_;
+					ValaArrayType* _tmp103_;
+					gint _tmp104_;
+					gint _tmp105_;
+					ValaCCodeFunction* _tmp106_;
+					ValaCCodeFunction* _tmp107_;
+					ValaParameter* _tmp108_;
+					gint _tmp109_;
+					gchar* _tmp110_ = NULL;
+					gchar* _tmp111_;
+					ValaCCodeExpression* _tmp112_ = NULL;
+					ValaCCodeExpression* _tmp113_;
+					ValaCCodeFunction* _tmp114_;
+					ValaCCodeFunction* _tmp115_;
+					ValaParameter* _tmp116_;
+					gint _tmp117_;
+					gchar* _tmp118_ = NULL;
+					gchar* _tmp119_;
+					ValaCCodeExpression* _tmp120_ = NULL;
+					ValaCCodeExpression* _tmp121_;
+					ValaCCodeUnaryExpression* _tmp122_;
+					ValaCCodeUnaryExpression* _tmp123_;
+					ValaTargetValue* _tmp124_;
+					gint _tmp125_;
+					ValaCCodeExpression* _tmp126_ = NULL;
+					ValaCCodeExpression* _tmp127_;
+					ValaCCodeFunction* _tmp128_;
+					ValaCCodeFunction* _tmp129_;
+					_tmp100_ = _tmp99_;
+					if (!_tmp100_) {
+						gint _tmp101_;
+						_tmp101_ = dim;
+						dim = _tmp101_ + 1;
 					}
-					_tmp101_ = FALSE;
-					_tmp104_ = dim;
-					_tmp105_ = array_type;
-					_tmp106_ = vala_array_type_get_rank (_tmp105_);
-					_tmp107_ = _tmp106_;
-					if (!(_tmp104_ <= _tmp107_)) {
+					_tmp99_ = FALSE;
+					_tmp102_ = dim;
+					_tmp103_ = array_type;
+					_tmp104_ = vala_array_type_get_rank (_tmp103_);
+					_tmp105_ = _tmp104_;
+					if (!(_tmp102_ <= _tmp105_)) {
 						break;
 					}
-					_tmp108_ = vala_ccode_base_module_get_ccode (self);
-					_tmp109_ = _tmp108_;
-					_tmp110_ = param;
-					_tmp111_ = dim;
-					_tmp112_ = vala_ccode_base_module_get_parameter_array_length_cname (self, _tmp110_, _tmp111_);
+					_tmp106_ = vala_ccode_base_module_get_ccode (self);
+					_tmp107_ = _tmp106_;
+					_tmp108_ = param;
+					_tmp109_ = dim;
+					_tmp110_ = vala_ccode_base_module_get_parameter_array_length_cname (self, _tmp108_, _tmp109_);
+					_tmp111_ = _tmp110_;
+					_tmp112_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp111_);
 					_tmp113_ = _tmp112_;
-					_tmp114_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp113_);
+					vala_ccode_function_open_if (_tmp107_, _tmp113_);
+					_vala_ccode_node_unref0 (_tmp113_);
+					_g_free0 (_tmp111_);
+					_tmp114_ = vala_ccode_base_module_get_ccode (self);
 					_tmp115_ = _tmp114_;
-					vala_ccode_function_open_if (_tmp109_, _tmp115_);
-					_vala_ccode_node_unref0 (_tmp115_);
-					_g_free0 (_tmp113_);
-					_tmp116_ = vala_ccode_base_module_get_ccode (self);
-					_tmp117_ = _tmp116_;
-					_tmp118_ = param;
-					_tmp119_ = dim;
-					_tmp120_ = vala_ccode_base_module_get_parameter_array_length_cname (self, _tmp118_, _tmp119_);
+					_tmp116_ = param;
+					_tmp117_ = dim;
+					_tmp118_ = vala_ccode_base_module_get_parameter_array_length_cname (self, _tmp116_, _tmp117_);
+					_tmp119_ = _tmp118_;
+					_tmp120_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp119_);
 					_tmp121_ = _tmp120_;
-					_tmp122_ = vala_ccode_base_module_get_variable_cexpression (self, _tmp121_);
+					_tmp122_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp121_);
 					_tmp123_ = _tmp122_;
-					_tmp124_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp123_);
-					_tmp125_ = _tmp124_;
-					_tmp126_ = value;
-					_tmp127_ = dim;
-					_tmp128_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp126_, _tmp127_);
-					_tmp129_ = _tmp128_;
-					vala_ccode_function_add_assignment (_tmp117_, (ValaCCodeExpression*) _tmp125_, _tmp129_);
-					_vala_ccode_node_unref0 (_tmp129_);
-					_vala_ccode_node_unref0 (_tmp125_);
+					_tmp124_ = value;
+					_tmp125_ = dim;
+					_tmp126_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp124_, _tmp125_);
+					_tmp127_ = _tmp126_;
+					vala_ccode_function_add_assignment (_tmp115_, (ValaCCodeExpression*) _tmp123_, _tmp127_);
+					_vala_ccode_node_unref0 (_tmp127_);
 					_vala_ccode_node_unref0 (_tmp123_);
-					_g_free0 (_tmp121_);
-					_tmp130_ = vala_ccode_base_module_get_ccode (self);
-					_tmp131_ = _tmp130_;
-					vala_ccode_function_close (_tmp131_);
+					_vala_ccode_node_unref0 (_tmp121_);
+					_g_free0 (_tmp119_);
+					_tmp128_ = vala_ccode_base_module_get_ccode (self);
+					_tmp129_ = _tmp128_;
+					vala_ccode_function_close (_tmp129_);
 				}
 			}
 		}
 	}
-	_tmp132_ = vala_ccode_base_module_get_current_method (self);
-	_tmp133_ = _tmp132_;
-	_tmp134_ = old_coroutine;
-	vala_method_set_coroutine (_tmp133_, _tmp134_);
+	_tmp130_ = vala_ccode_base_module_get_current_method (self);
+	_tmp131_ = _tmp130_;
+	_tmp132_ = old_coroutine;
+	vala_method_set_coroutine (_tmp131_, _tmp132_);
 	_vala_code_node_unref0 (array_type);
 	_vala_target_value_unref0 (value);
 	_vala_code_node_unref0 (delegate_type);
@@ -23561,6 +23981,39 @@ static gboolean vala_ccode_base_module_is_ref_sink_function_void (ValaCCodeBaseM
 }
 
 
+static gboolean vala_ccode_base_module_is_free_function_address_of (ValaCCodeBaseModule* self, ValaDataType* type) {
+	gboolean result = FALSE;
+	ValaDataType* _tmp0_;
+	ValaTypeSymbol* _tmp1_;
+	ValaTypeSymbol* _tmp2_;
+	ValaClass* _tmp3_;
+	ValaClass* cl;
+	ValaClass* _tmp4_;
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (type != NULL, FALSE);
+	_tmp0_ = type;
+	_tmp1_ = vala_data_type_get_data_type (_tmp0_);
+	_tmp2_ = _tmp1_;
+	_tmp3_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp2_) ? ((ValaClass*) _tmp2_) : NULL);
+	cl = _tmp3_;
+	_tmp4_ = cl;
+	if (_tmp4_ != NULL) {
+		ValaClass* _tmp5_;
+		gboolean _tmp6_ = FALSE;
+		_tmp5_ = cl;
+		_tmp6_ = vala_ccode_base_module_get_ccode_free_function_address_of (_tmp5_);
+		result = _tmp6_;
+		_vala_code_node_unref0 (cl);
+		return result;
+	} else {
+		result = FALSE;
+		_vala_code_node_unref0 (cl);
+		return result;
+	}
+	_vala_code_node_unref0 (cl);
+}
+
+
 static ValaTargetValue* vala_ccode_base_module_real_copy_value (ValaCCodeBaseModule* self, ValaTargetValue* value, ValaCodeNode* node) {
 	ValaTargetValue* result = NULL;
 	ValaTargetValue* _tmp0_;
@@ -25373,20 +25826,20 @@ static void vala_ccode_base_module_real_visit_object_creation_expression (ValaCo
 	ValaStruct* _tmp11_;
 	gboolean _tmp19_;
 	gboolean _tmp25_;
-	ValaObjectCreationExpression* _tmp46_;
-	ValaSymbol* _tmp47_;
-	ValaSymbol* _tmp48_;
-	ValaObjectCreationExpression* _tmp533_;
-	ValaCodeNode* _tmp534_;
-	ValaCodeNode* _tmp535_;
-	ValaLocalVariable* _tmp536_;
+	ValaObjectCreationExpression* _tmp132_;
+	ValaSymbol* _tmp133_;
+	ValaSymbol* _tmp134_;
+	ValaObjectCreationExpression* _tmp619_;
+	ValaCodeNode* _tmp620_;
+	ValaCodeNode* _tmp621_;
+	ValaLocalVariable* _tmp622_;
 	ValaLocalVariable* local;
-	gboolean _tmp537_ = FALSE;
-	ValaLocalVariable* _tmp538_;
-	gboolean _tmp541_;
-	ValaObjectCreationExpression* _tmp641_;
-	ValaTargetValue* _tmp642_;
-	ValaTargetValue* _tmp643_;
+	gboolean _tmp623_ = FALSE;
+	ValaLocalVariable* _tmp624_;
+	gboolean _tmp630_;
+	ValaObjectCreationExpression* _tmp730_;
+	ValaTargetValue* _tmp731_;
+	ValaTargetValue* _tmp732_;
 	self = (ValaCCodeBaseModule*) base;
 	g_return_if_fail (expr != NULL);
 	instance = NULL;
@@ -25451,602 +25904,824 @@ static void vala_ccode_base_module_real_visit_object_creation_expression (ValaCo
 		ValaCodeNode* _tmp28_;
 		ValaLocalVariable* _tmp29_;
 		ValaLocalVariable* local;
-		gboolean _tmp30_ = FALSE;
-		ValaLocalVariable* _tmp31_;
-		gboolean _tmp34_;
+		ValaObjectCreationExpression* _tmp30_;
+		ValaCodeNode* _tmp31_;
+		ValaCodeNode* _tmp32_;
+		ValaAssignment* _tmp33_;
+		ValaAssignment* a;
+		gboolean _tmp34_ = FALSE;
+		ValaLocalVariable* _tmp35_;
+		gboolean _tmp41_;
 		_tmp26_ = expr;
 		_tmp27_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp26_);
 		_tmp28_ = _tmp27_;
 		_tmp29_ = _vala_code_node_ref0 (VALA_IS_LOCAL_VARIABLE (_tmp28_) ? ((ValaLocalVariable*) _tmp28_) : NULL);
 		local = _tmp29_;
-		_tmp31_ = local;
-		if (_tmp31_ != NULL) {
-			ValaLocalVariable* _tmp32_;
-			gboolean _tmp33_ = FALSE;
-			_tmp32_ = local;
-			_tmp33_ = vala_ccode_base_module_has_simple_struct_initializer (self, _tmp32_);
-			_tmp30_ = _tmp33_;
+		_tmp30_ = expr;
+		_tmp31_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp30_);
+		_tmp32_ = _tmp31_;
+		_tmp33_ = _vala_code_node_ref0 (VALA_IS_ASSIGNMENT (_tmp32_) ? ((ValaAssignment*) _tmp32_) : NULL);
+		a = _tmp33_;
+		_tmp35_ = local;
+		if (_tmp35_ != NULL) {
+			ValaLocalVariable* _tmp36_;
+			ValaLocalVariable* _tmp37_;
+			ValaExpression* _tmp38_;
+			ValaExpression* _tmp39_;
+			gboolean _tmp40_ = FALSE;
+			_tmp36_ = local;
+			_tmp37_ = local;
+			_tmp38_ = vala_variable_get_initializer ((ValaVariable*) _tmp37_);
+			_tmp39_ = _tmp38_;
+			_tmp40_ = vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) _tmp36_, _tmp39_);
+			_tmp34_ = _tmp40_;
 		} else {
-			_tmp30_ = FALSE;
+			_tmp34_ = FALSE;
 		}
-		_tmp34_ = _tmp30_;
-		if (_tmp34_) {
-			ValaLocalVariable* _tmp35_;
-			ValaTargetValue* _tmp36_ = NULL;
-			ValaTargetValue* _tmp37_;
-			ValaCCodeExpression* _tmp38_ = NULL;
-			_tmp35_ = local;
-			_tmp36_ = vala_ccode_base_module_get_local_cvalue (self, _tmp35_);
-			_tmp37_ = _tmp36_;
-			_tmp38_ = vala_ccode_base_module_get_cvalue_ (self, _tmp37_);
-			_vala_ccode_node_unref0 (instance);
-			instance = _tmp38_;
-			_vala_target_value_unref0 (_tmp37_);
-		} else {
-			ValaObjectCreationExpression* _tmp39_;
-			ValaDataType* _tmp40_;
-			ValaDataType* _tmp41_;
-			ValaObjectCreationExpression* _tmp42_;
+		_tmp41_ = _tmp34_;
+		if (_tmp41_) {
+			ValaLocalVariable* _tmp42_;
 			ValaTargetValue* _tmp43_ = NULL;
-			ValaTargetValue* temp_value;
 			ValaTargetValue* _tmp44_;
 			ValaCCodeExpression* _tmp45_ = NULL;
-			_tmp39_ = expr;
-			_tmp40_ = vala_object_creation_expression_get_type_reference (_tmp39_);
-			_tmp41_ = _tmp40_;
-			_tmp42_ = expr;
-			_tmp43_ = vala_ccode_base_module_create_temp_value (self, _tmp41_, TRUE, (ValaCodeNode*) _tmp42_, NULL);
-			temp_value = _tmp43_;
-			_tmp44_ = temp_value;
+			_tmp42_ = local;
+			_tmp43_ = vala_ccode_base_module_get_local_cvalue (self, _tmp42_);
+			_tmp44_ = _tmp43_;
 			_tmp45_ = vala_ccode_base_module_get_cvalue_ (self, _tmp44_);
 			_vala_ccode_node_unref0 (instance);
 			instance = _tmp45_;
-			_vala_target_value_unref0 (temp_value);
+			_vala_target_value_unref0 (_tmp44_);
+		} else {
+			gboolean _tmp46_ = FALSE;
+			gboolean _tmp47_ = FALSE;
+			ValaAssignment* _tmp48_;
+			gboolean _tmp54_;
+			gboolean _tmp64_;
+			_tmp48_ = a;
+			if (_tmp48_ != NULL) {
+				ValaAssignment* _tmp49_;
+				ValaExpression* _tmp50_;
+				ValaExpression* _tmp51_;
+				ValaSymbol* _tmp52_;
+				ValaSymbol* _tmp53_;
+				_tmp49_ = a;
+				_tmp50_ = vala_assignment_get_left (_tmp49_);
+				_tmp51_ = _tmp50_;
+				_tmp52_ = vala_expression_get_symbol_reference (_tmp51_);
+				_tmp53_ = _tmp52_;
+				_tmp47_ = VALA_IS_VARIABLE (_tmp53_);
+			} else {
+				_tmp47_ = FALSE;
+			}
+			_tmp54_ = _tmp47_;
+			if (_tmp54_) {
+				ValaAssignment* _tmp55_;
+				ValaExpression* _tmp56_;
+				ValaExpression* _tmp57_;
+				ValaSymbol* _tmp58_;
+				ValaSymbol* _tmp59_;
+				ValaAssignment* _tmp60_;
+				ValaExpression* _tmp61_;
+				ValaExpression* _tmp62_;
+				gboolean _tmp63_ = FALSE;
+				_tmp55_ = a;
+				_tmp56_ = vala_assignment_get_left (_tmp55_);
+				_tmp57_ = _tmp56_;
+				_tmp58_ = vala_expression_get_symbol_reference (_tmp57_);
+				_tmp59_ = _tmp58_;
+				_tmp60_ = a;
+				_tmp61_ = vala_assignment_get_right (_tmp60_);
+				_tmp62_ = _tmp61_;
+				_tmp63_ = vala_ccode_base_module_is_simple_struct_creation (self, VALA_VARIABLE (_tmp59_), _tmp62_);
+				_tmp46_ = _tmp63_;
+			} else {
+				_tmp46_ = FALSE;
+			}
+			_tmp64_ = _tmp46_;
+			if (_tmp64_) {
+				ValaAssignment* _tmp65_;
+				ValaExpression* _tmp66_;
+				ValaExpression* _tmp67_;
+				ValaDataType* _tmp68_;
+				ValaDataType* _tmp69_;
+				gboolean _tmp70_ = FALSE;
+				ValaAssignment* _tmp80_;
+				ValaExpression* _tmp81_;
+				ValaExpression* _tmp82_;
+				ValaSymbol* _tmp83_;
+				ValaSymbol* _tmp84_;
+				ValaLocalVariable* _tmp85_;
+				ValaAssignment* _tmp86_;
+				ValaExpression* _tmp87_;
+				ValaExpression* _tmp88_;
+				ValaSymbol* _tmp89_;
+				ValaSymbol* _tmp90_;
+				ValaField* _tmp91_;
+				ValaField* field;
+				ValaAssignment* _tmp92_;
+				ValaExpression* _tmp93_;
+				ValaExpression* _tmp94_;
+				ValaSymbol* _tmp95_;
+				ValaSymbol* _tmp96_;
+				ValaParameter* _tmp97_;
+				ValaParameter* param;
+				ValaLocalVariable* _tmp98_;
+				_tmp65_ = a;
+				_tmp66_ = vala_assignment_get_left (_tmp65_);
+				_tmp67_ = _tmp66_;
+				_tmp68_ = vala_expression_get_value_type (_tmp67_);
+				_tmp69_ = _tmp68_;
+				_tmp70_ = vala_ccode_base_module_requires_destroy (self, _tmp69_);
+				if (_tmp70_) {
+					ValaCCodeFunction* _tmp71_;
+					ValaCCodeFunction* _tmp72_;
+					ValaAssignment* _tmp73_;
+					ValaExpression* _tmp74_;
+					ValaExpression* _tmp75_;
+					ValaTargetValue* _tmp76_;
+					ValaTargetValue* _tmp77_;
+					ValaCCodeExpression* _tmp78_ = NULL;
+					ValaCCodeExpression* _tmp79_;
+					_tmp71_ = vala_ccode_base_module_get_ccode (self);
+					_tmp72_ = _tmp71_;
+					_tmp73_ = a;
+					_tmp74_ = vala_assignment_get_left (_tmp73_);
+					_tmp75_ = _tmp74_;
+					_tmp76_ = vala_expression_get_target_value (_tmp75_);
+					_tmp77_ = _tmp76_;
+					_tmp78_ = vala_ccode_base_module_destroy_value (self, _tmp77_, FALSE);
+					_tmp79_ = _tmp78_;
+					vala_ccode_function_add_expression (_tmp72_, _tmp79_);
+					_vala_ccode_node_unref0 (_tmp79_);
+				}
+				_tmp80_ = a;
+				_tmp81_ = vala_assignment_get_left (_tmp80_);
+				_tmp82_ = _tmp81_;
+				_tmp83_ = vala_expression_get_symbol_reference (_tmp82_);
+				_tmp84_ = _tmp83_;
+				_tmp85_ = _vala_code_node_ref0 (VALA_IS_LOCAL_VARIABLE (_tmp84_) ? ((ValaLocalVariable*) _tmp84_) : NULL);
+				_vala_code_node_unref0 (local);
+				local = _tmp85_;
+				_tmp86_ = a;
+				_tmp87_ = vala_assignment_get_left (_tmp86_);
+				_tmp88_ = _tmp87_;
+				_tmp89_ = vala_expression_get_symbol_reference (_tmp88_);
+				_tmp90_ = _tmp89_;
+				_tmp91_ = _vala_code_node_ref0 (VALA_IS_FIELD (_tmp90_) ? ((ValaField*) _tmp90_) : NULL);
+				field = _tmp91_;
+				_tmp92_ = a;
+				_tmp93_ = vala_assignment_get_left (_tmp92_);
+				_tmp94_ = _tmp93_;
+				_tmp95_ = vala_expression_get_symbol_reference (_tmp94_);
+				_tmp96_ = _tmp95_;
+				_tmp97_ = _vala_code_node_ref0 (VALA_IS_PARAMETER (_tmp96_) ? ((ValaParameter*) _tmp96_) : NULL);
+				param = _tmp97_;
+				_tmp98_ = local;
+				if (_tmp98_ != NULL) {
+					ValaLocalVariable* _tmp99_;
+					ValaTargetValue* _tmp100_ = NULL;
+					ValaTargetValue* _tmp101_;
+					ValaCCodeExpression* _tmp102_ = NULL;
+					_tmp99_ = local;
+					_tmp100_ = vala_ccode_base_module_get_local_cvalue (self, _tmp99_);
+					_tmp101_ = _tmp100_;
+					_tmp102_ = vala_ccode_base_module_get_cvalue_ (self, _tmp101_);
+					_vala_ccode_node_unref0 (instance);
+					instance = _tmp102_;
+					_vala_target_value_unref0 (_tmp101_);
+				} else {
+					ValaField* _tmp103_;
+					_tmp103_ = field;
+					if (_tmp103_ != NULL) {
+						ValaAssignment* _tmp104_;
+						ValaExpression* _tmp105_;
+						ValaExpression* _tmp106_;
+						ValaExpression* _tmp107_;
+						ValaExpression* _tmp108_;
+						ValaExpression* _tmp109_;
+						ValaExpression* inner;
+						ValaTargetValue* _tmp110_ = NULL;
+						ValaExpression* _tmp111_;
+						ValaField* _tmp115_;
+						ValaTargetValue* _tmp116_;
+						ValaTargetValue* _tmp117_ = NULL;
+						ValaTargetValue* _tmp118_;
+						ValaCCodeExpression* _tmp119_ = NULL;
+						_tmp104_ = a;
+						_tmp105_ = vala_assignment_get_left (_tmp104_);
+						_tmp106_ = _tmp105_;
+						_tmp107_ = vala_member_access_get_inner (VALA_MEMBER_ACCESS (_tmp106_));
+						_tmp108_ = _tmp107_;
+						_tmp109_ = _vala_code_node_ref0 (_tmp108_);
+						inner = _tmp109_;
+						_tmp111_ = inner;
+						if (_tmp111_ != NULL) {
+							ValaExpression* _tmp112_;
+							ValaTargetValue* _tmp113_;
+							ValaTargetValue* _tmp114_;
+							_tmp112_ = inner;
+							_tmp113_ = vala_expression_get_target_value (_tmp112_);
+							_tmp114_ = _tmp113_;
+							_tmp110_ = _tmp114_;
+						} else {
+							_tmp110_ = NULL;
+						}
+						_tmp115_ = field;
+						_tmp116_ = _tmp110_;
+						_tmp117_ = vala_ccode_base_module_get_field_cvalue (self, _tmp115_, _tmp116_);
+						_tmp118_ = _tmp117_;
+						_tmp119_ = vala_ccode_base_module_get_cvalue_ (self, _tmp118_);
+						_vala_ccode_node_unref0 (instance);
+						instance = _tmp119_;
+						_vala_target_value_unref0 (_tmp118_);
+						_vala_code_node_unref0 (inner);
+					} else {
+						ValaParameter* _tmp120_;
+						_tmp120_ = param;
+						if (_tmp120_ != NULL) {
+							ValaParameter* _tmp121_;
+							ValaTargetValue* _tmp122_ = NULL;
+							ValaTargetValue* _tmp123_;
+							ValaCCodeExpression* _tmp124_ = NULL;
+							_tmp121_ = param;
+							_tmp122_ = vala_ccode_base_module_get_parameter_cvalue (self, _tmp121_);
+							_tmp123_ = _tmp122_;
+							_tmp124_ = vala_ccode_base_module_get_cvalue_ (self, _tmp123_);
+							_vala_ccode_node_unref0 (instance);
+							instance = _tmp124_;
+							_vala_target_value_unref0 (_tmp123_);
+						}
+					}
+				}
+				_vala_code_node_unref0 (param);
+				_vala_code_node_unref0 (field);
+			} else {
+				ValaObjectCreationExpression* _tmp125_;
+				ValaDataType* _tmp126_;
+				ValaDataType* _tmp127_;
+				ValaObjectCreationExpression* _tmp128_;
+				ValaTargetValue* _tmp129_ = NULL;
+				ValaTargetValue* temp_value;
+				ValaTargetValue* _tmp130_;
+				ValaCCodeExpression* _tmp131_ = NULL;
+				_tmp125_ = expr;
+				_tmp126_ = vala_object_creation_expression_get_type_reference (_tmp125_);
+				_tmp127_ = _tmp126_;
+				_tmp128_ = expr;
+				_tmp129_ = vala_ccode_base_module_create_temp_value (self, _tmp127_, TRUE, (ValaCodeNode*) _tmp128_, NULL);
+				temp_value = _tmp129_;
+				_tmp130_ = temp_value;
+				_tmp131_ = vala_ccode_base_module_get_cvalue_ (self, _tmp130_);
+				_vala_ccode_node_unref0 (instance);
+				instance = _tmp131_;
+				_vala_target_value_unref0 (temp_value);
+			}
 		}
+		_vala_code_node_unref0 (a);
 		_vala_code_node_unref0 (local);
 	}
-	_tmp46_ = expr;
-	_tmp47_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp46_);
-	_tmp48_ = _tmp47_;
-	if (_tmp48_ == NULL) {
-		ValaObjectCreationExpression* _tmp49_;
-		ValaDataType* _tmp50_;
-		ValaDataType* _tmp51_;
-		ValaTypeSymbol* _tmp52_;
-		ValaTypeSymbol* _tmp53_;
-		_tmp49_ = expr;
-		_tmp50_ = vala_object_creation_expression_get_type_reference (_tmp49_);
-		_tmp51_ = _tmp50_;
-		_tmp52_ = vala_data_type_get_data_type (_tmp51_);
-		_tmp53_ = _tmp52_;
-		if (VALA_IS_STRUCT (_tmp53_)) {
-			ValaCCodeFile* _tmp54_;
-			ValaCCodeIdentifier* _tmp55_;
-			ValaCCodeIdentifier* _tmp56_;
-			ValaCCodeFunctionCall* _tmp57_;
-			ValaCCodeFunctionCall* _tmp58_;
+	_tmp132_ = expr;
+	_tmp133_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp132_);
+	_tmp134_ = _tmp133_;
+	if (_tmp134_ == NULL) {
+		ValaObjectCreationExpression* _tmp135_;
+		ValaDataType* _tmp136_;
+		ValaDataType* _tmp137_;
+		ValaTypeSymbol* _tmp138_;
+		ValaTypeSymbol* _tmp139_;
+		_tmp135_ = expr;
+		_tmp136_ = vala_object_creation_expression_get_type_reference (_tmp135_);
+		_tmp137_ = _tmp136_;
+		_tmp138_ = vala_data_type_get_data_type (_tmp137_);
+		_tmp139_ = _tmp138_;
+		if (VALA_IS_STRUCT (_tmp139_)) {
+			ValaCCodeFile* _tmp140_;
+			ValaCCodeIdentifier* _tmp141_;
+			ValaCCodeIdentifier* _tmp142_;
+			ValaCCodeFunctionCall* _tmp143_;
+			ValaCCodeFunctionCall* _tmp144_;
 			ValaCCodeFunctionCall* creation_call;
-			ValaCCodeFunctionCall* _tmp59_;
-			ValaCCodeExpression* _tmp60_;
-			ValaCCodeUnaryExpression* _tmp61_;
-			ValaCCodeUnaryExpression* _tmp62_;
-			ValaCCodeFunctionCall* _tmp63_;
-			ValaCCodeConstant* _tmp64_;
-			ValaCCodeConstant* _tmp65_;
-			ValaCCodeFunctionCall* _tmp66_;
-			ValaObjectCreationExpression* _tmp67_;
-			ValaDataType* _tmp68_;
-			ValaDataType* _tmp69_;
-			gchar* _tmp70_ = NULL;
-			gchar* _tmp71_;
-			gchar* _tmp72_ = NULL;
-			gchar* _tmp73_;
-			ValaCCodeIdentifier* _tmp74_;
-			ValaCCodeIdentifier* _tmp75_;
-			ValaCCodeFunctionCall* _tmp76_;
-			ValaCCodeExpression* _tmp77_;
-			_tmp54_ = self->cfile;
-			vala_ccode_file_add_include (_tmp54_, "string.h", FALSE);
-			_tmp55_ = vala_ccode_identifier_new ("memset");
-			_tmp56_ = _tmp55_;
-			_tmp57_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp56_);
-			_tmp58_ = _tmp57_;
-			_vala_ccode_node_unref0 (_tmp56_);
-			creation_call = _tmp58_;
-			_tmp59_ = creation_call;
-			_tmp60_ = instance;
-			_tmp61_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp60_);
-			_tmp62_ = _tmp61_;
-			vala_ccode_function_call_add_argument (_tmp59_, (ValaCCodeExpression*) _tmp62_);
-			_vala_ccode_node_unref0 (_tmp62_);
-			_tmp63_ = creation_call;
-			_tmp64_ = vala_ccode_constant_new ("0");
-			_tmp65_ = _tmp64_;
-			vala_ccode_function_call_add_argument (_tmp63_, (ValaCCodeExpression*) _tmp65_);
-			_vala_ccode_node_unref0 (_tmp65_);
-			_tmp66_ = creation_call;
-			_tmp67_ = expr;
-			_tmp68_ = vala_object_creation_expression_get_type_reference (_tmp67_);
-			_tmp69_ = _tmp68_;
-			_tmp70_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp69_);
-			_tmp71_ = _tmp70_;
-			_tmp72_ = g_strdup_printf ("sizeof (%s)", _tmp71_);
-			_tmp73_ = _tmp72_;
-			_tmp74_ = vala_ccode_identifier_new (_tmp73_);
-			_tmp75_ = _tmp74_;
-			vala_ccode_function_call_add_argument (_tmp66_, (ValaCCodeExpression*) _tmp75_);
-			_vala_ccode_node_unref0 (_tmp75_);
-			_g_free0 (_tmp73_);
-			_g_free0 (_tmp71_);
-			_tmp76_ = creation_call;
-			_tmp77_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp76_);
+			ValaCCodeFunctionCall* _tmp145_;
+			ValaCCodeExpression* _tmp146_;
+			ValaCCodeUnaryExpression* _tmp147_;
+			ValaCCodeUnaryExpression* _tmp148_;
+			ValaCCodeFunctionCall* _tmp149_;
+			ValaCCodeConstant* _tmp150_;
+			ValaCCodeConstant* _tmp151_;
+			ValaCCodeFunctionCall* _tmp152_;
+			ValaObjectCreationExpression* _tmp153_;
+			ValaDataType* _tmp154_;
+			ValaDataType* _tmp155_;
+			gchar* _tmp156_ = NULL;
+			gchar* _tmp157_;
+			gchar* _tmp158_ = NULL;
+			gchar* _tmp159_;
+			ValaCCodeIdentifier* _tmp160_;
+			ValaCCodeIdentifier* _tmp161_;
+			ValaCCodeFunctionCall* _tmp162_;
+			ValaCCodeExpression* _tmp163_;
+			_tmp140_ = self->cfile;
+			vala_ccode_file_add_include (_tmp140_, "string.h", FALSE);
+			_tmp141_ = vala_ccode_identifier_new ("memset");
+			_tmp142_ = _tmp141_;
+			_tmp143_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp142_);
+			_tmp144_ = _tmp143_;
+			_vala_ccode_node_unref0 (_tmp142_);
+			creation_call = _tmp144_;
+			_tmp145_ = creation_call;
+			_tmp146_ = instance;
+			_tmp147_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp146_);
+			_tmp148_ = _tmp147_;
+			vala_ccode_function_call_add_argument (_tmp145_, (ValaCCodeExpression*) _tmp148_);
+			_vala_ccode_node_unref0 (_tmp148_);
+			_tmp149_ = creation_call;
+			_tmp150_ = vala_ccode_constant_new ("0");
+			_tmp151_ = _tmp150_;
+			vala_ccode_function_call_add_argument (_tmp149_, (ValaCCodeExpression*) _tmp151_);
+			_vala_ccode_node_unref0 (_tmp151_);
+			_tmp152_ = creation_call;
+			_tmp153_ = expr;
+			_tmp154_ = vala_object_creation_expression_get_type_reference (_tmp153_);
+			_tmp155_ = _tmp154_;
+			_tmp156_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp155_);
+			_tmp157_ = _tmp156_;
+			_tmp158_ = g_strdup_printf ("sizeof (%s)", _tmp157_);
+			_tmp159_ = _tmp158_;
+			_tmp160_ = vala_ccode_identifier_new (_tmp159_);
+			_tmp161_ = _tmp160_;
+			vala_ccode_function_call_add_argument (_tmp152_, (ValaCCodeExpression*) _tmp161_);
+			_vala_ccode_node_unref0 (_tmp161_);
+			_g_free0 (_tmp159_);
+			_g_free0 (_tmp157_);
+			_tmp162_ = creation_call;
+			_tmp163_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp162_);
 			_vala_ccode_node_unref0 (creation_expr);
-			creation_expr = _tmp77_;
+			creation_expr = _tmp163_;
 			_vala_ccode_node_unref0 (creation_call);
 		}
 	} else {
-		gboolean _tmp78_ = FALSE;
-		ValaObjectCreationExpression* _tmp79_;
-		ValaDataType* _tmp80_;
-		ValaDataType* _tmp81_;
-		ValaTypeSymbol* _tmp82_;
-		ValaTypeSymbol* _tmp83_;
-		ValaClass* _tmp84_;
-		gboolean _tmp91_;
-		_tmp79_ = expr;
-		_tmp80_ = vala_object_creation_expression_get_type_reference (_tmp79_);
-		_tmp81_ = _tmp80_;
-		_tmp82_ = vala_data_type_get_data_type (_tmp81_);
-		_tmp83_ = _tmp82_;
-		_tmp84_ = self->glist_type;
-		if (_tmp83_ == VALA_TYPESYMBOL (_tmp84_)) {
-			_tmp78_ = TRUE;
+		gboolean _tmp164_ = FALSE;
+		ValaObjectCreationExpression* _tmp165_;
+		ValaDataType* _tmp166_;
+		ValaDataType* _tmp167_;
+		ValaTypeSymbol* _tmp168_;
+		ValaTypeSymbol* _tmp169_;
+		ValaClass* _tmp170_;
+		gboolean _tmp177_;
+		_tmp165_ = expr;
+		_tmp166_ = vala_object_creation_expression_get_type_reference (_tmp165_);
+		_tmp167_ = _tmp166_;
+		_tmp168_ = vala_data_type_get_data_type (_tmp167_);
+		_tmp169_ = _tmp168_;
+		_tmp170_ = self->glist_type;
+		if (_tmp169_ == VALA_TYPESYMBOL (_tmp170_)) {
+			_tmp164_ = TRUE;
 		} else {
-			ValaObjectCreationExpression* _tmp85_;
-			ValaDataType* _tmp86_;
-			ValaDataType* _tmp87_;
-			ValaTypeSymbol* _tmp88_;
-			ValaTypeSymbol* _tmp89_;
-			ValaClass* _tmp90_;
-			_tmp85_ = expr;
-			_tmp86_ = vala_object_creation_expression_get_type_reference (_tmp85_);
-			_tmp87_ = _tmp86_;
-			_tmp88_ = vala_data_type_get_data_type (_tmp87_);
-			_tmp89_ = _tmp88_;
-			_tmp90_ = self->gslist_type;
-			_tmp78_ = _tmp89_ == VALA_TYPESYMBOL (_tmp90_);
+			ValaObjectCreationExpression* _tmp171_;
+			ValaDataType* _tmp172_;
+			ValaDataType* _tmp173_;
+			ValaTypeSymbol* _tmp174_;
+			ValaTypeSymbol* _tmp175_;
+			ValaClass* _tmp176_;
+			_tmp171_ = expr;
+			_tmp172_ = vala_object_creation_expression_get_type_reference (_tmp171_);
+			_tmp173_ = _tmp172_;
+			_tmp174_ = vala_data_type_get_data_type (_tmp173_);
+			_tmp175_ = _tmp174_;
+			_tmp176_ = self->gslist_type;
+			_tmp164_ = _tmp175_ == VALA_TYPESYMBOL (_tmp176_);
 		}
-		_tmp91_ = _tmp78_;
-		if (_tmp91_) {
-			ValaObjectCreationExpression* _tmp92_;
-			ValaCCodeConstant* _tmp93_;
-			ValaCCodeConstant* _tmp94_;
-			_tmp92_ = expr;
-			_tmp93_ = vala_ccode_constant_new ("NULL");
-			_tmp94_ = _tmp93_;
-			vala_ccode_base_module_set_cvalue (self, (ValaExpression*) _tmp92_, (ValaCCodeExpression*) _tmp94_);
-			_vala_ccode_node_unref0 (_tmp94_);
+		_tmp177_ = _tmp164_;
+		if (_tmp177_) {
+			ValaObjectCreationExpression* _tmp178_;
+			ValaCCodeConstant* _tmp179_;
+			ValaCCodeConstant* _tmp180_;
+			_tmp178_ = expr;
+			_tmp179_ = vala_ccode_constant_new ("NULL");
+			_tmp180_ = _tmp179_;
+			vala_ccode_base_module_set_cvalue (self, (ValaExpression*) _tmp178_, (ValaCCodeExpression*) _tmp180_);
+			_vala_ccode_node_unref0 (_tmp180_);
 		} else {
-			ValaObjectCreationExpression* _tmp95_;
-			ValaSymbol* _tmp96_;
-			ValaSymbol* _tmp97_;
-			_tmp95_ = expr;
-			_tmp96_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp95_);
-			_tmp97_ = _tmp96_;
-			if (VALA_IS_METHOD (_tmp97_)) {
-				ValaObjectCreationExpression* _tmp98_;
-				ValaSymbol* _tmp99_;
-				ValaSymbol* _tmp100_;
-				ValaMethod* _tmp101_;
+			ValaObjectCreationExpression* _tmp181_;
+			ValaSymbol* _tmp182_;
+			ValaSymbol* _tmp183_;
+			_tmp181_ = expr;
+			_tmp182_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp181_);
+			_tmp183_ = _tmp182_;
+			if (VALA_IS_METHOD (_tmp183_)) {
+				ValaObjectCreationExpression* _tmp184_;
+				ValaSymbol* _tmp185_;
+				ValaSymbol* _tmp186_;
+				ValaMethod* _tmp187_;
 				ValaMethod* m;
-				ValaMethod* _tmp102_;
-				ValaList* _tmp103_ = NULL;
+				ValaMethod* _tmp188_;
+				ValaList* _tmp189_ = NULL;
 				ValaList* params;
 				ValaCCodeFunctionCall* creation_call = NULL;
-				ValaMethod* _tmp104_;
-				ValaCCodeFile* _tmp105_;
-				ValaObjectCreationExpression* _tmp106_;
-				ValaDataType* _tmp107_;
-				ValaDataType* _tmp108_;
-				ValaTypeSymbol* _tmp109_;
-				ValaTypeSymbol* _tmp110_;
-				ValaClass* _tmp111_;
+				ValaMethod* _tmp190_;
+				ValaCCodeFile* _tmp191_;
+				ValaObjectCreationExpression* _tmp192_;
+				ValaDataType* _tmp193_;
+				ValaDataType* _tmp194_;
+				ValaTypeSymbol* _tmp195_;
+				ValaTypeSymbol* _tmp196_;
+				ValaClass* _tmp197_;
 				ValaClass* cl;
-				ValaMethod* _tmp112_;
-				gboolean _tmp113_ = FALSE;
-				gboolean _tmp132_ = FALSE;
-				gboolean _tmp133_ = FALSE;
-				ValaStruct* _tmp134_;
-				gboolean _tmp137_;
-				gboolean _tmp140_;
-				ValaObjectCreationExpression* _tmp182_;
-				ValaDataType* _tmp183_;
-				ValaDataType* _tmp184_;
-				ValaCCodeFile* _tmp185_;
-				GHashFunc _tmp186_;
-				GEqualFunc _tmp187_;
-				GEqualFunc _tmp188_;
-				ValaHashMap* _tmp189_;
+				ValaMethod* _tmp198_;
+				gboolean _tmp199_ = FALSE;
+				gboolean _tmp218_ = FALSE;
+				gboolean _tmp219_ = FALSE;
+				ValaStruct* _tmp220_;
+				gboolean _tmp223_;
+				gboolean _tmp226_;
+				ValaObjectCreationExpression* _tmp268_;
+				ValaDataType* _tmp269_;
+				ValaDataType* _tmp270_;
+				ValaCCodeFile* _tmp271_;
+				GHashFunc _tmp272_;
+				GEqualFunc _tmp273_;
+				GEqualFunc _tmp274_;
+				ValaHashMap* _tmp275_;
 				ValaHashMap* carg_map;
-				gboolean _tmp190_ = FALSE;
-				ValaClass* _tmp191_;
-				gboolean _tmp195_;
+				gboolean _tmp276_ = FALSE;
+				ValaClass* _tmp277_;
+				gboolean _tmp281_;
 				gboolean ellipsis;
 				gint i;
 				gint arg_pos = 0;
-				ValaList* _tmp235_;
-				ValaIterator* _tmp236_ = NULL;
+				ValaList* _tmp321_;
+				ValaIterator* _tmp322_ = NULL;
 				ValaIterator* params_it;
 				gint last_pos;
 				gint min_pos = 0;
-				gboolean _tmp425_ = FALSE;
-				gboolean _tmp426_ = FALSE;
-				ValaStruct* _tmp427_;
-				gboolean _tmp430_;
-				gboolean _tmp433_;
-				ValaObjectCreationExpression* _tmp438_;
-				gboolean _tmp439_;
-				gboolean _tmp440_;
-				gboolean _tmp446_;
-				ValaCCodeFunctionCall* _tmp466_;
-				ValaCCodeExpression* _tmp467_;
-				ValaMethod* _tmp468_;
-				gchar* _tmp469_ = NULL;
-				gchar* _tmp470_;
-				gboolean _tmp471_;
-				_tmp98_ = expr;
-				_tmp99_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp98_);
-				_tmp100_ = _tmp99_;
-				_tmp101_ = _vala_code_node_ref0 (VALA_METHOD (_tmp100_));
-				m = _tmp101_;
-				_tmp102_ = m;
-				_tmp103_ = vala_method_get_parameters (_tmp102_);
-				params = _tmp103_;
-				_tmp104_ = m;
-				_tmp105_ = self->cfile;
-				vala_ccode_base_module_generate_method_declaration (self, _tmp104_, _tmp105_);
-				_tmp106_ = expr;
-				_tmp107_ = vala_object_creation_expression_get_type_reference (_tmp106_);
-				_tmp108_ = _tmp107_;
-				_tmp109_ = vala_data_type_get_data_type (_tmp108_);
-				_tmp110_ = _tmp109_;
-				_tmp111_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp110_) ? ((ValaClass*) _tmp110_) : NULL);
-				cl = _tmp111_;
-				_tmp112_ = m;
-				_tmp113_ = vala_ccode_base_module_get_ccode_has_new_function (_tmp112_);
-				if (!_tmp113_) {
-					ValaMethod* _tmp114_;
-					gchar* _tmp115_ = NULL;
-					gchar* _tmp116_;
-					ValaCCodeIdentifier* _tmp117_;
-					ValaCCodeIdentifier* _tmp118_;
-					ValaCCodeFunctionCall* _tmp119_;
-					ValaCCodeFunctionCall* _tmp120_;
-					ValaClass* _tmp121_;
-					gchar* _tmp122_ = NULL;
-					gchar* _tmp123_;
-					ValaCCodeIdentifier* _tmp124_;
-					ValaCCodeIdentifier* _tmp125_;
-					_tmp114_ = m;
-					_tmp115_ = vala_ccode_base_module_get_ccode_real_name ((ValaSymbol*) _tmp114_);
-					_tmp116_ = _tmp115_;
-					_tmp117_ = vala_ccode_identifier_new (_tmp116_);
-					_tmp118_ = _tmp117_;
-					_tmp119_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp118_);
+				gboolean _tmp511_ = FALSE;
+				gboolean _tmp512_ = FALSE;
+				ValaStruct* _tmp513_;
+				gboolean _tmp516_;
+				gboolean _tmp519_;
+				ValaObjectCreationExpression* _tmp524_;
+				gboolean _tmp525_;
+				gboolean _tmp526_;
+				gboolean _tmp532_;
+				ValaCCodeFunctionCall* _tmp552_;
+				ValaCCodeExpression* _tmp553_;
+				ValaMethod* _tmp554_;
+				gchar* _tmp555_ = NULL;
+				gchar* _tmp556_;
+				gboolean _tmp557_;
+				_tmp184_ = expr;
+				_tmp185_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp184_);
+				_tmp186_ = _tmp185_;
+				_tmp187_ = _vala_code_node_ref0 (VALA_METHOD (_tmp186_));
+				m = _tmp187_;
+				_tmp188_ = m;
+				_tmp189_ = vala_method_get_parameters (_tmp188_);
+				params = _tmp189_;
+				_tmp190_ = m;
+				_tmp191_ = self->cfile;
+				vala_ccode_base_module_generate_method_declaration (self, _tmp190_, _tmp191_);
+				_tmp192_ = expr;
+				_tmp193_ = vala_object_creation_expression_get_type_reference (_tmp192_);
+				_tmp194_ = _tmp193_;
+				_tmp195_ = vala_data_type_get_data_type (_tmp194_);
+				_tmp196_ = _tmp195_;
+				_tmp197_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp196_) ? ((ValaClass*) _tmp196_) : NULL);
+				cl = _tmp197_;
+				_tmp198_ = m;
+				_tmp199_ = vala_ccode_base_module_get_ccode_has_new_function (_tmp198_);
+				if (!_tmp199_) {
+					ValaMethod* _tmp200_;
+					gchar* _tmp201_ = NULL;
+					gchar* _tmp202_;
+					ValaCCodeIdentifier* _tmp203_;
+					ValaCCodeIdentifier* _tmp204_;
+					ValaCCodeFunctionCall* _tmp205_;
+					ValaCCodeFunctionCall* _tmp206_;
+					ValaClass* _tmp207_;
+					gchar* _tmp208_ = NULL;
+					gchar* _tmp209_;
+					ValaCCodeIdentifier* _tmp210_;
+					ValaCCodeIdentifier* _tmp211_;
+					_tmp200_ = m;
+					_tmp201_ = vala_ccode_base_module_get_ccode_real_name ((ValaSymbol*) _tmp200_);
+					_tmp202_ = _tmp201_;
+					_tmp203_ = vala_ccode_identifier_new (_tmp202_);
+					_tmp204_ = _tmp203_;
+					_tmp205_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp204_);
 					_vala_ccode_node_unref0 (creation_call);
-					creation_call = _tmp119_;
-					_vala_ccode_node_unref0 (_tmp118_);
-					_g_free0 (_tmp116_);
-					_tmp120_ = creation_call;
-					_tmp121_ = cl;
-					_tmp122_ = vala_ccode_base_module_get_ccode_type_id ((ValaCodeNode*) _tmp121_);
-					_tmp123_ = _tmp122_;
-					_tmp124_ = vala_ccode_identifier_new (_tmp123_);
-					_tmp125_ = _tmp124_;
-					vala_ccode_function_call_add_argument (_tmp120_, (ValaCCodeExpression*) _tmp125_);
-					_vala_ccode_node_unref0 (_tmp125_);
-					_g_free0 (_tmp123_);
+					creation_call = _tmp205_;
+					_vala_ccode_node_unref0 (_tmp204_);
+					_g_free0 (_tmp202_);
+					_tmp206_ = creation_call;
+					_tmp207_ = cl;
+					_tmp208_ = vala_ccode_base_module_get_ccode_type_id ((ValaCodeNode*) _tmp207_);
+					_tmp209_ = _tmp208_;
+					_tmp210_ = vala_ccode_identifier_new (_tmp209_);
+					_tmp211_ = _tmp210_;
+					vala_ccode_function_call_add_argument (_tmp206_, (ValaCCodeExpression*) _tmp211_);
+					_vala_ccode_node_unref0 (_tmp211_);
+					_g_free0 (_tmp209_);
 				} else {
-					ValaMethod* _tmp126_;
-					gchar* _tmp127_ = NULL;
-					gchar* _tmp128_;
-					ValaCCodeIdentifier* _tmp129_;
-					ValaCCodeIdentifier* _tmp130_;
-					ValaCCodeFunctionCall* _tmp131_;
-					_tmp126_ = m;
-					_tmp127_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp126_);
-					_tmp128_ = _tmp127_;
-					_tmp129_ = vala_ccode_identifier_new (_tmp128_);
-					_tmp130_ = _tmp129_;
-					_tmp131_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp130_);
+					ValaMethod* _tmp212_;
+					gchar* _tmp213_ = NULL;
+					gchar* _tmp214_;
+					ValaCCodeIdentifier* _tmp215_;
+					ValaCCodeIdentifier* _tmp216_;
+					ValaCCodeFunctionCall* _tmp217_;
+					_tmp212_ = m;
+					_tmp213_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp212_);
+					_tmp214_ = _tmp213_;
+					_tmp215_ = vala_ccode_identifier_new (_tmp214_);
+					_tmp216_ = _tmp215_;
+					_tmp217_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp216_);
 					_vala_ccode_node_unref0 (creation_call);
-					creation_call = _tmp131_;
-					_vala_ccode_node_unref0 (_tmp130_);
-					_g_free0 (_tmp128_);
+					creation_call = _tmp217_;
+					_vala_ccode_node_unref0 (_tmp216_);
+					_g_free0 (_tmp214_);
 				}
-				_tmp134_ = st;
-				if (_tmp134_ != NULL) {
-					ValaStruct* _tmp135_;
-					gboolean _tmp136_ = FALSE;
-					_tmp135_ = st;
-					_tmp136_ = vala_struct_is_simple_type (_tmp135_);
-					_tmp133_ = !_tmp136_;
+				_tmp220_ = st;
+				if (_tmp220_ != NULL) {
+					ValaStruct* _tmp221_;
+					gboolean _tmp222_ = FALSE;
+					_tmp221_ = st;
+					_tmp222_ = vala_struct_is_simple_type (_tmp221_);
+					_tmp219_ = !_tmp222_;
 				} else {
-					_tmp133_ = FALSE;
+					_tmp219_ = FALSE;
 				}
-				_tmp137_ = _tmp133_;
-				if (_tmp137_) {
-					ValaMethod* _tmp138_;
-					gdouble _tmp139_ = 0.0;
-					_tmp138_ = m;
-					_tmp139_ = vala_ccode_base_module_get_ccode_instance_pos ((ValaCodeNode*) _tmp138_);
-					_tmp132_ = !(_tmp139_ < ((gdouble) 0));
+				_tmp223_ = _tmp219_;
+				if (_tmp223_) {
+					ValaMethod* _tmp224_;
+					gdouble _tmp225_ = 0.0;
+					_tmp224_ = m;
+					_tmp225_ = vala_ccode_base_module_get_ccode_instance_pos ((ValaCodeNode*) _tmp224_);
+					_tmp218_ = !(_tmp225_ < ((gdouble) 0));
 				} else {
-					_tmp132_ = FALSE;
+					_tmp218_ = FALSE;
 				}
-				_tmp140_ = _tmp132_;
-				if (_tmp140_) {
-					ValaCCodeFunctionCall* _tmp141_;
-					ValaCCodeExpression* _tmp142_;
-					ValaCCodeUnaryExpression* _tmp143_;
-					ValaCCodeUnaryExpression* _tmp144_;
-					_tmp141_ = creation_call;
-					_tmp142_ = instance;
-					_tmp143_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp142_);
-					_tmp144_ = _tmp143_;
-					vala_ccode_function_call_add_argument (_tmp141_, (ValaCCodeExpression*) _tmp144_);
-					_vala_ccode_node_unref0 (_tmp144_);
+				_tmp226_ = _tmp218_;
+				if (_tmp226_) {
+					ValaCCodeFunctionCall* _tmp227_;
+					ValaCCodeExpression* _tmp228_;
+					ValaCCodeUnaryExpression* _tmp229_;
+					ValaCCodeUnaryExpression* _tmp230_;
+					_tmp227_ = creation_call;
+					_tmp228_ = instance;
+					_tmp229_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp228_);
+					_tmp230_ = _tmp229_;
+					vala_ccode_function_call_add_argument (_tmp227_, (ValaCCodeExpression*) _tmp230_);
+					_vala_ccode_node_unref0 (_tmp230_);
 				} else {
-					gboolean _tmp145_ = FALSE;
-					ValaStruct* _tmp146_;
-					gboolean _tmp150_;
-					_tmp146_ = st;
-					if (_tmp146_ != NULL) {
-						ValaStruct* _tmp147_;
-						gchar* _tmp148_ = NULL;
-						gchar* _tmp149_;
-						_tmp147_ = st;
-						_tmp148_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp147_);
-						_tmp149_ = _tmp148_;
-						_tmp145_ = g_strcmp0 (_tmp149_, "va_list") == 0;
-						_g_free0 (_tmp149_);
+					gboolean _tmp231_ = FALSE;
+					ValaStruct* _tmp232_;
+					gboolean _tmp236_;
+					_tmp232_ = st;
+					if (_tmp232_ != NULL) {
+						ValaStruct* _tmp233_;
+						gchar* _tmp234_ = NULL;
+						gchar* _tmp235_;
+						_tmp233_ = st;
+						_tmp234_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp233_);
+						_tmp235_ = _tmp234_;
+						_tmp231_ = g_strcmp0 (_tmp235_, "va_list") == 0;
+						_g_free0 (_tmp235_);
 					} else {
-						_tmp145_ = FALSE;
+						_tmp231_ = FALSE;
 					}
-					_tmp150_ = _tmp145_;
-					if (_tmp150_) {
-						ValaCCodeFunctionCall* _tmp151_;
-						ValaCCodeExpression* _tmp152_;
-						ValaMethod* _tmp153_;
-						gchar* _tmp154_ = NULL;
-						gchar* _tmp155_;
-						gboolean _tmp156_;
-						_tmp151_ = creation_call;
-						_tmp152_ = instance;
-						vala_ccode_function_call_add_argument (_tmp151_, _tmp152_);
-						_tmp153_ = m;
-						_tmp154_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp153_);
-						_tmp155_ = _tmp154_;
-						_tmp156_ = g_strcmp0 (_tmp155_, "va_start") == 0;
-						_g_free0 (_tmp155_);
-						if (_tmp156_) {
+					_tmp236_ = _tmp231_;
+					if (_tmp236_) {
+						ValaCCodeFunctionCall* _tmp237_;
+						ValaCCodeExpression* _tmp238_;
+						ValaMethod* _tmp239_;
+						gchar* _tmp240_ = NULL;
+						gchar* _tmp241_;
+						gboolean _tmp242_;
+						_tmp237_ = creation_call;
+						_tmp238_ = instance;
+						vala_ccode_function_call_add_argument (_tmp237_, _tmp238_);
+						_tmp239_ = m;
+						_tmp240_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp239_);
+						_tmp241_ = _tmp240_;
+						_tmp242_ = g_strcmp0 (_tmp241_, "va_start") == 0;
+						_g_free0 (_tmp241_);
+						if (_tmp242_) {
 							ValaParameter* last_param;
-							ValaCCodeFunctionCall* _tmp174_;
-							ValaParameter* _tmp175_;
-							const gchar* _tmp176_;
-							const gchar* _tmp177_;
-							gchar* _tmp178_ = NULL;
-							gchar* _tmp179_;
-							ValaCCodeIdentifier* _tmp180_;
-							ValaCCodeIdentifier* _tmp181_;
+							ValaCCodeFunctionCall* _tmp260_;
+							ValaParameter* _tmp261_;
+							const gchar* _tmp262_;
+							const gchar* _tmp263_;
+							gchar* _tmp264_ = NULL;
+							gchar* _tmp265_;
+							ValaCCodeIdentifier* _tmp266_;
+							ValaCCodeIdentifier* _tmp267_;
 							last_param = NULL;
 							{
-								ValaMethod* _tmp157_;
-								ValaMethod* _tmp158_;
-								ValaList* _tmp159_ = NULL;
+								ValaMethod* _tmp243_;
+								ValaMethod* _tmp244_;
+								ValaList* _tmp245_ = NULL;
 								ValaList* _param_list;
-								ValaList* _tmp160_;
-								gint _tmp161_;
-								gint _tmp162_;
+								ValaList* _tmp246_;
+								gint _tmp247_;
+								gint _tmp248_;
 								gint _param_size;
 								gint _param_index;
-								_tmp157_ = vala_ccode_base_module_get_current_method (self);
-								_tmp158_ = _tmp157_;
-								_tmp159_ = vala_method_get_parameters (_tmp158_);
-								_param_list = _tmp159_;
-								_tmp160_ = _param_list;
-								_tmp161_ = vala_collection_get_size ((ValaCollection*) _tmp160_);
-								_tmp162_ = _tmp161_;
-								_param_size = _tmp162_;
+								_tmp243_ = vala_ccode_base_module_get_current_method (self);
+								_tmp244_ = _tmp243_;
+								_tmp245_ = vala_method_get_parameters (_tmp244_);
+								_param_list = _tmp245_;
+								_tmp246_ = _param_list;
+								_tmp247_ = vala_collection_get_size ((ValaCollection*) _tmp246_);
+								_tmp248_ = _tmp247_;
+								_param_size = _tmp248_;
 								_param_index = -1;
 								while (TRUE) {
-									gint _tmp163_;
-									gint _tmp164_;
-									gint _tmp165_;
-									ValaList* _tmp166_;
-									gint _tmp167_;
-									gpointer _tmp168_ = NULL;
+									gint _tmp249_;
+									gint _tmp250_;
+									gint _tmp251_;
+									ValaList* _tmp252_;
+									gint _tmp253_;
+									gpointer _tmp254_ = NULL;
 									ValaParameter* param;
-									ValaParameter* _tmp169_;
-									gboolean _tmp170_;
-									gboolean _tmp171_;
-									ValaParameter* _tmp172_;
-									ValaParameter* _tmp173_;
-									_tmp163_ = _param_index;
-									_param_index = _tmp163_ + 1;
-									_tmp164_ = _param_index;
-									_tmp165_ = _param_size;
-									if (!(_tmp164_ < _tmp165_)) {
+									ValaParameter* _tmp255_;
+									gboolean _tmp256_;
+									gboolean _tmp257_;
+									ValaParameter* _tmp258_;
+									ValaParameter* _tmp259_;
+									_tmp249_ = _param_index;
+									_param_index = _tmp249_ + 1;
+									_tmp250_ = _param_index;
+									_tmp251_ = _param_size;
+									if (!(_tmp250_ < _tmp251_)) {
 										break;
 									}
-									_tmp166_ = _param_list;
-									_tmp167_ = _param_index;
-									_tmp168_ = vala_list_get (_tmp166_, _tmp167_);
-									param = (ValaParameter*) _tmp168_;
-									_tmp169_ = param;
-									_tmp170_ = vala_parameter_get_ellipsis (_tmp169_);
-									_tmp171_ = _tmp170_;
-									if (_tmp171_) {
+									_tmp252_ = _param_list;
+									_tmp253_ = _param_index;
+									_tmp254_ = vala_list_get (_tmp252_, _tmp253_);
+									param = (ValaParameter*) _tmp254_;
+									_tmp255_ = param;
+									_tmp256_ = vala_parameter_get_ellipsis (_tmp255_);
+									_tmp257_ = _tmp256_;
+									if (_tmp257_) {
 										_vala_code_node_unref0 (param);
 										break;
 									}
-									_tmp172_ = param;
-									_tmp173_ = _vala_code_node_ref0 (_tmp172_);
+									_tmp258_ = param;
+									_tmp259_ = _vala_code_node_ref0 (_tmp258_);
 									_vala_code_node_unref0 (last_param);
-									last_param = _tmp173_;
+									last_param = _tmp259_;
 									_vala_code_node_unref0 (param);
 								}
 								_vala_iterable_unref0 (_param_list);
 							}
-							_tmp174_ = creation_call;
-							_tmp175_ = last_param;
-							_tmp176_ = vala_symbol_get_name ((ValaSymbol*) _tmp175_);
-							_tmp177_ = _tmp176_;
-							_tmp178_ = vala_ccode_base_module_get_variable_cname (self, _tmp177_);
-							_tmp179_ = _tmp178_;
-							_tmp180_ = vala_ccode_identifier_new (_tmp179_);
-							_tmp181_ = _tmp180_;
-							vala_ccode_function_call_add_argument (_tmp174_, (ValaCCodeExpression*) _tmp181_);
-							_vala_ccode_node_unref0 (_tmp181_);
-							_g_free0 (_tmp179_);
+							_tmp260_ = creation_call;
+							_tmp261_ = last_param;
+							_tmp262_ = vala_symbol_get_name ((ValaSymbol*) _tmp261_);
+							_tmp263_ = _tmp262_;
+							_tmp264_ = vala_ccode_base_module_get_variable_cname (self, _tmp263_);
+							_tmp265_ = _tmp264_;
+							_tmp266_ = vala_ccode_identifier_new (_tmp265_);
+							_tmp267_ = _tmp266_;
+							vala_ccode_function_call_add_argument (_tmp260_, (ValaCCodeExpression*) _tmp267_);
+							_vala_ccode_node_unref0 (_tmp267_);
+							_g_free0 (_tmp265_);
 							_vala_code_node_unref0 (last_param);
 						}
 					}
 				}
-				_tmp182_ = expr;
-				_tmp183_ = vala_object_creation_expression_get_type_reference (_tmp182_);
-				_tmp184_ = _tmp183_;
-				_tmp185_ = self->cfile;
-				vala_ccode_base_module_generate_type_declaration (self, _tmp184_, _tmp185_);
-				_tmp186_ = g_direct_hash;
-				_tmp187_ = g_direct_equal;
-				_tmp188_ = g_direct_equal;
-				_tmp189_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, vala_ccode_node_unref, _tmp186_, _tmp187_, _tmp188_);
-				carg_map = _tmp189_;
-				_tmp191_ = cl;
-				if (_tmp191_ != NULL) {
-					ValaClass* _tmp192_;
-					gboolean _tmp193_;
-					gboolean _tmp194_;
-					_tmp192_ = cl;
-					_tmp193_ = vala_class_get_is_compact (_tmp192_);
-					_tmp194_ = _tmp193_;
-					_tmp190_ = !_tmp194_;
+				_tmp268_ = expr;
+				_tmp269_ = vala_object_creation_expression_get_type_reference (_tmp268_);
+				_tmp270_ = _tmp269_;
+				_tmp271_ = self->cfile;
+				vala_ccode_base_module_generate_type_declaration (self, _tmp270_, _tmp271_);
+				_tmp272_ = g_direct_hash;
+				_tmp273_ = g_direct_equal;
+				_tmp274_ = g_direct_equal;
+				_tmp275_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, vala_ccode_node_unref, _tmp272_, _tmp273_, _tmp274_);
+				carg_map = _tmp275_;
+				_tmp277_ = cl;
+				if (_tmp277_ != NULL) {
+					ValaClass* _tmp278_;
+					gboolean _tmp279_;
+					gboolean _tmp280_;
+					_tmp278_ = cl;
+					_tmp279_ = vala_class_get_is_compact (_tmp278_);
+					_tmp280_ = _tmp279_;
+					_tmp276_ = !_tmp280_;
 				} else {
-					_tmp190_ = FALSE;
+					_tmp276_ = FALSE;
 				}
-				_tmp195_ = _tmp190_;
-				if (_tmp195_) {
-					ValaHashMap* _tmp196_;
-					ValaObjectCreationExpression* _tmp197_;
-					ValaDataType* _tmp198_;
-					ValaDataType* _tmp199_;
-					ValaList* _tmp200_ = NULL;
-					ValaList* _tmp201_;
-					ValaObjectCreationExpression* _tmp202_;
-					_tmp196_ = carg_map;
-					_tmp197_ = expr;
-					_tmp198_ = vala_object_creation_expression_get_type_reference (_tmp197_);
-					_tmp199_ = _tmp198_;
-					_tmp200_ = vala_data_type_get_type_arguments (_tmp199_);
-					_tmp201_ = _tmp200_;
-					_tmp202_ = expr;
-					vala_ccode_base_module_add_generic_type_arguments (self, (ValaMap*) _tmp196_, _tmp201_, (ValaCodeNode*) _tmp202_, FALSE, NULL);
-					_vala_iterable_unref0 (_tmp201_);
+				_tmp281_ = _tmp276_;
+				if (_tmp281_) {
+					ValaHashMap* _tmp282_;
+					ValaObjectCreationExpression* _tmp283_;
+					ValaDataType* _tmp284_;
+					ValaDataType* _tmp285_;
+					ValaList* _tmp286_ = NULL;
+					ValaList* _tmp287_;
+					ValaObjectCreationExpression* _tmp288_;
+					_tmp282_ = carg_map;
+					_tmp283_ = expr;
+					_tmp284_ = vala_object_creation_expression_get_type_reference (_tmp283_);
+					_tmp285_ = _tmp284_;
+					_tmp286_ = vala_data_type_get_type_arguments (_tmp285_);
+					_tmp287_ = _tmp286_;
+					_tmp288_ = expr;
+					vala_ccode_base_module_add_generic_type_arguments (self, (ValaMap*) _tmp282_, _tmp287_, (ValaCodeNode*) _tmp288_, FALSE, NULL);
+					_vala_iterable_unref0 (_tmp287_);
 				} else {
-					gboolean _tmp203_ = FALSE;
-					ValaClass* _tmp204_;
-					gboolean _tmp207_;
-					_tmp204_ = cl;
-					if (_tmp204_ != NULL) {
-						ValaMethod* _tmp205_;
-						gboolean _tmp206_ = FALSE;
-						_tmp205_ = m;
-						_tmp206_ = vala_ccode_base_module_get_ccode_simple_generics (_tmp205_);
-						_tmp203_ = _tmp206_;
+					gboolean _tmp289_ = FALSE;
+					ValaClass* _tmp290_;
+					gboolean _tmp293_;
+					_tmp290_ = cl;
+					if (_tmp290_ != NULL) {
+						ValaMethod* _tmp291_;
+						gboolean _tmp292_ = FALSE;
+						_tmp291_ = m;
+						_tmp292_ = vala_ccode_base_module_get_ccode_simple_generics (_tmp291_);
+						_tmp289_ = _tmp292_;
 					} else {
-						_tmp203_ = FALSE;
+						_tmp289_ = FALSE;
 					}
-					_tmp207_ = _tmp203_;
-					if (_tmp207_) {
+					_tmp293_ = _tmp289_;
+					if (_tmp293_) {
 						gint type_param_index;
 						type_param_index = 0;
 						{
-							ValaObjectCreationExpression* _tmp208_;
-							ValaDataType* _tmp209_;
-							ValaDataType* _tmp210_;
-							ValaList* _tmp211_ = NULL;
+							ValaObjectCreationExpression* _tmp294_;
+							ValaDataType* _tmp295_;
+							ValaDataType* _tmp296_;
+							ValaList* _tmp297_ = NULL;
 							ValaList* _type_arg_list;
-							ValaList* _tmp212_;
-							gint _tmp213_;
-							gint _tmp214_;
+							ValaList* _tmp298_;
+							gint _tmp299_;
+							gint _tmp300_;
 							gint _type_arg_size;
 							gint _type_arg_index;
-							_tmp208_ = expr;
-							_tmp209_ = vala_object_creation_expression_get_type_reference (_tmp208_);
-							_tmp210_ = _tmp209_;
-							_tmp211_ = vala_data_type_get_type_arguments (_tmp210_);
-							_type_arg_list = _tmp211_;
-							_tmp212_ = _type_arg_list;
-							_tmp213_ = vala_collection_get_size ((ValaCollection*) _tmp212_);
-							_tmp214_ = _tmp213_;
-							_type_arg_size = _tmp214_;
+							_tmp294_ = expr;
+							_tmp295_ = vala_object_creation_expression_get_type_reference (_tmp294_);
+							_tmp296_ = _tmp295_;
+							_tmp297_ = vala_data_type_get_type_arguments (_tmp296_);
+							_type_arg_list = _tmp297_;
+							_tmp298_ = _type_arg_list;
+							_tmp299_ = vala_collection_get_size ((ValaCollection*) _tmp298_);
+							_tmp300_ = _tmp299_;
+							_type_arg_size = _tmp300_;
 							_type_arg_index = -1;
 							while (TRUE) {
-								gint _tmp215_;
-								gint _tmp216_;
-								gint _tmp217_;
-								ValaList* _tmp218_;
-								gint _tmp219_;
-								gpointer _tmp220_ = NULL;
+								gint _tmp301_;
+								gint _tmp302_;
+								gint _tmp303_;
+								ValaList* _tmp304_;
+								gint _tmp305_;
+								gpointer _tmp306_ = NULL;
 								ValaDataType* type_arg;
-								ValaDataType* _tmp221_;
-								gboolean _tmp222_ = FALSE;
-								gint _tmp234_;
-								_tmp215_ = _type_arg_index;
-								_type_arg_index = _tmp215_ + 1;
-								_tmp216_ = _type_arg_index;
-								_tmp217_ = _type_arg_size;
-								if (!(_tmp216_ < _tmp217_)) {
+								ValaDataType* _tmp307_;
+								gboolean _tmp308_ = FALSE;
+								gint _tmp320_;
+								_tmp301_ = _type_arg_index;
+								_type_arg_index = _tmp301_ + 1;
+								_tmp302_ = _type_arg_index;
+								_tmp303_ = _type_arg_size;
+								if (!(_tmp302_ < _tmp303_)) {
 									break;
 								}
-								_tmp218_ = _type_arg_list;
-								_tmp219_ = _type_arg_index;
-								_tmp220_ = vala_list_get (_tmp218_, _tmp219_);
-								type_arg = (ValaDataType*) _tmp220_;
-								_tmp221_ = type_arg;
-								_tmp222_ = vala_ccode_base_module_requires_copy (self, _tmp221_);
-								if (_tmp222_) {
-									ValaHashMap* _tmp223_;
-									gint _tmp224_;
-									gint _tmp225_ = 0;
-									ValaDataType* _tmp226_;
-									ValaCCodeExpression* _tmp227_ = NULL;
-									ValaCCodeExpression* _tmp228_;
-									_tmp223_ = carg_map;
-									_tmp224_ = type_param_index;
-									_tmp225_ = vala_ccode_base_module_get_param_pos (self, ((-1) + (0.1 * _tmp224_)) + 0.03, FALSE);
-									_tmp226_ = type_arg;
-									_tmp227_ = vala_ccode_base_module_get_destroy0_func_expression (self, _tmp226_, FALSE);
-									_tmp228_ = _tmp227_;
-									vala_map_set ((ValaMap*) _tmp223_, GINT_TO_POINTER (_tmp225_), _tmp228_);
-									_vala_ccode_node_unref0 (_tmp228_);
+								_tmp304_ = _type_arg_list;
+								_tmp305_ = _type_arg_index;
+								_tmp306_ = vala_list_get (_tmp304_, _tmp305_);
+								type_arg = (ValaDataType*) _tmp306_;
+								_tmp307_ = type_arg;
+								_tmp308_ = vala_ccode_base_module_requires_copy (self, _tmp307_);
+								if (_tmp308_) {
+									ValaHashMap* _tmp309_;
+									gint _tmp310_;
+									gint _tmp311_ = 0;
+									ValaDataType* _tmp312_;
+									ValaCCodeExpression* _tmp313_ = NULL;
+									ValaCCodeExpression* _tmp314_;
+									_tmp309_ = carg_map;
+									_tmp310_ = type_param_index;
+									_tmp311_ = vala_ccode_base_module_get_param_pos (self, ((-1) + (0.1 * _tmp310_)) + 0.03, FALSE);
+									_tmp312_ = type_arg;
+									_tmp313_ = vala_ccode_base_module_get_destroy0_func_expression (self, _tmp312_, FALSE);
+									_tmp314_ = _tmp313_;
+									vala_map_set ((ValaMap*) _tmp309_, GINT_TO_POINTER (_tmp311_), _tmp314_);
+									_vala_ccode_node_unref0 (_tmp314_);
 								} else {
-									ValaHashMap* _tmp229_;
-									gint _tmp230_;
-									gint _tmp231_ = 0;
-									ValaCCodeConstant* _tmp232_;
-									ValaCCodeConstant* _tmp233_;
-									_tmp229_ = carg_map;
-									_tmp230_ = type_param_index;
-									_tmp231_ = vala_ccode_base_module_get_param_pos (self, ((-1) + (0.1 * _tmp230_)) + 0.03, FALSE);
-									_tmp232_ = vala_ccode_constant_new ("NULL");
-									_tmp233_ = _tmp232_;
-									vala_map_set ((ValaMap*) _tmp229_, GINT_TO_POINTER (_tmp231_), (ValaCCodeExpression*) _tmp233_);
-									_vala_ccode_node_unref0 (_tmp233_);
+									ValaHashMap* _tmp315_;
+									gint _tmp316_;
+									gint _tmp317_ = 0;
+									ValaCCodeConstant* _tmp318_;
+									ValaCCodeConstant* _tmp319_;
+									_tmp315_ = carg_map;
+									_tmp316_ = type_param_index;
+									_tmp317_ = vala_ccode_base_module_get_param_pos (self, ((-1) + (0.1 * _tmp316_)) + 0.03, FALSE);
+									_tmp318_ = vala_ccode_constant_new ("NULL");
+									_tmp319_ = _tmp318_;
+									vala_map_set ((ValaMap*) _tmp315_, GINT_TO_POINTER (_tmp317_), (ValaCCodeExpression*) _tmp319_);
+									_vala_ccode_node_unref0 (_tmp319_);
 								}
-								_tmp234_ = type_param_index;
-								type_param_index = _tmp234_ + 1;
+								_tmp320_ = type_param_index;
+								type_param_index = _tmp320_ + 1;
 								_vala_code_node_unref0 (type_arg);
 							}
 							_vala_iterable_unref0 (_type_arg_list);
@@ -26055,310 +26730,310 @@ static void vala_ccode_base_module_real_visit_object_creation_expression (ValaCo
 				}
 				ellipsis = FALSE;
 				i = 1;
-				_tmp235_ = params;
-				_tmp236_ = vala_iterable_iterator ((ValaIterable*) _tmp235_);
-				params_it = _tmp236_;
+				_tmp321_ = params;
+				_tmp322_ = vala_iterable_iterator ((ValaIterable*) _tmp321_);
+				params_it = _tmp322_;
 				{
-					ValaObjectCreationExpression* _tmp237_;
-					ValaList* _tmp238_ = NULL;
+					ValaObjectCreationExpression* _tmp323_;
+					ValaList* _tmp324_ = NULL;
 					ValaList* _arg_list;
-					ValaList* _tmp239_;
-					gint _tmp240_;
-					gint _tmp241_;
+					ValaList* _tmp325_;
+					gint _tmp326_;
+					gint _tmp327_;
 					gint _arg_size;
 					gint _arg_index;
-					_tmp237_ = expr;
-					_tmp238_ = vala_object_creation_expression_get_argument_list (_tmp237_);
-					_arg_list = _tmp238_;
-					_tmp239_ = _arg_list;
-					_tmp240_ = vala_collection_get_size ((ValaCollection*) _tmp239_);
-					_tmp241_ = _tmp240_;
-					_arg_size = _tmp241_;
+					_tmp323_ = expr;
+					_tmp324_ = vala_object_creation_expression_get_argument_list (_tmp323_);
+					_arg_list = _tmp324_;
+					_tmp325_ = _arg_list;
+					_tmp326_ = vala_collection_get_size ((ValaCollection*) _tmp325_);
+					_tmp327_ = _tmp326_;
+					_arg_size = _tmp327_;
 					_arg_index = -1;
 					while (TRUE) {
-						gint _tmp242_;
-						gint _tmp243_;
-						gint _tmp244_;
-						ValaList* _tmp245_;
-						gint _tmp246_;
-						gpointer _tmp247_ = NULL;
+						gint _tmp328_;
+						gint _tmp329_;
+						gint _tmp330_;
+						ValaList* _tmp331_;
+						gint _tmp332_;
+						gpointer _tmp333_ = NULL;
 						ValaExpression* arg;
-						ValaExpression* _tmp248_;
-						ValaCCodeExpression* _tmp249_ = NULL;
+						ValaExpression* _tmp334_;
+						ValaCCodeExpression* _tmp335_ = NULL;
 						ValaCCodeExpression* cexpr;
 						ValaParameter* param;
-						ValaIterator* _tmp250_;
-						gboolean _tmp251_ = FALSE;
-						ValaHashMap* _tmp366_;
-						gint _tmp367_;
-						ValaCCodeExpression* _tmp368_;
-						gint _tmp369_;
-						_tmp242_ = _arg_index;
-						_arg_index = _tmp242_ + 1;
-						_tmp243_ = _arg_index;
-						_tmp244_ = _arg_size;
-						if (!(_tmp243_ < _tmp244_)) {
+						ValaIterator* _tmp336_;
+						gboolean _tmp337_ = FALSE;
+						ValaHashMap* _tmp452_;
+						gint _tmp453_;
+						ValaCCodeExpression* _tmp454_;
+						gint _tmp455_;
+						_tmp328_ = _arg_index;
+						_arg_index = _tmp328_ + 1;
+						_tmp329_ = _arg_index;
+						_tmp330_ = _arg_size;
+						if (!(_tmp329_ < _tmp330_)) {
 							break;
 						}
-						_tmp245_ = _arg_list;
-						_tmp246_ = _arg_index;
-						_tmp247_ = vala_list_get (_tmp245_, _tmp246_);
-						arg = (ValaExpression*) _tmp247_;
-						_tmp248_ = arg;
-						_tmp249_ = vala_ccode_base_module_get_cvalue (self, _tmp248_);
-						cexpr = _tmp249_;
+						_tmp331_ = _arg_list;
+						_tmp332_ = _arg_index;
+						_tmp333_ = vala_list_get (_tmp331_, _tmp332_);
+						arg = (ValaExpression*) _tmp333_;
+						_tmp334_ = arg;
+						_tmp335_ = vala_ccode_base_module_get_cvalue (self, _tmp334_);
+						cexpr = _tmp335_;
 						param = NULL;
-						_tmp250_ = params_it;
-						_tmp251_ = vala_iterator_next (_tmp250_);
-						if (_tmp251_) {
-							ValaIterator* _tmp252_;
-							gpointer _tmp253_ = NULL;
-							ValaParameter* _tmp254_;
-							gboolean _tmp255_;
-							gboolean _tmp256_;
-							gboolean _tmp257_;
-							ValaParameter* _tmp356_;
-							gdouble _tmp357_ = 0.0;
-							gboolean _tmp358_;
-							gint _tmp359_ = 0;
-							_tmp252_ = params_it;
-							_tmp253_ = vala_iterator_get (_tmp252_);
+						_tmp336_ = params_it;
+						_tmp337_ = vala_iterator_next (_tmp336_);
+						if (_tmp337_) {
+							ValaIterator* _tmp338_;
+							gpointer _tmp339_ = NULL;
+							ValaParameter* _tmp340_;
+							gboolean _tmp341_;
+							gboolean _tmp342_;
+							gboolean _tmp343_;
+							ValaParameter* _tmp442_;
+							gdouble _tmp443_ = 0.0;
+							gboolean _tmp444_;
+							gint _tmp445_ = 0;
+							_tmp338_ = params_it;
+							_tmp339_ = vala_iterator_get (_tmp338_);
 							_vala_code_node_unref0 (param);
-							param = (ValaParameter*) _tmp253_;
-							_tmp254_ = param;
-							_tmp255_ = vala_parameter_get_ellipsis (_tmp254_);
-							_tmp256_ = _tmp255_;
-							ellipsis = _tmp256_;
-							_tmp257_ = ellipsis;
-							if (!_tmp257_) {
-								gboolean _tmp258_ = FALSE;
-								ValaClass* _tmp259_;
-								ValaTypeSymbol* _tmp260_;
-								gboolean _tmp264_;
-								gboolean _tmp283_ = FALSE;
-								ValaParameter* _tmp284_;
-								gboolean _tmp285_ = FALSE;
-								gboolean _tmp289_;
-								ValaParameter* _tmp340_;
-								ValaExpression* _tmp341_;
-								ValaCCodeExpression* _tmp342_;
-								ValaCCodeExpression* _tmp343_ = NULL;
-								ValaParameter* _tmp344_;
-								gchar* _tmp345_ = NULL;
-								gchar* _tmp346_;
-								gboolean _tmp347_;
-								_tmp259_ = cl;
-								_tmp260_ = self->garray_type;
-								if (VALA_TYPESYMBOL (_tmp259_) == _tmp260_) {
-									ValaParameter* _tmp261_;
-									const gchar* _tmp262_;
-									const gchar* _tmp263_;
-									_tmp261_ = param;
-									_tmp262_ = vala_symbol_get_name ((ValaSymbol*) _tmp261_);
-									_tmp263_ = _tmp262_;
-									_tmp258_ = g_strcmp0 (_tmp263_, "element_size") == 0;
+							param = (ValaParameter*) _tmp339_;
+							_tmp340_ = param;
+							_tmp341_ = vala_parameter_get_ellipsis (_tmp340_);
+							_tmp342_ = _tmp341_;
+							ellipsis = _tmp342_;
+							_tmp343_ = ellipsis;
+							if (!_tmp343_) {
+								gboolean _tmp344_ = FALSE;
+								ValaClass* _tmp345_;
+								ValaTypeSymbol* _tmp346_;
+								gboolean _tmp350_;
+								gboolean _tmp369_ = FALSE;
+								ValaParameter* _tmp370_;
+								gboolean _tmp371_ = FALSE;
+								gboolean _tmp375_;
+								ValaParameter* _tmp426_;
+								ValaExpression* _tmp427_;
+								ValaCCodeExpression* _tmp428_;
+								ValaCCodeExpression* _tmp429_ = NULL;
+								ValaParameter* _tmp430_;
+								gchar* _tmp431_ = NULL;
+								gchar* _tmp432_;
+								gboolean _tmp433_;
+								_tmp345_ = cl;
+								_tmp346_ = self->garray_type;
+								if (VALA_TYPESYMBOL (_tmp345_) == _tmp346_) {
+									ValaParameter* _tmp347_;
+									const gchar* _tmp348_;
+									const gchar* _tmp349_;
+									_tmp347_ = param;
+									_tmp348_ = vala_symbol_get_name ((ValaSymbol*) _tmp347_);
+									_tmp349_ = _tmp348_;
+									_tmp344_ = g_strcmp0 (_tmp349_, "element_size") == 0;
 								} else {
-									_tmp258_ = FALSE;
+									_tmp344_ = FALSE;
 								}
-								_tmp264_ = _tmp258_;
-								if (_tmp264_) {
-									ValaCCodeIdentifier* _tmp265_;
-									ValaCCodeIdentifier* _tmp266_;
-									ValaCCodeFunctionCall* _tmp267_;
-									ValaCCodeFunctionCall* _tmp268_;
+								_tmp350_ = _tmp344_;
+								if (_tmp350_) {
+									ValaCCodeIdentifier* _tmp351_;
+									ValaCCodeIdentifier* _tmp352_;
+									ValaCCodeFunctionCall* _tmp353_;
+									ValaCCodeFunctionCall* _tmp354_;
 									ValaCCodeFunctionCall* csizeof;
-									ValaCCodeFunctionCall* _tmp269_;
-									ValaObjectCreationExpression* _tmp270_;
-									ValaDataType* _tmp271_;
-									ValaDataType* _tmp272_;
-									ValaList* _tmp273_ = NULL;
-									ValaList* _tmp274_;
-									gpointer _tmp275_ = NULL;
-									ValaDataType* _tmp276_;
-									gchar* _tmp277_ = NULL;
-									gchar* _tmp278_;
-									ValaCCodeIdentifier* _tmp279_;
-									ValaCCodeIdentifier* _tmp280_;
-									ValaCCodeFunctionCall* _tmp281_;
-									ValaCCodeExpression* _tmp282_;
-									_tmp265_ = vala_ccode_identifier_new ("sizeof");
-									_tmp266_ = _tmp265_;
-									_tmp267_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp266_);
-									_tmp268_ = _tmp267_;
-									_vala_ccode_node_unref0 (_tmp266_);
-									csizeof = _tmp268_;
-									_tmp269_ = csizeof;
-									_tmp270_ = expr;
-									_tmp271_ = vala_object_creation_expression_get_type_reference (_tmp270_);
-									_tmp272_ = _tmp271_;
-									_tmp273_ = vala_data_type_get_type_arguments (_tmp272_);
-									_tmp274_ = _tmp273_;
-									_tmp275_ = vala_list_get (_tmp274_, 0);
-									_tmp276_ = (ValaDataType*) _tmp275_;
-									_tmp277_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp276_);
-									_tmp278_ = _tmp277_;
-									_tmp279_ = vala_ccode_identifier_new (_tmp278_);
-									_tmp280_ = _tmp279_;
-									vala_ccode_function_call_add_argument (_tmp269_, (ValaCCodeExpression*) _tmp280_);
-									_vala_ccode_node_unref0 (_tmp280_);
-									_g_free0 (_tmp278_);
-									_vala_code_node_unref0 (_tmp276_);
-									_vala_iterable_unref0 (_tmp274_);
-									_tmp281_ = csizeof;
-									_tmp282_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp281_);
+									ValaCCodeFunctionCall* _tmp355_;
+									ValaObjectCreationExpression* _tmp356_;
+									ValaDataType* _tmp357_;
+									ValaDataType* _tmp358_;
+									ValaList* _tmp359_ = NULL;
+									ValaList* _tmp360_;
+									gpointer _tmp361_ = NULL;
+									ValaDataType* _tmp362_;
+									gchar* _tmp363_ = NULL;
+									gchar* _tmp364_;
+									ValaCCodeIdentifier* _tmp365_;
+									ValaCCodeIdentifier* _tmp366_;
+									ValaCCodeFunctionCall* _tmp367_;
+									ValaCCodeExpression* _tmp368_;
+									_tmp351_ = vala_ccode_identifier_new ("sizeof");
+									_tmp352_ = _tmp351_;
+									_tmp353_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp352_);
+									_tmp354_ = _tmp353_;
+									_vala_ccode_node_unref0 (_tmp352_);
+									csizeof = _tmp354_;
+									_tmp355_ = csizeof;
+									_tmp356_ = expr;
+									_tmp357_ = vala_object_creation_expression_get_type_reference (_tmp356_);
+									_tmp358_ = _tmp357_;
+									_tmp359_ = vala_data_type_get_type_arguments (_tmp358_);
+									_tmp360_ = _tmp359_;
+									_tmp361_ = vala_list_get (_tmp360_, 0);
+									_tmp362_ = (ValaDataType*) _tmp361_;
+									_tmp363_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp362_);
+									_tmp364_ = _tmp363_;
+									_tmp365_ = vala_ccode_identifier_new (_tmp364_);
+									_tmp366_ = _tmp365_;
+									vala_ccode_function_call_add_argument (_tmp355_, (ValaCCodeExpression*) _tmp366_);
+									_vala_ccode_node_unref0 (_tmp366_);
+									_g_free0 (_tmp364_);
+									_vala_code_node_unref0 (_tmp362_);
+									_vala_iterable_unref0 (_tmp360_);
+									_tmp367_ = csizeof;
+									_tmp368_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp367_);
 									_vala_ccode_node_unref0 (cexpr);
-									cexpr = _tmp282_;
+									cexpr = _tmp368_;
 									_vala_ccode_node_unref0 (csizeof);
 								}
-								_tmp284_ = param;
-								_tmp285_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp284_);
-								if (_tmp285_) {
-									ValaParameter* _tmp286_;
-									ValaDataType* _tmp287_;
-									ValaDataType* _tmp288_;
-									_tmp286_ = param;
-									_tmp287_ = vala_variable_get_variable_type ((ValaVariable*) _tmp286_);
-									_tmp288_ = _tmp287_;
-									_tmp283_ = VALA_IS_ARRAY_TYPE (_tmp288_);
+								_tmp370_ = param;
+								_tmp371_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp370_);
+								if (_tmp371_) {
+									ValaParameter* _tmp372_;
+									ValaDataType* _tmp373_;
+									ValaDataType* _tmp374_;
+									_tmp372_ = param;
+									_tmp373_ = vala_variable_get_variable_type ((ValaVariable*) _tmp372_);
+									_tmp374_ = _tmp373_;
+									_tmp369_ = VALA_IS_ARRAY_TYPE (_tmp374_);
 								} else {
-									_tmp283_ = FALSE;
+									_tmp369_ = FALSE;
 								}
-								_tmp289_ = _tmp283_;
-								if (_tmp289_) {
-									ValaParameter* _tmp290_;
-									ValaDataType* _tmp291_;
-									ValaDataType* _tmp292_;
-									ValaArrayType* _tmp293_;
+								_tmp375_ = _tmp369_;
+								if (_tmp375_) {
+									ValaParameter* _tmp376_;
+									ValaDataType* _tmp377_;
+									ValaDataType* _tmp378_;
+									ValaArrayType* _tmp379_;
 									ValaArrayType* array_type;
-									_tmp290_ = param;
-									_tmp291_ = vala_variable_get_variable_type ((ValaVariable*) _tmp290_);
-									_tmp292_ = _tmp291_;
-									_tmp293_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp292_));
-									array_type = _tmp293_;
+									_tmp376_ = param;
+									_tmp377_ = vala_variable_get_variable_type ((ValaVariable*) _tmp376_);
+									_tmp378_ = _tmp377_;
+									_tmp379_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp378_));
+									array_type = _tmp379_;
 									{
 										gint dim;
 										dim = 1;
 										{
-											gboolean _tmp294_;
-											_tmp294_ = TRUE;
+											gboolean _tmp380_;
+											_tmp380_ = TRUE;
 											while (TRUE) {
-												gboolean _tmp295_;
-												gint _tmp297_;
-												ValaArrayType* _tmp298_;
-												gint _tmp299_;
-												gint _tmp300_;
-												ValaHashMap* _tmp301_;
-												ValaParameter* _tmp302_;
-												gdouble _tmp303_ = 0.0;
-												gint _tmp304_;
-												gint _tmp305_ = 0;
-												ValaExpression* _tmp306_;
-												gint _tmp307_;
-												ValaCCodeExpression* _tmp308_ = NULL;
-												ValaCCodeExpression* _tmp309_;
-												_tmp295_ = _tmp294_;
-												if (!_tmp295_) {
-													gint _tmp296_;
-													_tmp296_ = dim;
-													dim = _tmp296_ + 1;
+												gboolean _tmp381_;
+												gint _tmp383_;
+												ValaArrayType* _tmp384_;
+												gint _tmp385_;
+												gint _tmp386_;
+												ValaHashMap* _tmp387_;
+												ValaParameter* _tmp388_;
+												gdouble _tmp389_ = 0.0;
+												gint _tmp390_;
+												gint _tmp391_ = 0;
+												ValaExpression* _tmp392_;
+												gint _tmp393_;
+												ValaCCodeExpression* _tmp394_ = NULL;
+												ValaCCodeExpression* _tmp395_;
+												_tmp381_ = _tmp380_;
+												if (!_tmp381_) {
+													gint _tmp382_;
+													_tmp382_ = dim;
+													dim = _tmp382_ + 1;
 												}
-												_tmp294_ = FALSE;
-												_tmp297_ = dim;
-												_tmp298_ = array_type;
-												_tmp299_ = vala_array_type_get_rank (_tmp298_);
-												_tmp300_ = _tmp299_;
-												if (!(_tmp297_ <= _tmp300_)) {
+												_tmp380_ = FALSE;
+												_tmp383_ = dim;
+												_tmp384_ = array_type;
+												_tmp385_ = vala_array_type_get_rank (_tmp384_);
+												_tmp386_ = _tmp385_;
+												if (!(_tmp383_ <= _tmp386_)) {
 													break;
 												}
-												_tmp301_ = carg_map;
-												_tmp302_ = param;
-												_tmp303_ = vala_ccode_base_module_get_ccode_array_length_pos ((ValaCodeNode*) _tmp302_);
-												_tmp304_ = dim;
-												_tmp305_ = vala_ccode_base_module_get_param_pos (self, _tmp303_ + (0.01 * _tmp304_), FALSE);
-												_tmp306_ = arg;
-												_tmp307_ = dim;
-												_tmp308_ = vala_ccode_base_module_get_array_length_cexpression (self, _tmp306_, _tmp307_);
-												_tmp309_ = _tmp308_;
-												vala_map_set ((ValaMap*) _tmp301_, GINT_TO_POINTER (_tmp305_), _tmp309_);
-												_vala_ccode_node_unref0 (_tmp309_);
+												_tmp387_ = carg_map;
+												_tmp388_ = param;
+												_tmp389_ = vala_ccode_base_module_get_ccode_array_length_pos ((ValaCodeNode*) _tmp388_);
+												_tmp390_ = dim;
+												_tmp391_ = vala_ccode_base_module_get_param_pos (self, _tmp389_ + (0.01 * _tmp390_), FALSE);
+												_tmp392_ = arg;
+												_tmp393_ = dim;
+												_tmp394_ = vala_ccode_base_module_get_array_length_cexpression (self, _tmp392_, _tmp393_);
+												_tmp395_ = _tmp394_;
+												vala_map_set ((ValaMap*) _tmp387_, GINT_TO_POINTER (_tmp391_), _tmp395_);
+												_vala_ccode_node_unref0 (_tmp395_);
 											}
 										}
 									}
 									_vala_code_node_unref0 (array_type);
 								} else {
-									ValaParameter* _tmp310_;
-									ValaDataType* _tmp311_;
-									ValaDataType* _tmp312_;
-									_tmp310_ = param;
-									_tmp311_ = vala_variable_get_variable_type ((ValaVariable*) _tmp310_);
-									_tmp312_ = _tmp311_;
-									if (VALA_IS_DELEGATE_TYPE (_tmp312_)) {
-										ValaParameter* _tmp313_;
-										ValaDataType* _tmp314_;
-										ValaDataType* _tmp315_;
-										ValaDelegateType* _tmp316_;
+									ValaParameter* _tmp396_;
+									ValaDataType* _tmp397_;
+									ValaDataType* _tmp398_;
+									_tmp396_ = param;
+									_tmp397_ = vala_variable_get_variable_type ((ValaVariable*) _tmp396_);
+									_tmp398_ = _tmp397_;
+									if (VALA_IS_DELEGATE_TYPE (_tmp398_)) {
+										ValaParameter* _tmp399_;
+										ValaDataType* _tmp400_;
+										ValaDataType* _tmp401_;
+										ValaDelegateType* _tmp402_;
 										ValaDelegateType* deleg_type;
-										ValaDelegateType* _tmp317_;
-										ValaDelegate* _tmp318_;
-										ValaDelegate* _tmp319_;
-										ValaDelegate* _tmp320_;
+										ValaDelegateType* _tmp403_;
+										ValaDelegate* _tmp404_;
+										ValaDelegate* _tmp405_;
+										ValaDelegate* _tmp406_;
 										ValaDelegate* d;
-										ValaDelegate* _tmp321_;
-										gboolean _tmp322_;
-										gboolean _tmp323_;
-										_tmp313_ = param;
-										_tmp314_ = vala_variable_get_variable_type ((ValaVariable*) _tmp313_);
-										_tmp315_ = _tmp314_;
-										_tmp316_ = _vala_code_node_ref0 (VALA_DELEGATE_TYPE (_tmp315_));
-										deleg_type = _tmp316_;
-										_tmp317_ = deleg_type;
-										_tmp318_ = vala_delegate_type_get_delegate_symbol (_tmp317_);
-										_tmp319_ = _tmp318_;
-										_tmp320_ = _vala_code_node_ref0 (_tmp319_);
-										d = _tmp320_;
-										_tmp321_ = d;
-										_tmp322_ = vala_delegate_get_has_target (_tmp321_);
-										_tmp323_ = _tmp322_;
-										if (_tmp323_) {
+										ValaDelegate* _tmp407_;
+										gboolean _tmp408_;
+										gboolean _tmp409_;
+										_tmp399_ = param;
+										_tmp400_ = vala_variable_get_variable_type ((ValaVariable*) _tmp399_);
+										_tmp401_ = _tmp400_;
+										_tmp402_ = _vala_code_node_ref0 (VALA_DELEGATE_TYPE (_tmp401_));
+										deleg_type = _tmp402_;
+										_tmp403_ = deleg_type;
+										_tmp404_ = vala_delegate_type_get_delegate_symbol (_tmp403_);
+										_tmp405_ = _tmp404_;
+										_tmp406_ = _vala_code_node_ref0 (_tmp405_);
+										d = _tmp406_;
+										_tmp407_ = d;
+										_tmp408_ = vala_delegate_get_has_target (_tmp407_);
+										_tmp409_ = _tmp408_;
+										if (_tmp409_) {
 											ValaCCodeExpression* delegate_target_destroy_notify = NULL;
-											ValaExpression* _tmp324_;
-											ValaCCodeExpression* _tmp325_ = NULL;
-											ValaCCodeExpression* _tmp326_ = NULL;
+											ValaExpression* _tmp410_;
+											ValaCCodeExpression* _tmp411_ = NULL;
+											ValaCCodeExpression* _tmp412_ = NULL;
 											ValaCCodeExpression* delegate_target;
-											ValaHashMap* _tmp327_;
-											ValaParameter* _tmp328_;
-											gdouble _tmp329_ = 0.0;
-											gint _tmp330_ = 0;
-											ValaCCodeExpression* _tmp331_;
-											ValaDelegateType* _tmp332_;
-											gboolean _tmp333_;
-											gboolean _tmp334_;
-											_tmp324_ = arg;
-											_tmp326_ = vala_ccode_base_module_get_delegate_target_cexpression (self, _tmp324_, &_tmp325_);
+											ValaHashMap* _tmp413_;
+											ValaParameter* _tmp414_;
+											gdouble _tmp415_ = 0.0;
+											gint _tmp416_ = 0;
+											ValaCCodeExpression* _tmp417_;
+											ValaDelegateType* _tmp418_;
+											gboolean _tmp419_;
+											gboolean _tmp420_;
+											_tmp410_ = arg;
+											_tmp412_ = vala_ccode_base_module_get_delegate_target_cexpression (self, _tmp410_, &_tmp411_);
 											_vala_ccode_node_unref0 (delegate_target_destroy_notify);
-											delegate_target_destroy_notify = _tmp325_;
-											delegate_target = _tmp326_;
-											_tmp327_ = carg_map;
-											_tmp328_ = param;
-											_tmp329_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp328_);
-											_tmp330_ = vala_ccode_base_module_get_param_pos (self, _tmp329_, FALSE);
-											_tmp331_ = delegate_target;
-											vala_map_set ((ValaMap*) _tmp327_, GINT_TO_POINTER (_tmp330_), _tmp331_);
-											_tmp332_ = deleg_type;
-											_tmp333_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp332_);
-											_tmp334_ = _tmp333_;
-											if (_tmp334_) {
-												ValaHashMap* _tmp335_;
-												ValaParameter* _tmp336_;
-												gdouble _tmp337_ = 0.0;
-												gint _tmp338_ = 0;
-												ValaCCodeExpression* _tmp339_;
-												_tmp335_ = carg_map;
-												_tmp336_ = param;
-												_tmp337_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp336_);
-												_tmp338_ = vala_ccode_base_module_get_param_pos (self, _tmp337_ + 0.01, FALSE);
-												_tmp339_ = delegate_target_destroy_notify;
-												vala_map_set ((ValaMap*) _tmp335_, GINT_TO_POINTER (_tmp338_), _tmp339_);
+											delegate_target_destroy_notify = _tmp411_;
+											delegate_target = _tmp412_;
+											_tmp413_ = carg_map;
+											_tmp414_ = param;
+											_tmp415_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp414_);
+											_tmp416_ = vala_ccode_base_module_get_param_pos (self, _tmp415_, FALSE);
+											_tmp417_ = delegate_target;
+											vala_map_set ((ValaMap*) _tmp413_, GINT_TO_POINTER (_tmp416_), _tmp417_);
+											_tmp418_ = deleg_type;
+											_tmp419_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp418_);
+											_tmp420_ = _tmp419_;
+											if (_tmp420_) {
+												ValaHashMap* _tmp421_;
+												ValaParameter* _tmp422_;
+												gdouble _tmp423_ = 0.0;
+												gint _tmp424_ = 0;
+												ValaCCodeExpression* _tmp425_;
+												_tmp421_ = carg_map;
+												_tmp422_ = param;
+												_tmp423_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp422_);
+												_tmp424_ = vala_ccode_base_module_get_param_pos (self, _tmp423_ + 0.01, FALSE);
+												_tmp425_ = delegate_target_destroy_notify;
+												vala_map_set ((ValaMap*) _tmp421_, GINT_TO_POINTER (_tmp424_), _tmp425_);
 											}
 											_vala_ccode_node_unref0 (delegate_target);
 											_vala_ccode_node_unref0 (delegate_target_destroy_notify);
@@ -26367,70 +27042,70 @@ static void vala_ccode_base_module_real_visit_object_creation_expression (ValaCo
 										_vala_code_node_unref0 (deleg_type);
 									}
 								}
-								_tmp340_ = param;
-								_tmp341_ = arg;
-								_tmp342_ = cexpr;
-								_tmp343_ = vala_ccode_base_module_handle_struct_argument (self, _tmp340_, _tmp341_, _tmp342_);
+								_tmp426_ = param;
+								_tmp427_ = arg;
+								_tmp428_ = cexpr;
+								_tmp429_ = vala_ccode_base_module_handle_struct_argument (self, _tmp426_, _tmp427_, _tmp428_);
 								_vala_ccode_node_unref0 (cexpr);
-								cexpr = _tmp343_;
-								_tmp344_ = param;
-								_tmp345_ = vala_ccode_base_module_get_ccode_type ((ValaCodeNode*) _tmp344_);
-								_tmp346_ = _tmp345_;
-								_tmp347_ = _tmp346_ != NULL;
-								_g_free0 (_tmp346_);
-								if (_tmp347_) {
-									ValaCCodeExpression* _tmp348_;
-									ValaParameter* _tmp349_;
-									gchar* _tmp350_ = NULL;
-									gchar* _tmp351_;
-									ValaCCodeCastExpression* _tmp352_;
-									_tmp348_ = cexpr;
-									_tmp349_ = param;
-									_tmp350_ = vala_ccode_base_module_get_ccode_type ((ValaCodeNode*) _tmp349_);
-									_tmp351_ = _tmp350_;
-									_tmp352_ = vala_ccode_cast_expression_new (_tmp348_, _tmp351_);
+								cexpr = _tmp429_;
+								_tmp430_ = param;
+								_tmp431_ = vala_ccode_base_module_get_ccode_type ((ValaCodeNode*) _tmp430_);
+								_tmp432_ = _tmp431_;
+								_tmp433_ = _tmp432_ != NULL;
+								_g_free0 (_tmp432_);
+								if (_tmp433_) {
+									ValaCCodeExpression* _tmp434_;
+									ValaParameter* _tmp435_;
+									gchar* _tmp436_ = NULL;
+									gchar* _tmp437_;
+									ValaCCodeCastExpression* _tmp438_;
+									_tmp434_ = cexpr;
+									_tmp435_ = param;
+									_tmp436_ = vala_ccode_base_module_get_ccode_type ((ValaCodeNode*) _tmp435_);
+									_tmp437_ = _tmp436_;
+									_tmp438_ = vala_ccode_cast_expression_new (_tmp434_, _tmp437_);
 									_vala_ccode_node_unref0 (cexpr);
-									cexpr = (ValaCCodeExpression*) _tmp352_;
-									_g_free0 (_tmp351_);
+									cexpr = (ValaCCodeExpression*) _tmp438_;
+									_g_free0 (_tmp437_);
 								}
 							} else {
-								ValaExpression* _tmp353_;
-								ValaCCodeExpression* _tmp354_;
-								ValaCCodeExpression* _tmp355_ = NULL;
-								_tmp353_ = arg;
-								_tmp354_ = cexpr;
-								_tmp355_ = vala_ccode_base_module_handle_struct_argument (self, NULL, _tmp353_, _tmp354_);
+								ValaExpression* _tmp439_;
+								ValaCCodeExpression* _tmp440_;
+								ValaCCodeExpression* _tmp441_ = NULL;
+								_tmp439_ = arg;
+								_tmp440_ = cexpr;
+								_tmp441_ = vala_ccode_base_module_handle_struct_argument (self, NULL, _tmp439_, _tmp440_);
 								_vala_ccode_node_unref0 (cexpr);
-								cexpr = _tmp355_;
+								cexpr = _tmp441_;
 							}
-							_tmp356_ = param;
-							_tmp357_ = vala_ccode_base_module_get_ccode_pos (_tmp356_);
-							_tmp358_ = ellipsis;
-							_tmp359_ = vala_ccode_base_module_get_param_pos (self, _tmp357_, _tmp358_);
-							arg_pos = _tmp359_;
+							_tmp442_ = param;
+							_tmp443_ = vala_ccode_base_module_get_ccode_pos (_tmp442_);
+							_tmp444_ = ellipsis;
+							_tmp445_ = vala_ccode_base_module_get_param_pos (self, _tmp443_, _tmp444_);
+							arg_pos = _tmp445_;
 						} else {
-							ValaExpression* _tmp360_;
-							ValaCCodeExpression* _tmp361_;
-							ValaCCodeExpression* _tmp362_ = NULL;
-							gint _tmp363_;
-							gboolean _tmp364_;
-							gint _tmp365_ = 0;
-							_tmp360_ = arg;
-							_tmp361_ = cexpr;
-							_tmp362_ = vala_ccode_base_module_handle_struct_argument (self, NULL, _tmp360_, _tmp361_);
+							ValaExpression* _tmp446_;
+							ValaCCodeExpression* _tmp447_;
+							ValaCCodeExpression* _tmp448_ = NULL;
+							gint _tmp449_;
+							gboolean _tmp450_;
+							gint _tmp451_ = 0;
+							_tmp446_ = arg;
+							_tmp447_ = cexpr;
+							_tmp448_ = vala_ccode_base_module_handle_struct_argument (self, NULL, _tmp446_, _tmp447_);
 							_vala_ccode_node_unref0 (cexpr);
-							cexpr = _tmp362_;
-							_tmp363_ = i;
-							_tmp364_ = ellipsis;
-							_tmp365_ = vala_ccode_base_module_get_param_pos (self, (gdouble) _tmp363_, _tmp364_);
-							arg_pos = _tmp365_;
+							cexpr = _tmp448_;
+							_tmp449_ = i;
+							_tmp450_ = ellipsis;
+							_tmp451_ = vala_ccode_base_module_get_param_pos (self, (gdouble) _tmp449_, _tmp450_);
+							arg_pos = _tmp451_;
 						}
-						_tmp366_ = carg_map;
-						_tmp367_ = arg_pos;
-						_tmp368_ = cexpr;
-						vala_map_set ((ValaMap*) _tmp366_, GINT_TO_POINTER (_tmp367_), _tmp368_);
-						_tmp369_ = i;
-						i = _tmp369_ + 1;
+						_tmp452_ = carg_map;
+						_tmp453_ = arg_pos;
+						_tmp454_ = cexpr;
+						vala_map_set ((ValaMap*) _tmp452_, GINT_TO_POINTER (_tmp453_), _tmp454_);
+						_tmp455_ = i;
+						i = _tmp455_ + 1;
 						_vala_code_node_unref0 (param);
 						_vala_ccode_node_unref0 (cexpr);
 						_vala_code_node_unref0 (arg);
@@ -26438,64 +27113,64 @@ static void vala_ccode_base_module_real_visit_object_creation_expression (ValaCo
 					_vala_iterable_unref0 (_arg_list);
 				}
 				while (TRUE) {
-					ValaIterator* _tmp370_;
-					gboolean _tmp371_ = FALSE;
-					ValaIterator* _tmp372_;
-					gpointer _tmp373_ = NULL;
+					ValaIterator* _tmp456_;
+					gboolean _tmp457_ = FALSE;
+					ValaIterator* _tmp458_;
+					gpointer _tmp459_ = NULL;
 					ValaParameter* param;
-					ValaParameter* _tmp374_;
-					gboolean _tmp375_;
-					gboolean _tmp376_;
-					ValaParameter* _tmp377_;
-					ValaExpression* _tmp378_;
-					ValaExpression* _tmp379_;
-					ValaParameter* _tmp386_;
-					ValaExpression* _tmp387_;
-					ValaExpression* _tmp388_;
-					ValaHashMap* _tmp389_;
-					ValaParameter* _tmp390_;
-					gdouble _tmp391_ = 0.0;
-					gint _tmp392_ = 0;
-					ValaParameter* _tmp393_;
-					ValaExpression* _tmp394_;
-					ValaExpression* _tmp395_;
-					ValaCCodeExpression* _tmp396_ = NULL;
-					ValaCCodeExpression* _tmp397_;
-					gint _tmp398_;
-					_tmp370_ = params_it;
-					_tmp371_ = vala_iterator_next (_tmp370_);
-					if (!_tmp371_) {
+					ValaParameter* _tmp460_;
+					gboolean _tmp461_;
+					gboolean _tmp462_;
+					ValaParameter* _tmp463_;
+					ValaExpression* _tmp464_;
+					ValaExpression* _tmp465_;
+					ValaParameter* _tmp472_;
+					ValaExpression* _tmp473_;
+					ValaExpression* _tmp474_;
+					ValaHashMap* _tmp475_;
+					ValaParameter* _tmp476_;
+					gdouble _tmp477_ = 0.0;
+					gint _tmp478_ = 0;
+					ValaParameter* _tmp479_;
+					ValaExpression* _tmp480_;
+					ValaExpression* _tmp481_;
+					ValaCCodeExpression* _tmp482_ = NULL;
+					ValaCCodeExpression* _tmp483_;
+					gint _tmp484_;
+					_tmp456_ = params_it;
+					_tmp457_ = vala_iterator_next (_tmp456_);
+					if (!_tmp457_) {
 						break;
 					}
-					_tmp372_ = params_it;
-					_tmp373_ = vala_iterator_get (_tmp372_);
-					param = (ValaParameter*) _tmp373_;
-					_tmp374_ = param;
-					_tmp375_ = vala_parameter_get_ellipsis (_tmp374_);
-					_tmp376_ = _tmp375_;
-					if (_tmp376_) {
+					_tmp458_ = params_it;
+					_tmp459_ = vala_iterator_get (_tmp458_);
+					param = (ValaParameter*) _tmp459_;
+					_tmp460_ = param;
+					_tmp461_ = vala_parameter_get_ellipsis (_tmp460_);
+					_tmp462_ = _tmp461_;
+					if (_tmp462_) {
 						ellipsis = TRUE;
 						_vala_code_node_unref0 (param);
 						break;
 					}
-					_tmp377_ = param;
-					_tmp378_ = vala_variable_get_initializer ((ValaVariable*) _tmp377_);
-					_tmp379_ = _tmp378_;
-					if (_tmp379_ == NULL) {
-						ValaObjectCreationExpression* _tmp380_;
-						ValaSourceReference* _tmp381_;
-						ValaSourceReference* _tmp382_;
-						gint _tmp383_;
-						gchar* _tmp384_ = NULL;
-						gchar* _tmp385_;
-						_tmp380_ = expr;
-						_tmp381_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp380_);
-						_tmp382_ = _tmp381_;
-						_tmp383_ = i;
-						_tmp384_ = g_strdup_printf ("no default expression for argument %d", _tmp383_);
-						_tmp385_ = _tmp384_;
-						vala_report_error (_tmp382_, _tmp385_);
-						_g_free0 (_tmp385_);
+					_tmp463_ = param;
+					_tmp464_ = vala_variable_get_initializer ((ValaVariable*) _tmp463_);
+					_tmp465_ = _tmp464_;
+					if (_tmp465_ == NULL) {
+						ValaObjectCreationExpression* _tmp466_;
+						ValaSourceReference* _tmp467_;
+						ValaSourceReference* _tmp468_;
+						gint _tmp469_;
+						gchar* _tmp470_ = NULL;
+						gchar* _tmp471_;
+						_tmp466_ = expr;
+						_tmp467_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp466_);
+						_tmp468_ = _tmp467_;
+						_tmp469_ = i;
+						_tmp470_ = g_strdup_printf ("no default expression for argument %d", _tmp469_);
+						_tmp471_ = _tmp470_;
+						vala_report_error (_tmp468_, _tmp471_);
+						_g_free0 (_tmp471_);
 						_vala_code_node_unref0 (param);
 						_vala_iterator_unref0 (params_it);
 						_vala_map_unref0 (carg_map);
@@ -26508,245 +27183,245 @@ static void vala_ccode_base_module_real_visit_object_creation_expression (ValaCo
 						_vala_ccode_node_unref0 (instance);
 						return;
 					}
-					_tmp386_ = param;
-					_tmp387_ = vala_variable_get_initializer ((ValaVariable*) _tmp386_);
-					_tmp388_ = _tmp387_;
-					vala_code_node_emit ((ValaCodeNode*) _tmp388_, (ValaCodeGenerator*) self);
-					_tmp389_ = carg_map;
-					_tmp390_ = param;
-					_tmp391_ = vala_ccode_base_module_get_ccode_pos (_tmp390_);
-					_tmp392_ = vala_ccode_base_module_get_param_pos (self, _tmp391_, FALSE);
-					_tmp393_ = param;
-					_tmp394_ = vala_variable_get_initializer ((ValaVariable*) _tmp393_);
-					_tmp395_ = _tmp394_;
-					_tmp396_ = vala_ccode_base_module_get_cvalue (self, _tmp395_);
-					_tmp397_ = _tmp396_;
-					vala_map_set ((ValaMap*) _tmp389_, GINT_TO_POINTER (_tmp392_), _tmp397_);
-					_vala_ccode_node_unref0 (_tmp397_);
-					_tmp398_ = i;
-					i = _tmp398_ + 1;
+					_tmp472_ = param;
+					_tmp473_ = vala_variable_get_initializer ((ValaVariable*) _tmp472_);
+					_tmp474_ = _tmp473_;
+					vala_code_node_emit ((ValaCodeNode*) _tmp474_, (ValaCodeGenerator*) self);
+					_tmp475_ = carg_map;
+					_tmp476_ = param;
+					_tmp477_ = vala_ccode_base_module_get_ccode_pos (_tmp476_);
+					_tmp478_ = vala_ccode_base_module_get_param_pos (self, _tmp477_, FALSE);
+					_tmp479_ = param;
+					_tmp480_ = vala_variable_get_initializer ((ValaVariable*) _tmp479_);
+					_tmp481_ = _tmp480_;
+					_tmp482_ = vala_ccode_base_module_get_cvalue (self, _tmp481_);
+					_tmp483_ = _tmp482_;
+					vala_map_set ((ValaMap*) _tmp475_, GINT_TO_POINTER (_tmp478_), _tmp483_);
+					_vala_ccode_node_unref0 (_tmp483_);
+					_tmp484_ = i;
+					i = _tmp484_ + 1;
 					_vala_code_node_unref0 (param);
 				}
 				last_pos = -1;
 				while (TRUE) {
-					gint _tmp418_;
-					ValaCCodeFunctionCall* _tmp419_;
-					ValaHashMap* _tmp420_;
-					gint _tmp421_;
-					gpointer _tmp422_ = NULL;
-					ValaCCodeExpression* _tmp423_;
-					gint _tmp424_;
+					gint _tmp504_;
+					ValaCCodeFunctionCall* _tmp505_;
+					ValaHashMap* _tmp506_;
+					gint _tmp507_;
+					gpointer _tmp508_ = NULL;
+					ValaCCodeExpression* _tmp509_;
+					gint _tmp510_;
 					min_pos = -1;
 					{
-						ValaHashMap* _tmp399_;
-						ValaSet* _tmp400_ = NULL;
-						ValaSet* _tmp401_;
-						ValaIterator* _tmp402_ = NULL;
-						ValaIterator* _tmp403_;
+						ValaHashMap* _tmp485_;
+						ValaSet* _tmp486_ = NULL;
+						ValaSet* _tmp487_;
+						ValaIterator* _tmp488_ = NULL;
+						ValaIterator* _tmp489_;
 						ValaIterator* _pos_it;
-						_tmp399_ = carg_map;
-						_tmp400_ = vala_map_get_keys ((ValaMap*) _tmp399_);
-						_tmp401_ = _tmp400_;
-						_tmp402_ = vala_iterable_iterator ((ValaIterable*) _tmp401_);
-						_tmp403_ = _tmp402_;
-						_vala_iterable_unref0 (_tmp401_);
-						_pos_it = _tmp403_;
+						_tmp485_ = carg_map;
+						_tmp486_ = vala_map_get_keys ((ValaMap*) _tmp485_);
+						_tmp487_ = _tmp486_;
+						_tmp488_ = vala_iterable_iterator ((ValaIterable*) _tmp487_);
+						_tmp489_ = _tmp488_;
+						_vala_iterable_unref0 (_tmp487_);
+						_pos_it = _tmp489_;
 						while (TRUE) {
-							ValaIterator* _tmp404_;
-							gboolean _tmp405_ = FALSE;
-							ValaIterator* _tmp406_;
-							gpointer _tmp407_ = NULL;
+							ValaIterator* _tmp490_;
+							gboolean _tmp491_ = FALSE;
+							ValaIterator* _tmp492_;
+							gpointer _tmp493_ = NULL;
 							gint pos;
-							gboolean _tmp408_ = FALSE;
-							gint _tmp409_;
-							gint _tmp410_;
-							gboolean _tmp416_;
-							_tmp404_ = _pos_it;
-							_tmp405_ = vala_iterator_next (_tmp404_);
-							if (!_tmp405_) {
+							gboolean _tmp494_ = FALSE;
+							gint _tmp495_;
+							gint _tmp496_;
+							gboolean _tmp502_;
+							_tmp490_ = _pos_it;
+							_tmp491_ = vala_iterator_next (_tmp490_);
+							if (!_tmp491_) {
 								break;
 							}
-							_tmp406_ = _pos_it;
-							_tmp407_ = vala_iterator_get (_tmp406_);
-							pos = GPOINTER_TO_INT (_tmp407_);
-							_tmp409_ = pos;
-							_tmp410_ = last_pos;
-							if (_tmp409_ > _tmp410_) {
-								gboolean _tmp411_ = FALSE;
-								gint _tmp412_;
-								gboolean _tmp415_;
-								_tmp412_ = min_pos;
-								if (_tmp412_ == (-1)) {
-									_tmp411_ = TRUE;
+							_tmp492_ = _pos_it;
+							_tmp493_ = vala_iterator_get (_tmp492_);
+							pos = GPOINTER_TO_INT (_tmp493_);
+							_tmp495_ = pos;
+							_tmp496_ = last_pos;
+							if (_tmp495_ > _tmp496_) {
+								gboolean _tmp497_ = FALSE;
+								gint _tmp498_;
+								gboolean _tmp501_;
+								_tmp498_ = min_pos;
+								if (_tmp498_ == (-1)) {
+									_tmp497_ = TRUE;
 								} else {
-									gint _tmp413_;
-									gint _tmp414_;
-									_tmp413_ = pos;
-									_tmp414_ = min_pos;
-									_tmp411_ = _tmp413_ < _tmp414_;
+									gint _tmp499_;
+									gint _tmp500_;
+									_tmp499_ = pos;
+									_tmp500_ = min_pos;
+									_tmp497_ = _tmp499_ < _tmp500_;
 								}
-								_tmp415_ = _tmp411_;
-								_tmp408_ = _tmp415_;
+								_tmp501_ = _tmp497_;
+								_tmp494_ = _tmp501_;
 							} else {
-								_tmp408_ = FALSE;
+								_tmp494_ = FALSE;
 							}
-							_tmp416_ = _tmp408_;
-							if (_tmp416_) {
-								gint _tmp417_;
-								_tmp417_ = pos;
-								min_pos = _tmp417_;
+							_tmp502_ = _tmp494_;
+							if (_tmp502_) {
+								gint _tmp503_;
+								_tmp503_ = pos;
+								min_pos = _tmp503_;
 							}
 						}
 						_vala_iterator_unref0 (_pos_it);
 					}
-					_tmp418_ = min_pos;
-					if (_tmp418_ == (-1)) {
+					_tmp504_ = min_pos;
+					if (_tmp504_ == (-1)) {
 						break;
 					}
-					_tmp419_ = creation_call;
-					_tmp420_ = carg_map;
-					_tmp421_ = min_pos;
-					_tmp422_ = vala_map_get ((ValaMap*) _tmp420_, GINT_TO_POINTER (_tmp421_));
-					_tmp423_ = (ValaCCodeExpression*) _tmp422_;
-					vala_ccode_function_call_add_argument (_tmp419_, _tmp423_);
-					_vala_ccode_node_unref0 (_tmp423_);
-					_tmp424_ = min_pos;
-					last_pos = _tmp424_;
+					_tmp505_ = creation_call;
+					_tmp506_ = carg_map;
+					_tmp507_ = min_pos;
+					_tmp508_ = vala_map_get ((ValaMap*) _tmp506_, GINT_TO_POINTER (_tmp507_));
+					_tmp509_ = (ValaCCodeExpression*) _tmp508_;
+					vala_ccode_function_call_add_argument (_tmp505_, _tmp509_);
+					_vala_ccode_node_unref0 (_tmp509_);
+					_tmp510_ = min_pos;
+					last_pos = _tmp510_;
 				}
-				_tmp427_ = st;
-				if (_tmp427_ != NULL) {
-					ValaStruct* _tmp428_;
-					gboolean _tmp429_ = FALSE;
-					_tmp428_ = st;
-					_tmp429_ = vala_struct_is_simple_type (_tmp428_);
-					_tmp426_ = !_tmp429_;
+				_tmp513_ = st;
+				if (_tmp513_ != NULL) {
+					ValaStruct* _tmp514_;
+					gboolean _tmp515_ = FALSE;
+					_tmp514_ = st;
+					_tmp515_ = vala_struct_is_simple_type (_tmp514_);
+					_tmp512_ = !_tmp515_;
 				} else {
-					_tmp426_ = FALSE;
+					_tmp512_ = FALSE;
 				}
-				_tmp430_ = _tmp426_;
-				if (_tmp430_) {
-					ValaMethod* _tmp431_;
-					gdouble _tmp432_ = 0.0;
-					_tmp431_ = m;
-					_tmp432_ = vala_ccode_base_module_get_ccode_instance_pos ((ValaCodeNode*) _tmp431_);
-					_tmp425_ = _tmp432_ < ((gdouble) 0);
+				_tmp516_ = _tmp512_;
+				if (_tmp516_) {
+					ValaMethod* _tmp517_;
+					gdouble _tmp518_ = 0.0;
+					_tmp517_ = m;
+					_tmp518_ = vala_ccode_base_module_get_ccode_instance_pos ((ValaCodeNode*) _tmp517_);
+					_tmp511_ = _tmp518_ < ((gdouble) 0);
 				} else {
-					_tmp425_ = FALSE;
+					_tmp511_ = FALSE;
 				}
-				_tmp433_ = _tmp425_;
-				if (_tmp433_) {
-					ValaCCodeFunctionCall* _tmp434_;
-					ValaCCodeExpression* _tmp435_;
-					ValaCCodeUnaryExpression* _tmp436_;
-					ValaCCodeUnaryExpression* _tmp437_;
-					_tmp434_ = creation_call;
-					_tmp435_ = instance;
-					_tmp436_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp435_);
-					_tmp437_ = _tmp436_;
-					vala_ccode_function_call_add_argument (_tmp434_, (ValaCCodeExpression*) _tmp437_);
-					_vala_ccode_node_unref0 (_tmp437_);
+				_tmp519_ = _tmp511_;
+				if (_tmp519_) {
+					ValaCCodeFunctionCall* _tmp520_;
+					ValaCCodeExpression* _tmp521_;
+					ValaCCodeUnaryExpression* _tmp522_;
+					ValaCCodeUnaryExpression* _tmp523_;
+					_tmp520_ = creation_call;
+					_tmp521_ = instance;
+					_tmp522_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp521_);
+					_tmp523_ = _tmp522_;
+					vala_ccode_function_call_add_argument (_tmp520_, (ValaCCodeExpression*) _tmp523_);
+					_vala_ccode_node_unref0 (_tmp523_);
 				}
-				_tmp438_ = expr;
-				_tmp439_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp438_);
-				_tmp440_ = _tmp439_;
-				if (_tmp440_) {
-					ValaCCodeFunctionCall* _tmp441_;
-					ValaCCodeExpression* _tmp442_ = NULL;
-					ValaCCodeExpression* _tmp443_;
-					ValaCCodeUnaryExpression* _tmp444_;
-					ValaCCodeUnaryExpression* _tmp445_;
+				_tmp524_ = expr;
+				_tmp525_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp524_);
+				_tmp526_ = _tmp525_;
+				if (_tmp526_) {
+					ValaCCodeFunctionCall* _tmp527_;
+					ValaCCodeExpression* _tmp528_ = NULL;
+					ValaCCodeExpression* _tmp529_;
+					ValaCCodeUnaryExpression* _tmp530_;
+					ValaCCodeUnaryExpression* _tmp531_;
 					vala_ccode_base_module_set_current_method_inner_error (self, TRUE);
-					_tmp441_ = creation_call;
-					_tmp442_ = vala_ccode_base_module_get_variable_cexpression (self, "_inner_error_");
-					_tmp443_ = _tmp442_;
-					_tmp444_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp443_);
-					_tmp445_ = _tmp444_;
-					vala_ccode_function_call_add_argument (_tmp441_, (ValaCCodeExpression*) _tmp445_);
-					_vala_ccode_node_unref0 (_tmp445_);
-					_vala_ccode_node_unref0 (_tmp443_);
+					_tmp527_ = creation_call;
+					_tmp528_ = vala_ccode_base_module_get_variable_cexpression (self, "_inner_error_");
+					_tmp529_ = _tmp528_;
+					_tmp530_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp529_);
+					_tmp531_ = _tmp530_;
+					vala_ccode_function_call_add_argument (_tmp527_, (ValaCCodeExpression*) _tmp531_);
+					_vala_ccode_node_unref0 (_tmp531_);
+					_vala_ccode_node_unref0 (_tmp529_);
 				}
-				_tmp446_ = ellipsis;
-				if (_tmp446_) {
-					gboolean _tmp447_ = FALSE;
-					gboolean _tmp448_ = FALSE;
-					ValaMethod* _tmp449_;
-					gboolean _tmp450_;
-					gboolean _tmp451_;
-					gboolean _tmp455_;
-					gboolean _tmp459_;
-					_tmp449_ = m;
-					_tmp450_ = vala_method_get_printf_format (_tmp449_);
-					_tmp451_ = _tmp450_;
-					if (!_tmp451_) {
-						ValaMethod* _tmp452_;
-						gboolean _tmp453_;
-						gboolean _tmp454_;
-						_tmp452_ = m;
-						_tmp453_ = vala_method_get_scanf_format (_tmp452_);
-						_tmp454_ = _tmp453_;
-						_tmp448_ = !_tmp454_;
+				_tmp532_ = ellipsis;
+				if (_tmp532_) {
+					gboolean _tmp533_ = FALSE;
+					gboolean _tmp534_ = FALSE;
+					ValaMethod* _tmp535_;
+					gboolean _tmp536_;
+					gboolean _tmp537_;
+					gboolean _tmp541_;
+					gboolean _tmp545_;
+					_tmp535_ = m;
+					_tmp536_ = vala_method_get_printf_format (_tmp535_);
+					_tmp537_ = _tmp536_;
+					if (!_tmp537_) {
+						ValaMethod* _tmp538_;
+						gboolean _tmp539_;
+						gboolean _tmp540_;
+						_tmp538_ = m;
+						_tmp539_ = vala_method_get_scanf_format (_tmp538_);
+						_tmp540_ = _tmp539_;
+						_tmp534_ = !_tmp540_;
 					} else {
-						_tmp448_ = FALSE;
+						_tmp534_ = FALSE;
 					}
-					_tmp455_ = _tmp448_;
-					if (_tmp455_) {
-						ValaMethod* _tmp456_;
-						gchar* _tmp457_ = NULL;
-						gchar* _tmp458_;
-						_tmp456_ = m;
-						_tmp457_ = vala_ccode_base_module_get_ccode_sentinel (_tmp456_);
-						_tmp458_ = _tmp457_;
-						_tmp447_ = g_strcmp0 (_tmp458_, "") != 0;
-						_g_free0 (_tmp458_);
+					_tmp541_ = _tmp534_;
+					if (_tmp541_) {
+						ValaMethod* _tmp542_;
+						gchar* _tmp543_ = NULL;
+						gchar* _tmp544_;
+						_tmp542_ = m;
+						_tmp543_ = vala_ccode_base_module_get_ccode_sentinel (_tmp542_);
+						_tmp544_ = _tmp543_;
+						_tmp533_ = g_strcmp0 (_tmp544_, "") != 0;
+						_g_free0 (_tmp544_);
 					} else {
-						_tmp447_ = FALSE;
+						_tmp533_ = FALSE;
 					}
-					_tmp459_ = _tmp447_;
-					if (_tmp459_) {
-						ValaCCodeFunctionCall* _tmp460_;
-						ValaMethod* _tmp461_;
-						gchar* _tmp462_ = NULL;
-						gchar* _tmp463_;
-						ValaCCodeConstant* _tmp464_;
-						ValaCCodeConstant* _tmp465_;
-						_tmp460_ = creation_call;
-						_tmp461_ = m;
-						_tmp462_ = vala_ccode_base_module_get_ccode_sentinel (_tmp461_);
-						_tmp463_ = _tmp462_;
-						_tmp464_ = vala_ccode_constant_new (_tmp463_);
-						_tmp465_ = _tmp464_;
-						vala_ccode_function_call_add_argument (_tmp460_, (ValaCCodeExpression*) _tmp465_);
-						_vala_ccode_node_unref0 (_tmp465_);
-						_g_free0 (_tmp463_);
+					_tmp545_ = _tmp533_;
+					if (_tmp545_) {
+						ValaCCodeFunctionCall* _tmp546_;
+						ValaMethod* _tmp547_;
+						gchar* _tmp548_ = NULL;
+						gchar* _tmp549_;
+						ValaCCodeConstant* _tmp550_;
+						ValaCCodeConstant* _tmp551_;
+						_tmp546_ = creation_call;
+						_tmp547_ = m;
+						_tmp548_ = vala_ccode_base_module_get_ccode_sentinel (_tmp547_);
+						_tmp549_ = _tmp548_;
+						_tmp550_ = vala_ccode_constant_new (_tmp549_);
+						_tmp551_ = _tmp550_;
+						vala_ccode_function_call_add_argument (_tmp546_, (ValaCCodeExpression*) _tmp551_);
+						_vala_ccode_node_unref0 (_tmp551_);
+						_g_free0 (_tmp549_);
 					}
 				}
-				_tmp466_ = creation_call;
-				_tmp467_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp466_);
+				_tmp552_ = creation_call;
+				_tmp553_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp552_);
 				_vala_ccode_node_unref0 (creation_expr);
-				creation_expr = _tmp467_;
-				_tmp468_ = m;
-				_tmp469_ = vala_ccode_base_module_get_ccode_type ((ValaCodeNode*) _tmp468_);
-				_tmp470_ = _tmp469_;
-				_tmp471_ = _tmp470_ != NULL;
-				_g_free0 (_tmp470_);
-				if (_tmp471_) {
-					ValaCCodeExpression* _tmp472_;
-					ValaObjectCreationExpression* _tmp473_;
-					ValaDataType* _tmp474_;
-					ValaDataType* _tmp475_;
-					gchar* _tmp476_ = NULL;
-					gchar* _tmp477_;
-					ValaCCodeCastExpression* _tmp478_;
-					_tmp472_ = creation_expr;
-					_tmp473_ = expr;
-					_tmp474_ = vala_object_creation_expression_get_type_reference (_tmp473_);
-					_tmp475_ = _tmp474_;
-					_tmp476_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp475_);
-					_tmp477_ = _tmp476_;
-					_tmp478_ = vala_ccode_cast_expression_new (_tmp472_, _tmp477_);
+				creation_expr = _tmp553_;
+				_tmp554_ = m;
+				_tmp555_ = vala_ccode_base_module_get_ccode_type ((ValaCodeNode*) _tmp554_);
+				_tmp556_ = _tmp555_;
+				_tmp557_ = _tmp556_ != NULL;
+				_g_free0 (_tmp556_);
+				if (_tmp557_) {
+					ValaCCodeExpression* _tmp558_;
+					ValaObjectCreationExpression* _tmp559_;
+					ValaDataType* _tmp560_;
+					ValaDataType* _tmp561_;
+					gchar* _tmp562_ = NULL;
+					gchar* _tmp563_;
+					ValaCCodeCastExpression* _tmp564_;
+					_tmp558_ = creation_expr;
+					_tmp559_ = expr;
+					_tmp560_ = vala_object_creation_expression_get_type_reference (_tmp559_);
+					_tmp561_ = _tmp560_;
+					_tmp562_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp561_);
+					_tmp563_ = _tmp562_;
+					_tmp564_ = vala_ccode_cast_expression_new (_tmp558_, _tmp563_);
 					_vala_ccode_node_unref0 (creation_expr);
-					creation_expr = (ValaCCodeExpression*) _tmp478_;
-					_g_free0 (_tmp477_);
+					creation_expr = (ValaCCodeExpression*) _tmp564_;
+					_g_free0 (_tmp563_);
 				}
 				_vala_iterator_unref0 (params_it);
 				_vala_map_unref0 (carg_map);
@@ -26755,159 +27430,159 @@ static void vala_ccode_base_module_real_visit_object_creation_expression (ValaCo
 				_vala_iterable_unref0 (params);
 				_vala_code_node_unref0 (m);
 			} else {
-				ValaObjectCreationExpression* _tmp479_;
-				ValaSymbol* _tmp480_;
-				ValaSymbol* _tmp481_;
-				_tmp479_ = expr;
-				_tmp480_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp479_);
-				_tmp481_ = _tmp480_;
-				if (VALA_IS_ERROR_CODE (_tmp481_)) {
-					ValaObjectCreationExpression* _tmp482_;
-					ValaSymbol* _tmp483_;
-					ValaSymbol* _tmp484_;
-					ValaErrorCode* _tmp485_;
+				ValaObjectCreationExpression* _tmp565_;
+				ValaSymbol* _tmp566_;
+				ValaSymbol* _tmp567_;
+				_tmp565_ = expr;
+				_tmp566_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp565_);
+				_tmp567_ = _tmp566_;
+				if (VALA_IS_ERROR_CODE (_tmp567_)) {
+					ValaObjectCreationExpression* _tmp568_;
+					ValaSymbol* _tmp569_;
+					ValaSymbol* _tmp570_;
+					ValaErrorCode* _tmp571_;
 					ValaErrorCode* ecode;
-					ValaErrorCode* _tmp486_;
-					ValaSymbol* _tmp487_;
-					ValaSymbol* _tmp488_;
-					ValaErrorDomain* _tmp489_;
+					ValaErrorCode* _tmp572_;
+					ValaSymbol* _tmp573_;
+					ValaSymbol* _tmp574_;
+					ValaErrorDomain* _tmp575_;
 					ValaErrorDomain* edomain;
 					ValaCCodeFunctionCall* creation_call = NULL;
-					ValaErrorDomain* _tmp490_;
-					ValaCCodeFile* _tmp491_;
-					ValaObjectCreationExpression* _tmp492_;
-					ValaList* _tmp493_ = NULL;
-					ValaList* _tmp494_;
-					gint _tmp495_;
-					gint _tmp496_;
-					gboolean _tmp497_;
-					ValaCCodeFunctionCall* _tmp504_;
-					ValaErrorDomain* _tmp505_;
-					gchar* _tmp506_ = NULL;
-					gchar* _tmp507_;
-					ValaCCodeIdentifier* _tmp508_;
-					ValaCCodeIdentifier* _tmp509_;
-					ValaCCodeFunctionCall* _tmp510_;
-					ValaErrorCode* _tmp511_;
-					gchar* _tmp512_ = NULL;
-					gchar* _tmp513_;
-					ValaCCodeIdentifier* _tmp514_;
-					ValaCCodeIdentifier* _tmp515_;
-					ValaCCodeFunctionCall* _tmp531_;
-					ValaCCodeExpression* _tmp532_;
-					_tmp482_ = expr;
-					_tmp483_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp482_);
-					_tmp484_ = _tmp483_;
-					_tmp485_ = _vala_code_node_ref0 (VALA_ERROR_CODE (_tmp484_));
-					ecode = _tmp485_;
-					_tmp486_ = ecode;
-					_tmp487_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp486_);
-					_tmp488_ = _tmp487_;
-					_tmp489_ = _vala_code_node_ref0 (VALA_ERROR_DOMAIN (_tmp488_));
-					edomain = _tmp489_;
-					_tmp490_ = edomain;
-					_tmp491_ = self->cfile;
-					vala_ccode_base_module_generate_error_domain_declaration (self, _tmp490_, _tmp491_);
-					_tmp492_ = expr;
-					_tmp493_ = vala_object_creation_expression_get_argument_list (_tmp492_);
-					_tmp494_ = _tmp493_;
-					_tmp495_ = vala_collection_get_size ((ValaCollection*) _tmp494_);
-					_tmp496_ = _tmp495_;
-					_tmp497_ = _tmp496_ == 1;
-					_vala_iterable_unref0 (_tmp494_);
-					if (_tmp497_) {
-						ValaCCodeIdentifier* _tmp498_;
-						ValaCCodeIdentifier* _tmp499_;
-						ValaCCodeFunctionCall* _tmp500_;
-						_tmp498_ = vala_ccode_identifier_new ("g_error_new_literal");
-						_tmp499_ = _tmp498_;
-						_tmp500_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp499_);
+					ValaErrorDomain* _tmp576_;
+					ValaCCodeFile* _tmp577_;
+					ValaObjectCreationExpression* _tmp578_;
+					ValaList* _tmp579_ = NULL;
+					ValaList* _tmp580_;
+					gint _tmp581_;
+					gint _tmp582_;
+					gboolean _tmp583_;
+					ValaCCodeFunctionCall* _tmp590_;
+					ValaErrorDomain* _tmp591_;
+					gchar* _tmp592_ = NULL;
+					gchar* _tmp593_;
+					ValaCCodeIdentifier* _tmp594_;
+					ValaCCodeIdentifier* _tmp595_;
+					ValaCCodeFunctionCall* _tmp596_;
+					ValaErrorCode* _tmp597_;
+					gchar* _tmp598_ = NULL;
+					gchar* _tmp599_;
+					ValaCCodeIdentifier* _tmp600_;
+					ValaCCodeIdentifier* _tmp601_;
+					ValaCCodeFunctionCall* _tmp617_;
+					ValaCCodeExpression* _tmp618_;
+					_tmp568_ = expr;
+					_tmp569_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp568_);
+					_tmp570_ = _tmp569_;
+					_tmp571_ = _vala_code_node_ref0 (VALA_ERROR_CODE (_tmp570_));
+					ecode = _tmp571_;
+					_tmp572_ = ecode;
+					_tmp573_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp572_);
+					_tmp574_ = _tmp573_;
+					_tmp575_ = _vala_code_node_ref0 (VALA_ERROR_DOMAIN (_tmp574_));
+					edomain = _tmp575_;
+					_tmp576_ = edomain;
+					_tmp577_ = self->cfile;
+					vala_ccode_base_module_generate_error_domain_declaration (self, _tmp576_, _tmp577_);
+					_tmp578_ = expr;
+					_tmp579_ = vala_object_creation_expression_get_argument_list (_tmp578_);
+					_tmp580_ = _tmp579_;
+					_tmp581_ = vala_collection_get_size ((ValaCollection*) _tmp580_);
+					_tmp582_ = _tmp581_;
+					_tmp583_ = _tmp582_ == 1;
+					_vala_iterable_unref0 (_tmp580_);
+					if (_tmp583_) {
+						ValaCCodeIdentifier* _tmp584_;
+						ValaCCodeIdentifier* _tmp585_;
+						ValaCCodeFunctionCall* _tmp586_;
+						_tmp584_ = vala_ccode_identifier_new ("g_error_new_literal");
+						_tmp585_ = _tmp584_;
+						_tmp586_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp585_);
 						_vala_ccode_node_unref0 (creation_call);
-						creation_call = _tmp500_;
-						_vala_ccode_node_unref0 (_tmp499_);
+						creation_call = _tmp586_;
+						_vala_ccode_node_unref0 (_tmp585_);
 					} else {
-						ValaCCodeIdentifier* _tmp501_;
-						ValaCCodeIdentifier* _tmp502_;
-						ValaCCodeFunctionCall* _tmp503_;
-						_tmp501_ = vala_ccode_identifier_new ("g_error_new");
-						_tmp502_ = _tmp501_;
-						_tmp503_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp502_);
+						ValaCCodeIdentifier* _tmp587_;
+						ValaCCodeIdentifier* _tmp588_;
+						ValaCCodeFunctionCall* _tmp589_;
+						_tmp587_ = vala_ccode_identifier_new ("g_error_new");
+						_tmp588_ = _tmp587_;
+						_tmp589_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp588_);
 						_vala_ccode_node_unref0 (creation_call);
-						creation_call = _tmp503_;
-						_vala_ccode_node_unref0 (_tmp502_);
+						creation_call = _tmp589_;
+						_vala_ccode_node_unref0 (_tmp588_);
 					}
-					_tmp504_ = creation_call;
-					_tmp505_ = edomain;
-					_tmp506_ = vala_ccode_base_module_get_ccode_upper_case_name ((ValaSymbol*) _tmp505_, NULL);
-					_tmp507_ = _tmp506_;
-					_tmp508_ = vala_ccode_identifier_new (_tmp507_);
-					_tmp509_ = _tmp508_;
-					vala_ccode_function_call_add_argument (_tmp504_, (ValaCCodeExpression*) _tmp509_);
-					_vala_ccode_node_unref0 (_tmp509_);
-					_g_free0 (_tmp507_);
-					_tmp510_ = creation_call;
-					_tmp511_ = ecode;
-					_tmp512_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp511_);
-					_tmp513_ = _tmp512_;
-					_tmp514_ = vala_ccode_identifier_new (_tmp513_);
-					_tmp515_ = _tmp514_;
-					vala_ccode_function_call_add_argument (_tmp510_, (ValaCCodeExpression*) _tmp515_);
-					_vala_ccode_node_unref0 (_tmp515_);
-					_g_free0 (_tmp513_);
+					_tmp590_ = creation_call;
+					_tmp591_ = edomain;
+					_tmp592_ = vala_ccode_base_module_get_ccode_upper_case_name ((ValaSymbol*) _tmp591_, NULL);
+					_tmp593_ = _tmp592_;
+					_tmp594_ = vala_ccode_identifier_new (_tmp593_);
+					_tmp595_ = _tmp594_;
+					vala_ccode_function_call_add_argument (_tmp590_, (ValaCCodeExpression*) _tmp595_);
+					_vala_ccode_node_unref0 (_tmp595_);
+					_g_free0 (_tmp593_);
+					_tmp596_ = creation_call;
+					_tmp597_ = ecode;
+					_tmp598_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp597_);
+					_tmp599_ = _tmp598_;
+					_tmp600_ = vala_ccode_identifier_new (_tmp599_);
+					_tmp601_ = _tmp600_;
+					vala_ccode_function_call_add_argument (_tmp596_, (ValaCCodeExpression*) _tmp601_);
+					_vala_ccode_node_unref0 (_tmp601_);
+					_g_free0 (_tmp599_);
 					{
-						ValaObjectCreationExpression* _tmp516_;
-						ValaList* _tmp517_ = NULL;
+						ValaObjectCreationExpression* _tmp602_;
+						ValaList* _tmp603_ = NULL;
 						ValaList* _arg_list;
-						ValaList* _tmp518_;
-						gint _tmp519_;
-						gint _tmp520_;
+						ValaList* _tmp604_;
+						gint _tmp605_;
+						gint _tmp606_;
 						gint _arg_size;
 						gint _arg_index;
-						_tmp516_ = expr;
-						_tmp517_ = vala_object_creation_expression_get_argument_list (_tmp516_);
-						_arg_list = _tmp517_;
-						_tmp518_ = _arg_list;
-						_tmp519_ = vala_collection_get_size ((ValaCollection*) _tmp518_);
-						_tmp520_ = _tmp519_;
-						_arg_size = _tmp520_;
+						_tmp602_ = expr;
+						_tmp603_ = vala_object_creation_expression_get_argument_list (_tmp602_);
+						_arg_list = _tmp603_;
+						_tmp604_ = _arg_list;
+						_tmp605_ = vala_collection_get_size ((ValaCollection*) _tmp604_);
+						_tmp606_ = _tmp605_;
+						_arg_size = _tmp606_;
 						_arg_index = -1;
 						while (TRUE) {
-							gint _tmp521_;
-							gint _tmp522_;
-							gint _tmp523_;
-							ValaList* _tmp524_;
-							gint _tmp525_;
-							gpointer _tmp526_ = NULL;
+							gint _tmp607_;
+							gint _tmp608_;
+							gint _tmp609_;
+							ValaList* _tmp610_;
+							gint _tmp611_;
+							gpointer _tmp612_ = NULL;
 							ValaExpression* arg;
-							ValaCCodeFunctionCall* _tmp527_;
-							ValaExpression* _tmp528_;
-							ValaCCodeExpression* _tmp529_ = NULL;
-							ValaCCodeExpression* _tmp530_;
-							_tmp521_ = _arg_index;
-							_arg_index = _tmp521_ + 1;
-							_tmp522_ = _arg_index;
-							_tmp523_ = _arg_size;
-							if (!(_tmp522_ < _tmp523_)) {
+							ValaCCodeFunctionCall* _tmp613_;
+							ValaExpression* _tmp614_;
+							ValaCCodeExpression* _tmp615_ = NULL;
+							ValaCCodeExpression* _tmp616_;
+							_tmp607_ = _arg_index;
+							_arg_index = _tmp607_ + 1;
+							_tmp608_ = _arg_index;
+							_tmp609_ = _arg_size;
+							if (!(_tmp608_ < _tmp609_)) {
 								break;
 							}
-							_tmp524_ = _arg_list;
-							_tmp525_ = _arg_index;
-							_tmp526_ = vala_list_get (_tmp524_, _tmp525_);
-							arg = (ValaExpression*) _tmp526_;
-							_tmp527_ = creation_call;
-							_tmp528_ = arg;
-							_tmp529_ = vala_ccode_base_module_get_cvalue (self, _tmp528_);
-							_tmp530_ = _tmp529_;
-							vala_ccode_function_call_add_argument (_tmp527_, _tmp530_);
-							_vala_ccode_node_unref0 (_tmp530_);
+							_tmp610_ = _arg_list;
+							_tmp611_ = _arg_index;
+							_tmp612_ = vala_list_get (_tmp610_, _tmp611_);
+							arg = (ValaExpression*) _tmp612_;
+							_tmp613_ = creation_call;
+							_tmp614_ = arg;
+							_tmp615_ = vala_ccode_base_module_get_cvalue (self, _tmp614_);
+							_tmp616_ = _tmp615_;
+							vala_ccode_function_call_add_argument (_tmp613_, _tmp616_);
+							_vala_ccode_node_unref0 (_tmp616_);
 							_vala_code_node_unref0 (arg);
 						}
 						_vala_iterable_unref0 (_arg_list);
 					}
-					_tmp531_ = creation_call;
-					_tmp532_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp531_);
+					_tmp617_ = creation_call;
+					_tmp618_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp617_);
 					_vala_ccode_node_unref0 (creation_expr);
-					creation_expr = _tmp532_;
+					creation_expr = _tmp618_;
 					_vala_ccode_node_unref0 (creation_call);
 					_vala_code_node_unref0 (edomain);
 					_vala_code_node_unref0 (ecode);
@@ -26917,239 +27592,245 @@ static void vala_ccode_base_module_real_visit_object_creation_expression (ValaCo
 			}
 		}
 	}
-	_tmp533_ = expr;
-	_tmp534_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp533_);
-	_tmp535_ = _tmp534_;
-	_tmp536_ = _vala_code_node_ref0 (VALA_IS_LOCAL_VARIABLE (_tmp535_) ? ((ValaLocalVariable*) _tmp535_) : NULL);
-	local = _tmp536_;
-	_tmp538_ = local;
-	if (_tmp538_ != NULL) {
-		ValaLocalVariable* _tmp539_;
-		gboolean _tmp540_ = FALSE;
-		_tmp539_ = local;
-		_tmp540_ = vala_ccode_base_module_has_simple_struct_initializer (self, _tmp539_);
-		_tmp537_ = _tmp540_;
+	_tmp619_ = expr;
+	_tmp620_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp619_);
+	_tmp621_ = _tmp620_;
+	_tmp622_ = _vala_code_node_ref0 (VALA_IS_LOCAL_VARIABLE (_tmp621_) ? ((ValaLocalVariable*) _tmp621_) : NULL);
+	local = _tmp622_;
+	_tmp624_ = local;
+	if (_tmp624_ != NULL) {
+		ValaLocalVariable* _tmp625_;
+		ValaLocalVariable* _tmp626_;
+		ValaExpression* _tmp627_;
+		ValaExpression* _tmp628_;
+		gboolean _tmp629_ = FALSE;
+		_tmp625_ = local;
+		_tmp626_ = local;
+		_tmp627_ = vala_variable_get_initializer ((ValaVariable*) _tmp626_);
+		_tmp628_ = _tmp627_;
+		_tmp629_ = vala_ccode_base_module_is_simple_struct_creation (self, (ValaVariable*) _tmp625_, _tmp628_);
+		_tmp623_ = _tmp629_;
 	} else {
-		_tmp537_ = FALSE;
-	}
-	_tmp541_ = _tmp537_;
-	if (_tmp541_) {
-		ValaCCodeFunction* _tmp542_;
-		ValaCCodeFunction* _tmp543_;
-		ValaCCodeExpression* _tmp544_;
-		ValaObjectCreationExpression* _tmp545_;
-		ValaCCodeExpression* _tmp546_;
-		_tmp542_ = vala_ccode_base_module_get_ccode (self);
-		_tmp543_ = _tmp542_;
-		_tmp544_ = creation_expr;
-		vala_ccode_function_add_expression (_tmp543_, _tmp544_);
-		_tmp545_ = expr;
-		_tmp546_ = instance;
-		vala_ccode_base_module_set_cvalue (self, (ValaExpression*) _tmp545_, _tmp546_);
+		_tmp623_ = FALSE;
+	}
+	_tmp630_ = _tmp623_;
+	if (_tmp630_) {
+		ValaCCodeFunction* _tmp631_;
+		ValaCCodeFunction* _tmp632_;
+		ValaCCodeExpression* _tmp633_;
+		ValaObjectCreationExpression* _tmp634_;
+		ValaCCodeExpression* _tmp635_;
+		_tmp631_ = vala_ccode_base_module_get_ccode (self);
+		_tmp632_ = _tmp631_;
+		_tmp633_ = creation_expr;
+		vala_ccode_function_add_expression (_tmp632_, _tmp633_);
+		_tmp634_ = expr;
+		_tmp635_ = instance;
+		vala_ccode_base_module_set_cvalue (self, (ValaExpression*) _tmp634_, _tmp635_);
 	} else {
-		ValaCCodeExpression* _tmp547_;
-		_tmp547_ = instance;
-		if (_tmp547_ != NULL) {
-			ValaObjectCreationExpression* _tmp548_;
-			ValaDataType* _tmp549_;
-			ValaDataType* _tmp550_;
-			ValaTypeSymbol* _tmp551_;
-			ValaTypeSymbol* _tmp552_;
-			ValaObjectCreationExpression* _tmp625_;
-			ValaCCodeExpression* _tmp626_;
-			_tmp548_ = expr;
-			_tmp549_ = vala_object_creation_expression_get_type_reference (_tmp548_);
-			_tmp550_ = _tmp549_;
-			_tmp551_ = vala_data_type_get_data_type (_tmp550_);
-			_tmp552_ = _tmp551_;
-			if (VALA_IS_STRUCT (_tmp552_)) {
-				ValaCCodeFunction* _tmp553_;
-				ValaCCodeFunction* _tmp554_;
-				ValaCCodeExpression* _tmp555_;
-				_tmp553_ = vala_ccode_base_module_get_ccode (self);
-				_tmp554_ = _tmp553_;
-				_tmp555_ = creation_expr;
-				vala_ccode_function_add_expression (_tmp554_, _tmp555_);
+		ValaCCodeExpression* _tmp636_;
+		_tmp636_ = instance;
+		if (_tmp636_ != NULL) {
+			ValaObjectCreationExpression* _tmp637_;
+			ValaDataType* _tmp638_;
+			ValaDataType* _tmp639_;
+			ValaTypeSymbol* _tmp640_;
+			ValaTypeSymbol* _tmp641_;
+			ValaObjectCreationExpression* _tmp714_;
+			ValaCCodeExpression* _tmp715_;
+			_tmp637_ = expr;
+			_tmp638_ = vala_object_creation_expression_get_type_reference (_tmp637_);
+			_tmp639_ = _tmp638_;
+			_tmp640_ = vala_data_type_get_data_type (_tmp639_);
+			_tmp641_ = _tmp640_;
+			if (VALA_IS_STRUCT (_tmp641_)) {
+				ValaCCodeFunction* _tmp642_;
+				ValaCCodeFunction* _tmp643_;
+				ValaCCodeExpression* _tmp644_;
+				_tmp642_ = vala_ccode_base_module_get_ccode (self);
+				_tmp643_ = _tmp642_;
+				_tmp644_ = creation_expr;
+				vala_ccode_function_add_expression (_tmp643_, _tmp644_);
 			} else {
-				ValaCCodeFunction* _tmp556_;
-				ValaCCodeFunction* _tmp557_;
-				ValaCCodeExpression* _tmp558_;
-				ValaCCodeExpression* _tmp559_;
-				_tmp556_ = vala_ccode_base_module_get_ccode (self);
-				_tmp557_ = _tmp556_;
-				_tmp558_ = instance;
-				_tmp559_ = creation_expr;
-				vala_ccode_function_add_assignment (_tmp557_, _tmp558_, _tmp559_);
+				ValaCCodeFunction* _tmp645_;
+				ValaCCodeFunction* _tmp646_;
+				ValaCCodeExpression* _tmp647_;
+				ValaCCodeExpression* _tmp648_;
+				_tmp645_ = vala_ccode_base_module_get_ccode (self);
+				_tmp646_ = _tmp645_;
+				_tmp647_ = instance;
+				_tmp648_ = creation_expr;
+				vala_ccode_function_add_assignment (_tmp646_, _tmp647_, _tmp648_);
 			}
 			{
-				ValaObjectCreationExpression* _tmp560_;
-				ValaList* _tmp561_ = NULL;
+				ValaObjectCreationExpression* _tmp649_;
+				ValaList* _tmp650_ = NULL;
 				ValaList* _init_list;
-				ValaList* _tmp562_;
-				gint _tmp563_;
-				gint _tmp564_;
+				ValaList* _tmp651_;
+				gint _tmp652_;
+				gint _tmp653_;
 				gint _init_size;
 				gint _init_index;
-				_tmp560_ = expr;
-				_tmp561_ = vala_object_creation_expression_get_object_initializer (_tmp560_);
-				_init_list = _tmp561_;
-				_tmp562_ = _init_list;
-				_tmp563_ = vala_collection_get_size ((ValaCollection*) _tmp562_);
-				_tmp564_ = _tmp563_;
-				_init_size = _tmp564_;
+				_tmp649_ = expr;
+				_tmp650_ = vala_object_creation_expression_get_object_initializer (_tmp649_);
+				_init_list = _tmp650_;
+				_tmp651_ = _init_list;
+				_tmp652_ = vala_collection_get_size ((ValaCollection*) _tmp651_);
+				_tmp653_ = _tmp652_;
+				_init_size = _tmp653_;
 				_init_index = -1;
 				while (TRUE) {
-					gint _tmp565_;
-					gint _tmp566_;
-					gint _tmp567_;
-					ValaList* _tmp568_;
-					gint _tmp569_;
-					gpointer _tmp570_ = NULL;
+					gint _tmp654_;
+					gint _tmp655_;
+					gint _tmp656_;
+					ValaList* _tmp657_;
+					gint _tmp658_;
+					gpointer _tmp659_ = NULL;
 					ValaMemberInitializer* init;
-					ValaMemberInitializer* _tmp571_;
-					ValaSymbol* _tmp572_;
-					ValaSymbol* _tmp573_;
-					_tmp565_ = _init_index;
-					_init_index = _tmp565_ + 1;
-					_tmp566_ = _init_index;
-					_tmp567_ = _init_size;
-					if (!(_tmp566_ < _tmp567_)) {
+					ValaMemberInitializer* _tmp660_;
+					ValaSymbol* _tmp661_;
+					ValaSymbol* _tmp662_;
+					_tmp654_ = _init_index;
+					_init_index = _tmp654_ + 1;
+					_tmp655_ = _init_index;
+					_tmp656_ = _init_size;
+					if (!(_tmp655_ < _tmp656_)) {
 						break;
 					}
-					_tmp568_ = _init_list;
-					_tmp569_ = _init_index;
-					_tmp570_ = vala_list_get (_tmp568_, _tmp569_);
-					init = (ValaMemberInitializer*) _tmp570_;
-					_tmp571_ = init;
-					_tmp572_ = vala_member_initializer_get_symbol_reference (_tmp571_);
-					_tmp573_ = _tmp572_;
-					if (VALA_IS_FIELD (_tmp573_)) {
-						ValaMemberInitializer* _tmp574_;
-						ValaSymbol* _tmp575_;
-						ValaSymbol* _tmp576_;
-						ValaField* _tmp577_;
+					_tmp657_ = _init_list;
+					_tmp658_ = _init_index;
+					_tmp659_ = vala_list_get (_tmp657_, _tmp658_);
+					init = (ValaMemberInitializer*) _tmp659_;
+					_tmp660_ = init;
+					_tmp661_ = vala_member_initializer_get_symbol_reference (_tmp660_);
+					_tmp662_ = _tmp661_;
+					if (VALA_IS_FIELD (_tmp662_)) {
+						ValaMemberInitializer* _tmp663_;
+						ValaSymbol* _tmp664_;
+						ValaSymbol* _tmp665_;
+						ValaField* _tmp666_;
 						ValaField* f;
-						ValaField* _tmp578_;
-						ValaSymbol* _tmp579_;
-						ValaSymbol* _tmp580_;
-						ValaDataType* _tmp581_ = NULL;
+						ValaField* _tmp667_;
+						ValaSymbol* _tmp668_;
+						ValaSymbol* _tmp669_;
+						ValaDataType* _tmp670_ = NULL;
 						ValaDataType* instance_target_type;
-						ValaObjectCreationExpression* _tmp582_;
-						ValaDataType* _tmp583_;
-						ValaDataType* _tmp584_;
-						ValaCCodeExpression* _tmp585_;
-						ValaGLibValue* _tmp586_;
-						ValaGLibValue* _tmp587_;
-						ValaDataType* _tmp588_;
-						ValaMemberInitializer* _tmp589_;
-						ValaTargetValue* _tmp590_ = NULL;
-						ValaTargetValue* _tmp591_;
+						ValaObjectCreationExpression* _tmp671_;
+						ValaDataType* _tmp672_;
+						ValaDataType* _tmp673_;
+						ValaCCodeExpression* _tmp674_;
+						ValaGLibValue* _tmp675_;
+						ValaGLibValue* _tmp676_;
+						ValaDataType* _tmp677_;
+						ValaMemberInitializer* _tmp678_;
+						ValaTargetValue* _tmp679_ = NULL;
+						ValaTargetValue* _tmp680_;
 						ValaTargetValue* typed_inst;
-						ValaField* _tmp592_;
-						ValaTargetValue* _tmp593_;
-						ValaMemberInitializer* _tmp594_;
-						ValaExpression* _tmp595_;
-						ValaExpression* _tmp596_;
-						ValaTargetValue* _tmp597_;
-						ValaTargetValue* _tmp598_;
-						ValaField* _tmp599_;
-						ValaSymbol* _tmp600_;
-						ValaSymbol* _tmp601_;
-						ValaClass* _tmp602_;
+						ValaField* _tmp681_;
+						ValaTargetValue* _tmp682_;
+						ValaMemberInitializer* _tmp683_;
+						ValaExpression* _tmp684_;
+						ValaExpression* _tmp685_;
+						ValaTargetValue* _tmp686_;
+						ValaTargetValue* _tmp687_;
+						ValaField* _tmp688_;
+						ValaSymbol* _tmp689_;
+						ValaSymbol* _tmp690_;
+						ValaClass* _tmp691_;
 						ValaClass* cl;
-						ValaClass* _tmp603_;
-						_tmp574_ = init;
-						_tmp575_ = vala_member_initializer_get_symbol_reference (_tmp574_);
-						_tmp576_ = _tmp575_;
-						_tmp577_ = _vala_code_node_ref0 (VALA_FIELD (_tmp576_));
-						f = _tmp577_;
-						_tmp578_ = f;
-						_tmp579_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp578_);
-						_tmp580_ = _tmp579_;
-						_tmp581_ = vala_ccode_base_module_get_data_type_for_symbol (VALA_TYPESYMBOL (_tmp580_));
-						instance_target_type = _tmp581_;
-						_tmp582_ = expr;
-						_tmp583_ = vala_object_creation_expression_get_type_reference (_tmp582_);
-						_tmp584_ = _tmp583_;
-						_tmp585_ = instance;
-						_tmp586_ = vala_glib_value_new (_tmp584_, _tmp585_, TRUE);
-						_tmp587_ = _tmp586_;
-						_tmp588_ = instance_target_type;
-						_tmp589_ = init;
-						_tmp590_ = vala_ccode_base_module_transform_value (self, (ValaTargetValue*) _tmp587_, _tmp588_, (ValaCodeNode*) _tmp589_);
-						_tmp591_ = _tmp590_;
-						_vala_target_value_unref0 (_tmp587_);
-						typed_inst = _tmp591_;
-						_tmp592_ = f;
-						_tmp593_ = typed_inst;
-						_tmp594_ = init;
-						_tmp595_ = vala_member_initializer_get_initializer (_tmp594_);
-						_tmp596_ = _tmp595_;
-						_tmp597_ = vala_expression_get_target_value (_tmp596_);
-						_tmp598_ = _tmp597_;
-						vala_code_generator_store_field ((ValaCodeGenerator*) self, _tmp592_, _tmp593_, _tmp598_);
-						_tmp599_ = f;
-						_tmp600_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp599_);
-						_tmp601_ = _tmp600_;
-						_tmp602_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp601_) ? ((ValaClass*) _tmp601_) : NULL);
-						cl = _tmp602_;
-						_tmp603_ = cl;
-						if (_tmp603_ != NULL) {
-							ValaClass* _tmp604_;
-							ValaCCodeFile* _tmp605_;
-							_tmp604_ = cl;
-							_tmp605_ = self->cfile;
-							vala_ccode_base_module_generate_class_struct_declaration (self, _tmp604_, _tmp605_);
+						ValaClass* _tmp692_;
+						_tmp663_ = init;
+						_tmp664_ = vala_member_initializer_get_symbol_reference (_tmp663_);
+						_tmp665_ = _tmp664_;
+						_tmp666_ = _vala_code_node_ref0 (VALA_FIELD (_tmp665_));
+						f = _tmp666_;
+						_tmp667_ = f;
+						_tmp668_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp667_);
+						_tmp669_ = _tmp668_;
+						_tmp670_ = vala_ccode_base_module_get_data_type_for_symbol (VALA_TYPESYMBOL (_tmp669_));
+						instance_target_type = _tmp670_;
+						_tmp671_ = expr;
+						_tmp672_ = vala_object_creation_expression_get_type_reference (_tmp671_);
+						_tmp673_ = _tmp672_;
+						_tmp674_ = instance;
+						_tmp675_ = vala_glib_value_new (_tmp673_, _tmp674_, TRUE);
+						_tmp676_ = _tmp675_;
+						_tmp677_ = instance_target_type;
+						_tmp678_ = init;
+						_tmp679_ = vala_ccode_base_module_transform_value (self, (ValaTargetValue*) _tmp676_, _tmp677_, (ValaCodeNode*) _tmp678_);
+						_tmp680_ = _tmp679_;
+						_vala_target_value_unref0 (_tmp676_);
+						typed_inst = _tmp680_;
+						_tmp681_ = f;
+						_tmp682_ = typed_inst;
+						_tmp683_ = init;
+						_tmp684_ = vala_member_initializer_get_initializer (_tmp683_);
+						_tmp685_ = _tmp684_;
+						_tmp686_ = vala_expression_get_target_value (_tmp685_);
+						_tmp687_ = _tmp686_;
+						vala_code_generator_store_field ((ValaCodeGenerator*) self, _tmp681_, _tmp682_, _tmp687_);
+						_tmp688_ = f;
+						_tmp689_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp688_);
+						_tmp690_ = _tmp689_;
+						_tmp691_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp690_) ? ((ValaClass*) _tmp690_) : NULL);
+						cl = _tmp691_;
+						_tmp692_ = cl;
+						if (_tmp692_ != NULL) {
+							ValaClass* _tmp693_;
+							ValaCCodeFile* _tmp694_;
+							_tmp693_ = cl;
+							_tmp694_ = self->cfile;
+							vala_ccode_base_module_generate_class_struct_declaration (self, _tmp693_, _tmp694_);
 						}
 						_vala_code_node_unref0 (cl);
 						_vala_target_value_unref0 (typed_inst);
 						_vala_code_node_unref0 (instance_target_type);
 						_vala_code_node_unref0 (f);
 					} else {
-						ValaMemberInitializer* _tmp606_;
-						ValaSymbol* _tmp607_;
-						ValaSymbol* _tmp608_;
-						_tmp606_ = init;
-						_tmp607_ = vala_member_initializer_get_symbol_reference (_tmp606_);
-						_tmp608_ = _tmp607_;
-						if (VALA_IS_PROPERTY (_tmp608_)) {
-							ValaMemberAccess* _tmp609_;
+						ValaMemberInitializer* _tmp695_;
+						ValaSymbol* _tmp696_;
+						ValaSymbol* _tmp697_;
+						_tmp695_ = init;
+						_tmp696_ = vala_member_initializer_get_symbol_reference (_tmp695_);
+						_tmp697_ = _tmp696_;
+						if (VALA_IS_PROPERTY (_tmp697_)) {
+							ValaMemberAccess* _tmp698_;
 							ValaMemberAccess* inst_ma;
-							ValaMemberAccess* _tmp610_;
-							ValaObjectCreationExpression* _tmp611_;
-							ValaDataType* _tmp612_;
-							ValaDataType* _tmp613_;
-							ValaMemberAccess* _tmp614_;
-							ValaCCodeExpression* _tmp615_;
-							ValaMemberInitializer* _tmp616_;
-							ValaSymbol* _tmp617_;
-							ValaSymbol* _tmp618_;
-							ValaMemberAccess* _tmp619_;
-							ValaMemberInitializer* _tmp620_;
-							ValaExpression* _tmp621_;
-							ValaExpression* _tmp622_;
-							ValaTargetValue* _tmp623_;
-							ValaTargetValue* _tmp624_;
-							_tmp609_ = vala_member_access_new_simple ("new", NULL);
-							inst_ma = _tmp609_;
-							_tmp610_ = inst_ma;
-							_tmp611_ = expr;
-							_tmp612_ = vala_object_creation_expression_get_type_reference (_tmp611_);
-							_tmp613_ = _tmp612_;
-							vala_expression_set_value_type ((ValaExpression*) _tmp610_, _tmp613_);
-							_tmp614_ = inst_ma;
-							_tmp615_ = instance;
-							vala_ccode_base_module_set_cvalue (self, (ValaExpression*) _tmp614_, _tmp615_);
-							_tmp616_ = init;
-							_tmp617_ = vala_member_initializer_get_symbol_reference (_tmp616_);
-							_tmp618_ = _tmp617_;
-							_tmp619_ = inst_ma;
-							_tmp620_ = init;
-							_tmp621_ = vala_member_initializer_get_initializer (_tmp620_);
-							_tmp622_ = _tmp621_;
-							_tmp623_ = vala_expression_get_target_value (_tmp622_);
-							_tmp624_ = _tmp623_;
-							vala_ccode_base_module_store_property (self, VALA_PROPERTY (_tmp618_), (ValaExpression*) _tmp619_, _tmp624_);
+							ValaMemberAccess* _tmp699_;
+							ValaObjectCreationExpression* _tmp700_;
+							ValaDataType* _tmp701_;
+							ValaDataType* _tmp702_;
+							ValaMemberAccess* _tmp703_;
+							ValaCCodeExpression* _tmp704_;
+							ValaMemberInitializer* _tmp705_;
+							ValaSymbol* _tmp706_;
+							ValaSymbol* _tmp707_;
+							ValaMemberAccess* _tmp708_;
+							ValaMemberInitializer* _tmp709_;
+							ValaExpression* _tmp710_;
+							ValaExpression* _tmp711_;
+							ValaTargetValue* _tmp712_;
+							ValaTargetValue* _tmp713_;
+							_tmp698_ = vala_member_access_new_simple ("new", NULL);
+							inst_ma = _tmp698_;
+							_tmp699_ = inst_ma;
+							_tmp700_ = expr;
+							_tmp701_ = vala_object_creation_expression_get_type_reference (_tmp700_);
+							_tmp702_ = _tmp701_;
+							vala_expression_set_value_type ((ValaExpression*) _tmp699_, _tmp702_);
+							_tmp703_ = inst_ma;
+							_tmp704_ = instance;
+							vala_ccode_base_module_set_cvalue (self, (ValaExpression*) _tmp703_, _tmp704_);
+							_tmp705_ = init;
+							_tmp706_ = vala_member_initializer_get_symbol_reference (_tmp705_);
+							_tmp707_ = _tmp706_;
+							_tmp708_ = inst_ma;
+							_tmp709_ = init;
+							_tmp710_ = vala_member_initializer_get_initializer (_tmp709_);
+							_tmp711_ = _tmp710_;
+							_tmp712_ = vala_expression_get_target_value (_tmp711_);
+							_tmp713_ = _tmp712_;
+							vala_ccode_base_module_store_property (self, VALA_PROPERTY (_tmp707_), (ValaExpression*) _tmp708_, _tmp713_);
 							_vala_code_node_unref0 (inst_ma);
 						}
 					}
@@ -27157,52 +27838,52 @@ static void vala_ccode_base_module_real_visit_object_creation_expression (ValaCo
 				}
 				_vala_iterable_unref0 (_init_list);
 			}
-			_tmp625_ = expr;
-			_tmp626_ = instance;
-			vala_ccode_base_module_set_cvalue (self, (ValaExpression*) _tmp625_, _tmp626_);
+			_tmp714_ = expr;
+			_tmp715_ = instance;
+			vala_ccode_base_module_set_cvalue (self, (ValaExpression*) _tmp714_, _tmp715_);
 		} else {
-			ValaCCodeExpression* _tmp627_;
-			_tmp627_ = creation_expr;
-			if (_tmp627_ != NULL) {
-				ValaObjectCreationExpression* _tmp628_;
-				ValaDataType* _tmp629_;
-				ValaDataType* _tmp630_;
-				ValaObjectCreationExpression* _tmp631_;
-				ValaTargetValue* _tmp632_ = NULL;
+			ValaCCodeExpression* _tmp716_;
+			_tmp716_ = creation_expr;
+			if (_tmp716_ != NULL) {
+				ValaObjectCreationExpression* _tmp717_;
+				ValaDataType* _tmp718_;
+				ValaDataType* _tmp719_;
+				ValaObjectCreationExpression* _tmp720_;
+				ValaTargetValue* _tmp721_ = NULL;
 				ValaTargetValue* temp_value;
-				ValaCCodeFunction* _tmp633_;
-				ValaCCodeFunction* _tmp634_;
-				ValaTargetValue* _tmp635_;
-				ValaCCodeExpression* _tmp636_ = NULL;
-				ValaCCodeExpression* _tmp637_;
-				ValaCCodeExpression* _tmp638_;
-				ValaObjectCreationExpression* _tmp639_;
-				ValaTargetValue* _tmp640_;
-				_tmp628_ = expr;
-				_tmp629_ = vala_expression_get_value_type ((ValaExpression*) _tmp628_);
-				_tmp630_ = _tmp629_;
-				_tmp631_ = expr;
-				_tmp632_ = vala_ccode_base_module_create_temp_value (self, _tmp630_, FALSE, (ValaCodeNode*) _tmp631_, NULL);
-				temp_value = _tmp632_;
-				_tmp633_ = vala_ccode_base_module_get_ccode (self);
-				_tmp634_ = _tmp633_;
-				_tmp635_ = temp_value;
-				_tmp636_ = vala_ccode_base_module_get_cvalue_ (self, _tmp635_);
-				_tmp637_ = _tmp636_;
-				_tmp638_ = creation_expr;
-				vala_ccode_function_add_assignment (_tmp634_, _tmp637_, _tmp638_);
-				_vala_ccode_node_unref0 (_tmp637_);
-				_tmp639_ = expr;
-				_tmp640_ = temp_value;
-				vala_expression_set_target_value ((ValaExpression*) _tmp639_, _tmp640_);
+				ValaCCodeFunction* _tmp722_;
+				ValaCCodeFunction* _tmp723_;
+				ValaTargetValue* _tmp724_;
+				ValaCCodeExpression* _tmp725_ = NULL;
+				ValaCCodeExpression* _tmp726_;
+				ValaCCodeExpression* _tmp727_;
+				ValaObjectCreationExpression* _tmp728_;
+				ValaTargetValue* _tmp729_;
+				_tmp717_ = expr;
+				_tmp718_ = vala_expression_get_value_type ((ValaExpression*) _tmp717_);
+				_tmp719_ = _tmp718_;
+				_tmp720_ = expr;
+				_tmp721_ = vala_ccode_base_module_create_temp_value (self, _tmp719_, FALSE, (ValaCodeNode*) _tmp720_, NULL);
+				temp_value = _tmp721_;
+				_tmp722_ = vala_ccode_base_module_get_ccode (self);
+				_tmp723_ = _tmp722_;
+				_tmp724_ = temp_value;
+				_tmp725_ = vala_ccode_base_module_get_cvalue_ (self, _tmp724_);
+				_tmp726_ = _tmp725_;
+				_tmp727_ = creation_expr;
+				vala_ccode_function_add_assignment (_tmp723_, _tmp726_, _tmp727_);
+				_vala_ccode_node_unref0 (_tmp726_);
+				_tmp728_ = expr;
+				_tmp729_ = temp_value;
+				vala_expression_set_target_value ((ValaExpression*) _tmp728_, _tmp729_);
 				_vala_target_value_unref0 (temp_value);
 			}
 		}
 	}
-	_tmp641_ = expr;
-	_tmp642_ = vala_expression_get_target_value ((ValaExpression*) _tmp641_);
-	_tmp643_ = _tmp642_;
-	VALA_GLIB_VALUE (_tmp643_)->lvalue = TRUE;
+	_tmp730_ = expr;
+	_tmp731_ = vala_expression_get_target_value ((ValaExpression*) _tmp730_);
+	_tmp732_ = _tmp731_;
+	VALA_GLIB_VALUE (_tmp732_)->lvalue = TRUE;
 	_vala_code_node_unref0 (local);
 	_vala_code_node_unref0 (st);
 	_vala_ccode_node_unref0 (creation_expr);
@@ -31881,28 +32562,28 @@ ValaTargetValue* vala_ccode_base_module_transform_value (ValaCCodeBaseModule* se
 	ValaDataType* _tmp120_;
 	gboolean _tmp121_;
 	gboolean _tmp122_;
-	gboolean _tmp135_;
-	gboolean _tmp137_;
-	ValaDataType* _tmp161_;
-	ValaGLibValue* _tmp162_;
-	ValaDataType* _tmp163_;
-	ValaDataType* _tmp164_ = NULL;
-	ValaDataType* _tmp165_;
-	gboolean _tmp166_;
-	gboolean _tmp386_ = FALSE;
-	gboolean _tmp387_;
-	gboolean _tmp394_;
-	gboolean _tmp398_ = FALSE;
-	gboolean _tmp399_ = FALSE;
-	gboolean _tmp400_ = FALSE;
+	gboolean _tmp138_;
+	gboolean _tmp140_;
+	ValaDataType* _tmp164_;
+	ValaGLibValue* _tmp165_;
+	ValaDataType* _tmp166_;
+	ValaDataType* _tmp167_ = NULL;
+	ValaDataType* _tmp168_;
+	gboolean _tmp169_;
+	gboolean _tmp389_ = FALSE;
+	gboolean _tmp390_;
+	gboolean _tmp397_;
 	gboolean _tmp401_ = FALSE;
 	gboolean _tmp402_ = FALSE;
-	gboolean _tmp403_;
-	gboolean _tmp405_;
-	gboolean _tmp409_;
-	gboolean _tmp419_;
+	gboolean _tmp403_ = FALSE;
+	gboolean _tmp404_ = FALSE;
+	gboolean _tmp405_ = FALSE;
+	gboolean _tmp406_;
+	gboolean _tmp408_;
+	gboolean _tmp412_;
 	gboolean _tmp422_;
-	gboolean _tmp424_;
+	gboolean _tmp425_;
+	gboolean _tmp427_;
 	g_return_val_if_fail (self != NULL, NULL);
 	g_return_val_if_fail (value != NULL, NULL);
 	g_return_val_if_fail (node != NULL, NULL);
@@ -32202,895 +32883,905 @@ ValaTargetValue* vala_ccode_base_module_transform_value (ValaCCodeBaseModule* se
 		gboolean _tmp123_ = FALSE;
 		gboolean _tmp124_ = FALSE;
 		gboolean _tmp125_ = FALSE;
-		ValaDataType* _tmp126_;
-		gboolean _tmp130_;
-		gboolean _tmp132_;
-		gboolean _tmp134_;
-		_tmp126_ = target_type;
-		if (_tmp126_ == NULL) {
+		gboolean _tmp126_ = FALSE;
+		ValaDataType* _tmp127_;
+		gboolean _tmp131_;
+		gboolean _tmp133_;
+		gboolean _tmp135_;
+		gboolean _tmp137_;
+		_tmp127_ = target_type;
+		if (_tmp127_ == NULL) {
+			_tmp126_ = TRUE;
+		} else {
+			ValaDataType* _tmp128_;
+			gboolean _tmp129_;
+			gboolean _tmp130_;
+			_tmp128_ = target_type;
+			_tmp129_ = vala_data_type_get_value_owned (_tmp128_);
+			_tmp130_ = _tmp129_;
+			_tmp126_ = !_tmp130_;
+		}
+		_tmp131_ = _tmp126_;
+		if (_tmp131_) {
 			_tmp125_ = TRUE;
 		} else {
-			ValaDataType* _tmp127_;
-			gboolean _tmp128_;
-			gboolean _tmp129_;
-			_tmp127_ = target_type;
-			_tmp128_ = vala_data_type_get_value_owned (_tmp127_);
-			_tmp129_ = _tmp128_;
-			_tmp125_ = !_tmp129_;
+			gboolean _tmp132_;
+			_tmp132_ = boxing;
+			_tmp125_ = _tmp132_;
 		}
-		_tmp130_ = _tmp125_;
-		if (_tmp130_) {
+		_tmp133_ = _tmp125_;
+		if (_tmp133_) {
 			_tmp124_ = TRUE;
 		} else {
-			gboolean _tmp131_;
-			_tmp131_ = boxing;
-			_tmp124_ = _tmp131_;
+			gboolean _tmp134_;
+			_tmp134_ = unboxing;
+			_tmp124_ = _tmp134_;
 		}
-		_tmp132_ = _tmp124_;
-		if (_tmp132_) {
+		_tmp135_ = _tmp124_;
+		if (_tmp135_) {
 			_tmp123_ = TRUE;
 		} else {
-			gboolean _tmp133_;
-			_tmp133_ = unboxing;
-			_tmp123_ = _tmp133_;
+			gboolean _tmp136_;
+			_tmp136_ = gvariant_boxing;
+			_tmp123_ = _tmp136_;
 		}
-		_tmp134_ = _tmp123_;
-		_tmp119_ = _tmp134_;
+		_tmp137_ = _tmp123_;
+		_tmp119_ = _tmp137_;
 	} else {
 		_tmp119_ = FALSE;
 	}
-	_tmp135_ = _tmp119_;
-	if (_tmp135_) {
-		gboolean _tmp136_;
-		_tmp136_ = gvalue_boxing;
-		_tmp118_ = !_tmp136_;
+	_tmp138_ = _tmp119_;
+	if (_tmp138_) {
+		gboolean _tmp139_;
+		_tmp139_ = gvalue_boxing;
+		_tmp118_ = !_tmp139_;
 	} else {
 		_tmp118_ = FALSE;
 	}
-	_tmp137_ = _tmp118_;
-	if (_tmp137_) {
-		ValaDataType* _tmp138_;
-		_tmp138_ = target_type;
-		if (VALA_IS_POINTER_TYPE (_tmp138_)) {
+	_tmp140_ = _tmp118_;
+	if (_tmp140_) {
+		ValaDataType* _tmp141_;
+		_tmp141_ = target_type;
+		if (VALA_IS_POINTER_TYPE (_tmp141_)) {
 		} else {
-			ValaDataType* _tmp139_;
-			gboolean _tmp140_ = FALSE;
-			_tmp139_ = type;
-			_tmp140_ = vala_ccode_base_module_requires_destroy (self, _tmp139_);
-			if (_tmp140_) {
-				ValaDataType* _tmp141_;
-				gboolean _tmp142_ = FALSE;
-				_tmp141_ = type;
-				_tmp142_ = vala_ccode_base_module_is_lvalue_access_allowed (self, _tmp141_);
-				if (!_tmp142_) {
-					ValaArrayList* _tmp143_;
-					ValaArrayList* _tmp144_;
-					ValaGLibValue* _tmp145_;
-					ValaGLibValue* _tmp146_ = NULL;
-					ValaGLibValue* _tmp147_;
-					_tmp143_ = vala_ccode_base_module_get_temp_ref_values (self);
-					_tmp144_ = _tmp143_;
-					_tmp145_ = _result_;
-					_tmp146_ = vala_glib_value_copy (_tmp145_);
+			ValaDataType* _tmp142_;
+			gboolean _tmp143_ = FALSE;
+			_tmp142_ = type;
+			_tmp143_ = vala_ccode_base_module_requires_destroy (self, _tmp142_);
+			if (_tmp143_) {
+				ValaDataType* _tmp144_;
+				gboolean _tmp145_ = FALSE;
+				_tmp144_ = type;
+				_tmp145_ = vala_ccode_base_module_is_lvalue_access_allowed (self, _tmp144_);
+				if (!_tmp145_) {
+					ValaArrayList* _tmp146_;
+					ValaArrayList* _tmp147_;
+					ValaGLibValue* _tmp148_;
+					ValaGLibValue* _tmp149_ = NULL;
+					ValaGLibValue* _tmp150_;
+					_tmp146_ = vala_ccode_base_module_get_temp_ref_values (self);
 					_tmp147_ = _tmp146_;
-					vala_list_insert ((ValaList*) _tmp144_, 0, (ValaTargetValue*) _tmp147_);
-					_vala_target_value_unref0 (_tmp147_);
+					_tmp148_ = _result_;
+					_tmp149_ = vala_glib_value_copy (_tmp148_);
+					_tmp150_ = _tmp149_;
+					vala_list_insert ((ValaList*) _tmp147_, 0, (ValaTargetValue*) _tmp150_);
+					_vala_target_value_unref0 (_tmp150_);
 				} else {
-					ValaDataType* _tmp148_;
-					ValaCodeNode* _tmp149_;
-					ValaTargetValue* _tmp150_ = NULL;
+					ValaDataType* _tmp151_;
+					ValaCodeNode* _tmp152_;
+					ValaTargetValue* _tmp153_ = NULL;
 					ValaTargetValue* temp_value;
-					ValaArrayList* _tmp151_;
-					ValaArrayList* _tmp152_;
-					ValaTargetValue* _tmp153_;
-					ValaGLibValue* _tmp154_ = NULL;
-					ValaGLibValue* _tmp155_;
+					ValaArrayList* _tmp154_;
+					ValaArrayList* _tmp155_;
 					ValaTargetValue* _tmp156_;
-					ValaGLibValue* _tmp157_;
+					ValaGLibValue* _tmp157_ = NULL;
 					ValaGLibValue* _tmp158_;
 					ValaTargetValue* _tmp159_;
-					ValaCCodeExpression* _tmp160_ = NULL;
-					_tmp148_ = type;
-					_tmp149_ = node;
-					_tmp150_ = vala_ccode_base_module_create_temp_value (self, _tmp148_, FALSE, _tmp149_, NULL);
-					temp_value = _tmp150_;
-					_tmp151_ = vala_ccode_base_module_get_temp_ref_values (self);
-					_tmp152_ = _tmp151_;
-					_tmp153_ = temp_value;
-					_tmp154_ = vala_glib_value_copy (VALA_GLIB_VALUE (_tmp153_));
+					ValaGLibValue* _tmp160_;
+					ValaGLibValue* _tmp161_;
+					ValaTargetValue* _tmp162_;
+					ValaCCodeExpression* _tmp163_ = NULL;
+					_tmp151_ = type;
+					_tmp152_ = node;
+					_tmp153_ = vala_ccode_base_module_create_temp_value (self, _tmp151_, FALSE, _tmp152_, NULL);
+					temp_value = _tmp153_;
+					_tmp154_ = vala_ccode_base_module_get_temp_ref_values (self);
 					_tmp155_ = _tmp154_;
-					vala_list_insert ((ValaList*) _tmp152_, 0, (ValaTargetValue*) _tmp155_);
-					_vala_target_value_unref0 (_tmp155_);
 					_tmp156_ = temp_value;
-					_tmp157_ = _result_;
-					vala_ccode_base_module_store_value (self, _tmp156_, (ValaTargetValue*) _tmp157_);
-					_tmp158_ = _result_;
+					_tmp157_ = vala_glib_value_copy (VALA_GLIB_VALUE (_tmp156_));
+					_tmp158_ = _tmp157_;
+					vala_list_insert ((ValaList*) _tmp155_, 0, (ValaTargetValue*) _tmp158_);
+					_vala_target_value_unref0 (_tmp158_);
 					_tmp159_ = temp_value;
-					_tmp160_ = vala_ccode_base_module_get_cvalue_ (self, _tmp159_);
-					_vala_ccode_node_unref0 (_tmp158_->cvalue);
-					_tmp158_->cvalue = _tmp160_;
+					_tmp160_ = _result_;
+					vala_ccode_base_module_store_value (self, _tmp159_, (ValaTargetValue*) _tmp160_);
+					_tmp161_ = _result_;
+					_tmp162_ = temp_value;
+					_tmp163_ = vala_ccode_base_module_get_cvalue_ (self, _tmp162_);
+					_vala_ccode_node_unref0 (_tmp161_->cvalue);
+					_tmp161_->cvalue = _tmp163_;
 					requires_temp_value = FALSE;
 					_vala_target_value_unref0 (temp_value);
 				}
 			}
 		}
 	}
-	_tmp161_ = target_type;
-	if (_tmp161_ == NULL) {
+	_tmp164_ = target_type;
+	if (_tmp164_ == NULL) {
 		result = (ValaTargetValue*) _result_;
 		_vala_code_node_unref0 (type);
 		return result;
 	}
-	_tmp162_ = _result_;
-	_tmp163_ = target_type;
-	_tmp164_ = vala_data_type_copy (_tmp163_);
-	_tmp165_ = _tmp164_;
-	vala_target_value_set_value_type ((ValaTargetValue*) _tmp162_, _tmp165_);
-	_vala_code_node_unref0 (_tmp165_);
-	_tmp166_ = gvalue_boxing;
-	if (_tmp166_) {
-		ValaDataType* _tmp167_;
-		ValaCodeNode* _tmp168_;
-		gboolean _tmp169_;
-		ValaTargetValue* _tmp170_ = NULL;
-		ValaTargetValue* temp_value;
-		ValaDataType* _tmp171_;
+	_tmp165_ = _result_;
+	_tmp166_ = target_type;
+	_tmp167_ = vala_data_type_copy (_tmp166_);
+	_tmp168_ = _tmp167_;
+	vala_target_value_set_value_type ((ValaTargetValue*) _tmp165_, _tmp168_);
+	_vala_code_node_unref0 (_tmp168_);
+	_tmp169_ = gvalue_boxing;
+	if (_tmp169_) {
+		ValaDataType* _tmp170_;
+		ValaCodeNode* _tmp171_;
 		gboolean _tmp172_;
-		gboolean _tmp173_;
-		ValaDataType* _tmp179_;
-		gboolean _tmp180_;
-		gboolean _tmp181_;
-		ValaCCodeIdentifier* _tmp201_;
-		ValaCCodeIdentifier* _tmp202_;
-		ValaCCodeFunctionCall* _tmp203_;
-		ValaCCodeFunctionCall* _tmp204_;
+		ValaTargetValue* _tmp173_ = NULL;
+		ValaTargetValue* temp_value;
+		ValaDataType* _tmp174_;
+		gboolean _tmp175_;
+		gboolean _tmp176_;
+		ValaDataType* _tmp182_;
+		gboolean _tmp183_;
+		gboolean _tmp184_;
+		ValaCCodeIdentifier* _tmp204_;
+		ValaCCodeIdentifier* _tmp205_;
+		ValaCCodeFunctionCall* _tmp206_;
+		ValaCCodeFunctionCall* _tmp207_;
 		ValaCCodeFunctionCall* ccall;
-		ValaDataType* _tmp205_;
-		gboolean _tmp206_;
-		gboolean _tmp207_;
-		ValaDataType* _tmp218_;
-		gchar* _tmp219_ = NULL;
+		ValaDataType* _tmp208_;
+		gboolean _tmp209_;
+		gboolean _tmp210_;
+		ValaDataType* _tmp221_;
+		gchar* _tmp222_ = NULL;
 		gchar* type_id;
-		const gchar* _tmp220_;
-		ValaCCodeFunctionCall* _tmp229_;
-		const gchar* _tmp230_;
-		ValaCCodeIdentifier* _tmp231_;
-		ValaCCodeIdentifier* _tmp232_;
-		ValaCCodeFunction* _tmp233_;
-		ValaCCodeFunction* _tmp234_;
-		ValaCCodeFunctionCall* _tmp235_;
-		ValaDataType* _tmp236_;
-		gboolean _tmp237_ = FALSE;
-		ValaDataType* _tmp246_;
-		gboolean _tmp247_;
-		gboolean _tmp248_;
-		ValaDataType* _tmp259_;
-		gboolean _tmp260_ = FALSE;
-		ValaCCodeFunction* _tmp269_;
-		ValaCCodeFunction* _tmp270_;
-		ValaCCodeFunctionCall* _tmp271_;
-		ValaTargetValue* _tmp272_;
-		ValaGLibValue* _tmp273_;
-		_tmp167_ = target_type;
-		_tmp168_ = node;
-		_tmp169_ = TRUE;
-		_tmp170_ = vala_ccode_base_module_create_temp_value (self, _tmp167_, TRUE, _tmp168_, &_tmp169_);
-		temp_value = _tmp170_;
-		_tmp171_ = target_type;
-		_tmp172_ = vala_data_type_get_value_owned (_tmp171_);
-		_tmp173_ = _tmp172_;
-		if (!_tmp173_) {
-			ValaArrayList* _tmp174_;
-			ValaArrayList* _tmp175_;
-			ValaTargetValue* _tmp176_;
-			ValaGLibValue* _tmp177_ = NULL;
-			ValaGLibValue* _tmp178_;
-			_tmp174_ = vala_ccode_base_module_get_temp_ref_values (self);
-			_tmp175_ = _tmp174_;
-			_tmp176_ = temp_value;
-			_tmp177_ = vala_glib_value_copy (VALA_GLIB_VALUE (_tmp176_));
+		const gchar* _tmp223_;
+		ValaCCodeFunctionCall* _tmp232_;
+		const gchar* _tmp233_;
+		ValaCCodeIdentifier* _tmp234_;
+		ValaCCodeIdentifier* _tmp235_;
+		ValaCCodeFunction* _tmp236_;
+		ValaCCodeFunction* _tmp237_;
+		ValaCCodeFunctionCall* _tmp238_;
+		ValaDataType* _tmp239_;
+		gboolean _tmp240_ = FALSE;
+		ValaDataType* _tmp249_;
+		gboolean _tmp250_;
+		gboolean _tmp251_;
+		ValaDataType* _tmp262_;
+		gboolean _tmp263_ = FALSE;
+		ValaCCodeFunction* _tmp272_;
+		ValaCCodeFunction* _tmp273_;
+		ValaCCodeFunctionCall* _tmp274_;
+		ValaTargetValue* _tmp275_;
+		ValaGLibValue* _tmp276_;
+		_tmp170_ = target_type;
+		_tmp171_ = node;
+		_tmp172_ = TRUE;
+		_tmp173_ = vala_ccode_base_module_create_temp_value (self, _tmp170_, TRUE, _tmp171_, &_tmp172_);
+		temp_value = _tmp173_;
+		_tmp174_ = target_type;
+		_tmp175_ = vala_data_type_get_value_owned (_tmp174_);
+		_tmp176_ = _tmp175_;
+		if (!_tmp176_) {
+			ValaArrayList* _tmp177_;
+			ValaArrayList* _tmp178_;
+			ValaTargetValue* _tmp179_;
+			ValaGLibValue* _tmp180_ = NULL;
+			ValaGLibValue* _tmp181_;
+			_tmp177_ = vala_ccode_base_module_get_temp_ref_values (self);
 			_tmp178_ = _tmp177_;
-			vala_list_insert ((ValaList*) _tmp175_, 0, (ValaTargetValue*) _tmp178_);
-			_vala_target_value_unref0 (_tmp178_);
+			_tmp179_ = temp_value;
+			_tmp180_ = vala_glib_value_copy (VALA_GLIB_VALUE (_tmp179_));
+			_tmp181_ = _tmp180_;
+			vala_list_insert ((ValaList*) _tmp178_, 0, (ValaTargetValue*) _tmp181_);
+			_vala_target_value_unref0 (_tmp181_);
 		}
-		_tmp179_ = target_type;
-		_tmp180_ = vala_data_type_get_nullable (_tmp179_);
-		_tmp181_ = _tmp180_;
-		if (_tmp181_) {
-			ValaCCodeIdentifier* _tmp182_;
-			ValaCCodeIdentifier* _tmp183_;
-			ValaCCodeFunctionCall* _tmp184_;
-			ValaCCodeFunctionCall* _tmp185_;
+		_tmp182_ = target_type;
+		_tmp183_ = vala_data_type_get_nullable (_tmp182_);
+		_tmp184_ = _tmp183_;
+		if (_tmp184_) {
+			ValaCCodeIdentifier* _tmp185_;
+			ValaCCodeIdentifier* _tmp186_;
+			ValaCCodeFunctionCall* _tmp187_;
+			ValaCCodeFunctionCall* _tmp188_;
 			ValaCCodeFunctionCall* newcall;
-			ValaCCodeFunctionCall* _tmp186_;
-			ValaCCodeConstant* _tmp187_;
-			ValaCCodeConstant* _tmp188_;
 			ValaCCodeFunctionCall* _tmp189_;
 			ValaCCodeConstant* _tmp190_;
 			ValaCCodeConstant* _tmp191_;
-			ValaTargetValue* _tmp192_;
-			ValaCCodeExpression* _tmp193_ = NULL;
-			ValaCCodeExpression* _tmp194_;
-			ValaCCodeFunctionCall* _tmp195_;
-			ValaCCodeAssignment* _tmp196_;
-			ValaCCodeAssignment* _tmp197_;
-			ValaCCodeAssignment* newassignment;
-			ValaCCodeFunction* _tmp198_;
-			ValaCCodeFunction* _tmp199_;
+			ValaCCodeFunctionCall* _tmp192_;
+			ValaCCodeConstant* _tmp193_;
+			ValaCCodeConstant* _tmp194_;
+			ValaTargetValue* _tmp195_;
+			ValaCCodeExpression* _tmp196_ = NULL;
+			ValaCCodeExpression* _tmp197_;
+			ValaCCodeFunctionCall* _tmp198_;
+			ValaCCodeAssignment* _tmp199_;
 			ValaCCodeAssignment* _tmp200_;
-			_tmp182_ = vala_ccode_identifier_new ("g_new0");
-			_tmp183_ = _tmp182_;
-			_tmp184_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp183_);
-			_tmp185_ = _tmp184_;
-			_vala_ccode_node_unref0 (_tmp183_);
-			newcall = _tmp185_;
-			_tmp186_ = newcall;
-			_tmp187_ = vala_ccode_constant_new ("GValue");
+			ValaCCodeAssignment* newassignment;
+			ValaCCodeFunction* _tmp201_;
+			ValaCCodeFunction* _tmp202_;
+			ValaCCodeAssignment* _tmp203_;
+			_tmp185_ = vala_ccode_identifier_new ("g_new0");
+			_tmp186_ = _tmp185_;
+			_tmp187_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp186_);
 			_tmp188_ = _tmp187_;
-			vala_ccode_function_call_add_argument (_tmp186_, (ValaCCodeExpression*) _tmp188_);
-			_vala_ccode_node_unref0 (_tmp188_);
+			_vala_ccode_node_unref0 (_tmp186_);
+			newcall = _tmp188_;
 			_tmp189_ = newcall;
-			_tmp190_ = vala_ccode_constant_new ("1");
+			_tmp190_ = vala_ccode_constant_new ("GValue");
 			_tmp191_ = _tmp190_;
 			vala_ccode_function_call_add_argument (_tmp189_, (ValaCCodeExpression*) _tmp191_);
 			_vala_ccode_node_unref0 (_tmp191_);
-			_tmp192_ = temp_value;
-			_tmp193_ = vala_ccode_base_module_get_cvalue_ (self, _tmp192_);
+			_tmp192_ = newcall;
+			_tmp193_ = vala_ccode_constant_new ("1");
 			_tmp194_ = _tmp193_;
-			_tmp195_ = newcall;
-			_tmp196_ = vala_ccode_assignment_new (_tmp194_, (ValaCCodeExpression*) _tmp195_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
-			_tmp197_ = _tmp196_;
+			vala_ccode_function_call_add_argument (_tmp192_, (ValaCCodeExpression*) _tmp194_);
 			_vala_ccode_node_unref0 (_tmp194_);
-			newassignment = _tmp197_;
-			_tmp198_ = vala_ccode_base_module_get_ccode (self);
-			_tmp199_ = _tmp198_;
-			_tmp200_ = newassignment;
-			vala_ccode_function_add_expression (_tmp199_, (ValaCCodeExpression*) _tmp200_);
+			_tmp195_ = temp_value;
+			_tmp196_ = vala_ccode_base_module_get_cvalue_ (self, _tmp195_);
+			_tmp197_ = _tmp196_;
+			_tmp198_ = newcall;
+			_tmp199_ = vala_ccode_assignment_new (_tmp197_, (ValaCCodeExpression*) _tmp198_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
+			_tmp200_ = _tmp199_;
+			_vala_ccode_node_unref0 (_tmp197_);
+			newassignment = _tmp200_;
+			_tmp201_ = vala_ccode_base_module_get_ccode (self);
+			_tmp202_ = _tmp201_;
+			_tmp203_ = newassignment;
+			vala_ccode_function_add_expression (_tmp202_, (ValaCCodeExpression*) _tmp203_);
 			_vala_ccode_node_unref0 (newassignment);
 			_vala_ccode_node_unref0 (newcall);
 		}
-		_tmp201_ = vala_ccode_identifier_new ("g_value_init");
-		_tmp202_ = _tmp201_;
-		_tmp203_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp202_);
-		_tmp204_ = _tmp203_;
-		_vala_ccode_node_unref0 (_tmp202_);
-		ccall = _tmp204_;
-		_tmp205_ = target_type;
-		_tmp206_ = vala_data_type_get_nullable (_tmp205_);
+		_tmp204_ = vala_ccode_identifier_new ("g_value_init");
+		_tmp205_ = _tmp204_;
+		_tmp206_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp205_);
 		_tmp207_ = _tmp206_;
-		if (_tmp207_) {
-			ValaCCodeFunctionCall* _tmp208_;
-			ValaTargetValue* _tmp209_;
-			ValaCCodeExpression* _tmp210_ = NULL;
-			ValaCCodeExpression* _tmp211_;
-			_tmp208_ = ccall;
-			_tmp209_ = temp_value;
-			_tmp210_ = vala_ccode_base_module_get_cvalue_ (self, _tmp209_);
-			_tmp211_ = _tmp210_;
-			vala_ccode_function_call_add_argument (_tmp208_, _tmp211_);
-			_vala_ccode_node_unref0 (_tmp211_);
+		_vala_ccode_node_unref0 (_tmp205_);
+		ccall = _tmp207_;
+		_tmp208_ = target_type;
+		_tmp209_ = vala_data_type_get_nullable (_tmp208_);
+		_tmp210_ = _tmp209_;
+		if (_tmp210_) {
+			ValaCCodeFunctionCall* _tmp211_;
+			ValaTargetValue* _tmp212_;
+			ValaCCodeExpression* _tmp213_ = NULL;
+			ValaCCodeExpression* _tmp214_;
+			_tmp211_ = ccall;
+			_tmp212_ = temp_value;
+			_tmp213_ = vala_ccode_base_module_get_cvalue_ (self, _tmp212_);
+			_tmp214_ = _tmp213_;
+			vala_ccode_function_call_add_argument (_tmp211_, _tmp214_);
+			_vala_ccode_node_unref0 (_tmp214_);
 		} else {
-			ValaCCodeFunctionCall* _tmp212_;
-			ValaTargetValue* _tmp213_;
-			ValaCCodeExpression* _tmp214_ = NULL;
-			ValaCCodeExpression* _tmp215_;
-			ValaCCodeUnaryExpression* _tmp216_;
-			ValaCCodeUnaryExpression* _tmp217_;
-			_tmp212_ = ccall;
-			_tmp213_ = temp_value;
-			_tmp214_ = vala_ccode_base_module_get_cvalue_ (self, _tmp213_);
-			_tmp215_ = _tmp214_;
-			_tmp216_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp215_);
-			_tmp217_ = _tmp216_;
-			vala_ccode_function_call_add_argument (_tmp212_, (ValaCCodeExpression*) _tmp217_);
-			_vala_ccode_node_unref0 (_tmp217_);
-			_vala_ccode_node_unref0 (_tmp215_);
-		}
-		_tmp218_ = type;
-		_tmp219_ = vala_ccode_base_module_get_ccode_type_id ((ValaCodeNode*) _tmp218_);
-		type_id = _tmp219_;
-		_tmp220_ = type_id;
-		if (g_strcmp0 (_tmp220_, "") == 0) {
-			ValaCodeNode* _tmp221_;
-			ValaSourceReference* _tmp222_;
-			ValaSourceReference* _tmp223_;
-			ValaDataType* _tmp224_;
-			gchar* _tmp225_ = NULL;
-			gchar* _tmp226_;
-			gchar* _tmp227_ = NULL;
-			gchar* _tmp228_;
-			_tmp221_ = node;
-			_tmp222_ = vala_code_node_get_source_reference (_tmp221_);
-			_tmp223_ = _tmp222_;
-			_tmp224_ = type;
-			_tmp225_ = vala_code_node_to_string ((ValaCodeNode*) _tmp224_);
+			ValaCCodeFunctionCall* _tmp215_;
+			ValaTargetValue* _tmp216_;
+			ValaCCodeExpression* _tmp217_ = NULL;
+			ValaCCodeExpression* _tmp218_;
+			ValaCCodeUnaryExpression* _tmp219_;
+			ValaCCodeUnaryExpression* _tmp220_;
+			_tmp215_ = ccall;
+			_tmp216_ = temp_value;
+			_tmp217_ = vala_ccode_base_module_get_cvalue_ (self, _tmp216_);
+			_tmp218_ = _tmp217_;
+			_tmp219_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp218_);
+			_tmp220_ = _tmp219_;
+			vala_ccode_function_call_add_argument (_tmp215_, (ValaCCodeExpression*) _tmp220_);
+			_vala_ccode_node_unref0 (_tmp220_);
+			_vala_ccode_node_unref0 (_tmp218_);
+		}
+		_tmp221_ = type;
+		_tmp222_ = vala_ccode_base_module_get_ccode_type_id ((ValaCodeNode*) _tmp221_);
+		type_id = _tmp222_;
+		_tmp223_ = type_id;
+		if (g_strcmp0 (_tmp223_, "") == 0) {
+			ValaCodeNode* _tmp224_;
+			ValaSourceReference* _tmp225_;
+			ValaSourceReference* _tmp226_;
+			ValaDataType* _tmp227_;
+			gchar* _tmp228_ = NULL;
+			gchar* _tmp229_;
+			gchar* _tmp230_ = NULL;
+			gchar* _tmp231_;
+			_tmp224_ = node;
+			_tmp225_ = vala_code_node_get_source_reference (_tmp224_);
 			_tmp226_ = _tmp225_;
-			_tmp227_ = g_strdup_printf ("GValue boxing of type `%s' is not supported", _tmp226_);
-			_tmp228_ = _tmp227_;
-			vala_report_error (_tmp223_, _tmp228_);
-			_g_free0 (_tmp228_);
-			_g_free0 (_tmp226_);
+			_tmp227_ = type;
+			_tmp228_ = vala_code_node_to_string ((ValaCodeNode*) _tmp227_);
+			_tmp229_ = _tmp228_;
+			_tmp230_ = g_strdup_printf ("GValue boxing of type `%s' is not supported", _tmp229_);
+			_tmp231_ = _tmp230_;
+			vala_report_error (_tmp226_, _tmp231_);
+			_g_free0 (_tmp231_);
+			_g_free0 (_tmp229_);
 		}
-		_tmp229_ = ccall;
-		_tmp230_ = type_id;
-		_tmp231_ = vala_ccode_identifier_new (_tmp230_);
-		_tmp232_ = _tmp231_;
-		vala_ccode_function_call_add_argument (_tmp229_, (ValaCCodeExpression*) _tmp232_);
-		_vala_ccode_node_unref0 (_tmp232_);
-		_tmp233_ = vala_ccode_base_module_get_ccode (self);
-		_tmp234_ = _tmp233_;
-		_tmp235_ = ccall;
-		vala_ccode_function_add_expression (_tmp234_, (ValaCCodeExpression*) _tmp235_);
-		_tmp236_ = type;
-		_tmp237_ = vala_ccode_base_module_requires_destroy (self, _tmp236_);
-		if (_tmp237_) {
-			ValaDataType* _tmp238_;
-			ValaCCodeIdentifier* _tmp239_ = NULL;
-			ValaCCodeIdentifier* _tmp240_;
-			ValaCCodeFunctionCall* _tmp241_;
-			_tmp238_ = type;
-			_tmp239_ = vala_ccode_base_module_get_value_taker_function (self, _tmp238_);
-			_tmp240_ = _tmp239_;
-			_tmp241_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp240_);
+		_tmp232_ = ccall;
+		_tmp233_ = type_id;
+		_tmp234_ = vala_ccode_identifier_new (_tmp233_);
+		_tmp235_ = _tmp234_;
+		vala_ccode_function_call_add_argument (_tmp232_, (ValaCCodeExpression*) _tmp235_);
+		_vala_ccode_node_unref0 (_tmp235_);
+		_tmp236_ = vala_ccode_base_module_get_ccode (self);
+		_tmp237_ = _tmp236_;
+		_tmp238_ = ccall;
+		vala_ccode_function_add_expression (_tmp237_, (ValaCCodeExpression*) _tmp238_);
+		_tmp239_ = type;
+		_tmp240_ = vala_ccode_base_module_requires_destroy (self, _tmp239_);
+		if (_tmp240_) {
+			ValaDataType* _tmp241_;
+			ValaCCodeIdentifier* _tmp242_ = NULL;
+			ValaCCodeIdentifier* _tmp243_;
+			ValaCCodeFunctionCall* _tmp244_;
+			_tmp241_ = type;
+			_tmp242_ = vala_ccode_base_module_get_value_taker_function (self, _tmp241_);
+			_tmp243_ = _tmp242_;
+			_tmp244_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp243_);
 			_vala_ccode_node_unref0 (ccall);
-			ccall = _tmp241_;
-			_vala_ccode_node_unref0 (_tmp240_);
+			ccall = _tmp244_;
+			_vala_ccode_node_unref0 (_tmp243_);
 		} else {
-			ValaDataType* _tmp242_;
-			ValaCCodeIdentifier* _tmp243_ = NULL;
-			ValaCCodeIdentifier* _tmp244_;
-			ValaCCodeFunctionCall* _tmp245_;
-			_tmp242_ = type;
-			_tmp243_ = vala_ccode_base_module_get_value_setter_function (self, _tmp242_);
-			_tmp244_ = _tmp243_;
-			_tmp245_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp244_);
+			ValaDataType* _tmp245_;
+			ValaCCodeIdentifier* _tmp246_ = NULL;
+			ValaCCodeIdentifier* _tmp247_;
+			ValaCCodeFunctionCall* _tmp248_;
+			_tmp245_ = type;
+			_tmp246_ = vala_ccode_base_module_get_value_setter_function (self, _tmp245_);
+			_tmp247_ = _tmp246_;
+			_tmp248_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp247_);
 			_vala_ccode_node_unref0 (ccall);
-			ccall = _tmp245_;
-			_vala_ccode_node_unref0 (_tmp244_);
-		}
-		_tmp246_ = target_type;
-		_tmp247_ = vala_data_type_get_nullable (_tmp246_);
-		_tmp248_ = _tmp247_;
-		if (_tmp248_) {
-			ValaCCodeFunctionCall* _tmp249_;
-			ValaTargetValue* _tmp250_;
-			ValaCCodeExpression* _tmp251_ = NULL;
-			ValaCCodeExpression* _tmp252_;
-			_tmp249_ = ccall;
-			_tmp250_ = temp_value;
-			_tmp251_ = vala_ccode_base_module_get_cvalue_ (self, _tmp250_);
-			_tmp252_ = _tmp251_;
-			vala_ccode_function_call_add_argument (_tmp249_, _tmp252_);
-			_vala_ccode_node_unref0 (_tmp252_);
+			ccall = _tmp248_;
+			_vala_ccode_node_unref0 (_tmp247_);
+		}
+		_tmp249_ = target_type;
+		_tmp250_ = vala_data_type_get_nullable (_tmp249_);
+		_tmp251_ = _tmp250_;
+		if (_tmp251_) {
+			ValaCCodeFunctionCall* _tmp252_;
+			ValaTargetValue* _tmp253_;
+			ValaCCodeExpression* _tmp254_ = NULL;
+			ValaCCodeExpression* _tmp255_;
+			_tmp252_ = ccall;
+			_tmp253_ = temp_value;
+			_tmp254_ = vala_ccode_base_module_get_cvalue_ (self, _tmp253_);
+			_tmp255_ = _tmp254_;
+			vala_ccode_function_call_add_argument (_tmp252_, _tmp255_);
+			_vala_ccode_node_unref0 (_tmp255_);
 		} else {
-			ValaCCodeFunctionCall* _tmp253_;
-			ValaTargetValue* _tmp254_;
-			ValaCCodeExpression* _tmp255_ = NULL;
-			ValaCCodeExpression* _tmp256_;
-			ValaCCodeUnaryExpression* _tmp257_;
-			ValaCCodeUnaryExpression* _tmp258_;
-			_tmp253_ = ccall;
-			_tmp254_ = temp_value;
-			_tmp255_ = vala_ccode_base_module_get_cvalue_ (self, _tmp254_);
-			_tmp256_ = _tmp255_;
-			_tmp257_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp256_);
-			_tmp258_ = _tmp257_;
-			vala_ccode_function_call_add_argument (_tmp253_, (ValaCCodeExpression*) _tmp258_);
-			_vala_ccode_node_unref0 (_tmp258_);
-			_vala_ccode_node_unref0 (_tmp256_);
-		}
-		_tmp259_ = type;
-		_tmp260_ = vala_data_type_is_real_non_null_struct_type (_tmp259_);
-		if (_tmp260_) {
-			ValaCCodeFunctionCall* _tmp261_;
-			ValaGLibValue* _tmp262_;
-			ValaCCodeExpression* _tmp263_;
-			ValaCCodeUnaryExpression* _tmp264_;
-			ValaCCodeUnaryExpression* _tmp265_;
-			_tmp261_ = ccall;
-			_tmp262_ = _result_;
-			_tmp263_ = _tmp262_->cvalue;
-			_tmp264_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp263_);
-			_tmp265_ = _tmp264_;
-			vala_ccode_function_call_add_argument (_tmp261_, (ValaCCodeExpression*) _tmp265_);
-			_vala_ccode_node_unref0 (_tmp265_);
+			ValaCCodeFunctionCall* _tmp256_;
+			ValaTargetValue* _tmp257_;
+			ValaCCodeExpression* _tmp258_ = NULL;
+			ValaCCodeExpression* _tmp259_;
+			ValaCCodeUnaryExpression* _tmp260_;
+			ValaCCodeUnaryExpression* _tmp261_;
+			_tmp256_ = ccall;
+			_tmp257_ = temp_value;
+			_tmp258_ = vala_ccode_base_module_get_cvalue_ (self, _tmp257_);
+			_tmp259_ = _tmp258_;
+			_tmp260_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp259_);
+			_tmp261_ = _tmp260_;
+			vala_ccode_function_call_add_argument (_tmp256_, (ValaCCodeExpression*) _tmp261_);
+			_vala_ccode_node_unref0 (_tmp261_);
+			_vala_ccode_node_unref0 (_tmp259_);
+		}
+		_tmp262_ = type;
+		_tmp263_ = vala_data_type_is_real_non_null_struct_type (_tmp262_);
+		if (_tmp263_) {
+			ValaCCodeFunctionCall* _tmp264_;
+			ValaGLibValue* _tmp265_;
+			ValaCCodeExpression* _tmp266_;
+			ValaCCodeUnaryExpression* _tmp267_;
+			ValaCCodeUnaryExpression* _tmp268_;
+			_tmp264_ = ccall;
+			_tmp265_ = _result_;
+			_tmp266_ = _tmp265_->cvalue;
+			_tmp267_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp266_);
+			_tmp268_ = _tmp267_;
+			vala_ccode_function_call_add_argument (_tmp264_, (ValaCCodeExpression*) _tmp268_);
+			_vala_ccode_node_unref0 (_tmp268_);
 		} else {
-			ValaCCodeFunctionCall* _tmp266_;
-			ValaGLibValue* _tmp267_;
-			ValaCCodeExpression* _tmp268_;
-			_tmp266_ = ccall;
-			_tmp267_ = _result_;
-			_tmp268_ = _tmp267_->cvalue;
-			vala_ccode_function_call_add_argument (_tmp266_, _tmp268_);
-		}
-		_tmp269_ = vala_ccode_base_module_get_ccode (self);
-		_tmp270_ = _tmp269_;
-		_tmp271_ = ccall;
-		vala_ccode_function_add_expression (_tmp270_, (ValaCCodeExpression*) _tmp271_);
-		_tmp272_ = temp_value;
-		_tmp273_ = _vala_target_value_ref0 (VALA_GLIB_VALUE (_tmp272_));
+			ValaCCodeFunctionCall* _tmp269_;
+			ValaGLibValue* _tmp270_;
+			ValaCCodeExpression* _tmp271_;
+			_tmp269_ = ccall;
+			_tmp270_ = _result_;
+			_tmp271_ = _tmp270_->cvalue;
+			vala_ccode_function_call_add_argument (_tmp269_, _tmp271_);
+		}
+		_tmp272_ = vala_ccode_base_module_get_ccode (self);
+		_tmp273_ = _tmp272_;
+		_tmp274_ = ccall;
+		vala_ccode_function_add_expression (_tmp273_, (ValaCCodeExpression*) _tmp274_);
+		_tmp275_ = temp_value;
+		_tmp276_ = _vala_target_value_ref0 (VALA_GLIB_VALUE (_tmp275_));
 		_vala_target_value_unref0 (_result_);
-		_result_ = _tmp273_;
+		_result_ = _tmp276_;
 		requires_temp_value = FALSE;
 		_g_free0 (type_id);
 		_vala_ccode_node_unref0 (ccall);
 		_vala_target_value_unref0 (temp_value);
 	} else {
-		gboolean _tmp274_;
-		_tmp274_ = gvariant_boxing;
-		if (_tmp274_) {
-			gint _tmp275_;
-			gint _tmp276_;
-			gchar* _tmp277_ = NULL;
+		gboolean _tmp277_;
+		_tmp277_ = gvariant_boxing;
+		if (_tmp277_) {
+			gint _tmp278_;
+			gint _tmp279_;
+			gchar* _tmp280_ = NULL;
 			gchar* variant_func;
-			const gchar* _tmp278_;
-			ValaCCodeIdentifier* _tmp279_;
-			ValaCCodeIdentifier* _tmp280_;
-			ValaCCodeFunctionCall* _tmp281_;
-			ValaCCodeFunctionCall* _tmp282_;
+			const gchar* _tmp281_;
+			ValaCCodeIdentifier* _tmp282_;
+			ValaCCodeIdentifier* _tmp283_;
+			ValaCCodeFunctionCall* _tmp284_;
+			ValaCCodeFunctionCall* _tmp285_;
 			ValaCCodeFunctionCall* ccall;
-			ValaCCodeFunctionCall* _tmp283_;
-			ValaGLibValue* _tmp284_;
-			ValaCCodeExpression* _tmp285_;
-			const gchar* _tmp286_;
-			ValaCCodeFunction* _tmp287_;
+			ValaCCodeFunctionCall* _tmp286_;
+			ValaGLibValue* _tmp287_;
+			ValaCCodeExpression* _tmp288_;
+			const gchar* _tmp289_;
+			ValaCCodeFunction* _tmp290_;
 			ValaCCodeFunction* cfunc;
-			ValaCCodeFunction* _tmp288_;
-			ValaCCodeFunction* _tmp289_;
-			ValaDataType* _tmp290_;
-			gchar* _tmp291_ = NULL;
-			gchar* _tmp292_;
-			ValaCCodeParameter* _tmp293_;
-			ValaCCodeParameter* _tmp294_;
-			ValaDataType* _tmp295_;
-			ValaCCodeFunction* _tmp316_;
-			ValaCCodeIdentifier* _tmp317_;
-			ValaCCodeIdentifier* _tmp318_;
-			ValaCCodeFunctionCall* _tmp319_;
-			ValaCCodeFunctionCall* _tmp320_;
+			ValaCCodeFunction* _tmp291_;
+			ValaCCodeFunction* _tmp292_;
+			ValaDataType* _tmp293_;
+			gchar* _tmp294_ = NULL;
+			gchar* _tmp295_;
+			ValaCCodeParameter* _tmp296_;
+			ValaCCodeParameter* _tmp297_;
+			ValaDataType* _tmp298_;
+			ValaCCodeFunction* _tmp319_;
+			ValaCCodeIdentifier* _tmp320_;
+			ValaCCodeIdentifier* _tmp321_;
+			ValaCCodeFunctionCall* _tmp322_;
+			ValaCCodeFunctionCall* _tmp323_;
 			ValaCCodeFunctionCall* sink;
-			ValaCCodeFunctionCall* _tmp321_;
-			ValaDataType* _tmp322_;
-			ValaCCodeIdentifier* _tmp323_;
-			ValaCCodeIdentifier* _tmp324_;
-			ValaCCodeExpression* _tmp325_ = NULL;
-			ValaCCodeExpression* _tmp326_;
-			ValaCCodeFunction* _tmp327_;
-			ValaCCodeFunction* _tmp328_;
-			ValaCCodeFunctionCall* _tmp329_;
-			ValaCCodeFile* _tmp330_;
+			ValaCCodeFunctionCall* _tmp324_;
+			ValaDataType* _tmp325_;
+			ValaCCodeIdentifier* _tmp326_;
+			ValaCCodeIdentifier* _tmp327_;
+			ValaCCodeExpression* _tmp328_ = NULL;
+			ValaCCodeExpression* _tmp329_;
+			ValaCCodeFunction* _tmp330_;
 			ValaCCodeFunction* _tmp331_;
-			ValaCCodeFile* _tmp332_;
-			ValaCCodeFunction* _tmp333_;
-			ValaGLibValue* _tmp334_;
-			ValaCCodeFunctionCall* _tmp335_;
-			ValaCCodeExpression* _tmp336_;
-			_tmp275_ = self->priv->next_variant_function_id;
-			self->priv->next_variant_function_id = _tmp275_ + 1;
-			_tmp276_ = self->priv->next_variant_function_id;
-			_tmp277_ = g_strdup_printf ("_variant_new%d", _tmp276_);
-			variant_func = _tmp277_;
-			_tmp278_ = variant_func;
-			_tmp279_ = vala_ccode_identifier_new (_tmp278_);
-			_tmp280_ = _tmp279_;
-			_tmp281_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp280_);
-			_tmp282_ = _tmp281_;
-			_vala_ccode_node_unref0 (_tmp280_);
-			ccall = _tmp282_;
-			_tmp283_ = ccall;
-			_tmp284_ = _result_;
-			_tmp285_ = _tmp284_->cvalue;
-			vala_ccode_function_call_add_argument (_tmp283_, _tmp285_);
-			_tmp286_ = variant_func;
-			_tmp287_ = vala_ccode_function_new (_tmp286_, "GVariant*");
-			cfunc = _tmp287_;
-			_tmp288_ = cfunc;
-			vala_ccode_function_set_modifiers (_tmp288_, VALA_CCODE_MODIFIERS_STATIC);
-			_tmp289_ = cfunc;
-			_tmp290_ = type;
-			_tmp291_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp290_);
-			_tmp292_ = _tmp291_;
-			_tmp293_ = vala_ccode_parameter_new ("value", _tmp292_);
-			_tmp294_ = _tmp293_;
-			vala_ccode_function_add_parameter (_tmp289_, _tmp294_);
-			_vala_ccode_node_unref0 (_tmp294_);
-			_g_free0 (_tmp292_);
-			_tmp295_ = type;
-			if (VALA_IS_ARRAY_TYPE (_tmp295_)) {
-				ValaDataType* _tmp296_;
-				ValaArrayType* _tmp297_;
+			ValaCCodeFunctionCall* _tmp332_;
+			ValaCCodeFile* _tmp333_;
+			ValaCCodeFunction* _tmp334_;
+			ValaCCodeFile* _tmp335_;
+			ValaCCodeFunction* _tmp336_;
+			ValaGLibValue* _tmp337_;
+			ValaCCodeFunctionCall* _tmp338_;
+			ValaCCodeExpression* _tmp339_;
+			_tmp278_ = self->priv->next_variant_function_id;
+			self->priv->next_variant_function_id = _tmp278_ + 1;
+			_tmp279_ = self->priv->next_variant_function_id;
+			_tmp280_ = g_strdup_printf ("_variant_new%d", _tmp279_);
+			variant_func = _tmp280_;
+			_tmp281_ = variant_func;
+			_tmp282_ = vala_ccode_identifier_new (_tmp281_);
+			_tmp283_ = _tmp282_;
+			_tmp284_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp283_);
+			_tmp285_ = _tmp284_;
+			_vala_ccode_node_unref0 (_tmp283_);
+			ccall = _tmp285_;
+			_tmp286_ = ccall;
+			_tmp287_ = _result_;
+			_tmp288_ = _tmp287_->cvalue;
+			vala_ccode_function_call_add_argument (_tmp286_, _tmp288_);
+			_tmp289_ = variant_func;
+			_tmp290_ = vala_ccode_function_new (_tmp289_, "GVariant*");
+			cfunc = _tmp290_;
+			_tmp291_ = cfunc;
+			vala_ccode_function_set_modifiers (_tmp291_, VALA_CCODE_MODIFIERS_STATIC);
+			_tmp292_ = cfunc;
+			_tmp293_ = type;
+			_tmp294_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp293_);
+			_tmp295_ = _tmp294_;
+			_tmp296_ = vala_ccode_parameter_new ("value", _tmp295_);
+			_tmp297_ = _tmp296_;
+			vala_ccode_function_add_parameter (_tmp292_, _tmp297_);
+			_vala_ccode_node_unref0 (_tmp297_);
+			_g_free0 (_tmp295_);
+			_tmp298_ = type;
+			if (VALA_IS_ARRAY_TYPE (_tmp298_)) {
+				ValaDataType* _tmp299_;
+				ValaArrayType* _tmp300_;
 				ValaArrayType* array_type;
-				_tmp296_ = type;
-				_tmp297_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp296_));
-				array_type = _tmp297_;
+				_tmp299_ = type;
+				_tmp300_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp299_));
+				array_type = _tmp300_;
 				{
 					gint dim;
 					dim = 1;
 					{
-						gboolean _tmp298_;
-						_tmp298_ = TRUE;
+						gboolean _tmp301_;
+						_tmp301_ = TRUE;
 						while (TRUE) {
-							gboolean _tmp299_;
-							gint _tmp301_;
-							ValaArrayType* _tmp302_;
-							gint _tmp303_;
+							gboolean _tmp302_;
 							gint _tmp304_;
-							ValaCCodeFunctionCall* _tmp305_;
-							ValaTargetValue* _tmp306_;
+							ValaArrayType* _tmp305_;
+							gint _tmp306_;
 							gint _tmp307_;
-							ValaCCodeExpression* _tmp308_ = NULL;
-							ValaCCodeExpression* _tmp309_;
-							ValaCCodeFunction* _tmp310_;
-							gint _tmp311_;
-							gchar* _tmp312_ = NULL;
-							gchar* _tmp313_;
-							ValaCCodeParameter* _tmp314_;
-							ValaCCodeParameter* _tmp315_;
-							_tmp299_ = _tmp298_;
-							if (!_tmp299_) {
-								gint _tmp300_;
-								_tmp300_ = dim;
-								dim = _tmp300_ + 1;
+							ValaCCodeFunctionCall* _tmp308_;
+							ValaTargetValue* _tmp309_;
+							gint _tmp310_;
+							ValaCCodeExpression* _tmp311_ = NULL;
+							ValaCCodeExpression* _tmp312_;
+							ValaCCodeFunction* _tmp313_;
+							gint _tmp314_;
+							gchar* _tmp315_ = NULL;
+							gchar* _tmp316_;
+							ValaCCodeParameter* _tmp317_;
+							ValaCCodeParameter* _tmp318_;
+							_tmp302_ = _tmp301_;
+							if (!_tmp302_) {
+								gint _tmp303_;
+								_tmp303_ = dim;
+								dim = _tmp303_ + 1;
 							}
-							_tmp298_ = FALSE;
-							_tmp301_ = dim;
-							_tmp302_ = array_type;
-							_tmp303_ = vala_array_type_get_rank (_tmp302_);
-							_tmp304_ = _tmp303_;
-							if (!(_tmp301_ <= _tmp304_)) {
+							_tmp301_ = FALSE;
+							_tmp304_ = dim;
+							_tmp305_ = array_type;
+							_tmp306_ = vala_array_type_get_rank (_tmp305_);
+							_tmp307_ = _tmp306_;
+							if (!(_tmp304_ <= _tmp307_)) {
 								break;
 							}
-							_tmp305_ = ccall;
-							_tmp306_ = value;
-							_tmp307_ = dim;
-							_tmp308_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp306_, _tmp307_);
-							_tmp309_ = _tmp308_;
-							vala_ccode_function_call_add_argument (_tmp305_, _tmp309_);
-							_vala_ccode_node_unref0 (_tmp309_);
-							_tmp310_ = cfunc;
-							_tmp311_ = dim;
-							_tmp312_ = vala_ccode_base_module_get_array_length_cname (self, "value", _tmp311_);
-							_tmp313_ = _tmp312_;
-							_tmp314_ = vala_ccode_parameter_new (_tmp313_, "gint");
-							_tmp315_ = _tmp314_;
-							vala_ccode_function_add_parameter (_tmp310_, _tmp315_);
-							_vala_ccode_node_unref0 (_tmp315_);
-							_g_free0 (_tmp313_);
+							_tmp308_ = ccall;
+							_tmp309_ = value;
+							_tmp310_ = dim;
+							_tmp311_ = vala_ccode_base_module_get_array_length_cvalue (self, _tmp309_, _tmp310_);
+							_tmp312_ = _tmp311_;
+							vala_ccode_function_call_add_argument (_tmp308_, _tmp312_);
+							_vala_ccode_node_unref0 (_tmp312_);
+							_tmp313_ = cfunc;
+							_tmp314_ = dim;
+							_tmp315_ = vala_ccode_base_module_get_array_length_cname (self, "value", _tmp314_);
+							_tmp316_ = _tmp315_;
+							_tmp317_ = vala_ccode_parameter_new (_tmp316_, "gint");
+							_tmp318_ = _tmp317_;
+							vala_ccode_function_add_parameter (_tmp313_, _tmp318_);
+							_vala_ccode_node_unref0 (_tmp318_);
+							_g_free0 (_tmp316_);
 						}
 					}
 				}
 				_vala_code_node_unref0 (array_type);
 			}
-			_tmp316_ = cfunc;
-			vala_ccode_base_module_push_function (self, _tmp316_);
-			_tmp317_ = vala_ccode_identifier_new ("g_variant_ref_sink");
-			_tmp318_ = _tmp317_;
-			_tmp319_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp318_);
-			_tmp320_ = _tmp319_;
-			_vala_ccode_node_unref0 (_tmp318_);
-			sink = _tmp320_;
-			_tmp321_ = sink;
-			_tmp322_ = type;
-			_tmp323_ = vala_ccode_identifier_new ("value");
-			_tmp324_ = _tmp323_;
-			_tmp325_ = vala_ccode_base_module_serialize_expression (self, _tmp322_, (ValaCCodeExpression*) _tmp324_);
-			_tmp326_ = _tmp325_;
-			vala_ccode_function_call_add_argument (_tmp321_, _tmp326_);
-			_vala_ccode_node_unref0 (_tmp326_);
-			_vala_ccode_node_unref0 (_tmp324_);
-			_tmp327_ = vala_ccode_base_module_get_ccode (self);
-			_tmp328_ = _tmp327_;
-			_tmp329_ = sink;
-			vala_ccode_function_add_return (_tmp328_, (ValaCCodeExpression*) _tmp329_);
+			_tmp319_ = cfunc;
+			vala_ccode_base_module_push_function (self, _tmp319_);
+			_tmp320_ = vala_ccode_identifier_new ("g_variant_ref_sink");
+			_tmp321_ = _tmp320_;
+			_tmp322_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp321_);
+			_tmp323_ = _tmp322_;
+			_vala_ccode_node_unref0 (_tmp321_);
+			sink = _tmp323_;
+			_tmp324_ = sink;
+			_tmp325_ = type;
+			_tmp326_ = vala_ccode_identifier_new ("value");
+			_tmp327_ = _tmp326_;
+			_tmp328_ = vala_ccode_base_module_serialize_expression (self, _tmp325_, (ValaCCodeExpression*) _tmp327_);
+			_tmp329_ = _tmp328_;
+			vala_ccode_function_call_add_argument (_tmp324_, _tmp329_);
+			_vala_ccode_node_unref0 (_tmp329_);
+			_vala_ccode_node_unref0 (_tmp327_);
+			_tmp330_ = vala_ccode_base_module_get_ccode (self);
+			_tmp331_ = _tmp330_;
+			_tmp332_ = sink;
+			vala_ccode_function_add_return (_tmp331_, (ValaCCodeExpression*) _tmp332_);
 			vala_ccode_base_module_pop_function (self);
-			_tmp330_ = self->cfile;
-			_tmp331_ = cfunc;
-			vala_ccode_file_add_function_declaration (_tmp330_, _tmp331_);
-			_tmp332_ = self->cfile;
-			_tmp333_ = cfunc;
-			vala_ccode_file_add_function (_tmp332_, _tmp333_);
-			_tmp334_ = _result_;
-			_tmp335_ = ccall;
-			_tmp336_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp335_);
-			_vala_ccode_node_unref0 (_tmp334_->cvalue);
-			_tmp334_->cvalue = _tmp336_;
+			_tmp333_ = self->cfile;
+			_tmp334_ = cfunc;
+			vala_ccode_file_add_function_declaration (_tmp333_, _tmp334_);
+			_tmp335_ = self->cfile;
+			_tmp336_ = cfunc;
+			vala_ccode_file_add_function (_tmp335_, _tmp336_);
+			_tmp337_ = _result_;
+			_tmp338_ = ccall;
+			_tmp339_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp338_);
+			_vala_ccode_node_unref0 (_tmp337_->cvalue);
+			_tmp337_->cvalue = _tmp339_;
 			requires_temp_value = TRUE;
 			_vala_ccode_node_unref0 (sink);
 			_vala_ccode_node_unref0 (cfunc);
 			_vala_ccode_node_unref0 (ccall);
 			_g_free0 (variant_func);
 		} else {
-			gboolean _tmp337_;
-			_tmp337_ = boxing;
-			if (_tmp337_) {
-				ValaGLibValue* _tmp338_;
-				ValaDataType* _tmp339_;
-				ValaDataType* _tmp340_;
-				gboolean _tmp341_ = FALSE;
-				ValaGLibValue* _tmp342_;
-				gboolean _tmp343_;
-				gboolean _tmp351_;
-				ValaGLibValue* _tmp366_;
-				ValaGLibValue* _tmp367_;
-				ValaCCodeExpression* _tmp368_;
-				ValaCCodeUnaryExpression* _tmp369_;
+			gboolean _tmp340_;
+			_tmp340_ = boxing;
+			if (_tmp340_) {
+				ValaGLibValue* _tmp341_;
+				ValaDataType* _tmp342_;
+				ValaDataType* _tmp343_;
+				gboolean _tmp344_ = FALSE;
+				ValaGLibValue* _tmp345_;
+				gboolean _tmp346_;
+				gboolean _tmp354_;
+				ValaGLibValue* _tmp369_;
 				ValaGLibValue* _tmp370_;
-				ValaGLibValue* _tmp371_;
-				ValaDataType* _tmp372_;
-				ValaDataType* _tmp373_;
-				_tmp338_ = _result_;
-				_tmp339_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp338_);
-				_tmp340_ = _tmp339_;
-				vala_data_type_set_nullable (_tmp340_, FALSE);
-				_tmp342_ = _result_;
-				_tmp343_ = _tmp342_->lvalue;
-				if (!_tmp343_) {
-					_tmp341_ = TRUE;
+				ValaCCodeExpression* _tmp371_;
+				ValaCCodeUnaryExpression* _tmp372_;
+				ValaGLibValue* _tmp373_;
+				ValaGLibValue* _tmp374_;
+				ValaDataType* _tmp375_;
+				ValaDataType* _tmp376_;
+				_tmp341_ = _result_;
+				_tmp342_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp341_);
+				_tmp343_ = _tmp342_;
+				vala_data_type_set_nullable (_tmp343_, FALSE);
+				_tmp345_ = _result_;
+				_tmp346_ = _tmp345_->lvalue;
+				if (!_tmp346_) {
+					_tmp344_ = TRUE;
 				} else {
-					ValaGLibValue* _tmp344_;
-					ValaDataType* _tmp345_;
-					ValaDataType* _tmp346_;
-					ValaTargetValue* _tmp347_;
+					ValaGLibValue* _tmp347_;
 					ValaDataType* _tmp348_;
 					ValaDataType* _tmp349_;
-					gboolean _tmp350_ = FALSE;
-					_tmp344_ = _result_;
-					_tmp345_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp344_);
-					_tmp346_ = _tmp345_;
-					_tmp347_ = value;
-					_tmp348_ = vala_target_value_get_value_type (_tmp347_);
+					ValaTargetValue* _tmp350_;
+					ValaDataType* _tmp351_;
+					ValaDataType* _tmp352_;
+					gboolean _tmp353_ = FALSE;
+					_tmp347_ = _result_;
+					_tmp348_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp347_);
 					_tmp349_ = _tmp348_;
-					_tmp350_ = vala_data_type_equals (_tmp346_, _tmp349_);
-					_tmp341_ = !_tmp350_;
+					_tmp350_ = value;
+					_tmp351_ = vala_target_value_get_value_type (_tmp350_);
+					_tmp352_ = _tmp351_;
+					_tmp353_ = vala_data_type_equals (_tmp349_, _tmp352_);
+					_tmp344_ = !_tmp353_;
 				}
-				_tmp351_ = _tmp341_;
-				if (_tmp351_) {
-					ValaGLibValue* _tmp352_;
-					ValaGLibValue* _tmp353_;
-					ValaCCodeExpression* _tmp354_;
-					ValaTargetValue* _tmp355_;
-					ValaDataType* _tmp356_;
-					ValaDataType* _tmp357_;
-					ValaGLibValue* _tmp358_;
+				_tmp354_ = _tmp344_;
+				if (_tmp354_) {
+					ValaGLibValue* _tmp355_;
+					ValaGLibValue* _tmp356_;
+					ValaCCodeExpression* _tmp357_;
+					ValaTargetValue* _tmp358_;
 					ValaDataType* _tmp359_;
 					ValaDataType* _tmp360_;
-					ValaCodeNode* _tmp361_;
-					ValaCCodeExpression* _tmp362_ = NULL;
-					ValaGLibValue* _tmp363_;
+					ValaGLibValue* _tmp361_;
+					ValaDataType* _tmp362_;
+					ValaDataType* _tmp363_;
 					ValaCodeNode* _tmp364_;
-					ValaTargetValue* _tmp365_ = NULL;
-					_tmp352_ = _result_;
-					_tmp353_ = _result_;
-					_tmp354_ = _tmp353_->cvalue;
-					_tmp355_ = value;
-					_tmp356_ = vala_target_value_get_value_type (_tmp355_);
-					_tmp357_ = _tmp356_;
-					_tmp358_ = _result_;
-					_tmp359_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp358_);
+					ValaCCodeExpression* _tmp365_ = NULL;
+					ValaGLibValue* _tmp366_;
+					ValaCodeNode* _tmp367_;
+					ValaTargetValue* _tmp368_ = NULL;
+					_tmp355_ = _result_;
+					_tmp356_ = _result_;
+					_tmp357_ = _tmp356_->cvalue;
+					_tmp358_ = value;
+					_tmp359_ = vala_target_value_get_value_type (_tmp358_);
 					_tmp360_ = _tmp359_;
-					_tmp361_ = node;
-					_tmp362_ = vala_ccode_base_module_get_implicit_cast_expression (self, _tmp354_, _tmp357_, _tmp360_, _tmp361_);
-					_vala_ccode_node_unref0 (_tmp352_->cvalue);
-					_tmp352_->cvalue = _tmp362_;
-					_tmp363_ = _result_;
+					_tmp361_ = _result_;
+					_tmp362_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp361_);
+					_tmp363_ = _tmp362_;
 					_tmp364_ = node;
-					_tmp365_ = vala_ccode_base_module_store_temp_value (self, (ValaTargetValue*) _tmp363_, _tmp364_, NULL);
+					_tmp365_ = vala_ccode_base_module_get_implicit_cast_expression (self, _tmp357_, _tmp360_, _tmp363_, _tmp364_);
+					_vala_ccode_node_unref0 (_tmp355_->cvalue);
+					_tmp355_->cvalue = _tmp365_;
+					_tmp366_ = _result_;
+					_tmp367_ = node;
+					_tmp368_ = vala_ccode_base_module_store_temp_value (self, (ValaTargetValue*) _tmp366_, _tmp367_, NULL);
 					_vala_target_value_unref0 (_result_);
-					_result_ = VALA_GLIB_VALUE (_tmp365_);
+					_result_ = VALA_GLIB_VALUE (_tmp368_);
 					requires_temp_value = FALSE;
 				}
-				_tmp366_ = _result_;
-				_tmp367_ = _result_;
-				_tmp368_ = _tmp367_->cvalue;
-				_tmp369_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp368_);
-				_vala_ccode_node_unref0 (_tmp366_->cvalue);
-				_tmp366_->cvalue = (ValaCCodeExpression*) _tmp369_;
+				_tmp369_ = _result_;
 				_tmp370_ = _result_;
-				_tmp370_->lvalue = FALSE;
-				_tmp371_ = _result_;
-				_tmp372_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp371_);
-				_tmp373_ = _tmp372_;
-				vala_data_type_set_nullable (_tmp373_, TRUE);
+				_tmp371_ = _tmp370_->cvalue;
+				_tmp372_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp371_);
+				_vala_ccode_node_unref0 (_tmp369_->cvalue);
+				_tmp369_->cvalue = (ValaCCodeExpression*) _tmp372_;
+				_tmp373_ = _result_;
+				_tmp373_->lvalue = FALSE;
+				_tmp374_ = _result_;
+				_tmp375_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp374_);
+				_tmp376_ = _tmp375_;
+				vala_data_type_set_nullable (_tmp376_, TRUE);
 			} else {
-				gboolean _tmp374_;
-				_tmp374_ = unboxing;
-				if (_tmp374_) {
-					ValaGLibValue* _tmp375_;
-					ValaGLibValue* _tmp376_;
-					ValaCCodeExpression* _tmp377_;
-					ValaCCodeUnaryExpression* _tmp378_;
-					_tmp375_ = _result_;
-					_tmp376_ = _result_;
-					_tmp377_ = _tmp376_->cvalue;
-					_tmp378_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp377_);
-					_vala_ccode_node_unref0 (_tmp375_->cvalue);
-					_tmp375_->cvalue = (ValaCCodeExpression*) _tmp378_;
-				} else {
+				gboolean _tmp377_;
+				_tmp377_ = unboxing;
+				if (_tmp377_) {
+					ValaGLibValue* _tmp378_;
 					ValaGLibValue* _tmp379_;
-					ValaGLibValue* _tmp380_;
-					ValaCCodeExpression* _tmp381_;
-					ValaDataType* _tmp382_;
-					ValaDataType* _tmp383_;
-					ValaCodeNode* _tmp384_;
-					ValaCCodeExpression* _tmp385_ = NULL;
+					ValaCCodeExpression* _tmp380_;
+					ValaCCodeUnaryExpression* _tmp381_;
+					_tmp378_ = _result_;
 					_tmp379_ = _result_;
-					_tmp380_ = _result_;
-					_tmp381_ = _tmp380_->cvalue;
-					_tmp382_ = type;
-					_tmp383_ = target_type;
-					_tmp384_ = node;
-					_tmp385_ = vala_ccode_base_module_get_implicit_cast_expression (self, _tmp381_, _tmp382_, _tmp383_, _tmp384_);
-					_vala_ccode_node_unref0 (_tmp379_->cvalue);
-					_tmp379_->cvalue = _tmp385_;
+					_tmp380_ = _tmp379_->cvalue;
+					_tmp381_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp380_);
+					_vala_ccode_node_unref0 (_tmp378_->cvalue);
+					_tmp378_->cvalue = (ValaCCodeExpression*) _tmp381_;
+				} else {
+					ValaGLibValue* _tmp382_;
+					ValaGLibValue* _tmp383_;
+					ValaCCodeExpression* _tmp384_;
+					ValaDataType* _tmp385_;
+					ValaDataType* _tmp386_;
+					ValaCodeNode* _tmp387_;
+					ValaCCodeExpression* _tmp388_ = NULL;
+					_tmp382_ = _result_;
+					_tmp383_ = _result_;
+					_tmp384_ = _tmp383_->cvalue;
+					_tmp385_ = type;
+					_tmp386_ = target_type;
+					_tmp387_ = node;
+					_tmp388_ = vala_ccode_base_module_get_implicit_cast_expression (self, _tmp384_, _tmp385_, _tmp386_, _tmp387_);
+					_vala_ccode_node_unref0 (_tmp382_->cvalue);
+					_tmp382_->cvalue = _tmp388_;
 				}
 			}
 		}
 	}
-	_tmp387_ = requires_temp_value;
-	if (_tmp387_) {
-		gboolean _tmp388_ = FALSE;
-		ValaDataType* _tmp389_;
-		gboolean _tmp393_;
-		_tmp389_ = target_type;
-		if (VALA_IS_ARRAY_TYPE (_tmp389_)) {
-			ValaDataType* _tmp390_;
-			gboolean _tmp391_;
-			gboolean _tmp392_;
-			_tmp390_ = target_type;
-			_tmp391_ = vala_array_type_get_inline_allocated (VALA_ARRAY_TYPE (_tmp390_));
-			_tmp392_ = _tmp391_;
-			_tmp388_ = _tmp392_;
+	_tmp390_ = requires_temp_value;
+	if (_tmp390_) {
+		gboolean _tmp391_ = FALSE;
+		ValaDataType* _tmp392_;
+		gboolean _tmp396_;
+		_tmp392_ = target_type;
+		if (VALA_IS_ARRAY_TYPE (_tmp392_)) {
+			ValaDataType* _tmp393_;
+			gboolean _tmp394_;
+			gboolean _tmp395_;
+			_tmp393_ = target_type;
+			_tmp394_ = vala_array_type_get_inline_allocated (VALA_ARRAY_TYPE (_tmp393_));
+			_tmp395_ = _tmp394_;
+			_tmp391_ = _tmp395_;
 		} else {
-			_tmp388_ = FALSE;
+			_tmp391_ = FALSE;
 		}
-		_tmp393_ = _tmp388_;
-		_tmp386_ = !_tmp393_;
+		_tmp396_ = _tmp391_;
+		_tmp389_ = !_tmp396_;
 	} else {
-		_tmp386_ = FALSE;
-	}
-	_tmp394_ = _tmp386_;
-	if (_tmp394_) {
-		ValaGLibValue* _tmp395_;
-		ValaCodeNode* _tmp396_;
-		ValaTargetValue* _tmp397_ = NULL;
-		_tmp395_ = _result_;
-		_tmp396_ = node;
-		_tmp397_ = vala_ccode_base_module_store_temp_value (self, (ValaTargetValue*) _tmp395_, _tmp396_, NULL);
+		_tmp389_ = FALSE;
+	}
+	_tmp397_ = _tmp389_;
+	if (_tmp397_) {
+		ValaGLibValue* _tmp398_;
+		ValaCodeNode* _tmp399_;
+		ValaTargetValue* _tmp400_ = NULL;
+		_tmp398_ = _result_;
+		_tmp399_ = node;
+		_tmp400_ = vala_ccode_base_module_store_temp_value (self, (ValaTargetValue*) _tmp398_, _tmp399_, NULL);
 		_vala_target_value_unref0 (_result_);
-		_result_ = VALA_GLIB_VALUE (_tmp397_);
-	}
-	_tmp403_ = gvalue_boxing;
-	if (!_tmp403_) {
-		gboolean _tmp404_;
-		_tmp404_ = gvariant_boxing;
-		_tmp402_ = !_tmp404_;
-	} else {
-		_tmp402_ = FALSE;
+		_result_ = VALA_GLIB_VALUE (_tmp400_);
 	}
-	_tmp405_ = _tmp402_;
-	if (_tmp405_) {
-		ValaDataType* _tmp406_;
+	_tmp406_ = gvalue_boxing;
+	if (!_tmp406_) {
 		gboolean _tmp407_;
-		gboolean _tmp408_;
-		_tmp406_ = target_type;
-		_tmp407_ = vala_data_type_get_value_owned (_tmp406_);
-		_tmp408_ = _tmp407_;
-		_tmp401_ = _tmp408_;
+		_tmp407_ = gvariant_boxing;
+		_tmp405_ = !_tmp407_;
 	} else {
-		_tmp401_ = FALSE;
+		_tmp405_ = FALSE;
+	}
+	_tmp408_ = _tmp405_;
+	if (_tmp408_) {
+		ValaDataType* _tmp409_;
+		gboolean _tmp410_;
+		gboolean _tmp411_;
+		_tmp409_ = target_type;
+		_tmp410_ = vala_data_type_get_value_owned (_tmp409_);
+		_tmp411_ = _tmp410_;
+		_tmp404_ = _tmp411_;
+	} else {
+		_tmp404_ = FALSE;
 	}
-	_tmp409_ = _tmp401_;
-	if (_tmp409_) {
-		gboolean _tmp410_ = FALSE;
-		gboolean _tmp411_ = FALSE;
-		ValaDataType* _tmp412_;
-		gboolean _tmp413_;
-		gboolean _tmp414_;
+	_tmp412_ = _tmp404_;
+	if (_tmp412_) {
+		gboolean _tmp413_ = FALSE;
+		gboolean _tmp414_ = FALSE;
+		ValaDataType* _tmp415_;
 		gboolean _tmp416_;
-		gboolean _tmp418_;
-		_tmp412_ = type;
-		_tmp413_ = vala_data_type_get_value_owned (_tmp412_);
-		_tmp414_ = _tmp413_;
-		if (!_tmp414_) {
-			_tmp411_ = TRUE;
+		gboolean _tmp417_;
+		gboolean _tmp419_;
+		gboolean _tmp421_;
+		_tmp415_ = type;
+		_tmp416_ = vala_data_type_get_value_owned (_tmp415_);
+		_tmp417_ = _tmp416_;
+		if (!_tmp417_) {
+			_tmp414_ = TRUE;
 		} else {
-			gboolean _tmp415_;
-			_tmp415_ = boxing;
-			_tmp411_ = _tmp415_;
+			gboolean _tmp418_;
+			_tmp418_ = boxing;
+			_tmp414_ = _tmp418_;
 		}
-		_tmp416_ = _tmp411_;
-		if (_tmp416_) {
-			_tmp410_ = TRUE;
+		_tmp419_ = _tmp414_;
+		if (_tmp419_) {
+			_tmp413_ = TRUE;
 		} else {
-			gboolean _tmp417_;
-			_tmp417_ = unboxing;
-			_tmp410_ = _tmp417_;
+			gboolean _tmp420_;
+			_tmp420_ = unboxing;
+			_tmp413_ = _tmp420_;
 		}
-		_tmp418_ = _tmp410_;
-		_tmp400_ = _tmp418_;
+		_tmp421_ = _tmp413_;
+		_tmp403_ = _tmp421_;
 	} else {
-		_tmp400_ = FALSE;
-	}
-	_tmp419_ = _tmp400_;
-	if (_tmp419_) {
-		ValaDataType* _tmp420_;
-		gboolean _tmp421_ = FALSE;
-		_tmp420_ = target_type;
-		_tmp421_ = vala_ccode_base_module_requires_copy (self, _tmp420_);
-		_tmp399_ = _tmp421_;
-	} else {
-		_tmp399_ = FALSE;
+		_tmp403_ = FALSE;
 	}
-	_tmp422_ = _tmp399_;
+	_tmp422_ = _tmp403_;
 	if (_tmp422_) {
 		ValaDataType* _tmp423_;
-		_tmp423_ = type;
-		_tmp398_ = !VALA_IS_NULL_TYPE (_tmp423_);
+		gboolean _tmp424_ = FALSE;
+		_tmp423_ = target_type;
+		_tmp424_ = vala_ccode_base_module_requires_copy (self, _tmp423_);
+		_tmp402_ = _tmp424_;
+	} else {
+		_tmp402_ = FALSE;
+	}
+	_tmp425_ = _tmp402_;
+	if (_tmp425_) {
+		ValaDataType* _tmp426_;
+		_tmp426_ = type;
+		_tmp401_ = !VALA_IS_NULL_TYPE (_tmp426_);
 	} else {
-		_tmp398_ = FALSE;
+		_tmp401_ = FALSE;
 	}
-	_tmp424_ = _tmp398_;
-	if (_tmp424_) {
-		ValaGLibValue* _tmp425_;
-		ValaCodeNode* _tmp426_;
-		ValaTargetValue* _tmp427_ = NULL;
+	_tmp427_ = _tmp401_;
+	if (_tmp427_) {
+		ValaGLibValue* _tmp428_;
+		ValaCodeNode* _tmp429_;
+		ValaTargetValue* _tmp430_ = NULL;
 		ValaGLibValue* copy;
-		gboolean _tmp428_ = FALSE;
-		ValaDataType* _tmp429_;
-		ValaTypeSymbol* _tmp430_;
-		ValaTypeSymbol* _tmp431_;
-		gboolean _tmp433_;
-		ValaGLibValue* _tmp444_;
-		ValaGLibValue* _tmp445_;
-		_tmp425_ = _result_;
-		_tmp426_ = node;
-		_tmp427_ = vala_ccode_base_module_copy_value (self, (ValaTargetValue*) _tmp425_, _tmp426_);
-		copy = VALA_GLIB_VALUE (_tmp427_);
-		_tmp429_ = target_type;
-		_tmp430_ = vala_data_type_get_data_type (_tmp429_);
-		_tmp431_ = _tmp430_;
-		if (VALA_IS_INTERFACE (_tmp431_)) {
-			ValaGLibValue* _tmp432_;
-			_tmp432_ = copy;
-			_tmp428_ = _tmp432_ == NULL;
+		gboolean _tmp431_ = FALSE;
+		ValaDataType* _tmp432_;
+		ValaTypeSymbol* _tmp433_;
+		ValaTypeSymbol* _tmp434_;
+		gboolean _tmp436_;
+		ValaGLibValue* _tmp447_;
+		ValaGLibValue* _tmp448_;
+		_tmp428_ = _result_;
+		_tmp429_ = node;
+		_tmp430_ = vala_ccode_base_module_copy_value (self, (ValaTargetValue*) _tmp428_, _tmp429_);
+		copy = VALA_GLIB_VALUE (_tmp430_);
+		_tmp432_ = target_type;
+		_tmp433_ = vala_data_type_get_data_type (_tmp432_);
+		_tmp434_ = _tmp433_;
+		if (VALA_IS_INTERFACE (_tmp434_)) {
+			ValaGLibValue* _tmp435_;
+			_tmp435_ = copy;
+			_tmp431_ = _tmp435_ == NULL;
 		} else {
-			_tmp428_ = FALSE;
-		}
-		_tmp433_ = _tmp428_;
-		if (_tmp433_) {
-			ValaCodeNode* _tmp434_;
-			ValaSourceReference* _tmp435_;
-			ValaSourceReference* _tmp436_;
-			ValaDataType* _tmp437_;
-			ValaTypeSymbol* _tmp438_;
-			ValaTypeSymbol* _tmp439_;
-			gchar* _tmp440_ = NULL;
-			gchar* _tmp441_;
-			gchar* _tmp442_ = NULL;
-			gchar* _tmp443_;
-			_tmp434_ = node;
-			_tmp435_ = vala_code_node_get_source_reference (_tmp434_);
-			_tmp436_ = _tmp435_;
-			_tmp437_ = target_type;
-			_tmp438_ = vala_data_type_get_data_type (_tmp437_);
+			_tmp431_ = FALSE;
+		}
+		_tmp436_ = _tmp431_;
+		if (_tmp436_) {
+			ValaCodeNode* _tmp437_;
+			ValaSourceReference* _tmp438_;
+			ValaSourceReference* _tmp439_;
+			ValaDataType* _tmp440_;
+			ValaTypeSymbol* _tmp441_;
+			ValaTypeSymbol* _tmp442_;
+			gchar* _tmp443_ = NULL;
+			gchar* _tmp444_;
+			gchar* _tmp445_ = NULL;
+			gchar* _tmp446_;
+			_tmp437_ = node;
+			_tmp438_ = vala_code_node_get_source_reference (_tmp437_);
 			_tmp439_ = _tmp438_;
-			_tmp440_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp439_);
-			_tmp441_ = _tmp440_;
-			_tmp442_ = g_strdup_printf ("missing class prerequisite for interface `%s', add GLib.Object to inte" \
-"rface declaration if unsure", _tmp441_);
-			_tmp443_ = _tmp442_;
-			vala_report_error (_tmp436_, _tmp443_);
-			_g_free0 (_tmp443_);
-			_g_free0 (_tmp441_);
+			_tmp440_ = target_type;
+			_tmp441_ = vala_data_type_get_data_type (_tmp440_);
+			_tmp442_ = _tmp441_;
+			_tmp443_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp442_);
+			_tmp444_ = _tmp443_;
+			_tmp445_ = g_strdup_printf ("missing class prerequisite for interface `%s', add GLib.Object to inte" \
+"rface declaration if unsure", _tmp444_);
+			_tmp446_ = _tmp445_;
+			vala_report_error (_tmp439_, _tmp446_);
+			_g_free0 (_tmp446_);
+			_g_free0 (_tmp444_);
 			result = (ValaTargetValue*) _result_;
 			_vala_target_value_unref0 (copy);
 			_vala_code_node_unref0 (type);
 			return result;
 		}
-		_tmp444_ = copy;
-		_tmp445_ = _vala_target_value_ref0 (_tmp444_);
+		_tmp447_ = copy;
+		_tmp448_ = _vala_target_value_ref0 (_tmp447_);
 		_vala_target_value_unref0 (_result_);
-		_result_ = _tmp445_;
+		_result_ = _tmp448_;
 		_vala_target_value_unref0 (copy);
 	}
 	result = (ValaTargetValue*) _result_;
@@ -34161,10 +34852,12 @@ ValaCCodeExpression* vala_ccode_base_module_default_value_for_type (ValaCCodeBas
 	ValaArrayType* _tmp5_;
 	ValaArrayType* array_type;
 	gboolean _tmp6_ = FALSE;
-	ValaDataType* _tmp7_;
-	ValaTypeSymbol* _tmp8_;
+	gboolean _tmp7_ = FALSE;
+	ValaDataType* _tmp8_;
 	ValaTypeSymbol* _tmp9_;
-	gboolean _tmp15_;
+	ValaTypeSymbol* _tmp10_;
+	gboolean _tmp14_;
+	gboolean _tmp20_;
 	g_return_val_if_fail (self != NULL, NULL);
 	g_return_val_if_fail (type != NULL, NULL);
 	_tmp0_ = type;
@@ -34175,223 +34868,235 @@ ValaCCodeExpression* vala_ccode_base_module_default_value_for_type (ValaCCodeBas
 	_tmp4_ = type;
 	_tmp5_ = _vala_code_node_ref0 (VALA_IS_ARRAY_TYPE (_tmp4_) ? ((ValaArrayType*) _tmp4_) : NULL);
 	array_type = _tmp5_;
-	_tmp7_ = type;
-	_tmp8_ = vala_data_type_get_data_type (_tmp7_);
-	_tmp9_ = _tmp8_;
-	if (_tmp9_ != NULL) {
-		ValaDataType* _tmp10_;
-		ValaTypeSymbol* _tmp11_;
-		ValaTypeSymbol* _tmp12_;
-		gchar* _tmp13_ = NULL;
-		gchar* _tmp14_;
-		_tmp10_ = type;
-		_tmp11_ = vala_data_type_get_data_type (_tmp10_);
-		_tmp12_ = _tmp11_;
-		_tmp13_ = vala_ccode_base_module_get_ccode_default_value (_tmp12_);
-		_tmp14_ = _tmp13_;
-		_tmp6_ = g_strcmp0 (_tmp14_, "") != 0;
-		_g_free0 (_tmp14_);
+	_tmp8_ = type;
+	_tmp9_ = vala_data_type_get_data_type (_tmp8_);
+	_tmp10_ = _tmp9_;
+	if (_tmp10_ != NULL) {
+		ValaDataType* _tmp11_;
+		gboolean _tmp12_;
+		gboolean _tmp13_;
+		_tmp11_ = type;
+		_tmp12_ = vala_data_type_get_nullable (_tmp11_);
+		_tmp13_ = _tmp12_;
+		_tmp7_ = !_tmp13_;
 	} else {
-		_tmp6_ = FALSE;
+		_tmp7_ = FALSE;
 	}
-	_tmp15_ = _tmp6_;
-	if (_tmp15_) {
-		ValaDataType* _tmp16_;
+	_tmp14_ = _tmp7_;
+	if (_tmp14_) {
+		ValaDataType* _tmp15_;
+		ValaTypeSymbol* _tmp16_;
 		ValaTypeSymbol* _tmp17_;
-		ValaTypeSymbol* _tmp18_;
-		gchar* _tmp19_ = NULL;
-		gchar* _tmp20_;
-		ValaCCodeConstant* _tmp21_;
-		ValaCCodeExpression* _tmp22_;
-		_tmp16_ = type;
-		_tmp17_ = vala_data_type_get_data_type (_tmp16_);
-		_tmp18_ = _tmp17_;
-		_tmp19_ = vala_ccode_base_module_get_ccode_default_value (_tmp18_);
-		_tmp20_ = _tmp19_;
-		_tmp21_ = vala_ccode_constant_new (_tmp20_);
-		_tmp22_ = (ValaCCodeExpression*) _tmp21_;
-		_g_free0 (_tmp20_);
-		result = _tmp22_;
+		gchar* _tmp18_ = NULL;
+		gchar* _tmp19_;
+		_tmp15_ = type;
+		_tmp16_ = vala_data_type_get_data_type (_tmp15_);
+		_tmp17_ = _tmp16_;
+		_tmp18_ = vala_ccode_base_module_get_ccode_default_value (_tmp17_);
+		_tmp19_ = _tmp18_;
+		_tmp6_ = g_strcmp0 (_tmp19_, "") != 0;
+		_g_free0 (_tmp19_);
+	} else {
+		_tmp6_ = FALSE;
+	}
+	_tmp20_ = _tmp6_;
+	if (_tmp20_) {
+		ValaDataType* _tmp21_;
+		ValaTypeSymbol* _tmp22_;
+		ValaTypeSymbol* _tmp23_;
+		gchar* _tmp24_ = NULL;
+		gchar* _tmp25_;
+		ValaCCodeConstant* _tmp26_;
+		ValaCCodeExpression* _tmp27_;
+		_tmp21_ = type;
+		_tmp22_ = vala_data_type_get_data_type (_tmp21_);
+		_tmp23_ = _tmp22_;
+		_tmp24_ = vala_ccode_base_module_get_ccode_default_value (_tmp23_);
+		_tmp25_ = _tmp24_;
+		_tmp26_ = vala_ccode_constant_new (_tmp25_);
+		_tmp27_ = (ValaCCodeExpression*) _tmp26_;
+		_g_free0 (_tmp25_);
+		result = _tmp27_;
 		_vala_code_node_unref0 (array_type);
 		_vala_code_node_unref0 (st);
 		return result;
 	} else {
-		gboolean _tmp23_ = FALSE;
-		gboolean _tmp24_ = FALSE;
-		gboolean _tmp25_;
-		gboolean _tmp29_;
-		gboolean _tmp39_;
-		_tmp25_ = initializer_expression;
-		if (_tmp25_) {
-			ValaDataType* _tmp26_;
-			gboolean _tmp27_;
-			gboolean _tmp28_;
-			_tmp26_ = type;
-			_tmp27_ = vala_data_type_get_nullable (_tmp26_);
-			_tmp28_ = _tmp27_;
-			_tmp24_ = !_tmp28_;
+		gboolean _tmp28_ = FALSE;
+		gboolean _tmp29_ = FALSE;
+		gboolean _tmp30_;
+		gboolean _tmp34_;
+		gboolean _tmp44_;
+		_tmp30_ = initializer_expression;
+		if (_tmp30_) {
+			ValaDataType* _tmp31_;
+			gboolean _tmp32_;
+			gboolean _tmp33_;
+			_tmp31_ = type;
+			_tmp32_ = vala_data_type_get_nullable (_tmp31_);
+			_tmp33_ = _tmp32_;
+			_tmp29_ = !_tmp33_;
 		} else {
-			_tmp24_ = FALSE;
+			_tmp29_ = FALSE;
 		}
-		_tmp29_ = _tmp24_;
-		if (_tmp29_) {
-			gboolean _tmp30_ = FALSE;
-			ValaStruct* _tmp31_;
-			gboolean _tmp38_;
-			_tmp31_ = st;
-			if (_tmp31_ != NULL) {
-				_tmp30_ = TRUE;
+		_tmp34_ = _tmp29_;
+		if (_tmp34_) {
+			gboolean _tmp35_ = FALSE;
+			ValaStruct* _tmp36_;
+			gboolean _tmp43_;
+			_tmp36_ = st;
+			if (_tmp36_ != NULL) {
+				_tmp35_ = TRUE;
 			} else {
-				gboolean _tmp32_ = FALSE;
-				ValaArrayType* _tmp33_;
-				gboolean _tmp37_;
-				_tmp33_ = array_type;
-				if (_tmp33_ != NULL) {
-					ValaArrayType* _tmp34_;
-					gboolean _tmp35_;
-					gboolean _tmp36_;
-					_tmp34_ = array_type;
-					_tmp35_ = vala_array_type_get_fixed_length (_tmp34_);
-					_tmp36_ = _tmp35_;
-					_tmp32_ = _tmp36_;
+				gboolean _tmp37_ = FALSE;
+				ValaArrayType* _tmp38_;
+				gboolean _tmp42_;
+				_tmp38_ = array_type;
+				if (_tmp38_ != NULL) {
+					ValaArrayType* _tmp39_;
+					gboolean _tmp40_;
+					gboolean _tmp41_;
+					_tmp39_ = array_type;
+					_tmp40_ = vala_array_type_get_fixed_length (_tmp39_);
+					_tmp41_ = _tmp40_;
+					_tmp37_ = _tmp41_;
 				} else {
-					_tmp32_ = FALSE;
+					_tmp37_ = FALSE;
 				}
-				_tmp37_ = _tmp32_;
-				_tmp30_ = _tmp37_;
+				_tmp42_ = _tmp37_;
+				_tmp35_ = _tmp42_;
 			}
-			_tmp38_ = _tmp30_;
-			_tmp23_ = _tmp38_;
+			_tmp43_ = _tmp35_;
+			_tmp28_ = _tmp43_;
 		} else {
-			_tmp23_ = FALSE;
+			_tmp28_ = FALSE;
 		}
-		_tmp39_ = _tmp23_;
-		if (_tmp39_) {
-			ValaCCodeInitializerList* _tmp40_;
+		_tmp44_ = _tmp28_;
+		if (_tmp44_) {
+			ValaCCodeInitializerList* _tmp45_;
 			ValaCCodeInitializerList* clist;
-			ValaCCodeInitializerList* _tmp41_;
-			ValaCCodeConstant* _tmp42_;
-			ValaCCodeConstant* _tmp43_;
-			_tmp40_ = vala_ccode_initializer_list_new ();
-			clist = _tmp40_;
-			_tmp41_ = clist;
-			_tmp42_ = vala_ccode_constant_new ("0");
-			_tmp43_ = _tmp42_;
-			vala_ccode_initializer_list_append (_tmp41_, (ValaCCodeExpression*) _tmp43_);
-			_vala_ccode_node_unref0 (_tmp43_);
+			ValaCCodeInitializerList* _tmp46_;
+			ValaCCodeConstant* _tmp47_;
+			ValaCCodeConstant* _tmp48_;
+			_tmp45_ = vala_ccode_initializer_list_new ();
+			clist = _tmp45_;
+			_tmp46_ = clist;
+			_tmp47_ = vala_ccode_constant_new ("0");
+			_tmp48_ = _tmp47_;
+			vala_ccode_initializer_list_append (_tmp46_, (ValaCCodeExpression*) _tmp48_);
+			_vala_ccode_node_unref0 (_tmp48_);
 			result = (ValaCCodeExpression*) clist;
 			_vala_code_node_unref0 (array_type);
 			_vala_code_node_unref0 (st);
 			return result;
 		} else {
-			gboolean _tmp44_ = FALSE;
-			gboolean _tmp45_ = FALSE;
-			gboolean _tmp46_ = FALSE;
-			gboolean _tmp47_ = FALSE;
-			gboolean _tmp48_ = FALSE;
-			ValaDataType* _tmp49_;
-			ValaTypeSymbol* _tmp50_;
-			ValaTypeSymbol* _tmp51_;
-			gboolean _tmp56_;
-			gboolean _tmp60_;
-			gboolean _tmp62_;
-			gboolean _tmp64_;
-			gboolean _tmp71_;
-			_tmp49_ = type;
-			_tmp50_ = vala_data_type_get_data_type (_tmp49_);
-			_tmp51_ = _tmp50_;
-			if (_tmp51_ != NULL) {
-				ValaDataType* _tmp52_;
-				ValaTypeSymbol* _tmp53_;
-				ValaTypeSymbol* _tmp54_;
-				gboolean _tmp55_ = FALSE;
-				_tmp52_ = type;
-				_tmp53_ = vala_data_type_get_data_type (_tmp52_);
-				_tmp54_ = _tmp53_;
-				_tmp55_ = vala_typesymbol_is_reference_type (_tmp54_);
-				_tmp48_ = _tmp55_;
-			} else {
-				_tmp48_ = FALSE;
-			}
-			_tmp56_ = _tmp48_;
-			if (_tmp56_) {
-				_tmp47_ = TRUE;
-			} else {
+			gboolean _tmp49_ = FALSE;
+			gboolean _tmp50_ = FALSE;
+			gboolean _tmp51_ = FALSE;
+			gboolean _tmp52_ = FALSE;
+			gboolean _tmp53_ = FALSE;
+			ValaDataType* _tmp54_;
+			ValaTypeSymbol* _tmp55_;
+			ValaTypeSymbol* _tmp56_;
+			gboolean _tmp61_;
+			gboolean _tmp65_;
+			gboolean _tmp67_;
+			gboolean _tmp69_;
+			gboolean _tmp76_;
+			_tmp54_ = type;
+			_tmp55_ = vala_data_type_get_data_type (_tmp54_);
+			_tmp56_ = _tmp55_;
+			if (_tmp56_ != NULL) {
 				ValaDataType* _tmp57_;
-				gboolean _tmp58_;
-				gboolean _tmp59_;
+				ValaTypeSymbol* _tmp58_;
+				ValaTypeSymbol* _tmp59_;
+				gboolean _tmp60_ = FALSE;
 				_tmp57_ = type;
-				_tmp58_ = vala_data_type_get_nullable (_tmp57_);
+				_tmp58_ = vala_data_type_get_data_type (_tmp57_);
 				_tmp59_ = _tmp58_;
-				_tmp47_ = _tmp59_;
+				_tmp60_ = vala_typesymbol_is_reference_type (_tmp59_);
+				_tmp53_ = _tmp60_;
+			} else {
+				_tmp53_ = FALSE;
 			}
-			_tmp60_ = _tmp47_;
-			if (_tmp60_) {
-				_tmp46_ = TRUE;
+			_tmp61_ = _tmp53_;
+			if (_tmp61_) {
+				_tmp52_ = TRUE;
 			} else {
-				ValaDataType* _tmp61_;
-				_tmp61_ = type;
-				_tmp46_ = VALA_IS_POINTER_TYPE (_tmp61_);
+				ValaDataType* _tmp62_;
+				gboolean _tmp63_;
+				gboolean _tmp64_;
+				_tmp62_ = type;
+				_tmp63_ = vala_data_type_get_nullable (_tmp62_);
+				_tmp64_ = _tmp63_;
+				_tmp52_ = _tmp64_;
 			}
-			_tmp62_ = _tmp46_;
-			if (_tmp62_) {
-				_tmp45_ = TRUE;
+			_tmp65_ = _tmp52_;
+			if (_tmp65_) {
+				_tmp51_ = TRUE;
 			} else {
-				ValaDataType* _tmp63_;
-				_tmp63_ = type;
-				_tmp45_ = VALA_IS_DELEGATE_TYPE (_tmp63_);
+				ValaDataType* _tmp66_;
+				_tmp66_ = type;
+				_tmp51_ = VALA_IS_POINTER_TYPE (_tmp66_);
 			}
-			_tmp64_ = _tmp45_;
-			if (_tmp64_) {
-				_tmp44_ = TRUE;
+			_tmp67_ = _tmp51_;
+			if (_tmp67_) {
+				_tmp50_ = TRUE;
 			} else {
-				gboolean _tmp65_ = FALSE;
-				ValaArrayType* _tmp66_;
-				gboolean _tmp70_;
-				_tmp66_ = array_type;
-				if (_tmp66_ != NULL) {
-					ValaArrayType* _tmp67_;
-					gboolean _tmp68_;
-					gboolean _tmp69_;
-					_tmp67_ = array_type;
-					_tmp68_ = vala_array_type_get_fixed_length (_tmp67_);
-					_tmp69_ = _tmp68_;
-					_tmp65_ = !_tmp69_;
+				ValaDataType* _tmp68_;
+				_tmp68_ = type;
+				_tmp50_ = VALA_IS_DELEGATE_TYPE (_tmp68_);
+			}
+			_tmp69_ = _tmp50_;
+			if (_tmp69_) {
+				_tmp49_ = TRUE;
+			} else {
+				gboolean _tmp70_ = FALSE;
+				ValaArrayType* _tmp71_;
+				gboolean _tmp75_;
+				_tmp71_ = array_type;
+				if (_tmp71_ != NULL) {
+					ValaArrayType* _tmp72_;
+					gboolean _tmp73_;
+					gboolean _tmp74_;
+					_tmp72_ = array_type;
+					_tmp73_ = vala_array_type_get_fixed_length (_tmp72_);
+					_tmp74_ = _tmp73_;
+					_tmp70_ = !_tmp74_;
 				} else {
-					_tmp65_ = FALSE;
+					_tmp70_ = FALSE;
 				}
-				_tmp70_ = _tmp65_;
-				_tmp44_ = _tmp70_;
+				_tmp75_ = _tmp70_;
+				_tmp49_ = _tmp75_;
 			}
-			_tmp71_ = _tmp44_;
-			if (_tmp71_) {
-				ValaCCodeConstant* _tmp72_;
-				_tmp72_ = vala_ccode_constant_new ("NULL");
-				result = (ValaCCodeExpression*) _tmp72_;
+			_tmp76_ = _tmp49_;
+			if (_tmp76_) {
+				ValaCCodeConstant* _tmp77_;
+				_tmp77_ = vala_ccode_constant_new ("NULL");
+				result = (ValaCCodeExpression*) _tmp77_;
 				_vala_code_node_unref0 (array_type);
 				_vala_code_node_unref0 (st);
 				return result;
 			} else {
-				ValaDataType* _tmp73_;
-				ValaTypeParameter* _tmp74_;
-				ValaTypeParameter* _tmp75_;
-				_tmp73_ = type;
-				_tmp74_ = vala_data_type_get_type_parameter (_tmp73_);
-				_tmp75_ = _tmp74_;
-				if (_tmp75_ != NULL) {
-					ValaCCodeConstant* _tmp76_;
-					_tmp76_ = vala_ccode_constant_new ("NULL");
-					result = (ValaCCodeExpression*) _tmp76_;
+				ValaDataType* _tmp78_;
+				ValaTypeParameter* _tmp79_;
+				ValaTypeParameter* _tmp80_;
+				_tmp78_ = type;
+				_tmp79_ = vala_data_type_get_type_parameter (_tmp78_);
+				_tmp80_ = _tmp79_;
+				if (_tmp80_ != NULL) {
+					ValaCCodeConstant* _tmp81_;
+					_tmp81_ = vala_ccode_constant_new ("NULL");
+					result = (ValaCCodeExpression*) _tmp81_;
 					_vala_code_node_unref0 (array_type);
 					_vala_code_node_unref0 (st);
 					return result;
 				} else {
-					ValaDataType* _tmp77_;
-					_tmp77_ = type;
-					if (VALA_IS_ERROR_TYPE (_tmp77_)) {
-						ValaCCodeConstant* _tmp78_;
-						_tmp78_ = vala_ccode_constant_new ("NULL");
-						result = (ValaCCodeExpression*) _tmp78_;
+					ValaDataType* _tmp82_;
+					_tmp82_ = type;
+					if (VALA_IS_ERROR_TYPE (_tmp82_)) {
+						ValaCCodeConstant* _tmp83_;
+						_tmp83_ = vala_ccode_constant_new ("NULL");
+						result = (ValaCCodeExpression*) _tmp83_;
 						_vala_code_node_unref0 (array_type);
 						_vala_code_node_unref0 (st);
 						return result;
@@ -35123,6 +35828,27 @@ gboolean vala_ccode_base_module_get_ccode_ref_function_void (ValaClass* cl) {
 }
 
 
+gboolean vala_ccode_base_module_get_ccode_free_function_address_of (ValaClass* cl) {
+	gboolean result = FALSE;
+	ValaClass* _tmp0_;
+	ValaCCodeAttribute* _tmp1_ = NULL;
+	ValaCCodeAttribute* _tmp2_;
+	gboolean _tmp3_;
+	gboolean _tmp4_;
+	gboolean _tmp5_;
+	g_return_val_if_fail (cl != NULL, FALSE);
+	_tmp0_ = cl;
+	_tmp1_ = vala_ccode_base_module_get_ccode_attribute ((ValaCodeNode*) _tmp0_);
+	_tmp2_ = _tmp1_;
+	_tmp3_ = vala_ccode_attribute_get_free_function_address_of (_tmp2_);
+	_tmp4_ = _tmp3_;
+	_tmp5_ = _tmp4_;
+	_vala_attribute_cache_unref0 (_tmp2_);
+	result = _tmp5_;
+	return result;
+}
+
+
 gboolean vala_ccode_base_module_get_ccode_ref_sink_function_void (ValaClass* cl) {
 	gboolean result = FALSE;
 	ValaClass* _tmp0_;
@@ -35931,6 +36657,29 @@ gboolean vala_ccode_base_module_get_ccode_delegate_target (ValaCodeNode* node) {
 }
 
 
+gchar* vala_ccode_base_module_get_ccode_delegate_target_name (ValaVariable* variable) {
+	gchar* result = NULL;
+	ValaVariable* _tmp0_;
+	ValaCCodeAttribute* _tmp1_ = NULL;
+	ValaCCodeAttribute* _tmp2_;
+	const gchar* _tmp3_;
+	const gchar* _tmp4_;
+	gchar* _tmp5_;
+	gchar* _tmp6_;
+	g_return_val_if_fail (variable != NULL, NULL);
+	_tmp0_ = variable;
+	_tmp1_ = vala_ccode_base_module_get_ccode_attribute ((ValaCodeNode*) _tmp0_);
+	_tmp2_ = _tmp1_;
+	_tmp3_ = vala_ccode_attribute_get_delegate_target_name (_tmp2_);
+	_tmp4_ = _tmp3_;
+	_tmp5_ = g_strdup (_tmp4_);
+	_tmp6_ = _tmp5_;
+	_vala_attribute_cache_unref0 (_tmp2_);
+	result = _tmp6_;
+	return result;
+}
+
+
 gdouble vala_ccode_base_module_get_ccode_pos (ValaParameter* param) {
 	gdouble result = 0.0;
 	ValaParameter* _tmp0_;
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 4c840d0..13a1446 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -976,7 +976,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 				// create field to store delegate target
 
 				cdecl = new CCodeDeclaration ("gpointer");
-				cdecl.add_declarator (new CCodeVariableDeclarator (get_delegate_target_cname (get_ccode_name (f))));
+				cdecl.add_declarator (new CCodeVariableDeclarator (get_ccode_delegate_target_name (f)));
 				if (f.is_private_symbol ()) {
 					cdecl.modifiers = CCodeModifiers.STATIC;
 				} else {
@@ -1105,130 +1105,132 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 				generate_field_declaration (f, internal_header_file);
 			}
 
-			lhs = new CCodeIdentifier (get_ccode_name (f));
+			if (!f.external) {
+				lhs = new CCodeIdentifier (get_ccode_name (f));
 
-			var var_decl = new CCodeVariableDeclarator (get_ccode_name (f), null, get_ccode_declarator_suffix (f.variable_type));
-			var_decl.initializer = default_value_for_type (f.variable_type, true);
+				var var_decl = new CCodeVariableDeclarator (get_ccode_name (f), null, get_ccode_declarator_suffix (f.variable_type));
+				var_decl.initializer = default_value_for_type (f.variable_type, true);
 
-			if (class_init_context != null) {
-				push_context (class_init_context);
-			} else {
-				push_context (new EmitContext ());
-			}
+				if (class_init_context != null) {
+					push_context (class_init_context);
+				} else {
+					push_context (new EmitContext ());
+				}
 
-			if (f.initializer != null) {
-				f.initializer.emit (this);
+				if (f.initializer != null) {
+					f.initializer.emit (this);
 
-				var init = get_cvalue (f.initializer);
-				if (is_constant_ccode_expression (init)) {
-					var_decl.initializer = init;
+					var init = get_cvalue (f.initializer);
+					if (is_constant_ccode_expression (init)) {
+						var_decl.initializer = init;
+					}
 				}
-			}
 
-			var var_def = new CCodeDeclaration (field_ctype);
-			var_def.add_declarator (var_decl);
-			if (!f.is_private_symbol ()) {
-				var_def.modifiers = CCodeModifiers.EXTERN;
-			} else {
-				var_def.modifiers = CCodeModifiers.STATIC;
-			}
-			cfile.add_type_member_declaration (var_def);
-
-			/* add array length fields where necessary */
-			if (f.variable_type is ArrayType && get_ccode_array_length (f)) {
-				var array_type = (ArrayType) f.variable_type;
+				var var_def = new CCodeDeclaration (field_ctype);
+				var_def.add_declarator (var_decl);
+				if (!f.is_private_symbol ()) {
+					var_def.modifiers = CCodeModifiers.EXTERN;
+				} else {
+					var_def.modifiers = CCodeModifiers.STATIC;
+				}
+				cfile.add_type_member_declaration (var_def);
 
-				if (!array_type.fixed_length) {
-					for (int dim = 1; dim <= array_type.rank; dim++) {
-						var len_type = int_type.copy ();
+				/* add array length fields where necessary */
+				if (f.variable_type is ArrayType && get_ccode_array_length (f)) {
+					var array_type = (ArrayType) f.variable_type;
 
-						var len_def = new CCodeDeclaration (get_ccode_name (len_type));
-						len_def.add_declarator (new CCodeVariableDeclarator (get_array_length_cname (get_ccode_name (f), dim), new CCodeConstant ("0")));
-						if (!f.is_private_symbol ()) {
-							len_def.modifiers = CCodeModifiers.EXTERN;
-						} else {
-							len_def.modifiers = CCodeModifiers.STATIC;
+					if (!array_type.fixed_length) {
+						for (int dim = 1; dim <= array_type.rank; dim++) {
+							var len_type = int_type.copy ();
+
+							var len_def = new CCodeDeclaration (get_ccode_name (len_type));
+							len_def.add_declarator (new CCodeVariableDeclarator (get_array_length_cname (get_ccode_name (f), dim), new CCodeConstant ("0")));
+							if (!f.is_private_symbol ()) {
+								len_def.modifiers = CCodeModifiers.EXTERN;
+							} else {
+								len_def.modifiers = CCodeModifiers.STATIC;
+							}
+							cfile.add_type_member_declaration (len_def);
 						}
-						cfile.add_type_member_declaration (len_def);
-					}
 
-					if (array_type.rank == 1 && f.is_internal_symbol ()) {
-						var len_type = int_type.copy ();
+						if (array_type.rank == 1 && f.is_internal_symbol ()) {
+							var len_type = int_type.copy ();
 
-						var cdecl = new CCodeDeclaration (get_ccode_name (len_type));
-						cdecl.add_declarator (new CCodeVariableDeclarator (get_array_size_cname (get_ccode_name (f)), new CCodeConstant ("0")));
-						cdecl.modifiers = CCodeModifiers.STATIC;
-						cfile.add_type_member_declaration (cdecl);
-					}
-				}
-			} else if (f.variable_type is DelegateType) {
-				var delegate_type = (DelegateType) f.variable_type;
-				if (delegate_type.delegate_symbol.has_target) {
-					// create field to store delegate target
-
-					var target_def = new CCodeDeclaration ("gpointer");
-					target_def.add_declarator (new CCodeVariableDeclarator (get_delegate_target_cname (get_ccode_name (f)), new CCodeConstant ("NULL")));
-					if (!f.is_private_symbol ()) {
-						target_def.modifiers = CCodeModifiers.EXTERN;
-					} else {
-						target_def.modifiers = CCodeModifiers.STATIC;
+							var cdecl = new CCodeDeclaration (get_ccode_name (len_type));
+							cdecl.add_declarator (new CCodeVariableDeclarator (get_array_size_cname (get_ccode_name (f)), new CCodeConstant ("0")));
+							cdecl.modifiers = CCodeModifiers.STATIC;
+							cfile.add_type_member_declaration (cdecl);
+						}
 					}
-					cfile.add_type_member_declaration (target_def);
+				} else if (f.variable_type is DelegateType) {
+					var delegate_type = (DelegateType) f.variable_type;
+					if (delegate_type.delegate_symbol.has_target) {
+						// create field to store delegate target
 
-					if (delegate_type.value_owned) {
-						var target_destroy_notify_def = new CCodeDeclaration ("GDestroyNotify");
-						target_destroy_notify_def.add_declarator (new CCodeVariableDeclarator (get_delegate_target_destroy_notify_cname (get_ccode_name (f)), new CCodeConstant ("NULL")));
+						var target_def = new CCodeDeclaration ("gpointer");
+						target_def.add_declarator (new CCodeVariableDeclarator (get_ccode_delegate_target_name (f), new CCodeConstant ("NULL")));
 						if (!f.is_private_symbol ()) {
-							target_destroy_notify_def.modifiers = CCodeModifiers.EXTERN;
+							target_def.modifiers = CCodeModifiers.EXTERN;
 						} else {
-							target_destroy_notify_def.modifiers = CCodeModifiers.STATIC;
+							target_def.modifiers = CCodeModifiers.STATIC;
 						}
-						cfile.add_type_member_declaration (target_destroy_notify_def);
+						cfile.add_type_member_declaration (target_def);
+
+						if (delegate_type.value_owned) {
+							var target_destroy_notify_def = new CCodeDeclaration ("GDestroyNotify");
+							target_destroy_notify_def.add_declarator (new CCodeVariableDeclarator (get_delegate_target_destroy_notify_cname (get_ccode_name (f)), new CCodeConstant ("NULL")));
+							if (!f.is_private_symbol ()) {
+								target_destroy_notify_def.modifiers = CCodeModifiers.EXTERN;
+							} else {
+								target_destroy_notify_def.modifiers = CCodeModifiers.STATIC;
+							}
+							cfile.add_type_member_declaration (target_destroy_notify_def);
 
+						}
 					}
 				}
-			}
 
-			if (f.initializer != null) {
-				var rhs = get_cvalue (f.initializer);
-				if (!is_constant_ccode_expression (rhs)) {
-					if (f.parent_symbol is Class) {
-						if (f.initializer is InitializerList) {
-							ccode.open_block ();
+				if (f.initializer != null) {
+					var rhs = get_cvalue (f.initializer);
+					if (!is_constant_ccode_expression (rhs)) {
+						if (f.parent_symbol is Class) {
+							if (f.initializer is InitializerList) {
+								ccode.open_block ();
 
-							var temp_decl = get_temp_variable (f.variable_type);
-							var vardecl = new CCodeVariableDeclarator.zero (temp_decl.name, rhs);
-							ccode.add_declaration (get_ccode_name (temp_decl.variable_type), vardecl);
+								var temp_decl = get_temp_variable (f.variable_type);
+								var vardecl = new CCodeVariableDeclarator.zero (temp_decl.name, rhs);
+								ccode.add_declaration (get_ccode_name (temp_decl.variable_type), vardecl);
 
-							var tmp = get_variable_cexpression (get_variable_cname (temp_decl.name));
-							ccode.add_assignment (lhs, tmp);
+								var tmp = get_variable_cexpression (get_variable_cname (temp_decl.name));
+								ccode.add_assignment (lhs, tmp);
 
-							ccode.close ();
-						} else {
-							ccode.add_assignment (lhs, rhs);
-						}
+								ccode.close ();
+							} else {
+								ccode.add_assignment (lhs, rhs);
+							}
 
-						if (f.variable_type is ArrayType && get_ccode_array_length (f) &&
-						    f.initializer is ArrayCreationExpression) {
-							var array_type = (ArrayType) f.variable_type;
-							var field_value = get_field_cvalue (f, null);
+							if (f.variable_type is ArrayType && get_ccode_array_length (f) &&
+							    f.initializer is ArrayCreationExpression) {
+								var array_type = (ArrayType) f.variable_type;
+								var field_value = get_field_cvalue (f, null);
 
-							List<Expression> sizes = ((ArrayCreationExpression) f.initializer).get_sizes ();
-							for (int dim = 1; dim <= array_type.rank; dim++) {
-								var array_len_lhs = get_array_length_cvalue (field_value, dim);
-								var size = sizes[dim - 1];
-								ccode.add_assignment (array_len_lhs, get_cvalue (size));
+								List<Expression> sizes = ((ArrayCreationExpression) f.initializer).get_sizes ();
+								for (int dim = 1; dim <= array_type.rank; dim++) {
+									var array_len_lhs = get_array_length_cvalue (field_value, dim);
+									var size = sizes[dim - 1];
+									ccode.add_assignment (array_len_lhs, get_cvalue (size));
+								}
 							}
+						} else {
+							f.error = true;
+							Report.error (f.source_reference, "Non-constant field initializers not supported in this context");
+							return;
 						}
-					} else {
-						f.error = true;
-						Report.error (f.source_reference, "Non-constant field initializers not supported in this context");
-						return;
 					}
 				}
-			}
 
-			pop_context ();
+				pop_context ();
+			}
 		}
 
 		pop_line ();
@@ -1707,19 +1709,27 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		return result;
 	}
 
+	public bool no_implicit_copy (DataType type) {
+		// note: implicit copy of array is planned to be forbidden
+		var cl = type.data_type as Class;
+		return (type is DelegateType ||
+				type.is_array () ||
+				(cl != null && !cl.is_immutable && !is_reference_counting (cl) && !get_ccode_is_gboxed (cl)));
+	}
+
 	void capture_parameter (Parameter param, CCodeStruct data, int block_id) {
 		generate_type_declaration (param.variable_type, cfile);
 
 		var param_type = param.variable_type.copy ();
-		param_type.value_owned = true;
+		if (!param.variable_type.value_owned) {
+			param_type.value_owned = !no_implicit_copy (param.variable_type);
+		}
 		data.add_field (get_ccode_name (param_type), get_variable_cname (param.name));
 
-		bool is_unowned_delegate = param.variable_type is DelegateType && !param.variable_type.value_owned;
-
 		// create copy if necessary as captured variables may need to be kept alive
 		param.captured = false;
 		var value = load_parameter (param);
-		if (requires_copy (param_type) && !param.variable_type.value_owned && !is_unowned_delegate)  {
+		if (requires_copy (param_type) && !param.variable_type.value_owned) {
 			// directly access parameters in ref expressions
 			value = copy_value (value, param);
 		}
@@ -1732,7 +1742,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 				data.add_field ("gint", get_parameter_array_length_cname (param, dim));
 			}
 		} else if (deleg_type != null && deleg_type.delegate_symbol.has_target) {
-			data.add_field ("gpointer", get_delegate_target_cname (get_variable_cname (param.name)));
+			data.add_field ("gpointer", get_ccode_delegate_target_name (param));
 			if (param.variable_type.value_owned) {
 				data.add_field ("GDestroyNotify", get_delegate_target_destroy_notify_cname (get_variable_cname (param.name)));
 				// reference transfer for delegates
@@ -1837,7 +1847,10 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 					var ref_call = new CCodeFunctionCall (get_dup_func_expression (get_data_type_for_symbol (current_type_symbol), b.source_reference));
 					ref_call.add_argument (get_result_cexpression ("self"));
 
-					ccode.add_assignment (new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (block_id)), "self"), ref_call);
+					// never increase reference count for self in finalizers to avoid infinite recursion on following unref
+					var instance = (is_in_destructor () ? (CCodeExpression) new CCodeIdentifier ("self") : (CCodeExpression) ref_call);
+
+					ccode.add_assignment (new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (block_id)), "self"), instance);
 				}
 
 				if (current_method != null) {
@@ -1876,6 +1889,11 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 				if (!acc.readable && acc.value_parameter.captured) {
 					capture_parameter (acc.value_parameter, data, block_id);
 				}
+			} else if (b.parent_symbol is ForeachStatement) {
+				var stmt = (ForeachStatement) b.parent_symbol;
+				if (!stmt.use_iterator && stmt.element_variable.captured) {
+					ccode.add_assignment (new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (block_id)), get_local_cname (stmt.element_variable)), get_variable_cexpression (get_local_cname (stmt.element_variable)));
+				}
 			}
 
 			var typedef = new CCodeTypeDefinition ("struct _" + struct_name, new CCodeVariableDeclarator (struct_name));
@@ -1900,11 +1918,12 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 			cfile.add_function (ref_fun);
 
 			var unref_fun = new CCodeFunction ("block%d_data_unref".printf (block_id), "void");
-			unref_fun.add_parameter (new CCodeParameter ("_data%d_".printf (block_id), struct_name + "*"));
+			unref_fun.add_parameter (new CCodeParameter ("_userdata_", "void *"));
 			unref_fun.modifiers = CCodeModifiers.STATIC;
 			
 			push_function (unref_fun);
 
+			ccode.add_declaration (struct_name + "*", new CCodeVariableDeclarator ("_data%d_".printf (block_id), new CCodeCastExpression (new CCodeIdentifier ("_userdata_"), struct_name + "*")));
 			ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_atomic_int_dec_and_test"));
 			ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeMemberAccess.pointer (new CCodeIdentifier ("_data%d_".printf (block_id)), "_ref_count_")));
 			ccode.open_if (ccall);
@@ -1972,11 +1991,11 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 				foreach (var param in m.get_parameters ()) {
 					if (param.captured) {
 						var param_type = param.variable_type.copy ();
-						param_type.value_owned = true;
-
-						bool is_unowned_delegate = param.variable_type is DelegateType && !param.variable_type.value_owned;
+						if (!param_type.value_owned) {
+							param_type.value_owned = !no_implicit_copy (param_type);
+						}
 
-						if (requires_destroy (param_type) && !is_unowned_delegate) {
+						if (requires_destroy (param_type)) {
 							bool old_coroutine = false;
 							if (m != null) {
 								old_coroutine = m.coroutine;
@@ -1996,11 +2015,11 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
 				if (!acc.readable && acc.value_parameter.captured) {
 					var param_type = acc.value_parameter.variable_type.copy ();
-					param_type.value_owned = true;
-
-					bool is_unowned_delegate = acc.value_parameter.variable_type is DelegateType && !acc.value_parameter.variable_type.value_owned;
+					if (!param_type.value_owned) {
+						param_type.value_owned = !no_implicit_copy (param_type);
+					}
 
-					if (requires_destroy (param_type) && !is_unowned_delegate) {
+					if (requires_destroy (param_type)) {
 						ccode.add_expression (destroy_parameter (acc.value_parameter));
 					}
 				}
@@ -2017,8 +2036,11 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 				ccode.add_assignment (new CCodeMemberAccess.pointer (new CCodeIdentifier ("_data%d_".printf (block_id)), "_data%d_".printf (parent_block_id)), new CCodeConstant ("NULL"));
 			} else {
 				if (get_this_type () != null) {
-					var this_value = new GLibValue (get_data_type_for_symbol (current_type_symbol), new CCodeIdentifier ("self"), true);
-					ccode.add_expression (destroy_value (this_value));
+					// reference count for self is not increased in finalizers
+					if (!is_in_destructor ()) {
+						var this_value = new GLibValue (get_data_type_for_symbol (current_type_symbol), new CCodeIdentifier ("self"), true);
+						ccode.add_expression (destroy_value (this_value));
+					}
 				}
 			}
 
@@ -2139,17 +2161,28 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		}
 	}
 
-	bool has_simple_struct_initializer (LocalVariable local) {
-		var st = local.variable_type.data_type as Struct;
-		var initializer = local.initializer as ObjectCreationExpression;
-		if (st != null && (!st.is_simple_type () || get_ccode_name (st) == "va_list") && !local.variable_type.nullable &&
-		    local.variable_type.data_type != gvalue_type && initializer != null && initializer.get_object_initializer ().size == 0) {
+	public bool is_simple_struct_creation (Variable variable, Expression expr) {
+		var st = variable.variable_type.data_type as Struct;
+		var creation = expr as ObjectCreationExpression;
+		if (creation != null && st != null && (!st.is_simple_type () || get_ccode_name (st) == "va_list") && !variable.variable_type.nullable &&
+		    variable.variable_type.data_type != gvalue_type && creation.get_object_initializer ().size == 0) {
 			return true;
 		} else {
 			return false;
 		}
 	}
 
+	bool is_foreach_element_variable (LocalVariable local) {
+		var block = local.parent_symbol;
+		if (block != null) {
+			var stmt = block.parent_symbol as ForeachStatement;
+			if (stmt != null && !stmt.use_iterator && stmt.element_variable == local) {
+				return true;
+			}
+		}
+		return false;
+	}
+
 	public override void visit_local_variable (LocalVariable local) {
 		check_type (local.variable_type);
 
@@ -2166,7 +2199,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 			rhs = get_cvalue (local.initializer);
 		}
 
-		if (!local.captured) {
+		// captured element variables of foreach statements (without iterator) require local declaration
+		if (!local.captured || is_foreach_element_variable (local)) {
 			if (is_in_coroutine ()) {
 				var count = emit_context.closure_variable_count_map.get (local.name);
 				if (count > 0) {
@@ -2180,7 +2214,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
 				// try to initialize uninitialized variables
 				// initialization not necessary for variables stored in closure
-				if (rhs == null || has_simple_struct_initializer (local)) {
+				if (rhs == null || is_simple_struct_creation (local, local.initializer)) {
 					cvar.initializer = default_value_for_type (local.variable_type, true);
 					cvar.init0 = true;
 				}
@@ -2223,7 +2257,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		}
 	
 		if (rhs != null) {
-			if (!has_simple_struct_initializer (local)) {
+			if (!is_simple_struct_creation (local, local.initializer)) {
 				store_local (local, local.initializer.target_value, true);
 			}
 		}
@@ -2302,6 +2336,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		if (list.target_type.data_type is Struct) {
 			/* initializer is used as struct initializer */
 			var st = (Struct) list.target_type.data_type;
+			while (st.base_struct != null) {
+				st = st.base_struct;
+			}
 
 			if (list.parent_node is Constant || list.parent_node is Field || list.parent_node is InitializerList) {
 				var clist = new CCodeInitializerList ();
@@ -2760,6 +2797,34 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		return destroy_func;
 	}
 
+	protected string generate_free_function_address_of_wrapper (DataType type) {
+		string destroy_func = "_vala_%s_free_function_address_of".printf (get_ccode_name (type.data_type));
+
+		if (!add_wrapper (destroy_func)) {
+			// wrapper already defined
+			return destroy_func;
+		}
+
+		var function = new CCodeFunction (destroy_func, "void");
+		function.modifiers = CCodeModifiers.STATIC;
+		function.add_parameter (new CCodeParameter ("self", get_ccode_name (type)));
+
+		push_function (function);
+
+		var cl = type.data_type as Class;
+		var free_call = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_free_function (cl)));
+		free_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("self")));
+
+		ccode.add_expression (free_call);
+
+		pop_function ();
+
+		cfile.add_function_declaration (function);
+		cfile.add_function (function);
+
+		return destroy_func;
+	}
+
 	protected string generate_free_func_wrapper (DataType type) {
 		string destroy_func = "_vala_%s_free".printf (get_ccode_name (type.data_type));
 
@@ -2871,7 +2936,11 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 					if (cl != null && get_ccode_is_gboxed (cl)) {
 						unref_function = generate_free_func_wrapper (type);
 					} else {
-						unref_function = get_ccode_free_function (type.data_type);
+						if (is_free_function_address_of (type)) {
+							unref_function = generate_free_function_address_of_wrapper (type);
+						} else {
+							unref_function = get_ccode_free_function (type.data_type);
+						}
 					}
 				}
 			} else {
@@ -3091,7 +3160,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		if (type.type_parameter != null) {
 			var parent = type.type_parameter.parent_symbol;
 			var cl = parent as Class;
-			if ((!(parent is Method) && !(parent is ObjectTypeSymbol)) || (cl != null && cl.is_compact)) {
+			if ((!(parent is Method) && !(parent is ObjectTypeSymbol)) || (cl != null && cl.is_compact) || parent is Interface) {
 				return new CCodeConstant ("NULL");
 			}
 
@@ -3175,7 +3244,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		}
 
 		var local_decl = expr.parent_node as LocalVariable;
-		if (!(local_decl != null && has_simple_struct_initializer (local_decl))) {
+		if (!(local_decl != null && is_simple_struct_creation (local_decl, local_decl.initializer))) {
 			expr.target_value = store_temp_value (expr.target_value, expr);
 		}
 
@@ -3328,7 +3397,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		ccode.add_assignment (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, get_variable_cexpression (param.name)), get_cvalue_ (value));
 
 		if (delegate_type != null && delegate_type.delegate_symbol.has_target) {
-			ccode.add_assignment (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, get_variable_cexpression (get_delegate_target_cname (param.name))), get_delegate_target_cvalue (value));
+			ccode.add_assignment (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, get_variable_cexpression (get_ccode_delegate_target_name (param))), get_delegate_target_cvalue (value));
 			if (delegate_type.value_owned) {
 				ccode.add_assignment (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, get_variable_cexpression (get_delegate_target_destroy_notify_cname (param.name))), get_delegate_target_destroy_notify_cvalue (get_parameter_cvalue (param)));
 			}
@@ -3869,6 +3938,15 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		}
 	}
 
+	bool is_free_function_address_of (DataType type) {
+		var cl = type.data_type as Class;
+		if (cl != null) {
+			return get_ccode_free_function_address_of (cl);
+		} else {
+			return false;
+		}
+	}
+
 	public virtual TargetValue? copy_value (TargetValue value, CodeNode node) {
 		var type = value.value_type;
 		var cexpr = get_cvalue_ (value);
@@ -4200,8 +4278,26 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 			// value-type initialization or object creation expression with object initializer
 
 			var local = expr.parent_node as LocalVariable;
-			if (local != null && has_simple_struct_initializer (local)) {
+			var a = expr.parent_node as Assignment;
+			if (local != null && is_simple_struct_creation (local, local.initializer)) {
 				instance = get_cvalue_ (get_local_cvalue (local));
+			} else if (a != null && a.left.symbol_reference is Variable && is_simple_struct_creation ((Variable) a.left.symbol_reference, a.right)) {
+				if (requires_destroy (a.left.value_type)) {
+					/* unref old value */
+					ccode.add_expression (destroy_value (a.left.target_value));
+				}
+
+				local = a.left.symbol_reference as LocalVariable;
+				var field = a.left.symbol_reference as Field;
+				var param = a.left.symbol_reference as Parameter;
+				if (local != null) {
+					instance = get_cvalue_ (get_local_cvalue (local));
+				} else if (field != null) {
+					var inner = ((MemberAccess) a.left).inner;
+					instance = get_cvalue_ (get_field_cvalue (field, inner != null ? inner.target_value : null));
+				} else if (param != null) {
+					instance = get_cvalue_ (get_parameter_cvalue (param));
+				}
 			} else {
 				var temp_value = create_temp_value (expr.type_reference, true, expr);
 				instance = get_cvalue_ (temp_value);
@@ -4424,7 +4520,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		}
 
 		var local = expr.parent_node as LocalVariable;
-		if (local != null && has_simple_struct_initializer (local)) {
+		if (local != null && is_simple_struct_creation (local, local.initializer)) {
 			// no temporary variable necessary
 			ccode.add_expression (creation_expr);
 			set_cvalue (expr, instance);
@@ -5189,7 +5285,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		                        && type.data_type != gvariant_type);
 
 		if (type.value_owned
-		    && (target_type == null || !target_type.value_owned || boxing || unboxing)
+		    && (target_type == null || !target_type.value_owned || boxing || unboxing || gvariant_boxing)
 		    && !gvalue_boxing /* gvalue can assume ownership of value, no need to free it */) {
 			// value leaked, destroy it
 			if (target_type is PointerType) {
@@ -5518,7 +5614,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 	public CCodeExpression? default_value_for_type (DataType type, bool initializer_expression) {
 		var st = type.data_type as Struct;
 		var array_type = type as ArrayType;
-		if (type.data_type != null && get_ccode_default_value (type.data_type) != "") {
+		if (type.data_type != null && !type.nullable && get_ccode_default_value (type.data_type) != "") {
 			return new CCodeConstant (get_ccode_default_value (type.data_type));
 		} else if (initializer_expression && !type.nullable &&
 				   (st != null || (array_type != null && array_type.fixed_length))) {
@@ -5680,6 +5776,10 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		return get_ccode_attribute(cl).ref_function_void;
 	}
 
+	public static bool get_ccode_free_function_address_of (Class cl) {
+		return get_ccode_attribute(cl).free_function_address_of;
+	}
+
 	public static bool get_ccode_ref_sink_function_void (Class cl) {
 		return get_ccode_attribute(cl).ref_sink_function_void;
 	}
@@ -5838,6 +5938,10 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		return get_ccode_attribute(node).delegate_target;
 	}
 
+	public static string get_ccode_delegate_target_name (Variable variable) {
+		return get_ccode_attribute(variable).delegate_target_name;
+	}
+
 	public static double get_ccode_pos (Parameter param) {
 		return get_ccode_attribute(param).pos;
 	}
diff --git a/codegen/valaccodecontrolflowmodule.c b/codegen/valaccodecontrolflowmodule.c
index 0d6ead4..5d238a4 100644
--- a/codegen/valaccodecontrolflowmodule.c
+++ b/codegen/valaccodecontrolflowmodule.c
@@ -458,8 +458,7 @@ static void vala_ccode_control_flow_module_visit_string_switch_statement (ValaCC
 	ValaSwitchSection* default_section;
 	gint n;
 	ValaSwitchSection* _tmp203_;
-	ValaCCodeFunction* _tmp217_;
-	ValaCCodeFunction* _tmp218_;
+	gint _tmp216_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (stmt != NULL);
 	_tmp0_ = stmt;
@@ -996,7 +995,8 @@ static void vala_ccode_control_flow_module_visit_string_switch_statement (ValaCC
 		ValaCCodeFunction* _tmp211_;
 		ValaCCodeFunction* _tmp212_;
 		ValaSwitchSection* _tmp213_;
-		gint _tmp214_;
+		ValaCCodeFunction* _tmp214_;
+		ValaCCodeFunction* _tmp215_;
 		_tmp204_ = n;
 		if (_tmp204_ > 0) {
 			ValaCCodeFunction* _tmp205_;
@@ -1016,18 +1016,18 @@ static void vala_ccode_control_flow_module_visit_string_switch_statement (ValaCC
 		vala_ccode_function_add_default (_tmp212_);
 		_tmp213_ = default_section;
 		vala_code_node_emit ((ValaCodeNode*) _tmp213_, (ValaCodeGenerator*) self);
-		_tmp214_ = n;
-		if (_tmp214_ > 0) {
-			ValaCCodeFunction* _tmp215_;
-			ValaCCodeFunction* _tmp216_;
-			_tmp215_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp216_ = _tmp215_;
-			vala_ccode_function_close (_tmp216_);
-		}
+		_tmp214_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp215_ = _tmp214_;
+		vala_ccode_function_close (_tmp215_);
+	}
+	_tmp216_ = n;
+	if (_tmp216_ > 0) {
+		ValaCCodeFunction* _tmp217_;
+		ValaCCodeFunction* _tmp218_;
+		_tmp217_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp218_ = _tmp217_;
+		vala_ccode_function_close (_tmp218_);
 	}
-	_tmp217_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-	_tmp218_ = _tmp217_;
-	vala_ccode_function_close (_tmp218_);
 	_vala_code_node_unref0 (default_section);
 	_vala_ccode_node_unref0 (ccond);
 	_vala_ccode_node_unref0 (cquark);
diff --git a/codegen/valaccodecontrolflowmodule.vala b/codegen/valaccodecontrolflowmodule.vala
index 5a4c297..ea64522 100644
--- a/codegen/valaccodecontrolflowmodule.vala
+++ b/codegen/valaccodecontrolflowmodule.vala
@@ -156,12 +156,12 @@ public abstract class Vala.CCodeControlFlowModule : CCodeMethodModule {
 
 			default_section.emit (this);
 
-			if (n > 0) {
-				ccode.close ();
-			}
+			ccode.close ();
 		}
 
-		ccode.close ();
+		if (n > 0) {
+			ccode.close ();
+		}
 	}
 
 	public override void visit_switch_statement (SwitchStatement stmt) {
diff --git a/codegen/valaccodedelegatemodule.c b/codegen/valaccodedelegatemodule.c
index cbc50ff..4fa7e48 100644
--- a/codegen/valaccodedelegatemodule.c
+++ b/codegen/valaccodedelegatemodule.c
@@ -441,6 +441,7 @@ gdouble vala_ccode_base_module_get_ccode_array_length_pos (ValaCodeNode* node);
 gdouble vala_ccode_base_module_get_ccode_delegate_target_pos (ValaCodeNode* node);
 gdouble vala_ccode_base_module_get_ccode_pos (ValaParameter* param);
 gboolean vala_ccode_base_module_get_ccode_array_null_terminated (ValaCodeNode* node);
+gchar* vala_ccode_base_module_get_ccode_delegate_target_name (ValaVariable* variable);
 ValaCCodeFunction* vala_ccode_base_module_get_ccode (ValaCCodeBaseModule* self);
 gint vala_ccode_base_module_get_block_id (ValaCCodeBaseModule* self, ValaBlock* b);
 ValaBlock* vala_ccode_base_module_get_current_closure_block (ValaCCodeBaseModule* self);
@@ -1447,48 +1448,48 @@ static gchar* vala_ccode_delegate_module_generate_delegate_wrapper (ValaCCodeDel
 	ValaMemberBinding _tmp245_;
 	gboolean _tmp249_;
 	gboolean first;
+	gboolean _tmp435_ = FALSE;
+	ValaMethod* _tmp436_;
 	gboolean _tmp437_ = FALSE;
-	ValaMethod* _tmp438_;
-	gboolean _tmp439_ = FALSE;
-	gboolean _tmp443_;
-	ValaMethod* _tmp509_;
-	ValaList* _tmp510_ = NULL;
-	ValaList* _tmp511_;
-	gint _tmp512_;
-	gint _tmp513_;
-	gboolean _tmp514_;
-	ValaMethod* _tmp519_;
-	gchar* _tmp520_ = NULL;
-	gchar* _tmp521_;
-	ValaCCodeIdentifier* _tmp522_;
-	ValaCCodeIdentifier* _tmp523_;
-	ValaCCodeFunctionCall* _tmp524_;
-	ValaCCodeFunctionCall* _tmp525_;
+	gboolean _tmp441_;
+	ValaMethod* _tmp507_;
+	ValaList* _tmp508_ = NULL;
+	ValaList* _tmp509_;
+	gint _tmp510_;
+	gint _tmp511_;
+	gboolean _tmp512_;
+	ValaMethod* _tmp517_;
+	gchar* _tmp518_ = NULL;
+	gchar* _tmp519_;
+	ValaCCodeIdentifier* _tmp520_;
+	ValaCCodeIdentifier* _tmp521_;
+	ValaCCodeFunctionCall* _tmp522_;
+	ValaCCodeFunctionCall* _tmp523_;
 	ValaCCodeFunctionCall* ccall;
-	ValaMethod* _tmp552_;
-	gboolean _tmp553_;
-	gboolean _tmp554_;
-	gboolean _tmp561_ = FALSE;
-	ValaMethod* _tmp562_;
-	ValaDataType* _tmp563_;
-	ValaDataType* _tmp564_;
-	gboolean _tmp569_;
-	gboolean _tmp579_ = FALSE;
-	gboolean _tmp580_ = FALSE;
-	ValaDelegate* _tmp581_;
-	gboolean _tmp582_;
-	gboolean _tmp583_;
-	gboolean _tmp587_;
-	gboolean _tmp591_;
-	gboolean _tmp640_ = FALSE;
-	ValaMethod* _tmp641_;
-	ValaDataType* _tmp642_;
-	ValaDataType* _tmp643_;
-	gboolean _tmp648_;
+	ValaMethod* _tmp550_;
+	gboolean _tmp551_;
+	gboolean _tmp552_;
+	gboolean _tmp559_ = FALSE;
+	ValaMethod* _tmp560_;
+	ValaDataType* _tmp561_;
+	ValaDataType* _tmp562_;
+	gboolean _tmp567_;
+	gboolean _tmp577_ = FALSE;
+	gboolean _tmp578_ = FALSE;
+	ValaDelegate* _tmp579_;
+	gboolean _tmp580_;
+	gboolean _tmp581_;
+	gboolean _tmp585_;
+	gboolean _tmp589_;
+	gboolean _tmp638_ = FALSE;
+	ValaMethod* _tmp639_;
+	ValaDataType* _tmp640_;
+	ValaDataType* _tmp641_;
+	gboolean _tmp646_;
+	ValaCCodeFile* _tmp651_;
+	ValaCCodeFunction* _tmp652_;
 	ValaCCodeFile* _tmp653_;
 	ValaCCodeFunction* _tmp654_;
-	ValaCCodeFile* _tmp655_;
-	ValaCCodeFunction* _tmp656_;
 	g_return_val_if_fail (self != NULL, NULL);
 	g_return_val_if_fail (m != NULL, NULL);
 	g_return_val_if_fail (dt != NULL, NULL);
@@ -2270,7 +2271,7 @@ static gchar* vala_ccode_delegate_module_generate_delegate_wrapper (ValaCCodeDel
 			ValaParameter* _tmp332_;
 			gboolean _tmp333_ = FALSE;
 			gboolean _tmp337_;
-			gint _tmp436_;
+			gint _tmp434_;
 			_tmp287_ = _param_index;
 			_param_index = _tmp287_ + 1;
 			_tmp288_ = _param_index;
@@ -2560,79 +2561,75 @@ static gchar* vala_ccode_delegate_module_generate_delegate_wrapper (ValaCCodeDel
 						gint _tmp404_;
 						gpointer _tmp405_ = NULL;
 						ValaParameter* _tmp406_;
-						const gchar* _tmp407_;
-						const gchar* _tmp408_;
-						gchar* _tmp409_ = NULL;
-						gchar* _tmp410_;
-						ValaCCodeIdentifier* _tmp411_;
-						ValaCCodeIdentifier* _tmp412_;
+						gchar* _tmp407_ = NULL;
+						gchar* _tmp408_;
+						ValaCCodeIdentifier* _tmp409_;
+						ValaCCodeIdentifier* _tmp410_;
 						ValaCCodeIdentifier* ctarget;
-						ValaHashMap* _tmp413_;
-						ValaParameter* _tmp414_;
-						gdouble _tmp415_ = 0.0;
-						gint _tmp416_ = 0;
-						ValaCCodeIdentifier* _tmp417_;
-						ValaDelegateType* _tmp418_;
-						gboolean _tmp419_;
-						gboolean _tmp420_;
+						ValaHashMap* _tmp411_;
+						ValaParameter* _tmp412_;
+						gdouble _tmp413_ = 0.0;
+						gint _tmp414_ = 0;
+						ValaCCodeIdentifier* _tmp415_;
+						ValaDelegateType* _tmp416_;
+						gboolean _tmp417_;
+						gboolean _tmp418_;
 						_tmp403_ = d_params;
 						_tmp404_ = i;
 						_tmp405_ = vala_list_get (_tmp403_, _tmp404_);
 						_tmp406_ = (ValaParameter*) _tmp405_;
-						_tmp407_ = vala_symbol_get_name ((ValaSymbol*) _tmp406_);
+						_tmp407_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp406_);
 						_tmp408_ = _tmp407_;
-						_tmp409_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp408_);
+						_tmp409_ = vala_ccode_identifier_new (_tmp408_);
 						_tmp410_ = _tmp409_;
-						_tmp411_ = vala_ccode_identifier_new (_tmp410_);
-						_tmp412_ = _tmp411_;
-						_g_free0 (_tmp410_);
+						_g_free0 (_tmp408_);
 						_vala_code_node_unref0 (_tmp406_);
-						ctarget = _tmp412_;
-						_tmp413_ = carg_map;
-						_tmp414_ = param;
-						_tmp415_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp414_);
-						_tmp416_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp415_, FALSE);
-						_tmp417_ = ctarget;
-						vala_map_set ((ValaMap*) _tmp413_, GINT_TO_POINTER (_tmp416_), (ValaCCodeExpression*) _tmp417_);
-						_tmp418_ = deleg_type;
-						_tmp419_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp418_);
-						_tmp420_ = _tmp419_;
-						if (_tmp420_) {
-							ValaList* _tmp421_;
-							gint _tmp422_;
-							gpointer _tmp423_ = NULL;
-							ValaParameter* _tmp424_;
-							const gchar* _tmp425_;
-							const gchar* _tmp426_;
-							gchar* _tmp427_ = NULL;
-							gchar* _tmp428_;
-							ValaCCodeIdentifier* _tmp429_;
-							ValaCCodeIdentifier* _tmp430_;
+						ctarget = _tmp410_;
+						_tmp411_ = carg_map;
+						_tmp412_ = param;
+						_tmp413_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp412_);
+						_tmp414_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp413_, FALSE);
+						_tmp415_ = ctarget;
+						vala_map_set ((ValaMap*) _tmp411_, GINT_TO_POINTER (_tmp414_), (ValaCCodeExpression*) _tmp415_);
+						_tmp416_ = deleg_type;
+						_tmp417_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp416_);
+						_tmp418_ = _tmp417_;
+						if (_tmp418_) {
+							ValaList* _tmp419_;
+							gint _tmp420_;
+							gpointer _tmp421_ = NULL;
+							ValaParameter* _tmp422_;
+							const gchar* _tmp423_;
+							const gchar* _tmp424_;
+							gchar* _tmp425_ = NULL;
+							gchar* _tmp426_;
+							ValaCCodeIdentifier* _tmp427_;
+							ValaCCodeIdentifier* _tmp428_;
 							ValaCCodeIdentifier* ctarget_destroy_notify;
-							ValaHashMap* _tmp431_;
-							ValaMethod* _tmp432_;
-							gdouble _tmp433_ = 0.0;
-							gint _tmp434_ = 0;
-							ValaCCodeIdentifier* _tmp435_;
-							_tmp421_ = d_params;
-							_tmp422_ = i;
-							_tmp423_ = vala_list_get (_tmp421_, _tmp422_);
-							_tmp424_ = (ValaParameter*) _tmp423_;
-							_tmp425_ = vala_symbol_get_name ((ValaSymbol*) _tmp424_);
+							ValaHashMap* _tmp429_;
+							ValaMethod* _tmp430_;
+							gdouble _tmp431_ = 0.0;
+							gint _tmp432_ = 0;
+							ValaCCodeIdentifier* _tmp433_;
+							_tmp419_ = d_params;
+							_tmp420_ = i;
+							_tmp421_ = vala_list_get (_tmp419_, _tmp420_);
+							_tmp422_ = (ValaParameter*) _tmp421_;
+							_tmp423_ = vala_symbol_get_name ((ValaSymbol*) _tmp422_);
+							_tmp424_ = _tmp423_;
+							_tmp425_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp424_);
 							_tmp426_ = _tmp425_;
-							_tmp427_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp426_);
+							_tmp427_ = vala_ccode_identifier_new (_tmp426_);
 							_tmp428_ = _tmp427_;
-							_tmp429_ = vala_ccode_identifier_new (_tmp428_);
-							_tmp430_ = _tmp429_;
-							_g_free0 (_tmp428_);
-							_vala_code_node_unref0 (_tmp424_);
-							ctarget_destroy_notify = _tmp430_;
-							_tmp431_ = carg_map;
-							_tmp432_ = m;
-							_tmp433_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp432_);
-							_tmp434_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp433_ + 0.01, FALSE);
-							_tmp435_ = ctarget_destroy_notify;
-							vala_map_set ((ValaMap*) _tmp431_, GINT_TO_POINTER (_tmp434_), (ValaCCodeExpression*) _tmp435_);
+							_g_free0 (_tmp426_);
+							_vala_code_node_unref0 (_tmp422_);
+							ctarget_destroy_notify = _tmp428_;
+							_tmp429_ = carg_map;
+							_tmp430_ = m;
+							_tmp431_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp430_);
+							_tmp432_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp431_ + 0.01, FALSE);
+							_tmp433_ = ctarget_destroy_notify;
+							vala_map_set ((ValaMap*) _tmp429_, GINT_TO_POINTER (_tmp432_), (ValaCCodeExpression*) _tmp433_);
 							_vala_ccode_node_unref0 (ctarget_destroy_notify);
 						}
 						_vala_ccode_node_unref0 (ctarget);
@@ -2640,587 +2637,587 @@ static gchar* vala_ccode_delegate_module_generate_delegate_wrapper (ValaCCodeDel
 					_vala_code_node_unref0 (deleg_type);
 				}
 			}
-			_tmp436_ = i;
-			i = _tmp436_ + 1;
+			_tmp434_ = i;
+			i = _tmp434_ + 1;
 			_vala_ccode_node_unref0 (arg);
 			_vala_code_node_unref0 (param);
 		}
 		_vala_iterable_unref0 (_param_list);
 	}
-	_tmp438_ = m;
-	_tmp439_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp438_);
-	if (_tmp439_) {
-		ValaMethod* _tmp440_;
-		ValaDataType* _tmp441_;
-		ValaDataType* _tmp442_;
-		_tmp440_ = m;
-		_tmp441_ = vala_method_get_return_type (_tmp440_);
-		_tmp442_ = _tmp441_;
-		_tmp437_ = VALA_IS_ARRAY_TYPE (_tmp442_);
+	_tmp436_ = m;
+	_tmp437_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp436_);
+	if (_tmp437_) {
+		ValaMethod* _tmp438_;
+		ValaDataType* _tmp439_;
+		ValaDataType* _tmp440_;
+		_tmp438_ = m;
+		_tmp439_ = vala_method_get_return_type (_tmp438_);
+		_tmp440_ = _tmp439_;
+		_tmp435_ = VALA_IS_ARRAY_TYPE (_tmp440_);
 	} else {
-		_tmp437_ = FALSE;
+		_tmp435_ = FALSE;
 	}
-	_tmp443_ = _tmp437_;
-	if (_tmp443_) {
-		ValaMethod* _tmp444_;
-		ValaDataType* _tmp445_;
-		ValaDataType* _tmp446_;
-		ValaArrayType* _tmp447_;
+	_tmp441_ = _tmp435_;
+	if (_tmp441_) {
+		ValaMethod* _tmp442_;
+		ValaDataType* _tmp443_;
+		ValaDataType* _tmp444_;
+		ValaArrayType* _tmp445_;
 		ValaArrayType* array_type;
-		_tmp444_ = m;
-		_tmp445_ = vala_method_get_return_type (_tmp444_);
-		_tmp446_ = _tmp445_;
-		_tmp447_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp446_));
-		array_type = _tmp447_;
+		_tmp442_ = m;
+		_tmp443_ = vala_method_get_return_type (_tmp442_);
+		_tmp444_ = _tmp443_;
+		_tmp445_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp444_));
+		array_type = _tmp445_;
 		{
 			gint dim;
 			dim = 1;
 			{
-				gboolean _tmp448_;
-				_tmp448_ = TRUE;
+				gboolean _tmp446_;
+				_tmp446_ = TRUE;
 				while (TRUE) {
-					gboolean _tmp449_;
+					gboolean _tmp447_;
+					gint _tmp449_;
+					ValaArrayType* _tmp450_;
 					gint _tmp451_;
-					ValaArrayType* _tmp452_;
-					gint _tmp453_;
-					gint _tmp454_;
+					gint _tmp452_;
 					ValaCCodeExpression* clength = NULL;
-					ValaDelegate* _tmp455_;
-					gboolean _tmp456_ = FALSE;
-					ValaHashMap* _tmp462_;
-					ValaMethod* _tmp463_;
-					gdouble _tmp464_ = 0.0;
-					gint _tmp465_;
-					gint _tmp466_ = 0;
-					ValaCCodeExpression* _tmp467_;
-					_tmp449_ = _tmp448_;
-					if (!_tmp449_) {
-						gint _tmp450_;
-						_tmp450_ = dim;
-						dim = _tmp450_ + 1;
+					ValaDelegate* _tmp453_;
+					gboolean _tmp454_ = FALSE;
+					ValaHashMap* _tmp460_;
+					ValaMethod* _tmp461_;
+					gdouble _tmp462_ = 0.0;
+					gint _tmp463_;
+					gint _tmp464_ = 0;
+					ValaCCodeExpression* _tmp465_;
+					_tmp447_ = _tmp446_;
+					if (!_tmp447_) {
+						gint _tmp448_;
+						_tmp448_ = dim;
+						dim = _tmp448_ + 1;
 					}
-					_tmp448_ = FALSE;
-					_tmp451_ = dim;
-					_tmp452_ = array_type;
-					_tmp453_ = vala_array_type_get_rank (_tmp452_);
-					_tmp454_ = _tmp453_;
-					if (!(_tmp451_ <= _tmp454_)) {
+					_tmp446_ = FALSE;
+					_tmp449_ = dim;
+					_tmp450_ = array_type;
+					_tmp451_ = vala_array_type_get_rank (_tmp450_);
+					_tmp452_ = _tmp451_;
+					if (!(_tmp449_ <= _tmp452_)) {
 						break;
 					}
-					_tmp455_ = d;
-					_tmp456_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp455_);
-					if (!_tmp456_) {
-						ValaCCodeConstant* _tmp457_;
-						_tmp457_ = vala_ccode_constant_new ("NULL");
+					_tmp453_ = d;
+					_tmp454_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp453_);
+					if (!_tmp454_) {
+						ValaCCodeConstant* _tmp455_;
+						_tmp455_ = vala_ccode_constant_new ("NULL");
 						_vala_ccode_node_unref0 (clength);
-						clength = (ValaCCodeExpression*) _tmp457_;
+						clength = (ValaCCodeExpression*) _tmp455_;
 					} else {
-						gint _tmp458_;
-						gchar* _tmp459_ = NULL;
-						gchar* _tmp460_;
-						ValaCCodeIdentifier* _tmp461_;
-						_tmp458_ = dim;
-						_tmp459_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "result", _tmp458_);
-						_tmp460_ = _tmp459_;
-						_tmp461_ = vala_ccode_identifier_new (_tmp460_);
+						gint _tmp456_;
+						gchar* _tmp457_ = NULL;
+						gchar* _tmp458_;
+						ValaCCodeIdentifier* _tmp459_;
+						_tmp456_ = dim;
+						_tmp457_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "result", _tmp456_);
+						_tmp458_ = _tmp457_;
+						_tmp459_ = vala_ccode_identifier_new (_tmp458_);
 						_vala_ccode_node_unref0 (clength);
-						clength = (ValaCCodeExpression*) _tmp461_;
-						_g_free0 (_tmp460_);
+						clength = (ValaCCodeExpression*) _tmp459_;
+						_g_free0 (_tmp458_);
 					}
-					_tmp462_ = carg_map;
-					_tmp463_ = m;
-					_tmp464_ = vala_ccode_base_module_get_ccode_array_length_pos ((ValaCodeNode*) _tmp463_);
-					_tmp465_ = dim;
-					_tmp466_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp464_ + (0.01 * _tmp465_), FALSE);
-					_tmp467_ = clength;
-					vala_map_set ((ValaMap*) _tmp462_, GINT_TO_POINTER (_tmp466_), _tmp467_);
+					_tmp460_ = carg_map;
+					_tmp461_ = m;
+					_tmp462_ = vala_ccode_base_module_get_ccode_array_length_pos ((ValaCodeNode*) _tmp461_);
+					_tmp463_ = dim;
+					_tmp464_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp462_ + (0.01 * _tmp463_), FALSE);
+					_tmp465_ = clength;
+					vala_map_set ((ValaMap*) _tmp460_, GINT_TO_POINTER (_tmp464_), _tmp465_);
 					_vala_ccode_node_unref0 (clength);
 				}
 			}
 		}
 		_vala_code_node_unref0 (array_type);
 	} else {
-		ValaMethod* _tmp468_;
-		ValaDataType* _tmp469_;
-		ValaDataType* _tmp470_;
-		_tmp468_ = m;
-		_tmp469_ = vala_method_get_return_type (_tmp468_);
-		_tmp470_ = _tmp469_;
-		if (VALA_IS_DELEGATE_TYPE (_tmp470_)) {
-			ValaMethod* _tmp471_;
-			ValaDataType* _tmp472_;
-			ValaDataType* _tmp473_;
-			ValaDelegateType* _tmp474_;
+		ValaMethod* _tmp466_;
+		ValaDataType* _tmp467_;
+		ValaDataType* _tmp468_;
+		_tmp466_ = m;
+		_tmp467_ = vala_method_get_return_type (_tmp466_);
+		_tmp468_ = _tmp467_;
+		if (VALA_IS_DELEGATE_TYPE (_tmp468_)) {
+			ValaMethod* _tmp469_;
+			ValaDataType* _tmp470_;
+			ValaDataType* _tmp471_;
+			ValaDelegateType* _tmp472_;
 			ValaDelegateType* deleg_type;
-			ValaDelegateType* _tmp475_;
-			ValaDelegate* _tmp476_;
-			ValaDelegate* _tmp477_;
-			gboolean _tmp478_;
-			gboolean _tmp479_;
-			_tmp471_ = m;
-			_tmp472_ = vala_method_get_return_type (_tmp471_);
-			_tmp473_ = _tmp472_;
-			_tmp474_ = _vala_code_node_ref0 (VALA_DELEGATE_TYPE (_tmp473_));
-			deleg_type = _tmp474_;
-			_tmp475_ = deleg_type;
-			_tmp476_ = vala_delegate_type_get_delegate_symbol (_tmp475_);
+			ValaDelegateType* _tmp473_;
+			ValaDelegate* _tmp474_;
+			ValaDelegate* _tmp475_;
+			gboolean _tmp476_;
+			gboolean _tmp477_;
+			_tmp469_ = m;
+			_tmp470_ = vala_method_get_return_type (_tmp469_);
+			_tmp471_ = _tmp470_;
+			_tmp472_ = _vala_code_node_ref0 (VALA_DELEGATE_TYPE (_tmp471_));
+			deleg_type = _tmp472_;
+			_tmp473_ = deleg_type;
+			_tmp474_ = vala_delegate_type_get_delegate_symbol (_tmp473_);
+			_tmp475_ = _tmp474_;
+			_tmp476_ = vala_delegate_get_has_target (_tmp475_);
 			_tmp477_ = _tmp476_;
-			_tmp478_ = vala_delegate_get_has_target (_tmp477_);
-			_tmp479_ = _tmp478_;
-			if (_tmp479_) {
-				gchar* _tmp480_ = NULL;
-				gchar* _tmp481_;
-				ValaCCodeIdentifier* _tmp482_;
-				ValaCCodeIdentifier* _tmp483_;
+			if (_tmp477_) {
+				gchar* _tmp478_ = NULL;
+				gchar* _tmp479_;
+				ValaCCodeIdentifier* _tmp480_;
+				ValaCCodeIdentifier* _tmp481_;
 				ValaCCodeIdentifier* ctarget;
-				ValaHashMap* _tmp484_;
-				ValaMethod* _tmp485_;
-				gdouble _tmp486_ = 0.0;
-				gint _tmp487_ = 0;
-				ValaCCodeIdentifier* _tmp488_;
-				ValaDelegateType* _tmp489_;
-				gboolean _tmp490_;
-				gboolean _tmp491_;
-				_tmp480_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, "result");
+				ValaHashMap* _tmp482_;
+				ValaMethod* _tmp483_;
+				gdouble _tmp484_ = 0.0;
+				gint _tmp485_ = 0;
+				ValaCCodeIdentifier* _tmp486_;
+				ValaDelegateType* _tmp487_;
+				gboolean _tmp488_;
+				gboolean _tmp489_;
+				_tmp478_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, "result");
+				_tmp479_ = _tmp478_;
+				_tmp480_ = vala_ccode_identifier_new (_tmp479_);
 				_tmp481_ = _tmp480_;
-				_tmp482_ = vala_ccode_identifier_new (_tmp481_);
-				_tmp483_ = _tmp482_;
-				_g_free0 (_tmp481_);
-				ctarget = _tmp483_;
-				_tmp484_ = carg_map;
-				_tmp485_ = m;
-				_tmp486_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp485_);
-				_tmp487_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp486_, FALSE);
-				_tmp488_ = ctarget;
-				vala_map_set ((ValaMap*) _tmp484_, GINT_TO_POINTER (_tmp487_), (ValaCCodeExpression*) _tmp488_);
-				_tmp489_ = deleg_type;
-				_tmp490_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp489_);
-				_tmp491_ = _tmp490_;
-				if (_tmp491_) {
-					gchar* _tmp492_ = NULL;
-					gchar* _tmp493_;
-					ValaCCodeIdentifier* _tmp494_;
-					ValaCCodeIdentifier* _tmp495_;
+				_g_free0 (_tmp479_);
+				ctarget = _tmp481_;
+				_tmp482_ = carg_map;
+				_tmp483_ = m;
+				_tmp484_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp483_);
+				_tmp485_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp484_, FALSE);
+				_tmp486_ = ctarget;
+				vala_map_set ((ValaMap*) _tmp482_, GINT_TO_POINTER (_tmp485_), (ValaCCodeExpression*) _tmp486_);
+				_tmp487_ = deleg_type;
+				_tmp488_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp487_);
+				_tmp489_ = _tmp488_;
+				if (_tmp489_) {
+					gchar* _tmp490_ = NULL;
+					gchar* _tmp491_;
+					ValaCCodeIdentifier* _tmp492_;
+					ValaCCodeIdentifier* _tmp493_;
 					ValaCCodeIdentifier* ctarget_destroy_notify;
-					ValaHashMap* _tmp496_;
-					ValaMethod* _tmp497_;
-					gdouble _tmp498_ = 0.0;
-					gint _tmp499_ = 0;
-					ValaCCodeIdentifier* _tmp500_;
-					_tmp492_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, "result");
+					ValaHashMap* _tmp494_;
+					ValaMethod* _tmp495_;
+					gdouble _tmp496_ = 0.0;
+					gint _tmp497_ = 0;
+					ValaCCodeIdentifier* _tmp498_;
+					_tmp490_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, "result");
+					_tmp491_ = _tmp490_;
+					_tmp492_ = vala_ccode_identifier_new (_tmp491_);
 					_tmp493_ = _tmp492_;
-					_tmp494_ = vala_ccode_identifier_new (_tmp493_);
-					_tmp495_ = _tmp494_;
-					_g_free0 (_tmp493_);
-					ctarget_destroy_notify = _tmp495_;
-					_tmp496_ = carg_map;
-					_tmp497_ = m;
-					_tmp498_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp497_);
-					_tmp499_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp498_ + 0.01, FALSE);
-					_tmp500_ = ctarget_destroy_notify;
-					vala_map_set ((ValaMap*) _tmp496_, GINT_TO_POINTER (_tmp499_), (ValaCCodeExpression*) _tmp500_);
+					_g_free0 (_tmp491_);
+					ctarget_destroy_notify = _tmp493_;
+					_tmp494_ = carg_map;
+					_tmp495_ = m;
+					_tmp496_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp495_);
+					_tmp497_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp496_ + 0.01, FALSE);
+					_tmp498_ = ctarget_destroy_notify;
+					vala_map_set ((ValaMap*) _tmp494_, GINT_TO_POINTER (_tmp497_), (ValaCCodeExpression*) _tmp498_);
 					_vala_ccode_node_unref0 (ctarget_destroy_notify);
 				}
 				_vala_ccode_node_unref0 (ctarget);
 			}
 			_vala_code_node_unref0 (deleg_type);
 		} else {
-			ValaMethod* _tmp501_;
-			ValaDataType* _tmp502_;
-			ValaDataType* _tmp503_;
-			gboolean _tmp504_ = FALSE;
-			_tmp501_ = m;
-			_tmp502_ = vala_method_get_return_type (_tmp501_);
-			_tmp503_ = _tmp502_;
-			_tmp504_ = vala_data_type_is_real_non_null_struct_type (_tmp503_);
-			if (_tmp504_) {
-				ValaHashMap* _tmp505_;
-				gint _tmp506_ = 0;
-				ValaCCodeIdentifier* _tmp507_;
-				ValaCCodeIdentifier* _tmp508_;
-				_tmp505_ = carg_map;
-				_tmp506_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (gdouble) (-3), FALSE);
-				_tmp507_ = vala_ccode_identifier_new ("result");
-				_tmp508_ = _tmp507_;
-				vala_map_set ((ValaMap*) _tmp505_, GINT_TO_POINTER (_tmp506_), (ValaCCodeExpression*) _tmp508_);
-				_vala_ccode_node_unref0 (_tmp508_);
+			ValaMethod* _tmp499_;
+			ValaDataType* _tmp500_;
+			ValaDataType* _tmp501_;
+			gboolean _tmp502_ = FALSE;
+			_tmp499_ = m;
+			_tmp500_ = vala_method_get_return_type (_tmp499_);
+			_tmp501_ = _tmp500_;
+			_tmp502_ = vala_data_type_is_real_non_null_struct_type (_tmp501_);
+			if (_tmp502_) {
+				ValaHashMap* _tmp503_;
+				gint _tmp504_ = 0;
+				ValaCCodeIdentifier* _tmp505_;
+				ValaCCodeIdentifier* _tmp506_;
+				_tmp503_ = carg_map;
+				_tmp504_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (gdouble) (-3), FALSE);
+				_tmp505_ = vala_ccode_identifier_new ("result");
+				_tmp506_ = _tmp505_;
+				vala_map_set ((ValaMap*) _tmp503_, GINT_TO_POINTER (_tmp504_), (ValaCCodeExpression*) _tmp506_);
+				_vala_ccode_node_unref0 (_tmp506_);
 			}
 		}
 	}
-	_tmp509_ = m;
-	_tmp510_ = vala_code_node_get_error_types ((ValaCodeNode*) _tmp509_);
+	_tmp507_ = m;
+	_tmp508_ = vala_code_node_get_error_types ((ValaCodeNode*) _tmp507_);
+	_tmp509_ = _tmp508_;
+	_tmp510_ = vala_collection_get_size ((ValaCollection*) _tmp509_);
 	_tmp511_ = _tmp510_;
-	_tmp512_ = vala_collection_get_size ((ValaCollection*) _tmp511_);
-	_tmp513_ = _tmp512_;
-	_tmp514_ = _tmp513_ > 0;
-	_vala_iterable_unref0 (_tmp511_);
-	if (_tmp514_) {
-		ValaHashMap* _tmp515_;
-		gint _tmp516_ = 0;
-		ValaCCodeIdentifier* _tmp517_;
-		ValaCCodeIdentifier* _tmp518_;
-		_tmp515_ = carg_map;
-		_tmp516_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (gdouble) (-1), FALSE);
-		_tmp517_ = vala_ccode_identifier_new ("error");
-		_tmp518_ = _tmp517_;
-		vala_map_set ((ValaMap*) _tmp515_, GINT_TO_POINTER (_tmp516_), (ValaCCodeExpression*) _tmp518_);
-		_vala_ccode_node_unref0 (_tmp518_);
+	_tmp512_ = _tmp511_ > 0;
+	_vala_iterable_unref0 (_tmp509_);
+	if (_tmp512_) {
+		ValaHashMap* _tmp513_;
+		gint _tmp514_ = 0;
+		ValaCCodeIdentifier* _tmp515_;
+		ValaCCodeIdentifier* _tmp516_;
+		_tmp513_ = carg_map;
+		_tmp514_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (gdouble) (-1), FALSE);
+		_tmp515_ = vala_ccode_identifier_new ("error");
+		_tmp516_ = _tmp515_;
+		vala_map_set ((ValaMap*) _tmp513_, GINT_TO_POINTER (_tmp514_), (ValaCCodeExpression*) _tmp516_);
+		_vala_ccode_node_unref0 (_tmp516_);
 	}
-	_tmp519_ = m;
-	_tmp520_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp519_);
+	_tmp517_ = m;
+	_tmp518_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp517_);
+	_tmp519_ = _tmp518_;
+	_tmp520_ = vala_ccode_identifier_new (_tmp519_);
 	_tmp521_ = _tmp520_;
-	_tmp522_ = vala_ccode_identifier_new (_tmp521_);
+	_tmp522_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp521_);
 	_tmp523_ = _tmp522_;
-	_tmp524_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp523_);
-	_tmp525_ = _tmp524_;
-	_vala_ccode_node_unref0 (_tmp523_);
-	_g_free0 (_tmp521_);
-	ccall = _tmp525_;
+	_vala_ccode_node_unref0 (_tmp521_);
+	_g_free0 (_tmp519_);
+	ccall = _tmp523_;
 	last_pos = -1;
 	while (TRUE) {
-		gint _tmp545_;
-		ValaCCodeFunctionCall* _tmp546_;
-		ValaHashMap* _tmp547_;
-		gint _tmp548_;
-		gpointer _tmp549_ = NULL;
-		ValaCCodeExpression* _tmp550_;
-		gint _tmp551_;
+		gint _tmp543_;
+		ValaCCodeFunctionCall* _tmp544_;
+		ValaHashMap* _tmp545_;
+		gint _tmp546_;
+		gpointer _tmp547_ = NULL;
+		ValaCCodeExpression* _tmp548_;
+		gint _tmp549_;
 		min_pos = -1;
 		{
-			ValaHashMap* _tmp526_;
-			ValaSet* _tmp527_ = NULL;
-			ValaSet* _tmp528_;
-			ValaIterator* _tmp529_ = NULL;
-			ValaIterator* _tmp530_;
+			ValaHashMap* _tmp524_;
+			ValaSet* _tmp525_ = NULL;
+			ValaSet* _tmp526_;
+			ValaIterator* _tmp527_ = NULL;
+			ValaIterator* _tmp528_;
 			ValaIterator* _pos_it;
-			_tmp526_ = carg_map;
-			_tmp527_ = vala_map_get_keys ((ValaMap*) _tmp526_);
+			_tmp524_ = carg_map;
+			_tmp525_ = vala_map_get_keys ((ValaMap*) _tmp524_);
+			_tmp526_ = _tmp525_;
+			_tmp527_ = vala_iterable_iterator ((ValaIterable*) _tmp526_);
 			_tmp528_ = _tmp527_;
-			_tmp529_ = vala_iterable_iterator ((ValaIterable*) _tmp528_);
-			_tmp530_ = _tmp529_;
-			_vala_iterable_unref0 (_tmp528_);
-			_pos_it = _tmp530_;
+			_vala_iterable_unref0 (_tmp526_);
+			_pos_it = _tmp528_;
 			while (TRUE) {
+				ValaIterator* _tmp529_;
+				gboolean _tmp530_ = FALSE;
 				ValaIterator* _tmp531_;
-				gboolean _tmp532_ = FALSE;
-				ValaIterator* _tmp533_;
-				gpointer _tmp534_ = NULL;
+				gpointer _tmp532_ = NULL;
 				gint pos;
-				gboolean _tmp535_ = FALSE;
-				gint _tmp536_;
-				gint _tmp537_;
-				gboolean _tmp543_;
-				_tmp531_ = _pos_it;
-				_tmp532_ = vala_iterator_next (_tmp531_);
-				if (!_tmp532_) {
+				gboolean _tmp533_ = FALSE;
+				gint _tmp534_;
+				gint _tmp535_;
+				gboolean _tmp541_;
+				_tmp529_ = _pos_it;
+				_tmp530_ = vala_iterator_next (_tmp529_);
+				if (!_tmp530_) {
 					break;
 				}
-				_tmp533_ = _pos_it;
-				_tmp534_ = vala_iterator_get (_tmp533_);
-				pos = GPOINTER_TO_INT (_tmp534_);
-				_tmp536_ = pos;
-				_tmp537_ = last_pos;
-				if (_tmp536_ > _tmp537_) {
-					gboolean _tmp538_ = FALSE;
-					gint _tmp539_;
-					gboolean _tmp542_;
-					_tmp539_ = min_pos;
-					if (_tmp539_ == (-1)) {
-						_tmp538_ = TRUE;
+				_tmp531_ = _pos_it;
+				_tmp532_ = vala_iterator_get (_tmp531_);
+				pos = GPOINTER_TO_INT (_tmp532_);
+				_tmp534_ = pos;
+				_tmp535_ = last_pos;
+				if (_tmp534_ > _tmp535_) {
+					gboolean _tmp536_ = FALSE;
+					gint _tmp537_;
+					gboolean _tmp540_;
+					_tmp537_ = min_pos;
+					if (_tmp537_ == (-1)) {
+						_tmp536_ = TRUE;
 					} else {
-						gint _tmp540_;
-						gint _tmp541_;
-						_tmp540_ = pos;
-						_tmp541_ = min_pos;
-						_tmp538_ = _tmp540_ < _tmp541_;
+						gint _tmp538_;
+						gint _tmp539_;
+						_tmp538_ = pos;
+						_tmp539_ = min_pos;
+						_tmp536_ = _tmp538_ < _tmp539_;
 					}
-					_tmp542_ = _tmp538_;
-					_tmp535_ = _tmp542_;
+					_tmp540_ = _tmp536_;
+					_tmp533_ = _tmp540_;
 				} else {
-					_tmp535_ = FALSE;
+					_tmp533_ = FALSE;
 				}
-				_tmp543_ = _tmp535_;
-				if (_tmp543_) {
-					gint _tmp544_;
-					_tmp544_ = pos;
-					min_pos = _tmp544_;
+				_tmp541_ = _tmp533_;
+				if (_tmp541_) {
+					gint _tmp542_;
+					_tmp542_ = pos;
+					min_pos = _tmp542_;
 				}
 			}
 			_vala_iterator_unref0 (_pos_it);
 		}
-		_tmp545_ = min_pos;
-		if (_tmp545_ == (-1)) {
+		_tmp543_ = min_pos;
+		if (_tmp543_ == (-1)) {
 			break;
 		}
-		_tmp546_ = ccall;
-		_tmp547_ = carg_map;
-		_tmp548_ = min_pos;
-		_tmp549_ = vala_map_get ((ValaMap*) _tmp547_, GINT_TO_POINTER (_tmp548_));
-		_tmp550_ = (ValaCCodeExpression*) _tmp549_;
-		vala_ccode_function_call_add_argument (_tmp546_, _tmp550_);
-		_vala_ccode_node_unref0 (_tmp550_);
-		_tmp551_ = min_pos;
-		last_pos = _tmp551_;
+		_tmp544_ = ccall;
+		_tmp545_ = carg_map;
+		_tmp546_ = min_pos;
+		_tmp547_ = vala_map_get ((ValaMap*) _tmp545_, GINT_TO_POINTER (_tmp546_));
+		_tmp548_ = (ValaCCodeExpression*) _tmp547_;
+		vala_ccode_function_call_add_argument (_tmp544_, _tmp548_);
+		_vala_ccode_node_unref0 (_tmp548_);
+		_tmp549_ = min_pos;
+		last_pos = _tmp549_;
 	}
-	_tmp552_ = m;
-	_tmp553_ = vala_method_get_coroutine (_tmp552_);
-	_tmp554_ = _tmp553_;
-	if (_tmp554_) {
-		ValaCCodeFunctionCall* _tmp555_;
-		ValaCCodeConstant* _tmp556_;
+	_tmp550_ = m;
+	_tmp551_ = vala_method_get_coroutine (_tmp550_);
+	_tmp552_ = _tmp551_;
+	if (_tmp552_) {
+		ValaCCodeFunctionCall* _tmp553_;
+		ValaCCodeConstant* _tmp554_;
+		ValaCCodeConstant* _tmp555_;
+		ValaCCodeFunctionCall* _tmp556_;
 		ValaCCodeConstant* _tmp557_;
-		ValaCCodeFunctionCall* _tmp558_;
-		ValaCCodeConstant* _tmp559_;
-		ValaCCodeConstant* _tmp560_;
-		_tmp555_ = ccall;
-		_tmp556_ = vala_ccode_constant_new ("NULL");
-		_tmp557_ = _tmp556_;
-		vala_ccode_function_call_add_argument (_tmp555_, (ValaCCodeExpression*) _tmp557_);
-		_vala_ccode_node_unref0 (_tmp557_);
-		_tmp558_ = ccall;
-		_tmp559_ = vala_ccode_constant_new ("NULL");
-		_tmp560_ = _tmp559_;
-		vala_ccode_function_call_add_argument (_tmp558_, (ValaCCodeExpression*) _tmp560_);
-		_vala_ccode_node_unref0 (_tmp560_);
+		ValaCCodeConstant* _tmp558_;
+		_tmp553_ = ccall;
+		_tmp554_ = vala_ccode_constant_new ("NULL");
+		_tmp555_ = _tmp554_;
+		vala_ccode_function_call_add_argument (_tmp553_, (ValaCCodeExpression*) _tmp555_);
+		_vala_ccode_node_unref0 (_tmp555_);
+		_tmp556_ = ccall;
+		_tmp557_ = vala_ccode_constant_new ("NULL");
+		_tmp558_ = _tmp557_;
+		vala_ccode_function_call_add_argument (_tmp556_, (ValaCCodeExpression*) _tmp558_);
+		_vala_ccode_node_unref0 (_tmp558_);
 	}
-	_tmp562_ = m;
-	_tmp563_ = vala_method_get_return_type (_tmp562_);
-	_tmp564_ = _tmp563_;
-	if (VALA_IS_VOID_TYPE (_tmp564_)) {
-		_tmp561_ = TRUE;
+	_tmp560_ = m;
+	_tmp561_ = vala_method_get_return_type (_tmp560_);
+	_tmp562_ = _tmp561_;
+	if (VALA_IS_VOID_TYPE (_tmp562_)) {
+		_tmp559_ = TRUE;
 	} else {
-		ValaMethod* _tmp565_;
-		ValaDataType* _tmp566_;
-		ValaDataType* _tmp567_;
-		gboolean _tmp568_ = FALSE;
-		_tmp565_ = m;
-		_tmp566_ = vala_method_get_return_type (_tmp565_);
-		_tmp567_ = _tmp566_;
-		_tmp568_ = vala_data_type_is_real_non_null_struct_type (_tmp567_);
-		_tmp561_ = _tmp568_;
+		ValaMethod* _tmp563_;
+		ValaDataType* _tmp564_;
+		ValaDataType* _tmp565_;
+		gboolean _tmp566_ = FALSE;
+		_tmp563_ = m;
+		_tmp564_ = vala_method_get_return_type (_tmp563_);
+		_tmp565_ = _tmp564_;
+		_tmp566_ = vala_data_type_is_real_non_null_struct_type (_tmp565_);
+		_tmp559_ = _tmp566_;
 	}
-	_tmp569_ = _tmp561_;
-	if (_tmp569_) {
-		ValaCCodeFunction* _tmp570_;
-		ValaCCodeFunction* _tmp571_;
-		ValaCCodeFunctionCall* _tmp572_;
-		_tmp570_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-		_tmp571_ = _tmp570_;
-		_tmp572_ = ccall;
-		vala_ccode_function_add_expression (_tmp571_, (ValaCCodeExpression*) _tmp572_);
+	_tmp567_ = _tmp559_;
+	if (_tmp567_) {
+		ValaCCodeFunction* _tmp568_;
+		ValaCCodeFunction* _tmp569_;
+		ValaCCodeFunctionCall* _tmp570_;
+		_tmp568_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp569_ = _tmp568_;
+		_tmp570_ = ccall;
+		vala_ccode_function_add_expression (_tmp569_, (ValaCCodeExpression*) _tmp570_);
 	} else {
-		ValaCCodeFunction* _tmp573_;
-		ValaCCodeFunction* _tmp574_;
-		const gchar* _tmp575_;
-		ValaCCodeFunctionCall* _tmp576_;
-		ValaCCodeVariableDeclarator* _tmp577_;
-		ValaCCodeVariableDeclarator* _tmp578_;
-		_tmp573_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-		_tmp574_ = _tmp573_;
-		_tmp575_ = return_type_cname;
-		_tmp576_ = ccall;
-		_tmp577_ = vala_ccode_variable_declarator_new ("result", (ValaCCodeExpression*) _tmp576_, NULL);
-		_tmp578_ = _tmp577_;
-		vala_ccode_function_add_declaration (_tmp574_, _tmp575_, (ValaCCodeDeclarator*) _tmp578_, 0);
-		_vala_ccode_node_unref0 (_tmp578_);
+		ValaCCodeFunction* _tmp571_;
+		ValaCCodeFunction* _tmp572_;
+		const gchar* _tmp573_;
+		ValaCCodeFunctionCall* _tmp574_;
+		ValaCCodeVariableDeclarator* _tmp575_;
+		ValaCCodeVariableDeclarator* _tmp576_;
+		_tmp571_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp572_ = _tmp571_;
+		_tmp573_ = return_type_cname;
+		_tmp574_ = ccall;
+		_tmp575_ = vala_ccode_variable_declarator_new ("result", (ValaCCodeExpression*) _tmp574_, NULL);
+		_tmp576_ = _tmp575_;
+		vala_ccode_function_add_declaration (_tmp572_, _tmp573_, (ValaCCodeDeclarator*) _tmp576_, 0);
+		_vala_ccode_node_unref0 (_tmp576_);
 	}
-	_tmp581_ = d;
-	_tmp582_ = vala_delegate_get_has_target (_tmp581_);
-	_tmp583_ = _tmp582_;
-	if (_tmp583_) {
-		ValaDelegateType* _tmp584_;
-		gboolean _tmp585_;
-		gboolean _tmp586_;
-		_tmp584_ = dt;
-		_tmp585_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp584_);
-		_tmp586_ = _tmp585_;
-		_tmp580_ = !_tmp586_;
+	_tmp579_ = d;
+	_tmp580_ = vala_delegate_get_has_target (_tmp579_);
+	_tmp581_ = _tmp580_;
+	if (_tmp581_) {
+		ValaDelegateType* _tmp582_;
+		gboolean _tmp583_;
+		gboolean _tmp584_;
+		_tmp582_ = dt;
+		_tmp583_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp582_);
+		_tmp584_ = _tmp583_;
+		_tmp578_ = !_tmp584_;
 	} else {
-		_tmp580_ = FALSE;
+		_tmp578_ = FALSE;
 	}
-	_tmp587_ = _tmp580_;
-	if (_tmp587_) {
-		ValaDelegateType* _tmp588_;
-		gboolean _tmp589_;
-		gboolean _tmp590_;
-		_tmp588_ = dt;
-		_tmp589_ = vala_delegate_type_get_is_called_once (_tmp588_);
-		_tmp590_ = _tmp589_;
-		_tmp579_ = _tmp590_;
+	_tmp585_ = _tmp578_;
+	if (_tmp585_) {
+		ValaDelegateType* _tmp586_;
+		gboolean _tmp587_;
+		gboolean _tmp588_;
+		_tmp586_ = dt;
+		_tmp587_ = vala_delegate_type_get_is_called_once (_tmp586_);
+		_tmp588_ = _tmp587_;
+		_tmp577_ = _tmp588_;
 	} else {
-		_tmp579_ = FALSE;
+		_tmp577_ = FALSE;
 	}
-	_tmp591_ = _tmp579_;
-	if (_tmp591_) {
+	_tmp589_ = _tmp577_;
+	if (_tmp589_) {
 		ValaCCodeExpression* destroy_notify;
-		ValaMethod* _tmp592_;
-		gboolean _tmp593_;
-		gboolean _tmp594_;
-		ValaCCodeExpression* _tmp631_;
+		ValaMethod* _tmp590_;
+		gboolean _tmp591_;
+		gboolean _tmp592_;
+		ValaCCodeExpression* _tmp629_;
 		destroy_notify = NULL;
-		_tmp592_ = m;
-		_tmp593_ = vala_method_get_closure (_tmp592_);
-		_tmp594_ = _tmp593_;
-		if (_tmp594_) {
-			ValaBlock* _tmp595_;
-			ValaBlock* _tmp596_;
-			gint _tmp597_ = 0;
+		_tmp590_ = m;
+		_tmp591_ = vala_method_get_closure (_tmp590_);
+		_tmp592_ = _tmp591_;
+		if (_tmp592_) {
+			ValaBlock* _tmp593_;
+			ValaBlock* _tmp594_;
+			gint _tmp595_ = 0;
 			gint block_id;
-			gint _tmp598_;
-			gchar* _tmp599_ = NULL;
-			gchar* _tmp600_;
-			ValaCCodeIdentifier* _tmp601_;
-			_tmp595_ = vala_ccode_base_module_get_current_closure_block ((ValaCCodeBaseModule*) self);
-			_tmp596_ = _tmp595_;
-			_tmp597_ = vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp596_);
-			block_id = _tmp597_;
-			_tmp598_ = block_id;
-			_tmp599_ = g_strdup_printf ("block%d_data_unref", _tmp598_);
-			_tmp600_ = _tmp599_;
-			_tmp601_ = vala_ccode_identifier_new (_tmp600_);
+			gint _tmp596_;
+			gchar* _tmp597_ = NULL;
+			gchar* _tmp598_;
+			ValaCCodeIdentifier* _tmp599_;
+			_tmp593_ = vala_ccode_base_module_get_current_closure_block ((ValaCCodeBaseModule*) self);
+			_tmp594_ = _tmp593_;
+			_tmp595_ = vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp594_);
+			block_id = _tmp595_;
+			_tmp596_ = block_id;
+			_tmp597_ = g_strdup_printf ("block%d_data_unref", _tmp596_);
+			_tmp598_ = _tmp597_;
+			_tmp599_ = vala_ccode_identifier_new (_tmp598_);
 			_vala_ccode_node_unref0 (destroy_notify);
-			destroy_notify = (ValaCCodeExpression*) _tmp601_;
-			_g_free0 (_tmp600_);
+			destroy_notify = (ValaCCodeExpression*) _tmp599_;
+			_g_free0 (_tmp598_);
 		} else {
+			gboolean _tmp600_ = FALSE;
+			gboolean _tmp601_ = FALSE;
 			gboolean _tmp602_ = FALSE;
-			gboolean _tmp603_ = FALSE;
-			gboolean _tmp604_ = FALSE;
-			ValaDataType* _tmp605_ = NULL;
-			ValaDataType* _tmp606_;
-			gboolean _tmp607_;
-			gboolean _tmp611_;
-			gboolean _tmp615_;
-			gboolean _tmp624_;
-			_tmp605_ = vala_ccode_base_module_get_this_type ((ValaCCodeBaseModule*) self);
-			_tmp606_ = _tmp605_;
-			_tmp607_ = _tmp606_ != NULL;
-			_vala_code_node_unref0 (_tmp606_);
-			if (_tmp607_) {
-				ValaMethod* _tmp608_;
-				ValaMemberBinding _tmp609_;
-				ValaMemberBinding _tmp610_;
-				_tmp608_ = m;
-				_tmp609_ = vala_method_get_binding (_tmp608_);
-				_tmp610_ = _tmp609_;
-				_tmp604_ = _tmp610_ != VALA_MEMBER_BINDING_STATIC;
+			ValaDataType* _tmp603_ = NULL;
+			ValaDataType* _tmp604_;
+			gboolean _tmp605_;
+			gboolean _tmp609_;
+			gboolean _tmp613_;
+			gboolean _tmp622_;
+			_tmp603_ = vala_ccode_base_module_get_this_type ((ValaCCodeBaseModule*) self);
+			_tmp604_ = _tmp603_;
+			_tmp605_ = _tmp604_ != NULL;
+			_vala_code_node_unref0 (_tmp604_);
+			if (_tmp605_) {
+				ValaMethod* _tmp606_;
+				ValaMemberBinding _tmp607_;
+				ValaMemberBinding _tmp608_;
+				_tmp606_ = m;
+				_tmp607_ = vala_method_get_binding (_tmp606_);
+				_tmp608_ = _tmp607_;
+				_tmp602_ = _tmp608_ != VALA_MEMBER_BINDING_STATIC;
 			} else {
-				_tmp604_ = FALSE;
+				_tmp602_ = FALSE;
 			}
-			_tmp611_ = _tmp604_;
-			if (_tmp611_) {
-				ValaMethod* _tmp612_;
-				gboolean _tmp613_;
-				gboolean _tmp614_;
-				_tmp612_ = m;
-				_tmp613_ = vala_method_get_is_async_callback (_tmp612_);
-				_tmp614_ = _tmp613_;
-				_tmp603_ = !_tmp614_;
+			_tmp609_ = _tmp602_;
+			if (_tmp609_) {
+				ValaMethod* _tmp610_;
+				gboolean _tmp611_;
+				gboolean _tmp612_;
+				_tmp610_ = m;
+				_tmp611_ = vala_method_get_is_async_callback (_tmp610_);
+				_tmp612_ = _tmp611_;
+				_tmp601_ = !_tmp612_;
 			} else {
-				_tmp603_ = FALSE;
+				_tmp601_ = FALSE;
 			}
-			_tmp615_ = _tmp603_;
-			if (_tmp615_) {
-				ValaMethod* _tmp616_;
-				ValaParameter* _tmp617_;
-				ValaParameter* _tmp618_;
-				ValaDataType* _tmp619_;
-				ValaDataType* _tmp620_;
-				ValaTypeSymbol* _tmp621_;
-				ValaTypeSymbol* _tmp622_;
-				gboolean _tmp623_ = FALSE;
-				_tmp616_ = m;
-				_tmp617_ = vala_method_get_this_parameter (_tmp616_);
+			_tmp613_ = _tmp601_;
+			if (_tmp613_) {
+				ValaMethod* _tmp614_;
+				ValaParameter* _tmp615_;
+				ValaParameter* _tmp616_;
+				ValaDataType* _tmp617_;
+				ValaDataType* _tmp618_;
+				ValaTypeSymbol* _tmp619_;
+				ValaTypeSymbol* _tmp620_;
+				gboolean _tmp621_ = FALSE;
+				_tmp614_ = m;
+				_tmp615_ = vala_method_get_this_parameter (_tmp614_);
+				_tmp616_ = _tmp615_;
+				_tmp617_ = vala_variable_get_variable_type ((ValaVariable*) _tmp616_);
 				_tmp618_ = _tmp617_;
-				_tmp619_ = vala_variable_get_variable_type ((ValaVariable*) _tmp618_);
+				_tmp619_ = vala_data_type_get_data_type (_tmp618_);
 				_tmp620_ = _tmp619_;
-				_tmp621_ = vala_data_type_get_data_type (_tmp620_);
-				_tmp622_ = _tmp621_;
-				_tmp623_ = vala_ccode_base_module_is_reference_counting (_tmp622_);
-				_tmp602_ = _tmp623_;
+				_tmp621_ = vala_ccode_base_module_is_reference_counting (_tmp620_);
+				_tmp600_ = _tmp621_;
 			} else {
-				_tmp602_ = FALSE;
+				_tmp600_ = FALSE;
 			}
-			_tmp624_ = _tmp602_;
-			if (_tmp624_) {
-				ValaMethod* _tmp625_;
-				ValaParameter* _tmp626_;
-				ValaParameter* _tmp627_;
-				ValaDataType* _tmp628_;
-				ValaDataType* _tmp629_;
-				ValaCCodeExpression* _tmp630_ = NULL;
-				_tmp625_ = m;
-				_tmp626_ = vala_method_get_this_parameter (_tmp625_);
+			_tmp622_ = _tmp600_;
+			if (_tmp622_) {
+				ValaMethod* _tmp623_;
+				ValaParameter* _tmp624_;
+				ValaParameter* _tmp625_;
+				ValaDataType* _tmp626_;
+				ValaDataType* _tmp627_;
+				ValaCCodeExpression* _tmp628_ = NULL;
+				_tmp623_ = m;
+				_tmp624_ = vala_method_get_this_parameter (_tmp623_);
+				_tmp625_ = _tmp624_;
+				_tmp626_ = vala_variable_get_variable_type ((ValaVariable*) _tmp625_);
 				_tmp627_ = _tmp626_;
-				_tmp628_ = vala_variable_get_variable_type ((ValaVariable*) _tmp627_);
-				_tmp629_ = _tmp628_;
-				_tmp630_ = vala_ccode_base_module_get_destroy_func_expression ((ValaCCodeBaseModule*) self, _tmp629_, FALSE);
+				_tmp628_ = vala_ccode_base_module_get_destroy_func_expression ((ValaCCodeBaseModule*) self, _tmp627_, FALSE);
 				_vala_ccode_node_unref0 (destroy_notify);
-				destroy_notify = _tmp630_;
+				destroy_notify = _tmp628_;
 			}
 		}
-		_tmp631_ = destroy_notify;
-		if (_tmp631_ != NULL) {
-			ValaCCodeExpression* _tmp632_;
-			ValaCCodeFunctionCall* _tmp633_;
+		_tmp629_ = destroy_notify;
+		if (_tmp629_ != NULL) {
+			ValaCCodeExpression* _tmp630_;
+			ValaCCodeFunctionCall* _tmp631_;
 			ValaCCodeFunctionCall* unref_call;
-			ValaCCodeFunctionCall* _tmp634_;
-			ValaCCodeIdentifier* _tmp635_;
-			ValaCCodeIdentifier* _tmp636_;
-			ValaCCodeFunction* _tmp637_;
-			ValaCCodeFunction* _tmp638_;
-			ValaCCodeFunctionCall* _tmp639_;
-			_tmp632_ = destroy_notify;
-			_tmp633_ = vala_ccode_function_call_new (_tmp632_);
-			unref_call = _tmp633_;
-			_tmp634_ = unref_call;
-			_tmp635_ = vala_ccode_identifier_new ("self");
+			ValaCCodeFunctionCall* _tmp632_;
+			ValaCCodeIdentifier* _tmp633_;
+			ValaCCodeIdentifier* _tmp634_;
+			ValaCCodeFunction* _tmp635_;
+			ValaCCodeFunction* _tmp636_;
+			ValaCCodeFunctionCall* _tmp637_;
+			_tmp630_ = destroy_notify;
+			_tmp631_ = vala_ccode_function_call_new (_tmp630_);
+			unref_call = _tmp631_;
+			_tmp632_ = unref_call;
+			_tmp633_ = vala_ccode_identifier_new ("self");
+			_tmp634_ = _tmp633_;
+			vala_ccode_function_call_add_argument (_tmp632_, (ValaCCodeExpression*) _tmp634_);
+			_vala_ccode_node_unref0 (_tmp634_);
+			_tmp635_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
 			_tmp636_ = _tmp635_;
-			vala_ccode_function_call_add_argument (_tmp634_, (ValaCCodeExpression*) _tmp636_);
-			_vala_ccode_node_unref0 (_tmp636_);
-			_tmp637_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp638_ = _tmp637_;
-			_tmp639_ = unref_call;
-			vala_ccode_function_add_expression (_tmp638_, (ValaCCodeExpression*) _tmp639_);
+			_tmp637_ = unref_call;
+			vala_ccode_function_add_expression (_tmp636_, (ValaCCodeExpression*) _tmp637_);
 			_vala_ccode_node_unref0 (unref_call);
 		}
 		_vala_ccode_node_unref0 (destroy_notify);
 	}
-	_tmp641_ = m;
-	_tmp642_ = vala_method_get_return_type (_tmp641_);
-	_tmp643_ = _tmp642_;
-	if (VALA_IS_VOID_TYPE (_tmp643_)) {
-		_tmp640_ = TRUE;
+	_tmp639_ = m;
+	_tmp640_ = vala_method_get_return_type (_tmp639_);
+	_tmp641_ = _tmp640_;
+	if (VALA_IS_VOID_TYPE (_tmp641_)) {
+		_tmp638_ = TRUE;
 	} else {
-		ValaMethod* _tmp644_;
-		ValaDataType* _tmp645_;
-		ValaDataType* _tmp646_;
-		gboolean _tmp647_ = FALSE;
-		_tmp644_ = m;
-		_tmp645_ = vala_method_get_return_type (_tmp644_);
-		_tmp646_ = _tmp645_;
-		_tmp647_ = vala_data_type_is_real_non_null_struct_type (_tmp646_);
-		_tmp640_ = _tmp647_;
+		ValaMethod* _tmp642_;
+		ValaDataType* _tmp643_;
+		ValaDataType* _tmp644_;
+		gboolean _tmp645_ = FALSE;
+		_tmp642_ = m;
+		_tmp643_ = vala_method_get_return_type (_tmp642_);
+		_tmp644_ = _tmp643_;
+		_tmp645_ = vala_data_type_is_real_non_null_struct_type (_tmp644_);
+		_tmp638_ = _tmp645_;
 	}
-	_tmp648_ = _tmp640_;
-	if (!_tmp648_) {
-		ValaCCodeFunction* _tmp649_;
-		ValaCCodeFunction* _tmp650_;
-		ValaCCodeIdentifier* _tmp651_;
-		ValaCCodeIdentifier* _tmp652_;
-		_tmp649_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+	_tmp646_ = _tmp638_;
+	if (!_tmp646_) {
+		ValaCCodeFunction* _tmp647_;
+		ValaCCodeFunction* _tmp648_;
+		ValaCCodeIdentifier* _tmp649_;
+		ValaCCodeIdentifier* _tmp650_;
+		_tmp647_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp648_ = _tmp647_;
+		_tmp649_ = vala_ccode_identifier_new ("result");
 		_tmp650_ = _tmp649_;
-		_tmp651_ = vala_ccode_identifier_new ("result");
-		_tmp652_ = _tmp651_;
-		vala_ccode_function_add_return (_tmp650_, (ValaCCodeExpression*) _tmp652_);
-		_vala_ccode_node_unref0 (_tmp652_);
+		vala_ccode_function_add_return (_tmp648_, (ValaCCodeExpression*) _tmp650_);
+		_vala_ccode_node_unref0 (_tmp650_);
 	}
 	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
+	_tmp651_ = ((ValaCCodeBaseModule*) self)->cfile;
+	_tmp652_ = function;
+	vala_ccode_file_add_function_declaration (_tmp651_, _tmp652_);
 	_tmp653_ = ((ValaCCodeBaseModule*) self)->cfile;
 	_tmp654_ = function;
-	vala_ccode_file_add_function_declaration (_tmp653_, _tmp654_);
-	_tmp655_ = ((ValaCCodeBaseModule*) self)->cfile;
-	_tmp656_ = function;
-	vala_ccode_file_add_function (_tmp655_, _tmp656_);
+	vala_ccode_file_add_function (_tmp653_, _tmp654_);
 	result = wrapper_name;
 	_vala_ccode_node_unref0 (ccall);
 	_vala_map_unref0 (carg_map);
@@ -3457,127 +3454,118 @@ static ValaCCodeParameter* vala_ccode_delegate_module_real_generate_parameter (V
 		_tmp82_ = _tmp81_;
 		if (_tmp82_) {
 			ValaParameter* _tmp83_;
-			const gchar* _tmp84_;
-			const gchar* _tmp85_;
-			gchar* _tmp86_ = NULL;
-			gchar* _tmp87_;
-			gchar* _tmp88_ = NULL;
-			gchar* _tmp89_;
-			const gchar* _tmp90_;
-			ValaCCodeParameter* _tmp91_;
-			ValaCCodeParameter* _tmp92_;
+			gchar* _tmp84_ = NULL;
+			gchar* _tmp85_;
+			const gchar* _tmp86_;
+			ValaCCodeParameter* _tmp87_;
+			ValaCCodeParameter* _tmp88_;
 			ValaCCodeParameter* cparam;
-			ValaMap* _tmp93_;
-			ValaParameter* _tmp94_;
-			gdouble _tmp95_ = 0.0;
-			gint _tmp96_ = 0;
-			ValaCCodeParameter* _tmp97_;
-			ValaMap* _tmp98_;
-			ValaDelegateType* _tmp108_;
-			gboolean _tmp109_;
-			gboolean _tmp110_;
+			ValaMap* _tmp89_;
+			ValaParameter* _tmp90_;
+			gdouble _tmp91_ = 0.0;
+			gint _tmp92_ = 0;
+			ValaCCodeParameter* _tmp93_;
+			ValaMap* _tmp94_;
+			ValaDelegateType* _tmp104_;
+			gboolean _tmp105_;
+			gboolean _tmp106_;
 			_tmp83_ = param;
-			_tmp84_ = vala_symbol_get_name ((ValaSymbol*) _tmp83_);
+			_tmp84_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp83_);
 			_tmp85_ = _tmp84_;
-			_tmp86_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp85_);
-			_tmp87_ = _tmp86_;
-			_tmp88_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp87_);
-			_tmp89_ = _tmp88_;
-			_tmp90_ = target_ctypename;
-			_tmp91_ = vala_ccode_parameter_new (_tmp89_, _tmp90_);
-			_tmp92_ = _tmp91_;
-			_g_free0 (_tmp89_);
-			_g_free0 (_tmp87_);
-			cparam = _tmp92_;
-			_tmp93_ = cparam_map;
-			_tmp94_ = param;
-			_tmp95_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp94_);
-			_tmp96_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp95_, FALSE);
-			_tmp97_ = cparam;
-			vala_map_set (_tmp93_, GINT_TO_POINTER (_tmp96_), _tmp97_);
-			_tmp98_ = carg_map;
-			if (_tmp98_ != NULL) {
-				ValaMap* _tmp99_;
-				ValaParameter* _tmp100_;
-				gdouble _tmp101_ = 0.0;
-				gint _tmp102_ = 0;
-				ValaCCodeParameter* _tmp103_;
-				const gchar* _tmp104_;
-				const gchar* _tmp105_;
-				ValaCCodeExpression* _tmp106_ = NULL;
-				ValaCCodeExpression* _tmp107_;
-				_tmp99_ = carg_map;
-				_tmp100_ = param;
-				_tmp101_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp100_);
-				_tmp102_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp101_, FALSE);
-				_tmp103_ = cparam;
-				_tmp104_ = vala_ccode_parameter_get_name (_tmp103_);
-				_tmp105_ = _tmp104_;
-				_tmp106_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp105_);
-				_tmp107_ = _tmp106_;
-				vala_map_set (_tmp99_, GINT_TO_POINTER (_tmp102_), _tmp107_);
-				_vala_ccode_node_unref0 (_tmp107_);
+			_tmp86_ = target_ctypename;
+			_tmp87_ = vala_ccode_parameter_new (_tmp85_, _tmp86_);
+			_tmp88_ = _tmp87_;
+			_g_free0 (_tmp85_);
+			cparam = _tmp88_;
+			_tmp89_ = cparam_map;
+			_tmp90_ = param;
+			_tmp91_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp90_);
+			_tmp92_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp91_, FALSE);
+			_tmp93_ = cparam;
+			vala_map_set (_tmp89_, GINT_TO_POINTER (_tmp92_), _tmp93_);
+			_tmp94_ = carg_map;
+			if (_tmp94_ != NULL) {
+				ValaMap* _tmp95_;
+				ValaParameter* _tmp96_;
+				gdouble _tmp97_ = 0.0;
+				gint _tmp98_ = 0;
+				ValaCCodeParameter* _tmp99_;
+				const gchar* _tmp100_;
+				const gchar* _tmp101_;
+				ValaCCodeExpression* _tmp102_ = NULL;
+				ValaCCodeExpression* _tmp103_;
+				_tmp95_ = carg_map;
+				_tmp96_ = param;
+				_tmp97_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp96_);
+				_tmp98_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp97_, FALSE);
+				_tmp99_ = cparam;
+				_tmp100_ = vala_ccode_parameter_get_name (_tmp99_);
+				_tmp101_ = _tmp100_;
+				_tmp102_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp101_);
+				_tmp103_ = _tmp102_;
+				vala_map_set (_tmp95_, GINT_TO_POINTER (_tmp98_), _tmp103_);
+				_vala_ccode_node_unref0 (_tmp103_);
 			}
-			_tmp108_ = deleg_type;
-			_tmp109_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp108_);
-			_tmp110_ = _tmp109_;
-			if (_tmp110_) {
-				ValaParameter* _tmp111_;
-				const gchar* _tmp112_;
-				const gchar* _tmp113_;
-				gchar* _tmp114_ = NULL;
-				gchar* _tmp115_;
-				gchar* _tmp116_ = NULL;
-				gchar* _tmp117_;
-				const gchar* _tmp118_;
-				ValaCCodeParameter* _tmp119_;
-				ValaMap* _tmp120_;
-				ValaParameter* _tmp121_;
-				gdouble _tmp122_ = 0.0;
-				gint _tmp123_ = 0;
-				ValaCCodeParameter* _tmp124_;
-				ValaMap* _tmp125_;
-				_tmp111_ = param;
-				_tmp112_ = vala_symbol_get_name ((ValaSymbol*) _tmp111_);
+			_tmp104_ = deleg_type;
+			_tmp105_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp104_);
+			_tmp106_ = _tmp105_;
+			if (_tmp106_) {
+				ValaParameter* _tmp107_;
+				const gchar* _tmp108_;
+				const gchar* _tmp109_;
+				gchar* _tmp110_ = NULL;
+				gchar* _tmp111_;
+				gchar* _tmp112_ = NULL;
+				gchar* _tmp113_;
+				const gchar* _tmp114_;
+				ValaCCodeParameter* _tmp115_;
+				ValaMap* _tmp116_;
+				ValaParameter* _tmp117_;
+				gdouble _tmp118_ = 0.0;
+				gint _tmp119_ = 0;
+				ValaCCodeParameter* _tmp120_;
+				ValaMap* _tmp121_;
+				_tmp107_ = param;
+				_tmp108_ = vala_symbol_get_name ((ValaSymbol*) _tmp107_);
+				_tmp109_ = _tmp108_;
+				_tmp110_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp109_);
+				_tmp111_ = _tmp110_;
+				_tmp112_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp111_);
 				_tmp113_ = _tmp112_;
-				_tmp114_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp113_);
-				_tmp115_ = _tmp114_;
-				_tmp116_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp115_);
-				_tmp117_ = _tmp116_;
-				_tmp118_ = target_destroy_notify_ctypename;
-				_tmp119_ = vala_ccode_parameter_new (_tmp117_, _tmp118_);
+				_tmp114_ = target_destroy_notify_ctypename;
+				_tmp115_ = vala_ccode_parameter_new (_tmp113_, _tmp114_);
 				_vala_ccode_node_unref0 (cparam);
-				cparam = _tmp119_;
-				_g_free0 (_tmp117_);
-				_g_free0 (_tmp115_);
-				_tmp120_ = cparam_map;
-				_tmp121_ = param;
-				_tmp122_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp121_);
-				_tmp123_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp122_ + 0.01, FALSE);
-				_tmp124_ = cparam;
-				vala_map_set (_tmp120_, GINT_TO_POINTER (_tmp123_), _tmp124_);
-				_tmp125_ = carg_map;
-				if (_tmp125_ != NULL) {
-					ValaMap* _tmp126_;
-					ValaParameter* _tmp127_;
-					gdouble _tmp128_ = 0.0;
-					gint _tmp129_ = 0;
-					ValaCCodeParameter* _tmp130_;
-					const gchar* _tmp131_;
-					const gchar* _tmp132_;
-					ValaCCodeExpression* _tmp133_ = NULL;
-					ValaCCodeExpression* _tmp134_;
-					_tmp126_ = carg_map;
-					_tmp127_ = param;
-					_tmp128_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp127_);
-					_tmp129_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp128_ + 0.01, FALSE);
-					_tmp130_ = cparam;
-					_tmp131_ = vala_ccode_parameter_get_name (_tmp130_);
-					_tmp132_ = _tmp131_;
-					_tmp133_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp132_);
-					_tmp134_ = _tmp133_;
-					vala_map_set (_tmp126_, GINT_TO_POINTER (_tmp129_), _tmp134_);
-					_vala_ccode_node_unref0 (_tmp134_);
+				cparam = _tmp115_;
+				_g_free0 (_tmp113_);
+				_g_free0 (_tmp111_);
+				_tmp116_ = cparam_map;
+				_tmp117_ = param;
+				_tmp118_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp117_);
+				_tmp119_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp118_ + 0.01, FALSE);
+				_tmp120_ = cparam;
+				vala_map_set (_tmp116_, GINT_TO_POINTER (_tmp119_), _tmp120_);
+				_tmp121_ = carg_map;
+				if (_tmp121_ != NULL) {
+					ValaMap* _tmp122_;
+					ValaParameter* _tmp123_;
+					gdouble _tmp124_ = 0.0;
+					gint _tmp125_ = 0;
+					ValaCCodeParameter* _tmp126_;
+					const gchar* _tmp127_;
+					const gchar* _tmp128_;
+					ValaCCodeExpression* _tmp129_ = NULL;
+					ValaCCodeExpression* _tmp130_;
+					_tmp122_ = carg_map;
+					_tmp123_ = param;
+					_tmp124_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp123_);
+					_tmp125_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp124_ + 0.01, FALSE);
+					_tmp126_ = cparam;
+					_tmp127_ = vala_ccode_parameter_get_name (_tmp126_);
+					_tmp128_ = _tmp127_;
+					_tmp129_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp128_);
+					_tmp130_ = _tmp129_;
+					vala_map_set (_tmp122_, GINT_TO_POINTER (_tmp125_), _tmp130_);
+					_vala_ccode_node_unref0 (_tmp130_);
 				}
 			}
 			_vala_ccode_node_unref0 (cparam);
@@ -3585,71 +3573,62 @@ static ValaCCodeParameter* vala_ccode_delegate_module_real_generate_parameter (V
 		_vala_code_node_unref0 (d);
 		_vala_code_node_unref0 (deleg_type);
 	} else {
-		ValaParameter* _tmp135_;
-		ValaDataType* _tmp136_;
-		ValaDataType* _tmp137_;
-		_tmp135_ = param;
-		_tmp136_ = vala_variable_get_variable_type ((ValaVariable*) _tmp135_);
-		_tmp137_ = _tmp136_;
-		if (VALA_IS_METHOD_TYPE (_tmp137_)) {
-			ValaParameter* _tmp138_;
-			const gchar* _tmp139_;
-			const gchar* _tmp140_;
-			gchar* _tmp141_ = NULL;
-			gchar* _tmp142_;
-			gchar* _tmp143_ = NULL;
-			gchar* _tmp144_;
-			const gchar* _tmp145_;
-			ValaCCodeParameter* _tmp146_;
-			ValaCCodeParameter* _tmp147_;
+		ValaParameter* _tmp131_;
+		ValaDataType* _tmp132_;
+		ValaDataType* _tmp133_;
+		_tmp131_ = param;
+		_tmp132_ = vala_variable_get_variable_type ((ValaVariable*) _tmp131_);
+		_tmp133_ = _tmp132_;
+		if (VALA_IS_METHOD_TYPE (_tmp133_)) {
+			ValaParameter* _tmp134_;
+			gchar* _tmp135_ = NULL;
+			gchar* _tmp136_;
+			const gchar* _tmp137_;
+			ValaCCodeParameter* _tmp138_;
+			ValaCCodeParameter* _tmp139_;
 			ValaCCodeParameter* cparam;
-			ValaMap* _tmp148_;
-			ValaParameter* _tmp149_;
-			gdouble _tmp150_ = 0.0;
-			gint _tmp151_ = 0;
-			ValaCCodeParameter* _tmp152_;
-			ValaMap* _tmp153_;
-			_tmp138_ = param;
-			_tmp139_ = vala_symbol_get_name ((ValaSymbol*) _tmp138_);
-			_tmp140_ = _tmp139_;
-			_tmp141_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp140_);
-			_tmp142_ = _tmp141_;
-			_tmp143_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp142_);
-			_tmp144_ = _tmp143_;
-			_tmp145_ = target_ctypename;
-			_tmp146_ = vala_ccode_parameter_new (_tmp144_, _tmp145_);
-			_tmp147_ = _tmp146_;
-			_g_free0 (_tmp144_);
-			_g_free0 (_tmp142_);
-			cparam = _tmp147_;
-			_tmp148_ = cparam_map;
-			_tmp149_ = param;
-			_tmp150_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp149_);
-			_tmp151_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp150_, FALSE);
-			_tmp152_ = cparam;
-			vala_map_set (_tmp148_, GINT_TO_POINTER (_tmp151_), _tmp152_);
-			_tmp153_ = carg_map;
-			if (_tmp153_ != NULL) {
-				ValaMap* _tmp154_;
-				ValaParameter* _tmp155_;
-				gdouble _tmp156_ = 0.0;
-				gint _tmp157_ = 0;
-				ValaCCodeParameter* _tmp158_;
-				const gchar* _tmp159_;
-				const gchar* _tmp160_;
-				ValaCCodeExpression* _tmp161_ = NULL;
-				ValaCCodeExpression* _tmp162_;
-				_tmp154_ = carg_map;
-				_tmp155_ = param;
-				_tmp156_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp155_);
-				_tmp157_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp156_, FALSE);
-				_tmp158_ = cparam;
-				_tmp159_ = vala_ccode_parameter_get_name (_tmp158_);
-				_tmp160_ = _tmp159_;
-				_tmp161_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp160_);
-				_tmp162_ = _tmp161_;
-				vala_map_set (_tmp154_, GINT_TO_POINTER (_tmp157_), _tmp162_);
-				_vala_ccode_node_unref0 (_tmp162_);
+			ValaMap* _tmp140_;
+			ValaParameter* _tmp141_;
+			gdouble _tmp142_ = 0.0;
+			gint _tmp143_ = 0;
+			ValaCCodeParameter* _tmp144_;
+			ValaMap* _tmp145_;
+			_tmp134_ = param;
+			_tmp135_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp134_);
+			_tmp136_ = _tmp135_;
+			_tmp137_ = target_ctypename;
+			_tmp138_ = vala_ccode_parameter_new (_tmp136_, _tmp137_);
+			_tmp139_ = _tmp138_;
+			_g_free0 (_tmp136_);
+			cparam = _tmp139_;
+			_tmp140_ = cparam_map;
+			_tmp141_ = param;
+			_tmp142_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp141_);
+			_tmp143_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp142_, FALSE);
+			_tmp144_ = cparam;
+			vala_map_set (_tmp140_, GINT_TO_POINTER (_tmp143_), _tmp144_);
+			_tmp145_ = carg_map;
+			if (_tmp145_ != NULL) {
+				ValaMap* _tmp146_;
+				ValaParameter* _tmp147_;
+				gdouble _tmp148_ = 0.0;
+				gint _tmp149_ = 0;
+				ValaCCodeParameter* _tmp150_;
+				const gchar* _tmp151_;
+				const gchar* _tmp152_;
+				ValaCCodeExpression* _tmp153_ = NULL;
+				ValaCCodeExpression* _tmp154_;
+				_tmp146_ = carg_map;
+				_tmp147_ = param;
+				_tmp148_ = vala_ccode_base_module_get_ccode_delegate_target_pos ((ValaCodeNode*) _tmp147_);
+				_tmp149_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, _tmp148_, FALSE);
+				_tmp150_ = cparam;
+				_tmp151_ = vala_ccode_parameter_get_name (_tmp150_);
+				_tmp152_ = _tmp151_;
+				_tmp153_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp152_);
+				_tmp154_ = _tmp153_;
+				vala_map_set (_tmp146_, GINT_TO_POINTER (_tmp149_), _tmp154_);
+				_vala_ccode_node_unref0 (_tmp154_);
 			}
 			_vala_ccode_node_unref0 (cparam);
 		}
diff --git a/codegen/valaccodedelegatemodule.vala b/codegen/valaccodedelegatemodule.vala
index 0c2242d..2391028 100644
--- a/codegen/valaccodedelegatemodule.vala
+++ b/codegen/valaccodedelegatemodule.vala
@@ -339,7 +339,7 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
 				var deleg_type = (DelegateType) param.variable_type;
 
 				if (deleg_type.delegate_symbol.has_target) {
-					var ctarget = new CCodeIdentifier (get_delegate_target_cname (d_params.get (i).name));
+					var ctarget = new CCodeIdentifier (get_ccode_delegate_target_name (d_params.get (i)));
 					carg_map.set (get_param_pos (get_ccode_delegate_target_pos (param)), ctarget);
 					if (deleg_type.value_owned) {
 						var ctarget_destroy_notify = new CCodeIdentifier (get_delegate_target_destroy_notify_cname (d_params.get (i).name));
@@ -473,7 +473,7 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
 			generate_delegate_declaration (d, decl_space);
 
 			if (d.has_target) {
-				var cparam = new CCodeParameter (get_delegate_target_cname (get_variable_cname (param.name)), target_ctypename);
+				var cparam = new CCodeParameter (get_ccode_delegate_target_name (param), target_ctypename);
 				cparam_map.set (get_param_pos (get_ccode_delegate_target_pos (param)), cparam);
 				if (carg_map != null) {
 					carg_map.set (get_param_pos (get_ccode_delegate_target_pos (param)), get_variable_cexpression (cparam.name));
@@ -487,7 +487,7 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
 				}
 			}
 		} else if (param.variable_type is MethodType) {
-			var cparam = new CCodeParameter (get_delegate_target_cname (get_variable_cname (param.name)), target_ctypename);
+			var cparam = new CCodeParameter (get_ccode_delegate_target_name (param), target_ctypename);
 			cparam_map.set (get_param_pos (get_ccode_delegate_target_pos (param)), cparam);
 			if (carg_map != null) {
 				carg_map.set (get_param_pos (get_ccode_delegate_target_pos (param)), get_variable_cexpression (cparam.name));
diff --git a/codegen/valaccodememberaccessmodule.c b/codegen/valaccodememberaccessmodule.c
index 2e232d0..a56413a 100644
--- a/codegen/valaccodememberaccessmodule.c
+++ b/codegen/valaccodememberaccessmodule.c
@@ -384,6 +384,7 @@ gchar* vala_ccode_base_module_get_ccode_array_length_expr (ValaCodeNode* node);
 gchar* vala_ccode_base_module_get_ccode_type (ValaCodeNode* node);
 gchar* vala_ccode_base_module_get_variable_cname (ValaCCodeBaseModule* self, const gchar* name);
 gchar* vala_ccode_base_module_get_parameter_array_length_cname (ValaCCodeBaseModule* self, ValaParameter* param, gint dim);
+gchar* vala_ccode_base_module_get_ccode_delegate_target_name (ValaVariable* variable);
 ValaPropertyAccessor* vala_ccode_base_module_get_current_property_accessor (ValaCCodeBaseModule* self);
 static ValaTargetValue* vala_ccode_member_access_module_real_get_field_cvalue (ValaCCodeBaseModule* base, ValaField* field, ValaTargetValue* instance);
 ValaDataType* vala_ccode_base_module_get_data_type_for_symbol (ValaTypeSymbol* sym);
@@ -758,8 +759,8 @@ static void vala_ccode_member_access_module_real_visit_member_access (ValaCodeVi
 				ValaMemberAccess* _tmp130_;
 				ValaCCodeFunctionCall* _tmp131_;
 				ValaMethod* _tmp132_;
-				const gchar* _tmp133_;
-				const gchar* _tmp134_;
+				gchar* _tmp133_ = NULL;
+				gchar* _tmp134_;
 				ValaCCodeMemberAccess* _tmp135_;
 				ValaCCodeMemberAccess* _tmp136_;
 				_tmp113_ = m;
@@ -788,12 +789,13 @@ static void vala_ccode_member_access_module_real_visit_member_access (ValaCodeVi
 				_tmp130_ = expr;
 				_tmp131_ = vclass;
 				_tmp132_ = m;
-				_tmp133_ = vala_symbol_get_name ((ValaSymbol*) _tmp132_);
+				_tmp133_ = vala_ccode_base_module_get_ccode_vfunc_name (_tmp132_);
 				_tmp134_ = _tmp133_;
 				_tmp135_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp131_, _tmp134_);
 				_tmp136_ = _tmp135_;
 				vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) _tmp130_, (ValaCCodeExpression*) _tmp136_);
 				_vala_ccode_node_unref0 (_tmp136_);
+				_g_free0 (_tmp134_);
 				_vala_ccode_node_unref0 (vclass);
 				_vala_code_node_unref0 (base_class);
 			} else {
@@ -1882,487 +1884,466 @@ static void vala_ccode_member_access_module_real_visit_member_access (ValaCodeVi
 								gboolean _tmp554_ = FALSE;
 								gboolean _tmp555_ = FALSE;
 								gboolean _tmp556_ = FALSE;
-								ValaProperty* _tmp557_;
-								ValaMemberBinding _tmp558_;
+								gboolean _tmp557_ = FALSE;
+								ValaProperty* _tmp558_;
 								ValaMemberBinding _tmp559_;
-								gboolean _tmp565_;
-								gboolean _tmp571_;
+								ValaMemberBinding _tmp560_;
+								gboolean _tmp566_;
 								gboolean _tmp574_;
-								gboolean _tmp578_;
-								gboolean _tmp582_;
+								gboolean _tmp580_;
+								gboolean _tmp583_;
+								gboolean _tmp587_;
 								gboolean _tmp591_;
-								_tmp557_ = prop;
-								_tmp558_ = vala_property_get_binding (_tmp557_);
-								_tmp559_ = _tmp558_;
-								if (_tmp559_ == VALA_MEMBER_BINDING_INSTANCE) {
-									ValaProperty* _tmp560_;
-									ValaPropertyAccessor* _tmp561_;
+								gboolean _tmp600_;
+								_tmp558_ = prop;
+								_tmp559_ = vala_property_get_binding (_tmp558_);
+								_tmp560_ = _tmp559_;
+								if (_tmp560_ == VALA_MEMBER_BINDING_INSTANCE) {
+									ValaProperty* _tmp561_;
 									ValaPropertyAccessor* _tmp562_;
-									gboolean _tmp563_;
+									ValaPropertyAccessor* _tmp563_;
 									gboolean _tmp564_;
-									_tmp560_ = prop;
-									_tmp561_ = vala_property_get_get_accessor (_tmp560_);
-									_tmp562_ = _tmp561_;
-									_tmp563_ = vala_property_accessor_get_automatic_body (_tmp562_);
-									_tmp564_ = _tmp563_;
-									_tmp556_ = _tmp564_;
+									gboolean _tmp565_;
+									_tmp561_ = prop;
+									_tmp562_ = vala_property_get_get_accessor (_tmp561_);
+									_tmp563_ = _tmp562_;
+									_tmp564_ = vala_property_accessor_get_automatic_body (_tmp563_);
+									_tmp565_ = _tmp564_;
+									_tmp557_ = _tmp565_;
+								} else {
+									_tmp557_ = FALSE;
+								}
+								_tmp566_ = _tmp557_;
+								if (_tmp566_) {
+									ValaProperty* _tmp567_;
+									ValaPropertyAccessor* _tmp568_;
+									ValaPropertyAccessor* _tmp569_;
+									ValaDataType* _tmp570_;
+									ValaDataType* _tmp571_;
+									gboolean _tmp572_;
+									gboolean _tmp573_;
+									_tmp567_ = prop;
+									_tmp568_ = vala_property_get_get_accessor (_tmp567_);
+									_tmp569_ = _tmp568_;
+									_tmp570_ = vala_property_accessor_get_value_type (_tmp569_);
+									_tmp571_ = _tmp570_;
+									_tmp572_ = vala_data_type_get_value_owned (_tmp571_);
+									_tmp573_ = _tmp572_;
+									_tmp556_ = !_tmp573_;
 								} else {
 									_tmp556_ = FALSE;
 								}
-								_tmp565_ = _tmp556_;
-								if (_tmp565_) {
-									ValaTypeSymbol* _tmp566_;
-									ValaTypeSymbol* _tmp567_;
-									ValaProperty* _tmp568_;
-									ValaSymbol* _tmp569_;
-									ValaSymbol* _tmp570_;
-									_tmp566_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
-									_tmp567_ = _tmp566_;
-									_tmp568_ = prop;
-									_tmp569_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp568_);
-									_tmp570_ = _tmp569_;
-									_tmp555_ = VALA_SYMBOL (_tmp567_) == _tmp570_;
+								_tmp574_ = _tmp556_;
+								if (_tmp574_) {
+									ValaTypeSymbol* _tmp575_;
+									ValaTypeSymbol* _tmp576_;
+									ValaProperty* _tmp577_;
+									ValaSymbol* _tmp578_;
+									ValaSymbol* _tmp579_;
+									_tmp575_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
+									_tmp576_ = _tmp575_;
+									_tmp577_ = prop;
+									_tmp578_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp577_);
+									_tmp579_ = _tmp578_;
+									_tmp555_ = VALA_SYMBOL (_tmp576_) == _tmp579_;
 								} else {
 									_tmp555_ = FALSE;
 								}
-								_tmp571_ = _tmp555_;
-								if (_tmp571_) {
-									ValaTypeSymbol* _tmp572_;
-									ValaTypeSymbol* _tmp573_;
-									_tmp572_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
-									_tmp573_ = _tmp572_;
-									_tmp554_ = VALA_IS_CLASS (_tmp573_);
+								_tmp580_ = _tmp555_;
+								if (_tmp580_) {
+									ValaTypeSymbol* _tmp581_;
+									ValaTypeSymbol* _tmp582_;
+									_tmp581_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
+									_tmp582_ = _tmp581_;
+									_tmp554_ = VALA_IS_CLASS (_tmp582_);
 								} else {
 									_tmp554_ = FALSE;
 								}
-								_tmp574_ = _tmp554_;
-								if (_tmp574_) {
-									ValaProperty* _tmp575_;
-									ValaProperty* _tmp576_;
-									ValaProperty* _tmp577_;
-									_tmp575_ = prop;
-									_tmp576_ = vala_property_get_base_property (_tmp575_);
-									_tmp577_ = _tmp576_;
-									_tmp553_ = _tmp577_ == NULL;
+								_tmp583_ = _tmp554_;
+								if (_tmp583_) {
+									ValaProperty* _tmp584_;
+									ValaProperty* _tmp585_;
+									ValaProperty* _tmp586_;
+									_tmp584_ = prop;
+									_tmp585_ = vala_property_get_base_property (_tmp584_);
+									_tmp586_ = _tmp585_;
+									_tmp553_ = _tmp586_ == NULL;
 								} else {
 									_tmp553_ = FALSE;
 								}
-								_tmp578_ = _tmp553_;
-								if (_tmp578_) {
-									ValaProperty* _tmp579_;
-									ValaProperty* _tmp580_;
-									ValaProperty* _tmp581_;
-									_tmp579_ = prop;
-									_tmp580_ = vala_property_get_base_interface_property (_tmp579_);
-									_tmp581_ = _tmp580_;
-									_tmp552_ = _tmp581_ == NULL;
+								_tmp587_ = _tmp553_;
+								if (_tmp587_) {
+									ValaProperty* _tmp588_;
+									ValaProperty* _tmp589_;
+									ValaProperty* _tmp590_;
+									_tmp588_ = prop;
+									_tmp589_ = vala_property_get_base_interface_property (_tmp588_);
+									_tmp590_ = _tmp589_;
+									_tmp552_ = _tmp590_ == NULL;
 								} else {
 									_tmp552_ = FALSE;
 								}
-								_tmp582_ = _tmp552_;
-								if (_tmp582_) {
-									gboolean _tmp583_ = FALSE;
-									ValaProperty* _tmp584_;
-									ValaDataType* _tmp585_;
-									ValaDataType* _tmp586_;
-									gboolean _tmp590_;
-									_tmp584_ = prop;
-									_tmp585_ = vala_property_get_property_type (_tmp584_);
-									_tmp586_ = _tmp585_;
-									if (VALA_IS_ARRAY_TYPE (_tmp586_)) {
-										_tmp583_ = TRUE;
+								_tmp591_ = _tmp552_;
+								if (_tmp591_) {
+									gboolean _tmp592_ = FALSE;
+									ValaProperty* _tmp593_;
+									ValaDataType* _tmp594_;
+									ValaDataType* _tmp595_;
+									gboolean _tmp599_;
+									_tmp593_ = prop;
+									_tmp594_ = vala_property_get_property_type (_tmp593_);
+									_tmp595_ = _tmp594_;
+									if (VALA_IS_ARRAY_TYPE (_tmp595_)) {
+										_tmp592_ = TRUE;
 									} else {
-										ValaProperty* _tmp587_;
-										ValaDataType* _tmp588_;
-										ValaDataType* _tmp589_;
-										_tmp587_ = prop;
-										_tmp588_ = vala_property_get_property_type (_tmp587_);
-										_tmp589_ = _tmp588_;
-										_tmp583_ = VALA_IS_DELEGATE_TYPE (_tmp589_);
+										ValaProperty* _tmp596_;
+										ValaDataType* _tmp597_;
+										ValaDataType* _tmp598_;
+										_tmp596_ = prop;
+										_tmp597_ = vala_property_get_property_type (_tmp596_);
+										_tmp598_ = _tmp597_;
+										_tmp592_ = VALA_IS_DELEGATE_TYPE (_tmp598_);
 									}
-									_tmp590_ = _tmp583_;
-									_tmp551_ = !_tmp590_;
+									_tmp599_ = _tmp592_;
+									_tmp551_ = !_tmp599_;
 								} else {
 									_tmp551_ = FALSE;
 								}
-								_tmp591_ = _tmp551_;
-								if (_tmp591_) {
+								_tmp600_ = _tmp551_;
+								if (_tmp600_) {
 									ValaCCodeExpression* inst = NULL;
-									ValaCCodeExpression* _tmp592_;
-									ValaCCodeMemberAccess* _tmp593_;
-									ValaMemberAccess* _tmp594_;
-									ValaCCodeExpression* _tmp595_;
-									ValaProperty* _tmp596_;
-									ValaField* _tmp597_;
-									ValaField* _tmp598_;
-									gchar* _tmp599_ = NULL;
-									gchar* _tmp600_;
-									ValaCCodeMemberAccess* _tmp601_;
+									ValaCCodeExpression* _tmp601_;
 									ValaCCodeMemberAccess* _tmp602_;
-									_tmp592_ = pub_inst;
-									_tmp593_ = vala_ccode_member_access_new_pointer (_tmp592_, "priv");
+									ValaMemberAccess* _tmp603_;
+									ValaCCodeExpression* _tmp604_;
+									ValaProperty* _tmp605_;
+									ValaField* _tmp606_;
+									ValaField* _tmp607_;
+									gchar* _tmp608_ = NULL;
+									gchar* _tmp609_;
+									ValaCCodeMemberAccess* _tmp610_;
+									ValaCCodeMemberAccess* _tmp611_;
+									_tmp601_ = pub_inst;
+									_tmp602_ = vala_ccode_member_access_new_pointer (_tmp601_, "priv");
 									_vala_ccode_node_unref0 (inst);
-									inst = (ValaCCodeExpression*) _tmp593_;
-									_tmp594_ = expr;
-									_tmp595_ = inst;
-									_tmp596_ = prop;
-									_tmp597_ = vala_property_get_field (_tmp596_);
-									_tmp598_ = _tmp597_;
-									_tmp599_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp598_);
-									_tmp600_ = _tmp599_;
-									_tmp601_ = vala_ccode_member_access_new_pointer (_tmp595_, _tmp600_);
-									_tmp602_ = _tmp601_;
-									vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) _tmp594_, (ValaCCodeExpression*) _tmp602_);
-									_vala_ccode_node_unref0 (_tmp602_);
-									_g_free0 (_tmp600_);
+									inst = (ValaCCodeExpression*) _tmp602_;
+									_tmp603_ = expr;
+									_tmp604_ = inst;
+									_tmp605_ = prop;
+									_tmp606_ = vala_property_get_field (_tmp605_);
+									_tmp607_ = _tmp606_;
+									_tmp608_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp607_);
+									_tmp609_ = _tmp608_;
+									_tmp610_ = vala_ccode_member_access_new_pointer (_tmp604_, _tmp609_);
+									_tmp611_ = _tmp610_;
+									vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) _tmp603_, (ValaCCodeExpression*) _tmp611_);
+									_vala_ccode_node_unref0 (_tmp611_);
+									_g_free0 (_tmp609_);
 									_vala_ccode_node_unref0 (inst);
 								} else {
-									ValaProperty* _tmp603_;
-									gboolean _tmp604_ = FALSE;
-									_tmp603_ = prop;
-									_tmp604_ = vala_ccode_base_module_get_ccode_no_accessor_method (_tmp603_);
-									if (!_tmp604_) {
-										ValaProperty* _tmp605_;
-										ValaProperty* _tmp606_;
-										ValaProperty* base_property;
-										ValaProperty* _tmp607_;
-										ValaProperty* _tmp608_;
-										ValaProperty* _tmp609_;
+									ValaProperty* _tmp612_;
+									gboolean _tmp613_ = FALSE;
+									_tmp612_ = prop;
+									_tmp613_ = vala_ccode_base_module_get_ccode_no_accessor_method (_tmp612_);
+									if (!_tmp613_) {
 										gchar* getter_cname = NULL;
-										ValaProperty* _tmp621_;
-										const gchar* _tmp628_;
-										ValaCCodeIdentifier* _tmp629_;
-										ValaCCodeIdentifier* _tmp630_;
-										ValaCCodeFunctionCall* _tmp631_;
-										ValaCCodeFunctionCall* _tmp632_;
+										ValaProperty* _tmp614_;
+										const gchar* _tmp621_;
+										ValaCCodeIdentifier* _tmp622_;
+										ValaCCodeIdentifier* _tmp623_;
+										ValaCCodeFunctionCall* _tmp624_;
+										ValaCCodeFunctionCall* _tmp625_;
 										ValaCCodeFunctionCall* ccall;
-										ValaProperty* _tmp633_;
-										ValaMemberBinding _tmp634_;
-										ValaMemberBinding _tmp635_;
-										ValaProperty* _tmp662_;
-										ValaPropertyAccessor* _tmp663_;
-										ValaPropertyAccessor* _tmp664_;
-										ValaDataType* _tmp665_;
-										ValaDataType* _tmp666_;
-										ValaMemberAccess* _tmp667_;
-										ValaTargetValue* _tmp668_ = NULL;
+										ValaProperty* _tmp626_;
+										ValaMemberBinding _tmp627_;
+										ValaMemberBinding _tmp628_;
+										ValaProperty* _tmp655_;
+										ValaPropertyAccessor* _tmp656_;
+										ValaPropertyAccessor* _tmp657_;
+										ValaDataType* _tmp658_;
+										ValaDataType* _tmp659_;
+										ValaMemberAccess* _tmp660_;
+										ValaTargetValue* _tmp661_ = NULL;
 										ValaTargetValue* temp_value;
-										ValaMemberAccess* _tmp669_;
-										ValaTargetValue* _tmp670_;
-										ValaTargetValue* _tmp671_ = NULL;
-										ValaTargetValue* _tmp672_;
-										ValaTargetValue* _tmp673_;
-										ValaCCodeExpression* _tmp674_ = NULL;
+										ValaMemberAccess* _tmp662_;
+										ValaTargetValue* _tmp663_;
+										ValaTargetValue* _tmp664_ = NULL;
+										ValaTargetValue* _tmp665_;
+										ValaTargetValue* _tmp666_;
+										ValaCCodeExpression* _tmp667_ = NULL;
 										ValaCCodeExpression* ctemp;
-										ValaProperty* _tmp675_;
-										ValaDataType* _tmp676_;
-										ValaDataType* _tmp677_;
-										gboolean _tmp678_ = FALSE;
-										_tmp605_ = prop;
-										_tmp606_ = _vala_code_node_ref0 (_tmp605_);
-										base_property = _tmp606_;
-										_tmp607_ = prop;
-										_tmp608_ = vala_property_get_base_property (_tmp607_);
-										_tmp609_ = _tmp608_;
-										if (_tmp609_ != NULL) {
-											ValaProperty* _tmp610_;
-											ValaProperty* _tmp611_;
-											ValaProperty* _tmp612_;
-											ValaProperty* _tmp613_;
-											_tmp610_ = prop;
-											_tmp611_ = vala_property_get_base_property (_tmp610_);
-											_tmp612_ = _tmp611_;
-											_tmp613_ = _vala_code_node_ref0 (_tmp612_);
-											_vala_code_node_unref0 (base_property);
-											base_property = _tmp613_;
-										} else {
-											ValaProperty* _tmp614_;
+										ValaProperty* _tmp668_;
+										ValaDataType* _tmp669_;
+										ValaDataType* _tmp670_;
+										gboolean _tmp671_ = FALSE;
+										_tmp614_ = prop;
+										if (VALA_IS_DYNAMIC_PROPERTY (_tmp614_)) {
 											ValaProperty* _tmp615_;
-											ValaProperty* _tmp616_;
-											_tmp614_ = prop;
-											_tmp615_ = vala_property_get_base_interface_property (_tmp614_);
-											_tmp616_ = _tmp615_;
-											if (_tmp616_ != NULL) {
-												ValaProperty* _tmp617_;
-												ValaProperty* _tmp618_;
-												ValaProperty* _tmp619_;
-												ValaProperty* _tmp620_;
-												_tmp617_ = prop;
-												_tmp618_ = vala_property_get_base_interface_property (_tmp617_);
-												_tmp619_ = _tmp618_;
-												_tmp620_ = _vala_code_node_ref0 (_tmp619_);
-												_vala_code_node_unref0 (base_property);
-												base_property = _tmp620_;
-											}
-										}
-										_tmp621_ = prop;
-										if (VALA_IS_DYNAMIC_PROPERTY (_tmp621_)) {
-											ValaProperty* _tmp622_;
-											gchar* _tmp623_ = NULL;
-											_tmp622_ = prop;
-											_tmp623_ = vala_ccode_base_module_get_dynamic_property_getter_cname ((ValaCCodeBaseModule*) self, VALA_DYNAMIC_PROPERTY (_tmp622_));
+											gchar* _tmp616_ = NULL;
+											_tmp615_ = prop;
+											_tmp616_ = vala_ccode_base_module_get_dynamic_property_getter_cname ((ValaCCodeBaseModule*) self, VALA_DYNAMIC_PROPERTY (_tmp615_));
 											_g_free0 (getter_cname);
-											getter_cname = _tmp623_;
+											getter_cname = _tmp616_;
 										} else {
-											ValaProperty* _tmp624_;
-											ValaPropertyAccessor* _tmp625_;
-											ValaPropertyAccessor* _tmp626_;
-											gchar* _tmp627_ = NULL;
-											_tmp624_ = base_property;
-											_tmp625_ = vala_property_get_get_accessor (_tmp624_);
-											_tmp626_ = _tmp625_;
-											_tmp627_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp626_);
+											ValaProperty* _tmp617_;
+											ValaPropertyAccessor* _tmp618_;
+											ValaPropertyAccessor* _tmp619_;
+											gchar* _tmp620_ = NULL;
+											_tmp617_ = prop;
+											_tmp618_ = vala_property_get_get_accessor (_tmp617_);
+											_tmp619_ = _tmp618_;
+											_tmp620_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp619_);
 											_g_free0 (getter_cname);
-											getter_cname = _tmp627_;
+											getter_cname = _tmp620_;
 										}
-										_tmp628_ = getter_cname;
-										_tmp629_ = vala_ccode_identifier_new (_tmp628_);
-										_tmp630_ = _tmp629_;
-										_tmp631_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp630_);
-										_tmp632_ = _tmp631_;
-										_vala_ccode_node_unref0 (_tmp630_);
-										ccall = _tmp632_;
-										_tmp633_ = prop;
-										_tmp634_ = vala_property_get_binding (_tmp633_);
-										_tmp635_ = _tmp634_;
-										if (_tmp635_ == VALA_MEMBER_BINDING_INSTANCE) {
-											gboolean _tmp636_ = FALSE;
-											ValaProperty* _tmp637_;
-											ValaSymbol* _tmp638_;
-											ValaSymbol* _tmp639_;
-											gboolean _tmp644_;
-											ValaCCodeFunctionCall* _tmp660_;
-											ValaCCodeExpression* _tmp661_;
-											_tmp637_ = prop;
-											_tmp638_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp637_);
-											_tmp639_ = _tmp638_;
-											if (VALA_IS_STRUCT (_tmp639_)) {
-												ValaProperty* _tmp640_;
-												ValaSymbol* _tmp641_;
-												ValaSymbol* _tmp642_;
-												gboolean _tmp643_ = FALSE;
-												_tmp640_ = prop;
-												_tmp641_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp640_);
-												_tmp642_ = _tmp641_;
-												_tmp643_ = vala_struct_is_simple_type (VALA_STRUCT (_tmp642_));
-												_tmp636_ = !_tmp643_;
+										_tmp621_ = getter_cname;
+										_tmp622_ = vala_ccode_identifier_new (_tmp621_);
+										_tmp623_ = _tmp622_;
+										_tmp624_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp623_);
+										_tmp625_ = _tmp624_;
+										_vala_ccode_node_unref0 (_tmp623_);
+										ccall = _tmp625_;
+										_tmp626_ = prop;
+										_tmp627_ = vala_property_get_binding (_tmp626_);
+										_tmp628_ = _tmp627_;
+										if (_tmp628_ == VALA_MEMBER_BINDING_INSTANCE) {
+											gboolean _tmp629_ = FALSE;
+											ValaProperty* _tmp630_;
+											ValaSymbol* _tmp631_;
+											ValaSymbol* _tmp632_;
+											gboolean _tmp637_;
+											ValaCCodeFunctionCall* _tmp653_;
+											ValaCCodeExpression* _tmp654_;
+											_tmp630_ = prop;
+											_tmp631_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp630_);
+											_tmp632_ = _tmp631_;
+											if (VALA_IS_STRUCT (_tmp632_)) {
+												ValaProperty* _tmp633_;
+												ValaSymbol* _tmp634_;
+												ValaSymbol* _tmp635_;
+												gboolean _tmp636_ = FALSE;
+												_tmp633_ = prop;
+												_tmp634_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp633_);
+												_tmp635_ = _tmp634_;
+												_tmp636_ = vala_struct_is_simple_type (VALA_STRUCT (_tmp635_));
+												_tmp629_ = !_tmp636_;
 											} else {
-												_tmp636_ = FALSE;
+												_tmp629_ = FALSE;
 											}
-											_tmp644_ = _tmp636_;
-											if (_tmp644_) {
-												ValaMemberAccess* _tmp645_;
-												ValaExpression* _tmp646_;
-												ValaExpression* _tmp647_;
-												ValaTargetValue* _tmp648_;
-												ValaTargetValue* _tmp649_;
-												ValaTargetValue* _tmp650_;
+											_tmp637_ = _tmp629_;
+											if (_tmp637_) {
+												ValaMemberAccess* _tmp638_;
+												ValaExpression* _tmp639_;
+												ValaExpression* _tmp640_;
+												ValaTargetValue* _tmp641_;
+												ValaTargetValue* _tmp642_;
+												ValaTargetValue* _tmp643_;
 												ValaTargetValue* instance;
-												ValaTargetValue* _tmp651_;
-												gboolean _tmp652_ = FALSE;
-												ValaTargetValue* _tmp656_;
-												ValaCCodeExpression* _tmp657_ = NULL;
-												ValaCCodeExpression* _tmp658_;
-												ValaCCodeUnaryExpression* _tmp659_;
-												_tmp645_ = expr;
-												_tmp646_ = vala_member_access_get_inner (_tmp645_);
-												_tmp647_ = _tmp646_;
-												_tmp648_ = vala_expression_get_target_value (_tmp647_);
-												_tmp649_ = _tmp648_;
-												_tmp650_ = _vala_target_value_ref0 (_tmp649_);
-												instance = _tmp650_;
-												_tmp651_ = instance;
-												_tmp652_ = vala_ccode_base_module_get_lvalue ((ValaCCodeBaseModule*) self, _tmp651_);
-												if (!_tmp652_) {
-													ValaTargetValue* _tmp653_;
-													ValaMemberAccess* _tmp654_;
-													ValaTargetValue* _tmp655_ = NULL;
-													_tmp653_ = instance;
-													_tmp654_ = expr;
-													_tmp655_ = vala_ccode_base_module_store_temp_value ((ValaCCodeBaseModule*) self, _tmp653_, (ValaCodeNode*) _tmp654_, NULL);
+												ValaTargetValue* _tmp644_;
+												gboolean _tmp645_ = FALSE;
+												ValaTargetValue* _tmp649_;
+												ValaCCodeExpression* _tmp650_ = NULL;
+												ValaCCodeExpression* _tmp651_;
+												ValaCCodeUnaryExpression* _tmp652_;
+												_tmp638_ = expr;
+												_tmp639_ = vala_member_access_get_inner (_tmp638_);
+												_tmp640_ = _tmp639_;
+												_tmp641_ = vala_expression_get_target_value (_tmp640_);
+												_tmp642_ = _tmp641_;
+												_tmp643_ = _vala_target_value_ref0 (_tmp642_);
+												instance = _tmp643_;
+												_tmp644_ = instance;
+												_tmp645_ = vala_ccode_base_module_get_lvalue ((ValaCCodeBaseModule*) self, _tmp644_);
+												if (!_tmp645_) {
+													ValaTargetValue* _tmp646_;
+													ValaMemberAccess* _tmp647_;
+													ValaTargetValue* _tmp648_ = NULL;
+													_tmp646_ = instance;
+													_tmp647_ = expr;
+													_tmp648_ = vala_ccode_base_module_store_temp_value ((ValaCCodeBaseModule*) self, _tmp646_, (ValaCodeNode*) _tmp647_, NULL);
 													_vala_target_value_unref0 (instance);
-													instance = _tmp655_;
+													instance = _tmp648_;
 												}
-												_tmp656_ = instance;
-												_tmp657_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, _tmp656_);
-												_tmp658_ = _tmp657_;
-												_tmp659_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp658_);
+												_tmp649_ = instance;
+												_tmp650_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, _tmp649_);
+												_tmp651_ = _tmp650_;
+												_tmp652_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp651_);
 												_vala_ccode_node_unref0 (pub_inst);
-												pub_inst = (ValaCCodeExpression*) _tmp659_;
-												_vala_ccode_node_unref0 (_tmp658_);
+												pub_inst = (ValaCCodeExpression*) _tmp652_;
+												_vala_ccode_node_unref0 (_tmp651_);
 												_vala_target_value_unref0 (instance);
 											}
-											_tmp660_ = ccall;
-											_tmp661_ = pub_inst;
-											vala_ccode_function_call_add_argument (_tmp660_, _tmp661_);
+											_tmp653_ = ccall;
+											_tmp654_ = pub_inst;
+											vala_ccode_function_call_add_argument (_tmp653_, _tmp654_);
 										}
-										_tmp662_ = base_property;
-										_tmp663_ = vala_property_get_get_accessor (_tmp662_);
-										_tmp664_ = _tmp663_;
-										_tmp665_ = vala_property_accessor_get_value_type (_tmp664_);
-										_tmp666_ = _tmp665_;
-										_tmp667_ = expr;
-										_tmp668_ = vala_ccode_base_module_create_temp_value ((ValaCCodeBaseModule*) self, _tmp666_, FALSE, (ValaCodeNode*) _tmp667_, NULL);
-										temp_value = _tmp668_;
-										_tmp669_ = expr;
-										_tmp670_ = temp_value;
-										_tmp671_ = vala_ccode_base_module_load_temp_value ((ValaCCodeBaseModule*) self, _tmp670_);
-										_tmp672_ = _tmp671_;
-										vala_expression_set_target_value ((ValaExpression*) _tmp669_, _tmp672_);
-										_vala_target_value_unref0 (_tmp672_);
-										_tmp673_ = temp_value;
-										_tmp674_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, _tmp673_);
-										ctemp = _tmp674_;
-										_tmp675_ = base_property;
-										_tmp676_ = vala_property_get_property_type (_tmp675_);
-										_tmp677_ = _tmp676_;
-										_tmp678_ = vala_data_type_is_real_non_null_struct_type (_tmp677_);
-										if (_tmp678_) {
-											ValaCCodeFunctionCall* _tmp679_;
-											ValaCCodeExpression* _tmp680_;
-											ValaCCodeUnaryExpression* _tmp681_;
-											ValaCCodeUnaryExpression* _tmp682_;
-											ValaCCodeFunction* _tmp683_;
-											ValaCCodeFunction* _tmp684_;
-											ValaCCodeFunctionCall* _tmp685_;
-											_tmp679_ = ccall;
-											_tmp680_ = ctemp;
-											_tmp681_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp680_);
-											_tmp682_ = _tmp681_;
-											vala_ccode_function_call_add_argument (_tmp679_, (ValaCCodeExpression*) _tmp682_);
-											_vala_ccode_node_unref0 (_tmp682_);
-											_tmp683_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-											_tmp684_ = _tmp683_;
-											_tmp685_ = ccall;
-											vala_ccode_function_add_expression (_tmp684_, (ValaCCodeExpression*) _tmp685_);
+										_tmp655_ = prop;
+										_tmp656_ = vala_property_get_get_accessor (_tmp655_);
+										_tmp657_ = _tmp656_;
+										_tmp658_ = vala_property_accessor_get_value_type (_tmp657_);
+										_tmp659_ = _tmp658_;
+										_tmp660_ = expr;
+										_tmp661_ = vala_ccode_base_module_create_temp_value ((ValaCCodeBaseModule*) self, _tmp659_, FALSE, (ValaCodeNode*) _tmp660_, NULL);
+										temp_value = _tmp661_;
+										_tmp662_ = expr;
+										_tmp663_ = temp_value;
+										_tmp664_ = vala_ccode_base_module_load_temp_value ((ValaCCodeBaseModule*) self, _tmp663_);
+										_tmp665_ = _tmp664_;
+										vala_expression_set_target_value ((ValaExpression*) _tmp662_, _tmp665_);
+										_vala_target_value_unref0 (_tmp665_);
+										_tmp666_ = temp_value;
+										_tmp667_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, _tmp666_);
+										ctemp = _tmp667_;
+										_tmp668_ = prop;
+										_tmp669_ = vala_property_get_property_type (_tmp668_);
+										_tmp670_ = _tmp669_;
+										_tmp671_ = vala_data_type_is_real_non_null_struct_type (_tmp670_);
+										if (_tmp671_) {
+											ValaCCodeFunctionCall* _tmp672_;
+											ValaCCodeExpression* _tmp673_;
+											ValaCCodeUnaryExpression* _tmp674_;
+											ValaCCodeUnaryExpression* _tmp675_;
+											ValaCCodeFunction* _tmp676_;
+											ValaCCodeFunction* _tmp677_;
+											ValaCCodeFunctionCall* _tmp678_;
+											_tmp672_ = ccall;
+											_tmp673_ = ctemp;
+											_tmp674_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp673_);
+											_tmp675_ = _tmp674_;
+											vala_ccode_function_call_add_argument (_tmp672_, (ValaCCodeExpression*) _tmp675_);
+											_vala_ccode_node_unref0 (_tmp675_);
+											_tmp676_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+											_tmp677_ = _tmp676_;
+											_tmp678_ = ccall;
+											vala_ccode_function_add_expression (_tmp677_, (ValaCCodeExpression*) _tmp678_);
 										} else {
-											ValaCCodeFunction* _tmp686_;
-											ValaCCodeFunction* _tmp687_;
-											ValaCCodeExpression* _tmp688_;
-											ValaCCodeFunctionCall* _tmp689_;
-											ValaProperty* _tmp690_;
-											ValaDataType* _tmp691_;
-											ValaDataType* _tmp692_;
-											ValaArrayType* _tmp693_;
-											gboolean _tmp694_ = FALSE;
-											ValaArrayType* _tmp695_;
-											gboolean _tmp698_;
-											_tmp686_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-											_tmp687_ = _tmp686_;
-											_tmp688_ = ctemp;
-											_tmp689_ = ccall;
-											vala_ccode_function_add_assignment (_tmp687_, _tmp688_, (ValaCCodeExpression*) _tmp689_);
-											_tmp690_ = base_property;
-											_tmp691_ = vala_property_get_property_type (_tmp690_);
-											_tmp692_ = _tmp691_;
-											_tmp693_ = _vala_code_node_ref0 (VALA_IS_ARRAY_TYPE (_tmp692_) ? ((ValaArrayType*) _tmp692_) : NULL);
+											ValaCCodeFunction* _tmp679_;
+											ValaCCodeFunction* _tmp680_;
+											ValaCCodeExpression* _tmp681_;
+											ValaCCodeFunctionCall* _tmp682_;
+											ValaProperty* _tmp683_;
+											ValaDataType* _tmp684_;
+											ValaDataType* _tmp685_;
+											ValaArrayType* _tmp686_;
+											gboolean _tmp687_ = FALSE;
+											ValaArrayType* _tmp688_;
+											gboolean _tmp691_;
+											_tmp679_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+											_tmp680_ = _tmp679_;
+											_tmp681_ = ctemp;
+											_tmp682_ = ccall;
+											vala_ccode_function_add_assignment (_tmp680_, _tmp681_, (ValaCCodeExpression*) _tmp682_);
+											_tmp683_ = prop;
+											_tmp684_ = vala_property_get_property_type (_tmp683_);
+											_tmp685_ = _tmp684_;
+											_tmp686_ = _vala_code_node_ref0 (VALA_IS_ARRAY_TYPE (_tmp685_) ? ((ValaArrayType*) _tmp685_) : NULL);
 											_vala_code_node_unref0 (array_type);
-											array_type = _tmp693_;
-											_tmp695_ = array_type;
-											if (_tmp695_ != NULL) {
-												ValaProperty* _tmp696_;
-												gboolean _tmp697_ = FALSE;
-												_tmp696_ = base_property;
-												_tmp697_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp696_);
-												_tmp694_ = _tmp697_;
+											array_type = _tmp686_;
+											_tmp688_ = array_type;
+											if (_tmp688_ != NULL) {
+												ValaProperty* _tmp689_;
+												gboolean _tmp690_ = FALSE;
+												_tmp689_ = prop;
+												_tmp690_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp689_);
+												_tmp687_ = _tmp690_;
 											} else {
-												_tmp694_ = FALSE;
+												_tmp687_ = FALSE;
 											}
-											_tmp698_ = _tmp694_;
-											if (_tmp698_) {
+											_tmp691_ = _tmp687_;
+											if (_tmp691_) {
 												{
 													gint dim;
 													dim = 1;
 													{
-														gboolean _tmp699_;
-														_tmp699_ = TRUE;
+														gboolean _tmp692_;
+														_tmp692_ = TRUE;
 														while (TRUE) {
-															gboolean _tmp700_;
-															gint _tmp702_;
-															ValaArrayType* _tmp703_;
-															gint _tmp704_;
-															gint _tmp705_;
-															ValaCCodeFunctionCall* _tmp706_;
-															ValaTargetValue* _tmp707_;
-															gint _tmp708_;
-															ValaCCodeExpression* _tmp709_ = NULL;
-															ValaCCodeExpression* _tmp710_;
-															ValaCCodeUnaryExpression* _tmp711_;
-															ValaCCodeUnaryExpression* _tmp712_;
-															_tmp700_ = _tmp699_;
-															if (!_tmp700_) {
-																gint _tmp701_;
-																_tmp701_ = dim;
-																dim = _tmp701_ + 1;
+															gboolean _tmp693_;
+															gint _tmp695_;
+															ValaArrayType* _tmp696_;
+															gint _tmp697_;
+															gint _tmp698_;
+															ValaCCodeFunctionCall* _tmp699_;
+															ValaTargetValue* _tmp700_;
+															gint _tmp701_;
+															ValaCCodeExpression* _tmp702_ = NULL;
+															ValaCCodeExpression* _tmp703_;
+															ValaCCodeUnaryExpression* _tmp704_;
+															ValaCCodeUnaryExpression* _tmp705_;
+															_tmp693_ = _tmp692_;
+															if (!_tmp693_) {
+																gint _tmp694_;
+																_tmp694_ = dim;
+																dim = _tmp694_ + 1;
 															}
-															_tmp699_ = FALSE;
-															_tmp702_ = dim;
-															_tmp703_ = array_type;
-															_tmp704_ = vala_array_type_get_rank (_tmp703_);
-															_tmp705_ = _tmp704_;
-															if (!(_tmp702_ <= _tmp705_)) {
+															_tmp692_ = FALSE;
+															_tmp695_ = dim;
+															_tmp696_ = array_type;
+															_tmp697_ = vala_array_type_get_rank (_tmp696_);
+															_tmp698_ = _tmp697_;
+															if (!(_tmp695_ <= _tmp698_)) {
 																break;
 															}
-															_tmp706_ = ccall;
-															_tmp707_ = temp_value;
-															_tmp708_ = dim;
-															_tmp709_ = vala_ccode_base_module_get_array_length_cvalue ((ValaCCodeBaseModule*) self, _tmp707_, _tmp708_);
-															_tmp710_ = _tmp709_;
-															_tmp711_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp710_);
-															_tmp712_ = _tmp711_;
-															vala_ccode_function_call_add_argument (_tmp706_, (ValaCCodeExpression*) _tmp712_);
-															_vala_ccode_node_unref0 (_tmp712_);
-															_vala_ccode_node_unref0 (_tmp710_);
+															_tmp699_ = ccall;
+															_tmp700_ = temp_value;
+															_tmp701_ = dim;
+															_tmp702_ = vala_ccode_base_module_get_array_length_cvalue ((ValaCCodeBaseModule*) self, _tmp700_, _tmp701_);
+															_tmp703_ = _tmp702_;
+															_tmp704_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp703_);
+															_tmp705_ = _tmp704_;
+															vala_ccode_function_call_add_argument (_tmp699_, (ValaCCodeExpression*) _tmp705_);
+															_vala_ccode_node_unref0 (_tmp705_);
+															_vala_ccode_node_unref0 (_tmp703_);
 														}
 													}
 												}
 											} else {
-												ValaProperty* _tmp713_;
-												ValaDataType* _tmp714_;
-												ValaDataType* _tmp715_;
-												ValaDelegateType* _tmp716_;
-												gboolean _tmp717_ = FALSE;
-												ValaDelegateType* _tmp718_;
-												gboolean _tmp724_;
-												_tmp713_ = base_property;
-												_tmp714_ = vala_property_get_property_type (_tmp713_);
-												_tmp715_ = _tmp714_;
-												_tmp716_ = _vala_code_node_ref0 (VALA_IS_DELEGATE_TYPE (_tmp715_) ? ((ValaDelegateType*) _tmp715_) : NULL);
+												ValaProperty* _tmp706_;
+												ValaDataType* _tmp707_;
+												ValaDataType* _tmp708_;
+												ValaDelegateType* _tmp709_;
+												gboolean _tmp710_ = FALSE;
+												ValaDelegateType* _tmp711_;
+												gboolean _tmp717_;
+												_tmp706_ = prop;
+												_tmp707_ = vala_property_get_property_type (_tmp706_);
+												_tmp708_ = _tmp707_;
+												_tmp709_ = _vala_code_node_ref0 (VALA_IS_DELEGATE_TYPE (_tmp708_) ? ((ValaDelegateType*) _tmp708_) : NULL);
 												_vala_code_node_unref0 (delegate_type);
-												delegate_type = _tmp716_;
-												_tmp718_ = delegate_type;
-												if (_tmp718_ != NULL) {
-													ValaDelegateType* _tmp719_;
-													ValaDelegate* _tmp720_;
-													ValaDelegate* _tmp721_;
-													gboolean _tmp722_;
-													gboolean _tmp723_;
-													_tmp719_ = delegate_type;
-													_tmp720_ = vala_delegate_type_get_delegate_symbol (_tmp719_);
-													_tmp721_ = _tmp720_;
-													_tmp722_ = vala_delegate_get_has_target (_tmp721_);
-													_tmp723_ = _tmp722_;
-													_tmp717_ = _tmp723_;
+												delegate_type = _tmp709_;
+												_tmp711_ = delegate_type;
+												if (_tmp711_ != NULL) {
+													ValaDelegateType* _tmp712_;
+													ValaDelegate* _tmp713_;
+													ValaDelegate* _tmp714_;
+													gboolean _tmp715_;
+													gboolean _tmp716_;
+													_tmp712_ = delegate_type;
+													_tmp713_ = vala_delegate_type_get_delegate_symbol (_tmp712_);
+													_tmp714_ = _tmp713_;
+													_tmp715_ = vala_delegate_get_has_target (_tmp714_);
+													_tmp716_ = _tmp715_;
+													_tmp710_ = _tmp716_;
 												} else {
-													_tmp717_ = FALSE;
+													_tmp710_ = FALSE;
 												}
-												_tmp724_ = _tmp717_;
-												if (_tmp724_) {
-													ValaCCodeFunctionCall* _tmp725_;
-													ValaTargetValue* _tmp726_;
-													ValaCCodeExpression* _tmp727_ = NULL;
-													ValaCCodeExpression* _tmp728_;
-													ValaCCodeUnaryExpression* _tmp729_;
-													ValaCCodeUnaryExpression* _tmp730_;
-													_tmp725_ = ccall;
-													_tmp726_ = temp_value;
-													_tmp727_ = vala_ccode_base_module_get_delegate_target_cvalue ((ValaCCodeBaseModule*) self, _tmp726_);
-													_tmp728_ = _tmp727_;
-													_tmp729_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp728_);
-													_tmp730_ = _tmp729_;
-													vala_ccode_function_call_add_argument (_tmp725_, (ValaCCodeExpression*) _tmp730_);
-													_vala_ccode_node_unref0 (_tmp730_);
-													_vala_ccode_node_unref0 (_tmp728_);
+												_tmp717_ = _tmp710_;
+												if (_tmp717_) {
+													ValaCCodeFunctionCall* _tmp718_;
+													ValaTargetValue* _tmp719_;
+													ValaCCodeExpression* _tmp720_ = NULL;
+													ValaCCodeExpression* _tmp721_;
+													ValaCCodeUnaryExpression* _tmp722_;
+													ValaCCodeUnaryExpression* _tmp723_;
+													_tmp718_ = ccall;
+													_tmp719_ = temp_value;
+													_tmp720_ = vala_ccode_base_module_get_delegate_target_cvalue ((ValaCCodeBaseModule*) self, _tmp719_);
+													_tmp721_ = _tmp720_;
+													_tmp722_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp721_);
+													_tmp723_ = _tmp722_;
+													vala_ccode_function_call_add_argument (_tmp718_, (ValaCCodeExpression*) _tmp723_);
+													_vala_ccode_node_unref0 (_tmp723_);
+													_vala_ccode_node_unref0 (_tmp721_);
 												}
 											}
 										}
@@ -2370,26 +2351,29 @@ static void vala_ccode_member_access_module_real_visit_member_access (ValaCodeVi
 										_vala_target_value_unref0 (temp_value);
 										_vala_ccode_node_unref0 (ccall);
 										_g_free0 (getter_cname);
-										_vala_code_node_unref0 (base_property);
 									} else {
-										ValaCCodeIdentifier* _tmp731_;
-										ValaCCodeIdentifier* _tmp732_;
-										ValaCCodeFunctionCall* _tmp733_;
-										ValaCCodeFunctionCall* _tmp734_;
+										ValaCCodeIdentifier* _tmp724_;
+										ValaCCodeIdentifier* _tmp725_;
+										ValaCCodeFunctionCall* _tmp726_;
+										ValaCCodeFunctionCall* _tmp727_;
 										ValaCCodeFunctionCall* ccall;
-										ValaCCodeFunctionCall* _tmp735_;
-										ValaCCodeExpression* _tmp736_;
-										ValaCCodeFunctionCall* _tmp737_;
-										ValaProperty* _tmp738_;
-										ValaCCodeConstant* _tmp739_ = NULL;
-										ValaCCodeConstant* _tmp740_;
-										ValaProperty* _tmp741_;
-										ValaPropertyAccessor* _tmp742_;
-										ValaPropertyAccessor* _tmp743_;
-										ValaDataType* _tmp744_;
-										ValaDataType* _tmp745_;
-										gboolean _tmp746_;
-										gboolean _tmp747_;
+										ValaCCodeFunctionCall* _tmp728_;
+										ValaCCodeExpression* _tmp729_;
+										ValaCCodeFunctionCall* _tmp730_;
+										ValaProperty* _tmp731_;
+										ValaCCodeConstant* _tmp732_ = NULL;
+										ValaCCodeConstant* _tmp733_;
+										ValaProperty* _tmp734_;
+										ValaPropertyAccessor* _tmp735_;
+										ValaPropertyAccessor* _tmp736_;
+										ValaDataType* _tmp737_;
+										ValaDataType* _tmp738_;
+										gboolean _tmp739_;
+										gboolean _tmp740_;
+										ValaMemberAccess* _tmp760_;
+										ValaDataType* _tmp761_;
+										ValaDataType* _tmp762_;
+										gboolean _tmp763_ = FALSE;
 										ValaMemberAccess* _tmp767_;
 										ValaDataType* _tmp768_;
 										ValaDataType* _tmp769_;
@@ -2413,78 +2397,91 @@ static void vala_ccode_member_access_module_real_visit_member_access (ValaCodeVi
 										ValaCCodeFunctionCall* _tmp785_;
 										ValaMemberAccess* _tmp786_;
 										ValaCCodeExpression* _tmp787_;
-										_tmp731_ = vala_ccode_identifier_new ("g_object_get");
-										_tmp732_ = _tmp731_;
-										_tmp733_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp732_);
-										_tmp734_ = _tmp733_;
-										_vala_ccode_node_unref0 (_tmp732_);
-										ccall = _tmp734_;
-										_tmp735_ = ccall;
-										_tmp736_ = pub_inst;
-										vala_ccode_function_call_add_argument (_tmp735_, _tmp736_);
-										_tmp737_ = ccall;
-										_tmp738_ = prop;
-										_tmp739_ = vala_ccode_base_module_get_property_canonical_cconstant ((ValaCCodeBaseModule*) self, _tmp738_);
+										_tmp724_ = vala_ccode_identifier_new ("g_object_get");
+										_tmp725_ = _tmp724_;
+										_tmp726_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp725_);
+										_tmp727_ = _tmp726_;
+										_vala_ccode_node_unref0 (_tmp725_);
+										ccall = _tmp727_;
+										_tmp728_ = ccall;
+										_tmp729_ = pub_inst;
+										vala_ccode_function_call_add_argument (_tmp728_, _tmp729_);
+										_tmp730_ = ccall;
+										_tmp731_ = prop;
+										_tmp732_ = vala_ccode_base_module_get_property_canonical_cconstant ((ValaCCodeBaseModule*) self, _tmp731_);
+										_tmp733_ = _tmp732_;
+										vala_ccode_function_call_add_argument (_tmp730_, (ValaCCodeExpression*) _tmp733_);
+										_vala_ccode_node_unref0 (_tmp733_);
+										_tmp734_ = prop;
+										_tmp735_ = vala_property_get_get_accessor (_tmp734_);
+										_tmp736_ = _tmp735_;
+										_tmp737_ = vala_property_accessor_get_value_type (_tmp736_);
+										_tmp738_ = _tmp737_;
+										_tmp739_ = vala_data_type_get_value_owned (_tmp738_);
 										_tmp740_ = _tmp739_;
-										vala_ccode_function_call_add_argument (_tmp737_, (ValaCCodeExpression*) _tmp740_);
-										_vala_ccode_node_unref0 (_tmp740_);
-										_tmp741_ = prop;
-										_tmp742_ = vala_property_get_get_accessor (_tmp741_);
-										_tmp743_ = _tmp742_;
-										_tmp744_ = vala_property_accessor_get_value_type (_tmp743_);
-										_tmp745_ = _tmp744_;
-										_tmp746_ = vala_data_type_get_value_owned (_tmp745_);
-										_tmp747_ = _tmp746_;
-										if (!_tmp747_) {
-											ValaProperty* _tmp748_;
-											ValaPropertyAccessor* _tmp749_;
-											ValaPropertyAccessor* _tmp750_;
-											ValaDataType* _tmp751_;
-											ValaDataType* _tmp752_;
-											ValaDataType* _tmp753_ = NULL;
+										if (!_tmp740_) {
+											ValaProperty* _tmp741_;
+											ValaPropertyAccessor* _tmp742_;
+											ValaPropertyAccessor* _tmp743_;
+											ValaDataType* _tmp744_;
+											ValaDataType* _tmp745_;
+											ValaDataType* _tmp746_ = NULL;
 											ValaDataType* owned_value_type;
-											ValaDataType* _tmp754_;
-											ValaDataType* _tmp755_;
-											gboolean _tmp756_ = FALSE;
-											_tmp748_ = prop;
-											_tmp749_ = vala_property_get_get_accessor (_tmp748_);
-											_tmp750_ = _tmp749_;
-											_tmp751_ = vala_property_accessor_get_value_type (_tmp750_);
-											_tmp752_ = _tmp751_;
-											_tmp753_ = vala_data_type_copy (_tmp752_);
-											owned_value_type = _tmp753_;
-											_tmp754_ = owned_value_type;
-											vala_data_type_set_value_owned (_tmp754_, TRUE);
-											_tmp755_ = owned_value_type;
-											_tmp756_ = vala_ccode_base_module_requires_copy ((ValaCCodeBaseModule*) self, _tmp755_);
-											if (_tmp756_) {
-												ValaProperty* _tmp757_;
-												ValaPropertyAccessor* _tmp758_;
-												ValaPropertyAccessor* _tmp759_;
-												ValaSourceReference* _tmp760_;
-												ValaSourceReference* _tmp761_;
-												ValaProperty* _tmp762_;
-												gchar* _tmp763_ = NULL;
-												gchar* _tmp764_;
-												gchar* _tmp765_ = NULL;
-												gchar* _tmp766_;
-												_tmp757_ = prop;
-												_tmp758_ = vala_property_get_get_accessor (_tmp757_);
+											ValaDataType* _tmp747_;
+											ValaDataType* _tmp748_;
+											gboolean _tmp749_ = FALSE;
+											_tmp741_ = prop;
+											_tmp742_ = vala_property_get_get_accessor (_tmp741_);
+											_tmp743_ = _tmp742_;
+											_tmp744_ = vala_property_accessor_get_value_type (_tmp743_);
+											_tmp745_ = _tmp744_;
+											_tmp746_ = vala_data_type_copy (_tmp745_);
+											owned_value_type = _tmp746_;
+											_tmp747_ = owned_value_type;
+											vala_data_type_set_value_owned (_tmp747_, TRUE);
+											_tmp748_ = owned_value_type;
+											_tmp749_ = vala_ccode_base_module_requires_copy ((ValaCCodeBaseModule*) self, _tmp748_);
+											if (_tmp749_) {
+												ValaProperty* _tmp750_;
+												ValaPropertyAccessor* _tmp751_;
+												ValaPropertyAccessor* _tmp752_;
+												ValaSourceReference* _tmp753_;
+												ValaSourceReference* _tmp754_;
+												ValaProperty* _tmp755_;
+												gchar* _tmp756_ = NULL;
+												gchar* _tmp757_;
+												gchar* _tmp758_ = NULL;
+												gchar* _tmp759_;
+												_tmp750_ = prop;
+												_tmp751_ = vala_property_get_get_accessor (_tmp750_);
+												_tmp752_ = _tmp751_;
+												_tmp753_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp752_);
+												_tmp754_ = _tmp753_;
+												_tmp755_ = prop;
+												_tmp756_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp755_);
+												_tmp757_ = _tmp756_;
+												_tmp758_ = g_strdup_printf ("unowned return value for getter of property `%s' not supported without" \
+" accessor", _tmp757_);
 												_tmp759_ = _tmp758_;
-												_tmp760_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp759_);
-												_tmp761_ = _tmp760_;
-												_tmp762_ = prop;
-												_tmp763_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp762_);
-												_tmp764_ = _tmp763_;
-												_tmp765_ = g_strdup_printf ("unowned return value for getter of property `%s' not supported without" \
-" accessor", _tmp764_);
-												_tmp766_ = _tmp765_;
-												vala_report_error (_tmp761_, _tmp766_);
-												_g_free0 (_tmp766_);
-												_g_free0 (_tmp764_);
+												vala_report_error (_tmp754_, _tmp759_);
+												_g_free0 (_tmp759_);
+												_g_free0 (_tmp757_);
 											}
 											_vala_code_node_unref0 (owned_value_type);
 										}
+										_tmp760_ = expr;
+										_tmp761_ = vala_expression_get_value_type ((ValaExpression*) _tmp760_);
+										_tmp762_ = _tmp761_;
+										_tmp763_ = vala_data_type_is_real_struct_type (_tmp762_);
+										if (_tmp763_) {
+											ValaMemberAccess* _tmp764_;
+											ValaDataType* _tmp765_;
+											ValaDataType* _tmp766_;
+											_tmp764_ = expr;
+											_tmp765_ = vala_expression_get_value_type ((ValaExpression*) _tmp764_);
+											_tmp766_ = _tmp765_;
+											vala_data_type_set_nullable (_tmp766_, TRUE);
+										}
 										_tmp767_ = expr;
 										_tmp768_ = vala_expression_get_value_type ((ValaExpression*) _tmp767_);
 										_tmp769_ = _tmp768_;
@@ -3617,11 +3614,11 @@ static ValaTargetValue* vala_ccode_member_access_module_real_get_parameter_cvalu
 		ValaParameter* _tmp78_;
 		gboolean _tmp79_;
 		gboolean _tmp80_;
-		gboolean _tmp333_ = FALSE;
-		ValaParameter* _tmp334_;
-		gboolean _tmp335_;
-		gboolean _tmp336_;
-		gboolean _tmp338_;
+		gboolean _tmp327_ = FALSE;
+		ValaParameter* _tmp328_;
+		gboolean _tmp329_;
+		gboolean _tmp330_;
+		gboolean _tmp332_;
 		_tmp74_ = param;
 		_tmp75_ = vala_symbol_get_name ((ValaSymbol*) _tmp74_);
 		_tmp76_ = _tmp75_;
@@ -3795,18 +3792,14 @@ static ValaTargetValue* vala_ccode_member_access_module_real_get_parameter_cvalu
 					ValaCCodeExpression* _tmp143_ = NULL;
 					ValaCCodeExpression* _tmp144_;
 					ValaParameter* _tmp145_;
-					const gchar* _tmp146_;
-					const gchar* _tmp147_;
-					gchar* _tmp148_ = NULL;
-					gchar* _tmp149_;
-					gchar* _tmp150_ = NULL;
-					gchar* _tmp151_;
-					ValaCCodeMemberAccess* _tmp152_;
-					ValaGLibValue* _tmp153_;
-					ValaDataType* _tmp154_;
-					ValaDataType* _tmp155_;
-					gboolean _tmp156_;
-					gboolean _tmp157_;
+					gchar* _tmp146_ = NULL;
+					gchar* _tmp147_;
+					ValaCCodeMemberAccess* _tmp148_;
+					ValaGLibValue* _tmp149_;
+					ValaDataType* _tmp150_;
+					ValaDataType* _tmp151_;
+					gboolean _tmp152_;
+					gboolean _tmp153_;
 					_tmp138_ = _result_;
 					_tmp139_ = block;
 					_tmp140_ = vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp139_);
@@ -3815,319 +3808,325 @@ static ValaTargetValue* vala_ccode_member_access_module_real_get_parameter_cvalu
 					_tmp143_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp142_);
 					_tmp144_ = _tmp143_;
 					_tmp145_ = param;
-					_tmp146_ = vala_symbol_get_name ((ValaSymbol*) _tmp145_);
+					_tmp146_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp145_);
 					_tmp147_ = _tmp146_;
-					_tmp148_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp147_);
-					_tmp149_ = _tmp148_;
-					_tmp150_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp149_);
-					_tmp151_ = _tmp150_;
-					_tmp152_ = vala_ccode_member_access_new_pointer (_tmp144_, _tmp151_);
+					_tmp148_ = vala_ccode_member_access_new_pointer (_tmp144_, _tmp147_);
 					_vala_ccode_node_unref0 (_tmp138_->delegate_target_cvalue);
-					_tmp138_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp152_;
-					_g_free0 (_tmp151_);
-					_g_free0 (_tmp149_);
+					_tmp138_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp148_;
+					_g_free0 (_tmp147_);
 					_vala_ccode_node_unref0 (_tmp144_);
 					_g_free0 (_tmp142_);
-					_tmp153_ = _result_;
-					_tmp154_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp153_);
-					_tmp155_ = _tmp154_;
-					_tmp156_ = vala_data_type_get_value_owned (_tmp155_);
-					_tmp157_ = _tmp156_;
-					if (_tmp157_) {
-						ValaGLibValue* _tmp158_;
-						ValaBlock* _tmp159_;
-						gint _tmp160_ = 0;
-						gchar* _tmp161_ = NULL;
-						gchar* _tmp162_;
-						ValaCCodeExpression* _tmp163_ = NULL;
-						ValaCCodeExpression* _tmp164_;
-						ValaParameter* _tmp165_;
-						const gchar* _tmp166_;
-						const gchar* _tmp167_;
-						gchar* _tmp168_ = NULL;
-						gchar* _tmp169_;
-						gchar* _tmp170_ = NULL;
-						gchar* _tmp171_;
-						ValaCCodeMemberAccess* _tmp172_;
-						_tmp158_ = _result_;
-						_tmp159_ = block;
-						_tmp160_ = vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp159_);
-						_tmp161_ = g_strdup_printf ("_data%d_", _tmp160_);
-						_tmp162_ = _tmp161_;
-						_tmp163_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp162_);
-						_tmp164_ = _tmp163_;
-						_tmp165_ = param;
-						_tmp166_ = vala_symbol_get_name ((ValaSymbol*) _tmp165_);
+					_tmp149_ = _result_;
+					_tmp150_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp149_);
+					_tmp151_ = _tmp150_;
+					_tmp152_ = vala_data_type_get_value_owned (_tmp151_);
+					_tmp153_ = _tmp152_;
+					if (_tmp153_) {
+						ValaGLibValue* _tmp154_;
+						ValaBlock* _tmp155_;
+						gint _tmp156_ = 0;
+						gchar* _tmp157_ = NULL;
+						gchar* _tmp158_;
+						ValaCCodeExpression* _tmp159_ = NULL;
+						ValaCCodeExpression* _tmp160_;
+						ValaParameter* _tmp161_;
+						const gchar* _tmp162_;
+						const gchar* _tmp163_;
+						gchar* _tmp164_ = NULL;
+						gchar* _tmp165_;
+						gchar* _tmp166_ = NULL;
+						gchar* _tmp167_;
+						ValaCCodeMemberAccess* _tmp168_;
+						_tmp154_ = _result_;
+						_tmp155_ = block;
+						_tmp156_ = vala_ccode_base_module_get_block_id ((ValaCCodeBaseModule*) self, _tmp155_);
+						_tmp157_ = g_strdup_printf ("_data%d_", _tmp156_);
+						_tmp158_ = _tmp157_;
+						_tmp159_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp158_);
+						_tmp160_ = _tmp159_;
+						_tmp161_ = param;
+						_tmp162_ = vala_symbol_get_name ((ValaSymbol*) _tmp161_);
+						_tmp163_ = _tmp162_;
+						_tmp164_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp163_);
+						_tmp165_ = _tmp164_;
+						_tmp166_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp165_);
 						_tmp167_ = _tmp166_;
-						_tmp168_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp167_);
-						_tmp169_ = _tmp168_;
-						_tmp170_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp169_);
-						_tmp171_ = _tmp170_;
-						_tmp172_ = vala_ccode_member_access_new_pointer (_tmp164_, _tmp171_);
-						_vala_ccode_node_unref0 (_tmp158_->delegate_target_destroy_notify_cvalue);
-						_tmp158_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp172_;
-						_g_free0 (_tmp171_);
-						_g_free0 (_tmp169_);
-						_vala_ccode_node_unref0 (_tmp164_);
-						_g_free0 (_tmp162_);
+						_tmp168_ = vala_ccode_member_access_new_pointer (_tmp160_, _tmp167_);
+						_vala_ccode_node_unref0 (_tmp154_->delegate_target_destroy_notify_cvalue);
+						_tmp154_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp168_;
+						_g_free0 (_tmp167_);
+						_g_free0 (_tmp165_);
+						_vala_ccode_node_unref0 (_tmp160_);
+						_g_free0 (_tmp158_);
 					}
 				}
 			}
 			_vala_code_node_unref0 (block);
 		} else {
-			gboolean _tmp173_ = FALSE;
-			_tmp173_ = vala_ccode_base_module_is_in_coroutine ((ValaCCodeBaseModule*) self);
-			if (_tmp173_) {
-				ValaGLibValue* _tmp174_;
-				ValaParameter* _tmp175_;
-				const gchar* _tmp176_;
-				const gchar* _tmp177_;
-				ValaCCodeExpression* _tmp178_ = NULL;
-				gboolean _tmp179_ = FALSE;
-				ValaDelegateType* _tmp180_;
-				gboolean _tmp186_;
-				_tmp174_ = _result_;
-				_tmp175_ = param;
-				_tmp176_ = vala_symbol_get_name ((ValaSymbol*) _tmp175_);
-				_tmp177_ = _tmp176_;
-				_tmp178_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp177_);
-				_vala_ccode_node_unref0 (_tmp174_->cvalue);
-				_tmp174_->cvalue = _tmp178_;
-				_tmp180_ = delegate_type;
-				if (_tmp180_ != NULL) {
-					ValaDelegateType* _tmp181_;
-					ValaDelegate* _tmp182_;
-					ValaDelegate* _tmp183_;
-					gboolean _tmp184_;
-					gboolean _tmp185_;
-					_tmp181_ = delegate_type;
-					_tmp182_ = vala_delegate_type_get_delegate_symbol (_tmp181_);
-					_tmp183_ = _tmp182_;
-					_tmp184_ = vala_delegate_get_has_target (_tmp183_);
-					_tmp185_ = _tmp184_;
-					_tmp179_ = _tmp185_;
+			gboolean _tmp169_ = FALSE;
+			_tmp169_ = vala_ccode_base_module_is_in_coroutine ((ValaCCodeBaseModule*) self);
+			if (_tmp169_) {
+				ValaGLibValue* _tmp170_;
+				ValaParameter* _tmp171_;
+				const gchar* _tmp172_;
+				const gchar* _tmp173_;
+				ValaCCodeExpression* _tmp174_ = NULL;
+				gboolean _tmp175_ = FALSE;
+				ValaDelegateType* _tmp176_;
+				gboolean _tmp182_;
+				_tmp170_ = _result_;
+				_tmp171_ = param;
+				_tmp172_ = vala_symbol_get_name ((ValaSymbol*) _tmp171_);
+				_tmp173_ = _tmp172_;
+				_tmp174_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp173_);
+				_vala_ccode_node_unref0 (_tmp170_->cvalue);
+				_tmp170_->cvalue = _tmp174_;
+				_tmp176_ = delegate_type;
+				if (_tmp176_ != NULL) {
+					ValaDelegateType* _tmp177_;
+					ValaDelegate* _tmp178_;
+					ValaDelegate* _tmp179_;
+					gboolean _tmp180_;
+					gboolean _tmp181_;
+					_tmp177_ = delegate_type;
+					_tmp178_ = vala_delegate_type_get_delegate_symbol (_tmp177_);
+					_tmp179_ = _tmp178_;
+					_tmp180_ = vala_delegate_get_has_target (_tmp179_);
+					_tmp181_ = _tmp180_;
+					_tmp175_ = _tmp181_;
 				} else {
-					_tmp179_ = FALSE;
+					_tmp175_ = FALSE;
 				}
-				_tmp186_ = _tmp179_;
-				if (_tmp186_) {
-					ValaGLibValue* _tmp187_;
-					ValaCCodeIdentifier* _tmp188_;
-					ValaCCodeIdentifier* _tmp189_;
-					ValaParameter* _tmp190_;
-					const gchar* _tmp191_;
-					const gchar* _tmp192_;
-					gchar* _tmp193_ = NULL;
-					gchar* _tmp194_;
-					gchar* _tmp195_ = NULL;
-					gchar* _tmp196_;
-					ValaCCodeMemberAccess* _tmp197_;
-					ValaDelegateType* _tmp198_;
-					gboolean _tmp199_;
-					gboolean _tmp200_;
-					_tmp187_ = _result_;
-					_tmp188_ = vala_ccode_identifier_new ("_data_");
-					_tmp189_ = _tmp188_;
-					_tmp190_ = param;
-					_tmp191_ = vala_symbol_get_name ((ValaSymbol*) _tmp190_);
+				_tmp182_ = _tmp175_;
+				if (_tmp182_) {
+					ValaGLibValue* _tmp183_;
+					ValaCCodeIdentifier* _tmp184_;
+					ValaCCodeIdentifier* _tmp185_;
+					ValaParameter* _tmp186_;
+					gchar* _tmp187_ = NULL;
+					gchar* _tmp188_;
+					ValaCCodeMemberAccess* _tmp189_;
+					ValaDelegateType* _tmp190_;
+					gboolean _tmp191_;
+					gboolean _tmp192_;
+					_tmp183_ = _result_;
+					_tmp184_ = vala_ccode_identifier_new ("_data_");
+					_tmp185_ = _tmp184_;
+					_tmp186_ = param;
+					_tmp187_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp186_);
+					_tmp188_ = _tmp187_;
+					_tmp189_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp185_, _tmp188_);
+					_vala_ccode_node_unref0 (_tmp183_->delegate_target_cvalue);
+					_tmp183_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp189_;
+					_g_free0 (_tmp188_);
+					_vala_ccode_node_unref0 (_tmp185_);
+					_tmp190_ = delegate_type;
+					_tmp191_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp190_);
 					_tmp192_ = _tmp191_;
-					_tmp193_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp192_);
-					_tmp194_ = _tmp193_;
-					_tmp195_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp194_);
-					_tmp196_ = _tmp195_;
-					_tmp197_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp189_, _tmp196_);
-					_vala_ccode_node_unref0 (_tmp187_->delegate_target_cvalue);
-					_tmp187_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp197_;
-					_g_free0 (_tmp196_);
-					_g_free0 (_tmp194_);
-					_vala_ccode_node_unref0 (_tmp189_);
-					_tmp198_ = delegate_type;
-					_tmp199_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp198_);
-					_tmp200_ = _tmp199_;
-					if (_tmp200_) {
-						ValaGLibValue* _tmp201_;
-						ValaCCodeIdentifier* _tmp202_;
-						ValaCCodeIdentifier* _tmp203_;
-						ValaParameter* _tmp204_;
-						const gchar* _tmp205_;
-						const gchar* _tmp206_;
-						gchar* _tmp207_ = NULL;
-						gchar* _tmp208_;
-						gchar* _tmp209_ = NULL;
-						gchar* _tmp210_;
-						ValaCCodeMemberAccess* _tmp211_;
-						_tmp201_ = _result_;
-						_tmp202_ = vala_ccode_identifier_new ("_data_");
-						_tmp203_ = _tmp202_;
-						_tmp204_ = param;
-						_tmp205_ = vala_symbol_get_name ((ValaSymbol*) _tmp204_);
-						_tmp206_ = _tmp205_;
-						_tmp207_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp206_);
-						_tmp208_ = _tmp207_;
-						_tmp209_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp208_);
-						_tmp210_ = _tmp209_;
-						_tmp211_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp203_, _tmp210_);
-						_vala_ccode_node_unref0 (_tmp201_->delegate_target_destroy_notify_cvalue);
-						_tmp201_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp211_;
-						_g_free0 (_tmp210_);
-						_g_free0 (_tmp208_);
-						_vala_ccode_node_unref0 (_tmp203_);
+					if (_tmp192_) {
+						ValaGLibValue* _tmp193_;
+						ValaCCodeIdentifier* _tmp194_;
+						ValaCCodeIdentifier* _tmp195_;
+						ValaParameter* _tmp196_;
+						const gchar* _tmp197_;
+						const gchar* _tmp198_;
+						gchar* _tmp199_ = NULL;
+						gchar* _tmp200_;
+						gchar* _tmp201_ = NULL;
+						gchar* _tmp202_;
+						ValaCCodeMemberAccess* _tmp203_;
+						_tmp193_ = _result_;
+						_tmp194_ = vala_ccode_identifier_new ("_data_");
+						_tmp195_ = _tmp194_;
+						_tmp196_ = param;
+						_tmp197_ = vala_symbol_get_name ((ValaSymbol*) _tmp196_);
+						_tmp198_ = _tmp197_;
+						_tmp199_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp198_);
+						_tmp200_ = _tmp199_;
+						_tmp201_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp200_);
+						_tmp202_ = _tmp201_;
+						_tmp203_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp195_, _tmp202_);
+						_vala_ccode_node_unref0 (_tmp193_->delegate_target_destroy_notify_cvalue);
+						_tmp193_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp203_;
+						_g_free0 (_tmp202_);
+						_g_free0 (_tmp200_);
+						_vala_ccode_node_unref0 (_tmp195_);
 					}
 				}
 			} else {
-				ValaGLibValue* _tmp212_;
-				ValaDataType* _tmp213_;
-				ValaDataType* _tmp214_;
-				ValaTypeSymbol* _tmp215_;
-				ValaTypeSymbol* _tmp216_;
-				ValaStruct* _tmp217_;
+				ValaGLibValue* _tmp204_;
+				ValaDataType* _tmp205_;
+				ValaDataType* _tmp206_;
+				ValaTypeSymbol* _tmp207_;
+				ValaTypeSymbol* _tmp208_;
+				ValaStruct* _tmp209_;
 				ValaStruct* type_as_struct;
-				ValaParameter* _tmp218_;
-				ValaParameterDirection _tmp219_;
-				ValaParameterDirection _tmp220_;
-				gboolean _tmp223_ = FALSE;
-				ValaParameter* _tmp224_;
-				ValaParameterDirection _tmp225_;
-				ValaParameterDirection _tmp226_;
-				gboolean _tmp244_;
-				gboolean _tmp293_ = FALSE;
-				ValaDelegateType* _tmp294_;
-				gboolean _tmp300_;
-				_tmp212_ = _result_;
-				_tmp213_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp212_);
-				_tmp214_ = _tmp213_;
-				_tmp215_ = vala_data_type_get_data_type (_tmp214_);
-				_tmp216_ = _tmp215_;
-				_tmp217_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp216_) ? ((ValaStruct*) _tmp216_) : NULL);
-				type_as_struct = _tmp217_;
-				_tmp218_ = param;
-				_tmp219_ = vala_parameter_get_direction (_tmp218_);
-				_tmp220_ = _tmp219_;
-				if (_tmp220_ == VALA_PARAMETER_DIRECTION_OUT) {
-					const gchar* _tmp221_;
-					gchar* _tmp222_;
-					_tmp221_ = name;
-					_tmp222_ = g_strconcat ("_vala_", _tmp221_, NULL);
+				ValaParameter* _tmp210_;
+				ValaParameterDirection _tmp211_;
+				ValaParameterDirection _tmp212_;
+				gboolean _tmp215_ = FALSE;
+				ValaParameter* _tmp216_;
+				ValaParameterDirection _tmp217_;
+				ValaParameterDirection _tmp218_;
+				gboolean _tmp236_;
+				gboolean _tmp285_ = FALSE;
+				ValaDelegateType* _tmp286_;
+				gboolean _tmp292_;
+				_tmp204_ = _result_;
+				_tmp205_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp204_);
+				_tmp206_ = _tmp205_;
+				_tmp207_ = vala_data_type_get_data_type (_tmp206_);
+				_tmp208_ = _tmp207_;
+				_tmp209_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp208_) ? ((ValaStruct*) _tmp208_) : NULL);
+				type_as_struct = _tmp209_;
+				_tmp210_ = param;
+				_tmp211_ = vala_parameter_get_direction (_tmp210_);
+				_tmp212_ = _tmp211_;
+				if (_tmp212_ == VALA_PARAMETER_DIRECTION_OUT) {
+					const gchar* _tmp213_;
+					gchar* _tmp214_;
+					_tmp213_ = name;
+					_tmp214_ = g_strconcat ("_vala_", _tmp213_, NULL);
 					_g_free0 (name);
-					name = _tmp222_;
+					name = _tmp214_;
 				}
-				_tmp224_ = param;
-				_tmp225_ = vala_parameter_get_direction (_tmp224_);
-				_tmp226_ = _tmp225_;
-				if (_tmp226_ == VALA_PARAMETER_DIRECTION_REF) {
-					_tmp223_ = TRUE;
+				_tmp216_ = param;
+				_tmp217_ = vala_parameter_get_direction (_tmp216_);
+				_tmp218_ = _tmp217_;
+				if (_tmp218_ == VALA_PARAMETER_DIRECTION_REF) {
+					_tmp215_ = TRUE;
 				} else {
-					gboolean _tmp227_ = FALSE;
-					gboolean _tmp228_ = FALSE;
-					gboolean _tmp229_ = FALSE;
-					ValaParameter* _tmp230_;
-					ValaParameterDirection _tmp231_;
-					ValaParameterDirection _tmp232_;
-					gboolean _tmp234_;
-					gboolean _tmp237_;
-					gboolean _tmp243_;
-					_tmp230_ = param;
-					_tmp231_ = vala_parameter_get_direction (_tmp230_);
-					_tmp232_ = _tmp231_;
-					if (_tmp232_ == VALA_PARAMETER_DIRECTION_IN) {
-						ValaStruct* _tmp233_;
-						_tmp233_ = type_as_struct;
-						_tmp229_ = _tmp233_ != NULL;
+					gboolean _tmp219_ = FALSE;
+					gboolean _tmp220_ = FALSE;
+					gboolean _tmp221_ = FALSE;
+					ValaParameter* _tmp222_;
+					ValaParameterDirection _tmp223_;
+					ValaParameterDirection _tmp224_;
+					gboolean _tmp226_;
+					gboolean _tmp229_;
+					gboolean _tmp235_;
+					_tmp222_ = param;
+					_tmp223_ = vala_parameter_get_direction (_tmp222_);
+					_tmp224_ = _tmp223_;
+					if (_tmp224_ == VALA_PARAMETER_DIRECTION_IN) {
+						ValaStruct* _tmp225_;
+						_tmp225_ = type_as_struct;
+						_tmp221_ = _tmp225_ != NULL;
 					} else {
-						_tmp229_ = FALSE;
+						_tmp221_ = FALSE;
 					}
-					_tmp234_ = _tmp229_;
-					if (_tmp234_) {
-						ValaStruct* _tmp235_;
-						gboolean _tmp236_ = FALSE;
-						_tmp235_ = type_as_struct;
-						_tmp236_ = vala_struct_is_simple_type (_tmp235_);
-						_tmp228_ = !_tmp236_;
+					_tmp226_ = _tmp221_;
+					if (_tmp226_) {
+						ValaStruct* _tmp227_;
+						gboolean _tmp228_ = FALSE;
+						_tmp227_ = type_as_struct;
+						_tmp228_ = vala_struct_is_simple_type (_tmp227_);
+						_tmp220_ = !_tmp228_;
 					} else {
-						_tmp228_ = FALSE;
+						_tmp220_ = FALSE;
 					}
-					_tmp237_ = _tmp228_;
-					if (_tmp237_) {
-						ValaGLibValue* _tmp238_;
-						ValaDataType* _tmp239_;
-						ValaDataType* _tmp240_;
-						gboolean _tmp241_;
-						gboolean _tmp242_;
-						_tmp238_ = _result_;
-						_tmp239_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp238_);
-						_tmp240_ = _tmp239_;
-						_tmp241_ = vala_data_type_get_nullable (_tmp240_);
-						_tmp242_ = _tmp241_;
-						_tmp227_ = !_tmp242_;
+					_tmp229_ = _tmp220_;
+					if (_tmp229_) {
+						ValaGLibValue* _tmp230_;
+						ValaDataType* _tmp231_;
+						ValaDataType* _tmp232_;
+						gboolean _tmp233_;
+						gboolean _tmp234_;
+						_tmp230_ = _result_;
+						_tmp231_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp230_);
+						_tmp232_ = _tmp231_;
+						_tmp233_ = vala_data_type_get_nullable (_tmp232_);
+						_tmp234_ = _tmp233_;
+						_tmp219_ = !_tmp234_;
 					} else {
-						_tmp227_ = FALSE;
+						_tmp219_ = FALSE;
 					}
-					_tmp243_ = _tmp227_;
-					_tmp223_ = _tmp243_;
+					_tmp235_ = _tmp219_;
+					_tmp215_ = _tmp235_;
 				}
-				_tmp244_ = _tmp223_;
-				if (_tmp244_) {
-					ValaGLibValue* _tmp245_;
-					const gchar* _tmp246_;
-					gchar* _tmp247_ = NULL;
-					gchar* _tmp248_;
-					ValaCCodeIdentifier* _tmp249_;
-					ValaCCodeIdentifier* _tmp250_;
-					ValaCCodeUnaryExpression* _tmp251_;
-					_tmp245_ = _result_;
-					_tmp246_ = name;
-					_tmp247_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp246_);
-					_tmp248_ = _tmp247_;
-					_tmp249_ = vala_ccode_identifier_new (_tmp248_);
-					_tmp250_ = _tmp249_;
-					_tmp251_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp250_);
-					_vala_ccode_node_unref0 (_tmp245_->cvalue);
-					_tmp245_->cvalue = (ValaCCodeExpression*) _tmp251_;
-					_vala_ccode_node_unref0 (_tmp250_);
-					_g_free0 (_tmp248_);
+				_tmp236_ = _tmp215_;
+				if (_tmp236_) {
+					ValaGLibValue* _tmp237_;
+					const gchar* _tmp238_;
+					gchar* _tmp239_ = NULL;
+					gchar* _tmp240_;
+					ValaCCodeIdentifier* _tmp241_;
+					ValaCCodeIdentifier* _tmp242_;
+					ValaCCodeUnaryExpression* _tmp243_;
+					_tmp237_ = _result_;
+					_tmp238_ = name;
+					_tmp239_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp238_);
+					_tmp240_ = _tmp239_;
+					_tmp241_ = vala_ccode_identifier_new (_tmp240_);
+					_tmp242_ = _tmp241_;
+					_tmp243_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp242_);
+					_vala_ccode_node_unref0 (_tmp237_->cvalue);
+					_tmp237_->cvalue = (ValaCCodeExpression*) _tmp243_;
+					_vala_ccode_node_unref0 (_tmp242_);
+					_g_free0 (_tmp240_);
 				} else {
-					gboolean _tmp252_ = FALSE;
-					gboolean _tmp253_ = FALSE;
-					gboolean _tmp254_ = FALSE;
-					gboolean _tmp255_ = FALSE;
-					ValaPropertyAccessor* _tmp256_;
-					ValaPropertyAccessor* _tmp257_;
-					gboolean _tmp262_;
+					gboolean _tmp244_ = FALSE;
+					gboolean _tmp245_ = FALSE;
+					gboolean _tmp246_ = FALSE;
+					gboolean _tmp247_ = FALSE;
+					ValaPropertyAccessor* _tmp248_;
+					ValaPropertyAccessor* _tmp249_;
+					gboolean _tmp254_;
+					gboolean _tmp260_;
 					gboolean _tmp268_;
-					gboolean _tmp276_;
-					gboolean _tmp285_;
-					_tmp256_ = vala_ccode_base_module_get_current_property_accessor ((ValaCCodeBaseModule*) self);
-					_tmp257_ = _tmp256_;
-					if (_tmp257_ != NULL) {
-						ValaPropertyAccessor* _tmp258_;
-						ValaPropertyAccessor* _tmp259_;
-						gboolean _tmp260_;
-						gboolean _tmp261_;
-						_tmp258_ = vala_ccode_base_module_get_current_property_accessor ((ValaCCodeBaseModule*) self);
-						_tmp259_ = _tmp258_;
-						_tmp260_ = vala_property_accessor_get_writable (_tmp259_);
-						_tmp261_ = _tmp260_;
-						_tmp255_ = _tmp261_;
+					gboolean _tmp277_;
+					_tmp248_ = vala_ccode_base_module_get_current_property_accessor ((ValaCCodeBaseModule*) self);
+					_tmp249_ = _tmp248_;
+					if (_tmp249_ != NULL) {
+						ValaPropertyAccessor* _tmp250_;
+						ValaPropertyAccessor* _tmp251_;
+						gboolean _tmp252_;
+						gboolean _tmp253_;
+						_tmp250_ = vala_ccode_base_module_get_current_property_accessor ((ValaCCodeBaseModule*) self);
+						_tmp251_ = _tmp250_;
+						_tmp252_ = vala_property_accessor_get_writable (_tmp251_);
+						_tmp253_ = _tmp252_;
+						_tmp247_ = _tmp253_;
+					} else {
+						_tmp247_ = FALSE;
+					}
+					_tmp254_ = _tmp247_;
+					if (_tmp254_) {
+						ValaPropertyAccessor* _tmp255_;
+						ValaPropertyAccessor* _tmp256_;
+						ValaParameter* _tmp257_;
+						ValaParameter* _tmp258_;
+						ValaParameter* _tmp259_;
+						_tmp255_ = vala_ccode_base_module_get_current_property_accessor ((ValaCCodeBaseModule*) self);
+						_tmp256_ = _tmp255_;
+						_tmp257_ = vala_property_accessor_get_value_parameter (_tmp256_);
+						_tmp258_ = _tmp257_;
+						_tmp259_ = param;
+						_tmp246_ = _tmp258_ == _tmp259_;
 					} else {
-						_tmp255_ = FALSE;
+						_tmp246_ = FALSE;
 					}
-					_tmp262_ = _tmp255_;
-					if (_tmp262_) {
-						ValaPropertyAccessor* _tmp263_;
-						ValaPropertyAccessor* _tmp264_;
-						ValaParameter* _tmp265_;
-						ValaParameter* _tmp266_;
-						ValaParameter* _tmp267_;
-						_tmp263_ = vala_ccode_base_module_get_current_property_accessor ((ValaCCodeBaseModule*) self);
+					_tmp260_ = _tmp246_;
+					if (_tmp260_) {
+						ValaPropertyAccessor* _tmp261_;
+						ValaPropertyAccessor* _tmp262_;
+						ValaProperty* _tmp263_;
+						ValaProperty* _tmp264_;
+						ValaDataType* _tmp265_;
+						ValaDataType* _tmp266_;
+						gboolean _tmp267_ = FALSE;
+						_tmp261_ = vala_ccode_base_module_get_current_property_accessor ((ValaCCodeBaseModule*) self);
+						_tmp262_ = _tmp261_;
+						_tmp263_ = vala_property_accessor_get_prop (_tmp262_);
 						_tmp264_ = _tmp263_;
-						_tmp265_ = vala_property_accessor_get_value_parameter (_tmp264_);
+						_tmp265_ = vala_property_get_property_type (_tmp264_);
 						_tmp266_ = _tmp265_;
-						_tmp267_ = param;
-						_tmp254_ = _tmp266_ == _tmp267_;
+						_tmp267_ = vala_data_type_is_real_struct_type (_tmp266_);
+						_tmp245_ = _tmp267_;
 					} else {
-						_tmp254_ = FALSE;
+						_tmp245_ = FALSE;
 					}
-					_tmp268_ = _tmp254_;
+					_tmp268_ = _tmp245_;
 					if (_tmp268_) {
 						ValaPropertyAccessor* _tmp269_;
 						ValaPropertyAccessor* _tmp270_;
@@ -4135,288 +4134,277 @@ static ValaTargetValue* vala_ccode_member_access_module_real_get_parameter_cvalu
 						ValaProperty* _tmp272_;
 						ValaDataType* _tmp273_;
 						ValaDataType* _tmp274_;
-						gboolean _tmp275_ = FALSE;
+						gboolean _tmp275_;
+						gboolean _tmp276_;
 						_tmp269_ = vala_ccode_base_module_get_current_property_accessor ((ValaCCodeBaseModule*) self);
 						_tmp270_ = _tmp269_;
 						_tmp271_ = vala_property_accessor_get_prop (_tmp270_);
 						_tmp272_ = _tmp271_;
 						_tmp273_ = vala_property_get_property_type (_tmp272_);
 						_tmp274_ = _tmp273_;
-						_tmp275_ = vala_data_type_is_real_struct_type (_tmp274_);
-						_tmp253_ = _tmp275_;
+						_tmp275_ = vala_data_type_get_nullable (_tmp274_);
+						_tmp276_ = _tmp275_;
+						_tmp244_ = !_tmp276_;
 					} else {
-						_tmp253_ = FALSE;
+						_tmp244_ = FALSE;
 					}
-					_tmp276_ = _tmp253_;
-					if (_tmp276_) {
-						ValaPropertyAccessor* _tmp277_;
-						ValaPropertyAccessor* _tmp278_;
-						ValaProperty* _tmp279_;
-						ValaProperty* _tmp280_;
-						ValaDataType* _tmp281_;
-						ValaDataType* _tmp282_;
-						gboolean _tmp283_;
-						gboolean _tmp284_;
-						_tmp277_ = vala_ccode_base_module_get_current_property_accessor ((ValaCCodeBaseModule*) self);
-						_tmp278_ = _tmp277_;
-						_tmp279_ = vala_property_accessor_get_prop (_tmp278_);
+					_tmp277_ = _tmp244_;
+					if (_tmp277_) {
+						ValaGLibValue* _tmp278_;
+						ValaCCodeIdentifier* _tmp279_;
+						ValaCCodeIdentifier* _tmp280_;
+						ValaCCodeUnaryExpression* _tmp281_;
+						_tmp278_ = _result_;
+						_tmp279_ = vala_ccode_identifier_new ("value");
 						_tmp280_ = _tmp279_;
-						_tmp281_ = vala_property_get_property_type (_tmp280_);
-						_tmp282_ = _tmp281_;
-						_tmp283_ = vala_data_type_get_nullable (_tmp282_);
-						_tmp284_ = _tmp283_;
-						_tmp252_ = !_tmp284_;
+						_tmp281_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp280_);
+						_vala_ccode_node_unref0 (_tmp278_->cvalue);
+						_tmp278_->cvalue = (ValaCCodeExpression*) _tmp281_;
+						_vala_ccode_node_unref0 (_tmp280_);
 					} else {
-						_tmp252_ = FALSE;
-					}
-					_tmp285_ = _tmp252_;
-					if (_tmp285_) {
-						ValaGLibValue* _tmp286_;
-						ValaCCodeIdentifier* _tmp287_;
-						ValaCCodeIdentifier* _tmp288_;
-						ValaCCodeUnaryExpression* _tmp289_;
-						_tmp286_ = _result_;
-						_tmp287_ = vala_ccode_identifier_new ("value");
-						_tmp288_ = _tmp287_;
-						_tmp289_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (ValaCCodeExpression*) _tmp288_);
-						_vala_ccode_node_unref0 (_tmp286_->cvalue);
-						_tmp286_->cvalue = (ValaCCodeExpression*) _tmp289_;
-						_vala_ccode_node_unref0 (_tmp288_);
-					} else {
-						ValaGLibValue* _tmp290_;
-						const gchar* _tmp291_;
-						ValaCCodeExpression* _tmp292_ = NULL;
-						_tmp290_ = _result_;
-						_tmp291_ = name;
-						_tmp292_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp291_);
-						_vala_ccode_node_unref0 (_tmp290_->cvalue);
-						_tmp290_->cvalue = _tmp292_;
+						ValaGLibValue* _tmp282_;
+						const gchar* _tmp283_;
+						ValaCCodeExpression* _tmp284_ = NULL;
+						_tmp282_ = _result_;
+						_tmp283_ = name;
+						_tmp284_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp283_);
+						_vala_ccode_node_unref0 (_tmp282_->cvalue);
+						_tmp282_->cvalue = _tmp284_;
 					}
 				}
-				_tmp294_ = delegate_type;
-				if (_tmp294_ != NULL) {
-					ValaDelegateType* _tmp295_;
-					ValaDelegate* _tmp296_;
-					ValaDelegate* _tmp297_;
-					gboolean _tmp298_;
-					gboolean _tmp299_;
-					_tmp295_ = delegate_type;
-					_tmp296_ = vala_delegate_type_get_delegate_symbol (_tmp295_);
-					_tmp297_ = _tmp296_;
-					_tmp298_ = vala_delegate_get_has_target (_tmp297_);
-					_tmp299_ = _tmp298_;
-					_tmp293_ = _tmp299_;
+				_tmp286_ = delegate_type;
+				if (_tmp286_ != NULL) {
+					ValaDelegateType* _tmp287_;
+					ValaDelegate* _tmp288_;
+					ValaDelegate* _tmp289_;
+					gboolean _tmp290_;
+					gboolean _tmp291_;
+					_tmp287_ = delegate_type;
+					_tmp288_ = vala_delegate_type_get_delegate_symbol (_tmp287_);
+					_tmp289_ = _tmp288_;
+					_tmp290_ = vala_delegate_get_has_target (_tmp289_);
+					_tmp291_ = _tmp290_;
+					_tmp285_ = _tmp291_;
 				} else {
-					_tmp293_ = FALSE;
+					_tmp285_ = FALSE;
 				}
-				_tmp300_ = _tmp293_;
-				if (_tmp300_) {
-					const gchar* _tmp301_;
-					gchar* _tmp302_ = NULL;
-					gchar* _tmp303_;
-					gchar* _tmp304_ = NULL;
-					gchar* _tmp305_;
-					ValaCCodeIdentifier* _tmp306_;
-					ValaCCodeExpression* _tmp307_;
+				_tmp292_ = _tmp285_;
+				if (_tmp292_) {
+					ValaParameter* _tmp293_;
+					gchar* _tmp294_ = NULL;
+					gchar* target_cname;
+					ValaParameter* _tmp295_;
+					ValaParameterDirection _tmp296_;
+					ValaParameterDirection _tmp297_;
+					const gchar* _tmp300_;
+					ValaCCodeIdentifier* _tmp301_;
 					ValaCCodeExpression* target_expr;
-					const gchar* _tmp308_;
-					gchar* _tmp309_ = NULL;
-					gchar* _tmp310_;
-					gchar* _tmp311_ = NULL;
-					gchar* _tmp312_;
-					ValaCCodeIdentifier* _tmp313_;
-					ValaCCodeExpression* _tmp314_;
+					const gchar* _tmp302_;
+					gchar* _tmp303_ = NULL;
+					gchar* _tmp304_;
+					gchar* _tmp305_ = NULL;
+					gchar* _tmp306_;
+					ValaCCodeIdentifier* _tmp307_;
+					ValaCCodeExpression* _tmp308_;
 					ValaCCodeExpression* delegate_target_destroy_notify;
-					ValaParameter* _tmp315_;
-					ValaParameterDirection _tmp316_;
-					ValaParameterDirection _tmp317_;
-					ValaGLibValue* _tmp322_;
-					ValaCCodeExpression* _tmp323_;
-					ValaCCodeExpression* _tmp324_;
-					ValaGLibValue* _tmp325_;
-					ValaDataType* _tmp326_;
-					ValaDataType* _tmp327_;
-					gboolean _tmp328_;
-					gboolean _tmp329_;
-					_tmp301_ = name;
-					_tmp302_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp301_);
-					_tmp303_ = _tmp302_;
-					_tmp304_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp303_);
-					_tmp305_ = _tmp304_;
-					_tmp306_ = vala_ccode_identifier_new (_tmp305_);
-					_tmp307_ = (ValaCCodeExpression*) _tmp306_;
-					_g_free0 (_tmp305_);
-					_g_free0 (_tmp303_);
-					target_expr = _tmp307_;
-					_tmp308_ = name;
-					_tmp309_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp308_);
-					_tmp310_ = _tmp309_;
-					_tmp311_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp310_);
-					_tmp312_ = _tmp311_;
-					_tmp313_ = vala_ccode_identifier_new (_tmp312_);
-					_tmp314_ = (ValaCCodeExpression*) _tmp313_;
-					_g_free0 (_tmp312_);
-					_g_free0 (_tmp310_);
-					delegate_target_destroy_notify = _tmp314_;
-					_tmp315_ = param;
-					_tmp316_ = vala_parameter_get_direction (_tmp315_);
-					_tmp317_ = _tmp316_;
-					if (_tmp317_ == VALA_PARAMETER_DIRECTION_REF) {
-						ValaCCodeExpression* _tmp318_;
-						ValaCCodeUnaryExpression* _tmp319_;
-						ValaCCodeExpression* _tmp320_;
-						ValaCCodeUnaryExpression* _tmp321_;
-						_tmp318_ = target_expr;
-						_tmp319_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp318_);
+					ValaParameter* _tmp309_;
+					ValaParameterDirection _tmp310_;
+					ValaParameterDirection _tmp311_;
+					ValaGLibValue* _tmp316_;
+					ValaCCodeExpression* _tmp317_;
+					ValaCCodeExpression* _tmp318_;
+					ValaGLibValue* _tmp319_;
+					ValaDataType* _tmp320_;
+					ValaDataType* _tmp321_;
+					gboolean _tmp322_;
+					gboolean _tmp323_;
+					_tmp293_ = param;
+					_tmp294_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp293_);
+					target_cname = _tmp294_;
+					_tmp295_ = param;
+					_tmp296_ = vala_parameter_get_direction (_tmp295_);
+					_tmp297_ = _tmp296_;
+					if (_tmp297_ == VALA_PARAMETER_DIRECTION_OUT) {
+						const gchar* _tmp298_;
+						gchar* _tmp299_;
+						_tmp298_ = target_cname;
+						_tmp299_ = g_strconcat ("_vala_", _tmp298_, NULL);
+						_g_free0 (target_cname);
+						target_cname = _tmp299_;
+					}
+					_tmp300_ = target_cname;
+					_tmp301_ = vala_ccode_identifier_new (_tmp300_);
+					target_expr = (ValaCCodeExpression*) _tmp301_;
+					_tmp302_ = name;
+					_tmp303_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp302_);
+					_tmp304_ = _tmp303_;
+					_tmp305_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp304_);
+					_tmp306_ = _tmp305_;
+					_tmp307_ = vala_ccode_identifier_new (_tmp306_);
+					_tmp308_ = (ValaCCodeExpression*) _tmp307_;
+					_g_free0 (_tmp306_);
+					_g_free0 (_tmp304_);
+					delegate_target_destroy_notify = _tmp308_;
+					_tmp309_ = param;
+					_tmp310_ = vala_parameter_get_direction (_tmp309_);
+					_tmp311_ = _tmp310_;
+					if (_tmp311_ == VALA_PARAMETER_DIRECTION_REF) {
+						ValaCCodeExpression* _tmp312_;
+						ValaCCodeUnaryExpression* _tmp313_;
+						ValaCCodeExpression* _tmp314_;
+						ValaCCodeUnaryExpression* _tmp315_;
+						_tmp312_ = target_expr;
+						_tmp313_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp312_);
 						_vala_ccode_node_unref0 (target_expr);
-						target_expr = (ValaCCodeExpression*) _tmp319_;
-						_tmp320_ = delegate_target_destroy_notify;
-						_tmp321_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp320_);
+						target_expr = (ValaCCodeExpression*) _tmp313_;
+						_tmp314_ = delegate_target_destroy_notify;
+						_tmp315_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp314_);
 						_vala_ccode_node_unref0 (delegate_target_destroy_notify);
-						delegate_target_destroy_notify = (ValaCCodeExpression*) _tmp321_;
+						delegate_target_destroy_notify = (ValaCCodeExpression*) _tmp315_;
 					}
-					_tmp322_ = _result_;
-					_tmp323_ = target_expr;
-					_tmp324_ = _vala_ccode_node_ref0 (_tmp323_);
-					_vala_ccode_node_unref0 (_tmp322_->delegate_target_cvalue);
-					_tmp322_->delegate_target_cvalue = _tmp324_;
-					_tmp325_ = _result_;
-					_tmp326_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp325_);
-					_tmp327_ = _tmp326_;
-					_tmp328_ = vala_data_type_get_value_owned (_tmp327_);
-					_tmp329_ = _tmp328_;
-					if (_tmp329_) {
-						ValaGLibValue* _tmp330_;
-						ValaCCodeExpression* _tmp331_;
-						ValaCCodeExpression* _tmp332_;
-						_tmp330_ = _result_;
-						_tmp331_ = delegate_target_destroy_notify;
-						_tmp332_ = _vala_ccode_node_ref0 (_tmp331_);
-						_vala_ccode_node_unref0 (_tmp330_->delegate_target_destroy_notify_cvalue);
-						_tmp330_->delegate_target_destroy_notify_cvalue = _tmp332_;
+					_tmp316_ = _result_;
+					_tmp317_ = target_expr;
+					_tmp318_ = _vala_ccode_node_ref0 (_tmp317_);
+					_vala_ccode_node_unref0 (_tmp316_->delegate_target_cvalue);
+					_tmp316_->delegate_target_cvalue = _tmp318_;
+					_tmp319_ = _result_;
+					_tmp320_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp319_);
+					_tmp321_ = _tmp320_;
+					_tmp322_ = vala_data_type_get_value_owned (_tmp321_);
+					_tmp323_ = _tmp322_;
+					if (_tmp323_) {
+						ValaGLibValue* _tmp324_;
+						ValaCCodeExpression* _tmp325_;
+						ValaCCodeExpression* _tmp326_;
+						_tmp324_ = _result_;
+						_tmp325_ = delegate_target_destroy_notify;
+						_tmp326_ = _vala_ccode_node_ref0 (_tmp325_);
+						_vala_ccode_node_unref0 (_tmp324_->delegate_target_destroy_notify_cvalue);
+						_tmp324_->delegate_target_destroy_notify_cvalue = _tmp326_;
 					}
 					_vala_ccode_node_unref0 (delegate_target_destroy_notify);
 					_vala_ccode_node_unref0 (target_expr);
+					_g_free0 (target_cname);
 				}
 				_vala_code_node_unref0 (type_as_struct);
 			}
 		}
-		_tmp334_ = param;
-		_tmp335_ = vala_parameter_get_captured (_tmp334_);
-		_tmp336_ = _tmp335_;
-		if (!_tmp336_) {
-			ValaArrayType* _tmp337_;
-			_tmp337_ = array_type;
-			_tmp333_ = _tmp337_ != NULL;
+		_tmp328_ = param;
+		_tmp329_ = vala_parameter_get_captured (_tmp328_);
+		_tmp330_ = _tmp329_;
+		if (!_tmp330_) {
+			ValaArrayType* _tmp331_;
+			_tmp331_ = array_type;
+			_tmp327_ = _tmp331_ != NULL;
 		} else {
-			_tmp333_ = FALSE;
+			_tmp327_ = FALSE;
 		}
-		_tmp338_ = _tmp333_;
-		if (_tmp338_) {
-			gboolean _tmp339_ = FALSE;
-			ValaParameter* _tmp340_;
-			gboolean _tmp341_ = FALSE;
-			gboolean _tmp344_;
-			_tmp340_ = param;
-			_tmp341_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp340_);
-			if (_tmp341_) {
-				ValaParameter* _tmp342_;
-				gboolean _tmp343_ = FALSE;
-				_tmp342_ = param;
-				_tmp343_ = vala_ccode_base_module_get_ccode_array_null_terminated ((ValaCodeNode*) _tmp342_);
-				_tmp339_ = !_tmp343_;
+		_tmp332_ = _tmp327_;
+		if (_tmp332_) {
+			gboolean _tmp333_ = FALSE;
+			ValaParameter* _tmp334_;
+			gboolean _tmp335_ = FALSE;
+			gboolean _tmp338_;
+			_tmp334_ = param;
+			_tmp335_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp334_);
+			if (_tmp335_) {
+				ValaParameter* _tmp336_;
+				gboolean _tmp337_ = FALSE;
+				_tmp336_ = param;
+				_tmp337_ = vala_ccode_base_module_get_ccode_array_null_terminated ((ValaCodeNode*) _tmp336_);
+				_tmp333_ = !_tmp337_;
 			} else {
-				_tmp339_ = FALSE;
+				_tmp333_ = FALSE;
 			}
-			_tmp344_ = _tmp339_;
-			if (_tmp344_) {
+			_tmp338_ = _tmp333_;
+			if (_tmp338_) {
 				{
 					gint dim;
 					dim = 1;
 					{
-						gboolean _tmp345_;
-						_tmp345_ = TRUE;
+						gboolean _tmp339_;
+						_tmp339_ = TRUE;
 						while (TRUE) {
-							gboolean _tmp346_;
-							gint _tmp348_;
-							ValaArrayType* _tmp349_;
-							gint _tmp350_;
-							gint _tmp351_;
-							ValaParameter* _tmp352_;
-							gint _tmp353_;
-							gchar* _tmp354_ = NULL;
-							gchar* _tmp355_;
-							ValaCCodeExpression* _tmp356_ = NULL;
-							ValaCCodeExpression* _tmp357_;
+							gboolean _tmp340_;
+							gint _tmp342_;
+							ValaArrayType* _tmp343_;
+							gint _tmp344_;
+							gint _tmp345_;
+							ValaParameter* _tmp346_;
+							gint _tmp347_;
+							gchar* _tmp348_ = NULL;
+							gchar* _tmp349_;
+							ValaCCodeExpression* _tmp350_ = NULL;
+							ValaCCodeExpression* _tmp351_;
 							ValaCCodeExpression* length_expr;
-							ValaParameter* _tmp358_;
-							ValaParameterDirection _tmp359_;
-							ValaParameterDirection _tmp360_;
-							ValaGLibValue* _tmp373_;
-							ValaCCodeExpression* _tmp374_;
-							_tmp346_ = _tmp345_;
-							if (!_tmp346_) {
-								gint _tmp347_;
-								_tmp347_ = dim;
-								dim = _tmp347_ + 1;
+							ValaParameter* _tmp352_;
+							ValaParameterDirection _tmp353_;
+							ValaParameterDirection _tmp354_;
+							ValaGLibValue* _tmp367_;
+							ValaCCodeExpression* _tmp368_;
+							_tmp340_ = _tmp339_;
+							if (!_tmp340_) {
+								gint _tmp341_;
+								_tmp341_ = dim;
+								dim = _tmp341_ + 1;
 							}
-							_tmp345_ = FALSE;
-							_tmp348_ = dim;
-							_tmp349_ = array_type;
-							_tmp350_ = vala_array_type_get_rank (_tmp349_);
-							_tmp351_ = _tmp350_;
-							if (!(_tmp348_ <= _tmp351_)) {
+							_tmp339_ = FALSE;
+							_tmp342_ = dim;
+							_tmp343_ = array_type;
+							_tmp344_ = vala_array_type_get_rank (_tmp343_);
+							_tmp345_ = _tmp344_;
+							if (!(_tmp342_ <= _tmp345_)) {
 								break;
 							}
+							_tmp346_ = param;
+							_tmp347_ = dim;
+							_tmp348_ = vala_ccode_base_module_get_parameter_array_length_cname ((ValaCCodeBaseModule*) self, _tmp346_, _tmp347_);
+							_tmp349_ = _tmp348_;
+							_tmp350_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp349_);
+							_tmp351_ = _tmp350_;
+							_g_free0 (_tmp349_);
+							length_expr = _tmp351_;
 							_tmp352_ = param;
-							_tmp353_ = dim;
-							_tmp354_ = vala_ccode_base_module_get_parameter_array_length_cname ((ValaCCodeBaseModule*) self, _tmp352_, _tmp353_);
-							_tmp355_ = _tmp354_;
-							_tmp356_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp355_);
-							_tmp357_ = _tmp356_;
-							_g_free0 (_tmp355_);
-							length_expr = _tmp357_;
-							_tmp358_ = param;
-							_tmp359_ = vala_parameter_get_direction (_tmp358_);
-							_tmp360_ = _tmp359_;
-							if (_tmp360_ == VALA_PARAMETER_DIRECTION_OUT) {
-								const gchar* _tmp361_;
-								gchar* _tmp362_ = NULL;
-								gchar* _tmp363_;
-								gint _tmp364_;
-								gchar* _tmp365_ = NULL;
-								gchar* _tmp366_;
-								ValaCCodeExpression* _tmp367_ = NULL;
-								_tmp361_ = name;
-								_tmp362_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp361_);
-								_tmp363_ = _tmp362_;
-								_tmp364_ = dim;
-								_tmp365_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, _tmp363_, _tmp364_);
-								_tmp366_ = _tmp365_;
-								_tmp367_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp366_);
+							_tmp353_ = vala_parameter_get_direction (_tmp352_);
+							_tmp354_ = _tmp353_;
+							if (_tmp354_ == VALA_PARAMETER_DIRECTION_OUT) {
+								const gchar* _tmp355_;
+								gchar* _tmp356_ = NULL;
+								gchar* _tmp357_;
+								gint _tmp358_;
+								gchar* _tmp359_ = NULL;
+								gchar* _tmp360_;
+								ValaCCodeExpression* _tmp361_ = NULL;
+								_tmp355_ = name;
+								_tmp356_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp355_);
+								_tmp357_ = _tmp356_;
+								_tmp358_ = dim;
+								_tmp359_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, _tmp357_, _tmp358_);
+								_tmp360_ = _tmp359_;
+								_tmp361_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp360_);
 								_vala_ccode_node_unref0 (length_expr);
-								length_expr = _tmp367_;
-								_g_free0 (_tmp366_);
-								_g_free0 (_tmp363_);
+								length_expr = _tmp361_;
+								_g_free0 (_tmp360_);
+								_g_free0 (_tmp357_);
 							} else {
-								ValaParameter* _tmp368_;
-								ValaParameterDirection _tmp369_;
-								ValaParameterDirection _tmp370_;
-								_tmp368_ = param;
-								_tmp369_ = vala_parameter_get_direction (_tmp368_);
-								_tmp370_ = _tmp369_;
-								if (_tmp370_ == VALA_PARAMETER_DIRECTION_REF) {
-									ValaCCodeExpression* _tmp371_;
-									ValaCCodeUnaryExpression* _tmp372_;
-									_tmp371_ = length_expr;
-									_tmp372_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp371_);
+								ValaParameter* _tmp362_;
+								ValaParameterDirection _tmp363_;
+								ValaParameterDirection _tmp364_;
+								_tmp362_ = param;
+								_tmp363_ = vala_parameter_get_direction (_tmp362_);
+								_tmp364_ = _tmp363_;
+								if (_tmp364_ == VALA_PARAMETER_DIRECTION_REF) {
+									ValaCCodeExpression* _tmp365_;
+									ValaCCodeUnaryExpression* _tmp366_;
+									_tmp365_ = length_expr;
+									_tmp366_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp365_);
 									_vala_ccode_node_unref0 (length_expr);
-									length_expr = (ValaCCodeExpression*) _tmp372_;
+									length_expr = (ValaCCodeExpression*) _tmp366_;
 								}
 							}
-							_tmp373_ = _result_;
-							_tmp374_ = length_expr;
-							vala_glib_value_append_array_length_cvalue (_tmp373_, _tmp374_);
+							_tmp367_ = _result_;
+							_tmp368_ = length_expr;
+							vala_glib_value_append_array_length_cvalue (_tmp367_, _tmp368_);
 							_vala_ccode_node_unref0 (length_expr);
 						}
 					}
@@ -4933,103 +4921,96 @@ static ValaTargetValue* vala_ccode_member_access_module_real_get_field_cvalue (V
 			if (_tmp175_) {
 				ValaField* _tmp176_;
 				gchar* _tmp177_ = NULL;
-				gchar* _tmp178_;
+				gchar* target_cname;
+				ValaField* _tmp178_;
 				gchar* _tmp179_ = NULL;
 				gchar* _tmp180_;
-				gchar* target_cname;
-				ValaField* _tmp181_;
-				gchar* _tmp182_ = NULL;
-				gchar* _tmp183_;
-				gchar* _tmp184_ = NULL;
-				gchar* _tmp185_;
+				gchar* _tmp181_ = NULL;
+				gchar* _tmp182_;
 				gchar* target_destroy_notify_cname;
-				ValaField* _tmp186_;
-				ValaSymbol* _tmp187_;
-				ValaSymbol* _tmp188_;
-				gboolean _tmp189_ = FALSE;
+				ValaField* _tmp183_;
+				ValaSymbol* _tmp184_;
+				ValaSymbol* _tmp185_;
+				gboolean _tmp186_ = FALSE;
 				_tmp176_ = field;
-				_tmp177_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp176_);
-				_tmp178_ = _tmp177_;
-				_tmp179_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp178_);
+				_tmp177_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp176_);
+				target_cname = _tmp177_;
+				_tmp178_ = field;
+				_tmp179_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp178_);
 				_tmp180_ = _tmp179_;
-				_g_free0 (_tmp178_);
-				target_cname = _tmp180_;
-				_tmp181_ = field;
-				_tmp182_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp181_);
-				_tmp183_ = _tmp182_;
-				_tmp184_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp183_);
+				_tmp181_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp180_);
+				_tmp182_ = _tmp181_;
+				_g_free0 (_tmp180_);
+				target_destroy_notify_cname = _tmp182_;
+				_tmp183_ = field;
+				_tmp184_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp183_);
 				_tmp185_ = _tmp184_;
-				_g_free0 (_tmp183_);
-				target_destroy_notify_cname = _tmp185_;
-				_tmp186_ = field;
-				_tmp187_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp186_);
-				_tmp188_ = _tmp187_;
-				_tmp189_ = vala_typesymbol_is_reference_type (VALA_TYPESYMBOL (_tmp188_));
-				if (_tmp189_) {
-					ValaGLibValue* _tmp190_;
-					ValaCCodeExpression* _tmp191_;
-					const gchar* _tmp192_;
-					ValaCCodeMemberAccess* _tmp193_;
-					ValaGLibValue* _tmp194_;
-					ValaDataType* _tmp195_;
-					ValaDataType* _tmp196_;
-					gboolean _tmp197_;
-					gboolean _tmp198_;
-					_tmp190_ = _result_;
-					_tmp191_ = inst;
-					_tmp192_ = target_cname;
-					_tmp193_ = vala_ccode_member_access_new_pointer (_tmp191_, _tmp192_);
-					_vala_ccode_node_unref0 (_tmp190_->delegate_target_cvalue);
-					_tmp190_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp193_;
-					_tmp194_ = _result_;
-					_tmp195_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp194_);
-					_tmp196_ = _tmp195_;
-					_tmp197_ = vala_data_type_get_value_owned (_tmp196_);
-					_tmp198_ = _tmp197_;
-					if (_tmp198_) {
-						ValaGLibValue* _tmp199_;
-						ValaCCodeExpression* _tmp200_;
-						const gchar* _tmp201_;
-						ValaCCodeMemberAccess* _tmp202_;
-						_tmp199_ = _result_;
-						_tmp200_ = inst;
-						_tmp201_ = target_destroy_notify_cname;
-						_tmp202_ = vala_ccode_member_access_new_pointer (_tmp200_, _tmp201_);
-						_vala_ccode_node_unref0 (_tmp199_->delegate_target_destroy_notify_cvalue);
-						_tmp199_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp202_;
+				_tmp186_ = vala_typesymbol_is_reference_type (VALA_TYPESYMBOL (_tmp185_));
+				if (_tmp186_) {
+					ValaGLibValue* _tmp187_;
+					ValaCCodeExpression* _tmp188_;
+					const gchar* _tmp189_;
+					ValaCCodeMemberAccess* _tmp190_;
+					ValaGLibValue* _tmp191_;
+					ValaDataType* _tmp192_;
+					ValaDataType* _tmp193_;
+					gboolean _tmp194_;
+					gboolean _tmp195_;
+					_tmp187_ = _result_;
+					_tmp188_ = inst;
+					_tmp189_ = target_cname;
+					_tmp190_ = vala_ccode_member_access_new_pointer (_tmp188_, _tmp189_);
+					_vala_ccode_node_unref0 (_tmp187_->delegate_target_cvalue);
+					_tmp187_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp190_;
+					_tmp191_ = _result_;
+					_tmp192_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp191_);
+					_tmp193_ = _tmp192_;
+					_tmp194_ = vala_data_type_get_value_owned (_tmp193_);
+					_tmp195_ = _tmp194_;
+					if (_tmp195_) {
+						ValaGLibValue* _tmp196_;
+						ValaCCodeExpression* _tmp197_;
+						const gchar* _tmp198_;
+						ValaCCodeMemberAccess* _tmp199_;
+						_tmp196_ = _result_;
+						_tmp197_ = inst;
+						_tmp198_ = target_destroy_notify_cname;
+						_tmp199_ = vala_ccode_member_access_new_pointer (_tmp197_, _tmp198_);
+						_vala_ccode_node_unref0 (_tmp196_->delegate_target_destroy_notify_cvalue);
+						_tmp196_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp199_;
 					}
 				} else {
-					ValaGLibValue* _tmp203_;
-					ValaCCodeExpression* _tmp204_;
-					const gchar* _tmp205_;
-					ValaCCodeMemberAccess* _tmp206_;
-					ValaGLibValue* _tmp207_;
-					ValaDataType* _tmp208_;
-					ValaDataType* _tmp209_;
-					gboolean _tmp210_;
-					gboolean _tmp211_;
-					_tmp203_ = _result_;
-					_tmp204_ = inst;
-					_tmp205_ = target_cname;
-					_tmp206_ = vala_ccode_member_access_new (_tmp204_, _tmp205_, FALSE);
-					_vala_ccode_node_unref0 (_tmp203_->delegate_target_cvalue);
-					_tmp203_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp206_;
-					_tmp207_ = _result_;
-					_tmp208_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp207_);
-					_tmp209_ = _tmp208_;
-					_tmp210_ = vala_data_type_get_value_owned (_tmp209_);
-					_tmp211_ = _tmp210_;
-					if (_tmp211_) {
-						ValaGLibValue* _tmp212_;
-						ValaCCodeExpression* _tmp213_;
-						const gchar* _tmp214_;
-						ValaCCodeMemberAccess* _tmp215_;
-						_tmp212_ = _result_;
-						_tmp213_ = inst;
-						_tmp214_ = target_destroy_notify_cname;
-						_tmp215_ = vala_ccode_member_access_new (_tmp213_, _tmp214_, FALSE);
-						_vala_ccode_node_unref0 (_tmp212_->delegate_target_destroy_notify_cvalue);
-						_tmp212_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp215_;
+					ValaGLibValue* _tmp200_;
+					ValaCCodeExpression* _tmp201_;
+					const gchar* _tmp202_;
+					ValaCCodeMemberAccess* _tmp203_;
+					ValaGLibValue* _tmp204_;
+					ValaDataType* _tmp205_;
+					ValaDataType* _tmp206_;
+					gboolean _tmp207_;
+					gboolean _tmp208_;
+					_tmp200_ = _result_;
+					_tmp201_ = inst;
+					_tmp202_ = target_cname;
+					_tmp203_ = vala_ccode_member_access_new (_tmp201_, _tmp202_, FALSE);
+					_vala_ccode_node_unref0 (_tmp200_->delegate_target_cvalue);
+					_tmp200_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp203_;
+					_tmp204_ = _result_;
+					_tmp205_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp204_);
+					_tmp206_ = _tmp205_;
+					_tmp207_ = vala_data_type_get_value_owned (_tmp206_);
+					_tmp208_ = _tmp207_;
+					if (_tmp208_) {
+						ValaGLibValue* _tmp209_;
+						ValaCCodeExpression* _tmp210_;
+						const gchar* _tmp211_;
+						ValaCCodeMemberAccess* _tmp212_;
+						_tmp209_ = _result_;
+						_tmp210_ = inst;
+						_tmp211_ = target_destroy_notify_cname;
+						_tmp212_ = vala_ccode_member_access_new (_tmp210_, _tmp211_, FALSE);
+						_vala_ccode_node_unref0 (_tmp209_->delegate_target_destroy_notify_cvalue);
+						_tmp209_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp212_;
 					}
 				}
 				_g_free0 (target_destroy_notify_cname);
@@ -5041,423 +5022,418 @@ static ValaTargetValue* vala_ccode_member_access_module_real_get_field_cvalue (V
 		_vala_code_node_unref0 (instance_target_type);
 		_vala_ccode_node_unref0 (pub_inst);
 	} else {
-		ValaField* _tmp216_;
-		ValaMemberBinding _tmp217_;
-		ValaMemberBinding _tmp218_;
-		_tmp216_ = field;
-		_tmp217_ = vala_field_get_binding (_tmp216_);
-		_tmp218_ = _tmp217_;
-		if (_tmp218_ == VALA_MEMBER_BINDING_CLASS) {
-			ValaField* _tmp219_;
-			ValaSymbol* _tmp220_;
-			ValaSymbol* _tmp221_;
-			ValaClass* _tmp222_;
+		ValaField* _tmp213_;
+		ValaMemberBinding _tmp214_;
+		ValaMemberBinding _tmp215_;
+		_tmp213_ = field;
+		_tmp214_ = vala_field_get_binding (_tmp213_);
+		_tmp215_ = _tmp214_;
+		if (_tmp215_ == VALA_MEMBER_BINDING_CLASS) {
+			ValaField* _tmp216_;
+			ValaSymbol* _tmp217_;
+			ValaSymbol* _tmp218_;
+			ValaClass* _tmp219_;
 			ValaClass* cl;
-			ValaClass* _tmp223_;
-			gchar* _tmp224_ = NULL;
-			gchar* _tmp225_;
-			gchar* _tmp226_;
-			gchar* _tmp227_;
-			ValaCCodeIdentifier* _tmp228_;
-			ValaCCodeIdentifier* _tmp229_;
-			ValaCCodeFunctionCall* _tmp230_;
-			ValaCCodeFunctionCall* _tmp231_;
+			ValaClass* _tmp220_;
+			gchar* _tmp221_ = NULL;
+			gchar* _tmp222_;
+			gchar* _tmp223_;
+			gchar* _tmp224_;
+			ValaCCodeIdentifier* _tmp225_;
+			ValaCCodeIdentifier* _tmp226_;
+			ValaCCodeFunctionCall* _tmp227_;
+			ValaCCodeFunctionCall* _tmp228_;
 			ValaCCodeFunctionCall* cast;
 			ValaCCodeExpression* klass = NULL;
-			ValaTargetValue* _tmp232_;
-			ValaCCodeFunctionCall* _tmp256_;
-			ValaCCodeExpression* _tmp257_;
-			ValaField* _tmp258_;
-			ValaSymbolAccessibility _tmp259_;
-			ValaSymbolAccessibility _tmp260_;
-			_tmp219_ = field;
-			_tmp220_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp219_);
-			_tmp221_ = _tmp220_;
-			_tmp222_ = _vala_code_node_ref0 (VALA_CLASS (_tmp221_));
-			cl = _tmp222_;
-			_tmp223_ = cl;
-			_tmp224_ = vala_ccode_base_module_get_ccode_upper_case_name ((ValaSymbol*) _tmp223_, NULL);
-			_tmp225_ = _tmp224_;
-			_tmp226_ = g_strconcat (_tmp225_, "_CLASS", NULL);
-			_tmp227_ = _tmp226_;
-			_tmp228_ = vala_ccode_identifier_new (_tmp227_);
-			_tmp229_ = _tmp228_;
-			_tmp230_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp229_);
-			_tmp231_ = _tmp230_;
-			_vala_ccode_node_unref0 (_tmp229_);
-			_g_free0 (_tmp227_);
-			_g_free0 (_tmp225_);
-			cast = _tmp231_;
-			_tmp232_ = instance;
-			if (_tmp232_ == NULL) {
-				ValaDataType* _tmp233_ = NULL;
-				ValaDataType* _tmp234_;
-				gboolean _tmp235_;
-				_tmp233_ = vala_ccode_base_module_get_this_type ((ValaCCodeBaseModule*) self);
-				_tmp234_ = _tmp233_;
-				_tmp235_ = _tmp234_ == NULL;
-				_vala_code_node_unref0 (_tmp234_);
-				if (_tmp235_) {
-					ValaCCodeIdentifier* _tmp236_;
-					_tmp236_ = vala_ccode_identifier_new ("klass");
+			ValaTargetValue* _tmp229_;
+			ValaCCodeFunctionCall* _tmp253_;
+			ValaCCodeExpression* _tmp254_;
+			ValaField* _tmp255_;
+			ValaSymbolAccessibility _tmp256_;
+			ValaSymbolAccessibility _tmp257_;
+			_tmp216_ = field;
+			_tmp217_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp216_);
+			_tmp218_ = _tmp217_;
+			_tmp219_ = _vala_code_node_ref0 (VALA_CLASS (_tmp218_));
+			cl = _tmp219_;
+			_tmp220_ = cl;
+			_tmp221_ = vala_ccode_base_module_get_ccode_upper_case_name ((ValaSymbol*) _tmp220_, NULL);
+			_tmp222_ = _tmp221_;
+			_tmp223_ = g_strconcat (_tmp222_, "_CLASS", NULL);
+			_tmp224_ = _tmp223_;
+			_tmp225_ = vala_ccode_identifier_new (_tmp224_);
+			_tmp226_ = _tmp225_;
+			_tmp227_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp226_);
+			_tmp228_ = _tmp227_;
+			_vala_ccode_node_unref0 (_tmp226_);
+			_g_free0 (_tmp224_);
+			_g_free0 (_tmp222_);
+			cast = _tmp228_;
+			_tmp229_ = instance;
+			if (_tmp229_ == NULL) {
+				ValaDataType* _tmp230_ = NULL;
+				ValaDataType* _tmp231_;
+				gboolean _tmp232_;
+				_tmp230_ = vala_ccode_base_module_get_this_type ((ValaCCodeBaseModule*) self);
+				_tmp231_ = _tmp230_;
+				_tmp232_ = _tmp231_ == NULL;
+				_vala_code_node_unref0 (_tmp231_);
+				if (_tmp232_) {
+					ValaCCodeIdentifier* _tmp233_;
+					_tmp233_ = vala_ccode_identifier_new ("klass");
 					_vala_ccode_node_unref0 (klass);
-					klass = (ValaCCodeExpression*) _tmp236_;
+					klass = (ValaCCodeExpression*) _tmp233_;
 				} else {
-					ValaCCodeIdentifier* _tmp237_;
-					ValaCCodeIdentifier* _tmp238_;
-					ValaCCodeFunctionCall* _tmp239_;
-					ValaCCodeFunctionCall* _tmp240_;
+					ValaCCodeIdentifier* _tmp234_;
+					ValaCCodeIdentifier* _tmp235_;
+					ValaCCodeFunctionCall* _tmp236_;
+					ValaCCodeFunctionCall* _tmp237_;
 					ValaCCodeFunctionCall* k;
+					ValaCCodeFunctionCall* _tmp238_;
+					ValaCCodeIdentifier* _tmp239_;
+					ValaCCodeIdentifier* _tmp240_;
 					ValaCCodeFunctionCall* _tmp241_;
-					ValaCCodeIdentifier* _tmp242_;
-					ValaCCodeIdentifier* _tmp243_;
-					ValaCCodeFunctionCall* _tmp244_;
-					ValaCCodeExpression* _tmp245_;
-					_tmp237_ = vala_ccode_identifier_new ("G_OBJECT_GET_CLASS");
-					_tmp238_ = _tmp237_;
-					_tmp239_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp238_);
+					ValaCCodeExpression* _tmp242_;
+					_tmp234_ = vala_ccode_identifier_new ("G_OBJECT_GET_CLASS");
+					_tmp235_ = _tmp234_;
+					_tmp236_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp235_);
+					_tmp237_ = _tmp236_;
+					_vala_ccode_node_unref0 (_tmp235_);
+					k = _tmp237_;
+					_tmp238_ = k;
+					_tmp239_ = vala_ccode_identifier_new ("self");
 					_tmp240_ = _tmp239_;
-					_vala_ccode_node_unref0 (_tmp238_);
-					k = _tmp240_;
+					vala_ccode_function_call_add_argument (_tmp238_, (ValaCCodeExpression*) _tmp240_);
+					_vala_ccode_node_unref0 (_tmp240_);
 					_tmp241_ = k;
-					_tmp242_ = vala_ccode_identifier_new ("self");
-					_tmp243_ = _tmp242_;
-					vala_ccode_function_call_add_argument (_tmp241_, (ValaCCodeExpression*) _tmp243_);
-					_vala_ccode_node_unref0 (_tmp243_);
-					_tmp244_ = k;
-					_tmp245_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp244_);
+					_tmp242_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp241_);
 					_vala_ccode_node_unref0 (klass);
-					klass = _tmp245_;
+					klass = _tmp242_;
 					_vala_ccode_node_unref0 (k);
 				}
 			} else {
-				ValaCCodeIdentifier* _tmp246_;
-				ValaCCodeIdentifier* _tmp247_;
-				ValaCCodeFunctionCall* _tmp248_;
-				ValaCCodeFunctionCall* _tmp249_;
+				ValaCCodeIdentifier* _tmp243_;
+				ValaCCodeIdentifier* _tmp244_;
+				ValaCCodeFunctionCall* _tmp245_;
+				ValaCCodeFunctionCall* _tmp246_;
 				ValaCCodeFunctionCall* k;
-				ValaCCodeFunctionCall* _tmp250_;
-				ValaTargetValue* _tmp251_;
-				ValaCCodeExpression* _tmp252_ = NULL;
-				ValaCCodeExpression* _tmp253_;
-				ValaCCodeFunctionCall* _tmp254_;
-				ValaCCodeExpression* _tmp255_;
-				_tmp246_ = vala_ccode_identifier_new ("G_OBJECT_GET_CLASS");
-				_tmp247_ = _tmp246_;
-				_tmp248_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp247_);
-				_tmp249_ = _tmp248_;
-				_vala_ccode_node_unref0 (_tmp247_);
-				k = _tmp249_;
-				_tmp250_ = k;
-				_tmp251_ = instance;
-				_tmp252_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, _tmp251_);
-				_tmp253_ = _tmp252_;
-				vala_ccode_function_call_add_argument (_tmp250_, _tmp253_);
-				_vala_ccode_node_unref0 (_tmp253_);
-				_tmp254_ = k;
-				_tmp255_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp254_);
+				ValaCCodeFunctionCall* _tmp247_;
+				ValaTargetValue* _tmp248_;
+				ValaCCodeExpression* _tmp249_ = NULL;
+				ValaCCodeExpression* _tmp250_;
+				ValaCCodeFunctionCall* _tmp251_;
+				ValaCCodeExpression* _tmp252_;
+				_tmp243_ = vala_ccode_identifier_new ("G_OBJECT_GET_CLASS");
+				_tmp244_ = _tmp243_;
+				_tmp245_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp244_);
+				_tmp246_ = _tmp245_;
+				_vala_ccode_node_unref0 (_tmp244_);
+				k = _tmp246_;
+				_tmp247_ = k;
+				_tmp248_ = instance;
+				_tmp249_ = vala_ccode_base_module_get_cvalue_ ((ValaCCodeBaseModule*) self, _tmp248_);
+				_tmp250_ = _tmp249_;
+				vala_ccode_function_call_add_argument (_tmp247_, _tmp250_);
+				_vala_ccode_node_unref0 (_tmp250_);
+				_tmp251_ = k;
+				_tmp252_ = _vala_ccode_node_ref0 ((ValaCCodeExpression*) _tmp251_);
 				_vala_ccode_node_unref0 (klass);
-				klass = _tmp255_;
+				klass = _tmp252_;
 				_vala_ccode_node_unref0 (k);
 			}
-			_tmp256_ = cast;
-			_tmp257_ = klass;
-			vala_ccode_function_call_add_argument (_tmp256_, _tmp257_);
-			_tmp258_ = field;
-			_tmp259_ = vala_symbol_get_access ((ValaSymbol*) _tmp258_);
-			_tmp260_ = _tmp259_;
-			if (_tmp260_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
-				ValaClass* _tmp261_;
-				gchar* _tmp262_ = NULL;
-				gchar* _tmp263_;
-				gchar* _tmp264_ = NULL;
-				gchar* _tmp265_;
-				ValaCCodeIdentifier* _tmp266_;
-				ValaCCodeIdentifier* _tmp267_;
-				ValaCCodeFunctionCall* _tmp268_;
-				ValaCCodeFunctionCall* _tmp269_;
+			_tmp253_ = cast;
+			_tmp254_ = klass;
+			vala_ccode_function_call_add_argument (_tmp253_, _tmp254_);
+			_tmp255_ = field;
+			_tmp256_ = vala_symbol_get_access ((ValaSymbol*) _tmp255_);
+			_tmp257_ = _tmp256_;
+			if (_tmp257_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
+				ValaClass* _tmp258_;
+				gchar* _tmp259_ = NULL;
+				gchar* _tmp260_;
+				gchar* _tmp261_ = NULL;
+				gchar* _tmp262_;
+				ValaCCodeIdentifier* _tmp263_;
+				ValaCCodeIdentifier* _tmp264_;
+				ValaCCodeFunctionCall* _tmp265_;
+				ValaCCodeFunctionCall* _tmp266_;
 				ValaCCodeFunctionCall* ccall;
+				ValaCCodeFunctionCall* _tmp267_;
+				ValaCCodeExpression* _tmp268_;
+				ValaGLibValue* _tmp269_;
 				ValaCCodeFunctionCall* _tmp270_;
-				ValaCCodeExpression* _tmp271_;
-				ValaGLibValue* _tmp272_;
-				ValaCCodeFunctionCall* _tmp273_;
-				ValaField* _tmp274_;
-				gchar* _tmp275_ = NULL;
-				gchar* _tmp276_;
-				ValaCCodeMemberAccess* _tmp277_;
-				_tmp261_ = cl;
-				_tmp262_ = vala_ccode_base_module_get_ccode_upper_case_name ((ValaSymbol*) _tmp261_, NULL);
-				_tmp263_ = _tmp262_;
-				_tmp264_ = g_strdup_printf ("%s_GET_CLASS_PRIVATE", _tmp263_);
-				_tmp265_ = _tmp264_;
-				_tmp266_ = vala_ccode_identifier_new (_tmp265_);
-				_tmp267_ = _tmp266_;
-				_tmp268_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp267_);
-				_tmp269_ = _tmp268_;
-				_vala_ccode_node_unref0 (_tmp267_);
-				_g_free0 (_tmp265_);
-				_g_free0 (_tmp263_);
-				ccall = _tmp269_;
+				ValaField* _tmp271_;
+				gchar* _tmp272_ = NULL;
+				gchar* _tmp273_;
+				ValaCCodeMemberAccess* _tmp274_;
+				_tmp258_ = cl;
+				_tmp259_ = vala_ccode_base_module_get_ccode_upper_case_name ((ValaSymbol*) _tmp258_, NULL);
+				_tmp260_ = _tmp259_;
+				_tmp261_ = g_strdup_printf ("%s_GET_CLASS_PRIVATE", _tmp260_);
+				_tmp262_ = _tmp261_;
+				_tmp263_ = vala_ccode_identifier_new (_tmp262_);
+				_tmp264_ = _tmp263_;
+				_tmp265_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp264_);
+				_tmp266_ = _tmp265_;
+				_vala_ccode_node_unref0 (_tmp264_);
+				_g_free0 (_tmp262_);
+				_g_free0 (_tmp260_);
+				ccall = _tmp266_;
+				_tmp267_ = ccall;
+				_tmp268_ = klass;
+				vala_ccode_function_call_add_argument (_tmp267_, _tmp268_);
+				_tmp269_ = _result_;
 				_tmp270_ = ccall;
-				_tmp271_ = klass;
-				vala_ccode_function_call_add_argument (_tmp270_, _tmp271_);
-				_tmp272_ = _result_;
-				_tmp273_ = ccall;
-				_tmp274_ = field;
-				_tmp275_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp274_);
-				_tmp276_ = _tmp275_;
-				_tmp277_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp273_, _tmp276_);
-				_vala_ccode_node_unref0 (_tmp272_->cvalue);
-				_tmp272_->cvalue = (ValaCCodeExpression*) _tmp277_;
-				_g_free0 (_tmp276_);
+				_tmp271_ = field;
+				_tmp272_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp271_);
+				_tmp273_ = _tmp272_;
+				_tmp274_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp270_, _tmp273_);
+				_vala_ccode_node_unref0 (_tmp269_->cvalue);
+				_tmp269_->cvalue = (ValaCCodeExpression*) _tmp274_;
+				_g_free0 (_tmp273_);
 				_vala_ccode_node_unref0 (ccall);
 			} else {
-				ValaGLibValue* _tmp278_;
-				ValaCCodeFunctionCall* _tmp279_;
-				ValaField* _tmp280_;
-				gchar* _tmp281_ = NULL;
-				gchar* _tmp282_;
-				ValaCCodeMemberAccess* _tmp283_;
-				_tmp278_ = _result_;
-				_tmp279_ = cast;
-				_tmp280_ = field;
-				_tmp281_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp280_);
-				_tmp282_ = _tmp281_;
-				_tmp283_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp279_, _tmp282_);
-				_vala_ccode_node_unref0 (_tmp278_->cvalue);
-				_tmp278_->cvalue = (ValaCCodeExpression*) _tmp283_;
-				_g_free0 (_tmp282_);
+				ValaGLibValue* _tmp275_;
+				ValaCCodeFunctionCall* _tmp276_;
+				ValaField* _tmp277_;
+				gchar* _tmp278_ = NULL;
+				gchar* _tmp279_;
+				ValaCCodeMemberAccess* _tmp280_;
+				_tmp275_ = _result_;
+				_tmp276_ = cast;
+				_tmp277_ = field;
+				_tmp278_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp277_);
+				_tmp279_ = _tmp278_;
+				_tmp280_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp276_, _tmp279_);
+				_vala_ccode_node_unref0 (_tmp275_->cvalue);
+				_tmp275_->cvalue = (ValaCCodeExpression*) _tmp280_;
+				_g_free0 (_tmp279_);
 			}
 			_vala_ccode_node_unref0 (klass);
 			_vala_ccode_node_unref0 (cast);
 			_vala_code_node_unref0 (cl);
 		} else {
+			ValaField* _tmp281_;
+			ValaCCodeFile* _tmp282_;
+			ValaGLibValue* _tmp283_;
 			ValaField* _tmp284_;
-			ValaCCodeFile* _tmp285_;
-			ValaGLibValue* _tmp286_;
-			ValaField* _tmp287_;
-			gchar* _tmp288_ = NULL;
-			gchar* _tmp289_;
-			ValaCCodeIdentifier* _tmp290_;
-			gboolean _tmp291_ = FALSE;
-			ValaArrayType* _tmp292_;
-			gboolean _tmp295_;
+			gchar* _tmp285_ = NULL;
+			gchar* _tmp286_;
+			ValaCCodeIdentifier* _tmp287_;
+			gboolean _tmp288_ = FALSE;
+			ValaArrayType* _tmp289_;
+			gboolean _tmp292_;
+			_tmp281_ = field;
+			_tmp282_ = ((ValaCCodeBaseModule*) self)->cfile;
+			vala_ccode_base_module_generate_field_declaration ((ValaCCodeBaseModule*) self, _tmp281_, _tmp282_);
+			_tmp283_ = _result_;
 			_tmp284_ = field;
-			_tmp285_ = ((ValaCCodeBaseModule*) self)->cfile;
-			vala_ccode_base_module_generate_field_declaration ((ValaCCodeBaseModule*) self, _tmp284_, _tmp285_);
-			_tmp286_ = _result_;
-			_tmp287_ = field;
-			_tmp288_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp287_);
-			_tmp289_ = _tmp288_;
-			_tmp290_ = vala_ccode_identifier_new (_tmp289_);
-			_vala_ccode_node_unref0 (_tmp286_->cvalue);
-			_tmp286_->cvalue = (ValaCCodeExpression*) _tmp290_;
-			_g_free0 (_tmp289_);
-			_tmp292_ = array_type;
-			if (_tmp292_ != NULL) {
-				ValaField* _tmp293_;
-				gboolean _tmp294_ = FALSE;
-				_tmp293_ = field;
-				_tmp294_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp293_);
-				_tmp291_ = _tmp294_;
+			_tmp285_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp284_);
+			_tmp286_ = _tmp285_;
+			_tmp287_ = vala_ccode_identifier_new (_tmp286_);
+			_vala_ccode_node_unref0 (_tmp283_->cvalue);
+			_tmp283_->cvalue = (ValaCCodeExpression*) _tmp287_;
+			_g_free0 (_tmp286_);
+			_tmp289_ = array_type;
+			if (_tmp289_ != NULL) {
+				ValaField* _tmp290_;
+				gboolean _tmp291_ = FALSE;
+				_tmp290_ = field;
+				_tmp291_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp290_);
+				_tmp288_ = _tmp291_;
 			} else {
-				_tmp291_ = FALSE;
+				_tmp288_ = FALSE;
 			}
-			_tmp295_ = _tmp291_;
-			if (_tmp295_) {
-				gboolean _tmp318_ = FALSE;
-				ValaArrayType* _tmp319_;
-				gint _tmp320_;
-				gint _tmp321_;
-				gboolean _tmp324_;
+			_tmp292_ = _tmp288_;
+			if (_tmp292_) {
+				gboolean _tmp315_ = FALSE;
+				ValaArrayType* _tmp316_;
+				gint _tmp317_;
+				gint _tmp318_;
+				gboolean _tmp321_;
 				{
 					gint dim;
 					dim = 1;
 					{
-						gboolean _tmp296_;
-						_tmp296_ = TRUE;
+						gboolean _tmp293_;
+						_tmp293_ = TRUE;
 						while (TRUE) {
-							gboolean _tmp297_;
+							gboolean _tmp294_;
+							gint _tmp296_;
+							ValaArrayType* _tmp297_;
+							gint _tmp298_;
 							gint _tmp299_;
-							ValaArrayType* _tmp300_;
-							gint _tmp301_;
-							gint _tmp302_;
 							gchar* length_cname = NULL;
-							ValaField* _tmp303_;
-							gchar* _tmp304_ = NULL;
-							gchar* _tmp305_;
-							gboolean _tmp306_;
-							ValaGLibValue* _tmp314_;
-							const gchar* _tmp315_;
-							ValaCCodeIdentifier* _tmp316_;
-							ValaCCodeIdentifier* _tmp317_;
-							_tmp297_ = _tmp296_;
-							if (!_tmp297_) {
-								gint _tmp298_;
-								_tmp298_ = dim;
-								dim = _tmp298_ + 1;
+							ValaField* _tmp300_;
+							gchar* _tmp301_ = NULL;
+							gchar* _tmp302_;
+							gboolean _tmp303_;
+							ValaGLibValue* _tmp311_;
+							const gchar* _tmp312_;
+							ValaCCodeIdentifier* _tmp313_;
+							ValaCCodeIdentifier* _tmp314_;
+							_tmp294_ = _tmp293_;
+							if (!_tmp294_) {
+								gint _tmp295_;
+								_tmp295_ = dim;
+								dim = _tmp295_ + 1;
 							}
-							_tmp296_ = FALSE;
-							_tmp299_ = dim;
-							_tmp300_ = array_type;
-							_tmp301_ = vala_array_type_get_rank (_tmp300_);
-							_tmp302_ = _tmp301_;
-							if (!(_tmp299_ <= _tmp302_)) {
+							_tmp293_ = FALSE;
+							_tmp296_ = dim;
+							_tmp297_ = array_type;
+							_tmp298_ = vala_array_type_get_rank (_tmp297_);
+							_tmp299_ = _tmp298_;
+							if (!(_tmp296_ <= _tmp299_)) {
 								break;
 							}
-							_tmp303_ = field;
-							_tmp304_ = vala_ccode_base_module_get_ccode_array_length_name ((ValaCodeNode*) _tmp303_);
-							_tmp305_ = _tmp304_;
-							_tmp306_ = _tmp305_ != NULL;
-							_g_free0 (_tmp305_);
-							if (_tmp306_) {
-								ValaField* _tmp307_;
-								gchar* _tmp308_ = NULL;
-								_tmp307_ = field;
-								_tmp308_ = vala_ccode_base_module_get_ccode_array_length_name ((ValaCodeNode*) _tmp307_);
+							_tmp300_ = field;
+							_tmp301_ = vala_ccode_base_module_get_ccode_array_length_name ((ValaCodeNode*) _tmp300_);
+							_tmp302_ = _tmp301_;
+							_tmp303_ = _tmp302_ != NULL;
+							_g_free0 (_tmp302_);
+							if (_tmp303_) {
+								ValaField* _tmp304_;
+								gchar* _tmp305_ = NULL;
+								_tmp304_ = field;
+								_tmp305_ = vala_ccode_base_module_get_ccode_array_length_name ((ValaCodeNode*) _tmp304_);
 								_g_free0 (length_cname);
-								length_cname = _tmp308_;
+								length_cname = _tmp305_;
 							} else {
-								ValaField* _tmp309_;
+								ValaField* _tmp306_;
+								gchar* _tmp307_ = NULL;
+								gchar* _tmp308_;
+								gint _tmp309_;
 								gchar* _tmp310_ = NULL;
-								gchar* _tmp311_;
-								gint _tmp312_;
-								gchar* _tmp313_ = NULL;
-								_tmp309_ = field;
-								_tmp310_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp309_);
-								_tmp311_ = _tmp310_;
-								_tmp312_ = dim;
-								_tmp313_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, _tmp311_, _tmp312_);
+								_tmp306_ = field;
+								_tmp307_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp306_);
+								_tmp308_ = _tmp307_;
+								_tmp309_ = dim;
+								_tmp310_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, _tmp308_, _tmp309_);
 								_g_free0 (length_cname);
-								length_cname = _tmp313_;
-								_g_free0 (_tmp311_);
+								length_cname = _tmp310_;
+								_g_free0 (_tmp308_);
 							}
-							_tmp314_ = _result_;
-							_tmp315_ = length_cname;
-							_tmp316_ = vala_ccode_identifier_new (_tmp315_);
-							_tmp317_ = _tmp316_;
-							vala_glib_value_append_array_length_cvalue (_tmp314_, (ValaCCodeExpression*) _tmp317_);
-							_vala_ccode_node_unref0 (_tmp317_);
+							_tmp311_ = _result_;
+							_tmp312_ = length_cname;
+							_tmp313_ = vala_ccode_identifier_new (_tmp312_);
+							_tmp314_ = _tmp313_;
+							vala_glib_value_append_array_length_cvalue (_tmp311_, (ValaCCodeExpression*) _tmp314_);
+							_vala_ccode_node_unref0 (_tmp314_);
 							_g_free0 (length_cname);
 						}
 					}
 				}
-				_tmp319_ = array_type;
-				_tmp320_ = vala_array_type_get_rank (_tmp319_);
-				_tmp321_ = _tmp320_;
-				if (_tmp321_ == 1) {
-					ValaField* _tmp322_;
-					gboolean _tmp323_ = FALSE;
-					_tmp322_ = field;
-					_tmp323_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp322_);
-					_tmp318_ = _tmp323_;
+				_tmp316_ = array_type;
+				_tmp317_ = vala_array_type_get_rank (_tmp316_);
+				_tmp318_ = _tmp317_;
+				if (_tmp318_ == 1) {
+					ValaField* _tmp319_;
+					gboolean _tmp320_ = FALSE;
+					_tmp319_ = field;
+					_tmp320_ = vala_symbol_is_internal_symbol ((ValaSymbol*) _tmp319_);
+					_tmp315_ = _tmp320_;
 				} else {
-					_tmp318_ = FALSE;
+					_tmp315_ = FALSE;
 				}
-				_tmp324_ = _tmp318_;
-				if (_tmp324_) {
-					ValaGLibValue* _tmp325_;
-					ValaField* _tmp326_;
-					gchar* _tmp327_ = NULL;
-					gchar* _tmp328_;
-					gchar* _tmp329_ = NULL;
-					gchar* _tmp330_;
-					ValaCCodeIdentifier* _tmp331_;
-					ValaCCodeIdentifier* _tmp332_;
-					_tmp325_ = _result_;
-					_tmp326_ = field;
-					_tmp327_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp326_);
-					_tmp328_ = _tmp327_;
-					_tmp329_ = vala_ccode_base_module_get_array_size_cname ((ValaCCodeBaseModule*) self, _tmp328_);
-					_tmp330_ = _tmp329_;
-					_tmp331_ = vala_ccode_identifier_new (_tmp330_);
-					_tmp332_ = _tmp331_;
-					vala_ccode_base_module_set_array_size_cvalue ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp325_, (ValaCCodeExpression*) _tmp332_);
-					_vala_ccode_node_unref0 (_tmp332_);
-					_g_free0 (_tmp330_);
-					_g_free0 (_tmp328_);
+				_tmp321_ = _tmp315_;
+				if (_tmp321_) {
+					ValaGLibValue* _tmp322_;
+					ValaField* _tmp323_;
+					gchar* _tmp324_ = NULL;
+					gchar* _tmp325_;
+					gchar* _tmp326_ = NULL;
+					gchar* _tmp327_;
+					ValaCCodeIdentifier* _tmp328_;
+					ValaCCodeIdentifier* _tmp329_;
+					_tmp322_ = _result_;
+					_tmp323_ = field;
+					_tmp324_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp323_);
+					_tmp325_ = _tmp324_;
+					_tmp326_ = vala_ccode_base_module_get_array_size_cname ((ValaCCodeBaseModule*) self, _tmp325_);
+					_tmp327_ = _tmp326_;
+					_tmp328_ = vala_ccode_identifier_new (_tmp327_);
+					_tmp329_ = _tmp328_;
+					vala_ccode_base_module_set_array_size_cvalue ((ValaCCodeBaseModule*) self, (ValaTargetValue*) _tmp322_, (ValaCCodeExpression*) _tmp329_);
+					_vala_ccode_node_unref0 (_tmp329_);
+					_g_free0 (_tmp327_);
+					_g_free0 (_tmp325_);
 				}
 			} else {
-				gboolean _tmp333_ = FALSE;
-				gboolean _tmp334_ = FALSE;
-				ValaDelegateType* _tmp335_;
+				gboolean _tmp330_ = FALSE;
+				gboolean _tmp331_ = FALSE;
+				ValaDelegateType* _tmp332_;
+				gboolean _tmp338_;
 				gboolean _tmp341_;
-				gboolean _tmp344_;
-				_tmp335_ = delegate_type;
-				if (_tmp335_ != NULL) {
-					ValaDelegateType* _tmp336_;
-					ValaDelegate* _tmp337_;
-					ValaDelegate* _tmp338_;
-					gboolean _tmp339_;
-					gboolean _tmp340_;
-					_tmp336_ = delegate_type;
-					_tmp337_ = vala_delegate_type_get_delegate_symbol (_tmp336_);
-					_tmp338_ = _tmp337_;
-					_tmp339_ = vala_delegate_get_has_target (_tmp338_);
-					_tmp340_ = _tmp339_;
-					_tmp334_ = _tmp340_;
+				_tmp332_ = delegate_type;
+				if (_tmp332_ != NULL) {
+					ValaDelegateType* _tmp333_;
+					ValaDelegate* _tmp334_;
+					ValaDelegate* _tmp335_;
+					gboolean _tmp336_;
+					gboolean _tmp337_;
+					_tmp333_ = delegate_type;
+					_tmp334_ = vala_delegate_type_get_delegate_symbol (_tmp333_);
+					_tmp335_ = _tmp334_;
+					_tmp336_ = vala_delegate_get_has_target (_tmp335_);
+					_tmp337_ = _tmp336_;
+					_tmp331_ = _tmp337_;
 				} else {
-					_tmp334_ = FALSE;
+					_tmp331_ = FALSE;
 				}
-				_tmp341_ = _tmp334_;
-				if (_tmp341_) {
-					ValaField* _tmp342_;
-					gboolean _tmp343_ = FALSE;
-					_tmp342_ = field;
-					_tmp343_ = vala_ccode_base_module_get_ccode_delegate_target ((ValaCodeNode*) _tmp342_);
-					_tmp333_ = _tmp343_;
+				_tmp338_ = _tmp331_;
+				if (_tmp338_) {
+					ValaField* _tmp339_;
+					gboolean _tmp340_ = FALSE;
+					_tmp339_ = field;
+					_tmp340_ = vala_ccode_base_module_get_ccode_delegate_target ((ValaCodeNode*) _tmp339_);
+					_tmp330_ = _tmp340_;
 				} else {
-					_tmp333_ = FALSE;
+					_tmp330_ = FALSE;
 				}
-				_tmp344_ = _tmp333_;
-				if (_tmp344_) {
-					ValaGLibValue* _tmp345_;
-					ValaField* _tmp346_;
-					gchar* _tmp347_ = NULL;
-					gchar* _tmp348_;
-					gchar* _tmp349_ = NULL;
-					gchar* _tmp350_;
-					ValaCCodeIdentifier* _tmp351_;
-					ValaGLibValue* _tmp352_;
-					ValaDataType* _tmp353_;
-					ValaDataType* _tmp354_;
-					gboolean _tmp355_;
-					gboolean _tmp356_;
-					_tmp345_ = _result_;
-					_tmp346_ = field;
-					_tmp347_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp346_);
-					_tmp348_ = _tmp347_;
-					_tmp349_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp348_);
-					_tmp350_ = _tmp349_;
-					_tmp351_ = vala_ccode_identifier_new (_tmp350_);
-					_vala_ccode_node_unref0 (_tmp345_->delegate_target_cvalue);
-					_tmp345_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp351_;
-					_g_free0 (_tmp350_);
-					_g_free0 (_tmp348_);
-					_tmp352_ = _result_;
-					_tmp353_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp352_);
-					_tmp354_ = _tmp353_;
-					_tmp355_ = vala_data_type_get_value_owned (_tmp354_);
-					_tmp356_ = _tmp355_;
-					if (_tmp356_) {
-						ValaGLibValue* _tmp357_;
-						ValaField* _tmp358_;
-						gchar* _tmp359_ = NULL;
-						gchar* _tmp360_;
-						gchar* _tmp361_ = NULL;
-						gchar* _tmp362_;
-						ValaCCodeIdentifier* _tmp363_;
-						_tmp357_ = _result_;
-						_tmp358_ = field;
-						_tmp359_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp358_);
-						_tmp360_ = _tmp359_;
-						_tmp361_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp360_);
-						_tmp362_ = _tmp361_;
-						_tmp363_ = vala_ccode_identifier_new (_tmp362_);
-						_vala_ccode_node_unref0 (_tmp357_->delegate_target_destroy_notify_cvalue);
-						_tmp357_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp363_;
-						_g_free0 (_tmp362_);
-						_g_free0 (_tmp360_);
+				_tmp341_ = _tmp330_;
+				if (_tmp341_) {
+					ValaGLibValue* _tmp342_;
+					ValaField* _tmp343_;
+					gchar* _tmp344_ = NULL;
+					gchar* _tmp345_;
+					ValaCCodeIdentifier* _tmp346_;
+					ValaGLibValue* _tmp347_;
+					ValaDataType* _tmp348_;
+					ValaDataType* _tmp349_;
+					gboolean _tmp350_;
+					gboolean _tmp351_;
+					_tmp342_ = _result_;
+					_tmp343_ = field;
+					_tmp344_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp343_);
+					_tmp345_ = _tmp344_;
+					_tmp346_ = vala_ccode_identifier_new (_tmp345_);
+					_vala_ccode_node_unref0 (_tmp342_->delegate_target_cvalue);
+					_tmp342_->delegate_target_cvalue = (ValaCCodeExpression*) _tmp346_;
+					_g_free0 (_tmp345_);
+					_tmp347_ = _result_;
+					_tmp348_ = vala_target_value_get_value_type ((ValaTargetValue*) _tmp347_);
+					_tmp349_ = _tmp348_;
+					_tmp350_ = vala_data_type_get_value_owned (_tmp349_);
+					_tmp351_ = _tmp350_;
+					if (_tmp351_) {
+						ValaGLibValue* _tmp352_;
+						ValaField* _tmp353_;
+						gchar* _tmp354_ = NULL;
+						gchar* _tmp355_;
+						gchar* _tmp356_ = NULL;
+						gchar* _tmp357_;
+						ValaCCodeIdentifier* _tmp358_;
+						_tmp352_ = _result_;
+						_tmp353_ = field;
+						_tmp354_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp353_);
+						_tmp355_ = _tmp354_;
+						_tmp356_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp355_);
+						_tmp357_ = _tmp356_;
+						_tmp358_ = vala_ccode_identifier_new (_tmp357_);
+						_vala_ccode_node_unref0 (_tmp352_->delegate_target_destroy_notify_cvalue);
+						_tmp352_->delegate_target_destroy_notify_cvalue = (ValaCCodeExpression*) _tmp358_;
+						_g_free0 (_tmp357_);
+						_g_free0 (_tmp355_);
 					}
 				}
 			}
diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala
index 818773f..389a1db 100644
--- a/codegen/valaccodememberaccessmodule.vala
+++ b/codegen/valaccodememberaccessmodule.vala
@@ -70,7 +70,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 					var base_class = (Class) m.base_method.parent_symbol;
 					var vclass = new CCodeFunctionCall (new CCodeIdentifier ("%s_GET_CLASS".printf (get_ccode_upper_case_name (base_class))));
 					vclass.add_argument (pub_inst);
-					set_cvalue (expr, new CCodeMemberAccess.pointer (vclass, m.name));
+					set_cvalue (expr, new CCodeMemberAccess.pointer (vclass, get_ccode_vfunc_name (m)));
 				} else {
 					set_cvalue (expr, new CCodeIdentifier (get_ccode_name (m.base_method)));
 				}
@@ -185,6 +185,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 				}
 			} else if (prop.binding == MemberBinding.INSTANCE &&
 			    prop.get_accessor.automatic_body &&
+			    !prop.get_accessor.value_type.value_owned &&
 			    current_type_symbol == prop.parent_symbol &&
 			    current_type_symbol is Class &&
 			    prop.base_property == null &&
@@ -194,17 +195,11 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 				inst = new CCodeMemberAccess.pointer (pub_inst, "priv");
 				set_cvalue (expr, new CCodeMemberAccess.pointer (inst, get_ccode_name (prop.field)));
 			} else if (!get_ccode_no_accessor_method (prop)) {
-				var base_property = prop;
-				if (prop.base_property != null) {
-					base_property = prop.base_property;
-				} else if (prop.base_interface_property != null) {
-					base_property = prop.base_interface_property;
-				}
 				string getter_cname;
 				if (prop is DynamicProperty) {
 					getter_cname = get_dynamic_property_getter_cname ((DynamicProperty) prop);
 				} else {
-					getter_cname = get_ccode_name (base_property.get_accessor);
+					getter_cname = get_ccode_name (prop.get_accessor);
 				}
 				var ccall = new CCodeFunctionCall (new CCodeIdentifier (getter_cname));
 
@@ -221,25 +216,25 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 					ccall.add_argument (pub_inst);
 				}
 
-				var temp_value = create_temp_value (base_property.get_accessor.value_type, false, expr);
+				var temp_value = create_temp_value (prop.get_accessor.value_type, false, expr);
 				expr.target_value = load_temp_value (temp_value);
 				var ctemp = get_cvalue_ (temp_value);
 
 				// Property access to real struct types is handled differently
 				// The value is returned by out parameter
-				if (base_property.property_type.is_real_non_null_struct_type ()) {
+				if (prop.property_type.is_real_non_null_struct_type ()) {
 					ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, ctemp));
 					ccode.add_expression (ccall);
 				} else {
 					ccode.add_assignment (ctemp, ccall);
 
-					array_type = base_property.property_type as ArrayType;
-					if (array_type != null && get_ccode_array_length (base_property)) {
+					array_type = prop.property_type as ArrayType;
+					if (array_type != null && get_ccode_array_length (prop)) {
 						for (int dim = 1; dim <= array_type.rank; dim++) {
 							ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_array_length_cvalue (temp_value, dim)));
 						}
 					} else {
-						delegate_type = base_property.property_type as DelegateType;
+						delegate_type = prop.property_type as DelegateType;
 						if (delegate_type != null && delegate_type.delegate_symbol.has_target) {
 							ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_delegate_target_cvalue (temp_value)));
 						}
@@ -265,6 +260,11 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 					}
 				}
 
+				if (expr.value_type.is_real_struct_type ()) {
+					// gobject allocates structs on heap
+					expr.value_type.nullable = true;
+				}
+
 				var temp_var = get_temp_variable (expr.value_type);
 				var ctemp = get_variable_cexpression (temp_var.name);
 				emit_temp_var (temp_var);
@@ -422,7 +422,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 						result.append_array_length_cvalue (new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (get_block_id (block))), get_parameter_array_length_cname (param, dim)));
 					}
 				} else if (delegate_type != null && delegate_type.delegate_symbol.has_target) {
-					result.delegate_target_cvalue = new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (get_block_id (block))), get_delegate_target_cname (get_variable_cname (param.name)));
+					result.delegate_target_cvalue = new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (get_block_id (block))), get_ccode_delegate_target_name (param));
 					if (result.value_type.value_owned) {
 						result.delegate_target_destroy_notify_cvalue = new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (get_block_id (block))), get_delegate_target_destroy_notify_cname (get_variable_cname (param.name)));
 					}
@@ -431,7 +431,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 				// use closure
 				result.cvalue = get_variable_cexpression (param.name);
 				if (delegate_type != null && delegate_type.delegate_symbol.has_target) {
-					result.delegate_target_cvalue = new CCodeMemberAccess.pointer (new CCodeIdentifier ("_data_"), get_delegate_target_cname (get_variable_cname (param.name)));
+					result.delegate_target_cvalue = new CCodeMemberAccess.pointer (new CCodeIdentifier ("_data_"), get_ccode_delegate_target_name (param));
 					if (delegate_type.value_owned) {
 						result.delegate_target_destroy_notify_cvalue = new CCodeMemberAccess.pointer (new CCodeIdentifier ("_data_"), get_delegate_target_destroy_notify_cname (get_variable_cname (param.name)));
 					}
@@ -461,7 +461,11 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 					}
 				}
 				if (delegate_type != null && delegate_type.delegate_symbol.has_target) {
-					CCodeExpression target_expr = new CCodeIdentifier (get_delegate_target_cname (get_variable_cname (name)));
+					var target_cname = get_ccode_delegate_target_name (param);
+					if (param.direction == ParameterDirection.OUT) {
+						target_cname = "_vala_" + target_cname;
+					}
+					CCodeExpression target_expr = new CCodeIdentifier (target_cname);
 					CCodeExpression delegate_target_destroy_notify = new CCodeIdentifier (get_delegate_target_destroy_notify_cname (get_variable_cname (name)));
 					if (param.direction == ParameterDirection.REF) {
 						// accessing argument of ref param
@@ -566,7 +570,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 					}
 				}
 			} else if (delegate_type != null && delegate_type.delegate_symbol.has_target && get_ccode_delegate_target (field)) {
-				string target_cname = get_delegate_target_cname (get_ccode_name (field));
+				string target_cname = get_ccode_delegate_target_name (field);
 				string target_destroy_notify_cname = get_delegate_target_destroy_notify_cname (get_ccode_name (field));
 
 				if (((TypeSymbol) field.parent_symbol).is_reference_type ()) {
@@ -632,7 +636,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 					set_array_size_cvalue (result, new CCodeIdentifier (get_array_size_cname (get_ccode_name (field))));
 				}
 			} else if (delegate_type != null && delegate_type.delegate_symbol.has_target && get_ccode_delegate_target (field)) {
-				result.delegate_target_cvalue = new CCodeIdentifier (get_delegate_target_cname (get_ccode_name (field)));
+				result.delegate_target_cvalue = new CCodeIdentifier (get_ccode_delegate_target_name (field));
 				if (result.value_type.value_owned) {
 					result.delegate_target_destroy_notify_cvalue = new CCodeIdentifier (get_delegate_target_destroy_notify_cname (get_ccode_name (field)));
 				}
diff --git a/codegen/valaccodemethodcallmodule.c b/codegen/valaccodemethodcallmodule.c
index 10f4779..49b6a4d 100644
--- a/codegen/valaccodemethodcallmodule.c
+++ b/codegen/valaccodemethodcallmodule.c
@@ -567,30 +567,32 @@ static void vala_ccode_method_call_module_real_visit_method_call (ValaCodeVisito
 	gboolean _tmp1610_ = FALSE;
 	ValaDataType* _tmp1611_;
 	gboolean _tmp1615_;
+	ValaCCodeFunctionCall* _tmp1633_;
+	ValaCCodeFunctionCall* _tmp1634_;
 	ValaCCodeExpression* out_param_ref;
-	gboolean _tmp1633_;
+	gboolean _tmp1635_;
 	gint last_pos = 0;
 	gint min_pos = 0;
-	ValaCCodeFunctionCall* _tmp1649_;
-	ValaCCodeFunctionCall* _tmp1650_;
-	ValaCCodeFunctionCall* _tmp1677_;
-	ValaMethodCall* _tmp1704_;
-	gboolean _tmp1705_;
-	gboolean _tmp1706_;
-	gboolean _tmp1731_;
-	gboolean _tmp1737_ = FALSE;
-	gboolean _tmp1738_ = FALSE;
-	ValaMethod* _tmp1739_;
-	gboolean _tmp1743_;
-	gboolean _tmp1747_;
-	ValaMethod* _tmp1782_;
-	gboolean _tmp1905_ = FALSE;
-	ValaMethodCall* _tmp1906_;
-	ValaCodeNode* _tmp1907_;
-	ValaCodeNode* _tmp1908_;
-	gboolean _tmp1913_;
-	ValaList* _tmp1983_;
-	ValaIterator* _tmp1984_ = NULL;
+	ValaCCodeFunctionCall* _tmp1651_;
+	ValaCCodeFunctionCall* _tmp1652_;
+	ValaCCodeFunctionCall* _tmp1679_;
+	ValaMethodCall* _tmp1706_;
+	gboolean _tmp1707_;
+	gboolean _tmp1708_;
+	gboolean _tmp1733_;
+	gboolean _tmp1739_ = FALSE;
+	gboolean _tmp1740_ = FALSE;
+	ValaMethod* _tmp1741_;
+	gboolean _tmp1745_;
+	gboolean _tmp1749_;
+	ValaMethod* _tmp1784_;
+	gboolean _tmp1907_ = FALSE;
+	ValaMethodCall* _tmp1908_;
+	ValaCodeNode* _tmp1909_;
+	ValaCodeNode* _tmp1910_;
+	gboolean _tmp1915_;
+	ValaList* _tmp1985_;
+	ValaIterator* _tmp1986_ = NULL;
 	self = (ValaCCodeMethodCallModule*) base;
 	g_return_if_fail (expr != NULL);
 	_tmp0_ = expr;
@@ -5047,737 +5049,742 @@ static void vala_ccode_method_call_module_real_visit_method_call (ValaCodeVisito
 		}
 		_vala_code_node_unref0 (sig);
 	}
+	_tmp1633_ = async_call;
+	_tmp1634_ = ccall;
+	if (_tmp1633_ == _tmp1634_) {
+		return_result_via_out_param = FALSE;
+	}
 	out_param_ref = NULL;
-	_tmp1633_ = return_result_via_out_param;
-	if (_tmp1633_) {
-		ValaDataType* _tmp1634_;
-		ValaDataType* _tmp1635_ = NULL;
+	_tmp1635_ = return_result_via_out_param;
+	if (_tmp1635_) {
 		ValaDataType* _tmp1636_;
-		ValaLocalVariable* _tmp1637_ = NULL;
-		ValaLocalVariable* _tmp1638_;
+		ValaDataType* _tmp1637_ = NULL;
+		ValaDataType* _tmp1638_;
+		ValaLocalVariable* _tmp1639_ = NULL;
+		ValaLocalVariable* _tmp1640_;
 		ValaLocalVariable* out_param_var;
-		ValaLocalVariable* _tmp1639_;
-		const gchar* _tmp1640_;
-		const gchar* _tmp1641_;
-		ValaCCodeExpression* _tmp1642_ = NULL;
-		ValaLocalVariable* _tmp1643_;
-		ValaHashMap* _tmp1644_;
-		gint _tmp1645_ = 0;
-		ValaCCodeExpression* _tmp1646_;
-		ValaCCodeUnaryExpression* _tmp1647_;
-		ValaCCodeUnaryExpression* _tmp1648_;
-		_tmp1634_ = itype;
-		_tmp1635_ = vala_data_type_get_return_type (_tmp1634_);
-		_tmp1636_ = _tmp1635_;
-		_tmp1637_ = vala_ccode_base_module_get_temp_variable ((ValaCCodeBaseModule*) self, _tmp1636_, TRUE, NULL, TRUE);
+		ValaLocalVariable* _tmp1641_;
+		const gchar* _tmp1642_;
+		const gchar* _tmp1643_;
+		ValaCCodeExpression* _tmp1644_ = NULL;
+		ValaLocalVariable* _tmp1645_;
+		ValaHashMap* _tmp1646_;
+		gint _tmp1647_ = 0;
+		ValaCCodeExpression* _tmp1648_;
+		ValaCCodeUnaryExpression* _tmp1649_;
+		ValaCCodeUnaryExpression* _tmp1650_;
+		_tmp1636_ = itype;
+		_tmp1637_ = vala_data_type_get_return_type (_tmp1636_);
 		_tmp1638_ = _tmp1637_;
-		_vala_code_node_unref0 (_tmp1636_);
-		out_param_var = _tmp1638_;
-		_tmp1639_ = out_param_var;
-		_tmp1640_ = vala_symbol_get_name ((ValaSymbol*) _tmp1639_);
-		_tmp1641_ = _tmp1640_;
-		_tmp1642_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp1641_);
+		_tmp1639_ = vala_ccode_base_module_get_temp_variable ((ValaCCodeBaseModule*) self, _tmp1638_, TRUE, NULL, TRUE);
+		_tmp1640_ = _tmp1639_;
+		_vala_code_node_unref0 (_tmp1638_);
+		out_param_var = _tmp1640_;
+		_tmp1641_ = out_param_var;
+		_tmp1642_ = vala_symbol_get_name ((ValaSymbol*) _tmp1641_);
+		_tmp1643_ = _tmp1642_;
+		_tmp1644_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp1643_);
 		_vala_ccode_node_unref0 (out_param_ref);
-		out_param_ref = _tmp1642_;
-		_tmp1643_ = out_param_var;
-		vala_ccode_base_module_emit_temp_var ((ValaCCodeBaseModule*) self, _tmp1643_);
-		_tmp1644_ = out_arg_map;
-		_tmp1645_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (gdouble) (-3), FALSE);
-		_tmp1646_ = out_param_ref;
-		_tmp1647_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp1646_);
-		_tmp1648_ = _tmp1647_;
-		vala_map_set ((ValaMap*) _tmp1644_, GINT_TO_POINTER (_tmp1645_), (ValaCCodeExpression*) _tmp1648_);
-		_vala_ccode_node_unref0 (_tmp1648_);
+		out_param_ref = _tmp1644_;
+		_tmp1645_ = out_param_var;
+		vala_ccode_base_module_emit_temp_var ((ValaCCodeBaseModule*) self, _tmp1645_);
+		_tmp1646_ = out_arg_map;
+		_tmp1647_ = vala_ccode_base_module_get_param_pos ((ValaCCodeBaseModule*) self, (gdouble) (-3), FALSE);
+		_tmp1648_ = out_param_ref;
+		_tmp1649_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp1648_);
+		_tmp1650_ = _tmp1649_;
+		vala_map_set ((ValaMap*) _tmp1646_, GINT_TO_POINTER (_tmp1647_), (ValaCCodeExpression*) _tmp1650_);
+		_vala_ccode_node_unref0 (_tmp1650_);
 		_vala_code_node_unref0 (out_param_var);
 	}
-	_tmp1649_ = async_call;
-	_tmp1650_ = ccall;
-	if (_tmp1649_ != _tmp1650_) {
+	_tmp1651_ = async_call;
+	_tmp1652_ = ccall;
+	if (_tmp1651_ != _tmp1652_) {
 		last_pos = -1;
 		while (TRUE) {
-			gint _tmp1670_;
-			ValaCCodeFunctionCall* _tmp1671_;
-			ValaHashMap* _tmp1672_;
-			gint _tmp1673_;
-			gpointer _tmp1674_ = NULL;
-			ValaCCodeExpression* _tmp1675_;
-			gint _tmp1676_;
+			gint _tmp1672_;
+			ValaCCodeFunctionCall* _tmp1673_;
+			ValaHashMap* _tmp1674_;
+			gint _tmp1675_;
+			gpointer _tmp1676_ = NULL;
+			ValaCCodeExpression* _tmp1677_;
+			gint _tmp1678_;
 			min_pos = -1;
 			{
-				ValaHashMap* _tmp1651_;
-				ValaSet* _tmp1652_ = NULL;
-				ValaSet* _tmp1653_;
-				ValaIterator* _tmp1654_ = NULL;
-				ValaIterator* _tmp1655_;
+				ValaHashMap* _tmp1653_;
+				ValaSet* _tmp1654_ = NULL;
+				ValaSet* _tmp1655_;
+				ValaIterator* _tmp1656_ = NULL;
+				ValaIterator* _tmp1657_;
 				ValaIterator* _pos_it;
-				_tmp1651_ = out_arg_map;
-				_tmp1652_ = vala_map_get_keys ((ValaMap*) _tmp1651_);
-				_tmp1653_ = _tmp1652_;
-				_tmp1654_ = vala_iterable_iterator ((ValaIterable*) _tmp1653_);
+				_tmp1653_ = out_arg_map;
+				_tmp1654_ = vala_map_get_keys ((ValaMap*) _tmp1653_);
 				_tmp1655_ = _tmp1654_;
-				_vala_iterable_unref0 (_tmp1653_);
-				_pos_it = _tmp1655_;
+				_tmp1656_ = vala_iterable_iterator ((ValaIterable*) _tmp1655_);
+				_tmp1657_ = _tmp1656_;
+				_vala_iterable_unref0 (_tmp1655_);
+				_pos_it = _tmp1657_;
 				while (TRUE) {
-					ValaIterator* _tmp1656_;
-					gboolean _tmp1657_ = FALSE;
 					ValaIterator* _tmp1658_;
-					gpointer _tmp1659_ = NULL;
+					gboolean _tmp1659_ = FALSE;
+					ValaIterator* _tmp1660_;
+					gpointer _tmp1661_ = NULL;
 					gint pos;
-					gboolean _tmp1660_ = FALSE;
-					gint _tmp1661_;
-					gint _tmp1662_;
-					gboolean _tmp1668_;
-					_tmp1656_ = _pos_it;
-					_tmp1657_ = vala_iterator_next (_tmp1656_);
-					if (!_tmp1657_) {
+					gboolean _tmp1662_ = FALSE;
+					gint _tmp1663_;
+					gint _tmp1664_;
+					gboolean _tmp1670_;
+					_tmp1658_ = _pos_it;
+					_tmp1659_ = vala_iterator_next (_tmp1658_);
+					if (!_tmp1659_) {
 						break;
 					}
-					_tmp1658_ = _pos_it;
-					_tmp1659_ = vala_iterator_get (_tmp1658_);
-					pos = GPOINTER_TO_INT (_tmp1659_);
-					_tmp1661_ = pos;
-					_tmp1662_ = last_pos;
-					if (_tmp1661_ > _tmp1662_) {
-						gboolean _tmp1663_ = FALSE;
-						gint _tmp1664_;
-						gboolean _tmp1667_;
-						_tmp1664_ = min_pos;
-						if (_tmp1664_ == (-1)) {
-							_tmp1663_ = TRUE;
+					_tmp1660_ = _pos_it;
+					_tmp1661_ = vala_iterator_get (_tmp1660_);
+					pos = GPOINTER_TO_INT (_tmp1661_);
+					_tmp1663_ = pos;
+					_tmp1664_ = last_pos;
+					if (_tmp1663_ > _tmp1664_) {
+						gboolean _tmp1665_ = FALSE;
+						gint _tmp1666_;
+						gboolean _tmp1669_;
+						_tmp1666_ = min_pos;
+						if (_tmp1666_ == (-1)) {
+							_tmp1665_ = TRUE;
 						} else {
-							gint _tmp1665_;
-							gint _tmp1666_;
-							_tmp1665_ = pos;
-							_tmp1666_ = min_pos;
-							_tmp1663_ = _tmp1665_ < _tmp1666_;
+							gint _tmp1667_;
+							gint _tmp1668_;
+							_tmp1667_ = pos;
+							_tmp1668_ = min_pos;
+							_tmp1665_ = _tmp1667_ < _tmp1668_;
 						}
-						_tmp1667_ = _tmp1663_;
-						_tmp1660_ = _tmp1667_;
+						_tmp1669_ = _tmp1665_;
+						_tmp1662_ = _tmp1669_;
 					} else {
-						_tmp1660_ = FALSE;
+						_tmp1662_ = FALSE;
 					}
-					_tmp1668_ = _tmp1660_;
-					if (_tmp1668_) {
-						gint _tmp1669_;
-						_tmp1669_ = pos;
-						min_pos = _tmp1669_;
+					_tmp1670_ = _tmp1662_;
+					if (_tmp1670_) {
+						gint _tmp1671_;
+						_tmp1671_ = pos;
+						min_pos = _tmp1671_;
 					}
 				}
 				_vala_iterator_unref0 (_pos_it);
 			}
-			_tmp1670_ = min_pos;
-			if (_tmp1670_ == (-1)) {
+			_tmp1672_ = min_pos;
+			if (_tmp1672_ == (-1)) {
 				break;
 			}
-			_tmp1671_ = ccall;
-			_tmp1672_ = out_arg_map;
-			_tmp1673_ = min_pos;
-			_tmp1674_ = vala_map_get ((ValaMap*) _tmp1672_, GINT_TO_POINTER (_tmp1673_));
-			_tmp1675_ = (ValaCCodeExpression*) _tmp1674_;
-			vala_ccode_function_call_add_argument (_tmp1671_, _tmp1675_);
-			_vala_ccode_node_unref0 (_tmp1675_);
-			_tmp1676_ = min_pos;
-			last_pos = _tmp1676_;
+			_tmp1673_ = ccall;
+			_tmp1674_ = out_arg_map;
+			_tmp1675_ = min_pos;
+			_tmp1676_ = vala_map_get ((ValaMap*) _tmp1674_, GINT_TO_POINTER (_tmp1675_));
+			_tmp1677_ = (ValaCCodeExpression*) _tmp1676_;
+			vala_ccode_function_call_add_argument (_tmp1673_, _tmp1677_);
+			_vala_ccode_node_unref0 (_tmp1677_);
+			_tmp1678_ = min_pos;
+			last_pos = _tmp1678_;
 		}
 	}
-	_tmp1677_ = async_call;
-	if (_tmp1677_ != NULL) {
+	_tmp1679_ = async_call;
+	if (_tmp1679_ != NULL) {
 		last_pos = -1;
 		while (TRUE) {
-			gint _tmp1697_;
-			ValaCCodeFunctionCall* _tmp1698_;
-			ValaHashMap* _tmp1699_;
-			gint _tmp1700_;
-			gpointer _tmp1701_ = NULL;
-			ValaCCodeExpression* _tmp1702_;
-			gint _tmp1703_;
+			gint _tmp1699_;
+			ValaCCodeFunctionCall* _tmp1700_;
+			ValaHashMap* _tmp1701_;
+			gint _tmp1702_;
+			gpointer _tmp1703_ = NULL;
+			ValaCCodeExpression* _tmp1704_;
+			gint _tmp1705_;
 			min_pos = -1;
 			{
-				ValaHashMap* _tmp1678_;
-				ValaSet* _tmp1679_ = NULL;
-				ValaSet* _tmp1680_;
-				ValaIterator* _tmp1681_ = NULL;
-				ValaIterator* _tmp1682_;
+				ValaHashMap* _tmp1680_;
+				ValaSet* _tmp1681_ = NULL;
+				ValaSet* _tmp1682_;
+				ValaIterator* _tmp1683_ = NULL;
+				ValaIterator* _tmp1684_;
 				ValaIterator* _pos_it;
-				_tmp1678_ = in_arg_map;
-				_tmp1679_ = vala_map_get_keys ((ValaMap*) _tmp1678_);
-				_tmp1680_ = _tmp1679_;
-				_tmp1681_ = vala_iterable_iterator ((ValaIterable*) _tmp1680_);
+				_tmp1680_ = in_arg_map;
+				_tmp1681_ = vala_map_get_keys ((ValaMap*) _tmp1680_);
 				_tmp1682_ = _tmp1681_;
-				_vala_iterable_unref0 (_tmp1680_);
-				_pos_it = _tmp1682_;
+				_tmp1683_ = vala_iterable_iterator ((ValaIterable*) _tmp1682_);
+				_tmp1684_ = _tmp1683_;
+				_vala_iterable_unref0 (_tmp1682_);
+				_pos_it = _tmp1684_;
 				while (TRUE) {
-					ValaIterator* _tmp1683_;
-					gboolean _tmp1684_ = FALSE;
 					ValaIterator* _tmp1685_;
-					gpointer _tmp1686_ = NULL;
+					gboolean _tmp1686_ = FALSE;
+					ValaIterator* _tmp1687_;
+					gpointer _tmp1688_ = NULL;
 					gint pos;
-					gboolean _tmp1687_ = FALSE;
-					gint _tmp1688_;
-					gint _tmp1689_;
-					gboolean _tmp1695_;
-					_tmp1683_ = _pos_it;
-					_tmp1684_ = vala_iterator_next (_tmp1683_);
-					if (!_tmp1684_) {
+					gboolean _tmp1689_ = FALSE;
+					gint _tmp1690_;
+					gint _tmp1691_;
+					gboolean _tmp1697_;
+					_tmp1685_ = _pos_it;
+					_tmp1686_ = vala_iterator_next (_tmp1685_);
+					if (!_tmp1686_) {
 						break;
 					}
-					_tmp1685_ = _pos_it;
-					_tmp1686_ = vala_iterator_get (_tmp1685_);
-					pos = GPOINTER_TO_INT (_tmp1686_);
-					_tmp1688_ = pos;
-					_tmp1689_ = last_pos;
-					if (_tmp1688_ > _tmp1689_) {
-						gboolean _tmp1690_ = FALSE;
-						gint _tmp1691_;
-						gboolean _tmp1694_;
-						_tmp1691_ = min_pos;
-						if (_tmp1691_ == (-1)) {
-							_tmp1690_ = TRUE;
+					_tmp1687_ = _pos_it;
+					_tmp1688_ = vala_iterator_get (_tmp1687_);
+					pos = GPOINTER_TO_INT (_tmp1688_);
+					_tmp1690_ = pos;
+					_tmp1691_ = last_pos;
+					if (_tmp1690_ > _tmp1691_) {
+						gboolean _tmp1692_ = FALSE;
+						gint _tmp1693_;
+						gboolean _tmp1696_;
+						_tmp1693_ = min_pos;
+						if (_tmp1693_ == (-1)) {
+							_tmp1692_ = TRUE;
 						} else {
-							gint _tmp1692_;
-							gint _tmp1693_;
-							_tmp1692_ = pos;
-							_tmp1693_ = min_pos;
-							_tmp1690_ = _tmp1692_ < _tmp1693_;
+							gint _tmp1694_;
+							gint _tmp1695_;
+							_tmp1694_ = pos;
+							_tmp1695_ = min_pos;
+							_tmp1692_ = _tmp1694_ < _tmp1695_;
 						}
-						_tmp1694_ = _tmp1690_;
-						_tmp1687_ = _tmp1694_;
+						_tmp1696_ = _tmp1692_;
+						_tmp1689_ = _tmp1696_;
 					} else {
-						_tmp1687_ = FALSE;
+						_tmp1689_ = FALSE;
 					}
-					_tmp1695_ = _tmp1687_;
-					if (_tmp1695_) {
-						gint _tmp1696_;
-						_tmp1696_ = pos;
-						min_pos = _tmp1696_;
+					_tmp1697_ = _tmp1689_;
+					if (_tmp1697_) {
+						gint _tmp1698_;
+						_tmp1698_ = pos;
+						min_pos = _tmp1698_;
 					}
 				}
 				_vala_iterator_unref0 (_pos_it);
 			}
-			_tmp1697_ = min_pos;
-			if (_tmp1697_ == (-1)) {
+			_tmp1699_ = min_pos;
+			if (_tmp1699_ == (-1)) {
 				break;
 			}
-			_tmp1698_ = async_call;
-			_tmp1699_ = in_arg_map;
-			_tmp1700_ = min_pos;
-			_tmp1701_ = vala_map_get ((ValaMap*) _tmp1699_, GINT_TO_POINTER (_tmp1700_));
-			_tmp1702_ = (ValaCCodeExpression*) _tmp1701_;
-			vala_ccode_function_call_add_argument (_tmp1698_, _tmp1702_);
-			_vala_ccode_node_unref0 (_tmp1702_);
-			_tmp1703_ = min_pos;
-			last_pos = _tmp1703_;
+			_tmp1700_ = async_call;
+			_tmp1701_ = in_arg_map;
+			_tmp1702_ = min_pos;
+			_tmp1703_ = vala_map_get ((ValaMap*) _tmp1701_, GINT_TO_POINTER (_tmp1702_));
+			_tmp1704_ = (ValaCCodeExpression*) _tmp1703_;
+			vala_ccode_function_call_add_argument (_tmp1700_, _tmp1704_);
+			_vala_ccode_node_unref0 (_tmp1704_);
+			_tmp1705_ = min_pos;
+			last_pos = _tmp1705_;
 		}
 	}
-	_tmp1704_ = expr;
-	_tmp1705_ = vala_method_call_get_is_yield_expression (_tmp1704_);
-	_tmp1706_ = _tmp1705_;
-	if (_tmp1706_) {
-		gint _tmp1707_;
+	_tmp1706_ = expr;
+	_tmp1707_ = vala_method_call_get_is_yield_expression (_tmp1706_);
+	_tmp1708_ = _tmp1707_;
+	if (_tmp1708_) {
+		gint _tmp1709_;
 		gint state;
-		ValaCCodeFunction* _tmp1708_;
-		ValaCCodeFunction* _tmp1709_;
-		ValaCCodeIdentifier* _tmp1710_;
-		ValaCCodeIdentifier* _tmp1711_;
-		ValaCCodeMemberAccess* _tmp1712_;
-		ValaCCodeMemberAccess* _tmp1713_;
-		gint _tmp1714_;
-		gchar* _tmp1715_ = NULL;
-		gchar* _tmp1716_;
-		ValaCCodeConstant* _tmp1717_;
-		ValaCCodeConstant* _tmp1718_;
-		ValaCCodeFunction* _tmp1719_;
-		ValaCCodeFunction* _tmp1720_;
-		ValaCCodeFunctionCall* _tmp1721_;
+		ValaCCodeFunction* _tmp1710_;
+		ValaCCodeFunction* _tmp1711_;
+		ValaCCodeIdentifier* _tmp1712_;
+		ValaCCodeIdentifier* _tmp1713_;
+		ValaCCodeMemberAccess* _tmp1714_;
+		ValaCCodeMemberAccess* _tmp1715_;
+		gint _tmp1716_;
+		gchar* _tmp1717_ = NULL;
+		gchar* _tmp1718_;
+		ValaCCodeConstant* _tmp1719_;
+		ValaCCodeConstant* _tmp1720_;
+		ValaCCodeFunction* _tmp1721_;
 		ValaCCodeFunction* _tmp1722_;
-		ValaCCodeFunction* _tmp1723_;
-		ValaCCodeConstant* _tmp1724_;
-		ValaCCodeConstant* _tmp1725_;
-		ValaCCodeFunction* _tmp1726_;
-		ValaCCodeFunction* _tmp1727_;
-		gint _tmp1728_;
-		gchar* _tmp1729_ = NULL;
-		gchar* _tmp1730_;
-		_tmp1707_ = ((ValaCCodeBaseModule*) self)->next_coroutine_state;
-		((ValaCCodeBaseModule*) self)->next_coroutine_state = _tmp1707_ + 1;
-		state = _tmp1707_;
-		_tmp1708_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-		_tmp1709_ = _tmp1708_;
-		_tmp1710_ = vala_ccode_identifier_new ("_data_");
+		ValaCCodeFunctionCall* _tmp1723_;
+		ValaCCodeFunction* _tmp1724_;
+		ValaCCodeFunction* _tmp1725_;
+		ValaCCodeConstant* _tmp1726_;
+		ValaCCodeConstant* _tmp1727_;
+		ValaCCodeFunction* _tmp1728_;
+		ValaCCodeFunction* _tmp1729_;
+		gint _tmp1730_;
+		gchar* _tmp1731_ = NULL;
+		gchar* _tmp1732_;
+		_tmp1709_ = ((ValaCCodeBaseModule*) self)->next_coroutine_state;
+		((ValaCCodeBaseModule*) self)->next_coroutine_state = _tmp1709_ + 1;
+		state = _tmp1709_;
+		_tmp1710_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
 		_tmp1711_ = _tmp1710_;
-		_tmp1712_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp1711_, "_state_");
+		_tmp1712_ = vala_ccode_identifier_new ("_data_");
 		_tmp1713_ = _tmp1712_;
-		_tmp1714_ = state;
-		_tmp1715_ = g_strdup_printf ("%i", _tmp1714_);
-		_tmp1716_ = _tmp1715_;
-		_tmp1717_ = vala_ccode_constant_new (_tmp1716_);
+		_tmp1714_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp1713_, "_state_");
+		_tmp1715_ = _tmp1714_;
+		_tmp1716_ = state;
+		_tmp1717_ = g_strdup_printf ("%i", _tmp1716_);
 		_tmp1718_ = _tmp1717_;
-		vala_ccode_function_add_assignment (_tmp1709_, (ValaCCodeExpression*) _tmp1713_, (ValaCCodeExpression*) _tmp1718_);
-		_vala_ccode_node_unref0 (_tmp1718_);
-		_g_free0 (_tmp1716_);
-		_vala_ccode_node_unref0 (_tmp1713_);
-		_vala_ccode_node_unref0 (_tmp1711_);
-		_tmp1719_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp1719_ = vala_ccode_constant_new (_tmp1718_);
 		_tmp1720_ = _tmp1719_;
-		_tmp1721_ = async_call;
-		vala_ccode_function_add_expression (_tmp1720_, (ValaCCodeExpression*) _tmp1721_);
-		_tmp1722_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-		_tmp1723_ = _tmp1722_;
-		_tmp1724_ = vala_ccode_constant_new ("FALSE");
+		vala_ccode_function_add_assignment (_tmp1711_, (ValaCCodeExpression*) _tmp1715_, (ValaCCodeExpression*) _tmp1720_);
+		_vala_ccode_node_unref0 (_tmp1720_);
+		_g_free0 (_tmp1718_);
+		_vala_ccode_node_unref0 (_tmp1715_);
+		_vala_ccode_node_unref0 (_tmp1713_);
+		_tmp1721_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp1722_ = _tmp1721_;
+		_tmp1723_ = async_call;
+		vala_ccode_function_add_expression (_tmp1722_, (ValaCCodeExpression*) _tmp1723_);
+		_tmp1724_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
 		_tmp1725_ = _tmp1724_;
-		vala_ccode_function_add_return (_tmp1723_, (ValaCCodeExpression*) _tmp1725_);
-		_vala_ccode_node_unref0 (_tmp1725_);
-		_tmp1726_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp1726_ = vala_ccode_constant_new ("FALSE");
 		_tmp1727_ = _tmp1726_;
-		_tmp1728_ = state;
-		_tmp1729_ = g_strdup_printf ("_state_%d", _tmp1728_);
-		_tmp1730_ = _tmp1729_;
-		vala_ccode_function_add_label (_tmp1727_, _tmp1730_);
-		_g_free0 (_tmp1730_);
+		vala_ccode_function_add_return (_tmp1725_, (ValaCCodeExpression*) _tmp1727_);
+		_vala_ccode_node_unref0 (_tmp1727_);
+		_tmp1728_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp1729_ = _tmp1728_;
+		_tmp1730_ = state;
+		_tmp1731_ = g_strdup_printf ("_state_%d", _tmp1730_);
+		_tmp1732_ = _tmp1731_;
+		vala_ccode_function_add_label (_tmp1729_, _tmp1732_);
+		_g_free0 (_tmp1732_);
 	}
-	_tmp1731_ = return_result_via_out_param;
-	if (_tmp1731_) {
-		ValaCCodeFunction* _tmp1732_;
-		ValaCCodeFunction* _tmp1733_;
-		ValaCCodeExpression* _tmp1734_;
-		ValaCCodeExpression* _tmp1735_;
+	_tmp1733_ = return_result_via_out_param;
+	if (_tmp1733_) {
+		ValaCCodeFunction* _tmp1734_;
+		ValaCCodeFunction* _tmp1735_;
 		ValaCCodeExpression* _tmp1736_;
-		_tmp1732_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-		_tmp1733_ = _tmp1732_;
-		_tmp1734_ = ccall_expr;
-		vala_ccode_function_add_expression (_tmp1733_, _tmp1734_);
-		_tmp1735_ = out_param_ref;
-		_tmp1736_ = _vala_ccode_node_ref0 (_tmp1735_);
+		ValaCCodeExpression* _tmp1737_;
+		ValaCCodeExpression* _tmp1738_;
+		_tmp1734_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp1735_ = _tmp1734_;
+		_tmp1736_ = ccall_expr;
+		vala_ccode_function_add_expression (_tmp1735_, _tmp1736_);
+		_tmp1737_ = out_param_ref;
+		_tmp1738_ = _vala_ccode_node_ref0 (_tmp1737_);
 		_vala_ccode_node_unref0 (ccall_expr);
-		ccall_expr = _tmp1736_;
+		ccall_expr = _tmp1738_;
 	}
-	_tmp1739_ = m;
-	if (_tmp1739_ != NULL) {
-		ValaMethod* _tmp1740_;
-		ValaMemberBinding _tmp1741_;
-		ValaMemberBinding _tmp1742_;
-		_tmp1740_ = m;
-		_tmp1741_ = vala_method_get_binding (_tmp1740_);
-		_tmp1742_ = _tmp1741_;
-		_tmp1738_ = _tmp1742_ == VALA_MEMBER_BINDING_INSTANCE;
+	_tmp1741_ = m;
+	if (_tmp1741_ != NULL) {
+		ValaMethod* _tmp1742_;
+		ValaMemberBinding _tmp1743_;
+		ValaMemberBinding _tmp1744_;
+		_tmp1742_ = m;
+		_tmp1743_ = vala_method_get_binding (_tmp1742_);
+		_tmp1744_ = _tmp1743_;
+		_tmp1740_ = _tmp1744_ == VALA_MEMBER_BINDING_INSTANCE;
 	} else {
-		_tmp1738_ = FALSE;
+		_tmp1740_ = FALSE;
 	}
-	_tmp1743_ = _tmp1738_;
-	if (_tmp1743_) {
-		ValaMethod* _tmp1744_;
-		gboolean _tmp1745_;
-		gboolean _tmp1746_;
-		_tmp1744_ = m;
-		_tmp1745_ = vala_method_get_returns_modified_pointer (_tmp1744_);
-		_tmp1746_ = _tmp1745_;
-		_tmp1737_ = _tmp1746_;
+	_tmp1745_ = _tmp1740_;
+	if (_tmp1745_) {
+		ValaMethod* _tmp1746_;
+		gboolean _tmp1747_;
+		gboolean _tmp1748_;
+		_tmp1746_ = m;
+		_tmp1747_ = vala_method_get_returns_modified_pointer (_tmp1746_);
+		_tmp1748_ = _tmp1747_;
+		_tmp1739_ = _tmp1748_;
 	} else {
-		_tmp1737_ = FALSE;
+		_tmp1739_ = FALSE;
 	}
-	_tmp1747_ = _tmp1737_;
-	if (_tmp1747_) {
-		gboolean _tmp1748_ = FALSE;
-		gboolean _tmp1749_ = FALSE;
-		ValaMemberAccess* _tmp1750_;
-		gboolean _tmp1756_;
-		gboolean _tmp1760_;
-		_tmp1750_ = ma;
-		if (_tmp1750_ != NULL) {
-			ValaMemberAccess* _tmp1751_;
-			ValaExpression* _tmp1752_;
-			ValaExpression* _tmp1753_;
-			ValaSymbol* _tmp1754_;
-			ValaSymbol* _tmp1755_;
-			_tmp1751_ = ma;
-			_tmp1752_ = vala_member_access_get_inner (_tmp1751_);
-			_tmp1753_ = _tmp1752_;
-			_tmp1754_ = vala_expression_get_symbol_reference (_tmp1753_);
+	_tmp1749_ = _tmp1739_;
+	if (_tmp1749_) {
+		gboolean _tmp1750_ = FALSE;
+		gboolean _tmp1751_ = FALSE;
+		ValaMemberAccess* _tmp1752_;
+		gboolean _tmp1758_;
+		gboolean _tmp1762_;
+		_tmp1752_ = ma;
+		if (_tmp1752_ != NULL) {
+			ValaMemberAccess* _tmp1753_;
+			ValaExpression* _tmp1754_;
+			ValaExpression* _tmp1755_;
+			ValaSymbol* _tmp1756_;
+			ValaSymbol* _tmp1757_;
+			_tmp1753_ = ma;
+			_tmp1754_ = vala_member_access_get_inner (_tmp1753_);
 			_tmp1755_ = _tmp1754_;
-			_tmp1749_ = VALA_IS_PROPERTY (_tmp1755_);
+			_tmp1756_ = vala_expression_get_symbol_reference (_tmp1755_);
+			_tmp1757_ = _tmp1756_;
+			_tmp1751_ = VALA_IS_PROPERTY (_tmp1757_);
 		} else {
-			_tmp1749_ = FALSE;
+			_tmp1751_ = FALSE;
 		}
-		_tmp1756_ = _tmp1749_;
-		if (_tmp1756_) {
-			ValaMemberAccess* _tmp1757_;
-			ValaExpression* _tmp1758_;
-			ValaExpression* _tmp1759_;
-			_tmp1757_ = ma;
-			_tmp1758_ = vala_member_access_get_inner (_tmp1757_);
-			_tmp1759_ = _tmp1758_;
-			_tmp1748_ = VALA_IS_MEMBER_ACCESS (_tmp1759_);
+		_tmp1758_ = _tmp1751_;
+		if (_tmp1758_) {
+			ValaMemberAccess* _tmp1759_;
+			ValaExpression* _tmp1760_;
+			ValaExpression* _tmp1761_;
+			_tmp1759_ = ma;
+			_tmp1760_ = vala_member_access_get_inner (_tmp1759_);
+			_tmp1761_ = _tmp1760_;
+			_tmp1750_ = VALA_IS_MEMBER_ACCESS (_tmp1761_);
 		} else {
-			_tmp1748_ = FALSE;
+			_tmp1750_ = FALSE;
 		}
-		_tmp1760_ = _tmp1748_;
-		if (_tmp1760_) {
-			ValaMemberAccess* _tmp1761_;
-			ValaExpression* _tmp1762_;
-			ValaExpression* _tmp1763_;
-			ValaSymbol* _tmp1764_;
-			ValaSymbol* _tmp1765_;
-			ValaProperty* _tmp1766_;
+		_tmp1762_ = _tmp1750_;
+		if (_tmp1762_) {
+			ValaMemberAccess* _tmp1763_;
+			ValaExpression* _tmp1764_;
+			ValaExpression* _tmp1765_;
+			ValaSymbol* _tmp1766_;
+			ValaSymbol* _tmp1767_;
+			ValaProperty* _tmp1768_;
 			ValaProperty* prop;
-			ValaProperty* _tmp1767_;
-			ValaMemberAccess* _tmp1768_;
-			ValaExpression* _tmp1769_;
-			ValaExpression* _tmp1770_;
+			ValaProperty* _tmp1769_;
+			ValaMemberAccess* _tmp1770_;
 			ValaExpression* _tmp1771_;
 			ValaExpression* _tmp1772_;
-			ValaMethodCall* _tmp1773_;
-			ValaDataType* _tmp1774_;
-			ValaDataType* _tmp1775_;
-			ValaCCodeExpression* _tmp1776_;
-			ValaGLibValue* _tmp1777_;
-			ValaGLibValue* _tmp1778_;
-			_tmp1761_ = ma;
-			_tmp1762_ = vala_member_access_get_inner (_tmp1761_);
-			_tmp1763_ = _tmp1762_;
-			_tmp1764_ = vala_expression_get_symbol_reference (_tmp1763_);
+			ValaExpression* _tmp1773_;
+			ValaExpression* _tmp1774_;
+			ValaMethodCall* _tmp1775_;
+			ValaDataType* _tmp1776_;
+			ValaDataType* _tmp1777_;
+			ValaCCodeExpression* _tmp1778_;
+			ValaGLibValue* _tmp1779_;
+			ValaGLibValue* _tmp1780_;
+			_tmp1763_ = ma;
+			_tmp1764_ = vala_member_access_get_inner (_tmp1763_);
 			_tmp1765_ = _tmp1764_;
-			_tmp1766_ = _vala_code_node_ref0 (VALA_PROPERTY (_tmp1765_));
-			prop = _tmp1766_;
-			_tmp1767_ = prop;
-			_tmp1768_ = ma;
-			_tmp1769_ = vala_member_access_get_inner (_tmp1768_);
-			_tmp1770_ = _tmp1769_;
-			_tmp1771_ = vala_member_access_get_inner (VALA_MEMBER_ACCESS (_tmp1770_));
+			_tmp1766_ = vala_expression_get_symbol_reference (_tmp1765_);
+			_tmp1767_ = _tmp1766_;
+			_tmp1768_ = _vala_code_node_ref0 (VALA_PROPERTY (_tmp1767_));
+			prop = _tmp1768_;
+			_tmp1769_ = prop;
+			_tmp1770_ = ma;
+			_tmp1771_ = vala_member_access_get_inner (_tmp1770_);
 			_tmp1772_ = _tmp1771_;
-			_tmp1773_ = expr;
-			_tmp1774_ = vala_expression_get_value_type ((ValaExpression*) _tmp1773_);
-			_tmp1775_ = _tmp1774_;
-			_tmp1776_ = ccall_expr;
-			_tmp1777_ = vala_glib_value_new (_tmp1775_, _tmp1776_, FALSE);
-			_tmp1778_ = _tmp1777_;
-			vala_ccode_base_module_store_property ((ValaCCodeBaseModule*) self, _tmp1767_, _tmp1772_, (ValaTargetValue*) _tmp1778_);
-			_vala_target_value_unref0 (_tmp1778_);
+			_tmp1773_ = vala_member_access_get_inner (VALA_MEMBER_ACCESS (_tmp1772_));
+			_tmp1774_ = _tmp1773_;
+			_tmp1775_ = expr;
+			_tmp1776_ = vala_expression_get_value_type ((ValaExpression*) _tmp1775_);
+			_tmp1777_ = _tmp1776_;
+			_tmp1778_ = ccall_expr;
+			_tmp1779_ = vala_glib_value_new (_tmp1777_, _tmp1778_, FALSE);
+			_tmp1780_ = _tmp1779_;
+			vala_ccode_base_module_store_property ((ValaCCodeBaseModule*) self, _tmp1769_, _tmp1774_, (ValaTargetValue*) _tmp1780_);
+			_vala_target_value_unref0 (_tmp1780_);
 			_vala_ccode_node_unref0 (ccall_expr);
 			ccall_expr = NULL;
 			_vala_code_node_unref0 (prop);
 		} else {
-			ValaCCodeExpression* _tmp1779_;
-			ValaCCodeExpression* _tmp1780_;
-			ValaCCodeAssignment* _tmp1781_;
-			_tmp1779_ = instance;
-			_tmp1780_ = ccall_expr;
-			_tmp1781_ = vala_ccode_assignment_new (_tmp1779_, _tmp1780_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
+			ValaCCodeExpression* _tmp1781_;
+			ValaCCodeExpression* _tmp1782_;
+			ValaCCodeAssignment* _tmp1783_;
+			_tmp1781_ = instance;
+			_tmp1782_ = ccall_expr;
+			_tmp1783_ = vala_ccode_assignment_new (_tmp1781_, _tmp1782_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
 			_vala_ccode_node_unref0 (ccall_expr);
-			ccall_expr = (ValaCCodeExpression*) _tmp1781_;
+			ccall_expr = (ValaCCodeExpression*) _tmp1783_;
 		}
 	}
-	_tmp1782_ = m;
-	if (VALA_IS_ARRAY_RESIZE_METHOD (_tmp1782_)) {
-		ValaMethodCall* _tmp1783_;
-		ValaList* _tmp1784_ = NULL;
-		ValaList* _tmp1785_;
-		ValaIterator* _tmp1786_ = NULL;
-		ValaIterator* _tmp1787_;
-		ValaIterator* arg_it;
-		ValaIterator* _tmp1788_;
+	_tmp1784_ = m;
+	if (VALA_IS_ARRAY_RESIZE_METHOD (_tmp1784_)) {
+		ValaMethodCall* _tmp1785_;
+		ValaList* _tmp1786_ = NULL;
+		ValaList* _tmp1787_;
+		ValaIterator* _tmp1788_ = NULL;
 		ValaIterator* _tmp1789_;
-		gpointer _tmp1790_ = NULL;
-		ValaExpression* _tmp1791_;
-		ValaCCodeExpression* _tmp1792_ = NULL;
-		ValaCCodeExpression* _tmp1793_;
+		ValaIterator* arg_it;
+		ValaIterator* _tmp1790_;
+		ValaIterator* _tmp1791_;
+		gpointer _tmp1792_ = NULL;
+		ValaExpression* _tmp1793_;
+		ValaCCodeExpression* _tmp1794_ = NULL;
+		ValaCCodeExpression* _tmp1795_;
 		ValaCCodeExpression* new_size;
-		ValaDataType* _tmp1794_;
-		ValaLocalVariable* _tmp1795_ = NULL;
+		ValaDataType* _tmp1796_;
+		ValaLocalVariable* _tmp1797_ = NULL;
 		ValaLocalVariable* temp_decl;
-		ValaLocalVariable* _tmp1796_;
-		const gchar* _tmp1797_;
-		const gchar* _tmp1798_;
-		ValaCCodeExpression* _tmp1799_ = NULL;
+		ValaLocalVariable* _tmp1798_;
+		const gchar* _tmp1799_;
+		const gchar* _tmp1800_;
+		ValaCCodeExpression* _tmp1801_ = NULL;
 		ValaCCodeExpression* temp_ref;
-		ValaLocalVariable* _tmp1800_;
-		ValaCCodeFile* _tmp1801_;
-		ValaMemberAccess* _tmp1802_;
-		ValaExpression* _tmp1803_;
-		ValaExpression* _tmp1804_;
-		ValaCCodeExpression* _tmp1805_ = NULL;
+		ValaLocalVariable* _tmp1802_;
+		ValaCCodeFile* _tmp1803_;
+		ValaMemberAccess* _tmp1804_;
+		ValaExpression* _tmp1805_;
+		ValaExpression* _tmp1806_;
+		ValaCCodeExpression* _tmp1807_ = NULL;
 		ValaCCodeExpression* clen;
-		ValaMemberAccess* _tmp1806_;
-		ValaExpression* _tmp1807_;
-		ValaExpression* _tmp1808_;
-		ValaCCodeExpression* _tmp1809_ = NULL;
+		ValaMemberAccess* _tmp1808_;
+		ValaExpression* _tmp1809_;
+		ValaExpression* _tmp1810_;
+		ValaCCodeExpression* _tmp1811_ = NULL;
 		ValaCCodeExpression* celems;
-		ValaMemberAccess* _tmp1810_;
-		ValaExpression* _tmp1811_;
-		ValaExpression* _tmp1812_;
-		ValaDataType* _tmp1813_;
-		ValaDataType* _tmp1814_;
-		ValaArrayType* _tmp1815_;
+		ValaMemberAccess* _tmp1812_;
+		ValaExpression* _tmp1813_;
+		ValaExpression* _tmp1814_;
+		ValaDataType* _tmp1815_;
+		ValaDataType* _tmp1816_;
+		ValaArrayType* _tmp1817_;
 		ValaArrayType* array_type;
-		ValaArrayType* _tmp1816_;
-		ValaDataType* _tmp1817_;
-		ValaDataType* _tmp1818_;
-		gchar* _tmp1819_ = NULL;
-		gchar* _tmp1820_;
+		ValaArrayType* _tmp1818_;
+		ValaDataType* _tmp1819_;
+		ValaDataType* _tmp1820_;
 		gchar* _tmp1821_ = NULL;
 		gchar* _tmp1822_;
-		ValaCCodeIdentifier* _tmp1823_;
-		ValaCCodeIdentifier* _tmp1824_;
+		gchar* _tmp1823_ = NULL;
+		gchar* _tmp1824_;
+		ValaCCodeIdentifier* _tmp1825_;
+		ValaCCodeIdentifier* _tmp1826_;
 		ValaCCodeIdentifier* csizeof;
-		ValaCCodeExpression* _tmp1825_;
-		ValaCCodeExpression* _tmp1826_;
-		ValaCCodeBinaryExpression* _tmp1827_;
-		ValaCCodeBinaryExpression* cdelta;
+		ValaCCodeExpression* _tmp1827_;
 		ValaCCodeExpression* _tmp1828_;
-		ValaCCodeExpression* _tmp1829_;
-		ValaCCodeBinaryExpression* _tmp1830_;
+		ValaCCodeBinaryExpression* _tmp1829_;
+		ValaCCodeBinaryExpression* cdelta;
+		ValaCCodeExpression* _tmp1830_;
+		ValaCCodeExpression* _tmp1831_;
+		ValaCCodeBinaryExpression* _tmp1832_;
 		ValaCCodeBinaryExpression* ccheck;
-		ValaCCodeIdentifier* _tmp1831_;
-		ValaCCodeIdentifier* _tmp1832_;
-		ValaCCodeFunctionCall* _tmp1833_;
-		ValaCCodeFunctionCall* _tmp1834_;
-		ValaCCodeFunctionCall* czero;
+		ValaCCodeIdentifier* _tmp1833_;
+		ValaCCodeIdentifier* _tmp1834_;
 		ValaCCodeFunctionCall* _tmp1835_;
-		ValaCCodeExpression* _tmp1836_;
-		ValaCCodeExpression* _tmp1837_;
-		ValaCCodeBinaryExpression* _tmp1838_;
-		ValaCCodeBinaryExpression* _tmp1839_;
-		ValaCCodeFunctionCall* _tmp1840_;
-		ValaCCodeConstant* _tmp1841_;
-		ValaCCodeConstant* _tmp1842_;
-		ValaCCodeFunctionCall* _tmp1843_;
-		ValaCCodeIdentifier* _tmp1844_;
-		ValaCCodeBinaryExpression* _tmp1845_;
-		ValaCCodeBinaryExpression* _tmp1846_;
+		ValaCCodeFunctionCall* _tmp1836_;
+		ValaCCodeFunctionCall* czero;
+		ValaCCodeFunctionCall* _tmp1837_;
+		ValaCCodeExpression* _tmp1838_;
+		ValaCCodeExpression* _tmp1839_;
+		ValaCCodeBinaryExpression* _tmp1840_;
+		ValaCCodeBinaryExpression* _tmp1841_;
+		ValaCCodeFunctionCall* _tmp1842_;
+		ValaCCodeConstant* _tmp1843_;
+		ValaCCodeConstant* _tmp1844_;
+		ValaCCodeFunctionCall* _tmp1845_;
+		ValaCCodeIdentifier* _tmp1846_;
 		ValaCCodeBinaryExpression* _tmp1847_;
-		ValaCCodeFunction* _tmp1848_;
-		ValaCCodeFunction* _tmp1849_;
-		ValaCCodeExpression* _tmp1850_;
-		ValaCCodeExpression* _tmp1851_;
-		ValaCCodeFunction* _tmp1852_;
-		ValaCCodeFunction* _tmp1853_;
-		ValaCCodeExpression* _tmp1854_;
+		ValaCCodeBinaryExpression* _tmp1848_;
+		ValaCCodeBinaryExpression* _tmp1849_;
+		ValaCCodeFunction* _tmp1850_;
+		ValaCCodeFunction* _tmp1851_;
+		ValaCCodeExpression* _tmp1852_;
+		ValaCCodeExpression* _tmp1853_;
+		ValaCCodeFunction* _tmp1854_;
 		ValaCCodeFunction* _tmp1855_;
-		ValaCCodeFunction* _tmp1856_;
-		ValaCCodeBinaryExpression* _tmp1857_;
-		ValaCCodeFunctionCall* _tmp1858_;
-		ValaCCodeConstant* _tmp1859_;
-		ValaCCodeConstant* _tmp1860_;
-		ValaCCodeConditionalExpression* _tmp1861_;
-		ValaCCodeConditionalExpression* _tmp1862_;
-		ValaCCodeFunction* _tmp1863_;
-		ValaCCodeFunction* _tmp1864_;
-		ValaMemberAccess* _tmp1865_;
-		ValaExpression* _tmp1866_;
-		ValaExpression* _tmp1867_;
-		ValaCCodeExpression* _tmp1868_ = NULL;
-		ValaCCodeExpression* _tmp1869_;
-		ValaCCodeExpression* _tmp1870_;
-		ValaMemberAccess* _tmp1871_;
-		ValaExpression* _tmp1872_;
-		ValaExpression* _tmp1873_;
-		ValaSymbol* _tmp1874_;
-		ValaSymbol* _tmp1875_;
+		ValaCCodeExpression* _tmp1856_;
+		ValaCCodeFunction* _tmp1857_;
+		ValaCCodeFunction* _tmp1858_;
+		ValaCCodeBinaryExpression* _tmp1859_;
+		ValaCCodeFunctionCall* _tmp1860_;
+		ValaCCodeConstant* _tmp1861_;
+		ValaCCodeConstant* _tmp1862_;
+		ValaCCodeConditionalExpression* _tmp1863_;
+		ValaCCodeConditionalExpression* _tmp1864_;
+		ValaCCodeFunction* _tmp1865_;
+		ValaCCodeFunction* _tmp1866_;
+		ValaMemberAccess* _tmp1867_;
+		ValaExpression* _tmp1868_;
+		ValaExpression* _tmp1869_;
+		ValaCCodeExpression* _tmp1870_ = NULL;
+		ValaCCodeExpression* _tmp1871_;
+		ValaCCodeExpression* _tmp1872_;
+		ValaMemberAccess* _tmp1873_;
+		ValaExpression* _tmp1874_;
+		ValaExpression* _tmp1875_;
 		ValaSymbol* _tmp1876_;
-		ValaSymbol* array_var;
 		ValaSymbol* _tmp1877_;
-		ValaLocalVariable* _tmp1878_;
+		ValaSymbol* _tmp1878_;
+		ValaSymbol* array_var;
+		ValaSymbol* _tmp1879_;
+		ValaLocalVariable* _tmp1880_;
 		ValaLocalVariable* array_local;
-		gboolean _tmp1879_ = FALSE;
-		gboolean _tmp1880_ = FALSE;
-		ValaSymbol* _tmp1881_;
-		gboolean _tmp1884_;
-		gboolean _tmp1894_;
-		_tmp1783_ = expr;
-		_tmp1784_ = vala_method_call_get_argument_list (_tmp1783_);
-		_tmp1785_ = _tmp1784_;
-		_tmp1786_ = vala_iterable_iterator ((ValaIterable*) _tmp1785_);
+		gboolean _tmp1881_ = FALSE;
+		gboolean _tmp1882_ = FALSE;
+		ValaSymbol* _tmp1883_;
+		gboolean _tmp1886_;
+		gboolean _tmp1896_;
+		_tmp1785_ = expr;
+		_tmp1786_ = vala_method_call_get_argument_list (_tmp1785_);
 		_tmp1787_ = _tmp1786_;
-		_vala_iterable_unref0 (_tmp1785_);
-		arg_it = _tmp1787_;
-		_tmp1788_ = arg_it;
-		vala_iterator_next (_tmp1788_);
-		_tmp1789_ = arg_it;
-		_tmp1790_ = vala_iterator_get (_tmp1789_);
-		_tmp1791_ = (ValaExpression*) _tmp1790_;
-		_tmp1792_ = vala_ccode_base_module_get_cvalue ((ValaCCodeBaseModule*) self, _tmp1791_);
-		_tmp1793_ = _tmp1792_;
-		_vala_code_node_unref0 (_tmp1791_);
-		new_size = _tmp1793_;
-		_tmp1794_ = ((ValaCCodeBaseModule*) self)->int_type;
-		_tmp1795_ = vala_ccode_base_module_get_temp_variable ((ValaCCodeBaseModule*) self, _tmp1794_, TRUE, NULL, TRUE);
-		temp_decl = _tmp1795_;
-		_tmp1796_ = temp_decl;
-		_tmp1797_ = vala_symbol_get_name ((ValaSymbol*) _tmp1796_);
-		_tmp1798_ = _tmp1797_;
-		_tmp1799_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp1798_);
-		temp_ref = _tmp1799_;
-		_tmp1800_ = temp_decl;
-		vala_ccode_base_module_emit_temp_var ((ValaCCodeBaseModule*) self, _tmp1800_);
-		_tmp1801_ = ((ValaCCodeBaseModule*) self)->cfile;
-		vala_ccode_file_add_include (_tmp1801_, "string.h", FALSE);
-		_tmp1802_ = ma;
-		_tmp1803_ = vala_member_access_get_inner (_tmp1802_);
-		_tmp1804_ = _tmp1803_;
-		_tmp1805_ = vala_ccode_base_module_get_array_length_cexpression ((ValaCCodeBaseModule*) self, _tmp1804_, 1);
-		clen = _tmp1805_;
-		_tmp1806_ = ma;
-		_tmp1807_ = vala_member_access_get_inner (_tmp1806_);
-		_tmp1808_ = _tmp1807_;
-		_tmp1809_ = vala_ccode_base_module_get_cvalue ((ValaCCodeBaseModule*) self, _tmp1808_);
-		celems = _tmp1809_;
-		_tmp1810_ = ma;
-		_tmp1811_ = vala_member_access_get_inner (_tmp1810_);
-		_tmp1812_ = _tmp1811_;
-		_tmp1813_ = vala_expression_get_value_type (_tmp1812_);
+		_tmp1788_ = vala_iterable_iterator ((ValaIterable*) _tmp1787_);
+		_tmp1789_ = _tmp1788_;
+		_vala_iterable_unref0 (_tmp1787_);
+		arg_it = _tmp1789_;
+		_tmp1790_ = arg_it;
+		vala_iterator_next (_tmp1790_);
+		_tmp1791_ = arg_it;
+		_tmp1792_ = vala_iterator_get (_tmp1791_);
+		_tmp1793_ = (ValaExpression*) _tmp1792_;
+		_tmp1794_ = vala_ccode_base_module_get_cvalue ((ValaCCodeBaseModule*) self, _tmp1793_);
+		_tmp1795_ = _tmp1794_;
+		_vala_code_node_unref0 (_tmp1793_);
+		new_size = _tmp1795_;
+		_tmp1796_ = ((ValaCCodeBaseModule*) self)->int_type;
+		_tmp1797_ = vala_ccode_base_module_get_temp_variable ((ValaCCodeBaseModule*) self, _tmp1796_, TRUE, NULL, TRUE);
+		temp_decl = _tmp1797_;
+		_tmp1798_ = temp_decl;
+		_tmp1799_ = vala_symbol_get_name ((ValaSymbol*) _tmp1798_);
+		_tmp1800_ = _tmp1799_;
+		_tmp1801_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp1800_);
+		temp_ref = _tmp1801_;
+		_tmp1802_ = temp_decl;
+		vala_ccode_base_module_emit_temp_var ((ValaCCodeBaseModule*) self, _tmp1802_);
+		_tmp1803_ = ((ValaCCodeBaseModule*) self)->cfile;
+		vala_ccode_file_add_include (_tmp1803_, "string.h", FALSE);
+		_tmp1804_ = ma;
+		_tmp1805_ = vala_member_access_get_inner (_tmp1804_);
+		_tmp1806_ = _tmp1805_;
+		_tmp1807_ = vala_ccode_base_module_get_array_length_cexpression ((ValaCCodeBaseModule*) self, _tmp1806_, 1);
+		clen = _tmp1807_;
+		_tmp1808_ = ma;
+		_tmp1809_ = vala_member_access_get_inner (_tmp1808_);
+		_tmp1810_ = _tmp1809_;
+		_tmp1811_ = vala_ccode_base_module_get_cvalue ((ValaCCodeBaseModule*) self, _tmp1810_);
+		celems = _tmp1811_;
+		_tmp1812_ = ma;
+		_tmp1813_ = vala_member_access_get_inner (_tmp1812_);
 		_tmp1814_ = _tmp1813_;
-		_tmp1815_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp1814_));
-		array_type = _tmp1815_;
-		_tmp1816_ = array_type;
-		_tmp1817_ = vala_array_type_get_element_type (_tmp1816_);
-		_tmp1818_ = _tmp1817_;
-		_tmp1819_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp1818_);
+		_tmp1815_ = vala_expression_get_value_type (_tmp1814_);
+		_tmp1816_ = _tmp1815_;
+		_tmp1817_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp1816_));
+		array_type = _tmp1817_;
+		_tmp1818_ = array_type;
+		_tmp1819_ = vala_array_type_get_element_type (_tmp1818_);
 		_tmp1820_ = _tmp1819_;
-		_tmp1821_ = g_strdup_printf ("sizeof (%s)", _tmp1820_);
+		_tmp1821_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp1820_);
 		_tmp1822_ = _tmp1821_;
-		_tmp1823_ = vala_ccode_identifier_new (_tmp1822_);
+		_tmp1823_ = g_strdup_printf ("sizeof (%s)", _tmp1822_);
 		_tmp1824_ = _tmp1823_;
+		_tmp1825_ = vala_ccode_identifier_new (_tmp1824_);
+		_tmp1826_ = _tmp1825_;
+		_g_free0 (_tmp1824_);
 		_g_free0 (_tmp1822_);
-		_g_free0 (_tmp1820_);
-		csizeof = _tmp1824_;
-		_tmp1825_ = temp_ref;
-		_tmp1826_ = clen;
-		_tmp1827_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_MINUS, _tmp1825_, _tmp1826_);
-		cdelta = _tmp1827_;
-		_tmp1828_ = temp_ref;
-		_tmp1829_ = clen;
-		_tmp1830_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_GREATER_THAN, _tmp1828_, _tmp1829_);
-		ccheck = _tmp1830_;
-		_tmp1831_ = vala_ccode_identifier_new ("memset");
-		_tmp1832_ = _tmp1831_;
-		_tmp1833_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1832_);
+		csizeof = _tmp1826_;
+		_tmp1827_ = temp_ref;
+		_tmp1828_ = clen;
+		_tmp1829_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_MINUS, _tmp1827_, _tmp1828_);
+		cdelta = _tmp1829_;
+		_tmp1830_ = temp_ref;
+		_tmp1831_ = clen;
+		_tmp1832_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_GREATER_THAN, _tmp1830_, _tmp1831_);
+		ccheck = _tmp1832_;
+		_tmp1833_ = vala_ccode_identifier_new ("memset");
 		_tmp1834_ = _tmp1833_;
-		_vala_ccode_node_unref0 (_tmp1832_);
-		czero = _tmp1834_;
-		_tmp1835_ = czero;
-		_tmp1836_ = celems;
-		_tmp1837_ = clen;
-		_tmp1838_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, _tmp1836_, _tmp1837_);
-		_tmp1839_ = _tmp1838_;
-		vala_ccode_function_call_add_argument (_tmp1835_, (ValaCCodeExpression*) _tmp1839_);
-		_vala_ccode_node_unref0 (_tmp1839_);
-		_tmp1840_ = czero;
-		_tmp1841_ = vala_ccode_constant_new ("0");
-		_tmp1842_ = _tmp1841_;
-		vala_ccode_function_call_add_argument (_tmp1840_, (ValaCCodeExpression*) _tmp1842_);
-		_vala_ccode_node_unref0 (_tmp1842_);
-		_tmp1843_ = czero;
-		_tmp1844_ = csizeof;
-		_tmp1845_ = cdelta;
-		_tmp1846_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_MUL, (ValaCCodeExpression*) _tmp1844_, (ValaCCodeExpression*) _tmp1845_);
-		_tmp1847_ = _tmp1846_;
-		vala_ccode_function_call_add_argument (_tmp1843_, (ValaCCodeExpression*) _tmp1847_);
-		_vala_ccode_node_unref0 (_tmp1847_);
-		_tmp1848_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp1835_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1834_);
+		_tmp1836_ = _tmp1835_;
+		_vala_ccode_node_unref0 (_tmp1834_);
+		czero = _tmp1836_;
+		_tmp1837_ = czero;
+		_tmp1838_ = celems;
+		_tmp1839_ = clen;
+		_tmp1840_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_PLUS, _tmp1838_, _tmp1839_);
+		_tmp1841_ = _tmp1840_;
+		vala_ccode_function_call_add_argument (_tmp1837_, (ValaCCodeExpression*) _tmp1841_);
+		_vala_ccode_node_unref0 (_tmp1841_);
+		_tmp1842_ = czero;
+		_tmp1843_ = vala_ccode_constant_new ("0");
+		_tmp1844_ = _tmp1843_;
+		vala_ccode_function_call_add_argument (_tmp1842_, (ValaCCodeExpression*) _tmp1844_);
+		_vala_ccode_node_unref0 (_tmp1844_);
+		_tmp1845_ = czero;
+		_tmp1846_ = csizeof;
+		_tmp1847_ = cdelta;
+		_tmp1848_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_MUL, (ValaCCodeExpression*) _tmp1846_, (ValaCCodeExpression*) _tmp1847_);
 		_tmp1849_ = _tmp1848_;
-		_tmp1850_ = temp_ref;
-		_tmp1851_ = new_size;
-		vala_ccode_function_add_assignment (_tmp1849_, _tmp1850_, _tmp1851_);
-		_tmp1852_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-		_tmp1853_ = _tmp1852_;
-		_tmp1854_ = ccall_expr;
-		vala_ccode_function_add_expression (_tmp1853_, _tmp1854_);
-		_tmp1855_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-		_tmp1856_ = _tmp1855_;
-		_tmp1857_ = ccheck;
-		_tmp1858_ = czero;
-		_tmp1859_ = vala_ccode_constant_new ("NULL");
-		_tmp1860_ = _tmp1859_;
-		_tmp1861_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp1857_, (ValaCCodeExpression*) _tmp1858_, (ValaCCodeExpression*) _tmp1860_);
+		vala_ccode_function_call_add_argument (_tmp1845_, (ValaCCodeExpression*) _tmp1849_);
+		_vala_ccode_node_unref0 (_tmp1849_);
+		_tmp1850_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp1851_ = _tmp1850_;
+		_tmp1852_ = temp_ref;
+		_tmp1853_ = new_size;
+		vala_ccode_function_add_assignment (_tmp1851_, _tmp1852_, _tmp1853_);
+		_tmp1854_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp1855_ = _tmp1854_;
+		_tmp1856_ = ccall_expr;
+		vala_ccode_function_add_expression (_tmp1855_, _tmp1856_);
+		_tmp1857_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp1858_ = _tmp1857_;
+		_tmp1859_ = ccheck;
+		_tmp1860_ = czero;
+		_tmp1861_ = vala_ccode_constant_new ("NULL");
 		_tmp1862_ = _tmp1861_;
-		vala_ccode_function_add_expression (_tmp1856_, (ValaCCodeExpression*) _tmp1862_);
-		_vala_ccode_node_unref0 (_tmp1862_);
-		_vala_ccode_node_unref0 (_tmp1860_);
-		_tmp1863_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp1863_ = vala_ccode_conditional_expression_new ((ValaCCodeExpression*) _tmp1859_, (ValaCCodeExpression*) _tmp1860_, (ValaCCodeExpression*) _tmp1862_);
 		_tmp1864_ = _tmp1863_;
-		_tmp1865_ = ma;
-		_tmp1866_ = vala_member_access_get_inner (_tmp1865_);
-		_tmp1867_ = _tmp1866_;
-		_tmp1868_ = vala_ccode_base_module_get_array_length_cexpression ((ValaCCodeBaseModule*) self, _tmp1867_, 1);
+		vala_ccode_function_add_expression (_tmp1858_, (ValaCCodeExpression*) _tmp1864_);
+		_vala_ccode_node_unref0 (_tmp1864_);
+		_vala_ccode_node_unref0 (_tmp1862_);
+		_tmp1865_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp1866_ = _tmp1865_;
+		_tmp1867_ = ma;
+		_tmp1868_ = vala_member_access_get_inner (_tmp1867_);
 		_tmp1869_ = _tmp1868_;
-		_tmp1870_ = temp_ref;
-		vala_ccode_function_add_assignment (_tmp1864_, _tmp1869_, _tmp1870_);
-		_vala_ccode_node_unref0 (_tmp1869_);
-		_tmp1871_ = ma;
-		_tmp1872_ = vala_member_access_get_inner (_tmp1871_);
-		_tmp1873_ = _tmp1872_;
-		_tmp1874_ = vala_expression_get_symbol_reference (_tmp1873_);
+		_tmp1870_ = vala_ccode_base_module_get_array_length_cexpression ((ValaCCodeBaseModule*) self, _tmp1869_, 1);
+		_tmp1871_ = _tmp1870_;
+		_tmp1872_ = temp_ref;
+		vala_ccode_function_add_assignment (_tmp1866_, _tmp1871_, _tmp1872_);
+		_vala_ccode_node_unref0 (_tmp1871_);
+		_tmp1873_ = ma;
+		_tmp1874_ = vala_member_access_get_inner (_tmp1873_);
 		_tmp1875_ = _tmp1874_;
-		_tmp1876_ = _vala_code_node_ref0 (_tmp1875_);
-		array_var = _tmp1876_;
-		_tmp1877_ = array_var;
-		_tmp1878_ = _vala_code_node_ref0 (VALA_IS_LOCAL_VARIABLE (_tmp1877_) ? ((ValaLocalVariable*) _tmp1877_) : NULL);
-		array_local = _tmp1878_;
-		_tmp1881_ = array_var;
-		if (_tmp1881_ != NULL) {
-			ValaSymbol* _tmp1882_;
-			gboolean _tmp1883_ = FALSE;
-			_tmp1882_ = array_var;
-			_tmp1883_ = vala_symbol_is_internal_symbol (_tmp1882_);
-			_tmp1880_ = _tmp1883_;
+		_tmp1876_ = vala_expression_get_symbol_reference (_tmp1875_);
+		_tmp1877_ = _tmp1876_;
+		_tmp1878_ = _vala_code_node_ref0 (_tmp1877_);
+		array_var = _tmp1878_;
+		_tmp1879_ = array_var;
+		_tmp1880_ = _vala_code_node_ref0 (VALA_IS_LOCAL_VARIABLE (_tmp1879_) ? ((ValaLocalVariable*) _tmp1879_) : NULL);
+		array_local = _tmp1880_;
+		_tmp1883_ = array_var;
+		if (_tmp1883_ != NULL) {
+			ValaSymbol* _tmp1884_;
+			gboolean _tmp1885_ = FALSE;
+			_tmp1884_ = array_var;
+			_tmp1885_ = vala_symbol_is_internal_symbol (_tmp1884_);
+			_tmp1882_ = _tmp1885_;
 		} else {
-			_tmp1880_ = FALSE;
+			_tmp1882_ = FALSE;
 		}
-		_tmp1884_ = _tmp1880_;
-		if (_tmp1884_) {
-			gboolean _tmp1885_ = FALSE;
-			gboolean _tmp1886_ = FALSE;
-			ValaSymbol* _tmp1887_;
-			gboolean _tmp1891_;
+		_tmp1886_ = _tmp1882_;
+		if (_tmp1886_) {
+			gboolean _tmp1887_ = FALSE;
+			gboolean _tmp1888_ = FALSE;
+			ValaSymbol* _tmp1889_;
 			gboolean _tmp1893_;
-			_tmp1887_ = array_var;
-			if (VALA_IS_LOCAL_VARIABLE (_tmp1887_)) {
-				ValaLocalVariable* _tmp1888_;
-				gboolean _tmp1889_;
-				gboolean _tmp1890_;
-				_tmp1888_ = array_local;
-				_tmp1889_ = vala_local_variable_get_captured (_tmp1888_);
-				_tmp1890_ = _tmp1889_;
-				_tmp1886_ = !_tmp1890_;
+			gboolean _tmp1895_;
+			_tmp1889_ = array_var;
+			if (VALA_IS_LOCAL_VARIABLE (_tmp1889_)) {
+				ValaLocalVariable* _tmp1890_;
+				gboolean _tmp1891_;
+				gboolean _tmp1892_;
+				_tmp1890_ = array_local;
+				_tmp1891_ = vala_local_variable_get_captured (_tmp1890_);
+				_tmp1892_ = _tmp1891_;
+				_tmp1888_ = !_tmp1892_;
 			} else {
-				_tmp1886_ = FALSE;
+				_tmp1888_ = FALSE;
 			}
-			_tmp1891_ = _tmp1886_;
-			if (_tmp1891_) {
-				_tmp1885_ = TRUE;
+			_tmp1893_ = _tmp1888_;
+			if (_tmp1893_) {
+				_tmp1887_ = TRUE;
 			} else {
-				ValaSymbol* _tmp1892_;
-				_tmp1892_ = array_var;
-				_tmp1885_ = VALA_IS_FIELD (_tmp1892_);
+				ValaSymbol* _tmp1894_;
+				_tmp1894_ = array_var;
+				_tmp1887_ = VALA_IS_FIELD (_tmp1894_);
 			}
-			_tmp1893_ = _tmp1885_;
-			_tmp1879_ = _tmp1893_;
+			_tmp1895_ = _tmp1887_;
+			_tmp1881_ = _tmp1895_;
 		} else {
-			_tmp1879_ = FALSE;
+			_tmp1881_ = FALSE;
 		}
-		_tmp1894_ = _tmp1879_;
-		if (_tmp1894_) {
-			ValaCCodeFunction* _tmp1895_;
-			ValaCCodeFunction* _tmp1896_;
-			ValaMemberAccess* _tmp1897_;
-			ValaExpression* _tmp1898_;
-			ValaExpression* _tmp1899_;
-			ValaTargetValue* _tmp1900_;
-			ValaTargetValue* _tmp1901_;
-			ValaCCodeExpression* _tmp1902_ = NULL;
-			ValaCCodeExpression* _tmp1903_;
-			ValaCCodeExpression* _tmp1904_;
-			_tmp1895_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp1896_ = _tmp1895_;
-			_tmp1897_ = ma;
-			_tmp1898_ = vala_member_access_get_inner (_tmp1897_);
-			_tmp1899_ = _tmp1898_;
-			_tmp1900_ = vala_expression_get_target_value (_tmp1899_);
+		_tmp1896_ = _tmp1881_;
+		if (_tmp1896_) {
+			ValaCCodeFunction* _tmp1897_;
+			ValaCCodeFunction* _tmp1898_;
+			ValaMemberAccess* _tmp1899_;
+			ValaExpression* _tmp1900_;
+			ValaExpression* _tmp1901_;
+			ValaTargetValue* _tmp1902_;
+			ValaTargetValue* _tmp1903_;
+			ValaCCodeExpression* _tmp1904_ = NULL;
+			ValaCCodeExpression* _tmp1905_;
+			ValaCCodeExpression* _tmp1906_;
+			_tmp1897_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp1898_ = _tmp1897_;
+			_tmp1899_ = ma;
+			_tmp1900_ = vala_member_access_get_inner (_tmp1899_);
 			_tmp1901_ = _tmp1900_;
-			_tmp1902_ = vala_ccode_base_module_get_array_size_cvalue ((ValaCCodeBaseModule*) self, _tmp1901_);
+			_tmp1902_ = vala_expression_get_target_value (_tmp1901_);
 			_tmp1903_ = _tmp1902_;
-			_tmp1904_ = temp_ref;
-			vala_ccode_function_add_assignment (_tmp1896_, _tmp1903_, _tmp1904_);
-			_vala_ccode_node_unref0 (_tmp1903_);
+			_tmp1904_ = vala_ccode_base_module_get_array_size_cvalue ((ValaCCodeBaseModule*) self, _tmp1903_);
+			_tmp1905_ = _tmp1904_;
+			_tmp1906_ = temp_ref;
+			vala_ccode_function_add_assignment (_tmp1898_, _tmp1905_, _tmp1906_);
+			_vala_ccode_node_unref0 (_tmp1905_);
 		}
 		_vala_code_node_unref0 (array_local);
 		_vala_code_node_unref0 (array_var);
@@ -5808,383 +5815,383 @@ static void vala_ccode_method_call_module_real_visit_method_call (ValaCodeVisito
 		_vala_ccode_node_unref0 (ccall);
 		return;
 	}
-	_tmp1906_ = expr;
-	_tmp1907_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp1906_);
-	_tmp1908_ = _tmp1907_;
-	if (VALA_IS_EXPRESSION_STATEMENT (_tmp1908_)) {
-		ValaMethodCall* _tmp1909_;
-		ValaDataType* _tmp1910_;
-		ValaDataType* _tmp1911_;
-		gboolean _tmp1912_ = FALSE;
-		_tmp1909_ = expr;
-		_tmp1910_ = vala_expression_get_value_type ((ValaExpression*) _tmp1909_);
-		_tmp1911_ = _tmp1910_;
-		_tmp1912_ = vala_data_type_is_disposable (_tmp1911_);
-		_tmp1905_ = !_tmp1912_;
+	_tmp1908_ = expr;
+	_tmp1909_ = vala_code_node_get_parent_node ((ValaCodeNode*) _tmp1908_);
+	_tmp1910_ = _tmp1909_;
+	if (VALA_IS_EXPRESSION_STATEMENT (_tmp1910_)) {
+		ValaMethodCall* _tmp1911_;
+		ValaDataType* _tmp1912_;
+		ValaDataType* _tmp1913_;
+		gboolean _tmp1914_ = FALSE;
+		_tmp1911_ = expr;
+		_tmp1912_ = vala_expression_get_value_type ((ValaExpression*) _tmp1911_);
+		_tmp1913_ = _tmp1912_;
+		_tmp1914_ = vala_data_type_is_disposable (_tmp1913_);
+		_tmp1907_ = !_tmp1914_;
 	} else {
-		_tmp1905_ = FALSE;
+		_tmp1907_ = FALSE;
 	}
-	_tmp1913_ = _tmp1905_;
-	if (_tmp1913_) {
-		gboolean _tmp1914_ = FALSE;
-		ValaCCodeExpression* _tmp1915_;
-		gboolean _tmp1917_;
-		_tmp1915_ = ccall_expr;
-		if (_tmp1915_ != NULL) {
-			gboolean _tmp1916_;
-			_tmp1916_ = return_result_via_out_param;
-			_tmp1914_ = !_tmp1916_;
+	_tmp1915_ = _tmp1907_;
+	if (_tmp1915_) {
+		gboolean _tmp1916_ = FALSE;
+		ValaCCodeExpression* _tmp1917_;
+		gboolean _tmp1919_;
+		_tmp1917_ = ccall_expr;
+		if (_tmp1917_ != NULL) {
+			gboolean _tmp1918_;
+			_tmp1918_ = return_result_via_out_param;
+			_tmp1916_ = !_tmp1918_;
 		} else {
-			_tmp1914_ = FALSE;
+			_tmp1916_ = FALSE;
 		}
-		_tmp1917_ = _tmp1914_;
-		if (_tmp1917_) {
-			ValaCCodeFunction* _tmp1918_;
-			ValaCCodeFunction* _tmp1919_;
-			ValaCCodeExpression* _tmp1920_;
-			_tmp1918_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp1919_ = _tmp1918_;
-			_tmp1920_ = ccall_expr;
-			vala_ccode_function_add_expression (_tmp1919_, _tmp1920_);
+		_tmp1919_ = _tmp1916_;
+		if (_tmp1919_) {
+			ValaCCodeFunction* _tmp1920_;
+			ValaCCodeFunction* _tmp1921_;
+			ValaCCodeExpression* _tmp1922_;
+			_tmp1920_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp1921_ = _tmp1920_;
+			_tmp1922_ = ccall_expr;
+			vala_ccode_function_add_expression (_tmp1921_, _tmp1922_);
 		}
 	} else {
-		ValaDataType* _tmp1921_;
-		ValaDataType* _tmp1922_ = NULL;
+		ValaDataType* _tmp1923_;
+		ValaDataType* _tmp1924_ = NULL;
 		ValaDataType* result_type;
-		gboolean _tmp1923_ = FALSE;
-		ValaMethodCall* _tmp1924_;
-		ValaDataType* _tmp1925_;
-		ValaDataType* _tmp1926_;
-		gboolean _tmp1930_;
-		gboolean _tmp1961_;
-		ValaMethodCall* _tmp1980_;
-		ValaTargetValue* _tmp1981_;
-		ValaTargetValue* _tmp1982_;
-		_tmp1921_ = itype;
-		_tmp1922_ = vala_data_type_get_return_type (_tmp1921_);
-		result_type = _tmp1922_;
-		_tmp1924_ = expr;
-		_tmp1925_ = vala_expression_get_formal_value_type ((ValaExpression*) _tmp1924_);
-		_tmp1926_ = _tmp1925_;
-		if (VALA_IS_GENERIC_TYPE (_tmp1926_)) {
-			ValaMethodCall* _tmp1927_;
-			ValaDataType* _tmp1928_;
-			ValaDataType* _tmp1929_;
-			_tmp1927_ = expr;
-			_tmp1928_ = vala_expression_get_value_type ((ValaExpression*) _tmp1927_);
-			_tmp1929_ = _tmp1928_;
-			_tmp1923_ = !VALA_IS_GENERIC_TYPE (_tmp1929_);
+		gboolean _tmp1925_ = FALSE;
+		ValaMethodCall* _tmp1926_;
+		ValaDataType* _tmp1927_;
+		ValaDataType* _tmp1928_;
+		gboolean _tmp1932_;
+		gboolean _tmp1963_;
+		ValaMethodCall* _tmp1982_;
+		ValaTargetValue* _tmp1983_;
+		ValaTargetValue* _tmp1984_;
+		_tmp1923_ = itype;
+		_tmp1924_ = vala_data_type_get_return_type (_tmp1923_);
+		result_type = _tmp1924_;
+		_tmp1926_ = expr;
+		_tmp1927_ = vala_expression_get_formal_value_type ((ValaExpression*) _tmp1926_);
+		_tmp1928_ = _tmp1927_;
+		if (VALA_IS_GENERIC_TYPE (_tmp1928_)) {
+			ValaMethodCall* _tmp1929_;
+			ValaDataType* _tmp1930_;
+			ValaDataType* _tmp1931_;
+			_tmp1929_ = expr;
+			_tmp1930_ = vala_expression_get_value_type ((ValaExpression*) _tmp1929_);
+			_tmp1931_ = _tmp1930_;
+			_tmp1925_ = !VALA_IS_GENERIC_TYPE (_tmp1931_);
 		} else {
-			_tmp1923_ = FALSE;
+			_tmp1925_ = FALSE;
 		}
-		_tmp1930_ = _tmp1923_;
-		if (_tmp1930_) {
-			ValaMethodCall* _tmp1931_;
-			ValaDataType* _tmp1932_;
-			ValaDataType* _tmp1933_;
-			ValaTypeParameter* _tmp1934_;
-			ValaTypeParameter* _tmp1935_;
-			ValaSymbol* _tmp1936_;
-			ValaSymbol* _tmp1937_;
+		_tmp1932_ = _tmp1925_;
+		if (_tmp1932_) {
+			ValaMethodCall* _tmp1933_;
+			ValaDataType* _tmp1934_;
+			ValaDataType* _tmp1935_;
+			ValaTypeParameter* _tmp1936_;
+			ValaTypeParameter* _tmp1937_;
 			ValaSymbol* _tmp1938_;
 			ValaSymbol* _tmp1939_;
-			ValaStruct* _tmp1940_;
+			ValaSymbol* _tmp1940_;
+			ValaSymbol* _tmp1941_;
+			ValaStruct* _tmp1942_;
 			ValaStruct* st;
-			gboolean _tmp1941_ = FALSE;
-			ValaMethodCall* _tmp1942_;
-			ValaDataType* _tmp1943_;
-			ValaDataType* _tmp1944_;
-			ValaTypeParameter* _tmp1945_;
-			ValaTypeParameter* _tmp1946_;
-			ValaSymbol* _tmp1947_;
-			ValaSymbol* _tmp1948_;
-			ValaTypeSymbol* _tmp1949_;
-			gboolean _tmp1956_;
-			_tmp1931_ = expr;
-			_tmp1932_ = vala_expression_get_formal_value_type ((ValaExpression*) _tmp1931_);
-			_tmp1933_ = _tmp1932_;
-			_tmp1934_ = vala_data_type_get_type_parameter (_tmp1933_);
+			gboolean _tmp1943_ = FALSE;
+			ValaMethodCall* _tmp1944_;
+			ValaDataType* _tmp1945_;
+			ValaDataType* _tmp1946_;
+			ValaTypeParameter* _tmp1947_;
+			ValaTypeParameter* _tmp1948_;
+			ValaSymbol* _tmp1949_;
+			ValaSymbol* _tmp1950_;
+			ValaTypeSymbol* _tmp1951_;
+			gboolean _tmp1958_;
+			_tmp1933_ = expr;
+			_tmp1934_ = vala_expression_get_formal_value_type ((ValaExpression*) _tmp1933_);
 			_tmp1935_ = _tmp1934_;
-			_tmp1936_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp1935_);
+			_tmp1936_ = vala_data_type_get_type_parameter (_tmp1935_);
 			_tmp1937_ = _tmp1936_;
-			_tmp1938_ = vala_symbol_get_parent_symbol (_tmp1937_);
+			_tmp1938_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp1937_);
 			_tmp1939_ = _tmp1938_;
-			_tmp1940_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp1939_) ? ((ValaStruct*) _tmp1939_) : NULL);
-			st = _tmp1940_;
-			_tmp1942_ = expr;
-			_tmp1943_ = vala_expression_get_formal_value_type ((ValaExpression*) _tmp1942_);
-			_tmp1944_ = _tmp1943_;
-			_tmp1945_ = vala_data_type_get_type_parameter (_tmp1944_);
+			_tmp1940_ = vala_symbol_get_parent_symbol (_tmp1939_);
+			_tmp1941_ = _tmp1940_;
+			_tmp1942_ = _vala_code_node_ref0 (VALA_IS_STRUCT (_tmp1941_) ? ((ValaStruct*) _tmp1941_) : NULL);
+			st = _tmp1942_;
+			_tmp1944_ = expr;
+			_tmp1945_ = vala_expression_get_formal_value_type ((ValaExpression*) _tmp1944_);
 			_tmp1946_ = _tmp1945_;
-			_tmp1947_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp1946_);
+			_tmp1947_ = vala_data_type_get_type_parameter (_tmp1946_);
 			_tmp1948_ = _tmp1947_;
-			_tmp1949_ = ((ValaCCodeBaseModule*) self)->garray_type;
-			if (_tmp1948_ == VALA_SYMBOL (_tmp1949_)) {
-				_tmp1941_ = TRUE;
+			_tmp1949_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp1948_);
+			_tmp1950_ = _tmp1949_;
+			_tmp1951_ = ((ValaCCodeBaseModule*) self)->garray_type;
+			if (_tmp1950_ == VALA_SYMBOL (_tmp1951_)) {
+				_tmp1943_ = TRUE;
 			} else {
-				gboolean _tmp1950_ = FALSE;
-				ValaStruct* _tmp1951_;
-				gboolean _tmp1955_;
-				_tmp1951_ = st;
-				if (_tmp1951_ != NULL) {
-					ValaStruct* _tmp1952_;
-					gchar* _tmp1953_ = NULL;
-					gchar* _tmp1954_;
-					_tmp1952_ = st;
-					_tmp1953_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp1952_);
-					_tmp1954_ = _tmp1953_;
-					_tmp1950_ = g_strcmp0 (_tmp1954_, "va_list") == 0;
-					_g_free0 (_tmp1954_);
+				gboolean _tmp1952_ = FALSE;
+				ValaStruct* _tmp1953_;
+				gboolean _tmp1957_;
+				_tmp1953_ = st;
+				if (_tmp1953_ != NULL) {
+					ValaStruct* _tmp1954_;
+					gchar* _tmp1955_ = NULL;
+					gchar* _tmp1956_;
+					_tmp1954_ = st;
+					_tmp1955_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp1954_);
+					_tmp1956_ = _tmp1955_;
+					_tmp1952_ = g_strcmp0 (_tmp1956_, "va_list") == 0;
+					_g_free0 (_tmp1956_);
 				} else {
-					_tmp1950_ = FALSE;
+					_tmp1952_ = FALSE;
 				}
-				_tmp1955_ = _tmp1950_;
-				_tmp1941_ = _tmp1955_;
+				_tmp1957_ = _tmp1952_;
+				_tmp1943_ = _tmp1957_;
 			}
-			_tmp1956_ = _tmp1941_;
-			if (_tmp1956_) {
-				ValaMethodCall* _tmp1957_;
-				ValaDataType* _tmp1958_;
-				ValaDataType* _tmp1959_;
+			_tmp1958_ = _tmp1943_;
+			if (_tmp1958_) {
+				ValaMethodCall* _tmp1959_;
 				ValaDataType* _tmp1960_;
-				_tmp1957_ = expr;
-				_tmp1958_ = vala_expression_get_value_type ((ValaExpression*) _tmp1957_);
-				_tmp1959_ = _tmp1958_;
-				_tmp1960_ = _vala_code_node_ref0 (_tmp1959_);
+				ValaDataType* _tmp1961_;
+				ValaDataType* _tmp1962_;
+				_tmp1959_ = expr;
+				_tmp1960_ = vala_expression_get_value_type ((ValaExpression*) _tmp1959_);
+				_tmp1961_ = _tmp1960_;
+				_tmp1962_ = _vala_code_node_ref0 (_tmp1961_);
 				_vala_code_node_unref0 (result_type);
-				result_type = _tmp1960_;
+				result_type = _tmp1962_;
 			}
 			_vala_code_node_unref0 (st);
 		}
-		_tmp1961_ = return_result_via_out_param;
-		if (!_tmp1961_) {
-			ValaDataType* _tmp1962_;
-			ValaDataType* _tmp1963_;
-			gboolean _tmp1964_;
-			gboolean _tmp1965_;
-			ValaLocalVariable* _tmp1966_ = NULL;
+		_tmp1963_ = return_result_via_out_param;
+		if (!_tmp1963_) {
+			ValaDataType* _tmp1964_;
+			ValaDataType* _tmp1965_;
+			gboolean _tmp1966_;
+			gboolean _tmp1967_;
+			ValaLocalVariable* _tmp1968_ = NULL;
 			ValaLocalVariable* temp_var;
-			ValaLocalVariable* _tmp1967_;
-			const gchar* _tmp1968_;
-			const gchar* _tmp1969_;
-			ValaCCodeExpression* _tmp1970_ = NULL;
+			ValaLocalVariable* _tmp1969_;
+			const gchar* _tmp1970_;
+			const gchar* _tmp1971_;
+			ValaCCodeExpression* _tmp1972_ = NULL;
 			ValaCCodeExpression* temp_ref;
-			ValaLocalVariable* _tmp1971_;
-			ValaCCodeFunction* _tmp1972_;
-			ValaCCodeFunction* _tmp1973_;
-			ValaCCodeExpression* _tmp1974_;
-			ValaCCodeExpression* _tmp1975_;
-			ValaMethodCall* _tmp1976_;
+			ValaLocalVariable* _tmp1973_;
+			ValaCCodeFunction* _tmp1974_;
+			ValaCCodeFunction* _tmp1975_;
+			ValaCCodeExpression* _tmp1976_;
 			ValaCCodeExpression* _tmp1977_;
-			_tmp1962_ = result_type;
-			_tmp1963_ = result_type;
-			_tmp1964_ = vala_data_type_get_value_owned (_tmp1963_);
-			_tmp1965_ = _tmp1964_;
-			_tmp1966_ = vala_ccode_base_module_get_temp_variable ((ValaCCodeBaseModule*) self, _tmp1962_, _tmp1965_, NULL, TRUE);
-			temp_var = _tmp1966_;
-			_tmp1967_ = temp_var;
-			_tmp1968_ = vala_symbol_get_name ((ValaSymbol*) _tmp1967_);
-			_tmp1969_ = _tmp1968_;
-			_tmp1970_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp1969_);
-			temp_ref = _tmp1970_;
-			_tmp1971_ = temp_var;
-			vala_ccode_base_module_emit_temp_var ((ValaCCodeBaseModule*) self, _tmp1971_);
-			_tmp1972_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp1973_ = _tmp1972_;
-			_tmp1974_ = temp_ref;
-			_tmp1975_ = ccall_expr;
-			vala_ccode_function_add_assignment (_tmp1973_, _tmp1974_, _tmp1975_);
-			_tmp1976_ = expr;
-			_tmp1977_ = temp_ref;
-			vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) _tmp1976_, _tmp1977_);
-			_vala_ccode_node_unref0 (temp_ref);
-			_vala_code_node_unref0 (temp_var);
-		} else {
 			ValaMethodCall* _tmp1978_;
 			ValaCCodeExpression* _tmp1979_;
+			_tmp1964_ = result_type;
+			_tmp1965_ = result_type;
+			_tmp1966_ = vala_data_type_get_value_owned (_tmp1965_);
+			_tmp1967_ = _tmp1966_;
+			_tmp1968_ = vala_ccode_base_module_get_temp_variable ((ValaCCodeBaseModule*) self, _tmp1964_, _tmp1967_, NULL, TRUE);
+			temp_var = _tmp1968_;
+			_tmp1969_ = temp_var;
+			_tmp1970_ = vala_symbol_get_name ((ValaSymbol*) _tmp1969_);
+			_tmp1971_ = _tmp1970_;
+			_tmp1972_ = vala_ccode_base_module_get_variable_cexpression ((ValaCCodeBaseModule*) self, _tmp1971_);
+			temp_ref = _tmp1972_;
+			_tmp1973_ = temp_var;
+			vala_ccode_base_module_emit_temp_var ((ValaCCodeBaseModule*) self, _tmp1973_);
+			_tmp1974_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp1975_ = _tmp1974_;
+			_tmp1976_ = temp_ref;
+			_tmp1977_ = ccall_expr;
+			vala_ccode_function_add_assignment (_tmp1975_, _tmp1976_, _tmp1977_);
 			_tmp1978_ = expr;
-			_tmp1979_ = ccall_expr;
+			_tmp1979_ = temp_ref;
 			vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) _tmp1978_, _tmp1979_);
+			_vala_ccode_node_unref0 (temp_ref);
+			_vala_code_node_unref0 (temp_var);
+		} else {
+			ValaMethodCall* _tmp1980_;
+			ValaCCodeExpression* _tmp1981_;
+			_tmp1980_ = expr;
+			_tmp1981_ = ccall_expr;
+			vala_ccode_base_module_set_cvalue ((ValaCCodeBaseModule*) self, (ValaExpression*) _tmp1980_, _tmp1981_);
 		}
-		_tmp1980_ = expr;
-		_tmp1981_ = vala_expression_get_target_value ((ValaExpression*) _tmp1980_);
-		_tmp1982_ = _tmp1981_;
-		VALA_GLIB_VALUE (_tmp1982_)->lvalue = TRUE;
+		_tmp1982_ = expr;
+		_tmp1983_ = vala_expression_get_target_value ((ValaExpression*) _tmp1982_);
+		_tmp1984_ = _tmp1983_;
+		VALA_GLIB_VALUE (_tmp1984_)->lvalue = TRUE;
 		_vala_code_node_unref0 (result_type);
 	}
-	_tmp1983_ = params;
-	_tmp1984_ = vala_iterable_iterator ((ValaIterable*) _tmp1983_);
+	_tmp1985_ = params;
+	_tmp1986_ = vala_iterable_iterator ((ValaIterable*) _tmp1985_);
 	_vala_iterator_unref0 (params_it);
-	params_it = _tmp1984_;
+	params_it = _tmp1986_;
 	{
-		ValaMethodCall* _tmp1985_;
-		ValaList* _tmp1986_ = NULL;
+		ValaMethodCall* _tmp1987_;
+		ValaList* _tmp1988_ = NULL;
 		ValaList* _arg_list;
-		ValaList* _tmp1987_;
-		gint _tmp1988_;
-		gint _tmp1989_;
+		ValaList* _tmp1989_;
+		gint _tmp1990_;
+		gint _tmp1991_;
 		gint _arg_size;
 		gint _arg_index;
-		_tmp1985_ = expr;
-		_tmp1986_ = vala_method_call_get_argument_list (_tmp1985_);
-		_arg_list = _tmp1986_;
-		_tmp1987_ = _arg_list;
-		_tmp1988_ = vala_collection_get_size ((ValaCollection*) _tmp1987_);
-		_tmp1989_ = _tmp1988_;
-		_arg_size = _tmp1989_;
+		_tmp1987_ = expr;
+		_tmp1988_ = vala_method_call_get_argument_list (_tmp1987_);
+		_arg_list = _tmp1988_;
+		_tmp1989_ = _arg_list;
+		_tmp1990_ = vala_collection_get_size ((ValaCollection*) _tmp1989_);
+		_tmp1991_ = _tmp1990_;
+		_arg_size = _tmp1991_;
 		_arg_index = -1;
 		while (TRUE) {
-			gint _tmp1990_;
-			gint _tmp1991_;
 			gint _tmp1992_;
-			ValaList* _tmp1993_;
+			gint _tmp1993_;
 			gint _tmp1994_;
-			gpointer _tmp1995_ = NULL;
+			ValaList* _tmp1995_;
+			gint _tmp1996_;
+			gpointer _tmp1997_ = NULL;
 			ValaExpression* arg;
-			ValaIterator* _tmp1996_;
-			gboolean _tmp1997_ = FALSE;
-			ValaExpression* _tmp2008_;
-			ValaUnaryExpression* _tmp2009_;
-			ValaUnaryExpression* unary;
-			gboolean _tmp2010_ = FALSE;
+			ValaIterator* _tmp1998_;
+			gboolean _tmp1999_ = FALSE;
+			ValaExpression* _tmp2010_;
 			ValaUnaryExpression* _tmp2011_;
-			gboolean _tmp2015_;
-			ValaUnaryExpression* _tmp2016_;
-			ValaExpression* _tmp2017_;
-			ValaExpression* _tmp2018_;
-			ValaDataType* _tmp2019_;
-			ValaDataType* _tmp2020_;
-			gboolean _tmp2021_ = FALSE;
-			ValaUnaryExpression* _tmp2031_;
-			ValaExpression* _tmp2032_;
-			ValaExpression* _tmp2033_;
-			ValaTargetValue* _tmp2034_;
-			ValaTargetValue* _tmp2035_;
-			ValaUnaryExpression* _tmp2036_;
+			ValaUnaryExpression* unary;
+			gboolean _tmp2012_ = FALSE;
+			ValaUnaryExpression* _tmp2013_;
+			gboolean _tmp2017_;
+			ValaUnaryExpression* _tmp2018_;
+			ValaExpression* _tmp2019_;
+			ValaExpression* _tmp2020_;
+			ValaDataType* _tmp2021_;
+			ValaDataType* _tmp2022_;
+			gboolean _tmp2023_ = FALSE;
+			ValaUnaryExpression* _tmp2033_;
+			ValaExpression* _tmp2034_;
+			ValaExpression* _tmp2035_;
+			ValaTargetValue* _tmp2036_;
 			ValaTargetValue* _tmp2037_;
-			ValaTargetValue* _tmp2038_;
-			ValaUnaryExpression* _tmp2039_;
-			ValaExpression* _tmp2040_;
-			ValaExpression* _tmp2041_;
-			ValaDataType* _tmp2042_;
-			ValaDataType* _tmp2043_;
-			ValaExpression* _tmp2044_;
-			ValaTargetValue* _tmp2045_ = NULL;
-			ValaTargetValue* _tmp2046_;
-			_tmp1990_ = _arg_index;
-			_arg_index = _tmp1990_ + 1;
-			_tmp1991_ = _arg_index;
-			_tmp1992_ = _arg_size;
-			if (!(_tmp1991_ < _tmp1992_)) {
+			ValaUnaryExpression* _tmp2038_;
+			ValaTargetValue* _tmp2039_;
+			ValaTargetValue* _tmp2040_;
+			ValaUnaryExpression* _tmp2041_;
+			ValaExpression* _tmp2042_;
+			ValaExpression* _tmp2043_;
+			ValaDataType* _tmp2044_;
+			ValaDataType* _tmp2045_;
+			ValaExpression* _tmp2046_;
+			ValaTargetValue* _tmp2047_ = NULL;
+			ValaTargetValue* _tmp2048_;
+			_tmp1992_ = _arg_index;
+			_arg_index = _tmp1992_ + 1;
+			_tmp1993_ = _arg_index;
+			_tmp1994_ = _arg_size;
+			if (!(_tmp1993_ < _tmp1994_)) {
 				break;
 			}
-			_tmp1993_ = _arg_list;
-			_tmp1994_ = _arg_index;
-			_tmp1995_ = vala_list_get (_tmp1993_, _tmp1994_);
-			arg = (ValaExpression*) _tmp1995_;
-			_tmp1996_ = params_it;
-			_tmp1997_ = vala_iterator_next (_tmp1996_);
-			if (_tmp1997_) {
-				ValaIterator* _tmp1998_;
-				gpointer _tmp1999_ = NULL;
+			_tmp1995_ = _arg_list;
+			_tmp1996_ = _arg_index;
+			_tmp1997_ = vala_list_get (_tmp1995_, _tmp1996_);
+			arg = (ValaExpression*) _tmp1997_;
+			_tmp1998_ = params_it;
+			_tmp1999_ = vala_iterator_next (_tmp1998_);
+			if (_tmp1999_) {
+				ValaIterator* _tmp2000_;
+				gpointer _tmp2001_ = NULL;
 				ValaParameter* param;
-				gboolean _tmp2000_ = FALSE;
-				ValaParameter* _tmp2001_;
-				gboolean _tmp2002_;
-				gboolean _tmp2003_;
-				gboolean _tmp2007_;
-				_tmp1998_ = params_it;
-				_tmp1999_ = vala_iterator_get (_tmp1998_);
-				param = (ValaParameter*) _tmp1999_;
-				_tmp2001_ = param;
-				_tmp2002_ = vala_parameter_get_params_array (_tmp2001_);
-				_tmp2003_ = _tmp2002_;
-				if (_tmp2003_) {
-					_tmp2000_ = TRUE;
+				gboolean _tmp2002_ = FALSE;
+				ValaParameter* _tmp2003_;
+				gboolean _tmp2004_;
+				gboolean _tmp2005_;
+				gboolean _tmp2009_;
+				_tmp2000_ = params_it;
+				_tmp2001_ = vala_iterator_get (_tmp2000_);
+				param = (ValaParameter*) _tmp2001_;
+				_tmp2003_ = param;
+				_tmp2004_ = vala_parameter_get_params_array (_tmp2003_);
+				_tmp2005_ = _tmp2004_;
+				if (_tmp2005_) {
+					_tmp2002_ = TRUE;
 				} else {
-					ValaParameter* _tmp2004_;
-					gboolean _tmp2005_;
-					gboolean _tmp2006_;
-					_tmp2004_ = param;
-					_tmp2005_ = vala_parameter_get_ellipsis (_tmp2004_);
-					_tmp2006_ = _tmp2005_;
-					_tmp2000_ = _tmp2006_;
+					ValaParameter* _tmp2006_;
+					gboolean _tmp2007_;
+					gboolean _tmp2008_;
+					_tmp2006_ = param;
+					_tmp2007_ = vala_parameter_get_ellipsis (_tmp2006_);
+					_tmp2008_ = _tmp2007_;
+					_tmp2002_ = _tmp2008_;
 				}
-				_tmp2007_ = _tmp2000_;
-				if (_tmp2007_) {
+				_tmp2009_ = _tmp2002_;
+				if (_tmp2009_) {
 					_vala_code_node_unref0 (param);
 					_vala_code_node_unref0 (arg);
 					break;
 				}
 				_vala_code_node_unref0 (param);
 			}
-			_tmp2008_ = arg;
-			_tmp2009_ = _vala_code_node_ref0 (VALA_IS_UNARY_EXPRESSION (_tmp2008_) ? ((ValaUnaryExpression*) _tmp2008_) : NULL);
-			unary = _tmp2009_;
-			_tmp2011_ = unary;
-			if (_tmp2011_ == NULL) {
-				_tmp2010_ = TRUE;
+			_tmp2010_ = arg;
+			_tmp2011_ = _vala_code_node_ref0 (VALA_IS_UNARY_EXPRESSION (_tmp2010_) ? ((ValaUnaryExpression*) _tmp2010_) : NULL);
+			unary = _tmp2011_;
+			_tmp2013_ = unary;
+			if (_tmp2013_ == NULL) {
+				_tmp2012_ = TRUE;
 			} else {
-				ValaUnaryExpression* _tmp2012_;
-				ValaUnaryOperator _tmp2013_;
-				ValaUnaryOperator _tmp2014_;
-				_tmp2012_ = unary;
-				_tmp2013_ = vala_unary_expression_get_operator (_tmp2012_);
-				_tmp2014_ = _tmp2013_;
-				_tmp2010_ = _tmp2014_ != VALA_UNARY_OPERATOR_OUT;
+				ValaUnaryExpression* _tmp2014_;
+				ValaUnaryOperator _tmp2015_;
+				ValaUnaryOperator _tmp2016_;
+				_tmp2014_ = unary;
+				_tmp2015_ = vala_unary_expression_get_operator (_tmp2014_);
+				_tmp2016_ = _tmp2015_;
+				_tmp2012_ = _tmp2016_ != VALA_UNARY_OPERATOR_OUT;
 			}
-			_tmp2015_ = _tmp2010_;
-			if (_tmp2015_) {
+			_tmp2017_ = _tmp2012_;
+			if (_tmp2017_) {
 				_vala_code_node_unref0 (unary);
 				_vala_code_node_unref0 (arg);
 				continue;
 			}
-			_tmp2016_ = unary;
-			_tmp2017_ = vala_unary_expression_get_inner (_tmp2016_);
-			_tmp2018_ = _tmp2017_;
-			_tmp2019_ = vala_expression_get_value_type (_tmp2018_);
+			_tmp2018_ = unary;
+			_tmp2019_ = vala_unary_expression_get_inner (_tmp2018_);
 			_tmp2020_ = _tmp2019_;
-			_tmp2021_ = vala_ccode_base_module_requires_destroy ((ValaCCodeBaseModule*) self, _tmp2020_);
-			if (_tmp2021_) {
-				ValaCCodeFunction* _tmp2022_;
-				ValaCCodeFunction* _tmp2023_;
-				ValaUnaryExpression* _tmp2024_;
-				ValaExpression* _tmp2025_;
-				ValaExpression* _tmp2026_;
-				ValaTargetValue* _tmp2027_;
-				ValaTargetValue* _tmp2028_;
-				ValaCCodeExpression* _tmp2029_ = NULL;
-				ValaCCodeExpression* _tmp2030_;
-				_tmp2022_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-				_tmp2023_ = _tmp2022_;
-				_tmp2024_ = unary;
-				_tmp2025_ = vala_unary_expression_get_inner (_tmp2024_);
-				_tmp2026_ = _tmp2025_;
-				_tmp2027_ = vala_expression_get_target_value (_tmp2026_);
+			_tmp2021_ = vala_expression_get_value_type (_tmp2020_);
+			_tmp2022_ = _tmp2021_;
+			_tmp2023_ = vala_ccode_base_module_requires_destroy ((ValaCCodeBaseModule*) self, _tmp2022_);
+			if (_tmp2023_) {
+				ValaCCodeFunction* _tmp2024_;
+				ValaCCodeFunction* _tmp2025_;
+				ValaUnaryExpression* _tmp2026_;
+				ValaExpression* _tmp2027_;
+				ValaExpression* _tmp2028_;
+				ValaTargetValue* _tmp2029_;
+				ValaTargetValue* _tmp2030_;
+				ValaCCodeExpression* _tmp2031_ = NULL;
+				ValaCCodeExpression* _tmp2032_;
+				_tmp2024_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+				_tmp2025_ = _tmp2024_;
+				_tmp2026_ = unary;
+				_tmp2027_ = vala_unary_expression_get_inner (_tmp2026_);
 				_tmp2028_ = _tmp2027_;
-				_tmp2029_ = vala_ccode_base_module_destroy_value ((ValaCCodeBaseModule*) self, _tmp2028_, FALSE);
+				_tmp2029_ = vala_expression_get_target_value (_tmp2028_);
 				_tmp2030_ = _tmp2029_;
-				vala_ccode_function_add_expression (_tmp2023_, _tmp2030_);
-				_vala_ccode_node_unref0 (_tmp2030_);
+				_tmp2031_ = vala_ccode_base_module_destroy_value ((ValaCCodeBaseModule*) self, _tmp2030_, FALSE);
+				_tmp2032_ = _tmp2031_;
+				vala_ccode_function_add_expression (_tmp2025_, _tmp2032_);
+				_vala_ccode_node_unref0 (_tmp2032_);
 			}
-			_tmp2031_ = unary;
-			_tmp2032_ = vala_unary_expression_get_inner (_tmp2031_);
-			_tmp2033_ = _tmp2032_;
-			_tmp2034_ = vala_expression_get_target_value (_tmp2033_);
+			_tmp2033_ = unary;
+			_tmp2034_ = vala_unary_expression_get_inner (_tmp2033_);
 			_tmp2035_ = _tmp2034_;
-			_tmp2036_ = unary;
-			_tmp2037_ = vala_expression_get_target_value ((ValaExpression*) _tmp2036_);
-			_tmp2038_ = _tmp2037_;
-			_tmp2039_ = unary;
-			_tmp2040_ = vala_unary_expression_get_inner (_tmp2039_);
-			_tmp2041_ = _tmp2040_;
-			_tmp2042_ = vala_expression_get_value_type (_tmp2041_);
+			_tmp2036_ = vala_expression_get_target_value (_tmp2035_);
+			_tmp2037_ = _tmp2036_;
+			_tmp2038_ = unary;
+			_tmp2039_ = vala_expression_get_target_value ((ValaExpression*) _tmp2038_);
+			_tmp2040_ = _tmp2039_;
+			_tmp2041_ = unary;
+			_tmp2042_ = vala_unary_expression_get_inner (_tmp2041_);
 			_tmp2043_ = _tmp2042_;
-			_tmp2044_ = arg;
-			_tmp2045_ = vala_ccode_base_module_transform_value ((ValaCCodeBaseModule*) self, _tmp2038_, _tmp2043_, (ValaCodeNode*) _tmp2044_);
-			_tmp2046_ = _tmp2045_;
-			vala_ccode_base_module_store_value ((ValaCCodeBaseModule*) self, _tmp2035_, _tmp2046_);
-			_vala_target_value_unref0 (_tmp2046_);
+			_tmp2044_ = vala_expression_get_value_type (_tmp2043_);
+			_tmp2045_ = _tmp2044_;
+			_tmp2046_ = arg;
+			_tmp2047_ = vala_ccode_base_module_transform_value ((ValaCCodeBaseModule*) self, _tmp2040_, _tmp2045_, (ValaCodeNode*) _tmp2046_);
+			_tmp2048_ = _tmp2047_;
+			vala_ccode_base_module_store_value ((ValaCCodeBaseModule*) self, _tmp2037_, _tmp2048_);
+			_vala_target_value_unref0 (_tmp2048_);
 			_vala_code_node_unref0 (unary);
 			_vala_code_node_unref0 (arg);
 		}
diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala
index fa3f727..5eff280 100644
--- a/codegen/valaccodemethodcallmodule.vala
+++ b/codegen/valaccodemethodcallmodule.vala
@@ -616,6 +616,11 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
 			}
 		}
 
+		if (async_call == ccall) {
+			// skip out parameter for .begin() calls
+			return_result_via_out_param = false;
+		}
+
 		CCodeExpression out_param_ref = null;
 
 		if (return_result_via_out_param) {
diff --git a/codegen/valaccodemethodmodule.c b/codegen/valaccodemethodmodule.c
index 4ca249d..bb76a2b 100644
--- a/codegen/valaccodemethodmodule.c
+++ b/codegen/valaccodemethodmodule.c
@@ -309,6 +309,7 @@ GType vala_glib_value_get_type (void) G_GNUC_CONST;
 static void vala_ccode_method_module_create_method_type_check_statement (ValaCCodeMethodModule* self, ValaMethod* m, ValaDataType* return_type, ValaTypeSymbol* t, gboolean non_null, const gchar* var_name);
 gchar* vala_ccode_base_module_get_variable_cname (ValaCCodeBaseModule* self, const gchar* name);
 ValaCCodeExpression* vala_ccode_base_module_default_value_for_type (ValaCCodeBaseModule* self, ValaDataType* type, gboolean initializer_expression);
+gchar* vala_ccode_base_module_get_ccode_delegate_target_name (ValaVariable* variable);
 ValaClass* vala_ccode_base_module_get_current_class (ValaCCodeBaseModule* self);
 ValaCodeContext* vala_ccode_base_module_get_context (ValaCCodeBaseModule* self);
 static void vala_ccode_method_module_create_precondition_statement (ValaCCodeMethodModule* self, ValaCodeNode* method_node, ValaDataType* ret_type, ValaExpression* precondition);
@@ -1903,31 +1904,31 @@ static void vala_ccode_method_module_real_visit_method (ValaCodeVisitor* base, V
 	gboolean _tmp185_;
 	gboolean _tmp186_;
 	gboolean _tmp194_;
-	ValaMethod* _tmp919_;
-	ValaBlock* _tmp920_;
-	ValaBlock* _tmp921_;
-	gboolean _tmp925_ = FALSE;
-	ValaMethod* _tmp926_;
-	gboolean _tmp927_;
-	gboolean _tmp928_;
-	gboolean _tmp936_;
-	gboolean _tmp1075_ = FALSE;
-	ValaMethod* _tmp1076_;
+	ValaMethod* _tmp915_;
+	ValaBlock* _tmp916_;
+	ValaBlock* _tmp917_;
+	gboolean _tmp921_ = FALSE;
+	ValaMethod* _tmp922_;
+	gboolean _tmp923_;
+	gboolean _tmp924_;
+	gboolean _tmp932_;
+	gboolean _tmp1071_ = FALSE;
+	ValaMethod* _tmp1072_;
+	gboolean _tmp1073_;
+	gboolean _tmp1074_;
 	gboolean _tmp1077_;
-	gboolean _tmp1078_;
-	gboolean _tmp1081_;
-	gboolean _tmp1117_ = FALSE;
-	gboolean _tmp1118_ = FALSE;
-	gboolean _tmp1119_ = FALSE;
-	ValaMethod* _tmp1120_;
-	gboolean _tmp1121_;
+	gboolean _tmp1113_ = FALSE;
+	gboolean _tmp1114_ = FALSE;
+	gboolean _tmp1115_ = FALSE;
+	ValaMethod* _tmp1116_;
+	gboolean _tmp1117_;
+	gboolean _tmp1118_;
 	gboolean _tmp1122_;
 	gboolean _tmp1126_;
 	gboolean _tmp1130_;
-	gboolean _tmp1134_;
-	ValaMethod* _tmp1147_;
-	gboolean _tmp1148_;
-	gboolean _tmp1149_;
+	ValaMethod* _tmp1143_;
+	gboolean _tmp1144_;
+	gboolean _tmp1145_;
 	self = (ValaCCodeMethodModule*) base;
 	g_return_if_fail (m != NULL);
 	_tmp0_ = m;
@@ -2415,21 +2416,21 @@ static void vala_ccode_method_module_real_visit_method (ValaCodeVisitor* base, V
 			ValaMethod* _tmp244_;
 			gboolean _tmp245_;
 			gboolean _tmp246_;
-			gboolean _tmp657_ = FALSE;
-			gboolean _tmp658_ = FALSE;
-			ValaMethod* _tmp659_;
-			ValaDataType* _tmp660_;
-			ValaDataType* _tmp661_;
+			gboolean _tmp653_ = FALSE;
+			gboolean _tmp654_ = FALSE;
+			ValaMethod* _tmp655_;
+			ValaDataType* _tmp656_;
+			ValaDataType* _tmp657_;
+			gboolean _tmp662_;
 			gboolean _tmp666_;
-			gboolean _tmp670_;
-			ValaMethod* _tmp687_;
-			gboolean _tmp889_ = FALSE;
-			ValaCodeContext* _tmp890_;
-			ValaCodeContext* _tmp891_;
-			ValaMethod* _tmp892_;
-			ValaMethod* _tmp893_;
-			ValaMethod* _tmp894_;
-			gboolean _tmp896_;
+			ValaMethod* _tmp683_;
+			gboolean _tmp885_ = FALSE;
+			ValaCodeContext* _tmp886_;
+			ValaCodeContext* _tmp887_;
+			ValaMethod* _tmp888_;
+			ValaMethod* _tmp889_;
+			ValaMethod* _tmp890_;
+			gboolean _tmp892_;
 			_tmp198_ = m;
 			_tmp199_ = vala_method_get_coroutine (_tmp198_);
 			_tmp200_ = _tmp199_;
@@ -3566,86 +3567,77 @@ static void vala_ccode_method_module_real_visit_method (ValaCodeVisitor* base, V
 									_tmp623_ = _tmp622_;
 									if (_tmp623_) {
 										ValaParameter* _tmp624_;
-										const gchar* _tmp625_;
-										const gchar* _tmp626_;
+										gchar* _tmp625_ = NULL;
+										gchar* _tmp626_;
 										gchar* _tmp627_;
 										gchar* _tmp628_;
-										gchar* _tmp629_ = NULL;
-										gchar* _tmp630_;
-										gchar* _tmp631_ = NULL;
-										gchar* _tmp632_;
-										ValaCCodeConstant* _tmp633_;
-										ValaCCodeConstant* _tmp634_;
-										ValaCCodeVariableDeclarator* _tmp635_;
-										ValaCCodeFunction* _tmp636_;
-										ValaCCodeFunction* _tmp637_;
-										ValaCCodeVariableDeclarator* _tmp638_;
-										ValaDelegateType* _tmp639_;
-										gboolean _tmp640_;
-										gboolean _tmp641_;
+										ValaCCodeConstant* _tmp629_;
+										ValaCCodeConstant* _tmp630_;
+										ValaCCodeVariableDeclarator* _tmp631_;
+										ValaCCodeFunction* _tmp632_;
+										ValaCCodeFunction* _tmp633_;
+										ValaCCodeVariableDeclarator* _tmp634_;
+										ValaDelegateType* _tmp635_;
+										gboolean _tmp636_;
+										gboolean _tmp637_;
 										_tmp624_ = param;
-										_tmp625_ = vala_symbol_get_name ((ValaSymbol*) _tmp624_);
+										_tmp625_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp624_);
 										_tmp626_ = _tmp625_;
 										_tmp627_ = g_strconcat ("_vala_", _tmp626_, NULL);
 										_tmp628_ = _tmp627_;
-										_tmp629_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp628_);
+										_tmp629_ = vala_ccode_constant_new ("NULL");
 										_tmp630_ = _tmp629_;
-										_tmp631_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp630_);
-										_tmp632_ = _tmp631_;
-										_tmp633_ = vala_ccode_constant_new ("NULL");
-										_tmp634_ = _tmp633_;
-										_tmp635_ = vala_ccode_variable_declarator_new_zero (_tmp632_, (ValaCCodeExpression*) _tmp634_, NULL);
+										_tmp631_ = vala_ccode_variable_declarator_new_zero (_tmp628_, (ValaCCodeExpression*) _tmp630_, NULL);
 										_vala_ccode_node_unref0 (vardecl);
-										vardecl = _tmp635_;
-										_vala_ccode_node_unref0 (_tmp634_);
-										_g_free0 (_tmp632_);
-										_g_free0 (_tmp630_);
+										vardecl = _tmp631_;
+										_vala_ccode_node_unref0 (_tmp630_);
 										_g_free0 (_tmp628_);
-										_tmp636_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+										_g_free0 (_tmp626_);
+										_tmp632_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+										_tmp633_ = _tmp632_;
+										_tmp634_ = vardecl;
+										vala_ccode_function_add_declaration (_tmp633_, "void *", (ValaCCodeDeclarator*) _tmp634_, 0);
+										_tmp635_ = deleg_type;
+										_tmp636_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp635_);
 										_tmp637_ = _tmp636_;
-										_tmp638_ = vardecl;
-										vala_ccode_function_add_declaration (_tmp637_, "void *", (ValaCCodeDeclarator*) _tmp638_, 0);
-										_tmp639_ = deleg_type;
-										_tmp640_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp639_);
-										_tmp641_ = _tmp640_;
-										if (_tmp641_) {
-											ValaParameter* _tmp642_;
-											const gchar* _tmp643_;
-											const gchar* _tmp644_;
-											gchar* _tmp645_;
+										if (_tmp637_) {
+											ValaParameter* _tmp638_;
+											const gchar* _tmp639_;
+											const gchar* _tmp640_;
+											gchar* _tmp641_;
+											gchar* _tmp642_;
+											gchar* _tmp643_ = NULL;
+											gchar* _tmp644_;
+											gchar* _tmp645_ = NULL;
 											gchar* _tmp646_;
-											gchar* _tmp647_ = NULL;
-											gchar* _tmp648_;
-											gchar* _tmp649_ = NULL;
-											gchar* _tmp650_;
-											ValaCCodeConstant* _tmp651_;
-											ValaCCodeConstant* _tmp652_;
-											ValaCCodeVariableDeclarator* _tmp653_;
-											ValaCCodeFunction* _tmp654_;
-											ValaCCodeFunction* _tmp655_;
-											ValaCCodeVariableDeclarator* _tmp656_;
-											_tmp642_ = param;
-											_tmp643_ = vala_symbol_get_name ((ValaSymbol*) _tmp642_);
+											ValaCCodeConstant* _tmp647_;
+											ValaCCodeConstant* _tmp648_;
+											ValaCCodeVariableDeclarator* _tmp649_;
+											ValaCCodeFunction* _tmp650_;
+											ValaCCodeFunction* _tmp651_;
+											ValaCCodeVariableDeclarator* _tmp652_;
+											_tmp638_ = param;
+											_tmp639_ = vala_symbol_get_name ((ValaSymbol*) _tmp638_);
+											_tmp640_ = _tmp639_;
+											_tmp641_ = g_strconcat ("_vala_", _tmp640_, NULL);
+											_tmp642_ = _tmp641_;
+											_tmp643_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp642_);
 											_tmp644_ = _tmp643_;
-											_tmp645_ = g_strconcat ("_vala_", _tmp644_, NULL);
+											_tmp645_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp644_);
 											_tmp646_ = _tmp645_;
-											_tmp647_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp646_);
+											_tmp647_ = vala_ccode_constant_new ("NULL");
 											_tmp648_ = _tmp647_;
-											_tmp649_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp648_);
-											_tmp650_ = _tmp649_;
-											_tmp651_ = vala_ccode_constant_new ("NULL");
-											_tmp652_ = _tmp651_;
-											_tmp653_ = vala_ccode_variable_declarator_new_zero (_tmp650_, (ValaCCodeExpression*) _tmp652_, NULL);
+											_tmp649_ = vala_ccode_variable_declarator_new_zero (_tmp646_, (ValaCCodeExpression*) _tmp648_, NULL);
 											_vala_ccode_node_unref0 (vardecl);
-											vardecl = _tmp653_;
-											_vala_ccode_node_unref0 (_tmp652_);
-											_g_free0 (_tmp650_);
-											_g_free0 (_tmp648_);
+											vardecl = _tmp649_;
+											_vala_ccode_node_unref0 (_tmp648_);
 											_g_free0 (_tmp646_);
-											_tmp654_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-											_tmp655_ = _tmp654_;
-											_tmp656_ = vardecl;
-											vala_ccode_function_add_declaration (_tmp655_, "GDestroyNotify", (ValaCCodeDeclarator*) _tmp656_, 0);
+											_g_free0 (_tmp644_);
+											_g_free0 (_tmp642_);
+											_tmp650_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+											_tmp651_ = _tmp650_;
+											_tmp652_ = vardecl;
+											vala_ccode_function_add_declaration (_tmp651_, "GDestroyNotify", (ValaCCodeDeclarator*) _tmp652_, 0);
 										}
 									}
 									_vala_code_node_unref0 (d);
@@ -3659,395 +3651,395 @@ static void vala_ccode_method_module_real_visit_method (ValaCodeVisitor* base, V
 				}
 				_vala_iterable_unref0 (_param_list);
 			}
-			_tmp659_ = m;
-			_tmp660_ = vala_method_get_return_type (_tmp659_);
-			_tmp661_ = _tmp660_;
-			if (!VALA_IS_VOID_TYPE (_tmp661_)) {
-				ValaMethod* _tmp662_;
-				ValaDataType* _tmp663_;
-				ValaDataType* _tmp664_;
-				gboolean _tmp665_ = FALSE;
-				_tmp662_ = m;
-				_tmp663_ = vala_method_get_return_type (_tmp662_);
-				_tmp664_ = _tmp663_;
-				_tmp665_ = vala_data_type_is_real_non_null_struct_type (_tmp664_);
-				_tmp658_ = !_tmp665_;
+			_tmp655_ = m;
+			_tmp656_ = vala_method_get_return_type (_tmp655_);
+			_tmp657_ = _tmp656_;
+			if (!VALA_IS_VOID_TYPE (_tmp657_)) {
+				ValaMethod* _tmp658_;
+				ValaDataType* _tmp659_;
+				ValaDataType* _tmp660_;
+				gboolean _tmp661_ = FALSE;
+				_tmp658_ = m;
+				_tmp659_ = vala_method_get_return_type (_tmp658_);
+				_tmp660_ = _tmp659_;
+				_tmp661_ = vala_data_type_is_real_non_null_struct_type (_tmp660_);
+				_tmp654_ = !_tmp661_;
 			} else {
-				_tmp658_ = FALSE;
+				_tmp654_ = FALSE;
 			}
-			_tmp666_ = _tmp658_;
+			_tmp662_ = _tmp654_;
+			if (_tmp662_) {
+				ValaMethod* _tmp663_;
+				gboolean _tmp664_;
+				gboolean _tmp665_;
+				_tmp663_ = m;
+				_tmp664_ = vala_method_get_coroutine (_tmp663_);
+				_tmp665_ = _tmp664_;
+				_tmp653_ = !_tmp665_;
+			} else {
+				_tmp653_ = FALSE;
+			}
+			_tmp666_ = _tmp653_;
 			if (_tmp666_) {
 				ValaMethod* _tmp667_;
-				gboolean _tmp668_;
-				gboolean _tmp669_;
+				ValaDataType* _tmp668_;
+				ValaDataType* _tmp669_;
+				ValaCCodeExpression* _tmp670_ = NULL;
+				ValaCCodeExpression* _tmp671_;
+				ValaCCodeVariableDeclarator* _tmp672_;
+				ValaCCodeVariableDeclarator* _tmp673_;
+				ValaCCodeVariableDeclarator* vardecl;
+				ValaCCodeVariableDeclarator* _tmp674_;
+				ValaCCodeFunction* _tmp675_;
+				ValaCCodeFunction* _tmp676_;
+				ValaMethod* _tmp677_;
+				ValaDataType* _tmp678_;
+				ValaDataType* _tmp679_;
+				gchar* _tmp680_ = NULL;
+				gchar* _tmp681_;
+				ValaCCodeVariableDeclarator* _tmp682_;
 				_tmp667_ = m;
-				_tmp668_ = vala_method_get_coroutine (_tmp667_);
+				_tmp668_ = vala_method_get_return_type (_tmp667_);
 				_tmp669_ = _tmp668_;
-				_tmp657_ = !_tmp669_;
-			} else {
-				_tmp657_ = FALSE;
-			}
-			_tmp670_ = _tmp657_;
-			if (_tmp670_) {
-				ValaMethod* _tmp671_;
-				ValaDataType* _tmp672_;
-				ValaDataType* _tmp673_;
-				ValaCCodeExpression* _tmp674_ = NULL;
-				ValaCCodeExpression* _tmp675_;
-				ValaCCodeVariableDeclarator* _tmp676_;
-				ValaCCodeVariableDeclarator* _tmp677_;
-				ValaCCodeVariableDeclarator* vardecl;
-				ValaCCodeVariableDeclarator* _tmp678_;
-				ValaCCodeFunction* _tmp679_;
-				ValaCCodeFunction* _tmp680_;
-				ValaMethod* _tmp681_;
-				ValaDataType* _tmp682_;
-				ValaDataType* _tmp683_;
-				gchar* _tmp684_ = NULL;
-				gchar* _tmp685_;
-				ValaCCodeVariableDeclarator* _tmp686_;
-				_tmp671_ = m;
-				_tmp672_ = vala_method_get_return_type (_tmp671_);
+				_tmp670_ = vala_ccode_base_module_default_value_for_type ((ValaCCodeBaseModule*) self, _tmp669_, TRUE);
+				_tmp671_ = _tmp670_;
+				_tmp672_ = vala_ccode_variable_declarator_new ("result", _tmp671_, NULL);
 				_tmp673_ = _tmp672_;
-				_tmp674_ = vala_ccode_base_module_default_value_for_type ((ValaCCodeBaseModule*) self, _tmp673_, TRUE);
-				_tmp675_ = _tmp674_;
-				_tmp676_ = vala_ccode_variable_declarator_new ("result", _tmp675_, NULL);
-				_tmp677_ = _tmp676_;
-				_vala_ccode_node_unref0 (_tmp675_);
-				vardecl = _tmp677_;
-				_tmp678_ = vardecl;
-				vala_ccode_variable_declarator_set_init0 (_tmp678_, TRUE);
-				_tmp679_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-				_tmp680_ = _tmp679_;
-				_tmp681_ = m;
-				_tmp682_ = vala_method_get_return_type (_tmp681_);
-				_tmp683_ = _tmp682_;
-				_tmp684_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp683_);
-				_tmp685_ = _tmp684_;
-				_tmp686_ = vardecl;
-				vala_ccode_function_add_declaration (_tmp680_, _tmp685_, (ValaCCodeDeclarator*) _tmp686_, 0);
-				_g_free0 (_tmp685_);
+				_vala_ccode_node_unref0 (_tmp671_);
+				vardecl = _tmp673_;
+				_tmp674_ = vardecl;
+				vala_ccode_variable_declarator_set_init0 (_tmp674_, TRUE);
+				_tmp675_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+				_tmp676_ = _tmp675_;
+				_tmp677_ = m;
+				_tmp678_ = vala_method_get_return_type (_tmp677_);
+				_tmp679_ = _tmp678_;
+				_tmp680_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp679_);
+				_tmp681_ = _tmp680_;
+				_tmp682_ = vardecl;
+				vala_ccode_function_add_declaration (_tmp676_, _tmp681_, (ValaCCodeDeclarator*) _tmp682_, 0);
+				_g_free0 (_tmp681_);
 				_vala_ccode_node_unref0 (vardecl);
 			}
-			_tmp687_ = m;
-			if (VALA_IS_CREATION_METHOD (_tmp687_)) {
-				gboolean _tmp688_;
-				_tmp688_ = in_gobject_creation_method;
-				if (_tmp688_) {
-					ValaCCodeFunction* _tmp689_;
-					ValaCCodeFunction* _tmp690_;
-					ValaTypeSymbol* _tmp691_;
-					ValaTypeSymbol* _tmp692_;
-					gchar* _tmp693_ = NULL;
-					gchar* _tmp694_;
-					gchar* _tmp695_ = NULL;
-					gchar* _tmp696_;
-					ValaCCodeConstant* _tmp697_;
-					ValaCCodeConstant* _tmp698_;
-					ValaCCodeVariableDeclarator* _tmp699_;
-					ValaCCodeVariableDeclarator* _tmp700_;
-					_tmp689_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp683_ = m;
+			if (VALA_IS_CREATION_METHOD (_tmp683_)) {
+				gboolean _tmp684_;
+				_tmp684_ = in_gobject_creation_method;
+				if (_tmp684_) {
+					ValaCCodeFunction* _tmp685_;
+					ValaCCodeFunction* _tmp686_;
+					ValaTypeSymbol* _tmp687_;
+					ValaTypeSymbol* _tmp688_;
+					gchar* _tmp689_ = NULL;
+					gchar* _tmp690_;
+					gchar* _tmp691_ = NULL;
+					gchar* _tmp692_;
+					ValaCCodeConstant* _tmp693_;
+					ValaCCodeConstant* _tmp694_;
+					ValaCCodeVariableDeclarator* _tmp695_;
+					ValaCCodeVariableDeclarator* _tmp696_;
+					_tmp685_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+					_tmp686_ = _tmp685_;
+					_tmp687_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
+					_tmp688_ = _tmp687_;
+					_tmp689_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp688_);
 					_tmp690_ = _tmp689_;
-					_tmp691_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
+					_tmp691_ = g_strdup_printf ("%s *", _tmp690_);
 					_tmp692_ = _tmp691_;
-					_tmp693_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp692_);
+					_tmp693_ = vala_ccode_constant_new ("NULL");
 					_tmp694_ = _tmp693_;
-					_tmp695_ = g_strdup_printf ("%s *", _tmp694_);
+					_tmp695_ = vala_ccode_variable_declarator_new_zero ("self", (ValaCCodeExpression*) _tmp694_, NULL);
 					_tmp696_ = _tmp695_;
-					_tmp697_ = vala_ccode_constant_new ("NULL");
-					_tmp698_ = _tmp697_;
-					_tmp699_ = vala_ccode_variable_declarator_new_zero ("self", (ValaCCodeExpression*) _tmp698_, NULL);
-					_tmp700_ = _tmp699_;
-					vala_ccode_function_add_declaration (_tmp690_, _tmp696_, (ValaCCodeDeclarator*) _tmp700_, 0);
-					_vala_ccode_node_unref0 (_tmp700_);
-					_vala_ccode_node_unref0 (_tmp698_);
-					_g_free0 (_tmp696_);
-					_g_free0 (_tmp694_);
+					vala_ccode_function_add_declaration (_tmp686_, _tmp692_, (ValaCCodeDeclarator*) _tmp696_, 0);
+					_vala_ccode_node_unref0 (_tmp696_);
+					_vala_ccode_node_unref0 (_tmp694_);
+					_g_free0 (_tmp692_);
+					_g_free0 (_tmp690_);
 				} else {
-					ValaMethod* _tmp701_;
-					gboolean _tmp702_ = FALSE;
-					_tmp701_ = m;
-					_tmp702_ = vala_ccode_method_module_is_gtypeinstance_creation_method (self, _tmp701_);
-					if (_tmp702_) {
-						ValaMethod* _tmp703_;
-						ValaSymbol* _tmp704_;
-						ValaSymbol* _tmp705_;
-						ValaClass* _tmp706_;
+					ValaMethod* _tmp697_;
+					gboolean _tmp698_ = FALSE;
+					_tmp697_ = m;
+					_tmp698_ = vala_ccode_method_module_is_gtypeinstance_creation_method (self, _tmp697_);
+					if (_tmp698_) {
+						ValaMethod* _tmp699_;
+						ValaSymbol* _tmp700_;
+						ValaSymbol* _tmp701_;
+						ValaClass* _tmp702_;
 						ValaClass* cl;
-						ValaCCodeFunction* _tmp707_;
-						ValaCCodeFunction* _tmp708_;
-						ValaClass* _tmp709_;
-						gchar* _tmp710_ = NULL;
-						gchar* _tmp711_;
-						gchar* _tmp712_;
-						gchar* _tmp713_;
-						ValaCCodeConstant* _tmp714_;
-						ValaCCodeConstant* _tmp715_;
-						ValaCCodeVariableDeclarator* _tmp716_;
-						ValaCCodeVariableDeclarator* _tmp717_;
-						ValaClass* _tmp718_;
-						gboolean _tmp719_ = FALSE;
-						_tmp703_ = m;
-						_tmp704_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp703_);
-						_tmp705_ = _tmp704_;
-						_tmp706_ = _vala_code_node_ref0 (VALA_CLASS (_tmp705_));
-						cl = _tmp706_;
-						_tmp707_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-						_tmp708_ = _tmp707_;
-						_tmp709_ = cl;
-						_tmp710_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp709_);
+						ValaCCodeFunction* _tmp703_;
+						ValaCCodeFunction* _tmp704_;
+						ValaClass* _tmp705_;
+						gchar* _tmp706_ = NULL;
+						gchar* _tmp707_;
+						gchar* _tmp708_;
+						gchar* _tmp709_;
+						ValaCCodeConstant* _tmp710_;
+						ValaCCodeConstant* _tmp711_;
+						ValaCCodeVariableDeclarator* _tmp712_;
+						ValaCCodeVariableDeclarator* _tmp713_;
+						ValaClass* _tmp714_;
+						gboolean _tmp715_ = FALSE;
+						_tmp699_ = m;
+						_tmp700_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp699_);
+						_tmp701_ = _tmp700_;
+						_tmp702_ = _vala_code_node_ref0 (VALA_CLASS (_tmp701_));
+						cl = _tmp702_;
+						_tmp703_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+						_tmp704_ = _tmp703_;
+						_tmp705_ = cl;
+						_tmp706_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp705_);
+						_tmp707_ = _tmp706_;
+						_tmp708_ = g_strconcat (_tmp707_, "*", NULL);
+						_tmp709_ = _tmp708_;
+						_tmp710_ = vala_ccode_constant_new ("NULL");
 						_tmp711_ = _tmp710_;
-						_tmp712_ = g_strconcat (_tmp711_, "*", NULL);
+						_tmp712_ = vala_ccode_variable_declarator_new_zero ("self", (ValaCCodeExpression*) _tmp711_, NULL);
 						_tmp713_ = _tmp712_;
-						_tmp714_ = vala_ccode_constant_new ("NULL");
-						_tmp715_ = _tmp714_;
-						_tmp716_ = vala_ccode_variable_declarator_new_zero ("self", (ValaCCodeExpression*) _tmp715_, NULL);
-						_tmp717_ = _tmp716_;
-						vala_ccode_function_add_declaration (_tmp708_, _tmp713_, (ValaCCodeDeclarator*) _tmp717_, 0);
-						_vala_ccode_node_unref0 (_tmp717_);
-						_vala_ccode_node_unref0 (_tmp715_);
-						_g_free0 (_tmp713_);
-						_g_free0 (_tmp711_);
-						_tmp718_ = cl;
-						_tmp719_ = vala_class_is_fundamental (_tmp718_);
-						if (_tmp719_) {
-							ValaCCodeIdentifier* _tmp720_;
-							ValaCCodeIdentifier* _tmp721_;
-							ValaCCodeFunctionCall* _tmp722_;
-							ValaCCodeFunctionCall* _tmp723_;
+						vala_ccode_function_add_declaration (_tmp704_, _tmp709_, (ValaCCodeDeclarator*) _tmp713_, 0);
+						_vala_ccode_node_unref0 (_tmp713_);
+						_vala_ccode_node_unref0 (_tmp711_);
+						_g_free0 (_tmp709_);
+						_g_free0 (_tmp707_);
+						_tmp714_ = cl;
+						_tmp715_ = vala_class_is_fundamental (_tmp714_);
+						if (_tmp715_) {
+							ValaCCodeIdentifier* _tmp716_;
+							ValaCCodeIdentifier* _tmp717_;
+							ValaCCodeFunctionCall* _tmp718_;
+							ValaCCodeFunctionCall* _tmp719_;
 							ValaCCodeFunctionCall* ccall;
-							ValaCCodeFunctionCall* _tmp724_;
+							ValaCCodeFunctionCall* _tmp720_;
+							ValaCCodeIdentifier* _tmp721_;
+							ValaCCodeIdentifier* _tmp722_;
+							ValaCCodeFunction* _tmp723_;
+							ValaCCodeFunction* _tmp724_;
 							ValaCCodeIdentifier* _tmp725_;
 							ValaCCodeIdentifier* _tmp726_;
-							ValaCCodeFunction* _tmp727_;
-							ValaCCodeFunction* _tmp728_;
-							ValaCCodeIdentifier* _tmp729_;
-							ValaCCodeIdentifier* _tmp730_;
-							ValaCCodeFunctionCall* _tmp731_;
-							ValaClass* _tmp732_;
-							gchar* _tmp733_ = NULL;
-							gchar* _tmp734_;
-							gchar* _tmp735_;
-							gchar* _tmp736_;
-							ValaCCodeCastExpression* _tmp737_;
-							ValaCCodeCastExpression* _tmp738_;
-							_tmp720_ = vala_ccode_identifier_new ("g_type_create_instance");
-							_tmp721_ = _tmp720_;
-							_tmp722_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp721_);
-							_tmp723_ = _tmp722_;
-							_vala_ccode_node_unref0 (_tmp721_);
-							ccall = _tmp723_;
-							_tmp724_ = ccall;
-							_tmp725_ = vala_ccode_identifier_new ("object_type");
+							ValaCCodeFunctionCall* _tmp727_;
+							ValaClass* _tmp728_;
+							gchar* _tmp729_ = NULL;
+							gchar* _tmp730_;
+							gchar* _tmp731_;
+							gchar* _tmp732_;
+							ValaCCodeCastExpression* _tmp733_;
+							ValaCCodeCastExpression* _tmp734_;
+							_tmp716_ = vala_ccode_identifier_new ("g_type_create_instance");
+							_tmp717_ = _tmp716_;
+							_tmp718_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp717_);
+							_tmp719_ = _tmp718_;
+							_vala_ccode_node_unref0 (_tmp717_);
+							ccall = _tmp719_;
+							_tmp720_ = ccall;
+							_tmp721_ = vala_ccode_identifier_new ("object_type");
+							_tmp722_ = _tmp721_;
+							vala_ccode_function_call_add_argument (_tmp720_, (ValaCCodeExpression*) _tmp722_);
+							_vala_ccode_node_unref0 (_tmp722_);
+							_tmp723_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+							_tmp724_ = _tmp723_;
+							_tmp725_ = vala_ccode_identifier_new ("self");
 							_tmp726_ = _tmp725_;
-							vala_ccode_function_call_add_argument (_tmp724_, (ValaCCodeExpression*) _tmp726_);
-							_vala_ccode_node_unref0 (_tmp726_);
-							_tmp727_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-							_tmp728_ = _tmp727_;
-							_tmp729_ = vala_ccode_identifier_new ("self");
+							_tmp727_ = ccall;
+							_tmp728_ = cl;
+							_tmp729_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp728_);
 							_tmp730_ = _tmp729_;
-							_tmp731_ = ccall;
-							_tmp732_ = cl;
-							_tmp733_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp732_);
+							_tmp731_ = g_strconcat (_tmp730_, "*", NULL);
+							_tmp732_ = _tmp731_;
+							_tmp733_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp727_, _tmp732_);
 							_tmp734_ = _tmp733_;
-							_tmp735_ = g_strconcat (_tmp734_, "*", NULL);
-							_tmp736_ = _tmp735_;
-							_tmp737_ = vala_ccode_cast_expression_new ((ValaCCodeExpression*) _tmp731_, _tmp736_);
-							_tmp738_ = _tmp737_;
-							vala_ccode_function_add_assignment (_tmp728_, (ValaCCodeExpression*) _tmp730_, (ValaCCodeExpression*) _tmp738_);
-							_vala_ccode_node_unref0 (_tmp738_);
-							_g_free0 (_tmp736_);
-							_g_free0 (_tmp734_);
-							_vala_ccode_node_unref0 (_tmp730_);
+							vala_ccode_function_add_assignment (_tmp724_, (ValaCCodeExpression*) _tmp726_, (ValaCCodeExpression*) _tmp734_);
+							_vala_ccode_node_unref0 (_tmp734_);
+							_g_free0 (_tmp732_);
+							_g_free0 (_tmp730_);
+							_vala_ccode_node_unref0 (_tmp726_);
 							{
-								ValaClass* _tmp739_;
-								ValaClass* _tmp740_;
-								ValaList* _tmp741_ = NULL;
+								ValaClass* _tmp735_;
+								ValaClass* _tmp736_;
+								ValaList* _tmp737_ = NULL;
 								ValaList* _type_param_list;
-								ValaList* _tmp742_;
-								gint _tmp743_;
-								gint _tmp744_;
+								ValaList* _tmp738_;
+								gint _tmp739_;
+								gint _tmp740_;
 								gint _type_param_size;
 								gint _type_param_index;
-								_tmp739_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
+								_tmp735_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
+								_tmp736_ = _tmp735_;
+								_tmp737_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) _tmp736_);
+								_type_param_list = _tmp737_;
+								_tmp738_ = _type_param_list;
+								_tmp739_ = vala_collection_get_size ((ValaCollection*) _tmp738_);
 								_tmp740_ = _tmp739_;
-								_tmp741_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) _tmp740_);
-								_type_param_list = _tmp741_;
-								_tmp742_ = _type_param_list;
-								_tmp743_ = vala_collection_get_size ((ValaCollection*) _tmp742_);
-								_tmp744_ = _tmp743_;
-								_type_param_size = _tmp744_;
+								_type_param_size = _tmp740_;
 								_type_param_index = -1;
 								while (TRUE) {
+									gint _tmp741_;
+									gint _tmp742_;
+									gint _tmp743_;
+									ValaList* _tmp744_;
 									gint _tmp745_;
-									gint _tmp746_;
-									gint _tmp747_;
-									ValaList* _tmp748_;
-									gint _tmp749_;
-									gpointer _tmp750_ = NULL;
+									gpointer _tmp746_ = NULL;
 									ValaTypeParameter* type_param;
 									ValaCCodeIdentifier* param_name = NULL;
 									ValaCCodeAssignment* assign = NULL;
-									ValaCCodeIdentifier* _tmp751_;
-									ValaCCodeIdentifier* _tmp752_;
-									ValaCCodeMemberAccess* _tmp753_;
-									ValaCCodeMemberAccess* _tmp754_;
+									ValaCCodeIdentifier* _tmp747_;
+									ValaCCodeIdentifier* _tmp748_;
+									ValaCCodeMemberAccess* _tmp749_;
+									ValaCCodeMemberAccess* _tmp750_;
 									ValaCCodeMemberAccess* priv_access;
-									ValaTypeParameter* _tmp755_;
-									const gchar* _tmp756_;
-									const gchar* _tmp757_;
-									gchar* _tmp758_ = NULL;
-									gchar* _tmp759_;
-									gchar* _tmp760_ = NULL;
-									gchar* _tmp761_;
-									ValaCCodeIdentifier* _tmp762_;
+									ValaTypeParameter* _tmp751_;
+									const gchar* _tmp752_;
+									const gchar* _tmp753_;
+									gchar* _tmp754_ = NULL;
+									gchar* _tmp755_;
+									gchar* _tmp756_ = NULL;
+									gchar* _tmp757_;
+									ValaCCodeIdentifier* _tmp758_;
+									ValaCCodeMemberAccess* _tmp759_;
+									ValaCCodeIdentifier* _tmp760_;
+									const gchar* _tmp761_;
+									const gchar* _tmp762_;
 									ValaCCodeMemberAccess* _tmp763_;
-									ValaCCodeIdentifier* _tmp764_;
-									const gchar* _tmp765_;
-									const gchar* _tmp766_;
-									ValaCCodeMemberAccess* _tmp767_;
-									ValaCCodeMemberAccess* _tmp768_;
-									ValaCCodeIdentifier* _tmp769_;
-									ValaCCodeAssignment* _tmp770_;
-									ValaCCodeFunction* _tmp771_;
-									ValaCCodeFunction* _tmp772_;
-									ValaCCodeAssignment* _tmp773_;
-									ValaTypeParameter* _tmp774_;
-									const gchar* _tmp775_;
-									const gchar* _tmp776_;
-									gchar* _tmp777_ = NULL;
-									gchar* _tmp778_;
-									gchar* _tmp779_ = NULL;
-									gchar* _tmp780_;
-									ValaCCodeIdentifier* _tmp781_;
+									ValaCCodeMemberAccess* _tmp764_;
+									ValaCCodeIdentifier* _tmp765_;
+									ValaCCodeAssignment* _tmp766_;
+									ValaCCodeFunction* _tmp767_;
+									ValaCCodeFunction* _tmp768_;
+									ValaCCodeAssignment* _tmp769_;
+									ValaTypeParameter* _tmp770_;
+									const gchar* _tmp771_;
+									const gchar* _tmp772_;
+									gchar* _tmp773_ = NULL;
+									gchar* _tmp774_;
+									gchar* _tmp775_ = NULL;
+									gchar* _tmp776_;
+									ValaCCodeIdentifier* _tmp777_;
+									ValaCCodeMemberAccess* _tmp778_;
+									ValaCCodeIdentifier* _tmp779_;
+									const gchar* _tmp780_;
+									const gchar* _tmp781_;
 									ValaCCodeMemberAccess* _tmp782_;
-									ValaCCodeIdentifier* _tmp783_;
-									const gchar* _tmp784_;
-									const gchar* _tmp785_;
-									ValaCCodeMemberAccess* _tmp786_;
-									ValaCCodeMemberAccess* _tmp787_;
-									ValaCCodeIdentifier* _tmp788_;
-									ValaCCodeAssignment* _tmp789_;
-									ValaCCodeFunction* _tmp790_;
-									ValaCCodeFunction* _tmp791_;
-									ValaCCodeAssignment* _tmp792_;
-									ValaTypeParameter* _tmp793_;
-									const gchar* _tmp794_;
-									const gchar* _tmp795_;
-									gchar* _tmp796_ = NULL;
-									gchar* _tmp797_;
-									gchar* _tmp798_ = NULL;
-									gchar* _tmp799_;
-									ValaCCodeIdentifier* _tmp800_;
+									ValaCCodeMemberAccess* _tmp783_;
+									ValaCCodeIdentifier* _tmp784_;
+									ValaCCodeAssignment* _tmp785_;
+									ValaCCodeFunction* _tmp786_;
+									ValaCCodeFunction* _tmp787_;
+									ValaCCodeAssignment* _tmp788_;
+									ValaTypeParameter* _tmp789_;
+									const gchar* _tmp790_;
+									const gchar* _tmp791_;
+									gchar* _tmp792_ = NULL;
+									gchar* _tmp793_;
+									gchar* _tmp794_ = NULL;
+									gchar* _tmp795_;
+									ValaCCodeIdentifier* _tmp796_;
+									ValaCCodeMemberAccess* _tmp797_;
+									ValaCCodeIdentifier* _tmp798_;
+									const gchar* _tmp799_;
+									const gchar* _tmp800_;
 									ValaCCodeMemberAccess* _tmp801_;
-									ValaCCodeIdentifier* _tmp802_;
-									const gchar* _tmp803_;
-									const gchar* _tmp804_;
-									ValaCCodeMemberAccess* _tmp805_;
-									ValaCCodeMemberAccess* _tmp806_;
-									ValaCCodeIdentifier* _tmp807_;
-									ValaCCodeAssignment* _tmp808_;
-									ValaCCodeFunction* _tmp809_;
-									ValaCCodeFunction* _tmp810_;
-									ValaCCodeAssignment* _tmp811_;
-									_tmp745_ = _type_param_index;
-									_type_param_index = _tmp745_ + 1;
-									_tmp746_ = _type_param_index;
-									_tmp747_ = _type_param_size;
-									if (!(_tmp746_ < _tmp747_)) {
+									ValaCCodeMemberAccess* _tmp802_;
+									ValaCCodeIdentifier* _tmp803_;
+									ValaCCodeAssignment* _tmp804_;
+									ValaCCodeFunction* _tmp805_;
+									ValaCCodeFunction* _tmp806_;
+									ValaCCodeAssignment* _tmp807_;
+									_tmp741_ = _type_param_index;
+									_type_param_index = _tmp741_ + 1;
+									_tmp742_ = _type_param_index;
+									_tmp743_ = _type_param_size;
+									if (!(_tmp742_ < _tmp743_)) {
 										break;
 									}
-									_tmp748_ = _type_param_list;
-									_tmp749_ = _type_param_index;
-									_tmp750_ = vala_list_get (_tmp748_, _tmp749_);
-									type_param = (ValaTypeParameter*) _tmp750_;
-									_tmp751_ = vala_ccode_identifier_new ("self");
-									_tmp752_ = _tmp751_;
-									_tmp753_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp752_, "priv");
-									_tmp754_ = _tmp753_;
-									_vala_ccode_node_unref0 (_tmp752_);
-									priv_access = _tmp754_;
-									_tmp755_ = type_param;
-									_tmp756_ = vala_symbol_get_name ((ValaSymbol*) _tmp755_);
+									_tmp744_ = _type_param_list;
+									_tmp745_ = _type_param_index;
+									_tmp746_ = vala_list_get (_tmp744_, _tmp745_);
+									type_param = (ValaTypeParameter*) _tmp746_;
+									_tmp747_ = vala_ccode_identifier_new ("self");
+									_tmp748_ = _tmp747_;
+									_tmp749_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp748_, "priv");
+									_tmp750_ = _tmp749_;
+									_vala_ccode_node_unref0 (_tmp748_);
+									priv_access = _tmp750_;
+									_tmp751_ = type_param;
+									_tmp752_ = vala_symbol_get_name ((ValaSymbol*) _tmp751_);
+									_tmp753_ = _tmp752_;
+									_tmp754_ = g_utf8_strdown (_tmp753_, (gssize) (-1));
+									_tmp755_ = _tmp754_;
+									_tmp756_ = g_strdup_printf ("%s_type", _tmp755_);
 									_tmp757_ = _tmp756_;
-									_tmp758_ = g_utf8_strdown (_tmp757_, (gssize) (-1));
-									_tmp759_ = _tmp758_;
-									_tmp760_ = g_strdup_printf ("%s_type", _tmp759_);
-									_tmp761_ = _tmp760_;
-									_tmp762_ = vala_ccode_identifier_new (_tmp761_);
+									_tmp758_ = vala_ccode_identifier_new (_tmp757_);
 									_vala_ccode_node_unref0 (param_name);
-									param_name = _tmp762_;
-									_g_free0 (_tmp761_);
-									_g_free0 (_tmp759_);
-									_tmp763_ = priv_access;
-									_tmp764_ = param_name;
-									_tmp765_ = vala_ccode_identifier_get_name (_tmp764_);
-									_tmp766_ = _tmp765_;
-									_tmp767_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp763_, _tmp766_);
-									_tmp768_ = _tmp767_;
-									_tmp769_ = param_name;
-									_tmp770_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp768_, (ValaCCodeExpression*) _tmp769_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
+									param_name = _tmp758_;
+									_g_free0 (_tmp757_);
+									_g_free0 (_tmp755_);
+									_tmp759_ = priv_access;
+									_tmp760_ = param_name;
+									_tmp761_ = vala_ccode_identifier_get_name (_tmp760_);
+									_tmp762_ = _tmp761_;
+									_tmp763_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp759_, _tmp762_);
+									_tmp764_ = _tmp763_;
+									_tmp765_ = param_name;
+									_tmp766_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp764_, (ValaCCodeExpression*) _tmp765_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
 									_vala_ccode_node_unref0 (assign);
-									assign = _tmp770_;
-									_vala_ccode_node_unref0 (_tmp768_);
-									_tmp771_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+									assign = _tmp766_;
+									_vala_ccode_node_unref0 (_tmp764_);
+									_tmp767_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+									_tmp768_ = _tmp767_;
+									_tmp769_ = assign;
+									vala_ccode_function_add_expression (_tmp768_, (ValaCCodeExpression*) _tmp769_);
+									_tmp770_ = type_param;
+									_tmp771_ = vala_symbol_get_name ((ValaSymbol*) _tmp770_);
 									_tmp772_ = _tmp771_;
-									_tmp773_ = assign;
-									vala_ccode_function_add_expression (_tmp772_, (ValaCCodeExpression*) _tmp773_);
-									_tmp774_ = type_param;
-									_tmp775_ = vala_symbol_get_name ((ValaSymbol*) _tmp774_);
+									_tmp773_ = g_utf8_strdown (_tmp772_, (gssize) (-1));
+									_tmp774_ = _tmp773_;
+									_tmp775_ = g_strdup_printf ("%s_dup_func", _tmp774_);
 									_tmp776_ = _tmp775_;
-									_tmp777_ = g_utf8_strdown (_tmp776_, (gssize) (-1));
-									_tmp778_ = _tmp777_;
-									_tmp779_ = g_strdup_printf ("%s_dup_func", _tmp778_);
-									_tmp780_ = _tmp779_;
-									_tmp781_ = vala_ccode_identifier_new (_tmp780_);
+									_tmp777_ = vala_ccode_identifier_new (_tmp776_);
 									_vala_ccode_node_unref0 (param_name);
-									param_name = _tmp781_;
-									_g_free0 (_tmp780_);
-									_g_free0 (_tmp778_);
-									_tmp782_ = priv_access;
-									_tmp783_ = param_name;
-									_tmp784_ = vala_ccode_identifier_get_name (_tmp783_);
-									_tmp785_ = _tmp784_;
-									_tmp786_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp782_, _tmp785_);
-									_tmp787_ = _tmp786_;
-									_tmp788_ = param_name;
-									_tmp789_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp787_, (ValaCCodeExpression*) _tmp788_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
+									param_name = _tmp777_;
+									_g_free0 (_tmp776_);
+									_g_free0 (_tmp774_);
+									_tmp778_ = priv_access;
+									_tmp779_ = param_name;
+									_tmp780_ = vala_ccode_identifier_get_name (_tmp779_);
+									_tmp781_ = _tmp780_;
+									_tmp782_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp778_, _tmp781_);
+									_tmp783_ = _tmp782_;
+									_tmp784_ = param_name;
+									_tmp785_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp783_, (ValaCCodeExpression*) _tmp784_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
 									_vala_ccode_node_unref0 (assign);
-									assign = _tmp789_;
-									_vala_ccode_node_unref0 (_tmp787_);
-									_tmp790_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+									assign = _tmp785_;
+									_vala_ccode_node_unref0 (_tmp783_);
+									_tmp786_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+									_tmp787_ = _tmp786_;
+									_tmp788_ = assign;
+									vala_ccode_function_add_expression (_tmp787_, (ValaCCodeExpression*) _tmp788_);
+									_tmp789_ = type_param;
+									_tmp790_ = vala_symbol_get_name ((ValaSymbol*) _tmp789_);
 									_tmp791_ = _tmp790_;
-									_tmp792_ = assign;
-									vala_ccode_function_add_expression (_tmp791_, (ValaCCodeExpression*) _tmp792_);
-									_tmp793_ = type_param;
-									_tmp794_ = vala_symbol_get_name ((ValaSymbol*) _tmp793_);
+									_tmp792_ = g_utf8_strdown (_tmp791_, (gssize) (-1));
+									_tmp793_ = _tmp792_;
+									_tmp794_ = g_strdup_printf ("%s_destroy_func", _tmp793_);
 									_tmp795_ = _tmp794_;
-									_tmp796_ = g_utf8_strdown (_tmp795_, (gssize) (-1));
-									_tmp797_ = _tmp796_;
-									_tmp798_ = g_strdup_printf ("%s_destroy_func", _tmp797_);
-									_tmp799_ = _tmp798_;
-									_tmp800_ = vala_ccode_identifier_new (_tmp799_);
+									_tmp796_ = vala_ccode_identifier_new (_tmp795_);
 									_vala_ccode_node_unref0 (param_name);
-									param_name = _tmp800_;
-									_g_free0 (_tmp799_);
-									_g_free0 (_tmp797_);
-									_tmp801_ = priv_access;
-									_tmp802_ = param_name;
-									_tmp803_ = vala_ccode_identifier_get_name (_tmp802_);
-									_tmp804_ = _tmp803_;
-									_tmp805_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp801_, _tmp804_);
-									_tmp806_ = _tmp805_;
-									_tmp807_ = param_name;
-									_tmp808_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp806_, (ValaCCodeExpression*) _tmp807_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
+									param_name = _tmp796_;
+									_g_free0 (_tmp795_);
+									_g_free0 (_tmp793_);
+									_tmp797_ = priv_access;
+									_tmp798_ = param_name;
+									_tmp799_ = vala_ccode_identifier_get_name (_tmp798_);
+									_tmp800_ = _tmp799_;
+									_tmp801_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp797_, _tmp800_);
+									_tmp802_ = _tmp801_;
+									_tmp803_ = param_name;
+									_tmp804_ = vala_ccode_assignment_new ((ValaCCodeExpression*) _tmp802_, (ValaCCodeExpression*) _tmp803_, VALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
 									_vala_ccode_node_unref0 (assign);
-									assign = _tmp808_;
-									_vala_ccode_node_unref0 (_tmp806_);
-									_tmp809_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-									_tmp810_ = _tmp809_;
-									_tmp811_ = assign;
-									vala_ccode_function_add_expression (_tmp810_, (ValaCCodeExpression*) _tmp811_);
+									assign = _tmp804_;
+									_vala_ccode_node_unref0 (_tmp802_);
+									_tmp805_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+									_tmp806_ = _tmp805_;
+									_tmp807_ = assign;
+									vala_ccode_function_add_expression (_tmp806_, (ValaCCodeExpression*) _tmp807_);
 									_vala_ccode_node_unref0 (priv_access);
 									_vala_ccode_node_unref0 (assign);
 									_vala_ccode_node_unref0 (param_name);
@@ -4059,1133 +4051,1133 @@ static void vala_ccode_method_module_real_visit_method (ValaCodeVisitor* base, V
 						}
 						_vala_code_node_unref0 (cl);
 					} else {
-						ValaTypeSymbol* _tmp812_;
-						ValaTypeSymbol* _tmp813_;
-						_tmp812_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
-						_tmp813_ = _tmp812_;
-						if (VALA_IS_CLASS (_tmp813_)) {
-							ValaMethod* _tmp814_;
-							ValaSymbol* _tmp815_;
-							ValaSymbol* _tmp816_;
-							ValaClass* _tmp817_;
+						ValaTypeSymbol* _tmp808_;
+						ValaTypeSymbol* _tmp809_;
+						_tmp808_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
+						_tmp809_ = _tmp808_;
+						if (VALA_IS_CLASS (_tmp809_)) {
+							ValaMethod* _tmp810_;
+							ValaSymbol* _tmp811_;
+							ValaSymbol* _tmp812_;
+							ValaClass* _tmp813_;
 							ValaClass* cl;
-							ValaCCodeFunction* _tmp818_;
-							ValaCCodeFunction* _tmp819_;
-							ValaClass* _tmp820_;
-							gchar* _tmp821_ = NULL;
-							gchar* _tmp822_;
-							gchar* _tmp823_;
-							gchar* _tmp824_;
-							ValaCCodeVariableDeclarator* _tmp825_;
-							ValaCCodeVariableDeclarator* _tmp826_;
-							ValaMethod* _tmp827_;
-							gboolean _tmp828_;
-							gboolean _tmp829_;
-							ValaClass* _tmp845_;
-							ValaClass* _tmp846_;
-							ValaClass* _tmp847_;
-							_tmp814_ = m;
-							_tmp815_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp814_);
-							_tmp816_ = _tmp815_;
-							_tmp817_ = _vala_code_node_ref0 (VALA_CLASS (_tmp816_));
-							cl = _tmp817_;
-							_tmp818_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-							_tmp819_ = _tmp818_;
-							_tmp820_ = cl;
-							_tmp821_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp820_);
+							ValaCCodeFunction* _tmp814_;
+							ValaCCodeFunction* _tmp815_;
+							ValaClass* _tmp816_;
+							gchar* _tmp817_ = NULL;
+							gchar* _tmp818_;
+							gchar* _tmp819_;
+							gchar* _tmp820_;
+							ValaCCodeVariableDeclarator* _tmp821_;
+							ValaCCodeVariableDeclarator* _tmp822_;
+							ValaMethod* _tmp823_;
+							gboolean _tmp824_;
+							gboolean _tmp825_;
+							ValaClass* _tmp841_;
+							ValaClass* _tmp842_;
+							ValaClass* _tmp843_;
+							_tmp810_ = m;
+							_tmp811_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp810_);
+							_tmp812_ = _tmp811_;
+							_tmp813_ = _vala_code_node_ref0 (VALA_CLASS (_tmp812_));
+							cl = _tmp813_;
+							_tmp814_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+							_tmp815_ = _tmp814_;
+							_tmp816_ = cl;
+							_tmp817_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp816_);
+							_tmp818_ = _tmp817_;
+							_tmp819_ = g_strconcat (_tmp818_, "*", NULL);
+							_tmp820_ = _tmp819_;
+							_tmp821_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
 							_tmp822_ = _tmp821_;
-							_tmp823_ = g_strconcat (_tmp822_, "*", NULL);
-							_tmp824_ = _tmp823_;
-							_tmp825_ = vala_ccode_variable_declarator_new ("self", NULL, NULL);
-							_tmp826_ = _tmp825_;
-							vala_ccode_function_add_declaration (_tmp819_, _tmp824_, (ValaCCodeDeclarator*) _tmp826_, 0);
-							_vala_ccode_node_unref0 (_tmp826_);
-							_g_free0 (_tmp824_);
-							_g_free0 (_tmp822_);
-							_tmp827_ = m;
-							_tmp828_ = vala_creation_method_get_chain_up (VALA_CREATION_METHOD (_tmp827_));
-							_tmp829_ = _tmp828_;
-							if (!_tmp829_) {
-								ValaCCodeIdentifier* _tmp830_;
-								ValaCCodeIdentifier* _tmp831_;
-								ValaCCodeFunctionCall* _tmp832_;
-								ValaCCodeFunctionCall* _tmp833_;
+							vala_ccode_function_add_declaration (_tmp815_, _tmp820_, (ValaCCodeDeclarator*) _tmp822_, 0);
+							_vala_ccode_node_unref0 (_tmp822_);
+							_g_free0 (_tmp820_);
+							_g_free0 (_tmp818_);
+							_tmp823_ = m;
+							_tmp824_ = vala_creation_method_get_chain_up (VALA_CREATION_METHOD (_tmp823_));
+							_tmp825_ = _tmp824_;
+							if (!_tmp825_) {
+								ValaCCodeIdentifier* _tmp826_;
+								ValaCCodeIdentifier* _tmp827_;
+								ValaCCodeFunctionCall* _tmp828_;
+								ValaCCodeFunctionCall* _tmp829_;
 								ValaCCodeFunctionCall* ccall;
-								ValaCCodeFunctionCall* _tmp834_;
-								ValaClass* _tmp835_;
-								gchar* _tmp836_ = NULL;
-								gchar* _tmp837_;
+								ValaCCodeFunctionCall* _tmp830_;
+								ValaClass* _tmp831_;
+								gchar* _tmp832_ = NULL;
+								gchar* _tmp833_;
+								ValaCCodeIdentifier* _tmp834_;
+								ValaCCodeIdentifier* _tmp835_;
+								ValaCCodeFunction* _tmp836_;
+								ValaCCodeFunction* _tmp837_;
 								ValaCCodeIdentifier* _tmp838_;
 								ValaCCodeIdentifier* _tmp839_;
-								ValaCCodeFunction* _tmp840_;
-								ValaCCodeFunction* _tmp841_;
-								ValaCCodeIdentifier* _tmp842_;
-								ValaCCodeIdentifier* _tmp843_;
-								ValaCCodeFunctionCall* _tmp844_;
-								_tmp830_ = vala_ccode_identifier_new ("g_slice_new0");
-								_tmp831_ = _tmp830_;
-								_tmp832_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp831_);
+								ValaCCodeFunctionCall* _tmp840_;
+								_tmp826_ = vala_ccode_identifier_new ("g_slice_new0");
+								_tmp827_ = _tmp826_;
+								_tmp828_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp827_);
+								_tmp829_ = _tmp828_;
+								_vala_ccode_node_unref0 (_tmp827_);
+								ccall = _tmp829_;
+								_tmp830_ = ccall;
+								_tmp831_ = cl;
+								_tmp832_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp831_);
 								_tmp833_ = _tmp832_;
-								_vala_ccode_node_unref0 (_tmp831_);
-								ccall = _tmp833_;
-								_tmp834_ = ccall;
-								_tmp835_ = cl;
-								_tmp836_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp835_);
+								_tmp834_ = vala_ccode_identifier_new (_tmp833_);
+								_tmp835_ = _tmp834_;
+								vala_ccode_function_call_add_argument (_tmp830_, (ValaCCodeExpression*) _tmp835_);
+								_vala_ccode_node_unref0 (_tmp835_);
+								_g_free0 (_tmp833_);
+								_tmp836_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
 								_tmp837_ = _tmp836_;
-								_tmp838_ = vala_ccode_identifier_new (_tmp837_);
+								_tmp838_ = vala_ccode_identifier_new ("self");
 								_tmp839_ = _tmp838_;
-								vala_ccode_function_call_add_argument (_tmp834_, (ValaCCodeExpression*) _tmp839_);
+								_tmp840_ = ccall;
+								vala_ccode_function_add_assignment (_tmp837_, (ValaCCodeExpression*) _tmp839_, (ValaCCodeExpression*) _tmp840_);
 								_vala_ccode_node_unref0 (_tmp839_);
-								_g_free0 (_tmp837_);
-								_tmp840_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-								_tmp841_ = _tmp840_;
-								_tmp842_ = vala_ccode_identifier_new ("self");
-								_tmp843_ = _tmp842_;
-								_tmp844_ = ccall;
-								vala_ccode_function_add_assignment (_tmp841_, (ValaCCodeExpression*) _tmp843_, (ValaCCodeExpression*) _tmp844_);
-								_vala_ccode_node_unref0 (_tmp843_);
 								_vala_ccode_node_unref0 (ccall);
 							}
-							_tmp845_ = cl;
-							_tmp846_ = vala_class_get_base_class (_tmp845_);
-							_tmp847_ = _tmp846_;
-							if (_tmp847_ == NULL) {
-								ValaClass* _tmp848_;
-								gchar* _tmp849_ = NULL;
-								gchar* _tmp850_;
-								gchar* _tmp851_ = NULL;
-								gchar* _tmp852_;
-								ValaCCodeIdentifier* _tmp853_;
-								ValaCCodeIdentifier* _tmp854_;
-								ValaCCodeFunctionCall* _tmp855_;
-								ValaCCodeFunctionCall* _tmp856_;
+							_tmp841_ = cl;
+							_tmp842_ = vala_class_get_base_class (_tmp841_);
+							_tmp843_ = _tmp842_;
+							if (_tmp843_ == NULL) {
+								ValaClass* _tmp844_;
+								gchar* _tmp845_ = NULL;
+								gchar* _tmp846_;
+								gchar* _tmp847_ = NULL;
+								gchar* _tmp848_;
+								ValaCCodeIdentifier* _tmp849_;
+								ValaCCodeIdentifier* _tmp850_;
+								ValaCCodeFunctionCall* _tmp851_;
+								ValaCCodeFunctionCall* _tmp852_;
 								ValaCCodeFunctionCall* cinitcall;
-								ValaCCodeFunctionCall* _tmp857_;
-								ValaCCodeIdentifier* _tmp858_;
-								ValaCCodeIdentifier* _tmp859_;
-								ValaCCodeFunction* _tmp860_;
-								ValaCCodeFunction* _tmp861_;
-								ValaCCodeFunctionCall* _tmp862_;
-								_tmp848_ = cl;
-								_tmp849_ = vala_ccode_base_module_get_ccode_lower_case_name ((ValaCodeNode*) _tmp848_, NULL);
+								ValaCCodeFunctionCall* _tmp853_;
+								ValaCCodeIdentifier* _tmp854_;
+								ValaCCodeIdentifier* _tmp855_;
+								ValaCCodeFunction* _tmp856_;
+								ValaCCodeFunction* _tmp857_;
+								ValaCCodeFunctionCall* _tmp858_;
+								_tmp844_ = cl;
+								_tmp845_ = vala_ccode_base_module_get_ccode_lower_case_name ((ValaCodeNode*) _tmp844_, NULL);
+								_tmp846_ = _tmp845_;
+								_tmp847_ = g_strdup_printf ("%s_instance_init", _tmp846_);
+								_tmp848_ = _tmp847_;
+								_tmp849_ = vala_ccode_identifier_new (_tmp848_);
 								_tmp850_ = _tmp849_;
-								_tmp851_ = g_strdup_printf ("%s_instance_init", _tmp850_);
+								_tmp851_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp850_);
 								_tmp852_ = _tmp851_;
-								_tmp853_ = vala_ccode_identifier_new (_tmp852_);
-								_tmp854_ = _tmp853_;
-								_tmp855_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp854_);
-								_tmp856_ = _tmp855_;
-								_vala_ccode_node_unref0 (_tmp854_);
-								_g_free0 (_tmp852_);
-								_g_free0 (_tmp850_);
-								cinitcall = _tmp856_;
-								_tmp857_ = cinitcall;
-								_tmp858_ = vala_ccode_identifier_new ("self");
-								_tmp859_ = _tmp858_;
-								vala_ccode_function_call_add_argument (_tmp857_, (ValaCCodeExpression*) _tmp859_);
-								_vala_ccode_node_unref0 (_tmp859_);
-								_tmp860_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-								_tmp861_ = _tmp860_;
-								_tmp862_ = cinitcall;
-								vala_ccode_function_add_expression (_tmp861_, (ValaCCodeExpression*) _tmp862_);
+								_vala_ccode_node_unref0 (_tmp850_);
+								_g_free0 (_tmp848_);
+								_g_free0 (_tmp846_);
+								cinitcall = _tmp852_;
+								_tmp853_ = cinitcall;
+								_tmp854_ = vala_ccode_identifier_new ("self");
+								_tmp855_ = _tmp854_;
+								vala_ccode_function_call_add_argument (_tmp853_, (ValaCCodeExpression*) _tmp855_);
+								_vala_ccode_node_unref0 (_tmp855_);
+								_tmp856_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+								_tmp857_ = _tmp856_;
+								_tmp858_ = cinitcall;
+								vala_ccode_function_add_expression (_tmp857_, (ValaCCodeExpression*) _tmp858_);
 								_vala_ccode_node_unref0 (cinitcall);
 							}
 							_vala_code_node_unref0 (cl);
 						} else {
-							ValaMethod* _tmp863_;
-							ValaSymbol* _tmp864_;
-							ValaSymbol* _tmp865_;
-							ValaStruct* _tmp866_;
+							ValaMethod* _tmp859_;
+							ValaSymbol* _tmp860_;
+							ValaSymbol* _tmp861_;
+							ValaStruct* _tmp862_;
 							ValaStruct* st;
-							ValaCCodeFile* _tmp867_;
-							ValaCCodeIdentifier* _tmp868_;
+							ValaCCodeFile* _tmp863_;
+							ValaCCodeIdentifier* _tmp864_;
+							ValaCCodeIdentifier* _tmp865_;
+							ValaCCodeFunctionCall* _tmp866_;
+							ValaCCodeFunctionCall* _tmp867_;
+							ValaCCodeFunctionCall* czero;
+							ValaCCodeFunctionCall* _tmp868_;
 							ValaCCodeIdentifier* _tmp869_;
-							ValaCCodeFunctionCall* _tmp870_;
+							ValaCCodeIdentifier* _tmp870_;
 							ValaCCodeFunctionCall* _tmp871_;
-							ValaCCodeFunctionCall* czero;
-							ValaCCodeFunctionCall* _tmp872_;
-							ValaCCodeIdentifier* _tmp873_;
-							ValaCCodeIdentifier* _tmp874_;
-							ValaCCodeFunctionCall* _tmp875_;
-							ValaCCodeConstant* _tmp876_;
-							ValaCCodeConstant* _tmp877_;
-							ValaCCodeFunctionCall* _tmp878_;
-							ValaStruct* _tmp879_;
-							gchar* _tmp880_ = NULL;
-							gchar* _tmp881_;
-							gchar* _tmp882_ = NULL;
-							gchar* _tmp883_;
-							ValaCCodeIdentifier* _tmp884_;
-							ValaCCodeIdentifier* _tmp885_;
-							ValaCCodeFunction* _tmp886_;
-							ValaCCodeFunction* _tmp887_;
-							ValaCCodeFunctionCall* _tmp888_;
-							_tmp863_ = m;
-							_tmp864_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp863_);
+							ValaCCodeConstant* _tmp872_;
+							ValaCCodeConstant* _tmp873_;
+							ValaCCodeFunctionCall* _tmp874_;
+							ValaStruct* _tmp875_;
+							gchar* _tmp876_ = NULL;
+							gchar* _tmp877_;
+							gchar* _tmp878_ = NULL;
+							gchar* _tmp879_;
+							ValaCCodeIdentifier* _tmp880_;
+							ValaCCodeIdentifier* _tmp881_;
+							ValaCCodeFunction* _tmp882_;
+							ValaCCodeFunction* _tmp883_;
+							ValaCCodeFunctionCall* _tmp884_;
+							_tmp859_ = m;
+							_tmp860_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp859_);
+							_tmp861_ = _tmp860_;
+							_tmp862_ = _vala_code_node_ref0 (VALA_STRUCT (_tmp861_));
+							st = _tmp862_;
+							_tmp863_ = ((ValaCCodeBaseModule*) self)->cfile;
+							vala_ccode_file_add_include (_tmp863_, "string.h", FALSE);
+							_tmp864_ = vala_ccode_identifier_new ("memset");
 							_tmp865_ = _tmp864_;
-							_tmp866_ = _vala_code_node_ref0 (VALA_STRUCT (_tmp865_));
-							st = _tmp866_;
-							_tmp867_ = ((ValaCCodeBaseModule*) self)->cfile;
-							vala_ccode_file_add_include (_tmp867_, "string.h", FALSE);
-							_tmp868_ = vala_ccode_identifier_new ("memset");
-							_tmp869_ = _tmp868_;
-							_tmp870_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp869_);
-							_tmp871_ = _tmp870_;
-							_vala_ccode_node_unref0 (_tmp869_);
-							czero = _tmp871_;
-							_tmp872_ = czero;
-							_tmp873_ = vala_ccode_identifier_new ("self");
-							_tmp874_ = _tmp873_;
-							vala_ccode_function_call_add_argument (_tmp872_, (ValaCCodeExpression*) _tmp874_);
-							_vala_ccode_node_unref0 (_tmp874_);
-							_tmp875_ = czero;
-							_tmp876_ = vala_ccode_constant_new ("0");
+							_tmp866_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp865_);
+							_tmp867_ = _tmp866_;
+							_vala_ccode_node_unref0 (_tmp865_);
+							czero = _tmp867_;
+							_tmp868_ = czero;
+							_tmp869_ = vala_ccode_identifier_new ("self");
+							_tmp870_ = _tmp869_;
+							vala_ccode_function_call_add_argument (_tmp868_, (ValaCCodeExpression*) _tmp870_);
+							_vala_ccode_node_unref0 (_tmp870_);
+							_tmp871_ = czero;
+							_tmp872_ = vala_ccode_constant_new ("0");
+							_tmp873_ = _tmp872_;
+							vala_ccode_function_call_add_argument (_tmp871_, (ValaCCodeExpression*) _tmp873_);
+							_vala_ccode_node_unref0 (_tmp873_);
+							_tmp874_ = czero;
+							_tmp875_ = st;
+							_tmp876_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp875_);
 							_tmp877_ = _tmp876_;
-							vala_ccode_function_call_add_argument (_tmp875_, (ValaCCodeExpression*) _tmp877_);
-							_vala_ccode_node_unref0 (_tmp877_);
-							_tmp878_ = czero;
-							_tmp879_ = st;
-							_tmp880_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp879_);
+							_tmp878_ = g_strdup_printf ("sizeof (%s)", _tmp877_);
+							_tmp879_ = _tmp878_;
+							_tmp880_ = vala_ccode_identifier_new (_tmp879_);
 							_tmp881_ = _tmp880_;
-							_tmp882_ = g_strdup_printf ("sizeof (%s)", _tmp881_);
+							vala_ccode_function_call_add_argument (_tmp874_, (ValaCCodeExpression*) _tmp881_);
+							_vala_ccode_node_unref0 (_tmp881_);
+							_g_free0 (_tmp879_);
+							_g_free0 (_tmp877_);
+							_tmp882_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
 							_tmp883_ = _tmp882_;
-							_tmp884_ = vala_ccode_identifier_new (_tmp883_);
-							_tmp885_ = _tmp884_;
-							vala_ccode_function_call_add_argument (_tmp878_, (ValaCCodeExpression*) _tmp885_);
-							_vala_ccode_node_unref0 (_tmp885_);
-							_g_free0 (_tmp883_);
-							_g_free0 (_tmp881_);
-							_tmp886_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-							_tmp887_ = _tmp886_;
-							_tmp888_ = czero;
-							vala_ccode_function_add_expression (_tmp887_, (ValaCCodeExpression*) _tmp888_);
+							_tmp884_ = czero;
+							vala_ccode_function_add_expression (_tmp883_, (ValaCCodeExpression*) _tmp884_);
 							_vala_ccode_node_unref0 (czero);
 							_vala_code_node_unref0 (st);
 						}
 					}
 				}
 			}
-			_tmp890_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
-			_tmp891_ = _tmp890_;
-			_tmp892_ = vala_code_context_get_module_init_method (_tmp891_);
-			_tmp893_ = _tmp892_;
-			_tmp894_ = m;
-			if (_tmp893_ == _tmp894_) {
-				gboolean _tmp895_;
-				_tmp895_ = ((ValaCCodeBaseModule*) self)->in_plugin;
-				_tmp889_ = _tmp895_;
+			_tmp886_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
+			_tmp887_ = _tmp886_;
+			_tmp888_ = vala_code_context_get_module_init_method (_tmp887_);
+			_tmp889_ = _tmp888_;
+			_tmp890_ = m;
+			if (_tmp889_ == _tmp890_) {
+				gboolean _tmp891_;
+				_tmp891_ = ((ValaCCodeBaseModule*) self)->in_plugin;
+				_tmp885_ = _tmp891_;
 			} else {
-				_tmp889_ = FALSE;
+				_tmp885_ = FALSE;
 			}
-			_tmp896_ = _tmp889_;
-			if (_tmp896_) {
-				ValaCodeContext* _tmp897_;
-				ValaCodeContext* _tmp898_;
-				ValaNamespace* _tmp899_;
-				ValaNamespace* _tmp900_;
-				GHashFunc _tmp901_;
-				GEqualFunc _tmp902_;
-				ValaHashSet* _tmp903_;
-				ValaHashSet* _tmp904_;
-				_tmp897_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
-				_tmp898_ = _tmp897_;
-				_tmp899_ = vala_code_context_get_root (_tmp898_);
+			_tmp892_ = _tmp885_;
+			if (_tmp892_) {
+				ValaCodeContext* _tmp893_;
+				ValaCodeContext* _tmp894_;
+				ValaNamespace* _tmp895_;
+				ValaNamespace* _tmp896_;
+				GHashFunc _tmp897_;
+				GEqualFunc _tmp898_;
+				ValaHashSet* _tmp899_;
+				ValaHashSet* _tmp900_;
+				_tmp893_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
+				_tmp894_ = _tmp893_;
+				_tmp895_ = vala_code_context_get_root (_tmp894_);
+				_tmp896_ = _tmp895_;
+				_tmp897_ = g_direct_hash;
+				_tmp898_ = g_direct_equal;
+				_tmp899_ = vala_hash_set_new (VALA_TYPE_SYMBOL, (GBoxedCopyFunc) vala_code_node_ref, vala_code_node_unref, _tmp897_, _tmp898_);
 				_tmp900_ = _tmp899_;
-				_tmp901_ = g_direct_hash;
-				_tmp902_ = g_direct_equal;
-				_tmp903_ = vala_hash_set_new (VALA_TYPE_SYMBOL, (GBoxedCopyFunc) vala_code_node_ref, vala_code_node_unref, _tmp901_, _tmp902_);
-				_tmp904_ = _tmp903_;
-				vala_ccode_method_module_register_plugin_types (self, (ValaSymbol*) _tmp900_, (ValaSet*) _tmp904_);
-				_vala_iterable_unref0 (_tmp904_);
+				vala_ccode_method_module_register_plugin_types (self, (ValaSymbol*) _tmp896_, (ValaSet*) _tmp900_);
+				_vala_iterable_unref0 (_tmp900_);
 			}
 			{
-				ValaMethod* _tmp905_;
-				ValaList* _tmp906_ = NULL;
+				ValaMethod* _tmp901_;
+				ValaList* _tmp902_ = NULL;
 				ValaList* _precondition_list;
-				ValaList* _tmp907_;
-				gint _tmp908_;
-				gint _tmp909_;
+				ValaList* _tmp903_;
+				gint _tmp904_;
+				gint _tmp905_;
 				gint _precondition_size;
 				gint _precondition_index;
-				_tmp905_ = m;
-				_tmp906_ = vala_method_get_preconditions (_tmp905_);
-				_precondition_list = _tmp906_;
-				_tmp907_ = _precondition_list;
-				_tmp908_ = vala_collection_get_size ((ValaCollection*) _tmp907_);
-				_tmp909_ = _tmp908_;
-				_precondition_size = _tmp909_;
+				_tmp901_ = m;
+				_tmp902_ = vala_method_get_preconditions (_tmp901_);
+				_precondition_list = _tmp902_;
+				_tmp903_ = _precondition_list;
+				_tmp904_ = vala_collection_get_size ((ValaCollection*) _tmp903_);
+				_tmp905_ = _tmp904_;
+				_precondition_size = _tmp905_;
 				_precondition_index = -1;
 				while (TRUE) {
+					gint _tmp906_;
+					gint _tmp907_;
+					gint _tmp908_;
+					ValaList* _tmp909_;
 					gint _tmp910_;
-					gint _tmp911_;
-					gint _tmp912_;
-					ValaList* _tmp913_;
-					gint _tmp914_;
-					gpointer _tmp915_ = NULL;
+					gpointer _tmp911_ = NULL;
 					ValaExpression* precondition;
-					ValaMethod* _tmp916_;
-					ValaDataType* _tmp917_;
-					ValaExpression* _tmp918_;
-					_tmp910_ = _precondition_index;
-					_precondition_index = _tmp910_ + 1;
-					_tmp911_ = _precondition_index;
-					_tmp912_ = _precondition_size;
-					if (!(_tmp911_ < _tmp912_)) {
+					ValaMethod* _tmp912_;
+					ValaDataType* _tmp913_;
+					ValaExpression* _tmp914_;
+					_tmp906_ = _precondition_index;
+					_precondition_index = _tmp906_ + 1;
+					_tmp907_ = _precondition_index;
+					_tmp908_ = _precondition_size;
+					if (!(_tmp907_ < _tmp908_)) {
 						break;
 					}
-					_tmp913_ = _precondition_list;
-					_tmp914_ = _precondition_index;
-					_tmp915_ = vala_list_get (_tmp913_, _tmp914_);
-					precondition = (ValaExpression*) _tmp915_;
-					_tmp916_ = m;
-					_tmp917_ = creturn_type;
-					_tmp918_ = precondition;
-					vala_ccode_method_module_create_precondition_statement (self, (ValaCodeNode*) _tmp916_, _tmp917_, _tmp918_);
+					_tmp909_ = _precondition_list;
+					_tmp910_ = _precondition_index;
+					_tmp911_ = vala_list_get (_tmp909_, _tmp910_);
+					precondition = (ValaExpression*) _tmp911_;
+					_tmp912_ = m;
+					_tmp913_ = creturn_type;
+					_tmp914_ = precondition;
+					vala_ccode_method_module_create_precondition_statement (self, (ValaCodeNode*) _tmp912_, _tmp913_, _tmp914_);
 					_vala_code_node_unref0 (precondition);
 				}
 				_vala_iterable_unref0 (_precondition_list);
 			}
 		}
 	}
-	_tmp919_ = m;
-	_tmp920_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp919_);
-	_tmp921_ = _tmp920_;
-	if (_tmp921_ != NULL) {
-		ValaMethod* _tmp922_;
-		ValaBlock* _tmp923_;
-		ValaBlock* _tmp924_;
-		_tmp922_ = m;
-		_tmp923_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp922_);
-		_tmp924_ = _tmp923_;
-		vala_code_node_emit ((ValaCodeNode*) _tmp924_, (ValaCodeGenerator*) self);
+	_tmp915_ = m;
+	_tmp916_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp915_);
+	_tmp917_ = _tmp916_;
+	if (_tmp917_ != NULL) {
+		ValaMethod* _tmp918_;
+		ValaBlock* _tmp919_;
+		ValaBlock* _tmp920_;
+		_tmp918_ = m;
+		_tmp919_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp918_);
+		_tmp920_ = _tmp919_;
+		vala_code_node_emit ((ValaCodeNode*) _tmp920_, (ValaCodeGenerator*) self);
 	}
-	_tmp926_ = m;
-	_tmp927_ = vala_method_get_is_abstract (_tmp926_);
-	_tmp928_ = _tmp927_;
-	if (!_tmp928_) {
-		_tmp925_ = TRUE;
+	_tmp922_ = m;
+	_tmp923_ = vala_method_get_is_abstract (_tmp922_);
+	_tmp924_ = _tmp923_;
+	if (!_tmp924_) {
+		_tmp921_ = TRUE;
 	} else {
-		gboolean _tmp929_ = FALSE;
-		ValaMethod* _tmp930_;
+		gboolean _tmp925_ = FALSE;
+		ValaMethod* _tmp926_;
+		gboolean _tmp927_;
+		gboolean _tmp928_;
 		gboolean _tmp931_;
-		gboolean _tmp932_;
-		gboolean _tmp935_;
-		_tmp930_ = m;
-		_tmp931_ = vala_method_get_is_abstract (_tmp930_);
-		_tmp932_ = _tmp931_;
-		if (_tmp932_) {
-			ValaTypeSymbol* _tmp933_;
-			ValaTypeSymbol* _tmp934_;
-			_tmp933_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
-			_tmp934_ = _tmp933_;
-			_tmp929_ = VALA_IS_CLASS (_tmp934_);
+		_tmp926_ = m;
+		_tmp927_ = vala_method_get_is_abstract (_tmp926_);
+		_tmp928_ = _tmp927_;
+		if (_tmp928_) {
+			ValaTypeSymbol* _tmp929_;
+			ValaTypeSymbol* _tmp930_;
+			_tmp929_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
+			_tmp930_ = _tmp929_;
+			_tmp925_ = VALA_IS_CLASS (_tmp930_);
 		} else {
-			_tmp929_ = FALSE;
+			_tmp925_ = FALSE;
 		}
-		_tmp935_ = _tmp929_;
-		_tmp925_ = _tmp935_;
+		_tmp931_ = _tmp925_;
+		_tmp921_ = _tmp931_;
 	}
-	_tmp936_ = _tmp925_;
-	if (_tmp936_) {
-		ValaMethod* _tmp937_;
-		ValaBlock* _tmp938_;
-		ValaBlock* _tmp939_;
-		_tmp937_ = m;
-		_tmp938_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp937_);
-		_tmp939_ = _tmp938_;
-		if (_tmp939_ != NULL) {
-			gboolean _tmp940_;
-			gboolean _tmp941_;
-			ValaMethod* _tmp952_;
-			gboolean _tmp953_;
-			gboolean _tmp954_;
-			gboolean _tmp955_ = FALSE;
-			gboolean _tmp956_ = FALSE;
-			ValaMethod* _tmp957_;
-			ValaDataType* _tmp958_;
-			ValaDataType* _tmp959_;
+	_tmp932_ = _tmp921_;
+	if (_tmp932_) {
+		ValaMethod* _tmp933_;
+		ValaBlock* _tmp934_;
+		ValaBlock* _tmp935_;
+		_tmp933_ = m;
+		_tmp934_ = vala_subroutine_get_body ((ValaSubroutine*) _tmp933_);
+		_tmp935_ = _tmp934_;
+		if (_tmp935_ != NULL) {
+			gboolean _tmp936_;
+			gboolean _tmp937_;
+			ValaMethod* _tmp948_;
+			gboolean _tmp949_;
+			gboolean _tmp950_;
+			gboolean _tmp951_ = FALSE;
+			gboolean _tmp952_ = FALSE;
+			ValaMethod* _tmp953_;
+			ValaDataType* _tmp954_;
+			ValaDataType* _tmp955_;
+			gboolean _tmp960_;
 			gboolean _tmp964_;
-			gboolean _tmp968_;
-			ValaMethod* _tmp985_;
-			ValaCCodeFile* _tmp1072_;
-			ValaCCodeFunction* _tmp1073_;
-			ValaCCodeFunction* _tmp1074_;
-			_tmp940_ = vala_ccode_base_module_get_current_method_inner_error ((ValaCCodeBaseModule*) self);
-			_tmp941_ = _tmp940_;
-			if (_tmp941_) {
-				ValaMethod* _tmp942_;
-				gboolean _tmp943_;
-				gboolean _tmp944_;
-				_tmp942_ = m;
-				_tmp943_ = vala_method_get_coroutine (_tmp942_);
-				_tmp944_ = _tmp943_;
-				if (_tmp944_) {
-					ValaCCodeStruct* _tmp945_;
-					_tmp945_ = ((ValaCCodeBaseModule*) self)->closure_struct;
-					vala_ccode_struct_add_field (_tmp945_, "GError *", "_inner_error_", NULL);
+			ValaMethod* _tmp981_;
+			ValaCCodeFile* _tmp1068_;
+			ValaCCodeFunction* _tmp1069_;
+			ValaCCodeFunction* _tmp1070_;
+			_tmp936_ = vala_ccode_base_module_get_current_method_inner_error ((ValaCCodeBaseModule*) self);
+			_tmp937_ = _tmp936_;
+			if (_tmp937_) {
+				ValaMethod* _tmp938_;
+				gboolean _tmp939_;
+				gboolean _tmp940_;
+				_tmp938_ = m;
+				_tmp939_ = vala_method_get_coroutine (_tmp938_);
+				_tmp940_ = _tmp939_;
+				if (_tmp940_) {
+					ValaCCodeStruct* _tmp941_;
+					_tmp941_ = ((ValaCCodeBaseModule*) self)->closure_struct;
+					vala_ccode_struct_add_field (_tmp941_, "GError *", "_inner_error_", NULL);
 				} else {
-					ValaCCodeFunction* _tmp946_;
-					ValaCCodeFunction* _tmp947_;
-					ValaCCodeConstant* _tmp948_;
-					ValaCCodeConstant* _tmp949_;
-					ValaCCodeVariableDeclarator* _tmp950_;
-					ValaCCodeVariableDeclarator* _tmp951_;
-					_tmp946_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+					ValaCCodeFunction* _tmp942_;
+					ValaCCodeFunction* _tmp943_;
+					ValaCCodeConstant* _tmp944_;
+					ValaCCodeConstant* _tmp945_;
+					ValaCCodeVariableDeclarator* _tmp946_;
+					ValaCCodeVariableDeclarator* _tmp947_;
+					_tmp942_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+					_tmp943_ = _tmp942_;
+					_tmp944_ = vala_ccode_constant_new ("NULL");
+					_tmp945_ = _tmp944_;
+					_tmp946_ = vala_ccode_variable_declarator_new_zero ("_inner_error_", (ValaCCodeExpression*) _tmp945_, NULL);
 					_tmp947_ = _tmp946_;
-					_tmp948_ = vala_ccode_constant_new ("NULL");
-					_tmp949_ = _tmp948_;
-					_tmp950_ = vala_ccode_variable_declarator_new_zero ("_inner_error_", (ValaCCodeExpression*) _tmp949_, NULL);
-					_tmp951_ = _tmp950_;
-					vala_ccode_function_add_declaration (_tmp947_, "GError *", (ValaCCodeDeclarator*) _tmp951_, 0);
-					_vala_ccode_node_unref0 (_tmp951_);
-					_vala_ccode_node_unref0 (_tmp949_);
+					vala_ccode_function_add_declaration (_tmp943_, "GError *", (ValaCCodeDeclarator*) _tmp947_, 0);
+					_vala_ccode_node_unref0 (_tmp947_);
+					_vala_ccode_node_unref0 (_tmp945_);
 				}
 			}
-			_tmp952_ = m;
-			_tmp953_ = vala_method_get_coroutine (_tmp952_);
-			_tmp954_ = _tmp953_;
-			if (_tmp954_) {
+			_tmp948_ = m;
+			_tmp949_ = vala_method_get_coroutine (_tmp948_);
+			_tmp950_ = _tmp949_;
+			if (_tmp950_) {
 				vala_ccode_method_module_complete_async (self);
 			}
-			_tmp957_ = m;
-			_tmp958_ = vala_method_get_return_type (_tmp957_);
-			_tmp959_ = _tmp958_;
-			if (!VALA_IS_VOID_TYPE (_tmp959_)) {
-				ValaMethod* _tmp960_;
-				ValaDataType* _tmp961_;
-				ValaDataType* _tmp962_;
-				gboolean _tmp963_ = FALSE;
-				_tmp960_ = m;
-				_tmp961_ = vala_method_get_return_type (_tmp960_);
-				_tmp962_ = _tmp961_;
-				_tmp963_ = vala_data_type_is_real_non_null_struct_type (_tmp962_);
-				_tmp956_ = !_tmp963_;
+			_tmp953_ = m;
+			_tmp954_ = vala_method_get_return_type (_tmp953_);
+			_tmp955_ = _tmp954_;
+			if (!VALA_IS_VOID_TYPE (_tmp955_)) {
+				ValaMethod* _tmp956_;
+				ValaDataType* _tmp957_;
+				ValaDataType* _tmp958_;
+				gboolean _tmp959_ = FALSE;
+				_tmp956_ = m;
+				_tmp957_ = vala_method_get_return_type (_tmp956_);
+				_tmp958_ = _tmp957_;
+				_tmp959_ = vala_data_type_is_real_non_null_struct_type (_tmp958_);
+				_tmp952_ = !_tmp959_;
 			} else {
-				_tmp956_ = FALSE;
+				_tmp952_ = FALSE;
 			}
-			_tmp964_ = _tmp956_;
-			if (_tmp964_) {
-				ValaMethod* _tmp965_;
-				gboolean _tmp966_;
-				gboolean _tmp967_;
-				_tmp965_ = m;
-				_tmp966_ = vala_method_get_coroutine (_tmp965_);
-				_tmp967_ = _tmp966_;
-				_tmp955_ = !_tmp967_;
+			_tmp960_ = _tmp952_;
+			if (_tmp960_) {
+				ValaMethod* _tmp961_;
+				gboolean _tmp962_;
+				gboolean _tmp963_;
+				_tmp961_ = m;
+				_tmp962_ = vala_method_get_coroutine (_tmp961_);
+				_tmp963_ = _tmp962_;
+				_tmp951_ = !_tmp963_;
 			} else {
-				_tmp955_ = FALSE;
+				_tmp951_ = FALSE;
 			}
-			_tmp968_ = _tmp955_;
-			if (_tmp968_) {
-				gboolean _tmp969_ = FALSE;
-				ValaMethod* _tmp970_;
-				ValaBasicBlock* _tmp971_;
-				ValaBasicBlock* _tmp972_;
-				gboolean _tmp980_;
-				_tmp970_ = m;
-				_tmp971_ = vala_subroutine_get_return_block ((ValaSubroutine*) _tmp970_);
-				_tmp972_ = _tmp971_;
-				if (_tmp972_ != NULL) {
-					ValaMethod* _tmp973_;
-					ValaBasicBlock* _tmp974_;
-					ValaBasicBlock* _tmp975_;
-					ValaList* _tmp976_ = NULL;
-					ValaList* _tmp977_;
-					gint _tmp978_;
-					gint _tmp979_;
-					_tmp973_ = m;
-					_tmp974_ = vala_subroutine_get_return_block ((ValaSubroutine*) _tmp973_);
+			_tmp964_ = _tmp951_;
+			if (_tmp964_) {
+				gboolean _tmp965_ = FALSE;
+				ValaMethod* _tmp966_;
+				ValaBasicBlock* _tmp967_;
+				ValaBasicBlock* _tmp968_;
+				gboolean _tmp976_;
+				_tmp966_ = m;
+				_tmp967_ = vala_subroutine_get_return_block ((ValaSubroutine*) _tmp966_);
+				_tmp968_ = _tmp967_;
+				if (_tmp968_ != NULL) {
+					ValaMethod* _tmp969_;
+					ValaBasicBlock* _tmp970_;
+					ValaBasicBlock* _tmp971_;
+					ValaList* _tmp972_ = NULL;
+					ValaList* _tmp973_;
+					gint _tmp974_;
+					gint _tmp975_;
+					_tmp969_ = m;
+					_tmp970_ = vala_subroutine_get_return_block ((ValaSubroutine*) _tmp969_);
+					_tmp971_ = _tmp970_;
+					_tmp972_ = vala_basic_block_get_predecessors (_tmp971_);
+					_tmp973_ = _tmp972_;
+					_tmp974_ = vala_collection_get_size ((ValaCollection*) _tmp973_);
 					_tmp975_ = _tmp974_;
-					_tmp976_ = vala_basic_block_get_predecessors (_tmp975_);
-					_tmp977_ = _tmp976_;
-					_tmp978_ = vala_collection_get_size ((ValaCollection*) _tmp977_);
-					_tmp979_ = _tmp978_;
-					_tmp969_ = _tmp979_ == 0;
-					_vala_iterable_unref0 (_tmp977_);
+					_tmp965_ = _tmp975_ == 0;
+					_vala_iterable_unref0 (_tmp973_);
 				} else {
-					_tmp969_ = FALSE;
+					_tmp965_ = FALSE;
 				}
-				_tmp980_ = _tmp969_;
-				if (_tmp980_) {
-					ValaCCodeFunction* _tmp981_;
-					ValaCCodeFunction* _tmp982_;
-					ValaCCodeIdentifier* _tmp983_;
-					ValaCCodeIdentifier* _tmp984_;
-					_tmp981_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-					_tmp982_ = _tmp981_;
-					_tmp983_ = vala_ccode_identifier_new ("result");
-					_tmp984_ = _tmp983_;
-					vala_ccode_function_add_return (_tmp982_, (ValaCCodeExpression*) _tmp984_);
-					_vala_ccode_node_unref0 (_tmp984_);
+				_tmp976_ = _tmp965_;
+				if (_tmp976_) {
+					ValaCCodeFunction* _tmp977_;
+					ValaCCodeFunction* _tmp978_;
+					ValaCCodeIdentifier* _tmp979_;
+					ValaCCodeIdentifier* _tmp980_;
+					_tmp977_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+					_tmp978_ = _tmp977_;
+					_tmp979_ = vala_ccode_identifier_new ("result");
+					_tmp980_ = _tmp979_;
+					vala_ccode_function_add_return (_tmp978_, (ValaCCodeExpression*) _tmp980_);
+					_vala_ccode_node_unref0 (_tmp980_);
 				}
 			}
-			_tmp985_ = m;
-			if (VALA_IS_CREATION_METHOD (_tmp985_)) {
-				ValaTypeSymbol* _tmp986_;
-				ValaTypeSymbol* _tmp987_;
-				gboolean _tmp992_ = FALSE;
-				gboolean _tmp993_ = FALSE;
-				gboolean _tmp994_ = FALSE;
-				gboolean _tmp995_ = FALSE;
-				ValaTypeSymbol* _tmp996_;
-				ValaTypeSymbol* _tmp997_;
-				gboolean _tmp999_;
-				gboolean _tmp1004_;
+			_tmp981_ = m;
+			if (VALA_IS_CREATION_METHOD (_tmp981_)) {
+				ValaTypeSymbol* _tmp982_;
+				ValaTypeSymbol* _tmp983_;
+				gboolean _tmp988_ = FALSE;
+				gboolean _tmp989_ = FALSE;
+				gboolean _tmp990_ = FALSE;
+				gboolean _tmp991_ = FALSE;
+				ValaTypeSymbol* _tmp992_;
+				ValaTypeSymbol* _tmp993_;
+				gboolean _tmp995_;
+				gboolean _tmp1000_;
+				gboolean _tmp1007_;
 				gboolean _tmp1011_;
-				gboolean _tmp1015_;
-				ValaTypeSymbol* _tmp1057_;
-				ValaTypeSymbol* _tmp1058_;
-				_tmp986_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
-				_tmp987_ = _tmp986_;
-				if (VALA_IS_CLASS (_tmp987_)) {
-					ValaClass* _tmp988_;
-					ValaClass* _tmp989_;
-					ValaObjectType* _tmp990_;
-					_tmp988_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
-					_tmp989_ = _tmp988_;
-					_tmp990_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp989_);
+				ValaTypeSymbol* _tmp1053_;
+				ValaTypeSymbol* _tmp1054_;
+				_tmp982_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
+				_tmp983_ = _tmp982_;
+				if (VALA_IS_CLASS (_tmp983_)) {
+					ValaClass* _tmp984_;
+					ValaClass* _tmp985_;
+					ValaObjectType* _tmp986_;
+					_tmp984_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
+					_tmp985_ = _tmp984_;
+					_tmp986_ = vala_object_type_new ((ValaObjectTypeSymbol*) _tmp985_);
 					_vala_code_node_unref0 (creturn_type);
-					creturn_type = (ValaDataType*) _tmp990_;
+					creturn_type = (ValaDataType*) _tmp986_;
 				} else {
-					ValaVoidType* _tmp991_;
-					_tmp991_ = vala_void_type_new (NULL);
+					ValaVoidType* _tmp987_;
+					_tmp987_ = vala_void_type_new (NULL);
 					_vala_code_node_unref0 (creturn_type);
-					creturn_type = (ValaDataType*) _tmp991_;
+					creturn_type = (ValaDataType*) _tmp987_;
 				}
-				_tmp996_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
-				_tmp997_ = _tmp996_;
-				if (VALA_IS_CLASS (_tmp997_)) {
+				_tmp992_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
+				_tmp993_ = _tmp992_;
+				if (VALA_IS_CLASS (_tmp993_)) {
+					ValaTypeSymbol* _tmp994_;
+					_tmp994_ = ((ValaCCodeBaseModule*) self)->gobject_type;
+					_tmp991_ = _tmp994_ != NULL;
+				} else {
+					_tmp991_ = FALSE;
+				}
+				_tmp995_ = _tmp991_;
+				if (_tmp995_) {
+					ValaClass* _tmp996_;
+					ValaClass* _tmp997_;
 					ValaTypeSymbol* _tmp998_;
+					gboolean _tmp999_ = FALSE;
+					_tmp996_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
+					_tmp997_ = _tmp996_;
 					_tmp998_ = ((ValaCCodeBaseModule*) self)->gobject_type;
-					_tmp995_ = _tmp998_ != NULL;
+					_tmp999_ = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp997_, _tmp998_);
+					_tmp990_ = _tmp999_;
 				} else {
-					_tmp995_ = FALSE;
+					_tmp990_ = FALSE;
 				}
-				_tmp999_ = _tmp995_;
-				if (_tmp999_) {
-					ValaClass* _tmp1000_;
+				_tmp1000_ = _tmp990_;
+				if (_tmp1000_) {
 					ValaClass* _tmp1001_;
-					ValaTypeSymbol* _tmp1002_;
-					gboolean _tmp1003_ = FALSE;
-					_tmp1000_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
-					_tmp1001_ = _tmp1000_;
-					_tmp1002_ = ((ValaCCodeBaseModule*) self)->gobject_type;
-					_tmp1003_ = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp1001_, _tmp1002_);
-					_tmp994_ = _tmp1003_;
+					ValaClass* _tmp1002_;
+					ValaList* _tmp1003_ = NULL;
+					ValaList* _tmp1004_;
+					gint _tmp1005_;
+					gint _tmp1006_;
+					_tmp1001_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
+					_tmp1002_ = _tmp1001_;
+					_tmp1003_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) _tmp1002_);
+					_tmp1004_ = _tmp1003_;
+					_tmp1005_ = vala_collection_get_size ((ValaCollection*) _tmp1004_);
+					_tmp1006_ = _tmp1005_;
+					_tmp989_ = _tmp1006_ > 0;
+					_vala_iterable_unref0 (_tmp1004_);
 				} else {
-					_tmp994_ = FALSE;
+					_tmp989_ = FALSE;
 				}
-				_tmp1004_ = _tmp994_;
-				if (_tmp1004_) {
-					ValaClass* _tmp1005_;
-					ValaClass* _tmp1006_;
-					ValaList* _tmp1007_ = NULL;
-					ValaList* _tmp1008_;
-					gint _tmp1009_;
-					gint _tmp1010_;
-					_tmp1005_ = vala_ccode_base_module_get_current_class ((ValaCCodeBaseModule*) self);
-					_tmp1006_ = _tmp1005_;
-					_tmp1007_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) _tmp1006_);
-					_tmp1008_ = _tmp1007_;
-					_tmp1009_ = vala_collection_get_size ((ValaCollection*) _tmp1008_);
+				_tmp1007_ = _tmp989_;
+				if (_tmp1007_) {
+					ValaMethod* _tmp1008_;
+					gboolean _tmp1009_;
+					gboolean _tmp1010_;
+					_tmp1008_ = m;
+					_tmp1009_ = vala_creation_method_get_chain_up (VALA_CREATION_METHOD (_tmp1008_));
 					_tmp1010_ = _tmp1009_;
-					_tmp993_ = _tmp1010_ > 0;
-					_vala_iterable_unref0 (_tmp1008_);
+					_tmp988_ = !_tmp1010_;
 				} else {
-					_tmp993_ = FALSE;
+					_tmp988_ = FALSE;
 				}
-				_tmp1011_ = _tmp993_;
+				_tmp1011_ = _tmp988_;
 				if (_tmp1011_) {
-					ValaMethod* _tmp1012_;
-					gboolean _tmp1013_;
-					gboolean _tmp1014_;
-					_tmp1012_ = m;
-					_tmp1013_ = vala_creation_method_get_chain_up (VALA_CREATION_METHOD (_tmp1012_));
-					_tmp1014_ = _tmp1013_;
-					_tmp992_ = !_tmp1014_;
-				} else {
-					_tmp992_ = FALSE;
-				}
-				_tmp1015_ = _tmp992_;
-				if (_tmp1015_) {
-					ValaCCodeIdentifier* _tmp1016_;
-					ValaCCodeIdentifier* _tmp1017_;
-					ValaCCodeIdentifier* _tmp1018_;
-					ValaCCodeIdentifier* _tmp1019_;
-					ValaCCodeBinaryExpression* _tmp1020_;
-					ValaCCodeBinaryExpression* _tmp1021_;
+					ValaCCodeIdentifier* _tmp1012_;
+					ValaCCodeIdentifier* _tmp1013_;
+					ValaCCodeIdentifier* _tmp1014_;
+					ValaCCodeIdentifier* _tmp1015_;
+					ValaCCodeBinaryExpression* _tmp1016_;
+					ValaCCodeBinaryExpression* _tmp1017_;
 					ValaCCodeBinaryExpression* ccond;
+					ValaCCodeFunction* _tmp1018_;
+					ValaCCodeFunction* _tmp1019_;
+					ValaCCodeBinaryExpression* _tmp1020_;
+					ValaCCodeFunction* _tmp1021_;
 					ValaCCodeFunction* _tmp1022_;
-					ValaCCodeFunction* _tmp1023_;
-					ValaCCodeBinaryExpression* _tmp1024_;
-					ValaCCodeFunction* _tmp1025_;
-					ValaCCodeFunction* _tmp1026_;
+					ValaCCodeIdentifier* _tmp1023_;
+					ValaCCodeIdentifier* _tmp1024_;
+					ValaCCodeUnaryExpression* _tmp1025_;
+					ValaCCodeUnaryExpression* _tmp1026_;
 					ValaCCodeIdentifier* _tmp1027_;
 					ValaCCodeIdentifier* _tmp1028_;
-					ValaCCodeUnaryExpression* _tmp1029_;
-					ValaCCodeUnaryExpression* _tmp1030_;
-					ValaCCodeIdentifier* _tmp1031_;
-					ValaCCodeIdentifier* _tmp1032_;
-					ValaCCodeFunctionCall* _tmp1033_;
-					ValaCCodeFunctionCall* _tmp1034_;
+					ValaCCodeFunctionCall* _tmp1029_;
+					ValaCCodeFunctionCall* _tmp1030_;
 					ValaCCodeFunctionCall* cunsetcall;
-					ValaCCodeFunctionCall* _tmp1035_;
-					ValaCCodeIdentifier* _tmp1036_;
-					ValaCCodeIdentifier* _tmp1037_;
-					ValaCCodeMemberAccess* _tmp1038_;
-					ValaCCodeMemberAccess* _tmp1039_;
-					ValaCCodeUnaryExpression* _tmp1040_;
-					ValaCCodeUnaryExpression* _tmp1041_;
+					ValaCCodeFunctionCall* _tmp1031_;
+					ValaCCodeIdentifier* _tmp1032_;
+					ValaCCodeIdentifier* _tmp1033_;
+					ValaCCodeMemberAccess* _tmp1034_;
+					ValaCCodeMemberAccess* _tmp1035_;
+					ValaCCodeUnaryExpression* _tmp1036_;
+					ValaCCodeUnaryExpression* _tmp1037_;
+					ValaCCodeFunction* _tmp1038_;
+					ValaCCodeFunction* _tmp1039_;
+					ValaCCodeFunctionCall* _tmp1040_;
+					ValaCCodeFunction* _tmp1041_;
 					ValaCCodeFunction* _tmp1042_;
-					ValaCCodeFunction* _tmp1043_;
-					ValaCCodeFunctionCall* _tmp1044_;
-					ValaCCodeFunction* _tmp1045_;
-					ValaCCodeFunction* _tmp1046_;
-					ValaCCodeIdentifier* _tmp1047_;
-					ValaCCodeIdentifier* _tmp1048_;
-					ValaCCodeFunctionCall* _tmp1049_;
-					ValaCCodeFunctionCall* _tmp1050_;
+					ValaCCodeIdentifier* _tmp1043_;
+					ValaCCodeIdentifier* _tmp1044_;
+					ValaCCodeFunctionCall* _tmp1045_;
+					ValaCCodeFunctionCall* _tmp1046_;
 					ValaCCodeFunctionCall* cfreeparams;
-					ValaCCodeFunctionCall* _tmp1051_;
-					ValaCCodeIdentifier* _tmp1052_;
-					ValaCCodeIdentifier* _tmp1053_;
-					ValaCCodeFunction* _tmp1054_;
-					ValaCCodeFunction* _tmp1055_;
-					ValaCCodeFunctionCall* _tmp1056_;
-					_tmp1016_ = vala_ccode_identifier_new ("__params_it");
+					ValaCCodeFunctionCall* _tmp1047_;
+					ValaCCodeIdentifier* _tmp1048_;
+					ValaCCodeIdentifier* _tmp1049_;
+					ValaCCodeFunction* _tmp1050_;
+					ValaCCodeFunction* _tmp1051_;
+					ValaCCodeFunctionCall* _tmp1052_;
+					_tmp1012_ = vala_ccode_identifier_new ("__params_it");
+					_tmp1013_ = _tmp1012_;
+					_tmp1014_ = vala_ccode_identifier_new ("__params");
+					_tmp1015_ = _tmp1014_;
+					_tmp1016_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_GREATER_THAN, (ValaCCodeExpression*) _tmp1013_, (ValaCCodeExpression*) _tmp1015_);
 					_tmp1017_ = _tmp1016_;
-					_tmp1018_ = vala_ccode_identifier_new ("__params");
+					_vala_ccode_node_unref0 (_tmp1015_);
+					_vala_ccode_node_unref0 (_tmp1013_);
+					ccond = _tmp1017_;
+					_tmp1018_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
 					_tmp1019_ = _tmp1018_;
-					_tmp1020_ = vala_ccode_binary_expression_new (VALA_CCODE_BINARY_OPERATOR_GREATER_THAN, (ValaCCodeExpression*) _tmp1017_, (ValaCCodeExpression*) _tmp1019_);
-					_tmp1021_ = _tmp1020_;
-					_vala_ccode_node_unref0 (_tmp1019_);
-					_vala_ccode_node_unref0 (_tmp1017_);
-					ccond = _tmp1021_;
-					_tmp1022_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-					_tmp1023_ = _tmp1022_;
-					_tmp1024_ = ccond;
-					vala_ccode_function_open_while (_tmp1023_, (ValaCCodeExpression*) _tmp1024_);
-					_tmp1025_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+					_tmp1020_ = ccond;
+					vala_ccode_function_open_while (_tmp1019_, (ValaCCodeExpression*) _tmp1020_);
+					_tmp1021_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+					_tmp1022_ = _tmp1021_;
+					_tmp1023_ = vala_ccode_identifier_new ("__params_it");
+					_tmp1024_ = _tmp1023_;
+					_tmp1025_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT, (ValaCCodeExpression*) _tmp1024_);
 					_tmp1026_ = _tmp1025_;
-					_tmp1027_ = vala_ccode_identifier_new ("__params_it");
+					vala_ccode_function_add_expression (_tmp1022_, (ValaCCodeExpression*) _tmp1026_);
+					_vala_ccode_node_unref0 (_tmp1026_);
+					_vala_ccode_node_unref0 (_tmp1024_);
+					_tmp1027_ = vala_ccode_identifier_new ("g_value_unset");
 					_tmp1028_ = _tmp1027_;
-					_tmp1029_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT, (ValaCCodeExpression*) _tmp1028_);
+					_tmp1029_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1028_);
 					_tmp1030_ = _tmp1029_;
-					vala_ccode_function_add_expression (_tmp1026_, (ValaCCodeExpression*) _tmp1030_);
-					_vala_ccode_node_unref0 (_tmp1030_);
 					_vala_ccode_node_unref0 (_tmp1028_);
-					_tmp1031_ = vala_ccode_identifier_new ("g_value_unset");
-					_tmp1032_ = _tmp1031_;
-					_tmp1033_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1032_);
-					_tmp1034_ = _tmp1033_;
-					_vala_ccode_node_unref0 (_tmp1032_);
-					cunsetcall = _tmp1034_;
-					_tmp1035_ = cunsetcall;
-					_tmp1036_ = vala_ccode_identifier_new ("__params_it");
+					cunsetcall = _tmp1030_;
+					_tmp1031_ = cunsetcall;
+					_tmp1032_ = vala_ccode_identifier_new ("__params_it");
+					_tmp1033_ = _tmp1032_;
+					_tmp1034_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp1033_, "value");
+					_tmp1035_ = _tmp1034_;
+					_tmp1036_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp1035_);
 					_tmp1037_ = _tmp1036_;
-					_tmp1038_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp1037_, "value");
-					_tmp1039_ = _tmp1038_;
-					_tmp1040_ = vala_ccode_unary_expression_new (VALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (ValaCCodeExpression*) _tmp1039_);
-					_tmp1041_ = _tmp1040_;
-					vala_ccode_function_call_add_argument (_tmp1035_, (ValaCCodeExpression*) _tmp1041_);
-					_vala_ccode_node_unref0 (_tmp1041_);
-					_vala_ccode_node_unref0 (_tmp1039_);
+					vala_ccode_function_call_add_argument (_tmp1031_, (ValaCCodeExpression*) _tmp1037_);
 					_vala_ccode_node_unref0 (_tmp1037_);
-					_tmp1042_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-					_tmp1043_ = _tmp1042_;
-					_tmp1044_ = cunsetcall;
-					vala_ccode_function_add_expression (_tmp1043_, (ValaCCodeExpression*) _tmp1044_);
-					_tmp1045_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+					_vala_ccode_node_unref0 (_tmp1035_);
+					_vala_ccode_node_unref0 (_tmp1033_);
+					_tmp1038_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+					_tmp1039_ = _tmp1038_;
+					_tmp1040_ = cunsetcall;
+					vala_ccode_function_add_expression (_tmp1039_, (ValaCCodeExpression*) _tmp1040_);
+					_tmp1041_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+					_tmp1042_ = _tmp1041_;
+					vala_ccode_function_close (_tmp1042_);
+					_tmp1043_ = vala_ccode_identifier_new ("g_free");
+					_tmp1044_ = _tmp1043_;
+					_tmp1045_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1044_);
 					_tmp1046_ = _tmp1045_;
-					vala_ccode_function_close (_tmp1046_);
-					_tmp1047_ = vala_ccode_identifier_new ("g_free");
-					_tmp1048_ = _tmp1047_;
-					_tmp1049_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1048_);
-					_tmp1050_ = _tmp1049_;
-					_vala_ccode_node_unref0 (_tmp1048_);
-					cfreeparams = _tmp1050_;
-					_tmp1051_ = cfreeparams;
-					_tmp1052_ = vala_ccode_identifier_new ("__params");
-					_tmp1053_ = _tmp1052_;
-					vala_ccode_function_call_add_argument (_tmp1051_, (ValaCCodeExpression*) _tmp1053_);
-					_vala_ccode_node_unref0 (_tmp1053_);
-					_tmp1054_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-					_tmp1055_ = _tmp1054_;
-					_tmp1056_ = cfreeparams;
-					vala_ccode_function_add_expression (_tmp1055_, (ValaCCodeExpression*) _tmp1056_);
+					_vala_ccode_node_unref0 (_tmp1044_);
+					cfreeparams = _tmp1046_;
+					_tmp1047_ = cfreeparams;
+					_tmp1048_ = vala_ccode_identifier_new ("__params");
+					_tmp1049_ = _tmp1048_;
+					vala_ccode_function_call_add_argument (_tmp1047_, (ValaCCodeExpression*) _tmp1049_);
+					_vala_ccode_node_unref0 (_tmp1049_);
+					_tmp1050_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+					_tmp1051_ = _tmp1050_;
+					_tmp1052_ = cfreeparams;
+					vala_ccode_function_add_expression (_tmp1051_, (ValaCCodeExpression*) _tmp1052_);
 					_vala_ccode_node_unref0 (cfreeparams);
 					_vala_ccode_node_unref0 (cunsetcall);
 					_vala_ccode_node_unref0 (ccond);
 				}
-				_tmp1057_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
-				_tmp1058_ = _tmp1057_;
-				if (VALA_IS_CLASS (_tmp1058_)) {
-					ValaCCodeIdentifier* _tmp1059_;
+				_tmp1053_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
+				_tmp1054_ = _tmp1053_;
+				if (VALA_IS_CLASS (_tmp1054_)) {
+					ValaCCodeIdentifier* _tmp1055_;
 					ValaCCodeExpression* cresult;
-					ValaMethod* _tmp1060_;
-					gchar* _tmp1061_ = NULL;
-					gchar* _tmp1062_;
-					gboolean _tmp1063_;
-					ValaCCodeFunction* _tmp1069_;
-					ValaCCodeFunction* _tmp1070_;
-					ValaCCodeExpression* _tmp1071_;
-					_tmp1059_ = vala_ccode_identifier_new ("self");
-					cresult = (ValaCCodeExpression*) _tmp1059_;
-					_tmp1060_ = m;
-					_tmp1061_ = vala_ccode_base_module_get_ccode_type ((ValaCodeNode*) _tmp1060_);
-					_tmp1062_ = _tmp1061_;
-					_tmp1063_ = _tmp1062_ != NULL;
-					_g_free0 (_tmp1062_);
-					if (_tmp1063_) {
-						ValaCCodeExpression* _tmp1064_;
-						ValaMethod* _tmp1065_;
-						gchar* _tmp1066_ = NULL;
-						gchar* _tmp1067_;
-						ValaCCodeCastExpression* _tmp1068_;
-						_tmp1064_ = cresult;
-						_tmp1065_ = m;
-						_tmp1066_ = vala_ccode_base_module_get_ccode_type ((ValaCodeNode*) _tmp1065_);
-						_tmp1067_ = _tmp1066_;
-						_tmp1068_ = vala_ccode_cast_expression_new (_tmp1064_, _tmp1067_);
+					ValaMethod* _tmp1056_;
+					gchar* _tmp1057_ = NULL;
+					gchar* _tmp1058_;
+					gboolean _tmp1059_;
+					ValaCCodeFunction* _tmp1065_;
+					ValaCCodeFunction* _tmp1066_;
+					ValaCCodeExpression* _tmp1067_;
+					_tmp1055_ = vala_ccode_identifier_new ("self");
+					cresult = (ValaCCodeExpression*) _tmp1055_;
+					_tmp1056_ = m;
+					_tmp1057_ = vala_ccode_base_module_get_ccode_type ((ValaCodeNode*) _tmp1056_);
+					_tmp1058_ = _tmp1057_;
+					_tmp1059_ = _tmp1058_ != NULL;
+					_g_free0 (_tmp1058_);
+					if (_tmp1059_) {
+						ValaCCodeExpression* _tmp1060_;
+						ValaMethod* _tmp1061_;
+						gchar* _tmp1062_ = NULL;
+						gchar* _tmp1063_;
+						ValaCCodeCastExpression* _tmp1064_;
+						_tmp1060_ = cresult;
+						_tmp1061_ = m;
+						_tmp1062_ = vala_ccode_base_module_get_ccode_type ((ValaCodeNode*) _tmp1061_);
+						_tmp1063_ = _tmp1062_;
+						_tmp1064_ = vala_ccode_cast_expression_new (_tmp1060_, _tmp1063_);
 						_vala_ccode_node_unref0 (cresult);
-						cresult = (ValaCCodeExpression*) _tmp1068_;
-						_g_free0 (_tmp1067_);
+						cresult = (ValaCCodeExpression*) _tmp1064_;
+						_g_free0 (_tmp1063_);
 					}
-					_tmp1069_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-					_tmp1070_ = _tmp1069_;
-					_tmp1071_ = cresult;
-					vala_ccode_function_add_return (_tmp1070_, _tmp1071_);
+					_tmp1065_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+					_tmp1066_ = _tmp1065_;
+					_tmp1067_ = cresult;
+					vala_ccode_function_add_return (_tmp1066_, _tmp1067_);
 					_vala_ccode_node_unref0 (cresult);
 				}
 			}
-			_tmp1072_ = ((ValaCCodeBaseModule*) self)->cfile;
-			_tmp1073_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp1074_ = _tmp1073_;
-			vala_ccode_file_add_function (_tmp1072_, _tmp1074_);
+			_tmp1068_ = ((ValaCCodeBaseModule*) self)->cfile;
+			_tmp1069_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp1070_ = _tmp1069_;
+			vala_ccode_file_add_function (_tmp1068_, _tmp1070_);
 		}
 	}
-	_tmp1076_ = m;
-	_tmp1077_ = vala_method_get_is_abstract (_tmp1076_);
-	_tmp1078_ = _tmp1077_;
-	if (_tmp1078_) {
-		ValaTypeSymbol* _tmp1079_;
-		ValaTypeSymbol* _tmp1080_;
-		_tmp1079_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
-		_tmp1080_ = _tmp1079_;
-		_tmp1075_ = VALA_IS_CLASS (_tmp1080_);
+	_tmp1072_ = m;
+	_tmp1073_ = vala_method_get_is_abstract (_tmp1072_);
+	_tmp1074_ = _tmp1073_;
+	if (_tmp1074_) {
+		ValaTypeSymbol* _tmp1075_;
+		ValaTypeSymbol* _tmp1076_;
+		_tmp1075_ = vala_ccode_base_module_get_current_type_symbol ((ValaCCodeBaseModule*) self);
+		_tmp1076_ = _tmp1075_;
+		_tmp1071_ = VALA_IS_CLASS (_tmp1076_);
 	} else {
-		_tmp1075_ = FALSE;
+		_tmp1071_ = FALSE;
 	}
-	_tmp1081_ = _tmp1075_;
-	if (_tmp1081_) {
-		ValaCCodeIdentifier* _tmp1082_;
-		ValaCCodeIdentifier* _tmp1083_;
-		ValaCCodeFunctionCall* _tmp1084_;
-		ValaCCodeFunctionCall* _tmp1085_;
+	_tmp1077_ = _tmp1071_;
+	if (_tmp1077_) {
+		ValaCCodeIdentifier* _tmp1078_;
+		ValaCCodeIdentifier* _tmp1079_;
+		ValaCCodeFunctionCall* _tmp1080_;
+		ValaCCodeFunctionCall* _tmp1081_;
 		ValaCCodeFunctionCall* type_from_instance_call;
-		ValaCCodeFunctionCall* _tmp1086_;
-		ValaCCodeIdentifier* _tmp1087_;
-		ValaCCodeIdentifier* _tmp1088_;
-		ValaCCodeIdentifier* _tmp1089_;
-		ValaCCodeIdentifier* _tmp1090_;
-		ValaCCodeFunctionCall* _tmp1091_;
-		ValaCCodeFunctionCall* _tmp1092_;
+		ValaCCodeFunctionCall* _tmp1082_;
+		ValaCCodeIdentifier* _tmp1083_;
+		ValaCCodeIdentifier* _tmp1084_;
+		ValaCCodeIdentifier* _tmp1085_;
+		ValaCCodeIdentifier* _tmp1086_;
+		ValaCCodeFunctionCall* _tmp1087_;
+		ValaCCodeFunctionCall* _tmp1088_;
 		ValaCCodeFunctionCall* type_name_call;
-		ValaCCodeFunctionCall* _tmp1093_;
-		ValaCCodeFunctionCall* _tmp1094_;
-		ValaMethod* _tmp1095_;
-		gchar* _tmp1096_ = NULL;
-		gchar* _tmp1097_;
-		gchar* _tmp1098_ = NULL;
-		gchar* _tmp1099_;
+		ValaCCodeFunctionCall* _tmp1089_;
+		ValaCCodeFunctionCall* _tmp1090_;
+		ValaMethod* _tmp1091_;
+		gchar* _tmp1092_ = NULL;
+		gchar* _tmp1093_;
+		gchar* _tmp1094_ = NULL;
+		gchar* _tmp1095_;
 		gchar* error_string;
-		ValaCCodeIdentifier* _tmp1100_;
-		ValaCCodeIdentifier* _tmp1101_;
-		ValaCCodeFunctionCall* _tmp1102_;
-		ValaCCodeFunctionCall* _tmp1103_;
+		ValaCCodeIdentifier* _tmp1096_;
+		ValaCCodeIdentifier* _tmp1097_;
+		ValaCCodeFunctionCall* _tmp1098_;
+		ValaCCodeFunctionCall* _tmp1099_;
 		ValaCCodeFunctionCall* cerrorcall;
+		ValaCCodeFunctionCall* _tmp1100_;
+		const gchar* _tmp1101_;
+		ValaCCodeConstant* _tmp1102_;
+		ValaCCodeConstant* _tmp1103_;
 		ValaCCodeFunctionCall* _tmp1104_;
-		const gchar* _tmp1105_;
-		ValaCCodeConstant* _tmp1106_;
-		ValaCCodeConstant* _tmp1107_;
+		ValaCCodeFunctionCall* _tmp1105_;
+		ValaCCodeFunction* _tmp1106_;
+		ValaCCodeFunction* _tmp1107_;
 		ValaCCodeFunctionCall* _tmp1108_;
-		ValaCCodeFunctionCall* _tmp1109_;
-		ValaCCodeFunction* _tmp1110_;
+		ValaDataType* _tmp1109_;
+		ValaCCodeFile* _tmp1110_;
 		ValaCCodeFunction* _tmp1111_;
-		ValaCCodeFunctionCall* _tmp1112_;
-		ValaDataType* _tmp1113_;
-		ValaCCodeFile* _tmp1114_;
-		ValaCCodeFunction* _tmp1115_;
-		ValaCCodeFunction* _tmp1116_;
-		_tmp1082_ = vala_ccode_identifier_new ("G_TYPE_FROM_INSTANCE");
-		_tmp1083_ = _tmp1082_;
-		_tmp1084_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1083_);
-		_tmp1085_ = _tmp1084_;
-		_vala_ccode_node_unref0 (_tmp1083_);
-		type_from_instance_call = _tmp1085_;
-		_tmp1086_ = type_from_instance_call;
-		_tmp1087_ = vala_ccode_identifier_new ("self");
+		ValaCCodeFunction* _tmp1112_;
+		_tmp1078_ = vala_ccode_identifier_new ("G_TYPE_FROM_INSTANCE");
+		_tmp1079_ = _tmp1078_;
+		_tmp1080_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1079_);
+		_tmp1081_ = _tmp1080_;
+		_vala_ccode_node_unref0 (_tmp1079_);
+		type_from_instance_call = _tmp1081_;
+		_tmp1082_ = type_from_instance_call;
+		_tmp1083_ = vala_ccode_identifier_new ("self");
+		_tmp1084_ = _tmp1083_;
+		vala_ccode_function_call_add_argument (_tmp1082_, (ValaCCodeExpression*) _tmp1084_);
+		_vala_ccode_node_unref0 (_tmp1084_);
+		_tmp1085_ = vala_ccode_identifier_new ("g_type_name");
+		_tmp1086_ = _tmp1085_;
+		_tmp1087_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1086_);
 		_tmp1088_ = _tmp1087_;
-		vala_ccode_function_call_add_argument (_tmp1086_, (ValaCCodeExpression*) _tmp1088_);
-		_vala_ccode_node_unref0 (_tmp1088_);
-		_tmp1089_ = vala_ccode_identifier_new ("g_type_name");
-		_tmp1090_ = _tmp1089_;
-		_tmp1091_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1090_);
-		_tmp1092_ = _tmp1091_;
-		_vala_ccode_node_unref0 (_tmp1090_);
-		type_name_call = _tmp1092_;
-		_tmp1093_ = type_name_call;
-		_tmp1094_ = type_from_instance_call;
-		vala_ccode_function_call_add_argument (_tmp1093_, (ValaCCodeExpression*) _tmp1094_);
-		_tmp1095_ = m;
-		_tmp1096_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp1095_);
+		_vala_ccode_node_unref0 (_tmp1086_);
+		type_name_call = _tmp1088_;
+		_tmp1089_ = type_name_call;
+		_tmp1090_ = type_from_instance_call;
+		vala_ccode_function_call_add_argument (_tmp1089_, (ValaCCodeExpression*) _tmp1090_);
+		_tmp1091_ = m;
+		_tmp1092_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp1091_);
+		_tmp1093_ = _tmp1092_;
+		_tmp1094_ = g_strdup_printf ("\"Type `%%s' does not implement abstract method `%s'\"", _tmp1093_);
+		_tmp1095_ = _tmp1094_;
+		_g_free0 (_tmp1093_);
+		error_string = _tmp1095_;
+		_tmp1096_ = vala_ccode_identifier_new ("g_critical");
 		_tmp1097_ = _tmp1096_;
-		_tmp1098_ = g_strdup_printf ("\"Type `%%s' does not implement abstract method `%s'\"", _tmp1097_);
+		_tmp1098_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1097_);
 		_tmp1099_ = _tmp1098_;
-		_g_free0 (_tmp1097_);
-		error_string = _tmp1099_;
-		_tmp1100_ = vala_ccode_identifier_new ("g_critical");
-		_tmp1101_ = _tmp1100_;
-		_tmp1102_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1101_);
+		_vala_ccode_node_unref0 (_tmp1097_);
+		cerrorcall = _tmp1099_;
+		_tmp1100_ = cerrorcall;
+		_tmp1101_ = error_string;
+		_tmp1102_ = vala_ccode_constant_new (_tmp1101_);
 		_tmp1103_ = _tmp1102_;
-		_vala_ccode_node_unref0 (_tmp1101_);
-		cerrorcall = _tmp1103_;
+		vala_ccode_function_call_add_argument (_tmp1100_, (ValaCCodeExpression*) _tmp1103_);
+		_vala_ccode_node_unref0 (_tmp1103_);
 		_tmp1104_ = cerrorcall;
-		_tmp1105_ = error_string;
-		_tmp1106_ = vala_ccode_constant_new (_tmp1105_);
+		_tmp1105_ = type_name_call;
+		vala_ccode_function_call_add_argument (_tmp1104_, (ValaCCodeExpression*) _tmp1105_);
+		_tmp1106_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
 		_tmp1107_ = _tmp1106_;
-		vala_ccode_function_call_add_argument (_tmp1104_, (ValaCCodeExpression*) _tmp1107_);
-		_vala_ccode_node_unref0 (_tmp1107_);
 		_tmp1108_ = cerrorcall;
-		_tmp1109_ = type_name_call;
-		vala_ccode_function_call_add_argument (_tmp1108_, (ValaCCodeExpression*) _tmp1109_);
-		_tmp1110_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-		_tmp1111_ = _tmp1110_;
-		_tmp1112_ = cerrorcall;
-		vala_ccode_function_add_expression (_tmp1111_, (ValaCCodeExpression*) _tmp1112_);
-		_tmp1113_ = creturn_type;
-		vala_ccode_base_module_return_default_value ((ValaCCodeBaseModule*) self, _tmp1113_);
-		_tmp1114_ = ((ValaCCodeBaseModule*) self)->cfile;
-		_tmp1115_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-		_tmp1116_ = _tmp1115_;
-		vala_ccode_file_add_function (_tmp1114_, _tmp1116_);
+		vala_ccode_function_add_expression (_tmp1107_, (ValaCCodeExpression*) _tmp1108_);
+		_tmp1109_ = creturn_type;
+		vala_ccode_base_module_return_default_value ((ValaCCodeBaseModule*) self, _tmp1109_);
+		_tmp1110_ = ((ValaCCodeBaseModule*) self)->cfile;
+		_tmp1111_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp1112_ = _tmp1111_;
+		vala_ccode_file_add_function (_tmp1110_, _tmp1112_);
 		_vala_ccode_node_unref0 (cerrorcall);
 		_g_free0 (error_string);
 		_vala_ccode_node_unref0 (type_name_call);
 		_vala_ccode_node_unref0 (type_from_instance_call);
 	}
 	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
-	_tmp1120_ = m;
-	_tmp1121_ = vala_method_get_is_abstract (_tmp1120_);
-	_tmp1122_ = _tmp1121_;
-	if (_tmp1122_) {
-		_tmp1119_ = TRUE;
+	_tmp1116_ = m;
+	_tmp1117_ = vala_method_get_is_abstract (_tmp1116_);
+	_tmp1118_ = _tmp1117_;
+	if (_tmp1118_) {
+		_tmp1115_ = TRUE;
 	} else {
+		ValaMethod* _tmp1119_;
+		gboolean _tmp1120_;
+		gboolean _tmp1121_;
+		_tmp1119_ = m;
+		_tmp1120_ = vala_method_get_is_virtual (_tmp1119_);
+		_tmp1121_ = _tmp1120_;
+		_tmp1115_ = _tmp1121_;
+	}
+	_tmp1122_ = _tmp1115_;
+	if (_tmp1122_) {
 		ValaMethod* _tmp1123_;
 		gboolean _tmp1124_;
 		gboolean _tmp1125_;
 		_tmp1123_ = m;
-		_tmp1124_ = vala_method_get_is_virtual (_tmp1123_);
+		_tmp1124_ = vala_method_get_coroutine (_tmp1123_);
 		_tmp1125_ = _tmp1124_;
-		_tmp1119_ = _tmp1125_;
+		_tmp1114_ = !_tmp1125_;
+	} else {
+		_tmp1114_ = FALSE;
 	}
-	_tmp1126_ = _tmp1119_;
+	_tmp1126_ = _tmp1114_;
 	if (_tmp1126_) {
 		ValaMethod* _tmp1127_;
-		gboolean _tmp1128_;
-		gboolean _tmp1129_;
+		ValaSignal* _tmp1128_;
+		ValaSignal* _tmp1129_;
 		_tmp1127_ = m;
-		_tmp1128_ = vala_method_get_coroutine (_tmp1127_);
+		_tmp1128_ = vala_method_get_signal_reference (_tmp1127_);
 		_tmp1129_ = _tmp1128_;
-		_tmp1118_ = !_tmp1129_;
+		_tmp1113_ = _tmp1129_ == NULL;
 	} else {
-		_tmp1118_ = FALSE;
+		_tmp1113_ = FALSE;
 	}
-	_tmp1130_ = _tmp1118_;
+	_tmp1130_ = _tmp1113_;
 	if (_tmp1130_) {
-		ValaMethod* _tmp1131_;
-		ValaSignal* _tmp1132_;
-		ValaSignal* _tmp1133_;
-		_tmp1131_ = m;
-		_tmp1132_ = vala_method_get_signal_reference (_tmp1131_);
-		_tmp1133_ = _tmp1132_;
-		_tmp1117_ = _tmp1133_ == NULL;
-	} else {
-		_tmp1117_ = FALSE;
-	}
-	_tmp1134_ = _tmp1117_;
-	if (_tmp1134_) {
+		GHashFunc _tmp1131_;
+		GEqualFunc _tmp1132_;
+		GEqualFunc _tmp1133_;
+		ValaHashMap* _tmp1134_;
 		GHashFunc _tmp1135_;
 		GEqualFunc _tmp1136_;
 		GEqualFunc _tmp1137_;
 		ValaHashMap* _tmp1138_;
-		GHashFunc _tmp1139_;
-		GEqualFunc _tmp1140_;
-		GEqualFunc _tmp1141_;
-		ValaHashMap* _tmp1142_;
 		ValaHashMap* carg_map;
-		ValaMethod* _tmp1143_;
-		ValaDataType* _tmp1144_;
-		ValaHashMap* _tmp1145_;
-		ValaHashMap* _tmp1146_;
+		ValaMethod* _tmp1139_;
+		ValaDataType* _tmp1140_;
+		ValaHashMap* _tmp1141_;
+		ValaHashMap* _tmp1142_;
+		_tmp1131_ = g_direct_hash;
+		_tmp1132_ = g_direct_equal;
+		_tmp1133_ = g_direct_equal;
+		_tmp1134_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, vala_ccode_node_unref, _tmp1131_, _tmp1132_, _tmp1133_);
+		_vala_map_unref0 (cparam_map);
+		cparam_map = _tmp1134_;
 		_tmp1135_ = g_direct_hash;
 		_tmp1136_ = g_direct_equal;
 		_tmp1137_ = g_direct_equal;
-		_tmp1138_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_PARAMETER, (GBoxedCopyFunc) vala_ccode_node_ref, vala_ccode_node_unref, _tmp1135_, _tmp1136_, _tmp1137_);
-		_vala_map_unref0 (cparam_map);
-		cparam_map = _tmp1138_;
-		_tmp1139_ = g_direct_hash;
-		_tmp1140_ = g_direct_equal;
-		_tmp1141_ = g_direct_equal;
-		_tmp1142_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, vala_ccode_node_unref, _tmp1139_, _tmp1140_, _tmp1141_);
-		carg_map = _tmp1142_;
-		_tmp1143_ = m;
-		_tmp1144_ = creturn_type;
-		_tmp1145_ = cparam_map;
-		_tmp1146_ = carg_map;
-		vala_ccode_method_module_generate_vfunc (self, _tmp1143_, _tmp1144_, (ValaMap*) _tmp1145_, (ValaMap*) _tmp1146_, "", 3);
+		_tmp1138_ = vala_hash_map_new (G_TYPE_INT, NULL, NULL, VALA_TYPE_CCODE_EXPRESSION, (GBoxedCopyFunc) vala_ccode_node_ref, vala_ccode_node_unref, _tmp1135_, _tmp1136_, _tmp1137_);
+		carg_map = _tmp1138_;
+		_tmp1139_ = m;
+		_tmp1140_ = creturn_type;
+		_tmp1141_ = cparam_map;
+		_tmp1142_ = carg_map;
+		vala_ccode_method_module_generate_vfunc (self, _tmp1139_, _tmp1140_, (ValaMap*) _tmp1141_, (ValaMap*) _tmp1142_, "", 3);
 		_vala_map_unref0 (carg_map);
 	}
-	_tmp1147_ = m;
-	_tmp1148_ = vala_method_get_entry_point (_tmp1147_);
-	_tmp1149_ = _tmp1148_;
-	if (_tmp1149_) {
-		ValaCCodeFunction* _tmp1150_;
+	_tmp1143_ = m;
+	_tmp1144_ = vala_method_get_entry_point (_tmp1143_);
+	_tmp1145_ = _tmp1144_;
+	if (_tmp1145_) {
+		ValaCCodeFunction* _tmp1146_;
 		ValaCCodeFunction* cmain;
+		ValaCCodeFunction* _tmp1147_;
+		ValaCCodeFunction* _tmp1148_;
+		ValaCCodeLineDirective* _tmp1149_;
+		ValaCCodeLineDirective* _tmp1150_;
 		ValaCCodeFunction* _tmp1151_;
-		ValaCCodeFunction* _tmp1152_;
-		ValaCCodeLineDirective* _tmp1153_;
-		ValaCCodeLineDirective* _tmp1154_;
-		ValaCCodeFunction* _tmp1155_;
+		ValaCCodeParameter* _tmp1152_;
+		ValaCCodeParameter* _tmp1153_;
+		ValaCCodeFunction* _tmp1154_;
+		ValaCCodeParameter* _tmp1155_;
 		ValaCCodeParameter* _tmp1156_;
-		ValaCCodeParameter* _tmp1157_;
-		ValaCCodeFunction* _tmp1158_;
-		ValaCCodeParameter* _tmp1159_;
-		ValaCCodeParameter* _tmp1160_;
-		ValaCCodeFunction* _tmp1161_;
-		ValaCodeContext* _tmp1162_;
-		ValaCodeContext* _tmp1163_;
-		ValaProfile _tmp1164_;
-		ValaProfile _tmp1165_;
-		ValaCCodeFunction* _tmp1208_;
-		const gchar* _tmp1209_;
-		const gchar* _tmp1210_;
-		ValaCCodeIdentifier* _tmp1211_;
-		ValaCCodeIdentifier* _tmp1212_;
-		ValaCCodeFunctionCall* _tmp1213_;
-		ValaCCodeFunctionCall* _tmp1214_;
+		ValaCCodeFunction* _tmp1157_;
+		ValaCodeContext* _tmp1158_;
+		ValaCodeContext* _tmp1159_;
+		ValaProfile _tmp1160_;
+		ValaProfile _tmp1161_;
+		ValaCCodeFunction* _tmp1204_;
+		const gchar* _tmp1205_;
+		const gchar* _tmp1206_;
+		ValaCCodeIdentifier* _tmp1207_;
+		ValaCCodeIdentifier* _tmp1208_;
+		ValaCCodeFunctionCall* _tmp1209_;
+		ValaCCodeFunctionCall* _tmp1210_;
 		ValaCCodeFunctionCall* main_call;
-		ValaMethod* _tmp1215_;
-		ValaList* _tmp1216_ = NULL;
-		ValaList* _tmp1217_;
-		gint _tmp1218_;
-		gint _tmp1219_;
-		gboolean _tmp1220_;
-		ValaMethod* _tmp1227_;
-		ValaDataType* _tmp1228_;
-		ValaDataType* _tmp1229_;
-		ValaCCodeFile* _tmp1240_;
-		ValaCCodeFunction* _tmp1241_;
-		_tmp1150_ = vala_ccode_function_new ("main", "int");
-		cmain = _tmp1150_;
+		ValaMethod* _tmp1211_;
+		ValaList* _tmp1212_ = NULL;
+		ValaList* _tmp1213_;
+		gint _tmp1214_;
+		gint _tmp1215_;
+		gboolean _tmp1216_;
+		ValaMethod* _tmp1223_;
+		ValaDataType* _tmp1224_;
+		ValaDataType* _tmp1225_;
+		ValaCCodeFile* _tmp1236_;
+		ValaCCodeFunction* _tmp1237_;
+		_tmp1146_ = vala_ccode_function_new ("main", "int");
+		cmain = _tmp1146_;
+		_tmp1147_ = cmain;
+		_tmp1148_ = function;
+		_tmp1149_ = vala_ccode_node_get_line ((ValaCCodeNode*) _tmp1148_);
+		_tmp1150_ = _tmp1149_;
+		vala_ccode_node_set_line ((ValaCCodeNode*) _tmp1147_, _tmp1150_);
 		_tmp1151_ = cmain;
-		_tmp1152_ = function;
-		_tmp1153_ = vala_ccode_node_get_line ((ValaCCodeNode*) _tmp1152_);
-		_tmp1154_ = _tmp1153_;
-		vala_ccode_node_set_line ((ValaCCodeNode*) _tmp1151_, _tmp1154_);
-		_tmp1155_ = cmain;
-		_tmp1156_ = vala_ccode_parameter_new ("argc", "int");
-		_tmp1157_ = _tmp1156_;
-		vala_ccode_function_add_parameter (_tmp1155_, _tmp1157_);
-		_vala_ccode_node_unref0 (_tmp1157_);
-		_tmp1158_ = cmain;
-		_tmp1159_ = vala_ccode_parameter_new ("argv", "char **");
-		_tmp1160_ = _tmp1159_;
-		vala_ccode_function_add_parameter (_tmp1158_, _tmp1160_);
-		_vala_ccode_node_unref0 (_tmp1160_);
-		_tmp1161_ = cmain;
-		vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp1161_);
-		_tmp1162_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
-		_tmp1163_ = _tmp1162_;
-		_tmp1164_ = vala_code_context_get_profile (_tmp1163_);
-		_tmp1165_ = _tmp1164_;
-		if (_tmp1165_ == VALA_PROFILE_GOBJECT) {
-			ValaCodeContext* _tmp1166_;
-			ValaCodeContext* _tmp1167_;
-			gboolean _tmp1168_;
-			gboolean _tmp1169_;
-			ValaCodeContext* _tmp1184_;
-			ValaCodeContext* _tmp1185_;
-			gboolean _tmp1186_;
-			gboolean _tmp1187_;
-			ValaCCodeFunction* _tmp1202_;
-			ValaCCodeFunction* _tmp1203_;
-			ValaCCodeIdentifier* _tmp1204_;
-			ValaCCodeIdentifier* _tmp1205_;
-			ValaCCodeFunctionCall* _tmp1206_;
-			ValaCCodeFunctionCall* _tmp1207_;
-			_tmp1166_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
-			_tmp1167_ = _tmp1166_;
-			_tmp1168_ = vala_code_context_get_mem_profiler (_tmp1167_);
-			_tmp1169_ = _tmp1168_;
-			if (_tmp1169_) {
-				ValaCCodeIdentifier* _tmp1170_;
-				ValaCCodeIdentifier* _tmp1171_;
-				ValaCCodeFunctionCall* _tmp1172_;
-				ValaCCodeFunctionCall* _tmp1173_;
+		_tmp1152_ = vala_ccode_parameter_new ("argc", "int");
+		_tmp1153_ = _tmp1152_;
+		vala_ccode_function_add_parameter (_tmp1151_, _tmp1153_);
+		_vala_ccode_node_unref0 (_tmp1153_);
+		_tmp1154_ = cmain;
+		_tmp1155_ = vala_ccode_parameter_new ("argv", "char **");
+		_tmp1156_ = _tmp1155_;
+		vala_ccode_function_add_parameter (_tmp1154_, _tmp1156_);
+		_vala_ccode_node_unref0 (_tmp1156_);
+		_tmp1157_ = cmain;
+		vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp1157_);
+		_tmp1158_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
+		_tmp1159_ = _tmp1158_;
+		_tmp1160_ = vala_code_context_get_profile (_tmp1159_);
+		_tmp1161_ = _tmp1160_;
+		if (_tmp1161_ == VALA_PROFILE_GOBJECT) {
+			ValaCodeContext* _tmp1162_;
+			ValaCodeContext* _tmp1163_;
+			gboolean _tmp1164_;
+			gboolean _tmp1165_;
+			ValaCodeContext* _tmp1180_;
+			ValaCodeContext* _tmp1181_;
+			gboolean _tmp1182_;
+			gboolean _tmp1183_;
+			ValaCCodeFunction* _tmp1198_;
+			ValaCCodeFunction* _tmp1199_;
+			ValaCCodeIdentifier* _tmp1200_;
+			ValaCCodeIdentifier* _tmp1201_;
+			ValaCCodeFunctionCall* _tmp1202_;
+			ValaCCodeFunctionCall* _tmp1203_;
+			_tmp1162_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
+			_tmp1163_ = _tmp1162_;
+			_tmp1164_ = vala_code_context_get_mem_profiler (_tmp1163_);
+			_tmp1165_ = _tmp1164_;
+			if (_tmp1165_) {
+				ValaCCodeIdentifier* _tmp1166_;
+				ValaCCodeIdentifier* _tmp1167_;
+				ValaCCodeFunctionCall* _tmp1168_;
+				ValaCCodeFunctionCall* _tmp1169_;
 				ValaCCodeFunctionCall* mem_profiler_init_call;
+				ValaCCodeFunctionCall* _tmp1170_;
+				ValaCCodeFunction* _tmp1171_;
+				ValaCCodeLineDirective* _tmp1172_;
+				ValaCCodeLineDirective* _tmp1173_;
 				ValaCCodeFunctionCall* _tmp1174_;
-				ValaCCodeFunction* _tmp1175_;
-				ValaCCodeLineDirective* _tmp1176_;
-				ValaCCodeLineDirective* _tmp1177_;
-				ValaCCodeFunctionCall* _tmp1178_;
-				ValaCCodeConstant* _tmp1179_;
-				ValaCCodeConstant* _tmp1180_;
-				ValaCCodeFunction* _tmp1181_;
-				ValaCCodeFunction* _tmp1182_;
-				ValaCCodeFunctionCall* _tmp1183_;
-				_tmp1170_ = vala_ccode_identifier_new ("g_mem_set_vtable");
-				_tmp1171_ = _tmp1170_;
-				_tmp1172_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1171_);
+				ValaCCodeConstant* _tmp1175_;
+				ValaCCodeConstant* _tmp1176_;
+				ValaCCodeFunction* _tmp1177_;
+				ValaCCodeFunction* _tmp1178_;
+				ValaCCodeFunctionCall* _tmp1179_;
+				_tmp1166_ = vala_ccode_identifier_new ("g_mem_set_vtable");
+				_tmp1167_ = _tmp1166_;
+				_tmp1168_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1167_);
+				_tmp1169_ = _tmp1168_;
+				_vala_ccode_node_unref0 (_tmp1167_);
+				mem_profiler_init_call = _tmp1169_;
+				_tmp1170_ = mem_profiler_init_call;
+				_tmp1171_ = cmain;
+				_tmp1172_ = vala_ccode_node_get_line ((ValaCCodeNode*) _tmp1171_);
 				_tmp1173_ = _tmp1172_;
-				_vala_ccode_node_unref0 (_tmp1171_);
-				mem_profiler_init_call = _tmp1173_;
+				vala_ccode_node_set_line ((ValaCCodeNode*) _tmp1170_, _tmp1173_);
 				_tmp1174_ = mem_profiler_init_call;
-				_tmp1175_ = cmain;
-				_tmp1176_ = vala_ccode_node_get_line ((ValaCCodeNode*) _tmp1175_);
-				_tmp1177_ = _tmp1176_;
-				vala_ccode_node_set_line ((ValaCCodeNode*) _tmp1174_, _tmp1177_);
-				_tmp1178_ = mem_profiler_init_call;
-				_tmp1179_ = vala_ccode_constant_new ("glib_mem_profiler_table");
-				_tmp1180_ = _tmp1179_;
-				vala_ccode_function_call_add_argument (_tmp1178_, (ValaCCodeExpression*) _tmp1180_);
-				_vala_ccode_node_unref0 (_tmp1180_);
-				_tmp1181_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-				_tmp1182_ = _tmp1181_;
-				_tmp1183_ = mem_profiler_init_call;
-				vala_ccode_function_add_expression (_tmp1182_, (ValaCCodeExpression*) _tmp1183_);
+				_tmp1175_ = vala_ccode_constant_new ("glib_mem_profiler_table");
+				_tmp1176_ = _tmp1175_;
+				vala_ccode_function_call_add_argument (_tmp1174_, (ValaCCodeExpression*) _tmp1176_);
+				_vala_ccode_node_unref0 (_tmp1176_);
+				_tmp1177_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+				_tmp1178_ = _tmp1177_;
+				_tmp1179_ = mem_profiler_init_call;
+				vala_ccode_function_add_expression (_tmp1178_, (ValaCCodeExpression*) _tmp1179_);
 				_vala_ccode_node_unref0 (mem_profiler_init_call);
 			}
-			_tmp1184_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
-			_tmp1185_ = _tmp1184_;
-			_tmp1186_ = vala_code_context_get_thread (_tmp1185_);
-			_tmp1187_ = _tmp1186_;
-			if (_tmp1187_) {
-				ValaCCodeIdentifier* _tmp1188_;
-				ValaCCodeIdentifier* _tmp1189_;
-				ValaCCodeFunctionCall* _tmp1190_;
-				ValaCCodeFunctionCall* _tmp1191_;
+			_tmp1180_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
+			_tmp1181_ = _tmp1180_;
+			_tmp1182_ = vala_code_context_get_thread (_tmp1181_);
+			_tmp1183_ = _tmp1182_;
+			if (_tmp1183_) {
+				ValaCCodeIdentifier* _tmp1184_;
+				ValaCCodeIdentifier* _tmp1185_;
+				ValaCCodeFunctionCall* _tmp1186_;
+				ValaCCodeFunctionCall* _tmp1187_;
 				ValaCCodeFunctionCall* thread_init_call;
+				ValaCCodeFunctionCall* _tmp1188_;
+				ValaCCodeFunction* _tmp1189_;
+				ValaCCodeLineDirective* _tmp1190_;
+				ValaCCodeLineDirective* _tmp1191_;
 				ValaCCodeFunctionCall* _tmp1192_;
-				ValaCCodeFunction* _tmp1193_;
-				ValaCCodeLineDirective* _tmp1194_;
-				ValaCCodeLineDirective* _tmp1195_;
-				ValaCCodeFunctionCall* _tmp1196_;
-				ValaCCodeConstant* _tmp1197_;
-				ValaCCodeConstant* _tmp1198_;
-				ValaCCodeFunction* _tmp1199_;
-				ValaCCodeFunction* _tmp1200_;
-				ValaCCodeFunctionCall* _tmp1201_;
-				_tmp1188_ = vala_ccode_identifier_new ("g_thread_init");
-				_tmp1189_ = _tmp1188_;
-				_tmp1190_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1189_);
+				ValaCCodeConstant* _tmp1193_;
+				ValaCCodeConstant* _tmp1194_;
+				ValaCCodeFunction* _tmp1195_;
+				ValaCCodeFunction* _tmp1196_;
+				ValaCCodeFunctionCall* _tmp1197_;
+				_tmp1184_ = vala_ccode_identifier_new ("g_thread_init");
+				_tmp1185_ = _tmp1184_;
+				_tmp1186_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1185_);
+				_tmp1187_ = _tmp1186_;
+				_vala_ccode_node_unref0 (_tmp1185_);
+				thread_init_call = _tmp1187_;
+				_tmp1188_ = thread_init_call;
+				_tmp1189_ = cmain;
+				_tmp1190_ = vala_ccode_node_get_line ((ValaCCodeNode*) _tmp1189_);
 				_tmp1191_ = _tmp1190_;
-				_vala_ccode_node_unref0 (_tmp1189_);
-				thread_init_call = _tmp1191_;
+				vala_ccode_node_set_line ((ValaCCodeNode*) _tmp1188_, _tmp1191_);
 				_tmp1192_ = thread_init_call;
-				_tmp1193_ = cmain;
-				_tmp1194_ = vala_ccode_node_get_line ((ValaCCodeNode*) _tmp1193_);
-				_tmp1195_ = _tmp1194_;
-				vala_ccode_node_set_line ((ValaCCodeNode*) _tmp1192_, _tmp1195_);
-				_tmp1196_ = thread_init_call;
-				_tmp1197_ = vala_ccode_constant_new ("NULL");
-				_tmp1198_ = _tmp1197_;
-				vala_ccode_function_call_add_argument (_tmp1196_, (ValaCCodeExpression*) _tmp1198_);
-				_vala_ccode_node_unref0 (_tmp1198_);
-				_tmp1199_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-				_tmp1200_ = _tmp1199_;
-				_tmp1201_ = thread_init_call;
-				vala_ccode_function_add_expression (_tmp1200_, (ValaCCodeExpression*) _tmp1201_);
+				_tmp1193_ = vala_ccode_constant_new ("NULL");
+				_tmp1194_ = _tmp1193_;
+				vala_ccode_function_call_add_argument (_tmp1192_, (ValaCCodeExpression*) _tmp1194_);
+				_vala_ccode_node_unref0 (_tmp1194_);
+				_tmp1195_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+				_tmp1196_ = _tmp1195_;
+				_tmp1197_ = thread_init_call;
+				vala_ccode_function_add_expression (_tmp1196_, (ValaCCodeExpression*) _tmp1197_);
 				_vala_ccode_node_unref0 (thread_init_call);
 			}
-			_tmp1202_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp1198_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp1199_ = _tmp1198_;
+			_tmp1200_ = vala_ccode_identifier_new ("g_type_init");
+			_tmp1201_ = _tmp1200_;
+			_tmp1202_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1201_);
 			_tmp1203_ = _tmp1202_;
-			_tmp1204_ = vala_ccode_identifier_new ("g_type_init");
-			_tmp1205_ = _tmp1204_;
-			_tmp1206_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1205_);
-			_tmp1207_ = _tmp1206_;
-			vala_ccode_function_add_expression (_tmp1203_, (ValaCCodeExpression*) _tmp1207_);
-			_vala_ccode_node_unref0 (_tmp1207_);
-			_vala_ccode_node_unref0 (_tmp1205_);
+			vala_ccode_function_add_expression (_tmp1199_, (ValaCCodeExpression*) _tmp1203_);
+			_vala_ccode_node_unref0 (_tmp1203_);
+			_vala_ccode_node_unref0 (_tmp1201_);
 		}
-		_tmp1208_ = function;
-		_tmp1209_ = vala_ccode_function_get_name (_tmp1208_);
+		_tmp1204_ = function;
+		_tmp1205_ = vala_ccode_function_get_name (_tmp1204_);
+		_tmp1206_ = _tmp1205_;
+		_tmp1207_ = vala_ccode_identifier_new (_tmp1206_);
+		_tmp1208_ = _tmp1207_;
+		_tmp1209_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1208_);
 		_tmp1210_ = _tmp1209_;
-		_tmp1211_ = vala_ccode_identifier_new (_tmp1210_);
-		_tmp1212_ = _tmp1211_;
-		_tmp1213_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp1212_);
-		_tmp1214_ = _tmp1213_;
-		_vala_ccode_node_unref0 (_tmp1212_);
-		main_call = _tmp1214_;
-		_tmp1215_ = m;
-		_tmp1216_ = vala_method_get_parameters (_tmp1215_);
-		_tmp1217_ = _tmp1216_;
-		_tmp1218_ = vala_collection_get_size ((ValaCollection*) _tmp1217_);
-		_tmp1219_ = _tmp1218_;
-		_tmp1220_ = _tmp1219_ == 1;
-		_vala_iterable_unref0 (_tmp1217_);
-		if (_tmp1220_) {
-			ValaCCodeFunctionCall* _tmp1221_;
+		_vala_ccode_node_unref0 (_tmp1208_);
+		main_call = _tmp1210_;
+		_tmp1211_ = m;
+		_tmp1212_ = vala_method_get_parameters (_tmp1211_);
+		_tmp1213_ = _tmp1212_;
+		_tmp1214_ = vala_collection_get_size ((ValaCollection*) _tmp1213_);
+		_tmp1215_ = _tmp1214_;
+		_tmp1216_ = _tmp1215_ == 1;
+		_vala_iterable_unref0 (_tmp1213_);
+		if (_tmp1216_) {
+			ValaCCodeFunctionCall* _tmp1217_;
+			ValaCCodeIdentifier* _tmp1218_;
+			ValaCCodeIdentifier* _tmp1219_;
+			ValaCCodeFunctionCall* _tmp1220_;
+			ValaCCodeIdentifier* _tmp1221_;
 			ValaCCodeIdentifier* _tmp1222_;
-			ValaCCodeIdentifier* _tmp1223_;
-			ValaCCodeFunctionCall* _tmp1224_;
-			ValaCCodeIdentifier* _tmp1225_;
-			ValaCCodeIdentifier* _tmp1226_;
-			_tmp1221_ = main_call;
-			_tmp1222_ = vala_ccode_identifier_new ("argv");
-			_tmp1223_ = _tmp1222_;
-			vala_ccode_function_call_add_argument (_tmp1221_, (ValaCCodeExpression*) _tmp1223_);
-			_vala_ccode_node_unref0 (_tmp1223_);
-			_tmp1224_ = main_call;
-			_tmp1225_ = vala_ccode_identifier_new ("argc");
-			_tmp1226_ = _tmp1225_;
-			vala_ccode_function_call_add_argument (_tmp1224_, (ValaCCodeExpression*) _tmp1226_);
-			_vala_ccode_node_unref0 (_tmp1226_);
+			_tmp1217_ = main_call;
+			_tmp1218_ = vala_ccode_identifier_new ("argv");
+			_tmp1219_ = _tmp1218_;
+			vala_ccode_function_call_add_argument (_tmp1217_, (ValaCCodeExpression*) _tmp1219_);
+			_vala_ccode_node_unref0 (_tmp1219_);
+			_tmp1220_ = main_call;
+			_tmp1221_ = vala_ccode_identifier_new ("argc");
+			_tmp1222_ = _tmp1221_;
+			vala_ccode_function_call_add_argument (_tmp1220_, (ValaCCodeExpression*) _tmp1222_);
+			_vala_ccode_node_unref0 (_tmp1222_);
 		}
-		_tmp1227_ = m;
-		_tmp1228_ = vala_method_get_return_type (_tmp1227_);
-		_tmp1229_ = _tmp1228_;
-		if (VALA_IS_VOID_TYPE (_tmp1229_)) {
+		_tmp1223_ = m;
+		_tmp1224_ = vala_method_get_return_type (_tmp1223_);
+		_tmp1225_ = _tmp1224_;
+		if (VALA_IS_VOID_TYPE (_tmp1225_)) {
+			ValaCCodeFunction* _tmp1226_;
+			ValaCCodeFunction* _tmp1227_;
+			ValaCCodeFunctionCall* _tmp1228_;
+			ValaCCodeFunction* _tmp1229_;
 			ValaCCodeFunction* _tmp1230_;
-			ValaCCodeFunction* _tmp1231_;
-			ValaCCodeFunctionCall* _tmp1232_;
+			ValaCCodeConstant* _tmp1231_;
+			ValaCCodeConstant* _tmp1232_;
+			_tmp1226_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp1227_ = _tmp1226_;
+			_tmp1228_ = main_call;
+			vala_ccode_function_add_expression (_tmp1227_, (ValaCCodeExpression*) _tmp1228_);
+			_tmp1229_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp1230_ = _tmp1229_;
+			_tmp1231_ = vala_ccode_constant_new ("0");
+			_tmp1232_ = _tmp1231_;
+			vala_ccode_function_add_return (_tmp1230_, (ValaCCodeExpression*) _tmp1232_);
+			_vala_ccode_node_unref0 (_tmp1232_);
+		} else {
 			ValaCCodeFunction* _tmp1233_;
 			ValaCCodeFunction* _tmp1234_;
-			ValaCCodeConstant* _tmp1235_;
-			ValaCCodeConstant* _tmp1236_;
-			_tmp1230_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp1231_ = _tmp1230_;
-			_tmp1232_ = main_call;
-			vala_ccode_function_add_expression (_tmp1231_, (ValaCCodeExpression*) _tmp1232_);
+			ValaCCodeFunctionCall* _tmp1235_;
 			_tmp1233_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
 			_tmp1234_ = _tmp1233_;
-			_tmp1235_ = vala_ccode_constant_new ("0");
-			_tmp1236_ = _tmp1235_;
-			vala_ccode_function_add_return (_tmp1234_, (ValaCCodeExpression*) _tmp1236_);
-			_vala_ccode_node_unref0 (_tmp1236_);
-		} else {
-			ValaCCodeFunction* _tmp1237_;
-			ValaCCodeFunction* _tmp1238_;
-			ValaCCodeFunctionCall* _tmp1239_;
-			_tmp1237_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp1238_ = _tmp1237_;
-			_tmp1239_ = main_call;
-			vala_ccode_function_add_return (_tmp1238_, (ValaCCodeExpression*) _tmp1239_);
+			_tmp1235_ = main_call;
+			vala_ccode_function_add_return (_tmp1234_, (ValaCCodeExpression*) _tmp1235_);
 		}
 		vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
-		_tmp1240_ = ((ValaCCodeBaseModule*) self)->cfile;
-		_tmp1241_ = cmain;
-		vala_ccode_file_add_function (_tmp1240_, _tmp1241_);
+		_tmp1236_ = ((ValaCCodeBaseModule*) self)->cfile;
+		_tmp1237_ = cmain;
+		vala_ccode_file_add_function (_tmp1236_, _tmp1237_);
 		_vala_ccode_node_unref0 (main_call);
 		_vala_ccode_node_unref0 (cmain);
 	}
@@ -6703,22 +6695,32 @@ void vala_ccode_method_module_generate_vfunc (ValaCCodeMethodModule* self, ValaM
 	ValaCCodeFunctionCall* _tmp86_;
 	gint _tmp87_;
 	ValaCCodeFunction* _tmp88_;
-	ValaMethod* _tmp89_;
-	ValaDataType* _tmp90_;
-	ValaMethod* _tmp91_;
-	ValaSymbol* _tmp92_;
-	ValaSymbol* _tmp93_;
-	gboolean _tmp108_ = FALSE;
-	ValaDataType* _tmp109_;
-	gboolean _tmp112_;
-	ValaMethod* _tmp140_;
-	ValaList* _tmp141_ = NULL;
-	ValaList* _tmp142_;
-	gint _tmp143_;
-	gint _tmp144_;
-	gboolean _tmp145_;
-	ValaCCodeFile* _tmp163_;
-	ValaCCodeFunction* _tmp164_;
+	gboolean _tmp89_ = FALSE;
+	gboolean _tmp90_ = FALSE;
+	gboolean _tmp91_ = FALSE;
+	ValaCodeContext* _tmp92_;
+	ValaCodeContext* _tmp93_;
+	gboolean _tmp94_;
+	gboolean _tmp95_;
+	gboolean _tmp101_;
+	gboolean _tmp108_;
+	gboolean _tmp114_;
+	ValaMethod* _tmp131_;
+	ValaDataType* _tmp132_;
+	ValaMethod* _tmp133_;
+	ValaSymbol* _tmp134_;
+	ValaSymbol* _tmp135_;
+	gboolean _tmp150_ = FALSE;
+	ValaDataType* _tmp151_;
+	gboolean _tmp154_;
+	ValaMethod* _tmp182_;
+	ValaList* _tmp183_ = NULL;
+	ValaList* _tmp184_;
+	gint _tmp185_;
+	gint _tmp186_;
+	gboolean _tmp187_;
+	ValaCCodeFile* _tmp205_;
+	ValaCCodeFunction* _tmp206_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (m != NULL);
 	g_return_if_fail (return_type != NULL);
@@ -6908,208 +6910,304 @@ void vala_ccode_method_module_generate_vfunc (ValaCCodeMethodModule* self, ValaM
 	vala_ccode_base_module_generate_cparameters ((ValaCCodeBaseModule*) self, _tmp81_, _tmp82_, _tmp83_, _tmp84_, NULL, _tmp85_, _tmp86_, _tmp87_);
 	_tmp88_ = vfunc;
 	vala_ccode_base_module_push_function ((ValaCCodeBaseModule*) self, _tmp88_);
-	_tmp89_ = m;
-	_tmp90_ = return_type;
-	_tmp91_ = m;
-	_tmp92_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp91_);
+	_tmp92_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
 	_tmp93_ = _tmp92_;
-	vala_ccode_method_module_create_method_type_check_statement (self, _tmp89_, _tmp90_, VALA_TYPESYMBOL (_tmp93_), TRUE, "self");
+	_tmp94_ = vala_code_context_get_assert (_tmp93_);
+	_tmp95_ = _tmp94_;
+	if (_tmp95_) {
+		ValaMethod* _tmp96_;
+		ValaDataType* _tmp97_;
+		ValaDataType* _tmp98_;
+		ValaTypeSymbol* _tmp99_;
+		ValaTypeSymbol* _tmp100_;
+		_tmp96_ = m;
+		_tmp97_ = vala_method_get_return_type (_tmp96_);
+		_tmp98_ = _tmp97_;
+		_tmp99_ = vala_data_type_get_data_type (_tmp98_);
+		_tmp100_ = _tmp99_;
+		_tmp91_ = VALA_IS_STRUCT (_tmp100_);
+	} else {
+		_tmp91_ = FALSE;
+	}
+	_tmp101_ = _tmp91_;
+	if (_tmp101_) {
+		ValaMethod* _tmp102_;
+		ValaDataType* _tmp103_;
+		ValaDataType* _tmp104_;
+		ValaTypeSymbol* _tmp105_;
+		ValaTypeSymbol* _tmp106_;
+		gboolean _tmp107_ = FALSE;
+		_tmp102_ = m;
+		_tmp103_ = vala_method_get_return_type (_tmp102_);
+		_tmp104_ = _tmp103_;
+		_tmp105_ = vala_data_type_get_data_type (_tmp104_);
+		_tmp106_ = _tmp105_;
+		_tmp107_ = vala_struct_is_simple_type (VALA_STRUCT (_tmp106_));
+		_tmp90_ = _tmp107_;
+	} else {
+		_tmp90_ = FALSE;
+	}
+	_tmp108_ = _tmp90_;
+	if (_tmp108_) {
+		ValaMethod* _tmp109_;
+		ValaDataType* _tmp110_;
+		ValaDataType* _tmp111_;
+		ValaCCodeExpression* _tmp112_ = NULL;
+		ValaCCodeExpression* _tmp113_;
+		_tmp109_ = m;
+		_tmp110_ = vala_method_get_return_type (_tmp109_);
+		_tmp111_ = _tmp110_;
+		_tmp112_ = vala_ccode_base_module_default_value_for_type ((ValaCCodeBaseModule*) self, _tmp111_, FALSE);
+		_tmp113_ = _tmp112_;
+		_tmp89_ = _tmp113_ == NULL;
+		_vala_ccode_node_unref0 (_tmp113_);
+	} else {
+		_tmp89_ = FALSE;
+	}
+	_tmp114_ = _tmp89_;
+	if (_tmp114_) {
+		ValaMethod* _tmp115_;
+		ValaDataType* _tmp116_;
+		ValaDataType* _tmp117_;
+		ValaCCodeExpression* _tmp118_ = NULL;
+		ValaCCodeExpression* _tmp119_;
+		ValaCCodeVariableDeclarator* _tmp120_;
+		ValaCCodeVariableDeclarator* _tmp121_;
+		ValaCCodeVariableDeclarator* vardecl;
+		ValaCCodeVariableDeclarator* _tmp122_;
+		ValaCCodeFunction* _tmp123_;
+		ValaCCodeFunction* _tmp124_;
+		ValaMethod* _tmp125_;
+		ValaDataType* _tmp126_;
+		ValaDataType* _tmp127_;
+		gchar* _tmp128_ = NULL;
+		gchar* _tmp129_;
+		ValaCCodeVariableDeclarator* _tmp130_;
+		_tmp115_ = m;
+		_tmp116_ = vala_method_get_return_type (_tmp115_);
+		_tmp117_ = _tmp116_;
+		_tmp118_ = vala_ccode_base_module_default_value_for_type ((ValaCCodeBaseModule*) self, _tmp117_, TRUE);
+		_tmp119_ = _tmp118_;
+		_tmp120_ = vala_ccode_variable_declarator_new ("result", _tmp119_, NULL);
+		_tmp121_ = _tmp120_;
+		_vala_ccode_node_unref0 (_tmp119_);
+		vardecl = _tmp121_;
+		_tmp122_ = vardecl;
+		vala_ccode_variable_declarator_set_init0 (_tmp122_, TRUE);
+		_tmp123_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp124_ = _tmp123_;
+		_tmp125_ = m;
+		_tmp126_ = vala_method_get_return_type (_tmp125_);
+		_tmp127_ = _tmp126_;
+		_tmp128_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp127_);
+		_tmp129_ = _tmp128_;
+		_tmp130_ = vardecl;
+		vala_ccode_function_add_declaration (_tmp124_, _tmp129_, (ValaCCodeDeclarator*) _tmp130_, 0);
+		_g_free0 (_tmp129_);
+		_vala_ccode_node_unref0 (vardecl);
+	}
+	_tmp131_ = m;
+	_tmp132_ = return_type;
+	_tmp133_ = m;
+	_tmp134_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp133_);
+	_tmp135_ = _tmp134_;
+	vala_ccode_method_module_create_method_type_check_statement (self, _tmp131_, _tmp132_, VALA_TYPESYMBOL (_tmp135_), TRUE, "self");
 	{
-		ValaMethod* _tmp94_;
-		ValaList* _tmp95_ = NULL;
+		ValaMethod* _tmp136_;
+		ValaList* _tmp137_ = NULL;
 		ValaList* _precondition_list;
-		ValaList* _tmp96_;
-		gint _tmp97_;
-		gint _tmp98_;
+		ValaList* _tmp138_;
+		gint _tmp139_;
+		gint _tmp140_;
 		gint _precondition_size;
 		gint _precondition_index;
-		_tmp94_ = m;
-		_tmp95_ = vala_method_get_preconditions (_tmp94_);
-		_precondition_list = _tmp95_;
-		_tmp96_ = _precondition_list;
-		_tmp97_ = vala_collection_get_size ((ValaCollection*) _tmp96_);
-		_tmp98_ = _tmp97_;
-		_precondition_size = _tmp98_;
+		_tmp136_ = m;
+		_tmp137_ = vala_method_get_preconditions (_tmp136_);
+		_precondition_list = _tmp137_;
+		_tmp138_ = _precondition_list;
+		_tmp139_ = vala_collection_get_size ((ValaCollection*) _tmp138_);
+		_tmp140_ = _tmp139_;
+		_precondition_size = _tmp140_;
 		_precondition_index = -1;
 		while (TRUE) {
-			gint _tmp99_;
-			gint _tmp100_;
-			gint _tmp101_;
-			ValaList* _tmp102_;
-			gint _tmp103_;
-			gpointer _tmp104_ = NULL;
+			gint _tmp141_;
+			gint _tmp142_;
+			gint _tmp143_;
+			ValaList* _tmp144_;
+			gint _tmp145_;
+			gpointer _tmp146_ = NULL;
 			ValaExpression* precondition;
-			ValaMethod* _tmp105_;
-			ValaDataType* _tmp106_;
-			ValaExpression* _tmp107_;
-			_tmp99_ = _precondition_index;
-			_precondition_index = _tmp99_ + 1;
-			_tmp100_ = _precondition_index;
-			_tmp101_ = _precondition_size;
-			if (!(_tmp100_ < _tmp101_)) {
+			ValaMethod* _tmp147_;
+			ValaDataType* _tmp148_;
+			ValaExpression* _tmp149_;
+			_tmp141_ = _precondition_index;
+			_precondition_index = _tmp141_ + 1;
+			_tmp142_ = _precondition_index;
+			_tmp143_ = _precondition_size;
+			if (!(_tmp142_ < _tmp143_)) {
 				break;
 			}
-			_tmp102_ = _precondition_list;
-			_tmp103_ = _precondition_index;
-			_tmp104_ = vala_list_get (_tmp102_, _tmp103_);
-			precondition = (ValaExpression*) _tmp104_;
-			_tmp105_ = m;
-			_tmp106_ = return_type;
-			_tmp107_ = precondition;
-			vala_ccode_method_module_create_precondition_statement (self, (ValaCodeNode*) _tmp105_, _tmp106_, _tmp107_);
+			_tmp144_ = _precondition_list;
+			_tmp145_ = _precondition_index;
+			_tmp146_ = vala_list_get (_tmp144_, _tmp145_);
+			precondition = (ValaExpression*) _tmp146_;
+			_tmp147_ = m;
+			_tmp148_ = return_type;
+			_tmp149_ = precondition;
+			vala_ccode_method_module_create_precondition_statement (self, (ValaCodeNode*) _tmp147_, _tmp148_, _tmp149_);
 			_vala_code_node_unref0 (precondition);
 		}
 		_vala_iterable_unref0 (_precondition_list);
 	}
-	_tmp109_ = return_type;
-	if (VALA_IS_VOID_TYPE (_tmp109_)) {
-		_tmp108_ = TRUE;
+	_tmp151_ = return_type;
+	if (VALA_IS_VOID_TYPE (_tmp151_)) {
+		_tmp150_ = TRUE;
 	} else {
-		ValaDataType* _tmp110_;
-		gboolean _tmp111_ = FALSE;
-		_tmp110_ = return_type;
-		_tmp111_ = vala_data_type_is_real_non_null_struct_type (_tmp110_);
-		_tmp108_ = _tmp111_;
+		ValaDataType* _tmp152_;
+		gboolean _tmp153_ = FALSE;
+		_tmp152_ = return_type;
+		_tmp153_ = vala_data_type_is_real_non_null_struct_type (_tmp152_);
+		_tmp150_ = _tmp153_;
 	}
-	_tmp112_ = _tmp108_;
-	if (_tmp112_) {
-		ValaCCodeFunction* _tmp113_;
-		ValaCCodeFunction* _tmp114_;
-		ValaCCodeFunctionCall* _tmp115_;
-		_tmp113_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-		_tmp114_ = _tmp113_;
-		_tmp115_ = vcall;
-		vala_ccode_function_add_expression (_tmp114_, (ValaCCodeExpression*) _tmp115_);
+	_tmp154_ = _tmp150_;
+	if (_tmp154_) {
+		ValaCCodeFunction* _tmp155_;
+		ValaCCodeFunction* _tmp156_;
+		ValaCCodeFunctionCall* _tmp157_;
+		_tmp155_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp156_ = _tmp155_;
+		_tmp157_ = vcall;
+		vala_ccode_function_add_expression (_tmp156_, (ValaCCodeExpression*) _tmp157_);
 	} else {
-		ValaMethod* _tmp116_;
-		ValaList* _tmp117_ = NULL;
-		ValaList* _tmp118_;
-		gint _tmp119_;
-		gint _tmp120_;
-		gboolean _tmp121_;
-		_tmp116_ = m;
-		_tmp117_ = vala_method_get_postconditions (_tmp116_);
-		_tmp118_ = _tmp117_;
-		_tmp119_ = vala_collection_get_size ((ValaCollection*) _tmp118_);
-		_tmp120_ = _tmp119_;
-		_tmp121_ = _tmp120_ == 0;
-		_vala_iterable_unref0 (_tmp118_);
-		if (_tmp121_) {
-			ValaCCodeFunction* _tmp122_;
-			ValaCCodeFunction* _tmp123_;
-			ValaCCodeFunctionCall* _tmp124_;
-			_tmp122_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp123_ = _tmp122_;
-			_tmp124_ = vcall;
-			vala_ccode_function_add_return (_tmp123_, (ValaCCodeExpression*) _tmp124_);
+		ValaMethod* _tmp158_;
+		ValaList* _tmp159_ = NULL;
+		ValaList* _tmp160_;
+		gint _tmp161_;
+		gint _tmp162_;
+		gboolean _tmp163_;
+		_tmp158_ = m;
+		_tmp159_ = vala_method_get_postconditions (_tmp158_);
+		_tmp160_ = _tmp159_;
+		_tmp161_ = vala_collection_get_size ((ValaCollection*) _tmp160_);
+		_tmp162_ = _tmp161_;
+		_tmp163_ = _tmp162_ == 0;
+		_vala_iterable_unref0 (_tmp160_);
+		if (_tmp163_) {
+			ValaCCodeFunction* _tmp164_;
+			ValaCCodeFunction* _tmp165_;
+			ValaCCodeFunctionCall* _tmp166_;
+			_tmp164_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp165_ = _tmp164_;
+			_tmp166_ = vcall;
+			vala_ccode_function_add_return (_tmp165_, (ValaCCodeExpression*) _tmp166_);
 		} else {
-			ValaCCodeFunction* _tmp125_;
-			ValaCCodeFunction* _tmp126_;
-			ValaMethod* _tmp127_;
-			ValaDataType* _tmp128_;
-			gchar* _tmp129_ = NULL;
-			gchar* _tmp130_;
-			gchar* _tmp131_ = NULL;
-			gchar* _tmp132_;
-			ValaCCodeVariableDeclarator* _tmp133_;
-			ValaCCodeVariableDeclarator* _tmp134_;
-			ValaCCodeFunction* _tmp135_;
-			ValaCCodeFunction* _tmp136_;
-			ValaCCodeIdentifier* _tmp137_;
-			ValaCCodeIdentifier* _tmp138_;
-			ValaCCodeFunctionCall* _tmp139_;
-			_tmp125_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp126_ = _tmp125_;
-			_tmp127_ = m;
-			_tmp128_ = return_type;
-			_tmp129_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp128_);
-			_tmp130_ = _tmp129_;
-			_tmp131_ = vala_ccode_method_module_get_creturn_type (self, _tmp127_, _tmp130_);
-			_tmp132_ = _tmp131_;
-			_tmp133_ = vala_ccode_variable_declarator_new ("result", NULL, NULL);
-			_tmp134_ = _tmp133_;
-			vala_ccode_function_add_declaration (_tmp126_, _tmp132_, (ValaCCodeDeclarator*) _tmp134_, 0);
-			_vala_ccode_node_unref0 (_tmp134_);
-			_g_free0 (_tmp132_);
-			_g_free0 (_tmp130_);
-			_tmp135_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp136_ = _tmp135_;
-			_tmp137_ = vala_ccode_identifier_new ("result");
-			_tmp138_ = _tmp137_;
-			_tmp139_ = vcall;
-			vala_ccode_function_add_assignment (_tmp136_, (ValaCCodeExpression*) _tmp138_, (ValaCCodeExpression*) _tmp139_);
-			_vala_ccode_node_unref0 (_tmp138_);
+			ValaCCodeFunction* _tmp167_;
+			ValaCCodeFunction* _tmp168_;
+			ValaMethod* _tmp169_;
+			ValaDataType* _tmp170_;
+			gchar* _tmp171_ = NULL;
+			gchar* _tmp172_;
+			gchar* _tmp173_ = NULL;
+			gchar* _tmp174_;
+			ValaCCodeVariableDeclarator* _tmp175_;
+			ValaCCodeVariableDeclarator* _tmp176_;
+			ValaCCodeFunction* _tmp177_;
+			ValaCCodeFunction* _tmp178_;
+			ValaCCodeIdentifier* _tmp179_;
+			ValaCCodeIdentifier* _tmp180_;
+			ValaCCodeFunctionCall* _tmp181_;
+			_tmp167_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp168_ = _tmp167_;
+			_tmp169_ = m;
+			_tmp170_ = return_type;
+			_tmp171_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp170_);
+			_tmp172_ = _tmp171_;
+			_tmp173_ = vala_ccode_method_module_get_creturn_type (self, _tmp169_, _tmp172_);
+			_tmp174_ = _tmp173_;
+			_tmp175_ = vala_ccode_variable_declarator_new ("result", NULL, NULL);
+			_tmp176_ = _tmp175_;
+			vala_ccode_function_add_declaration (_tmp168_, _tmp174_, (ValaCCodeDeclarator*) _tmp176_, 0);
+			_vala_ccode_node_unref0 (_tmp176_);
+			_g_free0 (_tmp174_);
+			_g_free0 (_tmp172_);
+			_tmp177_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp178_ = _tmp177_;
+			_tmp179_ = vala_ccode_identifier_new ("result");
+			_tmp180_ = _tmp179_;
+			_tmp181_ = vcall;
+			vala_ccode_function_add_assignment (_tmp178_, (ValaCCodeExpression*) _tmp180_, (ValaCCodeExpression*) _tmp181_);
+			_vala_ccode_node_unref0 (_tmp180_);
 		}
 	}
-	_tmp140_ = m;
-	_tmp141_ = vala_method_get_postconditions (_tmp140_);
-	_tmp142_ = _tmp141_;
-	_tmp143_ = vala_collection_get_size ((ValaCollection*) _tmp142_);
-	_tmp144_ = _tmp143_;
-	_tmp145_ = _tmp144_ > 0;
-	_vala_iterable_unref0 (_tmp142_);
-	if (_tmp145_) {
-		ValaDataType* _tmp158_;
+	_tmp182_ = m;
+	_tmp183_ = vala_method_get_postconditions (_tmp182_);
+	_tmp184_ = _tmp183_;
+	_tmp185_ = vala_collection_get_size ((ValaCollection*) _tmp184_);
+	_tmp186_ = _tmp185_;
+	_tmp187_ = _tmp186_ > 0;
+	_vala_iterable_unref0 (_tmp184_);
+	if (_tmp187_) {
+		ValaDataType* _tmp200_;
 		{
-			ValaMethod* _tmp146_;
-			ValaList* _tmp147_ = NULL;
+			ValaMethod* _tmp188_;
+			ValaList* _tmp189_ = NULL;
 			ValaList* _postcondition_list;
-			ValaList* _tmp148_;
-			gint _tmp149_;
-			gint _tmp150_;
+			ValaList* _tmp190_;
+			gint _tmp191_;
+			gint _tmp192_;
 			gint _postcondition_size;
 			gint _postcondition_index;
-			_tmp146_ = m;
-			_tmp147_ = vala_method_get_postconditions (_tmp146_);
-			_postcondition_list = _tmp147_;
-			_tmp148_ = _postcondition_list;
-			_tmp149_ = vala_collection_get_size ((ValaCollection*) _tmp148_);
-			_tmp150_ = _tmp149_;
-			_postcondition_size = _tmp150_;
+			_tmp188_ = m;
+			_tmp189_ = vala_method_get_postconditions (_tmp188_);
+			_postcondition_list = _tmp189_;
+			_tmp190_ = _postcondition_list;
+			_tmp191_ = vala_collection_get_size ((ValaCollection*) _tmp190_);
+			_tmp192_ = _tmp191_;
+			_postcondition_size = _tmp192_;
 			_postcondition_index = -1;
 			while (TRUE) {
-				gint _tmp151_;
-				gint _tmp152_;
-				gint _tmp153_;
-				ValaList* _tmp154_;
-				gint _tmp155_;
-				gpointer _tmp156_ = NULL;
+				gint _tmp193_;
+				gint _tmp194_;
+				gint _tmp195_;
+				ValaList* _tmp196_;
+				gint _tmp197_;
+				gpointer _tmp198_ = NULL;
 				ValaExpression* postcondition;
-				ValaExpression* _tmp157_;
-				_tmp151_ = _postcondition_index;
-				_postcondition_index = _tmp151_ + 1;
-				_tmp152_ = _postcondition_index;
-				_tmp153_ = _postcondition_size;
-				if (!(_tmp152_ < _tmp153_)) {
+				ValaExpression* _tmp199_;
+				_tmp193_ = _postcondition_index;
+				_postcondition_index = _tmp193_ + 1;
+				_tmp194_ = _postcondition_index;
+				_tmp195_ = _postcondition_size;
+				if (!(_tmp194_ < _tmp195_)) {
 					break;
 				}
-				_tmp154_ = _postcondition_list;
-				_tmp155_ = _postcondition_index;
-				_tmp156_ = vala_list_get (_tmp154_, _tmp155_);
-				postcondition = (ValaExpression*) _tmp156_;
-				_tmp157_ = postcondition;
-				vala_ccode_base_module_create_postcondition_statement ((ValaCCodeBaseModule*) self, _tmp157_);
+				_tmp196_ = _postcondition_list;
+				_tmp197_ = _postcondition_index;
+				_tmp198_ = vala_list_get (_tmp196_, _tmp197_);
+				postcondition = (ValaExpression*) _tmp198_;
+				_tmp199_ = postcondition;
+				vala_ccode_base_module_create_postcondition_statement ((ValaCCodeBaseModule*) self, _tmp199_);
 				_vala_code_node_unref0 (postcondition);
 			}
 			_vala_iterable_unref0 (_postcondition_list);
 		}
-		_tmp158_ = return_type;
-		if (!VALA_IS_VOID_TYPE (_tmp158_)) {
-			ValaCCodeFunction* _tmp159_;
-			ValaCCodeFunction* _tmp160_;
-			ValaCCodeIdentifier* _tmp161_;
-			ValaCCodeIdentifier* _tmp162_;
-			_tmp159_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp160_ = _tmp159_;
-			_tmp161_ = vala_ccode_identifier_new ("result");
-			_tmp162_ = _tmp161_;
-			vala_ccode_function_add_return (_tmp160_, (ValaCCodeExpression*) _tmp162_);
-			_vala_ccode_node_unref0 (_tmp162_);
+		_tmp200_ = return_type;
+		if (!VALA_IS_VOID_TYPE (_tmp200_)) {
+			ValaCCodeFunction* _tmp201_;
+			ValaCCodeFunction* _tmp202_;
+			ValaCCodeIdentifier* _tmp203_;
+			ValaCCodeIdentifier* _tmp204_;
+			_tmp201_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp202_ = _tmp201_;
+			_tmp203_ = vala_ccode_identifier_new ("result");
+			_tmp204_ = _tmp203_;
+			vala_ccode_function_add_return (_tmp202_, (ValaCCodeExpression*) _tmp204_);
+			_vala_ccode_node_unref0 (_tmp204_);
 		}
 	}
-	_tmp163_ = ((ValaCCodeBaseModule*) self)->cfile;
-	_tmp164_ = vfunc;
-	vala_ccode_file_add_function (_tmp163_, _tmp164_);
+	_tmp205_ = ((ValaCCodeBaseModule*) self)->cfile;
+	_tmp206_ = vfunc;
+	vala_ccode_file_add_function (_tmp205_, _tmp206_);
 	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
 	_vala_ccode_node_unref0 (vcall);
 	_vala_ccode_node_unref0 (vcast);
diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala
index 982f5ce..be69a1c 100644
--- a/codegen/valaccodemethodmodule.vala
+++ b/codegen/valaccodemethodmodule.vala
@@ -469,7 +469,7 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
 							var d = deleg_type.delegate_symbol;
 							if (d.has_target) {
 								// create variable to store delegate target
-								vardecl = new CCodeVariableDeclarator.zero (get_delegate_target_cname (get_variable_cname ("_vala_" + param.name)), new CCodeConstant ("NULL"));
+								vardecl = new CCodeVariableDeclarator.zero ("_vala_" + get_ccode_delegate_target_name (param), new CCodeConstant ("NULL"));
 								ccode.add_declaration ("void *", vardecl);
 
 								if (deleg_type.value_owned) {
@@ -916,6 +916,13 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
 
 		push_function (vfunc);
 
+		if (context.assert && m.return_type.data_type is Struct && ((Struct) m.return_type.data_type).is_simple_type () && default_value_for_type (m.return_type, false) == null) {
+			// the type check will use the result variable
+			var vardecl = new CCodeVariableDeclarator ("result", default_value_for_type (m.return_type, true));
+			vardecl.init0 = true;
+			ccode.add_declaration (get_ccode_name (m.return_type), vardecl);
+		}
+
 		// add a typecheck statement for "self"
 		create_method_type_check_statement (m, return_type, (TypeSymbol) m.parent_symbol, true, "self");
 
diff --git a/codegen/valaccodestructmodule.c b/codegen/valaccodestructmodule.c
index 8186910..5d28694 100644
--- a/codegen/valaccodestructmodule.c
+++ b/codegen/valaccodestructmodule.c
@@ -306,7 +306,7 @@ gboolean vala_ccode_base_module_get_ccode_array_length (ValaCodeNode* node);
 gchar* vala_ccode_base_module_get_ccode_array_length_name (ValaCodeNode* node);
 gchar* vala_ccode_base_module_get_array_length_cname (ValaCCodeBaseModule* self, const gchar* array_cname, gint dim);
 gchar* vala_ccode_base_module_get_array_size_cname (ValaCCodeBaseModule* self, const gchar* array_cname);
-gchar* vala_ccode_base_module_get_delegate_target_cname (ValaCCodeBaseModule* self, const gchar* delegate_cname);
+gchar* vala_ccode_base_module_get_ccode_delegate_target_name (ValaVariable* variable);
 gchar* vala_ccode_base_module_get_delegate_target_destroy_notify_cname (ValaCCodeBaseModule* self, const gchar* delegate_cname);
 gchar* vala_ccode_base_module_get_ccode_dup_function (ValaTypeSymbol* sym);
 gchar* vala_ccode_base_module_get_ccode_free_function (ValaTypeSymbol* sym);
@@ -371,52 +371,52 @@ static void vala_ccode_struct_module_real_generate_struct_declaration (ValaCCode
 	ValaStruct* _tmp51_;
 	gboolean _tmp52_;
 	gboolean _tmp53_;
+	ValaStruct* _tmp178_;
+	ValaStruct* _tmp179_;
 	ValaStruct* _tmp180_;
-	ValaStruct* _tmp181_;
-	ValaStruct* _tmp182_;
-	ValaStruct* _tmp211_;
-	gchar* _tmp212_ = NULL;
-	gchar* _tmp213_;
-	ValaStruct* _tmp214_;
-	gchar* _tmp215_ = NULL;
+	ValaStruct* _tmp209_;
+	gchar* _tmp210_ = NULL;
+	gchar* _tmp211_;
+	ValaStruct* _tmp212_;
+	gchar* _tmp213_ = NULL;
+	gchar* _tmp214_;
+	gchar* _tmp215_;
 	gchar* _tmp216_;
-	gchar* _tmp217_;
-	gchar* _tmp218_;
-	ValaCCodeFunction* _tmp219_;
-	ValaCCodeFunction* _tmp220_;
+	ValaCCodeFunction* _tmp217_;
+	ValaCCodeFunction* _tmp218_;
 	ValaCCodeFunction* function;
-	ValaStruct* _tmp221_;
-	gboolean _tmp222_ = FALSE;
-	ValaCCodeFunction* _tmp224_;
-	ValaStruct* _tmp225_;
-	gchar* _tmp226_ = NULL;
+	ValaStruct* _tmp219_;
+	gboolean _tmp220_ = FALSE;
+	ValaCCodeFunction* _tmp222_;
+	ValaStruct* _tmp223_;
+	gchar* _tmp224_ = NULL;
+	gchar* _tmp225_;
+	gchar* _tmp226_;
 	gchar* _tmp227_;
 	gchar* _tmp228_;
 	gchar* _tmp229_;
-	gchar* _tmp230_;
-	gchar* _tmp231_;
-	ValaCCodeParameter* _tmp232_;
-	ValaCCodeParameter* _tmp233_;
-	ValaCCodeFile* _tmp234_;
-	ValaCCodeFunction* _tmp235_;
-	ValaStruct* _tmp236_;
-	gchar* _tmp237_ = NULL;
-	gchar* _tmp238_;
-	ValaCCodeFunction* _tmp239_;
-	ValaStruct* _tmp240_;
-	gboolean _tmp241_ = FALSE;
-	ValaCCodeFunction* _tmp243_;
-	ValaStruct* _tmp244_;
-	gchar* _tmp245_ = NULL;
+	ValaCCodeParameter* _tmp230_;
+	ValaCCodeParameter* _tmp231_;
+	ValaCCodeFile* _tmp232_;
+	ValaCCodeFunction* _tmp233_;
+	ValaStruct* _tmp234_;
+	gchar* _tmp235_ = NULL;
+	gchar* _tmp236_;
+	ValaCCodeFunction* _tmp237_;
+	ValaStruct* _tmp238_;
+	gboolean _tmp239_ = FALSE;
+	ValaCCodeFunction* _tmp241_;
+	ValaStruct* _tmp242_;
+	gchar* _tmp243_ = NULL;
+	gchar* _tmp244_;
+	gchar* _tmp245_;
 	gchar* _tmp246_;
-	gchar* _tmp247_;
-	gchar* _tmp248_;
-	ValaCCodeParameter* _tmp249_;
-	ValaCCodeParameter* _tmp250_;
-	ValaCCodeFile* _tmp251_;
-	ValaCCodeFunction* _tmp252_;
-	ValaStruct* _tmp253_;
-	gboolean _tmp254_ = FALSE;
+	ValaCCodeParameter* _tmp247_;
+	ValaCCodeParameter* _tmp248_;
+	ValaCCodeFile* _tmp249_;
+	ValaCCodeFunction* _tmp250_;
+	ValaStruct* _tmp251_;
+	gboolean _tmp252_ = FALSE;
 	self = (ValaCCodeStructModule*) base;
 	g_return_if_fail (st != NULL);
 	g_return_if_fail (decl_space != NULL);
@@ -848,39 +848,35 @@ static void vala_ccode_struct_module_real_generate_struct_declaration (ValaCCode
 						if (_tmp164_) {
 							ValaCCodeStruct* _tmp165_;
 							ValaField* _tmp166_;
-							const gchar* _tmp167_;
-							const gchar* _tmp168_;
-							gchar* _tmp169_ = NULL;
-							gchar* _tmp170_;
-							ValaDelegateType* _tmp171_;
-							gboolean _tmp172_;
-							gboolean _tmp173_;
+							gchar* _tmp167_ = NULL;
+							gchar* _tmp168_;
+							ValaDelegateType* _tmp169_;
+							gboolean _tmp170_;
+							gboolean _tmp171_;
 							_tmp165_ = instance_struct;
 							_tmp166_ = f;
-							_tmp167_ = vala_symbol_get_name ((ValaSymbol*) _tmp166_);
+							_tmp167_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp166_);
 							_tmp168_ = _tmp167_;
-							_tmp169_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp168_);
-							_tmp170_ = _tmp169_;
-							vala_ccode_struct_add_field (_tmp165_, "gpointer", _tmp170_, NULL);
-							_g_free0 (_tmp170_);
-							_tmp171_ = delegate_type;
-							_tmp172_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp171_);
-							_tmp173_ = _tmp172_;
-							if (_tmp173_) {
-								ValaCCodeStruct* _tmp174_;
-								ValaField* _tmp175_;
-								const gchar* _tmp176_;
-								const gchar* _tmp177_;
-								gchar* _tmp178_ = NULL;
-								gchar* _tmp179_;
-								_tmp174_ = instance_struct;
-								_tmp175_ = f;
-								_tmp176_ = vala_symbol_get_name ((ValaSymbol*) _tmp175_);
+							vala_ccode_struct_add_field (_tmp165_, "gpointer", _tmp168_, NULL);
+							_g_free0 (_tmp168_);
+							_tmp169_ = delegate_type;
+							_tmp170_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp169_);
+							_tmp171_ = _tmp170_;
+							if (_tmp171_) {
+								ValaCCodeStruct* _tmp172_;
+								ValaField* _tmp173_;
+								const gchar* _tmp174_;
+								const gchar* _tmp175_;
+								gchar* _tmp176_ = NULL;
+								gchar* _tmp177_;
+								_tmp172_ = instance_struct;
+								_tmp173_ = f;
+								_tmp174_ = vala_symbol_get_name ((ValaSymbol*) _tmp173_);
+								_tmp175_ = _tmp174_;
+								_tmp176_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp175_);
 								_tmp177_ = _tmp176_;
-								_tmp178_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp177_);
-								_tmp179_ = _tmp178_;
-								vala_ccode_struct_add_field (_tmp174_, "GDestroyNotify", _tmp179_, NULL);
-								_g_free0 (_tmp179_);
+								vala_ccode_struct_add_field (_tmp172_, "GDestroyNotify", _tmp177_, NULL);
+								_g_free0 (_tmp177_);
 							}
 						}
 						_vala_code_node_unref0 (delegate_type);
@@ -892,266 +888,266 @@ static void vala_ccode_struct_module_real_generate_struct_declaration (ValaCCode
 		}
 		_vala_iterable_unref0 (_f_list);
 	}
-	_tmp180_ = st;
-	_tmp181_ = vala_struct_get_base_struct (_tmp180_);
-	_tmp182_ = _tmp181_;
-	if (_tmp182_ == NULL) {
-		ValaCCodeFile* _tmp183_;
-		ValaStruct* _tmp184_;
+	_tmp178_ = st;
+	_tmp179_ = vala_struct_get_base_struct (_tmp178_);
+	_tmp180_ = _tmp179_;
+	if (_tmp180_ == NULL) {
+		ValaCCodeFile* _tmp181_;
+		ValaStruct* _tmp182_;
+		gchar* _tmp183_ = NULL;
+		gchar* _tmp184_;
 		gchar* _tmp185_ = NULL;
 		gchar* _tmp186_;
-		gchar* _tmp187_ = NULL;
-		gchar* _tmp188_;
-		ValaStruct* _tmp189_;
-		gchar* _tmp190_ = NULL;
-		gchar* _tmp191_;
-		ValaCCodeVariableDeclarator* _tmp192_;
-		ValaCCodeVariableDeclarator* _tmp193_;
-		ValaCCodeTypeDefinition* _tmp194_;
-		ValaCCodeTypeDefinition* _tmp195_;
-		ValaCCodeFile* _tmp196_;
-		ValaCCodeStruct* _tmp197_;
-		_tmp183_ = decl_space;
-		_tmp184_ = st;
-		_tmp185_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp184_);
+		ValaStruct* _tmp187_;
+		gchar* _tmp188_ = NULL;
+		gchar* _tmp189_;
+		ValaCCodeVariableDeclarator* _tmp190_;
+		ValaCCodeVariableDeclarator* _tmp191_;
+		ValaCCodeTypeDefinition* _tmp192_;
+		ValaCCodeTypeDefinition* _tmp193_;
+		ValaCCodeFile* _tmp194_;
+		ValaCCodeStruct* _tmp195_;
+		_tmp181_ = decl_space;
+		_tmp182_ = st;
+		_tmp183_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp182_);
+		_tmp184_ = _tmp183_;
+		_tmp185_ = g_strdup_printf ("struct _%s", _tmp184_);
 		_tmp186_ = _tmp185_;
-		_tmp187_ = g_strdup_printf ("struct _%s", _tmp186_);
-		_tmp188_ = _tmp187_;
-		_tmp189_ = st;
-		_tmp190_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp189_);
+		_tmp187_ = st;
+		_tmp188_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp187_);
+		_tmp189_ = _tmp188_;
+		_tmp190_ = vala_ccode_variable_declarator_new (_tmp189_, NULL, NULL);
 		_tmp191_ = _tmp190_;
-		_tmp192_ = vala_ccode_variable_declarator_new (_tmp191_, NULL, NULL);
+		_tmp192_ = vala_ccode_type_definition_new (_tmp186_, (ValaCCodeDeclarator*) _tmp191_);
 		_tmp193_ = _tmp192_;
-		_tmp194_ = vala_ccode_type_definition_new (_tmp188_, (ValaCCodeDeclarator*) _tmp193_);
-		_tmp195_ = _tmp194_;
-		vala_ccode_file_add_type_declaration (_tmp183_, (ValaCCodeNode*) _tmp195_);
-		_vala_ccode_node_unref0 (_tmp195_);
+		vala_ccode_file_add_type_declaration (_tmp181_, (ValaCCodeNode*) _tmp193_);
 		_vala_ccode_node_unref0 (_tmp193_);
-		_g_free0 (_tmp191_);
-		_g_free0 (_tmp188_);
+		_vala_ccode_node_unref0 (_tmp191_);
+		_g_free0 (_tmp189_);
 		_g_free0 (_tmp186_);
-		_tmp196_ = decl_space;
-		_tmp197_ = instance_struct;
-		vala_ccode_file_add_type_definition (_tmp196_, (ValaCCodeNode*) _tmp197_);
+		_g_free0 (_tmp184_);
+		_tmp194_ = decl_space;
+		_tmp195_ = instance_struct;
+		vala_ccode_file_add_type_definition (_tmp194_, (ValaCCodeNode*) _tmp195_);
 	} else {
-		ValaCCodeFile* _tmp198_;
+		ValaCCodeFile* _tmp196_;
+		ValaStruct* _tmp197_;
+		ValaStruct* _tmp198_;
 		ValaStruct* _tmp199_;
-		ValaStruct* _tmp200_;
-		ValaStruct* _tmp201_;
-		gchar* _tmp202_ = NULL;
-		gchar* _tmp203_;
-		ValaStruct* _tmp204_;
-		gchar* _tmp205_ = NULL;
-		gchar* _tmp206_;
-		ValaCCodeVariableDeclarator* _tmp207_;
-		ValaCCodeVariableDeclarator* _tmp208_;
-		ValaCCodeTypeDefinition* _tmp209_;
-		ValaCCodeTypeDefinition* _tmp210_;
-		_tmp198_ = decl_space;
-		_tmp199_ = st;
-		_tmp200_ = vala_struct_get_base_struct (_tmp199_);
+		gchar* _tmp200_ = NULL;
+		gchar* _tmp201_;
+		ValaStruct* _tmp202_;
+		gchar* _tmp203_ = NULL;
+		gchar* _tmp204_;
+		ValaCCodeVariableDeclarator* _tmp205_;
+		ValaCCodeVariableDeclarator* _tmp206_;
+		ValaCCodeTypeDefinition* _tmp207_;
+		ValaCCodeTypeDefinition* _tmp208_;
+		_tmp196_ = decl_space;
+		_tmp197_ = st;
+		_tmp198_ = vala_struct_get_base_struct (_tmp197_);
+		_tmp199_ = _tmp198_;
+		_tmp200_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp199_);
 		_tmp201_ = _tmp200_;
-		_tmp202_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp201_);
-		_tmp203_ = _tmp202_;
-		_tmp204_ = st;
-		_tmp205_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp204_);
+		_tmp202_ = st;
+		_tmp203_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp202_);
+		_tmp204_ = _tmp203_;
+		_tmp205_ = vala_ccode_variable_declarator_new (_tmp204_, NULL, NULL);
 		_tmp206_ = _tmp205_;
-		_tmp207_ = vala_ccode_variable_declarator_new (_tmp206_, NULL, NULL);
+		_tmp207_ = vala_ccode_type_definition_new (_tmp201_, (ValaCCodeDeclarator*) _tmp206_);
 		_tmp208_ = _tmp207_;
-		_tmp209_ = vala_ccode_type_definition_new (_tmp203_, (ValaCCodeDeclarator*) _tmp208_);
-		_tmp210_ = _tmp209_;
-		vala_ccode_file_add_type_declaration (_tmp198_, (ValaCCodeNode*) _tmp210_);
-		_vala_ccode_node_unref0 (_tmp210_);
+		vala_ccode_file_add_type_declaration (_tmp196_, (ValaCCodeNode*) _tmp208_);
 		_vala_ccode_node_unref0 (_tmp208_);
-		_g_free0 (_tmp206_);
-		_g_free0 (_tmp203_);
+		_vala_ccode_node_unref0 (_tmp206_);
+		_g_free0 (_tmp204_);
+		_g_free0 (_tmp201_);
 	}
-	_tmp211_ = st;
-	_tmp212_ = vala_ccode_base_module_get_ccode_dup_function ((ValaTypeSymbol*) _tmp211_);
-	_tmp213_ = _tmp212_;
-	_tmp214_ = st;
-	_tmp215_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp214_);
+	_tmp209_ = st;
+	_tmp210_ = vala_ccode_base_module_get_ccode_dup_function ((ValaTypeSymbol*) _tmp209_);
+	_tmp211_ = _tmp210_;
+	_tmp212_ = st;
+	_tmp213_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp212_);
+	_tmp214_ = _tmp213_;
+	_tmp215_ = g_strconcat (_tmp214_, "*", NULL);
 	_tmp216_ = _tmp215_;
-	_tmp217_ = g_strconcat (_tmp216_, "*", NULL);
+	_tmp217_ = vala_ccode_function_new (_tmp211_, _tmp216_);
 	_tmp218_ = _tmp217_;
-	_tmp219_ = vala_ccode_function_new (_tmp213_, _tmp218_);
-	_tmp220_ = _tmp219_;
-	_g_free0 (_tmp218_);
 	_g_free0 (_tmp216_);
-	_g_free0 (_tmp213_);
-	function = _tmp220_;
-	_tmp221_ = st;
-	_tmp222_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp221_);
-	if (_tmp222_) {
-		ValaCCodeFunction* _tmp223_;
-		_tmp223_ = function;
-		vala_ccode_function_set_modifiers (_tmp223_, VALA_CCODE_MODIFIERS_STATIC);
+	_g_free0 (_tmp214_);
+	_g_free0 (_tmp211_);
+	function = _tmp218_;
+	_tmp219_ = st;
+	_tmp220_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp219_);
+	if (_tmp220_) {
+		ValaCCodeFunction* _tmp221_;
+		_tmp221_ = function;
+		vala_ccode_function_set_modifiers (_tmp221_, VALA_CCODE_MODIFIERS_STATIC);
 	}
-	_tmp224_ = function;
-	_tmp225_ = st;
-	_tmp226_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp225_);
+	_tmp222_ = function;
+	_tmp223_ = st;
+	_tmp224_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp223_);
+	_tmp225_ = _tmp224_;
+	_tmp226_ = g_strconcat ("const ", _tmp225_, NULL);
 	_tmp227_ = _tmp226_;
-	_tmp228_ = g_strconcat ("const ", _tmp227_, NULL);
+	_tmp228_ = g_strconcat (_tmp227_, "*", NULL);
 	_tmp229_ = _tmp228_;
-	_tmp230_ = g_strconcat (_tmp229_, "*", NULL);
+	_tmp230_ = vala_ccode_parameter_new ("self", _tmp229_);
 	_tmp231_ = _tmp230_;
-	_tmp232_ = vala_ccode_parameter_new ("self", _tmp231_);
-	_tmp233_ = _tmp232_;
-	vala_ccode_function_add_parameter (_tmp224_, _tmp233_);
-	_vala_ccode_node_unref0 (_tmp233_);
-	_g_free0 (_tmp231_);
+	vala_ccode_function_add_parameter (_tmp222_, _tmp231_);
+	_vala_ccode_node_unref0 (_tmp231_);
 	_g_free0 (_tmp229_);
 	_g_free0 (_tmp227_);
-	_tmp234_ = decl_space;
-	_tmp235_ = function;
-	vala_ccode_file_add_function_declaration (_tmp234_, _tmp235_);
-	_tmp236_ = st;
-	_tmp237_ = vala_ccode_base_module_get_ccode_free_function ((ValaTypeSymbol*) _tmp236_);
-	_tmp238_ = _tmp237_;
-	_tmp239_ = vala_ccode_function_new (_tmp238_, "void");
+	_g_free0 (_tmp225_);
+	_tmp232_ = decl_space;
+	_tmp233_ = function;
+	vala_ccode_file_add_function_declaration (_tmp232_, _tmp233_);
+	_tmp234_ = st;
+	_tmp235_ = vala_ccode_base_module_get_ccode_free_function ((ValaTypeSymbol*) _tmp234_);
+	_tmp236_ = _tmp235_;
+	_tmp237_ = vala_ccode_function_new (_tmp236_, "void");
 	_vala_ccode_node_unref0 (function);
-	function = _tmp239_;
-	_g_free0 (_tmp238_);
-	_tmp240_ = st;
-	_tmp241_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp240_);
-	if (_tmp241_) {
-		ValaCCodeFunction* _tmp242_;
-		_tmp242_ = function;
-		vala_ccode_function_set_modifiers (_tmp242_, VALA_CCODE_MODIFIERS_STATIC);
+	function = _tmp237_;
+	_g_free0 (_tmp236_);
+	_tmp238_ = st;
+	_tmp239_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp238_);
+	if (_tmp239_) {
+		ValaCCodeFunction* _tmp240_;
+		_tmp240_ = function;
+		vala_ccode_function_set_modifiers (_tmp240_, VALA_CCODE_MODIFIERS_STATIC);
 	}
-	_tmp243_ = function;
-	_tmp244_ = st;
-	_tmp245_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp244_);
+	_tmp241_ = function;
+	_tmp242_ = st;
+	_tmp243_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp242_);
+	_tmp244_ = _tmp243_;
+	_tmp245_ = g_strconcat (_tmp244_, "*", NULL);
 	_tmp246_ = _tmp245_;
-	_tmp247_ = g_strconcat (_tmp246_, "*", NULL);
+	_tmp247_ = vala_ccode_parameter_new ("self", _tmp246_);
 	_tmp248_ = _tmp247_;
-	_tmp249_ = vala_ccode_parameter_new ("self", _tmp248_);
-	_tmp250_ = _tmp249_;
-	vala_ccode_function_add_parameter (_tmp243_, _tmp250_);
-	_vala_ccode_node_unref0 (_tmp250_);
-	_g_free0 (_tmp248_);
+	vala_ccode_function_add_parameter (_tmp241_, _tmp248_);
+	_vala_ccode_node_unref0 (_tmp248_);
 	_g_free0 (_tmp246_);
-	_tmp251_ = decl_space;
-	_tmp252_ = function;
-	vala_ccode_file_add_function_declaration (_tmp251_, _tmp252_);
-	_tmp253_ = st;
-	_tmp254_ = vala_struct_is_disposable (_tmp253_);
-	if (_tmp254_) {
-		ValaStruct* _tmp255_;
-		gchar* _tmp256_ = NULL;
-		gchar* _tmp257_;
-		ValaCCodeFunction* _tmp258_;
-		ValaStruct* _tmp259_;
-		gboolean _tmp260_ = FALSE;
-		ValaCCodeFunction* _tmp262_;
-		ValaStruct* _tmp263_;
-		gchar* _tmp264_ = NULL;
+	_g_free0 (_tmp244_);
+	_tmp249_ = decl_space;
+	_tmp250_ = function;
+	vala_ccode_file_add_function_declaration (_tmp249_, _tmp250_);
+	_tmp251_ = st;
+	_tmp252_ = vala_struct_is_disposable (_tmp251_);
+	if (_tmp252_) {
+		ValaStruct* _tmp253_;
+		gchar* _tmp254_ = NULL;
+		gchar* _tmp255_;
+		ValaCCodeFunction* _tmp256_;
+		ValaStruct* _tmp257_;
+		gboolean _tmp258_ = FALSE;
+		ValaCCodeFunction* _tmp260_;
+		ValaStruct* _tmp261_;
+		gchar* _tmp262_ = NULL;
+		gchar* _tmp263_;
+		gchar* _tmp264_;
 		gchar* _tmp265_;
 		gchar* _tmp266_;
 		gchar* _tmp267_;
-		gchar* _tmp268_;
-		gchar* _tmp269_;
-		ValaCCodeParameter* _tmp270_;
-		ValaCCodeParameter* _tmp271_;
-		ValaCCodeFunction* _tmp272_;
-		ValaStruct* _tmp273_;
-		gchar* _tmp274_ = NULL;
+		ValaCCodeParameter* _tmp268_;
+		ValaCCodeParameter* _tmp269_;
+		ValaCCodeFunction* _tmp270_;
+		ValaStruct* _tmp271_;
+		gchar* _tmp272_ = NULL;
+		gchar* _tmp273_;
+		gchar* _tmp274_;
 		gchar* _tmp275_;
-		gchar* _tmp276_;
-		gchar* _tmp277_;
-		ValaCCodeParameter* _tmp278_;
-		ValaCCodeParameter* _tmp279_;
-		ValaCCodeFile* _tmp280_;
-		ValaCCodeFunction* _tmp281_;
-		ValaStruct* _tmp282_;
-		gchar* _tmp283_ = NULL;
-		gchar* _tmp284_;
-		ValaCCodeFunction* _tmp285_;
-		ValaStruct* _tmp286_;
-		gboolean _tmp287_ = FALSE;
-		ValaCCodeFunction* _tmp289_;
-		ValaStruct* _tmp290_;
-		gchar* _tmp291_ = NULL;
+		ValaCCodeParameter* _tmp276_;
+		ValaCCodeParameter* _tmp277_;
+		ValaCCodeFile* _tmp278_;
+		ValaCCodeFunction* _tmp279_;
+		ValaStruct* _tmp280_;
+		gchar* _tmp281_ = NULL;
+		gchar* _tmp282_;
+		ValaCCodeFunction* _tmp283_;
+		ValaStruct* _tmp284_;
+		gboolean _tmp285_ = FALSE;
+		ValaCCodeFunction* _tmp287_;
+		ValaStruct* _tmp288_;
+		gchar* _tmp289_ = NULL;
+		gchar* _tmp290_;
+		gchar* _tmp291_;
 		gchar* _tmp292_;
-		gchar* _tmp293_;
-		gchar* _tmp294_;
-		ValaCCodeParameter* _tmp295_;
-		ValaCCodeParameter* _tmp296_;
-		ValaCCodeFile* _tmp297_;
-		ValaCCodeFunction* _tmp298_;
-		_tmp255_ = st;
-		_tmp256_ = vala_ccode_base_module_get_ccode_copy_function ((ValaTypeSymbol*) _tmp255_);
-		_tmp257_ = _tmp256_;
-		_tmp258_ = vala_ccode_function_new (_tmp257_, "void");
+		ValaCCodeParameter* _tmp293_;
+		ValaCCodeParameter* _tmp294_;
+		ValaCCodeFile* _tmp295_;
+		ValaCCodeFunction* _tmp296_;
+		_tmp253_ = st;
+		_tmp254_ = vala_ccode_base_module_get_ccode_copy_function ((ValaTypeSymbol*) _tmp253_);
+		_tmp255_ = _tmp254_;
+		_tmp256_ = vala_ccode_function_new (_tmp255_, "void");
 		_vala_ccode_node_unref0 (function);
-		function = _tmp258_;
-		_g_free0 (_tmp257_);
-		_tmp259_ = st;
-		_tmp260_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp259_);
-		if (_tmp260_) {
-			ValaCCodeFunction* _tmp261_;
-			_tmp261_ = function;
-			vala_ccode_function_set_modifiers (_tmp261_, VALA_CCODE_MODIFIERS_STATIC);
+		function = _tmp256_;
+		_g_free0 (_tmp255_);
+		_tmp257_ = st;
+		_tmp258_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp257_);
+		if (_tmp258_) {
+			ValaCCodeFunction* _tmp259_;
+			_tmp259_ = function;
+			vala_ccode_function_set_modifiers (_tmp259_, VALA_CCODE_MODIFIERS_STATIC);
 		}
-		_tmp262_ = function;
-		_tmp263_ = st;
-		_tmp264_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp263_);
+		_tmp260_ = function;
+		_tmp261_ = st;
+		_tmp262_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp261_);
+		_tmp263_ = _tmp262_;
+		_tmp264_ = g_strconcat ("const ", _tmp263_, NULL);
 		_tmp265_ = _tmp264_;
-		_tmp266_ = g_strconcat ("const ", _tmp265_, NULL);
+		_tmp266_ = g_strconcat (_tmp265_, "*", NULL);
 		_tmp267_ = _tmp266_;
-		_tmp268_ = g_strconcat (_tmp267_, "*", NULL);
+		_tmp268_ = vala_ccode_parameter_new ("self", _tmp267_);
 		_tmp269_ = _tmp268_;
-		_tmp270_ = vala_ccode_parameter_new ("self", _tmp269_);
-		_tmp271_ = _tmp270_;
-		vala_ccode_function_add_parameter (_tmp262_, _tmp271_);
-		_vala_ccode_node_unref0 (_tmp271_);
-		_g_free0 (_tmp269_);
+		vala_ccode_function_add_parameter (_tmp260_, _tmp269_);
+		_vala_ccode_node_unref0 (_tmp269_);
 		_g_free0 (_tmp267_);
 		_g_free0 (_tmp265_);
-		_tmp272_ = function;
-		_tmp273_ = st;
-		_tmp274_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp273_);
+		_g_free0 (_tmp263_);
+		_tmp270_ = function;
+		_tmp271_ = st;
+		_tmp272_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp271_);
+		_tmp273_ = _tmp272_;
+		_tmp274_ = g_strconcat (_tmp273_, "*", NULL);
 		_tmp275_ = _tmp274_;
-		_tmp276_ = g_strconcat (_tmp275_, "*", NULL);
+		_tmp276_ = vala_ccode_parameter_new ("dest", _tmp275_);
 		_tmp277_ = _tmp276_;
-		_tmp278_ = vala_ccode_parameter_new ("dest", _tmp277_);
-		_tmp279_ = _tmp278_;
-		vala_ccode_function_add_parameter (_tmp272_, _tmp279_);
-		_vala_ccode_node_unref0 (_tmp279_);
-		_g_free0 (_tmp277_);
+		vala_ccode_function_add_parameter (_tmp270_, _tmp277_);
+		_vala_ccode_node_unref0 (_tmp277_);
 		_g_free0 (_tmp275_);
-		_tmp280_ = decl_space;
-		_tmp281_ = function;
-		vala_ccode_file_add_function_declaration (_tmp280_, _tmp281_);
-		_tmp282_ = st;
-		_tmp283_ = vala_ccode_base_module_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp282_);
-		_tmp284_ = _tmp283_;
-		_tmp285_ = vala_ccode_function_new (_tmp284_, "void");
+		_g_free0 (_tmp273_);
+		_tmp278_ = decl_space;
+		_tmp279_ = function;
+		vala_ccode_file_add_function_declaration (_tmp278_, _tmp279_);
+		_tmp280_ = st;
+		_tmp281_ = vala_ccode_base_module_get_ccode_destroy_function ((ValaTypeSymbol*) _tmp280_);
+		_tmp282_ = _tmp281_;
+		_tmp283_ = vala_ccode_function_new (_tmp282_, "void");
 		_vala_ccode_node_unref0 (function);
-		function = _tmp285_;
-		_g_free0 (_tmp284_);
-		_tmp286_ = st;
-		_tmp287_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp286_);
-		if (_tmp287_) {
-			ValaCCodeFunction* _tmp288_;
-			_tmp288_ = function;
-			vala_ccode_function_set_modifiers (_tmp288_, VALA_CCODE_MODIFIERS_STATIC);
+		function = _tmp283_;
+		_g_free0 (_tmp282_);
+		_tmp284_ = st;
+		_tmp285_ = vala_symbol_is_private_symbol ((ValaSymbol*) _tmp284_);
+		if (_tmp285_) {
+			ValaCCodeFunction* _tmp286_;
+			_tmp286_ = function;
+			vala_ccode_function_set_modifiers (_tmp286_, VALA_CCODE_MODIFIERS_STATIC);
 		}
-		_tmp289_ = function;
-		_tmp290_ = st;
-		_tmp291_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp290_);
+		_tmp287_ = function;
+		_tmp288_ = st;
+		_tmp289_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp288_);
+		_tmp290_ = _tmp289_;
+		_tmp291_ = g_strconcat (_tmp290_, "*", NULL);
 		_tmp292_ = _tmp291_;
-		_tmp293_ = g_strconcat (_tmp292_, "*", NULL);
+		_tmp293_ = vala_ccode_parameter_new ("self", _tmp292_);
 		_tmp294_ = _tmp293_;
-		_tmp295_ = vala_ccode_parameter_new ("self", _tmp294_);
-		_tmp296_ = _tmp295_;
-		vala_ccode_function_add_parameter (_tmp289_, _tmp296_);
-		_vala_ccode_node_unref0 (_tmp296_);
-		_g_free0 (_tmp294_);
+		vala_ccode_function_add_parameter (_tmp287_, _tmp294_);
+		_vala_ccode_node_unref0 (_tmp294_);
 		_g_free0 (_tmp292_);
-		_tmp297_ = decl_space;
-		_tmp298_ = function;
-		vala_ccode_file_add_function_declaration (_tmp297_, _tmp298_);
+		_g_free0 (_tmp290_);
+		_tmp295_ = decl_space;
+		_tmp296_ = function;
+		vala_ccode_file_add_function_declaration (_tmp295_, _tmp296_);
 	}
 	_vala_ccode_node_unref0 (function);
 	_vala_ccode_node_unref0 (instance_struct);
@@ -1183,27 +1179,19 @@ static void vala_ccode_struct_module_real_visit_struct (ValaCodeVisitor* base, V
 	gboolean _tmp16_ = FALSE;
 	gboolean _tmp19_ = FALSE;
 	gboolean _tmp20_ = FALSE;
-	gboolean _tmp21_ = FALSE;
-	ValaCodeContext* _tmp22_;
-	ValaCodeContext* _tmp23_;
-	ValaProfile _tmp24_;
-	ValaProfile _tmp25_;
+	ValaStruct* _tmp21_;
+	gboolean _tmp22_ = FALSE;
+	gboolean _tmp25_;
 	gboolean _tmp28_;
-	gboolean _tmp31_;
-	gboolean _tmp34_;
-	ValaStruct* _tmp38_;
-	gboolean _tmp39_ = FALSE;
-	gboolean _tmp40_ = FALSE;
-	gboolean _tmp41_ = FALSE;
-	ValaCodeContext* _tmp42_;
-	ValaCodeContext* _tmp43_;
-	ValaProfile _tmp44_;
-	ValaProfile _tmp45_;
-	gboolean _tmp48_;
-	gboolean _tmp51_;
-	gboolean _tmp54_;
-	ValaCCodeBaseModuleEmitContext* _tmp61_;
-	ValaCCodeBaseModuleEmitContext* _tmp62_;
+	ValaStruct* _tmp32_;
+	gboolean _tmp33_ = FALSE;
+	gboolean _tmp34_ = FALSE;
+	ValaStruct* _tmp35_;
+	gboolean _tmp36_ = FALSE;
+	gboolean _tmp39_;
+	gboolean _tmp42_;
+	ValaCCodeBaseModuleEmitContext* _tmp49_;
+	ValaCCodeBaseModuleEmitContext* _tmp50_;
 	self = (ValaCCodeStructModule*) base;
 	g_return_if_fail (st != NULL);
 	_tmp0_ = st;
@@ -1242,111 +1230,87 @@ static void vala_ccode_struct_module_real_visit_struct (ValaCodeVisitor* base, V
 		_tmp18_ = ((ValaCCodeBaseModule*) self)->internal_header_file;
 		vala_ccode_base_module_generate_struct_declaration ((ValaCCodeBaseModule*) self, _tmp17_, _tmp18_);
 	}
-	_tmp22_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
-	_tmp23_ = _tmp22_;
-	_tmp24_ = vala_code_context_get_profile (_tmp23_);
-	_tmp25_ = _tmp24_;
-	if (_tmp25_ == VALA_PROFILE_GOBJECT) {
+	_tmp21_ = st;
+	_tmp22_ = vala_struct_is_boolean_type (_tmp21_);
+	if (!_tmp22_) {
+		ValaStruct* _tmp23_;
+		gboolean _tmp24_ = FALSE;
+		_tmp23_ = st;
+		_tmp24_ = vala_struct_is_integer_type (_tmp23_);
+		_tmp20_ = !_tmp24_;
+	} else {
+		_tmp20_ = FALSE;
+	}
+	_tmp25_ = _tmp20_;
+	if (_tmp25_) {
 		ValaStruct* _tmp26_;
 		gboolean _tmp27_ = FALSE;
 		_tmp26_ = st;
-		_tmp27_ = vala_struct_is_boolean_type (_tmp26_);
-		_tmp21_ = !_tmp27_;
+		_tmp27_ = vala_struct_is_floating_type (_tmp26_);
+		_tmp19_ = !_tmp27_;
 	} else {
-		_tmp21_ = FALSE;
+		_tmp19_ = FALSE;
 	}
-	_tmp28_ = _tmp21_;
+	_tmp28_ = _tmp19_;
 	if (_tmp28_) {
 		ValaStruct* _tmp29_;
 		gboolean _tmp30_ = FALSE;
 		_tmp29_ = st;
-		_tmp30_ = vala_struct_is_integer_type (_tmp29_);
-		_tmp20_ = !_tmp30_;
-	} else {
-		_tmp20_ = FALSE;
-	}
-	_tmp31_ = _tmp20_;
-	if (_tmp31_) {
-		ValaStruct* _tmp32_;
-		gboolean _tmp33_ = FALSE;
-		_tmp32_ = st;
-		_tmp33_ = vala_struct_is_floating_type (_tmp32_);
-		_tmp19_ = !_tmp33_;
-	} else {
-		_tmp19_ = FALSE;
-	}
-	_tmp34_ = _tmp19_;
-	if (_tmp34_) {
-		ValaStruct* _tmp35_;
-		gboolean _tmp36_ = FALSE;
-		_tmp35_ = st;
-		_tmp36_ = vala_struct_is_disposable (_tmp35_);
-		if (_tmp36_) {
-			ValaStruct* _tmp37_;
-			_tmp37_ = st;
-			vala_ccode_struct_module_begin_struct_destroy_function (self, _tmp37_);
+		_tmp30_ = vala_struct_is_disposable (_tmp29_);
+		if (_tmp30_) {
+			ValaStruct* _tmp31_;
+			_tmp31_ = st;
+			vala_ccode_struct_module_begin_struct_destroy_function (self, _tmp31_);
 		}
 	}
-	_tmp38_ = st;
-	vala_code_node_accept_children ((ValaCodeNode*) _tmp38_, (ValaCodeVisitor*) self);
-	_tmp42_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
-	_tmp43_ = _tmp42_;
-	_tmp44_ = vala_code_context_get_profile (_tmp43_);
-	_tmp45_ = _tmp44_;
-	if (_tmp45_ == VALA_PROFILE_GOBJECT) {
-		ValaStruct* _tmp46_;
-		gboolean _tmp47_ = FALSE;
-		_tmp46_ = st;
-		_tmp47_ = vala_struct_is_boolean_type (_tmp46_);
-		_tmp41_ = !_tmp47_;
-	} else {
-		_tmp41_ = FALSE;
-	}
-	_tmp48_ = _tmp41_;
-	if (_tmp48_) {
-		ValaStruct* _tmp49_;
-		gboolean _tmp50_ = FALSE;
-		_tmp49_ = st;
-		_tmp50_ = vala_struct_is_integer_type (_tmp49_);
-		_tmp40_ = !_tmp50_;
+	_tmp32_ = st;
+	vala_code_node_accept_children ((ValaCodeNode*) _tmp32_, (ValaCodeVisitor*) self);
+	_tmp35_ = st;
+	_tmp36_ = vala_struct_is_boolean_type (_tmp35_);
+	if (!_tmp36_) {
+		ValaStruct* _tmp37_;
+		gboolean _tmp38_ = FALSE;
+		_tmp37_ = st;
+		_tmp38_ = vala_struct_is_integer_type (_tmp37_);
+		_tmp34_ = !_tmp38_;
 	} else {
-		_tmp40_ = FALSE;
+		_tmp34_ = FALSE;
 	}
-	_tmp51_ = _tmp40_;
-	if (_tmp51_) {
-		ValaStruct* _tmp52_;
-		gboolean _tmp53_ = FALSE;
-		_tmp52_ = st;
-		_tmp53_ = vala_struct_is_floating_type (_tmp52_);
-		_tmp39_ = !_tmp53_;
+	_tmp39_ = _tmp34_;
+	if (_tmp39_) {
+		ValaStruct* _tmp40_;
+		gboolean _tmp41_ = FALSE;
+		_tmp40_ = st;
+		_tmp41_ = vala_struct_is_floating_type (_tmp40_);
+		_tmp33_ = !_tmp41_;
 	} else {
-		_tmp39_ = FALSE;
+		_tmp33_ = FALSE;
 	}
-	_tmp54_ = _tmp39_;
-	if (_tmp54_) {
-		ValaStruct* _tmp55_;
-		gboolean _tmp56_ = FALSE;
-		ValaStruct* _tmp59_;
-		ValaStruct* _tmp60_;
-		_tmp55_ = st;
-		_tmp56_ = vala_struct_is_disposable (_tmp55_);
-		if (_tmp56_) {
-			ValaStruct* _tmp57_;
-			ValaStruct* _tmp58_;
-			_tmp57_ = st;
-			vala_ccode_struct_module_add_struct_copy_function (self, _tmp57_);
-			_tmp58_ = st;
-			vala_ccode_struct_module_add_struct_destroy_function (self, _tmp58_);
+	_tmp42_ = _tmp33_;
+	if (_tmp42_) {
+		ValaStruct* _tmp43_;
+		gboolean _tmp44_ = FALSE;
+		ValaStruct* _tmp47_;
+		ValaStruct* _tmp48_;
+		_tmp43_ = st;
+		_tmp44_ = vala_struct_is_disposable (_tmp43_);
+		if (_tmp44_) {
+			ValaStruct* _tmp45_;
+			ValaStruct* _tmp46_;
+			_tmp45_ = st;
+			vala_ccode_struct_module_add_struct_copy_function (self, _tmp45_);
+			_tmp46_ = st;
+			vala_ccode_struct_module_add_struct_destroy_function (self, _tmp46_);
 		}
-		_tmp59_ = st;
-		vala_ccode_struct_module_add_struct_dup_function (self, _tmp59_);
-		_tmp60_ = st;
-		vala_ccode_struct_module_add_struct_free_function (self, _tmp60_);
+		_tmp47_ = st;
+		vala_ccode_struct_module_add_struct_dup_function (self, _tmp47_);
+		_tmp48_ = st;
+		vala_ccode_struct_module_add_struct_free_function (self, _tmp48_);
 	}
-	_tmp61_ = old_instance_finalize_context;
-	_tmp62_ = _vala_ccode_base_module_emit_context_ref0 (_tmp61_);
+	_tmp49_ = old_instance_finalize_context;
+	_tmp50_ = _vala_ccode_base_module_emit_context_ref0 (_tmp49_);
 	_vala_ccode_base_module_emit_context_unref0 (((ValaCCodeBaseModule*) self)->instance_finalize_context);
-	((ValaCCodeBaseModule*) self)->instance_finalize_context = _tmp62_;
+	((ValaCCodeBaseModule*) self)->instance_finalize_context = _tmp50_;
 	vala_ccode_base_module_pop_line ((ValaCCodeBaseModule*) self);
 	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
 	_vala_ccode_base_module_emit_context_unref0 (old_instance_finalize_context);
@@ -1388,33 +1352,18 @@ static void vala_ccode_struct_module_add_struct_dup_function (ValaCCodeStructMod
 	gchar* _tmp31_;
 	ValaCCodeVariableDeclarator* _tmp32_;
 	ValaCCodeVariableDeclarator* _tmp33_;
-	ValaCCodeIdentifier* _tmp34_;
-	ValaCCodeIdentifier* _tmp35_;
-	ValaCCodeFunctionCall* _tmp36_;
-	ValaCCodeFunctionCall* _tmp37_;
-	ValaCCodeFunctionCall* creation_call;
-	ValaCCodeFunctionCall* _tmp38_;
-	ValaStruct* _tmp39_;
-	gchar* _tmp40_ = NULL;
-	gchar* _tmp41_;
-	ValaCCodeConstant* _tmp42_;
-	ValaCCodeConstant* _tmp43_;
-	ValaCCodeFunctionCall* _tmp44_;
-	ValaCCodeConstant* _tmp45_;
-	ValaCCodeConstant* _tmp46_;
-	ValaCCodeFunction* _tmp47_;
-	ValaCCodeFunction* _tmp48_;
-	ValaCCodeIdentifier* _tmp49_;
-	ValaCCodeIdentifier* _tmp50_;
-	ValaCCodeFunctionCall* _tmp51_;
-	ValaStruct* _tmp52_;
-	gboolean _tmp53_ = FALSE;
-	ValaCCodeFunction* _tmp96_;
-	ValaCCodeFunction* _tmp97_;
-	ValaCCodeIdentifier* _tmp98_;
-	ValaCCodeIdentifier* _tmp99_;
-	ValaCCodeFile* _tmp100_;
-	ValaCCodeFunction* _tmp101_;
+	ValaCodeContext* _tmp34_;
+	ValaCodeContext* _tmp35_;
+	ValaProfile _tmp36_;
+	ValaProfile _tmp37_;
+	ValaStruct* _tmp80_;
+	gboolean _tmp81_ = FALSE;
+	ValaCCodeFunction* _tmp124_;
+	ValaCCodeFunction* _tmp125_;
+	ValaCCodeIdentifier* _tmp126_;
+	ValaCCodeIdentifier* _tmp127_;
+	ValaCCodeFile* _tmp128_;
+	ValaCCodeFunction* _tmp129_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (st != NULL);
 	_tmp0_ = st;
@@ -1469,161 +1418,249 @@ static void vala_ccode_struct_module_add_struct_dup_function (ValaCCodeStructMod
 	_vala_ccode_node_unref0 (_tmp33_);
 	_g_free0 (_tmp31_);
 	_g_free0 (_tmp29_);
-	_tmp34_ = vala_ccode_identifier_new ("g_new0");
+	_tmp34_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
 	_tmp35_ = _tmp34_;
-	_tmp36_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp35_);
+	_tmp36_ = vala_code_context_get_profile (_tmp35_);
 	_tmp37_ = _tmp36_;
-	_vala_ccode_node_unref0 (_tmp35_);
-	creation_call = _tmp37_;
-	_tmp38_ = creation_call;
-	_tmp39_ = st;
-	_tmp40_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp39_);
-	_tmp41_ = _tmp40_;
-	_tmp42_ = vala_ccode_constant_new (_tmp41_);
-	_tmp43_ = _tmp42_;
-	vala_ccode_function_call_add_argument (_tmp38_, (ValaCCodeExpression*) _tmp43_);
-	_vala_ccode_node_unref0 (_tmp43_);
-	_g_free0 (_tmp41_);
-	_tmp44_ = creation_call;
-	_tmp45_ = vala_ccode_constant_new ("1");
-	_tmp46_ = _tmp45_;
-	vala_ccode_function_call_add_argument (_tmp44_, (ValaCCodeExpression*) _tmp46_);
-	_vala_ccode_node_unref0 (_tmp46_);
-	_tmp47_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-	_tmp48_ = _tmp47_;
-	_tmp49_ = vala_ccode_identifier_new ("dup");
-	_tmp50_ = _tmp49_;
-	_tmp51_ = creation_call;
-	vala_ccode_function_add_assignment (_tmp48_, (ValaCCodeExpression*) _tmp50_, (ValaCCodeExpression*) _tmp51_);
-	_vala_ccode_node_unref0 (_tmp50_);
-	_tmp52_ = st;
-	_tmp53_ = vala_struct_is_disposable (_tmp52_);
-	if (_tmp53_) {
-		ValaStruct* _tmp54_;
-		gchar* _tmp55_ = NULL;
-		gchar* _tmp56_;
-		ValaCCodeIdentifier* _tmp57_;
-		ValaCCodeIdentifier* _tmp58_;
-		ValaCCodeFunctionCall* _tmp59_;
-		ValaCCodeFunctionCall* _tmp60_;
-		ValaCCodeFunctionCall* copy_call;
-		ValaCCodeFunctionCall* _tmp61_;
-		ValaCCodeIdentifier* _tmp62_;
-		ValaCCodeIdentifier* _tmp63_;
-		ValaCCodeFunctionCall* _tmp64_;
-		ValaCCodeIdentifier* _tmp65_;
-		ValaCCodeIdentifier* _tmp66_;
-		ValaCCodeFunction* _tmp67_;
-		ValaCCodeFunction* _tmp68_;
-		ValaCCodeFunctionCall* _tmp69_;
-		_tmp54_ = st;
-		_tmp55_ = vala_ccode_base_module_get_ccode_copy_function ((ValaTypeSymbol*) _tmp54_);
-		_tmp56_ = _tmp55_;
-		_tmp57_ = vala_ccode_identifier_new (_tmp56_);
-		_tmp58_ = _tmp57_;
-		_tmp59_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp58_);
-		_tmp60_ = _tmp59_;
-		_vala_ccode_node_unref0 (_tmp58_);
-		_g_free0 (_tmp56_);
-		copy_call = _tmp60_;
-		_tmp61_ = copy_call;
-		_tmp62_ = vala_ccode_identifier_new ("self");
-		_tmp63_ = _tmp62_;
-		vala_ccode_function_call_add_argument (_tmp61_, (ValaCCodeExpression*) _tmp63_);
-		_vala_ccode_node_unref0 (_tmp63_);
-		_tmp64_ = copy_call;
-		_tmp65_ = vala_ccode_identifier_new ("dup");
-		_tmp66_ = _tmp65_;
-		vala_ccode_function_call_add_argument (_tmp64_, (ValaCCodeExpression*) _tmp66_);
-		_vala_ccode_node_unref0 (_tmp66_);
-		_tmp67_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-		_tmp68_ = _tmp67_;
-		_tmp69_ = copy_call;
-		vala_ccode_function_add_expression (_tmp68_, (ValaCCodeExpression*) _tmp69_);
-		_vala_ccode_node_unref0 (copy_call);
+	if (_tmp37_ == VALA_PROFILE_GOBJECT) {
+		ValaCCodeIdentifier* _tmp38_;
+		ValaCCodeIdentifier* _tmp39_;
+		ValaCCodeFunctionCall* _tmp40_;
+		ValaCCodeFunctionCall* _tmp41_;
+		ValaCCodeFunctionCall* creation_call;
+		ValaCCodeFunctionCall* _tmp42_;
+		ValaStruct* _tmp43_;
+		gchar* _tmp44_ = NULL;
+		gchar* _tmp45_;
+		ValaCCodeConstant* _tmp46_;
+		ValaCCodeConstant* _tmp47_;
+		ValaCCodeFunctionCall* _tmp48_;
+		ValaCCodeConstant* _tmp49_;
+		ValaCCodeConstant* _tmp50_;
+		ValaCCodeFunction* _tmp51_;
+		ValaCCodeFunction* _tmp52_;
+		ValaCCodeIdentifier* _tmp53_;
+		ValaCCodeIdentifier* _tmp54_;
+		ValaCCodeFunctionCall* _tmp55_;
+		_tmp38_ = vala_ccode_identifier_new ("g_new0");
+		_tmp39_ = _tmp38_;
+		_tmp40_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp39_);
+		_tmp41_ = _tmp40_;
+		_vala_ccode_node_unref0 (_tmp39_);
+		creation_call = _tmp41_;
+		_tmp42_ = creation_call;
+		_tmp43_ = st;
+		_tmp44_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp43_);
+		_tmp45_ = _tmp44_;
+		_tmp46_ = vala_ccode_constant_new (_tmp45_);
+		_tmp47_ = _tmp46_;
+		vala_ccode_function_call_add_argument (_tmp42_, (ValaCCodeExpression*) _tmp47_);
+		_vala_ccode_node_unref0 (_tmp47_);
+		_g_free0 (_tmp45_);
+		_tmp48_ = creation_call;
+		_tmp49_ = vala_ccode_constant_new ("1");
+		_tmp50_ = _tmp49_;
+		vala_ccode_function_call_add_argument (_tmp48_, (ValaCCodeExpression*) _tmp50_);
+		_vala_ccode_node_unref0 (_tmp50_);
+		_tmp51_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp52_ = _tmp51_;
+		_tmp53_ = vala_ccode_identifier_new ("dup");
+		_tmp54_ = _tmp53_;
+		_tmp55_ = creation_call;
+		vala_ccode_function_add_assignment (_tmp52_, (ValaCCodeExpression*) _tmp54_, (ValaCCodeExpression*) _tmp55_);
+		_vala_ccode_node_unref0 (_tmp54_);
+		_vala_ccode_node_unref0 (creation_call);
 	} else {
-		ValaCCodeFile* _tmp70_;
-		ValaCCodeIdentifier* _tmp71_;
-		ValaCCodeIdentifier* _tmp72_;
-		ValaCCodeFunctionCall* _tmp73_;
-		ValaCCodeFunctionCall* _tmp74_;
-		ValaCCodeFunctionCall* sizeof_call;
-		ValaCCodeFunctionCall* _tmp75_;
-		ValaStruct* _tmp76_;
-		gchar* _tmp77_ = NULL;
-		gchar* _tmp78_;
-		ValaCCodeConstant* _tmp79_;
-		ValaCCodeConstant* _tmp80_;
-		ValaCCodeIdentifier* _tmp81_;
-		ValaCCodeIdentifier* _tmp82_;
-		ValaCCodeFunctionCall* _tmp83_;
-		ValaCCodeFunctionCall* _tmp84_;
-		ValaCCodeFunctionCall* copy_call;
-		ValaCCodeFunctionCall* _tmp85_;
+		ValaCodeContext* _tmp56_;
+		ValaCodeContext* _tmp57_;
+		ValaProfile _tmp58_;
+		ValaProfile _tmp59_;
+		_tmp56_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
+		_tmp57_ = _tmp56_;
+		_tmp58_ = vala_code_context_get_profile (_tmp57_);
+		_tmp59_ = _tmp58_;
+		if (_tmp59_ == VALA_PROFILE_POSIX) {
+			ValaCCodeIdentifier* _tmp60_;
+			ValaCCodeIdentifier* _tmp61_;
+			ValaCCodeFunctionCall* _tmp62_;
+			ValaCCodeFunctionCall* _tmp63_;
+			ValaCCodeFunctionCall* creation_call;
+			ValaCCodeFunctionCall* _tmp64_;
+			ValaCCodeConstant* _tmp65_;
+			ValaCCodeConstant* _tmp66_;
+			ValaCCodeFunctionCall* _tmp67_;
+			ValaStruct* _tmp68_;
+			gchar* _tmp69_ = NULL;
+			gchar* _tmp70_;
+			gchar* _tmp71_ = NULL;
+			gchar* _tmp72_;
+			ValaCCodeIdentifier* _tmp73_;
+			ValaCCodeIdentifier* _tmp74_;
+			ValaCCodeFunction* _tmp75_;
+			ValaCCodeFunction* _tmp76_;
+			ValaCCodeIdentifier* _tmp77_;
+			ValaCCodeIdentifier* _tmp78_;
+			ValaCCodeFunctionCall* _tmp79_;
+			_tmp60_ = vala_ccode_identifier_new ("calloc");
+			_tmp61_ = _tmp60_;
+			_tmp62_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp61_);
+			_tmp63_ = _tmp62_;
+			_vala_ccode_node_unref0 (_tmp61_);
+			creation_call = _tmp63_;
+			_tmp64_ = creation_call;
+			_tmp65_ = vala_ccode_constant_new ("1");
+			_tmp66_ = _tmp65_;
+			vala_ccode_function_call_add_argument (_tmp64_, (ValaCCodeExpression*) _tmp66_);
+			_vala_ccode_node_unref0 (_tmp66_);
+			_tmp67_ = creation_call;
+			_tmp68_ = st;
+			_tmp69_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp68_);
+			_tmp70_ = _tmp69_;
+			_tmp71_ = g_strdup_printf ("sizeof (%s*)", _tmp70_);
+			_tmp72_ = _tmp71_;
+			_tmp73_ = vala_ccode_identifier_new (_tmp72_);
+			_tmp74_ = _tmp73_;
+			vala_ccode_function_call_add_argument (_tmp67_, (ValaCCodeExpression*) _tmp74_);
+			_vala_ccode_node_unref0 (_tmp74_);
+			_g_free0 (_tmp72_);
+			_g_free0 (_tmp70_);
+			_tmp75_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp76_ = _tmp75_;
+			_tmp77_ = vala_ccode_identifier_new ("dup");
+			_tmp78_ = _tmp77_;
+			_tmp79_ = creation_call;
+			vala_ccode_function_add_assignment (_tmp76_, (ValaCCodeExpression*) _tmp78_, (ValaCCodeExpression*) _tmp79_);
+			_vala_ccode_node_unref0 (_tmp78_);
+			_vala_ccode_node_unref0 (creation_call);
+		}
+	}
+	_tmp80_ = st;
+	_tmp81_ = vala_struct_is_disposable (_tmp80_);
+	if (_tmp81_) {
+		ValaStruct* _tmp82_;
+		gchar* _tmp83_ = NULL;
+		gchar* _tmp84_;
+		ValaCCodeIdentifier* _tmp85_;
 		ValaCCodeIdentifier* _tmp86_;
-		ValaCCodeIdentifier* _tmp87_;
+		ValaCCodeFunctionCall* _tmp87_;
 		ValaCCodeFunctionCall* _tmp88_;
-		ValaCCodeIdentifier* _tmp89_;
+		ValaCCodeFunctionCall* copy_call;
+		ValaCCodeFunctionCall* _tmp89_;
 		ValaCCodeIdentifier* _tmp90_;
-		ValaCCodeFunctionCall* _tmp91_;
+		ValaCCodeIdentifier* _tmp91_;
 		ValaCCodeFunctionCall* _tmp92_;
-		ValaCCodeFunction* _tmp93_;
-		ValaCCodeFunction* _tmp94_;
-		ValaCCodeFunctionCall* _tmp95_;
-		_tmp70_ = ((ValaCCodeBaseModule*) self)->cfile;
-		vala_ccode_file_add_include (_tmp70_, "string.h", FALSE);
-		_tmp71_ = vala_ccode_identifier_new ("sizeof");
-		_tmp72_ = _tmp71_;
-		_tmp73_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp72_);
-		_tmp74_ = _tmp73_;
-		_vala_ccode_node_unref0 (_tmp72_);
-		sizeof_call = _tmp74_;
-		_tmp75_ = sizeof_call;
-		_tmp76_ = st;
-		_tmp77_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp76_);
-		_tmp78_ = _tmp77_;
-		_tmp79_ = vala_ccode_constant_new (_tmp78_);
-		_tmp80_ = _tmp79_;
-		vala_ccode_function_call_add_argument (_tmp75_, (ValaCCodeExpression*) _tmp80_);
-		_vala_ccode_node_unref0 (_tmp80_);
-		_g_free0 (_tmp78_);
-		_tmp81_ = vala_ccode_identifier_new ("memcpy");
-		_tmp82_ = _tmp81_;
-		_tmp83_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp82_);
+		ValaCCodeIdentifier* _tmp93_;
+		ValaCCodeIdentifier* _tmp94_;
+		ValaCCodeFunction* _tmp95_;
+		ValaCCodeFunction* _tmp96_;
+		ValaCCodeFunctionCall* _tmp97_;
+		_tmp82_ = st;
+		_tmp83_ = vala_ccode_base_module_get_ccode_copy_function ((ValaTypeSymbol*) _tmp82_);
 		_tmp84_ = _tmp83_;
-		_vala_ccode_node_unref0 (_tmp82_);
-		copy_call = _tmp84_;
-		_tmp85_ = copy_call;
-		_tmp86_ = vala_ccode_identifier_new ("dup");
-		_tmp87_ = _tmp86_;
-		vala_ccode_function_call_add_argument (_tmp85_, (ValaCCodeExpression*) _tmp87_);
-		_vala_ccode_node_unref0 (_tmp87_);
-		_tmp88_ = copy_call;
-		_tmp89_ = vala_ccode_identifier_new ("self");
-		_tmp90_ = _tmp89_;
-		vala_ccode_function_call_add_argument (_tmp88_, (ValaCCodeExpression*) _tmp90_);
-		_vala_ccode_node_unref0 (_tmp90_);
-		_tmp91_ = copy_call;
-		_tmp92_ = sizeof_call;
-		vala_ccode_function_call_add_argument (_tmp91_, (ValaCCodeExpression*) _tmp92_);
-		_tmp93_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp85_ = vala_ccode_identifier_new (_tmp84_);
+		_tmp86_ = _tmp85_;
+		_tmp87_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp86_);
+		_tmp88_ = _tmp87_;
+		_vala_ccode_node_unref0 (_tmp86_);
+		_g_free0 (_tmp84_);
+		copy_call = _tmp88_;
+		_tmp89_ = copy_call;
+		_tmp90_ = vala_ccode_identifier_new ("self");
+		_tmp91_ = _tmp90_;
+		vala_ccode_function_call_add_argument (_tmp89_, (ValaCCodeExpression*) _tmp91_);
+		_vala_ccode_node_unref0 (_tmp91_);
+		_tmp92_ = copy_call;
+		_tmp93_ = vala_ccode_identifier_new ("dup");
 		_tmp94_ = _tmp93_;
-		_tmp95_ = copy_call;
-		vala_ccode_function_add_expression (_tmp94_, (ValaCCodeExpression*) _tmp95_);
+		vala_ccode_function_call_add_argument (_tmp92_, (ValaCCodeExpression*) _tmp94_);
+		_vala_ccode_node_unref0 (_tmp94_);
+		_tmp95_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp96_ = _tmp95_;
+		_tmp97_ = copy_call;
+		vala_ccode_function_add_expression (_tmp96_, (ValaCCodeExpression*) _tmp97_);
+		_vala_ccode_node_unref0 (copy_call);
+	} else {
+		ValaCCodeFile* _tmp98_;
+		ValaCCodeIdentifier* _tmp99_;
+		ValaCCodeIdentifier* _tmp100_;
+		ValaCCodeFunctionCall* _tmp101_;
+		ValaCCodeFunctionCall* _tmp102_;
+		ValaCCodeFunctionCall* sizeof_call;
+		ValaCCodeFunctionCall* _tmp103_;
+		ValaStruct* _tmp104_;
+		gchar* _tmp105_ = NULL;
+		gchar* _tmp106_;
+		ValaCCodeConstant* _tmp107_;
+		ValaCCodeConstant* _tmp108_;
+		ValaCCodeIdentifier* _tmp109_;
+		ValaCCodeIdentifier* _tmp110_;
+		ValaCCodeFunctionCall* _tmp111_;
+		ValaCCodeFunctionCall* _tmp112_;
+		ValaCCodeFunctionCall* copy_call;
+		ValaCCodeFunctionCall* _tmp113_;
+		ValaCCodeIdentifier* _tmp114_;
+		ValaCCodeIdentifier* _tmp115_;
+		ValaCCodeFunctionCall* _tmp116_;
+		ValaCCodeIdentifier* _tmp117_;
+		ValaCCodeIdentifier* _tmp118_;
+		ValaCCodeFunctionCall* _tmp119_;
+		ValaCCodeFunctionCall* _tmp120_;
+		ValaCCodeFunction* _tmp121_;
+		ValaCCodeFunction* _tmp122_;
+		ValaCCodeFunctionCall* _tmp123_;
+		_tmp98_ = ((ValaCCodeBaseModule*) self)->cfile;
+		vala_ccode_file_add_include (_tmp98_, "string.h", FALSE);
+		_tmp99_ = vala_ccode_identifier_new ("sizeof");
+		_tmp100_ = _tmp99_;
+		_tmp101_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp100_);
+		_tmp102_ = _tmp101_;
+		_vala_ccode_node_unref0 (_tmp100_);
+		sizeof_call = _tmp102_;
+		_tmp103_ = sizeof_call;
+		_tmp104_ = st;
+		_tmp105_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp104_);
+		_tmp106_ = _tmp105_;
+		_tmp107_ = vala_ccode_constant_new (_tmp106_);
+		_tmp108_ = _tmp107_;
+		vala_ccode_function_call_add_argument (_tmp103_, (ValaCCodeExpression*) _tmp108_);
+		_vala_ccode_node_unref0 (_tmp108_);
+		_g_free0 (_tmp106_);
+		_tmp109_ = vala_ccode_identifier_new ("memcpy");
+		_tmp110_ = _tmp109_;
+		_tmp111_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp110_);
+		_tmp112_ = _tmp111_;
+		_vala_ccode_node_unref0 (_tmp110_);
+		copy_call = _tmp112_;
+		_tmp113_ = copy_call;
+		_tmp114_ = vala_ccode_identifier_new ("dup");
+		_tmp115_ = _tmp114_;
+		vala_ccode_function_call_add_argument (_tmp113_, (ValaCCodeExpression*) _tmp115_);
+		_vala_ccode_node_unref0 (_tmp115_);
+		_tmp116_ = copy_call;
+		_tmp117_ = vala_ccode_identifier_new ("self");
+		_tmp118_ = _tmp117_;
+		vala_ccode_function_call_add_argument (_tmp116_, (ValaCCodeExpression*) _tmp118_);
+		_vala_ccode_node_unref0 (_tmp118_);
+		_tmp119_ = copy_call;
+		_tmp120_ = sizeof_call;
+		vala_ccode_function_call_add_argument (_tmp119_, (ValaCCodeExpression*) _tmp120_);
+		_tmp121_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp122_ = _tmp121_;
+		_tmp123_ = copy_call;
+		vala_ccode_function_add_expression (_tmp122_, (ValaCCodeExpression*) _tmp123_);
 		_vala_ccode_node_unref0 (copy_call);
 		_vala_ccode_node_unref0 (sizeof_call);
 	}
-	_tmp96_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-	_tmp97_ = _tmp96_;
-	_tmp98_ = vala_ccode_identifier_new ("dup");
-	_tmp99_ = _tmp98_;
-	vala_ccode_function_add_return (_tmp97_, (ValaCCodeExpression*) _tmp99_);
-	_vala_ccode_node_unref0 (_tmp99_);
+	_tmp124_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+	_tmp125_ = _tmp124_;
+	_tmp126_ = vala_ccode_identifier_new ("dup");
+	_tmp127_ = _tmp126_;
+	vala_ccode_function_add_return (_tmp125_, (ValaCCodeExpression*) _tmp127_);
+	_vala_ccode_node_unref0 (_tmp127_);
 	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
-	_tmp100_ = ((ValaCCodeBaseModule*) self)->cfile;
-	_tmp101_ = function;
-	vala_ccode_file_add_function (_tmp100_, _tmp101_);
-	_vala_ccode_node_unref0 (creation_call);
+	_tmp128_ = ((ValaCCodeBaseModule*) self)->cfile;
+	_tmp129_ = function;
+	vala_ccode_file_add_function (_tmp128_, _tmp129_);
 	_vala_ccode_node_unref0 (function);
 }
 
@@ -1649,17 +1686,12 @@ static void vala_ccode_struct_module_add_struct_free_function (ValaCCodeStructMo
 	ValaCCodeFunction* _tmp17_;
 	ValaStruct* _tmp18_;
 	gboolean _tmp19_ = FALSE;
-	ValaCCodeIdentifier* _tmp33_;
-	ValaCCodeIdentifier* _tmp34_;
-	ValaCCodeFunctionCall* _tmp35_;
-	ValaCCodeFunctionCall* _tmp36_;
-	ValaCCodeFunctionCall* free_call;
-	ValaCCodeIdentifier* _tmp37_;
-	ValaCCodeIdentifier* _tmp38_;
-	ValaCCodeFunction* _tmp39_;
-	ValaCCodeFunction* _tmp40_;
-	ValaCCodeFile* _tmp41_;
-	ValaCCodeFunction* _tmp42_;
+	ValaCodeContext* _tmp33_;
+	ValaCodeContext* _tmp34_;
+	ValaProfile _tmp35_;
+	ValaProfile _tmp36_;
+	ValaCCodeFile* _tmp61_;
+	ValaCCodeFunction* _tmp62_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (st != NULL);
 	_tmp0_ = st;
@@ -1729,24 +1761,81 @@ static void vala_ccode_struct_module_add_struct_free_function (ValaCCodeStructMo
 		vala_ccode_function_add_expression (_tmp31_, (ValaCCodeExpression*) _tmp32_);
 		_vala_ccode_node_unref0 (destroy_call);
 	}
-	_tmp33_ = vala_ccode_identifier_new ("g_free");
+	_tmp33_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
 	_tmp34_ = _tmp33_;
-	_tmp35_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp34_);
+	_tmp35_ = vala_code_context_get_profile (_tmp34_);
 	_tmp36_ = _tmp35_;
-	_vala_ccode_node_unref0 (_tmp34_);
-	free_call = _tmp36_;
-	_tmp37_ = vala_ccode_identifier_new ("self");
-	_tmp38_ = _tmp37_;
-	vala_ccode_function_call_add_argument (free_call, (ValaCCodeExpression*) _tmp38_);
-	_vala_ccode_node_unref0 (_tmp38_);
-	_tmp39_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-	_tmp40_ = _tmp39_;
-	vala_ccode_function_add_expression (_tmp40_, (ValaCCodeExpression*) free_call);
+	if (_tmp36_ == VALA_PROFILE_GOBJECT) {
+		ValaCCodeIdentifier* _tmp37_;
+		ValaCCodeIdentifier* _tmp38_;
+		ValaCCodeFunctionCall* _tmp39_;
+		ValaCCodeFunctionCall* _tmp40_;
+		ValaCCodeFunctionCall* free_call;
+		ValaCCodeFunctionCall* _tmp41_;
+		ValaCCodeIdentifier* _tmp42_;
+		ValaCCodeIdentifier* _tmp43_;
+		ValaCCodeFunction* _tmp44_;
+		ValaCCodeFunction* _tmp45_;
+		ValaCCodeFunctionCall* _tmp46_;
+		_tmp37_ = vala_ccode_identifier_new ("g_free");
+		_tmp38_ = _tmp37_;
+		_tmp39_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp38_);
+		_tmp40_ = _tmp39_;
+		_vala_ccode_node_unref0 (_tmp38_);
+		free_call = _tmp40_;
+		_tmp41_ = free_call;
+		_tmp42_ = vala_ccode_identifier_new ("self");
+		_tmp43_ = _tmp42_;
+		vala_ccode_function_call_add_argument (_tmp41_, (ValaCCodeExpression*) _tmp43_);
+		_vala_ccode_node_unref0 (_tmp43_);
+		_tmp44_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp45_ = _tmp44_;
+		_tmp46_ = free_call;
+		vala_ccode_function_add_expression (_tmp45_, (ValaCCodeExpression*) _tmp46_);
+		_vala_ccode_node_unref0 (free_call);
+	} else {
+		ValaCodeContext* _tmp47_;
+		ValaCodeContext* _tmp48_;
+		ValaProfile _tmp49_;
+		ValaProfile _tmp50_;
+		_tmp47_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
+		_tmp48_ = _tmp47_;
+		_tmp49_ = vala_code_context_get_profile (_tmp48_);
+		_tmp50_ = _tmp49_;
+		if (_tmp50_ == VALA_PROFILE_POSIX) {
+			ValaCCodeIdentifier* _tmp51_;
+			ValaCCodeIdentifier* _tmp52_;
+			ValaCCodeFunctionCall* _tmp53_;
+			ValaCCodeFunctionCall* _tmp54_;
+			ValaCCodeFunctionCall* free_call;
+			ValaCCodeFunctionCall* _tmp55_;
+			ValaCCodeIdentifier* _tmp56_;
+			ValaCCodeIdentifier* _tmp57_;
+			ValaCCodeFunction* _tmp58_;
+			ValaCCodeFunction* _tmp59_;
+			ValaCCodeFunctionCall* _tmp60_;
+			_tmp51_ = vala_ccode_identifier_new ("free");
+			_tmp52_ = _tmp51_;
+			_tmp53_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp52_);
+			_tmp54_ = _tmp53_;
+			_vala_ccode_node_unref0 (_tmp52_);
+			free_call = _tmp54_;
+			_tmp55_ = free_call;
+			_tmp56_ = vala_ccode_identifier_new ("self");
+			_tmp57_ = _tmp56_;
+			vala_ccode_function_call_add_argument (_tmp55_, (ValaCCodeExpression*) _tmp57_);
+			_vala_ccode_node_unref0 (_tmp57_);
+			_tmp58_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp59_ = _tmp58_;
+			_tmp60_ = free_call;
+			vala_ccode_function_add_expression (_tmp59_, (ValaCCodeExpression*) _tmp60_);
+			_vala_ccode_node_unref0 (free_call);
+		}
+	}
 	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
-	_tmp41_ = ((ValaCCodeBaseModule*) self)->cfile;
-	_tmp42_ = function;
-	vala_ccode_file_add_function (_tmp41_, _tmp42_);
-	_vala_ccode_node_unref0 (free_call);
+	_tmp61_ = ((ValaCCodeBaseModule*) self)->cfile;
+	_tmp62_ = function;
+	vala_ccode_file_add_function (_tmp61_, _tmp62_);
 	_vala_ccode_node_unref0 (function);
 }
 
diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala
index b21829b..ec258d5 100644
--- a/codegen/valaccodestructmodule.vala
+++ b/codegen/valaccodestructmodule.vala
@@ -90,7 +90,7 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
 					var delegate_type = (DelegateType) f.variable_type;
 					if (delegate_type.delegate_symbol.has_target) {
 						// create field to store delegate target
-						instance_struct.add_field ("gpointer", get_delegate_target_cname (f.name));
+						instance_struct.add_field ("gpointer", get_ccode_delegate_target_name (f));
 						if (delegate_type.value_owned) {
 							instance_struct.add_field ("GDestroyNotify", get_delegate_target_destroy_notify_cname (f.name));
 						}
@@ -155,7 +155,7 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
 			generate_struct_declaration (st, internal_header_file);
 		}
 
-		if (context.profile == Profile.GOBJECT && !st.is_boolean_type () && !st.is_integer_type () && !st.is_floating_type ()) {
+		if (!st.is_boolean_type () && !st.is_integer_type () && !st.is_floating_type ()) {
 			if (st.is_disposable ()) {
 				begin_struct_destroy_function (st);
 			}
@@ -163,7 +163,7 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
 
 		st.accept_children (this);
 
-		if (context.profile == Profile.GOBJECT && !st.is_boolean_type () && !st.is_integer_type () && !st.is_floating_type ()) {
+		if (!st.is_boolean_type () && !st.is_integer_type () && !st.is_floating_type ()) {
 			if (st.is_disposable ()) {
 				add_struct_copy_function (st);
 				add_struct_destroy_function (st);
@@ -191,10 +191,17 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
 
 		ccode.add_declaration (get_ccode_name (st) + "*", new CCodeVariableDeclarator ("dup"));
 
-		var creation_call = new CCodeFunctionCall (new CCodeIdentifier ("g_new0"));
-		creation_call.add_argument (new CCodeConstant (get_ccode_name (st)));
-		creation_call.add_argument (new CCodeConstant ("1"));
-		ccode.add_assignment (new CCodeIdentifier ("dup"), creation_call);
+		if (context.profile == Profile.GOBJECT) {
+			var creation_call = new CCodeFunctionCall (new CCodeIdentifier ("g_new0"));
+			creation_call.add_argument (new CCodeConstant (get_ccode_name (st)));
+			creation_call.add_argument (new CCodeConstant ("1"));
+			ccode.add_assignment (new CCodeIdentifier ("dup"), creation_call);
+		} else if (context.profile == Profile.POSIX) {
+			var creation_call = new CCodeFunctionCall (new CCodeIdentifier ("calloc"));
+			creation_call.add_argument (new CCodeConstant ("1"));
+			creation_call.add_argument (new CCodeIdentifier ("sizeof (%s*)".printf (get_ccode_name (st))));
+			ccode.add_assignment (new CCodeIdentifier ("dup"), creation_call);
+		}
 
 		if (st.is_disposable ()) {
 			var copy_call = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_copy_function (st)));
@@ -237,9 +244,15 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
 			ccode.add_expression (destroy_call);
 		}
 
-		var free_call = new CCodeFunctionCall (new CCodeIdentifier ("g_free"));
-		free_call.add_argument (new CCodeIdentifier ("self"));
-		ccode.add_expression (free_call);
+		if (context.profile == Profile.GOBJECT) {
+			var free_call = new CCodeFunctionCall (new CCodeIdentifier ("g_free"));
+			free_call.add_argument (new CCodeIdentifier ("self"));
+			ccode.add_expression (free_call);
+		} else if (context.profile == Profile.POSIX) {
+			var free_call = new CCodeFunctionCall (new CCodeIdentifier ("free"));
+			free_call.add_argument (new CCodeIdentifier ("self"));
+			ccode.add_expression (free_call);
+		}
 
 		pop_function ();
 
diff --git a/codegen/valacodegen.h b/codegen/valacodegen.h
index 5fc2cdb..373f4fa 100644
--- a/codegen/valacodegen.h
+++ b/codegen/valacodegen.h
@@ -1075,6 +1075,23 @@ struct _ValaGIRWriter {
 
 struct _ValaGIRWriterClass {
 	ValaCodeVisitorClass parent_class;
+	gchar* (*get_interface_comment) (ValaGIRWriter* self, ValaInterface* iface);
+	gchar* (*get_struct_comment) (ValaGIRWriter* self, ValaStruct* st);
+	gchar* (*get_enum_comment) (ValaGIRWriter* self, ValaEnum* en);
+	gchar* (*get_class_comment) (ValaGIRWriter* self, ValaClass* c);
+	gchar* (*get_error_code_comment) (ValaGIRWriter* self, ValaErrorCode* ecode);
+	gchar* (*get_enum_value_comment) (ValaGIRWriter* self, ValaEnumValue* ev);
+	gchar* (*get_constant_comment) (ValaGIRWriter* self, ValaConstant* c);
+	gchar* (*get_error_domain_comment) (ValaGIRWriter* self, ValaErrorDomain* edomain);
+	gchar* (*get_field_comment) (ValaGIRWriter* self, ValaField* f);
+	gchar* (*get_delegate_comment) (ValaGIRWriter* self, ValaDelegate* cb);
+	gchar* (*get_method_comment) (ValaGIRWriter* self, ValaMethod* m);
+	gchar* (*get_property_comment) (ValaGIRWriter* self, ValaProperty* prop);
+	gchar* (*get_delegate_return_comment) (ValaGIRWriter* self, ValaDelegate* cb);
+	gchar* (*get_signal_return_comment) (ValaGIRWriter* self, ValaSignal* sig);
+	gchar* (*get_method_return_comment) (ValaGIRWriter* self, ValaMethod* m);
+	gchar* (*get_signal_comment) (ValaGIRWriter* self, ValaSignal* sig);
+	gchar* (*get_parameter_comment) (ValaGIRWriter* self, ValaParameter* param);
 };
 
 struct _ValaInterfaceRegisterFunction {
@@ -1133,6 +1150,7 @@ const gchar* vala_ccode_attribute_get_ref_sink_function (ValaCCodeAttribute* sel
 const gchar* vala_ccode_attribute_get_copy_function (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_destroy_function (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_free_function (ValaCCodeAttribute* self);
+gboolean vala_ccode_attribute_get_free_function_address_of (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_type_id (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_marshaller_type_name (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_get_value_function (ValaCCodeAttribute* self);
@@ -1146,6 +1164,7 @@ const gchar* vala_ccode_attribute_get_vfunc_name (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_finish_name (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_finish_vfunc_name (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_finish_real_name (ValaCCodeAttribute* self);
+const gchar* vala_ccode_attribute_get_delegate_target_name (ValaCCodeAttribute* self);
 gboolean vala_ccode_attribute_get_array_length (ValaCCodeAttribute* self);
 const gchar* vala_ccode_attribute_get_array_length_type (ValaCCodeAttribute* self);
 gboolean vala_ccode_attribute_get_array_null_terminated (ValaCCodeAttribute* self);
@@ -1184,11 +1203,13 @@ void vala_ccode_base_module_generate_delegate_declaration (ValaCCodeBaseModule*
 void vala_ccode_base_module_generate_cparameters (ValaCCodeBaseModule* self, ValaMethod* m, ValaCCodeFile* decl_space, ValaMap* cparam_map, ValaCCodeFunction* func, ValaCCodeFunctionDeclarator* vdeclarator, ValaMap* carg_map, ValaCCodeFunctionCall* vcall, gint direction);
 void vala_ccode_base_module_generate_property_accessor_declaration (ValaCCodeBaseModule* self, ValaPropertyAccessor* acc, ValaCCodeFile* decl_space);
 gint vala_ccode_base_module_get_block_id (ValaCCodeBaseModule* self, ValaBlock* b);
+gboolean vala_ccode_base_module_no_implicit_copy (ValaCCodeBaseModule* self, ValaDataType* type);
 ValaCCodeExpression* vala_ccode_base_module_get_local_cexpression (ValaCCodeBaseModule* self, ValaLocalVariable* local);
 ValaCCodeExpression* vala_ccode_base_module_get_variable_cexpression (ValaCCodeBaseModule* self, const gchar* name);
 gchar* vala_ccode_base_module_get_local_cname (ValaCCodeBaseModule* self, ValaLocalVariable* local);
 gchar* vala_ccode_base_module_get_variable_cname (ValaCCodeBaseModule* self, const gchar* name);
 ValaCCodeExpression* vala_ccode_base_module_get_result_cexpression (ValaCCodeBaseModule* self, const gchar* cname);
+gboolean vala_ccode_base_module_is_simple_struct_creation (ValaCCodeBaseModule* self, ValaVariable* variable, ValaExpression* expr);
 ValaTargetValue* vala_ccode_base_module_create_temp_value (ValaCCodeBaseModule* self, ValaDataType* type, gboolean init, ValaCodeNode* node_reference, gboolean* value_owned);
 ValaTargetValue* vala_ccode_base_module_load_temp_value (ValaCCodeBaseModule* self, ValaTargetValue* lvalue);
 ValaTargetValue* vala_ccode_base_module_store_temp_value (ValaCCodeBaseModule* self, ValaTargetValue* initializer, ValaCodeNode* node_reference, gboolean* value_owned);
@@ -1196,6 +1217,7 @@ ValaLocalVariable* vala_ccode_base_module_get_temp_variable (ValaCCodeBaseModule
 ValaCCodeExpression* vala_ccode_base_module_get_type_id_expression (ValaCCodeBaseModule* self, ValaDataType* type, gboolean is_chainup);
 ValaCCodeExpression* vala_ccode_base_module_get_dup_func_expression (ValaCCodeBaseModule* self, ValaDataType* type, ValaSourceReference* source_reference, gboolean is_chainup);
 gchar* vala_ccode_base_module_generate_dup_func_wrapper (ValaCCodeBaseModule* self, ValaDataType* type);
+gchar* vala_ccode_base_module_generate_free_function_address_of_wrapper (ValaCCodeBaseModule* self, ValaDataType* type);
 gchar* vala_ccode_base_module_generate_free_func_wrapper (ValaCCodeBaseModule* self, ValaDataType* type);
 ValaCCodeExpression* vala_ccode_base_module_get_destroy0_func_expression (ValaCCodeBaseModule* self, ValaDataType* type, gboolean is_chainup);
 ValaCCodeExpression* vala_ccode_base_module_get_destroy_func_expression (ValaCCodeBaseModule* self, ValaDataType* type, gboolean is_chainup);
@@ -1261,6 +1283,7 @@ gchar* vala_ccode_base_module_get_ccode_lower_case_suffix (ValaSymbol* sym);
 gchar* vala_ccode_base_module_get_ccode_ref_function (ValaTypeSymbol* sym);
 gboolean vala_ccode_base_module_is_reference_counting (ValaTypeSymbol* sym);
 gboolean vala_ccode_base_module_get_ccode_ref_function_void (ValaClass* cl);
+gboolean vala_ccode_base_module_get_ccode_free_function_address_of (ValaClass* cl);
 gboolean vala_ccode_base_module_get_ccode_ref_sink_function_void (ValaClass* cl);
 gchar* vala_ccode_base_module_get_ccode_unref_function (ValaObjectTypeSymbol* sym);
 gchar* vala_ccode_base_module_get_ccode_ref_sink_function (ValaObjectTypeSymbol* sym);
@@ -1289,6 +1312,7 @@ gdouble vala_ccode_base_module_get_ccode_array_length_pos (ValaCodeNode* node);
 gdouble vala_ccode_base_module_get_ccode_delegate_target_pos (ValaCodeNode* node);
 gdouble vala_ccode_base_module_get_ccode_destroy_notify_pos (ValaCodeNode* node);
 gboolean vala_ccode_base_module_get_ccode_delegate_target (ValaCodeNode* node);
+gchar* vala_ccode_base_module_get_ccode_delegate_target_name (ValaVariable* variable);
 gdouble vala_ccode_base_module_get_ccode_pos (ValaParameter* param);
 gchar* vala_ccode_base_module_get_ccode_type (ValaCodeNode* node);
 gboolean vala_ccode_base_module_get_ccode_simple_generics (ValaMethod* m);
@@ -1602,6 +1626,23 @@ void vala_gerror_module_return_with_exception (ValaGErrorModule* self, ValaCCode
 ValaGErrorModule* vala_gerror_module_new (void);
 ValaGErrorModule* vala_gerror_module_construct (GType object_type);
 GType vala_gir_writer_get_type (void) G_GNUC_CONST;
+gchar* vala_gir_writer_get_interface_comment (ValaGIRWriter* self, ValaInterface* iface);
+gchar* vala_gir_writer_get_struct_comment (ValaGIRWriter* self, ValaStruct* st);
+gchar* vala_gir_writer_get_enum_comment (ValaGIRWriter* self, ValaEnum* en);
+gchar* vala_gir_writer_get_class_comment (ValaGIRWriter* self, ValaClass* c);
+gchar* vala_gir_writer_get_error_code_comment (ValaGIRWriter* self, ValaErrorCode* ecode);
+gchar* vala_gir_writer_get_enum_value_comment (ValaGIRWriter* self, ValaEnumValue* ev);
+gchar* vala_gir_writer_get_constant_comment (ValaGIRWriter* self, ValaConstant* c);
+gchar* vala_gir_writer_get_error_domain_comment (ValaGIRWriter* self, ValaErrorDomain* edomain);
+gchar* vala_gir_writer_get_field_comment (ValaGIRWriter* self, ValaField* f);
+gchar* vala_gir_writer_get_delegate_comment (ValaGIRWriter* self, ValaDelegate* cb);
+gchar* vala_gir_writer_get_method_comment (ValaGIRWriter* self, ValaMethod* m);
+gchar* vala_gir_writer_get_property_comment (ValaGIRWriter* self, ValaProperty* prop);
+gchar* vala_gir_writer_get_delegate_return_comment (ValaGIRWriter* self, ValaDelegate* cb);
+gchar* vala_gir_writer_get_signal_return_comment (ValaGIRWriter* self, ValaSignal* sig);
+gchar* vala_gir_writer_get_method_return_comment (ValaGIRWriter* self, ValaMethod* m);
+gchar* vala_gir_writer_get_signal_comment (ValaGIRWriter* self, ValaSignal* sig);
+gchar* vala_gir_writer_get_parameter_comment (ValaGIRWriter* self, ValaParameter* param);
 void vala_gir_writer_write_includes (ValaGIRWriter* self);
 void vala_gir_writer_write_file (ValaGIRWriter* self, ValaCodeContext* context, const gchar* directory, const gchar* gir_namespace, const gchar* gir_version, const gchar* package);
 ValaGIRWriter* vala_gir_writer_new (void);
diff --git a/codegen/valagasyncmodule.c b/codegen/valagasyncmodule.c
index 463fccf..bd9d74b 100644
--- a/codegen/valagasyncmodule.c
+++ b/codegen/valagasyncmodule.c
@@ -498,9 +498,10 @@ gchar* vala_ccode_base_module_get_ccode_name (ValaCodeNode* node);
 gchar* vala_ccode_base_module_get_variable_cname (ValaCCodeBaseModule* self, const gchar* name);
 gboolean vala_ccode_base_module_get_ccode_array_length (ValaCodeNode* node);
 gchar* vala_ccode_base_module_get_parameter_array_length_cname (ValaCCodeBaseModule* self, ValaParameter* param, gint dim);
-gchar* vala_ccode_base_module_get_delegate_target_cname (ValaCCodeBaseModule* self, const gchar* delegate_cname);
+gchar* vala_ccode_base_module_get_ccode_delegate_target_name (ValaVariable* variable);
 gchar* vala_ccode_base_module_get_delegate_target_destroy_notify_cname (ValaCCodeBaseModule* self, const gchar* delegate_cname);
 gchar* vala_ccode_base_module_get_array_length_cname (ValaCCodeBaseModule* self, const gchar* array_cname, gint dim);
+gchar* vala_ccode_base_module_get_delegate_target_cname (ValaCCodeBaseModule* self, const gchar* delegate_cname);
 static ValaCCodeFunction* vala_gasync_module_generate_free_function (ValaGAsyncModule* self, ValaMethod* m);
 gchar* vala_ccode_base_module_get_ccode_real_name (ValaSymbol* sym);
 void vala_ccode_base_module_push_context (ValaCCodeBaseModule* self, ValaCCodeBaseModuleEmitContext* emit_context);
@@ -508,6 +509,7 @@ ValaCCodeBaseModuleEmitContext* vala_ccode_base_module_emit_context_new (ValaSym
 ValaCCodeBaseModuleEmitContext* vala_ccode_base_module_emit_context_construct (GType object_type, ValaSymbol* symbol);
 void vala_ccode_base_module_push_function (ValaCCodeBaseModule* self, ValaCCodeFunction* func);
 ValaCCodeFunction* vala_ccode_base_module_get_ccode (ValaCCodeBaseModule* self);
+gboolean vala_ccode_base_module_no_implicit_copy (ValaCCodeBaseModule* self, ValaDataType* type);
 gboolean vala_ccode_base_module_requires_destroy (ValaCCodeBaseModule* self, ValaDataType* type);
 ValaCCodeExpression* vala_ccode_base_module_destroy_parameter (ValaCCodeBaseModule* self, ValaParameter* param);
 ValaCCodeExpression* vala_ccode_base_module_destroy_local (ValaCCodeBaseModule* self, ValaLocalVariable* local);
@@ -592,9 +594,9 @@ static ValaCCodeStruct* vala_gasync_module_generate_data_struct (ValaGAsyncModul
 	ValaMethod* _tmp16_;
 	ValaMemberBinding _tmp17_;
 	ValaMemberBinding _tmp18_;
-	ValaMethod* _tmp154_;
-	ValaDataType* _tmp155_;
-	ValaDataType* _tmp156_;
+	ValaMethod* _tmp150_;
+	ValaDataType* _tmp151_;
+	ValaDataType* _tmp152_;
 	g_return_val_if_fail (self != NULL, NULL);
 	g_return_val_if_fail (m != NULL, NULL);
 	_tmp0_ = m;
@@ -860,45 +862,36 @@ static ValaCCodeStruct* vala_gasync_module_generate_data_struct (ValaGAsyncModul
 					if (_tmp101_) {
 						ValaCCodeStruct* _tmp102_;
 						ValaParameter* _tmp103_;
-						const gchar* _tmp104_;
-						const gchar* _tmp105_;
-						gchar* _tmp106_ = NULL;
-						gchar* _tmp107_;
-						gchar* _tmp108_ = NULL;
-						gchar* _tmp109_;
-						gboolean _tmp110_;
+						gchar* _tmp104_ = NULL;
+						gchar* _tmp105_;
+						gboolean _tmp106_;
 						_tmp102_ = data;
 						_tmp103_ = param;
-						_tmp104_ = vala_symbol_get_name ((ValaSymbol*) _tmp103_);
+						_tmp104_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp103_);
 						_tmp105_ = _tmp104_;
-						_tmp106_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp105_);
-						_tmp107_ = _tmp106_;
-						_tmp108_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp107_);
-						_tmp109_ = _tmp108_;
-						vala_ccode_struct_add_field (_tmp102_, "gpointer", _tmp109_, NULL);
-						_g_free0 (_tmp109_);
-						_g_free0 (_tmp107_);
-						_tmp110_ = is_unowned_delegate;
-						if (!_tmp110_) {
-							ValaCCodeStruct* _tmp111_;
-							ValaParameter* _tmp112_;
-							const gchar* _tmp113_;
-							const gchar* _tmp114_;
-							gchar* _tmp115_ = NULL;
-							gchar* _tmp116_;
-							gchar* _tmp117_ = NULL;
-							gchar* _tmp118_;
-							_tmp111_ = data;
-							_tmp112_ = param;
-							_tmp113_ = vala_symbol_get_name ((ValaSymbol*) _tmp112_);
+						vala_ccode_struct_add_field (_tmp102_, "gpointer", _tmp105_, NULL);
+						_g_free0 (_tmp105_);
+						_tmp106_ = is_unowned_delegate;
+						if (!_tmp106_) {
+							ValaCCodeStruct* _tmp107_;
+							ValaParameter* _tmp108_;
+							const gchar* _tmp109_;
+							const gchar* _tmp110_;
+							gchar* _tmp111_ = NULL;
+							gchar* _tmp112_;
+							gchar* _tmp113_ = NULL;
+							gchar* _tmp114_;
+							_tmp107_ = data;
+							_tmp108_ = param;
+							_tmp109_ = vala_symbol_get_name ((ValaSymbol*) _tmp108_);
+							_tmp110_ = _tmp109_;
+							_tmp111_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp110_);
+							_tmp112_ = _tmp111_;
+							_tmp113_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp112_);
 							_tmp114_ = _tmp113_;
-							_tmp115_ = vala_ccode_base_module_get_variable_cname ((ValaCCodeBaseModule*) self, _tmp114_);
-							_tmp116_ = _tmp115_;
-							_tmp117_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp116_);
-							_tmp118_ = _tmp117_;
-							vala_ccode_struct_add_field (_tmp111_, "GDestroyNotify", _tmp118_, NULL);
-							_g_free0 (_tmp118_);
-							_g_free0 (_tmp116_);
+							vala_ccode_struct_add_field (_tmp107_, "GDestroyNotify", _tmp114_, NULL);
+							_g_free0 (_tmp114_);
+							_g_free0 (_tmp112_);
 						}
 					}
 					_vala_code_node_unref0 (deleg_type);
@@ -910,228 +903,228 @@ static ValaCCodeStruct* vala_gasync_module_generate_data_struct (ValaGAsyncModul
 		_vala_iterable_unref0 (_param_list);
 	}
 	{
-		ValaMethod* _tmp119_;
-		ValaList* _tmp120_ = NULL;
+		ValaMethod* _tmp115_;
+		ValaList* _tmp116_ = NULL;
 		ValaList* _type_param_list;
-		ValaList* _tmp121_;
-		gint _tmp122_;
-		gint _tmp123_;
+		ValaList* _tmp117_;
+		gint _tmp118_;
+		gint _tmp119_;
 		gint _type_param_size;
 		gint _type_param_index;
-		_tmp119_ = m;
-		_tmp120_ = vala_method_get_type_parameters (_tmp119_);
-		_type_param_list = _tmp120_;
-		_tmp121_ = _type_param_list;
-		_tmp122_ = vala_collection_get_size ((ValaCollection*) _tmp121_);
-		_tmp123_ = _tmp122_;
-		_type_param_size = _tmp123_;
+		_tmp115_ = m;
+		_tmp116_ = vala_method_get_type_parameters (_tmp115_);
+		_type_param_list = _tmp116_;
+		_tmp117_ = _type_param_list;
+		_tmp118_ = vala_collection_get_size ((ValaCollection*) _tmp117_);
+		_tmp119_ = _tmp118_;
+		_type_param_size = _tmp119_;
 		_type_param_index = -1;
 		while (TRUE) {
+			gint _tmp120_;
+			gint _tmp121_;
+			gint _tmp122_;
+			ValaList* _tmp123_;
 			gint _tmp124_;
-			gint _tmp125_;
-			gint _tmp126_;
-			ValaList* _tmp127_;
-			gint _tmp128_;
-			gpointer _tmp129_ = NULL;
+			gpointer _tmp125_ = NULL;
 			ValaTypeParameter* type_param;
-			ValaCCodeStruct* _tmp130_;
-			ValaTypeParameter* _tmp131_;
-			const gchar* _tmp132_;
-			const gchar* _tmp133_;
-			gchar* _tmp134_ = NULL;
-			gchar* _tmp135_;
-			gchar* _tmp136_ = NULL;
-			gchar* _tmp137_;
-			ValaCCodeStruct* _tmp138_;
-			ValaTypeParameter* _tmp139_;
-			const gchar* _tmp140_;
-			const gchar* _tmp141_;
-			gchar* _tmp142_ = NULL;
-			gchar* _tmp143_;
-			gchar* _tmp144_ = NULL;
-			gchar* _tmp145_;
-			ValaCCodeStruct* _tmp146_;
-			ValaTypeParameter* _tmp147_;
-			const gchar* _tmp148_;
-			const gchar* _tmp149_;
-			gchar* _tmp150_ = NULL;
-			gchar* _tmp151_;
-			gchar* _tmp152_ = NULL;
-			gchar* _tmp153_;
-			_tmp124_ = _type_param_index;
-			_type_param_index = _tmp124_ + 1;
-			_tmp125_ = _type_param_index;
-			_tmp126_ = _type_param_size;
-			if (!(_tmp125_ < _tmp126_)) {
+			ValaCCodeStruct* _tmp126_;
+			ValaTypeParameter* _tmp127_;
+			const gchar* _tmp128_;
+			const gchar* _tmp129_;
+			gchar* _tmp130_ = NULL;
+			gchar* _tmp131_;
+			gchar* _tmp132_ = NULL;
+			gchar* _tmp133_;
+			ValaCCodeStruct* _tmp134_;
+			ValaTypeParameter* _tmp135_;
+			const gchar* _tmp136_;
+			const gchar* _tmp137_;
+			gchar* _tmp138_ = NULL;
+			gchar* _tmp139_;
+			gchar* _tmp140_ = NULL;
+			gchar* _tmp141_;
+			ValaCCodeStruct* _tmp142_;
+			ValaTypeParameter* _tmp143_;
+			const gchar* _tmp144_;
+			const gchar* _tmp145_;
+			gchar* _tmp146_ = NULL;
+			gchar* _tmp147_;
+			gchar* _tmp148_ = NULL;
+			gchar* _tmp149_;
+			_tmp120_ = _type_param_index;
+			_type_param_index = _tmp120_ + 1;
+			_tmp121_ = _type_param_index;
+			_tmp122_ = _type_param_size;
+			if (!(_tmp121_ < _tmp122_)) {
 				break;
 			}
-			_tmp127_ = _type_param_list;
-			_tmp128_ = _type_param_index;
-			_tmp129_ = vala_list_get (_tmp127_, _tmp128_);
-			type_param = (ValaTypeParameter*) _tmp129_;
-			_tmp130_ = data;
-			_tmp131_ = type_param;
-			_tmp132_ = vala_symbol_get_name ((ValaSymbol*) _tmp131_);
+			_tmp123_ = _type_param_list;
+			_tmp124_ = _type_param_index;
+			_tmp125_ = vala_list_get (_tmp123_, _tmp124_);
+			type_param = (ValaTypeParameter*) _tmp125_;
+			_tmp126_ = data;
+			_tmp127_ = type_param;
+			_tmp128_ = vala_symbol_get_name ((ValaSymbol*) _tmp127_);
+			_tmp129_ = _tmp128_;
+			_tmp130_ = g_utf8_strdown (_tmp129_, (gssize) (-1));
+			_tmp131_ = _tmp130_;
+			_tmp132_ = g_strdup_printf ("%s_type", _tmp131_);
 			_tmp133_ = _tmp132_;
-			_tmp134_ = g_utf8_strdown (_tmp133_, (gssize) (-1));
-			_tmp135_ = _tmp134_;
-			_tmp136_ = g_strdup_printf ("%s_type", _tmp135_);
+			vala_ccode_struct_add_field (_tmp126_, "GType", _tmp133_, NULL);
+			_g_free0 (_tmp133_);
+			_g_free0 (_tmp131_);
+			_tmp134_ = data;
+			_tmp135_ = type_param;
+			_tmp136_ = vala_symbol_get_name ((ValaSymbol*) _tmp135_);
 			_tmp137_ = _tmp136_;
-			vala_ccode_struct_add_field (_tmp130_, "GType", _tmp137_, NULL);
-			_g_free0 (_tmp137_);
-			_g_free0 (_tmp135_);
-			_tmp138_ = data;
-			_tmp139_ = type_param;
-			_tmp140_ = vala_symbol_get_name ((ValaSymbol*) _tmp139_);
+			_tmp138_ = g_utf8_strdown (_tmp137_, (gssize) (-1));
+			_tmp139_ = _tmp138_;
+			_tmp140_ = g_strdup_printf ("%s_dup_func", _tmp139_);
 			_tmp141_ = _tmp140_;
-			_tmp142_ = g_utf8_strdown (_tmp141_, (gssize) (-1));
-			_tmp143_ = _tmp142_;
-			_tmp144_ = g_strdup_printf ("%s_dup_func", _tmp143_);
+			vala_ccode_struct_add_field (_tmp134_, "GBoxedCopyFunc", _tmp141_, NULL);
+			_g_free0 (_tmp141_);
+			_g_free0 (_tmp139_);
+			_tmp142_ = data;
+			_tmp143_ = type_param;
+			_tmp144_ = vala_symbol_get_name ((ValaSymbol*) _tmp143_);
 			_tmp145_ = _tmp144_;
-			vala_ccode_struct_add_field (_tmp138_, "GBoxedCopyFunc", _tmp145_, NULL);
-			_g_free0 (_tmp145_);
-			_g_free0 (_tmp143_);
-			_tmp146_ = data;
-			_tmp147_ = type_param;
-			_tmp148_ = vala_symbol_get_name ((ValaSymbol*) _tmp147_);
+			_tmp146_ = g_utf8_strdown (_tmp145_, (gssize) (-1));
+			_tmp147_ = _tmp146_;
+			_tmp148_ = g_strdup_printf ("%s_destroy_func", _tmp147_);
 			_tmp149_ = _tmp148_;
-			_tmp150_ = g_utf8_strdown (_tmp149_, (gssize) (-1));
-			_tmp151_ = _tmp150_;
-			_tmp152_ = g_strdup_printf ("%s_destroy_func", _tmp151_);
-			_tmp153_ = _tmp152_;
-			vala_ccode_struct_add_field (_tmp146_, "GDestroyNotify", _tmp153_, NULL);
-			_g_free0 (_tmp153_);
-			_g_free0 (_tmp151_);
+			vala_ccode_struct_add_field (_tmp142_, "GDestroyNotify", _tmp149_, NULL);
+			_g_free0 (_tmp149_);
+			_g_free0 (_tmp147_);
 			_vala_code_node_unref0 (type_param);
 		}
 		_vala_iterable_unref0 (_type_param_list);
 	}
-	_tmp154_ = m;
-	_tmp155_ = vala_method_get_return_type (_tmp154_);
-	_tmp156_ = _tmp155_;
-	if (!VALA_IS_VOID_TYPE (_tmp156_)) {
-		ValaCCodeStruct* _tmp157_;
-		ValaMethod* _tmp158_;
-		ValaDataType* _tmp159_;
+	_tmp150_ = m;
+	_tmp151_ = vala_method_get_return_type (_tmp150_);
+	_tmp152_ = _tmp151_;
+	if (!VALA_IS_VOID_TYPE (_tmp152_)) {
+		ValaCCodeStruct* _tmp153_;
+		ValaMethod* _tmp154_;
+		ValaDataType* _tmp155_;
+		ValaDataType* _tmp156_;
+		gchar* _tmp157_ = NULL;
+		gchar* _tmp158_;
+		ValaMethod* _tmp159_;
 		ValaDataType* _tmp160_;
-		gchar* _tmp161_ = NULL;
-		gchar* _tmp162_;
-		ValaMethod* _tmp163_;
-		ValaDataType* _tmp164_;
-		ValaDataType* _tmp165_;
-		_tmp157_ = data;
-		_tmp158_ = m;
-		_tmp159_ = vala_method_get_return_type (_tmp158_);
-		_tmp160_ = _tmp159_;
-		_tmp161_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp160_);
-		_tmp162_ = _tmp161_;
-		vala_ccode_struct_add_field (_tmp157_, _tmp162_, "result", NULL);
-		_g_free0 (_tmp162_);
-		_tmp163_ = m;
-		_tmp164_ = vala_method_get_return_type (_tmp163_);
-		_tmp165_ = _tmp164_;
-		if (VALA_IS_ARRAY_TYPE (_tmp165_)) {
-			ValaMethod* _tmp166_;
-			ValaDataType* _tmp167_;
-			ValaDataType* _tmp168_;
-			ValaArrayType* _tmp169_;
+		ValaDataType* _tmp161_;
+		_tmp153_ = data;
+		_tmp154_ = m;
+		_tmp155_ = vala_method_get_return_type (_tmp154_);
+		_tmp156_ = _tmp155_;
+		_tmp157_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp156_);
+		_tmp158_ = _tmp157_;
+		vala_ccode_struct_add_field (_tmp153_, _tmp158_, "result", NULL);
+		_g_free0 (_tmp158_);
+		_tmp159_ = m;
+		_tmp160_ = vala_method_get_return_type (_tmp159_);
+		_tmp161_ = _tmp160_;
+		if (VALA_IS_ARRAY_TYPE (_tmp161_)) {
+			ValaMethod* _tmp162_;
+			ValaDataType* _tmp163_;
+			ValaDataType* _tmp164_;
+			ValaArrayType* _tmp165_;
 			ValaArrayType* array_type;
-			ValaMethod* _tmp170_;
-			gboolean _tmp171_ = FALSE;
+			ValaMethod* _tmp166_;
+			gboolean _tmp167_ = FALSE;
+			_tmp162_ = m;
+			_tmp163_ = vala_method_get_return_type (_tmp162_);
+			_tmp164_ = _tmp163_;
+			_tmp165_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp164_));
+			array_type = _tmp165_;
 			_tmp166_ = m;
-			_tmp167_ = vala_method_get_return_type (_tmp166_);
-			_tmp168_ = _tmp167_;
-			_tmp169_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp168_));
-			array_type = _tmp169_;
-			_tmp170_ = m;
-			_tmp171_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp170_);
-			if (_tmp171_) {
+			_tmp167_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp166_);
+			if (_tmp167_) {
 				{
 					gint dim;
 					dim = 1;
 					{
-						gboolean _tmp172_;
-						_tmp172_ = TRUE;
+						gboolean _tmp168_;
+						_tmp168_ = TRUE;
 						while (TRUE) {
-							gboolean _tmp173_;
-							gint _tmp175_;
-							ValaArrayType* _tmp176_;
-							gint _tmp177_;
-							gint _tmp178_;
-							ValaCCodeStruct* _tmp179_;
-							gint _tmp180_;
-							gchar* _tmp181_ = NULL;
-							gchar* _tmp182_;
-							_tmp173_ = _tmp172_;
-							if (!_tmp173_) {
-								gint _tmp174_;
-								_tmp174_ = dim;
-								dim = _tmp174_ + 1;
+							gboolean _tmp169_;
+							gint _tmp171_;
+							ValaArrayType* _tmp172_;
+							gint _tmp173_;
+							gint _tmp174_;
+							ValaCCodeStruct* _tmp175_;
+							gint _tmp176_;
+							gchar* _tmp177_ = NULL;
+							gchar* _tmp178_;
+							_tmp169_ = _tmp168_;
+							if (!_tmp169_) {
+								gint _tmp170_;
+								_tmp170_ = dim;
+								dim = _tmp170_ + 1;
 							}
-							_tmp172_ = FALSE;
-							_tmp175_ = dim;
-							_tmp176_ = array_type;
-							_tmp177_ = vala_array_type_get_rank (_tmp176_);
-							_tmp178_ = _tmp177_;
-							if (!(_tmp175_ <= _tmp178_)) {
+							_tmp168_ = FALSE;
+							_tmp171_ = dim;
+							_tmp172_ = array_type;
+							_tmp173_ = vala_array_type_get_rank (_tmp172_);
+							_tmp174_ = _tmp173_;
+							if (!(_tmp171_ <= _tmp174_)) {
 								break;
 							}
-							_tmp179_ = data;
-							_tmp180_ = dim;
-							_tmp181_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "result", _tmp180_);
-							_tmp182_ = _tmp181_;
-							vala_ccode_struct_add_field (_tmp179_, "gint", _tmp182_, NULL);
-							_g_free0 (_tmp182_);
+							_tmp175_ = data;
+							_tmp176_ = dim;
+							_tmp177_ = vala_ccode_base_module_get_array_length_cname ((ValaCCodeBaseModule*) self, "result", _tmp176_);
+							_tmp178_ = _tmp177_;
+							vala_ccode_struct_add_field (_tmp175_, "gint", _tmp178_, NULL);
+							_g_free0 (_tmp178_);
 						}
 					}
 				}
 			}
 			_vala_code_node_unref0 (array_type);
 		} else {
-			ValaMethod* _tmp183_;
-			ValaDataType* _tmp184_;
-			ValaDataType* _tmp185_;
-			_tmp183_ = m;
-			_tmp184_ = vala_method_get_return_type (_tmp183_);
-			_tmp185_ = _tmp184_;
-			if (VALA_IS_DELEGATE_TYPE (_tmp185_)) {
-				ValaMethod* _tmp186_;
-				ValaDataType* _tmp187_;
-				ValaDataType* _tmp188_;
-				ValaDelegateType* _tmp189_;
+			ValaMethod* _tmp179_;
+			ValaDataType* _tmp180_;
+			ValaDataType* _tmp181_;
+			_tmp179_ = m;
+			_tmp180_ = vala_method_get_return_type (_tmp179_);
+			_tmp181_ = _tmp180_;
+			if (VALA_IS_DELEGATE_TYPE (_tmp181_)) {
+				ValaMethod* _tmp182_;
+				ValaDataType* _tmp183_;
+				ValaDataType* _tmp184_;
+				ValaDelegateType* _tmp185_;
 				ValaDelegateType* deleg_type;
-				ValaDelegateType* _tmp190_;
-				ValaDelegate* _tmp191_;
-				ValaDelegate* _tmp192_;
-				gboolean _tmp193_;
-				gboolean _tmp194_;
-				_tmp186_ = m;
-				_tmp187_ = vala_method_get_return_type (_tmp186_);
+				ValaDelegateType* _tmp186_;
+				ValaDelegate* _tmp187_;
+				ValaDelegate* _tmp188_;
+				gboolean _tmp189_;
+				gboolean _tmp190_;
+				_tmp182_ = m;
+				_tmp183_ = vala_method_get_return_type (_tmp182_);
+				_tmp184_ = _tmp183_;
+				_tmp185_ = _vala_code_node_ref0 (VALA_DELEGATE_TYPE (_tmp184_));
+				deleg_type = _tmp185_;
+				_tmp186_ = deleg_type;
+				_tmp187_ = vala_delegate_type_get_delegate_symbol (_tmp186_);
 				_tmp188_ = _tmp187_;
-				_tmp189_ = _vala_code_node_ref0 (VALA_DELEGATE_TYPE (_tmp188_));
-				deleg_type = _tmp189_;
-				_tmp190_ = deleg_type;
-				_tmp191_ = vala_delegate_type_get_delegate_symbol (_tmp190_);
-				_tmp192_ = _tmp191_;
-				_tmp193_ = vala_delegate_get_has_target (_tmp192_);
-				_tmp194_ = _tmp193_;
-				if (_tmp194_) {
-					ValaCCodeStruct* _tmp195_;
-					gchar* _tmp196_ = NULL;
-					gchar* _tmp197_;
-					ValaCCodeStruct* _tmp198_;
-					gchar* _tmp199_ = NULL;
-					gchar* _tmp200_;
-					_tmp195_ = data;
-					_tmp196_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, "result");
-					_tmp197_ = _tmp196_;
-					vala_ccode_struct_add_field (_tmp195_, "gpointer", _tmp197_, NULL);
-					_g_free0 (_tmp197_);
-					_tmp198_ = data;
-					_tmp199_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, "result");
-					_tmp200_ = _tmp199_;
-					vala_ccode_struct_add_field (_tmp198_, "GDestroyNotify", _tmp200_, NULL);
-					_g_free0 (_tmp200_);
+				_tmp189_ = vala_delegate_get_has_target (_tmp188_);
+				_tmp190_ = _tmp189_;
+				if (_tmp190_) {
+					ValaCCodeStruct* _tmp191_;
+					gchar* _tmp192_ = NULL;
+					gchar* _tmp193_;
+					ValaCCodeStruct* _tmp194_;
+					gchar* _tmp195_ = NULL;
+					gchar* _tmp196_;
+					_tmp191_ = data;
+					_tmp192_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, "result");
+					_tmp193_ = _tmp192_;
+					vala_ccode_struct_add_field (_tmp191_, "gpointer", _tmp193_, NULL);
+					_g_free0 (_tmp193_);
+					_tmp194_ = data;
+					_tmp195_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, "result");
+					_tmp196_ = _tmp195_;
+					vala_ccode_struct_add_field (_tmp194_, "GDestroyNotify", _tmp196_, NULL);
+					_g_free0 (_tmp196_);
 				}
 				_vala_code_node_unref0 (deleg_type);
 			}
@@ -1178,29 +1171,29 @@ static ValaCCodeFunction* vala_gasync_module_generate_free_function (ValaGAsyncM
 	ValaCCodeIdentifier* _tmp28_;
 	ValaCCodeVariableDeclarator* _tmp29_;
 	ValaCCodeVariableDeclarator* _tmp30_;
-	ValaMethod* _tmp76_;
-	ValaDataType* _tmp77_;
-	ValaDataType* _tmp78_;
-	gboolean _tmp79_ = FALSE;
-	ValaMethod* _tmp89_;
-	ValaMemberBinding _tmp90_;
-	ValaMemberBinding _tmp91_;
-	ValaCCodeIdentifier* _tmp108_;
-	ValaCCodeIdentifier* _tmp109_;
-	ValaCCodeFunctionCall* _tmp110_;
-	ValaCCodeFunctionCall* _tmp111_;
+	ValaMethod* _tmp68_;
+	ValaDataType* _tmp69_;
+	ValaDataType* _tmp70_;
+	gboolean _tmp71_ = FALSE;
+	ValaMethod* _tmp81_;
+	ValaMemberBinding _tmp82_;
+	ValaMemberBinding _tmp83_;
+	ValaCCodeIdentifier* _tmp100_;
+	ValaCCodeIdentifier* _tmp101_;
+	ValaCCodeFunctionCall* _tmp102_;
+	ValaCCodeFunctionCall* _tmp103_;
 	ValaCCodeFunctionCall* freecall;
-	const gchar* _tmp112_;
-	ValaCCodeIdentifier* _tmp113_;
-	ValaCCodeIdentifier* _tmp114_;
-	ValaCCodeIdentifier* _tmp115_;
-	ValaCCodeIdentifier* _tmp116_;
-	ValaCCodeFunction* _tmp117_;
-	ValaCCodeFunction* _tmp118_;
-	ValaCCodeFile* _tmp119_;
-	ValaCCodeFunction* _tmp120_;
-	ValaCCodeFile* _tmp121_;
-	ValaCCodeFunction* _tmp122_;
+	const gchar* _tmp104_;
+	ValaCCodeIdentifier* _tmp105_;
+	ValaCCodeIdentifier* _tmp106_;
+	ValaCCodeIdentifier* _tmp107_;
+	ValaCCodeIdentifier* _tmp108_;
+	ValaCCodeFunction* _tmp109_;
+	ValaCCodeFunction* _tmp110_;
+	ValaCCodeFile* _tmp111_;
+	ValaCCodeFunction* _tmp112_;
+	ValaCCodeFile* _tmp113_;
+	ValaCCodeFunction* _tmp114_;
 	g_return_val_if_fail (self != NULL, NULL);
 	g_return_val_if_fail (m != NULL, NULL);
 	_tmp0_ = m;
@@ -1293,88 +1286,64 @@ static ValaCCodeFunction* vala_gasync_module_generate_free_function (ValaGAsyncM
 			_tmp43_ = vala_parameter_get_direction (_tmp42_);
 			_tmp44_ = _tmp43_;
 			if (_tmp44_ != VALA_PARAMETER_DIRECTION_OUT) {
-				gboolean _tmp45_ = FALSE;
-				ValaParameter* _tmp46_;
+				ValaParameter* _tmp45_;
+				ValaDataType* _tmp46_;
 				ValaDataType* _tmp47_;
-				ValaDataType* _tmp48_;
-				gboolean _tmp54_;
-				gboolean is_unowned_delegate;
-				ValaParameter* _tmp55_;
-				ValaDataType* _tmp56_;
-				ValaDataType* _tmp57_;
-				ValaDataType* _tmp58_ = NULL;
+				ValaDataType* _tmp48_ = NULL;
 				ValaDataType* param_type;
-				ValaDataType* _tmp59_;
-				gboolean _tmp60_ = FALSE;
-				ValaDataType* _tmp61_;
-				gboolean _tmp62_ = FALSE;
-				gboolean _tmp64_;
-				_tmp46_ = param;
-				_tmp47_ = vala_variable_get_variable_type ((ValaVariable*) _tmp46_);
-				_tmp48_ = _tmp47_;
-				if (VALA_IS_DELEGATE_TYPE (_tmp48_)) {
-					ValaParameter* _tmp49_;
-					ValaDataType* _tmp50_;
-					ValaDataType* _tmp51_;
-					gboolean _tmp52_;
-					gboolean _tmp53_;
-					_tmp49_ = param;
-					_tmp50_ = vala_variable_get_variable_type ((ValaVariable*) _tmp49_);
-					_tmp51_ = _tmp50_;
-					_tmp52_ = vala_data_type_get_value_owned (_tmp51_);
-					_tmp53_ = _tmp52_;
-					_tmp45_ = !_tmp53_;
-				} else {
-					_tmp45_ = FALSE;
-				}
-				_tmp54_ = _tmp45_;
-				is_unowned_delegate = _tmp54_;
-				_tmp55_ = param;
-				_tmp56_ = vala_variable_get_variable_type ((ValaVariable*) _tmp55_);
-				_tmp57_ = _tmp56_;
-				_tmp58_ = vala_data_type_copy (_tmp57_);
-				param_type = _tmp58_;
-				_tmp59_ = param_type;
-				vala_data_type_set_value_owned (_tmp59_, TRUE);
-				_tmp61_ = param_type;
-				_tmp62_ = vala_ccode_base_module_requires_destroy ((ValaCCodeBaseModule*) self, _tmp61_);
-				if (_tmp62_) {
-					gboolean _tmp63_;
-					_tmp63_ = is_unowned_delegate;
-					_tmp60_ = !_tmp63_;
-				} else {
-					_tmp60_ = FALSE;
+				ValaDataType* _tmp49_;
+				gboolean _tmp50_;
+				gboolean _tmp51_;
+				ValaDataType* _tmp55_;
+				gboolean _tmp56_ = FALSE;
+				_tmp45_ = param;
+				_tmp46_ = vala_variable_get_variable_type ((ValaVariable*) _tmp45_);
+				_tmp47_ = _tmp46_;
+				_tmp48_ = vala_data_type_copy (_tmp47_);
+				param_type = _tmp48_;
+				_tmp49_ = param_type;
+				_tmp50_ = vala_data_type_get_value_owned (_tmp49_);
+				_tmp51_ = _tmp50_;
+				if (!_tmp51_) {
+					ValaDataType* _tmp52_;
+					ValaDataType* _tmp53_;
+					gboolean _tmp54_ = FALSE;
+					_tmp52_ = param_type;
+					_tmp53_ = param_type;
+					_tmp54_ = vala_ccode_base_module_no_implicit_copy ((ValaCCodeBaseModule*) self, _tmp53_);
+					vala_data_type_set_value_owned (_tmp52_, !_tmp54_);
 				}
-				_tmp64_ = _tmp60_;
-				if (_tmp64_) {
-					ValaParameter* _tmp65_;
-					gboolean _tmp66_;
-					gboolean _tmp67_;
+				_tmp55_ = param_type;
+				_tmp56_ = vala_ccode_base_module_requires_destroy ((ValaCCodeBaseModule*) self, _tmp55_);
+				if (_tmp56_) {
+					ValaParameter* _tmp57_;
+					gboolean _tmp58_;
+					gboolean _tmp59_;
 					gboolean old_captured;
-					ValaParameter* _tmp68_;
-					ValaCCodeFunction* _tmp69_;
-					ValaCCodeFunction* _tmp70_;
-					ValaParameter* _tmp71_;
-					ValaCCodeExpression* _tmp72_ = NULL;
-					ValaCCodeExpression* _tmp73_;
-					ValaParameter* _tmp74_;
-					gboolean _tmp75_;
-					_tmp65_ = param;
-					_tmp66_ = vala_parameter_get_captured (_tmp65_);
-					_tmp67_ = _tmp66_;
-					old_captured = _tmp67_;
-					_tmp68_ = param;
-					vala_parameter_set_captured (_tmp68_, FALSE);
-					_tmp69_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-					_tmp70_ = _tmp69_;
-					_tmp71_ = param;
-					_tmp72_ = vala_ccode_base_module_destroy_parameter ((ValaCCodeBaseModule*) self, _tmp71_);
-					_tmp73_ = _tmp72_;
-					vala_ccode_function_add_expression (_tmp70_, _tmp73_);
-					_vala_ccode_node_unref0 (_tmp73_);
-					_tmp74_ = param;
-					_tmp75_ = old_captured;
-					vala_parameter_set_captured (_tmp74_, _tmp75_);
+					ValaParameter* _tmp60_;
+					ValaCCodeFunction* _tmp61_;
+					ValaCCodeFunction* _tmp62_;
+					ValaParameter* _tmp63_;
+					ValaCCodeExpression* _tmp64_ = NULL;
+					ValaCCodeExpression* _tmp65_;
+					ValaParameter* _tmp66_;
+					gboolean _tmp67_;
+					_tmp57_ = param;
+					_tmp58_ = vala_parameter_get_captured (_tmp57_);
+					_tmp59_ = _tmp58_;
+					old_captured = _tmp59_;
+					_tmp60_ = param;
+					vala_parameter_set_captured (_tmp60_, FALSE);
+					_tmp61_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+					_tmp62_ = _tmp61_;
+					_tmp63_ = param;
+					_tmp64_ = vala_ccode_base_module_destroy_parameter ((ValaCCodeBaseModule*) self, _tmp63_);
+					_tmp65_ = _tmp64_;
+					vala_ccode_function_add_expression (_tmp62_, _tmp65_);
+					_vala_ccode_node_unref0 (_tmp65_);
+					_tmp66_ = param;
+					_tmp67_ = old_captured;
+					vala_parameter_set_captured (_tmp66_, _tmp67_);
 				}
 				_vala_code_node_unref0 (param_type);
 			}
@@ -1382,105 +1351,105 @@ static ValaCCodeFunction* vala_gasync_module_generate_free_function (ValaGAsyncM
 		}
 		_vala_iterable_unref0 (_param_list);
 	}
-	_tmp76_ = m;
-	_tmp77_ = vala_method_get_return_type (_tmp76_);
-	_tmp78_ = _tmp77_;
-	_tmp79_ = vala_ccode_base_module_requires_destroy ((ValaCCodeBaseModule*) self, _tmp78_);
-	if (_tmp79_) {
-		ValaMethod* _tmp80_;
-		ValaDataType* _tmp81_;
-		ValaDataType* _tmp82_;
-		ValaLocalVariable* _tmp83_;
+	_tmp68_ = m;
+	_tmp69_ = vala_method_get_return_type (_tmp68_);
+	_tmp70_ = _tmp69_;
+	_tmp71_ = vala_ccode_base_module_requires_destroy ((ValaCCodeBaseModule*) self, _tmp70_);
+	if (_tmp71_) {
+		ValaMethod* _tmp72_;
+		ValaDataType* _tmp73_;
+		ValaDataType* _tmp74_;
+		ValaLocalVariable* _tmp75_;
 		ValaLocalVariable* v;
-		ValaCCodeFunction* _tmp84_;
-		ValaCCodeFunction* _tmp85_;
-		ValaLocalVariable* _tmp86_;
-		ValaCCodeExpression* _tmp87_ = NULL;
-		ValaCCodeExpression* _tmp88_;
-		_tmp80_ = m;
-		_tmp81_ = vala_method_get_return_type (_tmp80_);
-		_tmp82_ = _tmp81_;
-		_tmp83_ = vala_local_variable_new (_tmp82_, ".result", NULL, NULL);
-		v = _tmp83_;
-		_tmp84_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-		_tmp85_ = _tmp84_;
-		_tmp86_ = v;
-		_tmp87_ = vala_ccode_base_module_destroy_local ((ValaCCodeBaseModule*) self, _tmp86_);
-		_tmp88_ = _tmp87_;
-		vala_ccode_function_add_expression (_tmp85_, _tmp88_);
-		_vala_ccode_node_unref0 (_tmp88_);
+		ValaCCodeFunction* _tmp76_;
+		ValaCCodeFunction* _tmp77_;
+		ValaLocalVariable* _tmp78_;
+		ValaCCodeExpression* _tmp79_ = NULL;
+		ValaCCodeExpression* _tmp80_;
+		_tmp72_ = m;
+		_tmp73_ = vala_method_get_return_type (_tmp72_);
+		_tmp74_ = _tmp73_;
+		_tmp75_ = vala_local_variable_new (_tmp74_, ".result", NULL, NULL);
+		v = _tmp75_;
+		_tmp76_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+		_tmp77_ = _tmp76_;
+		_tmp78_ = v;
+		_tmp79_ = vala_ccode_base_module_destroy_local ((ValaCCodeBaseModule*) self, _tmp78_);
+		_tmp80_ = _tmp79_;
+		vala_ccode_function_add_expression (_tmp77_, _tmp80_);
+		_vala_ccode_node_unref0 (_tmp80_);
 		_vala_code_node_unref0 (v);
 	}
-	_tmp89_ = m;
-	_tmp90_ = vala_method_get_binding (_tmp89_);
-	_tmp91_ = _tmp90_;
-	if (_tmp91_ == VALA_MEMBER_BINDING_INSTANCE) {
-		ValaMethod* _tmp92_;
-		ValaParameter* _tmp93_;
-		ValaParameter* _tmp94_;
-		ValaDataType* _tmp95_;
-		ValaDataType* _tmp96_;
-		ValaDataType* _tmp97_ = NULL;
+	_tmp81_ = m;
+	_tmp82_ = vala_method_get_binding (_tmp81_);
+	_tmp83_ = _tmp82_;
+	if (_tmp83_ == VALA_MEMBER_BINDING_INSTANCE) {
+		ValaMethod* _tmp84_;
+		ValaParameter* _tmp85_;
+		ValaParameter* _tmp86_;
+		ValaDataType* _tmp87_;
+		ValaDataType* _tmp88_;
+		ValaDataType* _tmp89_ = NULL;
 		ValaDataType* this_type;
-		ValaDataType* _tmp98_;
-		ValaDataType* _tmp99_;
-		gboolean _tmp100_ = FALSE;
-		_tmp92_ = m;
-		_tmp93_ = vala_method_get_this_parameter (_tmp92_);
-		_tmp94_ = _tmp93_;
-		_tmp95_ = vala_variable_get_variable_type ((ValaVariable*) _tmp94_);
-		_tmp96_ = _tmp95_;
-		_tmp97_ = vala_data_type_copy (_tmp96_);
-		this_type = _tmp97_;
-		_tmp98_ = this_type;
-		vala_data_type_set_value_owned (_tmp98_, TRUE);
-		_tmp99_ = this_type;
-		_tmp100_ = vala_ccode_base_module_requires_destroy ((ValaCCodeBaseModule*) self, _tmp99_);
-		if (_tmp100_) {
-			ValaCCodeFunction* _tmp101_;
-			ValaCCodeFunction* _tmp102_;
-			ValaMethod* _tmp103_;
-			ValaParameter* _tmp104_;
-			ValaParameter* _tmp105_;
-			ValaCCodeExpression* _tmp106_ = NULL;
-			ValaCCodeExpression* _tmp107_;
-			_tmp101_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp102_ = _tmp101_;
-			_tmp103_ = m;
-			_tmp104_ = vala_method_get_this_parameter (_tmp103_);
-			_tmp105_ = _tmp104_;
-			_tmp106_ = vala_ccode_base_module_destroy_parameter ((ValaCCodeBaseModule*) self, _tmp105_);
-			_tmp107_ = _tmp106_;
-			vala_ccode_function_add_expression (_tmp102_, _tmp107_);
-			_vala_ccode_node_unref0 (_tmp107_);
+		ValaDataType* _tmp90_;
+		ValaDataType* _tmp91_;
+		gboolean _tmp92_ = FALSE;
+		_tmp84_ = m;
+		_tmp85_ = vala_method_get_this_parameter (_tmp84_);
+		_tmp86_ = _tmp85_;
+		_tmp87_ = vala_variable_get_variable_type ((ValaVariable*) _tmp86_);
+		_tmp88_ = _tmp87_;
+		_tmp89_ = vala_data_type_copy (_tmp88_);
+		this_type = _tmp89_;
+		_tmp90_ = this_type;
+		vala_data_type_set_value_owned (_tmp90_, TRUE);
+		_tmp91_ = this_type;
+		_tmp92_ = vala_ccode_base_module_requires_destroy ((ValaCCodeBaseModule*) self, _tmp91_);
+		if (_tmp92_) {
+			ValaCCodeFunction* _tmp93_;
+			ValaCCodeFunction* _tmp94_;
+			ValaMethod* _tmp95_;
+			ValaParameter* _tmp96_;
+			ValaParameter* _tmp97_;
+			ValaCCodeExpression* _tmp98_ = NULL;
+			ValaCCodeExpression* _tmp99_;
+			_tmp93_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp94_ = _tmp93_;
+			_tmp95_ = m;
+			_tmp96_ = vala_method_get_this_parameter (_tmp95_);
+			_tmp97_ = _tmp96_;
+			_tmp98_ = vala_ccode_base_module_destroy_parameter ((ValaCCodeBaseModule*) self, _tmp97_);
+			_tmp99_ = _tmp98_;
+			vala_ccode_function_add_expression (_tmp94_, _tmp99_);
+			_vala_ccode_node_unref0 (_tmp99_);
 		}
 		_vala_code_node_unref0 (this_type);
 	}
-	_tmp108_ = vala_ccode_identifier_new ("g_slice_free");
-	_tmp109_ = _tmp108_;
-	_tmp110_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp109_);
-	_tmp111_ = _tmp110_;
-	_vala_ccode_node_unref0 (_tmp109_);
-	freecall = _tmp111_;
-	_tmp112_ = dataname;
-	_tmp113_ = vala_ccode_identifier_new (_tmp112_);
-	_tmp114_ = _tmp113_;
-	vala_ccode_function_call_add_argument (freecall, (ValaCCodeExpression*) _tmp114_);
-	_vala_ccode_node_unref0 (_tmp114_);
-	_tmp115_ = vala_ccode_identifier_new ("_data_");
-	_tmp116_ = _tmp115_;
-	vala_ccode_function_call_add_argument (freecall, (ValaCCodeExpression*) _tmp116_);
-	_vala_ccode_node_unref0 (_tmp116_);
-	_tmp117_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-	_tmp118_ = _tmp117_;
-	vala_ccode_function_add_expression (_tmp118_, (ValaCCodeExpression*) freecall);
+	_tmp100_ = vala_ccode_identifier_new ("g_slice_free");
+	_tmp101_ = _tmp100_;
+	_tmp102_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp101_);
+	_tmp103_ = _tmp102_;
+	_vala_ccode_node_unref0 (_tmp101_);
+	freecall = _tmp103_;
+	_tmp104_ = dataname;
+	_tmp105_ = vala_ccode_identifier_new (_tmp104_);
+	_tmp106_ = _tmp105_;
+	vala_ccode_function_call_add_argument (freecall, (ValaCCodeExpression*) _tmp106_);
+	_vala_ccode_node_unref0 (_tmp106_);
+	_tmp107_ = vala_ccode_identifier_new ("_data_");
+	_tmp108_ = _tmp107_;
+	vala_ccode_function_call_add_argument (freecall, (ValaCCodeExpression*) _tmp108_);
+	_vala_ccode_node_unref0 (_tmp108_);
+	_tmp109_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+	_tmp110_ = _tmp109_;
+	vala_ccode_function_add_expression (_tmp110_, (ValaCCodeExpression*) freecall);
 	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
-	_tmp119_ = ((ValaCCodeBaseModule*) self)->cfile;
-	_tmp120_ = freefunc;
-	vala_ccode_file_add_function_declaration (_tmp119_, _tmp120_);
-	_tmp121_ = ((ValaCCodeBaseModule*) self)->cfile;
-	_tmp122_ = freefunc;
-	vala_ccode_file_add_function (_tmp121_, _tmp122_);
+	_tmp111_ = ((ValaCCodeBaseModule*) self)->cfile;
+	_tmp112_ = freefunc;
+	vala_ccode_file_add_function_declaration (_tmp111_, _tmp112_);
+	_tmp113_ = ((ValaCCodeBaseModule*) self)->cfile;
+	_tmp114_ = freefunc;
+	vala_ccode_file_add_function (_tmp113_, _tmp114_);
 	result = freefunc;
 	_vala_ccode_node_unref0 (freecall);
 	_g_free0 (dataname);
@@ -1617,22 +1586,22 @@ static void vala_gasync_module_generate_async_function (ValaGAsyncModule* self,
 	ValaMemberBinding _tmp225_;
 	ValaCCodeBaseModuleEmitContext* _tmp260_;
 	ValaMethod* _tmp261_;
-	ValaCCodeBaseModuleEmitContext* _tmp320_;
-	ValaMethod* _tmp380_;
-	gchar* _tmp381_ = NULL;
-	gchar* _tmp382_;
-	gchar* _tmp383_;
-	gchar* _tmp384_;
-	ValaCCodeIdentifier* _tmp385_;
-	ValaCCodeIdentifier* _tmp386_;
-	ValaCCodeFunctionCall* _tmp387_;
-	ValaCCodeFunctionCall* _tmp388_;
+	ValaCCodeBaseModuleEmitContext* _tmp312_;
+	ValaMethod* _tmp372_;
+	gchar* _tmp373_ = NULL;
+	gchar* _tmp374_;
+	gchar* _tmp375_;
+	gchar* _tmp376_;
+	ValaCCodeIdentifier* _tmp377_;
+	ValaCCodeIdentifier* _tmp378_;
+	ValaCCodeFunctionCall* _tmp379_;
+	ValaCCodeFunctionCall* _tmp380_;
 	ValaCCodeFunctionCall* ccall;
-	ValaCCodeIdentifier* _tmp389_;
-	ValaCCodeFunction* _tmp390_;
-	ValaCCodeFunction* _tmp391_;
-	ValaCCodeFile* _tmp392_;
-	ValaCCodeFunction* _tmp393_;
+	ValaCCodeIdentifier* _tmp381_;
+	ValaCCodeFunction* _tmp382_;
+	ValaCCodeFunction* _tmp383_;
+	ValaCCodeFile* _tmp384_;
+	ValaCCodeFunction* _tmp385_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (m != NULL);
 	_tmp0_ = vala_ccode_base_module_emit_context_new (NULL);
@@ -2239,124 +2208,100 @@ static void vala_gasync_module_generate_async_function (ValaGAsyncModule* self,
 			_tmp274_ = vala_parameter_get_direction (_tmp273_);
 			_tmp275_ = _tmp274_;
 			if (_tmp275_ != VALA_PARAMETER_DIRECTION_OUT) {
-				gboolean _tmp276_ = FALSE;
-				ValaParameter* _tmp277_;
+				ValaParameter* _tmp276_;
+				ValaDataType* _tmp277_;
 				ValaDataType* _tmp278_;
-				ValaDataType* _tmp279_;
-				gboolean _tmp285_;
-				gboolean is_unowned_delegate;
-				ValaParameter* _tmp286_;
-				ValaDataType* _tmp287_;
-				ValaDataType* _tmp288_;
-				ValaDataType* _tmp289_ = NULL;
+				ValaDataType* _tmp279_ = NULL;
 				ValaDataType* param_type;
-				ValaDataType* _tmp290_;
-				ValaParameter* _tmp291_;
-				gboolean _tmp292_;
-				gboolean _tmp293_;
+				ValaDataType* _tmp280_;
+				gboolean _tmp281_;
+				gboolean _tmp282_;
+				ValaParameter* _tmp286_;
+				gboolean _tmp287_;
+				gboolean _tmp288_;
 				gboolean old_captured;
-				ValaParameter* _tmp294_;
-				ValaMethod* _tmp295_;
-				ValaMethod* _tmp296_;
-				ValaParameter* _tmp297_;
-				ValaTargetValue* _tmp298_ = NULL;
+				ValaParameter* _tmp289_;
+				ValaMethod* _tmp290_;
+				ValaMethod* _tmp291_;
+				ValaParameter* _tmp292_;
+				ValaTargetValue* _tmp293_ = NULL;
 				ValaTargetValue* value;
-				gboolean _tmp299_ = FALSE;
-				gboolean _tmp300_ = FALSE;
-				ValaDataType* _tmp301_;
-				gboolean _tmp302_ = FALSE;
-				gboolean _tmp308_;
-				gboolean _tmp310_;
-				ValaMethod* _tmp314_;
-				ValaMethod* _tmp315_;
-				ValaParameter* _tmp316_;
-				ValaTargetValue* _tmp317_;
-				ValaParameter* _tmp318_;
-				gboolean _tmp319_;
-				_tmp277_ = param;
-				_tmp278_ = vala_variable_get_variable_type ((ValaVariable*) _tmp277_);
-				_tmp279_ = _tmp278_;
-				if (VALA_IS_DELEGATE_TYPE (_tmp279_)) {
-					ValaParameter* _tmp280_;
-					ValaDataType* _tmp281_;
-					ValaDataType* _tmp282_;
-					gboolean _tmp283_;
-					gboolean _tmp284_;
-					_tmp280_ = param;
-					_tmp281_ = vala_variable_get_variable_type ((ValaVariable*) _tmp280_);
-					_tmp282_ = _tmp281_;
-					_tmp283_ = vala_data_type_get_value_owned (_tmp282_);
-					_tmp284_ = _tmp283_;
-					_tmp276_ = !_tmp284_;
-				} else {
-					_tmp276_ = FALSE;
+				gboolean _tmp294_ = FALSE;
+				ValaDataType* _tmp295_;
+				gboolean _tmp296_ = FALSE;
+				gboolean _tmp302_;
+				ValaMethod* _tmp306_;
+				ValaMethod* _tmp307_;
+				ValaParameter* _tmp308_;
+				ValaTargetValue* _tmp309_;
+				ValaParameter* _tmp310_;
+				gboolean _tmp311_;
+				_tmp276_ = param;
+				_tmp277_ = vala_variable_get_variable_type ((ValaVariable*) _tmp276_);
+				_tmp278_ = _tmp277_;
+				_tmp279_ = vala_data_type_copy (_tmp278_);
+				param_type = _tmp279_;
+				_tmp280_ = param_type;
+				_tmp281_ = vala_data_type_get_value_owned (_tmp280_);
+				_tmp282_ = _tmp281_;
+				if (!_tmp282_) {
+					ValaDataType* _tmp283_;
+					ValaDataType* _tmp284_;
+					gboolean _tmp285_ = FALSE;
+					_tmp283_ = param_type;
+					_tmp284_ = param_type;
+					_tmp285_ = vala_ccode_base_module_no_implicit_copy ((ValaCCodeBaseModule*) self, _tmp284_);
+					vala_data_type_set_value_owned (_tmp283_, !_tmp285_);
 				}
-				_tmp285_ = _tmp276_;
-				is_unowned_delegate = _tmp285_;
 				_tmp286_ = param;
-				_tmp287_ = vala_variable_get_variable_type ((ValaVariable*) _tmp286_);
+				_tmp287_ = vala_parameter_get_captured (_tmp286_);
 				_tmp288_ = _tmp287_;
-				_tmp289_ = vala_data_type_copy (_tmp288_);
-				param_type = _tmp289_;
-				_tmp290_ = param_type;
-				vala_data_type_set_value_owned (_tmp290_, TRUE);
-				_tmp291_ = param;
-				_tmp292_ = vala_parameter_get_captured (_tmp291_);
-				_tmp293_ = _tmp292_;
-				old_captured = _tmp293_;
-				_tmp294_ = param;
-				vala_parameter_set_captured (_tmp294_, FALSE);
-				_tmp295_ = vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self);
-				_tmp296_ = _tmp295_;
-				vala_method_set_coroutine (_tmp296_, FALSE);
-				_tmp297_ = param;
-				_tmp298_ = vala_code_generator_load_parameter ((ValaCodeGenerator*) self, _tmp297_);
-				value = _tmp298_;
-				_tmp301_ = param_type;
-				_tmp302_ = vala_ccode_base_module_requires_copy ((ValaCCodeBaseModule*) self, _tmp301_);
-				if (_tmp302_) {
-					ValaParameter* _tmp303_;
-					ValaDataType* _tmp304_;
-					ValaDataType* _tmp305_;
-					gboolean _tmp306_;
-					gboolean _tmp307_;
-					_tmp303_ = param;
-					_tmp304_ = vala_variable_get_variable_type ((ValaVariable*) _tmp303_);
-					_tmp305_ = _tmp304_;
-					_tmp306_ = vala_data_type_get_value_owned (_tmp305_);
-					_tmp307_ = _tmp306_;
-					_tmp300_ = !_tmp307_;
+				old_captured = _tmp288_;
+				_tmp289_ = param;
+				vala_parameter_set_captured (_tmp289_, FALSE);
+				_tmp290_ = vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self);
+				_tmp291_ = _tmp290_;
+				vala_method_set_coroutine (_tmp291_, FALSE);
+				_tmp292_ = param;
+				_tmp293_ = vala_code_generator_load_parameter ((ValaCodeGenerator*) self, _tmp292_);
+				value = _tmp293_;
+				_tmp295_ = param_type;
+				_tmp296_ = vala_ccode_base_module_requires_copy ((ValaCCodeBaseModule*) self, _tmp295_);
+				if (_tmp296_) {
+					ValaParameter* _tmp297_;
+					ValaDataType* _tmp298_;
+					ValaDataType* _tmp299_;
+					gboolean _tmp300_;
+					gboolean _tmp301_;
+					_tmp297_ = param;
+					_tmp298_ = vala_variable_get_variable_type ((ValaVariable*) _tmp297_);
+					_tmp299_ = _tmp298_;
+					_tmp300_ = vala_data_type_get_value_owned (_tmp299_);
+					_tmp301_ = _tmp300_;
+					_tmp294_ = !_tmp301_;
 				} else {
-					_tmp300_ = FALSE;
+					_tmp294_ = FALSE;
 				}
-				_tmp308_ = _tmp300_;
-				if (_tmp308_) {
-					gboolean _tmp309_;
-					_tmp309_ = is_unowned_delegate;
-					_tmp299_ = !_tmp309_;
-				} else {
-					_tmp299_ = FALSE;
-				}
-				_tmp310_ = _tmp299_;
-				if (_tmp310_) {
-					ValaTargetValue* _tmp311_;
-					ValaParameter* _tmp312_;
-					ValaTargetValue* _tmp313_ = NULL;
-					_tmp311_ = value;
-					_tmp312_ = param;
-					_tmp313_ = vala_ccode_base_module_copy_value ((ValaCCodeBaseModule*) self, _tmp311_, (ValaCodeNode*) _tmp312_);
+				_tmp302_ = _tmp294_;
+				if (_tmp302_) {
+					ValaTargetValue* _tmp303_;
+					ValaParameter* _tmp304_;
+					ValaTargetValue* _tmp305_ = NULL;
+					_tmp303_ = value;
+					_tmp304_ = param;
+					_tmp305_ = vala_ccode_base_module_copy_value ((ValaCCodeBaseModule*) self, _tmp303_, (ValaCodeNode*) _tmp304_);
 					_vala_target_value_unref0 (value);
-					value = _tmp313_;
+					value = _tmp305_;
 				}
-				_tmp314_ = vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self);
-				_tmp315_ = _tmp314_;
-				vala_method_set_coroutine (_tmp315_, TRUE);
-				_tmp316_ = param;
-				_tmp317_ = value;
-				vala_code_generator_store_parameter ((ValaCodeGenerator*) self, _tmp316_, _tmp317_);
-				_tmp318_ = param;
-				_tmp319_ = old_captured;
-				vala_parameter_set_captured (_tmp318_, _tmp319_);
+				_tmp306_ = vala_ccode_base_module_get_current_method ((ValaCCodeBaseModule*) self);
+				_tmp307_ = _tmp306_;
+				vala_method_set_coroutine (_tmp307_, TRUE);
+				_tmp308_ = param;
+				_tmp309_ = value;
+				vala_code_generator_store_parameter ((ValaCodeGenerator*) self, _tmp308_, _tmp309_);
+				_tmp310_ = param;
+				_tmp311_ = old_captured;
+				vala_parameter_set_captured (_tmp310_, _tmp311_);
 				_vala_target_value_unref0 (value);
 				_vala_code_node_unref0 (param_type);
 			}
@@ -2364,158 +2309,158 @@ static void vala_gasync_module_generate_async_function (ValaGAsyncModule* self,
 		}
 		_vala_iterable_unref0 (_param_list);
 	}
-	_tmp320_ = ((ValaCCodeBaseModule*) self)->emit_context;
-	vala_ccode_base_module_emit_context_pop_symbol (_tmp320_);
+	_tmp312_ = ((ValaCCodeBaseModule*) self)->emit_context;
+	vala_ccode_base_module_emit_context_pop_symbol (_tmp312_);
 	{
-		ValaMethod* _tmp321_;
-		ValaList* _tmp322_ = NULL;
+		ValaMethod* _tmp313_;
+		ValaList* _tmp314_ = NULL;
 		ValaList* _type_param_list;
-		ValaList* _tmp323_;
-		gint _tmp324_;
-		gint _tmp325_;
+		ValaList* _tmp315_;
+		gint _tmp316_;
+		gint _tmp317_;
 		gint _type_param_size;
 		gint _type_param_index;
-		_tmp321_ = m;
-		_tmp322_ = vala_method_get_type_parameters (_tmp321_);
-		_type_param_list = _tmp322_;
-		_tmp323_ = _type_param_list;
-		_tmp324_ = vala_collection_get_size ((ValaCollection*) _tmp323_);
-		_tmp325_ = _tmp324_;
-		_type_param_size = _tmp325_;
+		_tmp313_ = m;
+		_tmp314_ = vala_method_get_type_parameters (_tmp313_);
+		_type_param_list = _tmp314_;
+		_tmp315_ = _type_param_list;
+		_tmp316_ = vala_collection_get_size ((ValaCollection*) _tmp315_);
+		_tmp317_ = _tmp316_;
+		_type_param_size = _tmp317_;
 		_type_param_index = -1;
 		while (TRUE) {
-			gint _tmp326_;
-			gint _tmp327_;
-			gint _tmp328_;
-			ValaList* _tmp329_;
-			gint _tmp330_;
-			gpointer _tmp331_ = NULL;
+			gint _tmp318_;
+			gint _tmp319_;
+			gint _tmp320_;
+			ValaList* _tmp321_;
+			gint _tmp322_;
+			gpointer _tmp323_ = NULL;
 			ValaTypeParameter* type_param;
-			ValaTypeParameter* _tmp332_;
-			const gchar* _tmp333_;
-			const gchar* _tmp334_;
-			gchar* _tmp335_ = NULL;
-			gchar* _tmp336_;
-			gchar* _tmp337_ = NULL;
-			gchar* _tmp338_;
+			ValaTypeParameter* _tmp324_;
+			const gchar* _tmp325_;
+			const gchar* _tmp326_;
+			gchar* _tmp327_ = NULL;
+			gchar* _tmp328_;
+			gchar* _tmp329_ = NULL;
+			gchar* _tmp330_;
 			gchar* type;
-			ValaTypeParameter* _tmp339_;
-			const gchar* _tmp340_;
-			const gchar* _tmp341_;
-			gchar* _tmp342_ = NULL;
-			gchar* _tmp343_;
-			gchar* _tmp344_ = NULL;
-			gchar* _tmp345_;
+			ValaTypeParameter* _tmp331_;
+			const gchar* _tmp332_;
+			const gchar* _tmp333_;
+			gchar* _tmp334_ = NULL;
+			gchar* _tmp335_;
+			gchar* _tmp336_ = NULL;
+			gchar* _tmp337_;
 			gchar* dup_func;
-			ValaTypeParameter* _tmp346_;
-			const gchar* _tmp347_;
-			const gchar* _tmp348_;
-			gchar* _tmp349_ = NULL;
-			gchar* _tmp350_;
-			gchar* _tmp351_ = NULL;
-			gchar* _tmp352_;
+			ValaTypeParameter* _tmp338_;
+			const gchar* _tmp339_;
+			const gchar* _tmp340_;
+			gchar* _tmp341_ = NULL;
+			gchar* _tmp342_;
+			gchar* _tmp343_ = NULL;
+			gchar* _tmp344_;
 			gchar* destroy_func;
-			ValaCCodeFunction* _tmp353_;
+			ValaCCodeFunction* _tmp345_;
+			ValaCCodeFunction* _tmp346_;
+			ValaCCodeIdentifier* _tmp347_;
+			const gchar* _tmp348_;
+			ValaCCodeMemberAccess* _tmp349_;
+			ValaCCodeMemberAccess* _tmp350_;
+			const gchar* _tmp351_;
+			ValaCCodeIdentifier* _tmp352_;
+			ValaCCodeIdentifier* _tmp353_;
 			ValaCCodeFunction* _tmp354_;
-			ValaCCodeIdentifier* _tmp355_;
-			const gchar* _tmp356_;
-			ValaCCodeMemberAccess* _tmp357_;
+			ValaCCodeFunction* _tmp355_;
+			ValaCCodeIdentifier* _tmp356_;
+			const gchar* _tmp357_;
 			ValaCCodeMemberAccess* _tmp358_;
-			const gchar* _tmp359_;
-			ValaCCodeIdentifier* _tmp360_;
+			ValaCCodeMemberAccess* _tmp359_;
+			const gchar* _tmp360_;
 			ValaCCodeIdentifier* _tmp361_;
-			ValaCCodeFunction* _tmp362_;
+			ValaCCodeIdentifier* _tmp362_;
 			ValaCCodeFunction* _tmp363_;
-			ValaCCodeIdentifier* _tmp364_;
-			const gchar* _tmp365_;
-			ValaCCodeMemberAccess* _tmp366_;
+			ValaCCodeFunction* _tmp364_;
+			ValaCCodeIdentifier* _tmp365_;
+			const gchar* _tmp366_;
 			ValaCCodeMemberAccess* _tmp367_;
-			const gchar* _tmp368_;
-			ValaCCodeIdentifier* _tmp369_;
+			ValaCCodeMemberAccess* _tmp368_;
+			const gchar* _tmp369_;
 			ValaCCodeIdentifier* _tmp370_;
-			ValaCCodeFunction* _tmp371_;
-			ValaCCodeFunction* _tmp372_;
-			ValaCCodeIdentifier* _tmp373_;
-			const gchar* _tmp374_;
-			ValaCCodeMemberAccess* _tmp375_;
-			ValaCCodeMemberAccess* _tmp376_;
-			const gchar* _tmp377_;
-			ValaCCodeIdentifier* _tmp378_;
-			ValaCCodeIdentifier* _tmp379_;
-			_tmp326_ = _type_param_index;
-			_type_param_index = _tmp326_ + 1;
-			_tmp327_ = _type_param_index;
-			_tmp328_ = _type_param_size;
-			if (!(_tmp327_ < _tmp328_)) {
+			ValaCCodeIdentifier* _tmp371_;
+			_tmp318_ = _type_param_index;
+			_type_param_index = _tmp318_ + 1;
+			_tmp319_ = _type_param_index;
+			_tmp320_ = _type_param_size;
+			if (!(_tmp319_ < _tmp320_)) {
 				break;
 			}
-			_tmp329_ = _type_param_list;
-			_tmp330_ = _type_param_index;
-			_tmp331_ = vala_list_get (_tmp329_, _tmp330_);
-			type_param = (ValaTypeParameter*) _tmp331_;
-			_tmp332_ = type_param;
-			_tmp333_ = vala_symbol_get_name ((ValaSymbol*) _tmp332_);
-			_tmp334_ = _tmp333_;
-			_tmp335_ = g_utf8_strdown (_tmp334_, (gssize) (-1));
-			_tmp336_ = _tmp335_;
-			_tmp337_ = g_strdup_printf ("%s_type", _tmp336_);
-			_tmp338_ = _tmp337_;
-			_g_free0 (_tmp336_);
-			type = _tmp338_;
-			_tmp339_ = type_param;
-			_tmp340_ = vala_symbol_get_name ((ValaSymbol*) _tmp339_);
-			_tmp341_ = _tmp340_;
-			_tmp342_ = g_utf8_strdown (_tmp341_, (gssize) (-1));
-			_tmp343_ = _tmp342_;
-			_tmp344_ = g_strdup_printf ("%s_dup_func", _tmp343_);
-			_tmp345_ = _tmp344_;
-			_g_free0 (_tmp343_);
-			dup_func = _tmp345_;
-			_tmp346_ = type_param;
-			_tmp347_ = vala_symbol_get_name ((ValaSymbol*) _tmp346_);
-			_tmp348_ = _tmp347_;
-			_tmp349_ = g_utf8_strdown (_tmp348_, (gssize) (-1));
+			_tmp321_ = _type_param_list;
+			_tmp322_ = _type_param_index;
+			_tmp323_ = vala_list_get (_tmp321_, _tmp322_);
+			type_param = (ValaTypeParameter*) _tmp323_;
+			_tmp324_ = type_param;
+			_tmp325_ = vala_symbol_get_name ((ValaSymbol*) _tmp324_);
+			_tmp326_ = _tmp325_;
+			_tmp327_ = g_utf8_strdown (_tmp326_, (gssize) (-1));
+			_tmp328_ = _tmp327_;
+			_tmp329_ = g_strdup_printf ("%s_type", _tmp328_);
+			_tmp330_ = _tmp329_;
+			_g_free0 (_tmp328_);
+			type = _tmp330_;
+			_tmp331_ = type_param;
+			_tmp332_ = vala_symbol_get_name ((ValaSymbol*) _tmp331_);
+			_tmp333_ = _tmp332_;
+			_tmp334_ = g_utf8_strdown (_tmp333_, (gssize) (-1));
+			_tmp335_ = _tmp334_;
+			_tmp336_ = g_strdup_printf ("%s_dup_func", _tmp335_);
+			_tmp337_ = _tmp336_;
+			_g_free0 (_tmp335_);
+			dup_func = _tmp337_;
+			_tmp338_ = type_param;
+			_tmp339_ = vala_symbol_get_name ((ValaSymbol*) _tmp338_);
+			_tmp340_ = _tmp339_;
+			_tmp341_ = g_utf8_strdown (_tmp340_, (gssize) (-1));
+			_tmp342_ = _tmp341_;
+			_tmp343_ = g_strdup_printf ("%s_destroy_func", _tmp342_);
+			_tmp344_ = _tmp343_;
+			_g_free0 (_tmp342_);
+			destroy_func = _tmp344_;
+			_tmp345_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp346_ = _tmp345_;
+			_tmp347_ = data_var;
+			_tmp348_ = type;
+			_tmp349_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp347_, _tmp348_);
 			_tmp350_ = _tmp349_;
-			_tmp351_ = g_strdup_printf ("%s_destroy_func", _tmp350_);
-			_tmp352_ = _tmp351_;
-			_g_free0 (_tmp350_);
-			destroy_func = _tmp352_;
-			_tmp353_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp354_ = _tmp353_;
-			_tmp355_ = data_var;
-			_tmp356_ = type;
-			_tmp357_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp355_, _tmp356_);
-			_tmp358_ = _tmp357_;
-			_tmp359_ = type;
-			_tmp360_ = vala_ccode_identifier_new (_tmp359_);
-			_tmp361_ = _tmp360_;
-			vala_ccode_function_add_assignment (_tmp354_, (ValaCCodeExpression*) _tmp358_, (ValaCCodeExpression*) _tmp361_);
-			_vala_ccode_node_unref0 (_tmp361_);
-			_vala_ccode_node_unref0 (_tmp358_);
-			_tmp362_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp363_ = _tmp362_;
-			_tmp364_ = data_var;
-			_tmp365_ = dup_func;
-			_tmp366_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp364_, _tmp365_);
-			_tmp367_ = _tmp366_;
-			_tmp368_ = dup_func;
-			_tmp369_ = vala_ccode_identifier_new (_tmp368_);
-			_tmp370_ = _tmp369_;
-			vala_ccode_function_add_assignment (_tmp363_, (ValaCCodeExpression*) _tmp367_, (ValaCCodeExpression*) _tmp370_);
-			_vala_ccode_node_unref0 (_tmp370_);
-			_vala_ccode_node_unref0 (_tmp367_);
-			_tmp371_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-			_tmp372_ = _tmp371_;
-			_tmp373_ = data_var;
-			_tmp374_ = destroy_func;
-			_tmp375_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp373_, _tmp374_);
-			_tmp376_ = _tmp375_;
-			_tmp377_ = destroy_func;
-			_tmp378_ = vala_ccode_identifier_new (_tmp377_);
-			_tmp379_ = _tmp378_;
-			vala_ccode_function_add_assignment (_tmp372_, (ValaCCodeExpression*) _tmp376_, (ValaCCodeExpression*) _tmp379_);
-			_vala_ccode_node_unref0 (_tmp379_);
-			_vala_ccode_node_unref0 (_tmp376_);
+			_tmp351_ = type;
+			_tmp352_ = vala_ccode_identifier_new (_tmp351_);
+			_tmp353_ = _tmp352_;
+			vala_ccode_function_add_assignment (_tmp346_, (ValaCCodeExpression*) _tmp350_, (ValaCCodeExpression*) _tmp353_);
+			_vala_ccode_node_unref0 (_tmp353_);
+			_vala_ccode_node_unref0 (_tmp350_);
+			_tmp354_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp355_ = _tmp354_;
+			_tmp356_ = data_var;
+			_tmp357_ = dup_func;
+			_tmp358_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp356_, _tmp357_);
+			_tmp359_ = _tmp358_;
+			_tmp360_ = dup_func;
+			_tmp361_ = vala_ccode_identifier_new (_tmp360_);
+			_tmp362_ = _tmp361_;
+			vala_ccode_function_add_assignment (_tmp355_, (ValaCCodeExpression*) _tmp359_, (ValaCCodeExpression*) _tmp362_);
+			_vala_ccode_node_unref0 (_tmp362_);
+			_vala_ccode_node_unref0 (_tmp359_);
+			_tmp363_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp364_ = _tmp363_;
+			_tmp365_ = data_var;
+			_tmp366_ = destroy_func;
+			_tmp367_ = vala_ccode_member_access_new_pointer ((ValaCCodeExpression*) _tmp365_, _tmp366_);
+			_tmp368_ = _tmp367_;
+			_tmp369_ = destroy_func;
+			_tmp370_ = vala_ccode_identifier_new (_tmp369_);
+			_tmp371_ = _tmp370_;
+			vala_ccode_function_add_assignment (_tmp364_, (ValaCCodeExpression*) _tmp368_, (ValaCCodeExpression*) _tmp371_);
+			_vala_ccode_node_unref0 (_tmp371_);
+			_vala_ccode_node_unref0 (_tmp368_);
 			_g_free0 (destroy_func);
 			_g_free0 (dup_func);
 			_g_free0 (type);
@@ -2523,27 +2468,27 @@ static void vala_gasync_module_generate_async_function (ValaGAsyncModule* self,
 		}
 		_vala_iterable_unref0 (_type_param_list);
 	}
-	_tmp380_ = m;
-	_tmp381_ = vala_ccode_base_module_get_ccode_real_name ((ValaSymbol*) _tmp380_);
-	_tmp382_ = _tmp381_;
-	_tmp383_ = g_strconcat (_tmp382_, "_co", NULL);
-	_tmp384_ = _tmp383_;
-	_tmp385_ = vala_ccode_identifier_new (_tmp384_);
-	_tmp386_ = _tmp385_;
-	_tmp387_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp386_);
-	_tmp388_ = _tmp387_;
-	_vala_ccode_node_unref0 (_tmp386_);
-	_g_free0 (_tmp384_);
-	_g_free0 (_tmp382_);
-	ccall = _tmp388_;
-	_tmp389_ = data_var;
-	vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp389_);
-	_tmp390_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-	_tmp391_ = _tmp390_;
-	vala_ccode_function_add_expression (_tmp391_, (ValaCCodeExpression*) ccall);
-	_tmp392_ = ((ValaCCodeBaseModule*) self)->cfile;
-	_tmp393_ = asyncfunc;
-	vala_ccode_file_add_function (_tmp392_, _tmp393_);
+	_tmp372_ = m;
+	_tmp373_ = vala_ccode_base_module_get_ccode_real_name ((ValaSymbol*) _tmp372_);
+	_tmp374_ = _tmp373_;
+	_tmp375_ = g_strconcat (_tmp374_, "_co", NULL);
+	_tmp376_ = _tmp375_;
+	_tmp377_ = vala_ccode_identifier_new (_tmp376_);
+	_tmp378_ = _tmp377_;
+	_tmp379_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp378_);
+	_tmp380_ = _tmp379_;
+	_vala_ccode_node_unref0 (_tmp378_);
+	_g_free0 (_tmp376_);
+	_g_free0 (_tmp374_);
+	ccall = _tmp380_;
+	_tmp381_ = data_var;
+	vala_ccode_function_call_add_argument (ccall, (ValaCCodeExpression*) _tmp381_);
+	_tmp382_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+	_tmp383_ = _tmp382_;
+	vala_ccode_function_add_expression (_tmp383_, (ValaCCodeExpression*) ccall);
+	_tmp384_ = ((ValaCCodeBaseModule*) self)->cfile;
+	_tmp385_ = asyncfunc;
+	vala_ccode_file_add_function (_tmp384_, _tmp385_);
 	vala_ccode_base_module_pop_context ((ValaCCodeBaseModule*) self);
 	_vala_ccode_node_unref0 (ccall);
 	_vala_ccode_node_unref0 (set_op_res_call);
diff --git a/codegen/valagasyncmodule.vala b/codegen/valagasyncmodule.vala
index 64ec2b5..bee5ceb 100644
--- a/codegen/valagasyncmodule.vala
+++ b/codegen/valagasyncmodule.vala
@@ -58,7 +58,7 @@ public class Vala.GAsyncModule : GSignalModule {
 			} else if (param.variable_type is DelegateType) {
 				var deleg_type = (DelegateType) param.variable_type;
 				if (deleg_type.delegate_symbol.has_target) {
-					data.add_field ("gpointer", get_delegate_target_cname (get_variable_cname (param.name)));
+					data.add_field ("gpointer", get_ccode_delegate_target_name (param));
 					if (!is_unowned_delegate) {
 						data.add_field ("GDestroyNotify", get_delegate_target_destroy_notify_cname (get_variable_cname (param.name)));
 					}
@@ -107,12 +107,12 @@ public class Vala.GAsyncModule : GSignalModule {
 
 		foreach (Parameter param in m.get_parameters ()) {
 			if (param.direction != ParameterDirection.OUT) {
-				bool is_unowned_delegate = param.variable_type is DelegateType && !param.variable_type.value_owned;
-
 				var param_type = param.variable_type.copy ();
-				param_type.value_owned = true;
+				if (!param_type.value_owned) {
+					param_type.value_owned = !no_implicit_copy (param_type);
+				}
 
-				if (requires_destroy (param_type) && !is_unowned_delegate) {
+				if (requires_destroy (param_type)) {
 					// do not try to access closure blocks
 					bool old_captured = param.captured;
 					param.captured = false;
@@ -255,17 +255,17 @@ public class Vala.GAsyncModule : GSignalModule {
 		emit_context.push_symbol (m);
 		foreach (Parameter param in m.get_parameters ()) {
 			if (param.direction != ParameterDirection.OUT) {
-				bool is_unowned_delegate = param.variable_type is DelegateType && !param.variable_type.value_owned;
-
 				var param_type = param.variable_type.copy ();
-				param_type.value_owned = true;
+				if (!param_type.value_owned) {
+					param_type.value_owned = !no_implicit_copy (param_type);
+				}
 
 				// create copy if necessary as variables in async methods may need to be kept alive
 				var old_captured = param.captured;
 				param.captured = false;
 				current_method.coroutine = false;
 				var value = load_parameter (param);
-				if (requires_copy (param_type) && !param.variable_type.value_owned && !is_unowned_delegate)  {
+				if (requires_copy (param_type) && !param.variable_type.value_owned) {
 					value = copy_value (value, param);
 				}
 				current_method.coroutine = true;
diff --git a/codegen/valagirwriter.c b/codegen/valagirwriter.c
index ef7a2ef..5ade7ce 100644
--- a/codegen/valagirwriter.c
+++ b/codegen/valagirwriter.c
@@ -64,6 +64,23 @@ struct _ValaGIRWriter {
 
 struct _ValaGIRWriterClass {
 	ValaCodeVisitorClass parent_class;
+	gchar* (*get_interface_comment) (ValaGIRWriter* self, ValaInterface* iface);
+	gchar* (*get_struct_comment) (ValaGIRWriter* self, ValaStruct* st);
+	gchar* (*get_enum_comment) (ValaGIRWriter* self, ValaEnum* en);
+	gchar* (*get_class_comment) (ValaGIRWriter* self, ValaClass* c);
+	gchar* (*get_error_code_comment) (ValaGIRWriter* self, ValaErrorCode* ecode);
+	gchar* (*get_enum_value_comment) (ValaGIRWriter* self, ValaEnumValue* ev);
+	gchar* (*get_constant_comment) (ValaGIRWriter* self, ValaConstant* c);
+	gchar* (*get_error_domain_comment) (ValaGIRWriter* self, ValaErrorDomain* edomain);
+	gchar* (*get_field_comment) (ValaGIRWriter* self, ValaField* f);
+	gchar* (*get_delegate_comment) (ValaGIRWriter* self, ValaDelegate* cb);
+	gchar* (*get_method_comment) (ValaGIRWriter* self, ValaMethod* m);
+	gchar* (*get_property_comment) (ValaGIRWriter* self, ValaProperty* prop);
+	gchar* (*get_delegate_return_comment) (ValaGIRWriter* self, ValaDelegate* cb);
+	gchar* (*get_signal_return_comment) (ValaGIRWriter* self, ValaSignal* sig);
+	gchar* (*get_method_return_comment) (ValaGIRWriter* self, ValaMethod* m);
+	gchar* (*get_signal_comment) (ValaGIRWriter* self, ValaSignal* sig);
+	gchar* (*get_parameter_comment) (ValaGIRWriter* self, ValaParameter* param);
 };
 
 struct _ValaGIRWriterGIRNamespace {
@@ -84,6 +101,7 @@ struct _ValaGIRWriterPrivate {
 	ValaArrayList* deferred;
 	gint indent;
 	ValaTypeSymbol* gobject_type;
+	ValaTypeSymbol* ginitiallyunowned_type;
 	ValaArrayList* externals;
 	gint enum_value;
 };
@@ -102,10 +120,45 @@ enum  {
 	VALA_GIR_WRITER_DUMMY_PROPERTY
 };
 static gboolean vala_gir_writer_gir_namespace_equal (ValaGIRWriterGIRNamespace *self, ValaGIRWriterGIRNamespace* g);
+gchar* vala_gir_writer_get_interface_comment (ValaGIRWriter* self, ValaInterface* iface);
+static gchar* vala_gir_writer_real_get_interface_comment (ValaGIRWriter* self, ValaInterface* iface);
+gchar* vala_gir_writer_get_struct_comment (ValaGIRWriter* self, ValaStruct* st);
+static gchar* vala_gir_writer_real_get_struct_comment (ValaGIRWriter* self, ValaStruct* st);
+gchar* vala_gir_writer_get_enum_comment (ValaGIRWriter* self, ValaEnum* en);
+static gchar* vala_gir_writer_real_get_enum_comment (ValaGIRWriter* self, ValaEnum* en);
+gchar* vala_gir_writer_get_class_comment (ValaGIRWriter* self, ValaClass* c);
+static gchar* vala_gir_writer_real_get_class_comment (ValaGIRWriter* self, ValaClass* c);
+gchar* vala_gir_writer_get_error_code_comment (ValaGIRWriter* self, ValaErrorCode* ecode);
+static gchar* vala_gir_writer_real_get_error_code_comment (ValaGIRWriter* self, ValaErrorCode* ecode);
+gchar* vala_gir_writer_get_enum_value_comment (ValaGIRWriter* self, ValaEnumValue* ev);
+static gchar* vala_gir_writer_real_get_enum_value_comment (ValaGIRWriter* self, ValaEnumValue* ev);
+gchar* vala_gir_writer_get_constant_comment (ValaGIRWriter* self, ValaConstant* c);
+static gchar* vala_gir_writer_real_get_constant_comment (ValaGIRWriter* self, ValaConstant* c);
+gchar* vala_gir_writer_get_error_domain_comment (ValaGIRWriter* self, ValaErrorDomain* edomain);
+static gchar* vala_gir_writer_real_get_error_domain_comment (ValaGIRWriter* self, ValaErrorDomain* edomain);
+gchar* vala_gir_writer_get_field_comment (ValaGIRWriter* self, ValaField* f);
+static gchar* vala_gir_writer_real_get_field_comment (ValaGIRWriter* self, ValaField* f);
+gchar* vala_gir_writer_get_delegate_comment (ValaGIRWriter* self, ValaDelegate* cb);
+static gchar* vala_gir_writer_real_get_delegate_comment (ValaGIRWriter* self, ValaDelegate* cb);
+gchar* vala_gir_writer_get_method_comment (ValaGIRWriter* self, ValaMethod* m);
+static gchar* vala_gir_writer_real_get_method_comment (ValaGIRWriter* self, ValaMethod* m);
+gchar* vala_gir_writer_get_property_comment (ValaGIRWriter* self, ValaProperty* prop);
+static gchar* vala_gir_writer_real_get_property_comment (ValaGIRWriter* self, ValaProperty* prop);
+gchar* vala_gir_writer_get_delegate_return_comment (ValaGIRWriter* self, ValaDelegate* cb);
+static gchar* vala_gir_writer_real_get_delegate_return_comment (ValaGIRWriter* self, ValaDelegate* cb);
+gchar* vala_gir_writer_get_signal_return_comment (ValaGIRWriter* self, ValaSignal* sig);
+static gchar* vala_gir_writer_real_get_signal_return_comment (ValaGIRWriter* self, ValaSignal* sig);
+gchar* vala_gir_writer_get_method_return_comment (ValaGIRWriter* self, ValaMethod* m);
+static gchar* vala_gir_writer_real_get_method_return_comment (ValaGIRWriter* self, ValaMethod* m);
+gchar* vala_gir_writer_get_signal_comment (ValaGIRWriter* self, ValaSignal* sig);
+static gchar* vala_gir_writer_real_get_signal_comment (ValaGIRWriter* self, ValaSignal* sig);
+gchar* vala_gir_writer_get_parameter_comment (ValaGIRWriter* self, ValaParameter* param);
+static gchar* vala_gir_writer_real_get_parameter_comment (ValaGIRWriter* self, ValaParameter* param);
 void vala_gir_writer_write_includes (ValaGIRWriter* self);
 static void vala_gir_writer_write_indent_stream (ValaGIRWriter* self);
 void vala_gir_writer_write_file (ValaGIRWriter* self, ValaCodeContext* context, const gchar* directory, const gchar* gir_namespace, const gchar* gir_version, const gchar* package);
 static void vala_gir_writer_write_package (ValaGIRWriter* self, const gchar* package);
+static void vala_gir_writer_write_doc (ValaGIRWriter* self, const gchar* comment);
 static void vala_gir_writer_write_indent (ValaGIRWriter* self);
 static void vala_gir_writer_write_c_includes (ValaGIRWriter* self, ValaNamespace* ns);
 gchar* vala_ccode_base_module_get_ccode_header_filenames (ValaSymbol* sym);
@@ -122,9 +175,9 @@ static void vala_gir_writer_write_gtype_attributes (ValaGIRWriter* self, ValaTyp
 static gchar* vala_gir_writer_gi_type_name (ValaGIRWriter* self, ValaTypeSymbol* type_symbol);
 gchar* vala_ccode_base_module_get_ccode_name (ValaCodeNode* node);
 static void vala_gir_writer_write_ctype_attributes (ValaGIRWriter* self, ValaTypeSymbol* symbol, const gchar* suffix);
-static void vala_gir_writer_do_write_signature (ValaGIRWriter* self, ValaMethod* m, const gchar* tag_name, gboolean instance, const gchar* name, const gchar* cname, ValaList* params, ValaDataType* return_type, gboolean can_fail);
+static void vala_gir_writer_do_write_signature (ValaGIRWriter* self, ValaMethod* m, const gchar* tag_name, gboolean instance, const gchar* name, const gchar* cname, ValaList* params, ValaDataType* return_type, gboolean can_fail, gboolean write_comment);
 gchar* vala_ccode_base_module_get_ccode_finish_name (ValaMethod* m);
-static void vala_gir_writer_write_signature (ValaGIRWriter* self, ValaMethod* m, const gchar* tag_name, gboolean instance);
+static void vala_gir_writer_write_signature (ValaGIRWriter* self, ValaMethod* m, const gchar* tag_name, gboolean write_doc, gboolean instance);
 static void vala_gir_writer_real_visit_struct (ValaCodeVisitor* base, ValaStruct* st);
 static void vala_gir_writer_real_visit_interface (ValaCodeVisitor* base, ValaInterface* iface);
 static void vala_gir_writer_real_visit_enum (ValaCodeVisitor* base, ValaEnum* en);
@@ -137,8 +190,8 @@ static void vala_gir_writer_real_visit_constant (ValaCodeVisitor* base, ValaCons
 static void vala_gir_writer_write_type (ValaGIRWriter* self, ValaDataType* type, gint index);
 static void vala_gir_writer_real_visit_field (ValaCodeVisitor* base, ValaField* f);
 static void vala_gir_writer_write_implicit_params (ValaGIRWriter* self, ValaDataType* type, gint* index, gboolean has_array_length, const gchar* name, ValaParameterDirection direction);
-static void vala_gir_writer_write_param_or_return (ValaGIRWriter* self, ValaDataType* type, gboolean is_parameter, gint* index, gboolean has_array_length, const gchar* name, ValaParameterDirection direction, gboolean constructor, gboolean caller_allocates);
-static void vala_gir_writer_write_params_and_return (ValaGIRWriter* self, ValaList* params, ValaDataType* return_type, gboolean return_array_length, gboolean constructor, ValaDataType* instance_type, gboolean user_data);
+static void vala_gir_writer_write_param_or_return (ValaGIRWriter* self, ValaDataType* type, gboolean is_parameter, gint* index, gboolean has_array_length, const gchar* name, const gchar* comment, ValaParameterDirection direction, gboolean constructor, gboolean caller_allocates);
+static void vala_gir_writer_write_params_and_return (ValaGIRWriter* self, ValaList* params, ValaDataType* return_type, gboolean return_array_length, const gchar* return_comment, gboolean constructor, ValaDataType* instance_type, gboolean user_data);
 gboolean vala_ccode_base_module_get_ccode_array_length (ValaCodeNode* node);
 static void vala_gir_writer_real_visit_delegate (ValaCodeVisitor* base, ValaDelegate* cb);
 static void vala_gir_writer_real_visit_method (ValaCodeVisitor* base, ValaMethod* m);
@@ -159,6 +212,244 @@ static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify
 static gint _vala_array_length (gpointer array);
 
 
+static gchar* vala_gir_writer_real_get_interface_comment (ValaGIRWriter* self, ValaInterface* iface) {
+	gchar* result = NULL;
+	g_return_val_if_fail (iface != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_interface_comment (ValaGIRWriter* self, ValaInterface* iface) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_interface_comment (self, iface);
+}
+
+
+static gchar* vala_gir_writer_real_get_struct_comment (ValaGIRWriter* self, ValaStruct* st) {
+	gchar* result = NULL;
+	g_return_val_if_fail (st != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_struct_comment (ValaGIRWriter* self, ValaStruct* st) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_struct_comment (self, st);
+}
+
+
+static gchar* vala_gir_writer_real_get_enum_comment (ValaGIRWriter* self, ValaEnum* en) {
+	gchar* result = NULL;
+	g_return_val_if_fail (en != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_enum_comment (ValaGIRWriter* self, ValaEnum* en) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_enum_comment (self, en);
+}
+
+
+static gchar* vala_gir_writer_real_get_class_comment (ValaGIRWriter* self, ValaClass* c) {
+	gchar* result = NULL;
+	g_return_val_if_fail (c != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_class_comment (ValaGIRWriter* self, ValaClass* c) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_class_comment (self, c);
+}
+
+
+static gchar* vala_gir_writer_real_get_error_code_comment (ValaGIRWriter* self, ValaErrorCode* ecode) {
+	gchar* result = NULL;
+	g_return_val_if_fail (ecode != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_error_code_comment (ValaGIRWriter* self, ValaErrorCode* ecode) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_error_code_comment (self, ecode);
+}
+
+
+static gchar* vala_gir_writer_real_get_enum_value_comment (ValaGIRWriter* self, ValaEnumValue* ev) {
+	gchar* result = NULL;
+	g_return_val_if_fail (ev != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_enum_value_comment (ValaGIRWriter* self, ValaEnumValue* ev) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_enum_value_comment (self, ev);
+}
+
+
+static gchar* vala_gir_writer_real_get_constant_comment (ValaGIRWriter* self, ValaConstant* c) {
+	gchar* result = NULL;
+	g_return_val_if_fail (c != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_constant_comment (ValaGIRWriter* self, ValaConstant* c) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_constant_comment (self, c);
+}
+
+
+static gchar* vala_gir_writer_real_get_error_domain_comment (ValaGIRWriter* self, ValaErrorDomain* edomain) {
+	gchar* result = NULL;
+	g_return_val_if_fail (edomain != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_error_domain_comment (ValaGIRWriter* self, ValaErrorDomain* edomain) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_error_domain_comment (self, edomain);
+}
+
+
+static gchar* vala_gir_writer_real_get_field_comment (ValaGIRWriter* self, ValaField* f) {
+	gchar* result = NULL;
+	g_return_val_if_fail (f != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_field_comment (ValaGIRWriter* self, ValaField* f) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_field_comment (self, f);
+}
+
+
+static gchar* vala_gir_writer_real_get_delegate_comment (ValaGIRWriter* self, ValaDelegate* cb) {
+	gchar* result = NULL;
+	g_return_val_if_fail (cb != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_delegate_comment (ValaGIRWriter* self, ValaDelegate* cb) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_delegate_comment (self, cb);
+}
+
+
+static gchar* vala_gir_writer_real_get_method_comment (ValaGIRWriter* self, ValaMethod* m) {
+	gchar* result = NULL;
+	g_return_val_if_fail (m != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_method_comment (ValaGIRWriter* self, ValaMethod* m) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_method_comment (self, m);
+}
+
+
+static gchar* vala_gir_writer_real_get_property_comment (ValaGIRWriter* self, ValaProperty* prop) {
+	gchar* result = NULL;
+	g_return_val_if_fail (prop != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_property_comment (ValaGIRWriter* self, ValaProperty* prop) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_property_comment (self, prop);
+}
+
+
+static gchar* vala_gir_writer_real_get_delegate_return_comment (ValaGIRWriter* self, ValaDelegate* cb) {
+	gchar* result = NULL;
+	g_return_val_if_fail (cb != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_delegate_return_comment (ValaGIRWriter* self, ValaDelegate* cb) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_delegate_return_comment (self, cb);
+}
+
+
+static gchar* vala_gir_writer_real_get_signal_return_comment (ValaGIRWriter* self, ValaSignal* sig) {
+	gchar* result = NULL;
+	g_return_val_if_fail (sig != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_signal_return_comment (ValaGIRWriter* self, ValaSignal* sig) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_signal_return_comment (self, sig);
+}
+
+
+static gchar* vala_gir_writer_real_get_method_return_comment (ValaGIRWriter* self, ValaMethod* m) {
+	gchar* result = NULL;
+	g_return_val_if_fail (m != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_method_return_comment (ValaGIRWriter* self, ValaMethod* m) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_method_return_comment (self, m);
+}
+
+
+static gchar* vala_gir_writer_real_get_signal_comment (ValaGIRWriter* self, ValaSignal* sig) {
+	gchar* result = NULL;
+	g_return_val_if_fail (sig != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_signal_comment (ValaGIRWriter* self, ValaSignal* sig) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_signal_comment (self, sig);
+}
+
+
+static gchar* vala_gir_writer_real_get_parameter_comment (ValaGIRWriter* self, ValaParameter* param) {
+	gchar* result = NULL;
+	g_return_val_if_fail (param != NULL, NULL);
+	result = NULL;
+	return result;
+}
+
+
+gchar* vala_gir_writer_get_parameter_comment (ValaGIRWriter* self, ValaParameter* param) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_GIR_WRITER_GET_CLASS (self)->get_parameter_comment (self, param);
+}
+
+
 static gpointer _vala_iterable_ref0 (gpointer self) {
 	return self ? vala_iterable_ref (self) : NULL;
 }
@@ -191,11 +482,9 @@ void vala_gir_writer_write_includes (ValaGIRWriter* self) {
 			gint _tmp9_;
 			gpointer _tmp10_ = NULL;
 			ValaGIRWriterGIRNamespace* i;
-			FILE* _tmp11_;
-			ValaGIRWriterGIRNamespace* _tmp12_;
+			ValaGIRWriterGIRNamespace* _tmp11_;
+			const gchar* _tmp12_;
 			const gchar* _tmp13_;
-			ValaGIRWriterGIRNamespace* _tmp14_;
-			const gchar* _tmp15_;
 			_tmp5_ = _i_index;
 			_i_index = _tmp5_ + 1;
 			_tmp6_ = _i_index;
@@ -207,13 +496,23 @@ void vala_gir_writer_write_includes (ValaGIRWriter* self) {
 			_tmp9_ = _i_index;
 			_tmp10_ = vala_list_get ((ValaList*) _tmp8_, _tmp9_);
 			i = (ValaGIRWriterGIRNamespace*) _tmp10_;
-			vala_gir_writer_write_indent_stream (self);
-			_tmp11_ = self->priv->stream;
-			_tmp12_ = i;
-			_tmp13_ = (*_tmp12_).ns;
-			_tmp14_ = i;
-			_tmp15_ = (*_tmp14_).version;
-			fprintf (_tmp11_, "<include name=\"%s\" version=\"%s\"/>\n", _tmp13_, _tmp15_);
+			_tmp11_ = i;
+			_tmp12_ = (*_tmp11_).ns;
+			_tmp13_ = self->priv->gir_namespace;
+			if (g_strcmp0 (_tmp12_, _tmp13_) != 0) {
+				FILE* _tmp14_;
+				ValaGIRWriterGIRNamespace* _tmp15_;
+				const gchar* _tmp16_;
+				ValaGIRWriterGIRNamespace* _tmp17_;
+				const gchar* _tmp18_;
+				vala_gir_writer_write_indent_stream (self);
+				_tmp14_ = self->priv->stream;
+				_tmp15_ = i;
+				_tmp16_ = (*_tmp15_).ns;
+				_tmp17_ = i;
+				_tmp18_ = (*_tmp17_).version;
+				fprintf (_tmp14_, "<include name=\"%s\" version=\"%s\"/>\n", _tmp16_, _tmp18_);
+			}
 			_vala_gir_writer_gir_namespace_free0 (i);
 		}
 		_vala_iterable_unref0 (_i_list);
@@ -261,29 +560,36 @@ void vala_gir_writer_write_file (ValaGIRWriter* self, ValaCodeContext* context,
 	ValaScope* _tmp17_;
 	ValaScope* _tmp18_;
 	ValaSymbol* _tmp19_ = NULL;
-	const gchar* _tmp20_;
-	ValaCodeContext* _tmp21_;
-	gint _tmp22_;
-	GString* _tmp23_;
+	ValaSymbol* _tmp20_;
+	ValaScope* _tmp21_;
+	ValaScope* _tmp22_;
+	ValaSymbol* _tmp23_ = NULL;
 	const gchar* _tmp24_;
-	const gchar* _tmp25_;
-	const gchar* _tmp26_;
-	gchar* _tmp27_ = NULL;
-	gchar* filename;
+	ValaCodeContext* _tmp25_;
+	gint _tmp26_;
+	GString* _tmp27_;
 	const gchar* _tmp28_;
-	FILE* _tmp29_ = NULL;
-	FILE* _tmp30_;
+	const gchar* _tmp29_;
+	const gchar* _tmp30_;
+	gchar* _tmp31_ = NULL;
+	gchar* filename;
+	const gchar* _tmp32_;
+	FILE* _tmp33_ = NULL;
 	FILE* _tmp34_;
-	FILE* _tmp35_;
-	FILE* _tmp36_;
-	FILE* _tmp37_;
 	FILE* _tmp38_;
 	FILE* _tmp39_;
-	gint _tmp40_;
-	gint _tmp41_;
+	FILE* _tmp40_;
+	FILE* _tmp41_;
 	FILE* _tmp42_;
-	GString* _tmp43_;
-	const gchar* _tmp44_;
+	FILE* _tmp43_;
+	gint _tmp44_;
+	gint _tmp45_;
+	FILE* _tmp46_;
+	GString* _tmp47_;
+	const gchar* _tmp48_;
+	ValaHashSet* _tmp84_;
+	gint _tmp85_;
+	gint _tmp86_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (context != NULL);
 	g_return_if_fail (directory != NULL);
@@ -322,169 +628,202 @@ void vala_gir_writer_write_file (ValaGIRWriter* self, ValaCodeContext* context,
 	_tmp19_ = vala_scope_lookup (_tmp18_, "Object");
 	_vala_code_node_unref0 (self->priv->gobject_type);
 	self->priv->gobject_type = VALA_TYPESYMBOL (_tmp19_);
-	_tmp20_ = package;
-	vala_gir_writer_write_package (self, _tmp20_);
-	_tmp21_ = context;
-	vala_code_context_accept (_tmp21_, (ValaCodeVisitor*) self);
-	_tmp22_ = self->priv->indent;
-	self->priv->indent = _tmp22_ - 1;
-	_tmp23_ = self->priv->buffer;
-	g_string_append_printf (_tmp23_, "</repository>\n");
-	_tmp24_ = directory;
-	_tmp25_ = gir_namespace;
-	_tmp26_ = gir_version;
-	_tmp27_ = g_strdup_printf ("%s%c%s-%s.gir", _tmp24_, (gint) G_DIR_SEPARATOR, _tmp25_, _tmp26_);
-	filename = _tmp27_;
-	_tmp28_ = filename;
-	_tmp29_ = fopen (_tmp28_, "w");
+	_tmp20_ = glib_ns;
+	_tmp21_ = vala_symbol_get_scope (_tmp20_);
+	_tmp22_ = _tmp21_;
+	_tmp23_ = vala_scope_lookup (_tmp22_, "InitiallyUnowned");
+	_vala_code_node_unref0 (self->priv->ginitiallyunowned_type);
+	self->priv->ginitiallyunowned_type = VALA_TYPESYMBOL (_tmp23_);
+	_tmp24_ = package;
+	vala_gir_writer_write_package (self, _tmp24_);
+	_tmp25_ = context;
+	vala_code_context_accept (_tmp25_, (ValaCodeVisitor*) self);
+	_tmp26_ = self->priv->indent;
+	self->priv->indent = _tmp26_ - 1;
+	_tmp27_ = self->priv->buffer;
+	g_string_append_printf (_tmp27_, "</repository>\n");
+	_tmp28_ = directory;
+	_tmp29_ = gir_namespace;
+	_tmp30_ = gir_version;
+	_tmp31_ = g_strdup_printf ("%s%c%s-%s.gir", _tmp28_, (gint) G_DIR_SEPARATOR, _tmp29_, _tmp30_);
+	filename = _tmp31_;
+	_tmp32_ = filename;
+	_tmp33_ = fopen (_tmp32_, "w");
 	_fclose0 (self->priv->stream);
-	self->priv->stream = _tmp29_;
-	_tmp30_ = self->priv->stream;
-	if (_tmp30_ == NULL) {
-		const gchar* _tmp31_;
-		gchar* _tmp32_ = NULL;
-		gchar* _tmp33_;
-		_tmp31_ = filename;
-		_tmp32_ = g_strdup_printf ("unable to open `%s' for writing", _tmp31_);
-		_tmp33_ = _tmp32_;
-		vala_report_error (NULL, _tmp33_);
-		_g_free0 (_tmp33_);
+	self->priv->stream = _tmp33_;
+	_tmp34_ = self->priv->stream;
+	if (_tmp34_ == NULL) {
+		const gchar* _tmp35_;
+		gchar* _tmp36_ = NULL;
+		gchar* _tmp37_;
+		_tmp35_ = filename;
+		_tmp36_ = g_strdup_printf ("unable to open `%s' for writing", _tmp35_);
+		_tmp37_ = _tmp36_;
+		vala_report_error (NULL, _tmp37_);
+		_g_free0 (_tmp37_);
 		_g_free0 (filename);
 		_vala_code_node_unref0 (glib_ns);
 		_vala_code_node_unref0 (root_symbol);
 		return;
 	}
-	_tmp34_ = self->priv->stream;
-	fprintf (_tmp34_, "<?xml version=\"1.0\"?>\n");
-	_tmp35_ = self->priv->stream;
-	fprintf (_tmp35_, "<repository version=\"1.2\"");
-	_tmp36_ = self->priv->stream;
-	fprintf (_tmp36_, " xmlns=\"http://www.gtk.org/introspection/core/1.0\"";);
-	_tmp37_ = self->priv->stream;
-	fprintf (_tmp37_, " xmlns:c=\"http://www.gtk.org/introspection/c/1.0\"";);
 	_tmp38_ = self->priv->stream;
-	fprintf (_tmp38_, " xmlns:glib=\"http://www.gtk.org/introspection/glib/1.0\"";);
+	fprintf (_tmp38_, "<?xml version=\"1.0\"?>\n");
 	_tmp39_ = self->priv->stream;
-	fprintf (_tmp39_, ">\n");
-	_tmp40_ = self->priv->indent;
-	self->priv->indent = _tmp40_ + 1;
-	vala_gir_writer_write_includes (self);
-	_tmp41_ = self->priv->indent;
-	self->priv->indent = _tmp41_ - 1;
+	fprintf (_tmp39_, "<repository version=\"1.2\"");
+	_tmp40_ = self->priv->stream;
+	fprintf (_tmp40_, " xmlns=\"http://www.gtk.org/introspection/core/1.0\"";);
+	_tmp41_ = self->priv->stream;
+	fprintf (_tmp41_, " xmlns:c=\"http://www.gtk.org/introspection/c/1.0\"";);
 	_tmp42_ = self->priv->stream;
-	_tmp43_ = self->priv->buffer;
-	_tmp44_ = _tmp43_->str;
-	fputs (_tmp44_, _tmp42_);
+	fprintf (_tmp42_, " xmlns:glib=\"http://www.gtk.org/introspection/glib/1.0\"";);
+	_tmp43_ = self->priv->stream;
+	fprintf (_tmp43_, ">\n");
+	_tmp44_ = self->priv->indent;
+	self->priv->indent = _tmp44_ + 1;
+	vala_gir_writer_write_includes (self);
+	_tmp45_ = self->priv->indent;
+	self->priv->indent = _tmp45_ - 1;
+	_tmp46_ = self->priv->stream;
+	_tmp47_ = self->priv->buffer;
+	_tmp48_ = _tmp47_->str;
+	fputs (_tmp48_, _tmp46_);
 	_fclose0 (self->priv->stream);
 	self->priv->stream = NULL;
 	{
-		ValaHashSet* _tmp45_;
-		ValaIterator* _tmp46_ = NULL;
+		ValaHashSet* _tmp49_;
+		ValaIterator* _tmp50_ = NULL;
 		ValaIterator* _ns_it;
-		_tmp45_ = self->priv->unannotated_namespaces;
-		_tmp46_ = vala_iterable_iterator ((ValaIterable*) _tmp45_);
-		_ns_it = _tmp46_;
+		_tmp49_ = self->priv->unannotated_namespaces;
+		_tmp50_ = vala_iterable_iterator ((ValaIterable*) _tmp49_);
+		_ns_it = _tmp50_;
 		while (TRUE) {
-			ValaIterator* _tmp47_;
-			gboolean _tmp48_ = FALSE;
-			ValaIterator* _tmp49_;
-			gpointer _tmp50_ = NULL;
+			ValaIterator* _tmp51_;
+			gboolean _tmp52_ = FALSE;
+			ValaIterator* _tmp53_;
+			gpointer _tmp54_ = NULL;
 			ValaNamespace* ns;
-			ValaHashSet* _tmp51_;
-			ValaNamespace* _tmp52_;
-			gboolean _tmp53_ = FALSE;
-			_tmp47_ = _ns_it;
-			_tmp48_ = vala_iterator_next (_tmp47_);
-			if (!_tmp48_) {
+			ValaHashSet* _tmp55_;
+			ValaNamespace* _tmp56_;
+			gboolean _tmp57_ = FALSE;
+			_tmp51_ = _ns_it;
+			_tmp52_ = vala_iterator_next (_tmp51_);
+			if (!_tmp52_) {
 				break;
 			}
-			_tmp49_ = _ns_it;
-			_tmp50_ = vala_iterator_get (_tmp49_);
-			ns = (ValaNamespace*) _tmp50_;
-			_tmp51_ = self->priv->our_namespaces;
-			_tmp52_ = ns;
-			_tmp53_ = vala_collection_contains ((ValaCollection*) _tmp51_, _tmp52_);
-			if (!_tmp53_) {
-				ValaNamespace* _tmp54_;
-				ValaSourceReference* _tmp55_;
-				ValaSourceReference* _tmp56_;
-				ValaNamespace* _tmp57_;
-				const gchar* _tmp58_;
-				const gchar* _tmp59_;
-				gchar* _tmp60_ = NULL;
-				gchar* _tmp61_;
-				_tmp54_ = ns;
-				_tmp55_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp54_);
-				_tmp56_ = _tmp55_;
-				_tmp57_ = ns;
-				_tmp58_ = vala_symbol_get_name ((ValaSymbol*) _tmp57_);
-				_tmp59_ = _tmp58_;
-				_tmp60_ = g_strdup_printf ("Namespace %s does not have a GIR namespace and version annotation", _tmp59_);
-				_tmp61_ = _tmp60_;
-				vala_report_warning (_tmp56_, _tmp61_);
-				_g_free0 (_tmp61_);
+			_tmp53_ = _ns_it;
+			_tmp54_ = vala_iterator_get (_tmp53_);
+			ns = (ValaNamespace*) _tmp54_;
+			_tmp55_ = self->priv->our_namespaces;
+			_tmp56_ = ns;
+			_tmp57_ = vala_collection_contains ((ValaCollection*) _tmp55_, _tmp56_);
+			if (!_tmp57_) {
+				ValaNamespace* _tmp58_;
+				ValaSourceReference* _tmp59_;
+				ValaSourceReference* _tmp60_;
+				ValaNamespace* _tmp61_;
+				const gchar* _tmp62_;
+				const gchar* _tmp63_;
+				gchar* _tmp64_ = NULL;
+				gchar* _tmp65_;
+				_tmp58_ = ns;
+				_tmp59_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp58_);
+				_tmp60_ = _tmp59_;
+				_tmp61_ = ns;
+				_tmp62_ = vala_symbol_get_name ((ValaSymbol*) _tmp61_);
+				_tmp63_ = _tmp62_;
+				_tmp64_ = g_strdup_printf ("Namespace %s does not have a GIR namespace and version annotation", _tmp63_);
+				_tmp65_ = _tmp64_;
+				vala_report_warning (_tmp60_, _tmp65_);
+				_g_free0 (_tmp65_);
 			}
 			_vala_code_node_unref0 (ns);
 		}
 		_vala_iterator_unref0 (_ns_it);
 	}
 	{
-		ValaHashSet* _tmp62_;
-		ValaIterator* _tmp63_ = NULL;
+		ValaHashSet* _tmp66_;
+		ValaIterator* _tmp67_ = NULL;
 		ValaIterator* _ns_it;
-		_tmp62_ = self->priv->our_namespaces;
-		_tmp63_ = vala_iterable_iterator ((ValaIterable*) _tmp62_);
-		_ns_it = _tmp63_;
+		_tmp66_ = self->priv->our_namespaces;
+		_tmp67_ = vala_iterable_iterator ((ValaIterable*) _tmp66_);
+		_ns_it = _tmp67_;
 		while (TRUE) {
-			ValaIterator* _tmp64_;
-			gboolean _tmp65_ = FALSE;
-			ValaIterator* _tmp66_;
-			gpointer _tmp67_ = NULL;
+			ValaIterator* _tmp68_;
+			gboolean _tmp69_ = FALSE;
+			ValaIterator* _tmp70_;
+			gpointer _tmp71_ = NULL;
 			ValaNamespace* ns;
-			ValaNamespace* _tmp68_;
-			ValaSourceReference* _tmp69_;
-			ValaSourceReference* _tmp70_;
-			ValaSourceFile* _tmp71_;
-			ValaSourceFile* _tmp72_;
-			const gchar* _tmp73_;
-			ValaNamespace* _tmp74_;
-			ValaSourceReference* _tmp75_;
-			ValaSourceReference* _tmp76_;
-			ValaSourceFile* _tmp77_;
-			ValaSourceFile* _tmp78_;
-			const gchar* _tmp79_;
-			_tmp64_ = _ns_it;
-			_tmp65_ = vala_iterator_next (_tmp64_);
-			if (!_tmp65_) {
+			ValaNamespace* _tmp72_;
+			ValaSourceReference* _tmp73_;
+			ValaSourceReference* _tmp74_;
+			ValaSourceFile* _tmp75_;
+			ValaSourceFile* _tmp76_;
+			const gchar* _tmp77_;
+			ValaNamespace* _tmp78_;
+			ValaSourceReference* _tmp79_;
+			ValaSourceReference* _tmp80_;
+			ValaSourceFile* _tmp81_;
+			ValaSourceFile* _tmp82_;
+			const gchar* _tmp83_;
+			_tmp68_ = _ns_it;
+			_tmp69_ = vala_iterator_next (_tmp68_);
+			if (!_tmp69_) {
 				break;
 			}
-			_tmp66_ = _ns_it;
-			_tmp67_ = vala_iterator_get (_tmp66_);
-			ns = (ValaNamespace*) _tmp67_;
-			_tmp68_ = ns;
-			_tmp69_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp68_);
-			_tmp70_ = _tmp69_;
-			_tmp71_ = vala_source_reference_get_file (_tmp70_);
-			_tmp72_ = _tmp71_;
-			_tmp73_ = gir_namespace;
-			vala_source_file_set_gir_namespace (_tmp72_, _tmp73_);
-			_tmp74_ = ns;
-			_tmp75_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp74_);
+			_tmp70_ = _ns_it;
+			_tmp71_ = vala_iterator_get (_tmp70_);
+			ns = (ValaNamespace*) _tmp71_;
+			_tmp72_ = ns;
+			_tmp73_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp72_);
+			_tmp74_ = _tmp73_;
+			_tmp75_ = vala_source_reference_get_file (_tmp74_);
 			_tmp76_ = _tmp75_;
-			_tmp77_ = vala_source_reference_get_file (_tmp76_);
-			_tmp78_ = _tmp77_;
-			_tmp79_ = gir_version;
-			vala_source_file_set_gir_version (_tmp78_, _tmp79_);
+			_tmp77_ = gir_namespace;
+			vala_source_file_set_gir_namespace (_tmp76_, _tmp77_);
+			_tmp78_ = ns;
+			_tmp79_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp78_);
+			_tmp80_ = _tmp79_;
+			_tmp81_ = vala_source_reference_get_file (_tmp80_);
+			_tmp82_ = _tmp81_;
+			_tmp83_ = gir_version;
+			vala_source_file_set_gir_version (_tmp82_, _tmp83_);
 			_vala_code_node_unref0 (ns);
 		}
 		_vala_iterator_unref0 (_ns_it);
 	}
+	_tmp84_ = self->priv->our_namespaces;
+	_tmp85_ = vala_collection_get_size ((ValaCollection*) _tmp84_);
+	_tmp86_ = _tmp85_;
+	if (_tmp86_ == 0) {
+		vala_report_error (NULL, "No suitable namespace found to export for GIR");
+	}
 	_g_free0 (filename);
 	_vala_code_node_unref0 (glib_ns);
 	_vala_code_node_unref0 (root_symbol);
 }
 
 
+static void vala_gir_writer_write_doc (ValaGIRWriter* self, const gchar* comment) {
+	const gchar* _tmp0_;
+	g_return_if_fail (self != NULL);
+	_tmp0_ = comment;
+	if (_tmp0_ != NULL) {
+		GString* _tmp1_;
+		GString* _tmp2_;
+		const gchar* _tmp3_;
+		GString* _tmp4_;
+		vala_gir_writer_write_indent (self);
+		_tmp1_ = self->priv->buffer;
+		g_string_append (_tmp1_, "<doc xml:whitespace=\"preserve\">");
+		_tmp2_ = self->priv->buffer;
+		_tmp3_ = comment;
+		g_string_append (_tmp2_, _tmp3_);
+		_tmp4_ = self->priv->buffer;
+		g_string_append (_tmp4_, "</doc>\n");
+	}
+}
+
+
 static void vala_gir_writer_write_package (ValaGIRWriter* self, const gchar* package) {
 	GString* _tmp0_;
 	const gchar* _tmp1_;
@@ -1028,72 +1367,75 @@ static void vala_gir_writer_real_visit_class (ValaCodeVisitor* base, ValaClass*
 		ValaClass* _tmp35_;
 		GString* _tmp36_;
 		gint _tmp37_;
-		ValaClass* _tmp60_;
-		GString* _tmp61_;
-		gint _tmp62_;
-		GString* _tmp63_;
-		ValaClass* _tmp64_;
-		ValaClass* _tmp65_;
-		ValaClass* _tmp66_;
-		gchar* _tmp67_ = NULL;
-		gchar* _tmp68_;
+		ValaClass* _tmp38_;
+		gchar* _tmp39_ = NULL;
+		gchar* _tmp40_;
+		ValaClass* _tmp63_;
+		GString* _tmp64_;
+		gint _tmp65_;
+		GString* _tmp66_;
+		ValaClass* _tmp67_;
+		ValaClass* _tmp68_;
 		ValaClass* _tmp69_;
-		ValaClass* _tmp70_;
-		ValaClass* _tmp71_;
-		gchar* _tmp72_ = NULL;
-		gchar* _tmp73_;
-		gint _tmp74_;
-		GString* _tmp75_;
-		GString* _tmp76_;
+		gchar* _tmp70_ = NULL;
+		gchar* _tmp71_;
+		ValaClass* _tmp72_;
+		ValaClass* _tmp73_;
+		ValaClass* _tmp74_;
+		gchar* _tmp75_ = NULL;
+		gchar* _tmp76_;
 		gint _tmp77_;
 		GString* _tmp78_;
-		ValaClass* _tmp79_;
-		const gchar* _tmp80_;
-		const gchar* _tmp81_;
+		GString* _tmp79_;
+		gint _tmp80_;
+		GString* _tmp81_;
 		ValaClass* _tmp82_;
-		gchar* _tmp83_ = NULL;
-		gchar* _tmp84_;
-		gint _tmp85_;
-		GString* _tmp86_;
-		ValaArrayList* _tmp87_;
-		ValaClass* _tmp88_;
-		ValaClass* _tmp89_;
+		const gchar* _tmp83_;
+		const gchar* _tmp84_;
+		ValaClass* _tmp85_;
+		gchar* _tmp86_ = NULL;
+		gchar* _tmp87_;
+		gint _tmp88_;
+		GString* _tmp89_;
 		ValaArrayList* _tmp90_;
-		gint _tmp91_;
-		GString* _tmp92_;
-		GString* _tmp93_;
-		const gchar* _tmp94_;
-		ValaClass* _tmp95_;
+		ValaClass* _tmp91_;
+		ValaClass* _tmp92_;
+		ValaArrayList* _tmp93_;
+		gint _tmp94_;
+		GString* _tmp95_;
 		GString* _tmp96_;
-		ValaClass* _tmp97_;
-		const gchar* _tmp98_;
-		const gchar* _tmp99_;
-		GString* _tmp100_;
-		gint _tmp101_;
-		GString* _tmp102_;
-		gint _tmp103_;
-		GString* _tmp104_;
-		ValaClass* _tmp105_;
-		ValaClass* _tmp106_;
-		ValaClass* _tmp107_;
-		gchar* _tmp108_ = NULL;
-		gchar* _tmp109_;
+		const gchar* _tmp97_;
+		ValaClass* _tmp98_;
+		GString* _tmp99_;
+		ValaClass* _tmp100_;
+		const gchar* _tmp101_;
+		const gchar* _tmp102_;
+		GString* _tmp103_;
+		gint _tmp104_;
+		GString* _tmp105_;
+		gint _tmp106_;
+		GString* _tmp107_;
+		ValaClass* _tmp108_;
+		ValaClass* _tmp109_;
 		ValaClass* _tmp110_;
-		ValaClass* _tmp111_;
-		ValaClass* _tmp112_;
-		gchar* _tmp113_ = NULL;
-		gchar* _tmp114_;
-		gint _tmp115_;
-		GString* _tmp116_;
-		gint _tmp239_;
-		GString* _tmp240_;
-		GString* _tmp241_;
-		ValaClass* _tmp242_;
-		const gchar* _tmp243_;
-		const gchar* _tmp244_;
+		gchar* _tmp111_ = NULL;
+		gchar* _tmp112_;
+		ValaClass* _tmp113_;
+		ValaClass* _tmp114_;
+		ValaClass* _tmp115_;
+		gchar* _tmp116_ = NULL;
+		gchar* _tmp117_;
+		gint _tmp118_;
+		GString* _tmp119_;
+		gint _tmp242_;
+		GString* _tmp243_;
+		GString* _tmp244_;
 		ValaClass* _tmp245_;
-		gchar* _tmp246_ = NULL;
-		gchar* _tmp247_;
+		const gchar* _tmp246_;
+		const gchar* _tmp247_;
+		ValaClass* _tmp248_;
+		gchar* _tmp249_ = NULL;
+		gchar* _tmp250_;
 		_tmp14_ = cl;
 		_tmp15_ = vala_symbol_get_name ((ValaSymbol*) _tmp14_);
 		_tmp16_ = _tmp15_;
@@ -1133,430 +1475,435 @@ static void vala_gir_writer_real_visit_class (ValaCodeVisitor* base, ValaClass*
 		g_string_append_printf (_tmp36_, ">\n");
 		_tmp37_ = self->priv->indent;
 		self->priv->indent = _tmp37_ + 1;
+		_tmp38_ = cl;
+		_tmp39_ = vala_gir_writer_get_class_comment (self, _tmp38_);
+		_tmp40_ = _tmp39_;
+		vala_gir_writer_write_doc (self, _tmp40_);
+		_g_free0 (_tmp40_);
 		{
-			ValaClass* _tmp38_;
-			ValaList* _tmp39_ = NULL;
+			ValaClass* _tmp41_;
+			ValaList* _tmp42_ = NULL;
 			ValaList* _base_type_list;
-			ValaList* _tmp40_;
-			gint _tmp41_;
-			gint _tmp42_;
+			ValaList* _tmp43_;
+			gint _tmp44_;
+			gint _tmp45_;
 			gint _base_type_size;
 			gint _base_type_index;
-			_tmp38_ = cl;
-			_tmp39_ = vala_class_get_base_types (_tmp38_);
-			_base_type_list = _tmp39_;
-			_tmp40_ = _base_type_list;
-			_tmp41_ = vala_collection_get_size ((ValaCollection*) _tmp40_);
-			_tmp42_ = _tmp41_;
-			_base_type_size = _tmp42_;
+			_tmp41_ = cl;
+			_tmp42_ = vala_class_get_base_types (_tmp41_);
+			_base_type_list = _tmp42_;
+			_tmp43_ = _base_type_list;
+			_tmp44_ = vala_collection_get_size ((ValaCollection*) _tmp43_);
+			_tmp45_ = _tmp44_;
+			_base_type_size = _tmp45_;
 			_base_type_index = -1;
 			while (TRUE) {
-				gint _tmp43_;
-				gint _tmp44_;
-				gint _tmp45_;
-				ValaList* _tmp46_;
+				gint _tmp46_;
 				gint _tmp47_;
-				gpointer _tmp48_ = NULL;
+				gint _tmp48_;
+				ValaList* _tmp49_;
+				gint _tmp50_;
+				gpointer _tmp51_ = NULL;
 				ValaDataType* base_type;
-				ValaDataType* _tmp49_;
-				ValaObjectType* _tmp50_;
+				ValaDataType* _tmp52_;
+				ValaObjectType* _tmp53_;
 				ValaObjectType* object_type;
-				ValaObjectType* _tmp51_;
-				ValaObjectTypeSymbol* _tmp52_;
-				ValaObjectTypeSymbol* _tmp53_;
-				_tmp43_ = _base_type_index;
-				_base_type_index = _tmp43_ + 1;
-				_tmp44_ = _base_type_index;
-				_tmp45_ = _base_type_size;
-				if (!(_tmp44_ < _tmp45_)) {
+				ValaObjectType* _tmp54_;
+				ValaObjectTypeSymbol* _tmp55_;
+				ValaObjectTypeSymbol* _tmp56_;
+				_tmp46_ = _base_type_index;
+				_base_type_index = _tmp46_ + 1;
+				_tmp47_ = _base_type_index;
+				_tmp48_ = _base_type_size;
+				if (!(_tmp47_ < _tmp48_)) {
 					break;
 				}
-				_tmp46_ = _base_type_list;
-				_tmp47_ = _base_type_index;
-				_tmp48_ = vala_list_get (_tmp46_, _tmp47_);
-				base_type = (ValaDataType*) _tmp48_;
-				_tmp49_ = base_type;
-				_tmp50_ = _vala_code_node_ref0 (VALA_OBJECT_TYPE (_tmp49_));
-				object_type = _tmp50_;
-				_tmp51_ = object_type;
-				_tmp52_ = vala_object_type_get_type_symbol (_tmp51_);
-				_tmp53_ = _tmp52_;
-				if (VALA_IS_INTERFACE (_tmp53_)) {
-					GString* _tmp54_;
-					ValaObjectType* _tmp55_;
-					ValaObjectTypeSymbol* _tmp56_;
-					ValaObjectTypeSymbol* _tmp57_;
-					gchar* _tmp58_ = NULL;
-					gchar* _tmp59_;
+				_tmp49_ = _base_type_list;
+				_tmp50_ = _base_type_index;
+				_tmp51_ = vala_list_get (_tmp49_, _tmp50_);
+				base_type = (ValaDataType*) _tmp51_;
+				_tmp52_ = base_type;
+				_tmp53_ = _vala_code_node_ref0 (VALA_OBJECT_TYPE (_tmp52_));
+				object_type = _tmp53_;
+				_tmp54_ = object_type;
+				_tmp55_ = vala_object_type_get_type_symbol (_tmp54_);
+				_tmp56_ = _tmp55_;
+				if (VALA_IS_INTERFACE (_tmp56_)) {
+					GString* _tmp57_;
+					ValaObjectType* _tmp58_;
+					ValaObjectTypeSymbol* _tmp59_;
+					ValaObjectTypeSymbol* _tmp60_;
+					gchar* _tmp61_ = NULL;
+					gchar* _tmp62_;
 					vala_gir_writer_write_indent (self);
-					_tmp54_ = self->priv->buffer;
-					_tmp55_ = object_type;
-					_tmp56_ = vala_object_type_get_type_symbol (_tmp55_);
-					_tmp57_ = _tmp56_;
-					_tmp58_ = vala_gir_writer_gi_type_name (self, (ValaTypeSymbol*) _tmp57_);
-					_tmp59_ = _tmp58_;
-					g_string_append_printf (_tmp54_, "<implements name=\"%s\"/>\n", _tmp59_);
-					_g_free0 (_tmp59_);
+					_tmp57_ = self->priv->buffer;
+					_tmp58_ = object_type;
+					_tmp59_ = vala_object_type_get_type_symbol (_tmp58_);
+					_tmp60_ = _tmp59_;
+					_tmp61_ = vala_gir_writer_gi_type_name (self, (ValaTypeSymbol*) _tmp60_);
+					_tmp62_ = _tmp61_;
+					g_string_append_printf (_tmp57_, "<implements name=\"%s\"/>\n", _tmp62_);
+					_g_free0 (_tmp62_);
 				}
 				_vala_code_node_unref0 (object_type);
 				_vala_code_node_unref0 (base_type);
 			}
 			_vala_iterable_unref0 (_base_type_list);
 		}
-		_tmp60_ = cl;
-		vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp60_);
+		_tmp63_ = cl;
+		vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp63_);
 		vala_gir_writer_write_indent (self);
-		_tmp61_ = self->priv->buffer;
-		g_string_append_printf (_tmp61_, "<field name=\"parent_instance\">\n");
-		_tmp62_ = self->priv->indent;
-		self->priv->indent = _tmp62_ + 1;
+		_tmp64_ = self->priv->buffer;
+		g_string_append_printf (_tmp64_, "<field name=\"parent_instance\">\n");
+		_tmp65_ = self->priv->indent;
+		self->priv->indent = _tmp65_ + 1;
 		vala_gir_writer_write_indent (self);
-		_tmp63_ = self->priv->buffer;
-		_tmp64_ = cl;
-		_tmp65_ = vala_class_get_base_class (_tmp64_);
-		_tmp66_ = _tmp65_;
-		_tmp67_ = vala_gir_writer_gi_type_name (self, (ValaTypeSymbol*) _tmp66_);
-		_tmp68_ = _tmp67_;
-		_tmp69_ = cl;
-		_tmp70_ = vala_class_get_base_class (_tmp69_);
+		_tmp66_ = self->priv->buffer;
+		_tmp67_ = cl;
+		_tmp68_ = vala_class_get_base_class (_tmp67_);
+		_tmp69_ = _tmp68_;
+		_tmp70_ = vala_gir_writer_gi_type_name (self, (ValaTypeSymbol*) _tmp69_);
 		_tmp71_ = _tmp70_;
-		_tmp72_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp71_);
-		_tmp73_ = _tmp72_;
-		g_string_append_printf (_tmp63_, "<type name=\"%s\" c:type=\"%s\"/>\n", _tmp68_, _tmp73_);
-		_g_free0 (_tmp73_);
-		_g_free0 (_tmp68_);
-		_tmp74_ = self->priv->indent;
-		self->priv->indent = _tmp74_ - 1;
-		vala_gir_writer_write_indent (self);
-		_tmp75_ = self->priv->buffer;
-		g_string_append_printf (_tmp75_, "</field>\n");
-		vala_gir_writer_write_indent (self);
-		_tmp76_ = self->priv->buffer;
-		g_string_append_printf (_tmp76_, "<field name=\"priv\">\n");
+		_tmp72_ = cl;
+		_tmp73_ = vala_class_get_base_class (_tmp72_);
+		_tmp74_ = _tmp73_;
+		_tmp75_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp74_);
+		_tmp76_ = _tmp75_;
+		g_string_append_printf (_tmp66_, "<type name=\"%s\" c:type=\"%s\"/>\n", _tmp71_, _tmp76_);
+		_g_free0 (_tmp76_);
+		_g_free0 (_tmp71_);
 		_tmp77_ = self->priv->indent;
-		self->priv->indent = _tmp77_ + 1;
+		self->priv->indent = _tmp77_ - 1;
 		vala_gir_writer_write_indent (self);
 		_tmp78_ = self->priv->buffer;
-		_tmp79_ = cl;
-		_tmp80_ = vala_symbol_get_name ((ValaSymbol*) _tmp79_);
-		_tmp81_ = _tmp80_;
+		g_string_append_printf (_tmp78_, "</field>\n");
+		vala_gir_writer_write_indent (self);
+		_tmp79_ = self->priv->buffer;
+		g_string_append_printf (_tmp79_, "<field name=\"priv\">\n");
+		_tmp80_ = self->priv->indent;
+		self->priv->indent = _tmp80_ + 1;
+		vala_gir_writer_write_indent (self);
+		_tmp81_ = self->priv->buffer;
 		_tmp82_ = cl;
-		_tmp83_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp82_);
+		_tmp83_ = vala_symbol_get_name ((ValaSymbol*) _tmp82_);
 		_tmp84_ = _tmp83_;
-		g_string_append_printf (_tmp78_, "<type name=\"%sPrivate\" c:type=\"%sPrivate*\"/>\n", _tmp81_, _tmp84_);
-		_g_free0 (_tmp84_);
-		_tmp85_ = self->priv->indent;
-		self->priv->indent = _tmp85_ - 1;
+		_tmp85_ = cl;
+		_tmp86_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp85_);
+		_tmp87_ = _tmp86_;
+		g_string_append_printf (_tmp81_, "<type name=\"%sPrivate\" c:type=\"%sPrivate*\"/>\n", _tmp84_, _tmp87_);
+		_g_free0 (_tmp87_);
+		_tmp88_ = self->priv->indent;
+		self->priv->indent = _tmp88_ - 1;
 		vala_gir_writer_write_indent (self);
-		_tmp86_ = self->priv->buffer;
-		g_string_append_printf (_tmp86_, "</field>\n");
-		_tmp87_ = self->priv->hierarchy;
-		_tmp88_ = cl;
-		vala_list_insert ((ValaList*) _tmp87_, 0, (ValaSymbol*) _tmp88_);
-		_tmp89_ = cl;
-		vala_code_node_accept_children ((ValaCodeNode*) _tmp89_, (ValaCodeVisitor*) self);
+		_tmp89_ = self->priv->buffer;
+		g_string_append_printf (_tmp89_, "</field>\n");
 		_tmp90_ = self->priv->hierarchy;
-		vala_list_remove_at ((ValaList*) _tmp90_, 0);
-		_tmp91_ = self->priv->indent;
-		self->priv->indent = _tmp91_ - 1;
+		_tmp91_ = cl;
+		vala_list_insert ((ValaList*) _tmp90_, 0, (ValaSymbol*) _tmp91_);
+		_tmp92_ = cl;
+		vala_code_node_accept_children ((ValaCodeNode*) _tmp92_, (ValaCodeVisitor*) self);
+		_tmp93_ = self->priv->hierarchy;
+		vala_list_remove_at ((ValaList*) _tmp93_, 0);
+		_tmp94_ = self->priv->indent;
+		self->priv->indent = _tmp94_ - 1;
 		vala_gir_writer_write_indent (self);
-		_tmp92_ = self->priv->buffer;
-		g_string_append_printf (_tmp92_, "</class>\n");
+		_tmp95_ = self->priv->buffer;
+		g_string_append_printf (_tmp95_, "</class>\n");
 		vala_gir_writer_write_indent (self);
-		_tmp93_ = self->priv->buffer;
-		_tmp94_ = gtype_struct_name;
-		g_string_append_printf (_tmp93_, "<record name=\"%s\"", _tmp94_);
-		_tmp95_ = cl;
-		vala_gir_writer_write_ctype_attributes (self, (ValaTypeSymbol*) _tmp95_, "Class");
 		_tmp96_ = self->priv->buffer;
-		_tmp97_ = cl;
-		_tmp98_ = vala_symbol_get_name ((ValaSymbol*) _tmp97_);
-		_tmp99_ = _tmp98_;
-		g_string_append_printf (_tmp96_, " glib:is-gtype-struct-for=\"%s\"", _tmp99_);
-		_tmp100_ = self->priv->buffer;
-		g_string_append_printf (_tmp100_, ">\n");
-		_tmp101_ = self->priv->indent;
-		self->priv->indent = _tmp101_ + 1;
+		_tmp97_ = gtype_struct_name;
+		g_string_append_printf (_tmp96_, "<record name=\"%s\"", _tmp97_);
+		_tmp98_ = cl;
+		vala_gir_writer_write_ctype_attributes (self, (ValaTypeSymbol*) _tmp98_, "Class");
+		_tmp99_ = self->priv->buffer;
+		_tmp100_ = cl;
+		_tmp101_ = vala_symbol_get_name ((ValaSymbol*) _tmp100_);
+		_tmp102_ = _tmp101_;
+		g_string_append_printf (_tmp99_, " glib:is-gtype-struct-for=\"%s\"", _tmp102_);
+		_tmp103_ = self->priv->buffer;
+		g_string_append_printf (_tmp103_, ">\n");
+		_tmp104_ = self->priv->indent;
+		self->priv->indent = _tmp104_ + 1;
 		vala_gir_writer_write_indent (self);
-		_tmp102_ = self->priv->buffer;
-		g_string_append_printf (_tmp102_, "<field name=\"parent_class\">\n");
-		_tmp103_ = self->priv->indent;
-		self->priv->indent = _tmp103_ + 1;
+		_tmp105_ = self->priv->buffer;
+		g_string_append_printf (_tmp105_, "<field name=\"parent_class\">\n");
+		_tmp106_ = self->priv->indent;
+		self->priv->indent = _tmp106_ + 1;
 		vala_gir_writer_write_indent (self);
-		_tmp104_ = self->priv->buffer;
-		_tmp105_ = cl;
-		_tmp106_ = vala_class_get_base_class (_tmp105_);
-		_tmp107_ = _tmp106_;
-		_tmp108_ = vala_gir_writer_gi_type_name (self, (ValaTypeSymbol*) _tmp107_);
-		_tmp109_ = _tmp108_;
-		_tmp110_ = cl;
-		_tmp111_ = vala_class_get_base_class (_tmp110_);
+		_tmp107_ = self->priv->buffer;
+		_tmp108_ = cl;
+		_tmp109_ = vala_class_get_base_class (_tmp108_);
+		_tmp110_ = _tmp109_;
+		_tmp111_ = vala_gir_writer_gi_type_name (self, (ValaTypeSymbol*) _tmp110_);
 		_tmp112_ = _tmp111_;
-		_tmp113_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp112_);
-		_tmp114_ = _tmp113_;
-		g_string_append_printf (_tmp104_, "<type name=\"%sClass\" c:type=\"%sClass\"/>\n", _tmp109_, _tmp114_);
-		_g_free0 (_tmp114_);
-		_g_free0 (_tmp109_);
-		_tmp115_ = self->priv->indent;
-		self->priv->indent = _tmp115_ - 1;
+		_tmp113_ = cl;
+		_tmp114_ = vala_class_get_base_class (_tmp113_);
+		_tmp115_ = _tmp114_;
+		_tmp116_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp115_);
+		_tmp117_ = _tmp116_;
+		g_string_append_printf (_tmp107_, "<type name=\"%sClass\" c:type=\"%sClass\"/>\n", _tmp112_, _tmp117_);
+		_g_free0 (_tmp117_);
+		_g_free0 (_tmp112_);
+		_tmp118_ = self->priv->indent;
+		self->priv->indent = _tmp118_ - 1;
 		vala_gir_writer_write_indent (self);
-		_tmp116_ = self->priv->buffer;
-		g_string_append_printf (_tmp116_, "</field>\n");
+		_tmp119_ = self->priv->buffer;
+		g_string_append_printf (_tmp119_, "</field>\n");
 		{
-			ValaClass* _tmp117_;
-			ValaList* _tmp118_ = NULL;
+			ValaClass* _tmp120_;
+			ValaList* _tmp121_ = NULL;
 			ValaList* _m_list;
-			ValaList* _tmp119_;
-			gint _tmp120_;
-			gint _tmp121_;
+			ValaList* _tmp122_;
+			gint _tmp123_;
+			gint _tmp124_;
 			gint _m_size;
 			gint _m_index;
-			_tmp117_ = cl;
-			_tmp118_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) _tmp117_);
-			_m_list = _tmp118_;
-			_tmp119_ = _m_list;
-			_tmp120_ = vala_collection_get_size ((ValaCollection*) _tmp119_);
-			_tmp121_ = _tmp120_;
-			_m_size = _tmp121_;
+			_tmp120_ = cl;
+			_tmp121_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) _tmp120_);
+			_m_list = _tmp121_;
+			_tmp122_ = _m_list;
+			_tmp123_ = vala_collection_get_size ((ValaCollection*) _tmp122_);
+			_tmp124_ = _tmp123_;
+			_m_size = _tmp124_;
 			_m_index = -1;
 			while (TRUE) {
-				gint _tmp122_;
-				gint _tmp123_;
-				gint _tmp124_;
-				ValaList* _tmp125_;
+				gint _tmp125_;
 				gint _tmp126_;
-				gpointer _tmp127_ = NULL;
+				gint _tmp127_;
+				ValaList* _tmp128_;
+				gint _tmp129_;
+				gpointer _tmp130_ = NULL;
 				ValaMethod* m;
-				gboolean _tmp128_ = FALSE;
-				ValaMethod* _tmp129_;
-				gboolean _tmp130_;
-				gboolean _tmp131_;
-				gboolean _tmp135_;
-				_tmp122_ = _m_index;
-				_m_index = _tmp122_ + 1;
-				_tmp123_ = _m_index;
-				_tmp124_ = _m_size;
-				if (!(_tmp123_ < _tmp124_)) {
+				gboolean _tmp131_ = FALSE;
+				ValaMethod* _tmp132_;
+				gboolean _tmp133_;
+				gboolean _tmp134_;
+				gboolean _tmp138_;
+				_tmp125_ = _m_index;
+				_m_index = _tmp125_ + 1;
+				_tmp126_ = _m_index;
+				_tmp127_ = _m_size;
+				if (!(_tmp126_ < _tmp127_)) {
 					break;
 				}
-				_tmp125_ = _m_list;
-				_tmp126_ = _m_index;
-				_tmp127_ = vala_list_get (_tmp125_, _tmp126_);
-				m = (ValaMethod*) _tmp127_;
-				_tmp129_ = m;
-				_tmp130_ = vala_method_get_is_abstract (_tmp129_);
-				_tmp131_ = _tmp130_;
-				if (_tmp131_) {
-					_tmp128_ = TRUE;
+				_tmp128_ = _m_list;
+				_tmp129_ = _m_index;
+				_tmp130_ = vala_list_get (_tmp128_, _tmp129_);
+				m = (ValaMethod*) _tmp130_;
+				_tmp132_ = m;
+				_tmp133_ = vala_method_get_is_abstract (_tmp132_);
+				_tmp134_ = _tmp133_;
+				if (_tmp134_) {
+					_tmp131_ = TRUE;
 				} else {
-					ValaMethod* _tmp132_;
-					gboolean _tmp133_;
-					gboolean _tmp134_;
-					_tmp132_ = m;
-					_tmp133_ = vala_method_get_is_virtual (_tmp132_);
-					_tmp134_ = _tmp133_;
-					_tmp128_ = _tmp134_;
-				}
-				_tmp135_ = _tmp128_;
-				if (_tmp135_) {
-					ValaMethod* _tmp136_;
+					ValaMethod* _tmp135_;
+					gboolean _tmp136_;
 					gboolean _tmp137_;
-					gboolean _tmp138_;
+					_tmp135_ = m;
+					_tmp136_ = vala_method_get_is_virtual (_tmp135_);
+					_tmp137_ = _tmp136_;
+					_tmp131_ = _tmp137_;
+				}
+				_tmp138_ = _tmp131_;
+				if (_tmp138_) {
+					ValaMethod* _tmp139_;
+					gboolean _tmp140_;
+					gboolean _tmp141_;
 					vala_gir_writer_write_indent (self);
-					_tmp136_ = m;
-					_tmp137_ = vala_method_get_coroutine (_tmp136_);
-					_tmp138_ = _tmp137_;
-					if (_tmp138_) {
-						ValaMethod* _tmp139_;
-						const gchar* _tmp140_;
-						const gchar* _tmp141_;
-						gchar* _tmp142_;
-						gchar* finish_name;
+					_tmp139_ = m;
+					_tmp140_ = vala_method_get_coroutine (_tmp139_);
+					_tmp141_ = _tmp140_;
+					if (_tmp141_) {
+						ValaMethod* _tmp142_;
 						const gchar* _tmp143_;
-						gboolean _tmp144_ = FALSE;
-						const gchar* _tmp152_;
-						gchar* _tmp153_;
-						GString* _tmp154_;
-						ValaMethod* _tmp155_;
-						const gchar* _tmp156_;
-						const gchar* _tmp157_;
-						gint _tmp158_;
-						ValaMethod* _tmp159_;
-						ValaMethod* _tmp160_;
-						const gchar* _tmp161_;
-						const gchar* _tmp162_;
+						const gchar* _tmp144_;
+						gchar* _tmp145_;
+						gchar* finish_name;
+						const gchar* _tmp146_;
+						gboolean _tmp147_ = FALSE;
+						const gchar* _tmp155_;
+						gchar* _tmp156_;
+						GString* _tmp157_;
+						ValaMethod* _tmp158_;
+						const gchar* _tmp159_;
+						const gchar* _tmp160_;
+						gint _tmp161_;
+						ValaMethod* _tmp162_;
 						ValaMethod* _tmp163_;
-						gchar* _tmp164_ = NULL;
-						gchar* _tmp165_;
+						const gchar* _tmp164_;
+						const gchar* _tmp165_;
 						ValaMethod* _tmp166_;
-						ValaList* _tmp167_ = NULL;
-						ValaList* _tmp168_;
-						ValaVoidType* _tmp169_;
-						ValaVoidType* _tmp170_;
-						gint _tmp171_;
-						GString* _tmp172_;
-						GString* _tmp173_;
-						const gchar* _tmp174_;
-						gint _tmp175_;
-						ValaMethod* _tmp176_;
+						gchar* _tmp167_ = NULL;
+						gchar* _tmp168_;
+						ValaMethod* _tmp169_;
+						ValaList* _tmp170_ = NULL;
+						ValaList* _tmp171_;
+						ValaVoidType* _tmp172_;
+						ValaVoidType* _tmp173_;
+						gint _tmp174_;
+						GString* _tmp175_;
+						GString* _tmp176_;
 						const gchar* _tmp177_;
-						ValaMethod* _tmp178_;
-						gchar* _tmp179_ = NULL;
-						gchar* _tmp180_;
+						gint _tmp178_;
+						ValaMethod* _tmp179_;
+						const gchar* _tmp180_;
 						ValaMethod* _tmp181_;
-						ValaList* _tmp182_ = NULL;
-						ValaList* _tmp183_;
+						gchar* _tmp182_ = NULL;
+						gchar* _tmp183_;
 						ValaMethod* _tmp184_;
-						ValaDataType* _tmp185_;
-						ValaDataType* _tmp186_;
+						ValaList* _tmp185_ = NULL;
+						ValaList* _tmp186_;
 						ValaMethod* _tmp187_;
-						gboolean _tmp188_;
-						gboolean _tmp189_;
-						gint _tmp190_;
-						GString* _tmp191_;
-						_tmp139_ = m;
-						_tmp140_ = vala_symbol_get_name ((ValaSymbol*) _tmp139_);
-						_tmp141_ = _tmp140_;
-						_tmp142_ = g_strdup (_tmp141_);
-						finish_name = _tmp142_;
-						_tmp143_ = finish_name;
-						_tmp144_ = g_str_has_suffix (_tmp143_, "_async");
-						if (_tmp144_) {
-							const gchar* _tmp145_;
-							const gchar* _tmp146_;
-							gint _tmp147_;
-							gint _tmp148_;
-							gint _tmp149_;
+						ValaDataType* _tmp188_;
+						ValaDataType* _tmp189_;
+						ValaMethod* _tmp190_;
+						gboolean _tmp191_;
+						gboolean _tmp192_;
+						gint _tmp193_;
+						GString* _tmp194_;
+						_tmp142_ = m;
+						_tmp143_ = vala_symbol_get_name ((ValaSymbol*) _tmp142_);
+						_tmp144_ = _tmp143_;
+						_tmp145_ = g_strdup (_tmp144_);
+						finish_name = _tmp145_;
+						_tmp146_ = finish_name;
+						_tmp147_ = g_str_has_suffix (_tmp146_, "_async");
+						if (_tmp147_) {
+							const gchar* _tmp148_;
+							const gchar* _tmp149_;
 							gint _tmp150_;
-							gchar* _tmp151_ = NULL;
-							_tmp145_ = finish_name;
-							_tmp146_ = finish_name;
-							_tmp147_ = strlen (_tmp146_);
-							_tmp148_ = _tmp147_;
-							_tmp149_ = strlen ("_async");
-							_tmp150_ = _tmp149_;
-							_tmp151_ = string_substring (_tmp145_, (glong) 0, (glong) (_tmp148_ - _tmp150_));
+							gint _tmp151_;
+							gint _tmp152_;
+							gint _tmp153_;
+							gchar* _tmp154_ = NULL;
+							_tmp148_ = finish_name;
+							_tmp149_ = finish_name;
+							_tmp150_ = strlen (_tmp149_);
+							_tmp151_ = _tmp150_;
+							_tmp152_ = strlen ("_async");
+							_tmp153_ = _tmp152_;
+							_tmp154_ = string_substring (_tmp148_, (glong) 0, (glong) (_tmp151_ - _tmp153_));
 							_g_free0 (finish_name);
-							finish_name = _tmp151_;
+							finish_name = _tmp154_;
 						}
-						_tmp152_ = finish_name;
-						_tmp153_ = g_strconcat (_tmp152_, "_finish", NULL);
+						_tmp155_ = finish_name;
+						_tmp156_ = g_strconcat (_tmp155_, "_finish", NULL);
 						_g_free0 (finish_name);
-						finish_name = _tmp153_;
+						finish_name = _tmp156_;
 						vala_gir_writer_write_indent (self);
-						_tmp154_ = self->priv->buffer;
-						_tmp155_ = m;
-						_tmp156_ = vala_symbol_get_name ((ValaSymbol*) _tmp155_);
-						_tmp157_ = _tmp156_;
-						g_string_append_printf (_tmp154_, "<field name=\"%s\">\n", _tmp157_);
-						_tmp158_ = self->priv->indent;
-						self->priv->indent = _tmp158_ + 1;
-						_tmp159_ = m;
-						_tmp160_ = m;
-						_tmp161_ = vala_symbol_get_name ((ValaSymbol*) _tmp160_);
-						_tmp162_ = _tmp161_;
+						_tmp157_ = self->priv->buffer;
+						_tmp158_ = m;
+						_tmp159_ = vala_symbol_get_name ((ValaSymbol*) _tmp158_);
+						_tmp160_ = _tmp159_;
+						g_string_append_printf (_tmp157_, "<field name=\"%s\">\n", _tmp160_);
+						_tmp161_ = self->priv->indent;
+						self->priv->indent = _tmp161_ + 1;
+						_tmp162_ = m;
 						_tmp163_ = m;
-						_tmp164_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp163_);
+						_tmp164_ = vala_symbol_get_name ((ValaSymbol*) _tmp163_);
 						_tmp165_ = _tmp164_;
 						_tmp166_ = m;
-						_tmp167_ = vala_method_get_async_begin_parameters (_tmp166_);
+						_tmp167_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp166_);
 						_tmp168_ = _tmp167_;
-						_tmp169_ = vala_void_type_new (NULL);
-						_tmp170_ = _tmp169_;
-						vala_gir_writer_do_write_signature (self, _tmp159_, "callback", TRUE, _tmp162_, _tmp165_, _tmp168_, (ValaDataType*) _tmp170_, FALSE);
-						_vala_code_node_unref0 (_tmp170_);
-						_vala_iterable_unref0 (_tmp168_);
-						_g_free0 (_tmp165_);
-						_tmp171_ = self->priv->indent;
-						self->priv->indent = _tmp171_ - 1;
+						_tmp169_ = m;
+						_tmp170_ = vala_method_get_async_begin_parameters (_tmp169_);
+						_tmp171_ = _tmp170_;
+						_tmp172_ = vala_void_type_new (NULL);
+						_tmp173_ = _tmp172_;
+						vala_gir_writer_do_write_signature (self, _tmp162_, "callback", TRUE, _tmp165_, _tmp168_, _tmp171_, (ValaDataType*) _tmp173_, FALSE, FALSE);
+						_vala_code_node_unref0 (_tmp173_);
+						_vala_iterable_unref0 (_tmp171_);
+						_g_free0 (_tmp168_);
+						_tmp174_ = self->priv->indent;
+						self->priv->indent = _tmp174_ - 1;
 						vala_gir_writer_write_indent (self);
-						_tmp172_ = self->priv->buffer;
-						g_string_append_printf (_tmp172_, "</field>\n");
+						_tmp175_ = self->priv->buffer;
+						g_string_append_printf (_tmp175_, "</field>\n");
 						vala_gir_writer_write_indent (self);
-						_tmp173_ = self->priv->buffer;
-						_tmp174_ = finish_name;
-						g_string_append_printf (_tmp173_, "<field name=\"%s\">\n", _tmp174_);
-						_tmp175_ = self->priv->indent;
-						self->priv->indent = _tmp175_ + 1;
-						_tmp176_ = m;
+						_tmp176_ = self->priv->buffer;
 						_tmp177_ = finish_name;
-						_tmp178_ = m;
-						_tmp179_ = vala_ccode_base_module_get_ccode_finish_name (_tmp178_);
-						_tmp180_ = _tmp179_;
+						g_string_append_printf (_tmp176_, "<field name=\"%s\">\n", _tmp177_);
+						_tmp178_ = self->priv->indent;
+						self->priv->indent = _tmp178_ + 1;
+						_tmp179_ = m;
+						_tmp180_ = finish_name;
 						_tmp181_ = m;
-						_tmp182_ = vala_method_get_async_end_parameters (_tmp181_);
+						_tmp182_ = vala_ccode_base_module_get_ccode_finish_name (_tmp181_);
 						_tmp183_ = _tmp182_;
 						_tmp184_ = m;
-						_tmp185_ = vala_method_get_return_type (_tmp184_);
+						_tmp185_ = vala_method_get_async_end_parameters (_tmp184_);
 						_tmp186_ = _tmp185_;
 						_tmp187_ = m;
-						_tmp188_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp187_);
+						_tmp188_ = vala_method_get_return_type (_tmp187_);
 						_tmp189_ = _tmp188_;
-						vala_gir_writer_do_write_signature (self, _tmp176_, "callback", TRUE, _tmp177_, _tmp180_, _tmp183_, _tmp186_, _tmp189_);
-						_vala_iterable_unref0 (_tmp183_);
-						_g_free0 (_tmp180_);
-						_tmp190_ = self->priv->indent;
-						self->priv->indent = _tmp190_ - 1;
+						_tmp190_ = m;
+						_tmp191_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp190_);
+						_tmp192_ = _tmp191_;
+						vala_gir_writer_do_write_signature (self, _tmp179_, "callback", TRUE, _tmp180_, _tmp183_, _tmp186_, _tmp189_, _tmp192_, FALSE);
+						_vala_iterable_unref0 (_tmp186_);
+						_g_free0 (_tmp183_);
+						_tmp193_ = self->priv->indent;
+						self->priv->indent = _tmp193_ - 1;
 						vala_gir_writer_write_indent (self);
-						_tmp191_ = self->priv->buffer;
-						g_string_append_printf (_tmp191_, "</field>\n");
+						_tmp194_ = self->priv->buffer;
+						g_string_append_printf (_tmp194_, "</field>\n");
 						_g_free0 (finish_name);
 					} else {
-						GString* _tmp192_;
-						ValaMethod* _tmp193_;
-						const gchar* _tmp194_;
-						const gchar* _tmp195_;
-						gint _tmp196_;
-						ValaMethod* _tmp197_;
-						ValaMethod* _tmp198_;
-						const gchar* _tmp199_;
-						const gchar* _tmp200_;
+						GString* _tmp195_;
+						ValaMethod* _tmp196_;
+						const gchar* _tmp197_;
+						const gchar* _tmp198_;
+						gint _tmp199_;
+						ValaMethod* _tmp200_;
 						ValaMethod* _tmp201_;
-						gchar* _tmp202_ = NULL;
-						gchar* _tmp203_;
+						const gchar* _tmp202_;
+						const gchar* _tmp203_;
 						ValaMethod* _tmp204_;
-						ValaList* _tmp205_ = NULL;
-						ValaList* _tmp206_;
+						gchar* _tmp205_ = NULL;
+						gchar* _tmp206_;
 						ValaMethod* _tmp207_;
-						ValaDataType* _tmp208_;
-						ValaDataType* _tmp209_;
+						ValaList* _tmp208_ = NULL;
+						ValaList* _tmp209_;
 						ValaMethod* _tmp210_;
-						gboolean _tmp211_;
-						gboolean _tmp212_;
-						gint _tmp213_;
-						GString* _tmp214_;
+						ValaDataType* _tmp211_;
+						ValaDataType* _tmp212_;
+						ValaMethod* _tmp213_;
+						gboolean _tmp214_;
+						gboolean _tmp215_;
+						gint _tmp216_;
+						GString* _tmp217_;
 						vala_gir_writer_write_indent (self);
-						_tmp192_ = self->priv->buffer;
-						_tmp193_ = m;
-						_tmp194_ = vala_symbol_get_name ((ValaSymbol*) _tmp193_);
-						_tmp195_ = _tmp194_;
-						g_string_append_printf (_tmp192_, "<field name=\"%s\">\n", _tmp195_);
-						_tmp196_ = self->priv->indent;
-						self->priv->indent = _tmp196_ + 1;
-						_tmp197_ = m;
-						_tmp198_ = m;
-						_tmp199_ = vala_symbol_get_name ((ValaSymbol*) _tmp198_);
-						_tmp200_ = _tmp199_;
+						_tmp195_ = self->priv->buffer;
+						_tmp196_ = m;
+						_tmp197_ = vala_symbol_get_name ((ValaSymbol*) _tmp196_);
+						_tmp198_ = _tmp197_;
+						g_string_append_printf (_tmp195_, "<field name=\"%s\">\n", _tmp198_);
+						_tmp199_ = self->priv->indent;
+						self->priv->indent = _tmp199_ + 1;
+						_tmp200_ = m;
 						_tmp201_ = m;
-						_tmp202_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp201_);
+						_tmp202_ = vala_symbol_get_name ((ValaSymbol*) _tmp201_);
 						_tmp203_ = _tmp202_;
 						_tmp204_ = m;
-						_tmp205_ = vala_method_get_parameters (_tmp204_);
+						_tmp205_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp204_);
 						_tmp206_ = _tmp205_;
 						_tmp207_ = m;
-						_tmp208_ = vala_method_get_return_type (_tmp207_);
+						_tmp208_ = vala_method_get_parameters (_tmp207_);
 						_tmp209_ = _tmp208_;
 						_tmp210_ = m;
-						_tmp211_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp210_);
+						_tmp211_ = vala_method_get_return_type (_tmp210_);
 						_tmp212_ = _tmp211_;
-						vala_gir_writer_do_write_signature (self, _tmp197_, "callback", TRUE, _tmp200_, _tmp203_, _tmp206_, _tmp209_, _tmp212_);
-						_vala_iterable_unref0 (_tmp206_);
-						_g_free0 (_tmp203_);
-						_tmp213_ = self->priv->indent;
-						self->priv->indent = _tmp213_ - 1;
+						_tmp213_ = m;
+						_tmp214_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp213_);
+						_tmp215_ = _tmp214_;
+						vala_gir_writer_do_write_signature (self, _tmp200_, "callback", TRUE, _tmp203_, _tmp206_, _tmp209_, _tmp212_, _tmp215_, FALSE);
+						_vala_iterable_unref0 (_tmp209_);
+						_g_free0 (_tmp206_);
+						_tmp216_ = self->priv->indent;
+						self->priv->indent = _tmp216_ - 1;
 						vala_gir_writer_write_indent (self);
-						_tmp214_ = self->priv->buffer;
-						g_string_append_printf (_tmp214_, "</field>\n");
+						_tmp217_ = self->priv->buffer;
+						g_string_append_printf (_tmp217_, "</field>\n");
 					}
 				}
 				_vala_code_node_unref0 (m);
@@ -1564,138 +1911,146 @@ static void vala_gir_writer_real_visit_class (ValaCodeVisitor* base, ValaClass*
 			_vala_iterable_unref0 (_m_list);
 		}
 		{
-			ValaClass* _tmp215_;
-			ValaList* _tmp216_ = NULL;
+			ValaClass* _tmp218_;
+			ValaList* _tmp219_ = NULL;
 			ValaList* _sig_list;
-			ValaList* _tmp217_;
-			gint _tmp218_;
-			gint _tmp219_;
+			ValaList* _tmp220_;
+			gint _tmp221_;
+			gint _tmp222_;
 			gint _sig_size;
 			gint _sig_index;
-			_tmp215_ = cl;
-			_tmp216_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) _tmp215_);
-			_sig_list = _tmp216_;
-			_tmp217_ = _sig_list;
-			_tmp218_ = vala_collection_get_size ((ValaCollection*) _tmp217_);
-			_tmp219_ = _tmp218_;
-			_sig_size = _tmp219_;
+			_tmp218_ = cl;
+			_tmp219_ = vala_object_type_symbol_get_signals ((ValaObjectTypeSymbol*) _tmp218_);
+			_sig_list = _tmp219_;
+			_tmp220_ = _sig_list;
+			_tmp221_ = vala_collection_get_size ((ValaCollection*) _tmp220_);
+			_tmp222_ = _tmp221_;
+			_sig_size = _tmp222_;
 			_sig_index = -1;
 			while (TRUE) {
-				gint _tmp220_;
-				gint _tmp221_;
-				gint _tmp222_;
-				ValaList* _tmp223_;
+				gint _tmp223_;
 				gint _tmp224_;
-				gpointer _tmp225_ = NULL;
+				gint _tmp225_;
+				ValaList* _tmp226_;
+				gint _tmp227_;
+				gpointer _tmp228_ = NULL;
 				ValaSignal* sig;
-				ValaSignal* _tmp226_;
-				ValaMethod* _tmp227_;
-				ValaMethod* _tmp228_;
-				_tmp220_ = _sig_index;
-				_sig_index = _tmp220_ + 1;
-				_tmp221_ = _sig_index;
-				_tmp222_ = _sig_size;
-				if (!(_tmp221_ < _tmp222_)) {
+				ValaSignal* _tmp229_;
+				ValaMethod* _tmp230_;
+				ValaMethod* _tmp231_;
+				_tmp223_ = _sig_index;
+				_sig_index = _tmp223_ + 1;
+				_tmp224_ = _sig_index;
+				_tmp225_ = _sig_size;
+				if (!(_tmp224_ < _tmp225_)) {
 					break;
 				}
-				_tmp223_ = _sig_list;
-				_tmp224_ = _sig_index;
-				_tmp225_ = vala_list_get (_tmp223_, _tmp224_);
-				sig = (ValaSignal*) _tmp225_;
-				_tmp226_ = sig;
-				_tmp227_ = vala_signal_get_default_handler (_tmp226_);
-				_tmp228_ = _tmp227_;
-				if (_tmp228_ != NULL) {
-					GString* _tmp229_;
-					ValaSignal* _tmp230_;
-					const gchar* _tmp231_;
-					const gchar* _tmp232_;
-					gint _tmp233_;
-					ValaSignal* _tmp234_;
-					ValaMethod* _tmp235_;
-					ValaMethod* _tmp236_;
-					gint _tmp237_;
-					GString* _tmp238_;
+				_tmp226_ = _sig_list;
+				_tmp227_ = _sig_index;
+				_tmp228_ = vala_list_get (_tmp226_, _tmp227_);
+				sig = (ValaSignal*) _tmp228_;
+				_tmp229_ = sig;
+				_tmp230_ = vala_signal_get_default_handler (_tmp229_);
+				_tmp231_ = _tmp230_;
+				if (_tmp231_ != NULL) {
+					GString* _tmp232_;
+					ValaSignal* _tmp233_;
+					const gchar* _tmp234_;
+					const gchar* _tmp235_;
+					gint _tmp236_;
+					ValaSignal* _tmp237_;
+					ValaMethod* _tmp238_;
+					ValaMethod* _tmp239_;
+					gint _tmp240_;
+					GString* _tmp241_;
 					vala_gir_writer_write_indent (self);
-					_tmp229_ = self->priv->buffer;
-					_tmp230_ = sig;
-					_tmp231_ = vala_symbol_get_name ((ValaSymbol*) _tmp230_);
-					_tmp232_ = _tmp231_;
-					g_string_append_printf (_tmp229_, "<field name=\"%s\">\n", _tmp232_);
-					_tmp233_ = self->priv->indent;
-					self->priv->indent = _tmp233_ + 1;
-					_tmp234_ = sig;
-					_tmp235_ = vala_signal_get_default_handler (_tmp234_);
-					_tmp236_ = _tmp235_;
-					vala_gir_writer_write_signature (self, _tmp236_, "callback", TRUE);
-					_tmp237_ = self->priv->indent;
-					self->priv->indent = _tmp237_ - 1;
+					_tmp232_ = self->priv->buffer;
+					_tmp233_ = sig;
+					_tmp234_ = vala_symbol_get_name ((ValaSymbol*) _tmp233_);
+					_tmp235_ = _tmp234_;
+					g_string_append_printf (_tmp232_, "<field name=\"%s\">\n", _tmp235_);
+					_tmp236_ = self->priv->indent;
+					self->priv->indent = _tmp236_ + 1;
+					_tmp237_ = sig;
+					_tmp238_ = vala_signal_get_default_handler (_tmp237_);
+					_tmp239_ = _tmp238_;
+					vala_gir_writer_write_signature (self, _tmp239_, "callback", FALSE, TRUE);
+					_tmp240_ = self->priv->indent;
+					self->priv->indent = _tmp240_ - 1;
 					vala_gir_writer_write_indent (self);
-					_tmp238_ = self->priv->buffer;
-					g_string_append_printf (_tmp238_, "</field>\n");
+					_tmp241_ = self->priv->buffer;
+					g_string_append_printf (_tmp241_, "</field>\n");
 				}
 				_vala_code_node_unref0 (sig);
 			}
 			_vala_iterable_unref0 (_sig_list);
 		}
-		_tmp239_ = self->priv->indent;
-		self->priv->indent = _tmp239_ - 1;
+		_tmp242_ = self->priv->indent;
+		self->priv->indent = _tmp242_ - 1;
 		vala_gir_writer_write_indent (self);
-		_tmp240_ = self->priv->buffer;
-		g_string_append_printf (_tmp240_, "</record>\n");
+		_tmp243_ = self->priv->buffer;
+		g_string_append_printf (_tmp243_, "</record>\n");
 		vala_gir_writer_write_indent (self);
-		_tmp241_ = self->priv->buffer;
-		_tmp242_ = cl;
-		_tmp243_ = vala_symbol_get_name ((ValaSymbol*) _tmp242_);
-		_tmp244_ = _tmp243_;
+		_tmp244_ = self->priv->buffer;
 		_tmp245_ = cl;
-		_tmp246_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp245_);
+		_tmp246_ = vala_symbol_get_name ((ValaSymbol*) _tmp245_);
 		_tmp247_ = _tmp246_;
-		g_string_append_printf (_tmp241_, "<record name=\"%sPrivate\" c:type=\"%sPrivate\" disguised=\"1\"/>\n", _tmp244_, _tmp247_);
-		_g_free0 (_tmp247_);
+		_tmp248_ = cl;
+		_tmp249_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp248_);
+		_tmp250_ = _tmp249_;
+		g_string_append_printf (_tmp244_, "<record name=\"%sPrivate\" c:type=\"%sPrivate\" disguised=\"1\"/>\n", _tmp247_, _tmp250_);
+		_g_free0 (_tmp250_);
 		_g_free0 (gtype_struct_name);
 	} else {
-		GString* _tmp248_;
-		ValaClass* _tmp249_;
-		gchar* _tmp250_ = NULL;
-		gchar* _tmp251_;
+		GString* _tmp251_;
 		ValaClass* _tmp252_;
-		GString* _tmp253_;
-		gint _tmp254_;
+		gchar* _tmp253_ = NULL;
+		gchar* _tmp254_;
 		ValaClass* _tmp255_;
-		ValaArrayList* _tmp256_;
-		ValaClass* _tmp257_;
+		GString* _tmp256_;
+		gint _tmp257_;
 		ValaClass* _tmp258_;
-		ValaArrayList* _tmp259_;
-		gint _tmp260_;
-		GString* _tmp261_;
+		gchar* _tmp259_ = NULL;
+		gchar* _tmp260_;
+		ValaClass* _tmp261_;
+		ValaArrayList* _tmp262_;
+		ValaClass* _tmp263_;
+		ValaClass* _tmp264_;
+		ValaArrayList* _tmp265_;
+		gint _tmp266_;
+		GString* _tmp267_;
 		vala_gir_writer_write_indent (self);
-		_tmp248_ = self->priv->buffer;
-		_tmp249_ = cl;
-		_tmp250_ = vala_gir_writer_get_gir_name (self, (ValaSymbol*) _tmp249_);
-		_tmp251_ = _tmp250_;
-		g_string_append_printf (_tmp248_, "<record name=\"%s\"", _tmp251_);
-		_g_free0 (_tmp251_);
+		_tmp251_ = self->priv->buffer;
 		_tmp252_ = cl;
-		vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) _tmp252_);
-		_tmp253_ = self->priv->buffer;
-		g_string_append_printf (_tmp253_, ">\n");
-		_tmp254_ = self->priv->indent;
-		self->priv->indent = _tmp254_ + 1;
+		_tmp253_ = vala_gir_writer_get_gir_name (self, (ValaSymbol*) _tmp252_);
+		_tmp254_ = _tmp253_;
+		g_string_append_printf (_tmp251_, "<record name=\"%s\"", _tmp254_);
+		_g_free0 (_tmp254_);
 		_tmp255_ = cl;
-		vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp255_);
-		_tmp256_ = self->priv->hierarchy;
-		_tmp257_ = cl;
-		vala_list_insert ((ValaList*) _tmp256_, 0, (ValaSymbol*) _tmp257_);
+		vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) _tmp255_);
+		_tmp256_ = self->priv->buffer;
+		g_string_append_printf (_tmp256_, ">\n");
+		_tmp257_ = self->priv->indent;
+		self->priv->indent = _tmp257_ + 1;
 		_tmp258_ = cl;
-		vala_code_node_accept_children ((ValaCodeNode*) _tmp258_, (ValaCodeVisitor*) self);
-		_tmp259_ = self->priv->hierarchy;
-		vala_list_remove_at ((ValaList*) _tmp259_, 0);
-		_tmp260_ = self->priv->indent;
-		self->priv->indent = _tmp260_ - 1;
+		_tmp259_ = vala_gir_writer_get_class_comment (self, _tmp258_);
+		_tmp260_ = _tmp259_;
+		vala_gir_writer_write_doc (self, _tmp260_);
+		_g_free0 (_tmp260_);
+		_tmp261_ = cl;
+		vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp261_);
+		_tmp262_ = self->priv->hierarchy;
+		_tmp263_ = cl;
+		vala_list_insert ((ValaList*) _tmp262_, 0, (ValaSymbol*) _tmp263_);
+		_tmp264_ = cl;
+		vala_code_node_accept_children ((ValaCodeNode*) _tmp264_, (ValaCodeVisitor*) self);
+		_tmp265_ = self->priv->hierarchy;
+		vala_list_remove_at ((ValaList*) _tmp265_, 0);
+		_tmp266_ = self->priv->indent;
+		self->priv->indent = _tmp266_ - 1;
 		vala_gir_writer_write_indent (self);
-		_tmp261_ = self->priv->buffer;
-		g_string_append_printf (_tmp261_, "</record>\n");
+		_tmp267_ = self->priv->buffer;
+		g_string_append_printf (_tmp267_, "</record>\n");
 	}
 	vala_gir_writer_visit_deferred (self);
 }
@@ -1720,12 +2075,15 @@ static void vala_gir_writer_real_visit_struct (ValaCodeVisitor* base, ValaStruct
 	GString* _tmp16_;
 	gint _tmp17_;
 	ValaStruct* _tmp18_;
-	ValaArrayList* _tmp19_;
-	ValaStruct* _tmp20_;
+	gchar* _tmp19_ = NULL;
+	gchar* _tmp20_;
 	ValaStruct* _tmp21_;
 	ValaArrayList* _tmp22_;
-	gint _tmp23_;
-	GString* _tmp24_;
+	ValaStruct* _tmp23_;
+	ValaStruct* _tmp24_;
+	ValaArrayList* _tmp25_;
+	gint _tmp26_;
+	GString* _tmp27_;
 	self = (ValaGIRWriter*) base;
 	g_return_if_fail (st != NULL);
 	_tmp0_ = st;
@@ -1766,19 +2124,24 @@ static void vala_gir_writer_real_visit_struct (ValaCodeVisitor* base, ValaStruct
 	_tmp17_ = self->priv->indent;
 	self->priv->indent = _tmp17_ + 1;
 	_tmp18_ = st;
-	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp18_);
-	_tmp19_ = self->priv->hierarchy;
-	_tmp20_ = st;
-	vala_list_insert ((ValaList*) _tmp19_, 0, (ValaSymbol*) _tmp20_);
+	_tmp19_ = vala_gir_writer_get_struct_comment (self, _tmp18_);
+	_tmp20_ = _tmp19_;
+	vala_gir_writer_write_doc (self, _tmp20_);
+	_g_free0 (_tmp20_);
 	_tmp21_ = st;
-	vala_code_node_accept_children ((ValaCodeNode*) _tmp21_, (ValaCodeVisitor*) self);
+	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp21_);
 	_tmp22_ = self->priv->hierarchy;
-	vala_list_remove_at ((ValaList*) _tmp22_, 0);
-	_tmp23_ = self->priv->indent;
-	self->priv->indent = _tmp23_ - 1;
+	_tmp23_ = st;
+	vala_list_insert ((ValaList*) _tmp22_, 0, (ValaSymbol*) _tmp23_);
+	_tmp24_ = st;
+	vala_code_node_accept_children ((ValaCodeNode*) _tmp24_, (ValaCodeVisitor*) self);
+	_tmp25_ = self->priv->hierarchy;
+	vala_list_remove_at ((ValaList*) _tmp25_, 0);
+	_tmp26_ = self->priv->indent;
+	self->priv->indent = _tmp26_ - 1;
 	vala_gir_writer_write_indent (self);
-	_tmp24_ = self->priv->buffer;
-	g_string_append_printf (_tmp24_, "</record>\n");
+	_tmp27_ = self->priv->buffer;
+	g_string_append_printf (_tmp27_, "</record>\n");
 	vala_gir_writer_visit_deferred (self);
 }
 
@@ -1810,34 +2173,37 @@ static void vala_gir_writer_real_visit_interface (ValaCodeVisitor* base, ValaInt
 	GString* _tmp23_;
 	gint _tmp24_;
 	ValaInterface* _tmp25_;
-	ValaList* _tmp26_ = NULL;
-	ValaList* _tmp27_;
-	gint _tmp28_;
-	gint _tmp29_;
-	gboolean _tmp30_;
-	ValaInterface* _tmp48_;
-	ValaArrayList* _tmp49_;
-	ValaInterface* _tmp50_;
+	gchar* _tmp26_ = NULL;
+	gchar* _tmp27_;
+	ValaInterface* _tmp28_;
+	ValaList* _tmp29_ = NULL;
+	ValaList* _tmp30_;
+	gint _tmp31_;
+	gint _tmp32_;
+	gboolean _tmp33_;
 	ValaInterface* _tmp51_;
 	ValaArrayList* _tmp52_;
-	gint _tmp53_;
-	GString* _tmp54_;
-	GString* _tmp55_;
-	const gchar* _tmp56_;
-	ValaInterface* _tmp57_;
+	ValaInterface* _tmp53_;
+	ValaInterface* _tmp54_;
+	ValaArrayList* _tmp55_;
+	gint _tmp56_;
+	GString* _tmp57_;
 	GString* _tmp58_;
-	ValaInterface* _tmp59_;
-	const gchar* _tmp60_;
-	const gchar* _tmp61_;
-	GString* _tmp62_;
-	gint _tmp63_;
-	GString* _tmp64_;
-	gint _tmp65_;
-	GString* _tmp66_;
-	gint _tmp67_;
-	GString* _tmp68_;
-	gint _tmp167_;
-	GString* _tmp168_;
+	const gchar* _tmp59_;
+	ValaInterface* _tmp60_;
+	GString* _tmp61_;
+	ValaInterface* _tmp62_;
+	const gchar* _tmp63_;
+	const gchar* _tmp64_;
+	GString* _tmp65_;
+	gint _tmp66_;
+	GString* _tmp67_;
+	gint _tmp68_;
+	GString* _tmp69_;
+	gint _tmp70_;
+	GString* _tmp71_;
+	gint _tmp170_;
+	GString* _tmp171_;
 	self = (ValaGIRWriter*) base;
 	g_return_if_fail (iface != NULL);
 	_tmp0_ = iface;
@@ -1888,376 +2254,381 @@ static void vala_gir_writer_real_visit_interface (ValaCodeVisitor* base, ValaInt
 	_tmp24_ = self->priv->indent;
 	self->priv->indent = _tmp24_ + 1;
 	_tmp25_ = iface;
-	_tmp26_ = vala_interface_get_prerequisites (_tmp25_);
+	_tmp26_ = vala_gir_writer_get_interface_comment (self, _tmp25_);
 	_tmp27_ = _tmp26_;
-	_tmp28_ = vala_collection_get_size ((ValaCollection*) _tmp27_);
-	_tmp29_ = _tmp28_;
-	_tmp30_ = _tmp29_ > 0;
-	_vala_iterable_unref0 (_tmp27_);
-	if (_tmp30_) {
+	vala_gir_writer_write_doc (self, _tmp27_);
+	_g_free0 (_tmp27_);
+	_tmp28_ = iface;
+	_tmp29_ = vala_interface_get_prerequisites (_tmp28_);
+	_tmp30_ = _tmp29_;
+	_tmp31_ = vala_collection_get_size ((ValaCollection*) _tmp30_);
+	_tmp32_ = _tmp31_;
+	_tmp33_ = _tmp32_ > 0;
+	_vala_iterable_unref0 (_tmp30_);
+	if (_tmp33_) {
 		{
-			ValaInterface* _tmp31_;
-			ValaList* _tmp32_ = NULL;
+			ValaInterface* _tmp34_;
+			ValaList* _tmp35_ = NULL;
 			ValaList* _base_type_list;
-			ValaList* _tmp33_;
-			gint _tmp34_;
-			gint _tmp35_;
+			ValaList* _tmp36_;
+			gint _tmp37_;
+			gint _tmp38_;
 			gint _base_type_size;
 			gint _base_type_index;
-			_tmp31_ = iface;
-			_tmp32_ = vala_interface_get_prerequisites (_tmp31_);
-			_base_type_list = _tmp32_;
-			_tmp33_ = _base_type_list;
-			_tmp34_ = vala_collection_get_size ((ValaCollection*) _tmp33_);
-			_tmp35_ = _tmp34_;
-			_base_type_size = _tmp35_;
+			_tmp34_ = iface;
+			_tmp35_ = vala_interface_get_prerequisites (_tmp34_);
+			_base_type_list = _tmp35_;
+			_tmp36_ = _base_type_list;
+			_tmp37_ = vala_collection_get_size ((ValaCollection*) _tmp36_);
+			_tmp38_ = _tmp37_;
+			_base_type_size = _tmp38_;
 			_base_type_index = -1;
 			while (TRUE) {
-				gint _tmp36_;
-				gint _tmp37_;
-				gint _tmp38_;
-				ValaList* _tmp39_;
+				gint _tmp39_;
 				gint _tmp40_;
-				gpointer _tmp41_ = NULL;
+				gint _tmp41_;
+				ValaList* _tmp42_;
+				gint _tmp43_;
+				gpointer _tmp44_ = NULL;
 				ValaDataType* base_type;
-				GString* _tmp42_;
-				ValaDataType* _tmp43_;
-				ValaObjectTypeSymbol* _tmp44_;
-				ValaObjectTypeSymbol* _tmp45_;
-				gchar* _tmp46_ = NULL;
-				gchar* _tmp47_;
-				_tmp36_ = _base_type_index;
-				_base_type_index = _tmp36_ + 1;
-				_tmp37_ = _base_type_index;
-				_tmp38_ = _base_type_size;
-				if (!(_tmp37_ < _tmp38_)) {
+				GString* _tmp45_;
+				ValaDataType* _tmp46_;
+				ValaObjectTypeSymbol* _tmp47_;
+				ValaObjectTypeSymbol* _tmp48_;
+				gchar* _tmp49_ = NULL;
+				gchar* _tmp50_;
+				_tmp39_ = _base_type_index;
+				_base_type_index = _tmp39_ + 1;
+				_tmp40_ = _base_type_index;
+				_tmp41_ = _base_type_size;
+				if (!(_tmp40_ < _tmp41_)) {
 					break;
 				}
-				_tmp39_ = _base_type_list;
-				_tmp40_ = _base_type_index;
-				_tmp41_ = vala_list_get (_tmp39_, _tmp40_);
-				base_type = (ValaDataType*) _tmp41_;
+				_tmp42_ = _base_type_list;
+				_tmp43_ = _base_type_index;
+				_tmp44_ = vala_list_get (_tmp42_, _tmp43_);
+				base_type = (ValaDataType*) _tmp44_;
 				vala_gir_writer_write_indent (self);
-				_tmp42_ = self->priv->buffer;
-				_tmp43_ = base_type;
-				_tmp44_ = vala_object_type_get_type_symbol (VALA_OBJECT_TYPE (_tmp43_));
-				_tmp45_ = _tmp44_;
-				_tmp46_ = vala_gir_writer_gi_type_name (self, (ValaTypeSymbol*) _tmp45_);
-				_tmp47_ = _tmp46_;
-				g_string_append_printf (_tmp42_, "<prerequisite name=\"%s\"/>\n", _tmp47_);
-				_g_free0 (_tmp47_);
+				_tmp45_ = self->priv->buffer;
+				_tmp46_ = base_type;
+				_tmp47_ = vala_object_type_get_type_symbol (VALA_OBJECT_TYPE (_tmp46_));
+				_tmp48_ = _tmp47_;
+				_tmp49_ = vala_gir_writer_gi_type_name (self, (ValaTypeSymbol*) _tmp48_);
+				_tmp50_ = _tmp49_;
+				g_string_append_printf (_tmp45_, "<prerequisite name=\"%s\"/>\n", _tmp50_);
+				_g_free0 (_tmp50_);
 				_vala_code_node_unref0 (base_type);
 			}
 			_vala_iterable_unref0 (_base_type_list);
 		}
 	}
-	_tmp48_ = iface;
-	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp48_);
-	_tmp49_ = self->priv->hierarchy;
-	_tmp50_ = iface;
-	vala_list_insert ((ValaList*) _tmp49_, 0, (ValaSymbol*) _tmp50_);
 	_tmp51_ = iface;
-	vala_code_node_accept_children ((ValaCodeNode*) _tmp51_, (ValaCodeVisitor*) self);
+	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp51_);
 	_tmp52_ = self->priv->hierarchy;
-	vala_list_remove_at ((ValaList*) _tmp52_, 0);
-	_tmp53_ = self->priv->indent;
-	self->priv->indent = _tmp53_ - 1;
+	_tmp53_ = iface;
+	vala_list_insert ((ValaList*) _tmp52_, 0, (ValaSymbol*) _tmp53_);
+	_tmp54_ = iface;
+	vala_code_node_accept_children ((ValaCodeNode*) _tmp54_, (ValaCodeVisitor*) self);
+	_tmp55_ = self->priv->hierarchy;
+	vala_list_remove_at ((ValaList*) _tmp55_, 0);
+	_tmp56_ = self->priv->indent;
+	self->priv->indent = _tmp56_ - 1;
 	vala_gir_writer_write_indent (self);
-	_tmp54_ = self->priv->buffer;
-	g_string_append_printf (_tmp54_, "</interface>\n");
+	_tmp57_ = self->priv->buffer;
+	g_string_append_printf (_tmp57_, "</interface>\n");
 	vala_gir_writer_write_indent (self);
-	_tmp55_ = self->priv->buffer;
-	_tmp56_ = gtype_struct_name;
-	g_string_append_printf (_tmp55_, "<record name=\"%s\"", _tmp56_);
-	_tmp57_ = iface;
-	vala_gir_writer_write_ctype_attributes (self, (ValaTypeSymbol*) _tmp57_, "Iface");
 	_tmp58_ = self->priv->buffer;
-	_tmp59_ = iface;
-	_tmp60_ = vala_symbol_get_name ((ValaSymbol*) _tmp59_);
-	_tmp61_ = _tmp60_;
-	g_string_append_printf (_tmp58_, " glib:is-gtype-struct-for=\"%s\"", _tmp61_);
-	_tmp62_ = self->priv->buffer;
-	g_string_append_printf (_tmp62_, ">\n");
-	_tmp63_ = self->priv->indent;
-	self->priv->indent = _tmp63_ + 1;
+	_tmp59_ = gtype_struct_name;
+	g_string_append_printf (_tmp58_, "<record name=\"%s\"", _tmp59_);
+	_tmp60_ = iface;
+	vala_gir_writer_write_ctype_attributes (self, (ValaTypeSymbol*) _tmp60_, "Iface");
+	_tmp61_ = self->priv->buffer;
+	_tmp62_ = iface;
+	_tmp63_ = vala_symbol_get_name ((ValaSymbol*) _tmp62_);
+	_tmp64_ = _tmp63_;
+	g_string_append_printf (_tmp61_, " glib:is-gtype-struct-for=\"%s\"", _tmp64_);
+	_tmp65_ = self->priv->buffer;
+	g_string_append_printf (_tmp65_, ">\n");
+	_tmp66_ = self->priv->indent;
+	self->priv->indent = _tmp66_ + 1;
 	vala_gir_writer_write_indent (self);
-	_tmp64_ = self->priv->buffer;
-	g_string_append_printf (_tmp64_, "<field name=\"parent_iface\">\n");
-	_tmp65_ = self->priv->indent;
-	self->priv->indent = _tmp65_ + 1;
+	_tmp67_ = self->priv->buffer;
+	g_string_append_printf (_tmp67_, "<field name=\"parent_iface\">\n");
+	_tmp68_ = self->priv->indent;
+	self->priv->indent = _tmp68_ + 1;
 	vala_gir_writer_write_indent (self);
-	_tmp66_ = self->priv->buffer;
-	g_string_append_printf (_tmp66_, "<type name=\"GObject.TypeInterface\" c:type=\"GTypeInterface\"/>\n");
-	_tmp67_ = self->priv->indent;
-	self->priv->indent = _tmp67_ - 1;
+	_tmp69_ = self->priv->buffer;
+	g_string_append_printf (_tmp69_, "<type name=\"GObject.TypeInterface\" c:type=\"GTypeInterface\"/>\n");
+	_tmp70_ = self->priv->indent;
+	self->priv->indent = _tmp70_ - 1;
 	vala_gir_writer_write_indent (self);
-	_tmp68_ = self->priv->buffer;
-	g_string_append_printf (_tmp68_, "</field>\n");
+	_tmp71_ = self->priv->buffer;
+	g_string_append_printf (_tmp71_, "</field>\n");
 	{
-		ValaInterface* _tmp69_;
-		ValaList* _tmp70_ = NULL;
+		ValaInterface* _tmp72_;
+		ValaList* _tmp73_ = NULL;
 		ValaList* _m_list;
-		ValaList* _tmp71_;
-		gint _tmp72_;
-		gint _tmp73_;
+		ValaList* _tmp74_;
+		gint _tmp75_;
+		gint _tmp76_;
 		gint _m_size;
 		gint _m_index;
-		_tmp69_ = iface;
-		_tmp70_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) _tmp69_);
-		_m_list = _tmp70_;
-		_tmp71_ = _m_list;
-		_tmp72_ = vala_collection_get_size ((ValaCollection*) _tmp71_);
-		_tmp73_ = _tmp72_;
-		_m_size = _tmp73_;
+		_tmp72_ = iface;
+		_tmp73_ = vala_object_type_symbol_get_methods ((ValaObjectTypeSymbol*) _tmp72_);
+		_m_list = _tmp73_;
+		_tmp74_ = _m_list;
+		_tmp75_ = vala_collection_get_size ((ValaCollection*) _tmp74_);
+		_tmp76_ = _tmp75_;
+		_m_size = _tmp76_;
 		_m_index = -1;
 		while (TRUE) {
-			gint _tmp74_;
-			gint _tmp75_;
-			gint _tmp76_;
-			ValaList* _tmp77_;
+			gint _tmp77_;
 			gint _tmp78_;
-			gpointer _tmp79_ = NULL;
+			gint _tmp79_;
+			ValaList* _tmp80_;
+			gint _tmp81_;
+			gpointer _tmp82_ = NULL;
 			ValaMethod* m;
-			gboolean _tmp80_ = FALSE;
-			ValaMethod* _tmp81_;
-			gboolean _tmp82_;
-			gboolean _tmp83_;
-			gboolean _tmp87_;
-			_tmp74_ = _m_index;
-			_m_index = _tmp74_ + 1;
-			_tmp75_ = _m_index;
-			_tmp76_ = _m_size;
-			if (!(_tmp75_ < _tmp76_)) {
+			gboolean _tmp83_ = FALSE;
+			ValaMethod* _tmp84_;
+			gboolean _tmp85_;
+			gboolean _tmp86_;
+			gboolean _tmp90_;
+			_tmp77_ = _m_index;
+			_m_index = _tmp77_ + 1;
+			_tmp78_ = _m_index;
+			_tmp79_ = _m_size;
+			if (!(_tmp78_ < _tmp79_)) {
 				break;
 			}
-			_tmp77_ = _m_list;
-			_tmp78_ = _m_index;
-			_tmp79_ = vala_list_get (_tmp77_, _tmp78_);
-			m = (ValaMethod*) _tmp79_;
-			_tmp81_ = m;
-			_tmp82_ = vala_method_get_is_abstract (_tmp81_);
-			_tmp83_ = _tmp82_;
-			if (_tmp83_) {
-				_tmp80_ = TRUE;
+			_tmp80_ = _m_list;
+			_tmp81_ = _m_index;
+			_tmp82_ = vala_list_get (_tmp80_, _tmp81_);
+			m = (ValaMethod*) _tmp82_;
+			_tmp84_ = m;
+			_tmp85_ = vala_method_get_is_abstract (_tmp84_);
+			_tmp86_ = _tmp85_;
+			if (_tmp86_) {
+				_tmp83_ = TRUE;
 			} else {
-				ValaMethod* _tmp84_;
-				gboolean _tmp85_;
-				gboolean _tmp86_;
-				_tmp84_ = m;
-				_tmp85_ = vala_method_get_is_virtual (_tmp84_);
-				_tmp86_ = _tmp85_;
-				_tmp80_ = _tmp86_;
-			}
-			_tmp87_ = _tmp80_;
-			if (_tmp87_) {
-				ValaMethod* _tmp88_;
+				ValaMethod* _tmp87_;
+				gboolean _tmp88_;
 				gboolean _tmp89_;
-				gboolean _tmp90_;
-				_tmp88_ = m;
-				_tmp89_ = vala_method_get_coroutine (_tmp88_);
-				_tmp90_ = _tmp89_;
-				if (_tmp90_) {
-					ValaMethod* _tmp91_;
-					const gchar* _tmp92_;
-					const gchar* _tmp93_;
-					gchar* _tmp94_;
-					gchar* finish_name;
+				_tmp87_ = m;
+				_tmp88_ = vala_method_get_is_virtual (_tmp87_);
+				_tmp89_ = _tmp88_;
+				_tmp83_ = _tmp89_;
+			}
+			_tmp90_ = _tmp83_;
+			if (_tmp90_) {
+				ValaMethod* _tmp91_;
+				gboolean _tmp92_;
+				gboolean _tmp93_;
+				_tmp91_ = m;
+				_tmp92_ = vala_method_get_coroutine (_tmp91_);
+				_tmp93_ = _tmp92_;
+				if (_tmp93_) {
+					ValaMethod* _tmp94_;
 					const gchar* _tmp95_;
-					gboolean _tmp96_ = FALSE;
-					const gchar* _tmp104_;
-					gchar* _tmp105_;
-					GString* _tmp106_;
-					ValaMethod* _tmp107_;
-					const gchar* _tmp108_;
-					const gchar* _tmp109_;
-					gint _tmp110_;
-					ValaMethod* _tmp111_;
-					ValaMethod* _tmp112_;
-					const gchar* _tmp113_;
-					const gchar* _tmp114_;
+					const gchar* _tmp96_;
+					gchar* _tmp97_;
+					gchar* finish_name;
+					const gchar* _tmp98_;
+					gboolean _tmp99_ = FALSE;
+					const gchar* _tmp107_;
+					gchar* _tmp108_;
+					GString* _tmp109_;
+					ValaMethod* _tmp110_;
+					const gchar* _tmp111_;
+					const gchar* _tmp112_;
+					gint _tmp113_;
+					ValaMethod* _tmp114_;
 					ValaMethod* _tmp115_;
-					gchar* _tmp116_ = NULL;
-					gchar* _tmp117_;
+					const gchar* _tmp116_;
+					const gchar* _tmp117_;
 					ValaMethod* _tmp118_;
-					ValaList* _tmp119_ = NULL;
-					ValaList* _tmp120_;
-					ValaVoidType* _tmp121_;
-					ValaVoidType* _tmp122_;
-					gint _tmp123_;
-					GString* _tmp124_;
-					GString* _tmp125_;
-					const gchar* _tmp126_;
-					gint _tmp127_;
-					ValaMethod* _tmp128_;
+					gchar* _tmp119_ = NULL;
+					gchar* _tmp120_;
+					ValaMethod* _tmp121_;
+					ValaList* _tmp122_ = NULL;
+					ValaList* _tmp123_;
+					ValaVoidType* _tmp124_;
+					ValaVoidType* _tmp125_;
+					gint _tmp126_;
+					GString* _tmp127_;
+					GString* _tmp128_;
 					const gchar* _tmp129_;
-					ValaMethod* _tmp130_;
-					gchar* _tmp131_ = NULL;
-					gchar* _tmp132_;
+					gint _tmp130_;
+					ValaMethod* _tmp131_;
+					const gchar* _tmp132_;
 					ValaMethod* _tmp133_;
-					ValaList* _tmp134_ = NULL;
-					ValaList* _tmp135_;
+					gchar* _tmp134_ = NULL;
+					gchar* _tmp135_;
 					ValaMethod* _tmp136_;
-					ValaDataType* _tmp137_;
-					ValaDataType* _tmp138_;
+					ValaList* _tmp137_ = NULL;
+					ValaList* _tmp138_;
 					ValaMethod* _tmp139_;
-					gboolean _tmp140_;
-					gboolean _tmp141_;
-					gint _tmp142_;
-					GString* _tmp143_;
-					_tmp91_ = m;
-					_tmp92_ = vala_symbol_get_name ((ValaSymbol*) _tmp91_);
-					_tmp93_ = _tmp92_;
-					_tmp94_ = g_strdup (_tmp93_);
-					finish_name = _tmp94_;
-					_tmp95_ = finish_name;
-					_tmp96_ = g_str_has_suffix (_tmp95_, "_async");
-					if (_tmp96_) {
-						const gchar* _tmp97_;
-						const gchar* _tmp98_;
-						gint _tmp99_;
-						gint _tmp100_;
-						gint _tmp101_;
+					ValaDataType* _tmp140_;
+					ValaDataType* _tmp141_;
+					ValaMethod* _tmp142_;
+					gboolean _tmp143_;
+					gboolean _tmp144_;
+					gint _tmp145_;
+					GString* _tmp146_;
+					_tmp94_ = m;
+					_tmp95_ = vala_symbol_get_name ((ValaSymbol*) _tmp94_);
+					_tmp96_ = _tmp95_;
+					_tmp97_ = g_strdup (_tmp96_);
+					finish_name = _tmp97_;
+					_tmp98_ = finish_name;
+					_tmp99_ = g_str_has_suffix (_tmp98_, "_async");
+					if (_tmp99_) {
+						const gchar* _tmp100_;
+						const gchar* _tmp101_;
 						gint _tmp102_;
-						gchar* _tmp103_ = NULL;
-						_tmp97_ = finish_name;
-						_tmp98_ = finish_name;
-						_tmp99_ = strlen (_tmp98_);
-						_tmp100_ = _tmp99_;
-						_tmp101_ = strlen ("_async");
-						_tmp102_ = _tmp101_;
-						_tmp103_ = string_substring (_tmp97_, (glong) 0, (glong) (_tmp100_ - _tmp102_));
+						gint _tmp103_;
+						gint _tmp104_;
+						gint _tmp105_;
+						gchar* _tmp106_ = NULL;
+						_tmp100_ = finish_name;
+						_tmp101_ = finish_name;
+						_tmp102_ = strlen (_tmp101_);
+						_tmp103_ = _tmp102_;
+						_tmp104_ = strlen ("_async");
+						_tmp105_ = _tmp104_;
+						_tmp106_ = string_substring (_tmp100_, (glong) 0, (glong) (_tmp103_ - _tmp105_));
 						_g_free0 (finish_name);
-						finish_name = _tmp103_;
+						finish_name = _tmp106_;
 					}
-					_tmp104_ = finish_name;
-					_tmp105_ = g_strconcat (_tmp104_, "_finish", NULL);
+					_tmp107_ = finish_name;
+					_tmp108_ = g_strconcat (_tmp107_, "_finish", NULL);
 					_g_free0 (finish_name);
-					finish_name = _tmp105_;
+					finish_name = _tmp108_;
 					vala_gir_writer_write_indent (self);
-					_tmp106_ = self->priv->buffer;
-					_tmp107_ = m;
-					_tmp108_ = vala_symbol_get_name ((ValaSymbol*) _tmp107_);
-					_tmp109_ = _tmp108_;
-					g_string_append_printf (_tmp106_, "<field name=\"%s\">\n", _tmp109_);
-					_tmp110_ = self->priv->indent;
-					self->priv->indent = _tmp110_ + 1;
-					_tmp111_ = m;
-					_tmp112_ = m;
-					_tmp113_ = vala_symbol_get_name ((ValaSymbol*) _tmp112_);
-					_tmp114_ = _tmp113_;
+					_tmp109_ = self->priv->buffer;
+					_tmp110_ = m;
+					_tmp111_ = vala_symbol_get_name ((ValaSymbol*) _tmp110_);
+					_tmp112_ = _tmp111_;
+					g_string_append_printf (_tmp109_, "<field name=\"%s\">\n", _tmp112_);
+					_tmp113_ = self->priv->indent;
+					self->priv->indent = _tmp113_ + 1;
+					_tmp114_ = m;
 					_tmp115_ = m;
-					_tmp116_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp115_);
+					_tmp116_ = vala_symbol_get_name ((ValaSymbol*) _tmp115_);
 					_tmp117_ = _tmp116_;
 					_tmp118_ = m;
-					_tmp119_ = vala_method_get_async_begin_parameters (_tmp118_);
+					_tmp119_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp118_);
 					_tmp120_ = _tmp119_;
-					_tmp121_ = vala_void_type_new (NULL);
-					_tmp122_ = _tmp121_;
-					vala_gir_writer_do_write_signature (self, _tmp111_, "callback", TRUE, _tmp114_, _tmp117_, _tmp120_, (ValaDataType*) _tmp122_, FALSE);
-					_vala_code_node_unref0 (_tmp122_);
-					_vala_iterable_unref0 (_tmp120_);
-					_g_free0 (_tmp117_);
-					_tmp123_ = self->priv->indent;
-					self->priv->indent = _tmp123_ - 1;
+					_tmp121_ = m;
+					_tmp122_ = vala_method_get_async_begin_parameters (_tmp121_);
+					_tmp123_ = _tmp122_;
+					_tmp124_ = vala_void_type_new (NULL);
+					_tmp125_ = _tmp124_;
+					vala_gir_writer_do_write_signature (self, _tmp114_, "callback", TRUE, _tmp117_, _tmp120_, _tmp123_, (ValaDataType*) _tmp125_, FALSE, FALSE);
+					_vala_code_node_unref0 (_tmp125_);
+					_vala_iterable_unref0 (_tmp123_);
+					_g_free0 (_tmp120_);
+					_tmp126_ = self->priv->indent;
+					self->priv->indent = _tmp126_ - 1;
 					vala_gir_writer_write_indent (self);
-					_tmp124_ = self->priv->buffer;
-					g_string_append_printf (_tmp124_, "</field>\n");
+					_tmp127_ = self->priv->buffer;
+					g_string_append_printf (_tmp127_, "</field>\n");
 					vala_gir_writer_write_indent (self);
-					_tmp125_ = self->priv->buffer;
-					_tmp126_ = finish_name;
-					g_string_append_printf (_tmp125_, "<field name=\"%s\">\n", _tmp126_);
-					_tmp127_ = self->priv->indent;
-					self->priv->indent = _tmp127_ + 1;
-					_tmp128_ = m;
+					_tmp128_ = self->priv->buffer;
 					_tmp129_ = finish_name;
-					_tmp130_ = m;
-					_tmp131_ = vala_ccode_base_module_get_ccode_finish_name (_tmp130_);
-					_tmp132_ = _tmp131_;
+					g_string_append_printf (_tmp128_, "<field name=\"%s\">\n", _tmp129_);
+					_tmp130_ = self->priv->indent;
+					self->priv->indent = _tmp130_ + 1;
+					_tmp131_ = m;
+					_tmp132_ = finish_name;
 					_tmp133_ = m;
-					_tmp134_ = vala_method_get_async_end_parameters (_tmp133_);
+					_tmp134_ = vala_ccode_base_module_get_ccode_finish_name (_tmp133_);
 					_tmp135_ = _tmp134_;
 					_tmp136_ = m;
-					_tmp137_ = vala_method_get_return_type (_tmp136_);
+					_tmp137_ = vala_method_get_async_end_parameters (_tmp136_);
 					_tmp138_ = _tmp137_;
 					_tmp139_ = m;
-					_tmp140_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp139_);
+					_tmp140_ = vala_method_get_return_type (_tmp139_);
 					_tmp141_ = _tmp140_;
-					vala_gir_writer_do_write_signature (self, _tmp128_, "callback", TRUE, _tmp129_, _tmp132_, _tmp135_, _tmp138_, _tmp141_);
-					_vala_iterable_unref0 (_tmp135_);
-					_g_free0 (_tmp132_);
-					_tmp142_ = self->priv->indent;
-					self->priv->indent = _tmp142_ - 1;
+					_tmp142_ = m;
+					_tmp143_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp142_);
+					_tmp144_ = _tmp143_;
+					vala_gir_writer_do_write_signature (self, _tmp131_, "callback", TRUE, _tmp132_, _tmp135_, _tmp138_, _tmp141_, _tmp144_, FALSE);
+					_vala_iterable_unref0 (_tmp138_);
+					_g_free0 (_tmp135_);
+					_tmp145_ = self->priv->indent;
+					self->priv->indent = _tmp145_ - 1;
 					vala_gir_writer_write_indent (self);
-					_tmp143_ = self->priv->buffer;
-					g_string_append_printf (_tmp143_, "</field>\n");
+					_tmp146_ = self->priv->buffer;
+					g_string_append_printf (_tmp146_, "</field>\n");
 					_g_free0 (finish_name);
 				} else {
-					GString* _tmp144_;
-					ValaMethod* _tmp145_;
-					const gchar* _tmp146_;
-					const gchar* _tmp147_;
-					gint _tmp148_;
-					ValaMethod* _tmp149_;
-					ValaMethod* _tmp150_;
-					const gchar* _tmp151_;
-					const gchar* _tmp152_;
+					GString* _tmp147_;
+					ValaMethod* _tmp148_;
+					const gchar* _tmp149_;
+					const gchar* _tmp150_;
+					gint _tmp151_;
+					ValaMethod* _tmp152_;
 					ValaMethod* _tmp153_;
-					gchar* _tmp154_ = NULL;
-					gchar* _tmp155_;
+					const gchar* _tmp154_;
+					const gchar* _tmp155_;
 					ValaMethod* _tmp156_;
-					ValaList* _tmp157_ = NULL;
-					ValaList* _tmp158_;
+					gchar* _tmp157_ = NULL;
+					gchar* _tmp158_;
 					ValaMethod* _tmp159_;
-					ValaDataType* _tmp160_;
-					ValaDataType* _tmp161_;
+					ValaList* _tmp160_ = NULL;
+					ValaList* _tmp161_;
 					ValaMethod* _tmp162_;
-					gboolean _tmp163_;
-					gboolean _tmp164_;
-					gint _tmp165_;
-					GString* _tmp166_;
+					ValaDataType* _tmp163_;
+					ValaDataType* _tmp164_;
+					ValaMethod* _tmp165_;
+					gboolean _tmp166_;
+					gboolean _tmp167_;
+					gint _tmp168_;
+					GString* _tmp169_;
 					vala_gir_writer_write_indent (self);
-					_tmp144_ = self->priv->buffer;
-					_tmp145_ = m;
-					_tmp146_ = vala_symbol_get_name ((ValaSymbol*) _tmp145_);
-					_tmp147_ = _tmp146_;
-					g_string_append_printf (_tmp144_, "<field name=\"%s\">\n", _tmp147_);
-					_tmp148_ = self->priv->indent;
-					self->priv->indent = _tmp148_ + 1;
-					_tmp149_ = m;
-					_tmp150_ = m;
-					_tmp151_ = vala_symbol_get_name ((ValaSymbol*) _tmp150_);
-					_tmp152_ = _tmp151_;
+					_tmp147_ = self->priv->buffer;
+					_tmp148_ = m;
+					_tmp149_ = vala_symbol_get_name ((ValaSymbol*) _tmp148_);
+					_tmp150_ = _tmp149_;
+					g_string_append_printf (_tmp147_, "<field name=\"%s\">\n", _tmp150_);
+					_tmp151_ = self->priv->indent;
+					self->priv->indent = _tmp151_ + 1;
+					_tmp152_ = m;
 					_tmp153_ = m;
-					_tmp154_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp153_);
+					_tmp154_ = vala_symbol_get_name ((ValaSymbol*) _tmp153_);
 					_tmp155_ = _tmp154_;
 					_tmp156_ = m;
-					_tmp157_ = vala_method_get_parameters (_tmp156_);
+					_tmp157_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp156_);
 					_tmp158_ = _tmp157_;
 					_tmp159_ = m;
-					_tmp160_ = vala_method_get_return_type (_tmp159_);
+					_tmp160_ = vala_method_get_parameters (_tmp159_);
 					_tmp161_ = _tmp160_;
 					_tmp162_ = m;
-					_tmp163_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp162_);
+					_tmp163_ = vala_method_get_return_type (_tmp162_);
 					_tmp164_ = _tmp163_;
-					vala_gir_writer_do_write_signature (self, _tmp149_, "callback", TRUE, _tmp152_, _tmp155_, _tmp158_, _tmp161_, _tmp164_);
-					_vala_iterable_unref0 (_tmp158_);
-					_g_free0 (_tmp155_);
-					_tmp165_ = self->priv->indent;
-					self->priv->indent = _tmp165_ - 1;
+					_tmp165_ = m;
+					_tmp166_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp165_);
+					_tmp167_ = _tmp166_;
+					vala_gir_writer_do_write_signature (self, _tmp152_, "callback", TRUE, _tmp155_, _tmp158_, _tmp161_, _tmp164_, _tmp167_, FALSE);
+					_vala_iterable_unref0 (_tmp161_);
+					_g_free0 (_tmp158_);
+					_tmp168_ = self->priv->indent;
+					self->priv->indent = _tmp168_ - 1;
 					vala_gir_writer_write_indent (self);
-					_tmp166_ = self->priv->buffer;
-					g_string_append_printf (_tmp166_, "</field>\n");
+					_tmp169_ = self->priv->buffer;
+					g_string_append_printf (_tmp169_, "</field>\n");
 				}
 			}
 			_vala_code_node_unref0 (m);
 		}
 		_vala_iterable_unref0 (_m_list);
 	}
-	_tmp167_ = self->priv->indent;
-	self->priv->indent = _tmp167_ - 1;
+	_tmp170_ = self->priv->indent;
+	self->priv->indent = _tmp170_ - 1;
 	vala_gir_writer_write_indent (self);
-	_tmp168_ = self->priv->buffer;
-	g_string_append_printf (_tmp168_, "</record>\n");
+	_tmp171_ = self->priv->buffer;
+	g_string_append_printf (_tmp171_, "</record>\n");
 	vala_gir_writer_visit_deferred (self);
 	_g_free0 (gtype_struct_name);
 }
@@ -2441,13 +2812,16 @@ static void vala_gir_writer_real_visit_enum (ValaCodeVisitor* base, ValaEnum* en
 	GString* _tmp24_;
 	gint _tmp25_;
 	ValaEnum* _tmp26_;
-	ValaArrayList* _tmp27_;
-	ValaEnum* _tmp28_;
+	gchar* _tmp27_ = NULL;
+	gchar* _tmp28_;
 	ValaEnum* _tmp29_;
 	ValaArrayList* _tmp30_;
-	gint _tmp31_;
-	GString* _tmp32_;
-	const gchar* _tmp33_;
+	ValaEnum* _tmp31_;
+	ValaEnum* _tmp32_;
+	ValaArrayList* _tmp33_;
+	gint _tmp34_;
+	GString* _tmp35_;
+	const gchar* _tmp36_;
 	self = (ValaGIRWriter*) base;
 	g_return_if_fail (en != NULL);
 	_tmp0_ = en;
@@ -2502,21 +2876,26 @@ static void vala_gir_writer_real_visit_enum (ValaCodeVisitor* base, ValaEnum* en
 	_tmp25_ = self->priv->indent;
 	self->priv->indent = _tmp25_ + 1;
 	_tmp26_ = en;
-	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp26_);
-	self->priv->enum_value = 0;
-	_tmp27_ = self->priv->hierarchy;
-	_tmp28_ = en;
-	vala_list_insert ((ValaList*) _tmp27_, 0, (ValaSymbol*) _tmp28_);
+	_tmp27_ = vala_gir_writer_get_enum_comment (self, _tmp26_);
+	_tmp28_ = _tmp27_;
+	vala_gir_writer_write_doc (self, _tmp28_);
+	_g_free0 (_tmp28_);
 	_tmp29_ = en;
-	vala_code_node_accept_children ((ValaCodeNode*) _tmp29_, (ValaCodeVisitor*) self);
+	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp29_);
+	self->priv->enum_value = 0;
 	_tmp30_ = self->priv->hierarchy;
-	vala_list_remove_at ((ValaList*) _tmp30_, 0);
-	_tmp31_ = self->priv->indent;
-	self->priv->indent = _tmp31_ - 1;
+	_tmp31_ = en;
+	vala_list_insert ((ValaList*) _tmp30_, 0, (ValaSymbol*) _tmp31_);
+	_tmp32_ = en;
+	vala_code_node_accept_children ((ValaCodeNode*) _tmp32_, (ValaCodeVisitor*) self);
+	_tmp33_ = self->priv->hierarchy;
+	vala_list_remove_at ((ValaList*) _tmp33_, 0);
+	_tmp34_ = self->priv->indent;
+	self->priv->indent = _tmp34_ - 1;
 	vala_gir_writer_write_indent (self);
-	_tmp32_ = self->priv->buffer;
-	_tmp33_ = element_name;
-	g_string_append_printf (_tmp32_, "</%s>\n", _tmp33_);
+	_tmp35_ = self->priv->buffer;
+	_tmp36_ = element_name;
+	g_string_append_printf (_tmp35_, "</%s>\n", _tmp36_);
 	vala_gir_writer_visit_deferred (self);
 	_g_free0 (element_name);
 }
@@ -2540,7 +2919,10 @@ static void vala_gir_writer_real_visit_enum_value (ValaCodeVisitor* base, ValaEn
 	ValaExpression* _tmp12_;
 	ValaExpression* _tmp13_;
 	ValaEnumValue* _tmp27_;
-	GString* _tmp28_;
+	ValaEnumValue* _tmp28_;
+	gchar* _tmp29_ = NULL;
+	gchar* comment;
+	const gchar* _tmp30_;
 	self = (ValaGIRWriter*) base;
 	g_return_if_fail (ev != NULL);
 	vala_gir_writer_write_indent (self);
@@ -2604,8 +2986,33 @@ static void vala_gir_writer_real_visit_enum_value (ValaCodeVisitor* base, ValaEn
 	}
 	_tmp27_ = ev;
 	vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) _tmp27_);
-	_tmp28_ = self->priv->buffer;
-	g_string_append_printf (_tmp28_, "/>\n");
+	_tmp28_ = ev;
+	_tmp29_ = vala_gir_writer_get_enum_value_comment (self, _tmp28_);
+	comment = _tmp29_;
+	_tmp30_ = comment;
+	if (_tmp30_ == NULL) {
+		GString* _tmp31_;
+		_tmp31_ = self->priv->buffer;
+		g_string_append_printf (_tmp31_, "/>\n");
+	} else {
+		GString* _tmp32_;
+		gint _tmp33_;
+		const gchar* _tmp34_;
+		gint _tmp35_;
+		GString* _tmp36_;
+		_tmp32_ = self->priv->buffer;
+		g_string_append_printf (_tmp32_, ">\n");
+		_tmp33_ = self->priv->indent;
+		self->priv->indent = _tmp33_ + 1;
+		_tmp34_ = comment;
+		vala_gir_writer_write_doc (self, _tmp34_);
+		_tmp35_ = self->priv->indent;
+		self->priv->indent = _tmp35_ - 1;
+		vala_gir_writer_write_indent (self);
+		_tmp36_ = self->priv->buffer;
+		g_string_append_printf (_tmp36_, "</member>\n");
+	}
+	_g_free0 (comment);
 	_vala_code_node_unref0 (en);
 }
 
@@ -2640,12 +3047,15 @@ static void vala_gir_writer_real_visit_error_domain (ValaCodeVisitor* base, Vala
 	ValaErrorDomain* _tmp25_;
 	GString* _tmp26_;
 	gint _tmp27_;
-	ValaArrayList* _tmp28_;
-	ValaErrorDomain* _tmp29_;
-	ValaErrorDomain* _tmp30_;
+	ValaErrorDomain* _tmp28_;
+	gchar* _tmp29_ = NULL;
+	gchar* _tmp30_;
 	ValaArrayList* _tmp31_;
-	gint _tmp32_;
-	GString* _tmp33_;
+	ValaErrorDomain* _tmp32_;
+	ValaErrorDomain* _tmp33_;
+	ValaArrayList* _tmp34_;
+	gint _tmp35_;
+	GString* _tmp36_;
 	self = (ValaGIRWriter*) base;
 	g_return_if_fail (edomain != NULL);
 	_tmp0_ = edomain;
@@ -2696,19 +3106,24 @@ static void vala_gir_writer_real_visit_error_domain (ValaCodeVisitor* base, Vala
 	g_string_append_printf (_tmp26_, ">\n");
 	_tmp27_ = self->priv->indent;
 	self->priv->indent = _tmp27_ + 1;
+	_tmp28_ = edomain;
+	_tmp29_ = vala_gir_writer_get_error_domain_comment (self, _tmp28_);
+	_tmp30_ = _tmp29_;
+	vala_gir_writer_write_doc (self, _tmp30_);
+	_g_free0 (_tmp30_);
 	self->priv->enum_value = 0;
-	_tmp28_ = self->priv->hierarchy;
-	_tmp29_ = edomain;
-	vala_list_insert ((ValaList*) _tmp28_, 0, (ValaSymbol*) _tmp29_);
-	_tmp30_ = edomain;
-	vala_code_node_accept_children ((ValaCodeNode*) _tmp30_, (ValaCodeVisitor*) self);
 	_tmp31_ = self->priv->hierarchy;
-	vala_list_remove_at ((ValaList*) _tmp31_, 0);
-	_tmp32_ = self->priv->indent;
-	self->priv->indent = _tmp32_ - 1;
+	_tmp32_ = edomain;
+	vala_list_insert ((ValaList*) _tmp31_, 0, (ValaSymbol*) _tmp32_);
+	_tmp33_ = edomain;
+	vala_code_node_accept_children ((ValaCodeNode*) _tmp33_, (ValaCodeVisitor*) self);
+	_tmp34_ = self->priv->hierarchy;
+	vala_list_remove_at ((ValaList*) _tmp34_, 0);
+	_tmp35_ = self->priv->indent;
+	self->priv->indent = _tmp35_ - 1;
 	vala_gir_writer_write_indent (self);
-	_tmp33_ = self->priv->buffer;
-	g_string_append_printf (_tmp33_, "</enumeration>\n");
+	_tmp36_ = self->priv->buffer;
+	g_string_append_printf (_tmp36_, "</enumeration>\n");
 	vala_gir_writer_visit_deferred (self);
 }
 
@@ -2728,7 +3143,10 @@ static void vala_gir_writer_real_visit_error_code (ValaCodeVisitor* base, ValaEr
 	ValaExpression* _tmp10_;
 	ValaExpression* _tmp11_;
 	ValaErrorCode* _tmp20_;
-	GString* _tmp21_;
+	ValaErrorCode* _tmp21_;
+	gchar* _tmp22_ = NULL;
+	gchar* comment;
+	const gchar* _tmp23_;
 	self = (ValaGIRWriter*) base;
 	g_return_if_fail (ecode != NULL);
 	vala_gir_writer_write_indent (self);
@@ -2774,8 +3192,33 @@ static void vala_gir_writer_real_visit_error_code (ValaCodeVisitor* base, ValaEr
 	}
 	_tmp20_ = ecode;
 	vala_gir_writer_write_symbol_attributes (self, (ValaSymbol*) _tmp20_);
-	_tmp21_ = self->priv->buffer;
-	g_string_append_printf (_tmp21_, "/>\n");
+	_tmp21_ = ecode;
+	_tmp22_ = vala_gir_writer_get_error_code_comment (self, _tmp21_);
+	comment = _tmp22_;
+	_tmp23_ = comment;
+	if (_tmp23_ == NULL) {
+		GString* _tmp24_;
+		_tmp24_ = self->priv->buffer;
+		g_string_append_printf (_tmp24_, "/>\n");
+	} else {
+		GString* _tmp25_;
+		gint _tmp26_;
+		const gchar* _tmp27_;
+		gint _tmp28_;
+		GString* _tmp29_;
+		_tmp25_ = self->priv->buffer;
+		g_string_append_printf (_tmp25_, ">\n");
+		_tmp26_ = self->priv->indent;
+		self->priv->indent = _tmp26_ + 1;
+		_tmp27_ = comment;
+		vala_gir_writer_write_doc (self, _tmp27_);
+		_tmp28_ = self->priv->indent;
+		self->priv->indent = _tmp28_ - 1;
+		vala_gir_writer_write_indent (self);
+		_tmp29_ = self->priv->buffer;
+		g_string_append_printf (_tmp29_, "</member>\n");
+	}
+	_g_free0 (comment);
 }
 
 
@@ -2806,11 +3249,14 @@ static void vala_gir_writer_real_visit_constant (ValaCodeVisitor* base, ValaCons
 	ValaConstant* _tmp20_;
 	GString* _tmp21_;
 	gint _tmp22_;
-	ValaExpression* _tmp23_;
-	ValaDataType* _tmp24_;
-	ValaDataType* _tmp25_;
-	gint _tmp26_;
-	GString* _tmp27_;
+	ValaConstant* _tmp23_;
+	gchar* _tmp24_ = NULL;
+	gchar* _tmp25_;
+	ValaExpression* _tmp26_;
+	ValaDataType* _tmp27_;
+	ValaDataType* _tmp28_;
+	gint _tmp29_;
+	GString* _tmp30_;
 	self = (ValaGIRWriter*) base;
 	g_return_if_fail (c != NULL);
 	_tmp0_ = c;
@@ -2851,15 +3297,20 @@ static void vala_gir_writer_real_visit_constant (ValaCodeVisitor* base, ValaCons
 	g_string_append_printf (_tmp21_, ">\n");
 	_tmp22_ = self->priv->indent;
 	self->priv->indent = _tmp22_ + 1;
-	_tmp23_ = initializer;
-	_tmp24_ = vala_expression_get_value_type (_tmp23_);
+	_tmp23_ = c;
+	_tmp24_ = vala_gir_writer_get_constant_comment (self, _tmp23_);
 	_tmp25_ = _tmp24_;
-	vala_gir_writer_write_type (self, _tmp25_, -1);
-	_tmp26_ = self->priv->indent;
-	self->priv->indent = _tmp26_ - 1;
+	vala_gir_writer_write_doc (self, _tmp25_);
+	_g_free0 (_tmp25_);
+	_tmp26_ = initializer;
+	_tmp27_ = vala_expression_get_value_type (_tmp26_);
+	_tmp28_ = _tmp27_;
+	vala_gir_writer_write_type (self, _tmp28_, -1);
+	_tmp29_ = self->priv->indent;
+	self->priv->indent = _tmp29_ - 1;
 	vala_gir_writer_write_indent (self);
-	_tmp27_ = self->priv->buffer;
-	g_string_append_printf (_tmp27_, "</constant>\n");
+	_tmp30_ = self->priv->buffer;
+	g_string_append_printf (_tmp30_, "</constant>\n");
 	_g_free0 (value);
 	_vala_code_node_unref0 (initializer);
 }
@@ -2885,11 +3336,14 @@ static void vala_gir_writer_real_visit_field (ValaCodeVisitor* base, ValaField*
 	GString* _tmp16_;
 	gint _tmp17_;
 	ValaField* _tmp18_;
-	ValaField* _tmp19_;
-	ValaDataType* _tmp20_;
-	ValaDataType* _tmp21_;
-	gint _tmp22_;
-	GString* _tmp23_;
+	gchar* _tmp19_ = NULL;
+	gchar* _tmp20_;
+	ValaField* _tmp21_;
+	ValaField* _tmp22_;
+	ValaDataType* _tmp23_;
+	ValaDataType* _tmp24_;
+	gint _tmp25_;
+	GString* _tmp26_;
 	self = (ValaGIRWriter*) base;
 	g_return_if_fail (f != NULL);
 	_tmp0_ = f;
@@ -2927,16 +3381,21 @@ static void vala_gir_writer_real_visit_field (ValaCodeVisitor* base, ValaField*
 	_tmp17_ = self->priv->indent;
 	self->priv->indent = _tmp17_ + 1;
 	_tmp18_ = f;
-	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp18_);
-	_tmp19_ = f;
-	_tmp20_ = vala_variable_get_variable_type ((ValaVariable*) _tmp19_);
-	_tmp21_ = _tmp20_;
-	vala_gir_writer_write_type (self, _tmp21_, -1);
-	_tmp22_ = self->priv->indent;
-	self->priv->indent = _tmp22_ - 1;
+	_tmp19_ = vala_gir_writer_get_field_comment (self, _tmp18_);
+	_tmp20_ = _tmp19_;
+	vala_gir_writer_write_doc (self, _tmp20_);
+	_g_free0 (_tmp20_);
+	_tmp21_ = f;
+	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp21_);
+	_tmp22_ = f;
+	_tmp23_ = vala_variable_get_variable_type ((ValaVariable*) _tmp22_);
+	_tmp24_ = _tmp23_;
+	vala_gir_writer_write_type (self, _tmp24_, -1);
+	_tmp25_ = self->priv->indent;
+	self->priv->indent = _tmp25_ - 1;
 	vala_gir_writer_write_indent (self);
-	_tmp23_ = self->priv->buffer;
-	g_string_append_printf (_tmp23_, "</field>\n");
+	_tmp26_ = self->priv->buffer;
+	g_string_append_printf (_tmp26_, "</field>\n");
 }
 
 
@@ -2993,7 +3452,7 @@ static void vala_gir_writer_write_implicit_params (ValaGIRWriter* self, ValaData
 		_tmp17_ = g_strdup_printf ("%s_length1", _tmp16_);
 		_tmp18_ = _tmp17_;
 		_tmp19_ = direction;
-		vala_gir_writer_write_param_or_return (self, (ValaDataType*) _tmp14_, TRUE, index, _tmp15_, _tmp18_, _tmp19_, FALSE, FALSE);
+		vala_gir_writer_write_param_or_return (self, (ValaDataType*) _tmp14_, TRUE, index, _tmp15_, _tmp18_, NULL, _tmp19_, FALSE, FALSE);
 		_g_free0 (_tmp18_);
 		_vala_code_node_unref0 (int_type);
 	} else {
@@ -3024,7 +3483,7 @@ static void vala_gir_writer_write_implicit_params (ValaGIRWriter* self, ValaData
 			_tmp27_ = g_strdup_printf ("%s_target", _tmp26_);
 			_tmp28_ = _tmp27_;
 			_tmp29_ = direction;
-			vala_gir_writer_write_param_or_return (self, (ValaDataType*) _tmp25_, TRUE, index, FALSE, _tmp28_, _tmp29_, FALSE, FALSE);
+			vala_gir_writer_write_param_or_return (self, (ValaDataType*) _tmp25_, TRUE, index, FALSE, _tmp28_, NULL, _tmp29_, FALSE, FALSE);
 			_g_free0 (_tmp28_);
 			_tmp30_ = type;
 			_tmp31_ = vala_data_type_get_value_owned (_tmp30_);
@@ -3073,7 +3532,7 @@ static void vala_gir_writer_write_implicit_params (ValaGIRWriter* self, ValaData
 				_tmp49_ = g_strdup_printf ("%s_target_destroy_notify", _tmp48_);
 				_tmp50_ = _tmp49_;
 				_tmp51_ = direction;
-				vala_gir_writer_write_param_or_return (self, (ValaDataType*) _tmp47_, TRUE, index, FALSE, _tmp50_, _tmp51_, FALSE, FALSE);
+				vala_gir_writer_write_param_or_return (self, (ValaDataType*) _tmp47_, TRUE, index, FALSE, _tmp50_, NULL, _tmp51_, FALSE, FALSE);
 				_g_free0 (_tmp50_);
 				_vala_code_node_unref0 (notify_type);
 			}
@@ -3083,7 +3542,7 @@ static void vala_gir_writer_write_implicit_params (ValaGIRWriter* self, ValaData
 }
 
 
-static void vala_gir_writer_write_params_and_return (ValaGIRWriter* self, ValaList* params, ValaDataType* return_type, gboolean return_array_length, gboolean constructor, ValaDataType* instance_type, gboolean user_data) {
+static void vala_gir_writer_write_params_and_return (ValaGIRWriter* self, ValaList* params, ValaDataType* return_type, gboolean return_array_length, const gchar* return_comment, gboolean constructor, ValaDataType* instance_type, gboolean user_data) {
 	gint last_index;
 	gboolean _tmp0_ = FALSE;
 	ValaDataType* _tmp1_;
@@ -3100,9 +3559,9 @@ static void vala_gir_writer_write_params_and_return (ValaGIRWriter* self, ValaLi
 	gboolean _tmp18_;
 	gboolean _tmp20_;
 	gboolean _tmp22_;
-	gboolean _tmp75_ = FALSE;
-	ValaDataType* _tmp76_;
-	gboolean _tmp78_;
+	gboolean _tmp79_ = FALSE;
+	ValaDataType* _tmp80_;
+	gboolean _tmp82_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (params != NULL);
 	last_index = 0;
@@ -3168,11 +3627,11 @@ static void vala_gir_writer_write_params_and_return (ValaGIRWriter* self, ValaLi
 		gint _tmp24_;
 		gint index;
 		ValaDataType* _tmp25_;
-		gboolean _tmp60_;
-		gint _tmp65_;
-		gboolean _tmp66_;
-		gint _tmp73_;
-		GString* _tmp74_;
+		gboolean _tmp63_;
+		gint _tmp69_;
+		gboolean _tmp70_;
+		gint _tmp77_;
+		GString* _tmp78_;
 		vala_gir_writer_write_indent (self);
 		_tmp23_ = self->priv->buffer;
 		g_string_append_printf (_tmp23_, "<parameters>\n");
@@ -3183,7 +3642,7 @@ static void vala_gir_writer_write_params_and_return (ValaGIRWriter* self, ValaLi
 		if (_tmp25_ != NULL) {
 			ValaDataType* _tmp26_;
 			_tmp26_ = instance_type;
-			vala_gir_writer_write_param_or_return (self, _tmp26_, TRUE, &index, FALSE, "self", VALA_PARAMETER_DIRECTION_IN, FALSE, FALSE);
+			vala_gir_writer_write_param_or_return (self, _tmp26_, TRUE, &index, FALSE, "self", NULL, VALA_PARAMETER_DIRECTION_IN, FALSE, FALSE);
 		}
 		{
 			ValaList* _tmp27_;
@@ -3219,19 +3678,22 @@ static void vala_gir_writer_write_params_and_return (ValaGIRWriter* self, ValaLi
 				const gchar* _tmp44_;
 				const gchar* _tmp45_;
 				ValaParameter* _tmp46_;
-				ValaParameterDirection _tmp47_;
-				ValaParameterDirection _tmp48_;
+				gchar* _tmp47_ = NULL;
+				gchar* _tmp48_;
 				ValaParameter* _tmp49_;
-				ValaDataType* _tmp50_;
-				ValaDataType* _tmp51_;
+				ValaParameterDirection _tmp50_;
+				ValaParameterDirection _tmp51_;
 				ValaParameter* _tmp52_;
-				gboolean _tmp53_ = FALSE;
-				ValaParameter* _tmp54_;
-				const gchar* _tmp55_;
-				const gchar* _tmp56_;
+				ValaDataType* _tmp53_;
+				ValaDataType* _tmp54_;
+				ValaParameter* _tmp55_;
+				gboolean _tmp56_ = FALSE;
 				ValaParameter* _tmp57_;
-				ValaParameterDirection _tmp58_;
-				ValaParameterDirection _tmp59_;
+				const gchar* _tmp58_;
+				const gchar* _tmp59_;
+				ValaParameter* _tmp60_;
+				ValaParameterDirection _tmp61_;
+				ValaParameterDirection _tmp62_;
 				_tmp32_ = _param_index;
 				_param_index = _tmp32_ + 1;
 				_tmp33_ = _param_index;
@@ -3252,98 +3714,108 @@ static void vala_gir_writer_write_params_and_return (ValaGIRWriter* self, ValaLi
 				_tmp44_ = vala_symbol_get_name ((ValaSymbol*) _tmp43_);
 				_tmp45_ = _tmp44_;
 				_tmp46_ = param;
-				_tmp47_ = vala_parameter_get_direction (_tmp46_);
+				_tmp47_ = vala_gir_writer_get_parameter_comment (self, _tmp46_);
 				_tmp48_ = _tmp47_;
-				vala_gir_writer_write_param_or_return (self, _tmp40_, TRUE, &index, _tmp42_, _tmp45_, _tmp48_, FALSE, FALSE);
 				_tmp49_ = param;
-				_tmp50_ = vala_variable_get_variable_type ((ValaVariable*) _tmp49_);
+				_tmp50_ = vala_parameter_get_direction (_tmp49_);
 				_tmp51_ = _tmp50_;
+				vala_gir_writer_write_param_or_return (self, _tmp40_, TRUE, &index, _tmp42_, _tmp45_, _tmp48_, _tmp51_, FALSE, FALSE);
+				_g_free0 (_tmp48_);
 				_tmp52_ = param;
-				_tmp53_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp52_);
-				_tmp54_ = param;
-				_tmp55_ = vala_symbol_get_name ((ValaSymbol*) _tmp54_);
-				_tmp56_ = _tmp55_;
+				_tmp53_ = vala_variable_get_variable_type ((ValaVariable*) _tmp52_);
+				_tmp54_ = _tmp53_;
+				_tmp55_ = param;
+				_tmp56_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp55_);
 				_tmp57_ = param;
-				_tmp58_ = vala_parameter_get_direction (_tmp57_);
+				_tmp58_ = vala_symbol_get_name ((ValaSymbol*) _tmp57_);
 				_tmp59_ = _tmp58_;
-				vala_gir_writer_write_implicit_params (self, _tmp51_, &index, _tmp53_, _tmp56_, _tmp59_);
+				_tmp60_ = param;
+				_tmp61_ = vala_parameter_get_direction (_tmp60_);
+				_tmp62_ = _tmp61_;
+				vala_gir_writer_write_implicit_params (self, _tmp54_, &index, _tmp56_, _tmp59_, _tmp62_);
 				_vala_code_node_unref0 (param);
 			}
 			_vala_iterable_unref0 (_param_list);
 		}
-		_tmp60_ = ret_is_struct;
-		if (_tmp60_) {
-			ValaDataType* _tmp61_;
-			gboolean _tmp62_;
-			_tmp61_ = return_type;
-			_tmp62_ = constructor;
-			vala_gir_writer_write_param_or_return (self, _tmp61_, TRUE, &index, FALSE, "result", VALA_PARAMETER_DIRECTION_OUT, _tmp62_, TRUE);
+		_tmp63_ = ret_is_struct;
+		if (_tmp63_) {
+			ValaDataType* _tmp64_;
+			const gchar* _tmp65_;
+			gboolean _tmp66_;
+			_tmp64_ = return_type;
+			_tmp65_ = return_comment;
+			_tmp66_ = constructor;
+			vala_gir_writer_write_param_or_return (self, _tmp64_, TRUE, &index, FALSE, "result", _tmp65_, VALA_PARAMETER_DIRECTION_OUT, _tmp66_, TRUE);
 		} else {
-			ValaDataType* _tmp63_;
-			gboolean _tmp64_;
-			_tmp63_ = return_type;
-			_tmp64_ = return_array_length;
-			vala_gir_writer_write_implicit_params (self, _tmp63_, &index, _tmp64_, "result", VALA_PARAMETER_DIRECTION_OUT);
+			ValaDataType* _tmp67_;
+			gboolean _tmp68_;
+			_tmp67_ = return_type;
+			_tmp68_ = return_array_length;
+			vala_gir_writer_write_implicit_params (self, _tmp67_, &index, _tmp68_, "result", VALA_PARAMETER_DIRECTION_OUT);
 		}
-		_tmp65_ = index;
-		last_index = _tmp65_ - 1;
-		_tmp66_ = user_data;
-		if (_tmp66_) {
-			GString* _tmp67_;
-			gint _tmp68_;
-			gint _tmp69_;
-			GString* _tmp70_;
-			gint _tmp71_;
-			GString* _tmp72_;
+		_tmp69_ = index;
+		last_index = _tmp69_ - 1;
+		_tmp70_ = user_data;
+		if (_tmp70_) {
+			GString* _tmp71_;
+			gint _tmp72_;
+			gint _tmp73_;
+			GString* _tmp74_;
+			gint _tmp75_;
+			GString* _tmp76_;
 			vala_gir_writer_write_indent (self);
-			_tmp67_ = self->priv->buffer;
-			_tmp68_ = index;
-			g_string_append_printf (_tmp67_, "<parameter name=\"user_data\" transfer-ownership=\"none\" closure=\"%d" \
-"\">\n", _tmp68_);
-			_tmp69_ = self->priv->indent;
-			self->priv->indent = _tmp69_ + 1;
+			_tmp71_ = self->priv->buffer;
+			_tmp72_ = index;
+			g_string_append_printf (_tmp71_, "<parameter name=\"user_data\" transfer-ownership=\"none\" closure=\"%d" \
+"\">\n", _tmp72_);
+			_tmp73_ = self->priv->indent;
+			self->priv->indent = _tmp73_ + 1;
 			vala_gir_writer_write_indent (self);
-			_tmp70_ = self->priv->buffer;
-			g_string_append_printf (_tmp70_, "<type name=\"gpointer\" c:type=\"void*\"/>\n");
-			_tmp71_ = self->priv->indent;
-			self->priv->indent = _tmp71_ - 1;
+			_tmp74_ = self->priv->buffer;
+			g_string_append_printf (_tmp74_, "<type name=\"gpointer\" c:type=\"void*\"/>\n");
+			_tmp75_ = self->priv->indent;
+			self->priv->indent = _tmp75_ - 1;
 			vala_gir_writer_write_indent (self);
-			_tmp72_ = self->priv->buffer;
-			g_string_append_printf (_tmp72_, "</parameter>\n");
+			_tmp76_ = self->priv->buffer;
+			g_string_append_printf (_tmp76_, "</parameter>\n");
 		}
-		_tmp73_ = self->priv->indent;
-		self->priv->indent = _tmp73_ - 1;
+		_tmp77_ = self->priv->indent;
+		self->priv->indent = _tmp77_ - 1;
 		vala_gir_writer_write_indent (self);
-		_tmp74_ = self->priv->buffer;
-		g_string_append_printf (_tmp74_, "</parameters>\n");
-	}
-	_tmp76_ = return_type;
-	if (_tmp76_ != NULL) {
-		gboolean _tmp77_;
-		_tmp77_ = ret_is_struct;
-		_tmp75_ = !_tmp77_;
-	} else {
-		_tmp75_ = FALSE;
+		_tmp78_ = self->priv->buffer;
+		g_string_append_printf (_tmp78_, "</parameters>\n");
 	}
-	_tmp78_ = _tmp75_;
-	if (_tmp78_) {
-		ValaDataType* _tmp79_;
-		gboolean _tmp80_;
+	_tmp80_ = return_type;
+	if (_tmp80_ != NULL) {
 		gboolean _tmp81_;
-		_tmp79_ = return_type;
-		_tmp80_ = return_array_length;
-		_tmp81_ = constructor;
-		vala_gir_writer_write_param_or_return (self, _tmp79_, FALSE, &last_index, _tmp80_, NULL, VALA_PARAMETER_DIRECTION_IN, _tmp81_, FALSE);
+		_tmp81_ = ret_is_struct;
+		_tmp79_ = !_tmp81_;
+	} else {
+		_tmp79_ = FALSE;
+	}
+	_tmp82_ = _tmp79_;
+	if (_tmp82_) {
+		ValaDataType* _tmp83_;
+		gboolean _tmp84_;
+		const gchar* _tmp85_;
+		gboolean _tmp86_;
+		_tmp83_ = return_type;
+		_tmp84_ = return_array_length;
+		_tmp85_ = return_comment;
+		_tmp86_ = constructor;
+		vala_gir_writer_write_param_or_return (self, _tmp83_, FALSE, &last_index, _tmp84_, NULL, _tmp85_, VALA_PARAMETER_DIRECTION_IN, _tmp86_, FALSE);
 	} else {
-		gboolean _tmp82_;
-		_tmp82_ = ret_is_struct;
-		if (_tmp82_) {
-			ValaVoidType* _tmp83_;
-			ValaVoidType* _tmp84_;
-			_tmp83_ = vala_void_type_new (NULL);
-			_tmp84_ = _tmp83_;
-			vala_gir_writer_write_param_or_return (self, (ValaDataType*) _tmp84_, FALSE, &last_index, FALSE, NULL, VALA_PARAMETER_DIRECTION_IN, FALSE, FALSE);
-			_vala_code_node_unref0 (_tmp84_);
+		gboolean _tmp87_;
+		_tmp87_ = ret_is_struct;
+		if (_tmp87_) {
+			ValaVoidType* _tmp88_;
+			ValaVoidType* _tmp89_;
+			const gchar* _tmp90_;
+			_tmp88_ = vala_void_type_new (NULL);
+			_tmp89_ = _tmp88_;
+			_tmp90_ = return_comment;
+			vala_gir_writer_write_param_or_return (self, (ValaDataType*) _tmp89_, FALSE, &last_index, FALSE, NULL, _tmp90_, VALA_PARAMETER_DIRECTION_IN, FALSE, FALSE);
+			_vala_code_node_unref0 (_tmp89_);
 		}
 	}
 }
@@ -3371,19 +3843,25 @@ static void vala_gir_writer_real_visit_delegate (ValaCodeVisitor* base, ValaDele
 	GString* _tmp18_;
 	gint _tmp19_;
 	ValaDelegate* _tmp20_;
-	ValaDelegate* _tmp21_;
-	ValaList* _tmp22_ = NULL;
-	ValaList* _tmp23_;
+	gchar* _tmp21_ = NULL;
+	gchar* _tmp22_;
+	ValaDelegate* _tmp23_;
 	ValaDelegate* _tmp24_;
-	ValaDataType* _tmp25_;
-	ValaDataType* _tmp26_;
+	ValaList* _tmp25_ = NULL;
+	ValaList* _tmp26_;
 	ValaDelegate* _tmp27_;
-	gboolean _tmp28_ = FALSE;
-	ValaDelegate* _tmp29_;
-	gboolean _tmp30_;
-	gboolean _tmp31_;
-	gint _tmp32_;
-	GString* _tmp33_;
+	ValaDataType* _tmp28_;
+	ValaDataType* _tmp29_;
+	ValaDelegate* _tmp30_;
+	gboolean _tmp31_ = FALSE;
+	ValaDelegate* _tmp32_;
+	gchar* _tmp33_ = NULL;
+	gchar* _tmp34_;
+	ValaDelegate* _tmp35_;
+	gboolean _tmp36_;
+	gboolean _tmp37_;
+	gint _tmp38_;
+	GString* _tmp39_;
 	self = (ValaGIRWriter*) base;
 	g_return_if_fail (cb != NULL);
 	_tmp0_ = cb;
@@ -3424,25 +3902,34 @@ static void vala_gir_writer_real_visit_delegate (ValaCodeVisitor* base, ValaDele
 	_tmp19_ = self->priv->indent;
 	self->priv->indent = _tmp19_ + 1;
 	_tmp20_ = cb;
-	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp20_);
-	_tmp21_ = cb;
-	_tmp22_ = vala_delegate_get_parameters (_tmp21_);
-	_tmp23_ = _tmp22_;
+	_tmp21_ = vala_gir_writer_get_delegate_comment (self, _tmp20_);
+	_tmp22_ = _tmp21_;
+	vala_gir_writer_write_doc (self, _tmp22_);
+	_g_free0 (_tmp22_);
+	_tmp23_ = cb;
+	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp23_);
 	_tmp24_ = cb;
-	_tmp25_ = vala_delegate_get_return_type (_tmp24_);
+	_tmp25_ = vala_delegate_get_parameters (_tmp24_);
 	_tmp26_ = _tmp25_;
 	_tmp27_ = cb;
-	_tmp28_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp27_);
-	_tmp29_ = cb;
-	_tmp30_ = vala_delegate_get_has_target (_tmp29_);
-	_tmp31_ = _tmp30_;
-	vala_gir_writer_write_params_and_return (self, _tmp23_, _tmp26_, _tmp28_, FALSE, NULL, _tmp31_);
-	_vala_iterable_unref0 (_tmp23_);
-	_tmp32_ = self->priv->indent;
-	self->priv->indent = _tmp32_ - 1;
+	_tmp28_ = vala_delegate_get_return_type (_tmp27_);
+	_tmp29_ = _tmp28_;
+	_tmp30_ = cb;
+	_tmp31_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp30_);
+	_tmp32_ = cb;
+	_tmp33_ = vala_gir_writer_get_delegate_return_comment (self, _tmp32_);
+	_tmp34_ = _tmp33_;
+	_tmp35_ = cb;
+	_tmp36_ = vala_delegate_get_has_target (_tmp35_);
+	_tmp37_ = _tmp36_;
+	vala_gir_writer_write_params_and_return (self, _tmp26_, _tmp29_, _tmp31_, _tmp34_, FALSE, NULL, _tmp37_);
+	_g_free0 (_tmp34_);
+	_vala_iterable_unref0 (_tmp26_);
+	_tmp38_ = self->priv->indent;
+	self->priv->indent = _tmp38_ - 1;
 	vala_gir_writer_write_indent (self);
-	_tmp33_ = self->priv->buffer;
-	g_string_append_printf (_tmp33_, "</callback>\n");
+	_tmp39_ = self->priv->buffer;
+	g_string_append_printf (_tmp39_, "</callback>\n");
 }
 
 
@@ -3598,7 +4085,7 @@ static void vala_gir_writer_real_visit_method (ValaCodeVisitor* base, ValaMethod
 	}
 	_tmp46_ = m;
 	_tmp47_ = tag_name;
-	vala_gir_writer_write_signature (self, _tmp46_, _tmp47_, FALSE);
+	vala_gir_writer_write_signature (self, _tmp46_, _tmp47_, TRUE, FALSE);
 	_tmp49_ = m;
 	_tmp50_ = vala_method_get_is_abstract (_tmp49_);
 	_tmp51_ = _tmp50_;
@@ -3617,7 +4104,7 @@ static void vala_gir_writer_real_visit_method (ValaCodeVisitor* base, ValaMethod
 	if (_tmp55_) {
 		ValaMethod* _tmp56_;
 		_tmp56_ = m;
-		vala_gir_writer_write_signature (self, _tmp56_, "virtual-method", FALSE);
+		vala_gir_writer_write_signature (self, _tmp56_, "virtual-method", TRUE, FALSE);
 	}
 	_vala_code_node_unref0 (parent);
 	_g_free0 (tag_name);
@@ -3735,7 +4222,7 @@ static gboolean vala_gir_writer_check_signature (ValaGIRWriter* self, ValaMethod
 }
 
 
-static void vala_gir_writer_write_signature (ValaGIRWriter* self, ValaMethod* m, const gchar* tag_name, gboolean instance) {
+static void vala_gir_writer_write_signature (ValaGIRWriter* self, ValaMethod* m, const gchar* tag_name, gboolean write_doc, gboolean instance) {
 	ValaArrayList* _tmp0_;
 	gpointer _tmp1_ = NULL;
 	ValaSymbol* parent;
@@ -3882,7 +4369,7 @@ static void vala_gir_writer_write_signature (ValaGIRWriter* self, ValaMethod* m,
 		_tmp47_ = _tmp46_;
 		_tmp48_ = vala_void_type_new (NULL);
 		_tmp49_ = _tmp48_;
-		vala_gir_writer_do_write_signature (self, _tmp38_, _tmp39_, _tmp40_, _tmp41_, _tmp44_, _tmp47_, (ValaDataType*) _tmp49_, FALSE);
+		vala_gir_writer_do_write_signature (self, _tmp38_, _tmp39_, _tmp40_, _tmp41_, _tmp44_, _tmp47_, (ValaDataType*) _tmp49_, FALSE, TRUE);
 		_vala_code_node_unref0 (_tmp49_);
 		_vala_iterable_unref0 (_tmp47_);
 		_g_free0 (_tmp44_);
@@ -3902,7 +4389,7 @@ static void vala_gir_writer_write_signature (ValaGIRWriter* self, ValaMethod* m,
 		_tmp63_ = m;
 		_tmp64_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp63_);
 		_tmp65_ = _tmp64_;
-		vala_gir_writer_do_write_signature (self, _tmp50_, _tmp51_, _tmp52_, _tmp53_, _tmp56_, _tmp59_, _tmp62_, _tmp65_);
+		vala_gir_writer_do_write_signature (self, _tmp50_, _tmp51_, _tmp52_, _tmp53_, _tmp56_, _tmp59_, _tmp62_, _tmp65_, FALSE);
 		_vala_iterable_unref0 (_tmp59_);
 		_g_free0 (_tmp56_);
 		_g_free0 (finish_name);
@@ -3939,7 +4426,7 @@ static void vala_gir_writer_write_signature (ValaGIRWriter* self, ValaMethod* m,
 		_tmp79_ = m;
 		_tmp80_ = vala_code_node_get_tree_can_fail ((ValaCodeNode*) _tmp79_);
 		_tmp81_ = _tmp80_;
-		vala_gir_writer_do_write_signature (self, _tmp66_, _tmp67_, _tmp68_, _tmp69_, _tmp72_, _tmp75_, _tmp78_, _tmp81_);
+		vala_gir_writer_do_write_signature (self, _tmp66_, _tmp67_, _tmp68_, _tmp69_, _tmp72_, _tmp75_, _tmp78_, _tmp81_, TRUE);
 		_vala_iterable_unref0 (_tmp75_);
 		_g_free0 (_tmp72_);
 	}
@@ -3948,7 +4435,7 @@ static void vala_gir_writer_write_signature (ValaGIRWriter* self, ValaMethod* m,
 }
 
 
-static void vala_gir_writer_do_write_signature (ValaGIRWriter* self, ValaMethod* m, const gchar* tag_name, gboolean instance, const gchar* name, const gchar* cname, ValaList* params, ValaDataType* return_type, gboolean can_fail) {
+static void vala_gir_writer_do_write_signature (ValaGIRWriter* self, ValaMethod* m, const gchar* tag_name, gboolean instance, const gchar* name, const gchar* cname, ValaList* params, ValaDataType* return_type, gboolean can_fail, gboolean write_comment) {
 	GString* _tmp0_;
 	const gchar* _tmp1_;
 	const gchar* _tmp2_;
@@ -3957,17 +4444,20 @@ static void vala_gir_writer_do_write_signature (ValaGIRWriter* self, ValaMethod*
 	ValaMethod* _tmp13_;
 	GString* _tmp14_;
 	gint _tmp15_;
-	ValaMethod* _tmp16_;
+	gchar* return_comment;
+	gboolean _tmp16_;
+	ValaMethod* _tmp22_;
 	ValaDataType* instance_type;
-	gboolean _tmp17_;
-	ValaList* _tmp22_;
-	ValaDataType* _tmp23_;
-	ValaMethod* _tmp24_;
-	gboolean _tmp25_ = FALSE;
-	ValaDataType* _tmp26_;
-	gint _tmp27_;
-	GString* _tmp28_;
-	const gchar* _tmp29_;
+	gboolean _tmp23_;
+	ValaList* _tmp28_;
+	ValaDataType* _tmp29_;
+	ValaMethod* _tmp30_;
+	gboolean _tmp31_ = FALSE;
+	const gchar* _tmp32_;
+	ValaDataType* _tmp33_;
+	gint _tmp34_;
+	GString* _tmp35_;
+	const gchar* _tmp36_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (m != NULL);
 	g_return_if_fail (tag_name != NULL);
@@ -4016,35 +4506,55 @@ static void vala_gir_writer_do_write_signature (ValaGIRWriter* self, ValaMethod*
 	g_string_append_printf (_tmp14_, ">\n");
 	_tmp15_ = self->priv->indent;
 	self->priv->indent = _tmp15_ + 1;
-	_tmp16_ = m;
-	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp16_);
+	return_comment = NULL;
+	_tmp16_ = write_comment;
+	if (_tmp16_) {
+		ValaMethod* _tmp17_;
+		gchar* _tmp18_ = NULL;
+		ValaMethod* _tmp19_;
+		gchar* _tmp20_ = NULL;
+		gchar* _tmp21_;
+		_tmp17_ = m;
+		_tmp18_ = vala_gir_writer_get_method_return_comment (self, _tmp17_);
+		_g_free0 (return_comment);
+		return_comment = _tmp18_;
+		_tmp19_ = m;
+		_tmp20_ = vala_gir_writer_get_method_comment (self, _tmp19_);
+		_tmp21_ = _tmp20_;
+		vala_gir_writer_write_doc (self, _tmp21_);
+		_g_free0 (_tmp21_);
+	}
+	_tmp22_ = m;
+	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp22_);
 	instance_type = NULL;
-	_tmp17_ = instance;
-	if (_tmp17_) {
-		ValaMethod* _tmp18_;
-		ValaSymbol* _tmp19_;
-		ValaSymbol* _tmp20_;
-		ValaDataType* _tmp21_ = NULL;
-		_tmp18_ = m;
-		_tmp19_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp18_);
-		_tmp20_ = _tmp19_;
-		_tmp21_ = vala_ccode_base_module_get_data_type_for_symbol (VALA_TYPESYMBOL (_tmp20_));
+	_tmp23_ = instance;
+	if (_tmp23_) {
+		ValaMethod* _tmp24_;
+		ValaSymbol* _tmp25_;
+		ValaSymbol* _tmp26_;
+		ValaDataType* _tmp27_ = NULL;
+		_tmp24_ = m;
+		_tmp25_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp24_);
+		_tmp26_ = _tmp25_;
+		_tmp27_ = vala_ccode_base_module_get_data_type_for_symbol (VALA_TYPESYMBOL (_tmp26_));
 		_vala_code_node_unref0 (instance_type);
-		instance_type = _tmp21_;
+		instance_type = _tmp27_;
 	}
-	_tmp22_ = params;
-	_tmp23_ = return_type;
-	_tmp24_ = m;
-	_tmp25_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp24_);
-	_tmp26_ = instance_type;
-	vala_gir_writer_write_params_and_return (self, _tmp22_, _tmp23_, _tmp25_, FALSE, _tmp26_, FALSE);
-	_tmp27_ = self->priv->indent;
-	self->priv->indent = _tmp27_ - 1;
+	_tmp28_ = params;
+	_tmp29_ = return_type;
+	_tmp30_ = m;
+	_tmp31_ = vala_ccode_base_module_get_ccode_array_length ((ValaCodeNode*) _tmp30_);
+	_tmp32_ = return_comment;
+	_tmp33_ = instance_type;
+	vala_gir_writer_write_params_and_return (self, _tmp28_, _tmp29_, _tmp31_, _tmp32_, FALSE, _tmp33_, FALSE);
+	_tmp34_ = self->priv->indent;
+	self->priv->indent = _tmp34_ - 1;
 	vala_gir_writer_write_indent (self);
-	_tmp28_ = self->priv->buffer;
-	_tmp29_ = tag_name;
-	g_string_append_printf (_tmp28_, "</%s>\n", _tmp29_);
+	_tmp35_ = self->priv->buffer;
+	_tmp36_ = tag_name;
+	g_string_append_printf (_tmp35_, "</%s>\n", _tmp36_);
 	_vala_code_node_unref0 (instance_type);
+	_g_free0 (return_comment);
 }
 
 
@@ -4082,18 +4592,24 @@ static void vala_gir_writer_real_visit_creation_method (ValaCodeVisitor* base, V
 	GString* _tmp68_;
 	gint _tmp69_;
 	ValaCreationMethod* _tmp70_;
-	ValaCreationMethod* _tmp71_;
-	ValaSymbol* _tmp72_;
-	ValaSymbol* _tmp73_;
-	ValaDataType* _tmp74_ = NULL;
+	gchar* _tmp71_ = NULL;
+	gchar* _tmp72_;
+	ValaCreationMethod* _tmp73_;
+	ValaCreationMethod* _tmp74_;
+	ValaSymbol* _tmp75_;
+	ValaSymbol* _tmp76_;
+	ValaDataType* _tmp77_ = NULL;
 	ValaDataType* datatype;
-	ValaCreationMethod* _tmp75_;
-	ValaList* _tmp76_ = NULL;
-	ValaList* _tmp77_;
-	ValaDataType* _tmp78_;
-	gint _tmp79_;
-	GString* _tmp80_;
-	const gchar* _tmp81_;
+	ValaCreationMethod* _tmp78_;
+	ValaList* _tmp79_ = NULL;
+	ValaList* _tmp80_;
+	ValaDataType* _tmp81_;
+	ValaCreationMethod* _tmp82_;
+	gchar* _tmp83_ = NULL;
+	gchar* _tmp84_;
+	gint _tmp85_;
+	GString* _tmp86_;
+	const gchar* _tmp87_;
 	self = (ValaGIRWriter*) base;
 	g_return_if_fail (m != NULL);
 	_tmp0_ = m;
@@ -4259,24 +4775,33 @@ static void vala_gir_writer_real_visit_creation_method (ValaCodeVisitor* base, V
 	_tmp69_ = self->priv->indent;
 	self->priv->indent = _tmp69_ + 1;
 	_tmp70_ = m;
-	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp70_);
-	_tmp71_ = m;
-	_tmp72_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp71_);
-	_tmp73_ = _tmp72_;
-	_tmp74_ = vala_ccode_base_module_get_data_type_for_symbol (VALA_TYPESYMBOL (_tmp73_));
-	datatype = _tmp74_;
-	_tmp75_ = m;
-	_tmp76_ = vala_method_get_parameters ((ValaMethod*) _tmp75_);
-	_tmp77_ = _tmp76_;
-	_tmp78_ = datatype;
-	vala_gir_writer_write_params_and_return (self, _tmp77_, _tmp78_, FALSE, TRUE, NULL, FALSE);
-	_vala_iterable_unref0 (_tmp77_);
-	_tmp79_ = self->priv->indent;
-	self->priv->indent = _tmp79_ - 1;
+	_tmp71_ = vala_gir_writer_get_method_comment (self, (ValaMethod*) _tmp70_);
+	_tmp72_ = _tmp71_;
+	vala_gir_writer_write_doc (self, _tmp72_);
+	_g_free0 (_tmp72_);
+	_tmp73_ = m;
+	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp73_);
+	_tmp74_ = m;
+	_tmp75_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp74_);
+	_tmp76_ = _tmp75_;
+	_tmp77_ = vala_ccode_base_module_get_data_type_for_symbol (VALA_TYPESYMBOL (_tmp76_));
+	datatype = _tmp77_;
+	_tmp78_ = m;
+	_tmp79_ = vala_method_get_parameters ((ValaMethod*) _tmp78_);
+	_tmp80_ = _tmp79_;
+	_tmp81_ = datatype;
+	_tmp82_ = m;
+	_tmp83_ = vala_gir_writer_get_method_return_comment (self, (ValaMethod*) _tmp82_);
+	_tmp84_ = _tmp83_;
+	vala_gir_writer_write_params_and_return (self, _tmp80_, _tmp81_, FALSE, _tmp84_, TRUE, NULL, FALSE);
+	_g_free0 (_tmp84_);
+	_vala_iterable_unref0 (_tmp80_);
+	_tmp85_ = self->priv->indent;
+	self->priv->indent = _tmp85_ - 1;
 	vala_gir_writer_write_indent (self);
-	_tmp80_ = self->priv->buffer;
-	_tmp81_ = tag_name;
-	g_string_append_printf (_tmp80_, "</%s>\n", _tmp81_);
+	_tmp86_ = self->priv->buffer;
+	_tmp87_ = tag_name;
+	g_string_append_printf (_tmp86_, "</%s>\n", _tmp87_);
 	_vala_code_node_unref0 (datatype);
 	_g_free0 (tag_name);
 }
@@ -4374,11 +4899,14 @@ static void vala_gir_writer_real_visit_property (ValaCodeVisitor* base, ValaProp
 	GString* _tmp49_;
 	gint _tmp50_;
 	ValaProperty* _tmp51_;
-	ValaProperty* _tmp52_;
-	ValaDataType* _tmp53_;
-	ValaDataType* _tmp54_;
-	gint _tmp55_;
-	GString* _tmp56_;
+	gchar* _tmp52_ = NULL;
+	gchar* _tmp53_;
+	ValaProperty* _tmp54_;
+	ValaProperty* _tmp55_;
+	ValaDataType* _tmp56_;
+	ValaDataType* _tmp57_;
+	gint _tmp58_;
+	GString* _tmp59_;
 	self = (ValaGIRWriter*) base;
 	g_return_if_fail (prop != NULL);
 	_tmp2_ = prop;
@@ -4501,16 +5029,21 @@ static void vala_gir_writer_real_visit_property (ValaCodeVisitor* base, ValaProp
 	_tmp50_ = self->priv->indent;
 	self->priv->indent = _tmp50_ + 1;
 	_tmp51_ = prop;
-	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp51_);
-	_tmp52_ = prop;
-	_tmp53_ = vala_property_get_property_type (_tmp52_);
-	_tmp54_ = _tmp53_;
-	vala_gir_writer_write_type (self, _tmp54_, -1);
-	_tmp55_ = self->priv->indent;
-	self->priv->indent = _tmp55_ - 1;
+	_tmp52_ = vala_gir_writer_get_property_comment (self, _tmp51_);
+	_tmp53_ = _tmp52_;
+	vala_gir_writer_write_doc (self, _tmp53_);
+	_g_free0 (_tmp53_);
+	_tmp54_ = prop;
+	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp54_);
+	_tmp55_ = prop;
+	_tmp56_ = vala_property_get_property_type (_tmp55_);
+	_tmp57_ = _tmp56_;
+	vala_gir_writer_write_type (self, _tmp57_, -1);
+	_tmp58_ = self->priv->indent;
+	self->priv->indent = _tmp58_ - 1;
 	vala_gir_writer_write_indent (self);
-	_tmp56_ = self->priv->buffer;
-	g_string_append_printf (_tmp56_, "</property>\n");
+	_tmp59_ = self->priv->buffer;
+	g_string_append_printf (_tmp59_, "</property>\n");
 }
 
 
@@ -4526,14 +5059,20 @@ static void vala_gir_writer_real_visit_signal (ValaCodeVisitor* base, ValaSignal
 	GString* _tmp7_;
 	gint _tmp8_;
 	ValaSignal* _tmp9_;
-	ValaSignal* _tmp10_;
-	ValaList* _tmp11_ = NULL;
-	ValaList* _tmp12_;
+	gchar* _tmp10_ = NULL;
+	gchar* _tmp11_;
+	ValaSignal* _tmp12_;
 	ValaSignal* _tmp13_;
-	ValaDataType* _tmp14_;
-	ValaDataType* _tmp15_;
-	gint _tmp16_;
-	GString* _tmp17_;
+	ValaList* _tmp14_ = NULL;
+	ValaList* _tmp15_;
+	ValaSignal* _tmp16_;
+	ValaDataType* _tmp17_;
+	ValaDataType* _tmp18_;
+	ValaSignal* _tmp19_;
+	gchar* _tmp20_ = NULL;
+	gchar* _tmp21_;
+	gint _tmp22_;
+	GString* _tmp23_;
 	self = (ValaGIRWriter*) base;
 	g_return_if_fail (sig != NULL);
 	_tmp0_ = sig;
@@ -4555,20 +5094,29 @@ static void vala_gir_writer_real_visit_signal (ValaCodeVisitor* base, ValaSignal
 	_tmp8_ = self->priv->indent;
 	self->priv->indent = _tmp8_ + 1;
 	_tmp9_ = sig;
-	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp9_);
-	_tmp10_ = sig;
-	_tmp11_ = vala_signal_get_parameters (_tmp10_);
-	_tmp12_ = _tmp11_;
+	_tmp10_ = vala_gir_writer_get_signal_comment (self, _tmp9_);
+	_tmp11_ = _tmp10_;
+	vala_gir_writer_write_doc (self, _tmp11_);
+	_g_free0 (_tmp11_);
+	_tmp12_ = sig;
+	vala_gir_writer_write_annotations (self, (ValaCodeNode*) _tmp12_);
 	_tmp13_ = sig;
-	_tmp14_ = vala_signal_get_return_type (_tmp13_);
+	_tmp14_ = vala_signal_get_parameters (_tmp13_);
 	_tmp15_ = _tmp14_;
-	vala_gir_writer_write_params_and_return (self, _tmp12_, _tmp15_, FALSE, FALSE, NULL, FALSE);
-	_vala_iterable_unref0 (_tmp12_);
-	_tmp16_ = self->priv->indent;
-	self->priv->indent = _tmp16_ - 1;
+	_tmp16_ = sig;
+	_tmp17_ = vala_signal_get_return_type (_tmp16_);
+	_tmp18_ = _tmp17_;
+	_tmp19_ = sig;
+	_tmp20_ = vala_gir_writer_get_signal_return_comment (self, _tmp19_);
+	_tmp21_ = _tmp20_;
+	vala_gir_writer_write_params_and_return (self, _tmp15_, _tmp18_, FALSE, _tmp21_, FALSE, NULL, FALSE);
+	_g_free0 (_tmp21_);
+	_vala_iterable_unref0 (_tmp15_);
+	_tmp22_ = self->priv->indent;
+	self->priv->indent = _tmp22_ - 1;
 	vala_gir_writer_write_indent (self);
-	_tmp17_ = self->priv->buffer;
-	g_string_append_printf (_tmp17_, "</glib:signal>\n");
+	_tmp23_ = self->priv->buffer;
+	g_string_append_printf (_tmp23_, "</glib:signal>\n");
 }
 
 
@@ -4634,7 +5182,7 @@ static void vala_gir_writer_write_indent_stream (ValaGIRWriter* self) {
 }
 
 
-static void vala_gir_writer_write_param_or_return (ValaGIRWriter* self, ValaDataType* type, gboolean is_parameter, gint* index, gboolean has_array_length, const gchar* name, ValaParameterDirection direction, gboolean constructor, gboolean caller_allocates) {
+static void vala_gir_writer_write_param_or_return (ValaGIRWriter* self, ValaDataType* type, gboolean is_parameter, gint* index, gboolean has_array_length, const gchar* name, const gchar* comment, ValaParameterDirection direction, gboolean constructor, gboolean caller_allocates) {
 	const gchar* _tmp0_ = NULL;
 	gboolean _tmp1_;
 	const gchar* _tmp2_;
@@ -4653,24 +5201,25 @@ static void vala_gir_writer_write_param_or_return (ValaGIRWriter* self, ValaData
 	gboolean _tmp18_;
 	gboolean _tmp19_;
 	gboolean _tmp21_;
-	gboolean _tmp23_;
-	gboolean _tmp26_;
-	ValaDataType* _tmp28_;
-	gboolean _tmp29_;
 	gboolean _tmp30_;
-	gboolean _tmp32_ = FALSE;
-	ValaDelegateType* _tmp33_;
-	gboolean _tmp39_;
-	GString* _tmp62_;
-	gint _tmp63_;
+	gboolean _tmp33_;
+	ValaDataType* _tmp35_;
+	gboolean _tmp36_;
+	gboolean _tmp37_;
+	gboolean _tmp39_ = FALSE;
+	ValaDelegateType* _tmp40_;
+	gboolean _tmp46_;
+	GString* _tmp69_;
+	gint _tmp70_;
+	const gchar* _tmp71_;
 	gint length_param_index;
-	gboolean _tmp64_;
-	ValaDataType* _tmp70_;
-	gint _tmp71_;
-	gint _tmp72_;
-	GString* _tmp73_;
-	const gchar* _tmp74_;
-	gint _tmp75_;
+	gboolean _tmp72_;
+	ValaDataType* _tmp78_;
+	gint _tmp79_;
+	gint _tmp80_;
+	GString* _tmp81_;
+	const gchar* _tmp82_;
+	gint _tmp83_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (type != NULL);
 	vala_gir_writer_write_indent (self);
@@ -4725,148 +5274,168 @@ static void vala_gir_writer_write_param_or_return (ValaGIRWriter* self, ValaData
 	if (_tmp21_) {
 		_tmp15_ = TRUE;
 	} else {
-		gboolean _tmp22_;
-		_tmp22_ = constructor;
-		_tmp15_ = _tmp22_;
-	}
-	_tmp23_ = _tmp15_;
-	if (_tmp23_) {
-		GString* _tmp24_;
-		_tmp24_ = self->priv->buffer;
-		g_string_append_printf (_tmp24_, " transfer-ownership=\"full\"");
-	} else {
-		GString* _tmp25_;
-		_tmp25_ = self->priv->buffer;
-		g_string_append_printf (_tmp25_, " transfer-ownership=\"none\"");
-	}
-	_tmp26_ = caller_allocates;
-	if (_tmp26_) {
-		GString* _tmp27_;
-		_tmp27_ = self->priv->buffer;
-		g_string_append_printf (_tmp27_, " caller-allocates=\"1\"");
+		gboolean _tmp22_ = FALSE;
+		gboolean _tmp23_;
+		gboolean _tmp29_;
+		_tmp23_ = constructor;
+		if (_tmp23_) {
+			ValaDataType* _tmp24_;
+			ValaTypeSymbol* _tmp25_;
+			ValaTypeSymbol* _tmp26_;
+			ValaTypeSymbol* _tmp27_;
+			gboolean _tmp28_ = FALSE;
+			_tmp24_ = type;
+			_tmp25_ = vala_data_type_get_data_type (_tmp24_);
+			_tmp26_ = _tmp25_;
+			_tmp27_ = self->priv->ginitiallyunowned_type;
+			_tmp28_ = vala_typesymbol_is_subtype_of (_tmp26_, _tmp27_);
+			_tmp22_ = !_tmp28_;
+		} else {
+			_tmp22_ = FALSE;
+		}
+		_tmp29_ = _tmp22_;
+		_tmp15_ = _tmp29_;
 	}
-	_tmp28_ = type;
-	_tmp29_ = vala_data_type_get_nullable (_tmp28_);
-	_tmp30_ = _tmp29_;
+	_tmp30_ = _tmp15_;
 	if (_tmp30_) {
 		GString* _tmp31_;
 		_tmp31_ = self->priv->buffer;
-		g_string_append_printf (_tmp31_, " allow-none=\"1\"");
-	}
-	_tmp33_ = delegate_type;
-	if (_tmp33_ != NULL) {
-		ValaDelegateType* _tmp34_;
-		ValaDelegate* _tmp35_;
-		ValaDelegate* _tmp36_;
-		gboolean _tmp37_;
-		gboolean _tmp38_;
-		_tmp34_ = delegate_type;
-		_tmp35_ = vala_delegate_type_get_delegate_symbol (_tmp34_);
-		_tmp36_ = _tmp35_;
-		_tmp37_ = vala_delegate_get_has_target (_tmp36_);
-		_tmp38_ = _tmp37_;
-		_tmp32_ = _tmp38_;
+		g_string_append_printf (_tmp31_, " transfer-ownership=\"full\"");
 	} else {
-		_tmp32_ = FALSE;
+		GString* _tmp32_;
+		_tmp32_ = self->priv->buffer;
+		g_string_append_printf (_tmp32_, " transfer-ownership=\"none\"");
 	}
-	_tmp39_ = _tmp32_;
-	if (_tmp39_) {
-		gint _tmp40_ = 0;
-		gboolean _tmp41_;
-		gint _tmp50_;
+	_tmp33_ = caller_allocates;
+	if (_tmp33_) {
+		GString* _tmp34_;
+		_tmp34_ = self->priv->buffer;
+		g_string_append_printf (_tmp34_, " caller-allocates=\"1\"");
+	}
+	_tmp35_ = type;
+	_tmp36_ = vala_data_type_get_nullable (_tmp35_);
+	_tmp37_ = _tmp36_;
+	if (_tmp37_) {
+		GString* _tmp38_;
+		_tmp38_ = self->priv->buffer;
+		g_string_append_printf (_tmp38_, " allow-none=\"1\"");
+	}
+	_tmp40_ = delegate_type;
+	if (_tmp40_ != NULL) {
+		ValaDelegateType* _tmp41_;
+		ValaDelegate* _tmp42_;
+		ValaDelegate* _tmp43_;
+		gboolean _tmp44_;
+		gboolean _tmp45_;
+		_tmp41_ = delegate_type;
+		_tmp42_ = vala_delegate_type_get_delegate_symbol (_tmp41_);
+		_tmp43_ = _tmp42_;
+		_tmp44_ = vala_delegate_get_has_target (_tmp43_);
+		_tmp45_ = _tmp44_;
+		_tmp39_ = _tmp45_;
+	} else {
+		_tmp39_ = FALSE;
+	}
+	_tmp46_ = _tmp39_;
+	if (_tmp46_) {
+		gint _tmp47_ = 0;
+		gboolean _tmp48_;
+		gint _tmp57_;
 		gint closure_index;
-		GString* _tmp51_;
-		gint _tmp52_;
-		ValaDataType* _tmp53_;
-		gboolean _tmp54_;
-		gboolean _tmp55_;
-		ValaDelegateType* _tmp58_;
-		gboolean _tmp59_;
-		gboolean _tmp60_;
-		_tmp41_ = is_parameter;
-		if (_tmp41_) {
-			gint _tmp42_;
-			_tmp42_ = *index;
-			_tmp40_ = _tmp42_ + 1;
-		} else {
-			gint _tmp43_ = 0;
-			ValaDataType* _tmp44_;
-			gboolean _tmp45_;
-			gboolean _tmp46_;
+		GString* _tmp58_;
+		gint _tmp59_;
+		ValaDataType* _tmp60_;
+		gboolean _tmp61_;
+		gboolean _tmp62_;
+		ValaDelegateType* _tmp65_;
+		gboolean _tmp66_;
+		gboolean _tmp67_;
+		_tmp48_ = is_parameter;
+		if (_tmp48_) {
 			gint _tmp49_;
-			_tmp44_ = type;
-			_tmp45_ = vala_data_type_get_value_owned (_tmp44_);
-			_tmp46_ = _tmp45_;
-			if (_tmp46_) {
-				gint _tmp47_;
-				_tmp47_ = *index;
-				_tmp43_ = _tmp47_ - 1;
+			_tmp49_ = *index;
+			_tmp47_ = _tmp49_ + 1;
+		} else {
+			gint _tmp50_ = 0;
+			ValaDataType* _tmp51_;
+			gboolean _tmp52_;
+			gboolean _tmp53_;
+			gint _tmp56_;
+			_tmp51_ = type;
+			_tmp52_ = vala_data_type_get_value_owned (_tmp51_);
+			_tmp53_ = _tmp52_;
+			if (_tmp53_) {
+				gint _tmp54_;
+				_tmp54_ = *index;
+				_tmp50_ = _tmp54_ - 1;
 			} else {
-				gint _tmp48_;
-				_tmp48_ = *index;
-				_tmp43_ = _tmp48_;
+				gint _tmp55_;
+				_tmp55_ = *index;
+				_tmp50_ = _tmp55_;
 			}
-			_tmp49_ = _tmp43_;
-			_tmp40_ = _tmp49_;
+			_tmp56_ = _tmp50_;
+			_tmp47_ = _tmp56_;
 		}
-		_tmp50_ = _tmp40_;
-		closure_index = _tmp50_;
-		_tmp51_ = self->priv->buffer;
-		_tmp52_ = closure_index;
-		g_string_append_printf (_tmp51_, " closure=\"%i\"", _tmp52_);
-		_tmp53_ = type;
-		_tmp54_ = vala_data_type_get_value_owned (_tmp53_);
-		_tmp55_ = _tmp54_;
-		if (_tmp55_) {
-			GString* _tmp56_;
-			gint _tmp57_;
-			_tmp56_ = self->priv->buffer;
-			_tmp57_ = closure_index;
-			g_string_append_printf (_tmp56_, " destroy=\"%i\"", _tmp57_ + 1);
+		_tmp57_ = _tmp47_;
+		closure_index = _tmp57_;
+		_tmp58_ = self->priv->buffer;
+		_tmp59_ = closure_index;
+		g_string_append_printf (_tmp58_, " closure=\"%i\"", _tmp59_);
+		_tmp60_ = type;
+		_tmp61_ = vala_data_type_get_value_owned (_tmp60_);
+		_tmp62_ = _tmp61_;
+		if (_tmp62_) {
+			GString* _tmp63_;
+			gint _tmp64_;
+			_tmp63_ = self->priv->buffer;
+			_tmp64_ = closure_index;
+			g_string_append_printf (_tmp63_, " destroy=\"%i\"", _tmp64_ + 1);
 		}
-		_tmp58_ = delegate_type;
-		_tmp59_ = vala_delegate_type_get_is_called_once (_tmp58_);
-		_tmp60_ = _tmp59_;
-		if (_tmp60_) {
-			GString* _tmp61_;
-			_tmp61_ = self->priv->buffer;
-			g_string_append (_tmp61_, " scope=\"async\"");
+		_tmp65_ = delegate_type;
+		_tmp66_ = vala_delegate_type_get_is_called_once (_tmp65_);
+		_tmp67_ = _tmp66_;
+		if (_tmp67_) {
+			GString* _tmp68_;
+			_tmp68_ = self->priv->buffer;
+			g_string_append (_tmp68_, " scope=\"async\"");
 		}
 	}
-	_tmp62_ = self->priv->buffer;
-	g_string_append_printf (_tmp62_, ">\n");
-	_tmp63_ = self->priv->indent;
-	self->priv->indent = _tmp63_ + 1;
+	_tmp69_ = self->priv->buffer;
+	g_string_append_printf (_tmp69_, ">\n");
+	_tmp70_ = self->priv->indent;
+	self->priv->indent = _tmp70_ + 1;
+	_tmp71_ = comment;
+	vala_gir_writer_write_doc (self, _tmp71_);
 	length_param_index = -1;
-	_tmp64_ = has_array_length;
-	if (_tmp64_) {
-		gint _tmp65_ = 0;
-		gboolean _tmp66_;
-		gint _tmp69_;
-		_tmp66_ = is_parameter;
-		if (_tmp66_) {
-			gint _tmp67_;
-			_tmp67_ = *index;
-			_tmp65_ = _tmp67_ + 1;
+	_tmp72_ = has_array_length;
+	if (_tmp72_) {
+		gint _tmp73_ = 0;
+		gboolean _tmp74_;
+		gint _tmp77_;
+		_tmp74_ = is_parameter;
+		if (_tmp74_) {
+			gint _tmp75_;
+			_tmp75_ = *index;
+			_tmp73_ = _tmp75_ + 1;
 		} else {
-			gint _tmp68_;
-			_tmp68_ = *index;
-			_tmp65_ = _tmp68_;
+			gint _tmp76_;
+			_tmp76_ = *index;
+			_tmp73_ = _tmp76_;
 		}
-		_tmp69_ = _tmp65_;
-		length_param_index = _tmp69_;
-	}
-	_tmp70_ = type;
-	_tmp71_ = length_param_index;
-	vala_gir_writer_write_type (self, _tmp70_, _tmp71_);
-	_tmp72_ = self->priv->indent;
-	self->priv->indent = _tmp72_ - 1;
+		_tmp77_ = _tmp73_;
+		length_param_index = _tmp77_;
+	}
+	_tmp78_ = type;
+	_tmp79_ = length_param_index;
+	vala_gir_writer_write_type (self, _tmp78_, _tmp79_);
+	_tmp80_ = self->priv->indent;
+	self->priv->indent = _tmp80_ - 1;
 	vala_gir_writer_write_indent (self);
-	_tmp73_ = self->priv->buffer;
-	_tmp74_ = tag;
-	g_string_append_printf (_tmp73_, "</%s>\n", _tmp74_);
-	_tmp75_ = *index;
-	*index = _tmp75_ + 1;
+	_tmp81_ = self->priv->buffer;
+	_tmp82_ = tag;
+	g_string_append_printf (_tmp81_, "</%s>\n", _tmp82_);
+	_tmp83_ = *index;
+	*index = _tmp83_ + 1;
 	_vala_code_node_unref0 (delegate_type);
 	_g_free0 (tag);
 }
@@ -5973,6 +6542,23 @@ static void vala_gir_writer_class_init (ValaGIRWriterClass * klass) {
 	vala_gir_writer_parent_class = g_type_class_peek_parent (klass);
 	VALA_CODE_VISITOR_CLASS (klass)->finalize = vala_gir_writer_finalize;
 	g_type_class_add_private (klass, sizeof (ValaGIRWriterPrivate));
+	VALA_GIR_WRITER_CLASS (klass)->get_interface_comment = vala_gir_writer_real_get_interface_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_struct_comment = vala_gir_writer_real_get_struct_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_enum_comment = vala_gir_writer_real_get_enum_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_class_comment = vala_gir_writer_real_get_class_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_error_code_comment = vala_gir_writer_real_get_error_code_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_enum_value_comment = vala_gir_writer_real_get_enum_value_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_constant_comment = vala_gir_writer_real_get_constant_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_error_domain_comment = vala_gir_writer_real_get_error_domain_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_field_comment = vala_gir_writer_real_get_field_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_delegate_comment = vala_gir_writer_real_get_delegate_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_method_comment = vala_gir_writer_real_get_method_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_property_comment = vala_gir_writer_real_get_property_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_delegate_return_comment = vala_gir_writer_real_get_delegate_return_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_signal_return_comment = vala_gir_writer_real_get_signal_return_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_method_return_comment = vala_gir_writer_real_get_method_return_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_signal_comment = vala_gir_writer_real_get_signal_comment;
+	VALA_GIR_WRITER_CLASS (klass)->get_parameter_comment = vala_gir_writer_real_get_parameter_comment;
 	VALA_CODE_VISITOR_CLASS (klass)->visit_namespace = vala_gir_writer_real_visit_namespace;
 	VALA_CODE_VISITOR_CLASS (klass)->visit_class = vala_gir_writer_real_visit_class;
 	VALA_CODE_VISITOR_CLASS (klass)->visit_struct = vala_gir_writer_real_visit_struct;
@@ -6040,6 +6626,7 @@ static void vala_gir_writer_finalize (ValaCodeVisitor* obj) {
 	_vala_iterable_unref0 (self->priv->hierarchy);
 	_vala_iterable_unref0 (self->priv->deferred);
 	_vala_code_node_unref0 (self->priv->gobject_type);
+	_vala_code_node_unref0 (self->priv->ginitiallyunowned_type);
 	_vala_iterable_unref0 (self->priv->externals);
 	VALA_CODE_VISITOR_CLASS (vala_gir_writer_parent_class)->finalize (obj);
 }
diff --git a/codegen/valagirwriter.vala b/codegen/valagirwriter.vala
index b15ada8..7a5cacf 100644
--- a/codegen/valagirwriter.vala
+++ b/codegen/valagirwriter.vala
@@ -31,6 +31,74 @@ public class Vala.GIRWriter : CodeVisitor {
 	private string gir_namespace;
 	private string gir_version;
 
+	protected virtual string? get_interface_comment (Interface iface) {
+		return null;
+	}
+
+	protected virtual string? get_struct_comment (Struct st) {
+		return null;
+	}
+
+	protected virtual string? get_enum_comment (Enum en) {
+		return null;
+	}
+
+	protected virtual string? get_class_comment (Class c) {
+		return null;
+	}
+
+	protected virtual string? get_error_code_comment (ErrorCode ecode) {
+		return null;
+	}
+
+	protected virtual string? get_enum_value_comment (EnumValue ev) {
+		return null;
+	}
+
+	protected virtual string? get_constant_comment (Constant c) {
+		return null;
+	}
+
+	protected virtual string? get_error_domain_comment (ErrorDomain edomain) {
+		return null;
+	}
+
+	protected virtual string? get_field_comment (Field f) {
+		return null;
+	}
+
+	protected virtual string? get_delegate_comment (Delegate cb) {
+		return null;
+	}
+
+	protected virtual string? get_method_comment (Method m) {
+		return null;
+	}
+
+	protected virtual string? get_property_comment (Property prop) {
+		return null;
+	}
+
+	protected virtual string? get_delegate_return_comment (Delegate cb) {
+		return null;
+	}
+
+	protected virtual string? get_signal_return_comment (Signal sig) {
+		return null;
+	}
+
+	protected virtual string? get_method_return_comment (Method m) {
+		return null;
+	}
+
+	protected virtual string? get_signal_comment (Signal sig) {
+		return null;
+	}
+
+	protected virtual string? get_parameter_comment (Parameter param) {
+		return null;
+	}
+
 	StringBuilder buffer = new StringBuilder();
 	FileStream stream;
 	Vala.HashSet<Namespace> unannotated_namespaces = new Vala.HashSet<Namespace>();
@@ -41,6 +109,7 @@ public class Vala.GIRWriter : CodeVisitor {
 	int indent;
 
 	private TypeSymbol gobject_type;
+	private TypeSymbol ginitiallyunowned_type;
 
 	private struct GIRNamespace {
 		public GIRNamespace (string ns, string version) {
@@ -57,8 +126,10 @@ public class Vala.GIRWriter : CodeVisitor {
 
 	public void write_includes() {
 		foreach (var i in externals) {
-			write_indent_stream ();
-			stream.printf ("<include name=\"%s\" version=\"%s\"/>\n", i.ns, i.version);
+			if (i.ns != this.gir_namespace) {
+				write_indent_stream ();
+				stream.printf ("<include name=\"%s\" version=\"%s\"/>\n", i.ns, i.version);
+			}
 		}
 	}
 
@@ -79,6 +150,7 @@ public class Vala.GIRWriter : CodeVisitor {
 		var root_symbol = context.root;
 		var glib_ns = root_symbol.scope.lookup ("GLib");
 		gobject_type = (TypeSymbol) glib_ns.scope.lookup ("Object");
+		ginitiallyunowned_type = (TypeSymbol) glib_ns.scope.lookup ("InitiallyUnowned");
 
 		write_package (package);
 
@@ -118,6 +190,19 @@ public class Vala.GIRWriter : CodeVisitor {
 			ns.source_reference.file.gir_namespace = gir_namespace;
 			ns.source_reference.file.gir_version = gir_version;
 		}
+
+		if (our_namespaces.size == 0) {
+			Report.error (null, "No suitable namespace found to export for GIR");
+		}
+	}
+
+	private void write_doc (string? comment) {
+		if (comment != null) {
+			write_indent ();
+			buffer.append ("<doc xml:whitespace=\"preserve\">");
+			buffer.append (comment);
+			buffer.append ("</doc>\n");
+		}
 	}
 
 	private void write_package (string package) {
@@ -229,6 +314,8 @@ public class Vala.GIRWriter : CodeVisitor {
 			buffer.append_printf (">\n");
 			indent++;
 
+			write_doc (get_class_comment (cl));
+
 			// write implemented interfaces
 			foreach (DataType base_type in cl.get_base_types ()) {
 				var object_type = (ObjectType) base_type;
@@ -295,7 +382,7 @@ public class Vala.GIRWriter : CodeVisitor {
 						write_indent ();
 						buffer.append_printf("<field name=\"%s\">\n", m.name);
 						indent++;
-						do_write_signature (m, "callback", true, m.name, CCodeBaseModule.get_ccode_name (m), m.get_async_begin_parameters (), new VoidType (), false);
+						do_write_signature (m, "callback", true, m.name, CCodeBaseModule.get_ccode_name (m), m.get_async_begin_parameters (), new VoidType (), false, false);
 						indent--;
 						write_indent ();
 						buffer.append_printf ("</field>\n");
@@ -303,7 +390,7 @@ public class Vala.GIRWriter : CodeVisitor {
 						write_indent ();
 						buffer.append_printf("<field name=\"%s\">\n", finish_name);
 						indent++;
-						do_write_signature (m, "callback", true, finish_name, CCodeBaseModule.get_ccode_finish_name (m), m.get_async_end_parameters (), m.return_type, m.tree_can_fail);
+						do_write_signature (m, "callback", true, finish_name, CCodeBaseModule.get_ccode_finish_name (m), m.get_async_end_parameters (), m.return_type, m.tree_can_fail, false);
 						indent--;
 						write_indent ();
 						buffer.append_printf ("</field>\n");
@@ -311,7 +398,7 @@ public class Vala.GIRWriter : CodeVisitor {
 						write_indent ();
 						buffer.append_printf("<field name=\"%s\">\n", m.name);
 						indent++;
-						do_write_signature (m, "callback", true, m.name, CCodeBaseModule.get_ccode_name (m), m.get_parameters (), m.return_type, m.tree_can_fail);
+						do_write_signature (m, "callback", true, m.name, CCodeBaseModule.get_ccode_name (m), m.get_parameters (), m.return_type, m.tree_can_fail, false);
 						indent--;
 						write_indent ();
 						buffer.append_printf ("</field>\n");
@@ -324,7 +411,7 @@ public class Vala.GIRWriter : CodeVisitor {
 					write_indent ();
 					buffer.append_printf ("<field name=\"%s\">\n", sig.name);
 					indent++;
-					write_signature (sig.default_handler, "callback", true);
+					write_signature (sig.default_handler, "callback", false, true);
 					indent--;
 					write_indent ();
 					buffer.append_printf ("</field>\n");
@@ -344,6 +431,8 @@ public class Vala.GIRWriter : CodeVisitor {
 			buffer.append_printf (">\n");
 			indent++;
 
+			write_doc (get_class_comment (cl));
+
 			write_annotations (cl);
 
 			hierarchy.insert (0, cl);
@@ -378,6 +467,8 @@ public class Vala.GIRWriter : CodeVisitor {
 		buffer.append_printf (">\n");
 		indent++;
 
+		write_doc (get_struct_comment (st));
+
 		write_annotations (st);
 
 		hierarchy.insert (0, st);
@@ -415,6 +506,8 @@ public class Vala.GIRWriter : CodeVisitor {
 		buffer.append_printf (">\n");
 		indent++;
 
+		write_doc (get_interface_comment (iface));
+
 		// write prerequisites
 		if (iface.get_prerequisites ().size > 0) {
 			foreach (DataType base_type in iface.get_prerequisites ()) {
@@ -461,7 +554,7 @@ public class Vala.GIRWriter : CodeVisitor {
 					write_indent ();
 					buffer.append_printf("<field name=\"%s\">\n", m.name);
 					indent++;
-					do_write_signature (m, "callback", true, m.name, CCodeBaseModule.get_ccode_name (m), m.get_async_begin_parameters (), new VoidType (), false);
+					do_write_signature (m, "callback", true, m.name, CCodeBaseModule.get_ccode_name (m), m.get_async_begin_parameters (), new VoidType (), false, false);
 					indent--;
 					write_indent ();
 					buffer.append_printf ("</field>\n");
@@ -469,7 +562,7 @@ public class Vala.GIRWriter : CodeVisitor {
 					write_indent ();
 					buffer.append_printf("<field name=\"%s\">\n", finish_name);
 					indent++;
-					do_write_signature (m, "callback", true, finish_name, CCodeBaseModule.get_ccode_finish_name (m), m.get_async_end_parameters (), m.return_type, m.tree_can_fail);
+					do_write_signature (m, "callback", true, finish_name, CCodeBaseModule.get_ccode_finish_name (m), m.get_async_end_parameters (), m.return_type, m.tree_can_fail, false);
 					indent--;
 					write_indent ();
 					buffer.append_printf ("</field>\n");
@@ -477,7 +570,7 @@ public class Vala.GIRWriter : CodeVisitor {
 					write_indent ();
 					buffer.append_printf("<field name=\"%s\">\n", m.name);
 					indent++;
-					do_write_signature (m, "callback", true, m.name, CCodeBaseModule.get_ccode_name (m), m.get_parameters (), m.return_type, m.tree_can_fail);
+					do_write_signature (m, "callback", true, m.name, CCodeBaseModule.get_ccode_name (m), m.get_parameters (), m.return_type, m.tree_can_fail, false);
 					indent--;
 					write_indent ();
 					buffer.append_printf ("</field>\n");
@@ -543,6 +636,8 @@ public class Vala.GIRWriter : CodeVisitor {
 		buffer.append_printf (">\n");
 		indent++;
 
+		write_doc (get_enum_comment (en));
+
 		write_annotations (en);
 
 		enum_value = 0;
@@ -574,7 +669,20 @@ public class Vala.GIRWriter : CodeVisitor {
 			}
 		}
 		write_symbol_attributes (ev);
-		buffer.append_printf ("/>\n");
+
+		string? comment = get_enum_value_comment (ev);
+		if (comment == null) {
+			buffer.append_printf ("/>\n");
+		} else {
+			buffer.append_printf (">\n");
+			indent++;
+
+			write_doc (comment);
+
+			indent--;
+			write_indent ();
+			buffer.append_printf ("</member>\n");
+		}
 	}
 
 	public override void visit_error_domain (ErrorDomain edomain) {
@@ -603,6 +711,8 @@ public class Vala.GIRWriter : CodeVisitor {
 		buffer.append_printf (">\n");
 		indent++;
 
+		write_doc (get_error_domain_comment (edomain));
+
 		enum_value = 0;
 		hierarchy.insert (0, edomain);
 		edomain.accept_children (this);
@@ -625,7 +735,20 @@ public class Vala.GIRWriter : CodeVisitor {
 			buffer.append_printf (" value=\"%d\"", enum_value++);
 		}
 		write_symbol_attributes (ecode);
-		buffer.append_printf ("/>\n");
+
+		string? comment = get_error_code_comment (ecode);
+		if (comment == null) {
+			buffer.append_printf ("/>\n");
+		} else {
+			buffer.append_printf (">\n");
+			indent++;
+
+			write_doc (comment);
+
+			indent--;
+			write_indent ();
+			buffer.append_printf ("</member>\n");
+		}
 	}
 
 	public override void visit_constant (Constant c) {
@@ -648,6 +771,8 @@ public class Vala.GIRWriter : CodeVisitor {
 		buffer.append_printf (">\n");
 		indent++;
 
+		write_doc (get_constant_comment (c));
+
 		write_type (initializer.value_type);
 
 		indent--;
@@ -673,6 +798,8 @@ public class Vala.GIRWriter : CodeVisitor {
 		buffer.append_printf (">\n");
 		indent++;
 
+		write_doc (get_field_comment (f));
+
 		write_annotations (f);
 
 		write_type (f.variable_type);
@@ -685,18 +812,18 @@ public class Vala.GIRWriter : CodeVisitor {
 	private void write_implicit_params (DataType type, ref int index, bool has_array_length, string name, ParameterDirection direction) {
 		if (type is ArrayType && has_array_length) {
 			var int_type = new IntegerType (CodeContext.get ().root.scope.lookup ("int") as Struct);
-			write_param_or_return (int_type, true, ref index, has_array_length, "%s_length1".printf (name), direction);
+			write_param_or_return (int_type, true, ref index, has_array_length, "%s_length1".printf (name), null, direction);
 		} else if (type is DelegateType) {
 			var data_type = new PointerType (new VoidType ());
-			write_param_or_return (data_type, true, ref index, false, "%s_target".printf (name), direction);
+			write_param_or_return (data_type, true, ref index, false, "%s_target".printf (name), null, direction);
 			if (type.value_owned) {
 				var notify_type = new DelegateType (CodeContext.get ().root.scope.lookup ("GLib").scope.lookup ("DestroyNotify") as Delegate);
-				write_param_or_return (notify_type, true, ref index, false, "%s_target_destroy_notify".printf (name), direction);
+				write_param_or_return (notify_type, true, ref index, false, "%s_target_destroy_notify".printf (name), null, direction);
 			}
 		}
 	}
 
-	private void write_params_and_return (List<Parameter> params, DataType? return_type, bool return_array_length, bool constructor = false, DataType? instance_type = null, bool user_data = false) {
+	private void write_params_and_return (List<Parameter> params, DataType? return_type, bool return_array_length, string? return_comment = null, bool constructor = false, DataType? instance_type = null, bool user_data = false) {
 		int last_index = 0;
 		bool ret_is_struct = return_type != null && return_type.is_real_non_null_struct_type ();
 		if (params.size != 0 || instance_type != null || (return_type is ArrayType && return_array_length) || (return_type is DelegateType) || ret_is_struct) {
@@ -710,14 +837,14 @@ public class Vala.GIRWriter : CodeVisitor {
 			}
 
 			foreach (Parameter param in params) {
-				write_param_or_return (param.variable_type, true, ref index, CCodeBaseModule.get_ccode_array_length (param), param.name, param.direction);
+				write_param_or_return (param.variable_type, true, ref index, CCodeBaseModule.get_ccode_array_length (param), param.name, get_parameter_comment (param), param.direction);
 
 				write_implicit_params (param.variable_type, ref index, CCodeBaseModule.get_ccode_array_length (param), param.name, param.direction);
 			}
 
 			if (ret_is_struct) {
 				// struct returns are converted to parameters
-				write_param_or_return (return_type, true, ref index, false, "result", ParameterDirection.OUT, constructor, true);
+				write_param_or_return (return_type, true, ref index, false, "result", return_comment, ParameterDirection.OUT, constructor, true);
 			} else {
 				write_implicit_params (return_type, ref index, return_array_length, "result", ParameterDirection.OUT);
 			}
@@ -741,9 +868,9 @@ public class Vala.GIRWriter : CodeVisitor {
 		}
 
 		if (return_type != null && !ret_is_struct) {
-			write_param_or_return (return_type, false, ref last_index, return_array_length, null, ParameterDirection.IN, constructor);
+			write_param_or_return (return_type, false, ref last_index, return_array_length, null, return_comment, ParameterDirection.IN, constructor);
 		} else if (ret_is_struct) {
-			write_param_or_return (new VoidType (), false, ref last_index, false, null, ParameterDirection.IN);
+			write_param_or_return (new VoidType (), false, ref last_index, false, null, return_comment, ParameterDirection.IN);
 		}
 	}
 
@@ -766,9 +893,11 @@ public class Vala.GIRWriter : CodeVisitor {
 		buffer.append_printf (">\n");
 		indent++;
 
+		write_doc (get_delegate_comment (cb));
+
 		write_annotations (cb);
 
-		write_params_and_return (cb.get_parameters (), cb.return_type, CCodeBaseModule.get_ccode_array_length (cb), false, null, cb.has_target);
+		write_params_and_return (cb.get_parameters (), cb.return_type, CCodeBaseModule.get_ccode_array_length (cb), get_delegate_return_comment (cb), false, null, cb.has_target);
 
 		indent--;
 		write_indent ();
@@ -801,10 +930,10 @@ public class Vala.GIRWriter : CodeVisitor {
 			tag_name = "function";
 		}
 
-		write_signature (m, tag_name);
+		write_signature (m, tag_name, true);
 
 		if (m.is_abstract || m.is_virtual) {
-			write_signature (m, "virtual-method", false);
+			write_signature (m, "virtual-method", true, false);
 		}
 	}
 
@@ -829,7 +958,7 @@ public class Vala.GIRWriter : CodeVisitor {
 		return true;
 	}
 
-	private void write_signature (Method m, string tag_name, bool instance = false) {
+	private void write_signature (Method m, string tag_name, bool write_doc, bool instance = false) {
 		var parent = this.hierarchy.get (0);
 		string name;
 		if (m.parent_symbol != parent) {
@@ -849,14 +978,14 @@ public class Vala.GIRWriter : CodeVisitor {
 				finish_name = finish_name.substring (0, finish_name.length - "_async".length);
 			}
 			finish_name += "_finish";
-			do_write_signature (m, tag_name, instance, name, CCodeBaseModule.get_ccode_name (m), m.get_async_begin_parameters (), new VoidType (), false);
-			do_write_signature (m, tag_name, instance, finish_name, CCodeBaseModule.get_ccode_finish_name (m), m.get_async_end_parameters (), m.return_type, m.tree_can_fail);
+			do_write_signature (m, tag_name, instance, name, CCodeBaseModule.get_ccode_name (m), m.get_async_begin_parameters (), new VoidType (), false, true);
+			do_write_signature (m, tag_name, instance, finish_name, CCodeBaseModule.get_ccode_finish_name (m), m.get_async_end_parameters (), m.return_type, m.tree_can_fail, false);
 		} else {
-			do_write_signature (m, tag_name, instance, name, CCodeBaseModule.get_ccode_name (m), m.get_parameters (), m.return_type, m.tree_can_fail);
+			do_write_signature (m, tag_name, instance, name, CCodeBaseModule.get_ccode_name (m), m.get_parameters (), m.return_type, m.tree_can_fail, true);
 		}
 	}
 
-	private void do_write_signature (Method m, string tag_name, bool instance, string name, string cname, List<Vala.Parameter> params, DataType return_type, bool can_fail) {
+	private void do_write_signature (Method m, string tag_name, bool instance, string name, string cname, List<Vala.Parameter> params, DataType return_type, bool can_fail, bool write_comment) {
 		write_indent ();
 		buffer.append_printf ("<%s name=\"%s\"", tag_name, name);
 		if (tag_name == "virtual-method") {
@@ -874,6 +1003,12 @@ public class Vala.GIRWriter : CodeVisitor {
 		buffer.append_printf (">\n");
 		indent++;
 
+		string? return_comment = null;
+		if (write_comment) {
+			return_comment = get_method_return_comment (m);
+			write_doc (get_method_comment (m));
+		}
+
 		write_annotations (m);
 
 		DataType instance_type = null;
@@ -881,7 +1016,7 @@ public class Vala.GIRWriter : CodeVisitor {
 			instance_type = CCodeBaseModule.get_data_type_for_symbol ((TypeSymbol) m.parent_symbol);
 		}
 
-		write_params_and_return (params, return_type, CCodeBaseModule.get_ccode_array_length (m), false, instance_type);
+		write_params_and_return (params, return_type, CCodeBaseModule.get_ccode_array_length (m), return_comment, false, instance_type);
 
 		indent--;
 		write_indent ();
@@ -921,11 +1056,13 @@ public class Vala.GIRWriter : CodeVisitor {
 		buffer.append_printf (">\n");
 		indent++;
 
+		write_doc (get_method_comment (m));
+
 		write_annotations (m);
 
 
 		var datatype = CCodeBaseModule.get_data_type_for_symbol ((TypeSymbol) m.parent_symbol);
-		write_params_and_return (m.get_parameters (), datatype, false, true);
+		write_params_and_return (m.get_parameters (), datatype, false, get_method_return_comment (m), true);
 
 		indent--;
 		write_indent ();
@@ -956,6 +1093,8 @@ public class Vala.GIRWriter : CodeVisitor {
 		buffer.append_printf (">\n");
 		indent++;
 
+		write_doc (get_property_comment (prop));
+
 		write_annotations (prop);
 
 		write_type (prop.property_type);
@@ -976,9 +1115,11 @@ public class Vala.GIRWriter : CodeVisitor {
 		buffer.append_printf (">\n");
 		indent++;
 
+		write_doc (get_signal_comment (sig));
+
 		write_annotations (sig);
 
-		write_params_and_return (sig.get_parameters (), sig.return_type, false);
+		write_params_and_return (sig.get_parameters (), sig.return_type, false, get_signal_return_comment (sig));
 
 		indent--;
 		write_indent ();
@@ -1002,7 +1143,7 @@ public class Vala.GIRWriter : CodeVisitor {
 	}
 
 
-	private void write_param_or_return (DataType type, bool is_parameter, ref int index, bool has_array_length, string? name = null, ParameterDirection direction = ParameterDirection.IN, bool constructor = false, bool caller_allocates = false) {
+	private void write_param_or_return (DataType type, bool is_parameter, ref int index, bool has_array_length, string? name = null, string? comment = null, ParameterDirection direction = ParameterDirection.IN, bool constructor = false, bool caller_allocates = false) {
 		write_indent ();
 		string tag = is_parameter ? "parameter" : "return-value";
 		buffer.append_printf ("<%s", tag);
@@ -1017,7 +1158,7 @@ public class Vala.GIRWriter : CodeVisitor {
 
 		DelegateType delegate_type = type as DelegateType;
 
-		if ((type.value_owned && delegate_type == null) || constructor) {
+		if ((type.value_owned && delegate_type == null) || (constructor && !type.data_type.is_subtype_of (ginitiallyunowned_type))) {
 			buffer.append_printf (" transfer-ownership=\"full\"");
 		} else {
 			buffer.append_printf (" transfer-ownership=\"none\"");
@@ -1045,6 +1186,8 @@ public class Vala.GIRWriter : CodeVisitor {
 		buffer.append_printf (">\n");
 		indent++;
 
+		write_doc (comment);
+
 		int length_param_index = -1;
 		if (has_array_length) {
 			length_param_index = is_parameter ? index + 1 : index;
diff --git a/codegen/valagobjectmodule.c b/codegen/valagobjectmodule.c
index c323047..fb70266 100644
--- a/codegen/valagobjectmodule.c
+++ b/codegen/valagobjectmodule.c
@@ -468,7 +468,6 @@ ValaCCodeFunction* vala_ccode_base_module_get_ccode (ValaCCodeBaseModule* self);
 gchar* vala_ccode_base_module_get_ccode_lower_case_name (ValaCodeNode* node, const gchar* infix);
 gboolean vala_ccode_base_module_is_gobject_property (ValaCCodeBaseModule* self, ValaProperty* prop);
 gchar* vala_ccode_base_module_get_ccode_upper_case_name (ValaSymbol* sym, const gchar* infix);
-ValaCCodeConstant* vala_ccode_base_module_get_property_canonical_cconstant (ValaCCodeBaseModule* self, ValaProperty* prop);
 ValaCCodeFunctionCall* vala_ccode_base_module_get_param_spec (ValaCCodeBaseModule* self, ValaProperty* prop);
 void vala_ccode_base_module_push_function (ValaCCodeBaseModule* self, ValaCCodeFunction* func);
 ValaCCodeFunctionCall* vala_ccode_base_module_generate_instance_cast (ValaCCodeBaseModule* self, ValaCCodeExpression* expr, ValaTypeSymbol* type);
@@ -496,6 +495,7 @@ gboolean vala_ccode_base_module_get_current_method_inner_error (ValaCCodeBaseMod
 void vala_ccode_base_module_pop_context (ValaCCodeBaseModule* self);
 static gchar* vala_gobject_module_real_get_dynamic_property_getter_cname (ValaCCodeBaseModule* base, ValaDynamicProperty* prop);
 gchar* vala_ccode_base_module_get_dynamic_property_getter_cname (ValaCCodeBaseModule* self, ValaDynamicProperty* node);
+ValaCCodeConstant* vala_ccode_base_module_get_property_canonical_cconstant (ValaCCodeBaseModule* self, ValaProperty* prop);
 static gchar* vala_gobject_module_real_get_dynamic_property_setter_cname (ValaCCodeBaseModule* base, ValaDynamicProperty* prop);
 gchar* vala_ccode_base_module_get_dynamic_property_setter_cname (ValaCCodeBaseModule* self, ValaDynamicProperty* node);
 static gchar* vala_gobject_module_real_get_dynamic_signal_cname (ValaCCodeBaseModule* base, ValaDynamicSignal* node);
@@ -1389,11 +1389,26 @@ static void vala_gobject_module_real_generate_class_init (ValaGTypeModule* base,
 			ValaProperty* _tmp292_;
 			ValaComment* _tmp293_;
 			ValaComment* _tmp294_;
-			gboolean _tmp304_ = FALSE;
-			ValaProperty* _tmp305_;
-			gboolean _tmp306_;
-			gboolean _tmp307_;
-			gboolean _tmp311_;
+			ValaCCodeIdentifier* _tmp304_;
+			ValaCCodeIdentifier* _tmp305_;
+			ValaCCodeFunctionCall* _tmp306_;
+			ValaCCodeFunctionCall* _tmp307_;
+			ValaCCodeFunctionCall* cinst;
+			ValaCCodeFunctionCall* _tmp308_;
+			ValaCCodeFunctionCall* _tmp309_;
+			ValaCCodeFunctionCall* _tmp310_;
+			ValaProperty* _tmp311_;
+			gchar* _tmp312_ = NULL;
+			gchar* _tmp313_;
+			ValaCCodeConstant* _tmp314_;
+			ValaCCodeConstant* _tmp315_;
+			ValaCCodeFunctionCall* _tmp316_;
+			ValaProperty* _tmp317_;
+			ValaCCodeFunctionCall* _tmp318_ = NULL;
+			ValaCCodeFunctionCall* _tmp319_;
+			ValaCCodeFunction* _tmp320_;
+			ValaCCodeFunction* _tmp321_;
+			ValaCCodeFunctionCall* _tmp322_;
 			_tmp284_ = _prop_index;
 			_prop_index = _tmp284_ + 1;
 			_tmp285_ = _prop_index;
@@ -1436,122 +1451,35 @@ static void vala_gobject_module_real_generate_class_init (ValaGTypeModule* base,
 				vala_ccode_function_add_statement (_tmp296_, (ValaCCodeNode*) _tmp303_);
 				_vala_ccode_node_unref0 (_tmp303_);
 			}
-			_tmp305_ = prop;
-			_tmp306_ = vala_property_get_overrides (_tmp305_);
+			_tmp304_ = vala_ccode_identifier_new ("g_object_class_install_property");
+			_tmp305_ = _tmp304_;
+			_tmp306_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp305_);
 			_tmp307_ = _tmp306_;
-			if (_tmp307_) {
-				_tmp304_ = TRUE;
-			} else {
-				ValaProperty* _tmp308_;
-				ValaProperty* _tmp309_;
-				ValaProperty* _tmp310_;
-				_tmp308_ = prop;
-				_tmp309_ = vala_property_get_base_interface_property (_tmp308_);
-				_tmp310_ = _tmp309_;
-				_tmp304_ = _tmp310_ != NULL;
-			}
-			_tmp311_ = _tmp304_;
-			if (_tmp311_) {
-				ValaCCodeIdentifier* _tmp312_;
-				ValaCCodeIdentifier* _tmp313_;
-				ValaCCodeFunctionCall* _tmp314_;
-				ValaCCodeFunctionCall* _tmp315_;
-				ValaCCodeFunctionCall* cinst;
-				ValaCCodeFunctionCall* _tmp316_;
-				ValaCCodeFunctionCall* _tmp317_;
-				ValaCCodeFunctionCall* _tmp318_;
-				ValaProperty* _tmp319_;
-				gchar* _tmp320_ = NULL;
-				gchar* _tmp321_;
-				ValaCCodeConstant* _tmp322_;
-				ValaCCodeConstant* _tmp323_;
-				ValaCCodeFunctionCall* _tmp324_;
-				ValaProperty* _tmp325_;
-				ValaCCodeConstant* _tmp326_ = NULL;
-				ValaCCodeConstant* _tmp327_;
-				ValaCCodeFunction* _tmp328_;
-				ValaCCodeFunction* _tmp329_;
-				ValaCCodeFunctionCall* _tmp330_;
-				_tmp312_ = vala_ccode_identifier_new ("g_object_class_override_property");
-				_tmp313_ = _tmp312_;
-				_tmp314_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp313_);
-				_tmp315_ = _tmp314_;
-				_vala_ccode_node_unref0 (_tmp313_);
-				cinst = _tmp315_;
-				_tmp316_ = cinst;
-				_tmp317_ = ccall;
-				vala_ccode_function_call_add_argument (_tmp316_, (ValaCCodeExpression*) _tmp317_);
-				_tmp318_ = cinst;
-				_tmp319_ = prop;
-				_tmp320_ = vala_ccode_base_module_get_ccode_upper_case_name ((ValaSymbol*) _tmp319_, NULL);
-				_tmp321_ = _tmp320_;
-				_tmp322_ = vala_ccode_constant_new (_tmp321_);
-				_tmp323_ = _tmp322_;
-				vala_ccode_function_call_add_argument (_tmp318_, (ValaCCodeExpression*) _tmp323_);
-				_vala_ccode_node_unref0 (_tmp323_);
-				_g_free0 (_tmp321_);
-				_tmp324_ = cinst;
-				_tmp325_ = prop;
-				_tmp326_ = vala_ccode_base_module_get_property_canonical_cconstant ((ValaCCodeBaseModule*) self, _tmp325_);
-				_tmp327_ = _tmp326_;
-				vala_ccode_function_call_add_argument (_tmp324_, (ValaCCodeExpression*) _tmp327_);
-				_vala_ccode_node_unref0 (_tmp327_);
-				_tmp328_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-				_tmp329_ = _tmp328_;
-				_tmp330_ = cinst;
-				vala_ccode_function_add_expression (_tmp329_, (ValaCCodeExpression*) _tmp330_);
-				_vala_ccode_node_unref0 (cinst);
-			} else {
-				ValaCCodeIdentifier* _tmp331_;
-				ValaCCodeIdentifier* _tmp332_;
-				ValaCCodeFunctionCall* _tmp333_;
-				ValaCCodeFunctionCall* _tmp334_;
-				ValaCCodeFunctionCall* cinst;
-				ValaCCodeFunctionCall* _tmp335_;
-				ValaCCodeFunctionCall* _tmp336_;
-				ValaCCodeFunctionCall* _tmp337_;
-				ValaProperty* _tmp338_;
-				gchar* _tmp339_ = NULL;
-				gchar* _tmp340_;
-				ValaCCodeConstant* _tmp341_;
-				ValaCCodeConstant* _tmp342_;
-				ValaCCodeFunctionCall* _tmp343_;
-				ValaProperty* _tmp344_;
-				ValaCCodeFunctionCall* _tmp345_ = NULL;
-				ValaCCodeFunctionCall* _tmp346_;
-				ValaCCodeFunction* _tmp347_;
-				ValaCCodeFunction* _tmp348_;
-				ValaCCodeFunctionCall* _tmp349_;
-				_tmp331_ = vala_ccode_identifier_new ("g_object_class_install_property");
-				_tmp332_ = _tmp331_;
-				_tmp333_ = vala_ccode_function_call_new ((ValaCCodeExpression*) _tmp332_);
-				_tmp334_ = _tmp333_;
-				_vala_ccode_node_unref0 (_tmp332_);
-				cinst = _tmp334_;
-				_tmp335_ = cinst;
-				_tmp336_ = ccall;
-				vala_ccode_function_call_add_argument (_tmp335_, (ValaCCodeExpression*) _tmp336_);
-				_tmp337_ = cinst;
-				_tmp338_ = prop;
-				_tmp339_ = vala_ccode_base_module_get_ccode_upper_case_name ((ValaSymbol*) _tmp338_, NULL);
-				_tmp340_ = _tmp339_;
-				_tmp341_ = vala_ccode_constant_new (_tmp340_);
-				_tmp342_ = _tmp341_;
-				vala_ccode_function_call_add_argument (_tmp337_, (ValaCCodeExpression*) _tmp342_);
-				_vala_ccode_node_unref0 (_tmp342_);
-				_g_free0 (_tmp340_);
-				_tmp343_ = cinst;
-				_tmp344_ = prop;
-				_tmp345_ = vala_ccode_base_module_get_param_spec ((ValaCCodeBaseModule*) self, _tmp344_);
-				_tmp346_ = _tmp345_;
-				vala_ccode_function_call_add_argument (_tmp343_, (ValaCCodeExpression*) _tmp346_);
-				_vala_ccode_node_unref0 (_tmp346_);
-				_tmp347_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
-				_tmp348_ = _tmp347_;
-				_tmp349_ = cinst;
-				vala_ccode_function_add_expression (_tmp348_, (ValaCCodeExpression*) _tmp349_);
-				_vala_ccode_node_unref0 (cinst);
-			}
+			_vala_ccode_node_unref0 (_tmp305_);
+			cinst = _tmp307_;
+			_tmp308_ = cinst;
+			_tmp309_ = ccall;
+			vala_ccode_function_call_add_argument (_tmp308_, (ValaCCodeExpression*) _tmp309_);
+			_tmp310_ = cinst;
+			_tmp311_ = prop;
+			_tmp312_ = vala_ccode_base_module_get_ccode_upper_case_name ((ValaSymbol*) _tmp311_, NULL);
+			_tmp313_ = _tmp312_;
+			_tmp314_ = vala_ccode_constant_new (_tmp313_);
+			_tmp315_ = _tmp314_;
+			vala_ccode_function_call_add_argument (_tmp310_, (ValaCCodeExpression*) _tmp315_);
+			_vala_ccode_node_unref0 (_tmp315_);
+			_g_free0 (_tmp313_);
+			_tmp316_ = cinst;
+			_tmp317_ = prop;
+			_tmp318_ = vala_ccode_base_module_get_param_spec ((ValaCCodeBaseModule*) self, _tmp317_);
+			_tmp319_ = _tmp318_;
+			vala_ccode_function_call_add_argument (_tmp316_, (ValaCCodeExpression*) _tmp319_);
+			_vala_ccode_node_unref0 (_tmp319_);
+			_tmp320_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
+			_tmp321_ = _tmp320_;
+			_tmp322_ = cinst;
+			vala_ccode_function_add_expression (_tmp321_, (ValaCCodeExpression*) _tmp322_);
+			_vala_ccode_node_unref0 (cinst);
 			_vala_code_node_unref0 (prop);
 		}
 		_vala_iterable_unref0 (_prop_list);
diff --git a/codegen/valagobjectmodule.vala b/codegen/valagobjectmodule.vala
index 6c70119..baa4256 100644
--- a/codegen/valagobjectmodule.vala
+++ b/codegen/valagobjectmodule.vala
@@ -139,21 +139,12 @@ public class Vala.GObjectModule : GTypeModule {
 				ccode.add_statement (new CCodeComment (prop.comment.content));
 			}
 
-			if (prop.overrides || prop.base_interface_property != null) {
-				var cinst = new CCodeFunctionCall (new CCodeIdentifier ("g_object_class_override_property"));
-				cinst.add_argument (ccall);
-				cinst.add_argument (new CCodeConstant (get_ccode_upper_case_name (prop)));
-				cinst.add_argument (get_property_canonical_cconstant (prop));
-			
-				ccode.add_expression (cinst);
-			} else {
-				var cinst = new CCodeFunctionCall (new CCodeIdentifier ("g_object_class_install_property"));
-				cinst.add_argument (ccall);
-				cinst.add_argument (new CCodeConstant (get_ccode_upper_case_name (prop)));
-				cinst.add_argument (get_param_spec (prop));
-			
-				ccode.add_expression (cinst);
-			}
+			var cinst = new CCodeFunctionCall (new CCodeIdentifier ("g_object_class_install_property"));
+			cinst.add_argument (ccall);
+			cinst.add_argument (new CCodeConstant (get_ccode_upper_case_name (prop)));
+			cinst.add_argument (get_param_spec (prop));
+
+			ccode.add_expression (cinst);
 		}
 	}
 
diff --git a/codegen/valagtypemodule.c b/codegen/valagtypemodule.c
index b89d273..a05c038 100644
--- a/codegen/valagtypemodule.c
+++ b/codegen/valagtypemodule.c
@@ -550,6 +550,7 @@ gchar* vala_ccode_base_module_get_ccode_declarator_suffix (ValaDataType* type);
 gboolean vala_ccode_base_module_get_ccode_array_length (ValaCodeNode* node);
 gchar* vala_ccode_base_module_get_ccode_array_length_name (ValaCodeNode* node);
 gchar* vala_ccode_base_module_get_array_size_cname (ValaCCodeBaseModule* self, const gchar* array_cname);
+gchar* vala_ccode_base_module_get_ccode_delegate_target_name (ValaVariable* variable);
 gchar* vala_ccode_base_module_get_delegate_target_destroy_notify_cname (ValaCCodeBaseModule* self, const gchar* delegate_cname);
 static void vala_gtype_module_real_generate_virtual_method_declaration (ValaGTypeModule* self, ValaMethod* m, ValaCCodeFile* decl_space, ValaCCodeStruct* type_struct);
 gchar* vala_ccode_base_module_get_ccode_vfunc_name (ValaMethod* m);
@@ -1639,12 +1640,12 @@ static void vala_gtype_module_real_generate_class_struct_declaration (ValaCCodeB
 	gboolean _tmp80_;
 	gboolean _tmp86_;
 	gboolean _tmp88_;
-	gboolean _tmp477_ = FALSE;
-	ValaClass* _tmp478_;
-	gboolean _tmp479_;
-	gboolean _tmp480_;
-	gboolean _tmp484_;
-	gboolean _tmp487_;
+	gboolean _tmp475_ = FALSE;
+	ValaClass* _tmp476_;
+	gboolean _tmp477_;
+	gboolean _tmp478_;
+	gboolean _tmp482_;
+	gboolean _tmp485_;
 	self = (ValaGTypeModule*) base;
 	g_return_if_fail (cl != NULL);
 	g_return_if_fail (decl_space != NULL);
@@ -2878,64 +2879,60 @@ static void vala_gtype_module_real_generate_class_struct_declaration (ValaCCodeB
 							if (_tmp453_) {
 								ValaCCodeStruct* _tmp454_;
 								ValaField* _tmp455_;
-								const gchar* _tmp456_;
-								const gchar* _tmp457_;
-								gchar* _tmp458_ = NULL;
-								gchar* _tmp459_;
-								ValaDelegateType* _tmp460_;
-								gboolean _tmp461_;
-								gboolean _tmp462_;
+								gchar* _tmp456_ = NULL;
+								gchar* _tmp457_;
+								ValaDelegateType* _tmp458_;
+								gboolean _tmp459_;
+								gboolean _tmp460_;
 								_tmp454_ = instance_struct;
 								_tmp455_ = f;
-								_tmp456_ = vala_symbol_get_name ((ValaSymbol*) _tmp455_);
+								_tmp456_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp455_);
 								_tmp457_ = _tmp456_;
-								_tmp458_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp457_);
-								_tmp459_ = _tmp458_;
-								vala_ccode_struct_add_field (_tmp454_, "gpointer", _tmp459_, NULL);
-								_g_free0 (_tmp459_);
-								_tmp460_ = delegate_type;
-								_tmp461_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp460_);
-								_tmp462_ = _tmp461_;
-								if (_tmp462_) {
-									ValaCCodeStruct* _tmp463_;
-									ValaField* _tmp464_;
-									const gchar* _tmp465_;
-									const gchar* _tmp466_;
-									gchar* _tmp467_ = NULL;
-									gchar* _tmp468_;
-									_tmp463_ = instance_struct;
-									_tmp464_ = f;
-									_tmp465_ = vala_symbol_get_name ((ValaSymbol*) _tmp464_);
+								vala_ccode_struct_add_field (_tmp454_, "gpointer", _tmp457_, NULL);
+								_g_free0 (_tmp457_);
+								_tmp458_ = delegate_type;
+								_tmp459_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp458_);
+								_tmp460_ = _tmp459_;
+								if (_tmp460_) {
+									ValaCCodeStruct* _tmp461_;
+									ValaField* _tmp462_;
+									const gchar* _tmp463_;
+									const gchar* _tmp464_;
+									gchar* _tmp465_ = NULL;
+									gchar* _tmp466_;
+									_tmp461_ = instance_struct;
+									_tmp462_ = f;
+									_tmp463_ = vala_symbol_get_name ((ValaSymbol*) _tmp462_);
+									_tmp464_ = _tmp463_;
+									_tmp465_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp464_);
 									_tmp466_ = _tmp465_;
-									_tmp467_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp466_);
-									_tmp468_ = _tmp467_;
-									vala_ccode_struct_add_field (_tmp463_, "GDestroyNotify", _tmp468_, NULL);
-									_g_free0 (_tmp468_);
+									vala_ccode_struct_add_field (_tmp461_, "GDestroyNotify", _tmp466_, NULL);
+									_g_free0 (_tmp466_);
 								}
 							}
 							_vala_code_node_unref0 (delegate_type);
 						}
 					}
 				} else {
-					ValaField* _tmp469_;
-					ValaMemberBinding _tmp470_;
-					ValaMemberBinding _tmp471_;
-					_tmp469_ = f;
-					_tmp470_ = vala_field_get_binding (_tmp469_);
-					_tmp471_ = _tmp470_;
-					if (_tmp471_ == VALA_MEMBER_BINDING_CLASS) {
-						ValaCCodeStruct* _tmp472_;
-						const gchar* _tmp473_;
-						ValaField* _tmp474_;
-						gchar* _tmp475_ = NULL;
-						gchar* _tmp476_;
-						_tmp472_ = type_struct;
-						_tmp473_ = field_ctype;
-						_tmp474_ = f;
-						_tmp475_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp474_);
-						_tmp476_ = _tmp475_;
-						vala_ccode_struct_add_field (_tmp472_, _tmp473_, _tmp476_, NULL);
-						_g_free0 (_tmp476_);
+					ValaField* _tmp467_;
+					ValaMemberBinding _tmp468_;
+					ValaMemberBinding _tmp469_;
+					_tmp467_ = f;
+					_tmp468_ = vala_field_get_binding (_tmp467_);
+					_tmp469_ = _tmp468_;
+					if (_tmp469_ == VALA_MEMBER_BINDING_CLASS) {
+						ValaCCodeStruct* _tmp470_;
+						const gchar* _tmp471_;
+						ValaField* _tmp472_;
+						gchar* _tmp473_ = NULL;
+						gchar* _tmp474_;
+						_tmp470_ = type_struct;
+						_tmp471_ = field_ctype;
+						_tmp472_ = f;
+						_tmp473_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp472_);
+						_tmp474_ = _tmp473_;
+						vala_ccode_struct_add_field (_tmp470_, _tmp471_, _tmp474_, NULL);
+						_g_free0 (_tmp474_);
 					}
 				}
 			}
@@ -2944,35 +2941,35 @@ static void vala_gtype_module_real_generate_class_struct_declaration (ValaCCodeB
 		}
 		_vala_iterable_unref0 (_f_list);
 	}
-	_tmp478_ = cl;
-	_tmp479_ = vala_class_get_is_compact (_tmp478_);
-	_tmp480_ = _tmp479_;
-	if (!_tmp480_) {
-		_tmp477_ = TRUE;
+	_tmp476_ = cl;
+	_tmp477_ = vala_class_get_is_compact (_tmp476_);
+	_tmp478_ = _tmp477_;
+	if (!_tmp478_) {
+		_tmp475_ = TRUE;
 	} else {
+		ValaClass* _tmp479_;
+		ValaClass* _tmp480_;
 		ValaClass* _tmp481_;
-		ValaClass* _tmp482_;
-		ValaClass* _tmp483_;
-		_tmp481_ = cl;
-		_tmp482_ = vala_class_get_base_class (_tmp481_);
-		_tmp483_ = _tmp482_;
-		_tmp477_ = _tmp483_ == NULL;
+		_tmp479_ = cl;
+		_tmp480_ = vala_class_get_base_class (_tmp479_);
+		_tmp481_ = _tmp480_;
+		_tmp475_ = _tmp481_ == NULL;
 	}
-	_tmp484_ = _tmp477_;
-	if (_tmp484_) {
-		ValaCCodeFile* _tmp485_;
-		ValaCCodeStruct* _tmp486_;
-		_tmp485_ = decl_space;
-		_tmp486_ = instance_struct;
-		vala_ccode_file_add_type_definition (_tmp485_, (ValaCCodeNode*) _tmp486_);
+	_tmp482_ = _tmp475_;
+	if (_tmp482_) {
+		ValaCCodeFile* _tmp483_;
+		ValaCCodeStruct* _tmp484_;
+		_tmp483_ = decl_space;
+		_tmp484_ = instance_struct;
+		vala_ccode_file_add_type_definition (_tmp483_, (ValaCCodeNode*) _tmp484_);
 	}
-	_tmp487_ = is_gtypeinstance;
-	if (_tmp487_) {
-		ValaCCodeFile* _tmp488_;
-		ValaCCodeStruct* _tmp489_;
-		_tmp488_ = decl_space;
-		_tmp489_ = type_struct;
-		vala_ccode_file_add_type_definition (_tmp488_, (ValaCCodeNode*) _tmp489_);
+	_tmp485_ = is_gtypeinstance;
+	if (_tmp485_) {
+		ValaCCodeFile* _tmp486_;
+		ValaCCodeStruct* _tmp487_;
+		_tmp486_ = decl_space;
+		_tmp487_ = type_struct;
+		vala_ccode_file_add_type_definition (_tmp486_, (ValaCCodeNode*) _tmp487_);
 	}
 	_vala_ccode_node_unref0 (type_struct);
 	_vala_ccode_node_unref0 (instance_struct);
@@ -3134,7 +3131,7 @@ static void vala_gtype_module_generate_class_private_declaration (ValaGTypeModul
 	ValaCCodeStruct* _tmp24_;
 	ValaCCodeStruct* type_priv_struct;
 	gboolean _tmp25_;
-	gboolean _tmp257_;
+	gboolean _tmp255_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (cl != NULL);
 	g_return_if_fail (decl_space != NULL);
@@ -3351,8 +3348,8 @@ static void vala_gtype_module_generate_class_private_declaration (ValaGTypeModul
 				ValaField* _tmp84_;
 				ValaSymbolAccessibility _tmp85_;
 				ValaSymbolAccessibility _tmp86_;
-				ValaField* _tmp183_;
-				gboolean _tmp184_ = FALSE;
+				ValaField* _tmp181_;
+				gboolean _tmp182_ = FALSE;
 				_tmp84_ = f;
 				_tmp85_ = vala_symbol_get_access ((ValaSymbol*) _tmp84_);
 				_tmp86_ = _tmp85_;
@@ -3579,129 +3576,125 @@ static void vala_gtype_module_generate_class_private_declaration (ValaGTypeModul
 							if (_tmp167_) {
 								ValaCCodeStruct* _tmp168_;
 								ValaField* _tmp169_;
-								const gchar* _tmp170_;
-								const gchar* _tmp171_;
-								gchar* _tmp172_ = NULL;
-								gchar* _tmp173_;
-								ValaDelegateType* _tmp174_;
-								gboolean _tmp175_;
-								gboolean _tmp176_;
+								gchar* _tmp170_ = NULL;
+								gchar* _tmp171_;
+								ValaDelegateType* _tmp172_;
+								gboolean _tmp173_;
+								gboolean _tmp174_;
 								_tmp168_ = instance_priv_struct;
 								_tmp169_ = f;
-								_tmp170_ = vala_symbol_get_name ((ValaSymbol*) _tmp169_);
+								_tmp170_ = vala_ccode_base_module_get_ccode_delegate_target_name ((ValaVariable*) _tmp169_);
 								_tmp171_ = _tmp170_;
-								_tmp172_ = vala_ccode_base_module_get_delegate_target_cname ((ValaCCodeBaseModule*) self, _tmp171_);
-								_tmp173_ = _tmp172_;
-								vala_ccode_struct_add_field (_tmp168_, "gpointer", _tmp173_, NULL);
-								_g_free0 (_tmp173_);
-								_tmp174_ = delegate_type;
-								_tmp175_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp174_);
-								_tmp176_ = _tmp175_;
-								if (_tmp176_) {
-									ValaCCodeStruct* _tmp177_;
-									ValaField* _tmp178_;
-									const gchar* _tmp179_;
-									const gchar* _tmp180_;
-									gchar* _tmp181_ = NULL;
-									gchar* _tmp182_;
-									_tmp177_ = instance_priv_struct;
-									_tmp178_ = f;
-									_tmp179_ = vala_symbol_get_name ((ValaSymbol*) _tmp178_);
+								vala_ccode_struct_add_field (_tmp168_, "gpointer", _tmp171_, NULL);
+								_g_free0 (_tmp171_);
+								_tmp172_ = delegate_type;
+								_tmp173_ = vala_data_type_get_value_owned ((ValaDataType*) _tmp172_);
+								_tmp174_ = _tmp173_;
+								if (_tmp174_) {
+									ValaCCodeStruct* _tmp175_;
+									ValaField* _tmp176_;
+									const gchar* _tmp177_;
+									const gchar* _tmp178_;
+									gchar* _tmp179_ = NULL;
+									gchar* _tmp180_;
+									_tmp175_ = instance_priv_struct;
+									_tmp176_ = f;
+									_tmp177_ = vala_symbol_get_name ((ValaSymbol*) _tmp176_);
+									_tmp178_ = _tmp177_;
+									_tmp179_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp178_);
 									_tmp180_ = _tmp179_;
-									_tmp181_ = vala_ccode_base_module_get_delegate_target_destroy_notify_cname ((ValaCCodeBaseModule*) self, _tmp180_);
-									_tmp182_ = _tmp181_;
-									vala_ccode_struct_add_field (_tmp177_, "GDestroyNotify", _tmp182_, NULL);
-									_g_free0 (_tmp182_);
+									vala_ccode_struct_add_field (_tmp175_, "GDestroyNotify", _tmp180_, NULL);
+									_g_free0 (_tmp180_);
 								}
 							}
 							_vala_code_node_unref0 (delegate_type);
 						}
 					}
 				}
-				_tmp183_ = f;
-				_tmp184_ = vala_lockable_get_lock_used ((ValaLockable*) _tmp183_);
-				if (_tmp184_) {
-					ValaClass* _tmp185_;
-					ValaCCodeStruct* _tmp186_;
-					ValaStruct* _tmp187_;
-					gchar* _tmp188_ = NULL;
-					gchar* _tmp189_;
-					ValaField* _tmp190_;
-					const gchar* _tmp191_;
-					const gchar* _tmp192_;
-					gchar* _tmp193_ = NULL;
-					gchar* _tmp194_;
-					_tmp185_ = cl;
-					vala_class_set_has_private_fields (_tmp185_, TRUE);
-					_tmp186_ = instance_priv_struct;
-					_tmp187_ = ((ValaCCodeBaseModule*) self)->mutex_type;
-					_tmp188_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp187_);
-					_tmp189_ = _tmp188_;
-					_tmp190_ = f;
-					_tmp191_ = vala_symbol_get_name ((ValaSymbol*) _tmp190_);
+				_tmp181_ = f;
+				_tmp182_ = vala_lockable_get_lock_used ((ValaLockable*) _tmp181_);
+				if (_tmp182_) {
+					ValaClass* _tmp183_;
+					ValaCCodeStruct* _tmp184_;
+					ValaStruct* _tmp185_;
+					gchar* _tmp186_ = NULL;
+					gchar* _tmp187_;
+					ValaField* _tmp188_;
+					const gchar* _tmp189_;
+					const gchar* _tmp190_;
+					gchar* _tmp191_ = NULL;
+					gchar* _tmp192_;
+					_tmp183_ = cl;
+					vala_class_set_has_private_fields (_tmp183_, TRUE);
+					_tmp184_ = instance_priv_struct;
+					_tmp185_ = ((ValaCCodeBaseModule*) self)->mutex_type;
+					_tmp186_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp185_);
+					_tmp187_ = _tmp186_;
+					_tmp188_ = f;
+					_tmp189_ = vala_symbol_get_name ((ValaSymbol*) _tmp188_);
+					_tmp190_ = _tmp189_;
+					_tmp191_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp190_);
 					_tmp192_ = _tmp191_;
-					_tmp193_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp192_);
-					_tmp194_ = _tmp193_;
-					vala_ccode_struct_add_field (_tmp186_, _tmp189_, _tmp194_, NULL);
-					_g_free0 (_tmp194_);
-					_g_free0 (_tmp189_);
+					vala_ccode_struct_add_field (_tmp184_, _tmp187_, _tmp192_, NULL);
+					_g_free0 (_tmp192_);
+					_g_free0 (_tmp187_);
 				}
 			} else {
-				ValaField* _tmp195_;
-				ValaMemberBinding _tmp196_;
-				ValaMemberBinding _tmp197_;
-				_tmp195_ = f;
-				_tmp196_ = vala_field_get_binding (_tmp195_);
-				_tmp197_ = _tmp196_;
-				if (_tmp197_ == VALA_MEMBER_BINDING_CLASS) {
-					ValaField* _tmp198_;
-					ValaSymbolAccessibility _tmp199_;
-					ValaSymbolAccessibility _tmp200_;
-					ValaField* _tmp206_;
-					gboolean _tmp207_ = FALSE;
-					_tmp198_ = f;
-					_tmp199_ = vala_symbol_get_access ((ValaSymbol*) _tmp198_);
-					_tmp200_ = _tmp199_;
-					if (_tmp200_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
-						ValaCCodeStruct* _tmp201_;
-						const gchar* _tmp202_;
-						ValaField* _tmp203_;
-						gchar* _tmp204_ = NULL;
-						gchar* _tmp205_;
-						_tmp201_ = type_priv_struct;
-						_tmp202_ = field_ctype;
-						_tmp203_ = f;
-						_tmp204_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp203_);
-						_tmp205_ = _tmp204_;
-						vala_ccode_struct_add_field (_tmp201_, _tmp202_, _tmp205_, NULL);
-						_g_free0 (_tmp205_);
+				ValaField* _tmp193_;
+				ValaMemberBinding _tmp194_;
+				ValaMemberBinding _tmp195_;
+				_tmp193_ = f;
+				_tmp194_ = vala_field_get_binding (_tmp193_);
+				_tmp195_ = _tmp194_;
+				if (_tmp195_ == VALA_MEMBER_BINDING_CLASS) {
+					ValaField* _tmp196_;
+					ValaSymbolAccessibility _tmp197_;
+					ValaSymbolAccessibility _tmp198_;
+					ValaField* _tmp204_;
+					gboolean _tmp205_ = FALSE;
+					_tmp196_ = f;
+					_tmp197_ = vala_symbol_get_access ((ValaSymbol*) _tmp196_);
+					_tmp198_ = _tmp197_;
+					if (_tmp198_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
+						ValaCCodeStruct* _tmp199_;
+						const gchar* _tmp200_;
+						ValaField* _tmp201_;
+						gchar* _tmp202_ = NULL;
+						gchar* _tmp203_;
+						_tmp199_ = type_priv_struct;
+						_tmp200_ = field_ctype;
+						_tmp201_ = f;
+						_tmp202_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp201_);
+						_tmp203_ = _tmp202_;
+						vala_ccode_struct_add_field (_tmp199_, _tmp200_, _tmp203_, NULL);
+						_g_free0 (_tmp203_);
 					}
-					_tmp206_ = f;
-					_tmp207_ = vala_lockable_get_lock_used ((ValaLockable*) _tmp206_);
-					if (_tmp207_) {
-						ValaCCodeStruct* _tmp208_;
-						ValaStruct* _tmp209_;
-						gchar* _tmp210_ = NULL;
-						gchar* _tmp211_;
-						ValaField* _tmp212_;
+					_tmp204_ = f;
+					_tmp205_ = vala_lockable_get_lock_used ((ValaLockable*) _tmp204_);
+					if (_tmp205_) {
+						ValaCCodeStruct* _tmp206_;
+						ValaStruct* _tmp207_;
+						gchar* _tmp208_ = NULL;
+						gchar* _tmp209_;
+						ValaField* _tmp210_;
+						gchar* _tmp211_ = NULL;
+						gchar* _tmp212_;
 						gchar* _tmp213_ = NULL;
 						gchar* _tmp214_;
-						gchar* _tmp215_ = NULL;
-						gchar* _tmp216_;
 						has_class_locks = TRUE;
-						_tmp208_ = type_priv_struct;
-						_tmp209_ = ((ValaCCodeBaseModule*) self)->mutex_type;
-						_tmp210_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp209_);
-						_tmp211_ = _tmp210_;
-						_tmp212_ = f;
-						_tmp213_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp212_);
+						_tmp206_ = type_priv_struct;
+						_tmp207_ = ((ValaCCodeBaseModule*) self)->mutex_type;
+						_tmp208_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp207_);
+						_tmp209_ = _tmp208_;
+						_tmp210_ = f;
+						_tmp211_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp210_);
+						_tmp212_ = _tmp211_;
+						_tmp213_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp212_);
 						_tmp214_ = _tmp213_;
-						_tmp215_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp214_);
-						_tmp216_ = _tmp215_;
-						vala_ccode_struct_add_field (_tmp208_, _tmp211_, _tmp216_, NULL);
-						_g_free0 (_tmp216_);
+						vala_ccode_struct_add_field (_tmp206_, _tmp209_, _tmp214_, NULL);
 						_g_free0 (_tmp214_);
-						_g_free0 (_tmp211_);
+						_g_free0 (_tmp212_);
+						_g_free0 (_tmp209_);
 					}
 				}
 			}
@@ -3711,113 +3704,113 @@ static void vala_gtype_module_generate_class_private_declaration (ValaGTypeModul
 		_vala_iterable_unref0 (_f_list);
 	}
 	{
-		ValaClass* _tmp217_;
-		ValaList* _tmp218_ = NULL;
+		ValaClass* _tmp215_;
+		ValaList* _tmp216_ = NULL;
 		ValaList* _prop_list;
-		ValaList* _tmp219_;
-		gint _tmp220_;
-		gint _tmp221_;
+		ValaList* _tmp217_;
+		gint _tmp218_;
+		gint _tmp219_;
 		gint _prop_size;
 		gint _prop_index;
-		_tmp217_ = cl;
-		_tmp218_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) _tmp217_);
-		_prop_list = _tmp218_;
-		_tmp219_ = _prop_list;
-		_tmp220_ = vala_collection_get_size ((ValaCollection*) _tmp219_);
-		_tmp221_ = _tmp220_;
-		_prop_size = _tmp221_;
+		_tmp215_ = cl;
+		_tmp216_ = vala_object_type_symbol_get_properties ((ValaObjectTypeSymbol*) _tmp215_);
+		_prop_list = _tmp216_;
+		_tmp217_ = _prop_list;
+		_tmp218_ = vala_collection_get_size ((ValaCollection*) _tmp217_);
+		_tmp219_ = _tmp218_;
+		_prop_size = _tmp219_;
 		_prop_index = -1;
 		while (TRUE) {
+			gint _tmp220_;
+			gint _tmp221_;
 			gint _tmp222_;
-			gint _tmp223_;
+			ValaList* _tmp223_;
 			gint _tmp224_;
-			ValaList* _tmp225_;
-			gint _tmp226_;
-			gpointer _tmp227_ = NULL;
+			gpointer _tmp225_ = NULL;
 			ValaProperty* prop;
-			ValaProperty* _tmp228_;
-			ValaMemberBinding _tmp229_;
-			ValaMemberBinding _tmp230_;
-			_tmp222_ = _prop_index;
-			_prop_index = _tmp222_ + 1;
-			_tmp223_ = _prop_index;
-			_tmp224_ = _prop_size;
-			if (!(_tmp223_ < _tmp224_)) {
+			ValaProperty* _tmp226_;
+			ValaMemberBinding _tmp227_;
+			ValaMemberBinding _tmp228_;
+			_tmp220_ = _prop_index;
+			_prop_index = _tmp220_ + 1;
+			_tmp221_ = _prop_index;
+			_tmp222_ = _prop_size;
+			if (!(_tmp221_ < _tmp222_)) {
 				break;
 			}
-			_tmp225_ = _prop_list;
-			_tmp226_ = _prop_index;
-			_tmp227_ = vala_list_get (_tmp225_, _tmp226_);
-			prop = (ValaProperty*) _tmp227_;
-			_tmp228_ = prop;
-			_tmp229_ = vala_property_get_binding (_tmp228_);
-			_tmp230_ = _tmp229_;
-			if (_tmp230_ == VALA_MEMBER_BINDING_INSTANCE) {
-				ValaProperty* _tmp231_;
-				gboolean _tmp232_ = FALSE;
-				_tmp231_ = prop;
-				_tmp232_ = vala_lockable_get_lock_used ((ValaLockable*) _tmp231_);
-				if (_tmp232_) {
-					ValaClass* _tmp233_;
-					ValaCCodeStruct* _tmp234_;
-					ValaStruct* _tmp235_;
-					gchar* _tmp236_ = NULL;
-					gchar* _tmp237_;
-					ValaProperty* _tmp238_;
-					const gchar* _tmp239_;
-					const gchar* _tmp240_;
-					gchar* _tmp241_ = NULL;
-					gchar* _tmp242_;
-					_tmp233_ = cl;
-					vala_class_set_has_private_fields (_tmp233_, TRUE);
-					_tmp234_ = instance_priv_struct;
-					_tmp235_ = ((ValaCCodeBaseModule*) self)->mutex_type;
-					_tmp236_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp235_);
-					_tmp237_ = _tmp236_;
-					_tmp238_ = prop;
-					_tmp239_ = vala_symbol_get_name ((ValaSymbol*) _tmp238_);
+			_tmp223_ = _prop_list;
+			_tmp224_ = _prop_index;
+			_tmp225_ = vala_list_get (_tmp223_, _tmp224_);
+			prop = (ValaProperty*) _tmp225_;
+			_tmp226_ = prop;
+			_tmp227_ = vala_property_get_binding (_tmp226_);
+			_tmp228_ = _tmp227_;
+			if (_tmp228_ == VALA_MEMBER_BINDING_INSTANCE) {
+				ValaProperty* _tmp229_;
+				gboolean _tmp230_ = FALSE;
+				_tmp229_ = prop;
+				_tmp230_ = vala_lockable_get_lock_used ((ValaLockable*) _tmp229_);
+				if (_tmp230_) {
+					ValaClass* _tmp231_;
+					ValaCCodeStruct* _tmp232_;
+					ValaStruct* _tmp233_;
+					gchar* _tmp234_ = NULL;
+					gchar* _tmp235_;
+					ValaProperty* _tmp236_;
+					const gchar* _tmp237_;
+					const gchar* _tmp238_;
+					gchar* _tmp239_ = NULL;
+					gchar* _tmp240_;
+					_tmp231_ = cl;
+					vala_class_set_has_private_fields (_tmp231_, TRUE);
+					_tmp232_ = instance_priv_struct;
+					_tmp233_ = ((ValaCCodeBaseModule*) self)->mutex_type;
+					_tmp234_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp233_);
+					_tmp235_ = _tmp234_;
+					_tmp236_ = prop;
+					_tmp237_ = vala_symbol_get_name ((ValaSymbol*) _tmp236_);
+					_tmp238_ = _tmp237_;
+					_tmp239_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp238_);
 					_tmp240_ = _tmp239_;
-					_tmp241_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp240_);
-					_tmp242_ = _tmp241_;
-					vala_ccode_struct_add_field (_tmp234_, _tmp237_, _tmp242_, NULL);
-					_g_free0 (_tmp242_);
-					_g_free0 (_tmp237_);
+					vala_ccode_struct_add_field (_tmp232_, _tmp235_, _tmp240_, NULL);
+					_g_free0 (_tmp240_);
+					_g_free0 (_tmp235_);
 				}
 			} else {
-				ValaProperty* _tmp243_;
-				ValaMemberBinding _tmp244_;
-				ValaMemberBinding _tmp245_;
-				_tmp243_ = prop;
-				_tmp244_ = vala_property_get_binding (_tmp243_);
-				_tmp245_ = _tmp244_;
-				if (_tmp245_ == VALA_MEMBER_BINDING_CLASS) {
-					ValaProperty* _tmp246_;
-					gboolean _tmp247_ = FALSE;
-					_tmp246_ = prop;
-					_tmp247_ = vala_lockable_get_lock_used ((ValaLockable*) _tmp246_);
-					if (_tmp247_) {
-						ValaCCodeStruct* _tmp248_;
-						ValaStruct* _tmp249_;
-						gchar* _tmp250_ = NULL;
-						gchar* _tmp251_;
-						ValaProperty* _tmp252_;
-						const gchar* _tmp253_;
-						const gchar* _tmp254_;
-						gchar* _tmp255_ = NULL;
-						gchar* _tmp256_;
+				ValaProperty* _tmp241_;
+				ValaMemberBinding _tmp242_;
+				ValaMemberBinding _tmp243_;
+				_tmp241_ = prop;
+				_tmp242_ = vala_property_get_binding (_tmp241_);
+				_tmp243_ = _tmp242_;
+				if (_tmp243_ == VALA_MEMBER_BINDING_CLASS) {
+					ValaProperty* _tmp244_;
+					gboolean _tmp245_ = FALSE;
+					_tmp244_ = prop;
+					_tmp245_ = vala_lockable_get_lock_used ((ValaLockable*) _tmp244_);
+					if (_tmp245_) {
+						ValaCCodeStruct* _tmp246_;
+						ValaStruct* _tmp247_;
+						gchar* _tmp248_ = NULL;
+						gchar* _tmp249_;
+						ValaProperty* _tmp250_;
+						const gchar* _tmp251_;
+						const gchar* _tmp252_;
+						gchar* _tmp253_ = NULL;
+						gchar* _tmp254_;
 						has_class_locks = TRUE;
-						_tmp248_ = type_priv_struct;
-						_tmp249_ = ((ValaCCodeBaseModule*) self)->mutex_type;
-						_tmp250_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp249_);
-						_tmp251_ = _tmp250_;
-						_tmp252_ = prop;
-						_tmp253_ = vala_symbol_get_name ((ValaSymbol*) _tmp252_);
+						_tmp246_ = type_priv_struct;
+						_tmp247_ = ((ValaCCodeBaseModule*) self)->mutex_type;
+						_tmp248_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp247_);
+						_tmp249_ = _tmp248_;
+						_tmp250_ = prop;
+						_tmp251_ = vala_symbol_get_name ((ValaSymbol*) _tmp250_);
+						_tmp252_ = _tmp251_;
+						_tmp253_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp252_);
 						_tmp254_ = _tmp253_;
-						_tmp255_ = vala_ccode_base_module_get_symbol_lock_name ((ValaCCodeBaseModule*) self, _tmp254_);
-						_tmp256_ = _tmp255_;
-						vala_ccode_struct_add_field (_tmp248_, _tmp251_, _tmp256_, NULL);
-						_g_free0 (_tmp256_);
-						_g_free0 (_tmp251_);
+						vala_ccode_struct_add_field (_tmp246_, _tmp249_, _tmp254_, NULL);
+						_g_free0 (_tmp254_);
+						_g_free0 (_tmp249_);
 					}
 				}
 			}
@@ -3825,296 +3818,296 @@ static void vala_gtype_module_generate_class_private_declaration (ValaGTypeModul
 		}
 		_vala_iterable_unref0 (_prop_list);
 	}
-	_tmp257_ = is_gtypeinstance;
-	if (_tmp257_) {
-		gboolean _tmp258_ = FALSE;
-		ValaClass* _tmp259_;
-		gboolean _tmp260_;
+	_tmp255_ = is_gtypeinstance;
+	if (_tmp255_) {
+		gboolean _tmp256_ = FALSE;
+		ValaClass* _tmp257_;
+		gboolean _tmp258_;
+		gboolean _tmp259_;
 		gboolean _tmp261_;
-		gboolean _tmp263_;
-		gboolean _tmp296_ = FALSE;
-		ValaClass* _tmp297_;
-		gboolean _tmp298_;
-		gboolean _tmp299_;
-		gboolean _tmp305_;
-		gboolean _tmp325_ = FALSE;
-		ValaClass* _tmp326_;
-		gboolean _tmp327_;
+		gboolean _tmp294_ = FALSE;
+		ValaClass* _tmp295_;
+		gboolean _tmp296_;
+		gboolean _tmp297_;
+		gboolean _tmp303_;
+		gboolean _tmp323_ = FALSE;
+		ValaClass* _tmp324_;
+		gboolean _tmp325_;
+		gboolean _tmp326_;
 		gboolean _tmp328_;
-		gboolean _tmp330_;
-		ValaCCodeFile* _tmp359_;
-		ValaCCodeEnum* _tmp360_;
-		_tmp259_ = cl;
-		_tmp260_ = vala_class_get_has_class_private_fields (_tmp259_);
-		_tmp261_ = _tmp260_;
-		if (_tmp261_) {
-			_tmp258_ = TRUE;
+		ValaCCodeFile* _tmp357_;
+		ValaCCodeEnum* _tmp358_;
+		_tmp257_ = cl;
+		_tmp258_ = vala_class_get_has_class_private_fields (_tmp257_);
+		_tmp259_ = _tmp258_;
+		if (_tmp259_) {
+			_tmp256_ = TRUE;
 		} else {
-			gboolean _tmp262_;
-			_tmp262_ = has_class_locks;
-			_tmp258_ = _tmp262_;
+			gboolean _tmp260_;
+			_tmp260_ = has_class_locks;
+			_tmp256_ = _tmp260_;
 		}
-		_tmp263_ = _tmp258_;
-		if (_tmp263_) {
-			ValaCCodeFile* _tmp264_;
-			ValaCCodeStruct* _tmp265_;
-			const gchar* _tmp266_;
-			const gchar* _tmp267_;
-			gchar* _tmp268_ = NULL;
-			gchar* _tmp269_;
-			ValaClass* _tmp270_;
+		_tmp261_ = _tmp256_;
+		if (_tmp261_) {
+			ValaCCodeFile* _tmp262_;
+			ValaCCodeStruct* _tmp263_;
+			const gchar* _tmp264_;
+			const gchar* _tmp265_;
+			gchar* _tmp266_ = NULL;
+			gchar* _tmp267_;
+			ValaClass* _tmp268_;
+			gchar* _tmp269_ = NULL;
+			gchar* _tmp270_;
 			gchar* _tmp271_ = NULL;
 			gchar* _tmp272_;
-			gchar* _tmp273_ = NULL;
-			gchar* _tmp274_;
-			ValaCCodeVariableDeclarator* _tmp275_;
-			ValaCCodeVariableDeclarator* _tmp276_;
-			ValaCCodeTypeDefinition* _tmp277_;
-			ValaCCodeTypeDefinition* _tmp278_;
-			ValaCodeContext* _tmp279_;
-			ValaCodeContext* _tmp280_;
-			gboolean _tmp281_ = FALSE;
-			_tmp264_ = decl_space;
-			_tmp265_ = type_priv_struct;
-			_tmp266_ = vala_ccode_struct_get_name (_tmp265_);
+			ValaCCodeVariableDeclarator* _tmp273_;
+			ValaCCodeVariableDeclarator* _tmp274_;
+			ValaCCodeTypeDefinition* _tmp275_;
+			ValaCCodeTypeDefinition* _tmp276_;
+			ValaCodeContext* _tmp277_;
+			ValaCodeContext* _tmp278_;
+			gboolean _tmp279_ = FALSE;
+			_tmp262_ = decl_space;
+			_tmp263_ = type_priv_struct;
+			_tmp264_ = vala_ccode_struct_get_name (_tmp263_);
+			_tmp265_ = _tmp264_;
+			_tmp266_ = g_strdup_printf ("struct %s", _tmp265_);
 			_tmp267_ = _tmp266_;
-			_tmp268_ = g_strdup_printf ("struct %s", _tmp267_);
-			_tmp269_ = _tmp268_;
-			_tmp270_ = cl;
-			_tmp271_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp270_);
+			_tmp268_ = cl;
+			_tmp269_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp268_);
+			_tmp270_ = _tmp269_;
+			_tmp271_ = g_strdup_printf ("%sClassPrivate", _tmp270_);
 			_tmp272_ = _tmp271_;
-			_tmp273_ = g_strdup_printf ("%sClassPrivate", _tmp272_);
+			_tmp273_ = vala_ccode_variable_declarator_new (_tmp272_, NULL, NULL);
 			_tmp274_ = _tmp273_;
-			_tmp275_ = vala_ccode_variable_declarator_new (_tmp274_, NULL, NULL);
+			_tmp275_ = vala_ccode_type_definition_new (_tmp267_, (ValaCCodeDeclarator*) _tmp274_);
 			_tmp276_ = _tmp275_;
-			_tmp277_ = vala_ccode_type_definition_new (_tmp269_, (ValaCCodeDeclarator*) _tmp276_);
-			_tmp278_ = _tmp277_;
-			vala_ccode_file_add_type_declaration (_tmp264_, (ValaCCodeNode*) _tmp278_);
-			_vala_ccode_node_unref0 (_tmp278_);
+			vala_ccode_file_add_type_declaration (_tmp262_, (ValaCCodeNode*) _tmp276_);
 			_vala_ccode_node_unref0 (_tmp276_);
-			_g_free0 (_tmp274_);
+			_vala_ccode_node_unref0 (_tmp274_);
 			_g_free0 (_tmp272_);
-			_g_free0 (_tmp269_);
-			_tmp279_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
-			_tmp280_ = _tmp279_;
-			_tmp281_ = vala_code_context_require_glib_version (_tmp280_, 2, 24);
-			if (!_tmp281_) {
-				ValaCCodeDeclaration* _tmp282_;
+			_g_free0 (_tmp270_);
+			_g_free0 (_tmp267_);
+			_tmp277_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
+			_tmp278_ = _tmp277_;
+			_tmp279_ = vala_code_context_require_glib_version (_tmp278_, 2, 24);
+			if (!_tmp279_) {
+				ValaCCodeDeclaration* _tmp280_;
 				ValaCCodeDeclaration* _cdecl_;
-				ValaCCodeDeclaration* _tmp283_;
-				ValaClass* _tmp284_;
+				ValaCCodeDeclaration* _tmp281_;
+				ValaClass* _tmp282_;
+				gchar* _tmp283_ = NULL;
+				gchar* _tmp284_;
 				gchar* _tmp285_ = NULL;
 				gchar* _tmp286_;
-				gchar* _tmp287_ = NULL;
-				gchar* _tmp288_;
-				ValaCCodeConstant* _tmp289_;
-				ValaCCodeConstant* _tmp290_;
-				ValaCCodeVariableDeclarator* _tmp291_;
-				ValaCCodeVariableDeclarator* _tmp292_;
+				ValaCCodeConstant* _tmp287_;
+				ValaCCodeConstant* _tmp288_;
+				ValaCCodeVariableDeclarator* _tmp289_;
+				ValaCCodeVariableDeclarator* _tmp290_;
+				ValaCCodeDeclaration* _tmp291_;
+				ValaCCodeFile* _tmp292_;
 				ValaCCodeDeclaration* _tmp293_;
-				ValaCCodeFile* _tmp294_;
-				ValaCCodeDeclaration* _tmp295_;
-				_tmp282_ = vala_ccode_declaration_new ("GQuark");
-				_cdecl_ = _tmp282_;
-				_tmp283_ = _cdecl_;
-				_tmp284_ = cl;
-				_tmp285_ = vala_ccode_base_module_get_ccode_lower_case_name ((ValaCodeNode*) _tmp284_, NULL);
+				_tmp280_ = vala_ccode_declaration_new ("GQuark");
+				_cdecl_ = _tmp280_;
+				_tmp281_ = _cdecl_;
+				_tmp282_ = cl;
+				_tmp283_ = vala_ccode_base_module_get_ccode_lower_case_name ((ValaCodeNode*) _tmp282_, NULL);
+				_tmp284_ = _tmp283_;
+				_tmp285_ = g_strdup_printf ("_vala_%s_class_private_quark", _tmp284_);
 				_tmp286_ = _tmp285_;
-				_tmp287_ = g_strdup_printf ("_vala_%s_class_private_quark", _tmp286_);
+				_tmp287_ = vala_ccode_constant_new ("0");
 				_tmp288_ = _tmp287_;
-				_tmp289_ = vala_ccode_constant_new ("0");
+				_tmp289_ = vala_ccode_variable_declarator_new (_tmp286_, (ValaCCodeExpression*) _tmp288_, NULL);
 				_tmp290_ = _tmp289_;
-				_tmp291_ = vala_ccode_variable_declarator_new (_tmp288_, (ValaCCodeExpression*) _tmp290_, NULL);
-				_tmp292_ = _tmp291_;
-				vala_ccode_declaration_add_declarator (_tmp283_, (ValaCCodeDeclarator*) _tmp292_);
-				_vala_ccode_node_unref0 (_tmp292_);
+				vala_ccode_declaration_add_declarator (_tmp281_, (ValaCCodeDeclarator*) _tmp290_);
 				_vala_ccode_node_unref0 (_tmp290_);
-				_g_free0 (_tmp288_);
+				_vala_ccode_node_unref0 (_tmp288_);
 				_g_free0 (_tmp286_);
+				_g_free0 (_tmp284_);
+				_tmp291_ = _cdecl_;
+				vala_ccode_declaration_set_modifiers (_tmp291_, VALA_CCODE_MODIFIERS_STATIC);
+				_tmp292_ = decl_space;
 				_tmp293_ = _cdecl_;
-				vala_ccode_declaration_set_modifiers (_tmp293_, VALA_CCODE_MODIFIERS_STATIC);
-				_tmp294_ = decl_space;
-				_tmp295_ = _cdecl_;
-				vala_ccode_file_add_type_declaration (_tmp294_, (ValaCCodeNode*) _tmp295_);
+				vala_ccode_file_add_type_declaration (_tmp292_, (ValaCCodeNode*) _tmp293_);
 				_vala_ccode_node_unref0 (_cdecl_);
 			}
 		}
-		_tmp297_ = cl;
-		_tmp298_ = vala_class_get_has_private_fields (_tmp297_);
-		_tmp299_ = _tmp298_;
-		if (_tmp299_) {
-			_tmp296_ = TRUE;
+		_tmp295_ = cl;
+		_tmp296_ = vala_class_get_has_private_fields (_tmp295_);
+		_tmp297_ = _tmp296_;
+		if (_tmp297_) {
+			_tmp294_ = TRUE;
 		} else {
-			ValaClass* _tmp300_;
-			ValaList* _tmp301_ = NULL;
-			ValaList* _tmp302_;
-			gint _tmp303_;
-			gint _tmp304_;
-			_tmp300_ = cl;
-			_tmp301_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) _tmp300_);
+			ValaClass* _tmp298_;
+			ValaList* _tmp299_ = NULL;
+			ValaList* _tmp300_;
+			gint _tmp301_;
+			gint _tmp302_;
+			_tmp298_ = cl;
+			_tmp299_ = vala_object_type_symbol_get_type_parameters ((ValaObjectTypeSymbol*) _tmp298_);
+			_tmp300_ = _tmp299_;
+			_tmp301_ = vala_collection_get_size ((ValaCollection*) _tmp300_);
 			_tmp302_ = _tmp301_;
-			_tmp303_ = vala_collection_get_size ((ValaCollection*) _tmp302_);
-			_tmp304_ = _tmp303_;
-			_tmp296_ = _tmp304_ > 0;
-			_vala_iterable_unref0 (_tmp302_);
+			_tmp294_ = _tmp302_ > 0;
+			_vala_iterable_unref0 (_tmp300_);
 		}
-		_tmp305_ = _tmp296_;
-		if (_tmp305_) {
-			ValaCCodeFile* _tmp306_;
-			ValaCCodeStruct* _tmp307_;
-			ValaClass* _tmp308_;
-			gchar* _tmp309_ = NULL;
-			gchar* _tmp310_;
-			ValaClass* _tmp311_;
+		_tmp303_ = _tmp294_;
+		if (_tmp303_) {
+			ValaCCodeFile* _tmp304_;
+			ValaCCodeStruct* _tmp305_;
+			ValaClass* _tmp306_;
+			gchar* _tmp307_ = NULL;
+			gchar* _tmp308_;
+			ValaClass* _tmp309_;
+			gchar* _tmp310_ = NULL;
+			gchar* _tmp311_;
 			gchar* _tmp312_ = NULL;
 			gchar* _tmp313_;
-			gchar* _tmp314_ = NULL;
-			gchar* _tmp315_;
 			gchar* macro;
-			ValaCCodeFile* _tmp316_;
-			ValaClass* _tmp317_;
+			ValaCCodeFile* _tmp314_;
+			ValaClass* _tmp315_;
+			gchar* _tmp316_ = NULL;
+			gchar* _tmp317_;
 			gchar* _tmp318_ = NULL;
 			gchar* _tmp319_;
-			gchar* _tmp320_ = NULL;
-			gchar* _tmp321_;
-			const gchar* _tmp322_;
-			ValaCCodeMacroReplacement* _tmp323_;
-			ValaCCodeMacroReplacement* _tmp324_;
-			_tmp306_ = decl_space;
-			_tmp307_ = instance_priv_struct;
-			vala_ccode_file_add_type_definition (_tmp306_, (ValaCCodeNode*) _tmp307_);
-			_tmp308_ = cl;
-			_tmp309_ = vala_ccode_base_module_get_ccode_type_id ((ValaCodeNode*) _tmp308_);
-			_tmp310_ = _tmp309_;
-			_tmp311_ = cl;
-			_tmp312_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp311_);
+			const gchar* _tmp320_;
+			ValaCCodeMacroReplacement* _tmp321_;
+			ValaCCodeMacroReplacement* _tmp322_;
+			_tmp304_ = decl_space;
+			_tmp305_ = instance_priv_struct;
+			vala_ccode_file_add_type_definition (_tmp304_, (ValaCCodeNode*) _tmp305_);
+			_tmp306_ = cl;
+			_tmp307_ = vala_ccode_base_module_get_ccode_type_id ((ValaCodeNode*) _tmp306_);
+			_tmp308_ = _tmp307_;
+			_tmp309_ = cl;
+			_tmp310_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp309_);
+			_tmp311_ = _tmp310_;
+			_tmp312_ = g_strdup_printf ("(G_TYPE_INSTANCE_GET_PRIVATE ((o), %s, %sPrivate))", _tmp308_, _tmp311_);
 			_tmp313_ = _tmp312_;
-			_tmp314_ = g_strdup_printf ("(G_TYPE_INSTANCE_GET_PRIVATE ((o), %s, %sPrivate))", _tmp310_, _tmp313_);
-			_tmp315_ = _tmp314_;
-			_g_free0 (_tmp313_);
-			_g_free0 (_tmp310_);
-			macro = _tmp315_;
-			_tmp316_ = decl_space;
-			_tmp317_ = cl;
-			_tmp318_ = vala_ccode_base_module_get_ccode_upper_case_name ((ValaSymbol*) _tmp317_, NULL);
+			_g_free0 (_tmp311_);
+			_g_free0 (_tmp308_);
+			macro = _tmp313_;
+			_tmp314_ = decl_space;
+			_tmp315_ = cl;
+			_tmp316_ = vala_ccode_base_module_get_ccode_upper_case_name ((ValaSymbol*) _tmp315_, NULL);
+			_tmp317_ = _tmp316_;
+			_tmp318_ = g_strdup_printf ("%s_GET_PRIVATE(o)", _tmp317_);
 			_tmp319_ = _tmp318_;
-			_tmp320_ = g_strdup_printf ("%s_GET_PRIVATE(o)", _tmp319_);
-			_tmp321_ = _tmp320_;
-			_tmp322_ = macro;
-			_tmp323_ = vala_ccode_macro_replacement_new (_tmp321_, _tmp322_);
-			_tmp324_ = _tmp323_;
-			vala_ccode_file_add_type_member_declaration (_tmp316_, (ValaCCodeNode*) _tmp324_);
-			_vala_ccode_node_unref0 (_tmp324_);
-			_g_free0 (_tmp321_);
+			_tmp320_ = macro;
+			_tmp321_ = vala_ccode_macro_replacement_new (_tmp319_, _tmp320_);
+			_tmp322_ = _tmp321_;
+			vala_ccode_file_add_type_member_declaration (_tmp314_, (ValaCCodeNode*) _tmp322_);
+			_vala_ccode_node_unref0 (_tmp322_);
 			_g_free0 (_tmp319_);
+			_g_free0 (_tmp317_);
 			_g_free0 (macro);
 		}
-		_tmp326_ = cl;
-		_tmp327_ = vala_class_get_has_class_private_fields (_tmp326_);
-		_tmp328_ = _tmp327_;
-		if (_tmp328_) {
-			_tmp325_ = TRUE;
+		_tmp324_ = cl;
+		_tmp325_ = vala_class_get_has_class_private_fields (_tmp324_);
+		_tmp326_ = _tmp325_;
+		if (_tmp326_) {
+			_tmp323_ = TRUE;
 		} else {
-			gboolean _tmp329_;
-			_tmp329_ = has_class_locks;
-			_tmp325_ = _tmp329_;
+			gboolean _tmp327_;
+			_tmp327_ = has_class_locks;
+			_tmp323_ = _tmp327_;
 		}
-		_tmp330_ = _tmp325_;
-		if (_tmp330_) {
-			ValaCCodeFile* _tmp331_;
-			ValaCCodeStruct* _tmp332_;
+		_tmp328_ = _tmp323_;
+		if (_tmp328_) {
+			ValaCCodeFile* _tmp329_;
+			ValaCCodeStruct* _tmp330_;
 			gchar* macro = NULL;
-			ValaCodeContext* _tmp333_;
-			ValaCodeContext* _tmp334_;
-			gboolean _tmp335_ = FALSE;
-			ValaCCodeFile* _tmp350_;
-			ValaClass* _tmp351_;
+			ValaCodeContext* _tmp331_;
+			ValaCodeContext* _tmp332_;
+			gboolean _tmp333_ = FALSE;
+			ValaCCodeFile* _tmp348_;
+			ValaClass* _tmp349_;
+			gchar* _tmp350_ = NULL;
+			gchar* _tmp351_;
 			gchar* _tmp352_ = NULL;
 			gchar* _tmp353_;
-			gchar* _tmp354_ = NULL;
-			gchar* _tmp355_;
-			const gchar* _tmp356_;
-			ValaCCodeMacroReplacement* _tmp357_;
-			ValaCCodeMacroReplacement* _tmp358_;
-			_tmp331_ = decl_space;
-			_tmp332_ = type_priv_struct;
-			vala_ccode_file_add_type_member_declaration (_tmp331_, (ValaCCodeNode*) _tmp332_);
-			_tmp333_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
-			_tmp334_ = _tmp333_;
-			_tmp335_ = vala_code_context_require_glib_version (_tmp334_, 2, 24);
-			if (_tmp335_) {
-				ValaClass* _tmp336_;
-				gchar* _tmp337_ = NULL;
-				gchar* _tmp338_;
-				ValaClass* _tmp339_;
+			const gchar* _tmp354_;
+			ValaCCodeMacroReplacement* _tmp355_;
+			ValaCCodeMacroReplacement* _tmp356_;
+			_tmp329_ = decl_space;
+			_tmp330_ = type_priv_struct;
+			vala_ccode_file_add_type_member_declaration (_tmp329_, (ValaCCodeNode*) _tmp330_);
+			_tmp331_ = vala_ccode_base_module_get_context ((ValaCCodeBaseModule*) self);
+			_tmp332_ = _tmp331_;
+			_tmp333_ = vala_code_context_require_glib_version (_tmp332_, 2, 24);
+			if (_tmp333_) {
+				ValaClass* _tmp334_;
+				gchar* _tmp335_ = NULL;
+				gchar* _tmp336_;
+				ValaClass* _tmp337_;
+				gchar* _tmp338_ = NULL;
+				gchar* _tmp339_;
 				gchar* _tmp340_ = NULL;
-				gchar* _tmp341_;
-				gchar* _tmp342_ = NULL;
-				_tmp336_ = cl;
-				_tmp337_ = vala_ccode_base_module_get_ccode_type_id ((ValaCodeNode*) _tmp336_);
-				_tmp338_ = _tmp337_;
-				_tmp339_ = cl;
-				_tmp340_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp339_);
-				_tmp341_ = _tmp340_;
-				_tmp342_ = g_strdup_printf ("(G_TYPE_CLASS_GET_PRIVATE (klass, %s, %sClassPrivate))", _tmp338_, _tmp341_);
+				_tmp334_ = cl;
+				_tmp335_ = vala_ccode_base_module_get_ccode_type_id ((ValaCodeNode*) _tmp334_);
+				_tmp336_ = _tmp335_;
+				_tmp337_ = cl;
+				_tmp338_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp337_);
+				_tmp339_ = _tmp338_;
+				_tmp340_ = g_strdup_printf ("(G_TYPE_CLASS_GET_PRIVATE (klass, %s, %sClassPrivate))", _tmp336_, _tmp339_);
 				_g_free0 (macro);
-				macro = _tmp342_;
-				_g_free0 (_tmp341_);
-				_g_free0 (_tmp338_);
+				macro = _tmp340_;
+				_g_free0 (_tmp339_);
+				_g_free0 (_tmp336_);
 			} else {
-				ValaClass* _tmp343_;
-				gchar* _tmp344_ = NULL;
-				gchar* _tmp345_;
-				ValaClass* _tmp346_;
+				ValaClass* _tmp341_;
+				gchar* _tmp342_ = NULL;
+				gchar* _tmp343_;
+				ValaClass* _tmp344_;
+				gchar* _tmp345_ = NULL;
+				gchar* _tmp346_;
 				gchar* _tmp347_ = NULL;
-				gchar* _tmp348_;
-				gchar* _tmp349_ = NULL;
-				_tmp343_ = cl;
-				_tmp344_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp343_);
-				_tmp345_ = _tmp344_;
-				_tmp346_ = cl;
-				_tmp347_ = vala_ccode_base_module_get_ccode_lower_case_name ((ValaCodeNode*) _tmp346_, NULL);
-				_tmp348_ = _tmp347_;
-				_tmp349_ = g_strdup_printf ("((%sClassPrivate *) g_type_get_qdata (G_TYPE_FROM_CLASS (klass), _vala" \
-"_%s_class_private_quark))", _tmp345_, _tmp348_);
+				_tmp341_ = cl;
+				_tmp342_ = vala_ccode_base_module_get_ccode_name ((ValaCodeNode*) _tmp341_);
+				_tmp343_ = _tmp342_;
+				_tmp344_ = cl;
+				_tmp345_ = vala_ccode_base_module_get_ccode_lower_case_name ((ValaCodeNode*) _tmp344_, NULL);
+				_tmp346_ = _tmp345_;
+				_tmp347_ = g_strdup_printf ("((%sClassPrivate *) g_type_get_qdata (G_TYPE_FROM_CLASS (klass), _vala" \
+"_%s_class_private_quark))", _tmp343_, _tmp346_);
 				_g_free0 (macro);
-				macro = _tmp349_;
-				_g_free0 (_tmp348_);
-				_g_free0 (_tmp345_);
+				macro = _tmp347_;
+				_g_free0 (_tmp346_);
+				_g_free0 (_tmp343_);
 			}
-			_tmp350_ = decl_space;
-			_tmp351_ = cl;
-			_tmp352_ = vala_ccode_base_module_get_ccode_upper_case_name ((ValaSymbol*) _tmp351_, NULL);
+			_tmp348_ = decl_space;
+			_tmp349_ = cl;
+			_tmp350_ = vala_ccode_base_module_get_ccode_upper_case_name ((ValaSymbol*) _tmp349_, NULL);
+			_tmp351_ = _tmp350_;
+			_tmp352_ = g_strdup_printf ("%s_GET_CLASS_PRIVATE(klass)", _tmp351_);
 			_tmp353_ = _tmp352_;
-			_tmp354_ = g_strdup_printf ("%s_GET_CLASS_PRIVATE(klass)", _tmp353_);
-			_tmp355_ = _tmp354_;
-			_tmp356_ = macro;
-			_tmp357_ = vala_ccode_macro_replacement_new (_tmp355_, _tmp356_);
-			_tmp358_ = _tmp357_;
-			vala_ccode_file_add_type_member_declaration (_tmp350_, (ValaCCodeNode*) _tmp358_);
-			_vala_ccode_node_unref0 (_tmp358_);
-			_g_free0 (_tmp355_);
+			_tmp354_ = macro;
+			_tmp355_ = vala_ccode_macro_replacement_new (_tmp353_, _tmp354_);
+			_tmp356_ = _tmp355_;
+			vala_ccode_file_add_type_member_declaration (_tmp348_, (ValaCCodeNode*) _tmp356_);
+			_vala_ccode_node_unref0 (_tmp356_);
 			_g_free0 (_tmp353_);
+			_g_free0 (_tmp351_);
 			_g_free0 (macro);
 		}
-		_tmp359_ = decl_space;
-		_tmp360_ = ((ValaCCodeBaseModule*) self)->prop_enum;
-		vala_ccode_file_add_type_member_declaration (_tmp359_, (ValaCCodeNode*) _tmp360_);
+		_tmp357_ = decl_space;
+		_tmp358_ = ((ValaCCodeBaseModule*) self)->prop_enum;
+		vala_ccode_file_add_type_member_declaration (_tmp357_, (ValaCCodeNode*) _tmp358_);
 	} else {
-		ValaClass* _tmp361_;
-		gboolean _tmp362_;
-		gboolean _tmp363_;
-		_tmp361_ = cl;
-		_tmp362_ = vala_class_get_has_private_fields (_tmp361_);
-		_tmp363_ = _tmp362_;
-		if (_tmp363_) {
-			ValaClass* _tmp364_;
-			ValaSourceReference* _tmp365_;
-			ValaSourceReference* _tmp366_;
-			_tmp364_ = cl;
-			_tmp365_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp364_);
-			_tmp366_ = _tmp365_;
-			vala_report_error (_tmp366_, "Private fields not supported in compact classes");
+		ValaClass* _tmp359_;
+		gboolean _tmp360_;
+		gboolean _tmp361_;
+		_tmp359_ = cl;
+		_tmp360_ = vala_class_get_has_private_fields (_tmp359_);
+		_tmp361_ = _tmp360_;
+		if (_tmp361_) {
+			ValaClass* _tmp362_;
+			ValaSourceReference* _tmp363_;
+			ValaSourceReference* _tmp364_;
+			_tmp362_ = cl;
+			_tmp363_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp362_);
+			_tmp364_ = _tmp363_;
+			vala_report_error (_tmp364_, "Private fields not supported in compact classes");
 		}
 	}
 	_vala_ccode_node_unref0 (type_priv_struct);
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index 753d761..eca78af 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -338,7 +338,7 @@ public class Vala.GTypeModule : GErrorModule {
 						var delegate_type = (DelegateType) f.variable_type;
 						if (delegate_type.delegate_symbol.has_target) {
 							// create field to store delegate target
-							instance_struct.add_field ("gpointer", get_delegate_target_cname (f.name));
+							instance_struct.add_field ("gpointer", get_ccode_delegate_target_name (f));
 							if (delegate_type.value_owned) {
 								instance_struct.add_field ("GDestroyNotify", get_delegate_target_destroy_notify_cname (f.name));
 							}
@@ -444,7 +444,7 @@ public class Vala.GTypeModule : GErrorModule {
 						var delegate_type = (DelegateType) f.variable_type;
 						if (delegate_type.delegate_symbol.has_target) {
 							// create field to store delegate target
-							instance_priv_struct.add_field ("gpointer", get_delegate_target_cname (f.name));
+							instance_priv_struct.add_field ("gpointer", get_ccode_delegate_target_name (f));
 							if (delegate_type.value_owned) {
 								instance_priv_struct.add_field ("GDestroyNotify", get_delegate_target_destroy_notify_cname (f.name));
 							}
diff --git a/codegen/valagvariantmodule.c b/codegen/valagvariantmodule.c
index bd8bb64..cdbfe61 100644
--- a/codegen/valagvariantmodule.c
+++ b/codegen/valagvariantmodule.c
@@ -628,7 +628,6 @@ gchar* vala_gvariant_module_get_dbus_signature (ValaSymbol* symbol) {
 static gboolean vala_gvariant_module_get_basic_type_info (ValaGVariantModule* self, const gchar* signature, ValaGVariantModuleBasicTypeInfo* basic_type) {
 	ValaGVariantModuleBasicTypeInfo _vala_basic_type = {0};
 	gboolean result = FALSE;
-	ValaGVariantModuleBasicTypeInfo _tmp4_ = {0};
 	g_return_val_if_fail (self != NULL, FALSE);
 	g_return_val_if_fail (signature != NULL, FALSE);
 	{
@@ -661,8 +660,7 @@ static gboolean vala_gvariant_module_get_basic_type_info (ValaGVariantModule* se
 			}
 		}
 	}
-	memset (&_tmp4_, 0, sizeof (ValaGVariantModuleBasicTypeInfo));
-	_vala_basic_type = _tmp4_;
+	memset (&_vala_basic_type, 0, sizeof (ValaGVariantModuleBasicTypeInfo));
 	result = FALSE;
 	if (basic_type) {
 		*basic_type = _vala_basic_type;
@@ -3826,8 +3824,10 @@ ValaCCodeFunction* vala_gvariant_module_generate_enum_to_string_function (ValaGV
 	ValaCCodeIdentifier* _tmp21_;
 	ValaCCodeFunction* _tmp56_;
 	ValaCCodeFunction* _tmp57_;
-	ValaCCodeIdentifier* _tmp58_;
-	ValaCCodeIdentifier* _tmp59_;
+	ValaCCodeFunction* _tmp58_;
+	ValaCCodeFunction* _tmp59_;
+	ValaCCodeIdentifier* _tmp60_;
+	ValaCCodeIdentifier* _tmp61_;
 	g_return_val_if_fail (self != NULL, NULL);
 	g_return_val_if_fail (en != NULL, NULL);
 	_tmp0_ = en;
@@ -3962,10 +3962,13 @@ ValaCCodeFunction* vala_gvariant_module_generate_enum_to_string_function (ValaGV
 	}
 	_tmp56_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
 	_tmp57_ = _tmp56_;
-	_tmp58_ = vala_ccode_identifier_new ("str");
+	vala_ccode_function_close (_tmp57_);
+	_tmp58_ = vala_ccode_base_module_get_ccode ((ValaCCodeBaseModule*) self);
 	_tmp59_ = _tmp58_;
-	vala_ccode_function_add_return (_tmp57_, (ValaCCodeExpression*) _tmp59_);
-	_vala_ccode_node_unref0 (_tmp59_);
+	_tmp60_ = vala_ccode_identifier_new ("str");
+	_tmp61_ = _tmp60_;
+	vala_ccode_function_add_return (_tmp59_, (ValaCCodeExpression*) _tmp61_);
+	_vala_ccode_node_unref0 (_tmp61_);
 	vala_ccode_base_module_pop_function ((ValaCCodeBaseModule*) self);
 	result = to_string_func;
 	_g_free0 (to_string_name);
diff --git a/codegen/valagvariantmodule.vala b/codegen/valagvariantmodule.vala
index aaef09c..8b08731 100644
--- a/codegen/valagvariantmodule.vala
+++ b/codegen/valagvariantmodule.vala
@@ -550,6 +550,8 @@ public class Vala.GVariantModule : GAsyncModule {
 			ccode.add_break ();
 		}
 
+		ccode.close();
+
 		ccode.add_return (new CCodeIdentifier ("str"));
 
 		pop_function ();
diff --git a/compiler/Makefile.in b/compiler/Makefile.in
index c5e8e59..11f316c 100644
--- a/compiler/Makefile.in
+++ b/compiler/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,6 +15,23 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkglibexecdir = $(libexecdir)/@PACKAGE@
@@ -35,7 +51,8 @@ build_triplet = @build@
 host_triplet = @host@
 bin_PROGRAMS = valac$(EXEEXT) $(am__EXEEXT_1)
 subdir = compiler
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build-aux/depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -57,8 +74,8 @@ valac_OBJECTS = $(am_valac_OBJECTS)
 am__DEPENDENCIES_1 =
 valac_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	../codegen/libvala PACKAGE_SUFFIX@.la $(am__DEPENDENCIES_1)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_ AM_V@)
+am__v_lt_ = $(am__v_lt_ AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 DEFAULT_INCLUDES = -I  am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
@@ -70,24 +87,29 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
 	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
 	$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_ AM_V@)
+am__v_CC_ = $(am__v_CC_ AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+AM_V_at = $(am__v_at_ AM_V@)
+am__v_at_ = $(am__v_at_ AM_DEFAULT_V@)
 am__v_at_0 = @
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_CCLD = $(am__v_CCLD_ AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+AM_V_GEN = $(am__v_GEN_ AM_V@)
+am__v_GEN_ = $(am__v_GEN_ AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
 SOURCES = $(valac_SOURCES)
 DIST_SOURCES = $(valac_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -214,7 +236,6 @@ libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 prefix = @prefix@
@@ -302,8 +323,11 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 install-binPROGRAMS: $(bin_PROGRAMS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do echo "$$p $$p"; done | \
 	sed 's/$(EXEEXT)$$//' | \
 	while read p p1; do if test -f $$p || test -f $$p1; \
@@ -343,7 +367,7 @@ clean-binPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-valac$(EXEEXT): $(valac_OBJECTS) $(valac_DEPENDENCIES) 
+valac$(EXEEXT): $(valac_OBJECTS) $(valac_DEPENDENCIES) $(EXTRA_valac_DEPENDENCIES) 
 	@rm -f valac$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(valac_OBJECTS) $(valac_LDADD) $(LIBS)
 
@@ -358,26 +382,23 @@ distclean-compile:
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(COMPILE) -c $<
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -434,6 +455,20 @@ GTAGS:
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
 
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
@@ -486,10 +521,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -577,18 +617,18 @@ uninstall-am: uninstall-binPROGRAMS
 .MAKE: all check install install-am install-exec-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
-	clean-generic clean-libtool ctags distclean distclean-compile \
-	distclean-generic distclean-libtool distclean-tags distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-binPROGRAMS install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-exec-hook \
-	install-html install-html-am install-info install-info-am \
-	install-man install-pdf install-pdf-am install-ps \
-	install-ps-am install-strip installcheck installcheck-am \
-	installdirs maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
-	uninstall-am uninstall-binPROGRAMS
+	clean-generic clean-libtool cscopelist ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-binPROGRAMS install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-exec-hook install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-binPROGRAMS
 
 
 valac.vala.stamp: $(valac_VALASOURCES)
diff --git a/compiler/valacompiler.c b/compiler/valacompiler.c
index 1a9ce6e..b06a6d8 100644
--- a/compiler/valacompiler.c
+++ b/compiler/valacompiler.c
@@ -204,7 +204,7 @@ ValaCompiler* vala_compiler_new (void);
 ValaCompiler* vala_compiler_construct (GType object_type);
 static void _vala_array_add1 (gchar*** array, int* length, int* size, gchar* value);
 static Block1Data* block1_data_ref (Block1Data* _data1_);
-static void block1_data_unref (Block1Data* _data1_);
+static void block1_data_unref (void * _userdata_);
 static void ___lambda2_ (Block1Data* _data1_, GPid pid, gint status);
 static void ____lambda2__gchild_watch_func (GPid pid, gint status, gpointer self);
 static gint vala_compiler_main (gchar** args, int args_length1);
@@ -2029,7 +2029,9 @@ static Block1Data* block1_data_ref (Block1Data* _data1_) {
 }
 
 
-static void block1_data_unref (Block1Data* _data1_) {
+static void block1_data_unref (void * _userdata_) {
+	Block1Data* _data1_;
+	_data1_ = (Block1Data*) _userdata_;
 	if (g_atomic_int_dec_and_test (&_data1_->_ref_count_)) {
 		_g_main_loop_unref0 (_data1_->loop);
 		g_slice_free (Block1Data, _data1_);
diff --git a/configure b/configure
index 37ea6fe..f262701 100755
--- a/configure
+++ b/configure
@@ -1,13 +1,11 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for vala 0.15.0.
+# Generated by GNU Autoconf 2.69 for vala 0.16.1.
 #
 # Report bugs to <j bitron ch>.
 #
 #
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -136,6 +134,31 @@ export LANGUAGE
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
@@ -169,7 +192,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1"
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -222,21 +246,25 @@ IFS=$as_save_IFS
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-	# neutralization value for shells without unset; and this also
-	# works around shells that cannot unset nonexistent variables.
-	# Preserve -v and -x to the replacement shell.
-	BASH_ENV=/dev/null
-	ENV=/dev/null
-	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-	export CONFIG_SHELL
-	case $- in # ((((
-	  *v*x* | *x*v* ) as_opts=-vx ;;
-	  *v* ) as_opts=-v ;;
-	  *x* ) as_opts=-x ;;
-	  * ) as_opts= ;;
-	esac
-	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
 fi
 
     if test x$as_have_required = xno; then :
@@ -338,6 +366,14 @@ $as_echo X"$as_dir" |
 
 
 } # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -459,6 +495,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -493,16 +533,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -514,28 +554,8 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -569,8 +589,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='vala'
 PACKAGE_TARNAME='vala'
-PACKAGE_VERSION='0.15.0'
-PACKAGE_STRING='vala 0.15.0'
+PACKAGE_VERSION='0.16.1'
+PACKAGE_STRING='vala 0.16.1'
 PACKAGE_BUGREPORT='j bitron ch'
 PACKAGE_URL=''
 
@@ -617,6 +637,8 @@ LTLIBOBJS
 LIBOBJS
 AM_BACKSLASH
 AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
 HAVE_XSLTPROC_FALSE
 HAVE_XSLTPROC_TRUE
 XSLTPROC
@@ -680,6 +702,7 @@ LIBTOOL
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
 CCDEPMODE
+am__nodep
 AMDEPBACKSLASH
 AMDEP_FALSE
 AMDEP_TRUE
@@ -704,7 +727,6 @@ AMTAR
 am__leading_dot
 SET_MAKE
 AWK
-mkdir_p
 MKDIR_P
 INSTALL_STRIP_PROGRAM
 STRIP
@@ -1249,8 +1271,6 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1336,7 +1356,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures vala 0.15.0 to adapt to many kinds of systems.
+\`configure' configures vala 0.16.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1406,7 +1426,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of vala 0.15.0:";;
+     short | recursive ) echo "Configuration of vala 0.16.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1414,10 +1434,13 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --disable-maintainer-mode  disable make rules and dependencies not useful
-			  (and sometimes confusing) to the casual installer
-  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors
+  --disable-maintainer-mode
+                          disable make rules and dependencies not useful (and
+                          sometimes confusing) to the casual installer
+  --enable-dependency-tracking
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking
+                          speeds up one-time build
   --enable-static[=PKGS]  build static libraries [default=no]
   --enable-shared[=PKGS]  build shared libraries [default=yes]
   --enable-fast-install[=PKGS]
@@ -1426,13 +1449,13 @@ Optional Features:
   --disable-unversioned   Disable unversioned binaries
   --enable-coverage       Enable coverage analysis
   --disable-vapigen       Disable VAPI generator
-  --enable-silent-rules          less verbose build output (undo: `make V=1')
-  --disable-silent-rules         verbose build output (undo: `make V=0')
+  --enable-silent-rules   less verbose build output (undo: "make V=1")
+  --disable-silent-rules  verbose build output (undo: "make V=0")
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-pic              try to use only PIC/non-PIC objects [default=use
+  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
                           both]
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
   --with-sysroot=DIR Search for dependent libraries within DIR
@@ -1529,10 +1552,10 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-vala configure 0.15.0
-generated by GNU Autoconf 2.68
+vala configure 0.16.1
+generated by GNU Autoconf 2.69
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1608,7 +1631,7 @@ $as_echo "$ac_try_echo"; } >&5
 	 test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
 	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
+	 test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -1807,8 +1830,8 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by vala $as_me 0.15.0, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+It was created by vala $as_me 0.16.1, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
 
@@ -2188,7 +2211,7 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 ac_config_headers="$ac_config_headers config.h"
 
 
-am__api_version='1.11'
+am__api_version='1.12'
 
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
@@ -2227,7 +2250,7 @@ case $as_dir/ in #((
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
 	  if test $ac_prog = install &&
 	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
 	    # AIX install.  It has an incompatible calling convention.
@@ -2285,9 +2308,6 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
 $as_echo_n "checking whether build environment is sane... " >&6; }
-# Just in case
-sleep 1
-echo timestamp > conftest.file
 # Reject unsafe characters in $srcdir or the absolute working directory
 # name.  Accept space and tab only in the latter.
 am_lf='
@@ -2298,32 +2318,40 @@ case `pwd` in
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
 esac
 
-# Do `set' in a subshell so we don't clobber the current shell's
+# Do 'set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$*" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$*" != "X $srcdir/configure conftest.file" \
-      && test "$*" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" "$LINENO" 5
-   fi
-
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$*" = "X"; then
+	# -L didn't work.
+	set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$*" != "X $srcdir/configure conftest.file" \
+	&& test "$*" != "X conftest.file $srcdir/configure"; then
+
+	# If neither matched, then we have a broken ls.  This can happen
+	# if, for instance, CONFIG_SHELL is bash and it inherits a
+	# broken ls alias from the environment.  This has actually
+	# happened.  Such a system could not be considered "sane".
+	as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment" "$LINENO" 5
+     fi
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
    test "$2" = conftest.file
    )
 then
@@ -2335,6 +2363,16 @@ Check your system clock" "$LINENO" 5
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
 test "$program_prefix" != NONE &&
   program_transform_name="s&^&$program_prefix&;$program_transform_name"
 # Use a double $ so make ignores it.
@@ -2361,8 +2399,8 @@ if eval "$MISSING --run true"; then
   am_missing_run="$MISSING --run "
 else
   am_missing_run=
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
 fi
 
 if test x"${install_sh}" != xset; then
@@ -2374,10 +2412,10 @@ if test x"${install_sh}" != xset; then
   esac
 fi
 
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
 # tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
+# will honor the 'STRIP' environment variable to overrule this program.
 if test "$cross_compiling" != no; then
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
@@ -2396,7 +2434,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2436,7 +2474,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2487,7 +2525,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_prog in mkdir gmkdir; do
 	 for ac_exec_ext in '' $ac_executable_extensions; do
-	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+	   as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
 	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
 	     'mkdir (GNU coreutils) '* | \
 	     'mkdir (coreutils) '* | \
@@ -2516,12 +2554,6 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
 $as_echo "$MKDIR_P" >&6; }
 
-mkdir_p="$MKDIR_P"
-case $mkdir_p in
-  [\\/$]* | ?:[\\/]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-
 for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -2540,7 +2572,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AWK="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2626,7 +2658,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='vala'
- VERSION='0.15.0'
+ VERSION='0.16.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -2656,19 +2688,19 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
-# Always define AMTAR for backward compatibility.
-
-AMTAR=${AMTAR-"${am_missing_run}tar"}
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
 
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to disable maintainer-specific portions of Makefiles" >&5
-$as_echo_n "checking whether to disable maintainer-specific portions of Makefiles... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
     # Check whether --enable-maintainer-mode was given.
 if test "${enable_maintainer_mode+set}" = set; then :
   enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
@@ -2692,6 +2724,9 @@ fi
 
 PACKAGE_SUFFIX=-0.16
 
+echo \#buildapi-variable-no-builddir >/dev/null
+
+
 
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_SUFFIX "$PACKAGE_SUFFIX"
@@ -2726,7 +2761,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2766,7 +2801,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2819,7 +2854,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2860,7 +2895,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -2918,7 +2953,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2962,7 +2997,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3408,8 +3443,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -3512,7 +3546,7 @@ am__quote=
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
+# Ignore all kinds of additional output from 'make'.
 case `$am_make -s -f confmf 2> /dev/null` in #(
 *the\ am__doit\ target*)
   am__include=include
@@ -3545,6 +3579,7 @@ fi
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
  if test "x$enable_dependency_tracking" != xno; then
   AMDEP_TRUE=
@@ -3567,8 +3602,9 @@ else
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -3602,16 +3638,16 @@ else
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
     # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
@@ -3620,16 +3656,16 @@ else
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
 	continue
       else
 	break
       fi
       ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
@@ -3848,8 +3884,8 @@ esac
 
 
 
-macro_version='2.4'
-macro_revision='1.3293'
+macro_version='2.4.2'
+macro_revision='1.3337'
 
 
 
@@ -4027,7 +4063,7 @@ do
     for ac_prog in sed gsed; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+      as_fn_executable_p "$ac_path_SED" || continue
 # Check for GNU ac_path_SED and select it if it is found.
   # Check for GNU $ac_path_SED
 case `"$ac_path_SED" --version 2>&1` in
@@ -4103,7 +4139,7 @@ do
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+      as_fn_executable_p "$ac_path_GREP" || continue
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -4169,7 +4205,7 @@ do
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+      as_fn_executable_p "$ac_path_EGREP" || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -4236,7 +4272,7 @@ do
     for ac_prog in fgrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+      as_fn_executable_p "$ac_path_FGREP" || continue
 # Check for GNU ac_path_FGREP and select it if it is found.
   # Check for GNU $ac_path_FGREP
 case `"$ac_path_FGREP" --version 2>&1` in
@@ -4492,7 +4528,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4536,7 +4572,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4694,6 +4730,11 @@ else
     lt_cv_sys_max_cmd_len=196608
     ;;
 
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
   osf*)
     # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
     # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
@@ -4733,7 +4774,7 @@ else
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
 	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
 	      test $i != 17 # 1/2 MB should be enough
       do
@@ -4955,7 +4996,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4995,7 +5036,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OBJDUMP="objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5162,7 +5203,7 @@ irix5* | irix6* | nonstopux*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
@@ -5301,7 +5342,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5341,7 +5382,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DLLTOOL="dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5445,7 +5486,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5489,7 +5530,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_AR="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5614,7 +5655,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5654,7 +5695,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5713,7 +5754,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5753,7 +5794,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5803,13 +5844,13 @@ old_postuninstall_cmds=
 if test -n "$RANLIB"; then
   case $host_os in
   openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
     ;;
   esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
 fi
 
 case $host_os in
@@ -5956,6 +5997,7 @@ for ac_symprfx in "" "_"; do
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK '"\
 "     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
@@ -6344,7 +6386,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
     CFLAGS="$SAVE_CFLAGS"
   fi
   ;;
-sparc*-*solaris*)
+*-*solaris*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
@@ -6355,7 +6397,20 @@ sparc*-*solaris*)
     case `/usr/bin/file conftest.o` in
     *64-bit*)
       case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
       *)
 	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
 	  LD="${LD-ld} -64"
@@ -6388,7 +6443,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6428,7 +6483,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6508,7 +6563,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6548,7 +6603,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6600,7 +6655,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6640,7 +6695,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_NMEDIT="nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6692,7 +6747,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6732,7 +6787,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_LIPO="lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6784,7 +6839,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6824,7 +6879,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL="otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6876,7 +6931,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6916,7 +6971,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL64="otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6995,7 +7050,13 @@ else
 	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
 	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
         _lt_result=$?
-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&5
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
 	  lt_cv_apple_cc_single_mod=yes
 	else
 	  cat conftest.err >&5
@@ -7006,6 +7067,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
 $as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
 if ${lt_cv_ld_exported_symbols_list+:} false; then :
@@ -7038,6 +7100,7 @@ rm -f core conftest.err conftest.$ac_objext \
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
 $as_echo_n "checking for -force_load linker flag... " >&6; }
 if ${lt_cv_ld_force_load+:} false; then :
@@ -7059,7 +7122,9 @@ _LT_EOF
       echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
       $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
       _lt_result=$?
-      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&5
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
 	lt_cv_ld_force_load=yes
       else
 	cat conftest.err >&5
@@ -7434,7 +7499,22 @@ fi
 
 # Check whether --with-pic was given.
 if test "${with_pic+set}" = set; then :
-  withval=$with_pic; pic_mode="$withval"
+  withval=$with_pic; lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+	IFS="$lt_save_ifs"
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
 else
   pic_mode=default
 fi
@@ -7512,6 +7592,10 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 
 
 
+
+
+
+
 test -z "$LN_S" && LN_S="ln -s"
 
 
@@ -7971,7 +8055,9 @@ lt_prog_compiler_static=
     case $cc_basename in
     nvcc*) # Cuda Compiler Driver 2.2
       lt_prog_compiler_wl='-Xlinker '
-      lt_prog_compiler_pic='-Xcompiler -fPIC'
+      if test -n "$lt_prog_compiler_pic"; then
+        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+      fi
       ;;
     esac
   else
@@ -8062,18 +8148,33 @@ lt_prog_compiler_static=
 	;;
       *)
 	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ F* | *Sun*Fortran*)
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
 	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
 	  lt_prog_compiler_pic='-KPIC'
 	  lt_prog_compiler_static='-Bstatic'
 	  lt_prog_compiler_wl=''
 	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Qoption ld '
+	  ;;
 	*Sun\ C*)
 	  # Sun C 5.9
 	  lt_prog_compiler_pic='-KPIC'
 	  lt_prog_compiler_static='-Bstatic'
 	  lt_prog_compiler_wl='-Wl,'
 	  ;;
+        *Intel*\ [CF]*Compiler*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fPIC'
+	  lt_prog_compiler_static='-static'
+	  ;;
+	*Portland\ Group*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fpic'
+	  lt_prog_compiler_static='-Bstatic'
+	  ;;
 	esac
 	;;
       esac
@@ -8435,7 +8536,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   hardcode_direct=no
   hardcode_direct_absolute=no
   hardcode_libdir_flag_spec=
-  hardcode_libdir_flag_spec_ld=
   hardcode_libdir_separator=
   hardcode_minus_L=no
   hardcode_shlibpath_var=unsupported
@@ -8685,8 +8785,7 @@ _LT_EOF
 	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
 	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
-	  hardcode_libdir_flag_spec=
-	  hardcode_libdir_flag_spec_ld='-rpath $libdir'
+	  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
 	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
 	  if test "x$supports_anon_versioning" = xyes; then
 	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
@@ -9065,6 +9164,7 @@ fi
 	# The linker will not automatically build a static lib if we build a DLL.
 	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
 	enable_shared_with_static_runtimes=yes
+	exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
 	export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
 	# Don't use ranlib
 	old_postinstall_cmds='chmod 644 $oldlib'
@@ -9110,6 +9210,7 @@ fi
   hardcode_shlibpath_var=unsupported
   if test "$lt_cv_ld_force_load" = "yes"; then
     whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
   else
     whole_archive_flag_spec=''
   fi
@@ -9138,10 +9239,6 @@ fi
       hardcode_shlibpath_var=no
       ;;
 
-    freebsd1*)
-      ld_shlibs=no
-      ;;
-
     # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
     # support.  Future versions do this automatically, but an explicit c++rt0.o
     # does not break anything, and helps significantly (at the cost of a little
@@ -9154,7 +9251,7 @@ fi
       ;;
 
     # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
+    freebsd2.*)
       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
       hardcode_direct=yes
       hardcode_minus_L=yes
@@ -9193,7 +9290,6 @@ fi
       fi
       if test "$with_gnu_ld" = no; then
 	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-	hardcode_libdir_flag_spec_ld='+b $libdir'
 	hardcode_libdir_separator=:
 	hardcode_direct=yes
 	hardcode_direct_absolute=yes
@@ -9817,11 +9913,6 @@ esac
 
 
 
-
-
-
-
-
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
 $as_echo_n "checking dynamic linker characteristics... " >&6; }
 
@@ -9911,7 +10002,7 @@ need_version=unknown
 
 case $host_os in
 aix3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
@@ -9920,7 +10011,7 @@ aix3*)
   ;;
 
 aix[4-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
@@ -9985,7 +10076,7 @@ beos*)
   ;;
 
 bsdi[45]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
@@ -10124,7 +10215,7 @@ darwin* | rhapsody*)
   ;;
 
 dgux*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -10132,10 +10223,6 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
@@ -10143,7 +10230,7 @@ freebsd* | dragonfly*)
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
-    freebsd[123]*) objformat=aout ;;
+    freebsd[23].*) objformat=aout ;;
     *) objformat=elf ;;
     esac
   fi
@@ -10161,7 +10248,7 @@ freebsd* | dragonfly*)
   esac
   shlibpath_var=LD_LIBRARY_PATH
   case $host_os in
-  freebsd2*)
+  freebsd2.*)
     shlibpath_overrides_runpath=yes
     ;;
   freebsd3.[01]* | freebsdelf3.[01]*)
@@ -10181,17 +10268,18 @@ freebsd* | dragonfly*)
   ;;
 
 gnu*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   ;;
 
 haiku*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
@@ -10252,7 +10340,7 @@ hpux9* | hpux10* | hpux11*)
   ;;
 
 interix[3-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -10268,7 +10356,7 @@ irix5* | irix6* | nonstopux*)
     nonstopux*) version_type=nonstopux ;;
     *)
 	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
+		version_type=linux # correct to gnu/linux during the next big refactor
 	else
 		version_type=irix
 	fi ;;
@@ -10305,9 +10393,9 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -10389,7 +10477,7 @@ netbsd*)
   ;;
 
 newsos6)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -10458,7 +10546,7 @@ rdos*)
   ;;
 
 solaris*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -10483,7 +10571,7 @@ sunos4*)
   ;;
 
 sysv4 | sysv4.3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -10507,7 +10595,7 @@ sysv4 | sysv4.3*)
 
 sysv4*MP*)
   if test -d /usr/nec ;then
-    version_type=linux
+    version_type=linux # correct to gnu/linux during the next big refactor
     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
     soname_spec='$libname${shared_ext}.$major'
     shlibpath_var=LD_LIBRARY_PATH
@@ -10538,7 +10626,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 
 tpf*)
   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -10548,7 +10636,7 @@ tpf*)
   ;;
 
 uts4*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -11330,6 +11418,8 @@ CC="$lt_save_CC"
 
 
 
+
+
         ac_config_commands="$ac_config_commands libtool"
 
 
@@ -11368,7 +11458,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_LEX="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -11400,7 +11490,8 @@ a { ECHO; }
 b { REJECT; }
 c { yymore (); }
 d { yyless (1); }
-e { yyless (input () != 0); }
+e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument.  */
+    yyless ((input () != 0)); }
 f { unput (yytext[0]); }
 . { BEGIN INITIAL; }
 %%
@@ -11530,7 +11621,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_YACC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -11577,7 +11668,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_VALAC="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -11712,7 +11803,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -11755,7 +11846,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -12108,7 +12199,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_XSLTPROC="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -12145,15 +12236,42 @@ if test "${enable_silent_rules+set}" = set; then :
   enableval=$enable_silent_rules;
 fi
 
-case $enable_silent_rules in
-yes) AM_DEFAULT_VERBOSITY=0;;
-no)  AM_DEFAULT_VERBOSITY=1;;
-*)   AM_DEFAULT_VERBOSITY=0;;
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=0;;
 esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
 AM_BACKSLASH='\'
 
 
-ac_config_files="$ac_config_files Makefile libvala.pc gee/Makefile ccode/Makefile vala/Makefile codegen/Makefile compiler/Makefile vapi/Makefile tests/Makefile doc/Makefile doc/vala/Makefile gobject-introspection/Makefile vapigen/Makefile vapigen/vala-gen-introspect/Makefile vapigen/vala-gen-introspect/vala-gen-introspect"
+ac_config_files="$ac_config_files Makefile libvala.pc gee/Makefile ccode/Makefile vala/Makefile codegen/Makefile compiler/Makefile vapi/Makefile tests/Makefile doc/Makefile doc/vala/Makefile gobject-introspection/Makefile vapigen/vapigen.pc vapigen/Makefile vapigen/vala-gen-introspect/Makefile vapigen/vala-gen-introspect/vala-gen-introspect"
 
 
 cat >confcache <<\_ACEOF
@@ -12265,6 +12383,14 @@ LIBOBJS=$ac_libobjs
 LTLIBOBJS=$ac_ltlibobjs
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
  if test -n "$EXEEXT"; then
   am__EXEEXT_TRUE=
   am__EXEEXT_FALSE='#'
@@ -12599,16 +12725,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -12668,28 +12794,16 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-	test -d "$1/.";
-      else
-	case $1 in #(
-	-*)set "./$1";;
-	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-	???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -12710,8 +12824,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by vala $as_me 0.15.0, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+This file was extended by vala $as_me 0.16.1, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -12776,11 +12890,11 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-vala config.status 0.15.0
-configured by $0, generated by GNU Autoconf 2.68,
+vala config.status 0.16.1
+configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -12871,7 +12985,7 @@ fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
@@ -12913,6 +13027,7 @@ pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
 enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
 SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
 ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
 host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
 host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
 host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
@@ -12995,7 +13110,6 @@ with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
 allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
 no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
 hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`'
 hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
 hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
 hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
@@ -13051,6 +13165,7 @@ _LTECHO_EOF'
 # Quote evaled strings.
 for var in SHELL \
 ECHO \
+PATH_SEPARATOR \
 SED \
 GREP \
 EGREP \
@@ -13101,7 +13216,6 @@ with_gnu_ld \
 allow_undefined_flag \
 no_undefined_flag \
 hardcode_libdir_flag_spec \
-hardcode_libdir_flag_spec_ld \
 hardcode_libdir_separator \
 exclude_expsyms \
 include_expsyms \
@@ -13197,6 +13311,7 @@ do
     "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
     "doc/vala/Makefile") CONFIG_FILES="$CONFIG_FILES doc/vala/Makefile" ;;
     "gobject-introspection/Makefile") CONFIG_FILES="$CONFIG_FILES gobject-introspection/Makefile" ;;
+    "vapigen/vapigen.pc") CONFIG_FILES="$CONFIG_FILES vapigen/vapigen.pc" ;;
     "vapigen/Makefile") CONFIG_FILES="$CONFIG_FILES vapigen/Makefile" ;;
     "vapigen/vala-gen-introspect/Makefile") CONFIG_FILES="$CONFIG_FILES vapigen/vala-gen-introspect/Makefile" ;;
     "vapigen/vala-gen-introspect/vala-gen-introspect") CONFIG_FILES="$CONFIG_FILES vapigen/vala-gen-introspect/vala-gen-introspect" ;;
@@ -13809,7 +13924,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
     # Strip MF so we end up with the name of the file.
     mf=`echo "$mf" | sed -e 's/:.*$//'`
     # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
+    # We used to match only the files named 'Makefile.in', but
     # some people rename them; so instead we look at the file content.
     # Grep'ing the first line is not enough: some people post-process
     # each Makefile.in and add a new line on top of each file to say so.
@@ -13843,21 +13958,19 @@ $as_echo X"$mf" |
       continue
     fi
     # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
+    # from the Makefile without running 'make'.
     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
     test -z "$DEPDIR" && continue
     am__include=`sed -n 's/^am__include = //p' < "$mf"`
     test -z "am__include" && continue
     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
     # Find all dependency output files, they are included files with
     # $(DEPDIR) in their names.  We invoke sed twice because it is the
     # simplest approach to changing $(DEPDIR) to its actual value in the
     # expansion.
     for file in `sed -n "
       s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
       # Make sure the directory exists.
       test -f "$dirpart/$file" && continue
       fdir=`$as_dirname -- "$file" ||
@@ -13911,8 +14024,8 @@ $as_echo X"$file" |
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-#                 Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 #   This file is part of GNU Libtool.
@@ -13966,6 +14079,9 @@ SHELL=$lt_SHELL
 # An echo program that protects backslashes.
 ECHO=$lt_ECHO
 
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
 # The host system.
 host_alias=$host_alias
 host=$host
@@ -14267,10 +14383,6 @@ no_undefined_flag=$lt_no_undefined_flag
 # This must work even if \$libdir does not exist
 hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
 
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking.  This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
-
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator
 
diff --git a/configure.ac b/configure.ac
index fcde8d0..97d0740 100644
--- a/configure.ac
+++ b/configure.ac
@@ -7,6 +7,11 @@ AM_INIT_AUTOMAKE([1.11 dist-bzip2])
 AM_MAINTAINER_MODE([enable])
 
 PACKAGE_SUFFIX=-0.16
+
+dnl http://people.gnome.org/~walters/docs/build-api.txt
+dnl We don't support separate builddir when building from git
+echo \#buildapi-variable-no-builddir >/dev/null
+
 AC_SUBST(PACKAGE_SUFFIX)
 AC_DEFINE_UNQUOTED(PACKAGE_SUFFIX, "$PACKAGE_SUFFIX", [Define to the suffix of this package])
 
@@ -115,6 +120,7 @@ AC_CONFIG_FILES([Makefile
            doc/Makefile
            doc/vala/Makefile
            gobject-introspection/Makefile
+           vapigen/vapigen.pc
            vapigen/Makefile
            vapigen/vala-gen-introspect/Makefile
            vapigen/vala-gen-introspect/vala-gen-introspect])
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 4dfe883..93206a1 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -15,6 +14,23 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkglibexecdir = $(libexecdir)/@PACKAGE@
@@ -45,11 +61,11 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_ AM_V@)
+am__v_GEN_ = $(am__v_GEN_ AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+AM_V_at = $(am__v_at_ AM_V@)
+am__v_at_ = $(am__v_at_ AM_DEFAULT_V@)
 am__v_at_0 = @
 SOURCES =
 DIST_SOURCES =
@@ -60,6 +76,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -81,6 +102,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 man1dir = $(mandir)/man1
 am__installdirs = "$(DESTDIR)$(man1dir)"
 NROFF = nroff
@@ -242,7 +269,6 @@ libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 prefix = @prefix@
@@ -320,11 +346,18 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-man1: $(man_MANS)
 	@$(NORMAL_INSTALL)
-	test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
-	@list=''; test -n "$(man1dir)" || exit 0; \
-	{ for i in $$list; do echo "$$i"; done; \
-	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
-	  sed -n '/\.1[a-z]*$$/p'; \
+	@list1=''; \
+	list2='$(man_MANS)'; \
+	test -n "$(man1dir)" \
+	  && test -n "`echo $$list1$$list2`" \
+	  || exit 0; \
+	echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+	$(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+	{ for i in $$list1; do echo "$$i"; done;  \
+	if test -n "$$list2"; then \
+	  for i in $$list2; do echo "$$i"; done \
+	    | sed -n '/\.1[a-z]*$$/p'; \
+	fi; \
 	} | while read p; do \
 	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; echo "$$p"; \
@@ -353,16 +386,14 @@ uninstall-man1:
 	  sed -n '/\.1[a-z]*$$/p'; \
 	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
 	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
-	test -z "$$files" || { \
-	  echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
-	  cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
+	dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
 $(RECURSIVE_TARGETS):
 	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
@@ -426,6 +457,10 @@ ctags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
 	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
 	done
+cscopelist-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+	done
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -489,6 +524,20 @@ GTAGS:
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
 
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
@@ -499,10 +548,10 @@ distdir: $(DISTFILES)
 	    if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
 	  if test -n "$$list" && \
 	    grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
-	    echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
+	    echo "error: found man pages containing the 'missing help2man' replacement text:" >&2; \
 	    grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
 	    echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
-	    echo "       typically \`make maintainer-clean' will remove them" >&2; \
+	    echo "       typically 'make maintainer-clean' will remove them" >&2; \
 	    exit 1; \
 	  else :; fi; \
 	else :; fi
@@ -537,13 +586,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
@@ -581,10 +627,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -666,23 +717,24 @@ uninstall-am: uninstall-man
 
 uninstall-man: uninstall-man1
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
-	install-am install-data-am install-strip tags-recursive
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \
+	cscopelist-recursive ctags-recursive install-am \
+	install-data-am install-strip tags-recursive
 
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
 	all all-am check check-am clean clean-generic clean-libtool \
-	ctags ctags-recursive distclean distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-data-hook install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-man1 \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am tags tags-recursive uninstall uninstall-am \
-	uninstall-man uninstall-man1
+	cscopelist cscopelist-recursive ctags ctags-recursive \
+	distclean distclean-generic distclean-libtool distclean-tags \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-data-hook \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-man1 install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am uninstall-man uninstall-man1
 
 
 @ENABLE_UNVERSIONED_TRUE install-data-hook:
diff --git a/doc/vala/Makefile.in b/doc/vala/Makefile.in
index 49b3f81..25149c3 100644
--- a/doc/vala/Makefile.in
+++ b/doc/vala/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,6 +15,23 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkglibexecdir = $(libexecdir)/@PACKAGE@
@@ -46,14 +62,19 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_ AM_V@)
+am__v_GEN_ = $(am__v_GEN_ AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+AM_V_at = $(am__v_at_ AM_V@)
+am__v_at_ = $(am__v_at_ AM_DEFAULT_V@)
 am__v_at_0 = @
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -75,6 +96,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(bookdir)"
 DATA = $(book_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -201,7 +228,6 @@ libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 prefix = @prefix@
@@ -313,8 +339,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-bookDATA: $(book_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(bookdir)" || $(MKDIR_P) "$(DESTDIR)$(bookdir)"
 	@list='$(book_DATA)'; test -n "$(bookdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bookdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bookdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -328,15 +357,15 @@ uninstall-bookDATA:
 	@$(NORMAL_UNINSTALL)
 	@list='$(book_DATA)'; test -n "$(bookdir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(bookdir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(bookdir)" && rm -f $$files
+	dir='$(DESTDIR)$(bookdir)'; $(am__uninstall_files_from_dir)
 tags: TAGS
 TAGS:
 
 ctags: CTAGS
 CTAGS:
 
+cscope cscopelist:
+
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -385,10 +414,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
 
diff --git a/gee/Makefile.am b/gee/Makefile.am
index ea6f493..1cc4ea2 100644
--- a/gee/Makefile.am
+++ b/gee/Makefile.am
@@ -16,6 +16,7 @@ libgee_la_VALASOURCES = \
 	hashmap.vala \
 	hashset.vala \
 	iterable.vala \
+	mapiterator.vala \
 	iterator.vala \
 	list.vala \
 	map.vala \
diff --git a/gee/Makefile.in b/gee/Makefile.in
index a57b580..1149978 100644
--- a/gee/Makefile.in
+++ b/gee/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -17,6 +16,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkglibexecdir = $(libexecdir)/@PACKAGE@
@@ -36,7 +52,7 @@ build_triplet = @build@
 host_triplet = @host@
 subdir = gee
 DIST_COMMON = $(geeinclude_HEADERS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in
+	$(srcdir)/Makefile.in $(top_srcdir)/build-aux/depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -54,11 +70,12 @@ libgee_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1)
 am__objects_1 =
 am__objects_2 = arraylist.lo collection.lo hashmap.lo hashset.lo \
-	iterable.lo iterator.lo list.lo map.lo set.lo $(am__objects_1)
+	iterable.lo mapiterator.lo iterator.lo list.lo map.lo set.lo \
+	$(am__objects_1)
 am_libgee_la_OBJECTS = $(am__objects_2) $(am__objects_1)
 libgee_la_OBJECTS = $(am_libgee_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_ AM_V@)
+am__v_lt_ = $(am__v_lt_ AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 DEFAULT_INCLUDES = -I  am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
@@ -70,24 +87,29 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
 	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
 	$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_ AM_V@)
+am__v_CC_ = $(am__v_CC_ AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+AM_V_at = $(am__v_at_ AM_V@)
+am__v_at_ = $(am__v_at_ AM_DEFAULT_V@)
 am__v_at_0 = @
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_CCLD = $(am__v_CCLD_ AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+AM_V_GEN = $(am__v_GEN_ AM_V@)
+am__v_GEN_ = $(am__v_GEN_ AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
 SOURCES = $(libgee_la_SOURCES)
 DIST_SOURCES = $(libgee_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -109,6 +131,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(geeincludedir)"
 HEADERS = $(geeinclude_HEADERS)
 ETAGS = etags
@@ -237,7 +265,6 @@ libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 prefix = @prefix@
@@ -269,6 +296,7 @@ libgee_la_VALASOURCES = \
 	hashmap.vala \
 	hashset.vala \
 	iterable.vala \
+	mapiterator.vala \
 	iterator.vala \
 	list.vala \
 	map.vala \
@@ -338,13 +366,15 @@ $(am__aclocal_m4_deps):
 
 clean-noinstLTLIBRARIES:
 	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
-	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-	  test "$$dir" != "$$p" || dir=.; \
-	  echo "rm -f \"$${dir}/so_locations\""; \
-	  rm -f "$${dir}/so_locations"; \
-	done
-libgee.la: $(libgee_la_OBJECTS) $(libgee_la_DEPENDENCIES) 
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libgee.la: $(libgee_la_OBJECTS) $(libgee_la_DEPENDENCIES) $(EXTRA_libgee_la_DEPENDENCIES) 
 	$(AM_V_CCLD)$(LINK)  $(libgee_la_OBJECTS) $(libgee_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
@@ -361,31 +391,29 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/iterator Plo am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/list Plo am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/map Plo am__quote@
+ AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/mapiterator Plo am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/set Plo am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(COMPILE) -c $<
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -394,8 +422,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-geeincludeHEADERS: $(geeinclude_HEADERS)
 	@$(NORMAL_INSTALL)
-	test -z "$(geeincludedir)" || $(MKDIR_P) "$(DESTDIR)$(geeincludedir)"
 	@list='$(geeinclude_HEADERS)'; test -n "$(geeincludedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(geeincludedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(geeincludedir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -409,9 +440,7 @@ uninstall-geeincludeHEADERS:
 	@$(NORMAL_UNINSTALL)
 	@list='$(geeinclude_HEADERS)'; test -n "$(geeincludedir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(geeincludedir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(geeincludedir)" && rm -f $$files
+	dir='$(DESTDIR)$(geeincludedir)'; $(am__uninstall_files_from_dir)
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -462,6 +491,20 @@ GTAGS:
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
 
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
@@ -514,10 +557,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -605,18 +653,19 @@ uninstall-am: uninstall-geeincludeHEADERS
 .MAKE: all check install install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am \
-	install-geeincludeHEADERS install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-geeincludeHEADERS
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-geeincludeHEADERS install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-geeincludeHEADERS
 
 	$(NULL)
 
diff --git a/gee/gee.vapi b/gee/gee.vapi
index 9356a2d..f63017a 100644
--- a/gee/gee.vapi
+++ b/gee/gee.vapi
@@ -35,6 +35,7 @@ namespace Vala {
 		public override V @get (K key);
 		public override Vala.Set<K> get_keys ();
 		public override Vala.Collection<V> get_values ();
+		public override Vala.MapIterator<K,V> map_iterator ();
 		public override bool remove (K key);
 		public override void @set (K key, V value);
 		public GLib.EqualFunc key_equal_func { set; }
@@ -84,11 +85,19 @@ namespace Vala {
 		public abstract V @get (K key);
 		public abstract Vala.Set<K> get_keys ();
 		public abstract Vala.Collection<V> get_values ();
+		public abstract Vala.MapIterator<K,V> map_iterator ();
 		public abstract bool remove (K key);
 		public abstract void @set (K key, V value);
 		public abstract int size { get; }
 	}
 	[CCode (cheader_filename = "valagee.h")]
+	public abstract class MapIterator<K,V> {
+		public MapIterator ();
+		public abstract K get_key ();
+		public abstract V get_value ();
+		public abstract bool next ();
+	}
+	[CCode (cheader_filename = "valagee.h")]
 	public abstract class Set<G> : Vala.Collection<G> {
 		public Set ();
 	}
diff --git a/gee/hashmap.c b/gee/hashmap.c
index 4094e73..4afae44 100644
--- a/gee/hashmap.c
+++ b/gee/hashmap.c
@@ -70,6 +70,16 @@ typedef struct _ValaCollectionClass ValaCollectionClass;
 typedef struct _ValaSet ValaSet;
 typedef struct _ValaSetClass ValaSetClass;
 
+#define VALA_TYPE_MAP_ITERATOR (vala_map_iterator_get_type ())
+#define VALA_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_MAP_ITERATOR, ValaMapIterator))
+#define VALA_MAP_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_MAP_ITERATOR, ValaMapIteratorClass))
+#define VALA_IS_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_MAP_ITERATOR))
+#define VALA_IS_MAP_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_MAP_ITERATOR))
+#define VALA_MAP_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_MAP_ITERATOR, ValaMapIteratorClass))
+
+typedef struct _ValaMapIterator ValaMapIterator;
+typedef struct _ValaMapIteratorClass ValaMapIteratorClass;
+
 #define VALA_TYPE_HASH_MAP (vala_hash_map_get_type ())
 #define VALA_HASH_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_HASH_MAP, ValaHashMap))
 #define VALA_HASH_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_HASH_MAP, ValaHashMapClass))
@@ -101,6 +111,16 @@ typedef struct _ValaHashMapKeySetClass ValaHashMapKeySetClass;
 
 typedef struct _ValaHashMapValueCollection ValaHashMapValueCollection;
 typedef struct _ValaHashMapValueCollectionClass ValaHashMapValueCollectionClass;
+
+#define VALA_HASH_MAP_TYPE_MAP_ITERATOR (vala_hash_map_map_iterator_get_type ())
+#define VALA_HASH_MAP_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_HASH_MAP_TYPE_MAP_ITERATOR, ValaHashMapMapIterator))
+#define VALA_HASH_MAP_MAP_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_HASH_MAP_TYPE_MAP_ITERATOR, ValaHashMapMapIteratorClass))
+#define VALA_HASH_MAP_IS_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_HASH_MAP_TYPE_MAP_ITERATOR))
+#define VALA_HASH_MAP_IS_MAP_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_HASH_MAP_TYPE_MAP_ITERATOR))
+#define VALA_HASH_MAP_MAP_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_HASH_MAP_TYPE_MAP_ITERATOR, ValaHashMapMapIteratorClass))
+
+typedef struct _ValaHashMapMapIterator ValaHashMapMapIterator;
+typedef struct _ValaHashMapMapIteratorClass ValaHashMapMapIteratorClass;
 #define _vala_hash_map_node_free0(var) ((var == NULL) ? NULL : (var = (vala_hash_map_node_free (var), NULL)))
 typedef struct _ValaIterablePrivate ValaIterablePrivate;
 
@@ -127,6 +147,8 @@ typedef struct _ValaHashMapKeySetPrivate ValaHashMapKeySetPrivate;
 
 typedef struct _ValaHashMapKeyIterator ValaHashMapKeyIterator;
 typedef struct _ValaHashMapKeyIteratorClass ValaHashMapKeyIteratorClass;
+typedef struct _ValaMapIteratorPrivate ValaMapIteratorPrivate;
+typedef struct _ValaHashMapMapIteratorPrivate ValaHashMapMapIteratorPrivate;
 typedef struct _ValaIteratorPrivate ValaIteratorPrivate;
 typedef struct _ValaHashMapKeyIteratorPrivate ValaHashMapKeyIteratorPrivate;
 typedef struct _ValaHashMapValueCollectionPrivate ValaHashMapValueCollectionPrivate;
@@ -159,6 +181,7 @@ struct _ValaMapClass {
 	void (*set) (ValaMap* self, gconstpointer key, gconstpointer value);
 	gboolean (*remove) (ValaMap* self, gconstpointer key);
 	void (*clear) (ValaMap* self);
+	ValaMapIterator* (*map_iterator) (ValaMap* self);
 	gint (*get_size) (ValaMap* self);
 };
 
@@ -251,6 +274,42 @@ struct _ValaHashMapKeySetPrivate {
 	ValaHashMap* _map;
 };
 
+struct _ValaMapIterator {
+	GTypeInstance parent_instance;
+	volatile int ref_count;
+	ValaMapIteratorPrivate * priv;
+};
+
+struct _ValaMapIteratorClass {
+	GTypeClass parent_class;
+	void (*finalize) (ValaMapIterator *self);
+	gboolean (*next) (ValaMapIterator* self);
+	gpointer (*get_key) (ValaMapIterator* self);
+	gpointer (*get_value) (ValaMapIterator* self);
+};
+
+struct _ValaHashMapMapIterator {
+	ValaMapIterator parent_instance;
+	ValaHashMapMapIteratorPrivate * priv;
+};
+
+struct _ValaHashMapMapIteratorClass {
+	ValaMapIteratorClass parent_class;
+};
+
+struct _ValaHashMapMapIteratorPrivate {
+	GType k_type;
+	GBoxedCopyFunc k_dup_func;
+	GDestroyNotify k_destroy_func;
+	GType v_type;
+	GBoxedCopyFunc v_dup_func;
+	GDestroyNotify v_destroy_func;
+	ValaHashMap* _map;
+	gint _index;
+	ValaHashMapNode* _node;
+	gint _stamp;
+};
+
 struct _ValaIterator {
 	GTypeInstance parent_instance;
 	volatile int ref_count;
@@ -330,6 +389,7 @@ struct _ValaHashMapValueIteratorPrivate {
 
 static gpointer vala_hash_map_parent_class = NULL;
 static gpointer vala_hash_map_key_set_parent_class = NULL;
+static gpointer vala_hash_map_map_iterator_parent_class = NULL;
 static gpointer vala_hash_map_key_iterator_parent_class = NULL;
 static gpointer vala_hash_map_value_collection_parent_class = NULL;
 static gpointer vala_hash_map_value_iterator_parent_class = NULL;
@@ -350,6 +410,13 @@ gpointer vala_value_get_iterable (const GValue* value);
 GType vala_iterable_get_type (void) G_GNUC_CONST;
 GType vala_collection_get_type (void) G_GNUC_CONST;
 GType vala_set_get_type (void) G_GNUC_CONST;
+gpointer vala_map_iterator_ref (gpointer instance);
+void vala_map_iterator_unref (gpointer instance);
+GParamSpec* vala_param_spec_map_iterator (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void vala_value_set_map_iterator (GValue* value, gpointer v_object);
+void vala_value_take_map_iterator (GValue* value, gpointer v_object);
+gpointer vala_value_get_map_iterator (const GValue* value);
+GType vala_map_iterator_get_type (void) G_GNUC_CONST;
 GType vala_hash_map_get_type (void) G_GNUC_CONST;
 static void vala_hash_map_node_free (ValaHashMapNode* self);
 #define VALA_HASH_MAP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VALA_TYPE_HASH_MAP, ValaHashMapPrivate))
@@ -373,6 +440,10 @@ static ValaCollection* vala_hash_map_real_get_values (ValaMap* base);
 static ValaHashMapValueCollection* vala_hash_map_value_collection_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, ValaHashMap* map);
 static ValaHashMapValueCollection* vala_hash_map_value_collection_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, ValaHashMap* map);
 static GType vala_hash_map_value_collection_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
+static ValaMapIterator* vala_hash_map_real_map_iterator (ValaMap* base);
+static ValaHashMapMapIterator* vala_hash_map_map_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, ValaHashMap* map);
+static ValaHashMapMapIterator* vala_hash_map_map_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, ValaHashMap* map);
+static GType vala_hash_map_map_iterator_get_type (void) G_GNUC_CONST G_GNUC_UNUSED;
 static ValaHashMapNode** vala_hash_map_lookup_node (ValaHashMap* self, gconstpointer key);
 static gboolean vala_hash_map_real_contains (ValaMap* base, gconstpointer key);
 static gpointer vala_hash_map_real_get (ValaMap* base, gconstpointer key);
@@ -408,6 +479,16 @@ static gboolean vala_hash_map_key_set_real_contains (ValaCollection* base, gcons
 gboolean vala_map_contains (ValaMap* self, gconstpointer key);
 gint vala_map_get_size (ValaMap* self);
 static void vala_hash_map_key_set_finalize (ValaIterable* obj);
+#define VALA_HASH_MAP_MAP_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VALA_HASH_MAP_TYPE_MAP_ITERATOR, ValaHashMapMapIteratorPrivate))
+enum  {
+	VALA_HASH_MAP_MAP_ITERATOR_DUMMY_PROPERTY
+};
+ValaMapIterator* vala_map_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func);
+static void vala_hash_map_map_iterator_set_map (ValaHashMapMapIterator* self, ValaHashMap* value);
+static gboolean vala_hash_map_map_iterator_real_next (ValaMapIterator* base);
+static gpointer vala_hash_map_map_iterator_real_get_key (ValaMapIterator* base);
+static gpointer vala_hash_map_map_iterator_real_get_value (ValaMapIterator* base);
+static void vala_hash_map_map_iterator_finalize (ValaMapIterator* obj);
 #define VALA_HASH_MAP_KEY_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VALA_HASH_MAP_TYPE_KEY_ITERATOR, ValaHashMapKeyIteratorPrivate))
 enum  {
 	VALA_HASH_MAP_KEY_ITERATOR_DUMMY_PROPERTY
@@ -507,6 +588,17 @@ static ValaCollection* vala_hash_map_real_get_values (ValaMap* base) {
 }
 
 
+static ValaMapIterator* vala_hash_map_real_map_iterator (ValaMap* base) {
+	ValaHashMap * self;
+	ValaMapIterator* result = NULL;
+	ValaHashMapMapIterator* _tmp0_;
+	self = (ValaHashMap*) base;
+	_tmp0_ = vala_hash_map_map_iterator_new (self->priv->k_type, (GBoxedCopyFunc) self->priv->k_dup_func, self->priv->k_destroy_func, self->priv->v_type, (GBoxedCopyFunc) self->priv->v_dup_func, self->priv->v_destroy_func, self);
+	result = (ValaMapIterator*) _tmp0_;
+	return result;
+}
+
+
 static ValaHashMapNode** vala_hash_map_lookup_node (ValaHashMap* self, gconstpointer key) {
 	ValaHashMapNode** result = NULL;
 	GHashFunc _tmp0_;
@@ -1203,6 +1295,185 @@ static GType vala_hash_map_key_set_get_type (void) {
 }
 
 
+static ValaHashMapMapIterator* vala_hash_map_map_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, ValaHashMap* map) {
+	ValaHashMapMapIterator* self = NULL;
+	ValaHashMap* _tmp0_;
+	g_return_val_if_fail (map != NULL, NULL);
+	self = (ValaHashMapMapIterator*) vala_map_iterator_construct (object_type, k_type, (GBoxedCopyFunc) k_dup_func, k_destroy_func, v_type, (GBoxedCopyFunc) v_dup_func, v_destroy_func);
+	self->priv->k_type = k_type;
+	self->priv->k_dup_func = k_dup_func;
+	self->priv->k_destroy_func = k_destroy_func;
+	self->priv->v_type = v_type;
+	self->priv->v_dup_func = v_dup_func;
+	self->priv->v_destroy_func = v_destroy_func;
+	_tmp0_ = map;
+	vala_hash_map_map_iterator_set_map (self, _tmp0_);
+	return self;
+}
+
+
+static ValaHashMapMapIterator* vala_hash_map_map_iterator_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, ValaHashMap* map) {
+	return vala_hash_map_map_iterator_construct (VALA_HASH_MAP_TYPE_MAP_ITERATOR, k_type, k_dup_func, k_destroy_func, v_type, v_dup_func, v_destroy_func, map);
+}
+
+
+static gboolean vala_hash_map_map_iterator_real_next (ValaMapIterator* base) {
+	ValaHashMapMapIterator * self;
+	gboolean result = FALSE;
+	ValaHashMapNode* _tmp0_;
+	ValaHashMapNode* _tmp14_;
+	self = (ValaHashMapMapIterator*) base;
+	_tmp0_ = self->priv->_node;
+	if (_tmp0_ != NULL) {
+		ValaHashMapNode* _tmp1_;
+		ValaHashMapNode* _tmp2_;
+		_tmp1_ = self->priv->_node;
+		_tmp2_ = _tmp1_->next;
+		self->priv->_node = _tmp2_;
+	}
+	while (TRUE) {
+		gboolean _tmp3_ = FALSE;
+		ValaHashMapNode* _tmp4_;
+		gboolean _tmp8_;
+		gint _tmp9_;
+		ValaHashMap* _tmp10_;
+		ValaHashMapNode** _tmp11_;
+		gint _tmp11__length1;
+		gint _tmp12_;
+		ValaHashMapNode* _tmp13_;
+		_tmp4_ = self->priv->_node;
+		if (_tmp4_ == NULL) {
+			gint _tmp5_;
+			ValaHashMap* _tmp6_;
+			gint _tmp7_;
+			_tmp5_ = self->priv->_index;
+			_tmp6_ = self->priv->_map;
+			_tmp7_ = _tmp6_->priv->_array_size;
+			_tmp3_ = (_tmp5_ + 1) < _tmp7_;
+		} else {
+			_tmp3_ = FALSE;
+		}
+		_tmp8_ = _tmp3_;
+		if (!_tmp8_) {
+			break;
+		}
+		_tmp9_ = self->priv->_index;
+		self->priv->_index = _tmp9_ + 1;
+		_tmp10_ = self->priv->_map;
+		_tmp11_ = _tmp10_->priv->_nodes;
+		_tmp11__length1 = _tmp10_->priv->_nodes_length1;
+		_tmp12_ = self->priv->_index;
+		_tmp13_ = _tmp11_[_tmp12_];
+		self->priv->_node = _tmp13_;
+	}
+	_tmp14_ = self->priv->_node;
+	result = _tmp14_ != NULL;
+	return result;
+}
+
+
+static gpointer vala_hash_map_map_iterator_real_get_key (ValaMapIterator* base) {
+	ValaHashMapMapIterator * self;
+	gpointer result = NULL;
+	gint _tmp0_;
+	ValaHashMap* _tmp1_;
+	gint _tmp2_;
+	ValaHashMapNode* _tmp3_;
+	ValaHashMapNode* _tmp4_;
+	gconstpointer _tmp5_;
+	gpointer _tmp6_;
+	self = (ValaHashMapMapIterator*) base;
+	_tmp0_ = self->priv->_stamp;
+	_tmp1_ = self->priv->_map;
+	_tmp2_ = _tmp1_->priv->_stamp;
+	g_assert (_tmp0_ == _tmp2_);
+	_tmp3_ = self->priv->_node;
+	g_assert (_tmp3_ != NULL);
+	_tmp4_ = self->priv->_node;
+	_tmp5_ = _tmp4_->key;
+	_tmp6_ = ((_tmp5_ != NULL) && (self->priv->k_dup_func != NULL)) ? self->priv->k_dup_func ((gpointer) _tmp5_) : ((gpointer) _tmp5_);
+	result = _tmp6_;
+	return result;
+}
+
+
+static gpointer vala_hash_map_map_iterator_real_get_value (ValaMapIterator* base) {
+	ValaHashMapMapIterator * self;
+	gpointer result = NULL;
+	gint _tmp0_;
+	ValaHashMap* _tmp1_;
+	gint _tmp2_;
+	ValaHashMapNode* _tmp3_;
+	ValaHashMapNode* _tmp4_;
+	gconstpointer _tmp5_;
+	gpointer _tmp6_;
+	self = (ValaHashMapMapIterator*) base;
+	_tmp0_ = self->priv->_stamp;
+	_tmp1_ = self->priv->_map;
+	_tmp2_ = _tmp1_->priv->_stamp;
+	g_assert (_tmp0_ == _tmp2_);
+	_tmp3_ = self->priv->_node;
+	g_assert (_tmp3_ != NULL);
+	_tmp4_ = self->priv->_node;
+	_tmp5_ = _tmp4_->value;
+	_tmp6_ = ((_tmp5_ != NULL) && (self->priv->v_dup_func != NULL)) ? self->priv->v_dup_func ((gpointer) _tmp5_) : ((gpointer) _tmp5_);
+	result = _tmp6_;
+	return result;
+}
+
+
+static void vala_hash_map_map_iterator_set_map (ValaHashMapMapIterator* self, ValaHashMap* value) {
+	ValaHashMap* _tmp0_;
+	ValaHashMap* _tmp1_;
+	ValaHashMap* _tmp2_;
+	gint _tmp3_;
+	g_return_if_fail (self != NULL);
+	_tmp0_ = value;
+	_tmp1_ = _vala_map_ref0 (_tmp0_);
+	_vala_map_unref0 (self->priv->_map);
+	self->priv->_map = _tmp1_;
+	_tmp2_ = self->priv->_map;
+	_tmp3_ = _tmp2_->priv->_stamp;
+	self->priv->_stamp = _tmp3_;
+}
+
+
+static void vala_hash_map_map_iterator_class_init (ValaHashMapMapIteratorClass * klass) {
+	vala_hash_map_map_iterator_parent_class = g_type_class_peek_parent (klass);
+	VALA_MAP_ITERATOR_CLASS (klass)->finalize = vala_hash_map_map_iterator_finalize;
+	g_type_class_add_private (klass, sizeof (ValaHashMapMapIteratorPrivate));
+	VALA_MAP_ITERATOR_CLASS (klass)->next = vala_hash_map_map_iterator_real_next;
+	VALA_MAP_ITERATOR_CLASS (klass)->get_key = vala_hash_map_map_iterator_real_get_key;
+	VALA_MAP_ITERATOR_CLASS (klass)->get_value = vala_hash_map_map_iterator_real_get_value;
+}
+
+
+static void vala_hash_map_map_iterator_instance_init (ValaHashMapMapIterator * self) {
+	self->priv = VALA_HASH_MAP_MAP_ITERATOR_GET_PRIVATE (self);
+	self->priv->_index = -1;
+}
+
+
+static void vala_hash_map_map_iterator_finalize (ValaMapIterator* obj) {
+	ValaHashMapMapIterator * self;
+	self = VALA_HASH_MAP_MAP_ITERATOR (obj);
+	_vala_map_unref0 (self->priv->_map);
+	VALA_MAP_ITERATOR_CLASS (vala_hash_map_map_iterator_parent_class)->finalize (obj);
+}
+
+
+static GType vala_hash_map_map_iterator_get_type (void) {
+	static volatile gsize vala_hash_map_map_iterator_type_id__volatile = 0;
+	if (g_once_init_enter (&vala_hash_map_map_iterator_type_id__volatile)) {
+		static const GTypeInfo g_define_type_info = { sizeof (ValaHashMapMapIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_hash_map_map_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaHashMapMapIterator), 0, (GInstanceInitFunc) vala_hash_map_map_iterator_instance_init, NULL };
+		GType vala_hash_map_map_iterator_type_id;
+		vala_hash_map_map_iterator_type_id = g_type_register_static (VALA_TYPE_MAP_ITERATOR, "ValaHashMapMapIterator", &g_define_type_info, 0);
+		g_once_init_leave (&vala_hash_map_map_iterator_type_id__volatile, vala_hash_map_map_iterator_type_id);
+	}
+	return vala_hash_map_map_iterator_type_id__volatile;
+}
+
+
 static ValaHashMapKeyIterator* vala_hash_map_key_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, ValaHashMap* map) {
 	ValaHashMapKeyIterator* self = NULL;
 	ValaHashMap* _tmp0_;
@@ -1694,6 +1965,7 @@ static void vala_hash_map_class_init (ValaHashMapClass * klass) {
 	g_type_class_add_private (klass, sizeof (ValaHashMapPrivate));
 	VALA_MAP_CLASS (klass)->get_keys = vala_hash_map_real_get_keys;
 	VALA_MAP_CLASS (klass)->get_values = vala_hash_map_real_get_values;
+	VALA_MAP_CLASS (klass)->map_iterator = vala_hash_map_real_map_iterator;
 	VALA_MAP_CLASS (klass)->contains = vala_hash_map_real_contains;
 	VALA_MAP_CLASS (klass)->get = vala_hash_map_real_get;
 	VALA_MAP_CLASS (klass)->set = vala_hash_map_real_set;
diff --git a/gee/hashmap.vala b/gee/hashmap.vala
index 5159fe3..1fb2ed3 100644
--- a/gee/hashmap.vala
+++ b/gee/hashmap.vala
@@ -74,6 +74,10 @@ public class Vala.HashMap<K,V> : Map<K,V> {
 		return new ValueCollection<K,V> (this);
 	}
 
+	public override Vala.MapIterator<K,V> map_iterator () {
+		return new MapIterator<K,V> (this);
+	}
+
 	private Node<K,V>** lookup_node (K key) {
 		uint hash_value = _key_hash_func (key);
 		Node<K,V>** node = &_nodes[hash_value % _array_size];
@@ -224,6 +228,49 @@ public class Vala.HashMap<K,V> : Map<K,V> {
 		}
 	}
 
+	private class MapIterator<K,V> : Vala.MapIterator<K, V> {
+		public HashMap<K,V> map {
+			set {
+				_map = value;
+				_stamp = _map._stamp;
+			}
+		}
+
+		private HashMap<K,V> _map;
+		private int _index = -1;
+		private weak Node<K,V> _node;
+
+		// concurrent modification protection
+		private int _stamp;
+
+		public MapIterator (HashMap map) {
+			this.map = map;
+		}
+
+		public override bool next () {
+			if (_node != null) {
+				_node = _node.next;
+			}
+			while (_node == null && _index + 1 < _map._array_size) {
+				_index++;
+				_node = _map._nodes[_index];
+			}
+			return (_node != null);
+		}
+
+		public override K? get_key () {
+			assert (_stamp == _map._stamp);
+			assert (_node != null);
+			return _node.key;
+		}
+
+		public override V? get_value () {
+			assert (_stamp == _map._stamp);
+			assert (_node != null);
+			return _node.value;
+		}
+	}
+
 	private class KeyIterator<K,V> : Iterator<K> {
 		public HashMap<K,V> map {
 			set {
diff --git a/gee/map.c b/gee/map.c
index c9d5b53..8f4facc 100644
--- a/gee/map.c
+++ b/gee/map.c
@@ -68,6 +68,16 @@ typedef struct _ValaCollectionClass ValaCollectionClass;
 
 typedef struct _ValaSet ValaSet;
 typedef struct _ValaSetClass ValaSetClass;
+
+#define VALA_TYPE_MAP_ITERATOR (vala_map_iterator_get_type ())
+#define VALA_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_MAP_ITERATOR, ValaMapIterator))
+#define VALA_MAP_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_MAP_ITERATOR, ValaMapIteratorClass))
+#define VALA_IS_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_MAP_ITERATOR))
+#define VALA_IS_MAP_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_MAP_ITERATOR))
+#define VALA_MAP_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_MAP_ITERATOR, ValaMapIteratorClass))
+
+typedef struct _ValaMapIterator ValaMapIterator;
+typedef struct _ValaMapIteratorClass ValaMapIteratorClass;
 typedef struct _ValaParamSpecMap ValaParamSpecMap;
 
 struct _ValaMap {
@@ -86,6 +96,7 @@ struct _ValaMapClass {
 	void (*set) (ValaMap* self, gconstpointer key, gconstpointer value);
 	gboolean (*remove) (ValaMap* self, gconstpointer key);
 	void (*clear) (ValaMap* self);
+	ValaMapIterator* (*map_iterator) (ValaMap* self);
 	gint (*get_size) (ValaMap* self);
 };
 
@@ -121,6 +132,13 @@ gpointer vala_value_get_iterable (const GValue* value);
 GType vala_iterable_get_type (void) G_GNUC_CONST;
 GType vala_collection_get_type (void) G_GNUC_CONST;
 GType vala_set_get_type (void) G_GNUC_CONST;
+gpointer vala_map_iterator_ref (gpointer instance);
+void vala_map_iterator_unref (gpointer instance);
+GParamSpec* vala_param_spec_map_iterator (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void vala_value_set_map_iterator (GValue* value, gpointer v_object);
+void vala_value_take_map_iterator (GValue* value, gpointer v_object);
+gpointer vala_value_get_map_iterator (const GValue* value);
+GType vala_map_iterator_get_type (void) G_GNUC_CONST;
 #define VALA_MAP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VALA_TYPE_MAP, ValaMapPrivate))
 enum  {
 	VALA_MAP_DUMMY_PROPERTY
@@ -139,6 +157,8 @@ gboolean vala_map_remove (ValaMap* self, gconstpointer key);
 static gboolean vala_map_real_remove (ValaMap* self, gconstpointer key);
 void vala_map_clear (ValaMap* self);
 static void vala_map_real_clear (ValaMap* self);
+ValaMapIterator* vala_map_map_iterator (ValaMap* self);
+static ValaMapIterator* vala_map_real_map_iterator (ValaMap* self);
 ValaMap* vala_map_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func);
 gint vala_map_get_size (ValaMap* self);
 static void vala_map_finalize (ValaMap* obj);
@@ -270,6 +290,25 @@ void vala_map_clear (ValaMap* self) {
 }
 
 
+/**
+ * Returns a Iterator that can be used for simple iteration over a
+ * map.
+ *
+ * @return a Iterator that can be used for simple iteration over a
+ *         map
+ */
+static ValaMapIterator* vala_map_real_map_iterator (ValaMap* self) {
+	g_critical ("Type `%s' does not implement abstract method `vala_map_map_iterator'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+	return NULL;
+}
+
+
+ValaMapIterator* vala_map_map_iterator (ValaMap* self) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_MAP_GET_CLASS (self)->map_iterator (self);
+}
+
+
 ValaMap* vala_map_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func) {
 	ValaMap* self = NULL;
 	self = (ValaMap*) g_type_create_instance (object_type);
@@ -410,6 +449,7 @@ static void vala_map_class_init (ValaMapClass * klass) {
 	VALA_MAP_CLASS (klass)->set = vala_map_real_set;
 	VALA_MAP_CLASS (klass)->remove = vala_map_real_remove;
 	VALA_MAP_CLASS (klass)->clear = vala_map_real_clear;
+	VALA_MAP_CLASS (klass)->map_iterator = vala_map_real_map_iterator;
 }
 
 
diff --git a/gee/map.vala b/gee/map.vala
index e78f794..2c96a3d 100644
--- a/gee/map.vala
+++ b/gee/map.vala
@@ -84,5 +84,14 @@ public abstract class Vala.Map<K,V> {
 	 * read-only collections.
 	 */
 	public abstract void clear ();
+
+	/**
+	 * Returns a Iterator that can be used for simple iteration over a
+	 * map.
+	 *
+	 * @return a Iterator that can be used for simple iteration over a
+	 *         map
+	 */
+	public abstract MapIterator<K,V> map_iterator ();
 }
 
diff --git a/gee/mapiterator.c b/gee/mapiterator.c
new file mode 100644
index 0000000..e507d97
--- /dev/null
+++ b/gee/mapiterator.c
@@ -0,0 +1,325 @@
+/* mapiterator.c generated by valac, the Vala compiler
+ * generated from mapiterator.vala, do not modify */
+
+/* mapiterator.vala
+ *
+ * Copyright (C) 2011  Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ *
+ * Author:
+ * 	Florian Brosch <flo brosch gmail com>
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define VALA_TYPE_MAP_ITERATOR (vala_map_iterator_get_type ())
+#define VALA_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_MAP_ITERATOR, ValaMapIterator))
+#define VALA_MAP_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_MAP_ITERATOR, ValaMapIteratorClass))
+#define VALA_IS_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_MAP_ITERATOR))
+#define VALA_IS_MAP_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_MAP_ITERATOR))
+#define VALA_MAP_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_MAP_ITERATOR, ValaMapIteratorClass))
+
+typedef struct _ValaMapIterator ValaMapIterator;
+typedef struct _ValaMapIteratorClass ValaMapIteratorClass;
+typedef struct _ValaMapIteratorPrivate ValaMapIteratorPrivate;
+typedef struct _ValaParamSpecMapIterator ValaParamSpecMapIterator;
+
+struct _ValaMapIterator {
+	GTypeInstance parent_instance;
+	volatile int ref_count;
+	ValaMapIteratorPrivate * priv;
+};
+
+struct _ValaMapIteratorClass {
+	GTypeClass parent_class;
+	void (*finalize) (ValaMapIterator *self);
+	gboolean (*next) (ValaMapIterator* self);
+	gpointer (*get_key) (ValaMapIterator* self);
+	gpointer (*get_value) (ValaMapIterator* self);
+};
+
+struct _ValaMapIteratorPrivate {
+	GType k_type;
+	GBoxedCopyFunc k_dup_func;
+	GDestroyNotify k_destroy_func;
+	GType v_type;
+	GBoxedCopyFunc v_dup_func;
+	GDestroyNotify v_destroy_func;
+};
+
+struct _ValaParamSpecMapIterator {
+	GParamSpec parent_instance;
+};
+
+
+static gpointer vala_map_iterator_parent_class = NULL;
+
+gpointer vala_map_iterator_ref (gpointer instance);
+void vala_map_iterator_unref (gpointer instance);
+GParamSpec* vala_param_spec_map_iterator (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void vala_value_set_map_iterator (GValue* value, gpointer v_object);
+void vala_value_take_map_iterator (GValue* value, gpointer v_object);
+gpointer vala_value_get_map_iterator (const GValue* value);
+GType vala_map_iterator_get_type (void) G_GNUC_CONST;
+#define VALA_MAP_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VALA_TYPE_MAP_ITERATOR, ValaMapIteratorPrivate))
+enum  {
+	VALA_MAP_ITERATOR_DUMMY_PROPERTY
+};
+gboolean vala_map_iterator_next (ValaMapIterator* self);
+static gboolean vala_map_iterator_real_next (ValaMapIterator* self);
+gpointer vala_map_iterator_get_key (ValaMapIterator* self);
+static gpointer vala_map_iterator_real_get_key (ValaMapIterator* self);
+gpointer vala_map_iterator_get_value (ValaMapIterator* self);
+static gpointer vala_map_iterator_real_get_value (ValaMapIterator* self);
+ValaMapIterator* vala_map_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func);
+static void vala_map_iterator_finalize (ValaMapIterator* obj);
+
+
+/**
+ * Advances to the next element in the iteration.
+ *
+ * @return true if the iterator has a next element
+ */
+static gboolean vala_map_iterator_real_next (ValaMapIterator* self) {
+	g_critical ("Type `%s' does not implement abstract method `vala_map_iterator_next'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+	return FALSE;
+}
+
+
+gboolean vala_map_iterator_next (ValaMapIterator* self) {
+	g_return_val_if_fail (self != NULL, FALSE);
+	return VALA_MAP_ITERATOR_GET_CLASS (self)->next (self);
+}
+
+
+/**
+ * Returns the current key in the iteration.
+ *
+ * @return the current key in the iteration
+ */
+static gpointer vala_map_iterator_real_get_key (ValaMapIterator* self) {
+	g_critical ("Type `%s' does not implement abstract method `vala_map_iterator_get_key'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+	return NULL;
+}
+
+
+gpointer vala_map_iterator_get_key (ValaMapIterator* self) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_MAP_ITERATOR_GET_CLASS (self)->get_key (self);
+}
+
+
+/**
+ * Returns the current value in the iteration.
+ *
+ * @return the current value in the iteration
+ */
+static gpointer vala_map_iterator_real_get_value (ValaMapIterator* self) {
+	g_critical ("Type `%s' does not implement abstract method `vala_map_iterator_get_value'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+	return NULL;
+}
+
+
+gpointer vala_map_iterator_get_value (ValaMapIterator* self) {
+	g_return_val_if_fail (self != NULL, NULL);
+	return VALA_MAP_ITERATOR_GET_CLASS (self)->get_value (self);
+}
+
+
+ValaMapIterator* vala_map_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func) {
+	ValaMapIterator* self = NULL;
+	self = (ValaMapIterator*) g_type_create_instance (object_type);
+	self->priv->k_type = k_type;
+	self->priv->k_dup_func = k_dup_func;
+	self->priv->k_destroy_func = k_destroy_func;
+	self->priv->v_type = v_type;
+	self->priv->v_dup_func = v_dup_func;
+	self->priv->v_destroy_func = v_destroy_func;
+	return self;
+}
+
+
+static void vala_value_map_iterator_init (GValue* value) {
+	value->data[0].v_pointer = NULL;
+}
+
+
+static void vala_value_map_iterator_free_value (GValue* value) {
+	if (value->data[0].v_pointer) {
+		vala_map_iterator_unref (value->data[0].v_pointer);
+	}
+}
+
+
+static void vala_value_map_iterator_copy_value (const GValue* src_value, GValue* dest_value) {
+	if (src_value->data[0].v_pointer) {
+		dest_value->data[0].v_pointer = vala_map_iterator_ref (src_value->data[0].v_pointer);
+	} else {
+		dest_value->data[0].v_pointer = NULL;
+	}
+}
+
+
+static gpointer vala_value_map_iterator_peek_pointer (const GValue* value) {
+	return value->data[0].v_pointer;
+}
+
+
+static gchar* vala_value_map_iterator_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+	if (collect_values[0].v_pointer) {
+		ValaMapIterator* object;
+		object = collect_values[0].v_pointer;
+		if (object->parent_instance.g_class == NULL) {
+			return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+		} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+			return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+		}
+		value->data[0].v_pointer = vala_map_iterator_ref (object);
+	} else {
+		value->data[0].v_pointer = NULL;
+	}
+	return NULL;
+}
+
+
+static gchar* vala_value_map_iterator_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+	ValaMapIterator** object_p;
+	object_p = collect_values[0].v_pointer;
+	if (!object_p) {
+		return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+	}
+	if (!value->data[0].v_pointer) {
+		*object_p = NULL;
+	} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+		*object_p = value->data[0].v_pointer;
+	} else {
+		*object_p = vala_map_iterator_ref (value->data[0].v_pointer);
+	}
+	return NULL;
+}
+
+
+GParamSpec* vala_param_spec_map_iterator (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+	ValaParamSpecMapIterator* spec;
+	g_return_val_if_fail (g_type_is_a (object_type, VALA_TYPE_MAP_ITERATOR), NULL);
+	spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+	G_PARAM_SPEC (spec)->value_type = object_type;
+	return G_PARAM_SPEC (spec);
+}
+
+
+gpointer vala_value_get_map_iterator (const GValue* value) {
+	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_TYPE_MAP_ITERATOR), NULL);
+	return value->data[0].v_pointer;
+}
+
+
+void vala_value_set_map_iterator (GValue* value, gpointer v_object) {
+	ValaMapIterator* old;
+	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_TYPE_MAP_ITERATOR));
+	old = value->data[0].v_pointer;
+	if (v_object) {
+		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_TYPE_MAP_ITERATOR));
+		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+		value->data[0].v_pointer = v_object;
+		vala_map_iterator_ref (value->data[0].v_pointer);
+	} else {
+		value->data[0].v_pointer = NULL;
+	}
+	if (old) {
+		vala_map_iterator_unref (old);
+	}
+}
+
+
+void vala_value_take_map_iterator (GValue* value, gpointer v_object) {
+	ValaMapIterator* old;
+	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, VALA_TYPE_MAP_ITERATOR));
+	old = value->data[0].v_pointer;
+	if (v_object) {
+		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, VALA_TYPE_MAP_ITERATOR));
+		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+		value->data[0].v_pointer = v_object;
+	} else {
+		value->data[0].v_pointer = NULL;
+	}
+	if (old) {
+		vala_map_iterator_unref (old);
+	}
+}
+
+
+static void vala_map_iterator_class_init (ValaMapIteratorClass * klass) {
+	vala_map_iterator_parent_class = g_type_class_peek_parent (klass);
+	VALA_MAP_ITERATOR_CLASS (klass)->finalize = vala_map_iterator_finalize;
+	g_type_class_add_private (klass, sizeof (ValaMapIteratorPrivate));
+	VALA_MAP_ITERATOR_CLASS (klass)->next = vala_map_iterator_real_next;
+	VALA_MAP_ITERATOR_CLASS (klass)->get_key = vala_map_iterator_real_get_key;
+	VALA_MAP_ITERATOR_CLASS (klass)->get_value = vala_map_iterator_real_get_value;
+}
+
+
+static void vala_map_iterator_instance_init (ValaMapIterator * self) {
+	self->priv = VALA_MAP_ITERATOR_GET_PRIVATE (self);
+	self->ref_count = 1;
+}
+
+
+static void vala_map_iterator_finalize (ValaMapIterator* obj) {
+	ValaMapIterator * self;
+	self = VALA_MAP_ITERATOR (obj);
+}
+
+
+/**
+ * An iterator over a map.
+ */
+GType vala_map_iterator_get_type (void) {
+	static volatile gsize vala_map_iterator_type_id__volatile = 0;
+	if (g_once_init_enter (&vala_map_iterator_type_id__volatile)) {
+		static const GTypeValueTable g_define_type_value_table = { vala_value_map_iterator_init, vala_value_map_iterator_free_value, vala_value_map_iterator_copy_value, vala_value_map_iterator_peek_pointer, "p", vala_value_map_iterator_collect_value, "p", vala_value_map_iterator_lcopy_value };
+		static const GTypeInfo g_define_type_info = { sizeof (ValaMapIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_map_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaMapIterator), 0, (GInstanceInitFunc) vala_map_iterator_instance_init, &g_define_type_value_table };
+		static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+		GType vala_map_iterator_type_id;
+		vala_map_iterator_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ValaMapIterator", &g_define_type_info, &g_define_type_fundamental_info, G_TYPE_FLAG_ABSTRACT);
+		g_once_init_leave (&vala_map_iterator_type_id__volatile, vala_map_iterator_type_id);
+	}
+	return vala_map_iterator_type_id__volatile;
+}
+
+
+gpointer vala_map_iterator_ref (gpointer instance) {
+	ValaMapIterator* self;
+	self = instance;
+	g_atomic_int_inc (&self->ref_count);
+	return instance;
+}
+
+
+void vala_map_iterator_unref (gpointer instance) {
+	ValaMapIterator* self;
+	self = instance;
+	if (g_atomic_int_dec_and_test (&self->ref_count)) {
+		VALA_MAP_ITERATOR_GET_CLASS (self)->finalize (self);
+		g_type_free_instance ((GTypeInstance *) self);
+	}
+}
+
+
+
diff --git a/gee/mapiterator.vala b/gee/mapiterator.vala
new file mode 100644
index 0000000..78243c2
--- /dev/null
+++ b/gee/mapiterator.vala
@@ -0,0 +1,52 @@
+/* mapiterator.vala
+ *
+ * Copyright (C) 2011  Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ *
+ * Author:
+ * 	Florian Brosch <flo brosch gmail com>
+ */
+
+
+
+/**
+ * An iterator over a map.
+ */
+public abstract class Vala.MapIterator<K,V> {
+	/**
+	 * Advances to the next element in the iteration.
+	 *
+	 * @return true if the iterator has a next element
+	 */
+	public abstract bool next ();
+
+	/**
+	 * Returns the current key in the iteration.
+	 *
+	 * @return the current key in the iteration
+	 */
+	public abstract K get_key ();
+
+	/**
+	 * Returns the current value in the iteration.
+	 *
+	 * @return the current value in the iteration
+	 */
+	public abstract V get_value ();
+}
+
+
+
diff --git a/gee/valagee.h b/gee/valagee.h
index 13b75c6..5641547 100644
--- a/gee/valagee.h
+++ b/gee/valagee.h
@@ -85,6 +85,16 @@ typedef struct _ValaMapPrivate ValaMapPrivate;
 typedef struct _ValaSet ValaSet;
 typedef struct _ValaSetClass ValaSetClass;
 
+#define VALA_TYPE_MAP_ITERATOR (vala_map_iterator_get_type ())
+#define VALA_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_MAP_ITERATOR, ValaMapIterator))
+#define VALA_MAP_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_MAP_ITERATOR, ValaMapIteratorClass))
+#define VALA_IS_MAP_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_MAP_ITERATOR))
+#define VALA_IS_MAP_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_MAP_ITERATOR))
+#define VALA_MAP_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_MAP_ITERATOR, ValaMapIteratorClass))
+
+typedef struct _ValaMapIterator ValaMapIterator;
+typedef struct _ValaMapIteratorClass ValaMapIteratorClass;
+
 #define VALA_TYPE_HASH_MAP (vala_hash_map_get_type ())
 #define VALA_HASH_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_HASH_MAP, ValaHashMap))
 #define VALA_HASH_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_HASH_MAP, ValaHashMapClass))
@@ -107,6 +117,7 @@ typedef struct _ValaSetPrivate ValaSetPrivate;
 typedef struct _ValaHashSet ValaHashSet;
 typedef struct _ValaHashSetClass ValaHashSetClass;
 typedef struct _ValaHashSetPrivate ValaHashSetPrivate;
+typedef struct _ValaMapIteratorPrivate ValaMapIteratorPrivate;
 typedef struct _ValaIteratorPrivate ValaIteratorPrivate;
 
 struct _ValaIterable {
@@ -175,6 +186,7 @@ struct _ValaMapClass {
 	void (*set) (ValaMap* self, gconstpointer key, gconstpointer value);
 	gboolean (*remove) (ValaMap* self, gconstpointer key);
 	void (*clear) (ValaMap* self);
+	ValaMapIterator* (*map_iterator) (ValaMap* self);
 	gint (*get_size) (ValaMap* self);
 };
 
@@ -205,6 +217,20 @@ struct _ValaHashSetClass {
 	ValaSetClass parent_class;
 };
 
+struct _ValaMapIterator {
+	GTypeInstance parent_instance;
+	volatile int ref_count;
+	ValaMapIteratorPrivate * priv;
+};
+
+struct _ValaMapIteratorClass {
+	GTypeClass parent_class;
+	void (*finalize) (ValaMapIterator *self);
+	gboolean (*next) (ValaMapIterator* self);
+	gpointer (*get_key) (ValaMapIterator* self);
+	gpointer (*get_value) (ValaMapIterator* self);
+};
+
 struct _ValaIterator {
 	GTypeInstance parent_instance;
 	volatile int ref_count;
@@ -253,6 +279,13 @@ void vala_value_take_map (GValue* value, gpointer v_object);
 gpointer vala_value_get_map (const GValue* value);
 GType vala_map_get_type (void) G_GNUC_CONST;
 GType vala_set_get_type (void) G_GNUC_CONST;
+gpointer vala_map_iterator_ref (gpointer instance);
+void vala_map_iterator_unref (gpointer instance);
+GParamSpec* vala_param_spec_map_iterator (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void vala_value_set_map_iterator (GValue* value, gpointer v_object);
+void vala_value_take_map_iterator (GValue* value, gpointer v_object);
+gpointer vala_value_get_map_iterator (const GValue* value);
+GType vala_map_iterator_get_type (void) G_GNUC_CONST;
 GType vala_hash_map_get_type (void) G_GNUC_CONST;
 ValaHashMap* vala_hash_map_new (GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GHashFunc key_hash_func, GEqualFunc key_equal_func, GEqualFunc value_equal_func);
 ValaHashMap* vala_hash_map_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func, GHashFunc key_hash_func, GEqualFunc key_equal_func, GEqualFunc value_equal_func);
@@ -267,6 +300,10 @@ void vala_hash_set_set_equal_func (ValaHashSet* self, GEqualFunc value);
 GType vala_iterable_get_element_type (ValaIterable* self);
 ValaIterator* vala_iterable_iterator (ValaIterable* self);
 ValaIterable* vala_iterable_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func);
+gboolean vala_map_iterator_next (ValaMapIterator* self);
+gpointer vala_map_iterator_get_key (ValaMapIterator* self);
+gpointer vala_map_iterator_get_value (ValaMapIterator* self);
+ValaMapIterator* vala_map_iterator_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func);
 gboolean vala_iterator_next (ValaIterator* self);
 gpointer vala_iterator_get (ValaIterator* self);
 ValaIterator* vala_iterator_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func);
@@ -283,6 +320,7 @@ gpointer vala_map_get (ValaMap* self, gconstpointer key);
 void vala_map_set (ValaMap* self, gconstpointer key, gconstpointer value);
 gboolean vala_map_remove (ValaMap* self, gconstpointer key);
 void vala_map_clear (ValaMap* self);
+ValaMapIterator* vala_map_map_iterator (ValaMap* self);
 ValaMap* vala_map_construct (GType object_type, GType k_type, GBoxedCopyFunc k_dup_func, GDestroyNotify k_destroy_func, GType v_type, GBoxedCopyFunc v_dup_func, GDestroyNotify v_destroy_func);
 gint vala_map_get_size (ValaMap* self);
 ValaSet* vala_set_construct (GType object_type, GType g_type, GBoxedCopyFunc g_dup_func, GDestroyNotify g_destroy_func);
diff --git a/gobject-introspection/Makefile.in b/gobject-introspection/Makefile.in
index 49b604c..82c9fbf 100644
--- a/gobject-introspection/Makefile.in
+++ b/gobject-introspection/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -17,6 +16,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
@@ -36,6 +52,7 @@ host_triplet = @host@
 pkglibexec_PROGRAMS = gen-introspect$(EXEEXT)
 subdir = gobject-introspection
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(top_srcdir)/build-aux/depcomp $(top_srcdir)/build-aux/ylwrap \
 	scannerlexer.c scannerparser.c scannerparser.h
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
@@ -56,8 +73,8 @@ am__objects_1 =
 am_libgidl_la_OBJECTS = gidlmodule.lo gidlnode.lo gidlparser.lo \
 	gmetadata.lo $(am__objects_1)
 libgidl_la_OBJECTS = $(am_libgidl_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_ AM_V@)
+am__v_lt_ = $(am__v_lt_ AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__installdirs = "$(DESTDIR)$(pkglibexecdir)"
 PROGRAMS = $(pkglibexec_PROGRAMS)
@@ -78,39 +95,46 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
 	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
 	$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_ AM_V@)
+am__v_CC_ = $(am__v_CC_ AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+AM_V_at = $(am__v_at_ AM_V@)
+am__v_at_ = $(am__v_at_ AM_DEFAULT_V@)
 am__v_at_0 = @
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_CCLD = $(am__v_CCLD_ AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
 @MAINTAINER_MODE_FALSE am__skiplex = test -f $@ ||
-LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
+LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS)
 LTLEXCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS)
-AM_V_LEX = $(am__v_LEX_$(V))
-am__v_LEX_ = $(am__v_LEX_$(AM_DEFAULT_VERBOSITY))
-am__v_LEX_0 = @echo "  LEX   " $@;
+	$(LIBTOOLFLAGS) --mode=compile $(LEX) $(AM_LFLAGS) $(LFLAGS)
+AM_V_LEX = $(am__v_LEX_ AM_V@)
+am__v_LEX_ = $(am__v_LEX_ AM_DEFAULT_V@)
+am__v_LEX_0 = @echo "  LEX     " $@;
 YLWRAP = $(top_srcdir)/build-aux/ylwrap
 @MAINTAINER_MODE_FALSE am__skipyacc = test -f $@ ||
-YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
+am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \
+		   -e s/c++$$/h++/ -e s/c$$/h/
+YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS)
 LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS)
-AM_V_YACC = $(am__v_YACC_$(V))
-am__v_YACC_ = $(am__v_YACC_$(AM_DEFAULT_VERBOSITY))
-am__v_YACC_0 = @echo "  YACC  " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
+	$(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS)
+AM_V_YACC = $(am__v_YACC_ AM_V@)
+am__v_YACC_ = $(am__v_YACC_ AM_DEFAULT_V@)
+am__v_YACC_0 = @echo "  YACC    " $@;
+AM_V_GEN = $(am__v_GEN_ AM_V@)
+am__v_GEN_ = $(am__v_GEN_ AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
 SOURCES = $(libgidl_la_SOURCES) $(gen_introspect_SOURCES)
 DIST_SOURCES = $(libgidl_la_SOURCES) $(gen_introspect_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -238,7 +262,6 @@ libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 prefix = @prefix@
@@ -338,18 +361,23 @@ $(am__aclocal_m4_deps):
 
 clean-noinstLTLIBRARIES:
 	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
-	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-	  test "$$dir" != "$$p" || dir=.; \
-	  echo "rm -f \"$${dir}/so_locations\""; \
-	  rm -f "$${dir}/so_locations"; \
-	done
-libgidl.la: $(libgidl_la_OBJECTS) $(libgidl_la_DEPENDENCIES) 
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libgidl.la: $(libgidl_la_OBJECTS) $(libgidl_la_DEPENDENCIES) $(EXTRA_libgidl_la_DEPENDENCIES) 
 	$(AM_V_CCLD)$(LINK)  $(libgidl_la_OBJECTS) $(libgidl_la_LIBADD) $(LIBS)
 install-pkglibexecPROGRAMS: $(pkglibexec_PROGRAMS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkglibexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibexecdir)"
 	@list='$(pkglibexec_PROGRAMS)'; test -n "$(pkglibexecdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkglibexecdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkglibexecdir)" || exit 1; \
+	fi; \
 	for p in $$list; do echo "$$p $$p"; done | \
 	sed 's/$(EXEEXT)$$//' | \
 	while read p p1; do if test -f $$p || test -f $$p1; \
@@ -390,11 +418,9 @@ clean-pkglibexecPROGRAMS:
 	echo " rm -f" $$list; \
 	rm -f $$list
 scannerparser.h: scannerparser.c
-	@if test ! -f $@; then \
-	  rm -f scannerparser.c; \
-	  $(MAKE) $(AM_MAKEFLAGS) scannerparser.c; \
-	else :; fi
-gen-introspect$(EXEEXT): $(gen_introspect_OBJECTS) $(gen_introspect_DEPENDENCIES) 
+	@if test ! -f $@; then rm -f scannerparser.c; else :; fi
+	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) scannerparser.c; else :; fi
+gen-introspect$(EXEEXT): $(gen_introspect_OBJECTS) $(gen_introspect_DEPENDENCIES) $(EXTRA_gen_introspect_DEPENDENCIES) 
 	@rm -f gen-introspect$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(gen_introspect_OBJECTS) $(gen_introspect_LDADD) $(LIBS)
 
@@ -416,32 +442,29 @@ distclean-compile:
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(COMPILE) -c $<
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 .l.c:
 	$(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
 
 .y.c:
-	$(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
+	$(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE)
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -498,6 +521,20 @@ GTAGS:
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
 
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
@@ -550,10 +587,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -644,7 +686,7 @@ uninstall-am: uninstall-pkglibexecPROGRAMS
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
 	clean-libtool clean-noinstLTLIBRARIES clean-pkglibexecPROGRAMS \
-	ctags distclean distclean-compile distclean-generic \
+	cscopelist ctags distclean distclean-compile distclean-generic \
 	distclean-libtool distclean-tags distdir dvi dvi-am html \
 	html-am info info-am install install-am install-data \
 	install-data-am install-dvi install-dvi-am install-exec \
diff --git a/gobject-introspection/scannerparser.c b/gobject-introspection/scannerparser.c
index e2402c5..a630a06 100644
--- a/gobject-introspection/scannerparser.c
+++ b/gobject-introspection/scannerparser.c
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 2.5.  */
+/* A Bison parser, made by GNU Bison 2.5.1.  */
 
 /* Bison implementation for Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.5"
+#define YYBISON_VERSION "2.5.1"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -230,6 +230,14 @@ cdirective_free (CDirective *directive)
 /* Line 268 of yacc.c  */
 #line 232 "scannerparser.c"
 
+# ifndef YY_NULL
+#  if defined __cplusplus && 201103L <= __cplusplus
+#   define YY_NULL nullptr
+#  else
+#   define YY_NULL 0
+#  endif
+# endif
+
 /* Enabling traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -396,7 +404,7 @@ cdirective_free (CDirective *directive)
 typedef union YYSTYPE
 {
 
-/* Line 293 of yacc.c  */
+/* Line 295 of yacc.c  */
 #line 190 "scannerparser.y"
 
   char *str;
@@ -410,8 +418,8 @@ typedef union YYSTYPE
 
 
 
-/* Line 293 of yacc.c  */
-#line 415 "scannerparser.c"
+/* Line 295 of yacc.c  */
+#line 423 "scannerparser.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -422,8 +430,8 @@ typedef union YYSTYPE
 /* Copy the second part of user declarations.  */
 
 
-/* Line 343 of yacc.c  */
-#line 427 "scannerparser.c"
+/* Line 345 of yacc.c  */
+#line 435 "scannerparser.c"
 
 #ifdef short
 # undef short
@@ -529,6 +537,7 @@ YYID (yyi)
 #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
      || defined __cplusplus || defined _MSC_VER)
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
 #     ifndef EXIT_SUCCESS
 #      define EXIT_SUCCESS 0
 #     endif
@@ -620,20 +629,20 @@ union yyalloc
 #endif
 
 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
-/* Copy COUNT objects from FROM to TO.  The source and destination do
+/* Copy COUNT objects from SRC to DST.  The source and destination do
    not overlap.  */
 # ifndef YYCOPY
 #  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#   define YYCOPY(Dst, Src, Count) \
+      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
 #  else
-#   define YYCOPY(To, From, Count)		\
-      do					\
-	{					\
-	  YYSIZE_T yyi;				\
-	  for (yyi = 0; yyi < (Count); yyi++)	\
-	    (To)[yyi] = (From)[yyi];		\
-	}					\
+#   define YYCOPY(Dst, Src, Count)              \
+      do                                        \
+        {                                       \
+          YYSIZE_T yyi;                         \
+          for (yyi = 0; yyi < (Count); yyi++)   \
+            (Dst)[yyi] = (Src)[yyi];            \
+        }                                       \
       while (YYID (0))
 #  endif
 # endif
@@ -884,7 +893,7 @@ static const char *const yytname[] =
   "expression_statement", "selection_statement", "iteration_statement",
   "jump_statement", "translation_unit", "external_declaration",
   "function_definition", "declaration_list", "function_macro",
-  "object_macro", "function_macro_define", "object_macro_define", "macro", 0
+  "object_macro", "function_macro_define", "object_macro_define", "macro", YY_NULL
 };
 #endif
 
@@ -1541,17 +1550,18 @@ static const yytype_uint8 yystos[] =
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
-#define YYBACKUP(Token, Value)					\
-do								\
-  if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      YYPOPSTACK (1);						\
-      goto yybackup;						\
-    }								\
-  else								\
-    {								\
+#define YYBACKUP(Token, Value)                                  \
+do                                                              \
+  if (yychar == YYEMPTY)                                        \
+    {                                                           \
+      yychar = (Token);                                         \
+      yylval = (Value);                                         \
+      YYPOPSTACK (yylen);                                       \
+      yystate = *yyssp;                                         \
+      goto yybackup;                                            \
+    }                                                           \
+  else                                                          \
+    {                                                           \
       yyerror (igenerator, YY_("syntax error: cannot back up")); \
       YYERROR;							\
     }								\
@@ -1647,6 +1657,8 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, igenerator)
     GIGenerator* igenerator;
 #endif
 {
+  FILE *yyo = yyoutput;
+  YYUSE (yyo);
   if (!yyvaluep)
     return;
   YYUSE (igenerator);
@@ -1901,12 +1913,12 @@ static int
 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                 yytype_int16 *yyssp, int yytoken)
 {
-  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
   YYSIZE_T yysize = yysize0;
   YYSIZE_T yysize1;
   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   /* Internationalized format string. */
-  const char *yyformat = 0;
+  const char *yyformat = YY_NULL;
   /* Arguments of yyformat. */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
   /* Number of reported tokens (one for the "unexpected", one per
@@ -1966,7 +1978,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                     break;
                   }
                 yyarg[yycount++] = yytname[yyx];
-                yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+                yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
                 if (! (yysize <= yysize1
                        && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                   return 2;
@@ -2120,7 +2132,7 @@ yyparse (igenerator)
        `yyss': related to states.
        `yyvs': related to semantic values.
 
-       Refer to the stacks thru separate pointers, to allow yyoverflow
+       Refer to the stacks through separate pointers, to allow yyoverflow
        to reallocate them elsewhere.  */
 
     /* The state stack.  */
@@ -2353,7 +2365,7 @@ yyreduce:
     {
         case 2:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 280 "scannerparser.y"
     {
 		(yyval.symbol) = g_hash_table_lookup (const_table, (yyvsp[(1) - (1)].str));
@@ -2365,7 +2377,7 @@ yyreduce:
 
   case 3:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 287 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2382,7 +2394,7 @@ yyreduce:
 
   case 4:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 299 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -2391,7 +2403,7 @@ yyreduce:
 
   case 5:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 303 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -2400,7 +2412,7 @@ yyreduce:
 
   case 7:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 308 "scannerparser.y"
     {
 		(yyval.symbol) = (yyvsp[(2) - (3)].symbol);
@@ -2409,7 +2421,7 @@ yyreduce:
 
   case 8:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 316 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2420,7 +2432,7 @@ yyreduce:
 
   case 9:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 322 "scannerparser.y"
     {
 		char *strings, *string2;
@@ -2436,7 +2448,7 @@ yyreduce:
 
   case 10:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 336 "scannerparser.y"
     {
 		(yyval.str) = g_strdup (yytext);
@@ -2445,7 +2457,7 @@ yyreduce:
 
   case 14:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 349 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -2454,7 +2466,7 @@ yyreduce:
 
   case 15:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 353 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -2463,7 +2475,7 @@ yyreduce:
 
   case 16:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 357 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -2472,7 +2484,7 @@ yyreduce:
 
   case 17:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 361 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -2481,7 +2493,7 @@ yyreduce:
 
   case 18:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 365 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -2490,7 +2502,7 @@ yyreduce:
 
   case 19:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 369 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -2499,7 +2511,7 @@ yyreduce:
 
   case 20:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 373 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -2508,7 +2520,7 @@ yyreduce:
 
   case 24:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 386 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -2517,7 +2529,7 @@ yyreduce:
 
   case 25:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 390 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -2526,7 +2538,7 @@ yyreduce:
 
   case 26:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 394 "scannerparser.y"
     {
 		switch ((yyvsp[(1) - (2)].unary_operator)) {
@@ -2554,7 +2566,7 @@ yyreduce:
 
   case 27:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 417 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -2563,7 +2575,7 @@ yyreduce:
 
   case 28:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 421 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -2572,7 +2584,7 @@ yyreduce:
 
   case 29:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 428 "scannerparser.y"
     {
 		(yyval.unary_operator) = UNARY_ADDRESS_OF;
@@ -2581,7 +2593,7 @@ yyreduce:
 
   case 30:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 432 "scannerparser.y"
     {
 		(yyval.unary_operator) = UNARY_POINTER_INDIRECTION;
@@ -2590,7 +2602,7 @@ yyreduce:
 
   case 31:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 436 "scannerparser.y"
     {
 		(yyval.unary_operator) = UNARY_PLUS;
@@ -2599,7 +2611,7 @@ yyreduce:
 
   case 32:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 440 "scannerparser.y"
     {
 		(yyval.unary_operator) = UNARY_MINUS;
@@ -2608,7 +2620,7 @@ yyreduce:
 
   case 33:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 444 "scannerparser.y"
     {
 		(yyval.unary_operator) = UNARY_BITWISE_COMPLEMENT;
@@ -2617,7 +2629,7 @@ yyreduce:
 
   case 34:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 448 "scannerparser.y"
     {
 		(yyval.unary_operator) = UNARY_LOGICAL_NEGATION;
@@ -2626,7 +2638,7 @@ yyreduce:
 
   case 36:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 456 "scannerparser.y"
     {
 		(yyval.symbol) = (yyvsp[(4) - (4)].symbol);
@@ -2635,7 +2647,7 @@ yyreduce:
 
   case 38:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 464 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2646,7 +2658,7 @@ yyreduce:
 
   case 39:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 470 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2659,7 +2671,7 @@ yyreduce:
 
   case 40:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 478 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2670,7 +2682,7 @@ yyreduce:
 
   case 42:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 488 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2681,7 +2693,7 @@ yyreduce:
 
   case 43:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 494 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2692,7 +2704,7 @@ yyreduce:
 
   case 45:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 504 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2703,7 +2715,7 @@ yyreduce:
 
   case 46:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 510 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2714,7 +2726,7 @@ yyreduce:
 
   case 48:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 520 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2725,7 +2737,7 @@ yyreduce:
 
   case 49:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 526 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2736,7 +2748,7 @@ yyreduce:
 
   case 50:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 532 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2747,7 +2759,7 @@ yyreduce:
 
   case 51:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 538 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2758,7 +2770,7 @@ yyreduce:
 
   case 53:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 548 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2769,7 +2781,7 @@ yyreduce:
 
   case 54:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 554 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2780,7 +2792,7 @@ yyreduce:
 
   case 56:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 564 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2791,7 +2803,7 @@ yyreduce:
 
   case 58:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 574 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2802,7 +2814,7 @@ yyreduce:
 
   case 60:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 584 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2813,7 +2825,7 @@ yyreduce:
 
   case 62:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 594 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2824,7 +2836,7 @@ yyreduce:
 
   case 64:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 604 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_CONST);
@@ -2835,7 +2847,7 @@ yyreduce:
 
   case 66:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 614 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_get_const_boolean ((yyvsp[(1) - (5)].symbol)) ? (yyvsp[(3) - (5)].symbol) : (yyvsp[(5) - (5)].symbol);
@@ -2844,7 +2856,7 @@ yyreduce:
 
   case 68:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 622 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -2853,7 +2865,7 @@ yyreduce:
 
   case 81:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 644 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -2862,7 +2874,7 @@ yyreduce:
 
   case 83:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 657 "scannerparser.y"
     {
 		GList *l;
@@ -2883,7 +2895,7 @@ yyreduce:
 
   case 85:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 677 "scannerparser.y"
     {
 		(yyval.ctype) = (yyvsp[(2) - (2)].ctype);
@@ -2893,7 +2905,7 @@ yyreduce:
 
   case 86:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 682 "scannerparser.y"
     {
 		(yyval.ctype) = ctype_new (CTYPE_INVALID);
@@ -2903,7 +2915,7 @@ yyreduce:
 
   case 87:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 687 "scannerparser.y"
     {
 		(yyval.ctype) = (yyvsp[(1) - (2)].ctype);
@@ -2913,7 +2925,7 @@ yyreduce:
 
   case 89:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 693 "scannerparser.y"
     {
 		(yyval.ctype) = (yyvsp[(2) - (2)].ctype);
@@ -2923,7 +2935,7 @@ yyreduce:
 
   case 90:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 698 "scannerparser.y"
     {
 		(yyval.ctype) = ctype_new (CTYPE_INVALID);
@@ -2933,7 +2945,7 @@ yyreduce:
 
   case 91:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 703 "scannerparser.y"
     {
 		(yyval.ctype) = (yyvsp[(2) - (2)].ctype);
@@ -2943,7 +2955,7 @@ yyreduce:
 
   case 92:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 708 "scannerparser.y"
     {
 		(yyval.ctype) = ctype_new (CTYPE_INVALID);
@@ -2953,7 +2965,7 @@ yyreduce:
 
   case 93:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 716 "scannerparser.y"
     {
 		(yyval.list) = g_list_append (NULL, (yyvsp[(1) - (1)].symbol));
@@ -2962,7 +2974,7 @@ yyreduce:
 
   case 94:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 720 "scannerparser.y"
     {
 		(yyval.list) = g_list_append ((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].symbol));
@@ -2971,7 +2983,7 @@ yyreduce:
 
   case 97:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 732 "scannerparser.y"
     {
 		(yyval.storage_class_specifier) = STORAGE_CLASS_TYPEDEF;
@@ -2980,7 +2992,7 @@ yyreduce:
 
   case 98:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 736 "scannerparser.y"
     {
 		(yyval.storage_class_specifier) = STORAGE_CLASS_EXTERN;
@@ -2989,7 +3001,7 @@ yyreduce:
 
   case 99:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 740 "scannerparser.y"
     {
 		(yyval.storage_class_specifier) = STORAGE_CLASS_STATIC;
@@ -2998,7 +3010,7 @@ yyreduce:
 
   case 100:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 744 "scannerparser.y"
     {
 		(yyval.storage_class_specifier) = STORAGE_CLASS_AUTO;
@@ -3007,7 +3019,7 @@ yyreduce:
 
   case 101:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 748 "scannerparser.y"
     {
 		(yyval.storage_class_specifier) = STORAGE_CLASS_REGISTER;
@@ -3016,7 +3028,7 @@ yyreduce:
 
   case 102:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 755 "scannerparser.y"
     {
 		(yyval.ctype) = ctype_new (CTYPE_VOID);
@@ -3025,7 +3037,7 @@ yyreduce:
 
   case 103:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 759 "scannerparser.y"
     {
 		(yyval.ctype) = cbasic_type_new ("char");
@@ -3034,7 +3046,7 @@ yyreduce:
 
   case 104:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 763 "scannerparser.y"
     {
 		(yyval.ctype) = cbasic_type_new ("short");
@@ -3043,7 +3055,7 @@ yyreduce:
 
   case 105:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 767 "scannerparser.y"
     {
 		(yyval.ctype) = cbasic_type_new ("int");
@@ -3052,7 +3064,7 @@ yyreduce:
 
   case 106:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 771 "scannerparser.y"
     {
 		(yyval.ctype) = cbasic_type_new ("long");
@@ -3061,7 +3073,7 @@ yyreduce:
 
   case 107:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 775 "scannerparser.y"
     {
 		(yyval.ctype) = cbasic_type_new ("float");
@@ -3070,7 +3082,7 @@ yyreduce:
 
   case 108:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 779 "scannerparser.y"
     {
 		(yyval.ctype) = cbasic_type_new ("double");
@@ -3079,7 +3091,7 @@ yyreduce:
 
   case 109:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 783 "scannerparser.y"
     {
 		(yyval.ctype) = cbasic_type_new ("signed");
@@ -3088,7 +3100,7 @@ yyreduce:
 
   case 110:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 787 "scannerparser.y"
     {
 		(yyval.ctype) = cbasic_type_new ("unsigned");
@@ -3097,7 +3109,7 @@ yyreduce:
 
   case 111:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 791 "scannerparser.y"
     {
 		(yyval.ctype) = cbasic_type_new ("bool");
@@ -3106,7 +3118,7 @@ yyreduce:
 
   case 114:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 797 "scannerparser.y"
     {
 		(yyval.ctype) = ctypedef_new ((yyvsp[(1) - (1)].str));
@@ -3115,7 +3127,7 @@ yyreduce:
 
   case 115:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 804 "scannerparser.y"
     {
 		(yyval.ctype) = (yyvsp[(1) - (5)].ctype);
@@ -3138,7 +3150,7 @@ yyreduce:
 
   case 116:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 822 "scannerparser.y"
     {
 		(yyval.ctype) = (yyvsp[(1) - (4)].ctype);
@@ -3148,7 +3160,7 @@ yyreduce:
 
   case 117:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 827 "scannerparser.y"
     {
 		(yyval.ctype) = (yyvsp[(1) - (2)].ctype);
@@ -3158,7 +3170,7 @@ yyreduce:
 
   case 118:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 835 "scannerparser.y"
     {
 		(yyval.ctype) = cstruct_new (NULL);
@@ -3167,7 +3179,7 @@ yyreduce:
 
   case 119:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 839 "scannerparser.y"
     {
 		(yyval.ctype) = cunion_new (NULL);
@@ -3176,7 +3188,7 @@ yyreduce:
 
   case 121:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 847 "scannerparser.y"
     {
 		(yyval.list) = g_list_concat ((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list));
@@ -3185,7 +3197,7 @@ yyreduce:
 
   case 122:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 854 "scannerparser.y"
     {
 		GList *l;
@@ -3203,7 +3215,7 @@ yyreduce:
 
   case 123:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 870 "scannerparser.y"
     {
 		(yyval.ctype) = (yyvsp[(1) - (2)].ctype);
@@ -3213,7 +3225,7 @@ yyreduce:
 
   case 125:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 876 "scannerparser.y"
     {
 		(yyval.ctype) = (yyvsp[(2) - (2)].ctype);
@@ -3223,7 +3235,7 @@ yyreduce:
 
   case 126:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 881 "scannerparser.y"
     {
 		(yyval.ctype) = ctype_new (CTYPE_INVALID);
@@ -3233,7 +3245,7 @@ yyreduce:
 
   case 127:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 889 "scannerparser.y"
     {
 		(yyval.list) = g_list_append (NULL, (yyvsp[(1) - (1)].symbol));
@@ -3242,7 +3254,7 @@ yyreduce:
 
   case 128:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 893 "scannerparser.y"
     {
 		(yyval.list) = g_list_append ((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].symbol));
@@ -3251,7 +3263,7 @@ yyreduce:
 
   case 129:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 900 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -3260,7 +3272,7 @@ yyreduce:
 
   case 131:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 905 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -3269,7 +3281,7 @@ yyreduce:
 
   case 133:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 913 "scannerparser.y"
     {
 		(yyval.ctype) = cenum_new ((yyvsp[(2) - (5)].str));
@@ -3280,7 +3292,7 @@ yyreduce:
 
   case 134:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 919 "scannerparser.y"
     {
 		(yyval.ctype) = cenum_new (NULL);
@@ -3291,7 +3303,7 @@ yyreduce:
 
   case 135:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 925 "scannerparser.y"
     {
 		(yyval.ctype) = cenum_new ((yyvsp[(2) - (6)].str));
@@ -3302,7 +3314,7 @@ yyreduce:
 
   case 136:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 931 "scannerparser.y"
     {
 		(yyval.ctype) = cenum_new (NULL);
@@ -3313,7 +3325,7 @@ yyreduce:
 
   case 137:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 937 "scannerparser.y"
     {
 		(yyval.ctype) = cenum_new ((yyvsp[(2) - (2)].str));
@@ -3322,7 +3334,7 @@ yyreduce:
 
   case 138:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 944 "scannerparser.y"
     {
 		(yyval.list) = g_list_append (NULL, (yyvsp[(1) - (1)].symbol));
@@ -3331,7 +3343,7 @@ yyreduce:
 
   case 139:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 948 "scannerparser.y"
     {
 		(yyval.list) = g_list_append ((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].symbol));
@@ -3340,7 +3352,7 @@ yyreduce:
 
   case 140:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 955 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_OBJECT);
@@ -3353,7 +3365,7 @@ yyreduce:
 
   case 141:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 963 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_OBJECT);
@@ -3367,7 +3379,7 @@ yyreduce:
 
   case 142:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 975 "scannerparser.y"
     {
 		(yyval.type_qualifier) = TYPE_QUALIFIER_CONST;
@@ -3376,7 +3388,7 @@ yyreduce:
 
   case 143:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 979 "scannerparser.y"
     {
 		(yyval.type_qualifier) = TYPE_QUALIFIER_RESTRICT;
@@ -3385,7 +3397,7 @@ yyreduce:
 
   case 144:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 983 "scannerparser.y"
     {
 		(yyval.type_qualifier) = TYPE_QUALIFIER_VOLATILE;
@@ -3394,7 +3406,7 @@ yyreduce:
 
   case 145:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 990 "scannerparser.y"
     {
 		(yyval.function_specifier) = FUNCTION_INLINE;
@@ -3403,7 +3415,7 @@ yyreduce:
 
   case 146:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 997 "scannerparser.y"
     {
 		(yyval.symbol) = (yyvsp[(2) - (2)].symbol);
@@ -3413,7 +3425,7 @@ yyreduce:
 
   case 148:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1006 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -3423,7 +3435,7 @@ yyreduce:
 
   case 149:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1011 "scannerparser.y"
     {
 		(yyval.symbol) = (yyvsp[(2) - (3)].symbol);
@@ -3432,7 +3444,7 @@ yyreduce:
 
   case 150:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1015 "scannerparser.y"
     {
 		(yyval.symbol) = (yyvsp[(1) - (4)].symbol);
@@ -3442,7 +3454,7 @@ yyreduce:
 
   case 151:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1020 "scannerparser.y"
     {
 		(yyval.symbol) = (yyvsp[(1) - (3)].symbol);
@@ -3452,7 +3464,7 @@ yyreduce:
 
   case 152:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1025 "scannerparser.y"
     {
 		CType *func = cfunction_new ();
@@ -3467,7 +3479,7 @@ yyreduce:
 
   case 153:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1035 "scannerparser.y"
     {
 		CType *func = cfunction_new ();
@@ -3479,7 +3491,7 @@ yyreduce:
 
   case 154:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1042 "scannerparser.y"
     {
 		CType *func = cfunction_new ();
@@ -3490,7 +3502,7 @@ yyreduce:
 
   case 155:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1051 "scannerparser.y"
     {
 		(yyval.ctype) = cpointer_new (NULL);
@@ -3500,7 +3512,7 @@ yyreduce:
 
   case 156:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1056 "scannerparser.y"
     {
 		(yyval.ctype) = cpointer_new (NULL);
@@ -3509,7 +3521,7 @@ yyreduce:
 
   case 157:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1060 "scannerparser.y"
     {
 		(yyval.ctype) = cpointer_new ((yyvsp[(3) - (3)].ctype));
@@ -3519,7 +3531,7 @@ yyreduce:
 
   case 158:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1065 "scannerparser.y"
     {
 		(yyval.ctype) = cpointer_new ((yyvsp[(2) - (2)].ctype));
@@ -3528,7 +3540,7 @@ yyreduce:
 
   case 160:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1073 "scannerparser.y"
     {
 		(yyval.type_qualifier) = (yyvsp[(1) - (2)].type_qualifier) | (yyvsp[(2) - (2)].type_qualifier);
@@ -3537,7 +3549,7 @@ yyreduce:
 
   case 163:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1085 "scannerparser.y"
     {
 		(yyval.list) = g_list_append (NULL, (yyvsp[(1) - (1)].symbol));
@@ -3546,7 +3558,7 @@ yyreduce:
 
   case 164:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1089 "scannerparser.y"
     {
 		(yyval.list) = g_list_append ((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].symbol));
@@ -3555,7 +3567,7 @@ yyreduce:
 
   case 165:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1096 "scannerparser.y"
     {
 		(yyval.symbol) = (yyvsp[(2) - (2)].symbol);
@@ -3565,7 +3577,7 @@ yyreduce:
 
   case 166:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1101 "scannerparser.y"
     {
 		(yyval.symbol) = (yyvsp[(2) - (2)].symbol);
@@ -3575,7 +3587,7 @@ yyreduce:
 
   case 167:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1106 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -3585,7 +3597,7 @@ yyreduce:
 
   case 168:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1114 "scannerparser.y"
     {
 		CSymbol *sym = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -3596,7 +3608,7 @@ yyreduce:
 
   case 169:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1120 "scannerparser.y"
     {
 		CSymbol *sym = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -3607,7 +3619,7 @@ yyreduce:
 
   case 172:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1134 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -3617,7 +3629,7 @@ yyreduce:
 
   case 174:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1140 "scannerparser.y"
     {
 		(yyval.symbol) = (yyvsp[(2) - (2)].symbol);
@@ -3627,7 +3639,7 @@ yyreduce:
 
   case 175:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1148 "scannerparser.y"
     {
 		(yyval.symbol) = (yyvsp[(2) - (3)].symbol);
@@ -3636,7 +3648,7 @@ yyreduce:
 
   case 176:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1152 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -3646,7 +3658,7 @@ yyreduce:
 
   case 177:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1157 "scannerparser.y"
     {
 		(yyval.symbol) = csymbol_new (CSYMBOL_TYPE_INVALID);
@@ -3656,7 +3668,7 @@ yyreduce:
 
   case 178:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1162 "scannerparser.y"
     {
 		(yyval.symbol) = (yyvsp[(1) - (3)].symbol);
@@ -3666,7 +3678,7 @@ yyreduce:
 
   case 179:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1167 "scannerparser.y"
     {
 		(yyval.symbol) = (yyvsp[(1) - (4)].symbol);
@@ -3676,7 +3688,7 @@ yyreduce:
 
   case 180:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1172 "scannerparser.y"
     {
 		CType *func = cfunction_new ();
@@ -3687,7 +3699,7 @@ yyreduce:
 
   case 181:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1178 "scannerparser.y"
     {
 		CType *func = cfunction_new ();
@@ -3702,7 +3714,7 @@ yyreduce:
 
   case 182:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1188 "scannerparser.y"
     {
 		CType *func = cfunction_new ();
@@ -3713,7 +3725,7 @@ yyreduce:
 
   case 183:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1194 "scannerparser.y"
     {
 		CType *func = cfunction_new ();
@@ -3728,7 +3740,7 @@ yyreduce:
 
   case 184:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1207 "scannerparser.y"
     {
 		(yyval.str) = g_strdup (yytext);
@@ -3737,7 +3749,7 @@ yyreduce:
 
   case 234:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1314 "scannerparser.y"
     {
 		(yyval.str) = g_strdup (yytext + strlen ("#define "));
@@ -3746,7 +3758,7 @@ yyreduce:
 
   case 235:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1321 "scannerparser.y"
     {
 		(yyval.str) = g_strdup (yytext + strlen ("#define "));
@@ -3755,7 +3767,7 @@ yyreduce:
 
   case 237:
 
-/* Line 1806 of yacc.c  */
+/* Line 1810 of yacc.c  */
 #line 1332 "scannerparser.y"
     {
 		if ((yyvsp[(2) - (2)].symbol)->const_int_set || (yyvsp[(2) - (2)].symbol)->const_string != NULL) {
@@ -3767,8 +3779,8 @@ yyreduce:
 
 
 
-/* Line 1806 of yacc.c  */
-#line 3772 "scannerparser.c"
+/* Line 1810 of yacc.c  */
+#line 3784 "scannerparser.c"
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -3955,7 +3967,7 @@ yyabortlab:
   yyresult = 1;
   goto yyreturn;
 
-#if !defined(yyoverflow) || YYERROR_VERBOSE
+#if !defined yyoverflow || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -3998,7 +4010,7 @@ yyreturn:
 
 
 
-/* Line 2067 of yacc.c  */
+/* Line 2071 of yacc.c  */
 #line 1346 "scannerparser.y"
 
 
diff --git a/gobject-introspection/scannerparser.h b/gobject-introspection/scannerparser.h
index b5e4ca1..f35f8f1 100644
--- a/gobject-introspection/scannerparser.h
+++ b/gobject-introspection/scannerparser.h
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 2.5.  */
+/* A Bison parser, made by GNU Bison 2.5.1.  */
 
 /* Bison interface for Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -178,7 +178,7 @@
 typedef union YYSTYPE
 {
 
-/* Line 2068 of yacc.c  */
+/* Line 2072 of yacc.c  */
 #line 190 "scannerparser.y"
 
   char *str;
@@ -192,7 +192,7 @@ typedef union YYSTYPE
 
 
 
-/* Line 2068 of yacc.c  */
+/* Line 2072 of yacc.c  */
 #line 197 "scannerparser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index d812584..44e0ecf 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -1,8 +1,8 @@
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-#                 Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 # This file is free software; the Free Software Foundation gives
@@ -11,8 +11,8 @@
 
 m4_define([_LT_COPYING], [dnl
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-#                 Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 #   This file is part of GNU Libtool.
@@ -146,6 +146,8 @@ AC_REQUIRE([AC_CANONICAL_BUILD])dnl
 AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
 AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
 
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
 _LT_DECL([], [host_alias], [0], [The host system])dnl
 _LT_DECL([], [host], [0])dnl
 _LT_DECL([], [host_os], [0])dnl
@@ -637,7 +639,7 @@ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
 m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
 configured by $[0], generated by m4_PACKAGE_STRING.
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2011 Free Software Foundation, Inc.
 This config.lt script is free software; the Free Software Foundation
 gives unlimited permision to copy, distribute and modify it."
 
@@ -801,6 +803,7 @@ AC_DEFUN([LT_LANG],
 m4_case([$1],
   [C],			[_LT_LANG(C)],
   [C++],		[_LT_LANG(CXX)],
+  [Go],			[_LT_LANG(GO)],
   [Java],		[_LT_LANG(GCJ)],
   [Fortran 77],		[_LT_LANG(F77)],
   [Fortran],		[_LT_LANG(FC)],
@@ -822,6 +825,31 @@ m4_defun([_LT_LANG],
 ])# _LT_LANG
 
 
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_GO.  When it is available in    #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC],     [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+  fi
+fi
+if test -z "$GOC"; then
+  AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
 # _LT_LANG_DEFAULT_CONFIG
 # -----------------------
 m4_defun([_LT_LANG_DEFAULT_CONFIG],
@@ -852,6 +880,10 @@ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
        m4_ifdef([LT_PROG_GCJ],
 	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
 
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+  [LT_LANG(GO)],
+  [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
 AC_PROVIDE_IFELSE([LT_PROG_RC],
   [LT_LANG(RC)],
   [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
@@ -954,7 +986,13 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
 	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
         _lt_result=$?
-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
 	  lt_cv_apple_cc_single_mod=yes
 	else
 	  cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -962,6 +1000,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 	rm -rf libconftest.dylib*
 	rm -f conftest.*
       fi])
+
     AC_CACHE_CHECK([for -exported_symbols_list linker flag],
       [lt_cv_ld_exported_symbols_list],
       [lt_cv_ld_exported_symbols_list=no
@@ -973,6 +1012,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 	[lt_cv_ld_exported_symbols_list=no])
 	LDFLAGS="$save_LDFLAGS"
     ])
+
     AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
       [lt_cv_ld_force_load=no
       cat > conftest.c << _LT_EOF
@@ -990,7 +1030,9 @@ _LT_EOF
       echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
       $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
       _lt_result=$?
-      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
 	lt_cv_ld_force_load=yes
       else
 	cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -1035,8 +1077,8 @@ _LT_EOF
 ])
 
 
-# _LT_DARWIN_LINKER_FEATURES
-# --------------------------
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
 # Checks for linker and compiler features on darwin
 m4_defun([_LT_DARWIN_LINKER_FEATURES],
 [
@@ -1047,6 +1089,8 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
   if test "$lt_cv_ld_force_load" = "yes"; then
     _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+                  [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
   else
     _LT_TAGVAR(whole_archive_flag_spec, $1)=''
   fi
@@ -1330,14 +1374,27 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
     CFLAGS="$SAVE_CFLAGS"
   fi
   ;;
-sparc*-*solaris*)
+*-*solaris*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.o` in
     *64-bit*)
       case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
       *)
 	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
 	  LD="${LD-ld} -64"
@@ -1414,13 +1471,13 @@ old_postuninstall_cmds=
 if test -n "$RANLIB"; then
   case $host_os in
   openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
     ;;
   esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
 fi
 
 case $host_os in
@@ -1600,6 +1657,11 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     lt_cv_sys_max_cmd_len=196608
     ;;
 
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
   osf*)
     # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
     # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
@@ -1639,7 +1701,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
 	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
 	      test $i != 17 # 1/2 MB should be enough
       do
@@ -2185,7 +2247,7 @@ need_version=unknown
 
 case $host_os in
 aix3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
@@ -2194,7 +2256,7 @@ aix3*)
   ;;
 
 aix[[4-9]]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
@@ -2259,7 +2321,7 @@ beos*)
   ;;
 
 bsdi[[45]]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
@@ -2398,7 +2460,7 @@ m4_if([$1], [],[
   ;;
 
 dgux*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -2406,10 +2468,6 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
@@ -2417,7 +2475,7 @@ freebsd* | dragonfly*)
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
-    freebsd[[123]]*) objformat=aout ;;
+    freebsd[[23]].*) objformat=aout ;;
     *) objformat=elf ;;
     esac
   fi
@@ -2435,7 +2493,7 @@ freebsd* | dragonfly*)
   esac
   shlibpath_var=LD_LIBRARY_PATH
   case $host_os in
-  freebsd2*)
+  freebsd2.*)
     shlibpath_overrides_runpath=yes
     ;;
   freebsd3.[[01]]* | freebsdelf3.[[01]]*)
@@ -2455,17 +2513,18 @@ freebsd* | dragonfly*)
   ;;
 
 gnu*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   ;;
 
 haiku*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
@@ -2526,7 +2585,7 @@ hpux9* | hpux10* | hpux11*)
   ;;
 
 interix[[3-9]]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -2542,7 +2601,7 @@ irix5* | irix6* | nonstopux*)
     nonstopux*) version_type=nonstopux ;;
     *)
 	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
+		version_type=linux # correct to gnu/linux during the next big refactor
 	else
 		version_type=irix
 	fi ;;
@@ -2579,9 +2638,9 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2644,7 +2703,7 @@ netbsd*)
   ;;
 
 newsos6)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -2713,7 +2772,7 @@ rdos*)
   ;;
 
 solaris*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2738,7 +2797,7 @@ sunos4*)
   ;;
 
 sysv4 | sysv4.3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -2762,7 +2821,7 @@ sysv4 | sysv4.3*)
 
 sysv4*MP*)
   if test -d /usr/nec ;then
-    version_type=linux
+    version_type=linux # correct to gnu/linux during the next big refactor
     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
     soname_spec='$libname${shared_ext}.$major'
     shlibpath_var=LD_LIBRARY_PATH
@@ -2793,7 +2852,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 
 tpf*)
   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2803,7 +2862,7 @@ tpf*)
   ;;
 
 uts4*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -3225,7 +3284,7 @@ irix5* | irix6* | nonstopux*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
@@ -3645,6 +3704,7 @@ for ac_symprfx in "" "_"; do
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK ['"\
 "     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
@@ -4229,7 +4289,9 @@ m4_if([$1], [CXX], [
     case $cc_basename in
     nvcc*) # Cuda Compiler Driver 2.2
       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC'
+      if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+      fi
       ;;
     esac
   else
@@ -4321,18 +4383,33 @@ m4_if([$1], [CXX], [
 	;;
       *)
 	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ F* | *Sun*Fortran*)
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
 	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
 	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
 	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	  ;;
 	*Sun\ C*)
 	  # Sun C 5.9
 	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	  ;;
+        *Intel*\ [[CF]]*Compiler*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	  ;;
+	*Portland\ Group*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  ;;
 	esac
 	;;
       esac
@@ -4492,7 +4569,9 @@ m4_if([$1], [CXX], [
     ;;
   cygwin* | mingw* | cegcc*)
     case $cc_basename in
-    cl*) ;;
+    cl*)
+      _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
     *)
       _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
       _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
@@ -4517,7 +4596,6 @@ m4_if([$1], [CXX], [
   _LT_TAGVAR(hardcode_direct, $1)=no
   _LT_TAGVAR(hardcode_direct_absolute, $1)=no
   _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
   _LT_TAGVAR(hardcode_libdir_separator, $1)=
   _LT_TAGVAR(hardcode_minus_L, $1)=no
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
@@ -4768,8 +4846,7 @@ _LT_EOF
 	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
 	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
 	  if test "x$supports_anon_versioning" = xyes; then
 	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
@@ -5064,6 +5141,7 @@ _LT_EOF
 	# The linker will not automatically build a static lib if we build a DLL.
 	# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
 	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
 	_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
 	# Don't use ranlib
 	_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
@@ -5110,10 +5188,6 @@ _LT_EOF
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       ;;
 
-    freebsd1*)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
     # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
     # support.  Future versions do this automatically, but an explicit c++rt0.o
     # does not break anything, and helps significantly (at the cost of a little
@@ -5126,7 +5200,7 @@ _LT_EOF
       ;;
 
     # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
+    freebsd2.*)
       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
       _LT_TAGVAR(hardcode_direct, $1)=yes
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
@@ -5165,7 +5239,6 @@ _LT_EOF
       fi
       if test "$with_gnu_ld" = no; then
 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
 	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
 	_LT_TAGVAR(hardcode_direct, $1)=yes
 	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
@@ -5607,9 +5680,6 @@ _LT_TAGDECL([], [no_undefined_flag], [1],
 _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
     [Flag to hardcode $libdir into a binary during linking.
     This must work even if $libdir does not exist])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
-    [[If ld is used when linking, flag to hardcode $libdir into a binary
-    during linking.  This must work even if $libdir does not exist]])
 _LT_TAGDECL([], [hardcode_libdir_separator], [1],
     [Whether we need a single "-rpath" flag with a separated argument])
 _LT_TAGDECL([], [hardcode_direct], [0],
@@ -5767,7 +5837,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
 _LT_TAGVAR(hardcode_direct, $1)=no
 _LT_TAGVAR(hardcode_direct_absolute, $1)=no
 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 _LT_TAGVAR(hardcode_libdir_separator, $1)=
 _LT_TAGVAR(hardcode_minus_L, $1)=no
 _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
@@ -6137,7 +6206,7 @@ if test "$_lt_caught_CXX_error" != yes; then
         esac
         ;;
 
-      freebsd[[12]]*)
+      freebsd2.*)
         # C++ shared libraries reported to be fairly broken before
 	# switch to ELF
         _LT_TAGVAR(ld_shlibs, $1)=no
@@ -6898,12 +6967,18 @@ public class foo {
   }
 };
 _LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
 ])
 
 _lt_libdeps_save_CFLAGS=$CFLAGS
 case "$CC $CFLAGS " in #(
 *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
 *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
 esac
 
 dnl Parse the compiler output and extract the necessary
@@ -7100,7 +7175,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
 _LT_TAGVAR(hardcode_direct, $1)=no
 _LT_TAGVAR(hardcode_direct_absolute, $1)=no
 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 _LT_TAGVAR(hardcode_libdir_separator, $1)=
 _LT_TAGVAR(hardcode_minus_L, $1)=no
 _LT_TAGVAR(hardcode_automatic, $1)=no
@@ -7233,7 +7307,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
 _LT_TAGVAR(hardcode_direct, $1)=no
 _LT_TAGVAR(hardcode_direct_absolute, $1)=no
 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 _LT_TAGVAR(hardcode_libdir_separator, $1)=
 _LT_TAGVAR(hardcode_minus_L, $1)=no
 _LT_TAGVAR(hardcode_automatic, $1)=no
@@ -7420,6 +7493,77 @@ CFLAGS=$lt_save_CFLAGS
 ])# _LT_LANG_GCJ_CONFIG
 
 
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
 # _LT_LANG_RC_CONFIG([TAG])
 # -------------------------
 # Ensure that the configuration variables for the Windows resource compiler
@@ -7489,6 +7633,13 @@ dnl aclocal-1.4 backwards compatibility:
 dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
 
 
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
 # LT_PROG_RC
 # ----------
 AC_DEFUN([LT_PROG_RC],
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
index 17cfd51..5d9acd8 100644
--- a/m4/ltoptions.m4
+++ b/m4/ltoptions.m4
@@ -326,9 +326,24 @@ dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
 # MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
 m4_define([_LT_WITH_PIC],
 [AC_ARG_WITH([pic],
-    [AS_HELP_STRING([--with-pic],
+    [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
 	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
+    [lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+	IFS="$lt_save_ifs"
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
     [pic_mode=default])
 
 test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
index 9c7b5d4..07a8602 100644
--- a/m4/ltversion.m4
+++ b/m4/ltversion.m4
@@ -9,15 +9,15 @@
 
 # @configure_input@
 
-# serial 3293 ltversion.m4
+# serial 3337 ltversion.m4
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.4])
-m4_define([LT_PACKAGE_REVISION], [1.3293])
+m4_define([LT_PACKAGE_VERSION], [2.4.2])
+m4_define([LT_PACKAGE_REVISION], [1.3337])
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.4'
-macro_revision='1.3293'
+[macro_version='2.4.2'
+macro_revision='1.3337'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 92b1ef0..9a64c1d 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -12,7 +12,7 @@ BUILT_SOURCES = \
 noinst_PROGRAMS = \
 	$(NULL)
 
-TESTS_ENVIRONMENT = EXEEXT=$(EXEEXT) $(srcdir)/testrunner.sh
+TESTS_ENVIRONMENT = EXEEXT=$(EXEEXT) CFLAGS='$(CFLAGS)' CPPFLAGS='$(CPPFLAGS)' LDFLAGS='$(LDFLAGS)' $(srcdir)/testrunner.sh
 
 TESTS = \
 	basic-types/integers.vala \
@@ -20,6 +20,7 @@ TESTS = \
 	basic-types/strings.vala \
 	basic-types/arrays.vala \
 	basic-types/pointers.vala \
+	basic-types/sizeof.vala \
 	basic-types/bug591552.vala \
 	basic-types/bug595751.vala \
 	basic-types/bug596637.vala \
@@ -42,6 +43,7 @@ TESTS = \
 	methods/bug613483.vala \
 	methods/bug620673.vala \
 	methods/bug622570.vala \
+	methods/bug639054.vala \
 	methods/bug642899.vala \
 	methods/bug646345.vala \
 	methods/bug648320.vala \
@@ -57,6 +59,7 @@ TESTS = \
 	control-flow/switch.vala \
 	control-flow/sideeffects.vala \
 	control-flow/bug652549.vala \
+	control-flow/bug665904.vala \
 	enums/enums.vala \
 	structs/structs.vala \
 	structs/gvalue.vala \
@@ -80,6 +83,8 @@ TESTS = \
 	structs/bug658048.vala \
 	structs/bug660426.vala \
 	structs/bug661945.vala \
+	structs/bug667890.vala \
+	structs/bug669580.vala \
 	delegates/delegates.vala \
 	delegates/bug539166.vala \
 	delegates/bug595610.vala \
@@ -119,6 +124,7 @@ TESTS = \
 	objects/bug654702.vala \
 	objects/bug663134.vala \
 	objects/bug664529.vala \
+	objects/bug667668.vala \
 	errors/errors.vala \
 	errors/bug567181.vala \
 	errors/bug579101.vala \
@@ -163,7 +169,7 @@ TESTS = \
 	$(NULL)
 
 check-TESTS: $(TESTS)
-	@EXEEXT=$(EXEEXT) $(srcdir)/testrunner.sh $(TESTS)
+	@EXEEXT=$(EXEEXT) EXEEXT=$(EXEEXT) CFLAGS='$(CFLAGS)' CPPFLAGS='$(CPPFLAGS)' LDFLAGS='$(LDFLAGS)' $(srcdir)/testrunner.sh $(TESTS)
 
 EXTRA_DIST = \
 	testrunner.sh \
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 07f53e9..572c0be 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,6 +15,23 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkglibexecdir = $(libexecdir)/@PACKAGE@
@@ -36,17 +52,18 @@ host_triplet = @host@
 noinst_PROGRAMS = $(am__EXEEXT_1)
 TESTS = basic-types/integers.vala basic-types/floats.vala \
 	basic-types/strings.vala basic-types/arrays.vala \
-	basic-types/pointers.vala basic-types/bug591552.vala \
-	basic-types/bug595751.vala basic-types/bug596637.vala \
-	basic-types/bug596785.vala basic-types/bug632322.vala \
-	basic-types/bug647222.vala basic-types/bug648364.vala \
-	basic-types/bug650993.vala basic-types/bug652380.vala \
-	basic-types/bug655908.vala basic-types/bug659975.vala \
-	namespaces.vala methods/lambda.vala methods/closures.vala \
-	methods/bug595538.vala methods/bug596726.vala \
-	methods/bug597426.vala methods/bug598738.vala \
-	methods/bug599892.vala methods/bug613483.vala \
-	methods/bug620673.vala methods/bug622570.vala \
+	basic-types/pointers.vala basic-types/sizeof.vala \
+	basic-types/bug591552.vala basic-types/bug595751.vala \
+	basic-types/bug596637.vala basic-types/bug596785.vala \
+	basic-types/bug632322.vala basic-types/bug647222.vala \
+	basic-types/bug648364.vala basic-types/bug650993.vala \
+	basic-types/bug652380.vala basic-types/bug655908.vala \
+	basic-types/bug659975.vala namespaces.vala methods/lambda.vala \
+	methods/closures.vala methods/bug595538.vala \
+	methods/bug596726.vala methods/bug597426.vala \
+	methods/bug598738.vala methods/bug599892.vala \
+	methods/bug613483.vala methods/bug620673.vala \
+	methods/bug622570.vala methods/bug639054.vala \
 	methods/bug642899.vala methods/bug646345.vala \
 	methods/bug648320.vala methods/bug649562.vala \
 	methods/bug653391.vala methods/bug653908.vala \
@@ -55,8 +72,8 @@ TESTS = basic-types/integers.vala basic-types/floats.vala \
 	control-flow/expressions-conditional.vala \
 	control-flow/for.vala control-flow/foreach.vala \
 	control-flow/switch.vala control-flow/sideeffects.vala \
-	control-flow/bug652549.vala enums/enums.vala \
-	structs/structs.vala structs/gvalue.vala \
+	control-flow/bug652549.vala control-flow/bug665904.vala \
+	enums/enums.vala structs/structs.vala structs/gvalue.vala \
 	structs/bug530605.vala structs/bug572091.vala \
 	structs/bug583603.vala structs/bug595587.vala \
 	structs/bug596144.vala structs/bug606202.vala \
@@ -67,6 +84,7 @@ TESTS = basic-types/integers.vala basic-types/floats.vala \
 	structs/bug654753.vala structs/bug656693.vala \
 	structs/bug657378.vala structs/bug658048.vala \
 	structs/bug660426.vala structs/bug661945.vala \
+	structs/bug667890.vala structs/bug669580.vala \
 	delegates/delegates.vala delegates/bug539166.vala \
 	delegates/bug595610.vala delegates/bug595639.vala \
 	delegates/bug638415.vala delegates/bug639751.vala \
@@ -86,8 +104,8 @@ TESTS = basic-types/integers.vala basic-types/floats.vala \
 	objects/bug643711.vala objects/bug646362.vala \
 	objects/bug646792.vala objects/bug653138.vala \
 	objects/bug654702.vala objects/bug663134.vala \
-	objects/bug664529.vala errors/errors.vala \
-	errors/bug567181.vala errors/bug579101.vala \
+	objects/bug664529.vala objects/bug667668.vala \
+	errors/errors.vala errors/bug567181.vala errors/bug579101.vala \
 	errors/bug596228.vala errors/bug623049.vala \
 	errors/bug639589.vala errors/bug651145.vala \
 	asynchronous/bug595735.vala asynchronous/bug595755.vala \
@@ -121,16 +139,23 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 am__EXEEXT_1 =
 PROGRAMS = $(noinst_PROGRAMS)
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_ AM_V@)
+am__v_GEN_ = $(am__v_GEN_ AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+AM_V_at = $(am__v_at_ AM_V@)
+am__v_at_ = $(am__v_at_ AM_DEFAULT_V@)
 am__v_at_0 = @
 SOURCES =
 DIST_SOURCES =
-am__tty_colors = \
-red=; grn=; lgn=; blu=; std=
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = $(am__tty_colors_dummy)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 pkgdatadir = @pkgdatadir@
 ACLOCAL = @ACLOCAL@
@@ -255,7 +280,6 @@ libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 prefix = @prefix@
@@ -283,7 +307,7 @@ AM_LDFLAGS = \
 BUILT_SOURCES = \
 	$(NULL)
 
-TESTS_ENVIRONMENT = EXEEXT=$(EXEEXT) $(srcdir)/testrunner.sh
+TESTS_ENVIRONMENT = EXEEXT=$(EXEEXT) CFLAGS='$(CFLAGS)' CPPFLAGS='$(CPPFLAGS)' LDFLAGS='$(LDFLAGS)' $(srcdir)/testrunner.sh
 EXTRA_DIST = \
 	testrunner.sh \
 	$(TESTS) \
@@ -344,6 +368,8 @@ TAGS:
 ctags: CTAGS
 CTAGS:
 
+cscope cscopelist:
+
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -392,10 +418,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -491,7 +522,7 @@ uninstall-am:
 
 
 check-TESTS: $(TESTS)
-	@EXEEXT=$(EXEEXT) $(srcdir)/testrunner.sh $(TESTS)
+	@EXEEXT=$(EXEEXT) EXEEXT=$(EXEEXT) CFLAGS='$(CFLAGS)' CPPFLAGS='$(CPPFLAGS)' LDFLAGS='$(LDFLAGS)' $(srcdir)/testrunner.sh $(TESTS)
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/tests/basic-types/arrays.vala b/tests/basic-types/arrays.vala
index 708f246..5d4d0c4 100644
--- a/tests/basic-types/arrays.vala
+++ b/tests/basic-types/arrays.vala
@@ -41,6 +41,13 @@ void test_integer_array () {
 	// in expressions
 	assert (23 in a);
 	assert (!(-1 in a));
+
+	// nullable elements
+	int?[] d = new int?[2];
+	d[0] = 10;
+	d[1] = null;
+	assert (d[0] == 10);
+	assert (d[1] == null);
 }
 
 void test_string_array () {
diff --git a/tests/basic-types/sizeof.vala b/tests/basic-types/sizeof.vala
new file mode 100644
index 0000000..931891f
--- /dev/null
+++ b/tests/basic-types/sizeof.vala
@@ -0,0 +1,12 @@
+
+
+public const size_t simple_size = sizeof (int);
+public const size_t composed_size = sizeof (int) + sizeof (size_t);
+
+static void main () {
+	assert (composed_size == (sizeof (int) + sizeof (size_t)));
+	assert (simple_size == sizeof (int));
+}
+
+
+
diff --git a/tests/control-flow/bug665904.vala b/tests/control-flow/bug665904.vala
new file mode 100644
index 0000000..58d3c67
--- /dev/null
+++ b/tests/control-flow/bug665904.vala
@@ -0,0 +1,6 @@
+void main () {
+	double?[] array = new double?[] { 3, 3, 3 };
+	foreach (var i in array) {
+		assert (i == 3);
+	}
+}
diff --git a/tests/methods/bug639054.vala b/tests/methods/bug639054.vala
new file mode 100644
index 0000000..0ce93bd
--- /dev/null
+++ b/tests/methods/bug639054.vala
@@ -0,0 +1,22 @@
+[Compact]
+public class Baz {
+}
+
+public async void foo (uint8[] bar, Baz baz) {
+	SourceFunc f = () => {
+		bar[0] = 'b';
+		baz = null;
+		return false;
+	};
+	f ();
+}
+
+void main () {
+	var loop = new MainLoop ();
+	var bar = "foo".data;
+	foo.begin (bar, new Baz (), () => {
+		assert (bar[0] == 'b');
+		loop.quit ();
+	});
+	loop.run ();
+}
diff --git a/tests/objects/bug667668.vala b/tests/objects/bug667668.vala
new file mode 100644
index 0000000..8f760c7
--- /dev/null
+++ b/tests/objects/bug667668.vala
@@ -0,0 +1,13 @@
+public abstract class Foo<G> : Object {
+	public abstract G foo { get; set; }
+}
+
+public class Bar : Foo<string> {
+	public override string foo { get; set; }
+}
+
+void main () {
+	var bar = new Bar ();
+	bar.foo = "foo";
+	assert (bar.foo == "foo");
+}
diff --git a/tests/objects/properties.vala b/tests/objects/properties.vala
index 78f17a7..b051825 100644
--- a/tests/objects/properties.vala
+++ b/tests/objects/properties.vala
@@ -2,6 +2,15 @@ using GLib;
 
 public delegate void Delegate ();
 
+public struct RealStruct {
+	public int field;
+}
+
+public class NonPrivAccess : Object {
+	[NoAccessorMethod]
+	public RealStruct real_struct { get; set; }
+}
+
 public class Sample : Object {
 	private string automatic { get; set; }
 
@@ -62,6 +71,10 @@ public class Sample : Object {
 	
 		stdout.printf (" 3\n");
 
+		var nonpriv = new NonPrivAccess ();
+		nonpriv.real_struct = { 10 };
+		assert (nonpriv.real_struct.field == 10);
+
 		return 0;
 	}
 }
diff --git a/tests/structs/bug667890.vala b/tests/structs/bug667890.vala
new file mode 100644
index 0000000..768ab8c
--- /dev/null
+++ b/tests/structs/bug667890.vala
@@ -0,0 +1,10 @@
+[SimpleType]
+struct Foo {
+	public int foo;
+}
+
+interface Bar : Object {
+	public abstract Foo bar ();
+}
+
+void main () { }
diff --git a/tests/structs/bug669580.vala b/tests/structs/bug669580.vala
new file mode 100644
index 0000000..ef1308b
--- /dev/null
+++ b/tests/structs/bug669580.vala
@@ -0,0 +1,10 @@
+struct Foo {
+	int i;
+}
+
+struct Bar : Foo {
+}
+
+void main() {
+	Bar bar = { 0 };
+}
diff --git a/tests/testrunner.sh b/tests/testrunner.sh
index adb20d6..02948c1 100755
--- a/tests/testrunner.sh
+++ b/tests/testrunner.sh
@@ -33,6 +33,12 @@ VALAFLAGS="--vapidir $vapidir --disable-warnings --main main --save-temps -X -g
 VAPIGEN=$topbuilddir/vapigen/vapigen
 VAPIGENFLAGS="--vapidir $vapidir"
 
+# Incorporate the user's CFLAGS. Matters if the user decided to insert
+# -m32 in CFLAGS, for example.
+for cflag in ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
+    VALAFLAGS="${VALAFLAGS} -X ${cflag}"
+done
+
 function testheader() {
 	if [ "$1" = "Packages:" ]; then
 		shift
diff --git a/vala/Makefile.am b/vala/Makefile.am
index 6d6f3e5..ad153ae 100644
--- a/vala/Makefile.am
+++ b/vala/Makefile.am
@@ -40,6 +40,7 @@ libvalacore_la_VALASOURCES = \
 	valacodevisitor.vala \
 	valacodewriter.vala \
 	valacomment.vala \
+	valagircomment.vala \
 	valaconditionalexpression.vala \
 	valaconstant.vala \
 	valaconstructor.vala \
diff --git a/vala/Makefile.in b/vala/Makefile.in
index d009fb3..9880b44 100644
--- a/vala/Makefile.in
+++ b/vala/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -17,6 +16,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkglibexecdir = $(libexecdir)/@PACKAGE@
@@ -36,7 +52,7 @@ build_triplet = @build@
 host_triplet = @host@
 subdir = vala
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-	$(valainclude_HEADERS)
+	$(top_srcdir)/build-aux/depcomp $(valainclude_HEADERS)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -63,7 +79,7 @@ am__objects_2 = valaaddressofexpression.lo \
 	valacharacterliteral.lo valaclass.lo valaclasstype.lo \
 	valacodecontext.lo valacodegenerator.lo valacodenode.lo \
 	valacodevisitor.lo valacodewriter.lo valacomment.lo \
-	valaconditionalexpression.lo valaconstant.lo \
+	valagircomment.lo valaconditionalexpression.lo valaconstant.lo \
 	valaconstructor.lo valacontinuestatement.lo \
 	valacreationmethod.lo valadatatype.lo \
 	valadeclarationstatement.lo valadelegate.lo \
@@ -111,8 +127,8 @@ am__objects_2 = valaaddressofexpression.lo \
 	$(am__objects_1)
 am_libvalacore_la_OBJECTS = $(am__objects_2) $(am__objects_1)
 libvalacore_la_OBJECTS = $(am_libvalacore_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_ AM_V@)
+am__v_lt_ = $(am__v_lt_ AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 DEFAULT_INCLUDES = -I  am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
@@ -124,24 +140,29 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
 	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
 	$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_ AM_V@)
+am__v_CC_ = $(am__v_CC_ AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+AM_V_at = $(am__v_at_ AM_V@)
+am__v_at_ = $(am__v_at_ AM_DEFAULT_V@)
 am__v_at_0 = @
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_CCLD = $(am__v_CCLD_ AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+AM_V_GEN = $(am__v_GEN_ AM_V@)
+am__v_GEN_ = $(am__v_GEN_ AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
 SOURCES = $(libvalacore_la_SOURCES)
 DIST_SOURCES = $(libvalacore_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -163,6 +184,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(valaincludedir)"
 HEADERS = $(valainclude_HEADERS)
 ETAGS = etags
@@ -291,7 +318,6 @@ libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 prefix = @prefix@
@@ -346,6 +372,7 @@ libvalacore_la_VALASOURCES = \
 	valacodevisitor.vala \
 	valacodewriter.vala \
 	valacomment.vala \
+	valagircomment.vala \
 	valaconditionalexpression.vala \
 	valaconstant.vala \
 	valaconstructor.vala \
@@ -533,13 +560,15 @@ $(am__aclocal_m4_deps):
 
 clean-noinstLTLIBRARIES:
 	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
-	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-	  test "$$dir" != "$$p" || dir=.; \
-	  echo "rm -f \"$${dir}/so_locations\""; \
-	  rm -f "$${dir}/so_locations"; \
-	done
-libvalacore.la: $(libvalacore_la_OBJECTS) $(libvalacore_la_DEPENDENCIES) 
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+libvalacore.la: $(libvalacore_la_OBJECTS) $(libvalacore_la_DEPENDENCIES) $(EXTRA_libvalacore_la_DEPENDENCIES) 
 	$(AM_V_CCLD)$(LINK)  $(libvalacore_la_OBJECTS) $(libvalacore_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
@@ -609,6 +638,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/valagenieparser Plo am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/valageniescanner Plo am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/valagenietokentype Plo am__quote@
+ AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/valagircomment Plo am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/valagirparser Plo am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/valaifstatement Plo am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/valainitializerlist Plo am__quote@
@@ -699,26 +729,23 @@ distclean-compile:
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(COMPILE) -c $<
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -727,8 +754,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-valaincludeHEADERS: $(valainclude_HEADERS)
 	@$(NORMAL_INSTALL)
-	test -z "$(valaincludedir)" || $(MKDIR_P) "$(DESTDIR)$(valaincludedir)"
 	@list='$(valainclude_HEADERS)'; test -n "$(valaincludedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(valaincludedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(valaincludedir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -742,9 +772,7 @@ uninstall-valaincludeHEADERS:
 	@$(NORMAL_UNINSTALL)
 	@list='$(valainclude_HEADERS)'; test -n "$(valaincludedir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(valaincludedir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(valaincludedir)" && rm -f $$files
+	dir='$(DESTDIR)$(valaincludedir)'; $(am__uninstall_files_from_dir)
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -795,6 +823,20 @@ GTAGS:
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
 
+cscopelist:  $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
@@ -847,10 +889,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -938,18 +985,19 @@ uninstall-am: uninstall-valaincludeHEADERS
 .MAKE: all check install install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip install-valaincludeHEADERS installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags uninstall uninstall-am uninstall-valaincludeHEADERS
+	clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip \
+	install-valaincludeHEADERS installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-valaincludeHEADERS
 
 	$(NULL)
 
diff --git a/vala/vala.h b/vala/vala.h
index 4dcb291..01de2a5 100644
--- a/vala/vala.h
+++ b/vala/vala.h
@@ -1207,6 +1207,17 @@ typedef struct _ValaCodeWriterPrivate ValaCodeWriterPrivate;
 
 #define VALA_TYPE_CODE_WRITER_TYPE (vala_code_writer_type_get_type ())
 typedef struct _ValaCommentPrivate ValaCommentPrivate;
+
+#define VALA_TYPE_GIR_COMMENT (vala_gir_comment_get_type ())
+#define VALA_GIR_COMMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_GIR_COMMENT, ValaGirComment))
+#define VALA_GIR_COMMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_GIR_COMMENT, ValaGirCommentClass))
+#define VALA_IS_GIR_COMMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_GIR_COMMENT))
+#define VALA_IS_GIR_COMMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_GIR_COMMENT))
+#define VALA_GIR_COMMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_GIR_COMMENT, ValaGirCommentClass))
+
+typedef struct _ValaGirComment ValaGirComment;
+typedef struct _ValaGirCommentClass ValaGirCommentClass;
+typedef struct _ValaGirCommentPrivate ValaGirCommentPrivate;
 typedef struct _ValaConditionalExpressionPrivate ValaConditionalExpressionPrivate;
 typedef struct _ValaConstantPrivate ValaConstantPrivate;
 typedef struct _ValaConstructorPrivate ValaConstructorPrivate;
@@ -2194,8 +2205,15 @@ struct _ValaComment {
 struct _ValaCommentClass {
 	GTypeClass parent_class;
 	void (*finalize) (ValaComment *self);
-	const gchar* (*get_content) (ValaComment* self);
-	void (*set_content) (ValaComment* self, const gchar* value);
+};
+
+struct _ValaGirComment {
+	ValaComment parent_instance;
+	ValaGirCommentPrivate * priv;
+};
+
+struct _ValaGirCommentClass {
+	ValaCommentClass parent_class;
 };
 
 struct _ValaConditionalExpression {
@@ -4121,6 +4139,13 @@ const gchar* vala_comment_get_content (ValaComment* self);
 void vala_comment_set_content (ValaComment* self, const gchar* value);
 ValaSourceReference* vala_comment_get_source_reference (ValaComment* self);
 void vala_comment_set_source_reference (ValaComment* self, ValaSourceReference* value);
+GType vala_gir_comment_get_type (void) G_GNUC_CONST;
+ValaMapIterator* vala_gir_comment_parameter_iterator (ValaGirComment* self);
+ValaGirComment* vala_gir_comment_new (const gchar* comment, ValaSourceReference* _source_reference);
+ValaGirComment* vala_gir_comment_construct (GType object_type, const gchar* comment, ValaSourceReference* _source_reference);
+ValaComment* vala_gir_comment_get_content_for_parameter (ValaGirComment* self, const gchar* name);
+ValaComment* vala_gir_comment_get_return_content (ValaGirComment* self);
+void vala_gir_comment_set_return_content (ValaGirComment* self, ValaComment* value);
 ValaConditionalExpression* vala_conditional_expression_new (ValaExpression* cond, ValaExpression* true_expr, ValaExpression* false_expr, ValaSourceReference* source);
 ValaConditionalExpression* vala_conditional_expression_construct (GType object_type, ValaExpression* cond, ValaExpression* true_expr, ValaExpression* false_expr, ValaSourceReference* source);
 ValaExpression* vala_conditional_expression_get_condition (ValaConditionalExpression* self);
@@ -4702,7 +4727,7 @@ ValaParameter* vala_property_accessor_get_value_parameter (ValaPropertyAccessor*
 void vala_property_accessor_set_value_parameter (ValaPropertyAccessor* self, ValaParameter* value);
 ValaProperty* vala_property_new (const gchar* name, ValaDataType* property_type, ValaPropertyAccessor* get_accessor, ValaPropertyAccessor* set_accessor, ValaSourceReference* source_reference, ValaComment* comment);
 ValaProperty* vala_property_construct (GType object_type, const gchar* name, ValaDataType* property_type, ValaPropertyAccessor* get_accessor, ValaPropertyAccessor* set_accessor, ValaSourceReference* source_reference, ValaComment* comment);
-gboolean vala_property_equals (ValaProperty* self, ValaProperty* prop2);
+gboolean vala_property_compatible (ValaProperty* self, ValaProperty* base_property, gchar** invalid_match);
 ValaDataType* vala_property_get_property_type (ValaProperty* self);
 void vala_property_set_property_type (ValaProperty* self, ValaDataType* value);
 ValaPropertyAccessor* vala_property_get_get_accessor (ValaProperty* self);
diff --git a/vala/vala.vapi b/vala/vala.vapi
index d5e7765..7aa0818 100644
--- a/vala/vala.vapi
+++ b/vala/vala.vapi
@@ -731,7 +731,7 @@ namespace Vala {
 	[CCode (cheader_filename = "vala.h")]
 	public class Comment {
 		public Comment (string comment, Vala.SourceReference _source_reference);
-		public virtual string content { get; set; }
+		public string content { get; set; }
 		public Vala.SourceReference source_reference { get; set; }
 	}
 	[CCode (cheader_filename = "vala.h")]
@@ -1123,6 +1123,13 @@ namespace Vala {
 		public override string to_qualified_string (Vala.Scope? scope = null);
 	}
 	[CCode (cheader_filename = "vala.h")]
+	public class GirComment : Vala.Comment {
+		public GirComment (string? comment, Vala.SourceReference _source_reference);
+		public Vala.Comment? get_content_for_parameter (string name);
+		public Vala.MapIterator<string,Vala.Comment> parameter_iterator ();
+		public Vala.Comment? return_content { get; set; }
+	}
+	[CCode (cheader_filename = "vala.h")]
 	public class GirParser : Vala.CodeVisitor {
 		public GirParser ();
 		public void parse (Vala.CodeContext context);
@@ -1603,7 +1610,7 @@ namespace Vala {
 		public override void accept (Vala.CodeVisitor visitor);
 		public override void accept_children (Vala.CodeVisitor visitor);
 		public override bool check (Vala.CodeContext context);
-		public bool equals (Vala.Property prop2);
+		public bool compatible (Vala.Property base_property, out string? invalid_match);
 		public override void replace_type (Vala.DataType old_type, Vala.DataType new_type);
 		public Vala.Property base_interface_property { get; }
 		public Vala.Property base_property { get; }
@@ -1839,6 +1846,7 @@ namespace Vala {
 		public override void accept_children (Vala.CodeVisitor visitor);
 		public override bool check (Vala.CodeContext context);
 		public override void emit (Vala.CodeGenerator codegen);
+		public override bool is_constant ();
 		public override bool is_pure ();
 		public override void replace_type (Vala.DataType old_type, Vala.DataType new_type);
 		public Vala.DataType type_reference { get; set; }
diff --git a/vala/valaarraytype.c b/vala/valaarraytype.c
index 5e7440a..77b9b50 100644
--- a/vala/valaarraytype.c
+++ b/vala/valaarraytype.c
@@ -2093,11 +2093,15 @@ static gboolean vala_array_type_real_compatible (ValaDataType* base, ValaDataTyp
 	gboolean _tmp70_ = FALSE;
 	ValaDataType* _tmp71_;
 	ValaDataType* _tmp72_;
-	ValaArrayType* _tmp73_;
-	ValaDataType* _tmp74_;
-	ValaDataType* _tmp75_;
-	gboolean _tmp76_ = FALSE;
-	gboolean _tmp83_;
+	gboolean _tmp82_;
+	gboolean _tmp83_ = FALSE;
+	ValaDataType* _tmp84_;
+	ValaDataType* _tmp85_;
+	ValaArrayType* _tmp86_;
+	ValaDataType* _tmp87_;
+	ValaDataType* _tmp88_;
+	gboolean _tmp89_ = FALSE;
+	gboolean _tmp96_;
 	self = (ValaArrayType*) base;
 	g_return_val_if_fail (target_type != NULL, FALSE);
 	_tmp1_ = vala_code_context_get ();
@@ -2274,29 +2278,60 @@ static gboolean vala_array_type_real_compatible (ValaDataType* base, ValaDataTyp
 	}
 	_tmp71_ = vala_array_type_get_element_type (self);
 	_tmp72_ = _tmp71_;
-	_tmp73_ = target_array_type;
-	_tmp74_ = vala_array_type_get_element_type (_tmp73_);
-	_tmp75_ = _tmp74_;
-	_tmp76_ = vala_data_type_compatible (_tmp72_, _tmp75_);
-	if (_tmp76_) {
+	if (VALA_IS_VALUE_TYPE (_tmp72_)) {
+		ValaDataType* _tmp73_;
+		ValaDataType* _tmp74_;
+		gboolean _tmp75_;
+		gboolean _tmp76_;
 		ValaArrayType* _tmp77_;
 		ValaDataType* _tmp78_;
 		ValaDataType* _tmp79_;
-		ValaDataType* _tmp80_;
-		ValaDataType* _tmp81_;
-		gboolean _tmp82_ = FALSE;
+		gboolean _tmp80_;
+		gboolean _tmp81_;
+		_tmp73_ = vala_array_type_get_element_type (self);
+		_tmp74_ = _tmp73_;
+		_tmp75_ = vala_data_type_get_nullable (_tmp74_);
+		_tmp76_ = _tmp75_;
 		_tmp77_ = target_array_type;
 		_tmp78_ = vala_array_type_get_element_type (_tmp77_);
 		_tmp79_ = _tmp78_;
-		_tmp80_ = vala_array_type_get_element_type (self);
+		_tmp80_ = vala_data_type_get_nullable (_tmp79_);
 		_tmp81_ = _tmp80_;
-		_tmp82_ = vala_data_type_compatible (_tmp79_, _tmp81_);
-		_tmp70_ = _tmp82_;
+		_tmp70_ = _tmp76_ != _tmp81_;
 	} else {
 		_tmp70_ = FALSE;
 	}
-	_tmp83_ = _tmp70_;
-	if (_tmp83_) {
+	_tmp82_ = _tmp70_;
+	if (_tmp82_) {
+		result = FALSE;
+		_vala_code_node_unref0 (target_array_type);
+		return result;
+	}
+	_tmp84_ = vala_array_type_get_element_type (self);
+	_tmp85_ = _tmp84_;
+	_tmp86_ = target_array_type;
+	_tmp87_ = vala_array_type_get_element_type (_tmp86_);
+	_tmp88_ = _tmp87_;
+	_tmp89_ = vala_data_type_compatible (_tmp85_, _tmp88_);
+	if (_tmp89_) {
+		ValaArrayType* _tmp90_;
+		ValaDataType* _tmp91_;
+		ValaDataType* _tmp92_;
+		ValaDataType* _tmp93_;
+		ValaDataType* _tmp94_;
+		gboolean _tmp95_ = FALSE;
+		_tmp90_ = target_array_type;
+		_tmp91_ = vala_array_type_get_element_type (_tmp90_);
+		_tmp92_ = _tmp91_;
+		_tmp93_ = vala_array_type_get_element_type (self);
+		_tmp94_ = _tmp93_;
+		_tmp95_ = vala_data_type_compatible (_tmp92_, _tmp94_);
+		_tmp83_ = _tmp95_;
+	} else {
+		_tmp83_ = FALSE;
+	}
+	_tmp96_ = _tmp83_;
+	if (_tmp96_) {
 		result = TRUE;
 		_vala_code_node_unref0 (target_array_type);
 		return result;
diff --git a/vala/valaarraytype.vala b/vala/valaarraytype.vala
index 040df21..ecd8a0e 100644
--- a/vala/valaarraytype.vala
+++ b/vala/valaarraytype.vala
@@ -188,6 +188,10 @@ public class Vala.ArrayType : ReferenceType {
 			return false;
 		}
 
+		if (element_type is ValueType && element_type.nullable != target_array_type.element_type.nullable) {
+			return false;
+		}
+
 		if (element_type.compatible (target_array_type.element_type)
 		    && target_array_type.element_type.compatible (element_type)) {
 			return true;
diff --git a/vala/valaassignment.c b/vala/valaassignment.c
index 8cf2fac..5770236 100644
--- a/vala/valaassignment.c
+++ b/vala/valaassignment.c
@@ -1609,6 +1609,7 @@ ValaBinaryOperator vala_binary_expression_get_operator (ValaBinaryExpression* se
 static void vala_assignment_real_emit (ValaCodeNode* base, ValaCodeGenerator* codegen);
 ValaMemberBinding vala_property_get_binding (ValaProperty* self);
 GType vala_array_length_field_get_type (void) G_GNUC_CONST;
+gboolean vala_data_type_is_real_non_null_struct_type (ValaDataType* self);
 void vala_code_node_emit (ValaCodeNode* self, ValaCodeGenerator* codegen);
 gpointer vala_target_value_ref (gpointer instance);
 void vala_target_value_unref (gpointer instance);
@@ -4272,11 +4273,11 @@ static void vala_assignment_real_emit (ValaCodeNode* base, ValaCodeGenerator* co
 	ValaPointerIndirection* _tmp8_;
 	ValaPointerIndirection* pi;
 	ValaMemberAccess* _tmp9_;
-	ValaExpression* _tmp151_;
-	ValaExpression* _tmp152_;
-	ValaCodeGenerator* _tmp153_;
-	ValaCodeGenerator* _tmp154_;
-	ValaCodeGenerator* _tmp155_;
+	ValaExpression* _tmp162_;
+	ValaExpression* _tmp163_;
+	ValaCodeGenerator* _tmp164_;
+	ValaCodeGenerator* _tmp165_;
+	ValaCodeGenerator* _tmp166_;
 	self = (ValaAssignment*) base;
 	g_return_if_fail (codegen != NULL);
 	_tmp0_ = vala_assignment_get_left (self);
@@ -4322,15 +4323,17 @@ static void vala_assignment_real_emit (ValaCodeNode* base, ValaCodeGenerator* co
 		gboolean _tmp40_ = FALSE;
 		gboolean _tmp41_ = FALSE;
 		gboolean _tmp42_ = FALSE;
-		ValaAssignmentOperator _tmp43_;
-		gboolean _tmp51_;
-		gboolean _tmp53_;
-		gboolean _tmp55_;
-		gboolean _tmp130_ = FALSE;
-		gboolean _tmp131_ = FALSE;
-		gboolean _tmp132_;
-		gboolean _tmp136_;
-		gboolean _tmp138_;
+		gboolean _tmp43_ = FALSE;
+		ValaAssignmentOperator _tmp44_;
+		gboolean _tmp52_;
+		gboolean _tmp54_;
+		gboolean _tmp56_;
+		gboolean _tmp66_;
+		gboolean _tmp141_ = FALSE;
+		gboolean _tmp142_ = FALSE;
+		gboolean _tmp143_;
+		gboolean _tmp147_;
+		gboolean _tmp149_;
 		_tmp10_ = ma;
 		_tmp11_ = vala_expression_get_symbol_reference ((ValaExpression*) _tmp10_);
 		_tmp12_ = _tmp11_;
@@ -4387,254 +4390,282 @@ static void vala_assignment_real_emit (ValaCodeNode* base, ValaCodeGenerator* co
 		}
 		_tmp39_ = _tmp26_;
 		instance = _tmp39_;
-		_tmp43_ = self->priv->_operator;
-		if (_tmp43_ == VALA_ASSIGNMENT_OPERATOR_SIMPLE) {
-			gboolean _tmp44_ = FALSE;
+		_tmp44_ = self->priv->_operator;
+		if (_tmp44_ == VALA_ASSIGNMENT_OPERATOR_SIMPLE) {
 			gboolean _tmp45_ = FALSE;
-			ValaLocalVariable* _tmp46_;
-			gboolean _tmp48_;
-			gboolean _tmp50_;
-			_tmp46_ = local;
-			if (_tmp46_ != NULL) {
-				_tmp45_ = TRUE;
+			gboolean _tmp46_ = FALSE;
+			ValaLocalVariable* _tmp47_;
+			gboolean _tmp49_;
+			gboolean _tmp51_;
+			_tmp47_ = local;
+			if (_tmp47_ != NULL) {
+				_tmp46_ = TRUE;
 			} else {
-				ValaParameter* _tmp47_;
-				_tmp47_ = param;
-				_tmp45_ = _tmp47_ != NULL;
+				ValaParameter* _tmp48_;
+				_tmp48_ = param;
+				_tmp46_ = _tmp48_ != NULL;
 			}
-			_tmp48_ = _tmp45_;
-			if (_tmp48_) {
-				_tmp44_ = TRUE;
+			_tmp49_ = _tmp46_;
+			if (_tmp49_) {
+				_tmp45_ = TRUE;
 			} else {
-				ValaField* _tmp49_;
-				_tmp49_ = field;
-				_tmp44_ = _tmp49_ != NULL;
+				ValaField* _tmp50_;
+				_tmp50_ = field;
+				_tmp45_ = _tmp50_ != NULL;
 			}
-			_tmp50_ = _tmp44_;
-			_tmp42_ = _tmp50_;
+			_tmp51_ = _tmp45_;
+			_tmp43_ = _tmp51_;
+		} else {
+			_tmp43_ = FALSE;
+		}
+		_tmp52_ = _tmp43_;
+		if (_tmp52_) {
+			gboolean _tmp53_ = FALSE;
+			_tmp53_ = vala_assignment_is_array_add (self);
+			_tmp42_ = !_tmp53_;
 		} else {
 			_tmp42_ = FALSE;
 		}
-		_tmp51_ = _tmp42_;
-		if (_tmp51_) {
-			gboolean _tmp52_ = FALSE;
-			_tmp52_ = vala_assignment_is_array_add (self);
-			_tmp41_ = !_tmp52_;
+		_tmp54_ = _tmp42_;
+		if (_tmp54_) {
+			ValaField* _tmp55_;
+			_tmp55_ = field;
+			_tmp41_ = !VALA_IS_ARRAY_LENGTH_FIELD (_tmp55_);
 		} else {
 			_tmp41_ = FALSE;
 		}
-		_tmp53_ = _tmp41_;
-		if (_tmp53_) {
-			ValaField* _tmp54_;
-			_tmp54_ = field;
-			_tmp40_ = !VALA_IS_ARRAY_LENGTH_FIELD (_tmp54_);
+		_tmp56_ = _tmp41_;
+		if (_tmp56_) {
+			gboolean _tmp57_ = FALSE;
+			ValaExpression* _tmp58_;
+			ValaExpression* _tmp59_;
+			ValaDataType* _tmp60_;
+			ValaDataType* _tmp61_;
+			gboolean _tmp62_ = FALSE;
+			gboolean _tmp65_;
+			_tmp58_ = vala_assignment_get_left (self);
+			_tmp59_ = _tmp58_;
+			_tmp60_ = vala_expression_get_value_type (_tmp59_);
+			_tmp61_ = _tmp60_;
+			_tmp62_ = vala_data_type_is_real_non_null_struct_type (_tmp61_);
+			if (_tmp62_) {
+				ValaExpression* _tmp63_;
+				ValaExpression* _tmp64_;
+				_tmp63_ = vala_assignment_get_right (self);
+				_tmp64_ = _tmp63_;
+				_tmp57_ = VALA_IS_OBJECT_CREATION_EXPRESSION (_tmp64_);
+			} else {
+				_tmp57_ = FALSE;
+			}
+			_tmp65_ = _tmp57_;
+			_tmp40_ = !_tmp65_;
 		} else {
 			_tmp40_ = FALSE;
 		}
-		_tmp55_ = _tmp40_;
-		if (_tmp55_) {
-			gboolean _tmp56_ = FALSE;
-			gboolean _tmp57_;
-			gboolean _tmp61_;
-			ValaExpression* _tmp66_;
-			ValaExpression* _tmp67_;
-			ValaCodeGenerator* _tmp68_;
-			ValaExpression* _tmp69_;
-			ValaExpression* _tmp70_;
-			ValaTargetValue* _tmp71_;
-			ValaTargetValue* _tmp72_;
-			ValaTargetValue* _tmp73_;
+		_tmp66_ = _tmp40_;
+		if (_tmp66_) {
+			gboolean _tmp67_ = FALSE;
+			gboolean _tmp68_;
+			gboolean _tmp72_;
+			ValaExpression* _tmp77_;
+			ValaExpression* _tmp78_;
+			ValaCodeGenerator* _tmp79_;
+			ValaExpression* _tmp80_;
+			ValaExpression* _tmp81_;
+			ValaTargetValue* _tmp82_;
+			ValaTargetValue* _tmp83_;
+			ValaTargetValue* _tmp84_;
 			ValaTargetValue* new_value;
-			ValaLocalVariable* _tmp74_;
-			ValaCodeNode* _tmp99_;
-			ValaCodeNode* _tmp100_;
-			ValaCodeGenerator* _tmp129_;
-			_tmp57_ = instance;
-			if (_tmp57_) {
-				ValaMemberAccess* _tmp58_;
-				ValaExpression* _tmp59_;
-				ValaExpression* _tmp60_;
-				_tmp58_ = ma;
-				_tmp59_ = vala_member_access_get_inner (_tmp58_);
-				_tmp60_ = _tmp59_;
-				_tmp56_ = _tmp60_ != NULL;
+			ValaLocalVariable* _tmp85_;
+			ValaCodeNode* _tmp110_;
+			ValaCodeNode* _tmp111_;
+			ValaCodeGenerator* _tmp140_;
+			_tmp68_ = instance;
+			if (_tmp68_) {
+				ValaMemberAccess* _tmp69_;
+				ValaExpression* _tmp70_;
+				ValaExpression* _tmp71_;
+				_tmp69_ = ma;
+				_tmp70_ = vala_member_access_get_inner (_tmp69_);
+				_tmp71_ = _tmp70_;
+				_tmp67_ = _tmp71_ != NULL;
 			} else {
-				_tmp56_ = FALSE;
+				_tmp67_ = FALSE;
 			}
-			_tmp61_ = _tmp56_;
-			if (_tmp61_) {
-				ValaMemberAccess* _tmp62_;
-				ValaExpression* _tmp63_;
-				ValaExpression* _tmp64_;
-				ValaCodeGenerator* _tmp65_;
-				_tmp62_ = ma;
-				_tmp63_ = vala_member_access_get_inner (_tmp62_);
-				_tmp64_ = _tmp63_;
-				_tmp65_ = codegen;
-				vala_code_node_emit ((ValaCodeNode*) _tmp64_, _tmp65_);
+			_tmp72_ = _tmp67_;
+			if (_tmp72_) {
+				ValaMemberAccess* _tmp73_;
+				ValaExpression* _tmp74_;
+				ValaExpression* _tmp75_;
+				ValaCodeGenerator* _tmp76_;
+				_tmp73_ = ma;
+				_tmp74_ = vala_member_access_get_inner (_tmp73_);
+				_tmp75_ = _tmp74_;
+				_tmp76_ = codegen;
+				vala_code_node_emit ((ValaCodeNode*) _tmp75_, _tmp76_);
 			}
-			_tmp66_ = vala_assignment_get_right (self);
-			_tmp67_ = _tmp66_;
-			_tmp68_ = codegen;
-			vala_code_node_emit ((ValaCodeNode*) _tmp67_, _tmp68_);
-			_tmp69_ = vala_assignment_get_right (self);
-			_tmp70_ = _tmp69_;
-			_tmp71_ = vala_expression_get_target_value (_tmp70_);
-			_tmp72_ = _tmp71_;
-			_tmp73_ = _vala_target_value_ref0 (_tmp72_);
-			new_value = _tmp73_;
-			_tmp74_ = local;
-			if (_tmp74_ != NULL) {
-				ValaCodeGenerator* _tmp75_;
-				ValaLocalVariable* _tmp76_;
-				ValaTargetValue* _tmp77_;
-				_tmp75_ = codegen;
-				_tmp76_ = local;
-				_tmp77_ = new_value;
-				vala_code_generator_store_local (_tmp75_, _tmp76_, _tmp77_, FALSE);
+			_tmp77_ = vala_assignment_get_right (self);
+			_tmp78_ = _tmp77_;
+			_tmp79_ = codegen;
+			vala_code_node_emit ((ValaCodeNode*) _tmp78_, _tmp79_);
+			_tmp80_ = vala_assignment_get_right (self);
+			_tmp81_ = _tmp80_;
+			_tmp82_ = vala_expression_get_target_value (_tmp81_);
+			_tmp83_ = _tmp82_;
+			_tmp84_ = _vala_target_value_ref0 (_tmp83_);
+			new_value = _tmp84_;
+			_tmp85_ = local;
+			if (_tmp85_ != NULL) {
+				ValaCodeGenerator* _tmp86_;
+				ValaLocalVariable* _tmp87_;
+				ValaTargetValue* _tmp88_;
+				_tmp86_ = codegen;
+				_tmp87_ = local;
+				_tmp88_ = new_value;
+				vala_code_generator_store_local (_tmp86_, _tmp87_, _tmp88_, FALSE);
 			} else {
-				ValaParameter* _tmp78_;
-				_tmp78_ = param;
-				if (_tmp78_ != NULL) {
-					ValaCodeGenerator* _tmp79_;
-					ValaParameter* _tmp80_;
-					ValaTargetValue* _tmp81_;
-					_tmp79_ = codegen;
-					_tmp80_ = param;
-					_tmp81_ = new_value;
-					vala_code_generator_store_parameter (_tmp79_, _tmp80_, _tmp81_);
+				ValaParameter* _tmp89_;
+				_tmp89_ = param;
+				if (_tmp89_ != NULL) {
+					ValaCodeGenerator* _tmp90_;
+					ValaParameter* _tmp91_;
+					ValaTargetValue* _tmp92_;
+					_tmp90_ = codegen;
+					_tmp91_ = param;
+					_tmp92_ = new_value;
+					vala_code_generator_store_parameter (_tmp90_, _tmp91_, _tmp92_);
 				} else {
-					ValaField* _tmp82_;
-					_tmp82_ = field;
-					if (_tmp82_ != NULL) {
-						ValaTargetValue* _tmp83_ = NULL;
-						gboolean _tmp84_ = FALSE;
-						gboolean _tmp85_;
-						gboolean _tmp89_;
-						ValaCodeGenerator* _tmp95_;
-						ValaField* _tmp96_;
-						ValaTargetValue* _tmp97_;
-						ValaTargetValue* _tmp98_;
-						_tmp85_ = instance;
-						if (_tmp85_) {
-							ValaMemberAccess* _tmp86_;
-							ValaExpression* _tmp87_;
-							ValaExpression* _tmp88_;
-							_tmp86_ = ma;
-							_tmp87_ = vala_member_access_get_inner (_tmp86_);
-							_tmp88_ = _tmp87_;
-							_tmp84_ = _tmp88_ != NULL;
+					ValaField* _tmp93_;
+					_tmp93_ = field;
+					if (_tmp93_ != NULL) {
+						ValaTargetValue* _tmp94_ = NULL;
+						gboolean _tmp95_ = FALSE;
+						gboolean _tmp96_;
+						gboolean _tmp100_;
+						ValaCodeGenerator* _tmp106_;
+						ValaField* _tmp107_;
+						ValaTargetValue* _tmp108_;
+						ValaTargetValue* _tmp109_;
+						_tmp96_ = instance;
+						if (_tmp96_) {
+							ValaMemberAccess* _tmp97_;
+							ValaExpression* _tmp98_;
+							ValaExpression* _tmp99_;
+							_tmp97_ = ma;
+							_tmp98_ = vala_member_access_get_inner (_tmp97_);
+							_tmp99_ = _tmp98_;
+							_tmp95_ = _tmp99_ != NULL;
 						} else {
-							_tmp84_ = FALSE;
+							_tmp95_ = FALSE;
 						}
-						_tmp89_ = _tmp84_;
-						if (_tmp89_) {
-							ValaMemberAccess* _tmp90_;
-							ValaExpression* _tmp91_;
-							ValaExpression* _tmp92_;
-							ValaTargetValue* _tmp93_;
-							ValaTargetValue* _tmp94_;
-							_tmp90_ = ma;
-							_tmp91_ = vala_member_access_get_inner (_tmp90_);
-							_tmp92_ = _tmp91_;
-							_tmp93_ = vala_expression_get_target_value (_tmp92_);
-							_tmp94_ = _tmp93_;
-							_tmp83_ = _tmp94_;
+						_tmp100_ = _tmp95_;
+						if (_tmp100_) {
+							ValaMemberAccess* _tmp101_;
+							ValaExpression* _tmp102_;
+							ValaExpression* _tmp103_;
+							ValaTargetValue* _tmp104_;
+							ValaTargetValue* _tmp105_;
+							_tmp101_ = ma;
+							_tmp102_ = vala_member_access_get_inner (_tmp101_);
+							_tmp103_ = _tmp102_;
+							_tmp104_ = vala_expression_get_target_value (_tmp103_);
+							_tmp105_ = _tmp104_;
+							_tmp94_ = _tmp105_;
 						} else {
-							_tmp83_ = NULL;
+							_tmp94_ = NULL;
 						}
-						_tmp95_ = codegen;
-						_tmp96_ = field;
-						_tmp97_ = _tmp83_;
-						_tmp98_ = new_value;
-						vala_code_generator_store_field (_tmp95_, _tmp96_, _tmp97_, _tmp98_);
+						_tmp106_ = codegen;
+						_tmp107_ = field;
+						_tmp108_ = _tmp94_;
+						_tmp109_ = new_value;
+						vala_code_generator_store_field (_tmp106_, _tmp107_, _tmp108_, _tmp109_);
 					}
 				}
 			}
-			_tmp99_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
-			_tmp100_ = _tmp99_;
-			if (!VALA_IS_EXPRESSION_STATEMENT (_tmp100_)) {
-				ValaLocalVariable* _tmp101_;
-				_tmp101_ = local;
-				if (_tmp101_ != NULL) {
-					ValaCodeGenerator* _tmp102_;
-					ValaLocalVariable* _tmp103_;
-					ValaTargetValue* _tmp104_ = NULL;
-					ValaTargetValue* _tmp105_;
-					_tmp102_ = codegen;
-					_tmp103_ = local;
-					_tmp104_ = vala_code_generator_load_local (_tmp102_, _tmp103_);
-					_tmp105_ = _tmp104_;
-					vala_expression_set_target_value ((ValaExpression*) self, _tmp105_);
-					_vala_target_value_unref0 (_tmp105_);
+			_tmp110_ = vala_code_node_get_parent_node ((ValaCodeNode*) self);
+			_tmp111_ = _tmp110_;
+			if (!VALA_IS_EXPRESSION_STATEMENT (_tmp111_)) {
+				ValaLocalVariable* _tmp112_;
+				_tmp112_ = local;
+				if (_tmp112_ != NULL) {
+					ValaCodeGenerator* _tmp113_;
+					ValaLocalVariable* _tmp114_;
+					ValaTargetValue* _tmp115_ = NULL;
+					ValaTargetValue* _tmp116_;
+					_tmp113_ = codegen;
+					_tmp114_ = local;
+					_tmp115_ = vala_code_generator_load_local (_tmp113_, _tmp114_);
+					_tmp116_ = _tmp115_;
+					vala_expression_set_target_value ((ValaExpression*) self, _tmp116_);
+					_vala_target_value_unref0 (_tmp116_);
 				} else {
-					ValaParameter* _tmp106_;
-					_tmp106_ = param;
-					if (_tmp106_ != NULL) {
-						ValaCodeGenerator* _tmp107_;
-						ValaParameter* _tmp108_;
-						ValaTargetValue* _tmp109_ = NULL;
-						ValaTargetValue* _tmp110_;
-						_tmp107_ = codegen;
-						_tmp108_ = param;
-						_tmp109_ = vala_code_generator_load_parameter (_tmp107_, _tmp108_);
-						_tmp110_ = _tmp109_;
-						vala_expression_set_target_value ((ValaExpression*) self, _tmp110_);
-						_vala_target_value_unref0 (_tmp110_);
+					ValaParameter* _tmp117_;
+					_tmp117_ = param;
+					if (_tmp117_ != NULL) {
+						ValaCodeGenerator* _tmp118_;
+						ValaParameter* _tmp119_;
+						ValaTargetValue* _tmp120_ = NULL;
+						ValaTargetValue* _tmp121_;
+						_tmp118_ = codegen;
+						_tmp119_ = param;
+						_tmp120_ = vala_code_generator_load_parameter (_tmp118_, _tmp119_);
+						_tmp121_ = _tmp120_;
+						vala_expression_set_target_value ((ValaExpression*) self, _tmp121_);
+						_vala_target_value_unref0 (_tmp121_);
 					} else {
-						ValaField* _tmp111_;
-						_tmp111_ = field;
-						if (_tmp111_ != NULL) {
-							ValaTargetValue* _tmp112_ = NULL;
-							gboolean _tmp113_ = FALSE;
-							gboolean _tmp114_;
-							gboolean _tmp118_;
-							ValaCodeGenerator* _tmp124_;
-							ValaField* _tmp125_;
-							ValaTargetValue* _tmp126_;
-							ValaTargetValue* _tmp127_ = NULL;
-							ValaTargetValue* _tmp128_;
-							_tmp114_ = instance;
-							if (_tmp114_) {
-								ValaMemberAccess* _tmp115_;
-								ValaExpression* _tmp116_;
-								ValaExpression* _tmp117_;
-								_tmp115_ = ma;
-								_tmp116_ = vala_member_access_get_inner (_tmp115_);
-								_tmp117_ = _tmp116_;
-								_tmp113_ = _tmp117_ != NULL;
+						ValaField* _tmp122_;
+						_tmp122_ = field;
+						if (_tmp122_ != NULL) {
+							ValaTargetValue* _tmp123_ = NULL;
+							gboolean _tmp124_ = FALSE;
+							gboolean _tmp125_;
+							gboolean _tmp129_;
+							ValaCodeGenerator* _tmp135_;
+							ValaField* _tmp136_;
+							ValaTargetValue* _tmp137_;
+							ValaTargetValue* _tmp138_ = NULL;
+							ValaTargetValue* _tmp139_;
+							_tmp125_ = instance;
+							if (_tmp125_) {
+								ValaMemberAccess* _tmp126_;
+								ValaExpression* _tmp127_;
+								ValaExpression* _tmp128_;
+								_tmp126_ = ma;
+								_tmp127_ = vala_member_access_get_inner (_tmp126_);
+								_tmp128_ = _tmp127_;
+								_tmp124_ = _tmp128_ != NULL;
 							} else {
-								_tmp113_ = FALSE;
+								_tmp124_ = FALSE;
 							}
-							_tmp118_ = _tmp113_;
-							if (_tmp118_) {
-								ValaMemberAccess* _tmp119_;
-								ValaExpression* _tmp120_;
-								ValaExpression* _tmp121_;
-								ValaTargetValue* _tmp122_;
-								ValaTargetValue* _tmp123_;
-								_tmp119_ = ma;
-								_tmp120_ = vala_member_access_get_inner (_tmp119_);
-								_tmp121_ = _tmp120_;
-								_tmp122_ = vala_expression_get_target_value (_tmp121_);
-								_tmp123_ = _tmp122_;
-								_tmp112_ = _tmp123_;
+							_tmp129_ = _tmp124_;
+							if (_tmp129_) {
+								ValaMemberAccess* _tmp130_;
+								ValaExpression* _tmp131_;
+								ValaExpression* _tmp132_;
+								ValaTargetValue* _tmp133_;
+								ValaTargetValue* _tmp134_;
+								_tmp130_ = ma;
+								_tmp131_ = vala_member_access_get_inner (_tmp130_);
+								_tmp132_ = _tmp131_;
+								_tmp133_ = vala_expression_get_target_value (_tmp132_);
+								_tmp134_ = _tmp133_;
+								_tmp123_ = _tmp134_;
 							} else {
-								_tmp112_ = NULL;
+								_tmp123_ = NULL;
 							}
-							_tmp124_ = codegen;
-							_tmp125_ = field;
-							_tmp126_ = _tmp112_;
-							_tmp127_ = vala_code_generator_load_field (_tmp124_, _tmp125_, _tmp126_);
-							_tmp128_ = _tmp127_;
-							vala_expression_set_target_value ((ValaExpression*) self, _tmp128_);
-							_vala_target_value_unref0 (_tmp128_);
+							_tmp135_ = codegen;
+							_tmp136_ = field;
+							_tmp137_ = _tmp123_;
+							_tmp138_ = vala_code_generator_load_field (_tmp135_, _tmp136_, _tmp137_);
+							_tmp139_ = _tmp138_;
+							vala_expression_set_target_value ((ValaExpression*) self, _tmp139_);
+							_vala_target_value_unref0 (_tmp139_);
 						}
 					}
 				}
 			}
-			_tmp129_ = codegen;
-			vala_code_visitor_visit_expression ((ValaCodeVisitor*) _tmp129_, (ValaExpression*) self);
+			_tmp140_ = codegen;
+			vala_code_visitor_visit_expression ((ValaCodeVisitor*) _tmp140_, (ValaExpression*) self);
 			_vala_target_value_unref0 (new_value);
 			_vala_code_node_unref0 (property);
 			_vala_code_node_unref0 (field);
@@ -4645,77 +4676,77 @@ static void vala_assignment_real_emit (ValaCodeNode* base, ValaCodeGenerator* co
 			_vala_code_node_unref0 (ma);
 			return;
 		}
-		_tmp132_ = instance;
-		if (_tmp132_) {
-			ValaMemberAccess* _tmp133_;
-			ValaExpression* _tmp134_;
-			ValaExpression* _tmp135_;
-			_tmp133_ = ma;
-			_tmp134_ = vala_member_access_get_inner (_tmp133_);
-			_tmp135_ = _tmp134_;
-			_tmp131_ = _tmp135_ != NULL;
+		_tmp143_ = instance;
+		if (_tmp143_) {
+			ValaMemberAccess* _tmp144_;
+			ValaExpression* _tmp145_;
+			ValaExpression* _tmp146_;
+			_tmp144_ = ma;
+			_tmp145_ = vala_member_access_get_inner (_tmp144_);
+			_tmp146_ = _tmp145_;
+			_tmp142_ = _tmp146_ != NULL;
 		} else {
-			_tmp131_ = FALSE;
+			_tmp142_ = FALSE;
 		}
-		_tmp136_ = _tmp131_;
-		if (_tmp136_) {
-			ValaProperty* _tmp137_;
-			_tmp137_ = property;
-			_tmp130_ = _tmp137_ != NULL;
+		_tmp147_ = _tmp142_;
+		if (_tmp147_) {
+			ValaProperty* _tmp148_;
+			_tmp148_ = property;
+			_tmp141_ = _tmp148_ != NULL;
 		} else {
-			_tmp130_ = FALSE;
+			_tmp141_ = FALSE;
 		}
-		_tmp138_ = _tmp130_;
-		if (_tmp138_) {
-			ValaMemberAccess* _tmp139_;
-			ValaExpression* _tmp140_;
-			ValaExpression* _tmp141_;
-			ValaCodeGenerator* _tmp142_;
-			_tmp139_ = ma;
-			_tmp140_ = vala_member_access_get_inner (_tmp139_);
-			_tmp141_ = _tmp140_;
-			_tmp142_ = codegen;
-			vala_code_node_emit ((ValaCodeNode*) _tmp141_, _tmp142_);
+		_tmp149_ = _tmp141_;
+		if (_tmp149_) {
+			ValaMemberAccess* _tmp150_;
+			ValaExpression* _tmp151_;
+			ValaExpression* _tmp152_;
+			ValaCodeGenerator* _tmp153_;
+			_tmp150_ = ma;
+			_tmp151_ = vala_member_access_get_inner (_tmp150_);
+			_tmp152_ = _tmp151_;
+			_tmp153_ = codegen;
+			vala_code_node_emit ((ValaCodeNode*) _tmp152_, _tmp153_);
 		} else {
-			ValaMemberAccess* _tmp143_;
-			ValaCodeGenerator* _tmp144_;
-			_tmp143_ = ma;
-			_tmp144_ = codegen;
-			vala_code_node_emit ((ValaCodeNode*) _tmp143_, _tmp144_);
+			ValaMemberAccess* _tmp154_;
+			ValaCodeGenerator* _tmp155_;
+			_tmp154_ = ma;
+			_tmp155_ = codegen;
+			vala_code_node_emit ((ValaCodeNode*) _tmp154_, _tmp155_);
 		}
 		_vala_code_node_unref0 (property);
 		_vala_code_node_unref0 (field);
 		_vala_code_node_unref0 (param);
 		_vala_code_node_unref0 (local);
 	} else {
-		ValaElementAccess* _tmp145_;
-		_tmp145_ = ea;
-		if (_tmp145_ != NULL) {
-			ValaElementAccess* _tmp146_;
-			ValaCodeGenerator* _tmp147_;
-			_tmp146_ = ea;
-			_tmp147_ = codegen;
-			vala_code_node_emit ((ValaCodeNode*) _tmp146_, _tmp147_);
+		ValaElementAccess* _tmp156_;
+		_tmp156_ = ea;
+		if (_tmp156_ != NULL) {
+			ValaElementAccess* _tmp157_;
+			ValaCodeGenerator* _tmp158_;
+			_tmp157_ = ea;
+			_tmp158_ = codegen;
+			vala_code_node_emit ((ValaCodeNode*) _tmp157_, _tmp158_);
 		} else {
-			ValaPointerIndirection* _tmp148_;
-			_tmp148_ = pi;
-			if (_tmp148_ != NULL) {
-				ValaPointerIndirection* _tmp149_;
-				ValaCodeGenerator* _tmp150_;
-				_tmp149_ = pi;
-				_tmp150_ = codegen;
-				vala_code_node_emit ((ValaCodeNode*) _tmp149_, _tmp150_);
+			ValaPointerIndirection* _tmp159_;
+			_tmp159_ = pi;
+			if (_tmp159_ != NULL) {
+				ValaPointerIndirection* _tmp160_;
+				ValaCodeGenerator* _tmp161_;
+				_tmp160_ = pi;
+				_tmp161_ = codegen;
+				vala_code_node_emit ((ValaCodeNode*) _tmp160_, _tmp161_);
 			}
 		}
 	}
-	_tmp151_ = vala_assignment_get_right (self);
-	_tmp152_ = _tmp151_;
-	_tmp153_ = codegen;
-	vala_code_node_emit ((ValaCodeNode*) _tmp152_, _tmp153_);
-	_tmp154_ = codegen;
-	vala_code_visitor_visit_assignment ((ValaCodeVisitor*) _tmp154_, self);
-	_tmp155_ = codegen;
-	vala_code_visitor_visit_expression ((ValaCodeVisitor*) _tmp155_, (ValaExpression*) self);
+	_tmp162_ = vala_assignment_get_right (self);
+	_tmp163_ = _tmp162_;
+	_tmp164_ = codegen;
+	vala_code_node_emit ((ValaCodeNode*) _tmp163_, _tmp164_);
+	_tmp165_ = codegen;
+	vala_code_visitor_visit_assignment ((ValaCodeVisitor*) _tmp165_, self);
+	_tmp166_ = codegen;
+	vala_code_visitor_visit_expression ((ValaCodeVisitor*) _tmp166_, (ValaExpression*) self);
 	_vala_code_node_unref0 (pi);
 	_vala_code_node_unref0 (ea);
 	_vala_code_node_unref0 (ma);
diff --git a/vala/valaassignment.vala b/vala/valaassignment.vala
index d88c3e0..87281ad 100644
--- a/vala/valaassignment.vala
+++ b/vala/valaassignment.vala
@@ -472,7 +472,8 @@ public class Vala.Assignment : Expression {
 			if (operator == AssignmentOperator.SIMPLE &&
 			    (local != null || param != null || field != null) &&
 			    !is_array_add () &&
-			    !(field is ArrayLengthField)) {
+			    !(field is ArrayLengthField) &&
+				!(left.value_type.is_real_non_null_struct_type () && right is ObjectCreationExpression)) {
 				// visit_assignment not necessary
 				if (instance && ma.inner != null) {
 					ma.inner.emit (codegen);
diff --git a/vala/valacastexpression.c b/vala/valacastexpression.c
index aa1bacc..2d79405 100644
--- a/vala/valacastexpression.c
+++ b/vala/valacastexpression.c
@@ -164,6 +164,888 @@ typedef struct _ValaDelegateTypeClass ValaDelegateTypeClass;
 typedef struct _ValaMethodType ValaMethodType;
 typedef struct _ValaMethodTypeClass ValaMethodTypeClass;
 
+#define VALA_TYPE_TYPESYMBOL (vala_typesymbol_get_type ())
+#define VALA_TYPESYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_TYPESYMBOL, ValaTypeSymbol))
+#define VALA_TYPESYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_TYPESYMBOL, ValaTypeSymbolClass))
+#define VALA_IS_TYPESYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_TYPESYMBOL))
+#define VALA_IS_TYPESYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_TYPESYMBOL))
+#define VALA_TYPESYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_TYPESYMBOL, ValaTypeSymbolClass))
+
+typedef struct _ValaTypeSymbol ValaTypeSymbol;
+typedef struct _ValaTypeSymbolClass ValaTypeSymbolClass;
+
+#define VALA_TYPE_SEMANTIC_ANALYZER (vala_semantic_analyzer_get_type ())
+#define VALA_SEMANTIC_ANALYZER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SEMANTIC_ANALYZER, ValaSemanticAnalyzer))
+#define VALA_SEMANTIC_ANALYZER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SEMANTIC_ANALYZER, ValaSemanticAnalyzerClass))
+#define VALA_IS_SEMANTIC_ANALYZER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SEMANTIC_ANALYZER))
+#define VALA_IS_SEMANTIC_ANALYZER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SEMANTIC_ANALYZER))
+#define VALA_SEMANTIC_ANALYZER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SEMANTIC_ANALYZER, ValaSemanticAnalyzerClass))
+
+typedef struct _ValaSemanticAnalyzer ValaSemanticAnalyzer;
+typedef struct _ValaSemanticAnalyzerClass ValaSemanticAnalyzerClass;
+typedef struct _ValaCodeVisitorPrivate ValaCodeVisitorPrivate;
+
+#define VALA_TYPE_SOURCE_FILE (vala_source_file_get_type ())
+#define VALA_SOURCE_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SOURCE_FILE, ValaSourceFile))
+#define VALA_SOURCE_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SOURCE_FILE, ValaSourceFileClass))
+#define VALA_IS_SOURCE_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SOURCE_FILE))
+#define VALA_IS_SOURCE_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SOURCE_FILE))
+#define VALA_SOURCE_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SOURCE_FILE, ValaSourceFileClass))
+
+typedef struct _ValaSourceFile ValaSourceFile;
+typedef struct _ValaSourceFileClass ValaSourceFileClass;
+
+#define VALA_TYPE_NAMESPACE (vala_namespace_get_type ())
+#define VALA_NAMESPACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_NAMESPACE, ValaNamespace))
+#define VALA_NAMESPACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_NAMESPACE, ValaNamespaceClass))
+#define VALA_IS_NAMESPACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_NAMESPACE))
+#define VALA_IS_NAMESPACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_NAMESPACE))
+#define VALA_NAMESPACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_NAMESPACE, ValaNamespaceClass))
+
+typedef struct _ValaNamespace ValaNamespace;
+typedef struct _ValaNamespaceClass ValaNamespaceClass;
+
+#define VALA_TYPE_OBJECT_TYPE_SYMBOL (vala_object_type_symbol_get_type ())
+#define VALA_OBJECT_TYPE_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbol))
+#define VALA_OBJECT_TYPE_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbolClass))
+#define VALA_IS_OBJECT_TYPE_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_OBJECT_TYPE_SYMBOL))
+#define VALA_IS_OBJECT_TYPE_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_OBJECT_TYPE_SYMBOL))
+#define VALA_OBJECT_TYPE_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_OBJECT_TYPE_SYMBOL, ValaObjectTypeSymbolClass))
+
+typedef struct _ValaObjectTypeSymbol ValaObjectTypeSymbol;
+typedef struct _ValaObjectTypeSymbolClass ValaObjectTypeSymbolClass;
+
+#define VALA_TYPE_CLASS (vala_class_get_type ())
+#define VALA_CLASS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CLASS, ValaClass))
+#define VALA_CLASS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CLASS, ValaClassClass))
+#define VALA_IS_CLASS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CLASS))
+#define VALA_IS_CLASS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CLASS))
+#define VALA_CLASS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CLASS, ValaClassClass))
+
+typedef struct _ValaClass ValaClass;
+typedef struct _ValaClassClass ValaClassClass;
+
+#define VALA_TYPE_STRUCT (vala_struct_get_type ())
+#define VALA_STRUCT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_STRUCT, ValaStruct))
+#define VALA_STRUCT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_STRUCT, ValaStructClass))
+#define VALA_IS_STRUCT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_STRUCT))
+#define VALA_IS_STRUCT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_STRUCT))
+#define VALA_STRUCT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_STRUCT, ValaStructClass))
+
+typedef struct _ValaStruct ValaStruct;
+typedef struct _ValaStructClass ValaStructClass;
+
+#define VALA_TYPE_INTERFACE (vala_interface_get_type ())
+#define VALA_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_INTERFACE, ValaInterface))
+#define VALA_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_INTERFACE, ValaInterfaceClass))
+#define VALA_IS_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_INTERFACE))
+#define VALA_IS_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_INTERFACE))
+#define VALA_INTERFACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_INTERFACE, ValaInterfaceClass))
+
+typedef struct _ValaInterface ValaInterface;
+typedef struct _ValaInterfaceClass ValaInterfaceClass;
+
+#define VALA_TYPE_ENUM (vala_enum_get_type ())
+#define VALA_ENUM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ENUM, ValaEnum))
+#define VALA_ENUM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ENUM, ValaEnumClass))
+#define VALA_IS_ENUM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ENUM))
+#define VALA_IS_ENUM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ENUM))
+#define VALA_ENUM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ENUM, ValaEnumClass))
+
+typedef struct _ValaEnum ValaEnum;
+typedef struct _ValaEnumClass ValaEnumClass;
+
+#define VALA_TYPE_CONSTANT (vala_constant_get_type ())
+#define VALA_CONSTANT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CONSTANT, ValaConstant))
+#define VALA_CONSTANT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CONSTANT, ValaConstantClass))
+#define VALA_IS_CONSTANT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CONSTANT))
+#define VALA_IS_CONSTANT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CONSTANT))
+#define VALA_CONSTANT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CONSTANT, ValaConstantClass))
+
+typedef struct _ValaConstant ValaConstant;
+typedef struct _ValaConstantClass ValaConstantClass;
+
+#define VALA_TYPE_ENUM_VALUE (vala_enum_value_get_type ())
+#define VALA_ENUM_VALUE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ENUM_VALUE, ValaEnumValue))
+#define VALA_ENUM_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ENUM_VALUE, ValaEnumValueClass))
+#define VALA_IS_ENUM_VALUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ENUM_VALUE))
+#define VALA_IS_ENUM_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ENUM_VALUE))
+#define VALA_ENUM_VALUE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ENUM_VALUE, ValaEnumValueClass))
+
+typedef struct _ValaEnumValue ValaEnumValue;
+typedef struct _ValaEnumValueClass ValaEnumValueClass;
+
+#define VALA_TYPE_ERROR_DOMAIN (vala_error_domain_get_type ())
+#define VALA_ERROR_DOMAIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ERROR_DOMAIN, ValaErrorDomain))
+#define VALA_ERROR_DOMAIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ERROR_DOMAIN, ValaErrorDomainClass))
+#define VALA_IS_ERROR_DOMAIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ERROR_DOMAIN))
+#define VALA_IS_ERROR_DOMAIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ERROR_DOMAIN))
+#define VALA_ERROR_DOMAIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ERROR_DOMAIN, ValaErrorDomainClass))
+
+typedef struct _ValaErrorDomain ValaErrorDomain;
+typedef struct _ValaErrorDomainClass ValaErrorDomainClass;
+
+#define VALA_TYPE_ERROR_CODE (vala_error_code_get_type ())
+#define VALA_ERROR_CODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ERROR_CODE, ValaErrorCode))
+#define VALA_ERROR_CODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ERROR_CODE, ValaErrorCodeClass))
+#define VALA_IS_ERROR_CODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ERROR_CODE))
+#define VALA_IS_ERROR_CODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ERROR_CODE))
+#define VALA_ERROR_CODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ERROR_CODE, ValaErrorCodeClass))
+
+typedef struct _ValaErrorCode ValaErrorCode;
+typedef struct _ValaErrorCodeClass ValaErrorCodeClass;
+
+#define VALA_TYPE_DELEGATE (vala_delegate_get_type ())
+#define VALA_DELEGATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DELEGATE, ValaDelegate))
+#define VALA_DELEGATE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DELEGATE, ValaDelegateClass))
+#define VALA_IS_DELEGATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DELEGATE))
+#define VALA_IS_DELEGATE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DELEGATE))
+#define VALA_DELEGATE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DELEGATE, ValaDelegateClass))
+
+typedef struct _ValaDelegate ValaDelegate;
+typedef struct _ValaDelegateClass ValaDelegateClass;
+
+#define VALA_TYPE_FIELD (vala_field_get_type ())
+#define VALA_FIELD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_FIELD, ValaField))
+#define VALA_FIELD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_FIELD, ValaFieldClass))
+#define VALA_IS_FIELD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_FIELD))
+#define VALA_IS_FIELD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_FIELD))
+#define VALA_FIELD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_FIELD, ValaFieldClass))
+
+typedef struct _ValaField ValaField;
+typedef struct _ValaFieldClass ValaFieldClass;
+
+#define VALA_TYPE_SUBROUTINE (vala_subroutine_get_type ())
+#define VALA_SUBROUTINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SUBROUTINE, ValaSubroutine))
+#define VALA_SUBROUTINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SUBROUTINE, ValaSubroutineClass))
+#define VALA_IS_SUBROUTINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SUBROUTINE))
+#define VALA_IS_SUBROUTINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SUBROUTINE))
+#define VALA_SUBROUTINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SUBROUTINE, ValaSubroutineClass))
+
+typedef struct _ValaSubroutine ValaSubroutine;
+typedef struct _ValaSubroutineClass ValaSubroutineClass;
+
+#define VALA_TYPE_METHOD (vala_method_get_type ())
+#define VALA_METHOD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_METHOD, ValaMethod))
+#define VALA_METHOD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_METHOD, ValaMethodClass))
+#define VALA_IS_METHOD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_METHOD))
+#define VALA_IS_METHOD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_METHOD))
+#define VALA_METHOD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_METHOD, ValaMethodClass))
+
+typedef struct _ValaMethod ValaMethod;
+typedef struct _ValaMethodClass ValaMethodClass;
+
+#define VALA_TYPE_CREATION_METHOD (vala_creation_method_get_type ())
+#define VALA_CREATION_METHOD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CREATION_METHOD, ValaCreationMethod))
+#define VALA_CREATION_METHOD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CREATION_METHOD, ValaCreationMethodClass))
+#define VALA_IS_CREATION_METHOD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CREATION_METHOD))
+#define VALA_IS_CREATION_METHOD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CREATION_METHOD))
+#define VALA_CREATION_METHOD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CREATION_METHOD, ValaCreationMethodClass))
+
+typedef struct _ValaCreationMethod ValaCreationMethod;
+typedef struct _ValaCreationMethodClass ValaCreationMethodClass;
+
+#define VALA_TYPE_PARAMETER (vala_parameter_get_type ())
+#define VALA_PARAMETER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_PARAMETER, ValaParameter))
+#define VALA_PARAMETER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_PARAMETER, ValaParameterClass))
+#define VALA_IS_PARAMETER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_PARAMETER))
+#define VALA_IS_PARAMETER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_PARAMETER))
+#define VALA_PARAMETER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_PARAMETER, ValaParameterClass))
+
+typedef struct _ValaParameter ValaParameter;
+typedef struct _ValaParameterClass ValaParameterClass;
+
+#define VALA_TYPE_PROPERTY (vala_property_get_type ())
+#define VALA_PROPERTY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_PROPERTY, ValaProperty))
+#define VALA_PROPERTY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_PROPERTY, ValaPropertyClass))
+#define VALA_IS_PROPERTY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_PROPERTY))
+#define VALA_IS_PROPERTY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_PROPERTY))
+#define VALA_PROPERTY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_PROPERTY, ValaPropertyClass))
+
+typedef struct _ValaProperty ValaProperty;
+typedef struct _ValaPropertyClass ValaPropertyClass;
+
+#define VALA_TYPE_PROPERTY_ACCESSOR (vala_property_accessor_get_type ())
+#define VALA_PROPERTY_ACCESSOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessor))
+#define VALA_PROPERTY_ACCESSOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessorClass))
+#define VALA_IS_PROPERTY_ACCESSOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_PROPERTY_ACCESSOR))
+#define VALA_IS_PROPERTY_ACCESSOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_PROPERTY_ACCESSOR))
+#define VALA_PROPERTY_ACCESSOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_PROPERTY_ACCESSOR, ValaPropertyAccessorClass))
+
+typedef struct _ValaPropertyAccessor ValaPropertyAccessor;
+typedef struct _ValaPropertyAccessorClass ValaPropertyAccessorClass;
+
+#define VALA_TYPE_SIGNAL (vala_signal_get_type ())
+#define VALA_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SIGNAL, ValaSignal))
+#define VALA_SIGNAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SIGNAL, ValaSignalClass))
+#define VALA_IS_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SIGNAL))
+#define VALA_IS_SIGNAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SIGNAL))
+#define VALA_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SIGNAL, ValaSignalClass))
+
+typedef struct _ValaSignal ValaSignal;
+typedef struct _ValaSignalClass ValaSignalClass;
+
+#define VALA_TYPE_CONSTRUCTOR (vala_constructor_get_type ())
+#define VALA_CONSTRUCTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CONSTRUCTOR, ValaConstructor))
+#define VALA_CONSTRUCTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CONSTRUCTOR, ValaConstructorClass))
+#define VALA_IS_CONSTRUCTOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CONSTRUCTOR))
+#define VALA_IS_CONSTRUCTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CONSTRUCTOR))
+#define VALA_CONSTRUCTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CONSTRUCTOR, ValaConstructorClass))
+
+typedef struct _ValaConstructor ValaConstructor;
+typedef struct _ValaConstructorClass ValaConstructorClass;
+
+#define VALA_TYPE_DESTRUCTOR (vala_destructor_get_type ())
+#define VALA_DESTRUCTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DESTRUCTOR, ValaDestructor))
+#define VALA_DESTRUCTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DESTRUCTOR, ValaDestructorClass))
+#define VALA_IS_DESTRUCTOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DESTRUCTOR))
+#define VALA_IS_DESTRUCTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DESTRUCTOR))
+#define VALA_DESTRUCTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DESTRUCTOR, ValaDestructorClass))
+
+typedef struct _ValaDestructor ValaDestructor;
+typedef struct _ValaDestructorClass ValaDestructorClass;
+
+#define VALA_TYPE_TYPEPARAMETER (vala_typeparameter_get_type ())
+#define VALA_TYPEPARAMETER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_TYPEPARAMETER, ValaTypeParameter))
+#define VALA_TYPEPARAMETER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_TYPEPARAMETER, ValaTypeParameterClass))
+#define VALA_IS_TYPEPARAMETER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_TYPEPARAMETER))
+#define VALA_IS_TYPEPARAMETER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_TYPEPARAMETER))
+#define VALA_TYPEPARAMETER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_TYPEPARAMETER, ValaTypeParameterClass))
+
+typedef struct _ValaTypeParameter ValaTypeParameter;
+typedef struct _ValaTypeParameterClass ValaTypeParameterClass;
+
+#define VALA_TYPE_USING_DIRECTIVE (vala_using_directive_get_type ())
+#define VALA_USING_DIRECTIVE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_USING_DIRECTIVE, ValaUsingDirective))
+#define VALA_USING_DIRECTIVE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_USING_DIRECTIVE, ValaUsingDirectiveClass))
+#define VALA_IS_USING_DIRECTIVE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_USING_DIRECTIVE))
+#define VALA_IS_USING_DIRECTIVE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_USING_DIRECTIVE))
+#define VALA_USING_DIRECTIVE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_USING_DIRECTIVE, ValaUsingDirectiveClass))
+
+typedef struct _ValaUsingDirective ValaUsingDirective;
+typedef struct _ValaUsingDirectiveClass ValaUsingDirectiveClass;
+
+#define VALA_TYPE_BLOCK (vala_block_get_type ())
+#define VALA_BLOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_BLOCK, ValaBlock))
+#define VALA_BLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_BLOCK, ValaBlockClass))
+#define VALA_IS_BLOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_BLOCK))
+#define VALA_IS_BLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_BLOCK))
+#define VALA_BLOCK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_BLOCK, ValaBlockClass))
+
+typedef struct _ValaBlock ValaBlock;
+typedef struct _ValaBlockClass ValaBlockClass;
+
+#define VALA_TYPE_EMPTY_STATEMENT (vala_empty_statement_get_type ())
+#define VALA_EMPTY_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_EMPTY_STATEMENT, ValaEmptyStatement))
+#define VALA_EMPTY_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_EMPTY_STATEMENT, ValaEmptyStatementClass))
+#define VALA_IS_EMPTY_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_EMPTY_STATEMENT))
+#define VALA_IS_EMPTY_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_EMPTY_STATEMENT))
+#define VALA_EMPTY_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_EMPTY_STATEMENT, ValaEmptyStatementClass))
+
+typedef struct _ValaEmptyStatement ValaEmptyStatement;
+typedef struct _ValaEmptyStatementClass ValaEmptyStatementClass;
+
+#define VALA_TYPE_DECLARATION_STATEMENT (vala_declaration_statement_get_type ())
+#define VALA_DECLARATION_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DECLARATION_STATEMENT, ValaDeclarationStatement))
+#define VALA_DECLARATION_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DECLARATION_STATEMENT, ValaDeclarationStatementClass))
+#define VALA_IS_DECLARATION_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DECLARATION_STATEMENT))
+#define VALA_IS_DECLARATION_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DECLARATION_STATEMENT))
+#define VALA_DECLARATION_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DECLARATION_STATEMENT, ValaDeclarationStatementClass))
+
+typedef struct _ValaDeclarationStatement ValaDeclarationStatement;
+typedef struct _ValaDeclarationStatementClass ValaDeclarationStatementClass;
+
+#define VALA_TYPE_LOCAL_VARIABLE (vala_local_variable_get_type ())
+#define VALA_LOCAL_VARIABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_LOCAL_VARIABLE, ValaLocalVariable))
+#define VALA_LOCAL_VARIABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_LOCAL_VARIABLE, ValaLocalVariableClass))
+#define VALA_IS_LOCAL_VARIABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_LOCAL_VARIABLE))
+#define VALA_IS_LOCAL_VARIABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_LOCAL_VARIABLE))
+#define VALA_LOCAL_VARIABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_LOCAL_VARIABLE, ValaLocalVariableClass))
+
+typedef struct _ValaLocalVariable ValaLocalVariable;
+typedef struct _ValaLocalVariableClass ValaLocalVariableClass;
+
+#define VALA_TYPE_INITIALIZER_LIST (vala_initializer_list_get_type ())
+#define VALA_INITIALIZER_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_INITIALIZER_LIST, ValaInitializerList))
+#define VALA_INITIALIZER_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_INITIALIZER_LIST, ValaInitializerListClass))
+#define VALA_IS_INITIALIZER_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_INITIALIZER_LIST))
+#define VALA_IS_INITIALIZER_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_INITIALIZER_LIST))
+#define VALA_INITIALIZER_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_INITIALIZER_LIST, ValaInitializerListClass))
+
+typedef struct _ValaInitializerList ValaInitializerList;
+typedef struct _ValaInitializerListClass ValaInitializerListClass;
+
+#define VALA_TYPE_EXPRESSION_STATEMENT (vala_expression_statement_get_type ())
+#define VALA_EXPRESSION_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_EXPRESSION_STATEMENT, ValaExpressionStatement))
+#define VALA_EXPRESSION_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_EXPRESSION_STATEMENT, ValaExpressionStatementClass))
+#define VALA_IS_EXPRESSION_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_EXPRESSION_STATEMENT))
+#define VALA_IS_EXPRESSION_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_EXPRESSION_STATEMENT))
+#define VALA_EXPRESSION_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_EXPRESSION_STATEMENT, ValaExpressionStatementClass))
+
+typedef struct _ValaExpressionStatement ValaExpressionStatement;
+typedef struct _ValaExpressionStatementClass ValaExpressionStatementClass;
+
+#define VALA_TYPE_IF_STATEMENT (vala_if_statement_get_type ())
+#define VALA_IF_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_IF_STATEMENT, ValaIfStatement))
+#define VALA_IF_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_IF_STATEMENT, ValaIfStatementClass))
+#define VALA_IS_IF_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_IF_STATEMENT))
+#define VALA_IS_IF_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_IF_STATEMENT))
+#define VALA_IF_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_IF_STATEMENT, ValaIfStatementClass))
+
+typedef struct _ValaIfStatement ValaIfStatement;
+typedef struct _ValaIfStatementClass ValaIfStatementClass;
+
+#define VALA_TYPE_SWITCH_STATEMENT (vala_switch_statement_get_type ())
+#define VALA_SWITCH_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SWITCH_STATEMENT, ValaSwitchStatement))
+#define VALA_SWITCH_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SWITCH_STATEMENT, ValaSwitchStatementClass))
+#define VALA_IS_SWITCH_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SWITCH_STATEMENT))
+#define VALA_IS_SWITCH_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SWITCH_STATEMENT))
+#define VALA_SWITCH_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SWITCH_STATEMENT, ValaSwitchStatementClass))
+
+typedef struct _ValaSwitchStatement ValaSwitchStatement;
+typedef struct _ValaSwitchStatementClass ValaSwitchStatementClass;
+
+#define VALA_TYPE_SWITCH_SECTION (vala_switch_section_get_type ())
+#define VALA_SWITCH_SECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SWITCH_SECTION, ValaSwitchSection))
+#define VALA_SWITCH_SECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SWITCH_SECTION, ValaSwitchSectionClass))
+#define VALA_IS_SWITCH_SECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SWITCH_SECTION))
+#define VALA_IS_SWITCH_SECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SWITCH_SECTION))
+#define VALA_SWITCH_SECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SWITCH_SECTION, ValaSwitchSectionClass))
+
+typedef struct _ValaSwitchSection ValaSwitchSection;
+typedef struct _ValaSwitchSectionClass ValaSwitchSectionClass;
+
+#define VALA_TYPE_SWITCH_LABEL (vala_switch_label_get_type ())
+#define VALA_SWITCH_LABEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SWITCH_LABEL, ValaSwitchLabel))
+#define VALA_SWITCH_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SWITCH_LABEL, ValaSwitchLabelClass))
+#define VALA_IS_SWITCH_LABEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SWITCH_LABEL))
+#define VALA_IS_SWITCH_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SWITCH_LABEL))
+#define VALA_SWITCH_LABEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SWITCH_LABEL, ValaSwitchLabelClass))
+
+typedef struct _ValaSwitchLabel ValaSwitchLabel;
+typedef struct _ValaSwitchLabelClass ValaSwitchLabelClass;
+
+#define VALA_TYPE_LOOP (vala_loop_get_type ())
+#define VALA_LOOP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_LOOP, ValaLoop))
+#define VALA_LOOP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_LOOP, ValaLoopClass))
+#define VALA_IS_LOOP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_LOOP))
+#define VALA_IS_LOOP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_LOOP))
+#define VALA_LOOP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_LOOP, ValaLoopClass))
+
+typedef struct _ValaLoop ValaLoop;
+typedef struct _ValaLoopClass ValaLoopClass;
+
+#define VALA_TYPE_WHILE_STATEMENT (vala_while_statement_get_type ())
+#define VALA_WHILE_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_WHILE_STATEMENT, ValaWhileStatement))
+#define VALA_WHILE_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_WHILE_STATEMENT, ValaWhileStatementClass))
+#define VALA_IS_WHILE_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_WHILE_STATEMENT))
+#define VALA_IS_WHILE_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_WHILE_STATEMENT))
+#define VALA_WHILE_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_WHILE_STATEMENT, ValaWhileStatementClass))
+
+typedef struct _ValaWhileStatement ValaWhileStatement;
+typedef struct _ValaWhileStatementClass ValaWhileStatementClass;
+
+#define VALA_TYPE_DO_STATEMENT (vala_do_statement_get_type ())
+#define VALA_DO_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DO_STATEMENT, ValaDoStatement))
+#define VALA_DO_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DO_STATEMENT, ValaDoStatementClass))
+#define VALA_IS_DO_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DO_STATEMENT))
+#define VALA_IS_DO_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DO_STATEMENT))
+#define VALA_DO_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DO_STATEMENT, ValaDoStatementClass))
+
+typedef struct _ValaDoStatement ValaDoStatement;
+typedef struct _ValaDoStatementClass ValaDoStatementClass;
+
+#define VALA_TYPE_FOR_STATEMENT (vala_for_statement_get_type ())
+#define VALA_FOR_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_FOR_STATEMENT, ValaForStatement))
+#define VALA_FOR_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_FOR_STATEMENT, ValaForStatementClass))
+#define VALA_IS_FOR_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_FOR_STATEMENT))
+#define VALA_IS_FOR_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_FOR_STATEMENT))
+#define VALA_FOR_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_FOR_STATEMENT, ValaForStatementClass))
+
+typedef struct _ValaForStatement ValaForStatement;
+typedef struct _ValaForStatementClass ValaForStatementClass;
+
+#define VALA_TYPE_FOREACH_STATEMENT (vala_foreach_statement_get_type ())
+#define VALA_FOREACH_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_FOREACH_STATEMENT, ValaForeachStatement))
+#define VALA_FOREACH_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_FOREACH_STATEMENT, ValaForeachStatementClass))
+#define VALA_IS_FOREACH_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_FOREACH_STATEMENT))
+#define VALA_IS_FOREACH_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_FOREACH_STATEMENT))
+#define VALA_FOREACH_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_FOREACH_STATEMENT, ValaForeachStatementClass))
+
+typedef struct _ValaForeachStatement ValaForeachStatement;
+typedef struct _ValaForeachStatementClass ValaForeachStatementClass;
+
+#define VALA_TYPE_BREAK_STATEMENT (vala_break_statement_get_type ())
+#define VALA_BREAK_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_BREAK_STATEMENT, ValaBreakStatement))
+#define VALA_BREAK_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_BREAK_STATEMENT, ValaBreakStatementClass))
+#define VALA_IS_BREAK_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_BREAK_STATEMENT))
+#define VALA_IS_BREAK_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_BREAK_STATEMENT))
+#define VALA_BREAK_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_BREAK_STATEMENT, ValaBreakStatementClass))
+
+typedef struct _ValaBreakStatement ValaBreakStatement;
+typedef struct _ValaBreakStatementClass ValaBreakStatementClass;
+
+#define VALA_TYPE_CONTINUE_STATEMENT (vala_continue_statement_get_type ())
+#define VALA_CONTINUE_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CONTINUE_STATEMENT, ValaContinueStatement))
+#define VALA_CONTINUE_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CONTINUE_STATEMENT, ValaContinueStatementClass))
+#define VALA_IS_CONTINUE_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CONTINUE_STATEMENT))
+#define VALA_IS_CONTINUE_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CONTINUE_STATEMENT))
+#define VALA_CONTINUE_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CONTINUE_STATEMENT, ValaContinueStatementClass))
+
+typedef struct _ValaContinueStatement ValaContinueStatement;
+typedef struct _ValaContinueStatementClass ValaContinueStatementClass;
+
+#define VALA_TYPE_RETURN_STATEMENT (vala_return_statement_get_type ())
+#define VALA_RETURN_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_RETURN_STATEMENT, ValaReturnStatement))
+#define VALA_RETURN_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_RETURN_STATEMENT, ValaReturnStatementClass))
+#define VALA_IS_RETURN_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_RETURN_STATEMENT))
+#define VALA_IS_RETURN_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_RETURN_STATEMENT))
+#define VALA_RETURN_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_RETURN_STATEMENT, ValaReturnStatementClass))
+
+typedef struct _ValaReturnStatement ValaReturnStatement;
+typedef struct _ValaReturnStatementClass ValaReturnStatementClass;
+
+#define VALA_TYPE_YIELD_STATEMENT (vala_yield_statement_get_type ())
+#define VALA_YIELD_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_YIELD_STATEMENT, ValaYieldStatement))
+#define VALA_YIELD_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_YIELD_STATEMENT, ValaYieldStatementClass))
+#define VALA_IS_YIELD_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_YIELD_STATEMENT))
+#define VALA_IS_YIELD_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_YIELD_STATEMENT))
+#define VALA_YIELD_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_YIELD_STATEMENT, ValaYieldStatementClass))
+
+typedef struct _ValaYieldStatement ValaYieldStatement;
+typedef struct _ValaYieldStatementClass ValaYieldStatementClass;
+
+#define VALA_TYPE_THROW_STATEMENT (vala_throw_statement_get_type ())
+#define VALA_THROW_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_THROW_STATEMENT, ValaThrowStatement))
+#define VALA_THROW_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_THROW_STATEMENT, ValaThrowStatementClass))
+#define VALA_IS_THROW_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_THROW_STATEMENT))
+#define VALA_IS_THROW_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_THROW_STATEMENT))
+#define VALA_THROW_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_THROW_STATEMENT, ValaThrowStatementClass))
+
+typedef struct _ValaThrowStatement ValaThrowStatement;
+typedef struct _ValaThrowStatementClass ValaThrowStatementClass;
+
+#define VALA_TYPE_TRY_STATEMENT (vala_try_statement_get_type ())
+#define VALA_TRY_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_TRY_STATEMENT, ValaTryStatement))
+#define VALA_TRY_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_TRY_STATEMENT, ValaTryStatementClass))
+#define VALA_IS_TRY_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_TRY_STATEMENT))
+#define VALA_IS_TRY_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_TRY_STATEMENT))
+#define VALA_TRY_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_TRY_STATEMENT, ValaTryStatementClass))
+
+typedef struct _ValaTryStatement ValaTryStatement;
+typedef struct _ValaTryStatementClass ValaTryStatementClass;
+
+#define VALA_TYPE_CATCH_CLAUSE (vala_catch_clause_get_type ())
+#define VALA_CATCH_CLAUSE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CATCH_CLAUSE, ValaCatchClause))
+#define VALA_CATCH_CLAUSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CATCH_CLAUSE, ValaCatchClauseClass))
+#define VALA_IS_CATCH_CLAUSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CATCH_CLAUSE))
+#define VALA_IS_CATCH_CLAUSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CATCH_CLAUSE))
+#define VALA_CATCH_CLAUSE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CATCH_CLAUSE, ValaCatchClauseClass))
+
+typedef struct _ValaCatchClause ValaCatchClause;
+typedef struct _ValaCatchClauseClass ValaCatchClauseClass;
+
+#define VALA_TYPE_LOCK_STATEMENT (vala_lock_statement_get_type ())
+#define VALA_LOCK_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_LOCK_STATEMENT, ValaLockStatement))
+#define VALA_LOCK_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_LOCK_STATEMENT, ValaLockStatementClass))
+#define VALA_IS_LOCK_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_LOCK_STATEMENT))
+#define VALA_IS_LOCK_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_LOCK_STATEMENT))
+#define VALA_LOCK_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_LOCK_STATEMENT, ValaLockStatementClass))
+
+typedef struct _ValaLockStatement ValaLockStatement;
+typedef struct _ValaLockStatementClass ValaLockStatementClass;
+
+#define VALA_TYPE_UNLOCK_STATEMENT (vala_unlock_statement_get_type ())
+#define VALA_UNLOCK_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_UNLOCK_STATEMENT, ValaUnlockStatement))
+#define VALA_UNLOCK_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_UNLOCK_STATEMENT, ValaUnlockStatementClass))
+#define VALA_IS_UNLOCK_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_UNLOCK_STATEMENT))
+#define VALA_IS_UNLOCK_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_UNLOCK_STATEMENT))
+#define VALA_UNLOCK_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_UNLOCK_STATEMENT, ValaUnlockStatementClass))
+
+typedef struct _ValaUnlockStatement ValaUnlockStatement;
+typedef struct _ValaUnlockStatementClass ValaUnlockStatementClass;
+
+#define VALA_TYPE_DELETE_STATEMENT (vala_delete_statement_get_type ())
+#define VALA_DELETE_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_DELETE_STATEMENT, ValaDeleteStatement))
+#define VALA_DELETE_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_DELETE_STATEMENT, ValaDeleteStatementClass))
+#define VALA_IS_DELETE_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_DELETE_STATEMENT))
+#define VALA_IS_DELETE_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_DELETE_STATEMENT))
+#define VALA_DELETE_STATEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_DELETE_STATEMENT, ValaDeleteStatementClass))
+
+typedef struct _ValaDeleteStatement ValaDeleteStatement;
+typedef struct _ValaDeleteStatementClass ValaDeleteStatementClass;
+
+#define VALA_TYPE_ARRAY_CREATION_EXPRESSION (vala_array_creation_expression_get_type ())
+#define VALA_ARRAY_CREATION_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ARRAY_CREATION_EXPRESSION, ValaArrayCreationExpression))
+#define VALA_ARRAY_CREATION_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ARRAY_CREATION_EXPRESSION, ValaArrayCreationExpressionClass))
+#define VALA_IS_ARRAY_CREATION_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ARRAY_CREATION_EXPRESSION))
+#define VALA_IS_ARRAY_CREATION_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ARRAY_CREATION_EXPRESSION))
+#define VALA_ARRAY_CREATION_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ARRAY_CREATION_EXPRESSION, ValaArrayCreationExpressionClass))
+
+typedef struct _ValaArrayCreationExpression ValaArrayCreationExpression;
+typedef struct _ValaArrayCreationExpressionClass ValaArrayCreationExpressionClass;
+
+#define VALA_TYPE_LITERAL (vala_literal_get_type ())
+#define VALA_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_LITERAL, ValaLiteral))
+#define VALA_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_LITERAL, ValaLiteralClass))
+#define VALA_IS_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_LITERAL))
+#define VALA_IS_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_LITERAL))
+#define VALA_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_LITERAL, ValaLiteralClass))
+
+typedef struct _ValaLiteral ValaLiteral;
+typedef struct _ValaLiteralClass ValaLiteralClass;
+
+#define VALA_TYPE_BOOLEAN_LITERAL (vala_boolean_literal_get_type ())
+#define VALA_BOOLEAN_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_BOOLEAN_LITERAL, ValaBooleanLiteral))
+#define VALA_BOOLEAN_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_BOOLEAN_LITERAL, ValaBooleanLiteralClass))
+#define VALA_IS_BOOLEAN_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_BOOLEAN_LITERAL))
+#define VALA_IS_BOOLEAN_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_BOOLEAN_LITERAL))
+#define VALA_BOOLEAN_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_BOOLEAN_LITERAL, ValaBooleanLiteralClass))
+
+typedef struct _ValaBooleanLiteral ValaBooleanLiteral;
+typedef struct _ValaBooleanLiteralClass ValaBooleanLiteralClass;
+
+#define VALA_TYPE_CHARACTER_LITERAL (vala_character_literal_get_type ())
+#define VALA_CHARACTER_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CHARACTER_LITERAL, ValaCharacterLiteral))
+#define VALA_CHARACTER_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CHARACTER_LITERAL, ValaCharacterLiteralClass))
+#define VALA_IS_CHARACTER_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CHARACTER_LITERAL))
+#define VALA_IS_CHARACTER_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CHARACTER_LITERAL))
+#define VALA_CHARACTER_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CHARACTER_LITERAL, ValaCharacterLiteralClass))
+
+typedef struct _ValaCharacterLiteral ValaCharacterLiteral;
+typedef struct _ValaCharacterLiteralClass ValaCharacterLiteralClass;
+
+#define VALA_TYPE_INTEGER_LITERAL (vala_integer_literal_get_type ())
+#define VALA_INTEGER_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_INTEGER_LITERAL, ValaIntegerLiteral))
+#define VALA_INTEGER_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_INTEGER_LITERAL, ValaIntegerLiteralClass))
+#define VALA_IS_INTEGER_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_INTEGER_LITERAL))
+#define VALA_IS_INTEGER_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_INTEGER_LITERAL))
+#define VALA_INTEGER_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_INTEGER_LITERAL, ValaIntegerLiteralClass))
+
+typedef struct _ValaIntegerLiteral ValaIntegerLiteral;
+typedef struct _ValaIntegerLiteralClass ValaIntegerLiteralClass;
+
+#define VALA_TYPE_REAL_LITERAL (vala_real_literal_get_type ())
+#define VALA_REAL_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_REAL_LITERAL, ValaRealLiteral))
+#define VALA_REAL_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_REAL_LITERAL, ValaRealLiteralClass))
+#define VALA_IS_REAL_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_REAL_LITERAL))
+#define VALA_IS_REAL_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_REAL_LITERAL))
+#define VALA_REAL_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_REAL_LITERAL, ValaRealLiteralClass))
+
+typedef struct _ValaRealLiteral ValaRealLiteral;
+typedef struct _ValaRealLiteralClass ValaRealLiteralClass;
+
+#define VALA_TYPE_REGEX_LITERAL (vala_regex_literal_get_type ())
+#define VALA_REGEX_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_REGEX_LITERAL, ValaRegexLiteral))
+#define VALA_REGEX_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_REGEX_LITERAL, ValaRegexLiteralClass))
+#define VALA_IS_REGEX_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_REGEX_LITERAL))
+#define VALA_IS_REGEX_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_REGEX_LITERAL))
+#define VALA_REGEX_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_REGEX_LITERAL, ValaRegexLiteralClass))
+
+typedef struct _ValaRegexLiteral ValaRegexLiteral;
+typedef struct _ValaRegexLiteralClass ValaRegexLiteralClass;
+
+#define VALA_TYPE_STRING_LITERAL (vala_string_literal_get_type ())
+#define VALA_STRING_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_STRING_LITERAL, ValaStringLiteral))
+#define VALA_STRING_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_STRING_LITERAL, ValaStringLiteralClass))
+#define VALA_IS_STRING_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_STRING_LITERAL))
+#define VALA_IS_STRING_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_STRING_LITERAL))
+#define VALA_STRING_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_STRING_LITERAL, ValaStringLiteralClass))
+
+typedef struct _ValaStringLiteral ValaStringLiteral;
+typedef struct _ValaStringLiteralClass ValaStringLiteralClass;
+
+#define VALA_TYPE_TEMPLATE (vala_template_get_type ())
+#define VALA_TEMPLATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_TEMPLATE, ValaTemplate))
+#define VALA_TEMPLATE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_TEMPLATE, ValaTemplateClass))
+#define VALA_IS_TEMPLATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_TEMPLATE))
+#define VALA_IS_TEMPLATE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_TEMPLATE))
+#define VALA_TEMPLATE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_TEMPLATE, ValaTemplateClass))
+
+typedef struct _ValaTemplate ValaTemplate;
+typedef struct _ValaTemplateClass ValaTemplateClass;
+
+#define VALA_TYPE_LIST_LITERAL (vala_list_literal_get_type ())
+#define VALA_LIST_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_LIST_LITERAL, ValaListLiteral))
+#define VALA_LIST_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_LIST_LITERAL, ValaListLiteralClass))
+#define VALA_IS_LIST_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_LIST_LITERAL))
+#define VALA_IS_LIST_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_LIST_LITERAL))
+#define VALA_LIST_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_LIST_LITERAL, ValaListLiteralClass))
+
+typedef struct _ValaListLiteral ValaListLiteral;
+typedef struct _ValaListLiteralClass ValaListLiteralClass;
+
+#define VALA_TYPE_SET_LITERAL (vala_set_literal_get_type ())
+#define VALA_SET_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SET_LITERAL, ValaSetLiteral))
+#define VALA_SET_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SET_LITERAL, ValaSetLiteralClass))
+#define VALA_IS_SET_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SET_LITERAL))
+#define VALA_IS_SET_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SET_LITERAL))
+#define VALA_SET_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SET_LITERAL, ValaSetLiteralClass))
+
+typedef struct _ValaSetLiteral ValaSetLiteral;
+typedef struct _ValaSetLiteralClass ValaSetLiteralClass;
+
+#define VALA_TYPE_MAP_LITERAL (vala_map_literal_get_type ())
+#define VALA_MAP_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_MAP_LITERAL, ValaMapLiteral))
+#define VALA_MAP_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_MAP_LITERAL, ValaMapLiteralClass))
+#define VALA_IS_MAP_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_MAP_LITERAL))
+#define VALA_IS_MAP_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_MAP_LITERAL))
+#define VALA_MAP_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_MAP_LITERAL, ValaMapLiteralClass))
+
+typedef struct _ValaMapLiteral ValaMapLiteral;
+typedef struct _ValaMapLiteralClass ValaMapLiteralClass;
+
+#define VALA_TYPE_TUPLE (vala_tuple_get_type ())
+#define VALA_TUPLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_TUPLE, ValaTuple))
+#define VALA_TUPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_TUPLE, ValaTupleClass))
+#define VALA_IS_TUPLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_TUPLE))
+#define VALA_IS_TUPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_TUPLE))
+#define VALA_TUPLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_TUPLE, ValaTupleClass))
+
+typedef struct _ValaTuple ValaTuple;
+typedef struct _ValaTupleClass ValaTupleClass;
+
+#define VALA_TYPE_NULL_LITERAL (vala_null_literal_get_type ())
+#define VALA_NULL_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_NULL_LITERAL, ValaNullLiteral))
+#define VALA_NULL_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_NULL_LITERAL, ValaNullLiteralClass))
+#define VALA_IS_NULL_LITERAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_NULL_LITERAL))
+#define VALA_IS_NULL_LITERAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_NULL_LITERAL))
+#define VALA_NULL_LITERAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_NULL_LITERAL, ValaNullLiteralClass))
+
+typedef struct _ValaNullLiteral ValaNullLiteral;
+typedef struct _ValaNullLiteralClass ValaNullLiteralClass;
+
+#define VALA_TYPE_MEMBER_ACCESS (vala_member_access_get_type ())
+#define VALA_MEMBER_ACCESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess))
+#define VALA_MEMBER_ACCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_MEMBER_ACCESS, ValaMemberAccessClass))
+#define VALA_IS_MEMBER_ACCESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_MEMBER_ACCESS))
+#define VALA_IS_MEMBER_ACCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_MEMBER_ACCESS))
+#define VALA_MEMBER_ACCESS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_MEMBER_ACCESS, ValaMemberAccessClass))
+
+typedef struct _ValaMemberAccess ValaMemberAccess;
+typedef struct _ValaMemberAccessClass ValaMemberAccessClass;
+
+#define VALA_TYPE_METHOD_CALL (vala_method_call_get_type ())
+#define VALA_METHOD_CALL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_METHOD_CALL, ValaMethodCall))
+#define VALA_METHOD_CALL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_METHOD_CALL, ValaMethodCallClass))
+#define VALA_IS_METHOD_CALL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_METHOD_CALL))
+#define VALA_IS_METHOD_CALL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_METHOD_CALL))
+#define VALA_METHOD_CALL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_METHOD_CALL, ValaMethodCallClass))
+
+typedef struct _ValaMethodCall ValaMethodCall;
+typedef struct _ValaMethodCallClass ValaMethodCallClass;
+
+#define VALA_TYPE_ELEMENT_ACCESS (vala_element_access_get_type ())
+#define VALA_ELEMENT_ACCESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ELEMENT_ACCESS, ValaElementAccess))
+#define VALA_ELEMENT_ACCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ELEMENT_ACCESS, ValaElementAccessClass))
+#define VALA_IS_ELEMENT_ACCESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ELEMENT_ACCESS))
+#define VALA_IS_ELEMENT_ACCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ELEMENT_ACCESS))
+#define VALA_ELEMENT_ACCESS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ELEMENT_ACCESS, ValaElementAccessClass))
+
+typedef struct _ValaElementAccess ValaElementAccess;
+typedef struct _ValaElementAccessClass ValaElementAccessClass;
+
+#define VALA_TYPE_SLICE_EXPRESSION (vala_slice_expression_get_type ())
+#define VALA_SLICE_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SLICE_EXPRESSION, ValaSliceExpression))
+#define VALA_SLICE_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SLICE_EXPRESSION, ValaSliceExpressionClass))
+#define VALA_IS_SLICE_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SLICE_EXPRESSION))
+#define VALA_IS_SLICE_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SLICE_EXPRESSION))
+#define VALA_SLICE_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SLICE_EXPRESSION, ValaSliceExpressionClass))
+
+typedef struct _ValaSliceExpression ValaSliceExpression;
+typedef struct _ValaSliceExpressionClass ValaSliceExpressionClass;
+
+#define VALA_TYPE_BASE_ACCESS (vala_base_access_get_type ())
+#define VALA_BASE_ACCESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_BASE_ACCESS, ValaBaseAccess))
+#define VALA_BASE_ACCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_BASE_ACCESS, ValaBaseAccessClass))
+#define VALA_IS_BASE_ACCESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_BASE_ACCESS))
+#define VALA_IS_BASE_ACCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_BASE_ACCESS))
+#define VALA_BASE_ACCESS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_BASE_ACCESS, ValaBaseAccessClass))
+
+typedef struct _ValaBaseAccess ValaBaseAccess;
+typedef struct _ValaBaseAccessClass ValaBaseAccessClass;
+
+#define VALA_TYPE_POSTFIX_EXPRESSION (vala_postfix_expression_get_type ())
+#define VALA_POSTFIX_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_POSTFIX_EXPRESSION, ValaPostfixExpression))
+#define VALA_POSTFIX_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_POSTFIX_EXPRESSION, ValaPostfixExpressionClass))
+#define VALA_IS_POSTFIX_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_POSTFIX_EXPRESSION))
+#define VALA_IS_POSTFIX_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_POSTFIX_EXPRESSION))
+#define VALA_POSTFIX_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_POSTFIX_EXPRESSION, ValaPostfixExpressionClass))
+
+typedef struct _ValaPostfixExpression ValaPostfixExpression;
+typedef struct _ValaPostfixExpressionClass ValaPostfixExpressionClass;
+
+#define VALA_TYPE_OBJECT_CREATION_EXPRESSION (vala_object_creation_expression_get_type ())
+#define VALA_OBJECT_CREATION_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_OBJECT_CREATION_EXPRESSION, ValaObjectCreationExpression))
+#define VALA_OBJECT_CREATION_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_OBJECT_CREATION_EXPRESSION, ValaObjectCreationExpressionClass))
+#define VALA_IS_OBJECT_CREATION_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_OBJECT_CREATION_EXPRESSION))
+#define VALA_IS_OBJECT_CREATION_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_OBJECT_CREATION_EXPRESSION))
+#define VALA_OBJECT_CREATION_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_OBJECT_CREATION_EXPRESSION, ValaObjectCreationExpressionClass))
+
+typedef struct _ValaObjectCreationExpression ValaObjectCreationExpression;
+typedef struct _ValaObjectCreationExpressionClass ValaObjectCreationExpressionClass;
+
+#define VALA_TYPE_SIZEOF_EXPRESSION (vala_sizeof_expression_get_type ())
+#define VALA_SIZEOF_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SIZEOF_EXPRESSION, ValaSizeofExpression))
+#define VALA_SIZEOF_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SIZEOF_EXPRESSION, ValaSizeofExpressionClass))
+#define VALA_IS_SIZEOF_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SIZEOF_EXPRESSION))
+#define VALA_IS_SIZEOF_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SIZEOF_EXPRESSION))
+#define VALA_SIZEOF_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SIZEOF_EXPRESSION, ValaSizeofExpressionClass))
+
+typedef struct _ValaSizeofExpression ValaSizeofExpression;
+typedef struct _ValaSizeofExpressionClass ValaSizeofExpressionClass;
+
+#define VALA_TYPE_TYPEOF_EXPRESSION (vala_typeof_expression_get_type ())
+#define VALA_TYPEOF_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_TYPEOF_EXPRESSION, ValaTypeofExpression))
+#define VALA_TYPEOF_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_TYPEOF_EXPRESSION, ValaTypeofExpressionClass))
+#define VALA_IS_TYPEOF_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_TYPEOF_EXPRESSION))
+#define VALA_IS_TYPEOF_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_TYPEOF_EXPRESSION))
+#define VALA_TYPEOF_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_TYPEOF_EXPRESSION, ValaTypeofExpressionClass))
+
+typedef struct _ValaTypeofExpression ValaTypeofExpression;
+typedef struct _ValaTypeofExpressionClass ValaTypeofExpressionClass;
+
+#define VALA_TYPE_UNARY_EXPRESSION (vala_unary_expression_get_type ())
+#define VALA_UNARY_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_UNARY_EXPRESSION, ValaUnaryExpression))
+#define VALA_UNARY_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_UNARY_EXPRESSION, ValaUnaryExpressionClass))
+#define VALA_IS_UNARY_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_UNARY_EXPRESSION))
+#define VALA_IS_UNARY_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_UNARY_EXPRESSION))
+#define VALA_UNARY_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_UNARY_EXPRESSION, ValaUnaryExpressionClass))
+
+typedef struct _ValaUnaryExpression ValaUnaryExpression;
+typedef struct _ValaUnaryExpressionClass ValaUnaryExpressionClass;
+
+#define VALA_TYPE_NAMED_ARGUMENT (vala_named_argument_get_type ())
+#define VALA_NAMED_ARGUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_NAMED_ARGUMENT, ValaNamedArgument))
+#define VALA_NAMED_ARGUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_NAMED_ARGUMENT, ValaNamedArgumentClass))
+#define VALA_IS_NAMED_ARGUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_NAMED_ARGUMENT))
+#define VALA_IS_NAMED_ARGUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_NAMED_ARGUMENT))
+#define VALA_NAMED_ARGUMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_NAMED_ARGUMENT, ValaNamedArgumentClass))
+
+typedef struct _ValaNamedArgument ValaNamedArgument;
+typedef struct _ValaNamedArgumentClass ValaNamedArgumentClass;
+
+#define VALA_TYPE_POINTER_INDIRECTION (vala_pointer_indirection_get_type ())
+#define VALA_POINTER_INDIRECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_POINTER_INDIRECTION, ValaPointerIndirection))
+#define VALA_POINTER_INDIRECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_POINTER_INDIRECTION, ValaPointerIndirectionClass))
+#define VALA_IS_POINTER_INDIRECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_POINTER_INDIRECTION))
+#define VALA_IS_POINTER_INDIRECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_POINTER_INDIRECTION))
+#define VALA_POINTER_INDIRECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_POINTER_INDIRECTION, ValaPointerIndirectionClass))
+
+typedef struct _ValaPointerIndirection ValaPointerIndirection;
+typedef struct _ValaPointerIndirectionClass ValaPointerIndirectionClass;
+
+#define VALA_TYPE_ADDRESSOF_EXPRESSION (vala_addressof_expression_get_type ())
+#define VALA_ADDRESSOF_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ADDRESSOF_EXPRESSION, ValaAddressofExpression))
+#define VALA_ADDRESSOF_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ADDRESSOF_EXPRESSION, ValaAddressofExpressionClass))
+#define VALA_IS_ADDRESSOF_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ADDRESSOF_EXPRESSION))
+#define VALA_IS_ADDRESSOF_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ADDRESSOF_EXPRESSION))
+#define VALA_ADDRESSOF_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ADDRESSOF_EXPRESSION, ValaAddressofExpressionClass))
+
+typedef struct _ValaAddressofExpression ValaAddressofExpression;
+typedef struct _ValaAddressofExpressionClass ValaAddressofExpressionClass;
+
+#define VALA_TYPE_REFERENCE_TRANSFER_EXPRESSION (vala_reference_transfer_expression_get_type ())
+#define VALA_REFERENCE_TRANSFER_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_REFERENCE_TRANSFER_EXPRESSION, ValaReferenceTransferExpression))
+#define VALA_REFERENCE_TRANSFER_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_REFERENCE_TRANSFER_EXPRESSION, ValaReferenceTransferExpressionClass))
+#define VALA_IS_REFERENCE_TRANSFER_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_REFERENCE_TRANSFER_EXPRESSION))
+#define VALA_IS_REFERENCE_TRANSFER_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_REFERENCE_TRANSFER_EXPRESSION))
+#define VALA_REFERENCE_TRANSFER_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_REFERENCE_TRANSFER_EXPRESSION, ValaReferenceTransferExpressionClass))
+
+typedef struct _ValaReferenceTransferExpression ValaReferenceTransferExpression;
+typedef struct _ValaReferenceTransferExpressionClass ValaReferenceTransferExpressionClass;
+
+#define VALA_TYPE_BINARY_EXPRESSION (vala_binary_expression_get_type ())
+#define VALA_BINARY_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_BINARY_EXPRESSION, ValaBinaryExpression))
+#define VALA_BINARY_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_BINARY_EXPRESSION, ValaBinaryExpressionClass))
+#define VALA_IS_BINARY_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_BINARY_EXPRESSION))
+#define VALA_IS_BINARY_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_BINARY_EXPRESSION))
+#define VALA_BINARY_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_BINARY_EXPRESSION, ValaBinaryExpressionClass))
+
+typedef struct _ValaBinaryExpression ValaBinaryExpression;
+typedef struct _ValaBinaryExpressionClass ValaBinaryExpressionClass;
+
+#define VALA_TYPE_TYPECHECK (vala_typecheck_get_type ())
+#define VALA_TYPECHECK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_TYPECHECK, ValaTypeCheck))
+#define VALA_TYPECHECK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_TYPECHECK, ValaTypeCheckClass))
+#define VALA_IS_TYPECHECK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_TYPECHECK))
+#define VALA_IS_TYPECHECK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_TYPECHECK))
+#define VALA_TYPECHECK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_TYPECHECK, ValaTypeCheckClass))
+
+typedef struct _ValaTypeCheck ValaTypeCheck;
+typedef struct _ValaTypeCheckClass ValaTypeCheckClass;
+
+#define VALA_TYPE_CONDITIONAL_EXPRESSION (vala_conditional_expression_get_type ())
+#define VALA_CONDITIONAL_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_CONDITIONAL_EXPRESSION, ValaConditionalExpression))
+#define VALA_CONDITIONAL_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_CONDITIONAL_EXPRESSION, ValaConditionalExpressionClass))
+#define VALA_IS_CONDITIONAL_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_CONDITIONAL_EXPRESSION))
+#define VALA_IS_CONDITIONAL_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_CONDITIONAL_EXPRESSION))
+#define VALA_CONDITIONAL_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_CONDITIONAL_EXPRESSION, ValaConditionalExpressionClass))
+
+typedef struct _ValaConditionalExpression ValaConditionalExpression;
+typedef struct _ValaConditionalExpressionClass ValaConditionalExpressionClass;
+
+#define VALA_TYPE_LAMBDA_EXPRESSION (vala_lambda_expression_get_type ())
+#define VALA_LAMBDA_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_LAMBDA_EXPRESSION, ValaLambdaExpression))
+#define VALA_LAMBDA_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_LAMBDA_EXPRESSION, ValaLambdaExpressionClass))
+#define VALA_IS_LAMBDA_EXPRESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_LAMBDA_EXPRESSION))
+#define VALA_IS_LAMBDA_EXPRESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_LAMBDA_EXPRESSION))
+#define VALA_LAMBDA_EXPRESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_LAMBDA_EXPRESSION, ValaLambdaExpressionClass))
+
+typedef struct _ValaLambdaExpression ValaLambdaExpression;
+typedef struct _ValaLambdaExpressionClass ValaLambdaExpressionClass;
+
+#define VALA_TYPE_ASSIGNMENT (vala_assignment_get_type ())
+#define VALA_ASSIGNMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_ASSIGNMENT, ValaAssignment))
+#define VALA_ASSIGNMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_ASSIGNMENT, ValaAssignmentClass))
+#define VALA_IS_ASSIGNMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_ASSIGNMENT))
+#define VALA_IS_ASSIGNMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_ASSIGNMENT))
+#define VALA_ASSIGNMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_ASSIGNMENT, ValaAssignmentClass))
+
+typedef struct _ValaAssignment ValaAssignment;
+typedef struct _ValaAssignmentClass ValaAssignmentClass;
+typedef struct _ValaSemanticAnalyzerPrivate ValaSemanticAnalyzerPrivate;
+
+#define VALA_TYPE_VALUE_TYPE (vala_value_type_get_type ())
+#define VALA_VALUE_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_VALUE_TYPE, ValaValueType))
+#define VALA_VALUE_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_VALUE_TYPE, ValaValueTypeClass))
+#define VALA_IS_VALUE_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_VALUE_TYPE))
+#define VALA_IS_VALUE_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_VALUE_TYPE))
+#define VALA_VALUE_TYPE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_VALUE_TYPE, ValaValueTypeClass))
+
+typedef struct _ValaValueType ValaValueType;
+typedef struct _ValaValueTypeClass ValaValueTypeClass;
+
+#define VALA_TYPE_STRUCT_VALUE_TYPE (vala_struct_value_type_get_type ())
+#define VALA_STRUCT_VALUE_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_STRUCT_VALUE_TYPE, ValaStructValueType))
+#define VALA_STRUCT_VALUE_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_STRUCT_VALUE_TYPE, ValaStructValueTypeClass))
+#define VALA_IS_STRUCT_VALUE_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_STRUCT_VALUE_TYPE))
+#define VALA_IS_STRUCT_VALUE_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_STRUCT_VALUE_TYPE))
+#define VALA_STRUCT_VALUE_TYPE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_STRUCT_VALUE_TYPE, ValaStructValueTypeClass))
+
+typedef struct _ValaStructValueType ValaStructValueType;
+typedef struct _ValaStructValueTypeClass ValaStructValueTypeClass;
+
+#define VALA_TYPE_REFERENCE_TYPE (vala_reference_type_get_type ())
+#define VALA_REFERENCE_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_REFERENCE_TYPE, ValaReferenceType))
+#define VALA_REFERENCE_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_REFERENCE_TYPE, ValaReferenceTypeClass))
+#define VALA_IS_REFERENCE_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_REFERENCE_TYPE))
+#define VALA_IS_REFERENCE_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_REFERENCE_TYPE))
+#define VALA_REFERENCE_TYPE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_REFERENCE_TYPE, ValaReferenceTypeClass))
+
+typedef struct _ValaReferenceType ValaReferenceType;
+typedef struct _ValaReferenceTypeClass ValaReferenceTypeClass;
+
+#define VALA_TYPE_OBJECT_TYPE (vala_object_type_get_type ())
+#define VALA_OBJECT_TYPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_OBJECT_TYPE, ValaObjectType))
+#define VALA_OBJECT_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_OBJECT_TYPE, ValaObjectTypeClass))
+#define VALA_IS_OBJECT_TYPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_OBJECT_TYPE))
+#define VALA_IS_OBJECT_TYPE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_OBJECT_TYPE))
+#define VALA_OBJECT_TYPE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_OBJECT_TYPE, ValaObjectTypeClass))
+
+typedef struct _ValaObjectType ValaObjectType;
+typedef struct _ValaObjectTypeClass ValaObjectTypeClass;
+
 struct _ValaCodeNode {
 	GTypeInstance parent_instance;
 	volatile int ref_count;
@@ -213,6 +1095,141 @@ struct _ValaCastExpressionPrivate {
 	ValaDataType* _data_type;
 };
 
+struct _ValaCodeVisitor {
+	GTypeInstance parent_instance;
+	volatile int ref_count;
+	ValaCodeVisitorPrivate * priv;
+};
+
+struct _ValaCodeVisitorClass {
+	GTypeClass parent_class;
+	void (*finalize) (ValaCodeVisitor *self);
+	void (*visit_source_file) (ValaCodeVisitor* self, ValaSourceFile* source_file);
+	void (*visit_namespace) (ValaCodeVisitor* self, ValaNamespace* ns);
+	void (*visit_class) (ValaCodeVisitor* self, ValaClass* cl);
+	void (*visit_struct) (ValaCodeVisitor* self, ValaStruct* st);
+	void (*visit_interface) (ValaCodeVisitor* self, ValaInterface* iface);
+	void (*visit_enum) (ValaCodeVisitor* self, ValaEnum* en);
+	void (*visit_enum_value) (ValaCodeVisitor* self, ValaEnumValue* ev);
+	void (*visit_error_domain) (ValaCodeVisitor* self, ValaErrorDomain* edomain);
+	void (*visit_error_code) (ValaCodeVisitor* self, ValaErrorCode* ecode);
+	void (*visit_delegate) (ValaCodeVisitor* self, ValaDelegate* d);
+	void (*visit_constant) (ValaCodeVisitor* self, ValaConstant* c);
+	void (*visit_field) (ValaCodeVisitor* self, ValaField* f);
+	void (*visit_method) (ValaCodeVisitor* self, ValaMethod* m);
+	void (*visit_creation_method) (ValaCodeVisitor* self, ValaCreationMethod* m);
+	void (*visit_formal_parameter) (ValaCodeVisitor* self, ValaParameter* p);
+	void (*visit_property) (ValaCodeVisitor* self, ValaProperty* prop);
+	void (*visit_property_accessor) (ValaCodeVisitor* self, ValaPropertyAccessor* acc);
+	void (*visit_signal) (ValaCodeVisitor* self, ValaSignal* sig);
+	void (*visit_constructor) (ValaCodeVisitor* self, ValaConstructor* c);
+	void (*visit_destructor) (ValaCodeVisitor* self, ValaDestructor* d);
+	void (*visit_type_parameter) (ValaCodeVisitor* self, ValaTypeParameter* p);
+	void (*visit_using_directive) (ValaCodeVisitor* self, ValaUsingDirective* ns);
+	void (*visit_data_type) (ValaCodeVisitor* self, ValaDataType* type);
+	void (*visit_block) (ValaCodeVisitor* self, ValaBlock* b);
+	void (*visit_empty_statement) (ValaCodeVisitor* self, ValaEmptyStatement* stmt);
+	void (*visit_declaration_statement) (ValaCodeVisitor* self, ValaDeclarationStatement* stmt);
+	void (*visit_local_variable) (ValaCodeVisitor* self, ValaLocalVariable* local);
+	void (*visit_initializer_list) (ValaCodeVisitor* self, ValaInitializerList* list);
+	void (*visit_expression_statement) (ValaCodeVisitor* self, ValaExpressionStatement* stmt);
+	void (*visit_if_statement) (ValaCodeVisitor* self, ValaIfStatement* stmt);
+	void (*visit_switch_statement) (ValaCodeVisitor* self, ValaSwitchStatement* stmt);
+	void (*visit_switch_section) (ValaCodeVisitor* self, ValaSwitchSection* section);
+	void (*visit_switch_label) (ValaCodeVisitor* self, ValaSwitchLabel* label);
+	void (*visit_loop) (ValaCodeVisitor* self, ValaLoop* stmt);
+	void (*visit_while_statement) (ValaCodeVisitor* self, ValaWhileStatement* stmt);
+	void (*visit_do_statement) (ValaCodeVisitor* self, ValaDoStatement* stmt);
+	void (*visit_for_statement) (ValaCodeVisitor* self, ValaForStatement* stmt);
+	void (*visit_foreach_statement) (ValaCodeVisitor* self, ValaForeachStatement* stmt);
+	void (*visit_break_statement) (ValaCodeVisitor* self, ValaBreakStatement* stmt);
+	void (*visit_continue_statement) (ValaCodeVisitor* self, ValaContinueStatement* stmt);
+	void (*visit_return_statement) (ValaCodeVisitor* self, ValaReturnStatement* stmt);
+	void (*visit_yield_statement) (ValaCodeVisitor* self, ValaYieldStatement* y);
+	void (*visit_throw_statement) (ValaCodeVisitor* self, ValaThrowStatement* stmt);
+	void (*visit_try_statement) (ValaCodeVisitor* self, ValaTryStatement* stmt);
+	void (*visit_catch_clause) (ValaCodeVisitor* self, ValaCatchClause* clause);
+	void (*visit_lock_statement) (ValaCodeVisitor* self, ValaLockStatement* stmt);
+	void (*visit_unlock_statement) (ValaCodeVisitor* self, ValaUnlockStatement* stmt);
+	void (*visit_delete_statement) (ValaCodeVisitor* self, ValaDeleteStatement* stmt);
+	void (*visit_expression) (ValaCodeVisitor* self, ValaExpression* expr);
+	void (*visit_array_creation_expression) (ValaCodeVisitor* self, ValaArrayCreationExpression* expr);
+	void (*visit_boolean_literal) (ValaCodeVisitor* self, ValaBooleanLiteral* lit);
+	void (*visit_character_literal) (ValaCodeVisitor* self, ValaCharacterLiteral* lit);
+	void (*visit_integer_literal) (ValaCodeVisitor* self, ValaIntegerLiteral* lit);
+	void (*visit_real_literal) (ValaCodeVisitor* self, ValaRealLiteral* lit);
+	void (*visit_regex_literal) (ValaCodeVisitor* self, ValaRegexLiteral* lit);
+	void (*visit_string_literal) (ValaCodeVisitor* self, ValaStringLiteral* lit);
+	void (*visit_template) (ValaCodeVisitor* self, ValaTemplate* tmpl);
+	void (*visit_list_literal) (ValaCodeVisitor* self, ValaListLiteral* lit);
+	void (*visit_set_literal) (ValaCodeVisitor* self, ValaSetLiteral* lit);
+	void (*visit_map_literal) (ValaCodeVisitor* self, ValaMapLiteral* lit);
+	void (*visit_tuple) (ValaCodeVisitor* self, ValaTuple* tuple);
+	void (*visit_null_literal) (ValaCodeVisitor* self, ValaNullLiteral* lit);
+	void (*visit_member_access) (ValaCodeVisitor* self, ValaMemberAccess* expr);
+	void (*visit_method_call) (ValaCodeVisitor* self, ValaMethodCall* expr);
+	void (*visit_element_access) (ValaCodeVisitor* self, ValaElementAccess* expr);
+	void (*visit_slice_expression) (ValaCodeVisitor* self, ValaSliceExpression* expr);
+	void (*visit_base_access) (ValaCodeVisitor* self, ValaBaseAccess* expr);
+	void (*visit_postfix_expression) (ValaCodeVisitor* self, ValaPostfixExpression* expr);
+	void (*visit_object_creation_expression) (ValaCodeVisitor* self, ValaObjectCreationExpression* expr);
+	void (*visit_sizeof_expression) (ValaCodeVisitor* self, ValaSizeofExpression* expr);
+	void (*visit_typeof_expression) (ValaCodeVisitor* self, ValaTypeofExpression* expr);
+	void (*visit_unary_expression) (ValaCodeVisitor* self, ValaUnaryExpression* expr);
+	void (*visit_cast_expression) (ValaCodeVisitor* self, ValaCastExpression* expr);
+	void (*visit_named_argument) (ValaCodeVisitor* self, ValaNamedArgument* expr);
+	void (*visit_pointer_indirection) (ValaCodeVisitor* self, ValaPointerIndirection* expr);
+	void (*visit_addressof_expression) (ValaCodeVisitor* self, ValaAddressofExpression* expr);
+	void (*visit_reference_transfer_expression) (ValaCodeVisitor* self, ValaReferenceTransferExpression* expr);
+	void (*visit_binary_expression) (ValaCodeVisitor* self, ValaBinaryExpression* expr);
+	void (*visit_type_check) (ValaCodeVisitor* self, ValaTypeCheck* expr);
+	void (*visit_conditional_expression) (ValaCodeVisitor* self, ValaConditionalExpression* expr);
+	void (*visit_lambda_expression) (ValaCodeVisitor* self, ValaLambdaExpression* expr);
+	void (*visit_assignment) (ValaCodeVisitor* self, ValaAssignment* a);
+	void (*visit_end_full_expression) (ValaCodeVisitor* self, ValaExpression* expr);
+};
+
+struct _ValaSemanticAnalyzer {
+	ValaCodeVisitor parent_instance;
+	ValaSemanticAnalyzerPrivate * priv;
+	ValaSymbol* root_symbol;
+	ValaBlock* insert_block;
+	ValaDataType* void_type;
+	ValaDataType* bool_type;
+	ValaDataType* string_type;
+	ValaDataType* regex_type;
+	ValaDataType* uchar_type;
+	ValaDataType* short_type;
+	ValaDataType* ushort_type;
+	ValaDataType* int_type;
+	ValaDataType* uint_type;
+	ValaDataType* long_type;
+	ValaDataType* ulong_type;
+	ValaDataType* size_t_type;
+	ValaDataType* ssize_t_type;
+	ValaDataType* int8_type;
+	ValaDataType* unichar_type;
+	ValaDataType* double_type;
+	ValaDataType* type_type;
+	ValaClass* object_type;
+	ValaStructValueType* gvalue_type;
+	ValaObjectType* gvariant_type;
+	ValaDataType* glist_type;
+	ValaDataType* gslist_type;
+	ValaDataType* garray_type;
+	ValaDataType* gvaluearray_type;
+	ValaClass* gerror_type;
+	ValaDataType* list_type;
+	ValaDataType* tuple_type;
+	ValaDataType* error_type;
+	gint next_lambda_id;
+	ValaList* replaced_nodes;
+};
+
+struct _ValaSemanticAnalyzerClass {
+	ValaCodeVisitorClass parent_class;
+};
+
 
 static gpointer vala_cast_expression_parent_class = NULL;
 
@@ -295,7 +1312,105 @@ gboolean vala_data_type_get_value_owned (ValaDataType* self);
 void vala_data_type_set_value_owned (ValaDataType* self, gboolean value);
 void vala_expression_set_value_type (ValaExpression* self, ValaDataType* value);
 gboolean vala_cast_expression_get_is_silent_cast (ValaCastExpression* self);
+static gboolean vala_cast_expression_is_gvariant (ValaCastExpression* self, ValaCodeContext* context, ValaDataType* type);
 void vala_expression_set_target_type (ValaExpression* self, ValaDataType* value);
+GType vala_typesymbol_get_type (void) G_GNUC_CONST;
+ValaTypeSymbol* vala_data_type_get_data_type (ValaDataType* self);
+gboolean vala_typesymbol_is_subtype_of (ValaTypeSymbol* self, ValaTypeSymbol* t);
+GType vala_semantic_analyzer_get_type (void) G_GNUC_CONST;
+ValaSemanticAnalyzer* vala_code_context_get_analyzer (ValaCodeContext* self);
+gpointer vala_source_file_ref (gpointer instance);
+void vala_source_file_unref (gpointer instance);
+GParamSpec* vala_param_spec_source_file (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void vala_value_set_source_file (GValue* value, gpointer v_object);
+void vala_value_take_source_file (GValue* value, gpointer v_object);
+gpointer vala_value_get_source_file (const GValue* value);
+GType vala_source_file_get_type (void) G_GNUC_CONST;
+GType vala_namespace_get_type (void) G_GNUC_CONST;
+GType vala_object_type_symbol_get_type (void) G_GNUC_CONST;
+GType vala_class_get_type (void) G_GNUC_CONST;
+GType vala_struct_get_type (void) G_GNUC_CONST;
+GType vala_interface_get_type (void) G_GNUC_CONST;
+GType vala_enum_get_type (void) G_GNUC_CONST;
+GType vala_constant_get_type (void) G_GNUC_CONST;
+GType vala_enum_value_get_type (void) G_GNUC_CONST;
+GType vala_error_domain_get_type (void) G_GNUC_CONST;
+GType vala_error_code_get_type (void) G_GNUC_CONST;
+GType vala_delegate_get_type (void) G_GNUC_CONST;
+GType vala_field_get_type (void) G_GNUC_CONST;
+GType vala_subroutine_get_type (void) G_GNUC_CONST;
+GType vala_method_get_type (void) G_GNUC_CONST;
+GType vala_creation_method_get_type (void) G_GNUC_CONST;
+GType vala_parameter_get_type (void) G_GNUC_CONST;
+GType vala_property_get_type (void) G_GNUC_CONST;
+GType vala_property_accessor_get_type (void) G_GNUC_CONST;
+GType vala_signal_get_type (void) G_GNUC_CONST;
+GType vala_constructor_get_type (void) G_GNUC_CONST;
+GType vala_destructor_get_type (void) G_GNUC_CONST;
+GType vala_typeparameter_get_type (void) G_GNUC_CONST;
+GType vala_using_directive_get_type (void) G_GNUC_CONST;
+GType vala_block_get_type (void) G_GNUC_CONST;
+GType vala_empty_statement_get_type (void) G_GNUC_CONST;
+GType vala_declaration_statement_get_type (void) G_GNUC_CONST;
+GType vala_local_variable_get_type (void) G_GNUC_CONST;
+GType vala_initializer_list_get_type (void) G_GNUC_CONST;
+GType vala_expression_statement_get_type (void) G_GNUC_CONST;
+GType vala_if_statement_get_type (void) G_GNUC_CONST;
+GType vala_switch_statement_get_type (void) G_GNUC_CONST;
+GType vala_switch_section_get_type (void) G_GNUC_CONST;
+GType vala_switch_label_get_type (void) G_GNUC_CONST;
+GType vala_loop_get_type (void) G_GNUC_CONST;
+GType vala_while_statement_get_type (void) G_GNUC_CONST;
+GType vala_do_statement_get_type (void) G_GNUC_CONST;
+GType vala_for_statement_get_type (void) G_GNUC_CONST;
+GType vala_foreach_statement_get_type (void) G_GNUC_CONST;
+GType vala_break_statement_get_type (void) G_GNUC_CONST;
+GType vala_continue_statement_get_type (void) G_GNUC_CONST;
+GType vala_return_statement_get_type (void) G_GNUC_CONST;
+GType vala_yield_statement_get_type (void) G_GNUC_CONST;
+GType vala_throw_statement_get_type (void) G_GNUC_CONST;
+GType vala_try_statement_get_type (void) G_GNUC_CONST;
+GType vala_catch_clause_get_type (void) G_GNUC_CONST;
+GType vala_lock_statement_get_type (void) G_GNUC_CONST;
+GType vala_unlock_statement_get_type (void) G_GNUC_CONST;
+GType vala_delete_statement_get_type (void) G_GNUC_CONST;
+GType vala_array_creation_expression_get_type (void) G_GNUC_CONST;
+GType vala_literal_get_type (void) G_GNUC_CONST;
+GType vala_boolean_literal_get_type (void) G_GNUC_CONST;
+GType vala_character_literal_get_type (void) G_GNUC_CONST;
+GType vala_integer_literal_get_type (void) G_GNUC_CONST;
+GType vala_real_literal_get_type (void) G_GNUC_CONST;
+GType vala_regex_literal_get_type (void) G_GNUC_CONST;
+GType vala_string_literal_get_type (void) G_GNUC_CONST;
+GType vala_template_get_type (void) G_GNUC_CONST;
+GType vala_list_literal_get_type (void) G_GNUC_CONST;
+GType vala_set_literal_get_type (void) G_GNUC_CONST;
+GType vala_map_literal_get_type (void) G_GNUC_CONST;
+GType vala_tuple_get_type (void) G_GNUC_CONST;
+GType vala_null_literal_get_type (void) G_GNUC_CONST;
+GType vala_member_access_get_type (void) G_GNUC_CONST;
+GType vala_method_call_get_type (void) G_GNUC_CONST;
+GType vala_element_access_get_type (void) G_GNUC_CONST;
+GType vala_slice_expression_get_type (void) G_GNUC_CONST;
+GType vala_base_access_get_type (void) G_GNUC_CONST;
+GType vala_postfix_expression_get_type (void) G_GNUC_CONST;
+GType vala_object_creation_expression_get_type (void) G_GNUC_CONST;
+GType vala_sizeof_expression_get_type (void) G_GNUC_CONST;
+GType vala_typeof_expression_get_type (void) G_GNUC_CONST;
+GType vala_unary_expression_get_type (void) G_GNUC_CONST;
+GType vala_named_argument_get_type (void) G_GNUC_CONST;
+GType vala_pointer_indirection_get_type (void) G_GNUC_CONST;
+GType vala_addressof_expression_get_type (void) G_GNUC_CONST;
+GType vala_reference_transfer_expression_get_type (void) G_GNUC_CONST;
+GType vala_binary_expression_get_type (void) G_GNUC_CONST;
+GType vala_typecheck_get_type (void) G_GNUC_CONST;
+GType vala_conditional_expression_get_type (void) G_GNUC_CONST;
+GType vala_lambda_expression_get_type (void) G_GNUC_CONST;
+GType vala_assignment_get_type (void) G_GNUC_CONST;
+GType vala_value_type_get_type (void) G_GNUC_CONST;
+GType vala_struct_value_type_get_type (void) G_GNUC_CONST;
+GType vala_reference_type_get_type (void) G_GNUC_CONST;
+GType vala_object_type_get_type (void) G_GNUC_CONST;
 static void vala_cast_expression_real_emit (ValaCodeNode* base, ValaCodeGenerator* codegen);
 void vala_code_node_emit (ValaCodeNode* self, ValaCodeGenerator* codegen);
 static void vala_cast_expression_real_get_defined_variables (ValaCodeNode* base, ValaCollection* collection);
@@ -486,16 +1601,24 @@ static gboolean vala_cast_expression_real_check (ValaCodeNode* base, ValaCodeCon
 	gboolean _tmp56_;
 	gboolean _tmp57_;
 	gboolean _tmp58_;
-	ValaExpression* _tmp61_;
-	ValaExpression* _tmp62_;
+	gboolean _tmp61_ = FALSE;
+	ValaCodeContext* _tmp62_;
 	ValaExpression* _tmp63_;
 	ValaExpression* _tmp64_;
 	ValaDataType* _tmp65_;
 	ValaDataType* _tmp66_;
-	ValaDataType* _tmp67_ = NULL;
-	ValaDataType* _tmp68_;
-	gboolean _tmp69_;
-	gboolean _tmp70_;
+	gboolean _tmp67_ = FALSE;
+	gboolean _tmp72_;
+	ValaExpression* _tmp75_;
+	ValaExpression* _tmp76_;
+	ValaExpression* _tmp77_;
+	ValaExpression* _tmp78_;
+	ValaDataType* _tmp79_;
+	ValaDataType* _tmp80_;
+	ValaDataType* _tmp81_ = NULL;
+	ValaDataType* _tmp82_;
+	gboolean _tmp83_;
+	gboolean _tmp84_;
 	self = (ValaCastExpression*) base;
 	g_return_val_if_fail (context != NULL, FALSE);
 	_tmp0_ = vala_code_node_get_checked ((ValaCodeNode*) self);
@@ -629,19 +1752,90 @@ static gboolean vala_cast_expression_real_check (ValaCodeNode* base, ValaCodeCon
 		_tmp60_ = _tmp59_;
 		vala_data_type_set_nullable (_tmp60_, TRUE);
 	}
-	_tmp61_ = vala_cast_expression_get_inner (self);
-	_tmp62_ = _tmp61_;
+	_tmp62_ = context;
 	_tmp63_ = vala_cast_expression_get_inner (self);
 	_tmp64_ = _tmp63_;
 	_tmp65_ = vala_expression_get_value_type (_tmp64_);
 	_tmp66_ = _tmp65_;
-	_tmp67_ = vala_data_type_copy (_tmp66_);
-	_tmp68_ = _tmp67_;
-	vala_expression_set_target_type (_tmp62_, _tmp68_);
-	_vala_code_node_unref0 (_tmp68_);
-	_tmp69_ = vala_code_node_get_error ((ValaCodeNode*) self);
-	_tmp70_ = _tmp69_;
-	result = !_tmp70_;
+	_tmp67_ = vala_cast_expression_is_gvariant (self, _tmp62_, _tmp66_);
+	if (_tmp67_) {
+		ValaCodeContext* _tmp68_;
+		ValaDataType* _tmp69_;
+		ValaDataType* _tmp70_;
+		gboolean _tmp71_ = FALSE;
+		_tmp68_ = context;
+		_tmp69_ = vala_expression_get_value_type ((ValaExpression*) self);
+		_tmp70_ = _tmp69_;
+		_tmp71_ = vala_cast_expression_is_gvariant (self, _tmp68_, _tmp70_);
+		_tmp61_ = !_tmp71_;
+	} else {
+		_tmp61_ = FALSE;
+	}
+	_tmp72_ = _tmp61_;
+	if (_tmp72_) {
+		ValaDataType* _tmp73_;
+		ValaDataType* _tmp74_;
+		_tmp73_ = vala_expression_get_value_type ((ValaExpression*) self);
+		_tmp74_ = _tmp73_;
+		vala_data_type_set_value_owned (_tmp74_, TRUE);
+	}
+	_tmp75_ = vala_cast_expression_get_inner (self);
+	_tmp76_ = _tmp75_;
+	_tmp77_ = vala_cast_expression_get_inner (self);
+	_tmp78_ = _tmp77_;
+	_tmp79_ = vala_expression_get_value_type (_tmp78_);
+	_tmp80_ = _tmp79_;
+	_tmp81_ = vala_data_type_copy (_tmp80_);
+	_tmp82_ = _tmp81_;
+	vala_expression_set_target_type (_tmp76_, _tmp82_);
+	_vala_code_node_unref0 (_tmp82_);
+	_tmp83_ = vala_code_node_get_error ((ValaCodeNode*) self);
+	_tmp84_ = _tmp83_;
+	result = !_tmp84_;
+	return result;
+}
+
+
+static gboolean vala_cast_expression_is_gvariant (ValaCastExpression* self, ValaCodeContext* context, ValaDataType* type) {
+	gboolean result = FALSE;
+	gboolean _tmp0_ = FALSE;
+	ValaDataType* _tmp1_;
+	ValaTypeSymbol* _tmp2_;
+	ValaTypeSymbol* _tmp3_;
+	gboolean _tmp14_;
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (context != NULL, FALSE);
+	g_return_val_if_fail (type != NULL, FALSE);
+	_tmp1_ = type;
+	_tmp2_ = vala_data_type_get_data_type (_tmp1_);
+	_tmp3_ = _tmp2_;
+	if (_tmp3_ != NULL) {
+		ValaDataType* _tmp4_;
+		ValaTypeSymbol* _tmp5_;
+		ValaTypeSymbol* _tmp6_;
+		ValaCodeContext* _tmp7_;
+		ValaSemanticAnalyzer* _tmp8_;
+		ValaSemanticAnalyzer* _tmp9_;
+		ValaObjectType* _tmp10_;
+		ValaTypeSymbol* _tmp11_;
+		ValaTypeSymbol* _tmp12_;
+		gboolean _tmp13_ = FALSE;
+		_tmp4_ = type;
+		_tmp5_ = vala_data_type_get_data_type (_tmp4_);
+		_tmp6_ = _tmp5_;
+		_tmp7_ = context;
+		_tmp8_ = vala_code_context_get_analyzer (_tmp7_);
+		_tmp9_ = _tmp8_;
+		_tmp10_ = _tmp9_->gvariant_type;
+		_tmp11_ = vala_data_type_get_data_type ((ValaDataType*) _tmp10_);
+		_tmp12_ = _tmp11_;
+		_tmp13_ = vala_typesymbol_is_subtype_of (_tmp6_, _tmp12_);
+		_tmp0_ = _tmp13_;
+	} else {
+		_tmp0_ = FALSE;
+	}
+	_tmp14_ = _tmp0_;
+	result = _tmp14_;
 	return result;
 }
 
diff --git a/vala/valacastexpression.vala b/vala/valacastexpression.vala
index 40ed1ce..c7a72b6 100644
--- a/vala/valacastexpression.vala
+++ b/vala/valacastexpression.vala
@@ -152,11 +152,20 @@ public class Vala.CastExpression : Expression {
 			value_type.nullable = true;
 		}
 
+		if (is_gvariant (context, inner.value_type) && !is_gvariant (context, value_type)) {
+			// GVariant unboxing returns owned value
+			value_type.value_owned = true;
+		}
+
 		inner.target_type = inner.value_type.copy ();
 
 		return !error;
 	}
 
+	bool is_gvariant (CodeContext context, DataType type) {
+		return type.data_type != null && type.data_type.is_subtype_of (context.analyzer.gvariant_type.data_type);
+	}
+
 	public override void emit (CodeGenerator codegen) {
 		inner.emit (codegen);
 
diff --git a/vala/valacomment.c b/vala/valacomment.c
index 17dba88..1e6da66 100644
--- a/vala/valacomment.c
+++ b/vala/valacomment.c
@@ -63,8 +63,6 @@ struct _ValaComment {
 struct _ValaCommentClass {
 	GTypeClass parent_class;
 	void (*finalize) (ValaComment *self);
-	const gchar* (*get_content) (ValaComment* self);
-	void (*set_content) (ValaComment* self, const gchar* value);
 };
 
 struct _ValaCommentPrivate {
@@ -127,16 +125,9 @@ ValaComment* vala_comment_new (const gchar* comment, ValaSourceReference* _sourc
 
 
 const gchar* vala_comment_get_content (ValaComment* self) {
-	g_return_val_if_fail (self != NULL, NULL);
-	return VALA_COMMENT_GET_CLASS (self)->get_content (self);
-}
-
-
-static const gchar* vala_comment_real_get_content (ValaComment* base) {
 	const gchar* result;
-	ValaComment* self;
 	const gchar* _tmp0_;
-	self = base;
+	g_return_val_if_fail (self != NULL, NULL);
 	_tmp0_ = self->priv->_content;
 	result = _tmp0_;
 	return result;
@@ -144,16 +135,9 @@ static const gchar* vala_comment_real_get_content (ValaComment* base) {
 
 
 void vala_comment_set_content (ValaComment* self, const gchar* value) {
-	g_return_if_fail (self != NULL);
-	VALA_COMMENT_GET_CLASS (self)->set_content (self, value);
-}
-
-
-static void vala_comment_real_set_content (ValaComment* base, const gchar* value) {
-	ValaComment* self;
 	const gchar* _tmp0_;
 	gchar* _tmp1_;
-	self = base;
+	g_return_if_fail (self != NULL);
 	_tmp0_ = value;
 	_tmp1_ = g_strdup (_tmp0_);
 	_g_free0 (self->priv->_content);
@@ -301,8 +285,6 @@ static void vala_comment_class_init (ValaCommentClass * klass) {
 	vala_comment_parent_class = g_type_class_peek_parent (klass);
 	VALA_COMMENT_CLASS (klass)->finalize = vala_comment_finalize;
 	g_type_class_add_private (klass, sizeof (ValaCommentPrivate));
-	VALA_COMMENT_CLASS (klass)->get_content = vala_comment_real_get_content;
-	VALA_COMMENT_CLASS (klass)->set_content = vala_comment_real_set_content;
 }
 
 
diff --git a/vala/valacomment.vala b/vala/valacomment.vala
index 181d8a1..0e48f89 100644
--- a/vala/valacomment.vala
+++ b/vala/valacomment.vala
@@ -34,7 +34,7 @@ public class Vala.Comment {
 	/**
 	 * The text describing the referenced source code.
 	 */
-	public virtual string content { set; get; }
+	public string content { set; get; }
 
 	/**
 	 * References the location in the source file where this code node has
diff --git a/vala/valadatatype.c b/vala/valadatatype.c
index 3876525..ab734fd 100644
--- a/vala/valadatatype.c
+++ b/vala/valadatatype.c
@@ -2878,17 +2878,67 @@ gboolean vala_data_type_is_array (ValaDataType* self) {
 
 static gboolean vala_data_type_real_is_accessible (ValaDataType* self, ValaSymbol* sym) {
 	gboolean result = FALSE;
-	ValaTypeSymbol* _tmp0_;
+	ValaTypeSymbol* _tmp13_;
 	g_return_val_if_fail (sym != NULL, FALSE);
-	_tmp0_ = self->priv->_data_type;
-	if (_tmp0_ != NULL) {
-		ValaTypeSymbol* _tmp1_;
-		ValaSymbol* _tmp2_;
-		gboolean _tmp3_ = FALSE;
-		_tmp1_ = self->priv->_data_type;
-		_tmp2_ = sym;
-		_tmp3_ = vala_symbol_is_accessible ((ValaSymbol*) _tmp1_, _tmp2_);
-		result = _tmp3_;
+	{
+		ValaList* _tmp0_ = NULL;
+		ValaList* _type_arg_list;
+		ValaList* _tmp1_;
+		gint _tmp2_;
+		gint _tmp3_;
+		gint _type_arg_size;
+		gint _type_arg_index;
+		_tmp0_ = vala_data_type_get_type_arguments (self);
+		_type_arg_list = _tmp0_;
+		_tmp1_ = _type_arg_list;
+		_tmp2_ = vala_collection_get_size ((ValaCollection*) _tmp1_);
+		_tmp3_ = _tmp2_;
+		_type_arg_size = _tmp3_;
+		_type_arg_index = -1;
+		while (TRUE) {
+			gint _tmp4_;
+			gint _tmp5_;
+			gint _tmp6_;
+			ValaList* _tmp7_;
+			gint _tmp8_;
+			gpointer _tmp9_ = NULL;
+			ValaDataType* type_arg;
+			ValaDataType* _tmp10_;
+			ValaSymbol* _tmp11_;
+			gboolean _tmp12_ = FALSE;
+			_tmp4_ = _type_arg_index;
+			_type_arg_index = _tmp4_ + 1;
+			_tmp5_ = _type_arg_index;
+			_tmp6_ = _type_arg_size;
+			if (!(_tmp5_ < _tmp6_)) {
+				break;
+			}
+			_tmp7_ = _type_arg_list;
+			_tmp8_ = _type_arg_index;
+			_tmp9_ = vala_list_get (_tmp7_, _tmp8_);
+			type_arg = (ValaDataType*) _tmp9_;
+			_tmp10_ = type_arg;
+			_tmp11_ = sym;
+			_tmp12_ = vala_data_type_is_accessible (_tmp10_, _tmp11_);
+			if (!_tmp12_) {
+				result = FALSE;
+				_vala_code_node_unref0 (type_arg);
+				_vala_iterable_unref0 (_type_arg_list);
+				return result;
+			}
+			_vala_code_node_unref0 (type_arg);
+		}
+		_vala_iterable_unref0 (_type_arg_list);
+	}
+	_tmp13_ = self->priv->_data_type;
+	if (_tmp13_ != NULL) {
+		ValaTypeSymbol* _tmp14_;
+		ValaSymbol* _tmp15_;
+		gboolean _tmp16_ = FALSE;
+		_tmp14_ = self->priv->_data_type;
+		_tmp15_ = sym;
+		_tmp16_ = vala_symbol_is_accessible ((ValaSymbol*) _tmp14_, _tmp15_);
+		result = _tmp16_;
 		return result;
 	}
 	result = TRUE;
diff --git a/vala/valadatatype.vala b/vala/valadatatype.vala
index c4384bf..c553dcf 100644
--- a/vala/valadatatype.vala
+++ b/vala/valadatatype.vala
@@ -392,6 +392,11 @@ public abstract class Vala.DataType : CodeNode {
 
 	// check whether this type is at least as accessible as the specified symbol
 	public virtual bool is_accessible (Symbol sym) {
+		foreach (var type_arg in get_type_arguments ()) {
+			if (!type_arg.is_accessible (sym)) {
+				return false;
+			}
+		}
 		if (data_type != null) {
 			return data_type.is_accessible (sym);
 		}
diff --git a/vala/valageniescanner.c b/vala/valageniescanner.c
index 3727ac8..081eb66 100644
--- a/vala/valageniescanner.c
+++ b/vala/valageniescanner.c
@@ -596,214 +596,211 @@ ValaGenieTokenType vala_genie_scanner_read_regex_token (ValaGenieScanner* self,
 	gchar* _tmp1_;
 	gint _tmp2_;
 	gint _tmp3_;
-	ValaSourceLocation _tmp4_ = {0};
 	gint token_length_in_chars;
+	gchar* _tmp4_;
 	gchar* _tmp5_;
-	gchar* _tmp6_;
-	gint _tmp145_;
-	gchar* _tmp151_;
+	gint _tmp144_;
+	gchar* _tmp150_;
+	gint _tmp151_;
 	gint _tmp152_;
-	gint _tmp153_;
-	ValaSourceLocation _tmp154_ = {0};
 	g_return_val_if_fail (self != NULL, 0);
 	_tmp0_ = self->priv->current;
 	begin = _tmp0_;
 	_tmp1_ = begin;
 	_tmp2_ = self->priv->line;
 	_tmp3_ = self->priv->column;
-	vala_source_location_init (&_tmp4_, _tmp1_, _tmp2_, _tmp3_);
-	_vala_token_begin = _tmp4_;
+	vala_source_location_init (&_vala_token_begin, _tmp1_, _tmp2_, _tmp3_);
 	token_length_in_chars = -1;
-	_tmp5_ = self->priv->current;
-	_tmp6_ = self->priv->end;
-	if (_tmp5_ >= _tmp6_) {
+	_tmp4_ = self->priv->current;
+	_tmp5_ = self->priv->end;
+	if (_tmp4_ >= _tmp5_) {
 		type = VALA_GENIE_TOKEN_TYPE_EOF;
 	} else {
-		gchar* _tmp7_;
-		gchar _tmp8_;
-		_tmp7_ = self->priv->current;
-		_tmp8_ = _tmp7_[0];
-		switch (_tmp8_) {
+		gchar* _tmp6_;
+		gchar _tmp7_;
+		_tmp6_ = self->priv->current;
+		_tmp7_ = _tmp6_[0];
+		switch (_tmp7_) {
 			case '/':
 			{
-				gchar* _tmp9_;
-				gint _tmp10_;
+				gchar* _tmp8_;
+				gint _tmp9_;
 				gboolean fl_i;
 				gboolean fl_s;
 				gboolean fl_m;
 				gboolean fl_x;
 				type = VALA_GENIE_TOKEN_TYPE_CLOSE_REGEX_LITERAL;
-				_tmp9_ = self->priv->current;
-				self->priv->current = _tmp9_ + 1;
-				_tmp10_ = self->priv->state_stack_length1;
-				self->priv->state_stack_length1 = _tmp10_ - 1;
+				_tmp8_ = self->priv->current;
+				self->priv->current = _tmp8_ + 1;
+				_tmp9_ = self->priv->state_stack_length1;
+				self->priv->state_stack_length1 = _tmp9_ - 1;
 				fl_i = FALSE;
 				fl_s = FALSE;
 				fl_m = FALSE;
 				fl_x = FALSE;
 				while (TRUE) {
+					gboolean _tmp10_ = FALSE;
 					gboolean _tmp11_ = FALSE;
 					gboolean _tmp12_ = FALSE;
-					gboolean _tmp13_ = FALSE;
-					gchar* _tmp14_;
-					gchar _tmp15_;
-					gboolean _tmp18_;
-					gboolean _tmp21_;
-					gboolean _tmp24_;
-					gchar* _tmp25_;
-					gchar _tmp26_;
-					gchar* _tmp67_;
-					gint _tmp68_;
-					_tmp14_ = self->priv->current;
-					_tmp15_ = _tmp14_[0];
-					if (_tmp15_ == 'i') {
-						_tmp13_ = TRUE;
-					} else {
-						gchar* _tmp16_;
-						gchar _tmp17_;
-						_tmp16_ = self->priv->current;
-						_tmp17_ = _tmp16_[0];
-						_tmp13_ = _tmp17_ == 's';
-					}
-					_tmp18_ = _tmp13_;
-					if (_tmp18_) {
+					gchar* _tmp13_;
+					gchar _tmp14_;
+					gboolean _tmp17_;
+					gboolean _tmp20_;
+					gboolean _tmp23_;
+					gchar* _tmp24_;
+					gchar _tmp25_;
+					gchar* _tmp66_;
+					gint _tmp67_;
+					_tmp13_ = self->priv->current;
+					_tmp14_ = _tmp13_[0];
+					if (_tmp14_ == 'i') {
 						_tmp12_ = TRUE;
 					} else {
-						gchar* _tmp19_;
-						gchar _tmp20_;
-						_tmp19_ = self->priv->current;
-						_tmp20_ = _tmp19_[0];
-						_tmp12_ = _tmp20_ == 'm';
+						gchar* _tmp15_;
+						gchar _tmp16_;
+						_tmp15_ = self->priv->current;
+						_tmp16_ = _tmp15_[0];
+						_tmp12_ = _tmp16_ == 's';
 					}
-					_tmp21_ = _tmp12_;
-					if (_tmp21_) {
+					_tmp17_ = _tmp12_;
+					if (_tmp17_) {
 						_tmp11_ = TRUE;
 					} else {
-						gchar* _tmp22_;
-						gchar _tmp23_;
-						_tmp22_ = self->priv->current;
-						_tmp23_ = _tmp22_[0];
-						_tmp11_ = _tmp23_ == 'x';
+						gchar* _tmp18_;
+						gchar _tmp19_;
+						_tmp18_ = self->priv->current;
+						_tmp19_ = _tmp18_[0];
+						_tmp11_ = _tmp19_ == 'm';
 					}
-					_tmp24_ = _tmp11_;
-					if (!_tmp24_) {
+					_tmp20_ = _tmp11_;
+					if (_tmp20_) {
+						_tmp10_ = TRUE;
+					} else {
+						gchar* _tmp21_;
+						gchar _tmp22_;
+						_tmp21_ = self->priv->current;
+						_tmp22_ = _tmp21_[0];
+						_tmp10_ = _tmp22_ == 'x';
+					}
+					_tmp23_ = _tmp10_;
+					if (!_tmp23_) {
 						break;
 					}
-					_tmp25_ = self->priv->current;
-					_tmp26_ = _tmp25_[0];
-					switch (_tmp26_) {
+					_tmp24_ = self->priv->current;
+					_tmp25_ = _tmp24_[0];
+					switch (_tmp25_) {
 						case 'i':
 						{
-							gboolean _tmp27_;
-							_tmp27_ = fl_i;
-							if (_tmp27_) {
-								ValaSourceFile* _tmp28_;
+							gboolean _tmp26_;
+							_tmp26_ = fl_i;
+							if (_tmp26_) {
+								ValaSourceFile* _tmp27_;
+								gint _tmp28_;
 								gint _tmp29_;
 								gint _tmp30_;
 								gint _tmp31_;
 								gint _tmp32_;
 								gint _tmp33_;
-								gint _tmp34_;
+								ValaSourceReference* _tmp34_;
 								ValaSourceReference* _tmp35_;
-								ValaSourceReference* _tmp36_;
-								_tmp28_ = self->priv->_source_file;
-								_tmp29_ = self->priv->line;
-								_tmp30_ = self->priv->column;
-								_tmp31_ = token_length_in_chars;
-								_tmp32_ = self->priv->line;
-								_tmp33_ = self->priv->column;
-								_tmp34_ = token_length_in_chars;
-								_tmp35_ = vala_source_reference_new (_tmp28_, _tmp29_, _tmp30_ + _tmp31_, _tmp32_, _tmp33_ + _tmp34_);
-								_tmp36_ = _tmp35_;
-								vala_report_error (_tmp36_, "modifier 'i' used more than once");
-								_vala_source_reference_unref0 (_tmp36_);
+								_tmp27_ = self->priv->_source_file;
+								_tmp28_ = self->priv->line;
+								_tmp29_ = self->priv->column;
+								_tmp30_ = token_length_in_chars;
+								_tmp31_ = self->priv->line;
+								_tmp32_ = self->priv->column;
+								_tmp33_ = token_length_in_chars;
+								_tmp34_ = vala_source_reference_new (_tmp27_, _tmp28_, _tmp29_ + _tmp30_, _tmp31_, _tmp32_ + _tmp33_);
+								_tmp35_ = _tmp34_;
+								vala_report_error (_tmp35_, "modifier 'i' used more than once");
+								_vala_source_reference_unref0 (_tmp35_);
 							}
 							fl_i = TRUE;
 							break;
 						}
 						case 's':
 						{
-							gboolean _tmp37_;
-							_tmp37_ = fl_s;
-							if (_tmp37_) {
-								ValaSourceFile* _tmp38_;
+							gboolean _tmp36_;
+							_tmp36_ = fl_s;
+							if (_tmp36_) {
+								ValaSourceFile* _tmp37_;
+								gint _tmp38_;
 								gint _tmp39_;
 								gint _tmp40_;
 								gint _tmp41_;
 								gint _tmp42_;
 								gint _tmp43_;
-								gint _tmp44_;
+								ValaSourceReference* _tmp44_;
 								ValaSourceReference* _tmp45_;
-								ValaSourceReference* _tmp46_;
-								_tmp38_ = self->priv->_source_file;
-								_tmp39_ = self->priv->line;
-								_tmp40_ = self->priv->column;
-								_tmp41_ = token_length_in_chars;
-								_tmp42_ = self->priv->line;
-								_tmp43_ = self->priv->column;
-								_tmp44_ = token_length_in_chars;
-								_tmp45_ = vala_source_reference_new (_tmp38_, _tmp39_, _tmp40_ + _tmp41_, _tmp42_, _tmp43_ + _tmp44_);
-								_tmp46_ = _tmp45_;
-								vala_report_error (_tmp46_, "modifier 's' used more than once");
-								_vala_source_reference_unref0 (_tmp46_);
+								_tmp37_ = self->priv->_source_file;
+								_tmp38_ = self->priv->line;
+								_tmp39_ = self->priv->column;
+								_tmp40_ = token_length_in_chars;
+								_tmp41_ = self->priv->line;
+								_tmp42_ = self->priv->column;
+								_tmp43_ = token_length_in_chars;
+								_tmp44_ = vala_source_reference_new (_tmp37_, _tmp38_, _tmp39_ + _tmp40_, _tmp41_, _tmp42_ + _tmp43_);
+								_tmp45_ = _tmp44_;
+								vala_report_error (_tmp45_, "modifier 's' used more than once");
+								_vala_source_reference_unref0 (_tmp45_);
 							}
 							fl_s = TRUE;
 							break;
 						}
 						case 'm':
 						{
-							gboolean _tmp47_;
-							_tmp47_ = fl_m;
-							if (_tmp47_) {
-								ValaSourceFile* _tmp48_;
+							gboolean _tmp46_;
+							_tmp46_ = fl_m;
+							if (_tmp46_) {
+								ValaSourceFile* _tmp47_;
+								gint _tmp48_;
 								gint _tmp49_;
 								gint _tmp50_;
 								gint _tmp51_;
 								gint _tmp52_;
 								gint _tmp53_;
-								gint _tmp54_;
+								ValaSourceReference* _tmp54_;
 								ValaSourceReference* _tmp55_;
-								ValaSourceReference* _tmp56_;
-								_tmp48_ = self->priv->_source_file;
-								_tmp49_ = self->priv->line;
-								_tmp50_ = self->priv->column;
-								_tmp51_ = token_length_in_chars;
-								_tmp52_ = self->priv->line;
-								_tmp53_ = self->priv->column;
-								_tmp54_ = token_length_in_chars;
-								_tmp55_ = vala_source_reference_new (_tmp48_, _tmp49_, _tmp50_ + _tmp51_, _tmp52_, _tmp53_ + _tmp54_);
-								_tmp56_ = _tmp55_;
-								vala_report_error (_tmp56_, "modifier 'm' used more than once");
-								_vala_source_reference_unref0 (_tmp56_);
+								_tmp47_ = self->priv->_source_file;
+								_tmp48_ = self->priv->line;
+								_tmp49_ = self->priv->column;
+								_tmp50_ = token_length_in_chars;
+								_tmp51_ = self->priv->line;
+								_tmp52_ = self->priv->column;
+								_tmp53_ = token_length_in_chars;
+								_tmp54_ = vala_source_reference_new (_tmp47_, _tmp48_, _tmp49_ + _tmp50_, _tmp51_, _tmp52_ + _tmp53_);
+								_tmp55_ = _tmp54_;
+								vala_report_error (_tmp55_, "modifier 'm' used more than once");
+								_vala_source_reference_unref0 (_tmp55_);
 							}
 							fl_m = TRUE;
 							break;
 						}
 						case 'x':
 						{
-							gboolean _tmp57_;
-							_tmp57_ = fl_x;
-							if (_tmp57_) {
-								ValaSourceFile* _tmp58_;
+							gboolean _tmp56_;
+							_tmp56_ = fl_x;
+							if (_tmp56_) {
+								ValaSourceFile* _tmp57_;
+								gint _tmp58_;
 								gint _tmp59_;
 								gint _tmp60_;
 								gint _tmp61_;
 								gint _tmp62_;
 								gint _tmp63_;
-								gint _tmp64_;
+								ValaSourceReference* _tmp64_;
 								ValaSourceReference* _tmp65_;
-								ValaSourceReference* _tmp66_;
-								_tmp58_ = self->priv->_source_file;
-								_tmp59_ = self->priv->line;
-								_tmp60_ = self->priv->column;
-								_tmp61_ = token_length_in_chars;
-								_tmp62_ = self->priv->line;
-								_tmp63_ = self->priv->column;
-								_tmp64_ = token_length_in_chars;
-								_tmp65_ = vala_source_reference_new (_tmp58_, _tmp59_, _tmp60_ + _tmp61_, _tmp62_, _tmp63_ + _tmp64_);
-								_tmp66_ = _tmp65_;
-								vala_report_error (_tmp66_, "modifier 'x' used more than once");
-								_vala_source_reference_unref0 (_tmp66_);
+								_tmp57_ = self->priv->_source_file;
+								_tmp58_ = self->priv->line;
+								_tmp59_ = self->priv->column;
+								_tmp60_ = token_length_in_chars;
+								_tmp61_ = self->priv->line;
+								_tmp62_ = self->priv->column;
+								_tmp63_ = token_length_in_chars;
+								_tmp64_ = vala_source_reference_new (_tmp57_, _tmp58_, _tmp59_ + _tmp60_, _tmp61_, _tmp62_ + _tmp63_);
+								_tmp65_ = _tmp64_;
+								vala_report_error (_tmp65_, "modifier 'x' used more than once");
+								_vala_source_reference_unref0 (_tmp65_);
 							}
 							fl_x = TRUE;
 							break;
@@ -811,64 +808,64 @@ ValaGenieTokenType vala_genie_scanner_read_regex_token (ValaGenieScanner* self,
 						default:
 						break;
 					}
-					_tmp67_ = self->priv->current;
-					self->priv->current = _tmp67_ + 1;
-					_tmp68_ = token_length_in_chars;
-					token_length_in_chars = _tmp68_ + 1;
+					_tmp66_ = self->priv->current;
+					self->priv->current = _tmp66_ + 1;
+					_tmp67_ = token_length_in_chars;
+					token_length_in_chars = _tmp67_ + 1;
 				}
 				break;
 			}
 			default:
 			{
-				gboolean _tmp126_ = FALSE;
+				gboolean _tmp125_ = FALSE;
+				gchar* _tmp126_;
 				gchar* _tmp127_;
-				gchar* _tmp128_;
-				gboolean _tmp131_;
+				gboolean _tmp130_;
 				type = VALA_GENIE_TOKEN_TYPE_REGEX_LITERAL;
 				token_length_in_chars = 0;
 				while (TRUE) {
-					gboolean _tmp69_ = FALSE;
+					gboolean _tmp68_ = FALSE;
+					gchar* _tmp69_;
 					gchar* _tmp70_;
-					gchar* _tmp71_;
-					gboolean _tmp74_;
-					gchar* _tmp75_;
-					gchar _tmp76_;
-					_tmp70_ = self->priv->current;
-					_tmp71_ = self->priv->end;
-					if (_tmp70_ < _tmp71_) {
-						gchar* _tmp72_;
-						gchar _tmp73_;
-						_tmp72_ = self->priv->current;
-						_tmp73_ = _tmp72_[0];
-						_tmp69_ = _tmp73_ != '/';
+					gboolean _tmp73_;
+					gchar* _tmp74_;
+					gchar _tmp75_;
+					_tmp69_ = self->priv->current;
+					_tmp70_ = self->priv->end;
+					if (_tmp69_ < _tmp70_) {
+						gchar* _tmp71_;
+						gchar _tmp72_;
+						_tmp71_ = self->priv->current;
+						_tmp72_ = _tmp71_[0];
+						_tmp68_ = _tmp72_ != '/';
 					} else {
-						_tmp69_ = FALSE;
+						_tmp68_ = FALSE;
 					}
-					_tmp74_ = _tmp69_;
-					if (!_tmp74_) {
+					_tmp73_ = _tmp68_;
+					if (!_tmp73_) {
 						break;
 					}
-					_tmp75_ = self->priv->current;
-					_tmp76_ = _tmp75_[0];
-					if (_tmp76_ == '\\') {
-						gchar* _tmp77_;
-						gint _tmp78_;
+					_tmp74_ = self->priv->current;
+					_tmp75_ = _tmp74_[0];
+					if (_tmp75_ == '\\') {
+						gchar* _tmp76_;
+						gint _tmp77_;
+						gchar* _tmp78_;
 						gchar* _tmp79_;
 						gchar* _tmp80_;
-						gchar* _tmp81_;
-						gchar _tmp82_;
-						_tmp77_ = self->priv->current;
-						self->priv->current = _tmp77_ + 1;
-						_tmp78_ = token_length_in_chars;
-						token_length_in_chars = _tmp78_ + 1;
-						_tmp79_ = self->priv->current;
-						_tmp80_ = self->priv->end;
-						if (_tmp79_ >= _tmp80_) {
+						gchar _tmp81_;
+						_tmp76_ = self->priv->current;
+						self->priv->current = _tmp76_ + 1;
+						_tmp77_ = token_length_in_chars;
+						token_length_in_chars = _tmp77_ + 1;
+						_tmp78_ = self->priv->current;
+						_tmp79_ = self->priv->end;
+						if (_tmp78_ >= _tmp79_) {
 							break;
 						}
-						_tmp81_ = self->priv->current;
-						_tmp82_ = _tmp81_[0];
-						switch (_tmp82_) {
+						_tmp80_ = self->priv->current;
+						_tmp81_ = _tmp80_[0];
+						switch (_tmp81_) {
 							case '\'':
 							case '"':
 							case '\\':
@@ -919,180 +916,180 @@ ValaGenieTokenType vala_genie_scanner_read_regex_token (ValaGenieScanner* self,
 							case 'z':
 							case 'Z':
 							{
-								gchar* _tmp83_;
-								gint _tmp84_;
-								_tmp83_ = self->priv->current;
-								self->priv->current = _tmp83_ + 1;
-								_tmp84_ = token_length_in_chars;
-								token_length_in_chars = _tmp84_ + 1;
+								gchar* _tmp82_;
+								gint _tmp83_;
+								_tmp82_ = self->priv->current;
+								self->priv->current = _tmp82_ + 1;
+								_tmp83_ = token_length_in_chars;
+								token_length_in_chars = _tmp83_ + 1;
 								break;
 							}
 							case 'x':
 							{
-								gchar* _tmp85_;
-								gint _tmp86_;
-								_tmp85_ = self->priv->current;
-								self->priv->current = _tmp85_ + 1;
-								_tmp86_ = token_length_in_chars;
-								token_length_in_chars = _tmp86_ + 1;
+								gchar* _tmp84_;
+								gint _tmp85_;
+								_tmp84_ = self->priv->current;
+								self->priv->current = _tmp84_ + 1;
+								_tmp85_ = token_length_in_chars;
+								token_length_in_chars = _tmp85_ + 1;
 								while (TRUE) {
-									gboolean _tmp87_ = FALSE;
+									gboolean _tmp86_ = FALSE;
+									gchar* _tmp87_;
 									gchar* _tmp88_;
-									gchar* _tmp89_;
-									gboolean _tmp93_;
-									gchar* _tmp94_;
-									gint _tmp95_;
-									_tmp88_ = self->priv->current;
-									_tmp89_ = self->priv->end;
-									if (_tmp88_ < _tmp89_) {
-										gchar* _tmp90_;
-										gchar _tmp91_;
-										gboolean _tmp92_ = FALSE;
-										_tmp90_ = self->priv->current;
-										_tmp91_ = _tmp90_[0];
-										_tmp92_ = g_ascii_isxdigit (_tmp91_);
-										_tmp87_ = _tmp92_;
+									gboolean _tmp92_;
+									gchar* _tmp93_;
+									gint _tmp94_;
+									_tmp87_ = self->priv->current;
+									_tmp88_ = self->priv->end;
+									if (_tmp87_ < _tmp88_) {
+										gchar* _tmp89_;
+										gchar _tmp90_;
+										gboolean _tmp91_ = FALSE;
+										_tmp89_ = self->priv->current;
+										_tmp90_ = _tmp89_[0];
+										_tmp91_ = g_ascii_isxdigit (_tmp90_);
+										_tmp86_ = _tmp91_;
 									} else {
-										_tmp87_ = FALSE;
+										_tmp86_ = FALSE;
 									}
-									_tmp93_ = _tmp87_;
-									if (!_tmp93_) {
+									_tmp92_ = _tmp86_;
+									if (!_tmp92_) {
 										break;
 									}
-									_tmp94_ = self->priv->current;
-									self->priv->current = _tmp94_ + 1;
-									_tmp95_ = token_length_in_chars;
-									token_length_in_chars = _tmp95_ + 1;
+									_tmp93_ = self->priv->current;
+									self->priv->current = _tmp93_ + 1;
+									_tmp94_ = token_length_in_chars;
+									token_length_in_chars = _tmp94_ + 1;
 								}
 								break;
 							}
 							default:
 							{
-								ValaSourceFile* _tmp96_;
+								ValaSourceFile* _tmp95_;
+								gint _tmp96_;
 								gint _tmp97_;
 								gint _tmp98_;
 								gint _tmp99_;
 								gint _tmp100_;
 								gint _tmp101_;
-								gint _tmp102_;
+								ValaSourceReference* _tmp102_;
 								ValaSourceReference* _tmp103_;
-								ValaSourceReference* _tmp104_;
-								_tmp96_ = self->priv->_source_file;
-								_tmp97_ = self->priv->line;
-								_tmp98_ = self->priv->column;
-								_tmp99_ = token_length_in_chars;
-								_tmp100_ = self->priv->line;
-								_tmp101_ = self->priv->column;
-								_tmp102_ = token_length_in_chars;
-								_tmp103_ = vala_source_reference_new (_tmp96_, _tmp97_, _tmp98_ + _tmp99_, _tmp100_, _tmp101_ + _tmp102_);
-								_tmp104_ = _tmp103_;
-								vala_report_error (_tmp104_, "invalid escape sequence");
-								_vala_source_reference_unref0 (_tmp104_);
+								_tmp95_ = self->priv->_source_file;
+								_tmp96_ = self->priv->line;
+								_tmp97_ = self->priv->column;
+								_tmp98_ = token_length_in_chars;
+								_tmp99_ = self->priv->line;
+								_tmp100_ = self->priv->column;
+								_tmp101_ = token_length_in_chars;
+								_tmp102_ = vala_source_reference_new (_tmp95_, _tmp96_, _tmp97_ + _tmp98_, _tmp99_, _tmp100_ + _tmp101_);
+								_tmp103_ = _tmp102_;
+								vala_report_error (_tmp103_, "invalid escape sequence");
+								_vala_source_reference_unref0 (_tmp103_);
 								break;
 							}
 						}
 					} else {
-						gchar* _tmp105_;
-						gchar _tmp106_;
-						_tmp105_ = self->priv->current;
-						_tmp106_ = _tmp105_[0];
-						if (_tmp106_ == '\n') {
+						gchar* _tmp104_;
+						gchar _tmp105_;
+						_tmp104_ = self->priv->current;
+						_tmp105_ = _tmp104_[0];
+						if (_tmp105_ == '\n') {
 							break;
 						} else {
+							gchar* _tmp106_;
 							gchar* _tmp107_;
 							gchar* _tmp108_;
-							gchar* _tmp109_;
-							gunichar _tmp110_ = 0U;
+							gunichar _tmp109_ = 0U;
 							gunichar u;
-							gunichar _tmp111_;
-							_tmp107_ = self->priv->current;
-							_tmp108_ = self->priv->end;
-							_tmp109_ = self->priv->current;
-							_tmp110_ = g_utf8_get_char_validated ((const gchar*) _tmp107_, (gssize) ((glong) (_tmp108_ - _tmp109_)));
-							u = _tmp110_;
-							_tmp111_ = u;
-							if (_tmp111_ != ((gunichar) (-1))) {
-								gchar* _tmp112_;
-								gunichar _tmp113_;
-								gint _tmp114_ = 0;
-								gint _tmp115_;
-								_tmp112_ = self->priv->current;
-								_tmp113_ = u;
-								_tmp114_ = g_unichar_to_utf8 (_tmp113_, NULL);
-								self->priv->current = _tmp112_ + _tmp114_;
-								_tmp115_ = token_length_in_chars;
-								token_length_in_chars = _tmp115_ + 1;
+							gunichar _tmp110_;
+							_tmp106_ = self->priv->current;
+							_tmp107_ = self->priv->end;
+							_tmp108_ = self->priv->current;
+							_tmp109_ = g_utf8_get_char_validated ((const gchar*) _tmp106_, (gssize) ((glong) (_tmp107_ - _tmp108_)));
+							u = _tmp109_;
+							_tmp110_ = u;
+							if (_tmp110_ != ((gunichar) (-1))) {
+								gchar* _tmp111_;
+								gunichar _tmp112_;
+								gint _tmp113_ = 0;
+								gint _tmp114_;
+								_tmp111_ = self->priv->current;
+								_tmp112_ = u;
+								_tmp113_ = g_unichar_to_utf8 (_tmp112_, NULL);
+								self->priv->current = _tmp111_ + _tmp113_;
+								_tmp114_ = token_length_in_chars;
+								token_length_in_chars = _tmp114_ + 1;
 							} else {
-								gchar* _tmp116_;
-								ValaSourceFile* _tmp117_;
+								gchar* _tmp115_;
+								ValaSourceFile* _tmp116_;
+								gint _tmp117_;
 								gint _tmp118_;
 								gint _tmp119_;
 								gint _tmp120_;
 								gint _tmp121_;
 								gint _tmp122_;
-								gint _tmp123_;
+								ValaSourceReference* _tmp123_;
 								ValaSourceReference* _tmp124_;
-								ValaSourceReference* _tmp125_;
-								_tmp116_ = self->priv->current;
-								self->priv->current = _tmp116_ + 1;
-								_tmp117_ = self->priv->_source_file;
-								_tmp118_ = self->priv->line;
-								_tmp119_ = self->priv->column;
-								_tmp120_ = token_length_in_chars;
-								_tmp121_ = self->priv->line;
-								_tmp122_ = self->priv->column;
-								_tmp123_ = token_length_in_chars;
-								_tmp124_ = vala_source_reference_new (_tmp117_, _tmp118_, _tmp119_ + _tmp120_, _tmp121_, _tmp122_ + _tmp123_);
-								_tmp125_ = _tmp124_;
-								vala_report_error (_tmp125_, "invalid UTF-8 character");
-								_vala_source_reference_unref0 (_tmp125_);
+								_tmp115_ = self->priv->current;
+								self->priv->current = _tmp115_ + 1;
+								_tmp116_ = self->priv->_source_file;
+								_tmp117_ = self->priv->line;
+								_tmp118_ = self->priv->column;
+								_tmp119_ = token_length_in_chars;
+								_tmp120_ = self->priv->line;
+								_tmp121_ = self->priv->column;
+								_tmp122_ = token_length_in_chars;
+								_tmp123_ = vala_source_reference_new (_tmp116_, _tmp117_, _tmp118_ + _tmp119_, _tmp120_, _tmp121_ + _tmp122_);
+								_tmp124_ = _tmp123_;
+								vala_report_error (_tmp124_, "invalid UTF-8 character");
+								_vala_source_reference_unref0 (_tmp124_);
 							}
 						}
 					}
 				}
-				_tmp127_ = self->priv->current;
-				_tmp128_ = self->priv->end;
-				if (_tmp127_ >= _tmp128_) {
-					_tmp126_ = TRUE;
+				_tmp126_ = self->priv->current;
+				_tmp127_ = self->priv->end;
+				if (_tmp126_ >= _tmp127_) {
+					_tmp125_ = TRUE;
 				} else {
-					gchar* _tmp129_;
-					gchar _tmp130_;
-					_tmp129_ = self->priv->current;
-					_tmp130_ = _tmp129_[0];
-					_tmp126_ = _tmp130_ == '\n';
+					gchar* _tmp128_;
+					gchar _tmp129_;
+					_tmp128_ = self->priv->current;
+					_tmp129_ = _tmp128_[0];
+					_tmp125_ = _tmp129_ == '\n';
 				}
-				_tmp131_ = _tmp126_;
-				if (_tmp131_) {
-					ValaSourceFile* _tmp132_;
+				_tmp130_ = _tmp125_;
+				if (_tmp130_) {
+					ValaSourceFile* _tmp131_;
+					gint _tmp132_;
 					gint _tmp133_;
 					gint _tmp134_;
 					gint _tmp135_;
 					gint _tmp136_;
 					gint _tmp137_;
-					gint _tmp138_;
+					ValaSourceReference* _tmp138_;
 					ValaSourceReference* _tmp139_;
-					ValaSourceReference* _tmp140_;
-					gint _tmp141_;
+					gint _tmp140_;
+					ValaSourceLocation _tmp141_ = {0};
 					ValaSourceLocation _tmp142_ = {0};
-					ValaSourceLocation _tmp143_ = {0};
-					ValaGenieTokenType _tmp144_ = 0;
-					_tmp132_ = self->priv->_source_file;
-					_tmp133_ = self->priv->line;
-					_tmp134_ = self->priv->column;
-					_tmp135_ = token_length_in_chars;
-					_tmp136_ = self->priv->line;
-					_tmp137_ = self->priv->column;
-					_tmp138_ = token_length_in_chars;
-					_tmp139_ = vala_source_reference_new (_tmp132_, _tmp133_, _tmp134_ + _tmp135_, _tmp136_, _tmp137_ + _tmp138_);
-					_tmp140_ = _tmp139_;
-					vala_report_error (_tmp140_, "syntax error, expected \"");
-					_vala_source_reference_unref0 (_tmp140_);
-					_tmp141_ = self->priv->state_stack_length1;
-					self->priv->state_stack_length1 = _tmp141_ - 1;
-					_tmp144_ = vala_genie_scanner_read_token (self, &_tmp142_, &_tmp143_);
-					_vala_token_begin = _tmp142_;
-					_vala_token_end = _tmp143_;
-					result = _tmp144_;
+					ValaGenieTokenType _tmp143_ = 0;
+					_tmp131_ = self->priv->_source_file;
+					_tmp132_ = self->priv->line;
+					_tmp133_ = self->priv->column;
+					_tmp134_ = token_length_in_chars;
+					_tmp135_ = self->priv->line;
+					_tmp136_ = self->priv->column;
+					_tmp137_ = token_length_in_chars;
+					_tmp138_ = vala_source_reference_new (_tmp131_, _tmp132_, _tmp133_ + _tmp134_, _tmp135_, _tmp136_ + _tmp137_);
+					_tmp139_ = _tmp138_;
+					vala_report_error (_tmp139_, "syntax error, expected \"");
+					_vala_source_reference_unref0 (_tmp139_);
+					_tmp140_ = self->priv->state_stack_length1;
+					self->priv->state_stack_length1 = _tmp140_ - 1;
+					_tmp143_ = vala_genie_scanner_read_token (self, &_tmp141_, &_tmp142_);
+					_vala_token_begin = _tmp141_;
+					_vala_token_end = _tmp142_;
+					result = _tmp143_;
 					if (token_begin) {
 						*token_begin = _vala_token_begin;
 					}
@@ -1105,27 +1102,26 @@ ValaGenieTokenType vala_genie_scanner_read_regex_token (ValaGenieScanner* self,
 			}
 		}
 	}
-	_tmp145_ = token_length_in_chars;
-	if (_tmp145_ < 0) {
-		gint _tmp146_;
+	_tmp144_ = token_length_in_chars;
+	if (_tmp144_ < 0) {
+		gint _tmp145_;
+		gchar* _tmp146_;
 		gchar* _tmp147_;
-		gchar* _tmp148_;
-		_tmp146_ = self->priv->column;
-		_tmp147_ = self->priv->current;
-		_tmp148_ = begin;
-		self->priv->column = _tmp146_ + ((gint) (_tmp147_ - _tmp148_));
+		_tmp145_ = self->priv->column;
+		_tmp146_ = self->priv->current;
+		_tmp147_ = begin;
+		self->priv->column = _tmp145_ + ((gint) (_tmp146_ - _tmp147_));
 	} else {
+		gint _tmp148_;
 		gint _tmp149_;
-		gint _tmp150_;
-		_tmp149_ = self->priv->column;
-		_tmp150_ = token_length_in_chars;
-		self->priv->column = _tmp149_ + _tmp150_;
+		_tmp148_ = self->priv->column;
+		_tmp149_ = token_length_in_chars;
+		self->priv->column = _tmp148_ + _tmp149_;
 	}
-	_tmp151_ = self->priv->current;
-	_tmp152_ = self->priv->line;
-	_tmp153_ = self->priv->column;
-	vala_source_location_init (&_tmp154_, _tmp151_, _tmp152_, _tmp153_ - 1);
-	_vala_token_end = _tmp154_;
+	_tmp150_ = self->priv->current;
+	_tmp151_ = self->priv->line;
+	_tmp152_ = self->priv->column;
+	vala_source_location_init (&_vala_token_end, _tmp150_, _tmp151_, _tmp152_ - 1);
 	result = type;
 	if (token_begin) {
 		*token_begin = _vala_token_begin;
@@ -2569,133 +2565,130 @@ ValaGenieTokenType vala_genie_scanner_read_template_token (ValaGenieScanner* sel
 	gchar* _tmp1_;
 	gint _tmp2_;
 	gint _tmp3_;
-	ValaSourceLocation _tmp4_ = {0};
 	gint token_length_in_chars;
+	gchar* _tmp4_;
 	gchar* _tmp5_;
-	gchar* _tmp6_;
-	gint _tmp133_;
-	gchar* _tmp139_;
+	gint _tmp132_;
+	gchar* _tmp138_;
+	gint _tmp139_;
 	gint _tmp140_;
-	gint _tmp141_;
-	ValaSourceLocation _tmp142_ = {0};
 	g_return_val_if_fail (self != NULL, 0);
 	_tmp0_ = self->priv->current;
 	begin = _tmp0_;
 	_tmp1_ = begin;
 	_tmp2_ = self->priv->line;
 	_tmp3_ = self->priv->column;
-	vala_source_location_init (&_tmp4_, _tmp1_, _tmp2_, _tmp3_);
-	_vala_token_begin = _tmp4_;
+	vala_source_location_init (&_vala_token_begin, _tmp1_, _tmp2_, _tmp3_);
 	token_length_in_chars = -1;
-	_tmp5_ = self->priv->current;
-	_tmp6_ = self->priv->end;
-	if (_tmp5_ >= _tmp6_) {
+	_tmp4_ = self->priv->current;
+	_tmp5_ = self->priv->end;
+	if (_tmp4_ >= _tmp5_) {
 		type = VALA_GENIE_TOKEN_TYPE_EOF;
 	} else {
-		gchar* _tmp7_;
-		gchar _tmp8_;
-		_tmp7_ = self->priv->current;
-		_tmp8_ = _tmp7_[0];
-		switch (_tmp8_) {
+		gchar* _tmp6_;
+		gchar _tmp7_;
+		_tmp6_ = self->priv->current;
+		_tmp7_ = _tmp6_[0];
+		switch (_tmp7_) {
 			case '"':
 			{
-				gchar* _tmp9_;
-				gint _tmp10_;
+				gchar* _tmp8_;
+				gint _tmp9_;
 				type = VALA_GENIE_TOKEN_TYPE_CLOSE_TEMPLATE;
-				_tmp9_ = self->priv->current;
-				self->priv->current = _tmp9_ + 1;
-				_tmp10_ = self->priv->state_stack_length1;
-				self->priv->state_stack_length1 = _tmp10_ - 1;
+				_tmp8_ = self->priv->current;
+				self->priv->current = _tmp8_ + 1;
+				_tmp9_ = self->priv->state_stack_length1;
+				self->priv->state_stack_length1 = _tmp9_ - 1;
 				break;
 			}
 			case '$':
 			{
+				gchar* _tmp10_;
 				gchar* _tmp11_;
-				gchar* _tmp12_;
-				gboolean _tmp13_ = FALSE;
-				gchar* _tmp14_;
-				gchar _tmp15_;
-				gboolean _tmp16_ = FALSE;
-				gboolean _tmp19_;
-				_tmp11_ = _vala_token_begin.pos;
-				_vala_token_begin.pos = _tmp11_ + 1;
-				_tmp12_ = self->priv->current;
-				self->priv->current = _tmp12_ + 1;
-				_tmp14_ = self->priv->current;
-				_tmp15_ = _tmp14_[0];
-				_tmp16_ = g_ascii_isalpha (_tmp15_);
-				if (_tmp16_) {
-					_tmp13_ = TRUE;
+				gboolean _tmp12_ = FALSE;
+				gchar* _tmp13_;
+				gchar _tmp14_;
+				gboolean _tmp15_ = FALSE;
+				gboolean _tmp18_;
+				_tmp10_ = _vala_token_begin.pos;
+				_vala_token_begin.pos = _tmp10_ + 1;
+				_tmp11_ = self->priv->current;
+				self->priv->current = _tmp11_ + 1;
+				_tmp13_ = self->priv->current;
+				_tmp14_ = _tmp13_[0];
+				_tmp15_ = g_ascii_isalpha (_tmp14_);
+				if (_tmp15_) {
+					_tmp12_ = TRUE;
 				} else {
-					gchar* _tmp17_;
-					gchar _tmp18_;
-					_tmp17_ = self->priv->current;
-					_tmp18_ = _tmp17_[0];
-					_tmp13_ = _tmp18_ == '_';
+					gchar* _tmp16_;
+					gchar _tmp17_;
+					_tmp16_ = self->priv->current;
+					_tmp17_ = _tmp16_[0];
+					_tmp12_ = _tmp17_ == '_';
 				}
-				_tmp19_ = _tmp13_;
-				if (_tmp19_) {
+				_tmp18_ = _tmp12_;
+				if (_tmp18_) {
 					gint len;
-					ValaGenieScannerState* _tmp29_;
-					gint _tmp29__length1;
+					ValaGenieScannerState* _tmp28_;
+					gint _tmp28__length1;
 					len = 0;
 					while (TRUE) {
-						gboolean _tmp20_ = FALSE;
+						gboolean _tmp19_ = FALSE;
+						gchar* _tmp20_;
 						gchar* _tmp21_;
-						gchar* _tmp22_;
-						gboolean _tmp26_;
-						gchar* _tmp27_;
-						gint _tmp28_;
-						_tmp21_ = self->priv->current;
-						_tmp22_ = self->priv->end;
-						if (_tmp21_ < _tmp22_) {
-							gchar* _tmp23_;
-							gchar _tmp24_;
-							gboolean _tmp25_ = FALSE;
-							_tmp23_ = self->priv->current;
-							_tmp24_ = _tmp23_[0];
-							_tmp25_ = vala_genie_scanner_is_ident_char (self, _tmp24_);
-							_tmp20_ = _tmp25_;
+						gboolean _tmp25_;
+						gchar* _tmp26_;
+						gint _tmp27_;
+						_tmp20_ = self->priv->current;
+						_tmp21_ = self->priv->end;
+						if (_tmp20_ < _tmp21_) {
+							gchar* _tmp22_;
+							gchar _tmp23_;
+							gboolean _tmp24_ = FALSE;
+							_tmp22_ = self->priv->current;
+							_tmp23_ = _tmp22_[0];
+							_tmp24_ = vala_genie_scanner_is_ident_char (self, _tmp23_);
+							_tmp19_ = _tmp24_;
 						} else {
-							_tmp20_ = FALSE;
+							_tmp19_ = FALSE;
 						}
-						_tmp26_ = _tmp20_;
-						if (!_tmp26_) {
+						_tmp25_ = _tmp19_;
+						if (!_tmp25_) {
 							break;
 						}
-						_tmp27_ = self->priv->current;
-						self->priv->current = _tmp27_ + 1;
-						_tmp28_ = len;
-						len = _tmp28_ + 1;
+						_tmp26_ = self->priv->current;
+						self->priv->current = _tmp26_ + 1;
+						_tmp27_ = len;
+						len = _tmp27_ + 1;
 					}
 					type = VALA_GENIE_TOKEN_TYPE_IDENTIFIER;
-					_tmp29_ = self->priv->state_stack;
-					_tmp29__length1 = self->priv->state_stack_length1;
+					_tmp28_ = self->priv->state_stack;
+					_tmp28__length1 = self->priv->state_stack_length1;
 					_vala_array_add2 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_GENIE_SCANNER_STATE_TEMPLATE_PART);
 				} else {
-					gchar* _tmp30_;
-					gchar _tmp31_;
-					_tmp30_ = self->priv->current;
-					_tmp31_ = _tmp30_[0];
-					if (_tmp31_ == '(') {
-						gchar* _tmp32_;
-						gint _tmp33_;
-						ValaGenieScannerState* _tmp34_;
-						gint _tmp34__length1;
+					gchar* _tmp29_;
+					gchar _tmp30_;
+					_tmp29_ = self->priv->current;
+					_tmp30_ = _tmp29_[0];
+					if (_tmp30_ == '(') {
+						gchar* _tmp31_;
+						gint _tmp32_;
+						ValaGenieScannerState* _tmp33_;
+						gint _tmp33__length1;
+						ValaSourceLocation _tmp34_ = {0};
 						ValaSourceLocation _tmp35_ = {0};
-						ValaSourceLocation _tmp36_ = {0};
-						ValaGenieTokenType _tmp37_ = 0;
-						_tmp32_ = self->priv->current;
-						self->priv->current = _tmp32_ + 1;
-						_tmp33_ = self->priv->column;
-						self->priv->column = _tmp33_ + 2;
-						_tmp34_ = self->priv->state_stack;
-						_tmp34__length1 = self->priv->state_stack_length1;
+						ValaGenieTokenType _tmp36_ = 0;
+						_tmp31_ = self->priv->current;
+						self->priv->current = _tmp31_ + 1;
+						_tmp32_ = self->priv->column;
+						self->priv->column = _tmp32_ + 2;
+						_tmp33_ = self->priv->state_stack;
+						_tmp33__length1 = self->priv->state_stack_length1;
 						_vala_array_add3 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_GENIE_SCANNER_STATE_PARENS);
-						_tmp37_ = vala_genie_scanner_read_token (self, &_tmp35_, &_tmp36_);
-						_vala_token_begin = _tmp35_;
-						_vala_token_end = _tmp36_;
-						result = _tmp37_;
+						_tmp36_ = vala_genie_scanner_read_token (self, &_tmp34_, &_tmp35_);
+						_vala_token_begin = _tmp34_;
+						_vala_token_end = _tmp35_;
+						result = _tmp36_;
 						if (token_begin) {
 							*token_begin = _vala_token_begin;
 						}
@@ -2704,44 +2697,44 @@ ValaGenieTokenType vala_genie_scanner_read_template_token (ValaGenieScanner* sel
 						}
 						return result;
 					} else {
-						gchar* _tmp38_;
-						gchar _tmp39_;
-						_tmp38_ = self->priv->current;
-						_tmp39_ = _tmp38_[0];
-						if (_tmp39_ == '$') {
-							gchar* _tmp40_;
-							ValaGenieScannerState* _tmp41_;
-							gint _tmp41__length1;
+						gchar* _tmp37_;
+						gchar _tmp38_;
+						_tmp37_ = self->priv->current;
+						_tmp38_ = _tmp37_[0];
+						if (_tmp38_ == '$') {
+							gchar* _tmp39_;
+							ValaGenieScannerState* _tmp40_;
+							gint _tmp40__length1;
 							type = VALA_GENIE_TOKEN_TYPE_TEMPLATE_STRING_LITERAL;
-							_tmp40_ = self->priv->current;
-							self->priv->current = _tmp40_ + 1;
-							_tmp41_ = self->priv->state_stack;
-							_tmp41__length1 = self->priv->state_stack_length1;
+							_tmp39_ = self->priv->current;
+							self->priv->current = _tmp39_ + 1;
+							_tmp40_ = self->priv->state_stack;
+							_tmp40__length1 = self->priv->state_stack_length1;
 							_vala_array_add4 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_GENIE_SCANNER_STATE_TEMPLATE_PART);
 						} else {
-							ValaSourceFile* _tmp42_;
+							ValaSourceFile* _tmp41_;
+							gint _tmp42_;
 							gint _tmp43_;
 							gint _tmp44_;
 							gint _tmp45_;
-							gint _tmp46_;
+							ValaSourceReference* _tmp46_;
 							ValaSourceReference* _tmp47_;
-							ValaSourceReference* _tmp48_;
+							ValaSourceLocation _tmp48_ = {0};
 							ValaSourceLocation _tmp49_ = {0};
-							ValaSourceLocation _tmp50_ = {0};
-							ValaGenieTokenType _tmp51_ = 0;
-							_tmp42_ = self->priv->_source_file;
-							_tmp43_ = self->priv->line;
-							_tmp44_ = self->priv->column;
-							_tmp45_ = self->priv->line;
-							_tmp46_ = self->priv->column;
-							_tmp47_ = vala_source_reference_new (_tmp42_, _tmp43_, _tmp44_ + 1, _tmp45_, _tmp46_ + 1);
-							_tmp48_ = _tmp47_;
-							vala_report_error (_tmp48_, "unexpected character");
-							_vala_source_reference_unref0 (_tmp48_);
-							_tmp51_ = vala_genie_scanner_read_template_token (self, &_tmp49_, &_tmp50_);
-							_vala_token_begin = _tmp49_;
-							_vala_token_end = _tmp50_;
-							result = _tmp51_;
+							ValaGenieTokenType _tmp50_ = 0;
+							_tmp41_ = self->priv->_source_file;
+							_tmp42_ = self->priv->line;
+							_tmp43_ = self->priv->column;
+							_tmp44_ = self->priv->line;
+							_tmp45_ = self->priv->column;
+							_tmp46_ = vala_source_reference_new (_tmp41_, _tmp42_, _tmp43_ + 1, _tmp44_, _tmp45_ + 1);
+							_tmp47_ = _tmp46_;
+							vala_report_error (_tmp47_, "unexpected character");
+							_vala_source_reference_unref0 (_tmp47_);
+							_tmp50_ = vala_genie_scanner_read_template_token (self, &_tmp48_, &_tmp49_);
+							_vala_token_begin = _tmp48_;
+							_vala_token_end = _tmp49_;
+							result = _tmp50_;
 							if (token_begin) {
 								*token_begin = _vala_token_begin;
 							}
@@ -2756,69 +2749,69 @@ ValaGenieTokenType vala_genie_scanner_read_template_token (ValaGenieScanner* sel
 			}
 			default:
 			{
-				gboolean _tmp113_ = FALSE;
+				gboolean _tmp112_ = FALSE;
+				gchar* _tmp113_;
 				gchar* _tmp114_;
-				gchar* _tmp115_;
-				gboolean _tmp118_;
-				ValaGenieScannerState* _tmp132_;
-				gint _tmp132__length1;
+				gboolean _tmp117_;
+				ValaGenieScannerState* _tmp131_;
+				gint _tmp131__length1;
 				type = VALA_GENIE_TOKEN_TYPE_TEMPLATE_STRING_LITERAL;
 				token_length_in_chars = 0;
 				while (TRUE) {
+					gboolean _tmp51_ = FALSE;
 					gboolean _tmp52_ = FALSE;
-					gboolean _tmp53_ = FALSE;
+					gchar* _tmp53_;
 					gchar* _tmp54_;
-					gchar* _tmp55_;
-					gboolean _tmp58_;
-					gboolean _tmp61_;
-					gchar* _tmp62_;
-					gchar _tmp63_;
-					_tmp54_ = self->priv->current;
-					_tmp55_ = self->priv->end;
-					if (_tmp54_ < _tmp55_) {
-						gchar* _tmp56_;
-						gchar _tmp57_;
-						_tmp56_ = self->priv->current;
-						_tmp57_ = _tmp56_[0];
-						_tmp53_ = _tmp57_ != '"';
+					gboolean _tmp57_;
+					gboolean _tmp60_;
+					gchar* _tmp61_;
+					gchar _tmp62_;
+					_tmp53_ = self->priv->current;
+					_tmp54_ = self->priv->end;
+					if (_tmp53_ < _tmp54_) {
+						gchar* _tmp55_;
+						gchar _tmp56_;
+						_tmp55_ = self->priv->current;
+						_tmp56_ = _tmp55_[0];
+						_tmp52_ = _tmp56_ != '"';
 					} else {
-						_tmp53_ = FALSE;
+						_tmp52_ = FALSE;
 					}
-					_tmp58_ = _tmp53_;
-					if (_tmp58_) {
-						gchar* _tmp59_;
-						gchar _tmp60_;
-						_tmp59_ = self->priv->current;
-						_tmp60_ = _tmp59_[0];
-						_tmp52_ = _tmp60_ != '$';
+					_tmp57_ = _tmp52_;
+					if (_tmp57_) {
+						gchar* _tmp58_;
+						gchar _tmp59_;
+						_tmp58_ = self->priv->current;
+						_tmp59_ = _tmp58_[0];
+						_tmp51_ = _tmp59_ != '$';
 					} else {
-						_tmp52_ = FALSE;
+						_tmp51_ = FALSE;
 					}
-					_tmp61_ = _tmp52_;
-					if (!_tmp61_) {
+					_tmp60_ = _tmp51_;
+					if (!_tmp60_) {
 						break;
 					}
-					_tmp62_ = self->priv->current;
-					_tmp63_ = _tmp62_[0];
-					if (_tmp63_ == '\\') {
-						gchar* _tmp64_;
-						gint _tmp65_;
+					_tmp61_ = self->priv->current;
+					_tmp62_ = _tmp61_[0];
+					if (_tmp62_ == '\\') {
+						gchar* _tmp63_;
+						gint _tmp64_;
+						gchar* _tmp65_;
 						gchar* _tmp66_;
 						gchar* _tmp67_;
-						gchar* _tmp68_;
-						gchar _tmp69_;
-						_tmp64_ = self->priv->current;
-						self->priv->current = _tmp64_ + 1;
-						_tmp65_ = token_length_in_chars;
-						token_length_in_chars = _tmp65_ + 1;
-						_tmp66_ = self->priv->current;
-						_tmp67_ = self->priv->end;
-						if (_tmp66_ >= _tmp67_) {
+						gchar _tmp68_;
+						_tmp63_ = self->priv->current;
+						self->priv->current = _tmp63_ + 1;
+						_tmp64_ = token_length_in_chars;
+						token_length_in_chars = _tmp64_ + 1;
+						_tmp65_ = self->priv->current;
+						_tmp66_ = self->priv->end;
+						if (_tmp65_ >= _tmp66_) {
 							break;
 						}
-						_tmp68_ = self->priv->current;
-						_tmp69_ = _tmp68_[0];
-						switch (_tmp69_) {
+						_tmp67_ = self->priv->current;
+						_tmp68_ = _tmp67_[0];
+						switch (_tmp68_) {
 							case '\'':
 							case '"':
 							case '\\':
@@ -2829,180 +2822,180 @@ ValaGenieTokenType vala_genie_scanner_read_template_token (ValaGenieScanner* sel
 							case 'r':
 							case 't':
 							{
-								gchar* _tmp70_;
-								gint _tmp71_;
-								_tmp70_ = self->priv->current;
-								self->priv->current = _tmp70_ + 1;
-								_tmp71_ = token_length_in_chars;
-								token_length_in_chars = _tmp71_ + 1;
+								gchar* _tmp69_;
+								gint _tmp70_;
+								_tmp69_ = self->priv->current;
+								self->priv->current = _tmp69_ + 1;
+								_tmp70_ = token_length_in_chars;
+								token_length_in_chars = _tmp70_ + 1;
 								break;
 							}
 							case 'x':
 							{
-								gchar* _tmp72_;
-								gint _tmp73_;
-								_tmp72_ = self->priv->current;
-								self->priv->current = _tmp72_ + 1;
-								_tmp73_ = token_length_in_chars;
-								token_length_in_chars = _tmp73_ + 1;
+								gchar* _tmp71_;
+								gint _tmp72_;
+								_tmp71_ = self->priv->current;
+								self->priv->current = _tmp71_ + 1;
+								_tmp72_ = token_length_in_chars;
+								token_length_in_chars = _tmp72_ + 1;
 								while (TRUE) {
-									gboolean _tmp74_ = FALSE;
+									gboolean _tmp73_ = FALSE;
+									gchar* _tmp74_;
 									gchar* _tmp75_;
-									gchar* _tmp76_;
-									gboolean _tmp80_;
-									gchar* _tmp81_;
-									gint _tmp82_;
-									_tmp75_ = self->priv->current;
-									_tmp76_ = self->priv->end;
-									if (_tmp75_ < _tmp76_) {
-										gchar* _tmp77_;
-										gchar _tmp78_;
-										gboolean _tmp79_ = FALSE;
-										_tmp77_ = self->priv->current;
-										_tmp78_ = _tmp77_[0];
-										_tmp79_ = g_ascii_isxdigit (_tmp78_);
-										_tmp74_ = _tmp79_;
+									gboolean _tmp79_;
+									gchar* _tmp80_;
+									gint _tmp81_;
+									_tmp74_ = self->priv->current;
+									_tmp75_ = self->priv->end;
+									if (_tmp74_ < _tmp75_) {
+										gchar* _tmp76_;
+										gchar _tmp77_;
+										gboolean _tmp78_ = FALSE;
+										_tmp76_ = self->priv->current;
+										_tmp77_ = _tmp76_[0];
+										_tmp78_ = g_ascii_isxdigit (_tmp77_);
+										_tmp73_ = _tmp78_;
 									} else {
-										_tmp74_ = FALSE;
+										_tmp73_ = FALSE;
 									}
-									_tmp80_ = _tmp74_;
-									if (!_tmp80_) {
+									_tmp79_ = _tmp73_;
+									if (!_tmp79_) {
 										break;
 									}
-									_tmp81_ = self->priv->current;
-									self->priv->current = _tmp81_ + 1;
-									_tmp82_ = token_length_in_chars;
-									token_length_in_chars = _tmp82_ + 1;
+									_tmp80_ = self->priv->current;
+									self->priv->current = _tmp80_ + 1;
+									_tmp81_ = token_length_in_chars;
+									token_length_in_chars = _tmp81_ + 1;
 								}
 								break;
 							}
 							default:
 							{
-								ValaSourceFile* _tmp83_;
+								ValaSourceFile* _tmp82_;
+								gint _tmp83_;
 								gint _tmp84_;
 								gint _tmp85_;
 								gint _tmp86_;
 								gint _tmp87_;
 								gint _tmp88_;
-								gint _tmp89_;
+								ValaSourceReference* _tmp89_;
 								ValaSourceReference* _tmp90_;
-								ValaSourceReference* _tmp91_;
-								_tmp83_ = self->priv->_source_file;
-								_tmp84_ = self->priv->line;
-								_tmp85_ = self->priv->column;
-								_tmp86_ = token_length_in_chars;
-								_tmp87_ = self->priv->line;
-								_tmp88_ = self->priv->column;
-								_tmp89_ = token_length_in_chars;
-								_tmp90_ = vala_source_reference_new (_tmp83_, _tmp84_, _tmp85_ + _tmp86_, _tmp87_, _tmp88_ + _tmp89_);
-								_tmp91_ = _tmp90_;
-								vala_report_error (_tmp91_, "invalid escape sequence");
-								_vala_source_reference_unref0 (_tmp91_);
+								_tmp82_ = self->priv->_source_file;
+								_tmp83_ = self->priv->line;
+								_tmp84_ = self->priv->column;
+								_tmp85_ = token_length_in_chars;
+								_tmp86_ = self->priv->line;
+								_tmp87_ = self->priv->column;
+								_tmp88_ = token_length_in_chars;
+								_tmp89_ = vala_source_reference_new (_tmp82_, _tmp83_, _tmp84_ + _tmp85_, _tmp86_, _tmp87_ + _tmp88_);
+								_tmp90_ = _tmp89_;
+								vala_report_error (_tmp90_, "invalid escape sequence");
+								_vala_source_reference_unref0 (_tmp90_);
 								break;
 							}
 						}
 					} else {
-						gchar* _tmp92_;
-						gchar _tmp93_;
-						_tmp92_ = self->priv->current;
-						_tmp93_ = _tmp92_[0];
-						if (_tmp93_ == '\n') {
+						gchar* _tmp91_;
+						gchar _tmp92_;
+						_tmp91_ = self->priv->current;
+						_tmp92_ = _tmp91_[0];
+						if (_tmp92_ == '\n') {
 							break;
 						} else {
+							gchar* _tmp93_;
 							gchar* _tmp94_;
 							gchar* _tmp95_;
-							gchar* _tmp96_;
-							gunichar _tmp97_ = 0U;
+							gunichar _tmp96_ = 0U;
 							gunichar u;
-							gunichar _tmp98_;
-							_tmp94_ = self->priv->current;
-							_tmp95_ = self->priv->end;
-							_tmp96_ = self->priv->current;
-							_tmp97_ = g_utf8_get_char_validated ((const gchar*) _tmp94_, (gssize) ((glong) (_tmp95_ - _tmp96_)));
-							u = _tmp97_;
-							_tmp98_ = u;
-							if (_tmp98_ != ((gunichar) (-1))) {
-								gchar* _tmp99_;
-								gunichar _tmp100_;
-								gint _tmp101_ = 0;
-								gint _tmp102_;
-								_tmp99_ = self->priv->current;
-								_tmp100_ = u;
-								_tmp101_ = g_unichar_to_utf8 (_tmp100_, NULL);
-								self->priv->current = _tmp99_ + _tmp101_;
-								_tmp102_ = token_length_in_chars;
-								token_length_in_chars = _tmp102_ + 1;
+							gunichar _tmp97_;
+							_tmp93_ = self->priv->current;
+							_tmp94_ = self->priv->end;
+							_tmp95_ = self->priv->current;
+							_tmp96_ = g_utf8_get_char_validated ((const gchar*) _tmp93_, (gssize) ((glong) (_tmp94_ - _tmp95_)));
+							u = _tmp96_;
+							_tmp97_ = u;
+							if (_tmp97_ != ((gunichar) (-1))) {
+								gchar* _tmp98_;
+								gunichar _tmp99_;
+								gint _tmp100_ = 0;
+								gint _tmp101_;
+								_tmp98_ = self->priv->current;
+								_tmp99_ = u;
+								_tmp100_ = g_unichar_to_utf8 (_tmp99_, NULL);
+								self->priv->current = _tmp98_ + _tmp100_;
+								_tmp101_ = token_length_in_chars;
+								token_length_in_chars = _tmp101_ + 1;
 							} else {
-								gchar* _tmp103_;
-								ValaSourceFile* _tmp104_;
+								gchar* _tmp102_;
+								ValaSourceFile* _tmp103_;
+								gint _tmp104_;
 								gint _tmp105_;
 								gint _tmp106_;
 								gint _tmp107_;
 								gint _tmp108_;
 								gint _tmp109_;
-								gint _tmp110_;
+								ValaSourceReference* _tmp110_;
 								ValaSourceReference* _tmp111_;
-								ValaSourceReference* _tmp112_;
-								_tmp103_ = self->priv->current;
-								self->priv->current = _tmp103_ + 1;
-								_tmp104_ = self->priv->_source_file;
-								_tmp105_ = self->priv->line;
-								_tmp106_ = self->priv->column;
-								_tmp107_ = token_length_in_chars;
-								_tmp108_ = self->priv->line;
-								_tmp109_ = self->priv->column;
-								_tmp110_ = token_length_in_chars;
-								_tmp111_ = vala_source_reference_new (_tmp104_, _tmp105_, _tmp106_ + _tmp107_, _tmp108_, _tmp109_ + _tmp110_);
-								_tmp112_ = _tmp111_;
-								vala_report_error (_tmp112_, "invalid UTF-8 character");
-								_vala_source_reference_unref0 (_tmp112_);
+								_tmp102_ = self->priv->current;
+								self->priv->current = _tmp102_ + 1;
+								_tmp103_ = self->priv->_source_file;
+								_tmp104_ = self->priv->line;
+								_tmp105_ = self->priv->column;
+								_tmp106_ = token_length_in_chars;
+								_tmp107_ = self->priv->line;
+								_tmp108_ = self->priv->column;
+								_tmp109_ = token_length_in_chars;
+								_tmp110_ = vala_source_reference_new (_tmp103_, _tmp104_, _tmp105_ + _tmp106_, _tmp107_, _tmp108_ + _tmp109_);
+								_tmp111_ = _tmp110_;
+								vala_report_error (_tmp111_, "invalid UTF-8 character");
+								_vala_source_reference_unref0 (_tmp111_);
 							}
 						}
 					}
 				}
-				_tmp114_ = self->priv->current;
-				_tmp115_ = self->priv->end;
-				if (_tmp114_ >= _tmp115_) {
-					_tmp113_ = TRUE;
+				_tmp113_ = self->priv->current;
+				_tmp114_ = self->priv->end;
+				if (_tmp113_ >= _tmp114_) {
+					_tmp112_ = TRUE;
 				} else {
-					gchar* _tmp116_;
-					gchar _tmp117_;
-					_tmp116_ = self->priv->current;
-					_tmp117_ = _tmp116_[0];
-					_tmp113_ = _tmp117_ == '\n';
+					gchar* _tmp115_;
+					gchar _tmp116_;
+					_tmp115_ = self->priv->current;
+					_tmp116_ = _tmp115_[0];
+					_tmp112_ = _tmp116_ == '\n';
 				}
-				_tmp118_ = _tmp113_;
-				if (_tmp118_) {
-					ValaSourceFile* _tmp119_;
+				_tmp117_ = _tmp112_;
+				if (_tmp117_) {
+					ValaSourceFile* _tmp118_;
+					gint _tmp119_;
 					gint _tmp120_;
 					gint _tmp121_;
 					gint _tmp122_;
 					gint _tmp123_;
 					gint _tmp124_;
-					gint _tmp125_;
+					ValaSourceReference* _tmp125_;
 					ValaSourceReference* _tmp126_;
-					ValaSourceReference* _tmp127_;
-					gint _tmp128_;
+					gint _tmp127_;
+					ValaSourceLocation _tmp128_ = {0};
 					ValaSourceLocation _tmp129_ = {0};
-					ValaSourceLocation _tmp130_ = {0};
-					ValaGenieTokenType _tmp131_ = 0;
-					_tmp119_ = self->priv->_source_file;
-					_tmp120_ = self->priv->line;
-					_tmp121_ = self->priv->column;
-					_tmp122_ = token_length_in_chars;
-					_tmp123_ = self->priv->line;
-					_tmp124_ = self->priv->column;
-					_tmp125_ = token_length_in_chars;
-					_tmp126_ = vala_source_reference_new (_tmp119_, _tmp120_, _tmp121_ + _tmp122_, _tmp123_, _tmp124_ + _tmp125_);
-					_tmp127_ = _tmp126_;
-					vala_report_error (_tmp127_, "syntax error, expected \"");
-					_vala_source_reference_unref0 (_tmp127_);
-					_tmp128_ = self->priv->state_stack_length1;
-					self->priv->state_stack_length1 = _tmp128_ - 1;
-					_tmp131_ = vala_genie_scanner_read_token (self, &_tmp129_, &_tmp130_);
-					_vala_token_begin = _tmp129_;
-					_vala_token_end = _tmp130_;
-					result = _tmp131_;
+					ValaGenieTokenType _tmp130_ = 0;
+					_tmp118_ = self->priv->_source_file;
+					_tmp119_ = self->priv->line;
+					_tmp120_ = self->priv->column;
+					_tmp121_ = token_length_in_chars;
+					_tmp122_ = self->priv->line;
+					_tmp123_ = self->priv->column;
+					_tmp124_ = token_length_in_chars;
+					_tmp125_ = vala_source_reference_new (_tmp118_, _tmp119_, _tmp120_ + _tmp121_, _tmp122_, _tmp123_ + _tmp124_);
+					_tmp126_ = _tmp125_;
+					vala_report_error (_tmp126_, "syntax error, expected \"");
+					_vala_source_reference_unref0 (_tmp126_);
+					_tmp127_ = self->priv->state_stack_length1;
+					self->priv->state_stack_length1 = _tmp127_ - 1;
+					_tmp130_ = vala_genie_scanner_read_token (self, &_tmp128_, &_tmp129_);
+					_vala_token_begin = _tmp128_;
+					_vala_token_end = _tmp129_;
+					result = _tmp130_;
 					if (token_begin) {
 						*token_begin = _vala_token_begin;
 					}
@@ -3011,34 +3004,33 @@ ValaGenieTokenType vala_genie_scanner_read_template_token (ValaGenieScanner* sel
 					}
 					return result;
 				}
-				_tmp132_ = self->priv->state_stack;
-				_tmp132__length1 = self->priv->state_stack_length1;
+				_tmp131_ = self->priv->state_stack;
+				_tmp131__length1 = self->priv->state_stack_length1;
 				_vala_array_add5 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_GENIE_SCANNER_STATE_TEMPLATE_PART);
 				break;
 			}
 		}
 	}
-	_tmp133_ = token_length_in_chars;
-	if (_tmp133_ < 0) {
-		gint _tmp134_;
+	_tmp132_ = token_length_in_chars;
+	if (_tmp132_ < 0) {
+		gint _tmp133_;
+		gchar* _tmp134_;
 		gchar* _tmp135_;
-		gchar* _tmp136_;
-		_tmp134_ = self->priv->column;
-		_tmp135_ = self->priv->current;
-		_tmp136_ = begin;
-		self->priv->column = _tmp134_ + ((gint) (_tmp135_ - _tmp136_));
+		_tmp133_ = self->priv->column;
+		_tmp134_ = self->priv->current;
+		_tmp135_ = begin;
+		self->priv->column = _tmp133_ + ((gint) (_tmp134_ - _tmp135_));
 	} else {
+		gint _tmp136_;
 		gint _tmp137_;
-		gint _tmp138_;
-		_tmp137_ = self->priv->column;
-		_tmp138_ = token_length_in_chars;
-		self->priv->column = _tmp137_ + _tmp138_;
+		_tmp136_ = self->priv->column;
+		_tmp137_ = token_length_in_chars;
+		self->priv->column = _tmp136_ + _tmp137_;
 	}
-	_tmp139_ = self->priv->current;
-	_tmp140_ = self->priv->line;
-	_tmp141_ = self->priv->column;
-	vala_source_location_init (&_tmp142_, _tmp139_, _tmp140_, _tmp141_ - 1);
-	_vala_token_end = _tmp142_;
+	_tmp138_ = self->priv->current;
+	_tmp139_ = self->priv->line;
+	_tmp140_ = self->priv->column;
+	vala_source_location_init (&_vala_token_end, _tmp138_, _tmp139_, _tmp140_ - 1);
 	result = type;
 	if (token_begin) {
 		*token_begin = _vala_token_begin;
@@ -3100,33 +3092,31 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 	ValaSourceLocation _vala_token_end = {0};
 	ValaGenieTokenType result = 0;
 	gboolean _tmp0_ = FALSE;
-	gint _tmp18_;
-	gboolean _tmp29_ = FALSE;
-	gint _tmp30_;
-	gboolean _tmp32_;
-	gboolean _tmp59_ = FALSE;
-	gboolean _tmp60_ = FALSE;
-	gboolean _tmp61_ = FALSE;
-	gboolean _tmp62_ = FALSE;
+	gint _tmp16_;
+	gboolean _tmp25_ = FALSE;
+	gint _tmp26_;
+	gboolean _tmp28_;
+	gboolean _tmp55_ = FALSE;
+	gboolean _tmp56_ = FALSE;
+	gboolean _tmp57_ = FALSE;
+	gboolean _tmp58_ = FALSE;
+	gboolean _tmp60_;
+	gboolean _tmp62_;
 	gboolean _tmp64_;
-	gboolean _tmp66_;
-	gboolean _tmp68_;
 	ValaGenieTokenType type = 0;
-	gchar* _tmp100_;
+	gchar* _tmp91_;
 	gchar* begin;
-	gchar* _tmp101_;
-	gint _tmp102_;
-	gint _tmp103_;
-	ValaSourceLocation _tmp104_ = {0};
+	gchar* _tmp92_;
+	gint _tmp93_;
+	gint _tmp94_;
 	gint token_length_in_chars;
-	gchar* _tmp105_;
-	gchar* _tmp106_;
-	gint _tmp612_;
-	gchar* _tmp618_;
-	gint _tmp619_;
-	gint _tmp620_;
-	ValaSourceLocation _tmp621_ = {0};
-	ValaGenieTokenType _tmp622_;
+	gchar* _tmp95_;
+	gchar* _tmp96_;
+	gint _tmp602_;
+	gchar* _tmp608_;
+	gint _tmp609_;
+	gint _tmp610_;
+	ValaGenieTokenType _tmp611_;
 	g_return_val_if_fail (self != NULL, 0);
 	_tmp0_ = vala_genie_scanner_in_template (self);
 	if (_tmp0_) {
@@ -3152,23 +3142,19 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 			gchar* _tmp6_;
 			gint _tmp7_;
 			gint _tmp8_;
-			ValaSourceLocation _tmp9_ = {0};
-			gchar* _tmp10_;
+			gchar* _tmp9_;
+			gint _tmp10_;
 			gint _tmp11_;
-			gint _tmp12_;
-			ValaSourceLocation _tmp13_ = {0};
 			_tmp5_ = self->priv->state_stack_length1;
 			self->priv->state_stack_length1 = _tmp5_ - 1;
 			_tmp6_ = self->priv->current;
 			_tmp7_ = self->priv->line;
 			_tmp8_ = self->priv->column;
-			vala_source_location_init (&_tmp9_, _tmp6_, _tmp7_, _tmp8_);
-			_vala_token_begin = _tmp9_;
-			_tmp10_ = self->priv->current;
-			_tmp11_ = self->priv->line;
-			_tmp12_ = self->priv->column;
-			vala_source_location_init (&_tmp13_, _tmp10_, _tmp11_, _tmp12_ - 1);
-			_vala_token_end = _tmp13_;
+			vala_source_location_init (&_vala_token_begin, _tmp6_, _tmp7_, _tmp8_);
+			_tmp9_ = self->priv->current;
+			_tmp10_ = self->priv->line;
+			_tmp11_ = self->priv->column;
+			vala_source_location_init (&_vala_token_end, _tmp9_, _tmp10_, _tmp11_ - 1);
 			result = VALA_GENIE_TOKEN_TYPE_COMMA;
 			if (token_begin) {
 				*token_begin = _vala_token_begin;
@@ -3178,16 +3164,16 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 			}
 			return result;
 		} else {
-			gboolean _tmp14_ = FALSE;
-			_tmp14_ = vala_genie_scanner_in_regex_literal (self);
-			if (_tmp14_) {
-				ValaSourceLocation _tmp15_ = {0};
-				ValaSourceLocation _tmp16_ = {0};
-				ValaGenieTokenType _tmp17_ = 0;
-				_tmp17_ = vala_genie_scanner_read_regex_token (self, &_tmp15_, &_tmp16_);
-				_vala_token_begin = _tmp15_;
-				_vala_token_end = _tmp16_;
-				result = _tmp17_;
+			gboolean _tmp12_ = FALSE;
+			_tmp12_ = vala_genie_scanner_in_regex_literal (self);
+			if (_tmp12_) {
+				ValaSourceLocation _tmp13_ = {0};
+				ValaSourceLocation _tmp14_ = {0};
+				ValaGenieTokenType _tmp15_ = 0;
+				_tmp15_ = vala_genie_scanner_read_regex_token (self, &_tmp13_, &_tmp14_);
+				_vala_token_begin = _tmp13_;
+				_vala_token_end = _tmp14_;
+				result = _tmp15_;
 				if (token_begin) {
 					*token_begin = _vala_token_begin;
 				}
@@ -3198,32 +3184,28 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 			}
 		}
 	}
-	_tmp18_ = self->priv->pending_dedents;
-	if (_tmp18_ > 0) {
-		gint _tmp19_;
+	_tmp16_ = self->priv->pending_dedents;
+	if (_tmp16_ > 0) {
+		gint _tmp17_;
+		gint _tmp18_;
+		gchar* _tmp19_;
 		gint _tmp20_;
-		gchar* _tmp21_;
-		gint _tmp22_;
+		gint _tmp21_;
+		gchar* _tmp22_;
 		gint _tmp23_;
-		ValaSourceLocation _tmp24_ = {0};
-		gchar* _tmp25_;
-		gint _tmp26_;
-		gint _tmp27_;
-		ValaSourceLocation _tmp28_ = {0};
-		_tmp19_ = self->priv->pending_dedents;
-		self->priv->pending_dedents = _tmp19_ - 1;
-		_tmp20_ = self->priv->indent_level;
-		self->priv->indent_level = _tmp20_ - 1;
-		_tmp21_ = self->priv->current;
-		_tmp22_ = self->priv->line;
-		_tmp23_ = self->priv->column;
-		vala_source_location_init (&_tmp24_, _tmp21_, _tmp22_, _tmp23_);
-		_vala_token_begin = _tmp24_;
-		_tmp25_ = self->priv->current;
-		_tmp26_ = self->priv->line;
-		_tmp27_ = self->priv->column;
-		vala_source_location_init (&_tmp28_, _tmp25_, _tmp26_, _tmp27_);
-		_vala_token_end = _tmp28_;
+		gint _tmp24_;
+		_tmp17_ = self->priv->pending_dedents;
+		self->priv->pending_dedents = _tmp17_ - 1;
+		_tmp18_ = self->priv->indent_level;
+		self->priv->indent_level = _tmp18_ - 1;
+		_tmp19_ = self->priv->current;
+		_tmp20_ = self->priv->line;
+		_tmp21_ = self->priv->column;
+		vala_source_location_init (&_vala_token_begin, _tmp19_, _tmp20_, _tmp21_);
+		_tmp22_ = self->priv->current;
+		_tmp23_ = self->priv->line;
+		_tmp24_ = self->priv->column;
+		vala_source_location_init (&_vala_token_end, _tmp22_, _tmp23_, _tmp24_);
 		self->priv->last_token = VALA_GENIE_TOKEN_TYPE_DEDENT;
 		result = VALA_GENIE_TOKEN_TYPE_DEDENT;
 		if (token_begin) {
@@ -3234,150 +3216,146 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 		}
 		return result;
 	}
-	_tmp30_ = self->priv->_indent_spaces;
-	if (_tmp30_ == 0) {
-		_tmp29_ = TRUE;
+	_tmp26_ = self->priv->_indent_spaces;
+	if (_tmp26_ == 0) {
+		_tmp25_ = TRUE;
 	} else {
-		ValaGenieTokenType _tmp31_;
-		_tmp31_ = self->priv->last_token;
-		_tmp29_ = _tmp31_ != VALA_GENIE_TOKEN_TYPE_EOL;
+		ValaGenieTokenType _tmp27_;
+		_tmp27_ = self->priv->last_token;
+		_tmp25_ = _tmp27_ != VALA_GENIE_TOKEN_TYPE_EOL;
 	}
-	_tmp32_ = _tmp29_;
-	if (_tmp32_) {
+	_tmp28_ = _tmp25_;
+	if (_tmp28_) {
 		vala_genie_scanner_space (self);
 	}
 	while (TRUE) {
-		gboolean _tmp33_ = FALSE;
-		gboolean _tmp34_ = FALSE;
-		gchar* _tmp35_;
-		gchar* _tmp36_;
-		gboolean _tmp39_;
-		gboolean _tmp42_;
-		gchar* _tmp43_;
-		gint _tmp44_;
-		_tmp35_ = self->priv->current;
-		_tmp36_ = self->priv->end;
-		if (_tmp35_ < _tmp36_) {
-			gchar* _tmp37_;
-			gchar _tmp38_;
-			_tmp37_ = self->priv->current;
-			_tmp38_ = _tmp37_[0];
-			_tmp34_ = _tmp38_ == '\\';
+		gboolean _tmp29_ = FALSE;
+		gboolean _tmp30_ = FALSE;
+		gchar* _tmp31_;
+		gchar* _tmp32_;
+		gboolean _tmp35_;
+		gboolean _tmp38_;
+		gchar* _tmp39_;
+		gint _tmp40_;
+		_tmp31_ = self->priv->current;
+		_tmp32_ = self->priv->end;
+		if (_tmp31_ < _tmp32_) {
+			gchar* _tmp33_;
+			gchar _tmp34_;
+			_tmp33_ = self->priv->current;
+			_tmp34_ = _tmp33_[0];
+			_tmp30_ = _tmp34_ == '\\';
 		} else {
-			_tmp34_ = FALSE;
+			_tmp30_ = FALSE;
 		}
-		_tmp39_ = _tmp34_;
-		if (_tmp39_) {
-			gchar* _tmp40_;
-			gchar _tmp41_;
-			_tmp40_ = self->priv->current;
-			_tmp41_ = _tmp40_[1];
-			_tmp33_ = _tmp41_ == '\n';
+		_tmp35_ = _tmp30_;
+		if (_tmp35_) {
+			gchar* _tmp36_;
+			gchar _tmp37_;
+			_tmp36_ = self->priv->current;
+			_tmp37_ = _tmp36_[1];
+			_tmp29_ = _tmp37_ == '\n';
 		} else {
-			_tmp33_ = FALSE;
+			_tmp29_ = FALSE;
 		}
-		_tmp42_ = _tmp33_;
-		if (!_tmp42_) {
+		_tmp38_ = _tmp29_;
+		if (!_tmp38_) {
 			break;
 		}
-		_tmp43_ = self->priv->current;
-		self->priv->current = _tmp43_ + 2;
-		_tmp44_ = self->priv->line;
-		self->priv->line = _tmp44_ + 1;
+		_tmp39_ = self->priv->current;
+		self->priv->current = _tmp39_ + 2;
+		_tmp40_ = self->priv->line;
+		self->priv->line = _tmp40_ + 1;
 		vala_genie_scanner_skip_space_tabs (self);
 	}
 	while (TRUE) {
-		gboolean _tmp45_ = FALSE;
-		gboolean _tmp46_ = FALSE;
-		gchar* _tmp47_;
-		gchar* _tmp48_;
-		gboolean _tmp51_;
-		gboolean _tmp56_;
-		gchar* _tmp57_;
-		gint _tmp58_;
-		_tmp47_ = self->priv->current;
-		_tmp48_ = self->priv->end;
-		if (_tmp47_ < _tmp48_) {
-			gchar* _tmp49_;
-			gchar _tmp50_;
-			_tmp49_ = self->priv->current;
-			_tmp50_ = _tmp49_[0];
-			_tmp46_ = _tmp50_ == '\n';
+		gboolean _tmp41_ = FALSE;
+		gboolean _tmp42_ = FALSE;
+		gchar* _tmp43_;
+		gchar* _tmp44_;
+		gboolean _tmp47_;
+		gboolean _tmp52_;
+		gchar* _tmp53_;
+		gint _tmp54_;
+		_tmp43_ = self->priv->current;
+		_tmp44_ = self->priv->end;
+		if (_tmp43_ < _tmp44_) {
+			gchar* _tmp45_;
+			gchar _tmp46_;
+			_tmp45_ = self->priv->current;
+			_tmp46_ = _tmp45_[0];
+			_tmp42_ = _tmp46_ == '\n';
 		} else {
-			_tmp46_ = FALSE;
+			_tmp42_ = FALSE;
 		}
-		_tmp51_ = _tmp46_;
-		if (_tmp51_) {
-			gboolean _tmp52_ = FALSE;
-			gint _tmp53_;
-			gboolean _tmp55_;
-			_tmp53_ = self->priv->open_parens_count;
-			if (_tmp53_ > 0) {
-				_tmp52_ = TRUE;
+		_tmp47_ = _tmp42_;
+		if (_tmp47_) {
+			gboolean _tmp48_ = FALSE;
+			gint _tmp49_;
+			gboolean _tmp51_;
+			_tmp49_ = self->priv->open_parens_count;
+			if (_tmp49_ > 0) {
+				_tmp48_ = TRUE;
 			} else {
-				gint _tmp54_;
-				_tmp54_ = self->priv->open_brace_count;
-				_tmp52_ = _tmp54_ > 0;
+				gint _tmp50_;
+				_tmp50_ = self->priv->open_brace_count;
+				_tmp48_ = _tmp50_ > 0;
 			}
-			_tmp55_ = _tmp52_;
-			_tmp45_ = _tmp55_;
+			_tmp51_ = _tmp48_;
+			_tmp41_ = _tmp51_;
 		} else {
-			_tmp45_ = FALSE;
+			_tmp41_ = FALSE;
 		}
-		_tmp56_ = _tmp45_;
-		if (!_tmp56_) {
+		_tmp52_ = _tmp41_;
+		if (!_tmp52_) {
 			break;
 		}
-		_tmp57_ = self->priv->current;
-		self->priv->current = _tmp57_ + 1;
-		_tmp58_ = self->priv->line;
-		self->priv->line = _tmp58_ + 1;
+		_tmp53_ = self->priv->current;
+		self->priv->current = _tmp53_ + 1;
+		_tmp54_ = self->priv->line;
+		self->priv->line = _tmp54_ + 1;
 		vala_genie_scanner_skip_space_tabs (self);
 	}
-	_tmp62_ = vala_genie_scanner_newline (self);
-	if (_tmp62_) {
-		gboolean _tmp63_;
-		_tmp63_ = self->priv->parse_started;
-		_tmp61_ = _tmp63_;
+	_tmp58_ = vala_genie_scanner_newline (self);
+	if (_tmp58_) {
+		gboolean _tmp59_;
+		_tmp59_ = self->priv->parse_started;
+		_tmp57_ = _tmp59_;
 	} else {
-		_tmp61_ = FALSE;
+		_tmp57_ = FALSE;
 	}
-	_tmp64_ = _tmp61_;
-	if (_tmp64_) {
-		ValaGenieTokenType _tmp65_;
-		_tmp65_ = self->priv->last_token;
-		_tmp60_ = _tmp65_ != VALA_GENIE_TOKEN_TYPE_EOL;
+	_tmp60_ = _tmp57_;
+	if (_tmp60_) {
+		ValaGenieTokenType _tmp61_;
+		_tmp61_ = self->priv->last_token;
+		_tmp56_ = _tmp61_ != VALA_GENIE_TOKEN_TYPE_EOL;
 	} else {
-		_tmp60_ = FALSE;
+		_tmp56_ = FALSE;
 	}
-	_tmp66_ = _tmp60_;
-	if (_tmp66_) {
-		ValaGenieTokenType _tmp67_;
-		_tmp67_ = self->priv->last_token;
-		_tmp59_ = _tmp67_ != VALA_GENIE_TOKEN_TYPE_SEMICOLON;
+	_tmp62_ = _tmp56_;
+	if (_tmp62_) {
+		ValaGenieTokenType _tmp63_;
+		_tmp63_ = self->priv->last_token;
+		_tmp55_ = _tmp63_ != VALA_GENIE_TOKEN_TYPE_SEMICOLON;
 	} else {
-		_tmp59_ = FALSE;
+		_tmp55_ = FALSE;
 	}
-	_tmp68_ = _tmp59_;
-	if (_tmp68_) {
-		gchar* _tmp69_;
+	_tmp64_ = _tmp55_;
+	if (_tmp64_) {
+		gchar* _tmp65_;
+		gint _tmp66_;
+		gint _tmp67_;
+		gchar* _tmp68_;
+		gint _tmp69_;
 		gint _tmp70_;
-		gint _tmp71_;
-		ValaSourceLocation _tmp72_ = {0};
-		gchar* _tmp73_;
-		gint _tmp74_;
-		gint _tmp75_;
-		ValaSourceLocation _tmp76_ = {0};
-		_tmp69_ = self->priv->current;
-		_tmp70_ = self->priv->line;
-		_tmp71_ = self->priv->column;
-		vala_source_location_init (&_tmp72_, _tmp69_, _tmp70_, _tmp71_);
-		_vala_token_begin = _tmp72_;
-		_tmp73_ = self->priv->current;
-		_tmp74_ = self->priv->line;
-		_tmp75_ = self->priv->column;
-		vala_source_location_init (&_tmp76_, _tmp73_, _tmp74_, _tmp75_);
-		_vala_token_end = _tmp76_;
+		_tmp65_ = self->priv->current;
+		_tmp66_ = self->priv->line;
+		_tmp67_ = self->priv->column;
+		vala_source_location_init (&_vala_token_begin, _tmp65_, _tmp66_, _tmp67_);
+		_tmp68_ = self->priv->current;
+		_tmp69_ = self->priv->line;
+		_tmp70_ = self->priv->column;
+		vala_source_location_init (&_vala_token_end, _tmp68_, _tmp69_, _tmp70_);
 		self->priv->last_token = VALA_GENIE_TOKEN_TYPE_EOL;
 		result = VALA_GENIE_TOKEN_TYPE_EOL;
 		if (token_begin) {
@@ -3389,45 +3367,41 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 		return result;
 	}
 	while (TRUE) {
-		gboolean _tmp77_ = FALSE;
-		gchar* _tmp78_;
-		gint _tmp79_;
-		gint _tmp80_;
-		ValaSourceLocation _tmp81_ = {0};
-		gint _tmp82_ = 0;
-		gint _tmp83_;
-		gint _tmp84_;
-		gint _tmp85_;
-		_tmp77_ = vala_genie_scanner_skip_newlines (self);
-		if (!_tmp77_) {
+		gboolean _tmp71_ = FALSE;
+		gchar* _tmp72_;
+		gint _tmp73_;
+		gint _tmp74_;
+		gint _tmp75_ = 0;
+		gint _tmp76_;
+		gint _tmp77_;
+		gint _tmp78_;
+		_tmp71_ = vala_genie_scanner_skip_newlines (self);
+		if (!_tmp71_) {
 			break;
 		}
-		_tmp78_ = self->priv->current;
-		_tmp79_ = self->priv->line;
-		_tmp80_ = self->priv->column;
-		vala_source_location_init (&_tmp81_, _tmp78_, _tmp79_, _tmp80_);
-		_vala_token_begin = _tmp81_;
-		_tmp82_ = vala_genie_scanner_count_tabs (self);
-		self->priv->current_indent_level = _tmp82_;
-		_tmp83_ = self->priv->current_indent_level;
-		if (_tmp83_ == (-1)) {
+		_tmp72_ = self->priv->current;
+		_tmp73_ = self->priv->line;
+		_tmp74_ = self->priv->column;
+		vala_source_location_init (&_vala_token_begin, _tmp72_, _tmp73_, _tmp74_);
+		_tmp75_ = vala_genie_scanner_count_tabs (self);
+		self->priv->current_indent_level = _tmp75_;
+		_tmp76_ = self->priv->current_indent_level;
+		if (_tmp76_ == (-1)) {
 			continue;
 		}
-		_tmp84_ = self->priv->current_indent_level;
-		_tmp85_ = self->priv->indent_level;
-		if (_tmp84_ > _tmp85_) {
-			gint _tmp86_;
-			gchar* _tmp87_;
-			gint _tmp88_;
-			gint _tmp89_;
-			ValaSourceLocation _tmp90_ = {0};
-			_tmp86_ = self->priv->current_indent_level;
-			self->priv->indent_level = _tmp86_;
-			_tmp87_ = self->priv->current;
-			_tmp88_ = self->priv->line;
-			_tmp89_ = self->priv->column;
-			vala_source_location_init (&_tmp90_, _tmp87_, _tmp88_, _tmp89_);
-			_vala_token_end = _tmp90_;
+		_tmp77_ = self->priv->current_indent_level;
+		_tmp78_ = self->priv->indent_level;
+		if (_tmp77_ > _tmp78_) {
+			gint _tmp79_;
+			gchar* _tmp80_;
+			gint _tmp81_;
+			gint _tmp82_;
+			_tmp79_ = self->priv->current_indent_level;
+			self->priv->indent_level = _tmp79_;
+			_tmp80_ = self->priv->current;
+			_tmp81_ = self->priv->line;
+			_tmp82_ = self->priv->column;
+			vala_source_location_init (&_vala_token_end, _tmp80_, _tmp81_, _tmp82_);
 			self->priv->last_token = VALA_GENIE_TOKEN_TYPE_INDENT;
 			result = VALA_GENIE_TOKEN_TYPE_INDENT;
 			if (token_begin) {
@@ -3438,28 +3412,26 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 			}
 			return result;
 		} else {
-			gint _tmp91_;
-			gint _tmp92_;
-			_tmp91_ = self->priv->current_indent_level;
-			_tmp92_ = self->priv->indent_level;
-			if (_tmp91_ < _tmp92_) {
-				gint _tmp93_;
-				gint _tmp94_;
-				gint _tmp95_;
-				gchar* _tmp96_;
-				gint _tmp97_;
-				gint _tmp98_;
-				ValaSourceLocation _tmp99_ = {0};
-				_tmp93_ = self->priv->indent_level;
-				self->priv->indent_level = _tmp93_ - 1;
-				_tmp94_ = self->priv->indent_level;
-				_tmp95_ = self->priv->current_indent_level;
-				self->priv->pending_dedents = _tmp94_ - _tmp95_;
-				_tmp96_ = self->priv->current;
-				_tmp97_ = self->priv->line;
-				_tmp98_ = self->priv->column;
-				vala_source_location_init (&_tmp99_, _tmp96_, _tmp97_, _tmp98_);
-				_vala_token_end = _tmp99_;
+			gint _tmp83_;
+			gint _tmp84_;
+			_tmp83_ = self->priv->current_indent_level;
+			_tmp84_ = self->priv->indent_level;
+			if (_tmp83_ < _tmp84_) {
+				gint _tmp85_;
+				gint _tmp86_;
+				gint _tmp87_;
+				gchar* _tmp88_;
+				gint _tmp89_;
+				gint _tmp90_;
+				_tmp85_ = self->priv->indent_level;
+				self->priv->indent_level = _tmp85_ - 1;
+				_tmp86_ = self->priv->indent_level;
+				_tmp87_ = self->priv->current_indent_level;
+				self->priv->pending_dedents = _tmp86_ - _tmp87_;
+				_tmp88_ = self->priv->current;
+				_tmp89_ = self->priv->line;
+				_tmp90_ = self->priv->column;
+				vala_source_location_init (&_vala_token_end, _tmp88_, _tmp89_, _tmp90_);
 				self->priv->last_token = VALA_GENIE_TOKEN_TYPE_DEDENT;
 				result = VALA_GENIE_TOKEN_TYPE_DEDENT;
 				if (token_begin) {
@@ -3472,607 +3444,606 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 			}
 		}
 	}
-	_tmp100_ = self->priv->current;
-	begin = _tmp100_;
-	_tmp101_ = begin;
-	_tmp102_ = self->priv->line;
-	_tmp103_ = self->priv->column;
-	vala_source_location_init (&_tmp104_, _tmp101_, _tmp102_, _tmp103_);
-	_vala_token_begin = _tmp104_;
+	_tmp91_ = self->priv->current;
+	begin = _tmp91_;
+	_tmp92_ = begin;
+	_tmp93_ = self->priv->line;
+	_tmp94_ = self->priv->column;
+	vala_source_location_init (&_vala_token_begin, _tmp92_, _tmp93_, _tmp94_);
 	token_length_in_chars = -1;
 	self->priv->parse_started = TRUE;
-	_tmp105_ = self->priv->current;
-	_tmp106_ = self->priv->end;
-	if (_tmp105_ >= _tmp106_) {
-		gint _tmp107_;
-		_tmp107_ = self->priv->indent_level;
-		if (_tmp107_ > 0) {
-			gint _tmp108_;
-			gint _tmp109_;
-			_tmp108_ = self->priv->indent_level;
-			self->priv->indent_level = _tmp108_ - 1;
-			_tmp109_ = self->priv->indent_level;
-			self->priv->pending_dedents = _tmp109_;
+	_tmp95_ = self->priv->current;
+	_tmp96_ = self->priv->end;
+	if (_tmp95_ >= _tmp96_) {
+		gint _tmp97_;
+		_tmp97_ = self->priv->indent_level;
+		if (_tmp97_ > 0) {
+			gint _tmp98_;
+			gint _tmp99_;
+			_tmp98_ = self->priv->indent_level;
+			self->priv->indent_level = _tmp98_ - 1;
+			_tmp99_ = self->priv->indent_level;
+			self->priv->pending_dedents = _tmp99_;
 			type = VALA_GENIE_TOKEN_TYPE_DEDENT;
 		} else {
 			type = VALA_GENIE_TOKEN_TYPE_EOF;
 		}
 	} else {
-		gboolean _tmp110_ = FALSE;
-		gchar* _tmp111_;
-		gchar _tmp112_;
-		gboolean _tmp113_ = FALSE;
-		gboolean _tmp116_;
-		_tmp111_ = self->priv->current;
-		_tmp112_ = _tmp111_[0];
-		_tmp113_ = g_ascii_isalpha (_tmp112_);
-		if (_tmp113_) {
-			_tmp110_ = TRUE;
+		gboolean _tmp100_ = FALSE;
+		gchar* _tmp101_;
+		gchar _tmp102_;
+		gboolean _tmp103_ = FALSE;
+		gboolean _tmp106_;
+		_tmp101_ = self->priv->current;
+		_tmp102_ = _tmp101_[0];
+		_tmp103_ = g_ascii_isalpha (_tmp102_);
+		if (_tmp103_) {
+			_tmp100_ = TRUE;
 		} else {
-			gchar* _tmp114_;
-			gchar _tmp115_;
-			_tmp114_ = self->priv->current;
-			_tmp115_ = _tmp114_[0];
-			_tmp110_ = _tmp115_ == '_';
+			gchar* _tmp104_;
+			gchar _tmp105_;
+			_tmp104_ = self->priv->current;
+			_tmp105_ = _tmp104_[0];
+			_tmp100_ = _tmp105_ == '_';
 		}
-		_tmp116_ = _tmp110_;
-		if (_tmp116_) {
+		_tmp106_ = _tmp100_;
+		if (_tmp106_) {
 			gint len;
-			gchar* _tmp126_;
-			gint _tmp127_;
-			ValaGenieTokenType _tmp128_ = 0;
+			gchar* _tmp116_;
+			gint _tmp117_;
+			ValaGenieTokenType _tmp118_ = 0;
 			len = 0;
 			while (TRUE) {
-				gboolean _tmp117_ = FALSE;
-				gchar* _tmp118_;
-				gchar* _tmp119_;
-				gboolean _tmp123_;
-				gchar* _tmp124_;
-				gint _tmp125_;
-				_tmp118_ = self->priv->current;
-				_tmp119_ = self->priv->end;
-				if (_tmp118_ < _tmp119_) {
-					gchar* _tmp120_;
-					gchar _tmp121_;
-					gboolean _tmp122_ = FALSE;
-					_tmp120_ = self->priv->current;
-					_tmp121_ = _tmp120_[0];
-					_tmp122_ = vala_genie_scanner_is_ident_char (self, _tmp121_);
-					_tmp117_ = _tmp122_;
+				gboolean _tmp107_ = FALSE;
+				gchar* _tmp108_;
+				gchar* _tmp109_;
+				gboolean _tmp113_;
+				gchar* _tmp114_;
+				gint _tmp115_;
+				_tmp108_ = self->priv->current;
+				_tmp109_ = self->priv->end;
+				if (_tmp108_ < _tmp109_) {
+					gchar* _tmp110_;
+					gchar _tmp111_;
+					gboolean _tmp112_ = FALSE;
+					_tmp110_ = self->priv->current;
+					_tmp111_ = _tmp110_[0];
+					_tmp112_ = vala_genie_scanner_is_ident_char (self, _tmp111_);
+					_tmp107_ = _tmp112_;
 				} else {
-					_tmp117_ = FALSE;
+					_tmp107_ = FALSE;
 				}
-				_tmp123_ = _tmp117_;
-				if (!_tmp123_) {
+				_tmp113_ = _tmp107_;
+				if (!_tmp113_) {
 					break;
 				}
-				_tmp124_ = self->priv->current;
-				self->priv->current = _tmp124_ + 1;
-				_tmp125_ = len;
-				len = _tmp125_ + 1;
+				_tmp114_ = self->priv->current;
+				self->priv->current = _tmp114_ + 1;
+				_tmp115_ = len;
+				len = _tmp115_ + 1;
 			}
-			_tmp126_ = begin;
-			_tmp127_ = len;
-			_tmp128_ = vala_genie_scanner_get_identifier_or_keyword (self, _tmp126_, _tmp127_);
-			type = _tmp128_;
+			_tmp116_ = begin;
+			_tmp117_ = len;
+			_tmp118_ = vala_genie_scanner_get_identifier_or_keyword (self, _tmp116_, _tmp117_);
+			type = _tmp118_;
 		} else {
-			gchar* _tmp129_;
-			gchar _tmp130_;
-			_tmp129_ = self->priv->current;
-			_tmp130_ = _tmp129_[0];
-			if (_tmp130_ == '@') {
-				gboolean _tmp131_ = FALSE;
-				gchar* _tmp132_;
-				gchar* _tmp133_;
-				gboolean _tmp136_;
-				_tmp132_ = self->priv->current;
-				_tmp133_ = self->priv->end;
-				if (_tmp132_ < (_tmp133_ - 1)) {
-					gchar* _tmp134_;
-					gchar _tmp135_;
-					_tmp134_ = self->priv->current;
-					_tmp135_ = _tmp134_[1];
-					_tmp131_ = _tmp135_ == '"';
+			gchar* _tmp119_;
+			gchar _tmp120_;
+			_tmp119_ = self->priv->current;
+			_tmp120_ = _tmp119_[0];
+			if (_tmp120_ == '@') {
+				gboolean _tmp121_ = FALSE;
+				gchar* _tmp122_;
+				gchar* _tmp123_;
+				gboolean _tmp126_;
+				_tmp122_ = self->priv->current;
+				_tmp123_ = self->priv->end;
+				if (_tmp122_ < (_tmp123_ - 1)) {
+					gchar* _tmp124_;
+					gchar _tmp125_;
+					_tmp124_ = self->priv->current;
+					_tmp125_ = _tmp124_[1];
+					_tmp121_ = _tmp125_ == '"';
 				} else {
-					_tmp131_ = FALSE;
+					_tmp121_ = FALSE;
 				}
-				_tmp136_ = _tmp131_;
-				if (_tmp136_) {
-					gchar* _tmp137_;
-					ValaGenieScannerState* _tmp138_;
-					gint _tmp138__length1;
+				_tmp126_ = _tmp121_;
+				if (_tmp126_) {
+					gchar* _tmp127_;
+					ValaGenieScannerState* _tmp128_;
+					gint _tmp128__length1;
 					type = VALA_GENIE_TOKEN_TYPE_OPEN_TEMPLATE;
-					_tmp137_ = self->priv->current;
-					self->priv->current = _tmp137_ + 2;
-					_tmp138_ = self->priv->state_stack;
-					_tmp138__length1 = self->priv->state_stack_length1;
+					_tmp127_ = self->priv->current;
+					self->priv->current = _tmp127_ + 2;
+					_tmp128_ = self->priv->state_stack;
+					_tmp128__length1 = self->priv->state_stack_length1;
 					_vala_array_add6 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_GENIE_SCANNER_STATE_TEMPLATE);
 				} else {
-					gchar* _tmp139_;
-					gchar* _tmp140_;
+					gchar* _tmp129_;
+					gchar* _tmp130_;
 					gint len;
-					_tmp139_ = _vala_token_begin.pos;
-					_vala_token_begin.pos = _tmp139_ + 1;
-					_tmp140_ = self->priv->current;
-					self->priv->current = _tmp140_ + 1;
+					_tmp129_ = _vala_token_begin.pos;
+					_vala_token_begin.pos = _tmp129_ + 1;
+					_tmp130_ = self->priv->current;
+					self->priv->current = _tmp130_ + 1;
 					len = 0;
 					while (TRUE) {
-						gboolean _tmp141_ = FALSE;
-						gchar* _tmp142_;
-						gchar* _tmp143_;
-						gboolean _tmp147_;
-						gchar* _tmp148_;
-						gint _tmp149_;
-						_tmp142_ = self->priv->current;
-						_tmp143_ = self->priv->end;
-						if (_tmp142_ < _tmp143_) {
-							gchar* _tmp144_;
-							gchar _tmp145_;
-							gboolean _tmp146_ = FALSE;
-							_tmp144_ = self->priv->current;
-							_tmp145_ = _tmp144_[0];
-							_tmp146_ = vala_genie_scanner_is_ident_char (self, _tmp145_);
-							_tmp141_ = _tmp146_;
+						gboolean _tmp131_ = FALSE;
+						gchar* _tmp132_;
+						gchar* _tmp133_;
+						gboolean _tmp137_;
+						gchar* _tmp138_;
+						gint _tmp139_;
+						_tmp132_ = self->priv->current;
+						_tmp133_ = self->priv->end;
+						if (_tmp132_ < _tmp133_) {
+							gchar* _tmp134_;
+							gchar _tmp135_;
+							gboolean _tmp136_ = FALSE;
+							_tmp134_ = self->priv->current;
+							_tmp135_ = _tmp134_[0];
+							_tmp136_ = vala_genie_scanner_is_ident_char (self, _tmp135_);
+							_tmp131_ = _tmp136_;
 						} else {
-							_tmp141_ = FALSE;
+							_tmp131_ = FALSE;
 						}
-						_tmp147_ = _tmp141_;
-						if (!_tmp147_) {
+						_tmp137_ = _tmp131_;
+						if (!_tmp137_) {
 							break;
 						}
-						_tmp148_ = self->priv->current;
-						self->priv->current = _tmp148_ + 1;
-						_tmp149_ = len;
-						len = _tmp149_ + 1;
+						_tmp138_ = self->priv->current;
+						self->priv->current = _tmp138_ + 1;
+						_tmp139_ = len;
+						len = _tmp139_ + 1;
 					}
 					type = VALA_GENIE_TOKEN_TYPE_IDENTIFIER;
 				}
 			} else {
-				gchar* _tmp150_;
-				gchar _tmp151_;
-				gboolean _tmp152_ = FALSE;
-				_tmp150_ = self->priv->current;
-				_tmp151_ = _tmp150_[0];
-				_tmp152_ = g_ascii_isdigit (_tmp151_);
-				if (_tmp152_) {
-					gboolean _tmp161_ = FALSE;
-					gchar* _tmp162_;
-					gchar* _tmp163_;
-					gboolean _tmp167_;
+				gchar* _tmp140_;
+				gchar _tmp141_;
+				gboolean _tmp142_ = FALSE;
+				_tmp140_ = self->priv->current;
+				_tmp141_ = _tmp140_[0];
+				_tmp142_ = g_ascii_isdigit (_tmp141_);
+				if (_tmp142_) {
+					gboolean _tmp151_ = FALSE;
+					gchar* _tmp152_;
+					gchar* _tmp153_;
+					gboolean _tmp157_;
 					while (TRUE) {
-						gboolean _tmp153_ = FALSE;
-						gchar* _tmp154_;
-						gchar* _tmp155_;
-						gboolean _tmp159_;
-						gchar* _tmp160_;
-						_tmp154_ = self->priv->current;
-						_tmp155_ = self->priv->end;
-						if (_tmp154_ < _tmp155_) {
-							gchar* _tmp156_;
-							gchar _tmp157_;
-							gboolean _tmp158_ = FALSE;
-							_tmp156_ = self->priv->current;
-							_tmp157_ = _tmp156_[0];
-							_tmp158_ = g_ascii_isdigit (_tmp157_);
-							_tmp153_ = _tmp158_;
+						gboolean _tmp143_ = FALSE;
+						gchar* _tmp144_;
+						gchar* _tmp145_;
+						gboolean _tmp149_;
+						gchar* _tmp150_;
+						_tmp144_ = self->priv->current;
+						_tmp145_ = self->priv->end;
+						if (_tmp144_ < _tmp145_) {
+							gchar* _tmp146_;
+							gchar _tmp147_;
+							gboolean _tmp148_ = FALSE;
+							_tmp146_ = self->priv->current;
+							_tmp147_ = _tmp146_[0];
+							_tmp148_ = g_ascii_isdigit (_tmp147_);
+							_tmp143_ = _tmp148_;
 						} else {
-							_tmp153_ = FALSE;
+							_tmp143_ = FALSE;
 						}
-						_tmp159_ = _tmp153_;
-						if (!_tmp159_) {
+						_tmp149_ = _tmp143_;
+						if (!_tmp149_) {
 							break;
 						}
-						_tmp160_ = self->priv->current;
-						self->priv->current = _tmp160_ + 1;
+						_tmp150_ = self->priv->current;
+						self->priv->current = _tmp150_ + 1;
 					}
 					type = VALA_GENIE_TOKEN_TYPE_INTEGER_LITERAL;
-					_tmp162_ = self->priv->current;
-					_tmp163_ = self->priv->end;
-					if (_tmp162_ < _tmp163_) {
-						gchar* _tmp164_;
-						gchar _tmp165_;
-						gchar _tmp166_ = '\0';
-						_tmp164_ = self->priv->current;
-						_tmp165_ = _tmp164_[0];
-						_tmp166_ = g_ascii_tolower (_tmp165_);
-						_tmp161_ = _tmp166_ == 'l';
+					_tmp152_ = self->priv->current;
+					_tmp153_ = self->priv->end;
+					if (_tmp152_ < _tmp153_) {
+						gchar* _tmp154_;
+						gchar _tmp155_;
+						gchar _tmp156_ = '\0';
+						_tmp154_ = self->priv->current;
+						_tmp155_ = _tmp154_[0];
+						_tmp156_ = g_ascii_tolower (_tmp155_);
+						_tmp151_ = _tmp156_ == 'l';
 					} else {
-						_tmp161_ = FALSE;
+						_tmp151_ = FALSE;
 					}
-					_tmp167_ = _tmp161_;
-					if (_tmp167_) {
-						gchar* _tmp168_;
-						gboolean _tmp169_ = FALSE;
-						gchar* _tmp170_;
-						gchar* _tmp171_;
-						gboolean _tmp175_;
-						_tmp168_ = self->priv->current;
-						self->priv->current = _tmp168_ + 1;
-						_tmp170_ = self->priv->current;
-						_tmp171_ = self->priv->end;
-						if (_tmp170_ < _tmp171_) {
-							gchar* _tmp172_;
-							gchar _tmp173_;
-							gchar _tmp174_ = '\0';
-							_tmp172_ = self->priv->current;
-							_tmp173_ = _tmp172_[0];
-							_tmp174_ = g_ascii_tolower (_tmp173_);
-							_tmp169_ = _tmp174_ == 'l';
+					_tmp157_ = _tmp151_;
+					if (_tmp157_) {
+						gchar* _tmp158_;
+						gboolean _tmp159_ = FALSE;
+						gchar* _tmp160_;
+						gchar* _tmp161_;
+						gboolean _tmp165_;
+						_tmp158_ = self->priv->current;
+						self->priv->current = _tmp158_ + 1;
+						_tmp160_ = self->priv->current;
+						_tmp161_ = self->priv->end;
+						if (_tmp160_ < _tmp161_) {
+							gchar* _tmp162_;
+							gchar _tmp163_;
+							gchar _tmp164_ = '\0';
+							_tmp162_ = self->priv->current;
+							_tmp163_ = _tmp162_[0];
+							_tmp164_ = g_ascii_tolower (_tmp163_);
+							_tmp159_ = _tmp164_ == 'l';
 						} else {
-							_tmp169_ = FALSE;
+							_tmp159_ = FALSE;
 						}
-						_tmp175_ = _tmp169_;
-						if (_tmp175_) {
-							gchar* _tmp176_;
-							_tmp176_ = self->priv->current;
-							self->priv->current = _tmp176_ + 1;
+						_tmp165_ = _tmp159_;
+						if (_tmp165_) {
+							gchar* _tmp166_;
+							_tmp166_ = self->priv->current;
+							self->priv->current = _tmp166_ + 1;
 						}
 					} else {
-						gboolean _tmp177_ = FALSE;
-						gchar* _tmp178_;
-						gchar* _tmp179_;
-						gboolean _tmp183_;
-						_tmp178_ = self->priv->current;
-						_tmp179_ = self->priv->end;
-						if (_tmp178_ < _tmp179_) {
-							gchar* _tmp180_;
-							gchar _tmp181_;
-							gchar _tmp182_ = '\0';
-							_tmp180_ = self->priv->current;
-							_tmp181_ = _tmp180_[0];
-							_tmp182_ = g_ascii_tolower (_tmp181_);
-							_tmp177_ = _tmp182_ == 'u';
+						gboolean _tmp167_ = FALSE;
+						gchar* _tmp168_;
+						gchar* _tmp169_;
+						gboolean _tmp173_;
+						_tmp168_ = self->priv->current;
+						_tmp169_ = self->priv->end;
+						if (_tmp168_ < _tmp169_) {
+							gchar* _tmp170_;
+							gchar _tmp171_;
+							gchar _tmp172_ = '\0';
+							_tmp170_ = self->priv->current;
+							_tmp171_ = _tmp170_[0];
+							_tmp172_ = g_ascii_tolower (_tmp171_);
+							_tmp167_ = _tmp172_ == 'u';
 						} else {
-							_tmp177_ = FALSE;
+							_tmp167_ = FALSE;
 						}
-						_tmp183_ = _tmp177_;
-						if (_tmp183_) {
-							gchar* _tmp184_;
-							gboolean _tmp185_ = FALSE;
-							gchar* _tmp186_;
-							gchar* _tmp187_;
-							gboolean _tmp191_;
-							_tmp184_ = self->priv->current;
-							self->priv->current = _tmp184_ + 1;
-							_tmp186_ = self->priv->current;
-							_tmp187_ = self->priv->end;
-							if (_tmp186_ < _tmp187_) {
-								gchar* _tmp188_;
-								gchar _tmp189_;
-								gchar _tmp190_ = '\0';
-								_tmp188_ = self->priv->current;
-								_tmp189_ = _tmp188_[0];
-								_tmp190_ = g_ascii_tolower (_tmp189_);
-								_tmp185_ = _tmp190_ == 'l';
+						_tmp173_ = _tmp167_;
+						if (_tmp173_) {
+							gchar* _tmp174_;
+							gboolean _tmp175_ = FALSE;
+							gchar* _tmp176_;
+							gchar* _tmp177_;
+							gboolean _tmp181_;
+							_tmp174_ = self->priv->current;
+							self->priv->current = _tmp174_ + 1;
+							_tmp176_ = self->priv->current;
+							_tmp177_ = self->priv->end;
+							if (_tmp176_ < _tmp177_) {
+								gchar* _tmp178_;
+								gchar _tmp179_;
+								gchar _tmp180_ = '\0';
+								_tmp178_ = self->priv->current;
+								_tmp179_ = _tmp178_[0];
+								_tmp180_ = g_ascii_tolower (_tmp179_);
+								_tmp175_ = _tmp180_ == 'l';
 							} else {
-								_tmp185_ = FALSE;
+								_tmp175_ = FALSE;
 							}
-							_tmp191_ = _tmp185_;
-							if (_tmp191_) {
-								gchar* _tmp192_;
-								gboolean _tmp193_ = FALSE;
-								gchar* _tmp194_;
-								gchar* _tmp195_;
-								gboolean _tmp199_;
-								_tmp192_ = self->priv->current;
-								self->priv->current = _tmp192_ + 1;
-								_tmp194_ = self->priv->current;
-								_tmp195_ = self->priv->end;
-								if (_tmp194_ < _tmp195_) {
-									gchar* _tmp196_;
-									gchar _tmp197_;
-									gchar _tmp198_ = '\0';
-									_tmp196_ = self->priv->current;
-									_tmp197_ = _tmp196_[0];
-									_tmp198_ = g_ascii_tolower (_tmp197_);
-									_tmp193_ = _tmp198_ == 'l';
+							_tmp181_ = _tmp175_;
+							if (_tmp181_) {
+								gchar* _tmp182_;
+								gboolean _tmp183_ = FALSE;
+								gchar* _tmp184_;
+								gchar* _tmp185_;
+								gboolean _tmp189_;
+								_tmp182_ = self->priv->current;
+								self->priv->current = _tmp182_ + 1;
+								_tmp184_ = self->priv->current;
+								_tmp185_ = self->priv->end;
+								if (_tmp184_ < _tmp185_) {
+									gchar* _tmp186_;
+									gchar _tmp187_;
+									gchar _tmp188_ = '\0';
+									_tmp186_ = self->priv->current;
+									_tmp187_ = _tmp186_[0];
+									_tmp188_ = g_ascii_tolower (_tmp187_);
+									_tmp183_ = _tmp188_ == 'l';
 								} else {
-									_tmp193_ = FALSE;
+									_tmp183_ = FALSE;
 								}
-								_tmp199_ = _tmp193_;
-								if (_tmp199_) {
-									gchar* _tmp200_;
-									_tmp200_ = self->priv->current;
-									self->priv->current = _tmp200_ + 1;
+								_tmp189_ = _tmp183_;
+								if (_tmp189_) {
+									gchar* _tmp190_;
+									_tmp190_ = self->priv->current;
+									self->priv->current = _tmp190_ + 1;
 								}
 							}
 						} else {
-							gboolean _tmp201_ = FALSE;
-							gboolean _tmp202_ = FALSE;
-							gchar* _tmp203_;
-							gchar* _tmp204_;
-							gboolean _tmp207_;
-							gboolean _tmp211_;
-							_tmp203_ = self->priv->current;
-							_tmp204_ = self->priv->end;
-							if (_tmp203_ < (_tmp204_ - 1)) {
-								gchar* _tmp205_;
-								gchar _tmp206_;
-								_tmp205_ = self->priv->current;
-								_tmp206_ = _tmp205_[0];
-								_tmp202_ = _tmp206_ == '.';
+							gboolean _tmp191_ = FALSE;
+							gboolean _tmp192_ = FALSE;
+							gchar* _tmp193_;
+							gchar* _tmp194_;
+							gboolean _tmp197_;
+							gboolean _tmp201_;
+							_tmp193_ = self->priv->current;
+							_tmp194_ = self->priv->end;
+							if (_tmp193_ < (_tmp194_ - 1)) {
+								gchar* _tmp195_;
+								gchar _tmp196_;
+								_tmp195_ = self->priv->current;
+								_tmp196_ = _tmp195_[0];
+								_tmp192_ = _tmp196_ == '.';
 							} else {
-								_tmp202_ = FALSE;
+								_tmp192_ = FALSE;
 							}
-							_tmp207_ = _tmp202_;
-							if (_tmp207_) {
-								gchar* _tmp208_;
-								gchar _tmp209_;
-								gboolean _tmp210_ = FALSE;
-								_tmp208_ = self->priv->current;
-								_tmp209_ = _tmp208_[1];
-								_tmp210_ = g_ascii_isdigit (_tmp209_);
-								_tmp201_ = _tmp210_;
+							_tmp197_ = _tmp192_;
+							if (_tmp197_) {
+								gchar* _tmp198_;
+								gchar _tmp199_;
+								gboolean _tmp200_ = FALSE;
+								_tmp198_ = self->priv->current;
+								_tmp199_ = _tmp198_[1];
+								_tmp200_ = g_ascii_isdigit (_tmp199_);
+								_tmp191_ = _tmp200_;
 							} else {
-								_tmp201_ = FALSE;
+								_tmp191_ = FALSE;
 							}
-							_tmp211_ = _tmp201_;
-							if (_tmp211_) {
+							_tmp201_ = _tmp191_;
+							if (_tmp201_) {
+								gchar* _tmp202_;
+								gboolean _tmp211_ = FALSE;
 								gchar* _tmp212_;
-								gboolean _tmp221_ = FALSE;
-								gchar* _tmp222_;
-								gchar* _tmp223_;
-								gboolean _tmp227_;
-								gboolean _tmp248_ = FALSE;
-								gchar* _tmp249_;
-								gchar* _tmp250_;
-								gboolean _tmp254_;
-								_tmp212_ = self->priv->current;
-								self->priv->current = _tmp212_ + 1;
+								gchar* _tmp213_;
+								gboolean _tmp217_;
+								gboolean _tmp238_ = FALSE;
+								gchar* _tmp239_;
+								gchar* _tmp240_;
+								gboolean _tmp244_;
+								_tmp202_ = self->priv->current;
+								self->priv->current = _tmp202_ + 1;
 								while (TRUE) {
-									gboolean _tmp213_ = FALSE;
-									gchar* _tmp214_;
-									gchar* _tmp215_;
-									gboolean _tmp219_;
-									gchar* _tmp220_;
-									_tmp214_ = self->priv->current;
-									_tmp215_ = self->priv->end;
-									if (_tmp214_ < _tmp215_) {
-										gchar* _tmp216_;
-										gchar _tmp217_;
-										gboolean _tmp218_ = FALSE;
-										_tmp216_ = self->priv->current;
-										_tmp217_ = _tmp216_[0];
-										_tmp218_ = g_ascii_isdigit (_tmp217_);
-										_tmp213_ = _tmp218_;
+									gboolean _tmp203_ = FALSE;
+									gchar* _tmp204_;
+									gchar* _tmp205_;
+									gboolean _tmp209_;
+									gchar* _tmp210_;
+									_tmp204_ = self->priv->current;
+									_tmp205_ = self->priv->end;
+									if (_tmp204_ < _tmp205_) {
+										gchar* _tmp206_;
+										gchar _tmp207_;
+										gboolean _tmp208_ = FALSE;
+										_tmp206_ = self->priv->current;
+										_tmp207_ = _tmp206_[0];
+										_tmp208_ = g_ascii_isdigit (_tmp207_);
+										_tmp203_ = _tmp208_;
 									} else {
-										_tmp213_ = FALSE;
+										_tmp203_ = FALSE;
 									}
-									_tmp219_ = _tmp213_;
-									if (!_tmp219_) {
+									_tmp209_ = _tmp203_;
+									if (!_tmp209_) {
 										break;
 									}
-									_tmp220_ = self->priv->current;
-									self->priv->current = _tmp220_ + 1;
+									_tmp210_ = self->priv->current;
+									self->priv->current = _tmp210_ + 1;
 								}
-								_tmp222_ = self->priv->current;
-								_tmp223_ = self->priv->end;
-								if (_tmp222_ < _tmp223_) {
-									gchar* _tmp224_;
-									gchar _tmp225_;
-									gchar _tmp226_ = '\0';
-									_tmp224_ = self->priv->current;
-									_tmp225_ = _tmp224_[0];
-									_tmp226_ = g_ascii_tolower (_tmp225_);
-									_tmp221_ = _tmp226_ == 'e';
+								_tmp212_ = self->priv->current;
+								_tmp213_ = self->priv->end;
+								if (_tmp212_ < _tmp213_) {
+									gchar* _tmp214_;
+									gchar _tmp215_;
+									gchar _tmp216_ = '\0';
+									_tmp214_ = self->priv->current;
+									_tmp215_ = _tmp214_[0];
+									_tmp216_ = g_ascii_tolower (_tmp215_);
+									_tmp211_ = _tmp216_ == 'e';
 								} else {
-									_tmp221_ = FALSE;
+									_tmp211_ = FALSE;
 								}
-								_tmp227_ = _tmp221_;
-								if (_tmp227_) {
-									gchar* _tmp228_;
-									gboolean _tmp229_ = FALSE;
-									gchar* _tmp230_;
-									gchar* _tmp231_;
-									gboolean _tmp238_;
-									_tmp228_ = self->priv->current;
-									self->priv->current = _tmp228_ + 1;
-									_tmp230_ = self->priv->current;
-									_tmp231_ = self->priv->end;
-									if (_tmp230_ < _tmp231_) {
-										gboolean _tmp232_ = FALSE;
-										gchar* _tmp233_;
-										gchar _tmp234_;
-										gboolean _tmp237_;
-										_tmp233_ = self->priv->current;
-										_tmp234_ = _tmp233_[0];
-										if (_tmp234_ == '+') {
-											_tmp232_ = TRUE;
+								_tmp217_ = _tmp211_;
+								if (_tmp217_) {
+									gchar* _tmp218_;
+									gboolean _tmp219_ = FALSE;
+									gchar* _tmp220_;
+									gchar* _tmp221_;
+									gboolean _tmp228_;
+									_tmp218_ = self->priv->current;
+									self->priv->current = _tmp218_ + 1;
+									_tmp220_ = self->priv->current;
+									_tmp221_ = self->priv->end;
+									if (_tmp220_ < _tmp221_) {
+										gboolean _tmp222_ = FALSE;
+										gchar* _tmp223_;
+										gchar _tmp224_;
+										gboolean _tmp227_;
+										_tmp223_ = self->priv->current;
+										_tmp224_ = _tmp223_[0];
+										if (_tmp224_ == '+') {
+											_tmp222_ = TRUE;
 										} else {
-											gchar* _tmp235_;
-											gchar _tmp236_;
-											_tmp235_ = self->priv->current;
-											_tmp236_ = _tmp235_[0];
-											_tmp232_ = _tmp236_ == '-';
+											gchar* _tmp225_;
+											gchar _tmp226_;
+											_tmp225_ = self->priv->current;
+											_tmp226_ = _tmp225_[0];
+											_tmp222_ = _tmp226_ == '-';
 										}
-										_tmp237_ = _tmp232_;
-										_tmp229_ = _tmp237_;
+										_tmp227_ = _tmp222_;
+										_tmp219_ = _tmp227_;
 									} else {
-										_tmp229_ = FALSE;
+										_tmp219_ = FALSE;
 									}
-									_tmp238_ = _tmp229_;
-									if (_tmp238_) {
-										gchar* _tmp239_;
-										_tmp239_ = self->priv->current;
-										self->priv->current = _tmp239_ + 1;
+									_tmp228_ = _tmp219_;
+									if (_tmp228_) {
+										gchar* _tmp229_;
+										_tmp229_ = self->priv->current;
+										self->priv->current = _tmp229_ + 1;
 									}
 									while (TRUE) {
-										gboolean _tmp240_ = FALSE;
-										gchar* _tmp241_;
-										gchar* _tmp242_;
-										gboolean _tmp246_;
-										gchar* _tmp247_;
-										_tmp241_ = self->priv->current;
-										_tmp242_ = self->priv->end;
-										if (_tmp241_ < _tmp242_) {
-											gchar* _tmp243_;
-											gchar _tmp244_;
-											gboolean _tmp245_ = FALSE;
-											_tmp243_ = self->priv->current;
-											_tmp244_ = _tmp243_[0];
-											_tmp245_ = g_ascii_isdigit (_tmp244_);
-											_tmp240_ = _tmp245_;
+										gboolean _tmp230_ = FALSE;
+										gchar* _tmp231_;
+										gchar* _tmp232_;
+										gboolean _tmp236_;
+										gchar* _tmp237_;
+										_tmp231_ = self->priv->current;
+										_tmp232_ = self->priv->end;
+										if (_tmp231_ < _tmp232_) {
+											gchar* _tmp233_;
+											gchar _tmp234_;
+											gboolean _tmp235_ = FALSE;
+											_tmp233_ = self->priv->current;
+											_tmp234_ = _tmp233_[0];
+											_tmp235_ = g_ascii_isdigit (_tmp234_);
+											_tmp230_ = _tmp235_;
 										} else {
-											_tmp240_ = FALSE;
+											_tmp230_ = FALSE;
 										}
-										_tmp246_ = _tmp240_;
-										if (!_tmp246_) {
+										_tmp236_ = _tmp230_;
+										if (!_tmp236_) {
 											break;
 										}
-										_tmp247_ = self->priv->current;
-										self->priv->current = _tmp247_ + 1;
+										_tmp237_ = self->priv->current;
+										self->priv->current = _tmp237_ + 1;
 									}
 								}
-								_tmp249_ = self->priv->current;
-								_tmp250_ = self->priv->end;
-								if (_tmp249_ < _tmp250_) {
-									gchar* _tmp251_;
-									gchar _tmp252_;
-									gchar _tmp253_ = '\0';
-									_tmp251_ = self->priv->current;
-									_tmp252_ = _tmp251_[0];
-									_tmp253_ = g_ascii_tolower (_tmp252_);
-									_tmp248_ = _tmp253_ == 'f';
+								_tmp239_ = self->priv->current;
+								_tmp240_ = self->priv->end;
+								if (_tmp239_ < _tmp240_) {
+									gchar* _tmp241_;
+									gchar _tmp242_;
+									gchar _tmp243_ = '\0';
+									_tmp241_ = self->priv->current;
+									_tmp242_ = _tmp241_[0];
+									_tmp243_ = g_ascii_tolower (_tmp242_);
+									_tmp238_ = _tmp243_ == 'f';
 								} else {
-									_tmp248_ = FALSE;
+									_tmp238_ = FALSE;
 								}
-								_tmp254_ = _tmp248_;
-								if (_tmp254_) {
-									gchar* _tmp255_;
-									_tmp255_ = self->priv->current;
-									self->priv->current = _tmp255_ + 1;
+								_tmp244_ = _tmp238_;
+								if (_tmp244_) {
+									gchar* _tmp245_;
+									_tmp245_ = self->priv->current;
+									self->priv->current = _tmp245_ + 1;
 								}
 								type = VALA_GENIE_TOKEN_TYPE_REAL_LITERAL;
 							} else {
-								gboolean _tmp256_ = FALSE;
-								gboolean _tmp257_ = FALSE;
-								gboolean _tmp258_ = FALSE;
-								gboolean _tmp259_ = FALSE;
-								gchar* _tmp260_;
-								gchar* _tmp261_;
+								gboolean _tmp246_ = FALSE;
+								gboolean _tmp247_ = FALSE;
+								gboolean _tmp248_ = FALSE;
+								gboolean _tmp249_ = FALSE;
+								gchar* _tmp250_;
+								gchar* _tmp251_;
+								gboolean _tmp254_;
+								gboolean _tmp257_;
+								gboolean _tmp260_;
 								gboolean _tmp264_;
-								gboolean _tmp267_;
-								gboolean _tmp270_;
-								gboolean _tmp274_;
-								_tmp260_ = self->priv->current;
-								_tmp261_ = self->priv->end;
-								if (_tmp260_ < _tmp261_) {
-									gchar* _tmp262_;
-									gchar* _tmp263_;
-									_tmp262_ = self->priv->current;
-									_tmp263_ = begin;
-									_tmp259_ = _tmp262_ == (_tmp263_ + 1);
+								_tmp250_ = self->priv->current;
+								_tmp251_ = self->priv->end;
+								if (_tmp250_ < _tmp251_) {
+									gchar* _tmp252_;
+									gchar* _tmp253_;
+									_tmp252_ = self->priv->current;
+									_tmp253_ = begin;
+									_tmp249_ = _tmp252_ == (_tmp253_ + 1);
 								} else {
-									_tmp259_ = FALSE;
+									_tmp249_ = FALSE;
 								}
-								_tmp264_ = _tmp259_;
-								if (_tmp264_) {
-									gchar* _tmp265_;
-									gchar _tmp266_;
-									_tmp265_ = begin;
-									_tmp266_ = _tmp265_[0];
-									_tmp258_ = _tmp266_ == '0';
+								_tmp254_ = _tmp249_;
+								if (_tmp254_) {
+									gchar* _tmp255_;
+									gchar _tmp256_;
+									_tmp255_ = begin;
+									_tmp256_ = _tmp255_[0];
+									_tmp248_ = _tmp256_ == '0';
 								} else {
-									_tmp258_ = FALSE;
+									_tmp248_ = FALSE;
 								}
-								_tmp267_ = _tmp258_;
-								if (_tmp267_) {
-									gchar* _tmp268_;
-									gchar _tmp269_;
-									_tmp268_ = begin;
-									_tmp269_ = _tmp268_[1];
-									_tmp257_ = _tmp269_ == 'x';
+								_tmp257_ = _tmp248_;
+								if (_tmp257_) {
+									gchar* _tmp258_;
+									gchar _tmp259_;
+									_tmp258_ = begin;
+									_tmp259_ = _tmp258_[1];
+									_tmp247_ = _tmp259_ == 'x';
 								} else {
-									_tmp257_ = FALSE;
+									_tmp247_ = FALSE;
 								}
-								_tmp270_ = _tmp257_;
-								if (_tmp270_) {
-									gchar* _tmp271_;
-									gchar _tmp272_;
-									gboolean _tmp273_ = FALSE;
-									_tmp271_ = begin;
-									_tmp272_ = _tmp271_[2];
-									_tmp273_ = g_ascii_isxdigit (_tmp272_);
-									_tmp256_ = _tmp273_;
+								_tmp260_ = _tmp247_;
+								if (_tmp260_) {
+									gchar* _tmp261_;
+									gchar _tmp262_;
+									gboolean _tmp263_ = FALSE;
+									_tmp261_ = begin;
+									_tmp262_ = _tmp261_[2];
+									_tmp263_ = g_ascii_isxdigit (_tmp262_);
+									_tmp246_ = _tmp263_;
 								} else {
-									_tmp256_ = FALSE;
+									_tmp246_ = FALSE;
 								}
-								_tmp274_ = _tmp256_;
-								if (_tmp274_) {
-									gchar* _tmp275_;
-									_tmp275_ = self->priv->current;
-									self->priv->current = _tmp275_ + 1;
+								_tmp264_ = _tmp246_;
+								if (_tmp264_) {
+									gchar* _tmp265_;
+									_tmp265_ = self->priv->current;
+									self->priv->current = _tmp265_ + 1;
 									while (TRUE) {
-										gboolean _tmp276_ = FALSE;
-										gchar* _tmp277_;
-										gchar* _tmp278_;
-										gboolean _tmp282_;
-										gchar* _tmp283_;
-										_tmp277_ = self->priv->current;
-										_tmp278_ = self->priv->end;
-										if (_tmp277_ < _tmp278_) {
-											gchar* _tmp279_;
-											gchar _tmp280_;
-											gboolean _tmp281_ = FALSE;
-											_tmp279_ = self->priv->current;
-											_tmp280_ = _tmp279_[0];
-											_tmp281_ = g_ascii_isxdigit (_tmp280_);
-											_tmp276_ = _tmp281_;
+										gboolean _tmp266_ = FALSE;
+										gchar* _tmp267_;
+										gchar* _tmp268_;
+										gboolean _tmp272_;
+										gchar* _tmp273_;
+										_tmp267_ = self->priv->current;
+										_tmp268_ = self->priv->end;
+										if (_tmp267_ < _tmp268_) {
+											gchar* _tmp269_;
+											gchar _tmp270_;
+											gboolean _tmp271_ = FALSE;
+											_tmp269_ = self->priv->current;
+											_tmp270_ = _tmp269_[0];
+											_tmp271_ = g_ascii_isxdigit (_tmp270_);
+											_tmp266_ = _tmp271_;
 										} else {
-											_tmp276_ = FALSE;
+											_tmp266_ = FALSE;
 										}
-										_tmp282_ = _tmp276_;
-										if (!_tmp282_) {
+										_tmp272_ = _tmp266_;
+										if (!_tmp272_) {
 											break;
 										}
-										_tmp283_ = self->priv->current;
-										self->priv->current = _tmp283_ + 1;
+										_tmp273_ = self->priv->current;
+										self->priv->current = _tmp273_ + 1;
 									}
 								} else {
-									gboolean _tmp284_ = FALSE;
-									gchar* _tmp285_;
-									gchar* _tmp286_;
-									gboolean _tmp290_;
-									_tmp285_ = self->priv->current;
-									_tmp286_ = self->priv->end;
-									if (_tmp285_ < _tmp286_) {
-										gchar* _tmp287_;
-										gchar _tmp288_;
-										gboolean _tmp289_ = FALSE;
-										_tmp287_ = self->priv->current;
-										_tmp288_ = _tmp287_[0];
-										_tmp289_ = vala_genie_scanner_is_ident_char (self, _tmp288_);
-										_tmp284_ = _tmp289_;
+									gboolean _tmp274_ = FALSE;
+									gchar* _tmp275_;
+									gchar* _tmp276_;
+									gboolean _tmp280_;
+									_tmp275_ = self->priv->current;
+									_tmp276_ = self->priv->end;
+									if (_tmp275_ < _tmp276_) {
+										gchar* _tmp277_;
+										gchar _tmp278_;
+										gboolean _tmp279_ = FALSE;
+										_tmp277_ = self->priv->current;
+										_tmp278_ = _tmp277_[0];
+										_tmp279_ = vala_genie_scanner_is_ident_char (self, _tmp278_);
+										_tmp274_ = _tmp279_;
 									} else {
-										_tmp284_ = FALSE;
+										_tmp274_ = FALSE;
 									}
-									_tmp290_ = _tmp284_;
-									if (_tmp290_) {
+									_tmp280_ = _tmp274_;
+									if (_tmp280_) {
 										while (TRUE) {
-											gboolean _tmp291_ = FALSE;
-											gchar* _tmp292_;
-											gchar* _tmp293_;
-											gboolean _tmp297_;
-											gchar* _tmp298_;
-											_tmp292_ = self->priv->current;
-											_tmp293_ = self->priv->end;
-											if (_tmp292_ < _tmp293_) {
-												gchar* _tmp294_;
-												gchar _tmp295_;
-												gboolean _tmp296_ = FALSE;
-												_tmp294_ = self->priv->current;
-												_tmp295_ = _tmp294_[0];
-												_tmp296_ = vala_genie_scanner_is_ident_char (self, _tmp295_);
-												_tmp291_ = _tmp296_;
+											gboolean _tmp281_ = FALSE;
+											gchar* _tmp282_;
+											gchar* _tmp283_;
+											gboolean _tmp287_;
+											gchar* _tmp288_;
+											_tmp282_ = self->priv->current;
+											_tmp283_ = self->priv->end;
+											if (_tmp282_ < _tmp283_) {
+												gchar* _tmp284_;
+												gchar _tmp285_;
+												gboolean _tmp286_ = FALSE;
+												_tmp284_ = self->priv->current;
+												_tmp285_ = _tmp284_[0];
+												_tmp286_ = vala_genie_scanner_is_ident_char (self, _tmp285_);
+												_tmp281_ = _tmp286_;
 											} else {
-												_tmp291_ = FALSE;
+												_tmp281_ = FALSE;
 											}
-											_tmp297_ = _tmp291_;
-											if (!_tmp297_) {
+											_tmp287_ = _tmp281_;
+											if (!_tmp287_) {
 												break;
 											}
-											_tmp298_ = self->priv->current;
-											self->priv->current = _tmp298_ + 1;
+											_tmp288_ = self->priv->current;
+											self->priv->current = _tmp288_ + 1;
 										}
 										type = VALA_GENIE_TOKEN_TYPE_IDENTIFIER;
 									}
@@ -4081,224 +4052,224 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 						}
 					}
 				} else {
-					gchar* _tmp299_;
-					gchar _tmp300_;
-					_tmp299_ = self->priv->current;
-					_tmp300_ = _tmp299_[0];
-					switch (_tmp300_) {
+					gchar* _tmp289_;
+					gchar _tmp290_;
+					_tmp289_ = self->priv->current;
+					_tmp290_ = _tmp289_[0];
+					switch (_tmp290_) {
 						case '{':
 						{
-							gint _tmp301_;
-							ValaGenieScannerState* _tmp302_;
-							gint _tmp302__length1;
-							gchar* _tmp303_;
+							gint _tmp291_;
+							ValaGenieScannerState* _tmp292_;
+							gint _tmp292__length1;
+							gchar* _tmp293_;
 							type = VALA_GENIE_TOKEN_TYPE_OPEN_BRACE;
-							_tmp301_ = self->priv->open_brace_count;
-							self->priv->open_brace_count = _tmp301_ + 1;
-							_tmp302_ = self->priv->state_stack;
-							_tmp302__length1 = self->priv->state_stack_length1;
+							_tmp291_ = self->priv->open_brace_count;
+							self->priv->open_brace_count = _tmp291_ + 1;
+							_tmp292_ = self->priv->state_stack;
+							_tmp292__length1 = self->priv->state_stack_length1;
 							_vala_array_add7 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_GENIE_SCANNER_STATE_BRACE);
-							_tmp303_ = self->priv->current;
-							self->priv->current = _tmp303_ + 1;
+							_tmp293_ = self->priv->current;
+							self->priv->current = _tmp293_ + 1;
 							break;
 						}
 						case '}':
 						{
-							gint _tmp304_;
-							ValaGenieScannerState* _tmp305_;
-							gint _tmp305__length1;
-							gchar* _tmp307_;
+							gint _tmp294_;
+							ValaGenieScannerState* _tmp295_;
+							gint _tmp295__length1;
+							gchar* _tmp297_;
 							type = VALA_GENIE_TOKEN_TYPE_CLOSE_BRACE;
-							_tmp304_ = self->priv->open_brace_count;
-							self->priv->open_brace_count = _tmp304_ - 1;
-							_tmp305_ = self->priv->state_stack;
-							_tmp305__length1 = self->priv->state_stack_length1;
-							if (_tmp305__length1 > 0) {
-								gint _tmp306_;
-								_tmp306_ = self->priv->state_stack_length1;
-								self->priv->state_stack_length1 = _tmp306_ - 1;
+							_tmp294_ = self->priv->open_brace_count;
+							self->priv->open_brace_count = _tmp294_ - 1;
+							_tmp295_ = self->priv->state_stack;
+							_tmp295__length1 = self->priv->state_stack_length1;
+							if (_tmp295__length1 > 0) {
+								gint _tmp296_;
+								_tmp296_ = self->priv->state_stack_length1;
+								self->priv->state_stack_length1 = _tmp296_ - 1;
 							}
-							_tmp307_ = self->priv->current;
-							self->priv->current = _tmp307_ + 1;
+							_tmp297_ = self->priv->current;
+							self->priv->current = _tmp297_ + 1;
 							break;
 						}
 						case '(':
 						{
-							gint _tmp308_;
-							ValaGenieScannerState* _tmp309_;
-							gint _tmp309__length1;
-							gchar* _tmp310_;
+							gint _tmp298_;
+							ValaGenieScannerState* _tmp299_;
+							gint _tmp299__length1;
+							gchar* _tmp300_;
 							type = VALA_GENIE_TOKEN_TYPE_OPEN_PARENS;
-							_tmp308_ = self->priv->open_parens_count;
-							self->priv->open_parens_count = _tmp308_ + 1;
-							_tmp309_ = self->priv->state_stack;
-							_tmp309__length1 = self->priv->state_stack_length1;
+							_tmp298_ = self->priv->open_parens_count;
+							self->priv->open_parens_count = _tmp298_ + 1;
+							_tmp299_ = self->priv->state_stack;
+							_tmp299__length1 = self->priv->state_stack_length1;
 							_vala_array_add8 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_GENIE_SCANNER_STATE_PARENS);
-							_tmp310_ = self->priv->current;
-							self->priv->current = _tmp310_ + 1;
+							_tmp300_ = self->priv->current;
+							self->priv->current = _tmp300_ + 1;
 							break;
 						}
 						case ')':
 						{
-							gint _tmp311_;
-							gchar* _tmp312_;
-							ValaGenieScannerState* _tmp313_;
-							gint _tmp313__length1;
-							gboolean _tmp315_ = FALSE;
+							gint _tmp301_;
+							gchar* _tmp302_;
+							ValaGenieScannerState* _tmp303_;
+							gint _tmp303__length1;
+							gboolean _tmp305_ = FALSE;
 							type = VALA_GENIE_TOKEN_TYPE_CLOSE_PARENS;
-							_tmp311_ = self->priv->open_parens_count;
-							self->priv->open_parens_count = _tmp311_ - 1;
-							_tmp312_ = self->priv->current;
-							self->priv->current = _tmp312_ + 1;
-							_tmp313_ = self->priv->state_stack;
-							_tmp313__length1 = self->priv->state_stack_length1;
-							if (_tmp313__length1 > 0) {
-								gint _tmp314_;
-								_tmp314_ = self->priv->state_stack_length1;
-								self->priv->state_stack_length1 = _tmp314_ - 1;
+							_tmp301_ = self->priv->open_parens_count;
+							self->priv->open_parens_count = _tmp301_ - 1;
+							_tmp302_ = self->priv->current;
+							self->priv->current = _tmp302_ + 1;
+							_tmp303_ = self->priv->state_stack;
+							_tmp303__length1 = self->priv->state_stack_length1;
+							if (_tmp303__length1 > 0) {
+								gint _tmp304_;
+								_tmp304_ = self->priv->state_stack_length1;
+								self->priv->state_stack_length1 = _tmp304_ - 1;
 							}
-							_tmp315_ = vala_genie_scanner_in_template (self);
-							if (_tmp315_) {
+							_tmp305_ = vala_genie_scanner_in_template (self);
+							if (_tmp305_) {
 								type = VALA_GENIE_TOKEN_TYPE_COMMA;
 							}
 							break;
 						}
 						case '[':
 						{
-							ValaGenieScannerState* _tmp316_;
-							gint _tmp316__length1;
-							gchar* _tmp317_;
+							ValaGenieScannerState* _tmp306_;
+							gint _tmp306__length1;
+							gchar* _tmp307_;
 							type = VALA_GENIE_TOKEN_TYPE_OPEN_BRACKET;
-							_tmp316_ = self->priv->state_stack;
-							_tmp316__length1 = self->priv->state_stack_length1;
+							_tmp306_ = self->priv->state_stack;
+							_tmp306__length1 = self->priv->state_stack_length1;
 							_vala_array_add9 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_GENIE_SCANNER_STATE_BRACKET);
-							_tmp317_ = self->priv->current;
-							self->priv->current = _tmp317_ + 1;
+							_tmp307_ = self->priv->current;
+							self->priv->current = _tmp307_ + 1;
 							break;
 						}
 						case ']':
 						{
-							ValaGenieScannerState* _tmp318_;
-							gint _tmp318__length1;
-							gchar* _tmp320_;
+							ValaGenieScannerState* _tmp308_;
+							gint _tmp308__length1;
+							gchar* _tmp310_;
 							type = VALA_GENIE_TOKEN_TYPE_CLOSE_BRACKET;
-							_tmp318_ = self->priv->state_stack;
-							_tmp318__length1 = self->priv->state_stack_length1;
-							if (_tmp318__length1 > 0) {
-								gint _tmp319_;
-								_tmp319_ = self->priv->state_stack_length1;
-								self->priv->state_stack_length1 = _tmp319_ - 1;
+							_tmp308_ = self->priv->state_stack;
+							_tmp308__length1 = self->priv->state_stack_length1;
+							if (_tmp308__length1 > 0) {
+								gint _tmp309_;
+								_tmp309_ = self->priv->state_stack_length1;
+								self->priv->state_stack_length1 = _tmp309_ - 1;
 							}
-							_tmp320_ = self->priv->current;
-							self->priv->current = _tmp320_ + 1;
+							_tmp310_ = self->priv->current;
+							self->priv->current = _tmp310_ + 1;
 							break;
 						}
 						case '.':
 						{
-							gchar* _tmp321_;
-							gchar* _tmp322_;
-							gchar* _tmp323_;
+							gchar* _tmp311_;
+							gchar* _tmp312_;
+							gchar* _tmp313_;
 							type = VALA_GENIE_TOKEN_TYPE_DOT;
-							_tmp321_ = self->priv->current;
-							self->priv->current = _tmp321_ + 1;
-							_tmp322_ = self->priv->current;
-							_tmp323_ = self->priv->end;
-							if (_tmp322_ < (_tmp323_ - 1)) {
-								gboolean _tmp324_ = FALSE;
-								gchar* _tmp325_;
-								gchar _tmp326_;
-								gboolean _tmp329_;
-								_tmp325_ = self->priv->current;
-								_tmp326_ = _tmp325_[0];
-								if (_tmp326_ == '.') {
-									gchar* _tmp327_;
-									gchar _tmp328_;
-									_tmp327_ = self->priv->current;
-									_tmp328_ = _tmp327_[1];
-									_tmp324_ = _tmp328_ == '.';
+							_tmp311_ = self->priv->current;
+							self->priv->current = _tmp311_ + 1;
+							_tmp312_ = self->priv->current;
+							_tmp313_ = self->priv->end;
+							if (_tmp312_ < (_tmp313_ - 1)) {
+								gboolean _tmp314_ = FALSE;
+								gchar* _tmp315_;
+								gchar _tmp316_;
+								gboolean _tmp319_;
+								_tmp315_ = self->priv->current;
+								_tmp316_ = _tmp315_[0];
+								if (_tmp316_ == '.') {
+									gchar* _tmp317_;
+									gchar _tmp318_;
+									_tmp317_ = self->priv->current;
+									_tmp318_ = _tmp317_[1];
+									_tmp314_ = _tmp318_ == '.';
 								} else {
-									_tmp324_ = FALSE;
+									_tmp314_ = FALSE;
 								}
-								_tmp329_ = _tmp324_;
-								if (_tmp329_) {
-									gchar* _tmp330_;
+								_tmp319_ = _tmp314_;
+								if (_tmp319_) {
+									gchar* _tmp320_;
 									type = VALA_GENIE_TOKEN_TYPE_ELLIPSIS;
-									_tmp330_ = self->priv->current;
-									self->priv->current = _tmp330_ + 2;
+									_tmp320_ = self->priv->current;
+									self->priv->current = _tmp320_ + 2;
 								}
 							}
 							break;
 						}
 						case ':':
 						{
-							gchar* _tmp331_;
+							gchar* _tmp321_;
 							type = VALA_GENIE_TOKEN_TYPE_COLON;
-							_tmp331_ = self->priv->current;
-							self->priv->current = _tmp331_ + 1;
+							_tmp321_ = self->priv->current;
+							self->priv->current = _tmp321_ + 1;
 							break;
 						}
 						case ',':
 						{
-							gchar* _tmp332_;
+							gchar* _tmp322_;
 							type = VALA_GENIE_TOKEN_TYPE_COMMA;
-							_tmp332_ = self->priv->current;
-							self->priv->current = _tmp332_ + 1;
+							_tmp322_ = self->priv->current;
+							self->priv->current = _tmp322_ + 1;
 							break;
 						}
 						case ';':
 						{
-							gchar* _tmp333_;
+							gchar* _tmp323_;
 							type = VALA_GENIE_TOKEN_TYPE_SEMICOLON;
-							_tmp333_ = self->priv->current;
-							self->priv->current = _tmp333_ + 1;
+							_tmp323_ = self->priv->current;
+							self->priv->current = _tmp323_ + 1;
 							break;
 						}
 						case '#':
 						{
-							gchar* _tmp334_;
+							gchar* _tmp324_;
 							type = VALA_GENIE_TOKEN_TYPE_HASH;
-							_tmp334_ = self->priv->current;
-							self->priv->current = _tmp334_ + 1;
+							_tmp324_ = self->priv->current;
+							self->priv->current = _tmp324_ + 1;
 							break;
 						}
 						case '?':
 						{
-							gchar* _tmp335_;
+							gchar* _tmp325_;
 							type = VALA_GENIE_TOKEN_TYPE_INTERR;
-							_tmp335_ = self->priv->current;
-							self->priv->current = _tmp335_ + 1;
+							_tmp325_ = self->priv->current;
+							self->priv->current = _tmp325_ + 1;
 							break;
 						}
 						case '|':
 						{
-							gchar* _tmp336_;
-							gchar* _tmp337_;
-							gchar* _tmp338_;
+							gchar* _tmp326_;
+							gchar* _tmp327_;
+							gchar* _tmp328_;
 							type = VALA_GENIE_TOKEN_TYPE_BITWISE_OR;
-							_tmp336_ = self->priv->current;
-							self->priv->current = _tmp336_ + 1;
-							_tmp337_ = self->priv->current;
-							_tmp338_ = self->priv->end;
-							if (_tmp337_ < _tmp338_) {
-								gchar* _tmp339_;
-								gchar _tmp340_;
-								_tmp339_ = self->priv->current;
-								_tmp340_ = _tmp339_[0];
-								switch (_tmp340_) {
+							_tmp326_ = self->priv->current;
+							self->priv->current = _tmp326_ + 1;
+							_tmp327_ = self->priv->current;
+							_tmp328_ = self->priv->end;
+							if (_tmp327_ < _tmp328_) {
+								gchar* _tmp329_;
+								gchar _tmp330_;
+								_tmp329_ = self->priv->current;
+								_tmp330_ = _tmp329_[0];
+								switch (_tmp330_) {
 									case '=':
 									{
-										gchar* _tmp341_;
+										gchar* _tmp331_;
 										type = VALA_GENIE_TOKEN_TYPE_ASSIGN_BITWISE_OR;
-										_tmp341_ = self->priv->current;
-										self->priv->current = _tmp341_ + 1;
+										_tmp331_ = self->priv->current;
+										self->priv->current = _tmp331_ + 1;
 										break;
 									}
 									case '|':
 									{
-										gchar* _tmp342_;
+										gchar* _tmp332_;
 										type = VALA_GENIE_TOKEN_TYPE_OP_OR;
-										_tmp342_ = self->priv->current;
-										self->priv->current = _tmp342_ + 1;
+										_tmp332_ = self->priv->current;
+										self->priv->current = _tmp332_ + 1;
 										break;
 									}
 									default:
@@ -4309,34 +4280,34 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 						}
 						case '&':
 						{
-							gchar* _tmp343_;
-							gchar* _tmp344_;
-							gchar* _tmp345_;
+							gchar* _tmp333_;
+							gchar* _tmp334_;
+							gchar* _tmp335_;
 							type = VALA_GENIE_TOKEN_TYPE_BITWISE_AND;
-							_tmp343_ = self->priv->current;
-							self->priv->current = _tmp343_ + 1;
-							_tmp344_ = self->priv->current;
-							_tmp345_ = self->priv->end;
-							if (_tmp344_ < _tmp345_) {
-								gchar* _tmp346_;
-								gchar _tmp347_;
-								_tmp346_ = self->priv->current;
-								_tmp347_ = _tmp346_[0];
-								switch (_tmp347_) {
+							_tmp333_ = self->priv->current;
+							self->priv->current = _tmp333_ + 1;
+							_tmp334_ = self->priv->current;
+							_tmp335_ = self->priv->end;
+							if (_tmp334_ < _tmp335_) {
+								gchar* _tmp336_;
+								gchar _tmp337_;
+								_tmp336_ = self->priv->current;
+								_tmp337_ = _tmp336_[0];
+								switch (_tmp337_) {
 									case '=':
 									{
-										gchar* _tmp348_;
+										gchar* _tmp338_;
 										type = VALA_GENIE_TOKEN_TYPE_ASSIGN_BITWISE_AND;
-										_tmp348_ = self->priv->current;
-										self->priv->current = _tmp348_ + 1;
+										_tmp338_ = self->priv->current;
+										self->priv->current = _tmp338_ + 1;
 										break;
 									}
 									case '&':
 									{
-										gchar* _tmp349_;
+										gchar* _tmp339_;
 										type = VALA_GENIE_TOKEN_TYPE_OP_AND;
-										_tmp349_ = self->priv->current;
-										self->priv->current = _tmp349_ + 1;
+										_tmp339_ = self->priv->current;
+										self->priv->current = _tmp339_ + 1;
 										break;
 									}
 									default:
@@ -4347,72 +4318,72 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 						}
 						case '^':
 						{
-							gchar* _tmp350_;
-							gboolean _tmp351_ = FALSE;
-							gchar* _tmp352_;
-							gchar* _tmp353_;
-							gboolean _tmp356_;
+							gchar* _tmp340_;
+							gboolean _tmp341_ = FALSE;
+							gchar* _tmp342_;
+							gchar* _tmp343_;
+							gboolean _tmp346_;
 							type = VALA_GENIE_TOKEN_TYPE_CARRET;
-							_tmp350_ = self->priv->current;
-							self->priv->current = _tmp350_ + 1;
-							_tmp352_ = self->priv->current;
-							_tmp353_ = self->priv->end;
-							if (_tmp352_ < _tmp353_) {
-								gchar* _tmp354_;
-								gchar _tmp355_;
-								_tmp354_ = self->priv->current;
-								_tmp355_ = _tmp354_[0];
-								_tmp351_ = _tmp355_ == '=';
+							_tmp340_ = self->priv->current;
+							self->priv->current = _tmp340_ + 1;
+							_tmp342_ = self->priv->current;
+							_tmp343_ = self->priv->end;
+							if (_tmp342_ < _tmp343_) {
+								gchar* _tmp344_;
+								gchar _tmp345_;
+								_tmp344_ = self->priv->current;
+								_tmp345_ = _tmp344_[0];
+								_tmp341_ = _tmp345_ == '=';
 							} else {
-								_tmp351_ = FALSE;
+								_tmp341_ = FALSE;
 							}
-							_tmp356_ = _tmp351_;
-							if (_tmp356_) {
-								gchar* _tmp357_;
+							_tmp346_ = _tmp341_;
+							if (_tmp346_) {
+								gchar* _tmp347_;
 								type = VALA_GENIE_TOKEN_TYPE_ASSIGN_BITWISE_XOR;
-								_tmp357_ = self->priv->current;
-								self->priv->current = _tmp357_ + 1;
+								_tmp347_ = self->priv->current;
+								self->priv->current = _tmp347_ + 1;
 							}
 							break;
 						}
 						case '~':
 						{
-							gchar* _tmp358_;
+							gchar* _tmp348_;
 							type = VALA_GENIE_TOKEN_TYPE_TILDE;
-							_tmp358_ = self->priv->current;
-							self->priv->current = _tmp358_ + 1;
+							_tmp348_ = self->priv->current;
+							self->priv->current = _tmp348_ + 1;
 							break;
 						}
 						case '=':
 						{
-							gchar* _tmp359_;
-							gchar* _tmp360_;
-							gchar* _tmp361_;
+							gchar* _tmp349_;
+							gchar* _tmp350_;
+							gchar* _tmp351_;
 							type = VALA_GENIE_TOKEN_TYPE_ASSIGN;
-							_tmp359_ = self->priv->current;
-							self->priv->current = _tmp359_ + 1;
-							_tmp360_ = self->priv->current;
-							_tmp361_ = self->priv->end;
-							if (_tmp360_ < _tmp361_) {
-								gchar* _tmp362_;
-								gchar _tmp363_;
-								_tmp362_ = self->priv->current;
-								_tmp363_ = _tmp362_[0];
-								switch (_tmp363_) {
+							_tmp349_ = self->priv->current;
+							self->priv->current = _tmp349_ + 1;
+							_tmp350_ = self->priv->current;
+							_tmp351_ = self->priv->end;
+							if (_tmp350_ < _tmp351_) {
+								gchar* _tmp352_;
+								gchar _tmp353_;
+								_tmp352_ = self->priv->current;
+								_tmp353_ = _tmp352_[0];
+								switch (_tmp353_) {
 									case '=':
 									{
-										gchar* _tmp364_;
+										gchar* _tmp354_;
 										type = VALA_GENIE_TOKEN_TYPE_OP_EQ;
-										_tmp364_ = self->priv->current;
-										self->priv->current = _tmp364_ + 1;
+										_tmp354_ = self->priv->current;
+										self->priv->current = _tmp354_ + 1;
 										break;
 									}
 									case '>':
 									{
-										gchar* _tmp365_;
+										gchar* _tmp355_;
 										type = VALA_GENIE_TOKEN_TYPE_LAMBDA;
-										_tmp365_ = self->priv->current;
-										self->priv->current = _tmp365_ + 1;
+										_tmp355_ = self->priv->current;
+										self->priv->current = _tmp355_ + 1;
 										break;
 									}
 									default:
@@ -4423,55 +4394,55 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 						}
 						case '<':
 						{
-							gchar* _tmp366_;
-							gchar* _tmp367_;
-							gchar* _tmp368_;
+							gchar* _tmp356_;
+							gchar* _tmp357_;
+							gchar* _tmp358_;
 							type = VALA_GENIE_TOKEN_TYPE_OP_LT;
-							_tmp366_ = self->priv->current;
-							self->priv->current = _tmp366_ + 1;
-							_tmp367_ = self->priv->current;
-							_tmp368_ = self->priv->end;
-							if (_tmp367_ < _tmp368_) {
-								gchar* _tmp369_;
-								gchar _tmp370_;
-								_tmp369_ = self->priv->current;
-								_tmp370_ = _tmp369_[0];
-								switch (_tmp370_) {
+							_tmp356_ = self->priv->current;
+							self->priv->current = _tmp356_ + 1;
+							_tmp357_ = self->priv->current;
+							_tmp358_ = self->priv->end;
+							if (_tmp357_ < _tmp358_) {
+								gchar* _tmp359_;
+								gchar _tmp360_;
+								_tmp359_ = self->priv->current;
+								_tmp360_ = _tmp359_[0];
+								switch (_tmp360_) {
 									case '=':
 									{
-										gchar* _tmp371_;
+										gchar* _tmp361_;
 										type = VALA_GENIE_TOKEN_TYPE_OP_LE;
-										_tmp371_ = self->priv->current;
-										self->priv->current = _tmp371_ + 1;
+										_tmp361_ = self->priv->current;
+										self->priv->current = _tmp361_ + 1;
 										break;
 									}
 									case '<':
 									{
-										gchar* _tmp372_;
-										gboolean _tmp373_ = FALSE;
-										gchar* _tmp374_;
-										gchar* _tmp375_;
-										gboolean _tmp378_;
+										gchar* _tmp362_;
+										gboolean _tmp363_ = FALSE;
+										gchar* _tmp364_;
+										gchar* _tmp365_;
+										gboolean _tmp368_;
 										type = VALA_GENIE_TOKEN_TYPE_OP_SHIFT_LEFT;
-										_tmp372_ = self->priv->current;
-										self->priv->current = _tmp372_ + 1;
-										_tmp374_ = self->priv->current;
-										_tmp375_ = self->priv->end;
-										if (_tmp374_ < _tmp375_) {
-											gchar* _tmp376_;
-											gchar _tmp377_;
-											_tmp376_ = self->priv->current;
-											_tmp377_ = _tmp376_[0];
-											_tmp373_ = _tmp377_ == '=';
+										_tmp362_ = self->priv->current;
+										self->priv->current = _tmp362_ + 1;
+										_tmp364_ = self->priv->current;
+										_tmp365_ = self->priv->end;
+										if (_tmp364_ < _tmp365_) {
+											gchar* _tmp366_;
+											gchar _tmp367_;
+											_tmp366_ = self->priv->current;
+											_tmp367_ = _tmp366_[0];
+											_tmp363_ = _tmp367_ == '=';
 										} else {
-											_tmp373_ = FALSE;
+											_tmp363_ = FALSE;
 										}
-										_tmp378_ = _tmp373_;
-										if (_tmp378_) {
-											gchar* _tmp379_;
+										_tmp368_ = _tmp363_;
+										if (_tmp368_) {
+											gchar* _tmp369_;
 											type = VALA_GENIE_TOKEN_TYPE_ASSIGN_SHIFT_LEFT;
-											_tmp379_ = self->priv->current;
-											self->priv->current = _tmp379_ + 1;
+											_tmp369_ = self->priv->current;
+											self->priv->current = _tmp369_ + 1;
 										}
 										break;
 									}
@@ -4483,94 +4454,94 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 						}
 						case '>':
 						{
-							gchar* _tmp380_;
-							gboolean _tmp381_ = FALSE;
-							gchar* _tmp382_;
-							gchar* _tmp383_;
-							gboolean _tmp386_;
+							gchar* _tmp370_;
+							gboolean _tmp371_ = FALSE;
+							gchar* _tmp372_;
+							gchar* _tmp373_;
+							gboolean _tmp376_;
 							type = VALA_GENIE_TOKEN_TYPE_OP_GT;
-							_tmp380_ = self->priv->current;
-							self->priv->current = _tmp380_ + 1;
-							_tmp382_ = self->priv->current;
-							_tmp383_ = self->priv->end;
-							if (_tmp382_ < _tmp383_) {
-								gchar* _tmp384_;
-								gchar _tmp385_;
-								_tmp384_ = self->priv->current;
-								_tmp385_ = _tmp384_[0];
-								_tmp381_ = _tmp385_ == '=';
+							_tmp370_ = self->priv->current;
+							self->priv->current = _tmp370_ + 1;
+							_tmp372_ = self->priv->current;
+							_tmp373_ = self->priv->end;
+							if (_tmp372_ < _tmp373_) {
+								gchar* _tmp374_;
+								gchar _tmp375_;
+								_tmp374_ = self->priv->current;
+								_tmp375_ = _tmp374_[0];
+								_tmp371_ = _tmp375_ == '=';
 							} else {
-								_tmp381_ = FALSE;
+								_tmp371_ = FALSE;
 							}
-							_tmp386_ = _tmp381_;
-							if (_tmp386_) {
-								gchar* _tmp387_;
+							_tmp376_ = _tmp371_;
+							if (_tmp376_) {
+								gchar* _tmp377_;
 								type = VALA_GENIE_TOKEN_TYPE_OP_GE;
-								_tmp387_ = self->priv->current;
-								self->priv->current = _tmp387_ + 1;
+								_tmp377_ = self->priv->current;
+								self->priv->current = _tmp377_ + 1;
 							}
 							break;
 						}
 						case '!':
 						{
-							gchar* _tmp388_;
-							gboolean _tmp389_ = FALSE;
-							gchar* _tmp390_;
-							gchar* _tmp391_;
-							gboolean _tmp394_;
+							gchar* _tmp378_;
+							gboolean _tmp379_ = FALSE;
+							gchar* _tmp380_;
+							gchar* _tmp381_;
+							gboolean _tmp384_;
 							type = VALA_GENIE_TOKEN_TYPE_OP_NEG;
-							_tmp388_ = self->priv->current;
-							self->priv->current = _tmp388_ + 1;
-							_tmp390_ = self->priv->current;
-							_tmp391_ = self->priv->end;
-							if (_tmp390_ < _tmp391_) {
-								gchar* _tmp392_;
-								gchar _tmp393_;
-								_tmp392_ = self->priv->current;
-								_tmp393_ = _tmp392_[0];
-								_tmp389_ = _tmp393_ == '=';
+							_tmp378_ = self->priv->current;
+							self->priv->current = _tmp378_ + 1;
+							_tmp380_ = self->priv->current;
+							_tmp381_ = self->priv->end;
+							if (_tmp380_ < _tmp381_) {
+								gchar* _tmp382_;
+								gchar _tmp383_;
+								_tmp382_ = self->priv->current;
+								_tmp383_ = _tmp382_[0];
+								_tmp379_ = _tmp383_ == '=';
 							} else {
-								_tmp389_ = FALSE;
+								_tmp379_ = FALSE;
 							}
-							_tmp394_ = _tmp389_;
-							if (_tmp394_) {
-								gchar* _tmp395_;
+							_tmp384_ = _tmp379_;
+							if (_tmp384_) {
+								gchar* _tmp385_;
 								type = VALA_GENIE_TOKEN_TYPE_OP_NE;
-								_tmp395_ = self->priv->current;
-								self->priv->current = _tmp395_ + 1;
+								_tmp385_ = self->priv->current;
+								self->priv->current = _tmp385_ + 1;
 							}
 							break;
 						}
 						case '+':
 						{
-							gchar* _tmp396_;
-							gchar* _tmp397_;
-							gchar* _tmp398_;
+							gchar* _tmp386_;
+							gchar* _tmp387_;
+							gchar* _tmp388_;
 							type = VALA_GENIE_TOKEN_TYPE_PLUS;
-							_tmp396_ = self->priv->current;
-							self->priv->current = _tmp396_ + 1;
-							_tmp397_ = self->priv->current;
-							_tmp398_ = self->priv->end;
-							if (_tmp397_ < _tmp398_) {
-								gchar* _tmp399_;
-								gchar _tmp400_;
-								_tmp399_ = self->priv->current;
-								_tmp400_ = _tmp399_[0];
-								switch (_tmp400_) {
+							_tmp386_ = self->priv->current;
+							self->priv->current = _tmp386_ + 1;
+							_tmp387_ = self->priv->current;
+							_tmp388_ = self->priv->end;
+							if (_tmp387_ < _tmp388_) {
+								gchar* _tmp389_;
+								gchar _tmp390_;
+								_tmp389_ = self->priv->current;
+								_tmp390_ = _tmp389_[0];
+								switch (_tmp390_) {
 									case '=':
 									{
-										gchar* _tmp401_;
+										gchar* _tmp391_;
 										type = VALA_GENIE_TOKEN_TYPE_ASSIGN_ADD;
-										_tmp401_ = self->priv->current;
-										self->priv->current = _tmp401_ + 1;
+										_tmp391_ = self->priv->current;
+										self->priv->current = _tmp391_ + 1;
 										break;
 									}
 									case '+':
 									{
-										gchar* _tmp402_;
+										gchar* _tmp392_;
 										type = VALA_GENIE_TOKEN_TYPE_OP_INC;
-										_tmp402_ = self->priv->current;
-										self->priv->current = _tmp402_ + 1;
+										_tmp392_ = self->priv->current;
+										self->priv->current = _tmp392_ + 1;
 										break;
 									}
 									default:
@@ -4581,42 +4552,42 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 						}
 						case '-':
 						{
-							gchar* _tmp403_;
-							gchar* _tmp404_;
-							gchar* _tmp405_;
+							gchar* _tmp393_;
+							gchar* _tmp394_;
+							gchar* _tmp395_;
 							type = VALA_GENIE_TOKEN_TYPE_MINUS;
-							_tmp403_ = self->priv->current;
-							self->priv->current = _tmp403_ + 1;
-							_tmp404_ = self->priv->current;
-							_tmp405_ = self->priv->end;
-							if (_tmp404_ < _tmp405_) {
-								gchar* _tmp406_;
-								gchar _tmp407_;
-								_tmp406_ = self->priv->current;
-								_tmp407_ = _tmp406_[0];
-								switch (_tmp407_) {
+							_tmp393_ = self->priv->current;
+							self->priv->current = _tmp393_ + 1;
+							_tmp394_ = self->priv->current;
+							_tmp395_ = self->priv->end;
+							if (_tmp394_ < _tmp395_) {
+								gchar* _tmp396_;
+								gchar _tmp397_;
+								_tmp396_ = self->priv->current;
+								_tmp397_ = _tmp396_[0];
+								switch (_tmp397_) {
 									case '=':
 									{
-										gchar* _tmp408_;
+										gchar* _tmp398_;
 										type = VALA_GENIE_TOKEN_TYPE_ASSIGN_SUB;
-										_tmp408_ = self->priv->current;
-										self->priv->current = _tmp408_ + 1;
+										_tmp398_ = self->priv->current;
+										self->priv->current = _tmp398_ + 1;
 										break;
 									}
 									case '-':
 									{
-										gchar* _tmp409_;
+										gchar* _tmp399_;
 										type = VALA_GENIE_TOKEN_TYPE_OP_DEC;
-										_tmp409_ = self->priv->current;
-										self->priv->current = _tmp409_ + 1;
+										_tmp399_ = self->priv->current;
+										self->priv->current = _tmp399_ + 1;
 										break;
 									}
 									case '>':
 									{
-										gchar* _tmp410_;
+										gchar* _tmp400_;
 										type = VALA_GENIE_TOKEN_TYPE_OP_PTR;
-										_tmp410_ = self->priv->current;
-										self->priv->current = _tmp410_ + 1;
+										_tmp400_ = self->priv->current;
+										self->priv->current = _tmp400_ + 1;
 										break;
 									}
 									default:
@@ -4627,39 +4598,39 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 						}
 						case '*':
 						{
-							gchar* _tmp411_;
-							gboolean _tmp412_ = FALSE;
-							gchar* _tmp413_;
-							gchar* _tmp414_;
-							gboolean _tmp417_;
+							gchar* _tmp401_;
+							gboolean _tmp402_ = FALSE;
+							gchar* _tmp403_;
+							gchar* _tmp404_;
+							gboolean _tmp407_;
 							type = VALA_GENIE_TOKEN_TYPE_STAR;
-							_tmp411_ = self->priv->current;
-							self->priv->current = _tmp411_ + 1;
-							_tmp413_ = self->priv->current;
-							_tmp414_ = self->priv->end;
-							if (_tmp413_ < _tmp414_) {
-								gchar* _tmp415_;
-								gchar _tmp416_;
-								_tmp415_ = self->priv->current;
-								_tmp416_ = _tmp415_[0];
-								_tmp412_ = _tmp416_ == '=';
+							_tmp401_ = self->priv->current;
+							self->priv->current = _tmp401_ + 1;
+							_tmp403_ = self->priv->current;
+							_tmp404_ = self->priv->end;
+							if (_tmp403_ < _tmp404_) {
+								gchar* _tmp405_;
+								gchar _tmp406_;
+								_tmp405_ = self->priv->current;
+								_tmp406_ = _tmp405_[0];
+								_tmp402_ = _tmp406_ == '=';
 							} else {
-								_tmp412_ = FALSE;
+								_tmp402_ = FALSE;
 							}
-							_tmp417_ = _tmp412_;
-							if (_tmp417_) {
-								gchar* _tmp418_;
+							_tmp407_ = _tmp402_;
+							if (_tmp407_) {
+								gchar* _tmp408_;
 								type = VALA_GENIE_TOKEN_TYPE_ASSIGN_MUL;
-								_tmp418_ = self->priv->current;
-								self->priv->current = _tmp418_ + 1;
+								_tmp408_ = self->priv->current;
+								self->priv->current = _tmp408_ + 1;
 							}
 							break;
 						}
 						case '/':
 						{
-							ValaGenieTokenType _tmp419_;
-							_tmp419_ = self->priv->last_token;
-							switch (_tmp419_) {
+							ValaGenieTokenType _tmp409_;
+							_tmp409_ = self->priv->last_token;
+							switch (_tmp409_) {
 								case VALA_GENIE_TOKEN_TYPE_ASSIGN:
 								case VALA_GENIE_TOKEN_TYPE_COMMA:
 								case VALA_GENIE_TOKEN_TYPE_MINUS:
@@ -4679,44 +4650,44 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 								case VALA_GENIE_TOKEN_TYPE_PLUS:
 								case VALA_GENIE_TOKEN_TYPE_RETURN:
 								{
-									ValaGenieScannerState* _tmp420_;
-									gint _tmp420__length1;
-									gchar* _tmp421_;
+									ValaGenieScannerState* _tmp410_;
+									gint _tmp410__length1;
+									gchar* _tmp411_;
 									type = VALA_GENIE_TOKEN_TYPE_OPEN_REGEX_LITERAL;
-									_tmp420_ = self->priv->state_stack;
-									_tmp420__length1 = self->priv->state_stack_length1;
+									_tmp410_ = self->priv->state_stack;
+									_tmp410__length1 = self->priv->state_stack_length1;
 									_vala_array_add10 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_GENIE_SCANNER_STATE_REGEX_LITERAL);
-									_tmp421_ = self->priv->current;
-									self->priv->current = _tmp421_ + 1;
+									_tmp411_ = self->priv->current;
+									self->priv->current = _tmp411_ + 1;
 									break;
 								}
 								default:
 								{
-									gchar* _tmp422_;
-									gboolean _tmp423_ = FALSE;
-									gchar* _tmp424_;
-									gchar* _tmp425_;
-									gboolean _tmp428_;
+									gchar* _tmp412_;
+									gboolean _tmp413_ = FALSE;
+									gchar* _tmp414_;
+									gchar* _tmp415_;
+									gboolean _tmp418_;
 									type = VALA_GENIE_TOKEN_TYPE_DIV;
-									_tmp422_ = self->priv->current;
-									self->priv->current = _tmp422_ + 1;
-									_tmp424_ = self->priv->current;
-									_tmp425_ = self->priv->end;
-									if (_tmp424_ < _tmp425_) {
-										gchar* _tmp426_;
-										gchar _tmp427_;
-										_tmp426_ = self->priv->current;
-										_tmp427_ = _tmp426_[0];
-										_tmp423_ = _tmp427_ == '=';
+									_tmp412_ = self->priv->current;
+									self->priv->current = _tmp412_ + 1;
+									_tmp414_ = self->priv->current;
+									_tmp415_ = self->priv->end;
+									if (_tmp414_ < _tmp415_) {
+										gchar* _tmp416_;
+										gchar _tmp417_;
+										_tmp416_ = self->priv->current;
+										_tmp417_ = _tmp416_[0];
+										_tmp413_ = _tmp417_ == '=';
 									} else {
-										_tmp423_ = FALSE;
+										_tmp413_ = FALSE;
 									}
-									_tmp428_ = _tmp423_;
-									if (_tmp428_) {
-										gchar* _tmp429_;
+									_tmp418_ = _tmp413_;
+									if (_tmp418_) {
+										gchar* _tmp419_;
 										type = VALA_GENIE_TOKEN_TYPE_ASSIGN_DIV;
-										_tmp429_ = self->priv->current;
-										self->priv->current = _tmp429_ + 1;
+										_tmp419_ = self->priv->current;
+										self->priv->current = _tmp419_ + 1;
 									}
 									break;
 								}
@@ -4725,237 +4696,237 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 						}
 						case '%':
 						{
-							gchar* _tmp430_;
-							gboolean _tmp431_ = FALSE;
-							gchar* _tmp432_;
-							gchar* _tmp433_;
-							gboolean _tmp436_;
+							gchar* _tmp420_;
+							gboolean _tmp421_ = FALSE;
+							gchar* _tmp422_;
+							gchar* _tmp423_;
+							gboolean _tmp426_;
 							type = VALA_GENIE_TOKEN_TYPE_PERCENT;
-							_tmp430_ = self->priv->current;
-							self->priv->current = _tmp430_ + 1;
-							_tmp432_ = self->priv->current;
-							_tmp433_ = self->priv->end;
-							if (_tmp432_ < _tmp433_) {
-								gchar* _tmp434_;
-								gchar _tmp435_;
-								_tmp434_ = self->priv->current;
-								_tmp435_ = _tmp434_[0];
-								_tmp431_ = _tmp435_ == '=';
+							_tmp420_ = self->priv->current;
+							self->priv->current = _tmp420_ + 1;
+							_tmp422_ = self->priv->current;
+							_tmp423_ = self->priv->end;
+							if (_tmp422_ < _tmp423_) {
+								gchar* _tmp424_;
+								gchar _tmp425_;
+								_tmp424_ = self->priv->current;
+								_tmp425_ = _tmp424_[0];
+								_tmp421_ = _tmp425_ == '=';
 							} else {
-								_tmp431_ = FALSE;
+								_tmp421_ = FALSE;
 							}
-							_tmp436_ = _tmp431_;
-							if (_tmp436_) {
-								gchar* _tmp437_;
+							_tmp426_ = _tmp421_;
+							if (_tmp426_) {
+								gchar* _tmp427_;
 								type = VALA_GENIE_TOKEN_TYPE_ASSIGN_PERCENT;
-								_tmp437_ = self->priv->current;
-								self->priv->current = _tmp437_ + 1;
+								_tmp427_ = self->priv->current;
+								self->priv->current = _tmp427_ + 1;
 							}
 							break;
 						}
 						case '\'':
 						case '"':
 						{
-							gchar* _tmp438_;
-							gchar _tmp439_;
-							gchar* _tmp505_;
-							gboolean _tmp565_ = FALSE;
-							gchar* _tmp566_;
-							gchar* _tmp567_;
-							gboolean _tmp570_;
-							_tmp438_ = begin;
-							_tmp439_ = _tmp438_[0];
-							if (_tmp439_ == '\'') {
+							gchar* _tmp428_;
+							gchar _tmp429_;
+							gchar* _tmp495_;
+							gboolean _tmp555_ = FALSE;
+							gchar* _tmp556_;
+							gchar* _tmp557_;
+							gboolean _tmp560_;
+							_tmp428_ = begin;
+							_tmp429_ = _tmp428_[0];
+							if (_tmp429_ == '\'') {
 								type = VALA_GENIE_TOKEN_TYPE_CHARACTER_LITERAL;
 							} else {
-								gboolean _tmp440_ = FALSE;
-								gboolean _tmp441_ = FALSE;
-								gchar* _tmp442_;
-								gchar* _tmp443_;
-								gboolean _tmp446_;
-								gboolean _tmp449_;
-								_tmp442_ = self->priv->current;
-								_tmp443_ = self->priv->end;
-								if (_tmp442_ < (_tmp443_ - 6)) {
-									gchar* _tmp444_;
-									gchar _tmp445_;
-									_tmp444_ = begin;
-									_tmp445_ = _tmp444_[1];
-									_tmp441_ = _tmp445_ == '"';
+								gboolean _tmp430_ = FALSE;
+								gboolean _tmp431_ = FALSE;
+								gchar* _tmp432_;
+								gchar* _tmp433_;
+								gboolean _tmp436_;
+								gboolean _tmp439_;
+								_tmp432_ = self->priv->current;
+								_tmp433_ = self->priv->end;
+								if (_tmp432_ < (_tmp433_ - 6)) {
+									gchar* _tmp434_;
+									gchar _tmp435_;
+									_tmp434_ = begin;
+									_tmp435_ = _tmp434_[1];
+									_tmp431_ = _tmp435_ == '"';
 								} else {
-									_tmp441_ = FALSE;
+									_tmp431_ = FALSE;
 								}
-								_tmp446_ = _tmp441_;
-								if (_tmp446_) {
-									gchar* _tmp447_;
-									gchar _tmp448_;
-									_tmp447_ = begin;
-									_tmp448_ = _tmp447_[2];
-									_tmp440_ = _tmp448_ == '"';
+								_tmp436_ = _tmp431_;
+								if (_tmp436_) {
+									gchar* _tmp437_;
+									gchar _tmp438_;
+									_tmp437_ = begin;
+									_tmp438_ = _tmp437_[2];
+									_tmp430_ = _tmp438_ == '"';
 								} else {
-									_tmp440_ = FALSE;
+									_tmp430_ = FALSE;
 								}
-								_tmp449_ = _tmp440_;
-								if (_tmp449_) {
-									gchar* _tmp450_;
-									gboolean _tmp485_ = FALSE;
-									gboolean _tmp486_ = FALSE;
-									gchar* _tmp487_;
-									gchar _tmp488_;
-									gboolean _tmp491_;
-									gboolean _tmp494_;
+								_tmp439_ = _tmp430_;
+								if (_tmp439_) {
+									gchar* _tmp440_;
+									gboolean _tmp475_ = FALSE;
+									gboolean _tmp476_ = FALSE;
+									gchar* _tmp477_;
+									gchar _tmp478_;
+									gboolean _tmp481_;
+									gboolean _tmp484_;
 									type = VALA_GENIE_TOKEN_TYPE_VERBATIM_STRING_LITERAL;
 									token_length_in_chars = 6;
-									_tmp450_ = self->priv->current;
-									self->priv->current = _tmp450_ + 3;
+									_tmp440_ = self->priv->current;
+									self->priv->current = _tmp440_ + 3;
 									while (TRUE) {
-										gchar* _tmp451_;
-										gchar* _tmp452_;
-										gboolean _tmp453_ = FALSE;
-										gboolean _tmp454_ = FALSE;
-										gchar* _tmp455_;
-										gchar _tmp456_;
-										gboolean _tmp459_;
-										gboolean _tmp462_;
-										_tmp451_ = self->priv->current;
-										_tmp452_ = self->priv->end;
-										if (!(_tmp451_ < (_tmp452_ - 4))) {
+										gchar* _tmp441_;
+										gchar* _tmp442_;
+										gboolean _tmp443_ = FALSE;
+										gboolean _tmp444_ = FALSE;
+										gchar* _tmp445_;
+										gchar _tmp446_;
+										gboolean _tmp449_;
+										gboolean _tmp452_;
+										_tmp441_ = self->priv->current;
+										_tmp442_ = self->priv->end;
+										if (!(_tmp441_ < (_tmp442_ - 4))) {
 											break;
 										}
-										_tmp455_ = self->priv->current;
-										_tmp456_ = _tmp455_[0];
-										if (_tmp456_ == '"') {
-											gchar* _tmp457_;
-											gchar _tmp458_;
-											_tmp457_ = self->priv->current;
-											_tmp458_ = _tmp457_[1];
-											_tmp454_ = _tmp458_ == '"';
+										_tmp445_ = self->priv->current;
+										_tmp446_ = _tmp445_[0];
+										if (_tmp446_ == '"') {
+											gchar* _tmp447_;
+											gchar _tmp448_;
+											_tmp447_ = self->priv->current;
+											_tmp448_ = _tmp447_[1];
+											_tmp444_ = _tmp448_ == '"';
 										} else {
-											_tmp454_ = FALSE;
+											_tmp444_ = FALSE;
 										}
-										_tmp459_ = _tmp454_;
-										if (_tmp459_) {
-											gchar* _tmp460_;
-											gchar _tmp461_;
-											_tmp460_ = self->priv->current;
-											_tmp461_ = _tmp460_[2];
-											_tmp453_ = _tmp461_ == '"';
+										_tmp449_ = _tmp444_;
+										if (_tmp449_) {
+											gchar* _tmp450_;
+											gchar _tmp451_;
+											_tmp450_ = self->priv->current;
+											_tmp451_ = _tmp450_[2];
+											_tmp443_ = _tmp451_ == '"';
 										} else {
-											_tmp453_ = FALSE;
+											_tmp443_ = FALSE;
 										}
-										_tmp462_ = _tmp453_;
-										if (_tmp462_) {
+										_tmp452_ = _tmp443_;
+										if (_tmp452_) {
 											break;
 										} else {
-											gchar* _tmp463_;
-											gchar _tmp464_;
-											_tmp463_ = self->priv->current;
-											_tmp464_ = _tmp463_[0];
-											if (_tmp464_ == '\n') {
-												gchar* _tmp465_;
-												gint _tmp466_;
-												_tmp465_ = self->priv->current;
-												self->priv->current = _tmp465_ + 1;
-												_tmp466_ = self->priv->line;
-												self->priv->line = _tmp466_ + 1;
+											gchar* _tmp453_;
+											gchar _tmp454_;
+											_tmp453_ = self->priv->current;
+											_tmp454_ = _tmp453_[0];
+											if (_tmp454_ == '\n') {
+												gchar* _tmp455_;
+												gint _tmp456_;
+												_tmp455_ = self->priv->current;
+												self->priv->current = _tmp455_ + 1;
+												_tmp456_ = self->priv->line;
+												self->priv->line = _tmp456_ + 1;
 												self->priv->column = 1;
 												token_length_in_chars = 3;
 											} else {
-												gchar* _tmp467_;
-												gchar* _tmp468_;
-												gchar* _tmp469_;
-												gunichar _tmp470_ = 0U;
+												gchar* _tmp457_;
+												gchar* _tmp458_;
+												gchar* _tmp459_;
+												gunichar _tmp460_ = 0U;
 												gunichar u;
-												gunichar _tmp471_;
-												_tmp467_ = self->priv->current;
-												_tmp468_ = self->priv->end;
-												_tmp469_ = self->priv->current;
-												_tmp470_ = g_utf8_get_char_validated ((const gchar*) _tmp467_, (gssize) ((glong) (_tmp468_ - _tmp469_)));
-												u = _tmp470_;
-												_tmp471_ = u;
-												if (_tmp471_ != ((gunichar) (-1))) {
-													gchar* _tmp472_;
-													gunichar _tmp473_;
-													gint _tmp474_ = 0;
-													gint _tmp475_;
-													_tmp472_ = self->priv->current;
-													_tmp473_ = u;
-													_tmp474_ = g_unichar_to_utf8 (_tmp473_, NULL);
-													self->priv->current = _tmp472_ + _tmp474_;
-													_tmp475_ = token_length_in_chars;
-													token_length_in_chars = _tmp475_ + 1;
+												gunichar _tmp461_;
+												_tmp457_ = self->priv->current;
+												_tmp458_ = self->priv->end;
+												_tmp459_ = self->priv->current;
+												_tmp460_ = g_utf8_get_char_validated ((const gchar*) _tmp457_, (gssize) ((glong) (_tmp458_ - _tmp459_)));
+												u = _tmp460_;
+												_tmp461_ = u;
+												if (_tmp461_ != ((gunichar) (-1))) {
+													gchar* _tmp462_;
+													gunichar _tmp463_;
+													gint _tmp464_ = 0;
+													gint _tmp465_;
+													_tmp462_ = self->priv->current;
+													_tmp463_ = u;
+													_tmp464_ = g_unichar_to_utf8 (_tmp463_, NULL);
+													self->priv->current = _tmp462_ + _tmp464_;
+													_tmp465_ = token_length_in_chars;
+													token_length_in_chars = _tmp465_ + 1;
 												} else {
-													ValaSourceFile* _tmp476_;
-													gint _tmp477_;
-													gint _tmp478_;
-													gint _tmp479_;
-													gint _tmp480_;
-													gint _tmp481_;
-													gint _tmp482_;
-													ValaSourceReference* _tmp483_;
-													ValaSourceReference* _tmp484_;
-													_tmp476_ = self->priv->_source_file;
-													_tmp477_ = self->priv->line;
-													_tmp478_ = self->priv->column;
-													_tmp479_ = token_length_in_chars;
-													_tmp480_ = self->priv->line;
-													_tmp481_ = self->priv->column;
-													_tmp482_ = token_length_in_chars;
-													_tmp483_ = vala_source_reference_new (_tmp476_, _tmp477_, _tmp478_ + _tmp479_, _tmp480_, _tmp481_ + _tmp482_);
-													_tmp484_ = _tmp483_;
-													vala_report_error (_tmp484_, "invalid UTF-8 character");
-													_vala_source_reference_unref0 (_tmp484_);
+													ValaSourceFile* _tmp466_;
+													gint _tmp467_;
+													gint _tmp468_;
+													gint _tmp469_;
+													gint _tmp470_;
+													gint _tmp471_;
+													gint _tmp472_;
+													ValaSourceReference* _tmp473_;
+													ValaSourceReference* _tmp474_;
+													_tmp466_ = self->priv->_source_file;
+													_tmp467_ = self->priv->line;
+													_tmp468_ = self->priv->column;
+													_tmp469_ = token_length_in_chars;
+													_tmp470_ = self->priv->line;
+													_tmp471_ = self->priv->column;
+													_tmp472_ = token_length_in_chars;
+													_tmp473_ = vala_source_reference_new (_tmp466_, _tmp467_, _tmp468_ + _tmp469_, _tmp470_, _tmp471_ + _tmp472_);
+													_tmp474_ = _tmp473_;
+													vala_report_error (_tmp474_, "invalid UTF-8 character");
+													_vala_source_reference_unref0 (_tmp474_);
 												}
 											}
 										}
 									}
-									_tmp487_ = self->priv->current;
-									_tmp488_ = _tmp487_[0];
-									if (_tmp488_ == '"') {
-										gchar* _tmp489_;
-										gchar _tmp490_;
-										_tmp489_ = self->priv->current;
-										_tmp490_ = _tmp489_[1];
-										_tmp486_ = _tmp490_ == '"';
+									_tmp477_ = self->priv->current;
+									_tmp478_ = _tmp477_[0];
+									if (_tmp478_ == '"') {
+										gchar* _tmp479_;
+										gchar _tmp480_;
+										_tmp479_ = self->priv->current;
+										_tmp480_ = _tmp479_[1];
+										_tmp476_ = _tmp480_ == '"';
 									} else {
-										_tmp486_ = FALSE;
+										_tmp476_ = FALSE;
 									}
-									_tmp491_ = _tmp486_;
-									if (_tmp491_) {
-										gchar* _tmp492_;
-										gchar _tmp493_;
-										_tmp492_ = self->priv->current;
-										_tmp493_ = _tmp492_[2];
-										_tmp485_ = _tmp493_ == '"';
+									_tmp481_ = _tmp476_;
+									if (_tmp481_) {
+										gchar* _tmp482_;
+										gchar _tmp483_;
+										_tmp482_ = self->priv->current;
+										_tmp483_ = _tmp482_[2];
+										_tmp475_ = _tmp483_ == '"';
 									} else {
-										_tmp485_ = FALSE;
+										_tmp475_ = FALSE;
 									}
-									_tmp494_ = _tmp485_;
-									if (_tmp494_) {
-										gchar* _tmp495_;
-										_tmp495_ = self->priv->current;
-										self->priv->current = _tmp495_ + 3;
+									_tmp484_ = _tmp475_;
+									if (_tmp484_) {
+										gchar* _tmp485_;
+										_tmp485_ = self->priv->current;
+										self->priv->current = _tmp485_ + 3;
 									} else {
-										ValaSourceFile* _tmp496_;
-										gint _tmp497_;
-										gint _tmp498_;
-										gint _tmp499_;
-										gint _tmp500_;
-										gint _tmp501_;
-										gint _tmp502_;
-										ValaSourceReference* _tmp503_;
-										ValaSourceReference* _tmp504_;
-										_tmp496_ = self->priv->_source_file;
-										_tmp497_ = self->priv->line;
-										_tmp498_ = self->priv->column;
-										_tmp499_ = token_length_in_chars;
-										_tmp500_ = self->priv->line;
-										_tmp501_ = self->priv->column;
-										_tmp502_ = token_length_in_chars;
-										_tmp503_ = vala_source_reference_new (_tmp496_, _tmp497_, _tmp498_ + _tmp499_, _tmp500_, _tmp501_ + _tmp502_);
-										_tmp504_ = _tmp503_;
-										vala_report_error (_tmp504_, "syntax error, expected \"\"\"");
-										_vala_source_reference_unref0 (_tmp504_);
+										ValaSourceFile* _tmp486_;
+										gint _tmp487_;
+										gint _tmp488_;
+										gint _tmp489_;
+										gint _tmp490_;
+										gint _tmp491_;
+										gint _tmp492_;
+										ValaSourceReference* _tmp493_;
+										ValaSourceReference* _tmp494_;
+										_tmp486_ = self->priv->_source_file;
+										_tmp487_ = self->priv->line;
+										_tmp488_ = self->priv->column;
+										_tmp489_ = token_length_in_chars;
+										_tmp490_ = self->priv->line;
+										_tmp491_ = self->priv->column;
+										_tmp492_ = token_length_in_chars;
+										_tmp493_ = vala_source_reference_new (_tmp486_, _tmp487_, _tmp488_ + _tmp489_, _tmp490_, _tmp491_ + _tmp492_);
+										_tmp494_ = _tmp493_;
+										vala_report_error (_tmp494_, "syntax error, expected \"\"\"");
+										_vala_source_reference_unref0 (_tmp494_);
 									}
 									break;
 								} else {
@@ -4963,55 +4934,55 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 								}
 							}
 							token_length_in_chars = 2;
-							_tmp505_ = self->priv->current;
-							self->priv->current = _tmp505_ + 1;
+							_tmp495_ = self->priv->current;
+							self->priv->current = _tmp495_ + 1;
 							while (TRUE) {
-								gboolean _tmp506_ = FALSE;
-								gchar* _tmp507_;
-								gchar* _tmp508_;
-								gboolean _tmp513_;
-								gchar* _tmp514_;
-								gchar _tmp515_;
-								_tmp507_ = self->priv->current;
-								_tmp508_ = self->priv->end;
-								if (_tmp507_ < _tmp508_) {
-									gchar* _tmp509_;
-									gchar _tmp510_;
-									gchar* _tmp511_;
-									gchar _tmp512_;
-									_tmp509_ = self->priv->current;
-									_tmp510_ = _tmp509_[0];
-									_tmp511_ = begin;
-									_tmp512_ = _tmp511_[0];
-									_tmp506_ = _tmp510_ != _tmp512_;
+								gboolean _tmp496_ = FALSE;
+								gchar* _tmp497_;
+								gchar* _tmp498_;
+								gboolean _tmp503_;
+								gchar* _tmp504_;
+								gchar _tmp505_;
+								_tmp497_ = self->priv->current;
+								_tmp498_ = self->priv->end;
+								if (_tmp497_ < _tmp498_) {
+									gchar* _tmp499_;
+									gchar _tmp500_;
+									gchar* _tmp501_;
+									gchar _tmp502_;
+									_tmp499_ = self->priv->current;
+									_tmp500_ = _tmp499_[0];
+									_tmp501_ = begin;
+									_tmp502_ = _tmp501_[0];
+									_tmp496_ = _tmp500_ != _tmp502_;
 								} else {
-									_tmp506_ = FALSE;
+									_tmp496_ = FALSE;
 								}
-								_tmp513_ = _tmp506_;
-								if (!_tmp513_) {
+								_tmp503_ = _tmp496_;
+								if (!_tmp503_) {
 									break;
 								}
-								_tmp514_ = self->priv->current;
-								_tmp515_ = _tmp514_[0];
-								if (_tmp515_ == '\\') {
-									gchar* _tmp516_;
-									gint _tmp517_;
-									gchar* _tmp518_;
-									gchar* _tmp519_;
-									gchar* _tmp520_;
-									gchar _tmp521_;
-									_tmp516_ = self->priv->current;
-									self->priv->current = _tmp516_ + 1;
-									_tmp517_ = token_length_in_chars;
-									token_length_in_chars = _tmp517_ + 1;
-									_tmp518_ = self->priv->current;
-									_tmp519_ = self->priv->end;
-									if (_tmp518_ >= _tmp519_) {
+								_tmp504_ = self->priv->current;
+								_tmp505_ = _tmp504_[0];
+								if (_tmp505_ == '\\') {
+									gchar* _tmp506_;
+									gint _tmp507_;
+									gchar* _tmp508_;
+									gchar* _tmp509_;
+									gchar* _tmp510_;
+									gchar _tmp511_;
+									_tmp506_ = self->priv->current;
+									self->priv->current = _tmp506_ + 1;
+									_tmp507_ = token_length_in_chars;
+									token_length_in_chars = _tmp507_ + 1;
+									_tmp508_ = self->priv->current;
+									_tmp509_ = self->priv->end;
+									if (_tmp508_ >= _tmp509_) {
 										break;
 									}
-									_tmp520_ = self->priv->current;
-									_tmp521_ = _tmp520_[0];
-									switch (_tmp521_) {
+									_tmp510_ = self->priv->current;
+									_tmp511_ = _tmp510_[0];
+									switch (_tmp511_) {
 										case '\'':
 										case '"':
 										case '\\':
@@ -5022,256 +4993,256 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 										case 'r':
 										case 't':
 										{
-											gchar* _tmp522_;
-											gint _tmp523_;
-											_tmp522_ = self->priv->current;
-											self->priv->current = _tmp522_ + 1;
-											_tmp523_ = token_length_in_chars;
-											token_length_in_chars = _tmp523_ + 1;
+											gchar* _tmp512_;
+											gint _tmp513_;
+											_tmp512_ = self->priv->current;
+											self->priv->current = _tmp512_ + 1;
+											_tmp513_ = token_length_in_chars;
+											token_length_in_chars = _tmp513_ + 1;
 											break;
 										}
 										case 'x':
 										{
-											gchar* _tmp524_;
-											gint _tmp525_;
-											_tmp524_ = self->priv->current;
-											self->priv->current = _tmp524_ + 1;
-											_tmp525_ = token_length_in_chars;
-											token_length_in_chars = _tmp525_ + 1;
+											gchar* _tmp514_;
+											gint _tmp515_;
+											_tmp514_ = self->priv->current;
+											self->priv->current = _tmp514_ + 1;
+											_tmp515_ = token_length_in_chars;
+											token_length_in_chars = _tmp515_ + 1;
 											while (TRUE) {
-												gboolean _tmp526_ = FALSE;
-												gchar* _tmp527_;
-												gchar* _tmp528_;
-												gboolean _tmp532_;
-												gchar* _tmp533_;
-												gint _tmp534_;
-												_tmp527_ = self->priv->current;
-												_tmp528_ = self->priv->end;
-												if (_tmp527_ < _tmp528_) {
-													gchar* _tmp529_;
-													gchar _tmp530_;
-													gboolean _tmp531_ = FALSE;
-													_tmp529_ = self->priv->current;
-													_tmp530_ = _tmp529_[0];
-													_tmp531_ = g_ascii_isxdigit (_tmp530_);
-													_tmp526_ = _tmp531_;
+												gboolean _tmp516_ = FALSE;
+												gchar* _tmp517_;
+												gchar* _tmp518_;
+												gboolean _tmp522_;
+												gchar* _tmp523_;
+												gint _tmp524_;
+												_tmp517_ = self->priv->current;
+												_tmp518_ = self->priv->end;
+												if (_tmp517_ < _tmp518_) {
+													gchar* _tmp519_;
+													gchar _tmp520_;
+													gboolean _tmp521_ = FALSE;
+													_tmp519_ = self->priv->current;
+													_tmp520_ = _tmp519_[0];
+													_tmp521_ = g_ascii_isxdigit (_tmp520_);
+													_tmp516_ = _tmp521_;
 												} else {
-													_tmp526_ = FALSE;
+													_tmp516_ = FALSE;
 												}
-												_tmp532_ = _tmp526_;
-												if (!_tmp532_) {
+												_tmp522_ = _tmp516_;
+												if (!_tmp522_) {
 													break;
 												}
-												_tmp533_ = self->priv->current;
-												self->priv->current = _tmp533_ + 1;
-												_tmp534_ = token_length_in_chars;
-												token_length_in_chars = _tmp534_ + 1;
+												_tmp523_ = self->priv->current;
+												self->priv->current = _tmp523_ + 1;
+												_tmp524_ = token_length_in_chars;
+												token_length_in_chars = _tmp524_ + 1;
 											}
 											break;
 										}
 										default:
 										{
-											ValaSourceFile* _tmp535_;
-											gint _tmp536_;
-											gint _tmp537_;
-											gint _tmp538_;
-											gint _tmp539_;
-											gint _tmp540_;
-											gint _tmp541_;
-											ValaSourceReference* _tmp542_;
-											ValaSourceReference* _tmp543_;
-											_tmp535_ = self->priv->_source_file;
-											_tmp536_ = self->priv->line;
-											_tmp537_ = self->priv->column;
-											_tmp538_ = token_length_in_chars;
-											_tmp539_ = self->priv->line;
-											_tmp540_ = self->priv->column;
-											_tmp541_ = token_length_in_chars;
-											_tmp542_ = vala_source_reference_new (_tmp535_, _tmp536_, _tmp537_ + _tmp538_, _tmp539_, _tmp540_ + _tmp541_);
-											_tmp543_ = _tmp542_;
-											vala_report_error (_tmp543_, "invalid escape sequence");
-											_vala_source_reference_unref0 (_tmp543_);
+											ValaSourceFile* _tmp525_;
+											gint _tmp526_;
+											gint _tmp527_;
+											gint _tmp528_;
+											gint _tmp529_;
+											gint _tmp530_;
+											gint _tmp531_;
+											ValaSourceReference* _tmp532_;
+											ValaSourceReference* _tmp533_;
+											_tmp525_ = self->priv->_source_file;
+											_tmp526_ = self->priv->line;
+											_tmp527_ = self->priv->column;
+											_tmp528_ = token_length_in_chars;
+											_tmp529_ = self->priv->line;
+											_tmp530_ = self->priv->column;
+											_tmp531_ = token_length_in_chars;
+											_tmp532_ = vala_source_reference_new (_tmp525_, _tmp526_, _tmp527_ + _tmp528_, _tmp529_, _tmp530_ + _tmp531_);
+											_tmp533_ = _tmp532_;
+											vala_report_error (_tmp533_, "invalid escape sequence");
+											_vala_source_reference_unref0 (_tmp533_);
 											break;
 										}
 									}
 								} else {
-									gchar* _tmp544_;
-									gchar _tmp545_;
-									_tmp544_ = self->priv->current;
-									_tmp545_ = _tmp544_[0];
-									if (_tmp545_ == '\n') {
+									gchar* _tmp534_;
+									gchar _tmp535_;
+									_tmp534_ = self->priv->current;
+									_tmp535_ = _tmp534_[0];
+									if (_tmp535_ == '\n') {
 										break;
 									} else {
-										gchar* _tmp546_;
-										gchar* _tmp547_;
-										gchar* _tmp548_;
-										gunichar _tmp549_ = 0U;
+										gchar* _tmp536_;
+										gchar* _tmp537_;
+										gchar* _tmp538_;
+										gunichar _tmp539_ = 0U;
 										gunichar u;
-										gunichar _tmp550_;
-										_tmp546_ = self->priv->current;
-										_tmp547_ = self->priv->end;
-										_tmp548_ = self->priv->current;
-										_tmp549_ = g_utf8_get_char_validated ((const gchar*) _tmp546_, (gssize) ((glong) (_tmp547_ - _tmp548_)));
-										u = _tmp549_;
-										_tmp550_ = u;
-										if (_tmp550_ != ((gunichar) (-1))) {
-											gchar* _tmp551_;
-											gunichar _tmp552_;
-											gint _tmp553_ = 0;
-											gint _tmp554_;
-											_tmp551_ = self->priv->current;
-											_tmp552_ = u;
-											_tmp553_ = g_unichar_to_utf8 (_tmp552_, NULL);
-											self->priv->current = _tmp551_ + _tmp553_;
-											_tmp554_ = token_length_in_chars;
-											token_length_in_chars = _tmp554_ + 1;
+										gunichar _tmp540_;
+										_tmp536_ = self->priv->current;
+										_tmp537_ = self->priv->end;
+										_tmp538_ = self->priv->current;
+										_tmp539_ = g_utf8_get_char_validated ((const gchar*) _tmp536_, (gssize) ((glong) (_tmp537_ - _tmp538_)));
+										u = _tmp539_;
+										_tmp540_ = u;
+										if (_tmp540_ != ((gunichar) (-1))) {
+											gchar* _tmp541_;
+											gunichar _tmp542_;
+											gint _tmp543_ = 0;
+											gint _tmp544_;
+											_tmp541_ = self->priv->current;
+											_tmp542_ = u;
+											_tmp543_ = g_unichar_to_utf8 (_tmp542_, NULL);
+											self->priv->current = _tmp541_ + _tmp543_;
+											_tmp544_ = token_length_in_chars;
+											token_length_in_chars = _tmp544_ + 1;
 										} else {
-											gchar* _tmp555_;
-											ValaSourceFile* _tmp556_;
-											gint _tmp557_;
-											gint _tmp558_;
-											gint _tmp559_;
-											gint _tmp560_;
-											gint _tmp561_;
-											gint _tmp562_;
-											ValaSourceReference* _tmp563_;
-											ValaSourceReference* _tmp564_;
-											_tmp555_ = self->priv->current;
-											self->priv->current = _tmp555_ + 1;
-											_tmp556_ = self->priv->_source_file;
-											_tmp557_ = self->priv->line;
-											_tmp558_ = self->priv->column;
-											_tmp559_ = token_length_in_chars;
-											_tmp560_ = self->priv->line;
-											_tmp561_ = self->priv->column;
-											_tmp562_ = token_length_in_chars;
-											_tmp563_ = vala_source_reference_new (_tmp556_, _tmp557_, _tmp558_ + _tmp559_, _tmp560_, _tmp561_ + _tmp562_);
-											_tmp564_ = _tmp563_;
-											vala_report_error (_tmp564_, "invalid UTF-8 character");
-											_vala_source_reference_unref0 (_tmp564_);
+											gchar* _tmp545_;
+											ValaSourceFile* _tmp546_;
+											gint _tmp547_;
+											gint _tmp548_;
+											gint _tmp549_;
+											gint _tmp550_;
+											gint _tmp551_;
+											gint _tmp552_;
+											ValaSourceReference* _tmp553_;
+											ValaSourceReference* _tmp554_;
+											_tmp545_ = self->priv->current;
+											self->priv->current = _tmp545_ + 1;
+											_tmp546_ = self->priv->_source_file;
+											_tmp547_ = self->priv->line;
+											_tmp548_ = self->priv->column;
+											_tmp549_ = token_length_in_chars;
+											_tmp550_ = self->priv->line;
+											_tmp551_ = self->priv->column;
+											_tmp552_ = token_length_in_chars;
+											_tmp553_ = vala_source_reference_new (_tmp546_, _tmp547_, _tmp548_ + _tmp549_, _tmp550_, _tmp551_ + _tmp552_);
+											_tmp554_ = _tmp553_;
+											vala_report_error (_tmp554_, "invalid UTF-8 character");
+											_vala_source_reference_unref0 (_tmp554_);
 										}
 									}
 								}
 							}
-							_tmp566_ = self->priv->current;
-							_tmp567_ = self->priv->end;
-							if (_tmp566_ < _tmp567_) {
-								gchar* _tmp568_;
-								gchar _tmp569_;
-								_tmp568_ = self->priv->current;
-								_tmp569_ = _tmp568_[0];
-								_tmp565_ = _tmp569_ != '\n';
+							_tmp556_ = self->priv->current;
+							_tmp557_ = self->priv->end;
+							if (_tmp556_ < _tmp557_) {
+								gchar* _tmp558_;
+								gchar _tmp559_;
+								_tmp558_ = self->priv->current;
+								_tmp559_ = _tmp558_[0];
+								_tmp555_ = _tmp559_ != '\n';
 							} else {
-								_tmp565_ = FALSE;
+								_tmp555_ = FALSE;
 							}
-							_tmp570_ = _tmp565_;
-							if (_tmp570_) {
-								gchar* _tmp571_;
-								_tmp571_ = self->priv->current;
-								self->priv->current = _tmp571_ + 1;
+							_tmp560_ = _tmp555_;
+							if (_tmp560_) {
+								gchar* _tmp561_;
+								_tmp561_ = self->priv->current;
+								self->priv->current = _tmp561_ + 1;
 							} else {
-								ValaSourceFile* _tmp572_;
-								gint _tmp573_;
-								gint _tmp574_;
-								gint _tmp575_;
-								gint _tmp576_;
-								gint _tmp577_;
-								gint _tmp578_;
-								ValaSourceReference* _tmp579_;
-								ValaSourceReference* _tmp580_;
-								gchar* _tmp581_;
-								gchar _tmp582_;
-								gchar* _tmp583_ = NULL;
-								gchar* _tmp584_;
-								_tmp572_ = self->priv->_source_file;
-								_tmp573_ = self->priv->line;
-								_tmp574_ = self->priv->column;
-								_tmp575_ = token_length_in_chars;
-								_tmp576_ = self->priv->line;
-								_tmp577_ = self->priv->column;
-								_tmp578_ = token_length_in_chars;
-								_tmp579_ = vala_source_reference_new (_tmp572_, _tmp573_, _tmp574_ + _tmp575_, _tmp576_, _tmp577_ + _tmp578_);
-								_tmp580_ = _tmp579_;
-								_tmp581_ = begin;
-								_tmp582_ = _tmp581_[0];
-								_tmp583_ = g_strdup_printf ("syntax error, expected %c", (gint) _tmp582_);
-								_tmp584_ = _tmp583_;
-								vala_report_error (_tmp580_, _tmp584_);
-								_g_free0 (_tmp584_);
-								_vala_source_reference_unref0 (_tmp580_);
+								ValaSourceFile* _tmp562_;
+								gint _tmp563_;
+								gint _tmp564_;
+								gint _tmp565_;
+								gint _tmp566_;
+								gint _tmp567_;
+								gint _tmp568_;
+								ValaSourceReference* _tmp569_;
+								ValaSourceReference* _tmp570_;
+								gchar* _tmp571_;
+								gchar _tmp572_;
+								gchar* _tmp573_ = NULL;
+								gchar* _tmp574_;
+								_tmp562_ = self->priv->_source_file;
+								_tmp563_ = self->priv->line;
+								_tmp564_ = self->priv->column;
+								_tmp565_ = token_length_in_chars;
+								_tmp566_ = self->priv->line;
+								_tmp567_ = self->priv->column;
+								_tmp568_ = token_length_in_chars;
+								_tmp569_ = vala_source_reference_new (_tmp562_, _tmp563_, _tmp564_ + _tmp565_, _tmp566_, _tmp567_ + _tmp568_);
+								_tmp570_ = _tmp569_;
+								_tmp571_ = begin;
+								_tmp572_ = _tmp571_[0];
+								_tmp573_ = g_strdup_printf ("syntax error, expected %c", (gint) _tmp572_);
+								_tmp574_ = _tmp573_;
+								vala_report_error (_tmp570_, _tmp574_);
+								_g_free0 (_tmp574_);
+								_vala_source_reference_unref0 (_tmp570_);
 							}
 							break;
 						}
 						default:
 						{
-							gchar* _tmp585_;
-							gchar* _tmp586_;
-							gchar* _tmp587_;
-							gunichar _tmp588_ = 0U;
+							gchar* _tmp575_;
+							gchar* _tmp576_;
+							gchar* _tmp577_;
+							gunichar _tmp578_ = 0U;
 							gunichar u;
-							gunichar _tmp589_;
-							gint _tmp608_;
-							ValaSourceLocation _tmp609_ = {0};
-							ValaSourceLocation _tmp610_ = {0};
-							ValaGenieTokenType _tmp611_ = 0;
-							_tmp585_ = self->priv->current;
-							_tmp586_ = self->priv->end;
-							_tmp587_ = self->priv->current;
-							_tmp588_ = g_utf8_get_char_validated ((const gchar*) _tmp585_, (gssize) ((glong) (_tmp586_ - _tmp587_)));
-							u = _tmp588_;
-							_tmp589_ = u;
-							if (_tmp589_ != ((gunichar) (-1))) {
+							gunichar _tmp579_;
+							gint _tmp598_;
+							ValaSourceLocation _tmp599_ = {0};
+							ValaSourceLocation _tmp600_ = {0};
+							ValaGenieTokenType _tmp601_ = 0;
+							_tmp575_ = self->priv->current;
+							_tmp576_ = self->priv->end;
+							_tmp577_ = self->priv->current;
+							_tmp578_ = g_utf8_get_char_validated ((const gchar*) _tmp575_, (gssize) ((glong) (_tmp576_ - _tmp577_)));
+							u = _tmp578_;
+							_tmp579_ = u;
+							if (_tmp579_ != ((gunichar) (-1))) {
+								gchar* _tmp580_;
+								gunichar _tmp581_;
+								gint _tmp582_ = 0;
+								ValaSourceFile* _tmp583_;
+								gint _tmp584_;
+								gint _tmp585_;
+								gint _tmp586_;
+								gint _tmp587_;
+								ValaSourceReference* _tmp588_;
+								ValaSourceReference* _tmp589_;
+								_tmp580_ = self->priv->current;
+								_tmp581_ = u;
+								_tmp582_ = g_unichar_to_utf8 (_tmp581_, NULL);
+								self->priv->current = _tmp580_ + _tmp582_;
+								_tmp583_ = self->priv->_source_file;
+								_tmp584_ = self->priv->line;
+								_tmp585_ = self->priv->column;
+								_tmp586_ = self->priv->line;
+								_tmp587_ = self->priv->column;
+								_tmp588_ = vala_source_reference_new (_tmp583_, _tmp584_, _tmp585_, _tmp586_, _tmp587_);
+								_tmp589_ = _tmp588_;
+								vala_report_error (_tmp589_, "syntax error, unexpected character");
+								_vala_source_reference_unref0 (_tmp589_);
+							} else {
 								gchar* _tmp590_;
-								gunichar _tmp591_;
-								gint _tmp592_ = 0;
-								ValaSourceFile* _tmp593_;
+								ValaSourceFile* _tmp591_;
+								gint _tmp592_;
+								gint _tmp593_;
 								gint _tmp594_;
 								gint _tmp595_;
-								gint _tmp596_;
-								gint _tmp597_;
-								ValaSourceReference* _tmp598_;
-								ValaSourceReference* _tmp599_;
+								ValaSourceReference* _tmp596_;
+								ValaSourceReference* _tmp597_;
 								_tmp590_ = self->priv->current;
-								_tmp591_ = u;
-								_tmp592_ = g_unichar_to_utf8 (_tmp591_, NULL);
-								self->priv->current = _tmp590_ + _tmp592_;
-								_tmp593_ = self->priv->_source_file;
+								self->priv->current = _tmp590_ + 1;
+								_tmp591_ = self->priv->_source_file;
+								_tmp592_ = self->priv->line;
+								_tmp593_ = self->priv->column;
 								_tmp594_ = self->priv->line;
 								_tmp595_ = self->priv->column;
-								_tmp596_ = self->priv->line;
-								_tmp597_ = self->priv->column;
-								_tmp598_ = vala_source_reference_new (_tmp593_, _tmp594_, _tmp595_, _tmp596_, _tmp597_);
-								_tmp599_ = _tmp598_;
-								vala_report_error (_tmp599_, "syntax error, unexpected character");
-								_vala_source_reference_unref0 (_tmp599_);
-							} else {
-								gchar* _tmp600_;
-								ValaSourceFile* _tmp601_;
-								gint _tmp602_;
-								gint _tmp603_;
-								gint _tmp604_;
-								gint _tmp605_;
-								ValaSourceReference* _tmp606_;
-								ValaSourceReference* _tmp607_;
-								_tmp600_ = self->priv->current;
-								self->priv->current = _tmp600_ + 1;
-								_tmp601_ = self->priv->_source_file;
-								_tmp602_ = self->priv->line;
-								_tmp603_ = self->priv->column;
-								_tmp604_ = self->priv->line;
-								_tmp605_ = self->priv->column;
-								_tmp606_ = vala_source_reference_new (_tmp601_, _tmp602_, _tmp603_, _tmp604_, _tmp605_);
-								_tmp607_ = _tmp606_;
-								vala_report_error (_tmp607_, "invalid UTF-8 character");
-								_vala_source_reference_unref0 (_tmp607_);
+								_tmp596_ = vala_source_reference_new (_tmp591_, _tmp592_, _tmp593_, _tmp594_, _tmp595_);
+								_tmp597_ = _tmp596_;
+								vala_report_error (_tmp597_, "invalid UTF-8 character");
+								_vala_source_reference_unref0 (_tmp597_);
 							}
-							_tmp608_ = self->priv->column;
-							self->priv->column = _tmp608_ + 1;
+							_tmp598_ = self->priv->column;
+							self->priv->column = _tmp598_ + 1;
 							self->priv->last_token = VALA_GENIE_TOKEN_TYPE_STRING_LITERAL;
-							_tmp611_ = vala_genie_scanner_read_token (self, &_tmp609_, &_tmp610_);
-							_vala_token_begin = _tmp609_;
-							_vala_token_end = _tmp610_;
-							result = _tmp611_;
+							_tmp601_ = vala_genie_scanner_read_token (self, &_tmp599_, &_tmp600_);
+							_vala_token_begin = _tmp599_;
+							_vala_token_end = _tmp600_;
+							result = _tmp601_;
 							if (token_begin) {
 								*token_begin = _vala_token_begin;
 							}
@@ -5285,29 +5256,28 @@ ValaGenieTokenType vala_genie_scanner_read_token (ValaGenieScanner* self, ValaSo
 			}
 		}
 	}
-	_tmp612_ = token_length_in_chars;
-	if (_tmp612_ < 0) {
-		gint _tmp613_;
-		gchar* _tmp614_;
-		gchar* _tmp615_;
-		_tmp613_ = self->priv->column;
-		_tmp614_ = self->priv->current;
-		_tmp615_ = begin;
-		self->priv->column = _tmp613_ + ((gint) (_tmp614_ - _tmp615_));
+	_tmp602_ = token_length_in_chars;
+	if (_tmp602_ < 0) {
+		gint _tmp603_;
+		gchar* _tmp604_;
+		gchar* _tmp605_;
+		_tmp603_ = self->priv->column;
+		_tmp604_ = self->priv->current;
+		_tmp605_ = begin;
+		self->priv->column = _tmp603_ + ((gint) (_tmp604_ - _tmp605_));
 	} else {
-		gint _tmp616_;
-		gint _tmp617_;
-		_tmp616_ = self->priv->column;
-		_tmp617_ = token_length_in_chars;
-		self->priv->column = _tmp616_ + _tmp617_;
+		gint _tmp606_;
+		gint _tmp607_;
+		_tmp606_ = self->priv->column;
+		_tmp607_ = token_length_in_chars;
+		self->priv->column = _tmp606_ + _tmp607_;
 	}
-	_tmp618_ = self->priv->current;
-	_tmp619_ = self->priv->line;
-	_tmp620_ = self->priv->column;
-	vala_source_location_init (&_tmp621_, _tmp618_, _tmp619_, _tmp620_ - 1);
-	_vala_token_end = _tmp621_;
-	_tmp622_ = type;
-	self->priv->last_token = _tmp622_;
+	_tmp608_ = self->priv->current;
+	_tmp609_ = self->priv->line;
+	_tmp610_ = self->priv->column;
+	vala_source_location_init (&_vala_token_end, _tmp608_, _tmp609_, _tmp610_ - 1);
+	_tmp611_ = type;
+	self->priv->last_token = _tmp611_;
 	result = type;
 	if (token_begin) {
 		*token_begin = _vala_token_begin;
diff --git a/vala/valagircomment.c b/vala/valagircomment.c
new file mode 100644
index 0000000..8c7f4b3
--- /dev/null
+++ b/vala/valagircomment.c
@@ -0,0 +1,271 @@
+/* valagircomment.c generated by valac, the Vala compiler
+ * generated from valagircomment.vala, do not modify */
+
+/* valagircomment.vala
+ *
+ * Copyright (C) 2011  Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ *
+ * Author:
+ * 	Florian Brosch <flo brosch gmail com>
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <valagee.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define VALA_TYPE_COMMENT (vala_comment_get_type ())
+#define VALA_COMMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_COMMENT, ValaComment))
+#define VALA_COMMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_COMMENT, ValaCommentClass))
+#define VALA_IS_COMMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_COMMENT))
+#define VALA_IS_COMMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_COMMENT))
+#define VALA_COMMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_COMMENT, ValaCommentClass))
+
+typedef struct _ValaComment ValaComment;
+typedef struct _ValaCommentClass ValaCommentClass;
+typedef struct _ValaCommentPrivate ValaCommentPrivate;
+
+#define VALA_TYPE_GIR_COMMENT (vala_gir_comment_get_type ())
+#define VALA_GIR_COMMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_GIR_COMMENT, ValaGirComment))
+#define VALA_GIR_COMMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_GIR_COMMENT, ValaGirCommentClass))
+#define VALA_IS_GIR_COMMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_GIR_COMMENT))
+#define VALA_IS_GIR_COMMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_GIR_COMMENT))
+#define VALA_GIR_COMMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_GIR_COMMENT, ValaGirCommentClass))
+
+typedef struct _ValaGirComment ValaGirComment;
+typedef struct _ValaGirCommentClass ValaGirCommentClass;
+typedef struct _ValaGirCommentPrivate ValaGirCommentPrivate;
+#define _vala_map_unref0(var) ((var == NULL) ? NULL : (var = (vala_map_unref (var), NULL)))
+#define _vala_comment_unref0(var) ((var == NULL) ? NULL : (var = (vala_comment_unref (var), NULL)))
+
+#define VALA_TYPE_SOURCE_REFERENCE (vala_source_reference_get_type ())
+#define VALA_SOURCE_REFERENCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SOURCE_REFERENCE, ValaSourceReference))
+#define VALA_SOURCE_REFERENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SOURCE_REFERENCE, ValaSourceReferenceClass))
+#define VALA_IS_SOURCE_REFERENCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SOURCE_REFERENCE))
+#define VALA_IS_SOURCE_REFERENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SOURCE_REFERENCE))
+#define VALA_SOURCE_REFERENCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SOURCE_REFERENCE, ValaSourceReferenceClass))
+
+typedef struct _ValaSourceReference ValaSourceReference;
+typedef struct _ValaSourceReferenceClass ValaSourceReferenceClass;
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+struct _ValaComment {
+	GTypeInstance parent_instance;
+	volatile int ref_count;
+	ValaCommentPrivate * priv;
+};
+
+struct _ValaCommentClass {
+	GTypeClass parent_class;
+	void (*finalize) (ValaComment *self);
+};
+
+struct _ValaGirComment {
+	ValaComment parent_instance;
+	ValaGirCommentPrivate * priv;
+};
+
+struct _ValaGirCommentClass {
+	ValaCommentClass parent_class;
+};
+
+struct _ValaGirCommentPrivate {
+	ValaHashMap* parameter_content;
+	ValaComment* _return_content;
+};
+
+
+static gpointer vala_gir_comment_parent_class = NULL;
+
+gpointer vala_comment_ref (gpointer instance);
+void vala_comment_unref (gpointer instance);
+GParamSpec* vala_param_spec_comment (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void vala_value_set_comment (GValue* value, gpointer v_object);
+void vala_value_take_comment (GValue* value, gpointer v_object);
+gpointer vala_value_get_comment (const GValue* value);
+GType vala_comment_get_type (void) G_GNUC_CONST;
+GType vala_gir_comment_get_type (void) G_GNUC_CONST;
+#define VALA_GIR_COMMENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VALA_TYPE_GIR_COMMENT, ValaGirCommentPrivate))
+enum  {
+	VALA_GIR_COMMENT_DUMMY_PROPERTY
+};
+ValaMapIterator* vala_gir_comment_parameter_iterator (ValaGirComment* self);
+gpointer vala_source_reference_ref (gpointer instance);
+void vala_source_reference_unref (gpointer instance);
+GParamSpec* vala_param_spec_source_reference (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void vala_value_set_source_reference (GValue* value, gpointer v_object);
+void vala_value_take_source_reference (GValue* value, gpointer v_object);
+gpointer vala_value_get_source_reference (const GValue* value);
+GType vala_source_reference_get_type (void) G_GNUC_CONST;
+ValaGirComment* vala_gir_comment_new (const gchar* comment, ValaSourceReference* _source_reference);
+ValaGirComment* vala_gir_comment_construct (GType object_type, const gchar* comment, ValaSourceReference* _source_reference);
+ValaComment* vala_comment_new (const gchar* comment, ValaSourceReference* _source_reference);
+ValaComment* vala_comment_construct (GType object_type, const gchar* comment, ValaSourceReference* _source_reference);
+void vala_gir_comment_add_content_for_parameter (ValaGirComment* self, const gchar* name, ValaComment* comment);
+ValaComment* vala_gir_comment_get_content_for_parameter (ValaGirComment* self, const gchar* name);
+ValaComment* vala_gir_comment_get_return_content (ValaGirComment* self);
+void vala_gir_comment_set_return_content (ValaGirComment* self, ValaComment* value);
+static void vala_gir_comment_finalize (ValaComment* obj);
+
+
+ValaMapIterator* vala_gir_comment_parameter_iterator (ValaGirComment* self) {
+	ValaMapIterator* result = NULL;
+	ValaHashMap* _tmp0_;
+	ValaMapIterator* _tmp1_ = NULL;
+	g_return_val_if_fail (self != NULL, NULL);
+	_tmp0_ = self->priv->parameter_content;
+	_tmp1_ = vala_map_map_iterator ((ValaMap*) _tmp0_);
+	result = _tmp1_;
+	return result;
+}
+
+
+ValaGirComment* vala_gir_comment_construct (GType object_type, const gchar* comment, ValaSourceReference* _source_reference) {
+	ValaGirComment* self = NULL;
+	const gchar* _tmp0_;
+	gchar* _tmp1_;
+	gchar* _tmp2_;
+	const gchar* _tmp3_;
+	const gchar* _tmp5_;
+	ValaSourceReference* _tmp6_;
+	g_return_val_if_fail (_source_reference != NULL, NULL);
+	_tmp0_ = comment;
+	_tmp1_ = g_strdup (_tmp0_);
+	_tmp2_ = _tmp1_;
+	_tmp3_ = _tmp2_;
+	if (_tmp3_ == NULL) {
+		gchar* _tmp4_;
+		_tmp4_ = g_strdup ("");
+		_g_free0 (_tmp2_);
+		_tmp2_ = _tmp4_;
+	}
+	_tmp5_ = _tmp2_;
+	_tmp6_ = _source_reference;
+	self = (ValaGirComment*) vala_comment_construct (object_type, _tmp5_, _tmp6_);
+	_g_free0 (_tmp2_);
+	return self;
+}
+
+
+ValaGirComment* vala_gir_comment_new (const gchar* comment, ValaSourceReference* _source_reference) {
+	return vala_gir_comment_construct (VALA_TYPE_GIR_COMMENT, comment, _source_reference);
+}
+
+
+void vala_gir_comment_add_content_for_parameter (ValaGirComment* self, const gchar* name, ValaComment* comment) {
+	ValaHashMap* _tmp0_;
+	const gchar* _tmp1_;
+	ValaComment* _tmp2_;
+	g_return_if_fail (self != NULL);
+	g_return_if_fail (name != NULL);
+	g_return_if_fail (comment != NULL);
+	_tmp0_ = self->priv->parameter_content;
+	_tmp1_ = name;
+	_tmp2_ = comment;
+	vala_map_set ((ValaMap*) _tmp0_, _tmp1_, _tmp2_);
+}
+
+
+ValaComment* vala_gir_comment_get_content_for_parameter (ValaGirComment* self, const gchar* name) {
+	ValaComment* result = NULL;
+	ValaHashMap* _tmp0_;
+	const gchar* _tmp1_;
+	gpointer _tmp2_ = NULL;
+	g_return_val_if_fail (self != NULL, NULL);
+	g_return_val_if_fail (name != NULL, NULL);
+	_tmp0_ = self->priv->parameter_content;
+	_tmp1_ = name;
+	_tmp2_ = vala_map_get ((ValaMap*) _tmp0_, _tmp1_);
+	result = (ValaComment*) _tmp2_;
+	return result;
+}
+
+
+ValaComment* vala_gir_comment_get_return_content (ValaGirComment* self) {
+	ValaComment* result;
+	ValaComment* _tmp0_;
+	g_return_val_if_fail (self != NULL, NULL);
+	_tmp0_ = self->priv->_return_content;
+	result = _tmp0_;
+	return result;
+}
+
+
+static gpointer _vala_comment_ref0 (gpointer self) {
+	return self ? vala_comment_ref (self) : NULL;
+}
+
+
+void vala_gir_comment_set_return_content (ValaGirComment* self, ValaComment* value) {
+	ValaComment* _tmp0_;
+	ValaComment* _tmp1_;
+	g_return_if_fail (self != NULL);
+	_tmp0_ = value;
+	_tmp1_ = _vala_comment_ref0 (_tmp0_);
+	_vala_comment_unref0 (self->priv->_return_content);
+	self->priv->_return_content = _tmp1_;
+}
+
+
+static void vala_gir_comment_class_init (ValaGirCommentClass * klass) {
+	vala_gir_comment_parent_class = g_type_class_peek_parent (klass);
+	VALA_COMMENT_CLASS (klass)->finalize = vala_gir_comment_finalize;
+	g_type_class_add_private (klass, sizeof (ValaGirCommentPrivate));
+}
+
+
+static void vala_gir_comment_instance_init (ValaGirComment * self) {
+	GHashFunc _tmp0_;
+	GEqualFunc _tmp1_;
+	GEqualFunc _tmp2_;
+	ValaHashMap* _tmp3_;
+	self->priv = VALA_GIR_COMMENT_GET_PRIVATE (self);
+	_tmp0_ = g_direct_hash;
+	_tmp1_ = g_direct_equal;
+	_tmp2_ = g_direct_equal;
+	_tmp3_ = vala_hash_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, VALA_TYPE_COMMENT, (GBoxedCopyFunc) vala_comment_ref, vala_comment_unref, _tmp0_, _tmp1_, _tmp2_);
+	self->priv->parameter_content = _tmp3_;
+}
+
+
+static void vala_gir_comment_finalize (ValaComment* obj) {
+	ValaGirComment * self;
+	self = VALA_GIR_COMMENT (obj);
+	_vala_map_unref0 (self->priv->parameter_content);
+	_vala_comment_unref0 (self->priv->_return_content);
+	VALA_COMMENT_CLASS (vala_gir_comment_parent_class)->finalize (obj);
+}
+
+
+/**
+ * A documentation comment used by valadoc
+ */
+GType vala_gir_comment_get_type (void) {
+	static volatile gsize vala_gir_comment_type_id__volatile = 0;
+	if (g_once_init_enter (&vala_gir_comment_type_id__volatile)) {
+		static const GTypeInfo g_define_type_info = { sizeof (ValaGirCommentClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) vala_gir_comment_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValaGirComment), 0, (GInstanceInitFunc) vala_gir_comment_instance_init, NULL };
+		GType vala_gir_comment_type_id;
+		vala_gir_comment_type_id = g_type_register_static (VALA_TYPE_COMMENT, "ValaGirComment", &g_define_type_info, 0);
+		g_once_init_leave (&vala_gir_comment_type_id__volatile, vala_gir_comment_type_id);
+	}
+	return vala_gir_comment_type_id__volatile;
+}
+
+
+
diff --git a/vala/valagircomment.vala b/vala/valagircomment.vala
new file mode 100644
index 0000000..10c1a76
--- /dev/null
+++ b/vala/valagircomment.vala
@@ -0,0 +1,50 @@
+/* valagircomment.vala
+ *
+ * Copyright (C) 2011  Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ *
+ * Author:
+ * 	Florian Brosch <flo brosch gmail com>
+ */
+
+using GLib;
+
+
+/**
+ * A documentation comment used by valadoc
+ */
+public class Vala.GirComment : Comment {
+	private HashMap<string, Comment> parameter_content = new HashMap<string, Comment> ();
+
+	public MapIterator<string, Comment> parameter_iterator () {
+		return this.parameter_content.map_iterator ();
+	}
+
+	public Comment? return_content { get; set; }
+
+	public GirComment (string? comment, SourceReference _source_reference) {
+		base (comment ?? "", _source_reference);
+	}
+
+	internal void add_content_for_parameter (string name, Comment comment) {
+		parameter_content.set (name, comment);
+	}
+
+	public Comment? get_content_for_parameter (string name) {
+		return parameter_content.get (name);
+	}
+}
+
diff --git a/vala/valagirparser.c b/vala/valagirparser.c
index 00c91b4..5a9c08b 100644
--- a/vala/valagirparser.c
+++ b/vala/valagirparser.c
@@ -1038,6 +1038,26 @@ typedef struct _ValaGirParserNodePrivate ValaGirParserNodePrivate;
 typedef struct _ValaSourceReference ValaSourceReference;
 typedef struct _ValaSourceReferenceClass ValaSourceReferenceClass;
 
+#define VALA_TYPE_COMMENT (vala_comment_get_type ())
+#define VALA_COMMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_COMMENT, ValaComment))
+#define VALA_COMMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_COMMENT, ValaCommentClass))
+#define VALA_IS_COMMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_COMMENT))
+#define VALA_IS_COMMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_COMMENT))
+#define VALA_COMMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_COMMENT, ValaCommentClass))
+
+typedef struct _ValaComment ValaComment;
+typedef struct _ValaCommentClass ValaCommentClass;
+
+#define VALA_TYPE_GIR_COMMENT (vala_gir_comment_get_type ())
+#define VALA_GIR_COMMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_GIR_COMMENT, ValaGirComment))
+#define VALA_GIR_COMMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_GIR_COMMENT, ValaGirCommentClass))
+#define VALA_IS_GIR_COMMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_GIR_COMMENT))
+#define VALA_IS_GIR_COMMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_GIR_COMMENT))
+#define VALA_GIR_COMMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_GIR_COMMENT, ValaGirCommentClass))
+
+typedef struct _ValaGirComment ValaGirComment;
+typedef struct _ValaGirCommentClass ValaGirCommentClass;
+
 #define VALA_GIR_PARSER_TYPE_PARAMETER_INFO (vala_gir_parser_parameter_info_get_type ())
 #define VALA_GIR_PARSER_PARAMETER_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_GIR_PARSER_TYPE_PARAMETER_INFO, ValaGirParserParameterInfo))
 #define VALA_GIR_PARSER_PARAMETER_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_GIR_PARSER_TYPE_PARAMETER_INFO, ValaGirParserParameterInfoClass))
@@ -1137,16 +1157,7 @@ typedef struct _ValaCodeGeneratorClass ValaCodeGeneratorClass;
 typedef struct _ValaAttribute ValaAttribute;
 typedef struct _ValaAttributeClass ValaAttributeClass;
 #define __g_list_free__vala_code_node_unref0_0(var) ((var == NULL) ? NULL : (var = (_g_list_free__vala_code_node_unref0_ (var), NULL)))
-
-#define VALA_TYPE_COMMENT (vala_comment_get_type ())
-#define VALA_COMMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_COMMENT, ValaComment))
-#define VALA_COMMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_COMMENT, ValaCommentClass))
-#define VALA_IS_COMMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_COMMENT))
-#define VALA_IS_COMMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_COMMENT))
-#define VALA_COMMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_COMMENT, ValaCommentClass))
-
-typedef struct _ValaComment ValaComment;
-typedef struct _ValaCommentClass ValaCommentClass;
+#define _vala_comment_unref0(var) ((var == NULL) ? NULL : (var = (vala_comment_unref (var), NULL)))
 
 #define VALA_TYPE_SYMBOL_ACCESSIBILITY (vala_symbol_accessibility_get_type ())
 
@@ -1403,7 +1414,8 @@ typedef enum  {
 	VALA_GIR_PARSER_ARGUMENT_TYPE_CLOSURE,
 	VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX,
 	VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CPREFIX,
-	VALA_GIR_PARSER_ARGUMENT_TYPE_ERRORDOMAIN
+	VALA_GIR_PARSER_ARGUMENT_TYPE_ERRORDOMAIN,
+	VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROYS_INSTANCE
 } ValaGirParserArgumentType;
 
 struct _ValaGirParserNode {
@@ -1418,6 +1430,7 @@ struct _ValaGirParserNode {
 	ValaSourceReference* source_reference;
 	ValaArrayList* members;
 	ValaHashMap* scope;
+	ValaGirComment* comment;
 	ValaSymbol* symbol;
 	gboolean new_symbol;
 	gboolean merged;
@@ -1909,6 +1922,14 @@ void vala_value_set_source_reference (GValue* value, gpointer v_object);
 void vala_value_take_source_reference (GValue* value, gpointer v_object);
 gpointer vala_value_get_source_reference (const GValue* value);
 GType vala_source_reference_get_type (void) G_GNUC_CONST;
+gpointer vala_comment_ref (gpointer instance);
+void vala_comment_unref (gpointer instance);
+GParamSpec* vala_param_spec_comment (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void vala_value_set_comment (GValue* value, gpointer v_object);
+void vala_value_take_comment (GValue* value, gpointer v_object);
+gpointer vala_value_get_comment (const GValue* value);
+GType vala_comment_get_type (void) G_GNUC_CONST;
+GType vala_gir_comment_get_type (void) G_GNUC_CONST;
 static gpointer vala_gir_parser_parameter_info_ref (gpointer instance);
 static void vala_gir_parser_parameter_info_unref (gpointer instance);
 static GParamSpec* vala_gir_parser_param_spec_parameter_info (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) G_GNUC_UNUSED;
@@ -1942,9 +1963,8 @@ ValaMarkupReader* vala_markup_reader_construct (GType object_type, const gchar*
 static void vala_gir_parser_next (ValaGirParser* self);
 static void vala_gir_parser_parse_repository (ValaGirParser* self);
 ValaMarkupTokenType vala_markup_reader_read_token (ValaMarkupReader* self, ValaSourceLocation* token_begin, ValaSourceLocation* token_end);
-const gchar* vala_markup_reader_get_name (ValaMarkupReader* self);
-static void vala_gir_parser_skip_element (ValaGirParser* self);
 static void vala_gir_parser_start_element (ValaGirParser* self, const gchar* name);
+const gchar* vala_markup_reader_get_name (ValaMarkupReader* self);
 void vala_report_error (ValaSourceReference* source, const gchar* message);
 static ValaSourceReference* vala_gir_parser_get_current_src (ValaGirParser* self);
 static void vala_gir_parser_end_element (ValaGirParser* self, const gchar* name);
@@ -2020,6 +2040,7 @@ static gchar* vala_gir_parser_parse_package (ValaGirParser* self);
 gboolean vala_code_context_has_package (ValaCodeContext* self, const gchar* pkg);
 void vala_code_context_add_package (ValaCodeContext* self, const gchar* pkg);
 static void vala_gir_parser_parse_c_include (ValaGirParser* self);
+static void vala_gir_parser_skip_element (ValaGirParser* self);
 gboolean vala_code_context_add_external_package (ValaCodeContext* self, const gchar* pkg);
 static void _vala_array_add1 (gchar*** array, int* length, int* size, gchar* value);
 static ValaGirParserNode* vala_gir_parser_resolve_node (ValaGirParser* self, ValaGirParserNode* parent_scope, ValaUnresolvedSymbol* unresolved_sym, gboolean create_namespace);
@@ -2069,15 +2090,15 @@ static void vala_gir_parser_parse_class (ValaGirParser* self);
 static void vala_gir_parser_parse_interface (ValaGirParser* self);
 static void vala_gir_parser_parse_union (ValaGirParser* self);
 static void vala_gir_parser_parse_constant (ValaGirParser* self);
+static ValaGirComment* vala_gir_parser_parse_symbol_doc (ValaGirParser* self);
 static ValaDataType* vala_gir_parser_parse_type (ValaGirParser* self, gchar** ctype, gint* array_length_idx, gboolean transfer_elements, gboolean* no_array_length, gboolean* array_null_terminated);
 static void vala_gir_parser_calculate_common_prefix (ValaGirParser* self, gchar** common_prefix, const gchar* cname);
-gpointer vala_comment_ref (gpointer instance);
-void vala_comment_unref (gpointer instance);
-GParamSpec* vala_param_spec_comment (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
-void vala_value_set_comment (GValue* value, gpointer v_object);
-void vala_value_take_comment (GValue* value, gpointer v_object);
-gpointer vala_value_get_comment (const GValue* value);
-GType vala_comment_get_type (void) G_GNUC_CONST;
+const gchar* vala_markup_reader_get_content (ValaMarkupReader* self);
+ValaGirComment* vala_gir_comment_new (const gchar* comment, ValaSourceReference* _source_reference);
+ValaGirComment* vala_gir_comment_construct (GType object_type, const gchar* comment, ValaSourceReference* _source_reference);
+static ValaComment* vala_gir_parser_parse_doc (ValaGirParser* self);
+ValaComment* vala_comment_new (const gchar* comment, ValaSourceReference* _source_reference);
+ValaComment* vala_comment_construct (GType object_type, const gchar* comment, ValaSourceReference* _source_reference);
 ValaErrorDomain* vala_error_domain_new (const gchar* name, ValaSourceReference* source_reference, ValaComment* comment);
 ValaErrorDomain* vala_error_domain_construct (GType object_type, const gchar* name, ValaSourceReference* source_reference, ValaComment* comment);
 ValaEnum* vala_enum_new (const gchar* name, ValaSourceReference* source_reference, ValaComment* comment);
@@ -2086,6 +2107,7 @@ void vala_code_node_set_attribute (ValaCodeNode* self, const gchar* name, gboole
 void vala_symbol_set_external (ValaSymbol* self, gboolean value);
 GType vala_symbol_accessibility_get_type (void) G_GNUC_CONST;
 void vala_symbol_set_access (ValaSymbol* self, ValaSymbolAccessibility value);
+void vala_symbol_set_comment (ValaSymbol* self, ValaComment* value);
 static void vala_gir_parser_parse_error_member (ValaGirParser* self);
 static void vala_gir_parser_parse_enumeration_member (ValaGirParser* self);
 static ValaExpression* vala_gir_parser_metadata_get_expression (ValaGirParserMetadata* self, ValaGirParserArgumentType arg);
@@ -2097,8 +2119,8 @@ ValaErrorCode* vala_error_code_new_with_value (const gchar* name, ValaExpression
 ValaErrorCode* vala_error_code_construct_with_value (GType object_type, const gchar* name, ValaExpression* value, ValaSourceReference* source_reference);
 ValaErrorCode* vala_error_code_new (const gchar* name, ValaSourceReference* source_reference, ValaComment* comment);
 ValaErrorCode* vala_error_code_construct (GType object_type, const gchar* name, ValaSourceReference* source_reference, ValaComment* comment);
-static ValaDataType* vala_gir_parser_parse_return_value (ValaGirParser* self, gchar** ctype, gint* array_length_idx, gboolean* no_array_length, gboolean* array_null_terminated);
-static ValaParameter* vala_gir_parser_parse_parameter (ValaGirParser* self, gint* array_length_idx, gint* closure_idx, gint* destroy_idx, gchar** scope, const gchar* default_name);
+static ValaDataType* vala_gir_parser_parse_return_value (ValaGirParser* self, gchar** ctype, gint* array_length_idx, gboolean* no_array_length, gboolean* array_null_terminated, ValaComment** comment);
+static ValaParameter* vala_gir_parser_parse_parameter (ValaGirParser* self, gint* array_length_idx, gint* closure_idx, gint* destroy_idx, gchar** scope, ValaComment** comment, const gchar* default_name);
 static gint vala_gir_parser_metadata_get_integer (ValaGirParserMetadata* self, ValaGirParserArgumentType arg);
 ValaParameter* vala_parameter_new_with_ellipsis (ValaSourceReference* source_reference);
 ValaParameter* vala_parameter_construct_with_ellipsis (GType object_type, ValaSourceReference* source_reference);
@@ -2131,6 +2153,7 @@ ValaProperty* vala_property_new (const gchar* name, ValaDataType* property_type,
 ValaProperty* vala_property_construct (GType object_type, const gchar* name, ValaDataType* property_type, ValaPropertyAccessor* get_accessor, ValaPropertyAccessor* set_accessor, ValaSourceReference* source_reference, ValaComment* comment);
 void vala_property_set_is_abstract (ValaProperty* self, gboolean value);
 static void vala_gir_parser_parse_function (ValaGirParser* self, const gchar* element_name);
+void vala_gir_comment_set_return_content (ValaGirComment* self, ValaComment* value);
 ValaDelegate* vala_delegate_new (const gchar* name, ValaDataType* return_type, ValaSourceReference* source_reference, ValaComment* comment);
 ValaDelegate* vala_delegate_construct (GType object_type, const gchar* name, ValaDataType* return_type, ValaSourceReference* source_reference, ValaComment* comment);
 void vala_delegate_set_has_target (ValaDelegate* self, gboolean value);
@@ -2149,6 +2172,8 @@ void vala_code_node_add_error_type (ValaCodeNode* self, ValaDataType* error_type
 ValaErrorType* vala_error_type_new (ValaErrorDomain* error_domain, ValaErrorCode* error_code, ValaSourceReference* source_reference);
 ValaErrorType* vala_error_type_construct (GType object_type, ValaErrorDomain* error_domain, ValaErrorCode* error_code, ValaSourceReference* source_reference);
 GType vala_error_type_get_type (void) G_GNUC_CONST;
+gboolean vala_parameter_get_ellipsis (ValaParameter* self);
+void vala_gir_comment_add_content_for_parameter (ValaGirComment* self, const gchar* name, ValaComment* comment);
 static ValaGirParserParameterInfo* vala_gir_parser_parameter_info_new (ValaParameter* param, gint array_length_idx, gint closure_idx, gint destroy_idx);
 static ValaGirParserParameterInfo* vala_gir_parser_parameter_info_construct (GType object_type, ValaParameter* param, gint array_length_idx, gint closure_idx, gint destroy_idx);
 ValaUnresolvedSymbol* vala_unresolved_type_get_unresolved_symbol (ValaUnresolvedType* self);
@@ -2185,7 +2210,6 @@ ValaDataType* vala_delegate_get_return_type (ValaDelegate* self);
 ValaDataType* vala_signal_get_return_type (ValaSignal* self);
 ValaParameterDirection vala_parameter_get_direction (ValaParameter* self);
 ValaDataType* vala_data_type_copy (ValaDataType* self);
-gboolean vala_parameter_get_ellipsis (ValaParameter* self);
 void vala_method_add_parameter (ValaMethod* self, ValaParameter* param);
 void vala_delegate_add_parameter (ValaDelegate* self, ValaParameter* param);
 void vala_signal_add_parameter (ValaSignal* self, ValaParameter* param);
@@ -2194,6 +2218,8 @@ void vala_delegate_set_return_type (ValaDelegate* self, ValaDataType* value);
 void vala_signal_set_return_type (ValaSignal* self, ValaDataType* value);
 static void vala_gir_parser_find_parent (ValaGirParser* self, const gchar* cname, ValaGirParserNode* current, ValaGirParserNode** best, gint* match);
 static gchar* vala_gir_parser_node_get_lower_case_cprefix (ValaGirParserNode* self);
+static gboolean vala_gir_parser_same_gir (ValaGirParser* self, ValaSymbol* gir_component, ValaSymbol* sym);
+ValaSourceFile* vala_source_reference_get_file (ValaSourceReference* self);
 static void vala_gir_parser_process_namespace_method (ValaGirParser* self, ValaGirParserNode* ns, ValaGirParserNode* node);
 static void vala_gir_parser_node_remove_member (ValaGirParserNode* self, ValaGirParserNode* node);
 static void vala_gir_parser_process_virtual_method_field (ValaGirParser* self, ValaGirParserNode* node, ValaDelegate* d, ValaUnresolvedSymbol* gtype_struct_for);
@@ -2296,7 +2322,6 @@ static gchar* vala_gir_parser_node_get_cprefix (ValaGirParserNode* self);
 static gchar* vala_gir_parser_node_get_default_cname (ValaGirParserNode* self);
 ValaMemberBinding vala_field_get_binding (ValaField* self);
 static gchar* vala_gir_parser_node_get_cheader_filename (ValaGirParserNode* self);
-ValaSourceFile* vala_source_reference_get_file (ValaSourceReference* self);
 gchar* vala_source_file_get_cinclude_filename (ValaSourceFile* self);
 gboolean vala_method_get_is_virtual (ValaMethod* self);
 gboolean vala_method_get_is_abstract (ValaMethod* self);
@@ -2408,7 +2433,7 @@ static gpointer __vala_gir_parser_argument_type_dup0 (gpointer self) {
 
 
 static ValaGirParserArgumentType* vala_gir_parser_argument_type_from_string (const gchar* name) {
-	ValaGirParserArgumentType* result = 0;
+	ValaGirParserArgumentType* result = NULL;
 	GTypeClass* _tmp0_ = NULL;
 	GEnumClass* enum_class;
 	const gchar* _tmp1_;
@@ -2419,7 +2444,7 @@ static ValaGirParserArgumentType* vala_gir_parser_argument_type_from_string (con
 	GEnumValue* _tmp5_ = NULL;
 	GEnumValue* enum_value;
 	GEnumValue* _tmp6_;
-	g_return_val_if_fail (name != NULL, 0);
+	g_return_val_if_fail (name != NULL, NULL);
 	_tmp0_ = g_type_class_ref (VALA_GIR_PARSER_TYPE_ARGUMENT_TYPE);
 	enum_class = (GEnumClass*) _tmp0_;
 	_tmp1_ = name;
@@ -2454,7 +2479,7 @@ static ValaGirParserArgumentType* vala_gir_parser_argument_type_from_string (con
 static GType vala_gir_parser_argument_type_get_type (void) {
 	static volatile gsize vala_gir_parser_argument_type_type_id__volatile = 0;
 	if (g_once_init_enter (&vala_gir_parser_argument_type_type_id__volatile)) {
-		static const GEnumValue values[] = {{VALA_GIR_PARSER_ARGUMENT_TYPE_SKIP, "VALA_GIR_PARSER_ARGUMENT_TYPE_SKIP", "skip"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_HIDDEN, "VALA_GIR_PARSER_ARGUMENT_TYPE_HIDDEN", "hidden"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE, "VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE", "type"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_ARGUMENTS, "VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_ARGUMENTS", "type-arguments"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_CHEADER_FILENAME, "VALA_GIR_PARSER_ARGUMENT_TYPE_CHEADER_FILENAME", "cheader-filename"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_NAME, "VALA_GIR_PARSER_ARGUMENT_TYPE_NAME", "name"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_OWNED, "VALA_GIR_PARSER_ARGUMENT_TYPE_OWNED", "owned"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_UNOWNED, "VALA_GIR_PARSER_ARGUMENT_TYPE_UNOWNED", "unowned"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_PARENT, "VALA_GIR_PARSER_ARGUMENT_TYPE_PARENT", "parent"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_NULLABLE, "VALA_GIR_PARSER_ARGUMENT_TYPE_NULLABLE", "nullable"}, {VALA_GIR
 _PARSER_ARGUMENT_TYPE_DEPRECATED, "VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED", "deprecated"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_REPLACEMENT, "VALA_GIR_PARSER_ARGUMENT_TYPE_REPLACEMENT", "replacement"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED_SINCE, "VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED_SINCE", "deprecated-since"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY, "VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY", "array"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX, "VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX", "array-length-idx"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_DEFAULT, "VALA_GIR_PARSER_ARGUMENT_TYPE_DEFAULT", "default"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_OUT, "VALA_GIR_PARSER_ARGUMENT_TYPE_OUT", "out"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_REF, "VALA_GIR_PARSER_ARGUMENT_TYPE_REF", "ref"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME, "VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME", "vfunc-name"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_VIRTUAL, "VALA_GIR_PARSER_ARGUMENT_TYPE_VIRTUAL", "virtual"}, {VALA_GIR_PARS
 ER_ARGUMENT_TYPE_ABSTRACT, "VALA_GIR_PARSER_ARGUMENT_TYPE_ABSTRACT", "abstract"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_SCOPE, "VALA_GIR_PARSER_ARGUMENT_TYPE_SCOPE", "scope"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_STRUCT, "VALA_GIR_PARSER_ARGUMENT_TYPE_STRUCT", "struct"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS, "VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS", "throws"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_PRINTF_FORMAT, "VALA_GIR_PARSER_ARGUMENT_TYPE_PRINTF_FORMAT", "printf-format"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_FIELD, "VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_FIELD", "array-length-field"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_SENTINEL, "VALA_GIR_PARSER_ARGUMENT_TYPE_SENTINEL", "sentinel"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_CLOSURE, "VALA_GIR_PARSER_ARGUMENT_TYPE_CLOSURE", "closure"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX, "VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX", "cprefix"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CPREFIX, "VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CPREFIX", "lower-case-cprefi
 x"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_ERRORDOMAIN, "VALA_GIR_PARSER_ARGUMENT_TYPE_ERRORDOMAIN", "errordomain"}, {0, NULL, NULL}};
+		static const GEnumValue values[] = {{VALA_GIR_PARSER_ARGUMENT_TYPE_SKIP, "VALA_GIR_PARSER_ARGUMENT_TYPE_SKIP", "skip"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_HIDDEN, "VALA_GIR_PARSER_ARGUMENT_TYPE_HIDDEN", "hidden"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE, "VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE", "type"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_ARGUMENTS, "VALA_GIR_PARSER_ARGUMENT_TYPE_TYPE_ARGUMENTS", "type-arguments"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_CHEADER_FILENAME, "VALA_GIR_PARSER_ARGUMENT_TYPE_CHEADER_FILENAME", "cheader-filename"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_NAME, "VALA_GIR_PARSER_ARGUMENT_TYPE_NAME", "name"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_OWNED, "VALA_GIR_PARSER_ARGUMENT_TYPE_OWNED", "owned"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_UNOWNED, "VALA_GIR_PARSER_ARGUMENT_TYPE_UNOWNED", "unowned"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_PARENT, "VALA_GIR_PARSER_ARGUMENT_TYPE_PARENT", "parent"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_NULLABLE, "VALA_GIR_PARSER_ARGUMENT_TYPE_NULLABLE", "nullable"}, {VALA_GIR
 _PARSER_ARGUMENT_TYPE_DEPRECATED, "VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED", "deprecated"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_REPLACEMENT, "VALA_GIR_PARSER_ARGUMENT_TYPE_REPLACEMENT", "replacement"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED_SINCE, "VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED_SINCE", "deprecated-since"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY, "VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY", "array"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX, "VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX", "array-length-idx"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_DEFAULT, "VALA_GIR_PARSER_ARGUMENT_TYPE_DEFAULT", "default"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_OUT, "VALA_GIR_PARSER_ARGUMENT_TYPE_OUT", "out"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_REF, "VALA_GIR_PARSER_ARGUMENT_TYPE_REF", "ref"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME, "VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME", "vfunc-name"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_VIRTUAL, "VALA_GIR_PARSER_ARGUMENT_TYPE_VIRTUAL", "virtual"}, {VALA_GIR_PARS
 ER_ARGUMENT_TYPE_ABSTRACT, "VALA_GIR_PARSER_ARGUMENT_TYPE_ABSTRACT", "abstract"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_SCOPE, "VALA_GIR_PARSER_ARGUMENT_TYPE_SCOPE", "scope"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_STRUCT, "VALA_GIR_PARSER_ARGUMENT_TYPE_STRUCT", "struct"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS, "VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS", "throws"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_PRINTF_FORMAT, "VALA_GIR_PARSER_ARGUMENT_TYPE_PRINTF_FORMAT", "printf-format"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_FIELD, "VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_FIELD", "array-length-field"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_SENTINEL, "VALA_GIR_PARSER_ARGUMENT_TYPE_SENTINEL", "sentinel"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_CLOSURE, "VALA_GIR_PARSER_ARGUMENT_TYPE_CLOSURE", "closure"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX, "VALA_GIR_PARSER_ARGUMENT_TYPE_CPREFIX", "cprefix"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CPREFIX, "VALA_GIR_PARSER_ARGUMENT_TYPE_LOWER_CASE_CPREFIX", "lower-case-cprefi
 x"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_ERRORDOMAIN, "VALA_GIR_PARSER_ARGUMENT_TYPE_ERRORDOMAIN", "errordomain"}, {VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROYS_INSTANCE, "VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROYS_INSTANCE", "destroys-instance"}, {0, NULL, NULL}};
 		GType vala_gir_parser_argument_type_type_id;
 		vala_gir_parser_argument_type_type_id = g_enum_register_static ("ValaGirParserArgumentType", values);
 		g_once_init_leave (&vala_gir_parser_argument_type_type_id__volatile, vala_gir_parser_argument_type_type_id);
@@ -2941,31 +2966,12 @@ static void vala_gir_parser_next (ValaGirParser* self) {
 	ValaSourceLocation _tmp1_ = {0};
 	ValaSourceLocation _tmp2_ = {0};
 	ValaMarkupTokenType _tmp3_ = 0;
-	gboolean _tmp4_ = FALSE;
-	ValaMarkupTokenType _tmp5_;
-	gboolean _tmp9_;
 	g_return_if_fail (self != NULL);
 	_tmp0_ = self->priv->reader;
 	_tmp3_ = vala_markup_reader_read_token (_tmp0_, &_tmp1_, &_tmp2_);
 	self->priv->begin = _tmp1_;
 	self->priv->end = _tmp2_;
 	self->priv->current_token = _tmp3_;
-	_tmp5_ = self->priv->current_token;
-	if (_tmp5_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT) {
-		ValaMarkupReader* _tmp6_;
-		const gchar* _tmp7_;
-		const gchar* _tmp8_;
-		_tmp6_ = self->priv->reader;
-		_tmp7_ = vala_markup_reader_get_name (_tmp6_);
-		_tmp8_ = _tmp7_;
-		_tmp4_ = g_strcmp0 (_tmp8_, "doc") == 0;
-	} else {
-		_tmp4_ = FALSE;
-	}
-	_tmp9_ = _tmp4_;
-	if (_tmp9_) {
-		vala_gir_parser_skip_element (self);
-	}
 }
 
 
@@ -4567,7 +4573,7 @@ static ValaDataType* vala_gir_parser_parse_type_from_string (ValaGirParser* self
 			e = _inner_error_;
 			_inner_error_ = NULL;
 			_tmp3_ = e->message;
-			g_error ("valagirparser.vala:1458: Unable to compile regex: %s", _tmp3_);
+			g_error ("valagirparser.vala:1459: Unable to compile regex: %s", _tmp3_);
 			_g_error_free0 (e);
 		}
 		__finally4:
@@ -6639,11 +6645,13 @@ static void vala_gir_parser_parse_namespace (ValaGirParser* self) {
 static void vala_gir_parser_parse_alias (ValaGirParser* self) {
 	gchar* _tmp0_ = NULL;
 	gchar* _tmp1_;
-	gboolean no_array_length;
 	ValaGirParserNode* _tmp2_;
-	ValaDataType* _tmp3_ = NULL;
-	ValaDataType* _tmp4_;
-	ValaDataType* _tmp5_ = NULL;
+	ValaGirComment* _tmp3_;
+	gboolean no_array_length;
+	ValaGirParserNode* _tmp8_;
+	ValaDataType* _tmp9_ = NULL;
+	ValaDataType* _tmp10_;
+	ValaDataType* _tmp11_ = NULL;
 	g_return_if_fail (self != NULL);
 	vala_gir_parser_start_element (self, "alias");
 	_tmp0_ = vala_gir_parser_element_get_name (self, NULL);
@@ -6651,14 +6659,30 @@ static void vala_gir_parser_parse_alias (ValaGirParser* self) {
 	vala_gir_parser_push_node (self, _tmp1_, TRUE);
 	_g_free0 (_tmp1_);
 	vala_gir_parser_next (self);
-	no_array_length = FALSE;
 	_tmp2_ = self->priv->current;
-	_tmp3_ = vala_gir_parser_parse_type (self, NULL, NULL, TRUE, NULL, NULL);
-	_tmp4_ = _tmp3_;
-	_tmp5_ = vala_gir_parser_element_get_type (self, _tmp4_, TRUE, &no_array_length, NULL);
-	_vala_code_node_unref0 (_tmp2_->base_type);
-	_tmp2_->base_type = _tmp5_;
-	_vala_code_node_unref0 (_tmp4_);
+	_tmp3_ = _tmp2_->comment;
+	if (_tmp3_ == NULL) {
+		ValaGirParserNode* _tmp4_;
+		ValaGirComment* _tmp5_ = NULL;
+		_tmp4_ = self->priv->current;
+		_tmp5_ = vala_gir_parser_parse_symbol_doc (self);
+		_vala_comment_unref0 (_tmp4_->comment);
+		_tmp4_->comment = _tmp5_;
+	} else {
+		ValaGirComment* _tmp6_ = NULL;
+		ValaGirComment* _tmp7_;
+		_tmp6_ = vala_gir_parser_parse_symbol_doc (self);
+		_tmp7_ = _tmp6_;
+		_vala_comment_unref0 (_tmp7_);
+	}
+	no_array_length = FALSE;
+	_tmp8_ = self->priv->current;
+	_tmp9_ = vala_gir_parser_parse_type (self, NULL, NULL, TRUE, NULL, NULL);
+	_tmp10_ = _tmp9_;
+	_tmp11_ = vala_gir_parser_element_get_type (self, _tmp10_, TRUE, &no_array_length, NULL);
+	_vala_code_node_unref0 (_tmp8_->base_type);
+	_tmp8_->base_type = _tmp11_;
+	_vala_code_node_unref0 (_tmp10_);
 	vala_gir_parser_pop_node (self);
 	vala_gir_parser_end_element (self, "alias");
 }
@@ -6679,7 +6703,6 @@ static gunichar string_get_char (const gchar* self, glong index) {
 static void vala_gir_parser_calculate_common_prefix (ValaGirParser* self, gchar** common_prefix, const gchar* cname) {
 	const gchar* _tmp0_;
 	g_return_if_fail (self != NULL);
-	g_return_if_fail (*common_prefix != NULL);
 	g_return_if_fail (cname != NULL);
 	_tmp0_ = *common_prefix;
 	if (_tmp0_ == NULL) {
@@ -6827,6 +6850,90 @@ static void vala_gir_parser_calculate_common_prefix (ValaGirParser* self, gchar*
 }
 
 
+static ValaGirComment* vala_gir_parser_parse_symbol_doc (ValaGirParser* self) {
+	ValaGirComment* result = NULL;
+	ValaMarkupReader* _tmp0_;
+	const gchar* _tmp1_;
+	const gchar* _tmp2_;
+	ValaGirComment* comment;
+	ValaMarkupTokenType _tmp3_;
+	g_return_val_if_fail (self != NULL, NULL);
+	_tmp0_ = self->priv->reader;
+	_tmp1_ = vala_markup_reader_get_name (_tmp0_);
+	_tmp2_ = _tmp1_;
+	if (g_strcmp0 (_tmp2_, "doc") != 0) {
+		result = NULL;
+		return result;
+	}
+	vala_gir_parser_start_element (self, "doc");
+	vala_gir_parser_next (self);
+	comment = NULL;
+	_tmp3_ = self->priv->current_token;
+	if (_tmp3_ == VALA_MARKUP_TOKEN_TYPE_TEXT) {
+		ValaMarkupReader* _tmp4_;
+		const gchar* _tmp5_;
+		const gchar* _tmp6_;
+		ValaGirParserNode* _tmp7_;
+		ValaSourceReference* _tmp8_;
+		ValaGirComment* _tmp9_;
+		_tmp4_ = self->priv->reader;
+		_tmp5_ = vala_markup_reader_get_content (_tmp4_);
+		_tmp6_ = _tmp5_;
+		_tmp7_ = self->priv->current;
+		_tmp8_ = _tmp7_->source_reference;
+		_tmp9_ = vala_gir_comment_new (_tmp6_, _tmp8_);
+		_vala_comment_unref0 (comment);
+		comment = _tmp9_;
+		vala_gir_parser_next (self);
+	}
+	vala_gir_parser_end_element (self, "doc");
+	result = comment;
+	return result;
+}
+
+
+static ValaComment* vala_gir_parser_parse_doc (ValaGirParser* self) {
+	ValaComment* result = NULL;
+	ValaMarkupReader* _tmp0_;
+	const gchar* _tmp1_;
+	const gchar* _tmp2_;
+	ValaComment* comment;
+	ValaMarkupTokenType _tmp3_;
+	g_return_val_if_fail (self != NULL, NULL);
+	_tmp0_ = self->priv->reader;
+	_tmp1_ = vala_markup_reader_get_name (_tmp0_);
+	_tmp2_ = _tmp1_;
+	if (g_strcmp0 (_tmp2_, "doc") != 0) {
+		result = NULL;
+		return result;
+	}
+	vala_gir_parser_start_element (self, "doc");
+	vala_gir_parser_next (self);
+	comment = NULL;
+	_tmp3_ = self->priv->current_token;
+	if (_tmp3_ == VALA_MARKUP_TOKEN_TYPE_TEXT) {
+		ValaMarkupReader* _tmp4_;
+		const gchar* _tmp5_;
+		const gchar* _tmp6_;
+		ValaGirParserNode* _tmp7_;
+		ValaSourceReference* _tmp8_;
+		ValaComment* _tmp9_;
+		_tmp4_ = self->priv->reader;
+		_tmp5_ = vala_markup_reader_get_content (_tmp4_);
+		_tmp6_ = _tmp5_;
+		_tmp7_ = self->priv->current;
+		_tmp8_ = _tmp7_->source_reference;
+		_tmp9_ = vala_comment_new (_tmp6_, _tmp8_);
+		_vala_comment_unref0 (comment);
+		comment = _tmp9_;
+		vala_gir_parser_next (self);
+	}
+	vala_gir_parser_end_element (self, "doc");
+	result = comment;
+	return result;
+}
+
+
 static void vala_gir_parser_parse_enumeration (ValaGirParser* self, const gchar* element_name, gboolean error_domain) {
 	const gchar* _tmp0_;
 	gchar* _tmp1_ = NULL;
@@ -6837,8 +6944,11 @@ static void vala_gir_parser_parse_enumeration (ValaGirParser* self, const gchar*
 	ValaSymbol* _tmp26_;
 	ValaSymbol* _tmp27_;
 	gchar* common_prefix;
-	const gchar* _tmp51_;
+	ValaSymbol* _tmp28_;
+	ValaGirComment* _tmp29_ = NULL;
+	ValaGirComment* _tmp30_;
 	const gchar* _tmp54_;
+	const gchar* _tmp57_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (element_name != NULL);
 	_tmp0_ = element_name;
@@ -6917,93 +7027,98 @@ static void vala_gir_parser_parse_enumeration (ValaGirParser* self, const gchar*
 	vala_symbol_set_access (_tmp27_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
 	common_prefix = NULL;
 	vala_gir_parser_next (self);
+	_tmp28_ = sym;
+	_tmp29_ = vala_gir_parser_parse_symbol_doc (self);
+	_tmp30_ = _tmp29_;
+	vala_symbol_set_comment (_tmp28_, (ValaComment*) _tmp30_);
+	_vala_comment_unref0 (_tmp30_);
 	while (TRUE) {
-		ValaMarkupTokenType _tmp28_;
-		gboolean _tmp29_ = FALSE;
-		ValaMarkupReader* _tmp30_;
-		const gchar* _tmp31_;
-		const gchar* _tmp32_;
-		_tmp28_ = self->priv->current_token;
-		if (!(_tmp28_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) {
+		ValaMarkupTokenType _tmp31_;
+		gboolean _tmp32_ = FALSE;
+		ValaMarkupReader* _tmp33_;
+		const gchar* _tmp34_;
+		const gchar* _tmp35_;
+		_tmp31_ = self->priv->current_token;
+		if (!(_tmp31_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) {
 			break;
 		}
-		_tmp29_ = vala_gir_parser_push_metadata (self);
-		if (!_tmp29_) {
+		_tmp32_ = vala_gir_parser_push_metadata (self);
+		if (!_tmp32_) {
 			vala_gir_parser_skip_element (self);
 			continue;
 		}
-		_tmp30_ = self->priv->reader;
-		_tmp31_ = vala_markup_reader_get_name (_tmp30_);
-		_tmp32_ = _tmp31_;
-		if (g_strcmp0 (_tmp32_, "member") == 0) {
-			gboolean _tmp33_;
-			_tmp33_ = error_domain;
-			if (_tmp33_) {
-				ValaGirParserNode* _tmp34_;
-				gchar* _tmp35_ = NULL;
-				gchar* _tmp36_;
-				vala_gir_parser_parse_error_member (self);
-				_tmp34_ = self->priv->old_current;
-				_tmp35_ = vala_gir_parser_node_get_cname (_tmp34_);
-				_tmp36_ = _tmp35_;
-				vala_gir_parser_calculate_common_prefix (self, &common_prefix, _tmp36_);
-				_g_free0 (_tmp36_);
-			} else {
+		_tmp33_ = self->priv->reader;
+		_tmp34_ = vala_markup_reader_get_name (_tmp33_);
+		_tmp35_ = _tmp34_;
+		if (g_strcmp0 (_tmp35_, "member") == 0) {
+			gboolean _tmp36_;
+			_tmp36_ = error_domain;
+			if (_tmp36_) {
 				ValaGirParserNode* _tmp37_;
 				gchar* _tmp38_ = NULL;
 				gchar* _tmp39_;
-				vala_gir_parser_parse_enumeration_member (self);
+				vala_gir_parser_parse_error_member (self);
 				_tmp37_ = self->priv->old_current;
 				_tmp38_ = vala_gir_parser_node_get_cname (_tmp37_);
 				_tmp39_ = _tmp38_;
 				vala_gir_parser_calculate_common_prefix (self, &common_prefix, _tmp39_);
 				_g_free0 (_tmp39_);
+			} else {
+				ValaGirParserNode* _tmp40_;
+				gchar* _tmp41_ = NULL;
+				gchar* _tmp42_;
+				vala_gir_parser_parse_enumeration_member (self);
+				_tmp40_ = self->priv->old_current;
+				_tmp41_ = vala_gir_parser_node_get_cname (_tmp40_);
+				_tmp42_ = _tmp41_;
+				vala_gir_parser_calculate_common_prefix (self, &common_prefix, _tmp42_);
+				_g_free0 (_tmp42_);
 			}
 		} else {
-			ValaMarkupReader* _tmp40_;
-			const gchar* _tmp41_;
-			const gchar* _tmp42_;
-			_tmp40_ = self->priv->reader;
-			_tmp41_ = vala_markup_reader_get_name (_tmp40_);
-			_tmp42_ = _tmp41_;
-			if (g_strcmp0 (_tmp42_, "function") == 0) {
+			ValaMarkupReader* _tmp43_;
+			const gchar* _tmp44_;
+			const gchar* _tmp45_;
+			_tmp43_ = self->priv->reader;
+			_tmp44_ = vala_markup_reader_get_name (_tmp43_);
+			_tmp45_ = _tmp44_;
+			if (g_strcmp0 (_tmp45_, "function") == 0) {
 				vala_gir_parser_skip_element (self);
 			} else {
-				ValaSourceReference* _tmp43_ = NULL;
-				ValaSourceReference* _tmp44_;
-				ValaMarkupReader* _tmp45_;
-				const gchar* _tmp46_;
-				const gchar* _tmp47_;
-				const gchar* _tmp48_;
-				gchar* _tmp49_ = NULL;
-				gchar* _tmp50_;
-				_tmp43_ = vala_gir_parser_get_current_src (self);
-				_tmp44_ = _tmp43_;
-				_tmp45_ = self->priv->reader;
-				_tmp46_ = vala_markup_reader_get_name (_tmp45_);
+				ValaSourceReference* _tmp46_ = NULL;
+				ValaSourceReference* _tmp47_;
+				ValaMarkupReader* _tmp48_;
+				const gchar* _tmp49_;
+				const gchar* _tmp50_;
+				const gchar* _tmp51_;
+				gchar* _tmp52_ = NULL;
+				gchar* _tmp53_;
+				_tmp46_ = vala_gir_parser_get_current_src (self);
 				_tmp47_ = _tmp46_;
-				_tmp48_ = element_name;
-				_tmp49_ = g_strdup_printf ("unknown child element `%s' in `%s'", _tmp47_, _tmp48_);
+				_tmp48_ = self->priv->reader;
+				_tmp49_ = vala_markup_reader_get_name (_tmp48_);
 				_tmp50_ = _tmp49_;
-				vala_report_error (_tmp44_, _tmp50_);
-				_g_free0 (_tmp50_);
-				_vala_source_reference_unref0 (_tmp44_);
+				_tmp51_ = element_name;
+				_tmp52_ = g_strdup_printf ("unknown child element `%s' in `%s'", _tmp50_, _tmp51_);
+				_tmp53_ = _tmp52_;
+				vala_report_error (_tmp47_, _tmp53_);
+				_g_free0 (_tmp53_);
+				_vala_source_reference_unref0 (_tmp47_);
 				vala_gir_parser_skip_element (self);
 			}
 		}
 		vala_gir_parser_pop_metadata (self);
 	}
-	_tmp51_ = common_prefix;
-	if (_tmp51_ != NULL) {
-		ValaSymbol* _tmp52_;
-		const gchar* _tmp53_;
-		_tmp52_ = sym;
-		_tmp53_ = common_prefix;
-		vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp52_, "CCode", "cprefix", _tmp53_, NULL);
+	_tmp54_ = common_prefix;
+	if (_tmp54_ != NULL) {
+		ValaSymbol* _tmp55_;
+		const gchar* _tmp56_;
+		_tmp55_ = sym;
+		_tmp56_ = common_prefix;
+		vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp55_, "CCode", "cprefix", _tmp56_, NULL);
 	}
 	vala_gir_parser_pop_node (self);
-	_tmp54_ = element_name;
-	vala_gir_parser_end_element (self, _tmp54_);
+	_tmp57_ = element_name;
+	vala_gir_parser_end_element (self, _tmp57_);
 	_g_free0 (common_prefix);
 	_vala_code_node_unref0 (sym);
 }
@@ -7040,6 +7155,8 @@ static void vala_gir_parser_parse_enumeration_member (ValaGirParser* self) {
 	ValaEnumValue* ev;
 	ValaGirParserNode* _tmp15_;
 	ValaSymbol* _tmp16_;
+	ValaGirComment* _tmp17_ = NULL;
+	ValaGirComment* _tmp18_;
 	g_return_if_fail (self != NULL);
 	vala_gir_parser_start_element (self, "member");
 	_tmp0_ = vala_gir_parser_element_get_name (self, NULL);
@@ -7068,6 +7185,10 @@ static void vala_gir_parser_parse_enumeration_member (ValaGirParser* self) {
 	_vala_code_node_unref0 (_tmp15_->symbol);
 	_tmp15_->symbol = _tmp16_;
 	vala_gir_parser_next (self);
+	_tmp17_ = vala_gir_parser_parse_symbol_doc (self);
+	_tmp18_ = _tmp17_;
+	vala_symbol_set_comment ((ValaSymbol*) ev, (ValaComment*) _tmp18_);
+	_vala_comment_unref0 (_tmp18_);
 	vala_gir_parser_pop_node (self);
 	vala_gir_parser_end_element (self, "member");
 	_vala_code_node_unref0 (ev);
@@ -7089,6 +7210,9 @@ static void vala_gir_parser_parse_error_member (ValaGirParser* self) {
 	ValaGirParserNode* _tmp18_;
 	ValaErrorCode* _tmp19_;
 	ValaSymbol* _tmp20_;
+	ValaErrorCode* _tmp21_;
+	ValaGirComment* _tmp22_ = NULL;
+	ValaGirComment* _tmp23_;
 	g_return_if_fail (self != NULL);
 	vala_gir_parser_start_element (self, "member");
 	_tmp0_ = vala_gir_parser_element_get_name (self, NULL);
@@ -7137,6 +7261,11 @@ static void vala_gir_parser_parse_error_member (ValaGirParser* self) {
 	_vala_code_node_unref0 (_tmp18_->symbol);
 	_tmp18_->symbol = _tmp20_;
 	vala_gir_parser_next (self);
+	_tmp21_ = ec;
+	_tmp22_ = vala_gir_parser_parse_symbol_doc (self);
+	_tmp23_ = _tmp22_;
+	vala_symbol_set_comment ((ValaSymbol*) _tmp21_, (ValaComment*) _tmp23_);
+	_vala_comment_unref0 (_tmp23_);
 	vala_gir_parser_pop_node (self);
 	vala_gir_parser_end_element (self, "member");
 	_g_free0 (value);
@@ -7144,11 +7273,12 @@ static void vala_gir_parser_parse_error_member (ValaGirParser* self) {
 }
 
 
-static ValaDataType* vala_gir_parser_parse_return_value (ValaGirParser* self, gchar** ctype, gint* array_length_idx, gboolean* no_array_length, gboolean* array_null_terminated) {
+static ValaDataType* vala_gir_parser_parse_return_value (ValaGirParser* self, gchar** ctype, gint* array_length_idx, gboolean* no_array_length, gboolean* array_null_terminated, ValaComment** comment) {
 	gchar* _vala_ctype = NULL;
 	gint _vala_array_length_idx = 0;
 	gboolean _vala_no_array_length = FALSE;
 	gboolean _vala_array_null_terminated = FALSE;
+	ValaComment* _vala_comment = NULL;
 	ValaDataType* result = NULL;
 	ValaMarkupReader* _tmp0_;
 	gchar* _tmp1_ = NULL;
@@ -7156,21 +7286,22 @@ static ValaDataType* vala_gir_parser_parse_return_value (ValaGirParser* self, gc
 	ValaMarkupReader* _tmp2_;
 	gchar* _tmp3_ = NULL;
 	gchar* allow_none;
-	const gchar* _tmp4_;
+	ValaComment* _tmp4_ = NULL;
+	const gchar* _tmp5_;
 	gboolean transfer_elements;
-	gboolean _tmp5_;
-	gchar* _tmp6_ = NULL;
-	gint _tmp7_ = 0;
-	gboolean _tmp8_ = FALSE;
+	gboolean _tmp6_;
+	gchar* _tmp7_ = NULL;
+	gint _tmp8_ = 0;
 	gboolean _tmp9_ = FALSE;
-	ValaDataType* _tmp10_ = NULL;
+	gboolean _tmp10_ = FALSE;
+	ValaDataType* _tmp11_ = NULL;
 	ValaDataType* type;
-	gboolean _tmp11_ = FALSE;
-	const gchar* _tmp12_;
-	gboolean _tmp14_;
-	const gchar* _tmp16_;
-	ValaDataType* _tmp18_;
-	ValaDataType* _tmp19_ = NULL;
+	gboolean _tmp12_ = FALSE;
+	const gchar* _tmp13_;
+	gboolean _tmp15_;
+	const gchar* _tmp17_;
+	ValaDataType* _tmp19_;
+	ValaDataType* _tmp20_ = NULL;
 	g_return_val_if_fail (self != NULL, NULL);
 	vala_gir_parser_start_element (self, "return-value");
 	_tmp0_ = self->priv->reader;
@@ -7180,40 +7311,43 @@ static ValaDataType* vala_gir_parser_parse_return_value (ValaGirParser* self, gc
 	_tmp3_ = vala_markup_reader_get_attribute (_tmp2_, "allow-none");
 	allow_none = _tmp3_;
 	vala_gir_parser_next (self);
-	_tmp4_ = transfer;
-	transfer_elements = g_strcmp0 (_tmp4_, "container") != 0;
-	_tmp5_ = transfer_elements;
-	_tmp10_ = vala_gir_parser_parse_type (self, &_tmp6_, &_tmp7_, _tmp5_, &_tmp8_, &_tmp9_);
+	_tmp4_ = vala_gir_parser_parse_doc (self);
+	_vala_comment_unref0 (_vala_comment);
+	_vala_comment = _tmp4_;
+	_tmp5_ = transfer;
+	transfer_elements = g_strcmp0 (_tmp5_, "container") != 0;
+	_tmp6_ = transfer_elements;
+	_tmp11_ = vala_gir_parser_parse_type (self, &_tmp7_, &_tmp8_, _tmp6_, &_tmp9_, &_tmp10_);
 	_g_free0 (_vala_ctype);
-	_vala_ctype = _tmp6_;
-	_vala_array_length_idx = _tmp7_;
-	_vala_no_array_length = _tmp8_;
-	_vala_array_null_terminated = _tmp9_;
-	type = _tmp10_;
-	_tmp12_ = transfer;
-	if (g_strcmp0 (_tmp12_, "full") == 0) {
-		_tmp11_ = TRUE;
+	_vala_ctype = _tmp7_;
+	_vala_array_length_idx = _tmp8_;
+	_vala_no_array_length = _tmp9_;
+	_vala_array_null_terminated = _tmp10_;
+	type = _tmp11_;
+	_tmp13_ = transfer;
+	if (g_strcmp0 (_tmp13_, "full") == 0) {
+		_tmp12_ = TRUE;
 	} else {
-		const gchar* _tmp13_;
-		_tmp13_ = transfer;
-		_tmp11_ = g_strcmp0 (_tmp13_, "container") == 0;
-	}
-	_tmp14_ = _tmp11_;
-	if (_tmp14_) {
-		ValaDataType* _tmp15_;
-		_tmp15_ = type;
-		vala_data_type_set_value_owned (_tmp15_, TRUE);
-	}
-	_tmp16_ = allow_none;
-	if (g_strcmp0 (_tmp16_, "1") == 0) {
-		ValaDataType* _tmp17_;
-		_tmp17_ = type;
-		vala_data_type_set_nullable (_tmp17_, TRUE);
-	}
-	_tmp18_ = type;
-	_tmp19_ = vala_gir_parser_element_get_type (self, _tmp18_, TRUE, &_vala_no_array_length, NULL);
+		const gchar* _tmp14_;
+		_tmp14_ = transfer;
+		_tmp12_ = g_strcmp0 (_tmp14_, "container") == 0;
+	}
+	_tmp15_ = _tmp12_;
+	if (_tmp15_) {
+		ValaDataType* _tmp16_;
+		_tmp16_ = type;
+		vala_data_type_set_value_owned (_tmp16_, TRUE);
+	}
+	_tmp17_ = allow_none;
+	if (g_strcmp0 (_tmp17_, "1") == 0) {
+		ValaDataType* _tmp18_;
+		_tmp18_ = type;
+		vala_data_type_set_nullable (_tmp18_, TRUE);
+	}
+	_tmp19_ = type;
+	_tmp20_ = vala_gir_parser_element_get_type (self, _tmp19_, TRUE, &_vala_no_array_length, NULL);
 	_vala_code_node_unref0 (type);
-	type = _tmp19_;
+	type = _tmp20_;
 	vala_gir_parser_end_element (self, "return-value");
 	result = type;
 	_g_free0 (allow_none);
@@ -7232,15 +7366,21 @@ static ValaDataType* vala_gir_parser_parse_return_value (ValaGirParser* self, gc
 	if (array_null_terminated) {
 		*array_null_terminated = _vala_array_null_terminated;
 	}
+	if (comment) {
+		*comment = _vala_comment;
+	} else {
+		_vala_comment_unref0 (_vala_comment);
+	}
 	return result;
 }
 
 
-static ValaParameter* vala_gir_parser_parse_parameter (ValaGirParser* self, gint* array_length_idx, gint* closure_idx, gint* destroy_idx, gchar** scope, const gchar* default_name) {
+static ValaParameter* vala_gir_parser_parse_parameter (ValaGirParser* self, gint* array_length_idx, gint* closure_idx, gint* destroy_idx, gchar** scope, ValaComment** comment, const gchar* default_name) {
 	gint _vala_array_length_idx = 0;
 	gint _vala_closure_idx = 0;
 	gint _vala_destroy_idx = 0;
 	gchar* _vala_scope = NULL;
+	ValaComment* _vala_comment = NULL;
 	ValaParameter* result = NULL;
 	ValaParameter* param = NULL;
 	ValaMarkupReader* _tmp0_;
@@ -7271,9 +7411,10 @@ static ValaParameter* vala_gir_parser_parse_parameter (ValaGirParser* self, gint
 	gboolean _tmp33_;
 	ValaGirParserMetadata* _tmp36_;
 	gboolean _tmp37_ = FALSE;
-	ValaMarkupReader* _tmp40_;
-	const gchar* _tmp41_;
+	ValaComment* _tmp40_ = NULL;
+	ValaMarkupReader* _tmp41_;
 	const gchar* _tmp42_;
+	const gchar* _tmp43_;
 	g_return_val_if_fail (self != NULL, NULL);
 	_vala_array_length_idx = -1;
 	_vala_closure_idx = -1;
@@ -7383,191 +7524,194 @@ static ValaParameter* vala_gir_parser_parse_parameter (ValaGirParser* self, gint
 		_vala_closure_idx = _tmp39_;
 	}
 	vala_gir_parser_next (self);
-	_tmp40_ = self->priv->reader;
-	_tmp41_ = vala_markup_reader_get_name (_tmp40_);
-	_tmp42_ = _tmp41_;
-	if (g_strcmp0 (_tmp42_, "varargs") == 0) {
-		ValaSourceReference* _tmp43_ = NULL;
-		ValaSourceReference* _tmp44_;
-		ValaParameter* _tmp45_;
+	_tmp40_ = vala_gir_parser_parse_doc (self);
+	_vala_comment_unref0 (_vala_comment);
+	_vala_comment = _tmp40_;
+	_tmp41_ = self->priv->reader;
+	_tmp42_ = vala_markup_reader_get_name (_tmp41_);
+	_tmp43_ = _tmp42_;
+	if (g_strcmp0 (_tmp43_, "varargs") == 0) {
+		ValaSourceReference* _tmp44_ = NULL;
+		ValaSourceReference* _tmp45_;
+		ValaParameter* _tmp46_;
 		vala_gir_parser_start_element (self, "varargs");
 		vala_gir_parser_next (self);
-		_tmp43_ = vala_gir_parser_get_current_src (self);
-		_tmp44_ = _tmp43_;
-		_tmp45_ = vala_parameter_new_with_ellipsis (_tmp44_);
+		_tmp44_ = vala_gir_parser_get_current_src (self);
+		_tmp45_ = _tmp44_;
+		_tmp46_ = vala_parameter_new_with_ellipsis (_tmp45_);
 		_vala_code_node_unref0 (param);
-		param = _tmp45_;
-		_vala_source_reference_unref0 (_tmp44_);
+		param = _tmp46_;
+		_vala_source_reference_unref0 (_tmp45_);
 		vala_gir_parser_end_element (self, "varargs");
 	} else {
 		gchar* ctype = NULL;
 		gboolean no_array_length = FALSE;
 		gboolean array_null_terminated = FALSE;
-		const gchar* _tmp46_;
-		gchar* _tmp47_ = NULL;
-		gint _tmp48_ = 0;
-		gboolean _tmp49_ = FALSE;
+		const gchar* _tmp47_;
+		gchar* _tmp48_ = NULL;
+		gint _tmp49_ = 0;
 		gboolean _tmp50_ = FALSE;
-		ValaDataType* _tmp51_ = NULL;
+		gboolean _tmp51_ = FALSE;
+		ValaDataType* _tmp52_ = NULL;
 		ValaDataType* type;
-		gboolean _tmp52_ = FALSE;
 		gboolean _tmp53_ = FALSE;
-		const gchar* _tmp54_;
-		gboolean _tmp56_;
-		gboolean _tmp58_;
-		gboolean _tmp60_ = FALSE;
-		const gchar* _tmp61_;
-		gboolean _tmp63_;
+		gboolean _tmp54_ = FALSE;
+		const gchar* _tmp55_;
+		gboolean _tmp57_;
+		gboolean _tmp59_;
+		gboolean _tmp61_ = FALSE;
+		const gchar* _tmp62_;
+		gboolean _tmp64_;
 		gboolean changed = FALSE;
-		gboolean _tmp65_ = FALSE;
-		const gchar* _tmp66_;
-		ValaDataType* _tmp68_;
-		gboolean _tmp69_;
-		gboolean _tmp70_ = FALSE;
-		ValaDataType* _tmp71_ = NULL;
-		gboolean _tmp72_;
-		const gchar* _tmp73_;
-		ValaDataType* _tmp74_;
-		ValaSourceReference* _tmp75_ = NULL;
-		ValaSourceReference* _tmp76_;
-		ValaParameter* _tmp77_;
-		const gchar* _tmp78_;
-		const gchar* _tmp81_;
-		ValaDataType* _tmp85_;
-		ValaParameter* _tmp95_;
-		ValaGirParserMetadata* _tmp96_;
-		ValaExpression* _tmp97_ = NULL;
-		ValaExpression* _tmp98_;
-		_tmp46_ = transfer;
-		_tmp51_ = vala_gir_parser_parse_type (self, &_tmp47_, &_tmp48_, g_strcmp0 (_tmp46_, "container") != 0, &_tmp49_, &_tmp50_);
+		gboolean _tmp66_ = FALSE;
+		const gchar* _tmp67_;
+		ValaDataType* _tmp69_;
+		gboolean _tmp70_;
+		gboolean _tmp71_ = FALSE;
+		ValaDataType* _tmp72_ = NULL;
+		gboolean _tmp73_;
+		const gchar* _tmp74_;
+		ValaDataType* _tmp75_;
+		ValaSourceReference* _tmp76_ = NULL;
+		ValaSourceReference* _tmp77_;
+		ValaParameter* _tmp78_;
+		const gchar* _tmp79_;
+		const gchar* _tmp82_;
+		ValaDataType* _tmp86_;
+		ValaParameter* _tmp96_;
+		ValaGirParserMetadata* _tmp97_;
+		ValaExpression* _tmp98_ = NULL;
+		ValaExpression* _tmp99_;
+		_tmp47_ = transfer;
+		_tmp52_ = vala_gir_parser_parse_type (self, &_tmp48_, &_tmp49_, g_strcmp0 (_tmp47_, "container") != 0, &_tmp50_, &_tmp51_);
 		_g_free0 (ctype);
-		ctype = _tmp47_;
-		_vala_array_length_idx = _tmp48_;
-		no_array_length = _tmp49_;
-		array_null_terminated = _tmp50_;
-		type = _tmp51_;
-		_tmp54_ = transfer;
-		if (g_strcmp0 (_tmp54_, "full") == 0) {
-			_tmp53_ = TRUE;
+		ctype = _tmp48_;
+		_vala_array_length_idx = _tmp49_;
+		no_array_length = _tmp50_;
+		array_null_terminated = _tmp51_;
+		type = _tmp52_;
+		_tmp55_ = transfer;
+		if (g_strcmp0 (_tmp55_, "full") == 0) {
+			_tmp54_ = TRUE;
 		} else {
-			const gchar* _tmp55_;
-			_tmp55_ = transfer;
-			_tmp53_ = g_strcmp0 (_tmp55_, "container") == 0;
+			const gchar* _tmp56_;
+			_tmp56_ = transfer;
+			_tmp54_ = g_strcmp0 (_tmp56_, "container") == 0;
 		}
-		_tmp56_ = _tmp53_;
-		if (_tmp56_) {
-			_tmp52_ = TRUE;
+		_tmp57_ = _tmp54_;
+		if (_tmp57_) {
+			_tmp53_ = TRUE;
 		} else {
-			const gchar* _tmp57_;
-			_tmp57_ = destroy;
-			_tmp52_ = _tmp57_ != NULL;
+			const gchar* _tmp58_;
+			_tmp58_ = destroy;
+			_tmp53_ = _tmp58_ != NULL;
 		}
-		_tmp58_ = _tmp52_;
-		if (_tmp58_) {
-			ValaDataType* _tmp59_;
-			_tmp59_ = type;
-			vala_data_type_set_value_owned (_tmp59_, TRUE);
+		_tmp59_ = _tmp53_;
+		if (_tmp59_) {
+			ValaDataType* _tmp60_;
+			_tmp60_ = type;
+			vala_data_type_set_value_owned (_tmp60_, TRUE);
 		}
-		_tmp61_ = allow_none;
-		if (g_strcmp0 (_tmp61_, "1") == 0) {
-			const gchar* _tmp62_;
-			_tmp62_ = direction;
-			_tmp60_ = g_strcmp0 (_tmp62_, "out") != 0;
+		_tmp62_ = allow_none;
+		if (g_strcmp0 (_tmp62_, "1") == 0) {
+			const gchar* _tmp63_;
+			_tmp63_ = direction;
+			_tmp61_ = g_strcmp0 (_tmp63_, "out") != 0;
 		} else {
-			_tmp60_ = FALSE;
+			_tmp61_ = FALSE;
 		}
-		_tmp63_ = _tmp60_;
-		if (_tmp63_) {
-			ValaDataType* _tmp64_;
-			_tmp64_ = type;
-			vala_data_type_set_nullable (_tmp64_, TRUE);
+		_tmp64_ = _tmp61_;
+		if (_tmp64_) {
+			ValaDataType* _tmp65_;
+			_tmp65_ = type;
+			vala_data_type_set_nullable (_tmp65_, TRUE);
 		}
-		_tmp66_ = direction;
-		if (g_strcmp0 (_tmp66_, "out") == 0) {
-			_tmp65_ = TRUE;
+		_tmp67_ = direction;
+		if (g_strcmp0 (_tmp67_, "out") == 0) {
+			_tmp66_ = TRUE;
 		} else {
-			const gchar* _tmp67_;
-			_tmp67_ = direction;
-			_tmp65_ = g_strcmp0 (_tmp67_, "inout") == 0;
+			const gchar* _tmp68_;
+			_tmp68_ = direction;
+			_tmp66_ = g_strcmp0 (_tmp68_, "inout") == 0;
 		}
-		_tmp68_ = type;
-		_tmp69_ = _tmp65_;
-		_tmp71_ = vala_gir_parser_element_get_type (self, _tmp68_, _tmp69_, &no_array_length, &_tmp70_);
-		changed = _tmp70_;
+		_tmp69_ = type;
+		_tmp70_ = _tmp66_;
+		_tmp72_ = vala_gir_parser_element_get_type (self, _tmp69_, _tmp70_, &no_array_length, &_tmp71_);
+		changed = _tmp71_;
 		_vala_code_node_unref0 (type);
-		type = _tmp71_;
-		_tmp72_ = changed;
-		if (!_tmp72_) {
+		type = _tmp72_;
+		_tmp73_ = changed;
+		if (!_tmp73_) {
 			_g_free0 (ctype);
 			ctype = NULL;
 		}
-		_tmp73_ = name;
-		_tmp74_ = type;
-		_tmp75_ = vala_gir_parser_get_current_src (self);
-		_tmp76_ = _tmp75_;
-		_tmp77_ = vala_parameter_new (_tmp73_, _tmp74_, _tmp76_);
+		_tmp74_ = name;
+		_tmp75_ = type;
+		_tmp76_ = vala_gir_parser_get_current_src (self);
+		_tmp77_ = _tmp76_;
+		_tmp78_ = vala_parameter_new (_tmp74_, _tmp75_, _tmp77_);
 		_vala_code_node_unref0 (param);
-		param = _tmp77_;
-		_vala_source_reference_unref0 (_tmp76_);
-		_tmp78_ = ctype;
-		if (_tmp78_ != NULL) {
-			ValaParameter* _tmp79_;
-			const gchar* _tmp80_;
-			_tmp79_ = param;
-			_tmp80_ = ctype;
-			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp79_, "CCode", "type", _tmp80_, NULL);
+		param = _tmp78_;
+		_vala_source_reference_unref0 (_tmp77_);
+		_tmp79_ = ctype;
+		if (_tmp79_ != NULL) {
+			ValaParameter* _tmp80_;
+			const gchar* _tmp81_;
+			_tmp80_ = param;
+			_tmp81_ = ctype;
+			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp80_, "CCode", "type", _tmp81_, NULL);
 		}
-		_tmp81_ = direction;
-		if (g_strcmp0 (_tmp81_, "out") == 0) {
-			ValaParameter* _tmp82_;
-			_tmp82_ = param;
-			vala_parameter_set_direction (_tmp82_, VALA_PARAMETER_DIRECTION_OUT);
+		_tmp82_ = direction;
+		if (g_strcmp0 (_tmp82_, "out") == 0) {
+			ValaParameter* _tmp83_;
+			_tmp83_ = param;
+			vala_parameter_set_direction (_tmp83_, VALA_PARAMETER_DIRECTION_OUT);
 		} else {
-			const gchar* _tmp83_;
-			_tmp83_ = direction;
-			if (g_strcmp0 (_tmp83_, "inout") == 0) {
-				ValaParameter* _tmp84_;
-				_tmp84_ = param;
-				vala_parameter_set_direction (_tmp84_, VALA_PARAMETER_DIRECTION_REF);
+			const gchar* _tmp84_;
+			_tmp84_ = direction;
+			if (g_strcmp0 (_tmp84_, "inout") == 0) {
+				ValaParameter* _tmp85_;
+				_tmp85_ = param;
+				vala_parameter_set_direction (_tmp85_, VALA_PARAMETER_DIRECTION_REF);
 			}
 		}
-		_tmp85_ = type;
-		if (VALA_IS_ARRAY_TYPE (_tmp85_)) {
-			ValaGirParserMetadata* _tmp86_;
-			gboolean _tmp87_ = FALSE;
-			_tmp86_ = self->priv->metadata;
-			_tmp87_ = vala_gir_parser_metadata_has_argument (_tmp86_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX);
-			if (_tmp87_) {
-				ValaGirParserMetadata* _tmp88_;
-				gint _tmp89_ = 0;
-				_tmp88_ = self->priv->metadata;
-				_tmp89_ = vala_gir_parser_metadata_get_integer (_tmp88_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX);
-				_vala_array_length_idx = _tmp89_;
+		_tmp86_ = type;
+		if (VALA_IS_ARRAY_TYPE (_tmp86_)) {
+			ValaGirParserMetadata* _tmp87_;
+			gboolean _tmp88_ = FALSE;
+			_tmp87_ = self->priv->metadata;
+			_tmp88_ = vala_gir_parser_metadata_has_argument (_tmp87_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX);
+			if (_tmp88_) {
+				ValaGirParserMetadata* _tmp89_;
+				gint _tmp90_ = 0;
+				_tmp89_ = self->priv->metadata;
+				_tmp90_ = vala_gir_parser_metadata_get_integer (_tmp89_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX);
+				_vala_array_length_idx = _tmp90_;
 			} else {
-				gboolean _tmp90_;
-				gboolean _tmp92_;
-				_tmp90_ = no_array_length;
-				if (_tmp90_) {
-					ValaParameter* _tmp91_;
-					_tmp91_ = param;
-					vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp91_, "CCode", "array_length", FALSE, NULL);
+				gboolean _tmp91_;
+				gboolean _tmp93_;
+				_tmp91_ = no_array_length;
+				if (_tmp91_) {
+					ValaParameter* _tmp92_;
+					_tmp92_ = param;
+					vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp92_, "CCode", "array_length", FALSE, NULL);
 				}
-				_tmp92_ = array_null_terminated;
-				if (_tmp92_) {
-					ValaParameter* _tmp93_;
-					gboolean _tmp94_;
-					_tmp93_ = param;
-					_tmp94_ = array_null_terminated;
-					vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp93_, "CCode", "array_null_terminated", _tmp94_, NULL);
+				_tmp93_ = array_null_terminated;
+				if (_tmp93_) {
+					ValaParameter* _tmp94_;
+					gboolean _tmp95_;
+					_tmp94_ = param;
+					_tmp95_ = array_null_terminated;
+					vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp94_, "CCode", "array_null_terminated", _tmp95_, NULL);
 				}
 			}
 		}
-		_tmp95_ = param;
-		_tmp96_ = self->priv->metadata;
-		_tmp97_ = vala_gir_parser_metadata_get_expression (_tmp96_, VALA_GIR_PARSER_ARGUMENT_TYPE_DEFAULT);
-		_tmp98_ = _tmp97_;
-		vala_variable_set_initializer ((ValaVariable*) _tmp95_, _tmp98_);
-		_vala_code_node_unref0 (_tmp98_);
+		_tmp96_ = param;
+		_tmp97_ = self->priv->metadata;
+		_tmp98_ = vala_gir_parser_metadata_get_expression (_tmp97_, VALA_GIR_PARSER_ARGUMENT_TYPE_DEFAULT);
+		_tmp99_ = _tmp98_;
+		vala_variable_set_initializer ((ValaVariable*) _tmp96_, _tmp99_);
+		_vala_code_node_unref0 (_tmp99_);
 		_vala_code_node_unref0 (type);
 		_g_free0 (ctype);
 	}
@@ -7593,6 +7737,11 @@ static ValaParameter* vala_gir_parser_parse_parameter (ValaGirParser* self, gint
 	} else {
 		_g_free0 (_vala_scope);
 	}
+	if (comment) {
+		*comment = _vala_comment;
+	} else {
+		_vala_comment_unref0 (_vala_comment);
+	}
 	return result;
 }
 
@@ -8216,6 +8365,9 @@ static void vala_gir_parser_parse_record (ValaGirParser* self) {
 	gchar* gtype_struct_for;
 	const gchar* _tmp27_;
 	gboolean first_field;
+	ValaStruct* _tmp36_;
+	ValaGirComment* _tmp37_ = NULL;
+	ValaGirComment* _tmp38_;
 	g_return_if_fail (self != NULL);
 	vala_gir_parser_start_element (self, "record");
 	_tmp0_ = vala_gir_parser_element_get_name (self, NULL);
@@ -8312,133 +8464,138 @@ static void vala_gir_parser_parse_record (ValaGirParser* self) {
 	}
 	first_field = TRUE;
 	vala_gir_parser_next (self);
+	_tmp36_ = st;
+	_tmp37_ = vala_gir_parser_parse_symbol_doc (self);
+	_tmp38_ = _tmp37_;
+	vala_symbol_set_comment ((ValaSymbol*) _tmp36_, (ValaComment*) _tmp38_);
+	_vala_comment_unref0 (_tmp38_);
 	while (TRUE) {
-		ValaMarkupTokenType _tmp36_;
-		gboolean _tmp37_ = FALSE;
-		ValaMarkupReader* _tmp44_;
-		const gchar* _tmp45_;
-		const gchar* _tmp46_;
-		_tmp36_ = self->priv->current_token;
-		if (!(_tmp36_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) {
+		ValaMarkupTokenType _tmp39_;
+		gboolean _tmp40_ = FALSE;
+		ValaMarkupReader* _tmp47_;
+		const gchar* _tmp48_;
+		const gchar* _tmp49_;
+		_tmp39_ = self->priv->current_token;
+		if (!(_tmp39_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) {
 			break;
 		}
-		_tmp37_ = vala_gir_parser_push_metadata (self);
-		if (!_tmp37_) {
-			gboolean _tmp38_ = FALSE;
-			gboolean _tmp39_;
-			gboolean _tmp43_;
-			_tmp39_ = first_field;
-			if (_tmp39_) {
-				ValaMarkupReader* _tmp40_;
-				const gchar* _tmp41_;
-				const gchar* _tmp42_;
-				_tmp40_ = self->priv->reader;
-				_tmp41_ = vala_markup_reader_get_name (_tmp40_);
-				_tmp42_ = _tmp41_;
-				_tmp38_ = g_strcmp0 (_tmp42_, "field") == 0;
+		_tmp40_ = vala_gir_parser_push_metadata (self);
+		if (!_tmp40_) {
+			gboolean _tmp41_ = FALSE;
+			gboolean _tmp42_;
+			gboolean _tmp46_;
+			_tmp42_ = first_field;
+			if (_tmp42_) {
+				ValaMarkupReader* _tmp43_;
+				const gchar* _tmp44_;
+				const gchar* _tmp45_;
+				_tmp43_ = self->priv->reader;
+				_tmp44_ = vala_markup_reader_get_name (_tmp43_);
+				_tmp45_ = _tmp44_;
+				_tmp41_ = g_strcmp0 (_tmp45_, "field") == 0;
 			} else {
-				_tmp38_ = FALSE;
+				_tmp41_ = FALSE;
 			}
-			_tmp43_ = _tmp38_;
-			if (_tmp43_) {
+			_tmp46_ = _tmp41_;
+			if (_tmp46_) {
 				first_field = FALSE;
 			}
 			vala_gir_parser_skip_element (self);
 			continue;
 		}
-		_tmp44_ = self->priv->reader;
-		_tmp45_ = vala_markup_reader_get_name (_tmp44_);
-		_tmp46_ = _tmp45_;
-		if (g_strcmp0 (_tmp46_, "field") == 0) {
-			gboolean _tmp47_ = FALSE;
-			ValaMarkupReader* _tmp48_;
-			gchar* _tmp49_ = NULL;
-			gchar* _tmp50_;
-			gboolean _tmp51_;
-			gboolean _tmp56_;
-			_tmp48_ = self->priv->reader;
-			_tmp49_ = vala_markup_reader_get_attribute (_tmp48_, "name");
-			_tmp50_ = _tmp49_;
-			_tmp51_ = g_strcmp0 (_tmp50_, "priv") != 0;
-			_g_free0 (_tmp50_);
-			if (_tmp51_) {
-				gboolean _tmp52_ = FALSE;
-				gboolean _tmp53_;
-				gboolean _tmp55_;
-				_tmp53_ = first_field;
-				if (_tmp53_) {
-					const gchar* _tmp54_;
-					_tmp54_ = gtype_struct_for;
-					_tmp52_ = _tmp54_ != NULL;
+		_tmp47_ = self->priv->reader;
+		_tmp48_ = vala_markup_reader_get_name (_tmp47_);
+		_tmp49_ = _tmp48_;
+		if (g_strcmp0 (_tmp49_, "field") == 0) {
+			gboolean _tmp50_ = FALSE;
+			ValaMarkupReader* _tmp51_;
+			gchar* _tmp52_ = NULL;
+			gchar* _tmp53_;
+			gboolean _tmp54_;
+			gboolean _tmp59_;
+			_tmp51_ = self->priv->reader;
+			_tmp52_ = vala_markup_reader_get_attribute (_tmp51_, "name");
+			_tmp53_ = _tmp52_;
+			_tmp54_ = g_strcmp0 (_tmp53_, "priv") != 0;
+			_g_free0 (_tmp53_);
+			if (_tmp54_) {
+				gboolean _tmp55_ = FALSE;
+				gboolean _tmp56_;
+				gboolean _tmp58_;
+				_tmp56_ = first_field;
+				if (_tmp56_) {
+					const gchar* _tmp57_;
+					_tmp57_ = gtype_struct_for;
+					_tmp55_ = _tmp57_ != NULL;
 				} else {
-					_tmp52_ = FALSE;
+					_tmp55_ = FALSE;
 				}
-				_tmp55_ = _tmp52_;
-				_tmp47_ = !_tmp55_;
+				_tmp58_ = _tmp55_;
+				_tmp50_ = !_tmp58_;
 			} else {
-				_tmp47_ = FALSE;
+				_tmp50_ = FALSE;
 			}
-			_tmp56_ = _tmp47_;
-			if (_tmp56_) {
+			_tmp59_ = _tmp50_;
+			if (_tmp59_) {
 				vala_gir_parser_parse_field (self);
 			} else {
 				vala_gir_parser_skip_element (self);
 			}
 			first_field = FALSE;
 		} else {
-			ValaMarkupReader* _tmp57_;
-			const gchar* _tmp58_;
-			const gchar* _tmp59_;
-			_tmp57_ = self->priv->reader;
-			_tmp58_ = vala_markup_reader_get_name (_tmp57_);
-			_tmp59_ = _tmp58_;
-			if (g_strcmp0 (_tmp59_, "constructor") == 0) {
+			ValaMarkupReader* _tmp60_;
+			const gchar* _tmp61_;
+			const gchar* _tmp62_;
+			_tmp60_ = self->priv->reader;
+			_tmp61_ = vala_markup_reader_get_name (_tmp60_);
+			_tmp62_ = _tmp61_;
+			if (g_strcmp0 (_tmp62_, "constructor") == 0) {
 				vala_gir_parser_parse_constructor (self);
 			} else {
-				ValaMarkupReader* _tmp60_;
-				const gchar* _tmp61_;
-				const gchar* _tmp62_;
-				_tmp60_ = self->priv->reader;
-				_tmp61_ = vala_markup_reader_get_name (_tmp60_);
-				_tmp62_ = _tmp61_;
-				if (g_strcmp0 (_tmp62_, "method") == 0) {
+				ValaMarkupReader* _tmp63_;
+				const gchar* _tmp64_;
+				const gchar* _tmp65_;
+				_tmp63_ = self->priv->reader;
+				_tmp64_ = vala_markup_reader_get_name (_tmp63_);
+				_tmp65_ = _tmp64_;
+				if (g_strcmp0 (_tmp65_, "method") == 0) {
 					vala_gir_parser_parse_method (self, "method");
 				} else {
-					ValaMarkupReader* _tmp63_;
-					const gchar* _tmp64_;
-					const gchar* _tmp65_;
-					_tmp63_ = self->priv->reader;
-					_tmp64_ = vala_markup_reader_get_name (_tmp63_);
-					_tmp65_ = _tmp64_;
-					if (g_strcmp0 (_tmp65_, "function") == 0) {
+					ValaMarkupReader* _tmp66_;
+					const gchar* _tmp67_;
+					const gchar* _tmp68_;
+					_tmp66_ = self->priv->reader;
+					_tmp67_ = vala_markup_reader_get_name (_tmp66_);
+					_tmp68_ = _tmp67_;
+					if (g_strcmp0 (_tmp68_, "function") == 0) {
 						vala_gir_parser_skip_element (self);
 					} else {
-						ValaMarkupReader* _tmp66_;
-						const gchar* _tmp67_;
-						const gchar* _tmp68_;
-						_tmp66_ = self->priv->reader;
-						_tmp67_ = vala_markup_reader_get_name (_tmp66_);
-						_tmp68_ = _tmp67_;
-						if (g_strcmp0 (_tmp68_, "union") == 0) {
+						ValaMarkupReader* _tmp69_;
+						const gchar* _tmp70_;
+						const gchar* _tmp71_;
+						_tmp69_ = self->priv->reader;
+						_tmp70_ = vala_markup_reader_get_name (_tmp69_);
+						_tmp71_ = _tmp70_;
+						if (g_strcmp0 (_tmp71_, "union") == 0) {
 							vala_gir_parser_parse_union (self);
 						} else {
-							ValaSourceReference* _tmp69_ = NULL;
-							ValaSourceReference* _tmp70_;
-							ValaMarkupReader* _tmp71_;
-							const gchar* _tmp72_;
-							const gchar* _tmp73_;
-							gchar* _tmp74_ = NULL;
-							gchar* _tmp75_;
-							_tmp69_ = vala_gir_parser_get_current_src (self);
-							_tmp70_ = _tmp69_;
-							_tmp71_ = self->priv->reader;
-							_tmp72_ = vala_markup_reader_get_name (_tmp71_);
+							ValaSourceReference* _tmp72_ = NULL;
+							ValaSourceReference* _tmp73_;
+							ValaMarkupReader* _tmp74_;
+							const gchar* _tmp75_;
+							const gchar* _tmp76_;
+							gchar* _tmp77_ = NULL;
+							gchar* _tmp78_;
+							_tmp72_ = vala_gir_parser_get_current_src (self);
 							_tmp73_ = _tmp72_;
-							_tmp74_ = g_strdup_printf ("unknown child element `%s' in `record'", _tmp73_);
-							_tmp75_ = _tmp74_;
-							vala_report_error (_tmp70_, _tmp75_);
-							_g_free0 (_tmp75_);
-							_vala_source_reference_unref0 (_tmp70_);
+							_tmp74_ = self->priv->reader;
+							_tmp75_ = vala_markup_reader_get_name (_tmp74_);
+							_tmp76_ = _tmp75_;
+							_tmp77_ = g_strdup_printf ("unknown child element `%s' in `record'", _tmp76_);
+							_tmp78_ = _tmp77_;
+							vala_report_error (_tmp73_, _tmp78_);
+							_g_free0 (_tmp78_);
+							_vala_source_reference_unref0 (_tmp73_);
 							vala_gir_parser_skip_element (self);
 						}
 					}
@@ -8463,8 +8620,11 @@ static void vala_gir_parser_parse_class (ValaGirParser* self) {
 	gchar* parent;
 	ValaGirParserNode* _tmp4_;
 	gboolean _tmp5_;
-	ValaClass* _tmp32_;
-	ValaClass* _tmp33_;
+	ValaClass* _tmp34_;
+	ValaClass* _tmp35_;
+	ValaClass* _tmp36_;
+	ValaGirComment* _tmp37_ = NULL;
+	ValaGirComment* _tmp38_;
 	gboolean first_field;
 	g_return_if_fail (self != NULL);
 	vala_gir_parser_start_element (self, "class");
@@ -8490,13 +8650,15 @@ static void vala_gir_parser_parse_class (ValaGirParser* self) {
 		gchar* _tmp15_ = NULL;
 		gchar* _tmp16_;
 		ValaClass* _tmp17_;
-		ValaMarkupReader* _tmp18_;
-		gchar* _tmp19_ = NULL;
-		gchar* _tmp20_;
-		const gchar* _tmp21_;
-		ValaGirParserNode* _tmp26_;
-		ValaClass* _tmp27_;
-		ValaSymbol* _tmp28_;
+		ValaGirParserMetadata* _tmp18_;
+		ValaMarkupReader* _tmp19_;
+		gchar* _tmp20_ = NULL;
+		gchar* _tmp21_;
+		gboolean _tmp22_ = FALSE;
+		const gchar* _tmp23_;
+		ValaGirParserNode* _tmp28_;
+		ValaClass* _tmp29_;
+		ValaSymbol* _tmp30_;
 		_tmp6_ = self->priv->current;
 		_tmp7_ = _tmp6_->name;
 		_tmp8_ = self->priv->current;
@@ -8514,143 +8676,150 @@ static void vala_gir_parser_parse_class (ValaGirParser* self) {
 		_g_free0 (_tmp16_);
 		_g_free0 (_tmp14_);
 		_tmp17_ = cl;
-		_tmp18_ = self->priv->reader;
-		_tmp19_ = vala_markup_reader_get_attribute (_tmp18_, "abstract");
-		_tmp20_ = _tmp19_;
-		vala_class_set_is_abstract (_tmp17_, g_strcmp0 (_tmp20_, "1") == 0);
-		_g_free0 (_tmp20_);
-		_tmp21_ = parent;
-		if (_tmp21_ != NULL) {
-			ValaClass* _tmp22_;
-			const gchar* _tmp23_;
-			ValaDataType* _tmp24_ = NULL;
-			ValaDataType* _tmp25_;
-			_tmp22_ = cl;
-			_tmp23_ = parent;
-			_tmp24_ = vala_gir_parser_parse_type_from_gir_name (self, _tmp23_, NULL, NULL, NULL);
-			_tmp25_ = _tmp24_;
-			vala_class_add_base_type (_tmp22_, _tmp25_);
-			_vala_code_node_unref0 (_tmp25_);
+		_tmp18_ = self->priv->metadata;
+		_tmp19_ = self->priv->reader;
+		_tmp20_ = vala_markup_reader_get_attribute (_tmp19_, "abstract");
+		_tmp21_ = _tmp20_;
+		_tmp22_ = vala_gir_parser_metadata_get_bool (_tmp18_, VALA_GIR_PARSER_ARGUMENT_TYPE_ABSTRACT, g_strcmp0 (_tmp21_, "1") == 0);
+		vala_class_set_is_abstract (_tmp17_, _tmp22_);
+		_g_free0 (_tmp21_);
+		_tmp23_ = parent;
+		if (_tmp23_ != NULL) {
+			ValaClass* _tmp24_;
+			const gchar* _tmp25_;
+			ValaDataType* _tmp26_ = NULL;
+			ValaDataType* _tmp27_;
+			_tmp24_ = cl;
+			_tmp25_ = parent;
+			_tmp26_ = vala_gir_parser_parse_type_from_gir_name (self, _tmp25_, NULL, NULL, NULL);
+			_tmp27_ = _tmp26_;
+			vala_class_add_base_type (_tmp24_, _tmp27_);
+			_vala_code_node_unref0 (_tmp27_);
 		}
-		_tmp26_ = self->priv->current;
-		_tmp27_ = cl;
-		_tmp28_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp27_);
-		_vala_code_node_unref0 (_tmp26_->symbol);
-		_tmp26_->symbol = _tmp28_;
+		_tmp28_ = self->priv->current;
+		_tmp29_ = cl;
+		_tmp30_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp29_);
+		_vala_code_node_unref0 (_tmp28_->symbol);
+		_tmp28_->symbol = _tmp30_;
 	} else {
-		ValaGirParserNode* _tmp29_;
-		ValaSymbol* _tmp30_;
-		ValaClass* _tmp31_;
-		_tmp29_ = self->priv->current;
-		_tmp30_ = _tmp29_->symbol;
-		_tmp31_ = _vala_code_node_ref0 (VALA_CLASS (_tmp30_));
+		ValaGirParserNode* _tmp31_;
+		ValaSymbol* _tmp32_;
+		ValaClass* _tmp33_;
+		_tmp31_ = self->priv->current;
+		_tmp32_ = _tmp31_->symbol;
+		_tmp33_ = _vala_code_node_ref0 (VALA_CLASS (_tmp32_));
 		_vala_code_node_unref0 (cl);
-		cl = _tmp31_;
+		cl = _tmp33_;
 	}
-	_tmp32_ = cl;
-	vala_symbol_set_access ((ValaSymbol*) _tmp32_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
-	_tmp33_ = cl;
-	vala_symbol_set_external ((ValaSymbol*) _tmp33_, TRUE);
+	_tmp34_ = cl;
+	vala_symbol_set_access ((ValaSymbol*) _tmp34_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
+	_tmp35_ = cl;
+	vala_symbol_set_external ((ValaSymbol*) _tmp35_, TRUE);
 	vala_gir_parser_next (self);
+	_tmp36_ = cl;
+	_tmp37_ = vala_gir_parser_parse_symbol_doc (self);
+	_tmp38_ = _tmp37_;
+	vala_symbol_set_comment ((ValaSymbol*) _tmp36_, (ValaComment*) _tmp38_);
+	_vala_comment_unref0 (_tmp38_);
 	first_field = TRUE;
 	while (TRUE) {
-		ValaMarkupTokenType _tmp34_;
-		gboolean _tmp35_ = FALSE;
-		ValaMarkupReader* _tmp42_;
-		const gchar* _tmp43_;
-		const gchar* _tmp44_;
-		_tmp34_ = self->priv->current_token;
-		if (!(_tmp34_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) {
+		ValaMarkupTokenType _tmp39_;
+		gboolean _tmp40_ = FALSE;
+		ValaMarkupReader* _tmp47_;
+		const gchar* _tmp48_;
+		const gchar* _tmp49_;
+		_tmp39_ = self->priv->current_token;
+		if (!(_tmp39_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) {
 			break;
 		}
-		_tmp35_ = vala_gir_parser_push_metadata (self);
-		if (!_tmp35_) {
-			gboolean _tmp36_ = FALSE;
-			gboolean _tmp37_;
-			gboolean _tmp41_;
-			_tmp37_ = first_field;
-			if (_tmp37_) {
-				ValaMarkupReader* _tmp38_;
-				const gchar* _tmp39_;
-				const gchar* _tmp40_;
-				_tmp38_ = self->priv->reader;
-				_tmp39_ = vala_markup_reader_get_name (_tmp38_);
-				_tmp40_ = _tmp39_;
-				_tmp36_ = g_strcmp0 (_tmp40_, "field") == 0;
+		_tmp40_ = vala_gir_parser_push_metadata (self);
+		if (!_tmp40_) {
+			gboolean _tmp41_ = FALSE;
+			gboolean _tmp42_;
+			gboolean _tmp46_;
+			_tmp42_ = first_field;
+			if (_tmp42_) {
+				ValaMarkupReader* _tmp43_;
+				const gchar* _tmp44_;
+				const gchar* _tmp45_;
+				_tmp43_ = self->priv->reader;
+				_tmp44_ = vala_markup_reader_get_name (_tmp43_);
+				_tmp45_ = _tmp44_;
+				_tmp41_ = g_strcmp0 (_tmp45_, "field") == 0;
 			} else {
-				_tmp36_ = FALSE;
+				_tmp41_ = FALSE;
 			}
-			_tmp41_ = _tmp36_;
-			if (_tmp41_) {
+			_tmp46_ = _tmp41_;
+			if (_tmp46_) {
 				first_field = FALSE;
 			}
 			vala_gir_parser_skip_element (self);
 			continue;
 		}
-		_tmp42_ = self->priv->reader;
-		_tmp43_ = vala_markup_reader_get_name (_tmp42_);
-		_tmp44_ = _tmp43_;
-		if (g_strcmp0 (_tmp44_, "implements") == 0) {
-			ValaClass* _tmp45_;
-			ValaMarkupReader* _tmp46_;
-			gchar* _tmp47_ = NULL;
-			gchar* _tmp48_;
-			ValaDataType* _tmp49_ = NULL;
-			ValaDataType* _tmp50_;
+		_tmp47_ = self->priv->reader;
+		_tmp48_ = vala_markup_reader_get_name (_tmp47_);
+		_tmp49_ = _tmp48_;
+		if (g_strcmp0 (_tmp49_, "implements") == 0) {
+			ValaClass* _tmp50_;
+			ValaMarkupReader* _tmp51_;
+			gchar* _tmp52_ = NULL;
+			gchar* _tmp53_;
+			ValaDataType* _tmp54_ = NULL;
+			ValaDataType* _tmp55_;
 			vala_gir_parser_start_element (self, "implements");
-			_tmp45_ = cl;
-			_tmp46_ = self->priv->reader;
-			_tmp47_ = vala_markup_reader_get_attribute (_tmp46_, "name");
-			_tmp48_ = _tmp47_;
-			_tmp49_ = vala_gir_parser_parse_type_from_gir_name (self, _tmp48_, NULL, NULL, NULL);
-			_tmp50_ = _tmp49_;
-			vala_class_add_base_type (_tmp45_, _tmp50_);
-			_vala_code_node_unref0 (_tmp50_);
-			_g_free0 (_tmp48_);
+			_tmp50_ = cl;
+			_tmp51_ = self->priv->reader;
+			_tmp52_ = vala_markup_reader_get_attribute (_tmp51_, "name");
+			_tmp53_ = _tmp52_;
+			_tmp54_ = vala_gir_parser_parse_type_from_gir_name (self, _tmp53_, NULL, NULL, NULL);
+			_tmp55_ = _tmp54_;
+			vala_class_add_base_type (_tmp50_, _tmp55_);
+			_vala_code_node_unref0 (_tmp55_);
+			_g_free0 (_tmp53_);
 			vala_gir_parser_next (self);
 			vala_gir_parser_end_element (self, "implements");
 		} else {
-			ValaMarkupReader* _tmp51_;
-			const gchar* _tmp52_;
-			const gchar* _tmp53_;
-			_tmp51_ = self->priv->reader;
-			_tmp52_ = vala_markup_reader_get_name (_tmp51_);
-			_tmp53_ = _tmp52_;
-			if (g_strcmp0 (_tmp53_, "constant") == 0) {
+			ValaMarkupReader* _tmp56_;
+			const gchar* _tmp57_;
+			const gchar* _tmp58_;
+			_tmp56_ = self->priv->reader;
+			_tmp57_ = vala_markup_reader_get_name (_tmp56_);
+			_tmp58_ = _tmp57_;
+			if (g_strcmp0 (_tmp58_, "constant") == 0) {
 				vala_gir_parser_parse_constant (self);
 			} else {
-				ValaMarkupReader* _tmp54_;
-				const gchar* _tmp55_;
-				const gchar* _tmp56_;
-				_tmp54_ = self->priv->reader;
-				_tmp55_ = vala_markup_reader_get_name (_tmp54_);
-				_tmp56_ = _tmp55_;
-				if (g_strcmp0 (_tmp56_, "field") == 0) {
-					gboolean _tmp57_ = FALSE;
-					gboolean _tmp58_;
-					gboolean _tmp60_;
-					_tmp58_ = first_field;
-					if (_tmp58_) {
-						const gchar* _tmp59_;
-						_tmp59_ = parent;
-						_tmp57_ = _tmp59_ != NULL;
+				ValaMarkupReader* _tmp59_;
+				const gchar* _tmp60_;
+				const gchar* _tmp61_;
+				_tmp59_ = self->priv->reader;
+				_tmp60_ = vala_markup_reader_get_name (_tmp59_);
+				_tmp61_ = _tmp60_;
+				if (g_strcmp0 (_tmp61_, "field") == 0) {
+					gboolean _tmp62_ = FALSE;
+					gboolean _tmp63_;
+					gboolean _tmp65_;
+					_tmp63_ = first_field;
+					if (_tmp63_) {
+						const gchar* _tmp64_;
+						_tmp64_ = parent;
+						_tmp62_ = _tmp64_ != NULL;
 					} else {
-						_tmp57_ = FALSE;
+						_tmp62_ = FALSE;
 					}
-					_tmp60_ = _tmp57_;
-					if (_tmp60_) {
+					_tmp65_ = _tmp62_;
+					if (_tmp65_) {
 						vala_gir_parser_skip_element (self);
 					} else {
-						ValaMarkupReader* _tmp61_;
-						gchar* _tmp62_ = NULL;
-						gchar* _tmp63_;
-						gboolean _tmp64_;
-						_tmp61_ = self->priv->reader;
-						_tmp62_ = vala_markup_reader_get_attribute (_tmp61_, "name");
-						_tmp63_ = _tmp62_;
-						_tmp64_ = g_strcmp0 (_tmp63_, "priv") != 0;
-						_g_free0 (_tmp63_);
-						if (_tmp64_) {
+						ValaMarkupReader* _tmp66_;
+						gchar* _tmp67_ = NULL;
+						gchar* _tmp68_;
+						gboolean _tmp69_;
+						_tmp66_ = self->priv->reader;
+						_tmp67_ = vala_markup_reader_get_attribute (_tmp66_, "name");
+						_tmp68_ = _tmp67_;
+						_tmp69_ = g_strcmp0 (_tmp68_, "priv") != 0;
+						_g_free0 (_tmp68_);
+						if (_tmp69_) {
 							vala_gir_parser_parse_field (self);
 						} else {
 							vala_gir_parser_skip_element (self);
@@ -8658,90 +8827,90 @@ static void vala_gir_parser_parse_class (ValaGirParser* self) {
 					}
 					first_field = FALSE;
 				} else {
-					ValaMarkupReader* _tmp65_;
-					const gchar* _tmp66_;
-					const gchar* _tmp67_;
-					_tmp65_ = self->priv->reader;
-					_tmp66_ = vala_markup_reader_get_name (_tmp65_);
-					_tmp67_ = _tmp66_;
-					if (g_strcmp0 (_tmp67_, "property") == 0) {
-						ValaProperty* _tmp68_ = NULL;
-						ValaProperty* _tmp69_;
-						_tmp68_ = vala_gir_parser_parse_property (self);
-						_tmp69_ = _tmp68_;
-						_vala_code_node_unref0 (_tmp69_);
+					ValaMarkupReader* _tmp70_;
+					const gchar* _tmp71_;
+					const gchar* _tmp72_;
+					_tmp70_ = self->priv->reader;
+					_tmp71_ = vala_markup_reader_get_name (_tmp70_);
+					_tmp72_ = _tmp71_;
+					if (g_strcmp0 (_tmp72_, "property") == 0) {
+						ValaProperty* _tmp73_ = NULL;
+						ValaProperty* _tmp74_;
+						_tmp73_ = vala_gir_parser_parse_property (self);
+						_tmp74_ = _tmp73_;
+						_vala_code_node_unref0 (_tmp74_);
 					} else {
-						ValaMarkupReader* _tmp70_;
-						const gchar* _tmp71_;
-						const gchar* _tmp72_;
-						_tmp70_ = self->priv->reader;
-						_tmp71_ = vala_markup_reader_get_name (_tmp70_);
-						_tmp72_ = _tmp71_;
-						if (g_strcmp0 (_tmp72_, "constructor") == 0) {
+						ValaMarkupReader* _tmp75_;
+						const gchar* _tmp76_;
+						const gchar* _tmp77_;
+						_tmp75_ = self->priv->reader;
+						_tmp76_ = vala_markup_reader_get_name (_tmp75_);
+						_tmp77_ = _tmp76_;
+						if (g_strcmp0 (_tmp77_, "constructor") == 0) {
 							vala_gir_parser_parse_constructor (self);
 						} else {
-							ValaMarkupReader* _tmp73_;
-							const gchar* _tmp74_;
-							const gchar* _tmp75_;
-							_tmp73_ = self->priv->reader;
-							_tmp74_ = vala_markup_reader_get_name (_tmp73_);
-							_tmp75_ = _tmp74_;
-							if (g_strcmp0 (_tmp75_, "function") == 0) {
+							ValaMarkupReader* _tmp78_;
+							const gchar* _tmp79_;
+							const gchar* _tmp80_;
+							_tmp78_ = self->priv->reader;
+							_tmp79_ = vala_markup_reader_get_name (_tmp78_);
+							_tmp80_ = _tmp79_;
+							if (g_strcmp0 (_tmp80_, "function") == 0) {
 								vala_gir_parser_parse_method (self, "function");
 							} else {
-								ValaMarkupReader* _tmp76_;
-								const gchar* _tmp77_;
-								const gchar* _tmp78_;
-								_tmp76_ = self->priv->reader;
-								_tmp77_ = vala_markup_reader_get_name (_tmp76_);
-								_tmp78_ = _tmp77_;
-								if (g_strcmp0 (_tmp78_, "method") == 0) {
+								ValaMarkupReader* _tmp81_;
+								const gchar* _tmp82_;
+								const gchar* _tmp83_;
+								_tmp81_ = self->priv->reader;
+								_tmp82_ = vala_markup_reader_get_name (_tmp81_);
+								_tmp83_ = _tmp82_;
+								if (g_strcmp0 (_tmp83_, "method") == 0) {
 									vala_gir_parser_parse_method (self, "method");
 								} else {
-									ValaMarkupReader* _tmp79_;
-									const gchar* _tmp80_;
-									const gchar* _tmp81_;
-									_tmp79_ = self->priv->reader;
-									_tmp80_ = vala_markup_reader_get_name (_tmp79_);
-									_tmp81_ = _tmp80_;
-									if (g_strcmp0 (_tmp81_, "virtual-method") == 0) {
+									ValaMarkupReader* _tmp84_;
+									const gchar* _tmp85_;
+									const gchar* _tmp86_;
+									_tmp84_ = self->priv->reader;
+									_tmp85_ = vala_markup_reader_get_name (_tmp84_);
+									_tmp86_ = _tmp85_;
+									if (g_strcmp0 (_tmp86_, "virtual-method") == 0) {
 										vala_gir_parser_parse_method (self, "virtual-method");
 									} else {
-										ValaMarkupReader* _tmp82_;
-										const gchar* _tmp83_;
-										const gchar* _tmp84_;
-										_tmp82_ = self->priv->reader;
-										_tmp83_ = vala_markup_reader_get_name (_tmp82_);
-										_tmp84_ = _tmp83_;
-										if (g_strcmp0 (_tmp84_, "union") == 0) {
+										ValaMarkupReader* _tmp87_;
+										const gchar* _tmp88_;
+										const gchar* _tmp89_;
+										_tmp87_ = self->priv->reader;
+										_tmp88_ = vala_markup_reader_get_name (_tmp87_);
+										_tmp89_ = _tmp88_;
+										if (g_strcmp0 (_tmp89_, "union") == 0) {
 											vala_gir_parser_parse_union (self);
 										} else {
-											ValaMarkupReader* _tmp85_;
-											const gchar* _tmp86_;
-											const gchar* _tmp87_;
-											_tmp85_ = self->priv->reader;
-											_tmp86_ = vala_markup_reader_get_name (_tmp85_);
-											_tmp87_ = _tmp86_;
-											if (g_strcmp0 (_tmp87_, "glib:signal") == 0) {
+											ValaMarkupReader* _tmp90_;
+											const gchar* _tmp91_;
+											const gchar* _tmp92_;
+											_tmp90_ = self->priv->reader;
+											_tmp91_ = vala_markup_reader_get_name (_tmp90_);
+											_tmp92_ = _tmp91_;
+											if (g_strcmp0 (_tmp92_, "glib:signal") == 0) {
 												vala_gir_parser_parse_signal (self);
 											} else {
-												ValaSourceReference* _tmp88_ = NULL;
-												ValaSourceReference* _tmp89_;
-												ValaMarkupReader* _tmp90_;
-												const gchar* _tmp91_;
-												const gchar* _tmp92_;
-												gchar* _tmp93_ = NULL;
-												gchar* _tmp94_;
-												_tmp88_ = vala_gir_parser_get_current_src (self);
-												_tmp89_ = _tmp88_;
-												_tmp90_ = self->priv->reader;
-												_tmp91_ = vala_markup_reader_get_name (_tmp90_);
-												_tmp92_ = _tmp91_;
-												_tmp93_ = g_strdup_printf ("unknown child element `%s' in `class'", _tmp92_);
+												ValaSourceReference* _tmp93_ = NULL;
+												ValaSourceReference* _tmp94_;
+												ValaMarkupReader* _tmp95_;
+												const gchar* _tmp96_;
+												const gchar* _tmp97_;
+												gchar* _tmp98_ = NULL;
+												gchar* _tmp99_;
+												_tmp93_ = vala_gir_parser_get_current_src (self);
 												_tmp94_ = _tmp93_;
-												vala_report_error (_tmp89_, _tmp94_);
-												_g_free0 (_tmp94_);
-												_vala_source_reference_unref0 (_tmp89_);
+												_tmp95_ = self->priv->reader;
+												_tmp96_ = vala_markup_reader_get_name (_tmp95_);
+												_tmp97_ = _tmp96_;
+												_tmp98_ = g_strdup_printf ("unknown child element `%s' in `class'", _tmp97_);
+												_tmp99_ = _tmp98_;
+												vala_report_error (_tmp94_, _tmp99_);
+												_g_free0 (_tmp99_);
+												_vala_source_reference_unref0 (_tmp94_);
 												vala_gir_parser_skip_element (self);
 											}
 										}
@@ -8770,6 +8939,9 @@ static void vala_gir_parser_parse_interface (ValaGirParser* self) {
 	gboolean _tmp3_;
 	ValaInterface* _tmp22_;
 	ValaInterface* _tmp23_;
+	ValaInterface* _tmp24_;
+	ValaGirComment* _tmp25_ = NULL;
+	ValaGirComment* _tmp26_;
 	g_return_if_fail (self != NULL);
 	vala_gir_parser_start_element (self, "interface");
 	_tmp0_ = vala_gir_parser_element_get_name (self, NULL);
@@ -8835,119 +9007,124 @@ static void vala_gir_parser_parse_interface (ValaGirParser* self) {
 	_tmp23_ = iface;
 	vala_symbol_set_external ((ValaSymbol*) _tmp23_, TRUE);
 	vala_gir_parser_next (self);
+	_tmp24_ = iface;
+	_tmp25_ = vala_gir_parser_parse_symbol_doc (self);
+	_tmp26_ = _tmp25_;
+	vala_symbol_set_comment ((ValaSymbol*) _tmp24_, (ValaComment*) _tmp26_);
+	_vala_comment_unref0 (_tmp26_);
 	while (TRUE) {
-		ValaMarkupTokenType _tmp24_;
-		gboolean _tmp25_ = FALSE;
-		ValaMarkupReader* _tmp26_;
-		const gchar* _tmp27_;
-		const gchar* _tmp28_;
-		_tmp24_ = self->priv->current_token;
-		if (!(_tmp24_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) {
+		ValaMarkupTokenType _tmp27_;
+		gboolean _tmp28_ = FALSE;
+		ValaMarkupReader* _tmp29_;
+		const gchar* _tmp30_;
+		const gchar* _tmp31_;
+		_tmp27_ = self->priv->current_token;
+		if (!(_tmp27_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) {
 			break;
 		}
-		_tmp25_ = vala_gir_parser_push_metadata (self);
-		if (!_tmp25_) {
+		_tmp28_ = vala_gir_parser_push_metadata (self);
+		if (!_tmp28_) {
 			vala_gir_parser_skip_element (self);
 			continue;
 		}
-		_tmp26_ = self->priv->reader;
-		_tmp27_ = vala_markup_reader_get_name (_tmp26_);
-		_tmp28_ = _tmp27_;
-		if (g_strcmp0 (_tmp28_, "prerequisite") == 0) {
-			ValaInterface* _tmp29_;
-			ValaMarkupReader* _tmp30_;
-			gchar* _tmp31_ = NULL;
-			gchar* _tmp32_;
-			ValaDataType* _tmp33_ = NULL;
-			ValaDataType* _tmp34_;
+		_tmp29_ = self->priv->reader;
+		_tmp30_ = vala_markup_reader_get_name (_tmp29_);
+		_tmp31_ = _tmp30_;
+		if (g_strcmp0 (_tmp31_, "prerequisite") == 0) {
+			ValaInterface* _tmp32_;
+			ValaMarkupReader* _tmp33_;
+			gchar* _tmp34_ = NULL;
+			gchar* _tmp35_;
+			ValaDataType* _tmp36_ = NULL;
+			ValaDataType* _tmp37_;
 			vala_gir_parser_start_element (self, "prerequisite");
-			_tmp29_ = iface;
-			_tmp30_ = self->priv->reader;
-			_tmp31_ = vala_markup_reader_get_attribute (_tmp30_, "name");
-			_tmp32_ = _tmp31_;
-			_tmp33_ = vala_gir_parser_parse_type_from_gir_name (self, _tmp32_, NULL, NULL, NULL);
-			_tmp34_ = _tmp33_;
-			vala_interface_add_prerequisite (_tmp29_, _tmp34_);
-			_vala_code_node_unref0 (_tmp34_);
-			_g_free0 (_tmp32_);
+			_tmp32_ = iface;
+			_tmp33_ = self->priv->reader;
+			_tmp34_ = vala_markup_reader_get_attribute (_tmp33_, "name");
+			_tmp35_ = _tmp34_;
+			_tmp36_ = vala_gir_parser_parse_type_from_gir_name (self, _tmp35_, NULL, NULL, NULL);
+			_tmp37_ = _tmp36_;
+			vala_interface_add_prerequisite (_tmp32_, _tmp37_);
+			_vala_code_node_unref0 (_tmp37_);
+			_g_free0 (_tmp35_);
 			vala_gir_parser_next (self);
 			vala_gir_parser_end_element (self, "prerequisite");
 		} else {
-			ValaMarkupReader* _tmp35_;
-			const gchar* _tmp36_;
-			const gchar* _tmp37_;
-			_tmp35_ = self->priv->reader;
-			_tmp36_ = vala_markup_reader_get_name (_tmp35_);
-			_tmp37_ = _tmp36_;
-			if (g_strcmp0 (_tmp37_, "field") == 0) {
+			ValaMarkupReader* _tmp38_;
+			const gchar* _tmp39_;
+			const gchar* _tmp40_;
+			_tmp38_ = self->priv->reader;
+			_tmp39_ = vala_markup_reader_get_name (_tmp38_);
+			_tmp40_ = _tmp39_;
+			if (g_strcmp0 (_tmp40_, "field") == 0) {
 				vala_gir_parser_parse_field (self);
 			} else {
-				ValaMarkupReader* _tmp38_;
-				const gchar* _tmp39_;
-				const gchar* _tmp40_;
-				_tmp38_ = self->priv->reader;
-				_tmp39_ = vala_markup_reader_get_name (_tmp38_);
-				_tmp40_ = _tmp39_;
-				if (g_strcmp0 (_tmp40_, "property") == 0) {
-					ValaProperty* _tmp41_ = NULL;
-					ValaProperty* _tmp42_;
-					_tmp41_ = vala_gir_parser_parse_property (self);
-					_tmp42_ = _tmp41_;
-					_vala_code_node_unref0 (_tmp42_);
-				} else {
-					ValaMarkupReader* _tmp43_;
-					const gchar* _tmp44_;
-					const gchar* _tmp45_;
-					_tmp43_ = self->priv->reader;
-					_tmp44_ = vala_markup_reader_get_name (_tmp43_);
+				ValaMarkupReader* _tmp41_;
+				const gchar* _tmp42_;
+				const gchar* _tmp43_;
+				_tmp41_ = self->priv->reader;
+				_tmp42_ = vala_markup_reader_get_name (_tmp41_);
+				_tmp43_ = _tmp42_;
+				if (g_strcmp0 (_tmp43_, "property") == 0) {
+					ValaProperty* _tmp44_ = NULL;
+					ValaProperty* _tmp45_;
+					_tmp44_ = vala_gir_parser_parse_property (self);
 					_tmp45_ = _tmp44_;
-					if (g_strcmp0 (_tmp45_, "virtual-method") == 0) {
+					_vala_code_node_unref0 (_tmp45_);
+				} else {
+					ValaMarkupReader* _tmp46_;
+					const gchar* _tmp47_;
+					const gchar* _tmp48_;
+					_tmp46_ = self->priv->reader;
+					_tmp47_ = vala_markup_reader_get_name (_tmp46_);
+					_tmp48_ = _tmp47_;
+					if (g_strcmp0 (_tmp48_, "virtual-method") == 0) {
 						vala_gir_parser_parse_method (self, "virtual-method");
 					} else {
-						ValaMarkupReader* _tmp46_;
-						const gchar* _tmp47_;
-						const gchar* _tmp48_;
-						_tmp46_ = self->priv->reader;
-						_tmp47_ = vala_markup_reader_get_name (_tmp46_);
-						_tmp48_ = _tmp47_;
-						if (g_strcmp0 (_tmp48_, "function") == 0) {
+						ValaMarkupReader* _tmp49_;
+						const gchar* _tmp50_;
+						const gchar* _tmp51_;
+						_tmp49_ = self->priv->reader;
+						_tmp50_ = vala_markup_reader_get_name (_tmp49_);
+						_tmp51_ = _tmp50_;
+						if (g_strcmp0 (_tmp51_, "function") == 0) {
 							vala_gir_parser_parse_method (self, "function");
 						} else {
-							ValaMarkupReader* _tmp49_;
-							const gchar* _tmp50_;
-							const gchar* _tmp51_;
-							_tmp49_ = self->priv->reader;
-							_tmp50_ = vala_markup_reader_get_name (_tmp49_);
-							_tmp51_ = _tmp50_;
-							if (g_strcmp0 (_tmp51_, "method") == 0) {
+							ValaMarkupReader* _tmp52_;
+							const gchar* _tmp53_;
+							const gchar* _tmp54_;
+							_tmp52_ = self->priv->reader;
+							_tmp53_ = vala_markup_reader_get_name (_tmp52_);
+							_tmp54_ = _tmp53_;
+							if (g_strcmp0 (_tmp54_, "method") == 0) {
 								vala_gir_parser_parse_method (self, "method");
 							} else {
-								ValaMarkupReader* _tmp52_;
-								const gchar* _tmp53_;
-								const gchar* _tmp54_;
-								_tmp52_ = self->priv->reader;
-								_tmp53_ = vala_markup_reader_get_name (_tmp52_);
-								_tmp54_ = _tmp53_;
-								if (g_strcmp0 (_tmp54_, "glib:signal") == 0) {
+								ValaMarkupReader* _tmp55_;
+								const gchar* _tmp56_;
+								const gchar* _tmp57_;
+								_tmp55_ = self->priv->reader;
+								_tmp56_ = vala_markup_reader_get_name (_tmp55_);
+								_tmp57_ = _tmp56_;
+								if (g_strcmp0 (_tmp57_, "glib:signal") == 0) {
 									vala_gir_parser_parse_signal (self);
 								} else {
-									ValaSourceReference* _tmp55_ = NULL;
-									ValaSourceReference* _tmp56_;
-									ValaMarkupReader* _tmp57_;
-									const gchar* _tmp58_;
-									const gchar* _tmp59_;
-									gchar* _tmp60_ = NULL;
-									gchar* _tmp61_;
-									_tmp55_ = vala_gir_parser_get_current_src (self);
-									_tmp56_ = _tmp55_;
-									_tmp57_ = self->priv->reader;
-									_tmp58_ = vala_markup_reader_get_name (_tmp57_);
+									ValaSourceReference* _tmp58_ = NULL;
+									ValaSourceReference* _tmp59_;
+									ValaMarkupReader* _tmp60_;
+									const gchar* _tmp61_;
+									const gchar* _tmp62_;
+									gchar* _tmp63_ = NULL;
+									gchar* _tmp64_;
+									_tmp58_ = vala_gir_parser_get_current_src (self);
 									_tmp59_ = _tmp58_;
-									_tmp60_ = g_strdup_printf ("unknown child element `%s' in `interface'", _tmp59_);
-									_tmp61_ = _tmp60_;
-									vala_report_error (_tmp56_, _tmp61_);
-									_g_free0 (_tmp61_);
-									_vala_source_reference_unref0 (_tmp56_);
+									_tmp60_ = self->priv->reader;
+									_tmp61_ = vala_markup_reader_get_name (_tmp60_);
+									_tmp62_ = _tmp61_;
+									_tmp63_ = g_strdup_printf ("unknown child element `%s' in `interface'", _tmp62_);
+									_tmp64_ = _tmp63_;
+									vala_report_error (_tmp59_, _tmp64_);
+									_g_free0 (_tmp64_);
+									_vala_source_reference_unref0 (_tmp59_);
 									vala_gir_parser_skip_element (self);
 								}
 							}
@@ -8970,24 +9147,28 @@ static void vala_gir_parser_parse_field (ValaGirParser* self) {
 	ValaMarkupReader* _tmp2_;
 	gchar* _tmp3_ = NULL;
 	gchar* allow_none;
-	ValaDataType* _tmp4_ = NULL;
+	ValaGirComment* _tmp4_ = NULL;
+	ValaGirComment* comment;
+	ValaDataType* _tmp5_ = NULL;
 	ValaDataType* type;
 	gboolean no_array_length;
-	ValaDataType* _tmp5_;
-	ValaDataType* _tmp6_ = NULL;
-	ValaGirParserNode* _tmp7_;
-	const gchar* _tmp8_;
-	ValaDataType* _tmp9_;
-	ValaGirParserNode* _tmp10_;
-	ValaSourceReference* _tmp11_;
-	ValaField* _tmp12_;
-	ValaField* field;
+	ValaDataType* _tmp6_;
+	ValaDataType* _tmp7_ = NULL;
+	ValaGirParserNode* _tmp8_;
+	const gchar* _tmp9_;
+	ValaDataType* _tmp10_;
+	ValaGirParserNode* _tmp11_;
+	ValaSourceReference* _tmp12_;
 	ValaField* _tmp13_;
-	ValaDataType* _tmp14_;
-	const gchar* _tmp18_;
-	ValaGirParserNode* _tmp20_;
-	ValaField* _tmp21_;
-	ValaSymbol* _tmp22_;
+	ValaField* field;
+	ValaField* _tmp14_;
+	ValaField* _tmp15_;
+	ValaGirComment* _tmp16_;
+	ValaDataType* _tmp17_;
+	const gchar* _tmp21_;
+	ValaGirParserNode* _tmp23_;
+	ValaField* _tmp24_;
+	ValaSymbol* _tmp25_;
 	g_return_if_fail (self != NULL);
 	vala_gir_parser_start_element (self, "field");
 	_tmp0_ = vala_gir_parser_element_get_name (self, NULL);
@@ -8998,50 +9179,56 @@ static void vala_gir_parser_parse_field (ValaGirParser* self) {
 	_tmp3_ = vala_markup_reader_get_attribute (_tmp2_, "allow-none");
 	allow_none = _tmp3_;
 	vala_gir_parser_next (self);
-	_tmp4_ = vala_gir_parser_parse_type (self, NULL, NULL, TRUE, NULL, NULL);
-	type = _tmp4_;
+	_tmp4_ = vala_gir_parser_parse_symbol_doc (self);
+	comment = _tmp4_;
+	_tmp5_ = vala_gir_parser_parse_type (self, NULL, NULL, TRUE, NULL, NULL);
+	type = _tmp5_;
 	no_array_length = TRUE;
-	_tmp5_ = type;
-	_tmp6_ = vala_gir_parser_element_get_type (self, _tmp5_, TRUE, &no_array_length, NULL);
+	_tmp6_ = type;
+	_tmp7_ = vala_gir_parser_element_get_type (self, _tmp6_, TRUE, &no_array_length, NULL);
 	_vala_code_node_unref0 (type);
-	type = _tmp6_;
-	_tmp7_ = self->priv->current;
-	_tmp8_ = _tmp7_->name;
-	_tmp9_ = type;
-	_tmp10_ = self->priv->current;
-	_tmp11_ = _tmp10_->source_reference;
-	_tmp12_ = vala_field_new (_tmp8_, _tmp9_, NULL, _tmp11_, NULL);
-	field = _tmp12_;
-	_tmp13_ = field;
-	vala_symbol_set_access ((ValaSymbol*) _tmp13_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
-	_tmp14_ = type;
-	if (VALA_IS_ARRAY_TYPE (_tmp14_)) {
-		gboolean _tmp15_;
-		ValaField* _tmp17_;
-		_tmp15_ = no_array_length;
-		if (_tmp15_) {
-			ValaField* _tmp16_;
-			_tmp16_ = field;
-			vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp16_, "CCode", "array_length", FALSE, NULL);
+	type = _tmp7_;
+	_tmp8_ = self->priv->current;
+	_tmp9_ = _tmp8_->name;
+	_tmp10_ = type;
+	_tmp11_ = self->priv->current;
+	_tmp12_ = _tmp11_->source_reference;
+	_tmp13_ = vala_field_new (_tmp9_, _tmp10_, NULL, _tmp12_, NULL);
+	field = _tmp13_;
+	_tmp14_ = field;
+	vala_symbol_set_access ((ValaSymbol*) _tmp14_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
+	_tmp15_ = field;
+	_tmp16_ = comment;
+	vala_symbol_set_comment ((ValaSymbol*) _tmp15_, (ValaComment*) _tmp16_);
+	_tmp17_ = type;
+	if (VALA_IS_ARRAY_TYPE (_tmp17_)) {
+		gboolean _tmp18_;
+		ValaField* _tmp20_;
+		_tmp18_ = no_array_length;
+		if (_tmp18_) {
+			ValaField* _tmp19_;
+			_tmp19_ = field;
+			vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp19_, "CCode", "array_length", FALSE, NULL);
 		}
-		_tmp17_ = field;
-		vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp17_, "CCode", "array_null_terminated", TRUE, NULL);
-	}
-	_tmp18_ = allow_none;
-	if (g_strcmp0 (_tmp18_, "1") == 0) {
-		ValaDataType* _tmp19_;
-		_tmp19_ = type;
-		vala_data_type_set_nullable (_tmp19_, TRUE);
-	}
-	_tmp20_ = self->priv->current;
-	_tmp21_ = field;
-	_tmp22_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp21_);
-	_vala_code_node_unref0 (_tmp20_->symbol);
-	_tmp20_->symbol = _tmp22_;
+		_tmp20_ = field;
+		vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp20_, "CCode", "array_null_terminated", TRUE, NULL);
+	}
+	_tmp21_ = allow_none;
+	if (g_strcmp0 (_tmp21_, "1") == 0) {
+		ValaDataType* _tmp22_;
+		_tmp22_ = type;
+		vala_data_type_set_nullable (_tmp22_, TRUE);
+	}
+	_tmp23_ = self->priv->current;
+	_tmp24_ = field;
+	_tmp25_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp24_);
+	_vala_code_node_unref0 (_tmp23_->symbol);
+	_tmp23_->symbol = _tmp25_;
 	vala_gir_parser_pop_node (self);
 	vala_gir_parser_end_element (self, "field");
 	_vala_code_node_unref0 (field);
 	_vala_code_node_unref0 (type);
+	_vala_comment_unref0 (comment);
 	_g_free0 (allow_none);
 }
 
@@ -9052,31 +9239,40 @@ static ValaProperty* vala_gir_parser_parse_property (ValaGirParser* self) {
 	gchar* _tmp1_;
 	gchar* _tmp2_ = NULL;
 	gchar* _tmp3_;
+	ValaGirParserMetadata* _tmp4_;
+	ValaGirParserNode* _tmp5_;
+	ValaGirParserNode* _tmp6_;
+	ValaSymbol* _tmp7_;
+	gboolean _tmp8_ = FALSE;
+	gboolean is_abstract;
+	ValaGirComment* _tmp9_ = NULL;
+	ValaGirComment* comment;
 	gboolean no_array_length = FALSE;
 	gboolean array_null_terminated = FALSE;
-	gboolean _tmp4_ = FALSE;
-	gboolean _tmp5_ = FALSE;
-	ValaDataType* _tmp6_ = NULL;
+	gboolean _tmp10_ = FALSE;
+	gboolean _tmp11_ = FALSE;
+	ValaDataType* _tmp12_ = NULL;
 	ValaDataType* type;
-	ValaDataType* _tmp7_;
-	ValaDataType* _tmp8_ = NULL;
-	ValaGirParserNode* _tmp9_;
-	const gchar* _tmp10_;
-	ValaDataType* _tmp11_;
-	ValaGirParserNode* _tmp12_;
-	ValaSourceReference* _tmp13_;
-	ValaProperty* _tmp14_;
-	ValaProperty* prop;
-	ValaProperty* _tmp15_;
-	ValaProperty* _tmp16_;
-	ValaGirParserNode* _tmp17_;
+	ValaDataType* _tmp13_;
+	ValaDataType* _tmp14_ = NULL;
+	ValaGirParserNode* _tmp15_;
+	const gchar* _tmp16_;
+	ValaDataType* _tmp17_;
 	ValaGirParserNode* _tmp18_;
-	ValaSymbol* _tmp19_;
-	gboolean _tmp21_;
-	gboolean _tmp23_;
-	ValaGirParserNode* _tmp25_;
-	ValaProperty* _tmp26_;
-	ValaSymbol* _tmp27_;
+	ValaSourceReference* _tmp19_;
+	ValaProperty* _tmp20_;
+	ValaProperty* prop;
+	ValaProperty* _tmp21_;
+	ValaGirComment* _tmp22_;
+	ValaProperty* _tmp23_;
+	ValaProperty* _tmp24_;
+	ValaProperty* _tmp25_;
+	gboolean _tmp26_;
+	gboolean _tmp27_;
+	gboolean _tmp29_;
+	ValaGirParserNode* _tmp31_;
+	ValaProperty* _tmp32_;
+	ValaSymbol* _tmp33_;
 	g_return_val_if_fail (self != NULL, NULL);
 	vala_gir_parser_start_element (self, "property");
 	_tmp0_ = vala_gir_parser_element_get_name (self, NULL);
@@ -9086,55 +9282,62 @@ static ValaProperty* vala_gir_parser_parse_property (ValaGirParser* self) {
 	vala_gir_parser_push_node (self, _tmp3_, FALSE);
 	_g_free0 (_tmp3_);
 	_g_free0 (_tmp1_);
+	_tmp4_ = self->priv->metadata;
+	_tmp5_ = self->priv->current;
+	_tmp6_ = _tmp5_->parent;
+	_tmp7_ = _tmp6_->symbol;
+	_tmp8_ = vala_gir_parser_metadata_get_bool (_tmp4_, VALA_GIR_PARSER_ARGUMENT_TYPE_ABSTRACT, VALA_IS_INTERFACE (_tmp7_));
+	is_abstract = _tmp8_;
 	vala_gir_parser_next (self);
-	_tmp6_ = vala_gir_parser_parse_type (self, NULL, NULL, FALSE, &_tmp4_, &_tmp5_);
-	no_array_length = _tmp4_;
-	array_null_terminated = _tmp5_;
-	type = _tmp6_;
-	_tmp7_ = type;
-	_tmp8_ = vala_gir_parser_element_get_type (self, _tmp7_, TRUE, &no_array_length, NULL);
+	_tmp9_ = vala_gir_parser_parse_symbol_doc (self);
+	comment = _tmp9_;
+	_tmp12_ = vala_gir_parser_parse_type (self, NULL, NULL, FALSE, &_tmp10_, &_tmp11_);
+	no_array_length = _tmp10_;
+	array_null_terminated = _tmp11_;
+	type = _tmp12_;
+	_tmp13_ = type;
+	_tmp14_ = vala_gir_parser_element_get_type (self, _tmp13_, TRUE, &no_array_length, NULL);
 	_vala_code_node_unref0 (type);
-	type = _tmp8_;
-	_tmp9_ = self->priv->current;
-	_tmp10_ = _tmp9_->name;
-	_tmp11_ = type;
-	_tmp12_ = self->priv->current;
-	_tmp13_ = _tmp12_->source_reference;
-	_tmp14_ = vala_property_new (_tmp10_, _tmp11_, NULL, NULL, _tmp13_, NULL);
-	prop = _tmp14_;
-	_tmp15_ = prop;
-	vala_symbol_set_access ((ValaSymbol*) _tmp15_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
-	_tmp16_ = prop;
-	vala_symbol_set_external ((ValaSymbol*) _tmp16_, TRUE);
-	_tmp17_ = self->priv->current;
-	_tmp18_ = _tmp17_->parent;
-	_tmp19_ = _tmp18_->symbol;
-	if (VALA_IS_INTERFACE (_tmp19_)) {
-		ValaProperty* _tmp20_;
-		_tmp20_ = prop;
-		vala_property_set_is_abstract (_tmp20_, TRUE);
-	}
-	_tmp21_ = no_array_length;
-	if (_tmp21_) {
-		ValaProperty* _tmp22_;
-		_tmp22_ = prop;
-		vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp22_, "CCode", "array_length", FALSE, NULL);
-	}
-	_tmp23_ = array_null_terminated;
-	if (_tmp23_) {
-		ValaProperty* _tmp24_;
-		_tmp24_ = prop;
-		vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp24_, "CCode", "array_null_terminated", TRUE, NULL);
-	}
-	_tmp25_ = self->priv->current;
-	_tmp26_ = prop;
-	_tmp27_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp26_);
-	_vala_code_node_unref0 (_tmp25_->symbol);
-	_tmp25_->symbol = _tmp27_;
+	type = _tmp14_;
+	_tmp15_ = self->priv->current;
+	_tmp16_ = _tmp15_->name;
+	_tmp17_ = type;
+	_tmp18_ = self->priv->current;
+	_tmp19_ = _tmp18_->source_reference;
+	_tmp20_ = vala_property_new (_tmp16_, _tmp17_, NULL, NULL, _tmp19_, NULL);
+	prop = _tmp20_;
+	_tmp21_ = prop;
+	_tmp22_ = comment;
+	vala_symbol_set_comment ((ValaSymbol*) _tmp21_, (ValaComment*) _tmp22_);
+	_tmp23_ = prop;
+	vala_symbol_set_access ((ValaSymbol*) _tmp23_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
+	_tmp24_ = prop;
+	vala_symbol_set_external ((ValaSymbol*) _tmp24_, TRUE);
+	_tmp25_ = prop;
+	_tmp26_ = is_abstract;
+	vala_property_set_is_abstract (_tmp25_, _tmp26_);
+	_tmp27_ = no_array_length;
+	if (_tmp27_) {
+		ValaProperty* _tmp28_;
+		_tmp28_ = prop;
+		vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp28_, "CCode", "array_length", FALSE, NULL);
+	}
+	_tmp29_ = array_null_terminated;
+	if (_tmp29_) {
+		ValaProperty* _tmp30_;
+		_tmp30_ = prop;
+		vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp30_, "CCode", "array_null_terminated", TRUE, NULL);
+	}
+	_tmp31_ = self->priv->current;
+	_tmp32_ = prop;
+	_tmp33_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp32_);
+	_vala_code_node_unref0 (_tmp31_->symbol);
+	_tmp31_->symbol = _tmp33_;
 	vala_gir_parser_pop_node (self);
 	vala_gir_parser_end_element (self, "property");
 	result = prop;
 	_vala_code_node_unref0 (type);
+	_vala_comment_unref0 (comment);
 	return result;
 }
 
@@ -9170,54 +9373,58 @@ static void vala_gir_parser_parse_function (ValaGirParser* self, const gchar* el
 	ValaMarkupReader* _tmp13_;
 	gchar* _tmp14_ = NULL;
 	gchar* invoker;
+	ValaGirComment* _tmp15_ = NULL;
+	ValaGirComment* comment;
 	ValaDataType* return_type = NULL;
 	gchar* return_ctype;
 	gint return_array_length_idx;
 	gboolean return_no_array_length;
 	gboolean return_array_null_terminated;
-	gboolean _tmp15_ = FALSE;
-	ValaMarkupTokenType _tmp16_;
-	gboolean _tmp20_;
+	gboolean _tmp16_ = FALSE;
+	ValaMarkupTokenType _tmp17_;
+	gboolean _tmp21_;
 	ValaSymbol* s = NULL;
-	const gchar* _tmp27_;
-	ValaSymbol* _tmp78_;
-	ValaSymbol* _tmp79_;
-	ValaSymbol* _tmp80_;
-	gboolean _tmp114_ = FALSE;
-	ValaSymbol* _tmp115_;
-	gboolean _tmp117_;
-	ValaGirParserMetadata* _tmp139_;
-	ValaExpression* _tmp140_ = NULL;
-	ValaExpression* _tmp141_;
-	gboolean _tmp142_;
-	ValaSymbol* _tmp164_;
-	gboolean _tmp176_ = FALSE;
-	ValaDataType* _tmp177_;
-	gboolean _tmp180_;
-	ValaGirParserNode* _tmp187_;
-	gint _tmp188_;
-	ValaGirParserNode* _tmp189_;
-	ValaSymbol* _tmp190_;
-	ValaSymbol* _tmp191_;
-	GEqualFunc _tmp192_;
-	ValaArrayList* _tmp193_;
-	ValaArrayList* parameters;
-	ValaGirParserNode* _tmp194_;
-	GEqualFunc _tmp195_;
-	ValaArrayList* _tmp196_;
-	ValaGirParserNode* _tmp197_;
-	GEqualFunc _tmp198_;
-	ValaArrayList* _tmp199_;
+	const gchar* _tmp36_;
+	ValaSymbol* _tmp87_;
+	ValaSymbol* _tmp88_;
+	ValaGirComment* _tmp89_;
+	ValaSymbol* _tmp90_;
+	ValaSymbol* _tmp91_;
+	gboolean _tmp125_ = FALSE;
+	ValaSymbol* _tmp126_;
+	gboolean _tmp128_;
+	ValaGirParserMetadata* _tmp150_;
+	ValaExpression* _tmp151_ = NULL;
+	ValaExpression* _tmp152_;
+	gboolean _tmp153_;
+	ValaSymbol* _tmp175_;
+	gboolean _tmp187_ = FALSE;
+	ValaDataType* _tmp188_;
+	gboolean _tmp191_;
+	ValaGirParserNode* _tmp198_;
+	gint _tmp199_;
 	ValaGirParserNode* _tmp200_;
-	GEqualFunc _tmp201_;
-	ValaArrayList* _tmp202_;
-	gboolean _tmp203_ = FALSE;
-	ValaMarkupTokenType _tmp204_;
-	gboolean _tmp208_;
-	ValaGirParserNode* _tmp258_;
-	ValaArrayList* _tmp259_;
-	ValaList* _tmp260_;
-	const gchar* _tmp261_;
+	ValaSymbol* _tmp201_;
+	ValaSymbol* _tmp202_;
+	GEqualFunc _tmp203_;
+	ValaArrayList* _tmp204_;
+	ValaArrayList* parameters;
+	ValaGirParserNode* _tmp205_;
+	GEqualFunc _tmp206_;
+	ValaArrayList* _tmp207_;
+	ValaGirParserNode* _tmp208_;
+	GEqualFunc _tmp209_;
+	ValaArrayList* _tmp210_;
+	ValaGirParserNode* _tmp211_;
+	GEqualFunc _tmp212_;
+	ValaArrayList* _tmp213_;
+	gboolean _tmp214_ = FALSE;
+	ValaMarkupTokenType _tmp215_;
+	gboolean _tmp219_;
+	ValaGirParserNode* _tmp288_;
+	ValaArrayList* _tmp289_;
+	ValaList* _tmp290_;
+	const gchar* _tmp291_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (element_name != NULL);
 	_tmp0_ = element_name;
@@ -9244,727 +9451,811 @@ static void vala_gir_parser_parse_function (ValaGirParser* self, const gchar* el
 	_tmp14_ = vala_markup_reader_get_attribute (_tmp13_, "invoker");
 	invoker = _tmp14_;
 	vala_gir_parser_next (self);
+	_tmp15_ = vala_gir_parser_parse_symbol_doc (self);
+	comment = _tmp15_;
 	return_ctype = NULL;
 	return_array_length_idx = -1;
 	return_no_array_length = FALSE;
 	return_array_null_terminated = FALSE;
-	_tmp16_ = self->priv->current_token;
-	if (_tmp16_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT) {
-		ValaMarkupReader* _tmp17_;
-		const gchar* _tmp18_;
+	_tmp17_ = self->priv->current_token;
+	if (_tmp17_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT) {
+		ValaMarkupReader* _tmp18_;
 		const gchar* _tmp19_;
-		_tmp17_ = self->priv->reader;
-		_tmp18_ = vala_markup_reader_get_name (_tmp17_);
-		_tmp19_ = _tmp18_;
-		_tmp15_ = g_strcmp0 (_tmp19_, "return-value") == 0;
+		const gchar* _tmp20_;
+		_tmp18_ = self->priv->reader;
+		_tmp19_ = vala_markup_reader_get_name (_tmp18_);
+		_tmp20_ = _tmp19_;
+		_tmp16_ = g_strcmp0 (_tmp20_, "return-value") == 0;
 	} else {
-		_tmp15_ = FALSE;
+		_tmp16_ = FALSE;
 	}
-	_tmp20_ = _tmp15_;
-	if (_tmp20_) {
-		gchar* _tmp21_ = NULL;
-		gint _tmp22_ = 0;
-		gboolean _tmp23_ = FALSE;
+	_tmp21_ = _tmp16_;
+	if (_tmp21_) {
+		ValaComment* return_comment = NULL;
+		gchar* _tmp22_ = NULL;
+		gint _tmp23_ = 0;
 		gboolean _tmp24_ = FALSE;
-		ValaDataType* _tmp25_ = NULL;
-		_tmp25_ = vala_gir_parser_parse_return_value (self, &_tmp21_, &_tmp22_, &_tmp23_, &_tmp24_);
+		gboolean _tmp25_ = FALSE;
+		ValaComment* _tmp26_ = NULL;
+		ValaDataType* _tmp27_ = NULL;
+		ValaComment* _tmp28_;
+		_tmp27_ = vala_gir_parser_parse_return_value (self, &_tmp22_, &_tmp23_, &_tmp24_, &_tmp25_, &_tmp26_);
 		_g_free0 (return_ctype);
-		return_ctype = _tmp21_;
-		return_array_length_idx = _tmp22_;
-		return_no_array_length = _tmp23_;
-		return_array_null_terminated = _tmp24_;
+		return_ctype = _tmp22_;
+		return_array_length_idx = _tmp23_;
+		return_no_array_length = _tmp24_;
+		return_array_null_terminated = _tmp25_;
+		_vala_comment_unref0 (return_comment);
+		return_comment = _tmp26_;
 		_vala_code_node_unref0 (return_type);
-		return_type = _tmp25_;
+		return_type = _tmp27_;
+		_tmp28_ = return_comment;
+		if (_tmp28_ != NULL) {
+			ValaGirComment* _tmp29_;
+			ValaGirComment* _tmp33_;
+			ValaComment* _tmp34_;
+			_tmp29_ = comment;
+			if (_tmp29_ == NULL) {
+				ValaGirParserNode* _tmp30_;
+				ValaSourceReference* _tmp31_;
+				ValaGirComment* _tmp32_;
+				_tmp30_ = self->priv->current;
+				_tmp31_ = _tmp30_->source_reference;
+				_tmp32_ = vala_gir_comment_new (NULL, _tmp31_);
+				_vala_comment_unref0 (comment);
+				comment = _tmp32_;
+			}
+			_tmp33_ = comment;
+			_tmp34_ = return_comment;
+			vala_gir_comment_set_return_content (_tmp33_, _tmp34_);
+		}
+		_vala_comment_unref0 (return_comment);
 	} else {
-		ValaVoidType* _tmp26_;
-		_tmp26_ = vala_void_type_new (NULL);
+		ValaVoidType* _tmp35_;
+		_tmp35_ = vala_void_type_new (NULL);
 		_vala_code_node_unref0 (return_type);
-		return_type = (ValaDataType*) _tmp26_;
+		return_type = (ValaDataType*) _tmp35_;
 	}
-	_tmp27_ = element_name;
-	if (g_strcmp0 (_tmp27_, "callback") == 0) {
-		const gchar* _tmp28_;
-		ValaDataType* _tmp29_;
-		ValaGirParserNode* _tmp30_;
-		ValaSourceReference* _tmp31_;
-		ValaDelegate* _tmp32_;
-		ValaSymbol* _tmp33_;
-		_tmp28_ = name;
-		_tmp29_ = return_type;
-		_tmp30_ = self->priv->current;
-		_tmp31_ = _tmp30_->source_reference;
-		_tmp32_ = vala_delegate_new (_tmp28_, _tmp29_, _tmp31_, NULL);
+	_tmp36_ = element_name;
+	if (g_strcmp0 (_tmp36_, "callback") == 0) {
+		const gchar* _tmp37_;
+		ValaDataType* _tmp38_;
+		ValaGirParserNode* _tmp39_;
+		ValaSourceReference* _tmp40_;
+		ValaDelegate* _tmp41_;
+		ValaSymbol* _tmp42_;
+		_tmp37_ = name;
+		_tmp38_ = return_type;
+		_tmp39_ = self->priv->current;
+		_tmp40_ = _tmp39_->source_reference;
+		_tmp41_ = vala_delegate_new (_tmp37_, _tmp38_, _tmp40_, NULL);
 		_vala_code_node_unref0 (s);
-		s = (ValaSymbol*) _tmp32_;
-		_tmp33_ = s;
-		vala_delegate_set_has_target (VALA_DELEGATE (_tmp33_), FALSE);
+		s = (ValaSymbol*) _tmp41_;
+		_tmp42_ = s;
+		vala_delegate_set_has_target (VALA_DELEGATE (_tmp42_), FALSE);
 	} else {
-		const gchar* _tmp34_;
-		_tmp34_ = element_name;
-		if (g_strcmp0 (_tmp34_, "constructor") == 0) {
-			const gchar* _tmp35_;
-			const gchar* _tmp42_;
-			ValaGirParserNode* _tmp43_;
-			ValaSourceReference* _tmp44_;
-			ValaCreationMethod* _tmp45_;
+		const gchar* _tmp43_;
+		_tmp43_ = element_name;
+		if (g_strcmp0 (_tmp43_, "constructor") == 0) {
+			const gchar* _tmp44_;
+			const gchar* _tmp51_;
+			ValaGirParserNode* _tmp52_;
+			ValaSourceReference* _tmp53_;
+			ValaCreationMethod* _tmp54_;
 			ValaCreationMethod* m;
-			ValaCreationMethod* _tmp46_;
+			ValaCreationMethod* _tmp55_;
 			gchar* parent_ctype;
-			ValaGirParserNode* _tmp47_;
-			ValaGirParserNode* _tmp48_;
-			ValaSymbol* _tmp49_;
-			gboolean _tmp53_ = FALSE;
-			const gchar* _tmp54_;
-			gboolean _tmp62_;
-			ValaCreationMethod* _tmp65_;
-			ValaSymbol* _tmp66_;
-			_tmp35_ = name;
-			if (g_strcmp0 (_tmp35_, "new") == 0) {
+			ValaGirParserNode* _tmp56_;
+			ValaGirParserNode* _tmp57_;
+			ValaSymbol* _tmp58_;
+			gboolean _tmp62_ = FALSE;
+			const gchar* _tmp63_;
+			gboolean _tmp71_;
+			ValaCreationMethod* _tmp74_;
+			ValaSymbol* _tmp75_;
+			_tmp44_ = name;
+			if (g_strcmp0 (_tmp44_, "new") == 0) {
 				_g_free0 (name);
 				name = NULL;
 			} else {
-				const gchar* _tmp36_;
-				gboolean _tmp37_ = FALSE;
-				_tmp36_ = name;
-				_tmp37_ = g_str_has_prefix (_tmp36_, "new_");
-				if (_tmp37_) {
-					const gchar* _tmp38_;
-					gint _tmp39_;
-					gint _tmp40_;
-					gchar* _tmp41_ = NULL;
-					_tmp38_ = name;
-					_tmp39_ = strlen ("new_");
-					_tmp40_ = _tmp39_;
-					_tmp41_ = string_substring (_tmp38_, (glong) _tmp40_, (glong) (-1));
+				const gchar* _tmp45_;
+				gboolean _tmp46_ = FALSE;
+				_tmp45_ = name;
+				_tmp46_ = g_str_has_prefix (_tmp45_, "new_");
+				if (_tmp46_) {
+					const gchar* _tmp47_;
+					gint _tmp48_;
+					gint _tmp49_;
+					gchar* _tmp50_ = NULL;
+					_tmp47_ = name;
+					_tmp48_ = strlen ("new_");
+					_tmp49_ = _tmp48_;
+					_tmp50_ = string_substring (_tmp47_, (glong) _tmp49_, (glong) (-1));
 					_g_free0 (name);
-					name = _tmp41_;
+					name = _tmp50_;
 				}
 			}
-			_tmp42_ = name;
-			_tmp43_ = self->priv->current;
-			_tmp44_ = _tmp43_->source_reference;
-			_tmp45_ = vala_creation_method_new (NULL, _tmp42_, _tmp44_, NULL);
-			m = _tmp45_;
-			_tmp46_ = m;
-			vala_method_set_has_construct_function ((ValaMethod*) _tmp46_, FALSE);
+			_tmp51_ = name;
+			_tmp52_ = self->priv->current;
+			_tmp53_ = _tmp52_->source_reference;
+			_tmp54_ = vala_creation_method_new (NULL, _tmp51_, _tmp53_, NULL);
+			m = _tmp54_;
+			_tmp55_ = m;
+			vala_method_set_has_construct_function ((ValaMethod*) _tmp55_, FALSE);
 			parent_ctype = NULL;
-			_tmp47_ = self->priv->current;
-			_tmp48_ = _tmp47_->parent;
-			_tmp49_ = _tmp48_->symbol;
-			if (VALA_IS_CLASS (_tmp49_)) {
-				ValaGirParserNode* _tmp50_;
-				ValaGirParserNode* _tmp51_;
-				gchar* _tmp52_ = NULL;
-				_tmp50_ = self->priv->current;
-				_tmp51_ = _tmp50_->parent;
-				_tmp52_ = vala_gir_parser_node_get_cname (_tmp51_);
+			_tmp56_ = self->priv->current;
+			_tmp57_ = _tmp56_->parent;
+			_tmp58_ = _tmp57_->symbol;
+			if (VALA_IS_CLASS (_tmp58_)) {
+				ValaGirParserNode* _tmp59_;
+				ValaGirParserNode* _tmp60_;
+				gchar* _tmp61_ = NULL;
+				_tmp59_ = self->priv->current;
+				_tmp60_ = _tmp59_->parent;
+				_tmp61_ = vala_gir_parser_node_get_cname (_tmp60_);
 				_g_free0 (parent_ctype);
-				parent_ctype = _tmp52_;
+				parent_ctype = _tmp61_;
 			}
-			_tmp54_ = return_ctype;
-			if (_tmp54_ != NULL) {
-				gboolean _tmp55_ = FALSE;
-				const gchar* _tmp56_;
-				gboolean _tmp61_;
-				_tmp56_ = parent_ctype;
-				if (_tmp56_ == NULL) {
-					_tmp55_ = TRUE;
+			_tmp63_ = return_ctype;
+			if (_tmp63_ != NULL) {
+				gboolean _tmp64_ = FALSE;
+				const gchar* _tmp65_;
+				gboolean _tmp70_;
+				_tmp65_ = parent_ctype;
+				if (_tmp65_ == NULL) {
+					_tmp64_ = TRUE;
 				} else {
-					const gchar* _tmp57_;
-					const gchar* _tmp58_;
-					gchar* _tmp59_;
-					gchar* _tmp60_;
-					_tmp57_ = return_ctype;
-					_tmp58_ = parent_ctype;
-					_tmp59_ = g_strconcat (_tmp58_, "*", NULL);
-					_tmp60_ = _tmp59_;
-					_tmp55_ = g_strcmp0 (_tmp57_, _tmp60_) != 0;
-					_g_free0 (_tmp60_);
+					const gchar* _tmp66_;
+					const gchar* _tmp67_;
+					gchar* _tmp68_;
+					gchar* _tmp69_;
+					_tmp66_ = return_ctype;
+					_tmp67_ = parent_ctype;
+					_tmp68_ = g_strconcat (_tmp67_, "*", NULL);
+					_tmp69_ = _tmp68_;
+					_tmp64_ = g_strcmp0 (_tmp66_, _tmp69_) != 0;
+					_g_free0 (_tmp69_);
 				}
-				_tmp61_ = _tmp55_;
-				_tmp53_ = _tmp61_;
+				_tmp70_ = _tmp64_;
+				_tmp62_ = _tmp70_;
 			} else {
-				_tmp53_ = FALSE;
+				_tmp62_ = FALSE;
 			}
-			_tmp62_ = _tmp53_;
-			if (_tmp62_) {
-				ValaCreationMethod* _tmp63_;
-				const gchar* _tmp64_;
-				_tmp63_ = m;
-				_tmp64_ = return_ctype;
-				vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp63_, "CCode", "type", _tmp64_, NULL);
+			_tmp71_ = _tmp62_;
+			if (_tmp71_) {
+				ValaCreationMethod* _tmp72_;
+				const gchar* _tmp73_;
+				_tmp72_ = m;
+				_tmp73_ = return_ctype;
+				vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp72_, "CCode", "type", _tmp73_, NULL);
 			}
-			_tmp65_ = m;
-			_tmp66_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp65_);
+			_tmp74_ = m;
+			_tmp75_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp74_);
 			_vala_code_node_unref0 (s);
-			s = _tmp66_;
+			s = _tmp75_;
 			_g_free0 (parent_ctype);
 			_vala_code_node_unref0 (m);
 		} else {
-			const gchar* _tmp67_;
-			_tmp67_ = element_name;
-			if (g_strcmp0 (_tmp67_, "glib:signal") == 0) {
-				const gchar* _tmp68_;
-				ValaDataType* _tmp69_;
-				ValaGirParserNode* _tmp70_;
-				ValaSourceReference* _tmp71_;
-				ValaSignal* _tmp72_;
-				_tmp68_ = name;
-				_tmp69_ = return_type;
-				_tmp70_ = self->priv->current;
-				_tmp71_ = _tmp70_->source_reference;
-				_tmp72_ = vala_signal_new (_tmp68_, _tmp69_, _tmp71_, NULL);
+			const gchar* _tmp76_;
+			_tmp76_ = element_name;
+			if (g_strcmp0 (_tmp76_, "glib:signal") == 0) {
+				const gchar* _tmp77_;
+				ValaDataType* _tmp78_;
+				ValaGirParserNode* _tmp79_;
+				ValaSourceReference* _tmp80_;
+				ValaSignal* _tmp81_;
+				_tmp77_ = name;
+				_tmp78_ = return_type;
+				_tmp79_ = self->priv->current;
+				_tmp80_ = _tmp79_->source_reference;
+				_tmp81_ = vala_signal_new (_tmp77_, _tmp78_, _tmp80_, NULL);
 				_vala_code_node_unref0 (s);
-				s = (ValaSymbol*) _tmp72_;
+				s = (ValaSymbol*) _tmp81_;
 			} else {
-				const gchar* _tmp73_;
-				ValaDataType* _tmp74_;
-				ValaGirParserNode* _tmp75_;
-				ValaSourceReference* _tmp76_;
-				ValaMethod* _tmp77_;
-				_tmp73_ = name;
-				_tmp74_ = return_type;
-				_tmp75_ = self->priv->current;
-				_tmp76_ = _tmp75_->source_reference;
-				_tmp77_ = vala_method_new (_tmp73_, _tmp74_, _tmp76_, NULL);
+				const gchar* _tmp82_;
+				ValaDataType* _tmp83_;
+				ValaGirParserNode* _tmp84_;
+				ValaSourceReference* _tmp85_;
+				ValaMethod* _tmp86_;
+				_tmp82_ = name;
+				_tmp83_ = return_type;
+				_tmp84_ = self->priv->current;
+				_tmp85_ = _tmp84_->source_reference;
+				_tmp86_ = vala_method_new (_tmp82_, _tmp83_, _tmp85_, NULL);
 				_vala_code_node_unref0 (s);
-				s = (ValaSymbol*) _tmp77_;
+				s = (ValaSymbol*) _tmp86_;
 			}
 		}
 	}
-	_tmp78_ = s;
-	vala_symbol_set_access (_tmp78_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
-	_tmp79_ = s;
-	vala_symbol_set_external (_tmp79_, TRUE);
-	_tmp80_ = s;
-	if (VALA_IS_METHOD (_tmp80_)) {
-		ValaSymbol* _tmp81_;
-		ValaMethod* _tmp82_;
+	_tmp87_ = s;
+	vala_symbol_set_access (_tmp87_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
+	_tmp88_ = s;
+	_tmp89_ = comment;
+	vala_symbol_set_comment (_tmp88_, (ValaComment*) _tmp89_);
+	_tmp90_ = s;
+	vala_symbol_set_external (_tmp90_, TRUE);
+	_tmp91_ = s;
+	if (VALA_IS_METHOD (_tmp91_)) {
+		ValaSymbol* _tmp92_;
+		ValaMethod* _tmp93_;
 		ValaMethod* m;
-		gboolean _tmp83_ = FALSE;
-		const gchar* _tmp84_;
-		gboolean _tmp86_;
-		_tmp81_ = s;
-		_tmp82_ = _vala_code_node_ref0 (VALA_METHOD (_tmp81_));
-		m = _tmp82_;
-		_tmp84_ = element_name;
-		if (g_strcmp0 (_tmp84_, "virtual-method") == 0) {
-			_tmp83_ = TRUE;
+		gboolean _tmp94_ = FALSE;
+		const gchar* _tmp95_;
+		gboolean _tmp97_;
+		_tmp92_ = s;
+		_tmp93_ = _vala_code_node_ref0 (VALA_METHOD (_tmp92_));
+		m = _tmp93_;
+		_tmp95_ = element_name;
+		if (g_strcmp0 (_tmp95_, "virtual-method") == 0) {
+			_tmp94_ = TRUE;
 		} else {
-			const gchar* _tmp85_;
-			_tmp85_ = element_name;
-			_tmp83_ = g_strcmp0 (_tmp85_, "callback") == 0;
+			const gchar* _tmp96_;
+			_tmp96_ = element_name;
+			_tmp94_ = g_strcmp0 (_tmp96_, "callback") == 0;
 		}
-		_tmp86_ = _tmp83_;
-		if (_tmp86_) {
-			ValaGirParserNode* _tmp87_;
-			ValaGirParserNode* _tmp88_;
-			ValaSymbol* _tmp89_;
-			gboolean _tmp92_ = FALSE;
-			const gchar* _tmp93_;
-			gboolean _tmp96_;
-			_tmp87_ = self->priv->current;
-			_tmp88_ = _tmp87_->parent;
-			_tmp89_ = _tmp88_->symbol;
-			if (VALA_IS_INTERFACE (_tmp89_)) {
-				ValaMethod* _tmp90_;
-				_tmp90_ = m;
-				vala_method_set_is_abstract (_tmp90_, TRUE);
+		_tmp97_ = _tmp94_;
+		if (_tmp97_) {
+			ValaGirParserNode* _tmp98_;
+			ValaGirParserNode* _tmp99_;
+			ValaSymbol* _tmp100_;
+			gboolean _tmp103_ = FALSE;
+			const gchar* _tmp104_;
+			gboolean _tmp107_;
+			ValaGirParserNode* _tmp112_;
+			ValaMap* _tmp113_;
+			gpointer _tmp114_ = NULL;
+			gchar* _tmp115_;
+			const gchar* _tmp116_;
+			gboolean _tmp117_;
+			_tmp98_ = self->priv->current;
+			_tmp99_ = _tmp98_->parent;
+			_tmp100_ = _tmp99_->symbol;
+			if (VALA_IS_INTERFACE (_tmp100_)) {
+				ValaMethod* _tmp101_;
+				_tmp101_ = m;
+				vala_method_set_is_abstract (_tmp101_, TRUE);
 			} else {
-				ValaMethod* _tmp91_;
-				_tmp91_ = m;
-				vala_method_set_is_virtual (_tmp91_, TRUE);
+				ValaMethod* _tmp102_;
+				_tmp102_ = m;
+				vala_method_set_is_virtual (_tmp102_, TRUE);
 			}
-			_tmp93_ = invoker;
-			if (_tmp93_ == NULL) {
-				ValaGirParserMetadata* _tmp94_;
-				gboolean _tmp95_ = FALSE;
-				_tmp94_ = self->priv->metadata;
-				_tmp95_ = vala_gir_parser_metadata_has_argument (_tmp94_, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME);
-				_tmp92_ = !_tmp95_;
+			_tmp104_ = invoker;
+			if (_tmp104_ == NULL) {
+				ValaGirParserMetadata* _tmp105_;
+				gboolean _tmp106_ = FALSE;
+				_tmp105_ = self->priv->metadata;
+				_tmp106_ = vala_gir_parser_metadata_has_argument (_tmp105_, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME);
+				_tmp103_ = !_tmp106_;
 			} else {
-				_tmp92_ = FALSE;
+				_tmp103_ = FALSE;
 			}
-			_tmp96_ = _tmp92_;
-			if (_tmp96_) {
-				ValaSymbol* _tmp97_;
-				ValaSymbol* _tmp98_;
-				ValaSourceReference* _tmp99_;
-				ValaSourceReference* _tmp100_;
-				_tmp97_ = s;
-				_tmp98_ = s;
-				_tmp99_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp98_);
-				_tmp100_ = _tmp99_;
-				vala_code_node_set_attribute ((ValaCodeNode*) _tmp97_, "NoWrapper", TRUE, _tmp100_);
-			} else {
-				ValaGirParserNode* _tmp101_;
-				ValaMap* _tmp102_;
-				gpointer _tmp103_ = NULL;
-				gchar* _tmp104_;
-				const gchar* _tmp105_;
-				gboolean _tmp106_;
-				_tmp101_ = self->priv->current;
-				_tmp102_ = _tmp101_->girdata;
-				_tmp103_ = vala_map_get (_tmp102_, "name");
-				_tmp104_ = (gchar*) _tmp103_;
-				_tmp105_ = name;
-				_tmp106_ = g_strcmp0 (_tmp104_, _tmp105_) != 0;
-				_g_free0 (_tmp104_);
-				if (_tmp106_) {
-					ValaMethod* _tmp107_;
-					ValaGirParserNode* _tmp108_;
-					ValaMap* _tmp109_;
-					gpointer _tmp110_ = NULL;
-					gchar* _tmp111_;
-					_tmp107_ = m;
-					_tmp108_ = self->priv->current;
-					_tmp109_ = _tmp108_->girdata;
-					_tmp110_ = vala_map_get (_tmp109_, "name");
-					_tmp111_ = (gchar*) _tmp110_;
-					vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp107_, "CCode", "vfunc_name", _tmp111_, NULL);
-					_g_free0 (_tmp111_);
-				}
+			_tmp107_ = _tmp103_;
+			if (_tmp107_) {
+				ValaSymbol* _tmp108_;
+				ValaSymbol* _tmp109_;
+				ValaSourceReference* _tmp110_;
+				ValaSourceReference* _tmp111_;
+				_tmp108_ = s;
+				_tmp109_ = s;
+				_tmp110_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp109_);
+				_tmp111_ = _tmp110_;
+				vala_code_node_set_attribute ((ValaCodeNode*) _tmp108_, "NoWrapper", TRUE, _tmp111_);
+			}
+			_tmp112_ = self->priv->current;
+			_tmp113_ = _tmp112_->girdata;
+			_tmp114_ = vala_map_get (_tmp113_, "name");
+			_tmp115_ = (gchar*) _tmp114_;
+			_tmp116_ = name;
+			_tmp117_ = g_strcmp0 (_tmp115_, _tmp116_) != 0;
+			_g_free0 (_tmp115_);
+			if (_tmp117_) {
+				ValaMethod* _tmp118_;
+				ValaGirParserNode* _tmp119_;
+				ValaMap* _tmp120_;
+				gpointer _tmp121_ = NULL;
+				gchar* _tmp122_;
+				_tmp118_ = m;
+				_tmp119_ = self->priv->current;
+				_tmp120_ = _tmp119_->girdata;
+				_tmp121_ = vala_map_get (_tmp120_, "name");
+				_tmp122_ = (gchar*) _tmp121_;
+				vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp118_, "CCode", "vfunc_name", _tmp122_, NULL);
+				_g_free0 (_tmp122_);
 			}
 		} else {
-			const gchar* _tmp112_;
-			_tmp112_ = element_name;
-			if (g_strcmp0 (_tmp112_, "function") == 0) {
-				ValaMethod* _tmp113_;
-				_tmp113_ = m;
-				vala_method_set_binding (_tmp113_, VALA_MEMBER_BINDING_STATIC);
+			const gchar* _tmp123_;
+			_tmp123_ = element_name;
+			if (g_strcmp0 (_tmp123_, "function") == 0) {
+				ValaMethod* _tmp124_;
+				_tmp124_ = m;
+				vala_method_set_binding (_tmp124_, VALA_MEMBER_BINDING_STATIC);
 			}
 		}
 		_vala_code_node_unref0 (m);
 	}
-	_tmp115_ = s;
-	if (VALA_IS_METHOD (_tmp115_)) {
-		ValaSymbol* _tmp116_;
-		_tmp116_ = s;
-		_tmp114_ = !VALA_IS_CREATION_METHOD (_tmp116_);
+	_tmp126_ = s;
+	if (VALA_IS_METHOD (_tmp126_)) {
+		ValaSymbol* _tmp127_;
+		_tmp127_ = s;
+		_tmp125_ = !VALA_IS_CREATION_METHOD (_tmp127_);
 	} else {
-		_tmp114_ = FALSE;
+		_tmp125_ = FALSE;
 	}
-	_tmp117_ = _tmp114_;
-	if (_tmp117_) {
-		ValaSymbol* _tmp118_;
-		ValaMethod* _tmp119_;
+	_tmp128_ = _tmp125_;
+	if (_tmp128_) {
+		ValaSymbol* _tmp129_;
+		ValaMethod* _tmp130_;
 		ValaMethod* method;
-		ValaGirParserMetadata* _tmp120_;
-		gboolean _tmp121_ = FALSE;
-		ValaGirParserMetadata* _tmp132_;
-		gboolean _tmp133_ = FALSE;
-		_tmp118_ = s;
-		_tmp119_ = _vala_code_node_ref0 (VALA_METHOD (_tmp118_));
-		method = _tmp119_;
-		_tmp120_ = self->priv->metadata;
-		_tmp121_ = vala_gir_parser_metadata_has_argument (_tmp120_, VALA_GIR_PARSER_ARGUMENT_TYPE_VIRTUAL);
-		if (_tmp121_) {
-			ValaMethod* _tmp122_;
-			ValaGirParserMetadata* _tmp123_;
-			gboolean _tmp124_ = FALSE;
-			ValaMethod* _tmp125_;
-			_tmp122_ = method;
-			_tmp123_ = self->priv->metadata;
-			_tmp124_ = vala_gir_parser_metadata_get_bool (_tmp123_, VALA_GIR_PARSER_ARGUMENT_TYPE_VIRTUAL, FALSE);
-			vala_method_set_is_virtual (_tmp122_, _tmp124_);
-			_tmp125_ = method;
-			vala_method_set_is_abstract (_tmp125_, FALSE);
+		ValaGirParserMetadata* _tmp131_;
+		gboolean _tmp132_ = FALSE;
+		ValaGirParserMetadata* _tmp143_;
+		gboolean _tmp144_ = FALSE;
+		_tmp129_ = s;
+		_tmp130_ = _vala_code_node_ref0 (VALA_METHOD (_tmp129_));
+		method = _tmp130_;
+		_tmp131_ = self->priv->metadata;
+		_tmp132_ = vala_gir_parser_metadata_has_argument (_tmp131_, VALA_GIR_PARSER_ARGUMENT_TYPE_VIRTUAL);
+		if (_tmp132_) {
+			ValaMethod* _tmp133_;
+			ValaGirParserMetadata* _tmp134_;
+			gboolean _tmp135_ = FALSE;
+			ValaMethod* _tmp136_;
+			_tmp133_ = method;
+			_tmp134_ = self->priv->metadata;
+			_tmp135_ = vala_gir_parser_metadata_get_bool (_tmp134_, VALA_GIR_PARSER_ARGUMENT_TYPE_VIRTUAL, FALSE);
+			vala_method_set_is_virtual (_tmp133_, _tmp135_);
+			_tmp136_ = method;
+			vala_method_set_is_abstract (_tmp136_, FALSE);
 		} else {
-			ValaGirParserMetadata* _tmp126_;
-			gboolean _tmp127_ = FALSE;
-			_tmp126_ = self->priv->metadata;
-			_tmp127_ = vala_gir_parser_metadata_has_argument (_tmp126_, VALA_GIR_PARSER_ARGUMENT_TYPE_ABSTRACT);
-			if (_tmp127_) {
-				ValaMethod* _tmp128_;
-				ValaGirParserMetadata* _tmp129_;
-				gboolean _tmp130_ = FALSE;
-				ValaMethod* _tmp131_;
-				_tmp128_ = method;
-				_tmp129_ = self->priv->metadata;
-				_tmp130_ = vala_gir_parser_metadata_get_bool (_tmp129_, VALA_GIR_PARSER_ARGUMENT_TYPE_ABSTRACT, FALSE);
-				vala_method_set_is_abstract (_tmp128_, _tmp130_);
-				_tmp131_ = method;
-				vala_method_set_is_virtual (_tmp131_, FALSE);
+			ValaGirParserMetadata* _tmp137_;
+			gboolean _tmp138_ = FALSE;
+			_tmp137_ = self->priv->metadata;
+			_tmp138_ = vala_gir_parser_metadata_has_argument (_tmp137_, VALA_GIR_PARSER_ARGUMENT_TYPE_ABSTRACT);
+			if (_tmp138_) {
+				ValaMethod* _tmp139_;
+				ValaGirParserMetadata* _tmp140_;
+				gboolean _tmp141_ = FALSE;
+				ValaMethod* _tmp142_;
+				_tmp139_ = method;
+				_tmp140_ = self->priv->metadata;
+				_tmp141_ = vala_gir_parser_metadata_get_bool (_tmp140_, VALA_GIR_PARSER_ARGUMENT_TYPE_ABSTRACT, FALSE);
+				vala_method_set_is_abstract (_tmp139_, _tmp141_);
+				_tmp142_ = method;
+				vala_method_set_is_virtual (_tmp142_, FALSE);
 			}
 		}
-		_tmp132_ = self->priv->metadata;
-		_tmp133_ = vala_gir_parser_metadata_has_argument (_tmp132_, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME);
-		if (_tmp133_) {
-			ValaMethod* _tmp134_;
-			ValaGirParserMetadata* _tmp135_;
-			gchar* _tmp136_ = NULL;
-			gchar* _tmp137_;
-			ValaMethod* _tmp138_;
-			_tmp134_ = method;
-			_tmp135_ = self->priv->metadata;
-			_tmp136_ = vala_gir_parser_metadata_get_string (_tmp135_, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME);
-			_tmp137_ = _tmp136_;
-			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp134_, "CCode", "vfunc_name", _tmp137_, NULL);
-			_g_free0 (_tmp137_);
-			_tmp138_ = method;
-			vala_method_set_is_virtual (_tmp138_, TRUE);
-		}
-		_vala_code_node_unref0 (method);
-	}
-	_tmp139_ = self->priv->metadata;
-	_tmp140_ = vala_gir_parser_metadata_get_expression (_tmp139_, VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS);
-	_tmp141_ = _tmp140_;
-	_tmp142_ = !VALA_IS_NULL_LITERAL (_tmp141_);
-	_vala_code_node_unref0 (_tmp141_);
-	if (_tmp142_) {
-		ValaGirParserMetadata* _tmp143_;
-		gboolean _tmp144_ = FALSE;
 		_tmp143_ = self->priv->metadata;
-		_tmp144_ = vala_gir_parser_metadata_has_argument (_tmp143_, VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS);
+		_tmp144_ = vala_gir_parser_metadata_has_argument (_tmp143_, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME);
 		if (_tmp144_) {
-			ValaGirParserMetadata* _tmp145_;
-			gchar* _tmp146_ = NULL;
-			gchar* _tmp147_;
-			gchar** _tmp148_;
-			gchar** _tmp149_ = NULL;
-			gchar** _tmp150_;
-			gint _tmp150__length1;
+			ValaMethod* _tmp145_;
+			ValaGirParserMetadata* _tmp146_;
+			gchar* _tmp147_ = NULL;
+			gchar* _tmp148_;
+			ValaMethod* _tmp149_;
+			_tmp145_ = method;
+			_tmp146_ = self->priv->metadata;
+			_tmp147_ = vala_gir_parser_metadata_get_string (_tmp146_, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME);
+			_tmp148_ = _tmp147_;
+			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp145_, "CCode", "vfunc_name", _tmp148_, NULL);
+			_g_free0 (_tmp148_);
+			_tmp149_ = method;
+			vala_method_set_is_virtual (_tmp149_, TRUE);
+		}
+		_vala_code_node_unref0 (method);
+	}
+	_tmp150_ = self->priv->metadata;
+	_tmp151_ = vala_gir_parser_metadata_get_expression (_tmp150_, VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS);
+	_tmp152_ = _tmp151_;
+	_tmp153_ = !VALA_IS_NULL_LITERAL (_tmp152_);
+	_vala_code_node_unref0 (_tmp152_);
+	if (_tmp153_) {
+		ValaGirParserMetadata* _tmp154_;
+		gboolean _tmp155_ = FALSE;
+		_tmp154_ = self->priv->metadata;
+		_tmp155_ = vala_gir_parser_metadata_has_argument (_tmp154_, VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS);
+		if (_tmp155_) {
+			ValaGirParserMetadata* _tmp156_;
+			gchar* _tmp157_ = NULL;
+			gchar* _tmp158_;
+			gchar** _tmp159_;
+			gchar** _tmp160_ = NULL;
+			gchar** _tmp161_;
+			gint _tmp161__length1;
 			gchar** error_types;
 			gint error_types_length1;
 			gint _error_types_size_;
-			gchar** _tmp151_;
-			gint _tmp151__length1;
-			_tmp145_ = self->priv->metadata;
-			_tmp146_ = vala_gir_parser_metadata_get_string (_tmp145_, VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS);
-			_tmp147_ = _tmp146_;
-			_tmp149_ = _tmp148_ = g_strsplit (_tmp147_, ",", 0);
-			_tmp150_ = _tmp149_;
-			_tmp150__length1 = _vala_array_length (_tmp148_);
-			_g_free0 (_tmp147_);
-			error_types = _tmp150_;
-			error_types_length1 = _tmp150__length1;
+			gchar** _tmp162_;
+			gint _tmp162__length1;
+			_tmp156_ = self->priv->metadata;
+			_tmp157_ = vala_gir_parser_metadata_get_string (_tmp156_, VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS);
+			_tmp158_ = _tmp157_;
+			_tmp160_ = _tmp159_ = g_strsplit (_tmp158_, ",", 0);
+			_tmp161_ = _tmp160_;
+			_tmp161__length1 = _vala_array_length (_tmp159_);
+			_g_free0 (_tmp158_);
+			error_types = _tmp161_;
+			error_types_length1 = _tmp161__length1;
 			_error_types_size_ = error_types_length1;
-			_tmp151_ = error_types;
-			_tmp151__length1 = error_types_length1;
+			_tmp162_ = error_types;
+			_tmp162__length1 = error_types_length1;
 			{
 				gchar** error_type_collection = NULL;
 				gint error_type_collection_length1 = 0;
 				gint _error_type_collection_size_ = 0;
 				gint error_type_it = 0;
-				error_type_collection = _tmp151_;
-				error_type_collection_length1 = _tmp151__length1;
-				for (error_type_it = 0; error_type_it < _tmp151__length1; error_type_it = error_type_it + 1) {
-					gchar* _tmp152_;
+				error_type_collection = _tmp162_;
+				error_type_collection_length1 = _tmp162__length1;
+				for (error_type_it = 0; error_type_it < _tmp162__length1; error_type_it = error_type_it + 1) {
+					gchar* _tmp163_;
 					gchar* error_type = NULL;
-					_tmp152_ = g_strdup (error_type_collection[error_type_it]);
-					error_type = _tmp152_;
+					_tmp163_ = g_strdup (error_type_collection[error_type_it]);
+					error_type = _tmp163_;
 					{
-						ValaSymbol* _tmp153_;
-						const gchar* _tmp154_;
-						ValaGirParserMetadata* _tmp155_;
-						ValaSourceReference* _tmp156_ = NULL;
-						ValaSourceReference* _tmp157_;
-						ValaDataType* _tmp158_ = NULL;
-						ValaDataType* _tmp159_;
-						_tmp153_ = s;
-						_tmp154_ = error_type;
-						_tmp155_ = self->priv->metadata;
-						_tmp156_ = vala_gir_parser_metadata_get_source_reference (_tmp155_, VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS);
-						_tmp157_ = _tmp156_;
-						_tmp158_ = vala_gir_parser_parse_type_from_string (self, _tmp154_, TRUE, _tmp157_);
-						_tmp159_ = _tmp158_;
-						vala_code_node_add_error_type ((ValaCodeNode*) _tmp153_, _tmp159_);
-						_vala_code_node_unref0 (_tmp159_);
-						_vala_source_reference_unref0 (_tmp157_);
+						ValaSymbol* _tmp164_;
+						const gchar* _tmp165_;
+						ValaGirParserMetadata* _tmp166_;
+						ValaSourceReference* _tmp167_ = NULL;
+						ValaSourceReference* _tmp168_;
+						ValaDataType* _tmp169_ = NULL;
+						ValaDataType* _tmp170_;
+						_tmp164_ = s;
+						_tmp165_ = error_type;
+						_tmp166_ = self->priv->metadata;
+						_tmp167_ = vala_gir_parser_metadata_get_source_reference (_tmp166_, VALA_GIR_PARSER_ARGUMENT_TYPE_THROWS);
+						_tmp168_ = _tmp167_;
+						_tmp169_ = vala_gir_parser_parse_type_from_string (self, _tmp165_, TRUE, _tmp168_);
+						_tmp170_ = _tmp169_;
+						vala_code_node_add_error_type ((ValaCodeNode*) _tmp164_, _tmp170_);
+						_vala_code_node_unref0 (_tmp170_);
+						_vala_source_reference_unref0 (_tmp168_);
 						_g_free0 (error_type);
 					}
 				}
 			}
 			error_types = (_vala_array_free (error_types, error_types_length1, (GDestroyNotify) g_free), NULL);
 		} else {
-			const gchar* _tmp160_;
-			_tmp160_ = throws_string;
-			if (g_strcmp0 (_tmp160_, "1") == 0) {
-				ValaSymbol* _tmp161_;
-				ValaErrorType* _tmp162_;
-				ValaErrorType* _tmp163_;
-				_tmp161_ = s;
-				_tmp162_ = vala_error_type_new (NULL, NULL, NULL);
-				_tmp163_ = _tmp162_;
-				vala_code_node_add_error_type ((ValaCodeNode*) _tmp161_, (ValaDataType*) _tmp163_);
-				_vala_code_node_unref0 (_tmp163_);
+			const gchar* _tmp171_;
+			_tmp171_ = throws_string;
+			if (g_strcmp0 (_tmp171_, "1") == 0) {
+				ValaSymbol* _tmp172_;
+				ValaErrorType* _tmp173_;
+				ValaErrorType* _tmp174_;
+				_tmp172_ = s;
+				_tmp173_ = vala_error_type_new (NULL, NULL, NULL);
+				_tmp174_ = _tmp173_;
+				vala_code_node_add_error_type ((ValaCodeNode*) _tmp172_, (ValaDataType*) _tmp174_);
+				_vala_code_node_unref0 (_tmp174_);
 			}
 		}
 	}
-	_tmp164_ = s;
-	if (VALA_IS_METHOD (_tmp164_)) {
-		ValaSymbol* _tmp165_;
-		ValaMethod* _tmp166_;
+	_tmp175_ = s;
+	if (VALA_IS_METHOD (_tmp175_)) {
+		ValaSymbol* _tmp176_;
+		ValaMethod* _tmp177_;
 		ValaMethod* m;
-		ValaMethod* _tmp167_;
-		ValaGirParserMetadata* _tmp168_;
-		gboolean _tmp169_ = FALSE;
-		ValaGirParserMetadata* _tmp170_;
-		gboolean _tmp171_ = FALSE;
-		_tmp165_ = s;
-		_tmp166_ = _vala_code_node_ref0 (VALA_METHOD (_tmp165_));
-		m = _tmp166_;
-		_tmp167_ = m;
-		_tmp168_ = self->priv->metadata;
-		_tmp169_ = vala_gir_parser_metadata_get_bool (_tmp168_, VALA_GIR_PARSER_ARGUMENT_TYPE_PRINTF_FORMAT, FALSE);
-		vala_code_node_set_attribute ((ValaCodeNode*) _tmp167_, "PrintfFormat", _tmp169_, NULL);
-		_tmp170_ = self->priv->metadata;
-		_tmp171_ = vala_gir_parser_metadata_has_argument (_tmp170_, VALA_GIR_PARSER_ARGUMENT_TYPE_SENTINEL);
-		if (_tmp171_) {
-			ValaMethod* _tmp172_;
-			ValaGirParserMetadata* _tmp173_;
-			gchar* _tmp174_ = NULL;
-			gchar* _tmp175_;
-			_tmp172_ = m;
-			_tmp173_ = self->priv->metadata;
-			_tmp174_ = vala_gir_parser_metadata_get_string (_tmp173_, VALA_GIR_PARSER_ARGUMENT_TYPE_SENTINEL);
-			_tmp175_ = _tmp174_;
-			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp172_, "CCode", "sentinel", _tmp175_, NULL);
-			_g_free0 (_tmp175_);
+		ValaMethod* _tmp178_;
+		ValaGirParserMetadata* _tmp179_;
+		gboolean _tmp180_ = FALSE;
+		ValaGirParserMetadata* _tmp181_;
+		gboolean _tmp182_ = FALSE;
+		_tmp176_ = s;
+		_tmp177_ = _vala_code_node_ref0 (VALA_METHOD (_tmp176_));
+		m = _tmp177_;
+		_tmp178_ = m;
+		_tmp179_ = self->priv->metadata;
+		_tmp180_ = vala_gir_parser_metadata_get_bool (_tmp179_, VALA_GIR_PARSER_ARGUMENT_TYPE_PRINTF_FORMAT, FALSE);
+		vala_code_node_set_attribute ((ValaCodeNode*) _tmp178_, "PrintfFormat", _tmp180_, NULL);
+		_tmp181_ = self->priv->metadata;
+		_tmp182_ = vala_gir_parser_metadata_has_argument (_tmp181_, VALA_GIR_PARSER_ARGUMENT_TYPE_SENTINEL);
+		if (_tmp182_) {
+			ValaMethod* _tmp183_;
+			ValaGirParserMetadata* _tmp184_;
+			gchar* _tmp185_ = NULL;
+			gchar* _tmp186_;
+			_tmp183_ = m;
+			_tmp184_ = self->priv->metadata;
+			_tmp185_ = vala_gir_parser_metadata_get_string (_tmp184_, VALA_GIR_PARSER_ARGUMENT_TYPE_SENTINEL);
+			_tmp186_ = _tmp185_;
+			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp183_, "CCode", "sentinel", _tmp186_, NULL);
+			_g_free0 (_tmp186_);
 		}
 		_vala_code_node_unref0 (m);
 	}
-	_tmp177_ = return_type;
-	if (VALA_IS_ARRAY_TYPE (_tmp177_)) {
-		ValaGirParserMetadata* _tmp178_;
-		gboolean _tmp179_ = FALSE;
-		_tmp178_ = self->priv->metadata;
-		_tmp179_ = vala_gir_parser_metadata_has_argument (_tmp178_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX);
-		_tmp176_ = _tmp179_;
+	_tmp188_ = return_type;
+	if (VALA_IS_ARRAY_TYPE (_tmp188_)) {
+		ValaGirParserMetadata* _tmp189_;
+		gboolean _tmp190_ = FALSE;
+		_tmp189_ = self->priv->metadata;
+		_tmp190_ = vala_gir_parser_metadata_has_argument (_tmp189_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX);
+		_tmp187_ = _tmp190_;
 	} else {
-		_tmp176_ = FALSE;
-	}
-	_tmp180_ = _tmp176_;
-	if (_tmp180_) {
-		ValaGirParserMetadata* _tmp181_;
-		gint _tmp182_ = 0;
-		_tmp181_ = self->priv->metadata;
-		_tmp182_ = vala_gir_parser_metadata_get_integer (_tmp181_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX);
-		return_array_length_idx = _tmp182_;
+		_tmp187_ = FALSE;
+	}
+	_tmp191_ = _tmp187_;
+	if (_tmp191_) {
+		ValaGirParserMetadata* _tmp192_;
+		gint _tmp193_ = 0;
+		_tmp192_ = self->priv->metadata;
+		_tmp193_ = vala_gir_parser_metadata_get_integer (_tmp192_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_IDX);
+		return_array_length_idx = _tmp193_;
 	} else {
-		gboolean _tmp183_;
-		gboolean _tmp185_;
-		_tmp183_ = return_no_array_length;
-		if (_tmp183_) {
-			ValaSymbol* _tmp184_;
-			_tmp184_ = s;
-			vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp184_, "CCode", "array_length", FALSE, NULL);
+		gboolean _tmp194_;
+		gboolean _tmp196_;
+		_tmp194_ = return_no_array_length;
+		if (_tmp194_) {
+			ValaSymbol* _tmp195_;
+			_tmp195_ = s;
+			vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp195_, "CCode", "array_length", FALSE, NULL);
 		}
-		_tmp185_ = return_array_null_terminated;
-		if (_tmp185_) {
-			ValaSymbol* _tmp186_;
-			_tmp186_ = s;
-			vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp186_, "CCode", "array_null_terminated", TRUE, NULL);
+		_tmp196_ = return_array_null_terminated;
+		if (_tmp196_) {
+			ValaSymbol* _tmp197_;
+			_tmp197_ = s;
+			vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp197_, "CCode", "array_null_terminated", TRUE, NULL);
 		}
 	}
-	_tmp187_ = self->priv->current;
-	_tmp188_ = return_array_length_idx;
-	_tmp187_->return_array_length_idx = _tmp188_;
-	_tmp189_ = self->priv->current;
-	_tmp190_ = s;
-	_tmp191_ = _vala_code_node_ref0 (_tmp190_);
-	_vala_code_node_unref0 (_tmp189_->symbol);
-	_tmp189_->symbol = _tmp191_;
-	_tmp192_ = g_direct_equal;
-	_tmp193_ = vala_array_list_new (VALA_GIR_PARSER_TYPE_PARAMETER_INFO, (GBoxedCopyFunc) vala_gir_parser_parameter_info_ref, vala_gir_parser_parameter_info_unref, _tmp192_);
-	parameters = _tmp193_;
-	_tmp194_ = self->priv->current;
-	_tmp195_ = g_direct_equal;
-	_tmp196_ = vala_array_list_new (G_TYPE_INT, NULL, NULL, _tmp195_);
-	_vala_iterable_unref0 (_tmp194_->array_length_parameters);
-	_tmp194_->array_length_parameters = _tmp196_;
-	_tmp197_ = self->priv->current;
-	_tmp198_ = g_direct_equal;
-	_tmp199_ = vala_array_list_new (G_TYPE_INT, NULL, NULL, _tmp198_);
-	_vala_iterable_unref0 (_tmp197_->closure_parameters);
-	_tmp197_->closure_parameters = _tmp199_;
+	_tmp198_ = self->priv->current;
+	_tmp199_ = return_array_length_idx;
+	_tmp198_->return_array_length_idx = _tmp199_;
 	_tmp200_ = self->priv->current;
-	_tmp201_ = g_direct_equal;
-	_tmp202_ = vala_array_list_new (G_TYPE_INT, NULL, NULL, _tmp201_);
-	_vala_iterable_unref0 (_tmp200_->destroy_parameters);
-	_tmp200_->destroy_parameters = _tmp202_;
-	_tmp204_ = self->priv->current_token;
-	if (_tmp204_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT) {
-		ValaMarkupReader* _tmp205_;
-		const gchar* _tmp206_;
-		const gchar* _tmp207_;
-		_tmp205_ = self->priv->reader;
-		_tmp206_ = vala_markup_reader_get_name (_tmp205_);
-		_tmp207_ = _tmp206_;
-		_tmp203_ = g_strcmp0 (_tmp207_, "parameters") == 0;
+	_tmp201_ = s;
+	_tmp202_ = _vala_code_node_ref0 (_tmp201_);
+	_vala_code_node_unref0 (_tmp200_->symbol);
+	_tmp200_->symbol = _tmp202_;
+	_tmp203_ = g_direct_equal;
+	_tmp204_ = vala_array_list_new (VALA_GIR_PARSER_TYPE_PARAMETER_INFO, (GBoxedCopyFunc) vala_gir_parser_parameter_info_ref, vala_gir_parser_parameter_info_unref, _tmp203_);
+	parameters = _tmp204_;
+	_tmp205_ = self->priv->current;
+	_tmp206_ = g_direct_equal;
+	_tmp207_ = vala_array_list_new (G_TYPE_INT, NULL, NULL, _tmp206_);
+	_vala_iterable_unref0 (_tmp205_->array_length_parameters);
+	_tmp205_->array_length_parameters = _tmp207_;
+	_tmp208_ = self->priv->current;
+	_tmp209_ = g_direct_equal;
+	_tmp210_ = vala_array_list_new (G_TYPE_INT, NULL, NULL, _tmp209_);
+	_vala_iterable_unref0 (_tmp208_->closure_parameters);
+	_tmp208_->closure_parameters = _tmp210_;
+	_tmp211_ = self->priv->current;
+	_tmp212_ = g_direct_equal;
+	_tmp213_ = vala_array_list_new (G_TYPE_INT, NULL, NULL, _tmp212_);
+	_vala_iterable_unref0 (_tmp211_->destroy_parameters);
+	_tmp211_->destroy_parameters = _tmp213_;
+	_tmp215_ = self->priv->current_token;
+	if (_tmp215_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT) {
+		ValaMarkupReader* _tmp216_;
+		const gchar* _tmp217_;
+		const gchar* _tmp218_;
+		_tmp216_ = self->priv->reader;
+		_tmp217_ = vala_markup_reader_get_name (_tmp216_);
+		_tmp218_ = _tmp217_;
+		_tmp214_ = g_strcmp0 (_tmp218_, "parameters") == 0;
 	} else {
-		_tmp203_ = FALSE;
+		_tmp214_ = FALSE;
 	}
-	_tmp208_ = _tmp203_;
-	if (_tmp208_) {
+	_tmp219_ = _tmp214_;
+	if (_tmp219_) {
 		vala_gir_parser_start_element (self, "parameters");
 		vala_gir_parser_next (self);
 		while (TRUE) {
-			ValaMarkupTokenType _tmp209_;
-			gboolean _tmp210_ = FALSE;
+			ValaMarkupTokenType _tmp220_;
+			gboolean _tmp221_ = FALSE;
 			gint array_length_idx = 0;
 			gint closure_idx = 0;
 			gint destroy_idx = 0;
 			gchar* scope = NULL;
 			gchar* default_param_name;
-			ValaArrayList* _tmp211_;
-			gint _tmp212_;
-			gint _tmp213_;
-			gchar* _tmp214_ = NULL;
-			const gchar* _tmp215_;
-			gint _tmp216_ = 0;
-			gint _tmp217_ = 0;
-			gint _tmp218_ = 0;
-			gchar* _tmp219_ = NULL;
-			ValaParameter* _tmp220_ = NULL;
+			ValaComment* param_comment = NULL;
+			ValaArrayList* _tmp222_;
+			gint _tmp223_;
+			gint _tmp224_;
+			gchar* _tmp225_ = NULL;
+			const gchar* _tmp226_;
+			gint _tmp227_ = 0;
+			gint _tmp228_ = 0;
+			gint _tmp229_ = 0;
+			gchar* _tmp230_ = NULL;
+			ValaComment* _tmp231_ = NULL;
+			ValaParameter* _tmp232_ = NULL;
 			ValaParameter* param;
-			gint _tmp221_;
-			gint _tmp225_;
-			gint _tmp229_;
-			ValaParameter* _tmp233_;
-			gint _tmp234_;
-			gint _tmp235_;
-			gint _tmp236_;
-			ValaGirParserParameterInfo* _tmp237_;
+			gint _tmp233_;
+			gint _tmp237_;
+			gint _tmp241_;
+			ValaComment* _tmp245_;
+			ValaParameter* _tmp263_;
+			gint _tmp264_;
+			gint _tmp265_;
+			gint _tmp266_;
+			ValaGirParserParameterInfo* _tmp267_;
 			ValaGirParserParameterInfo* info;
-			gboolean _tmp238_ = FALSE;
-			ValaSymbol* _tmp239_;
-			gboolean _tmp241_;
-			ValaArrayList* _tmp256_;
-			ValaGirParserParameterInfo* _tmp257_;
-			_tmp209_ = self->priv->current_token;
-			if (!(_tmp209_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) {
+			gboolean _tmp268_ = FALSE;
+			ValaSymbol* _tmp269_;
+			gboolean _tmp271_;
+			ValaArrayList* _tmp286_;
+			ValaGirParserParameterInfo* _tmp287_;
+			_tmp220_ = self->priv->current_token;
+			if (!(_tmp220_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) {
 				break;
 			}
-			_tmp210_ = vala_gir_parser_push_metadata (self);
-			if (!_tmp210_) {
+			_tmp221_ = vala_gir_parser_push_metadata (self);
+			if (!_tmp221_) {
 				vala_gir_parser_skip_element (self);
 				continue;
 			}
 			default_param_name = NULL;
-			_tmp211_ = parameters;
-			_tmp212_ = vala_collection_get_size ((ValaCollection*) _tmp211_);
-			_tmp213_ = _tmp212_;
-			_tmp214_ = g_strdup_printf ("arg%d", _tmp213_);
+			_tmp222_ = parameters;
+			_tmp223_ = vala_collection_get_size ((ValaCollection*) _tmp222_);
+			_tmp224_ = _tmp223_;
+			_tmp225_ = g_strdup_printf ("arg%d", _tmp224_);
 			_g_free0 (default_param_name);
-			default_param_name = _tmp214_;
-			_tmp215_ = default_param_name;
-			_tmp220_ = vala_gir_parser_parse_parameter (self, &_tmp216_, &_tmp217_, &_tmp218_, &_tmp219_, _tmp215_);
-			array_length_idx = _tmp216_;
-			closure_idx = _tmp217_;
-			destroy_idx = _tmp218_;
+			default_param_name = _tmp225_;
+			_tmp226_ = default_param_name;
+			_tmp232_ = vala_gir_parser_parse_parameter (self, &_tmp227_, &_tmp228_, &_tmp229_, &_tmp230_, &_tmp231_, _tmp226_);
+			array_length_idx = _tmp227_;
+			closure_idx = _tmp228_;
+			destroy_idx = _tmp229_;
 			_g_free0 (scope);
-			scope = _tmp219_;
-			param = _tmp220_;
-			_tmp221_ = array_length_idx;
-			if (_tmp221_ != (-1)) {
-				ValaGirParserNode* _tmp222_;
-				ValaArrayList* _tmp223_;
-				gint _tmp224_;
-				_tmp222_ = self->priv->current;
-				_tmp223_ = _tmp222_->array_length_parameters;
-				_tmp224_ = array_length_idx;
-				vala_collection_add ((ValaCollection*) _tmp223_, GINT_TO_POINTER (_tmp224_));
+			scope = _tmp230_;
+			_vala_comment_unref0 (param_comment);
+			param_comment = _tmp231_;
+			param = _tmp232_;
+			_tmp233_ = array_length_idx;
+			if (_tmp233_ != (-1)) {
+				ValaGirParserNode* _tmp234_;
+				ValaArrayList* _tmp235_;
+				gint _tmp236_;
+				_tmp234_ = self->priv->current;
+				_tmp235_ = _tmp234_->array_length_parameters;
+				_tmp236_ = array_length_idx;
+				vala_collection_add ((ValaCollection*) _tmp235_, GINT_TO_POINTER (_tmp236_));
 			}
-			_tmp225_ = closure_idx;
-			if (_tmp225_ != (-1)) {
-				ValaGirParserNode* _tmp226_;
-				ValaArrayList* _tmp227_;
-				gint _tmp228_;
-				_tmp226_ = self->priv->current;
-				_tmp227_ = _tmp226_->closure_parameters;
-				_tmp228_ = closure_idx;
-				vala_collection_add ((ValaCollection*) _tmp227_, GINT_TO_POINTER (_tmp228_));
+			_tmp237_ = closure_idx;
+			if (_tmp237_ != (-1)) {
+				ValaGirParserNode* _tmp238_;
+				ValaArrayList* _tmp239_;
+				gint _tmp240_;
+				_tmp238_ = self->priv->current;
+				_tmp239_ = _tmp238_->closure_parameters;
+				_tmp240_ = closure_idx;
+				vala_collection_add ((ValaCollection*) _tmp239_, GINT_TO_POINTER (_tmp240_));
 			}
-			_tmp229_ = destroy_idx;
-			if (_tmp229_ != (-1)) {
-				ValaGirParserNode* _tmp230_;
-				ValaArrayList* _tmp231_;
-				gint _tmp232_;
-				_tmp230_ = self->priv->current;
-				_tmp231_ = _tmp230_->destroy_parameters;
-				_tmp232_ = destroy_idx;
-				vala_collection_add ((ValaCollection*) _tmp231_, GINT_TO_POINTER (_tmp232_));
+			_tmp241_ = destroy_idx;
+			if (_tmp241_ != (-1)) {
+				ValaGirParserNode* _tmp242_;
+				ValaArrayList* _tmp243_;
+				gint _tmp244_;
+				_tmp242_ = self->priv->current;
+				_tmp243_ = _tmp242_->destroy_parameters;
+				_tmp244_ = destroy_idx;
+				vala_collection_add ((ValaCollection*) _tmp243_, GINT_TO_POINTER (_tmp244_));
+			}
+			_tmp245_ = param_comment;
+			if (_tmp245_ != NULL) {
+				ValaGirComment* _tmp246_;
+				const gchar* _tmp253_ = NULL;
+				ValaParameter* _tmp254_;
+				gboolean _tmp255_;
+				gboolean _tmp256_;
+				ValaGirComment* _tmp260_;
+				const gchar* _tmp261_;
+				ValaComment* _tmp262_;
+				_tmp246_ = comment;
+				if (_tmp246_ == NULL) {
+					ValaSymbol* _tmp247_;
+					ValaSourceReference* _tmp248_;
+					ValaSourceReference* _tmp249_;
+					ValaGirComment* _tmp250_;
+					ValaSymbol* _tmp251_;
+					ValaGirComment* _tmp252_;
+					_tmp247_ = s;
+					_tmp248_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp247_);
+					_tmp249_ = _tmp248_;
+					_tmp250_ = vala_gir_comment_new (NULL, _tmp249_);
+					_vala_comment_unref0 (comment);
+					comment = _tmp250_;
+					_tmp251_ = s;
+					_tmp252_ = comment;
+					vala_symbol_set_comment (_tmp251_, (ValaComment*) _tmp252_);
+				}
+				_tmp254_ = param;
+				_tmp255_ = vala_parameter_get_ellipsis (_tmp254_);
+				_tmp256_ = _tmp255_;
+				if (_tmp256_) {
+					_tmp253_ = "...";
+				} else {
+					ValaParameter* _tmp257_;
+					const gchar* _tmp258_;
+					const gchar* _tmp259_;
+					_tmp257_ = param;
+					_tmp258_ = vala_symbol_get_name ((ValaSymbol*) _tmp257_);
+					_tmp259_ = _tmp258_;
+					_tmp253_ = _tmp259_;
+				}
+				_tmp260_ = comment;
+				_tmp261_ = _tmp253_;
+				_tmp262_ = param_comment;
+				vala_gir_comment_add_content_for_parameter (_tmp260_, _tmp261_, _tmp262_);
 			}
-			_tmp233_ = param;
-			_tmp234_ = array_length_idx;
-			_tmp235_ = closure_idx;
-			_tmp236_ = destroy_idx;
-			_tmp237_ = vala_gir_parser_parameter_info_new (_tmp233_, _tmp234_, _tmp235_, _tmp236_);
-			info = _tmp237_;
-			_tmp239_ = s;
-			if (VALA_IS_METHOD (_tmp239_)) {
-				const gchar* _tmp240_;
-				_tmp240_ = scope;
-				_tmp238_ = g_strcmp0 (_tmp240_, "async") == 0;
+			_tmp263_ = param;
+			_tmp264_ = array_length_idx;
+			_tmp265_ = closure_idx;
+			_tmp266_ = destroy_idx;
+			_tmp267_ = vala_gir_parser_parameter_info_new (_tmp263_, _tmp264_, _tmp265_, _tmp266_);
+			info = _tmp267_;
+			_tmp269_ = s;
+			if (VALA_IS_METHOD (_tmp269_)) {
+				const gchar* _tmp270_;
+				_tmp270_ = scope;
+				_tmp268_ = g_strcmp0 (_tmp270_, "async") == 0;
 			} else {
-				_tmp238_ = FALSE;
+				_tmp268_ = FALSE;
 			}
-			_tmp241_ = _tmp238_;
-			if (_tmp241_) {
-				ValaParameter* _tmp242_;
-				ValaDataType* _tmp243_;
-				ValaDataType* _tmp244_;
-				ValaUnresolvedType* _tmp245_;
+			_tmp271_ = _tmp268_;
+			if (_tmp271_) {
+				ValaParameter* _tmp272_;
+				ValaDataType* _tmp273_;
+				ValaDataType* _tmp274_;
+				ValaUnresolvedType* _tmp275_;
 				ValaUnresolvedType* unresolved_type;
-				gboolean _tmp246_ = FALSE;
-				ValaUnresolvedType* _tmp247_;
-				gboolean _tmp253_;
-				_tmp242_ = param;
-				_tmp243_ = vala_variable_get_variable_type ((ValaVariable*) _tmp242_);
-				_tmp244_ = _tmp243_;
-				_tmp245_ = _vala_code_node_ref0 (VALA_IS_UNRESOLVED_TYPE (_tmp244_) ? ((ValaUnresolvedType*) _tmp244_) : NULL);
-				unresolved_type = _tmp245_;
-				_tmp247_ = unresolved_type;
-				if (_tmp247_ != NULL) {
-					ValaUnresolvedType* _tmp248_;
-					ValaUnresolvedSymbol* _tmp249_;
-					ValaUnresolvedSymbol* _tmp250_;
-					const gchar* _tmp251_;
-					const gchar* _tmp252_;
-					_tmp248_ = unresolved_type;
-					_tmp249_ = vala_unresolved_type_get_unresolved_symbol (_tmp248_);
-					_tmp250_ = _tmp249_;
-					_tmp251_ = vala_symbol_get_name ((ValaSymbol*) _tmp250_);
-					_tmp252_ = _tmp251_;
-					_tmp246_ = g_strcmp0 (_tmp252_, "AsyncReadyCallback") == 0;
+				gboolean _tmp276_ = FALSE;
+				ValaUnresolvedType* _tmp277_;
+				gboolean _tmp283_;
+				_tmp272_ = param;
+				_tmp273_ = vala_variable_get_variable_type ((ValaVariable*) _tmp272_);
+				_tmp274_ = _tmp273_;
+				_tmp275_ = _vala_code_node_ref0 (VALA_IS_UNRESOLVED_TYPE (_tmp274_) ? ((ValaUnresolvedType*) _tmp274_) : NULL);
+				unresolved_type = _tmp275_;
+				_tmp277_ = unresolved_type;
+				if (_tmp277_ != NULL) {
+					ValaUnresolvedType* _tmp278_;
+					ValaUnresolvedSymbol* _tmp279_;
+					ValaUnresolvedSymbol* _tmp280_;
+					const gchar* _tmp281_;
+					const gchar* _tmp282_;
+					_tmp278_ = unresolved_type;
+					_tmp279_ = vala_unresolved_type_get_unresolved_symbol (_tmp278_);
+					_tmp280_ = _tmp279_;
+					_tmp281_ = vala_symbol_get_name ((ValaSymbol*) _tmp280_);
+					_tmp282_ = _tmp281_;
+					_tmp276_ = g_strcmp0 (_tmp282_, "AsyncReadyCallback") == 0;
 				} else {
-					_tmp246_ = FALSE;
+					_tmp276_ = FALSE;
 				}
-				_tmp253_ = _tmp246_;
-				if (_tmp253_) {
-					ValaSymbol* _tmp254_;
-					ValaGirParserParameterInfo* _tmp255_;
-					_tmp254_ = s;
-					vala_method_set_coroutine (VALA_METHOD (_tmp254_), TRUE);
-					_tmp255_ = info;
-					_tmp255_->keep = FALSE;
+				_tmp283_ = _tmp276_;
+				if (_tmp283_) {
+					ValaSymbol* _tmp284_;
+					ValaGirParserParameterInfo* _tmp285_;
+					_tmp284_ = s;
+					vala_method_set_coroutine (VALA_METHOD (_tmp284_), TRUE);
+					_tmp285_ = info;
+					_tmp285_->keep = FALSE;
 				}
 				_vala_code_node_unref0 (unresolved_type);
 			}
-			_tmp256_ = parameters;
-			_tmp257_ = info;
-			vala_collection_add ((ValaCollection*) _tmp256_, _tmp257_);
+			_tmp286_ = parameters;
+			_tmp287_ = info;
+			vala_collection_add ((ValaCollection*) _tmp286_, _tmp287_);
 			vala_gir_parser_pop_metadata (self);
 			_vala_gir_parser_parameter_info_unref0 (info);
 			_vala_code_node_unref0 (param);
+			_vala_comment_unref0 (param_comment);
 			_g_free0 (default_param_name);
 			_g_free0 (scope);
 		}
 		vala_gir_parser_end_element (self, "parameters");
 	}
-	_tmp258_ = self->priv->current;
-	_tmp259_ = parameters;
-	_tmp260_ = _vala_iterable_ref0 ((ValaList*) _tmp259_);
-	_vala_iterable_unref0 (_tmp258_->parameters);
-	_tmp258_->parameters = _tmp260_;
+	_tmp288_ = self->priv->current;
+	_tmp289_ = parameters;
+	_tmp290_ = _vala_iterable_ref0 ((ValaList*) _tmp289_);
+	_vala_iterable_unref0 (_tmp288_->parameters);
+	_tmp288_->parameters = _tmp290_;
 	vala_gir_parser_pop_node (self);
-	_tmp261_ = element_name;
-	vala_gir_parser_end_element (self, _tmp261_);
+	_tmp291_ = element_name;
+	vala_gir_parser_end_element (self, _tmp291_);
 	_vala_iterable_unref0 (parameters);
 	_vala_code_node_unref0 (s);
 	_g_free0 (return_ctype);
 	_vala_code_node_unref0 (return_type);
+	_vala_comment_unref0 (comment);
 	_g_free0 (invoker);
 	_g_free0 (throws_string);
 	_g_free0 (name);
@@ -10000,7 +10291,10 @@ static void vala_gir_parser_parse_boxed (ValaGirParser* self, const gchar* eleme
 	gboolean _tmp10_;
 	ValaClass* _tmp32_;
 	ValaClass* _tmp33_;
-	const gchar* _tmp58_;
+	ValaClass* _tmp34_;
+	ValaGirComment* _tmp35_ = NULL;
+	ValaGirComment* _tmp36_;
+	const gchar* _tmp61_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (element_name != NULL);
 	_tmp0_ = element_name;
@@ -10090,80 +10384,85 @@ static void vala_gir_parser_parse_boxed (ValaGirParser* self, const gchar* eleme
 	_tmp33_ = cl;
 	vala_symbol_set_external ((ValaSymbol*) _tmp33_, TRUE);
 	vala_gir_parser_next (self);
+	_tmp34_ = cl;
+	_tmp35_ = vala_gir_parser_parse_symbol_doc (self);
+	_tmp36_ = _tmp35_;
+	vala_symbol_set_comment ((ValaSymbol*) _tmp34_, (ValaComment*) _tmp36_);
+	_vala_comment_unref0 (_tmp36_);
 	while (TRUE) {
-		ValaMarkupTokenType _tmp34_;
-		gboolean _tmp35_ = FALSE;
-		ValaMarkupReader* _tmp36_;
-		const gchar* _tmp37_;
-		const gchar* _tmp38_;
-		_tmp34_ = self->priv->current_token;
-		if (!(_tmp34_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) {
+		ValaMarkupTokenType _tmp37_;
+		gboolean _tmp38_ = FALSE;
+		ValaMarkupReader* _tmp39_;
+		const gchar* _tmp40_;
+		const gchar* _tmp41_;
+		_tmp37_ = self->priv->current_token;
+		if (!(_tmp37_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) {
 			break;
 		}
-		_tmp35_ = vala_gir_parser_push_metadata (self);
-		if (!_tmp35_) {
+		_tmp38_ = vala_gir_parser_push_metadata (self);
+		if (!_tmp38_) {
 			vala_gir_parser_skip_element (self);
 			continue;
 		}
-		_tmp36_ = self->priv->reader;
-		_tmp37_ = vala_markup_reader_get_name (_tmp36_);
-		_tmp38_ = _tmp37_;
-		if (g_strcmp0 (_tmp38_, "field") == 0) {
+		_tmp39_ = self->priv->reader;
+		_tmp40_ = vala_markup_reader_get_name (_tmp39_);
+		_tmp41_ = _tmp40_;
+		if (g_strcmp0 (_tmp41_, "field") == 0) {
 			vala_gir_parser_parse_field (self);
 		} else {
-			ValaMarkupReader* _tmp39_;
-			const gchar* _tmp40_;
-			const gchar* _tmp41_;
-			_tmp39_ = self->priv->reader;
-			_tmp40_ = vala_markup_reader_get_name (_tmp39_);
-			_tmp41_ = _tmp40_;
-			if (g_strcmp0 (_tmp41_, "constructor") == 0) {
+			ValaMarkupReader* _tmp42_;
+			const gchar* _tmp43_;
+			const gchar* _tmp44_;
+			_tmp42_ = self->priv->reader;
+			_tmp43_ = vala_markup_reader_get_name (_tmp42_);
+			_tmp44_ = _tmp43_;
+			if (g_strcmp0 (_tmp44_, "constructor") == 0) {
 				vala_gir_parser_parse_constructor (self);
 			} else {
-				ValaMarkupReader* _tmp42_;
-				const gchar* _tmp43_;
-				const gchar* _tmp44_;
-				_tmp42_ = self->priv->reader;
-				_tmp43_ = vala_markup_reader_get_name (_tmp42_);
-				_tmp44_ = _tmp43_;
-				if (g_strcmp0 (_tmp44_, "method") == 0) {
+				ValaMarkupReader* _tmp45_;
+				const gchar* _tmp46_;
+				const gchar* _tmp47_;
+				_tmp45_ = self->priv->reader;
+				_tmp46_ = vala_markup_reader_get_name (_tmp45_);
+				_tmp47_ = _tmp46_;
+				if (g_strcmp0 (_tmp47_, "method") == 0) {
 					vala_gir_parser_parse_method (self, "method");
 				} else {
-					ValaMarkupReader* _tmp45_;
-					const gchar* _tmp46_;
-					const gchar* _tmp47_;
-					_tmp45_ = self->priv->reader;
-					_tmp46_ = vala_markup_reader_get_name (_tmp45_);
-					_tmp47_ = _tmp46_;
-					if (g_strcmp0 (_tmp47_, "function") == 0) {
+					ValaMarkupReader* _tmp48_;
+					const gchar* _tmp49_;
+					const gchar* _tmp50_;
+					_tmp48_ = self->priv->reader;
+					_tmp49_ = vala_markup_reader_get_name (_tmp48_);
+					_tmp50_ = _tmp49_;
+					if (g_strcmp0 (_tmp50_, "function") == 0) {
 						vala_gir_parser_skip_element (self);
 					} else {
-						ValaMarkupReader* _tmp48_;
-						const gchar* _tmp49_;
-						const gchar* _tmp50_;
-						_tmp48_ = self->priv->reader;
-						_tmp49_ = vala_markup_reader_get_name (_tmp48_);
-						_tmp50_ = _tmp49_;
-						if (g_strcmp0 (_tmp50_, "union") == 0) {
+						ValaMarkupReader* _tmp51_;
+						const gchar* _tmp52_;
+						const gchar* _tmp53_;
+						_tmp51_ = self->priv->reader;
+						_tmp52_ = vala_markup_reader_get_name (_tmp51_);
+						_tmp53_ = _tmp52_;
+						if (g_strcmp0 (_tmp53_, "union") == 0) {
 							vala_gir_parser_parse_union (self);
 						} else {
-							ValaSourceReference* _tmp51_ = NULL;
-							ValaSourceReference* _tmp52_;
-							ValaMarkupReader* _tmp53_;
-							const gchar* _tmp54_;
-							const gchar* _tmp55_;
-							gchar* _tmp56_ = NULL;
-							gchar* _tmp57_;
-							_tmp51_ = vala_gir_parser_get_current_src (self);
-							_tmp52_ = _tmp51_;
-							_tmp53_ = self->priv->reader;
-							_tmp54_ = vala_markup_reader_get_name (_tmp53_);
+							ValaSourceReference* _tmp54_ = NULL;
+							ValaSourceReference* _tmp55_;
+							ValaMarkupReader* _tmp56_;
+							const gchar* _tmp57_;
+							const gchar* _tmp58_;
+							gchar* _tmp59_ = NULL;
+							gchar* _tmp60_;
+							_tmp54_ = vala_gir_parser_get_current_src (self);
 							_tmp55_ = _tmp54_;
-							_tmp56_ = g_strdup_printf ("unknown child element `%s' in `class'", _tmp55_);
-							_tmp57_ = _tmp56_;
-							vala_report_error (_tmp52_, _tmp57_);
-							_g_free0 (_tmp57_);
-							_vala_source_reference_unref0 (_tmp52_);
+							_tmp56_ = self->priv->reader;
+							_tmp57_ = vala_markup_reader_get_name (_tmp56_);
+							_tmp58_ = _tmp57_;
+							_tmp59_ = g_strdup_printf ("unknown child element `%s' in `class'", _tmp58_);
+							_tmp60_ = _tmp59_;
+							vala_report_error (_tmp55_, _tmp60_);
+							_g_free0 (_tmp60_);
+							_vala_source_reference_unref0 (_tmp55_);
 							vala_gir_parser_skip_element (self);
 						}
 					}
@@ -10173,8 +10472,8 @@ static void vala_gir_parser_parse_boxed (ValaGirParser* self, const gchar* eleme
 		vala_gir_parser_pop_metadata (self);
 	}
 	vala_gir_parser_pop_node (self);
-	_tmp58_ = element_name;
-	vala_gir_parser_end_element (self, _tmp58_);
+	_tmp61_ = element_name;
+	vala_gir_parser_end_element (self, _tmp61_);
 	_vala_code_node_unref0 (cl);
 	_g_free0 (name);
 }
@@ -10188,6 +10487,9 @@ static void vala_gir_parser_parse_union (ValaGirParser* self) {
 	gboolean _tmp3_;
 	ValaStruct* _tmp16_;
 	ValaStruct* _tmp17_;
+	ValaStruct* _tmp18_;
+	ValaGirComment* _tmp19_ = NULL;
+	ValaGirComment* _tmp20_;
 	g_return_if_fail (self != NULL);
 	vala_gir_parser_start_element (self, "union");
 	_tmp0_ = vala_gir_parser_element_get_name (self, NULL);
@@ -10235,80 +10537,85 @@ static void vala_gir_parser_parse_union (ValaGirParser* self) {
 	_tmp17_ = st;
 	vala_symbol_set_external ((ValaSymbol*) _tmp17_, TRUE);
 	vala_gir_parser_next (self);
+	_tmp18_ = st;
+	_tmp19_ = vala_gir_parser_parse_symbol_doc (self);
+	_tmp20_ = _tmp19_;
+	vala_symbol_set_comment ((ValaSymbol*) _tmp18_, (ValaComment*) _tmp20_);
+	_vala_comment_unref0 (_tmp20_);
 	while (TRUE) {
-		ValaMarkupTokenType _tmp18_;
-		gboolean _tmp19_ = FALSE;
-		ValaMarkupReader* _tmp20_;
-		const gchar* _tmp21_;
-		const gchar* _tmp22_;
-		_tmp18_ = self->priv->current_token;
-		if (!(_tmp18_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) {
+		ValaMarkupTokenType _tmp21_;
+		gboolean _tmp22_ = FALSE;
+		ValaMarkupReader* _tmp23_;
+		const gchar* _tmp24_;
+		const gchar* _tmp25_;
+		_tmp21_ = self->priv->current_token;
+		if (!(_tmp21_ == VALA_MARKUP_TOKEN_TYPE_START_ELEMENT)) {
 			break;
 		}
-		_tmp19_ = vala_gir_parser_push_metadata (self);
-		if (!_tmp19_) {
+		_tmp22_ = vala_gir_parser_push_metadata (self);
+		if (!_tmp22_) {
 			vala_gir_parser_skip_element (self);
 			continue;
 		}
-		_tmp20_ = self->priv->reader;
-		_tmp21_ = vala_markup_reader_get_name (_tmp20_);
-		_tmp22_ = _tmp21_;
-		if (g_strcmp0 (_tmp22_, "field") == 0) {
+		_tmp23_ = self->priv->reader;
+		_tmp24_ = vala_markup_reader_get_name (_tmp23_);
+		_tmp25_ = _tmp24_;
+		if (g_strcmp0 (_tmp25_, "field") == 0) {
 			vala_gir_parser_parse_field (self);
 		} else {
-			ValaMarkupReader* _tmp23_;
-			const gchar* _tmp24_;
-			const gchar* _tmp25_;
-			_tmp23_ = self->priv->reader;
-			_tmp24_ = vala_markup_reader_get_name (_tmp23_);
-			_tmp25_ = _tmp24_;
-			if (g_strcmp0 (_tmp25_, "constructor") == 0) {
+			ValaMarkupReader* _tmp26_;
+			const gchar* _tmp27_;
+			const gchar* _tmp28_;
+			_tmp26_ = self->priv->reader;
+			_tmp27_ = vala_markup_reader_get_name (_tmp26_);
+			_tmp28_ = _tmp27_;
+			if (g_strcmp0 (_tmp28_, "constructor") == 0) {
 				vala_gir_parser_parse_constructor (self);
 			} else {
-				ValaMarkupReader* _tmp26_;
-				const gchar* _tmp27_;
-				const gchar* _tmp28_;
-				_tmp26_ = self->priv->reader;
-				_tmp27_ = vala_markup_reader_get_name (_tmp26_);
-				_tmp28_ = _tmp27_;
-				if (g_strcmp0 (_tmp28_, "method") == 0) {
+				ValaMarkupReader* _tmp29_;
+				const gchar* _tmp30_;
+				const gchar* _tmp31_;
+				_tmp29_ = self->priv->reader;
+				_tmp30_ = vala_markup_reader_get_name (_tmp29_);
+				_tmp31_ = _tmp30_;
+				if (g_strcmp0 (_tmp31_, "method") == 0) {
 					vala_gir_parser_parse_method (self, "method");
 				} else {
-					ValaMarkupReader* _tmp29_;
-					const gchar* _tmp30_;
-					const gchar* _tmp31_;
-					_tmp29_ = self->priv->reader;
-					_tmp30_ = vala_markup_reader_get_name (_tmp29_);
-					_tmp31_ = _tmp30_;
-					if (g_strcmp0 (_tmp31_, "function") == 0) {
+					ValaMarkupReader* _tmp32_;
+					const gchar* _tmp33_;
+					const gchar* _tmp34_;
+					_tmp32_ = self->priv->reader;
+					_tmp33_ = vala_markup_reader_get_name (_tmp32_);
+					_tmp34_ = _tmp33_;
+					if (g_strcmp0 (_tmp34_, "function") == 0) {
 						vala_gir_parser_skip_element (self);
 					} else {
-						ValaMarkupReader* _tmp32_;
-						const gchar* _tmp33_;
-						const gchar* _tmp34_;
-						_tmp32_ = self->priv->reader;
-						_tmp33_ = vala_markup_reader_get_name (_tmp32_);
-						_tmp34_ = _tmp33_;
-						if (g_strcmp0 (_tmp34_, "record") == 0) {
+						ValaMarkupReader* _tmp35_;
+						const gchar* _tmp36_;
+						const gchar* _tmp37_;
+						_tmp35_ = self->priv->reader;
+						_tmp36_ = vala_markup_reader_get_name (_tmp35_);
+						_tmp37_ = _tmp36_;
+						if (g_strcmp0 (_tmp37_, "record") == 0) {
 							vala_gir_parser_parse_record (self);
 						} else {
-							ValaSourceReference* _tmp35_ = NULL;
-							ValaSourceReference* _tmp36_;
-							ValaMarkupReader* _tmp37_;
-							const gchar* _tmp38_;
-							const gchar* _tmp39_;
-							gchar* _tmp40_ = NULL;
-							gchar* _tmp41_;
-							_tmp35_ = vala_gir_parser_get_current_src (self);
-							_tmp36_ = _tmp35_;
-							_tmp37_ = self->priv->reader;
-							_tmp38_ = vala_markup_reader_get_name (_tmp37_);
+							ValaSourceReference* _tmp38_ = NULL;
+							ValaSourceReference* _tmp39_;
+							ValaMarkupReader* _tmp40_;
+							const gchar* _tmp41_;
+							const gchar* _tmp42_;
+							gchar* _tmp43_ = NULL;
+							gchar* _tmp44_;
+							_tmp38_ = vala_gir_parser_get_current_src (self);
 							_tmp39_ = _tmp38_;
-							_tmp40_ = g_strdup_printf ("unknown child element `%s' in `union'", _tmp39_);
-							_tmp41_ = _tmp40_;
-							vala_report_error (_tmp36_, _tmp41_);
-							_g_free0 (_tmp41_);
-							_vala_source_reference_unref0 (_tmp36_);
+							_tmp40_ = self->priv->reader;
+							_tmp41_ = vala_markup_reader_get_name (_tmp40_);
+							_tmp42_ = _tmp41_;
+							_tmp43_ = g_strdup_printf ("unknown child element `%s' in `union'", _tmp42_);
+							_tmp44_ = _tmp43_;
+							vala_report_error (_tmp39_, _tmp44_);
+							_g_free0 (_tmp44_);
+							_vala_source_reference_unref0 (_tmp39_);
 							vala_gir_parser_skip_element (self);
 						}
 					}
@@ -10326,16 +10633,18 @@ static void vala_gir_parser_parse_union (ValaGirParser* self) {
 static void vala_gir_parser_parse_constant (ValaGirParser* self) {
 	gchar* _tmp0_ = NULL;
 	gchar* _tmp1_;
-	ValaDataType* _tmp2_ = NULL;
+	ValaGirComment* _tmp2_ = NULL;
+	ValaGirComment* comment;
+	ValaDataType* _tmp3_ = NULL;
 	ValaDataType* type;
-	ValaGirParserNode* _tmp3_;
-	const gchar* _tmp4_;
-	ValaGirParserNode* _tmp5_;
-	ValaSourceReference* _tmp6_;
-	ValaConstant* _tmp7_;
+	ValaGirParserNode* _tmp4_;
+	const gchar* _tmp5_;
+	ValaGirParserNode* _tmp6_;
+	ValaSourceReference* _tmp7_;
+	ValaConstant* _tmp8_;
 	ValaConstant* c;
-	ValaGirParserNode* _tmp8_;
-	ValaSymbol* _tmp9_;
+	ValaGirParserNode* _tmp9_;
+	ValaSymbol* _tmp10_;
 	g_return_if_fail (self != NULL);
 	vala_gir_parser_start_element (self, "constant");
 	_tmp0_ = vala_gir_parser_element_get_name (self, NULL);
@@ -10343,24 +10652,28 @@ static void vala_gir_parser_parse_constant (ValaGirParser* self) {
 	vala_gir_parser_push_node (self, _tmp1_, FALSE);
 	_g_free0 (_tmp1_);
 	vala_gir_parser_next (self);
-	_tmp2_ = vala_gir_parser_parse_type (self, NULL, NULL, TRUE, NULL, NULL);
-	type = _tmp2_;
-	_tmp3_ = self->priv->current;
-	_tmp4_ = _tmp3_->name;
-	_tmp5_ = self->priv->current;
-	_tmp6_ = _tmp5_->source_reference;
-	_tmp7_ = vala_constant_new (_tmp4_, type, NULL, _tmp6_, NULL);
-	c = _tmp7_;
-	_tmp8_ = self->priv->current;
-	_tmp9_ = _vala_code_node_ref0 ((ValaSymbol*) c);
-	_vala_code_node_unref0 (_tmp8_->symbol);
-	_tmp8_->symbol = _tmp9_;
+	_tmp2_ = vala_gir_parser_parse_symbol_doc (self);
+	comment = _tmp2_;
+	_tmp3_ = vala_gir_parser_parse_type (self, NULL, NULL, TRUE, NULL, NULL);
+	type = _tmp3_;
+	_tmp4_ = self->priv->current;
+	_tmp5_ = _tmp4_->name;
+	_tmp6_ = self->priv->current;
+	_tmp7_ = _tmp6_->source_reference;
+	_tmp8_ = vala_constant_new (_tmp5_, type, NULL, _tmp7_, NULL);
+	c = _tmp8_;
+	_tmp9_ = self->priv->current;
+	_tmp10_ = _vala_code_node_ref0 ((ValaSymbol*) c);
+	_vala_code_node_unref0 (_tmp9_->symbol);
+	_tmp9_->symbol = _tmp10_;
 	vala_symbol_set_access ((ValaSymbol*) c, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
+	vala_symbol_set_comment ((ValaSymbol*) c, (ValaComment*) comment);
 	vala_symbol_set_external ((ValaSymbol*) c, TRUE);
 	vala_gir_parser_pop_node (self);
 	vala_gir_parser_end_element (self, "constant");
 	_vala_code_node_unref0 (c);
 	_vala_code_node_unref0 (type);
+	_vala_comment_unref0 (comment);
 }
 
 
@@ -11176,11 +11489,14 @@ static void vala_gir_parser_process_alias (ValaGirParser* self, ValaGirParserNod
 		ValaStruct* _tmp43_;
 		ValaDataType* _tmp44_;
 		ValaStruct* _tmp47_;
-		ValaStruct* _tmp48_;
-		gboolean _tmp49_;
-		ValaGirParserNode* _tmp50_;
+		ValaGirParserNode* _tmp48_;
+		ValaGirComment* _tmp49_;
+		ValaStruct* _tmp50_;
 		ValaStruct* _tmp51_;
-		ValaSymbol* _tmp52_;
+		gboolean _tmp52_;
+		ValaGirParserNode* _tmp53_;
+		ValaStruct* _tmp54_;
+		ValaSymbol* _tmp55_;
 		_tmp38_ = alias;
 		_tmp39_ = _tmp38_->name;
 		_tmp40_ = alias;
@@ -11198,55 +11514,66 @@ static void vala_gir_parser_process_alias (ValaGirParser* self, ValaGirParserNod
 			vala_struct_set_base_type (_tmp45_, _tmp46_);
 		}
 		_tmp47_ = st;
-		vala_symbol_set_external ((ValaSymbol*) _tmp47_, TRUE);
-		_tmp48_ = st;
-		_tmp49_ = simple_type;
-		vala_struct_set_simple_type (_tmp48_, _tmp49_);
-		_tmp50_ = alias;
+		_tmp48_ = alias;
+		_tmp49_ = _tmp48_->comment;
+		vala_symbol_set_comment ((ValaSymbol*) _tmp47_, (ValaComment*) _tmp49_);
+		_tmp50_ = st;
+		vala_symbol_set_external ((ValaSymbol*) _tmp50_, TRUE);
 		_tmp51_ = st;
-		_tmp52_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp51_);
-		_vala_code_node_unref0 (_tmp50_->symbol);
-		_tmp50_->symbol = _tmp52_;
+		_tmp52_ = simple_type;
+		vala_struct_set_simple_type (_tmp51_, _tmp52_);
+		_tmp53_ = alias;
+		_tmp54_ = st;
+		_tmp55_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp54_);
+		_vala_code_node_unref0 (_tmp53_->symbol);
+		_tmp53_->symbol = _tmp55_;
 		_vala_code_node_unref0 (st);
 	} else {
-		ValaSymbol* _tmp53_;
-		_tmp53_ = type_sym;
-		if (VALA_IS_CLASS (_tmp53_)) {
-			ValaGirParserNode* _tmp54_;
-			const gchar* _tmp55_;
-			ValaGirParserNode* _tmp56_;
-			ValaSourceReference* _tmp57_;
-			ValaClass* _tmp58_;
+		ValaSymbol* _tmp56_;
+		_tmp56_ = type_sym;
+		if (VALA_IS_CLASS (_tmp56_)) {
+			ValaGirParserNode* _tmp57_;
+			const gchar* _tmp58_;
+			ValaGirParserNode* _tmp59_;
+			ValaSourceReference* _tmp60_;
+			ValaClass* _tmp61_;
 			ValaClass* cl;
-			ValaClass* _tmp59_;
-			ValaDataType* _tmp60_;
-			ValaClass* _tmp63_;
-			ValaGirParserNode* _tmp64_;
-			ValaClass* _tmp65_;
-			ValaSymbol* _tmp66_;
-			_tmp54_ = alias;
-			_tmp55_ = _tmp54_->name;
-			_tmp56_ = alias;
-			_tmp57_ = _tmp56_->source_reference;
-			_tmp58_ = vala_class_new (_tmp55_, _tmp57_, NULL);
-			cl = _tmp58_;
-			_tmp59_ = cl;
-			vala_symbol_set_access ((ValaSymbol*) _tmp59_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
-			_tmp60_ = base_type;
-			if (_tmp60_ != NULL) {
-				ValaClass* _tmp61_;
-				ValaDataType* _tmp62_;
-				_tmp61_ = cl;
-				_tmp62_ = base_type;
-				vala_class_add_base_type (_tmp61_, _tmp62_);
+			ValaClass* _tmp62_;
+			ValaDataType* _tmp63_;
+			ValaClass* _tmp66_;
+			ValaGirParserNode* _tmp67_;
+			ValaGirComment* _tmp68_;
+			ValaClass* _tmp69_;
+			ValaGirParserNode* _tmp70_;
+			ValaClass* _tmp71_;
+			ValaSymbol* _tmp72_;
+			_tmp57_ = alias;
+			_tmp58_ = _tmp57_->name;
+			_tmp59_ = alias;
+			_tmp60_ = _tmp59_->source_reference;
+			_tmp61_ = vala_class_new (_tmp58_, _tmp60_, NULL);
+			cl = _tmp61_;
+			_tmp62_ = cl;
+			vala_symbol_set_access ((ValaSymbol*) _tmp62_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
+			_tmp63_ = base_type;
+			if (_tmp63_ != NULL) {
+				ValaClass* _tmp64_;
+				ValaDataType* _tmp65_;
+				_tmp64_ = cl;
+				_tmp65_ = base_type;
+				vala_class_add_base_type (_tmp64_, _tmp65_);
 			}
-			_tmp63_ = cl;
-			vala_symbol_set_external ((ValaSymbol*) _tmp63_, TRUE);
-			_tmp64_ = alias;
-			_tmp65_ = cl;
-			_tmp66_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp65_);
-			_vala_code_node_unref0 (_tmp64_->symbol);
-			_tmp64_->symbol = _tmp66_;
+			_tmp66_ = cl;
+			_tmp67_ = alias;
+			_tmp68_ = _tmp67_->comment;
+			vala_symbol_set_comment ((ValaSymbol*) _tmp66_, (ValaComment*) _tmp68_);
+			_tmp69_ = cl;
+			vala_symbol_set_external ((ValaSymbol*) _tmp69_, TRUE);
+			_tmp70_ = alias;
+			_tmp71_ = cl;
+			_tmp72_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp71_);
+			_vala_code_node_unref0 (_tmp70_->symbol);
+			_tmp70_->symbol = _tmp72_;
 			_vala_code_node_unref0 (cl);
 		}
 	}
@@ -12337,6 +12664,90 @@ static void vala_gir_parser_find_parent (ValaGirParser* self, const gchar* cname
 }
 
 
+static gboolean string_contains (const gchar* self, const gchar* needle) {
+	gboolean result = FALSE;
+	const gchar* _tmp0_;
+	gchar* _tmp1_ = NULL;
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (needle != NULL, FALSE);
+	_tmp0_ = needle;
+	_tmp1_ = strstr ((gchar*) self, (gchar*) _tmp0_);
+	result = _tmp1_ != NULL;
+	return result;
+}
+
+
+static gboolean vala_gir_parser_same_gir (ValaGirParser* self, ValaSymbol* gir_component, ValaSymbol* sym) {
+	gboolean result = FALSE;
+	ValaSymbol* _tmp0_;
+	ValaSourceReference* _tmp1_;
+	ValaSourceReference* _tmp2_;
+	ValaSourceFile* _tmp3_;
+	ValaSourceFile* _tmp4_;
+	const gchar* _tmp5_;
+	const gchar* _tmp6_;
+	gchar* _tmp7_;
+	gchar* gir_name;
+	ValaSymbol* _tmp8_;
+	ValaSourceReference* _tmp9_;
+	ValaSourceReference* _tmp10_;
+	ValaSourceFile* _tmp11_;
+	ValaSourceFile* _tmp12_;
+	const gchar* _tmp13_;
+	const gchar* _tmp14_;
+	gchar* _tmp15_;
+	gchar* gir_version;
+	ValaSymbol* _tmp16_;
+	ValaSourceReference* _tmp17_;
+	ValaSourceReference* _tmp18_;
+	ValaSourceFile* _tmp19_;
+	ValaSourceFile* _tmp20_;
+	const gchar* _tmp21_;
+	const gchar* _tmp22_;
+	gchar* _tmp23_ = NULL;
+	gchar* _tmp24_;
+	gboolean _tmp25_ = FALSE;
+	gboolean _tmp26_;
+	g_return_val_if_fail (self != NULL, FALSE);
+	g_return_val_if_fail (gir_component != NULL, FALSE);
+	g_return_val_if_fail (sym != NULL, FALSE);
+	_tmp0_ = gir_component;
+	_tmp1_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp0_);
+	_tmp2_ = _tmp1_;
+	_tmp3_ = vala_source_reference_get_file (_tmp2_);
+	_tmp4_ = _tmp3_;
+	_tmp5_ = vala_source_file_get_gir_namespace (_tmp4_);
+	_tmp6_ = _tmp5_;
+	_tmp7_ = g_strdup (_tmp6_);
+	gir_name = _tmp7_;
+	_tmp8_ = gir_component;
+	_tmp9_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp8_);
+	_tmp10_ = _tmp9_;
+	_tmp11_ = vala_source_reference_get_file (_tmp10_);
+	_tmp12_ = _tmp11_;
+	_tmp13_ = vala_source_file_get_gir_version (_tmp12_);
+	_tmp14_ = _tmp13_;
+	_tmp15_ = g_strdup (_tmp14_);
+	gir_version = _tmp15_;
+	_tmp16_ = sym;
+	_tmp17_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp16_);
+	_tmp18_ = _tmp17_;
+	_tmp19_ = vala_source_reference_get_file (_tmp18_);
+	_tmp20_ = _tmp19_;
+	_tmp21_ = vala_source_file_get_filename (_tmp20_);
+	_tmp22_ = _tmp21_;
+	_tmp23_ = g_strdup_printf ("%s-%s", gir_name, gir_version);
+	_tmp24_ = _tmp23_;
+	_tmp25_ = string_contains (_tmp22_, _tmp24_);
+	_tmp26_ = _tmp25_;
+	_g_free0 (_tmp24_);
+	result = _tmp26_;
+	_g_free0 (gir_version);
+	_g_free0 (gir_name);
+	return result;
+}
+
+
 static void vala_gir_parser_process_namespace_method (ValaGirParser* self, ValaGirParserNode* ns, ValaGirParserNode* node) {
 	ValaGirParserNode* _tmp0_;
 	gchar* _tmp1_ = NULL;
@@ -12359,30 +12770,31 @@ static void vala_gir_parser_process_namespace_method (ValaGirParser* self, ValaG
 	ValaParameter* _tmp18_;
 	gboolean _tmp22_;
 	gint match;
-	ValaGirParserNode* _tmp81_;
-	ValaGirParserNode* _tmp82_;
-	ValaGirParserNode* parent;
-	const gchar* _tmp83_;
-	ValaGirParserNode* _tmp84_;
-	ValaMethod* _tmp85_;
-	const gchar* _tmp86_;
-	const gchar* _tmp87_;
+	ValaGirParserNode* _tmp87_;
 	ValaGirParserNode* _tmp88_;
-	gchar* _tmp89_ = NULL;
-	gchar* _tmp90_;
-	gint _tmp91_;
-	gint _tmp92_;
+	ValaGirParserNode* parent;
+	const gchar* _tmp89_;
+	ValaGirParserNode* _tmp90_;
+	ValaMethod* _tmp91_;
+	const gchar* _tmp92_;
 	const gchar* _tmp93_;
-	gint _tmp94_;
-	gint _tmp95_;
-	gchar* _tmp96_ = NULL;
-	gchar* _tmp97_;
-	gchar* new_name;
-	ValaGirParserNode* _tmp98_;
+	ValaGirParserNode* _tmp94_;
+	gchar* _tmp95_ = NULL;
+	gchar* _tmp96_;
+	gint _tmp97_;
+	gint _tmp98_;
 	const gchar* _tmp99_;
-	ValaGirParserNode* _tmp100_ = NULL;
-	ValaGirParserNode* _tmp101_;
-	gboolean _tmp102_;
+	gint _tmp100_;
+	gint _tmp101_;
+	gchar* _tmp102_ = NULL;
+	gchar* _tmp103_;
+	gchar* new_name;
+	gboolean _tmp104_ = FALSE;
+	ValaMethod* _tmp105_;
+	ValaGirParserNode* _tmp106_;
+	ValaSymbol* _tmp107_;
+	gboolean _tmp108_ = FALSE;
+	gboolean _tmp113_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (ns != NULL);
 	g_return_if_fail (node != NULL);
@@ -12445,10 +12857,12 @@ static void vala_gir_parser_process_namespace_method (ValaGirParser* self, ValaG
 		gboolean _tmp32_ = FALSE;
 		gboolean _tmp33_ = FALSE;
 		gboolean _tmp34_ = FALSE;
-		ValaGirParserNode* _tmp35_;
-		gboolean _tmp39_;
-		gboolean _tmp43_;
+		gboolean _tmp35_ = FALSE;
+		ValaGirParserNode* _tmp36_;
+		gboolean _tmp41_;
+		gboolean _tmp45_;
 		gboolean _tmp49_;
+		gboolean _tmp55_;
 		_tmp23_ = first_param;
 		_tmp24_ = vala_variable_get_variable_type ((ValaVariable*) _tmp23_);
 		_tmp25_ = _tmp24_;
@@ -12460,124 +12874,138 @@ static void vala_gir_parser_process_namespace_method (ValaGirParser* self, ValaG
 		_tmp30_ = sym;
 		_tmp31_ = vala_gir_parser_resolve_node (self, _tmp29_, _tmp30_, FALSE);
 		parent = _tmp31_;
-		_tmp35_ = parent;
-		if (_tmp35_ != NULL) {
-			ValaGirParserNode* _tmp36_;
-			ValaGirParserNode* _tmp37_;
+		_tmp36_ = parent;
+		if (_tmp36_ != NULL) {
+			ValaMethod* _tmp37_;
 			ValaGirParserNode* _tmp38_;
-			_tmp36_ = parent;
-			_tmp37_ = _tmp36_->parent;
-			_tmp38_ = ns;
-			_tmp34_ = _tmp37_ == _tmp38_;
+			ValaSymbol* _tmp39_;
+			gboolean _tmp40_ = FALSE;
+			_tmp37_ = method;
+			_tmp38_ = parent;
+			_tmp39_ = _tmp38_->symbol;
+			_tmp40_ = vala_gir_parser_same_gir (self, (ValaSymbol*) _tmp37_, _tmp39_);
+			_tmp35_ = _tmp40_;
+		} else {
+			_tmp35_ = FALSE;
+		}
+		_tmp41_ = _tmp35_;
+		if (_tmp41_) {
+			ValaGirParserNode* _tmp42_;
+			ValaGirParserNode* _tmp43_;
+			ValaGirParserNode* _tmp44_;
+			_tmp42_ = parent;
+			_tmp43_ = _tmp42_->parent;
+			_tmp44_ = ns;
+			_tmp34_ = _tmp43_ == _tmp44_;
 		} else {
 			_tmp34_ = FALSE;
 		}
-		_tmp39_ = _tmp34_;
-		if (_tmp39_) {
-			ValaGirParserNode* _tmp40_;
-			ValaSymbol* _tmp41_;
-			gboolean _tmp42_ = FALSE;
-			_tmp40_ = parent;
-			_tmp41_ = _tmp40_->symbol;
-			_tmp42_ = vala_gir_parser_is_container (_tmp41_);
-			_tmp33_ = _tmp42_;
+		_tmp45_ = _tmp34_;
+		if (_tmp45_) {
+			ValaGirParserNode* _tmp46_;
+			ValaSymbol* _tmp47_;
+			gboolean _tmp48_ = FALSE;
+			_tmp46_ = parent;
+			_tmp47_ = _tmp46_->symbol;
+			_tmp48_ = vala_gir_parser_is_container (_tmp47_);
+			_tmp33_ = _tmp48_;
 		} else {
 			_tmp33_ = FALSE;
 		}
-		_tmp43_ = _tmp33_;
-		if (_tmp43_) {
-			const gchar* _tmp44_;
-			ValaGirParserNode* _tmp45_;
-			gchar* _tmp46_ = NULL;
-			gchar* _tmp47_;
-			gboolean _tmp48_ = FALSE;
-			_tmp44_ = cname;
-			_tmp45_ = parent;
-			_tmp46_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp45_);
-			_tmp47_ = _tmp46_;
-			_tmp48_ = g_str_has_prefix (_tmp44_, _tmp47_);
-			_tmp32_ = _tmp48_;
-			_g_free0 (_tmp47_);
+		_tmp49_ = _tmp33_;
+		if (_tmp49_) {
+			const gchar* _tmp50_;
+			ValaGirParserNode* _tmp51_;
+			gchar* _tmp52_ = NULL;
+			gchar* _tmp53_;
+			gboolean _tmp54_ = FALSE;
+			_tmp50_ = cname;
+			_tmp51_ = parent;
+			_tmp52_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp51_);
+			_tmp53_ = _tmp52_;
+			_tmp54_ = g_str_has_prefix (_tmp50_, _tmp53_);
+			_tmp32_ = _tmp54_;
+			_g_free0 (_tmp53_);
 		} else {
 			_tmp32_ = FALSE;
 		}
-		_tmp49_ = _tmp32_;
-		if (_tmp49_) {
-			ValaMethod* _tmp50_;
-			const gchar* _tmp51_;
-			const gchar* _tmp52_;
-			ValaGirParserNode* _tmp53_;
-			gchar* _tmp54_ = NULL;
-			gchar* _tmp55_;
-			gint _tmp56_;
-			gint _tmp57_;
+		_tmp55_ = _tmp32_;
+		if (_tmp55_) {
+			ValaMethod* _tmp56_;
+			const gchar* _tmp57_;
 			const gchar* _tmp58_;
-			gint _tmp59_;
-			gint _tmp60_;
-			gchar* _tmp61_ = NULL;
-			gchar* _tmp62_;
-			gchar* new_name;
-			ValaGirParserNode* _tmp63_;
+			ValaGirParserNode* _tmp59_;
+			gchar* _tmp60_ = NULL;
+			gchar* _tmp61_;
+			gint _tmp62_;
+			gint _tmp63_;
 			const gchar* _tmp64_;
-			ValaGirParserNode* _tmp65_ = NULL;
-			ValaGirParserNode* _tmp66_;
-			gboolean _tmp67_;
-			_tmp50_ = method;
-			_tmp51_ = vala_symbol_get_name ((ValaSymbol*) _tmp50_);
-			_tmp52_ = _tmp51_;
-			_tmp53_ = parent;
-			_tmp54_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp53_);
-			_tmp55_ = _tmp54_;
-			_tmp56_ = strlen (_tmp55_);
-			_tmp57_ = _tmp56_;
-			_tmp58_ = ns_cprefix;
-			_tmp59_ = strlen (_tmp58_);
-			_tmp60_ = _tmp59_;
-			_tmp61_ = string_substring (_tmp52_, (glong) (_tmp57_ - _tmp60_), (glong) (-1));
-			_tmp62_ = _tmp61_;
-			_g_free0 (_tmp55_);
-			new_name = _tmp62_;
-			_tmp63_ = parent;
-			_tmp64_ = new_name;
-			_tmp65_ = vala_gir_parser_node_lookup (_tmp63_, _tmp64_, FALSE, NULL);
+			gint _tmp65_;
+			gint _tmp66_;
+			gchar* _tmp67_ = NULL;
+			gchar* _tmp68_;
+			gchar* new_name;
+			ValaGirParserNode* _tmp69_;
+			const gchar* _tmp70_;
+			ValaGirParserNode* _tmp71_ = NULL;
+			ValaGirParserNode* _tmp72_;
+			gboolean _tmp73_;
+			_tmp56_ = method;
+			_tmp57_ = vala_symbol_get_name ((ValaSymbol*) _tmp56_);
+			_tmp58_ = _tmp57_;
+			_tmp59_ = parent;
+			_tmp60_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp59_);
+			_tmp61_ = _tmp60_;
+			_tmp62_ = strlen (_tmp61_);
+			_tmp63_ = _tmp62_;
+			_tmp64_ = ns_cprefix;
+			_tmp65_ = strlen (_tmp64_);
 			_tmp66_ = _tmp65_;
-			_tmp67_ = _tmp66_ == NULL;
-			_vala_gir_parser_node_unref0 (_tmp66_);
-			if (_tmp67_) {
-				ValaGirParserNode* _tmp68_;
-				ValaGirParserNode* _tmp69_;
-				ValaGirParserNode* _tmp70_;
-				const gchar* _tmp71_;
-				gchar* _tmp72_;
-				ValaMethod* _tmp73_;
-				const gchar* _tmp74_;
-				ValaMethod* _tmp75_;
-				ValaList* _tmp76_ = NULL;
-				ValaList* _tmp77_;
-				ValaMethod* _tmp78_;
-				ValaGirParserNode* _tmp79_;
-				ValaGirParserNode* _tmp80_;
-				_tmp68_ = ns;
-				_tmp69_ = node;
-				vala_gir_parser_node_remove_member (_tmp68_, _tmp69_);
-				_tmp70_ = node;
-				_tmp71_ = new_name;
-				_tmp72_ = g_strdup (_tmp71_);
-				_g_free0 (_tmp70_->name);
-				_tmp70_->name = _tmp72_;
-				_tmp73_ = method;
-				_tmp74_ = new_name;
-				vala_symbol_set_name ((ValaSymbol*) _tmp73_, _tmp74_);
-				_tmp75_ = method;
-				_tmp76_ = vala_method_get_parameters (_tmp75_);
-				_tmp77_ = _tmp76_;
-				vala_list_remove_at (_tmp77_, 0);
-				_vala_iterable_unref0 (_tmp77_);
-				_tmp78_ = method;
-				vala_method_set_binding (_tmp78_, VALA_MEMBER_BINDING_INSTANCE);
-				_tmp79_ = parent;
-				_tmp80_ = node;
-				vala_gir_parser_node_add_member (_tmp79_, _tmp80_);
+			_tmp67_ = string_substring (_tmp58_, (glong) (_tmp63_ - _tmp66_), (glong) (-1));
+			_tmp68_ = _tmp67_;
+			_g_free0 (_tmp61_);
+			new_name = _tmp68_;
+			_tmp69_ = parent;
+			_tmp70_ = new_name;
+			_tmp71_ = vala_gir_parser_node_lookup (_tmp69_, _tmp70_, FALSE, NULL);
+			_tmp72_ = _tmp71_;
+			_tmp73_ = _tmp72_ == NULL;
+			_vala_gir_parser_node_unref0 (_tmp72_);
+			if (_tmp73_) {
+				ValaGirParserNode* _tmp74_;
+				ValaGirParserNode* _tmp75_;
+				ValaGirParserNode* _tmp76_;
+				const gchar* _tmp77_;
+				gchar* _tmp78_;
+				ValaMethod* _tmp79_;
+				const gchar* _tmp80_;
+				ValaMethod* _tmp81_;
+				ValaList* _tmp82_ = NULL;
+				ValaList* _tmp83_;
+				ValaMethod* _tmp84_;
+				ValaGirParserNode* _tmp85_;
+				ValaGirParserNode* _tmp86_;
+				_tmp74_ = ns;
+				_tmp75_ = node;
+				vala_gir_parser_node_remove_member (_tmp74_, _tmp75_);
+				_tmp76_ = node;
+				_tmp77_ = new_name;
+				_tmp78_ = g_strdup (_tmp77_);
+				_g_free0 (_tmp76_->name);
+				_tmp76_->name = _tmp78_;
+				_tmp79_ = method;
+				_tmp80_ = new_name;
+				vala_symbol_set_name ((ValaSymbol*) _tmp79_, _tmp80_);
+				_tmp81_ = method;
+				_tmp82_ = vala_method_get_parameters (_tmp81_);
+				_tmp83_ = _tmp82_;
+				vala_list_remove_at (_tmp83_, 0);
+				_vala_iterable_unref0 (_tmp83_);
+				_tmp84_ = method;
+				vala_method_set_binding (_tmp84_, VALA_MEMBER_BINDING_INSTANCE);
+				_tmp85_ = parent;
+				_tmp86_ = node;
+				vala_gir_parser_node_add_member (_tmp85_, _tmp86_);
 			}
 			_g_free0 (new_name);
 			_vala_gir_parser_node_unref0 (parent);
@@ -12592,57 +13020,70 @@ static void vala_gir_parser_process_namespace_method (ValaGirParser* self, ValaG
 		_vala_code_node_unref0 (sym);
 	}
 	match = 0;
-	_tmp81_ = ns;
-	_tmp82_ = _vala_gir_parser_node_ref0 (_tmp81_);
-	parent = _tmp82_;
-	_tmp83_ = cname;
-	_tmp84_ = ns;
-	vala_gir_parser_find_parent (self, _tmp83_, _tmp84_, &parent, &match);
-	_tmp85_ = method;
-	_tmp86_ = vala_symbol_get_name ((ValaSymbol*) _tmp85_);
-	_tmp87_ = _tmp86_;
-	_tmp88_ = parent;
-	_tmp89_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp88_);
-	_tmp90_ = _tmp89_;
-	_tmp91_ = strlen (_tmp90_);
-	_tmp92_ = _tmp91_;
-	_tmp93_ = ns_cprefix;
-	_tmp94_ = strlen (_tmp93_);
-	_tmp95_ = _tmp94_;
-	_tmp96_ = string_substring (_tmp87_, (glong) (_tmp92_ - _tmp95_), (glong) (-1));
-	_tmp97_ = _tmp96_;
-	_g_free0 (_tmp90_);
-	new_name = _tmp97_;
-	_tmp98_ = parent;
-	_tmp99_ = new_name;
-	_tmp100_ = vala_gir_parser_node_lookup (_tmp98_, _tmp99_, FALSE, NULL);
+	_tmp87_ = ns;
+	_tmp88_ = _vala_gir_parser_node_ref0 (_tmp87_);
+	parent = _tmp88_;
+	_tmp89_ = cname;
+	_tmp90_ = ns;
+	vala_gir_parser_find_parent (self, _tmp89_, _tmp90_, &parent, &match);
+	_tmp91_ = method;
+	_tmp92_ = vala_symbol_get_name ((ValaSymbol*) _tmp91_);
+	_tmp93_ = _tmp92_;
+	_tmp94_ = parent;
+	_tmp95_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp94_);
+	_tmp96_ = _tmp95_;
+	_tmp97_ = strlen (_tmp96_);
+	_tmp98_ = _tmp97_;
+	_tmp99_ = ns_cprefix;
+	_tmp100_ = strlen (_tmp99_);
 	_tmp101_ = _tmp100_;
-	_tmp102_ = _tmp101_ == NULL;
-	_vala_gir_parser_node_unref0 (_tmp101_);
-	if (_tmp102_) {
-		ValaGirParserNode* _tmp103_;
-		ValaGirParserNode* _tmp104_;
-		ValaGirParserNode* _tmp105_;
-		const gchar* _tmp106_;
-		gchar* _tmp107_;
-		ValaMethod* _tmp108_;
-		const gchar* _tmp109_;
-		ValaGirParserNode* _tmp110_;
-		ValaGirParserNode* _tmp111_;
-		_tmp103_ = ns;
-		_tmp104_ = node;
-		vala_gir_parser_node_remove_member (_tmp103_, _tmp104_);
-		_tmp105_ = node;
-		_tmp106_ = new_name;
-		_tmp107_ = g_strdup (_tmp106_);
-		_g_free0 (_tmp105_->name);
-		_tmp105_->name = _tmp107_;
-		_tmp108_ = method;
-		_tmp109_ = new_name;
-		vala_symbol_set_name ((ValaSymbol*) _tmp108_, _tmp109_);
-		_tmp110_ = parent;
-		_tmp111_ = node;
-		vala_gir_parser_node_add_member (_tmp110_, _tmp111_);
+	_tmp102_ = string_substring (_tmp93_, (glong) (_tmp98_ - _tmp101_), (glong) (-1));
+	_tmp103_ = _tmp102_;
+	_g_free0 (_tmp96_);
+	new_name = _tmp103_;
+	_tmp105_ = method;
+	_tmp106_ = parent;
+	_tmp107_ = _tmp106_->symbol;
+	_tmp108_ = vala_gir_parser_same_gir (self, (ValaSymbol*) _tmp105_, _tmp107_);
+	if (_tmp108_) {
+		ValaGirParserNode* _tmp109_;
+		const gchar* _tmp110_;
+		ValaGirParserNode* _tmp111_ = NULL;
+		ValaGirParserNode* _tmp112_;
+		_tmp109_ = parent;
+		_tmp110_ = new_name;
+		_tmp111_ = vala_gir_parser_node_lookup (_tmp109_, _tmp110_, FALSE, NULL);
+		_tmp112_ = _tmp111_;
+		_tmp104_ = _tmp112_ == NULL;
+		_vala_gir_parser_node_unref0 (_tmp112_);
+	} else {
+		_tmp104_ = FALSE;
+	}
+	_tmp113_ = _tmp104_;
+	if (_tmp113_) {
+		ValaGirParserNode* _tmp114_;
+		ValaGirParserNode* _tmp115_;
+		ValaGirParserNode* _tmp116_;
+		const gchar* _tmp117_;
+		gchar* _tmp118_;
+		ValaMethod* _tmp119_;
+		const gchar* _tmp120_;
+		ValaGirParserNode* _tmp121_;
+		ValaGirParserNode* _tmp122_;
+		_tmp114_ = ns;
+		_tmp115_ = node;
+		vala_gir_parser_node_remove_member (_tmp114_, _tmp115_);
+		_tmp116_ = node;
+		_tmp117_ = new_name;
+		_tmp118_ = g_strdup (_tmp117_);
+		_g_free0 (_tmp116_->name);
+		_tmp116_->name = _tmp118_;
+		_tmp119_ = method;
+		_tmp120_ = new_name;
+		vala_symbol_set_name ((ValaSymbol*) _tmp119_, _tmp120_);
+		_tmp121_ = parent;
+		_tmp122_ = node;
+		vala_gir_parser_node_add_member (_tmp121_, _tmp122_);
 	}
 	_g_free0 (new_name);
 	_vala_gir_parser_node_unref0 (parent);
@@ -15338,7 +15779,7 @@ static gboolean vala_gir_parser_metadata_parser_parse_args (ValaGirParserMetadat
 		gchar* id;
 		const gchar* _tmp9_;
 		const gchar* _tmp10_;
-		ValaGirParserArgumentType* _tmp11_ = 0;
+		ValaGirParserArgumentType* _tmp11_ = NULL;
 		ValaGirParserArgumentType* arg_type;
 		ValaGirParserArgumentType* _tmp12_;
 		ValaTokenType _tmp17_;
@@ -16565,11 +17006,11 @@ static void vala_gir_parser_node_process (ValaGirParserNode* self, ValaGirParser
 	ValaSymbol* _tmp2_;
 	gboolean _tmp6_;
 	ValaMap* _tmp65_;
-	gboolean _tmp730_ = FALSE;
-	gboolean _tmp731_ = FALSE;
-	gboolean _tmp732_;
-	gboolean _tmp734_;
+	gboolean _tmp733_ = FALSE;
+	gboolean _tmp734_ = FALSE;
+	gboolean _tmp735_;
 	gboolean _tmp737_;
+	gboolean _tmp740_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (parser != NULL);
 	_tmp0_ = self->processed;
@@ -16783,35 +17224,35 @@ static void vala_gir_parser_node_process (ValaGirParserNode* self, ValaGirParser
 	_tmp65_ = self->girdata;
 	if (_tmp65_ != NULL) {
 		ValaSymbol* _tmp66_;
-		ValaGirParserMetadata* _tmp655_;
-		gboolean _tmp656_ = FALSE;
-		ValaGirParserMetadata* _tmp661_;
-		gboolean _tmp662_ = FALSE;
-		ValaGirParserMetadata* _tmp675_;
-		gboolean _tmp676_ = FALSE;
-		ValaGirParserNode* _tmp678_;
-		ValaSymbol* _tmp679_;
-		gchar* _tmp689_ = NULL;
-		gchar* _tmp690_;
-		gchar* _tmp691_ = NULL;
-		gchar* _tmp692_;
-		gboolean _tmp693_;
-		gchar* _tmp697_ = NULL;
-		gchar* _tmp698_;
-		gchar* _tmp699_ = NULL;
-		gchar* _tmp700_;
-		gboolean _tmp701_;
-		gchar* _tmp709_ = NULL;
-		gchar* _tmp710_;
-		gchar* _tmp711_ = NULL;
-		gchar* _tmp712_;
-		gboolean _tmp713_;
-		gboolean _tmp717_ = FALSE;
-		gboolean _tmp718_ = FALSE;
-		ValaSymbol* _tmp719_;
+		ValaGirParserMetadata* _tmp658_;
+		gboolean _tmp659_ = FALSE;
+		ValaGirParserMetadata* _tmp664_;
+		gboolean _tmp665_ = FALSE;
+		ValaGirParserMetadata* _tmp678_;
+		gboolean _tmp679_ = FALSE;
+		ValaGirParserNode* _tmp681_;
+		ValaSymbol* _tmp682_;
+		gchar* _tmp692_ = NULL;
+		gchar* _tmp693_;
+		gchar* _tmp694_ = NULL;
+		gchar* _tmp695_;
+		gboolean _tmp696_;
+		gchar* _tmp700_ = NULL;
+		gchar* _tmp701_;
+		gchar* _tmp702_ = NULL;
+		gchar* _tmp703_;
+		gboolean _tmp704_;
+		gchar* _tmp712_ = NULL;
+		gchar* _tmp713_;
+		gchar* _tmp714_ = NULL;
+		gchar* _tmp715_;
+		gboolean _tmp716_;
 		gboolean _tmp720_ = FALSE;
-		gboolean _tmp722_;
-		gboolean _tmp726_;
+		gboolean _tmp721_ = FALSE;
+		ValaSymbol* _tmp722_;
+		gboolean _tmp723_ = FALSE;
+		gboolean _tmp725_;
+		gboolean _tmp729_;
 		_tmp66_ = self->symbol;
 		if (VALA_IS_METHOD (_tmp66_)) {
 			ValaSymbol* _tmp67_;
@@ -16823,9 +17264,9 @@ static void vala_gir_parser_node_process (ValaGirParserNode* self, ValaGirParser
 			ValaArrayList* _tmp72_ = NULL;
 			ValaArrayList* colliding;
 			ValaMethod* _tmp178_;
-			ValaMethod* _tmp193_;
-			gboolean _tmp194_;
-			gboolean _tmp195_;
+			ValaMethod* _tmp196_;
+			gboolean _tmp197_;
+			gboolean _tmp198_;
 			_tmp67_ = self->symbol;
 			_tmp68_ = _vala_code_node_ref0 (VALA_METHOD (_tmp67_));
 			m = _tmp68_;
@@ -17149,377 +17590,386 @@ static void vala_gir_parser_node_process (ValaGirParserNode* self, ValaGirParser
 			if (!VALA_IS_CREATION_METHOD (_tmp178_)) {
 				ValaGirParserMetadata* _tmp179_;
 				gboolean _tmp180_ = FALSE;
+				ValaGirParserMetadata* _tmp182_;
+				gboolean _tmp183_ = FALSE;
 				_tmp179_ = self->metadata;
-				_tmp180_ = vala_gir_parser_metadata_has_argument (_tmp179_, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME);
+				_tmp180_ = vala_gir_parser_metadata_has_argument (_tmp179_, VALA_GIR_PARSER_ARGUMENT_TYPE_DESTROYS_INSTANCE);
 				if (_tmp180_) {
-					ValaGirParserNode* _tmp181_;
-					ValaGirParserMetadata* _tmp182_;
-					gchar* _tmp183_ = NULL;
-					gchar* _tmp184_;
-					ValaGirParserNode* _tmp185_ = NULL;
-					ValaGirParserNode* _tmp186_;
+					ValaMethod* _tmp181_;
+					_tmp181_ = m;
+					vala_code_node_set_attribute ((ValaCodeNode*) _tmp181_, "DestroysInstance", TRUE, NULL);
+				}
+				_tmp182_ = self->metadata;
+				_tmp183_ = vala_gir_parser_metadata_has_argument (_tmp182_, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME);
+				if (_tmp183_) {
+					ValaGirParserNode* _tmp184_;
+					ValaGirParserMetadata* _tmp185_;
+					gchar* _tmp186_ = NULL;
+					gchar* _tmp187_;
+					ValaGirParserNode* _tmp188_ = NULL;
+					ValaGirParserNode* _tmp189_;
 					ValaGirParserNode* vfunc;
-					gboolean _tmp187_ = FALSE;
-					ValaGirParserNode* _tmp188_;
-					gboolean _tmp190_;
-					_tmp181_ = self->parent;
-					_tmp182_ = self->metadata;
-					_tmp183_ = vala_gir_parser_metadata_get_string (_tmp182_, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME);
-					_tmp184_ = _tmp183_;
-					_tmp185_ = vala_gir_parser_node_lookup (_tmp181_, _tmp184_, FALSE, NULL);
-					_tmp186_ = _tmp185_;
-					_g_free0 (_tmp184_);
-					vfunc = _tmp186_;
-					_tmp188_ = vfunc;
-					if (_tmp188_ != NULL) {
-						ValaGirParserNode* _tmp189_;
-						_tmp189_ = vfunc;
-						_tmp187_ = _tmp189_ != self;
-					} else {
-						_tmp187_ = FALSE;
-					}
-					_tmp190_ = _tmp187_;
-					if (_tmp190_) {
-						ValaGirParserNode* _tmp191_;
+					gboolean _tmp190_ = FALSE;
+					ValaGirParserNode* _tmp191_;
+					gboolean _tmp193_;
+					_tmp184_ = self->parent;
+					_tmp185_ = self->metadata;
+					_tmp186_ = vala_gir_parser_metadata_get_string (_tmp185_, VALA_GIR_PARSER_ARGUMENT_TYPE_VFUNC_NAME);
+					_tmp187_ = _tmp186_;
+					_tmp188_ = vala_gir_parser_node_lookup (_tmp184_, _tmp187_, FALSE, NULL);
+					_tmp189_ = _tmp188_;
+					_g_free0 (_tmp187_);
+					vfunc = _tmp189_;
+					_tmp191_ = vfunc;
+					if (_tmp191_ != NULL) {
 						ValaGirParserNode* _tmp192_;
-						_tmp191_ = vfunc;
-						_tmp191_->processed = TRUE;
 						_tmp192_ = vfunc;
-						_tmp192_->merged = TRUE;
+						_tmp190_ = _tmp192_ != self;
+					} else {
+						_tmp190_ = FALSE;
+					}
+					_tmp193_ = _tmp190_;
+					if (_tmp193_) {
+						ValaGirParserNode* _tmp194_;
+						ValaGirParserNode* _tmp195_;
+						_tmp194_ = vfunc;
+						_tmp194_->processed = TRUE;
+						_tmp195_ = vfunc;
+						_tmp195_->merged = TRUE;
 					}
 					_vala_gir_parser_node_unref0 (vfunc);
 				}
 			}
-			_tmp193_ = m;
-			_tmp194_ = vala_method_get_coroutine (_tmp193_);
-			_tmp195_ = _tmp194_;
-			if (_tmp195_) {
-				ValaGirParser* _tmp196_;
-				_tmp196_ = parser;
-				vala_gir_parser_process_async_method (_tmp196_, self);
+			_tmp196_ = m;
+			_tmp197_ = vala_method_get_coroutine (_tmp196_);
+			_tmp198_ = _tmp197_;
+			if (_tmp198_) {
+				ValaGirParser* _tmp199_;
+				_tmp199_ = parser;
+				vala_gir_parser_process_async_method (_tmp199_, self);
 			}
 			_vala_iterable_unref0 (colliding);
 			_vala_code_node_unref0 (m);
 		} else {
-			ValaSymbol* _tmp197_;
-			_tmp197_ = self->symbol;
-			if (VALA_IS_PROPERTY (_tmp197_)) {
-				ValaGirParserNode* _tmp198_;
-				const gchar* _tmp199_;
-				ValaArrayList* _tmp200_ = NULL;
+			ValaSymbol* _tmp200_;
+			_tmp200_ = self->symbol;
+			if (VALA_IS_PROPERTY (_tmp200_)) {
+				ValaGirParserNode* _tmp201_;
+				const gchar* _tmp202_;
+				ValaArrayList* _tmp203_ = NULL;
 				ValaArrayList* colliding;
-				ValaSymbol* _tmp219_;
-				ValaProperty* _tmp220_;
+				ValaSymbol* _tmp222_;
+				ValaProperty* _tmp223_;
 				ValaProperty* prop;
-				ValaMap* _tmp221_;
-				gpointer _tmp222_ = NULL;
+				ValaMap* _tmp224_;
+				gpointer _tmp225_ = NULL;
 				gchar* readable;
-				ValaMap* _tmp223_;
-				gpointer _tmp224_ = NULL;
+				ValaMap* _tmp226_;
+				gpointer _tmp227_ = NULL;
 				gchar* writable;
-				ValaMap* _tmp225_;
-				gpointer _tmp226_ = NULL;
+				ValaMap* _tmp228_;
+				gpointer _tmp229_ = NULL;
 				gchar* construct_;
-				ValaMap* _tmp227_;
-				gpointer _tmp228_ = NULL;
+				ValaMap* _tmp230_;
+				gpointer _tmp231_ = NULL;
 				gchar* construct_only;
-				const gchar* _tmp229_;
-				gboolean _tmp238_ = FALSE;
-				const gchar* _tmp239_;
-				gboolean _tmp241_;
+				const gchar* _tmp232_;
+				gboolean _tmp241_ = FALSE;
+				const gchar* _tmp242_;
+				gboolean _tmp244_;
 				ValaGirParserNode* getter;
-				ValaGirParserNode* _tmp258_;
-				const gchar* _tmp259_;
-				gchar* _tmp260_ = NULL;
-				gchar* _tmp261_;
-				ValaArrayList* _tmp262_ = NULL;
-				ValaArrayList* _tmp263_;
+				ValaGirParserNode* _tmp261_;
+				const gchar* _tmp262_;
+				gchar* _tmp263_ = NULL;
+				gchar* _tmp264_;
+				ValaArrayList* _tmp265_ = NULL;
+				ValaArrayList* _tmp266_;
 				ValaArrayList* getters;
-				ValaArrayList* _tmp264_;
+				ValaArrayList* _tmp267_;
 				ValaGirParserNode* setter;
-				ValaGirParserNode* _tmp296_;
-				const gchar* _tmp297_;
-				gchar* _tmp298_ = NULL;
-				gchar* _tmp299_;
-				ValaArrayList* _tmp300_ = NULL;
-				ValaArrayList* _tmp301_;
+				ValaGirParserNode* _tmp299_;
+				const gchar* _tmp300_;
+				gchar* _tmp301_ = NULL;
+				gchar* _tmp302_;
+				ValaArrayList* _tmp303_ = NULL;
+				ValaArrayList* _tmp304_;
 				ValaArrayList* setters;
-				ValaArrayList* _tmp302_;
-				ValaProperty* _tmp334_;
-				ValaProperty* _tmp335_;
-				ValaPropertyAccessor* _tmp336_;
-				ValaPropertyAccessor* _tmp337_;
-				gboolean _tmp401_ = FALSE;
-				gboolean _tmp402_ = FALSE;
-				ValaProperty* _tmp403_;
-				ValaAttribute* _tmp404_ = NULL;
-				ValaAttribute* _tmp405_;
-				gboolean _tmp406_;
-				gboolean _tmp410_;
-				gboolean _tmp416_;
-				ValaProperty* _tmp467_;
-				ValaAttribute* _tmp468_ = NULL;
-				ValaAttribute* _tmp469_;
-				gboolean _tmp470_;
-				_tmp198_ = self->parent;
-				_tmp199_ = self->name;
-				_tmp200_ = vala_gir_parser_node_lookup_all (_tmp198_, _tmp199_);
-				colliding = _tmp200_;
+				ValaArrayList* _tmp305_;
+				ValaProperty* _tmp337_;
+				ValaProperty* _tmp338_;
+				ValaPropertyAccessor* _tmp339_;
+				ValaPropertyAccessor* _tmp340_;
+				gboolean _tmp404_ = FALSE;
+				gboolean _tmp405_ = FALSE;
+				ValaProperty* _tmp406_;
+				ValaAttribute* _tmp407_ = NULL;
+				ValaAttribute* _tmp408_;
+				gboolean _tmp409_;
+				gboolean _tmp413_;
+				gboolean _tmp419_;
+				ValaProperty* _tmp470_;
+				ValaAttribute* _tmp471_ = NULL;
+				ValaAttribute* _tmp472_;
+				gboolean _tmp473_;
+				_tmp201_ = self->parent;
+				_tmp202_ = self->name;
+				_tmp203_ = vala_gir_parser_node_lookup_all (_tmp201_, _tmp202_);
+				colliding = _tmp203_;
 				{
-					ValaArrayList* _tmp201_;
-					ValaArrayList* _tmp202_;
+					ValaArrayList* _tmp204_;
+					ValaArrayList* _tmp205_;
 					ValaArrayList* _node_list;
-					ValaArrayList* _tmp203_;
-					gint _tmp204_;
-					gint _tmp205_;
+					ValaArrayList* _tmp206_;
+					gint _tmp207_;
+					gint _tmp208_;
 					gint _node_size;
 					gint _node_index;
-					_tmp201_ = colliding;
-					_tmp202_ = _vala_iterable_ref0 (_tmp201_);
-					_node_list = _tmp202_;
-					_tmp203_ = _node_list;
-					_tmp204_ = vala_collection_get_size ((ValaCollection*) _tmp203_);
-					_tmp205_ = _tmp204_;
-					_node_size = _tmp205_;
+					_tmp204_ = colliding;
+					_tmp205_ = _vala_iterable_ref0 (_tmp204_);
+					_node_list = _tmp205_;
+					_tmp206_ = _node_list;
+					_tmp207_ = vala_collection_get_size ((ValaCollection*) _tmp206_);
+					_tmp208_ = _tmp207_;
+					_node_size = _tmp208_;
 					_node_index = -1;
 					while (TRUE) {
-						gint _tmp206_;
-						gint _tmp207_;
-						gint _tmp208_;
-						ValaArrayList* _tmp209_;
+						gint _tmp209_;
 						gint _tmp210_;
-						gpointer _tmp211_ = NULL;
+						gint _tmp211_;
+						ValaArrayList* _tmp212_;
+						gint _tmp213_;
+						gpointer _tmp214_ = NULL;
 						ValaGirParserNode* node;
-						ValaGirParserNode* _tmp212_;
-						ValaSymbol* _tmp213_;
-						_tmp206_ = _node_index;
-						_node_index = _tmp206_ + 1;
-						_tmp207_ = _node_index;
-						_tmp208_ = _node_size;
-						if (!(_tmp207_ < _tmp208_)) {
+						ValaGirParserNode* _tmp215_;
+						ValaSymbol* _tmp216_;
+						_tmp209_ = _node_index;
+						_node_index = _tmp209_ + 1;
+						_tmp210_ = _node_index;
+						_tmp211_ = _node_size;
+						if (!(_tmp210_ < _tmp211_)) {
 							break;
 						}
-						_tmp209_ = _node_list;
-						_tmp210_ = _node_index;
-						_tmp211_ = vala_list_get ((ValaList*) _tmp209_, _tmp210_);
-						node = (ValaGirParserNode*) _tmp211_;
-						_tmp212_ = node;
-						_tmp213_ = _tmp212_->symbol;
-						if (VALA_IS_SIGNAL (_tmp213_)) {
-							ValaGirParserNode* _tmp214_;
-							ValaGirParserNode* _tmp215_;
-							_tmp214_ = node;
-							_tmp214_->processed = TRUE;
-							_tmp215_ = node;
-							_tmp215_->merged = TRUE;
+						_tmp212_ = _node_list;
+						_tmp213_ = _node_index;
+						_tmp214_ = vala_list_get ((ValaList*) _tmp212_, _tmp213_);
+						node = (ValaGirParserNode*) _tmp214_;
+						_tmp215_ = node;
+						_tmp216_ = _tmp215_->symbol;
+						if (VALA_IS_SIGNAL (_tmp216_)) {
+							ValaGirParserNode* _tmp217_;
+							ValaGirParserNode* _tmp218_;
+							_tmp217_ = node;
+							_tmp217_->processed = TRUE;
+							_tmp218_ = node;
+							_tmp218_->merged = TRUE;
 						} else {
-							ValaGirParserNode* _tmp216_;
-							ValaSymbol* _tmp217_;
-							_tmp216_ = node;
-							_tmp217_ = _tmp216_->symbol;
-							if (VALA_IS_METHOD (_tmp217_)) {
-								ValaGirParserNode* _tmp218_;
-								_tmp218_ = node;
-								_tmp218_->merged = TRUE;
+							ValaGirParserNode* _tmp219_;
+							ValaSymbol* _tmp220_;
+							_tmp219_ = node;
+							_tmp220_ = _tmp219_->symbol;
+							if (VALA_IS_METHOD (_tmp220_)) {
+								ValaGirParserNode* _tmp221_;
+								_tmp221_ = node;
+								_tmp221_->merged = TRUE;
 							}
 						}
 						_vala_gir_parser_node_unref0 (node);
 					}
 					_vala_iterable_unref0 (_node_list);
 				}
-				_tmp219_ = self->symbol;
-				_tmp220_ = _vala_code_node_ref0 (VALA_PROPERTY (_tmp219_));
-				prop = _tmp220_;
-				_tmp221_ = self->girdata;
-				_tmp222_ = vala_map_get (_tmp221_, "readable");
-				readable = (gchar*) _tmp222_;
-				_tmp223_ = self->girdata;
-				_tmp224_ = vala_map_get (_tmp223_, "writable");
-				writable = (gchar*) _tmp224_;
-				_tmp225_ = self->girdata;
-				_tmp226_ = vala_map_get (_tmp225_, "construct");
-				construct_ = (gchar*) _tmp226_;
-				_tmp227_ = self->girdata;
-				_tmp228_ = vala_map_get (_tmp227_, "construct-only");
-				construct_only = (gchar*) _tmp228_;
-				_tmp229_ = readable;
-				if (g_strcmp0 (_tmp229_, "0") != 0) {
-					ValaProperty* _tmp230_;
-					ValaProperty* _tmp231_;
-					ValaDataType* _tmp232_;
-					ValaDataType* _tmp233_;
-					ValaDataType* _tmp234_ = NULL;
+				_tmp222_ = self->symbol;
+				_tmp223_ = _vala_code_node_ref0 (VALA_PROPERTY (_tmp222_));
+				prop = _tmp223_;
+				_tmp224_ = self->girdata;
+				_tmp225_ = vala_map_get (_tmp224_, "readable");
+				readable = (gchar*) _tmp225_;
+				_tmp226_ = self->girdata;
+				_tmp227_ = vala_map_get (_tmp226_, "writable");
+				writable = (gchar*) _tmp227_;
+				_tmp228_ = self->girdata;
+				_tmp229_ = vala_map_get (_tmp228_, "construct");
+				construct_ = (gchar*) _tmp229_;
+				_tmp230_ = self->girdata;
+				_tmp231_ = vala_map_get (_tmp230_, "construct-only");
+				construct_only = (gchar*) _tmp231_;
+				_tmp232_ = readable;
+				if (g_strcmp0 (_tmp232_, "0") != 0) {
+					ValaProperty* _tmp233_;
+					ValaProperty* _tmp234_;
 					ValaDataType* _tmp235_;
-					ValaPropertyAccessor* _tmp236_;
-					ValaPropertyAccessor* _tmp237_;
-					_tmp230_ = prop;
-					_tmp231_ = prop;
-					_tmp232_ = vala_property_get_property_type (_tmp231_);
-					_tmp233_ = _tmp232_;
-					_tmp234_ = vala_data_type_copy (_tmp233_);
-					_tmp235_ = _tmp234_;
-					_tmp236_ = vala_property_accessor_new (TRUE, FALSE, FALSE, _tmp235_, NULL, NULL, NULL);
-					_tmp237_ = _tmp236_;
-					vala_property_set_get_accessor (_tmp230_, _tmp237_);
-					_vala_code_node_unref0 (_tmp237_);
-					_vala_code_node_unref0 (_tmp235_);
+					ValaDataType* _tmp236_;
+					ValaDataType* _tmp237_ = NULL;
+					ValaDataType* _tmp238_;
+					ValaPropertyAccessor* _tmp239_;
+					ValaPropertyAccessor* _tmp240_;
+					_tmp233_ = prop;
+					_tmp234_ = prop;
+					_tmp235_ = vala_property_get_property_type (_tmp234_);
+					_tmp236_ = _tmp235_;
+					_tmp237_ = vala_data_type_copy (_tmp236_);
+					_tmp238_ = _tmp237_;
+					_tmp239_ = vala_property_accessor_new (TRUE, FALSE, FALSE, _tmp238_, NULL, NULL, NULL);
+					_tmp240_ = _tmp239_;
+					vala_property_set_get_accessor (_tmp233_, _tmp240_);
+					_vala_code_node_unref0 (_tmp240_);
+					_vala_code_node_unref0 (_tmp238_);
 				}
-				_tmp239_ = writable;
-				if (g_strcmp0 (_tmp239_, "1") == 0) {
-					_tmp238_ = TRUE;
+				_tmp242_ = writable;
+				if (g_strcmp0 (_tmp242_, "1") == 0) {
+					_tmp241_ = TRUE;
 				} else {
-					const gchar* _tmp240_;
-					_tmp240_ = construct_only;
-					_tmp238_ = g_strcmp0 (_tmp240_, "1") == 0;
-				}
-				_tmp241_ = _tmp238_;
-				if (_tmp241_) {
-					gboolean _tmp242_ = FALSE;
 					const gchar* _tmp243_;
+					_tmp243_ = construct_only;
+					_tmp241_ = g_strcmp0 (_tmp243_, "1") == 0;
+				}
+				_tmp244_ = _tmp241_;
+				if (_tmp244_) {
 					gboolean _tmp245_ = FALSE;
 					const gchar* _tmp246_;
-					ValaProperty* _tmp248_;
-					gboolean _tmp249_;
-					gboolean _tmp250_;
+					gboolean _tmp248_ = FALSE;
+					const gchar* _tmp249_;
 					ValaProperty* _tmp251_;
-					ValaDataType* _tmp252_;
-					ValaDataType* _tmp253_;
-					ValaDataType* _tmp254_ = NULL;
+					gboolean _tmp252_;
+					gboolean _tmp253_;
+					ValaProperty* _tmp254_;
 					ValaDataType* _tmp255_;
-					ValaPropertyAccessor* _tmp256_;
-					ValaPropertyAccessor* _tmp257_;
-					_tmp243_ = construct_only;
-					if (g_strcmp0 (_tmp243_, "1") != 0) {
-						const gchar* _tmp244_;
-						_tmp244_ = writable;
-						_tmp242_ = g_strcmp0 (_tmp244_, "1") == 0;
-					} else {
-						_tmp242_ = FALSE;
-					}
+					ValaDataType* _tmp256_;
+					ValaDataType* _tmp257_ = NULL;
+					ValaDataType* _tmp258_;
+					ValaPropertyAccessor* _tmp259_;
+					ValaPropertyAccessor* _tmp260_;
 					_tmp246_ = construct_only;
-					if (g_strcmp0 (_tmp246_, "1") == 0) {
-						_tmp245_ = TRUE;
-					} else {
+					if (g_strcmp0 (_tmp246_, "1") != 0) {
 						const gchar* _tmp247_;
-						_tmp247_ = construct_;
+						_tmp247_ = writable;
 						_tmp245_ = g_strcmp0 (_tmp247_, "1") == 0;
+					} else {
+						_tmp245_ = FALSE;
+					}
+					_tmp249_ = construct_only;
+					if (g_strcmp0 (_tmp249_, "1") == 0) {
+						_tmp248_ = TRUE;
+					} else {
+						const gchar* _tmp250_;
+						_tmp250_ = construct_;
+						_tmp248_ = g_strcmp0 (_tmp250_, "1") == 0;
 					}
-					_tmp248_ = prop;
-					_tmp249_ = _tmp242_;
-					_tmp250_ = _tmp245_;
 					_tmp251_ = prop;
-					_tmp252_ = vala_property_get_property_type (_tmp251_);
-					_tmp253_ = _tmp252_;
-					_tmp254_ = vala_data_type_copy (_tmp253_);
-					_tmp255_ = _tmp254_;
-					_tmp256_ = vala_property_accessor_new (FALSE, _tmp249_, _tmp250_, _tmp255_, NULL, NULL, NULL);
-					_tmp257_ = _tmp256_;
-					vala_property_set_set_accessor (_tmp248_, _tmp257_);
-					_vala_code_node_unref0 (_tmp257_);
-					_vala_code_node_unref0 (_tmp255_);
+					_tmp252_ = _tmp245_;
+					_tmp253_ = _tmp248_;
+					_tmp254_ = prop;
+					_tmp255_ = vala_property_get_property_type (_tmp254_);
+					_tmp256_ = _tmp255_;
+					_tmp257_ = vala_data_type_copy (_tmp256_);
+					_tmp258_ = _tmp257_;
+					_tmp259_ = vala_property_accessor_new (FALSE, _tmp252_, _tmp253_, _tmp258_, NULL, NULL, NULL);
+					_tmp260_ = _tmp259_;
+					vala_property_set_set_accessor (_tmp251_, _tmp260_);
+					_vala_code_node_unref0 (_tmp260_);
+					_vala_code_node_unref0 (_tmp258_);
 				}
 				getter = NULL;
-				_tmp258_ = self->parent;
-				_tmp259_ = self->name;
-				_tmp260_ = g_strdup_printf ("get_%s", _tmp259_);
-				_tmp261_ = _tmp260_;
-				_tmp262_ = vala_gir_parser_node_lookup_all (_tmp258_, _tmp261_);
-				_tmp263_ = _tmp262_;
-				_g_free0 (_tmp261_);
-				getters = _tmp263_;
-				_tmp264_ = getters;
-				if (_tmp264_ != NULL) {
+				_tmp261_ = self->parent;
+				_tmp262_ = self->name;
+				_tmp263_ = g_strdup_printf ("get_%s", _tmp262_);
+				_tmp264_ = _tmp263_;
+				_tmp265_ = vala_gir_parser_node_lookup_all (_tmp261_, _tmp264_);
+				_tmp266_ = _tmp265_;
+				_g_free0 (_tmp264_);
+				getters = _tmp266_;
+				_tmp267_ = getters;
+				if (_tmp267_ != NULL) {
 					{
-						ValaArrayList* _tmp265_;
-						ValaArrayList* _tmp266_;
+						ValaArrayList* _tmp268_;
+						ValaArrayList* _tmp269_;
 						ValaArrayList* _g_list;
-						ValaArrayList* _tmp267_;
-						gint _tmp268_;
-						gint _tmp269_;
+						ValaArrayList* _tmp270_;
+						gint _tmp271_;
+						gint _tmp272_;
 						gint _g_size;
 						gint _g_index;
-						_tmp265_ = getters;
-						_tmp266_ = _vala_iterable_ref0 (_tmp265_);
-						_g_list = _tmp266_;
-						_tmp267_ = _g_list;
-						_tmp268_ = vala_collection_get_size ((ValaCollection*) _tmp267_);
-						_tmp269_ = _tmp268_;
-						_g_size = _tmp269_;
+						_tmp268_ = getters;
+						_tmp269_ = _vala_iterable_ref0 (_tmp268_);
+						_g_list = _tmp269_;
+						_tmp270_ = _g_list;
+						_tmp271_ = vala_collection_get_size ((ValaCollection*) _tmp270_);
+						_tmp272_ = _tmp271_;
+						_g_size = _tmp272_;
 						_g_index = -1;
 						while (TRUE) {
-							gint _tmp270_;
-							gint _tmp271_;
-							gint _tmp272_;
-							ValaArrayList* _tmp273_;
+							gint _tmp273_;
 							gint _tmp274_;
-							gpointer _tmp275_ = NULL;
+							gint _tmp275_;
+							ValaArrayList* _tmp276_;
+							gint _tmp277_;
+							gpointer _tmp278_ = NULL;
 							ValaGirParserNode* g;
-							gboolean _tmp276_ = FALSE;
-							gboolean _tmp277_ = FALSE;
-							ValaGirParserNode* _tmp278_;
-							gboolean _tmp281_;
-							gboolean _tmp293_;
-							_tmp270_ = _g_index;
-							_g_index = _tmp270_ + 1;
-							_tmp271_ = _g_index;
-							_tmp272_ = _g_size;
-							if (!(_tmp271_ < _tmp272_)) {
+							gboolean _tmp279_ = FALSE;
+							gboolean _tmp280_ = FALSE;
+							ValaGirParserNode* _tmp281_;
+							gboolean _tmp284_;
+							gboolean _tmp296_;
+							_tmp273_ = _g_index;
+							_g_index = _tmp273_ + 1;
+							_tmp274_ = _g_index;
+							_tmp275_ = _g_size;
+							if (!(_tmp274_ < _tmp275_)) {
 								break;
 							}
-							_tmp273_ = _g_list;
-							_tmp274_ = _g_index;
-							_tmp275_ = vala_list_get ((ValaList*) _tmp273_, _tmp274_);
-							g = (ValaGirParserNode*) _tmp275_;
-							_tmp278_ = getter;
-							if (_tmp278_ == NULL) {
-								_tmp277_ = TRUE;
+							_tmp276_ = _g_list;
+							_tmp277_ = _g_index;
+							_tmp278_ = vala_list_get ((ValaList*) _tmp276_, _tmp277_);
+							g = (ValaGirParserNode*) _tmp278_;
+							_tmp281_ = getter;
+							if (_tmp281_ == NULL) {
+								_tmp280_ = TRUE;
 							} else {
-								ValaGirParserNode* _tmp279_;
-								gboolean _tmp280_;
-								_tmp279_ = g;
-								_tmp280_ = _tmp279_->merged;
-								_tmp277_ = !_tmp280_;
-							}
-							_tmp281_ = _tmp277_;
-							if (_tmp281_) {
 								ValaGirParserNode* _tmp282_;
-								gchar* _tmp283_ = NULL;
-								gchar* _tmp284_;
+								gboolean _tmp283_;
+								_tmp282_ = g;
+								_tmp283_ = _tmp282_->merged;
+								_tmp280_ = !_tmp283_;
+							}
+							_tmp284_ = _tmp280_;
+							if (_tmp284_) {
 								ValaGirParserNode* _tmp285_;
 								gchar* _tmp286_ = NULL;
 								gchar* _tmp287_;
-								gchar* _tmp288_;
-								gchar* _tmp289_;
-								const gchar* _tmp290_;
+								ValaGirParserNode* _tmp288_;
+								gchar* _tmp289_ = NULL;
+								gchar* _tmp290_;
 								gchar* _tmp291_;
 								gchar* _tmp292_;
-								_tmp282_ = g;
-								_tmp283_ = vala_gir_parser_node_get_cname (_tmp282_);
-								_tmp284_ = _tmp283_;
-								_tmp285_ = self->parent;
-								_tmp286_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp285_);
+								const gchar* _tmp293_;
+								gchar* _tmp294_;
+								gchar* _tmp295_;
+								_tmp285_ = g;
+								_tmp286_ = vala_gir_parser_node_get_cname (_tmp285_);
 								_tmp287_ = _tmp286_;
-								_tmp288_ = g_strconcat (_tmp287_, "get_", NULL);
-								_tmp289_ = _tmp288_;
-								_tmp290_ = self->name;
-								_tmp291_ = g_strconcat (_tmp289_, _tmp290_, NULL);
+								_tmp288_ = self->parent;
+								_tmp289_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp288_);
+								_tmp290_ = _tmp289_;
+								_tmp291_ = g_strconcat (_tmp290_, "get_", NULL);
 								_tmp292_ = _tmp291_;
-								_tmp276_ = g_strcmp0 (_tmp284_, _tmp292_) == 0;
+								_tmp293_ = self->name;
+								_tmp294_ = g_strconcat (_tmp292_, _tmp293_, NULL);
+								_tmp295_ = _tmp294_;
+								_tmp279_ = g_strcmp0 (_tmp287_, _tmp295_) == 0;
+								_g_free0 (_tmp295_);
 								_g_free0 (_tmp292_);
-								_g_free0 (_tmp289_);
+								_g_free0 (_tmp290_);
 								_g_free0 (_tmp287_);
-								_g_free0 (_tmp284_);
 							} else {
-								_tmp276_ = FALSE;
+								_tmp279_ = FALSE;
 							}
-							_tmp293_ = _tmp276_;
-							if (_tmp293_) {
-								ValaGirParserNode* _tmp294_;
-								ValaGirParserNode* _tmp295_;
-								_tmp294_ = g;
-								_tmp295_ = _vala_gir_parser_node_ref0 (_tmp294_);
+							_tmp296_ = _tmp279_;
+							if (_tmp296_) {
+								ValaGirParserNode* _tmp297_;
+								ValaGirParserNode* _tmp298_;
+								_tmp297_ = g;
+								_tmp298_ = _vala_gir_parser_node_ref0 (_tmp297_);
 								_vala_gir_parser_node_unref0 (getter);
-								getter = _tmp295_;
+								getter = _tmp298_;
 							}
 							_vala_gir_parser_node_unref0 (g);
 						}
@@ -17527,517 +17977,517 @@ static void vala_gir_parser_node_process (ValaGirParserNode* self, ValaGirParser
 					}
 				}
 				setter = NULL;
-				_tmp296_ = self->parent;
-				_tmp297_ = self->name;
-				_tmp298_ = g_strdup_printf ("set_%s", _tmp297_);
-				_tmp299_ = _tmp298_;
-				_tmp300_ = vala_gir_parser_node_lookup_all (_tmp296_, _tmp299_);
-				_tmp301_ = _tmp300_;
-				_g_free0 (_tmp299_);
-				setters = _tmp301_;
-				_tmp302_ = setters;
-				if (_tmp302_ != NULL) {
+				_tmp299_ = self->parent;
+				_tmp300_ = self->name;
+				_tmp301_ = g_strdup_printf ("set_%s", _tmp300_);
+				_tmp302_ = _tmp301_;
+				_tmp303_ = vala_gir_parser_node_lookup_all (_tmp299_, _tmp302_);
+				_tmp304_ = _tmp303_;
+				_g_free0 (_tmp302_);
+				setters = _tmp304_;
+				_tmp305_ = setters;
+				if (_tmp305_ != NULL) {
 					{
-						ValaArrayList* _tmp303_;
-						ValaArrayList* _tmp304_;
+						ValaArrayList* _tmp306_;
+						ValaArrayList* _tmp307_;
 						ValaArrayList* _s_list;
-						ValaArrayList* _tmp305_;
-						gint _tmp306_;
-						gint _tmp307_;
+						ValaArrayList* _tmp308_;
+						gint _tmp309_;
+						gint _tmp310_;
 						gint _s_size;
 						gint _s_index;
-						_tmp303_ = setters;
-						_tmp304_ = _vala_iterable_ref0 (_tmp303_);
-						_s_list = _tmp304_;
-						_tmp305_ = _s_list;
-						_tmp306_ = vala_collection_get_size ((ValaCollection*) _tmp305_);
-						_tmp307_ = _tmp306_;
-						_s_size = _tmp307_;
+						_tmp306_ = setters;
+						_tmp307_ = _vala_iterable_ref0 (_tmp306_);
+						_s_list = _tmp307_;
+						_tmp308_ = _s_list;
+						_tmp309_ = vala_collection_get_size ((ValaCollection*) _tmp308_);
+						_tmp310_ = _tmp309_;
+						_s_size = _tmp310_;
 						_s_index = -1;
 						while (TRUE) {
-							gint _tmp308_;
-							gint _tmp309_;
-							gint _tmp310_;
-							ValaArrayList* _tmp311_;
+							gint _tmp311_;
 							gint _tmp312_;
-							gpointer _tmp313_ = NULL;
+							gint _tmp313_;
+							ValaArrayList* _tmp314_;
+							gint _tmp315_;
+							gpointer _tmp316_ = NULL;
 							ValaGirParserNode* s;
-							gboolean _tmp314_ = FALSE;
-							gboolean _tmp315_ = FALSE;
-							ValaGirParserNode* _tmp316_;
-							gboolean _tmp319_;
-							gboolean _tmp331_;
-							_tmp308_ = _s_index;
-							_s_index = _tmp308_ + 1;
-							_tmp309_ = _s_index;
-							_tmp310_ = _s_size;
-							if (!(_tmp309_ < _tmp310_)) {
+							gboolean _tmp317_ = FALSE;
+							gboolean _tmp318_ = FALSE;
+							ValaGirParserNode* _tmp319_;
+							gboolean _tmp322_;
+							gboolean _tmp334_;
+							_tmp311_ = _s_index;
+							_s_index = _tmp311_ + 1;
+							_tmp312_ = _s_index;
+							_tmp313_ = _s_size;
+							if (!(_tmp312_ < _tmp313_)) {
 								break;
 							}
-							_tmp311_ = _s_list;
-							_tmp312_ = _s_index;
-							_tmp313_ = vala_list_get ((ValaList*) _tmp311_, _tmp312_);
-							s = (ValaGirParserNode*) _tmp313_;
-							_tmp316_ = setter;
-							if (_tmp316_ == NULL) {
-								_tmp315_ = TRUE;
+							_tmp314_ = _s_list;
+							_tmp315_ = _s_index;
+							_tmp316_ = vala_list_get ((ValaList*) _tmp314_, _tmp315_);
+							s = (ValaGirParserNode*) _tmp316_;
+							_tmp319_ = setter;
+							if (_tmp319_ == NULL) {
+								_tmp318_ = TRUE;
 							} else {
-								ValaGirParserNode* _tmp317_;
-								gboolean _tmp318_;
-								_tmp317_ = s;
-								_tmp318_ = _tmp317_->merged;
-								_tmp315_ = !_tmp318_;
-							}
-							_tmp319_ = _tmp315_;
-							if (_tmp319_) {
 								ValaGirParserNode* _tmp320_;
-								gchar* _tmp321_ = NULL;
-								gchar* _tmp322_;
+								gboolean _tmp321_;
+								_tmp320_ = s;
+								_tmp321_ = _tmp320_->merged;
+								_tmp318_ = !_tmp321_;
+							}
+							_tmp322_ = _tmp318_;
+							if (_tmp322_) {
 								ValaGirParserNode* _tmp323_;
 								gchar* _tmp324_ = NULL;
 								gchar* _tmp325_;
-								gchar* _tmp326_;
-								gchar* _tmp327_;
-								const gchar* _tmp328_;
+								ValaGirParserNode* _tmp326_;
+								gchar* _tmp327_ = NULL;
+								gchar* _tmp328_;
 								gchar* _tmp329_;
 								gchar* _tmp330_;
-								_tmp320_ = s;
-								_tmp321_ = vala_gir_parser_node_get_cname (_tmp320_);
-								_tmp322_ = _tmp321_;
-								_tmp323_ = self->parent;
-								_tmp324_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp323_);
+								const gchar* _tmp331_;
+								gchar* _tmp332_;
+								gchar* _tmp333_;
+								_tmp323_ = s;
+								_tmp324_ = vala_gir_parser_node_get_cname (_tmp323_);
 								_tmp325_ = _tmp324_;
-								_tmp326_ = g_strconcat (_tmp325_, "set_", NULL);
-								_tmp327_ = _tmp326_;
-								_tmp328_ = self->name;
-								_tmp329_ = g_strconcat (_tmp327_, _tmp328_, NULL);
+								_tmp326_ = self->parent;
+								_tmp327_ = vala_gir_parser_node_get_lower_case_cprefix (_tmp326_);
+								_tmp328_ = _tmp327_;
+								_tmp329_ = g_strconcat (_tmp328_, "set_", NULL);
 								_tmp330_ = _tmp329_;
-								_tmp314_ = g_strcmp0 (_tmp322_, _tmp330_) == 0;
+								_tmp331_ = self->name;
+								_tmp332_ = g_strconcat (_tmp330_, _tmp331_, NULL);
+								_tmp333_ = _tmp332_;
+								_tmp317_ = g_strcmp0 (_tmp325_, _tmp333_) == 0;
+								_g_free0 (_tmp333_);
 								_g_free0 (_tmp330_);
-								_g_free0 (_tmp327_);
+								_g_free0 (_tmp328_);
 								_g_free0 (_tmp325_);
-								_g_free0 (_tmp322_);
 							} else {
-								_tmp314_ = FALSE;
+								_tmp317_ = FALSE;
 							}
-							_tmp331_ = _tmp314_;
-							if (_tmp331_) {
-								ValaGirParserNode* _tmp332_;
-								ValaGirParserNode* _tmp333_;
-								_tmp332_ = s;
-								_tmp333_ = _vala_gir_parser_node_ref0 (_tmp332_);
+							_tmp334_ = _tmp317_;
+							if (_tmp334_) {
+								ValaGirParserNode* _tmp335_;
+								ValaGirParserNode* _tmp336_;
+								_tmp335_ = s;
+								_tmp336_ = _vala_gir_parser_node_ref0 (_tmp335_);
 								_vala_gir_parser_node_unref0 (setter);
-								setter = _tmp333_;
+								setter = _tmp336_;
 							}
 							_vala_gir_parser_node_unref0 (s);
 						}
 						_vala_iterable_unref0 (_s_list);
 					}
 				}
-				_tmp334_ = prop;
-				vala_code_node_set_attribute ((ValaCodeNode*) _tmp334_, "NoAccessorMethod", FALSE, NULL);
-				_tmp335_ = prop;
-				_tmp336_ = vala_property_get_get_accessor (_tmp335_);
-				_tmp337_ = _tmp336_;
-				if (_tmp337_ != NULL) {
-					ValaMethod* _tmp338_ = NULL;
-					ValaGirParserNode* _tmp339_;
-					ValaMethod* _tmp342_;
-					ValaMethod* _tmp343_;
-					ValaMethod* m;
-					gboolean _tmp344_ = FALSE;
+				_tmp337_ = prop;
+				vala_code_node_set_attribute ((ValaCodeNode*) _tmp337_, "NoAccessorMethod", FALSE, NULL);
+				_tmp338_ = prop;
+				_tmp339_ = vala_property_get_get_accessor (_tmp338_);
+				_tmp340_ = _tmp339_;
+				if (_tmp340_ != NULL) {
+					ValaMethod* _tmp341_ = NULL;
+					ValaGirParserNode* _tmp342_;
 					ValaMethod* _tmp345_;
-					gboolean _tmp359_;
-					_tmp339_ = getter;
-					if (_tmp339_ != NULL) {
-						ValaGirParserNode* _tmp340_;
-						ValaSymbol* _tmp341_;
-						_tmp340_ = getter;
-						_tmp341_ = _tmp340_->symbol;
-						_tmp338_ = VALA_IS_METHOD (_tmp341_) ? ((ValaMethod*) _tmp341_) : NULL;
+					ValaMethod* _tmp346_;
+					ValaMethod* m;
+					gboolean _tmp347_ = FALSE;
+					ValaMethod* _tmp348_;
+					gboolean _tmp362_;
+					_tmp342_ = getter;
+					if (_tmp342_ != NULL) {
+						ValaGirParserNode* _tmp343_;
+						ValaSymbol* _tmp344_;
+						_tmp343_ = getter;
+						_tmp344_ = _tmp343_->symbol;
+						_tmp341_ = VALA_IS_METHOD (_tmp344_) ? ((ValaMethod*) _tmp344_) : NULL;
 					} else {
-						_tmp338_ = NULL;
+						_tmp341_ = NULL;
 					}
-					_tmp342_ = _tmp338_;
-					_tmp343_ = _vala_code_node_ref0 (_tmp342_);
-					m = _tmp343_;
-					_tmp345_ = m;
-					if (_tmp345_ != NULL) {
-						gboolean _tmp346_ = FALSE;
-						gboolean _tmp347_ = FALSE;
-						ValaMethod* _tmp348_;
-						gboolean _tmp349_;
-						gboolean _tmp350_;
-						gboolean _tmp354_;
-						gboolean _tmp358_;
-						_tmp348_ = m;
-						_tmp349_ = vala_method_get_is_abstract (_tmp348_);
-						_tmp350_ = _tmp349_;
-						if (_tmp350_) {
-							_tmp347_ = TRUE;
+					_tmp345_ = _tmp341_;
+					_tmp346_ = _vala_code_node_ref0 (_tmp345_);
+					m = _tmp346_;
+					_tmp348_ = m;
+					if (_tmp348_ != NULL) {
+						gboolean _tmp349_ = FALSE;
+						gboolean _tmp350_ = FALSE;
+						ValaMethod* _tmp351_;
+						gboolean _tmp352_;
+						gboolean _tmp353_;
+						gboolean _tmp357_;
+						gboolean _tmp361_;
+						_tmp351_ = m;
+						_tmp352_ = vala_method_get_is_abstract (_tmp351_);
+						_tmp353_ = _tmp352_;
+						if (_tmp353_) {
+							_tmp350_ = TRUE;
 						} else {
-							ValaMethod* _tmp351_;
-							gboolean _tmp352_;
-							gboolean _tmp353_;
-							_tmp351_ = m;
-							_tmp352_ = vala_method_get_is_virtual (_tmp351_);
-							_tmp353_ = _tmp352_;
-							_tmp347_ = _tmp353_;
+							ValaMethod* _tmp354_;
+							gboolean _tmp355_;
+							gboolean _tmp356_;
+							_tmp354_ = m;
+							_tmp355_ = vala_method_get_is_virtual (_tmp354_);
+							_tmp356_ = _tmp355_;
+							_tmp350_ = _tmp356_;
 						}
-						_tmp354_ = _tmp347_;
-						if (_tmp354_) {
-							_tmp346_ = TRUE;
+						_tmp357_ = _tmp350_;
+						if (_tmp357_) {
+							_tmp349_ = TRUE;
 						} else {
-							ValaProperty* _tmp355_;
-							gboolean _tmp356_;
-							gboolean _tmp357_;
-							_tmp355_ = prop;
-							_tmp356_ = vala_property_get_is_abstract (_tmp355_);
-							_tmp357_ = _tmp356_;
-							_tmp346_ = !_tmp357_;
+							ValaProperty* _tmp358_;
+							gboolean _tmp359_;
+							gboolean _tmp360_;
+							_tmp358_ = prop;
+							_tmp359_ = vala_property_get_is_abstract (_tmp358_);
+							_tmp360_ = _tmp359_;
+							_tmp349_ = !_tmp360_;
 						}
-						_tmp358_ = _tmp346_;
-						_tmp344_ = _tmp358_;
+						_tmp361_ = _tmp349_;
+						_tmp347_ = _tmp361_;
 					} else {
-						_tmp344_ = FALSE;
+						_tmp347_ = FALSE;
 					}
-					_tmp359_ = _tmp344_;
-					if (_tmp359_) {
-						ValaGirParserNode* _tmp360_;
-						ValaGirParser* _tmp361_;
-						gboolean _tmp362_ = FALSE;
-						ValaMethod* _tmp363_;
-						ValaDataType* _tmp364_;
-						ValaDataType* _tmp365_;
-						gboolean _tmp371_;
-						_tmp360_ = getter;
-						_tmp361_ = parser;
-						vala_gir_parser_node_process (_tmp360_, _tmp361_);
-						_tmp363_ = m;
-						_tmp364_ = vala_method_get_return_type (_tmp363_);
-						_tmp365_ = _tmp364_;
-						if (VALA_IS_VOID_TYPE (_tmp365_)) {
-							_tmp362_ = TRUE;
+					_tmp362_ = _tmp347_;
+					if (_tmp362_) {
+						ValaGirParserNode* _tmp363_;
+						ValaGirParser* _tmp364_;
+						gboolean _tmp365_ = FALSE;
+						ValaMethod* _tmp366_;
+						ValaDataType* _tmp367_;
+						ValaDataType* _tmp368_;
+						gboolean _tmp374_;
+						_tmp363_ = getter;
+						_tmp364_ = parser;
+						vala_gir_parser_node_process (_tmp363_, _tmp364_);
+						_tmp366_ = m;
+						_tmp367_ = vala_method_get_return_type (_tmp366_);
+						_tmp368_ = _tmp367_;
+						if (VALA_IS_VOID_TYPE (_tmp368_)) {
+							_tmp365_ = TRUE;
 						} else {
-							ValaMethod* _tmp366_;
-							ValaList* _tmp367_ = NULL;
-							ValaList* _tmp368_;
-							gint _tmp369_;
-							gint _tmp370_;
-							_tmp366_ = m;
-							_tmp367_ = vala_method_get_parameters (_tmp366_);
-							_tmp368_ = _tmp367_;
-							_tmp369_ = vala_collection_get_size ((ValaCollection*) _tmp368_);
-							_tmp370_ = _tmp369_;
-							_tmp362_ = _tmp370_ != 0;
-							_vala_iterable_unref0 (_tmp368_);
+							ValaMethod* _tmp369_;
+							ValaList* _tmp370_ = NULL;
+							ValaList* _tmp371_;
+							gint _tmp372_;
+							gint _tmp373_;
+							_tmp369_ = m;
+							_tmp370_ = vala_method_get_parameters (_tmp369_);
+							_tmp371_ = _tmp370_;
+							_tmp372_ = vala_collection_get_size ((ValaCollection*) _tmp371_);
+							_tmp373_ = _tmp372_;
+							_tmp365_ = _tmp373_ != 0;
+							_vala_iterable_unref0 (_tmp371_);
 						}
-						_tmp371_ = _tmp362_;
-						if (_tmp371_) {
-							ValaProperty* _tmp372_;
-							_tmp372_ = prop;
-							vala_code_node_set_attribute ((ValaCodeNode*) _tmp372_, "NoAccessorMethod", TRUE, NULL);
+						_tmp374_ = _tmp365_;
+						if (_tmp374_) {
+							ValaProperty* _tmp375_;
+							_tmp375_ = prop;
+							vala_code_node_set_attribute ((ValaCodeNode*) _tmp375_, "NoAccessorMethod", TRUE, NULL);
 						} else {
-							ValaGirParserNode* _tmp373_;
-							const gchar* _tmp374_;
-							const gchar* _tmp375_;
-							ValaProperty* _tmp390_;
-							ValaPropertyAccessor* _tmp391_;
-							ValaPropertyAccessor* _tmp392_;
-							ValaDataType* _tmp393_;
-							ValaDataType* _tmp394_;
-							ValaMethod* _tmp395_;
+							ValaGirParserNode* _tmp376_;
+							const gchar* _tmp377_;
+							const gchar* _tmp378_;
+							ValaProperty* _tmp393_;
+							ValaPropertyAccessor* _tmp394_;
+							ValaPropertyAccessor* _tmp395_;
 							ValaDataType* _tmp396_;
 							ValaDataType* _tmp397_;
-							gboolean _tmp398_;
-							gboolean _tmp399_;
-							_tmp373_ = getter;
-							_tmp374_ = _tmp373_->name;
-							_tmp375_ = self->name;
-							if (g_strcmp0 (_tmp374_, _tmp375_) == 0) {
+							ValaMethod* _tmp398_;
+							ValaDataType* _tmp399_;
+							ValaDataType* _tmp400_;
+							gboolean _tmp401_;
+							gboolean _tmp402_;
+							_tmp376_ = getter;
+							_tmp377_ = _tmp376_->name;
+							_tmp378_ = self->name;
+							if (g_strcmp0 (_tmp377_, _tmp378_) == 0) {
 								{
-									ValaArrayList* _tmp376_;
-									ValaArrayList* _tmp377_;
+									ValaArrayList* _tmp379_;
+									ValaArrayList* _tmp380_;
 									ValaArrayList* _node_list;
-									ValaArrayList* _tmp378_;
-									gint _tmp379_;
-									gint _tmp380_;
+									ValaArrayList* _tmp381_;
+									gint _tmp382_;
+									gint _tmp383_;
 									gint _node_size;
 									gint _node_index;
-									_tmp376_ = colliding;
-									_tmp377_ = _vala_iterable_ref0 (_tmp376_);
-									_node_list = _tmp377_;
-									_tmp378_ = _node_list;
-									_tmp379_ = vala_collection_get_size ((ValaCollection*) _tmp378_);
-									_tmp380_ = _tmp379_;
-									_node_size = _tmp380_;
+									_tmp379_ = colliding;
+									_tmp380_ = _vala_iterable_ref0 (_tmp379_);
+									_node_list = _tmp380_;
+									_tmp381_ = _node_list;
+									_tmp382_ = vala_collection_get_size ((ValaCollection*) _tmp381_);
+									_tmp383_ = _tmp382_;
+									_node_size = _tmp383_;
 									_node_index = -1;
 									while (TRUE) {
-										gint _tmp381_;
-										gint _tmp382_;
-										gint _tmp383_;
-										ValaArrayList* _tmp384_;
+										gint _tmp384_;
 										gint _tmp385_;
-										gpointer _tmp386_ = NULL;
+										gint _tmp386_;
+										ValaArrayList* _tmp387_;
+										gint _tmp388_;
+										gpointer _tmp389_ = NULL;
 										ValaGirParserNode* node;
-										ValaGirParserNode* _tmp387_;
-										ValaSymbol* _tmp388_;
-										_tmp381_ = _node_index;
-										_node_index = _tmp381_ + 1;
-										_tmp382_ = _node_index;
-										_tmp383_ = _node_size;
-										if (!(_tmp382_ < _tmp383_)) {
+										ValaGirParserNode* _tmp390_;
+										ValaSymbol* _tmp391_;
+										_tmp384_ = _node_index;
+										_node_index = _tmp384_ + 1;
+										_tmp385_ = _node_index;
+										_tmp386_ = _node_size;
+										if (!(_tmp385_ < _tmp386_)) {
 											break;
 										}
-										_tmp384_ = _node_list;
-										_tmp385_ = _node_index;
-										_tmp386_ = vala_list_get ((ValaList*) _tmp384_, _tmp385_);
-										node = (ValaGirParserNode*) _tmp386_;
-										_tmp387_ = node;
-										_tmp388_ = _tmp387_->symbol;
-										if (VALA_IS_METHOD (_tmp388_)) {
-											ValaGirParserNode* _tmp389_;
-											_tmp389_ = node;
-											_tmp389_->merged = TRUE;
+										_tmp387_ = _node_list;
+										_tmp388_ = _node_index;
+										_tmp389_ = vala_list_get ((ValaList*) _tmp387_, _tmp388_);
+										node = (ValaGirParserNode*) _tmp389_;
+										_tmp390_ = node;
+										_tmp391_ = _tmp390_->symbol;
+										if (VALA_IS_METHOD (_tmp391_)) {
+											ValaGirParserNode* _tmp392_;
+											_tmp392_ = node;
+											_tmp392_->merged = TRUE;
 										}
 										_vala_gir_parser_node_unref0 (node);
 									}
 									_vala_iterable_unref0 (_node_list);
 								}
 							}
-							_tmp390_ = prop;
-							_tmp391_ = vala_property_get_get_accessor (_tmp390_);
-							_tmp392_ = _tmp391_;
-							_tmp393_ = vala_property_accessor_get_value_type (_tmp392_);
-							_tmp394_ = _tmp393_;
-							_tmp395_ = m;
-							_tmp396_ = vala_method_get_return_type (_tmp395_);
+							_tmp393_ = prop;
+							_tmp394_ = vala_property_get_get_accessor (_tmp393_);
+							_tmp395_ = _tmp394_;
+							_tmp396_ = vala_property_accessor_get_value_type (_tmp395_);
 							_tmp397_ = _tmp396_;
-							_tmp398_ = vala_data_type_get_value_owned (_tmp397_);
-							_tmp399_ = _tmp398_;
-							vala_data_type_set_value_owned (_tmp394_, _tmp399_);
+							_tmp398_ = m;
+							_tmp399_ = vala_method_get_return_type (_tmp398_);
+							_tmp400_ = _tmp399_;
+							_tmp401_ = vala_data_type_get_value_owned (_tmp400_);
+							_tmp402_ = _tmp401_;
+							vala_data_type_set_value_owned (_tmp397_, _tmp402_);
 						}
 					} else {
-						ValaProperty* _tmp400_;
-						_tmp400_ = prop;
-						vala_code_node_set_attribute ((ValaCodeNode*) _tmp400_, "NoAccessorMethod", TRUE, NULL);
+						ValaProperty* _tmp403_;
+						_tmp403_ = prop;
+						vala_code_node_set_attribute ((ValaCodeNode*) _tmp403_, "NoAccessorMethod", TRUE, NULL);
 					}
 					_vala_code_node_unref0 (m);
 				}
-				_tmp403_ = prop;
-				_tmp404_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp403_, "NoAccessorMethod");
-				_tmp405_ = _tmp404_;
-				_tmp406_ = _tmp405_ == NULL;
-				_vala_code_node_unref0 (_tmp405_);
-				if (_tmp406_) {
-					ValaProperty* _tmp407_;
-					ValaPropertyAccessor* _tmp408_;
-					ValaPropertyAccessor* _tmp409_;
-					_tmp407_ = prop;
-					_tmp408_ = vala_property_get_set_accessor (_tmp407_);
-					_tmp409_ = _tmp408_;
-					_tmp402_ = _tmp409_ != NULL;
+				_tmp406_ = prop;
+				_tmp407_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp406_, "NoAccessorMethod");
+				_tmp408_ = _tmp407_;
+				_tmp409_ = _tmp408_ == NULL;
+				_vala_code_node_unref0 (_tmp408_);
+				if (_tmp409_) {
+					ValaProperty* _tmp410_;
+					ValaPropertyAccessor* _tmp411_;
+					ValaPropertyAccessor* _tmp412_;
+					_tmp410_ = prop;
+					_tmp411_ = vala_property_get_set_accessor (_tmp410_);
+					_tmp412_ = _tmp411_;
+					_tmp405_ = _tmp412_ != NULL;
 				} else {
-					_tmp402_ = FALSE;
+					_tmp405_ = FALSE;
 				}
-				_tmp410_ = _tmp402_;
-				if (_tmp410_) {
-					ValaProperty* _tmp411_;
-					ValaPropertyAccessor* _tmp412_;
-					ValaPropertyAccessor* _tmp413_;
-					gboolean _tmp414_;
-					gboolean _tmp415_;
-					_tmp411_ = prop;
-					_tmp412_ = vala_property_get_set_accessor (_tmp411_);
-					_tmp413_ = _tmp412_;
-					_tmp414_ = vala_property_accessor_get_writable (_tmp413_);
-					_tmp415_ = _tmp414_;
-					_tmp401_ = _tmp415_;
+				_tmp413_ = _tmp405_;
+				if (_tmp413_) {
+					ValaProperty* _tmp414_;
+					ValaPropertyAccessor* _tmp415_;
+					ValaPropertyAccessor* _tmp416_;
+					gboolean _tmp417_;
+					gboolean _tmp418_;
+					_tmp414_ = prop;
+					_tmp415_ = vala_property_get_set_accessor (_tmp414_);
+					_tmp416_ = _tmp415_;
+					_tmp417_ = vala_property_accessor_get_writable (_tmp416_);
+					_tmp418_ = _tmp417_;
+					_tmp404_ = _tmp418_;
 				} else {
-					_tmp401_ = FALSE;
+					_tmp404_ = FALSE;
 				}
-				_tmp416_ = _tmp401_;
-				if (_tmp416_) {
-					ValaMethod* _tmp417_ = NULL;
-					ValaGirParserNode* _tmp418_;
-					ValaMethod* _tmp421_;
-					ValaMethod* _tmp422_;
-					ValaMethod* m;
-					gboolean _tmp423_ = FALSE;
+				_tmp419_ = _tmp404_;
+				if (_tmp419_) {
+					ValaMethod* _tmp420_ = NULL;
+					ValaGirParserNode* _tmp421_;
 					ValaMethod* _tmp424_;
-					gboolean _tmp438_;
-					_tmp418_ = setter;
-					if (_tmp418_ != NULL) {
-						ValaGirParserNode* _tmp419_;
-						ValaSymbol* _tmp420_;
-						_tmp419_ = setter;
-						_tmp420_ = _tmp419_->symbol;
-						_tmp417_ = VALA_IS_METHOD (_tmp420_) ? ((ValaMethod*) _tmp420_) : NULL;
+					ValaMethod* _tmp425_;
+					ValaMethod* m;
+					gboolean _tmp426_ = FALSE;
+					ValaMethod* _tmp427_;
+					gboolean _tmp441_;
+					_tmp421_ = setter;
+					if (_tmp421_ != NULL) {
+						ValaGirParserNode* _tmp422_;
+						ValaSymbol* _tmp423_;
+						_tmp422_ = setter;
+						_tmp423_ = _tmp422_->symbol;
+						_tmp420_ = VALA_IS_METHOD (_tmp423_) ? ((ValaMethod*) _tmp423_) : NULL;
 					} else {
-						_tmp417_ = NULL;
+						_tmp420_ = NULL;
 					}
-					_tmp421_ = _tmp417_;
-					_tmp422_ = _vala_code_node_ref0 (_tmp421_);
-					m = _tmp422_;
-					_tmp424_ = m;
-					if (_tmp424_ != NULL) {
-						gboolean _tmp425_ = FALSE;
-						gboolean _tmp426_ = FALSE;
-						ValaMethod* _tmp427_;
-						gboolean _tmp428_;
-						gboolean _tmp429_;
-						gboolean _tmp433_;
-						gboolean _tmp437_;
-						_tmp427_ = m;
-						_tmp428_ = vala_method_get_is_abstract (_tmp427_);
-						_tmp429_ = _tmp428_;
-						if (_tmp429_) {
-							_tmp426_ = TRUE;
+					_tmp424_ = _tmp420_;
+					_tmp425_ = _vala_code_node_ref0 (_tmp424_);
+					m = _tmp425_;
+					_tmp427_ = m;
+					if (_tmp427_ != NULL) {
+						gboolean _tmp428_ = FALSE;
+						gboolean _tmp429_ = FALSE;
+						ValaMethod* _tmp430_;
+						gboolean _tmp431_;
+						gboolean _tmp432_;
+						gboolean _tmp436_;
+						gboolean _tmp440_;
+						_tmp430_ = m;
+						_tmp431_ = vala_method_get_is_abstract (_tmp430_);
+						_tmp432_ = _tmp431_;
+						if (_tmp432_) {
+							_tmp429_ = TRUE;
 						} else {
-							ValaMethod* _tmp430_;
-							gboolean _tmp431_;
-							gboolean _tmp432_;
-							_tmp430_ = m;
-							_tmp431_ = vala_method_get_is_virtual (_tmp430_);
-							_tmp432_ = _tmp431_;
-							_tmp426_ = _tmp432_;
+							ValaMethod* _tmp433_;
+							gboolean _tmp434_;
+							gboolean _tmp435_;
+							_tmp433_ = m;
+							_tmp434_ = vala_method_get_is_virtual (_tmp433_);
+							_tmp435_ = _tmp434_;
+							_tmp429_ = _tmp435_;
 						}
-						_tmp433_ = _tmp426_;
-						if (_tmp433_) {
-							_tmp425_ = TRUE;
+						_tmp436_ = _tmp429_;
+						if (_tmp436_) {
+							_tmp428_ = TRUE;
 						} else {
-							ValaProperty* _tmp434_;
-							gboolean _tmp435_;
-							gboolean _tmp436_;
-							_tmp434_ = prop;
-							_tmp435_ = vala_property_get_is_abstract (_tmp434_);
-							_tmp436_ = _tmp435_;
-							_tmp425_ = !_tmp436_;
+							ValaProperty* _tmp437_;
+							gboolean _tmp438_;
+							gboolean _tmp439_;
+							_tmp437_ = prop;
+							_tmp438_ = vala_property_get_is_abstract (_tmp437_);
+							_tmp439_ = _tmp438_;
+							_tmp428_ = !_tmp439_;
 						}
-						_tmp437_ = _tmp425_;
-						_tmp423_ = _tmp437_;
+						_tmp440_ = _tmp428_;
+						_tmp426_ = _tmp440_;
 					} else {
-						_tmp423_ = FALSE;
+						_tmp426_ = FALSE;
 					}
-					_tmp438_ = _tmp423_;
-					if (_tmp438_) {
-						ValaGirParserNode* _tmp439_;
-						ValaGirParser* _tmp440_;
-						gboolean _tmp441_ = FALSE;
-						ValaMethod* _tmp442_;
-						ValaDataType* _tmp443_;
-						ValaDataType* _tmp444_;
-						gboolean _tmp450_;
-						_tmp439_ = setter;
-						_tmp440_ = parser;
-						vala_gir_parser_node_process (_tmp439_, _tmp440_);
-						_tmp442_ = m;
-						_tmp443_ = vala_method_get_return_type (_tmp442_);
-						_tmp444_ = _tmp443_;
-						if (!VALA_IS_VOID_TYPE (_tmp444_)) {
-							_tmp441_ = TRUE;
+					_tmp441_ = _tmp426_;
+					if (_tmp441_) {
+						ValaGirParserNode* _tmp442_;
+						ValaGirParser* _tmp443_;
+						gboolean _tmp444_ = FALSE;
+						ValaMethod* _tmp445_;
+						ValaDataType* _tmp446_;
+						ValaDataType* _tmp447_;
+						gboolean _tmp453_;
+						_tmp442_ = setter;
+						_tmp443_ = parser;
+						vala_gir_parser_node_process (_tmp442_, _tmp443_);
+						_tmp445_ = m;
+						_tmp446_ = vala_method_get_return_type (_tmp445_);
+						_tmp447_ = _tmp446_;
+						if (!VALA_IS_VOID_TYPE (_tmp447_)) {
+							_tmp444_ = TRUE;
 						} else {
-							ValaMethod* _tmp445_;
-							ValaList* _tmp446_ = NULL;
-							ValaList* _tmp447_;
-							gint _tmp448_;
-							gint _tmp449_;
-							_tmp445_ = m;
-							_tmp446_ = vala_method_get_parameters (_tmp445_);
-							_tmp447_ = _tmp446_;
-							_tmp448_ = vala_collection_get_size ((ValaCollection*) _tmp447_);
-							_tmp449_ = _tmp448_;
-							_tmp441_ = _tmp449_ != 1;
-							_vala_iterable_unref0 (_tmp447_);
+							ValaMethod* _tmp448_;
+							ValaList* _tmp449_ = NULL;
+							ValaList* _tmp450_;
+							gint _tmp451_;
+							gint _tmp452_;
+							_tmp448_ = m;
+							_tmp449_ = vala_method_get_parameters (_tmp448_);
+							_tmp450_ = _tmp449_;
+							_tmp451_ = vala_collection_get_size ((ValaCollection*) _tmp450_);
+							_tmp452_ = _tmp451_;
+							_tmp444_ = _tmp452_ != 1;
+							_vala_iterable_unref0 (_tmp450_);
 						}
-						_tmp450_ = _tmp441_;
-						if (_tmp450_) {
-							ValaProperty* _tmp451_;
-							_tmp451_ = prop;
-							vala_code_node_set_attribute ((ValaCodeNode*) _tmp451_, "NoAccessorMethod", TRUE, NULL);
+						_tmp453_ = _tmp444_;
+						if (_tmp453_) {
+							ValaProperty* _tmp454_;
+							_tmp454_ = prop;
+							vala_code_node_set_attribute ((ValaCodeNode*) _tmp454_, "NoAccessorMethod", TRUE, NULL);
 						} else {
-							ValaProperty* _tmp452_;
-							ValaPropertyAccessor* _tmp453_;
-							ValaPropertyAccessor* _tmp454_;
-							ValaDataType* _tmp455_;
-							ValaDataType* _tmp456_;
-							ValaMethod* _tmp457_;
-							ValaList* _tmp458_ = NULL;
-							ValaList* _tmp459_;
-							gpointer _tmp460_ = NULL;
-							ValaParameter* _tmp461_;
-							ValaDataType* _tmp462_;
-							ValaDataType* _tmp463_;
-							gboolean _tmp464_;
-							gboolean _tmp465_;
-							_tmp452_ = prop;
-							_tmp453_ = vala_property_get_set_accessor (_tmp452_);
-							_tmp454_ = _tmp453_;
-							_tmp455_ = vala_property_accessor_get_value_type (_tmp454_);
-							_tmp456_ = _tmp455_;
-							_tmp457_ = m;
-							_tmp458_ = vala_method_get_parameters (_tmp457_);
+							ValaProperty* _tmp455_;
+							ValaPropertyAccessor* _tmp456_;
+							ValaPropertyAccessor* _tmp457_;
+							ValaDataType* _tmp458_;
+							ValaDataType* _tmp459_;
+							ValaMethod* _tmp460_;
+							ValaList* _tmp461_ = NULL;
+							ValaList* _tmp462_;
+							gpointer _tmp463_ = NULL;
+							ValaParameter* _tmp464_;
+							ValaDataType* _tmp465_;
+							ValaDataType* _tmp466_;
+							gboolean _tmp467_;
+							gboolean _tmp468_;
+							_tmp455_ = prop;
+							_tmp456_ = vala_property_get_set_accessor (_tmp455_);
+							_tmp457_ = _tmp456_;
+							_tmp458_ = vala_property_accessor_get_value_type (_tmp457_);
 							_tmp459_ = _tmp458_;
-							_tmp460_ = vala_list_get (_tmp459_, 0);
-							_tmp461_ = (ValaParameter*) _tmp460_;
-							_tmp462_ = vala_variable_get_variable_type ((ValaVariable*) _tmp461_);
-							_tmp463_ = _tmp462_;
-							_tmp464_ = vala_data_type_get_value_owned (_tmp463_);
-							_tmp465_ = _tmp464_;
-							vala_data_type_set_value_owned (_tmp456_, _tmp465_);
-							_vala_code_node_unref0 (_tmp461_);
-							_vala_iterable_unref0 (_tmp459_);
+							_tmp460_ = m;
+							_tmp461_ = vala_method_get_parameters (_tmp460_);
+							_tmp462_ = _tmp461_;
+							_tmp463_ = vala_list_get (_tmp462_, 0);
+							_tmp464_ = (ValaParameter*) _tmp463_;
+							_tmp465_ = vala_variable_get_variable_type ((ValaVariable*) _tmp464_);
+							_tmp466_ = _tmp465_;
+							_tmp467_ = vala_data_type_get_value_owned (_tmp466_);
+							_tmp468_ = _tmp467_;
+							vala_data_type_set_value_owned (_tmp459_, _tmp468_);
+							_vala_code_node_unref0 (_tmp464_);
+							_vala_iterable_unref0 (_tmp462_);
 						}
 					} else {
-						ValaProperty* _tmp466_;
-						_tmp466_ = prop;
-						vala_code_node_set_attribute ((ValaCodeNode*) _tmp466_, "NoAccessorMethod", TRUE, NULL);
+						ValaProperty* _tmp469_;
+						_tmp469_ = prop;
+						vala_code_node_set_attribute ((ValaCodeNode*) _tmp469_, "NoAccessorMethod", TRUE, NULL);
 					}
 					_vala_code_node_unref0 (m);
 				}
-				_tmp467_ = prop;
-				_tmp468_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp467_, "NoAccessorMethod");
-				_tmp469_ = _tmp468_;
-				_tmp470_ = _tmp469_ != NULL;
-				_vala_code_node_unref0 (_tmp469_);
-				if (_tmp470_) {
-					ValaProperty* _tmp471_;
-					ValaPropertyAccessor* _tmp472_;
-					ValaPropertyAccessor* _tmp473_;
-					ValaProperty* _tmp479_;
-					ValaPropertyAccessor* _tmp480_;
-					ValaPropertyAccessor* _tmp481_;
-					_tmp471_ = prop;
-					_tmp472_ = vala_property_get_get_accessor (_tmp471_);
-					_tmp473_ = _tmp472_;
-					if (_tmp473_ != NULL) {
-						ValaProperty* _tmp474_;
-						ValaPropertyAccessor* _tmp475_;
-						ValaPropertyAccessor* _tmp476_;
-						ValaDataType* _tmp477_;
-						ValaDataType* _tmp478_;
-						_tmp474_ = prop;
-						_tmp475_ = vala_property_get_get_accessor (_tmp474_);
-						_tmp476_ = _tmp475_;
-						_tmp477_ = vala_property_accessor_get_value_type (_tmp476_);
-						_tmp478_ = _tmp477_;
-						vala_data_type_set_value_owned (_tmp478_, TRUE);
+				_tmp470_ = prop;
+				_tmp471_ = vala_code_node_get_attribute ((ValaCodeNode*) _tmp470_, "NoAccessorMethod");
+				_tmp472_ = _tmp471_;
+				_tmp473_ = _tmp472_ != NULL;
+				_vala_code_node_unref0 (_tmp472_);
+				if (_tmp473_) {
+					ValaProperty* _tmp474_;
+					ValaPropertyAccessor* _tmp475_;
+					ValaPropertyAccessor* _tmp476_;
+					ValaProperty* _tmp482_;
+					ValaPropertyAccessor* _tmp483_;
+					ValaPropertyAccessor* _tmp484_;
+					_tmp474_ = prop;
+					_tmp475_ = vala_property_get_get_accessor (_tmp474_);
+					_tmp476_ = _tmp475_;
+					if (_tmp476_ != NULL) {
+						ValaProperty* _tmp477_;
+						ValaPropertyAccessor* _tmp478_;
+						ValaPropertyAccessor* _tmp479_;
+						ValaDataType* _tmp480_;
+						ValaDataType* _tmp481_;
+						_tmp477_ = prop;
+						_tmp478_ = vala_property_get_get_accessor (_tmp477_);
+						_tmp479_ = _tmp478_;
+						_tmp480_ = vala_property_accessor_get_value_type (_tmp479_);
+						_tmp481_ = _tmp480_;
+						vala_data_type_set_value_owned (_tmp481_, TRUE);
 					}
-					_tmp479_ = prop;
-					_tmp480_ = vala_property_get_set_accessor (_tmp479_);
-					_tmp481_ = _tmp480_;
-					if (_tmp481_ != NULL) {
-						ValaProperty* _tmp482_;
-						ValaPropertyAccessor* _tmp483_;
-						ValaPropertyAccessor* _tmp484_;
-						ValaDataType* _tmp485_;
-						ValaDataType* _tmp486_;
-						_tmp482_ = prop;
-						_tmp483_ = vala_property_get_set_accessor (_tmp482_);
-						_tmp484_ = _tmp483_;
-						_tmp485_ = vala_property_accessor_get_value_type (_tmp484_);
-						_tmp486_ = _tmp485_;
-						vala_data_type_set_value_owned (_tmp486_, FALSE);
+					_tmp482_ = prop;
+					_tmp483_ = vala_property_get_set_accessor (_tmp482_);
+					_tmp484_ = _tmp483_;
+					if (_tmp484_ != NULL) {
+						ValaProperty* _tmp485_;
+						ValaPropertyAccessor* _tmp486_;
+						ValaPropertyAccessor* _tmp487_;
+						ValaDataType* _tmp488_;
+						ValaDataType* _tmp489_;
+						_tmp485_ = prop;
+						_tmp486_ = vala_property_get_set_accessor (_tmp485_);
+						_tmp487_ = _tmp486_;
+						_tmp488_ = vala_property_accessor_get_value_type (_tmp487_);
+						_tmp489_ = _tmp488_;
+						vala_data_type_set_value_owned (_tmp489_, FALSE);
 					}
 				}
 				_vala_iterable_unref0 (setters);
@@ -18051,220 +18501,220 @@ static void vala_gir_parser_node_process (ValaGirParserNode* self, ValaGirParser
 				_vala_code_node_unref0 (prop);
 				_vala_iterable_unref0 (colliding);
 			} else {
-				ValaSymbol* _tmp487_;
-				_tmp487_ = self->symbol;
-				if (VALA_IS_FIELD (_tmp487_)) {
-					ValaSymbol* _tmp488_;
-					ValaField* _tmp489_;
+				ValaSymbol* _tmp490_;
+				_tmp490_ = self->symbol;
+				if (VALA_IS_FIELD (_tmp490_)) {
+					ValaSymbol* _tmp491_;
+					ValaField* _tmp492_;
 					ValaField* field;
-					ValaGirParserNode* _tmp490_;
-					const gchar* _tmp491_;
-					ValaArrayList* _tmp492_ = NULL;
+					ValaGirParserNode* _tmp493_;
+					const gchar* _tmp494_;
+					ValaArrayList* _tmp495_ = NULL;
 					ValaArrayList* colliding;
-					ValaArrayList* _tmp493_;
-					gint _tmp494_;
-					gint _tmp495_;
-					gboolean _tmp496_ = FALSE;
-					ValaField* _tmp497_;
-					ValaDataType* _tmp498_;
-					ValaDataType* _tmp499_;
-					gboolean _tmp502_;
-					_tmp488_ = self->symbol;
-					_tmp489_ = _vala_code_node_ref0 (VALA_FIELD (_tmp488_));
-					field = _tmp489_;
-					_tmp490_ = self->parent;
-					_tmp491_ = self->name;
-					_tmp492_ = vala_gir_parser_node_lookup_all (_tmp490_, _tmp491_);
-					colliding = _tmp492_;
-					_tmp493_ = colliding;
-					_tmp494_ = vala_collection_get_size ((ValaCollection*) _tmp493_);
-					_tmp495_ = _tmp494_;
-					if (_tmp495_ > 1) {
+					ValaArrayList* _tmp496_;
+					gint _tmp497_;
+					gint _tmp498_;
+					gboolean _tmp499_ = FALSE;
+					ValaField* _tmp500_;
+					ValaDataType* _tmp501_;
+					ValaDataType* _tmp502_;
+					gboolean _tmp505_;
+					_tmp491_ = self->symbol;
+					_tmp492_ = _vala_code_node_ref0 (VALA_FIELD (_tmp491_));
+					field = _tmp492_;
+					_tmp493_ = self->parent;
+					_tmp494_ = self->name;
+					_tmp495_ = vala_gir_parser_node_lookup_all (_tmp493_, _tmp494_);
+					colliding = _tmp495_;
+					_tmp496_ = colliding;
+					_tmp497_ = vala_collection_get_size ((ValaCollection*) _tmp496_);
+					_tmp498_ = _tmp497_;
+					if (_tmp498_ > 1) {
 						self->merged = TRUE;
 					}
-					_tmp497_ = field;
-					_tmp498_ = vala_variable_get_variable_type ((ValaVariable*) _tmp497_);
-					_tmp499_ = _tmp498_;
-					if (VALA_IS_DELEGATE_TYPE (_tmp499_)) {
-						ValaGirParserNode* _tmp500_;
-						ValaUnresolvedSymbol* _tmp501_;
-						_tmp500_ = self->parent;
-						_tmp501_ = _tmp500_->gtype_struct_for;
-						_tmp496_ = _tmp501_ != NULL;
+					_tmp500_ = field;
+					_tmp501_ = vala_variable_get_variable_type ((ValaVariable*) _tmp500_);
+					_tmp502_ = _tmp501_;
+					if (VALA_IS_DELEGATE_TYPE (_tmp502_)) {
+						ValaGirParserNode* _tmp503_;
+						ValaUnresolvedSymbol* _tmp504_;
+						_tmp503_ = self->parent;
+						_tmp504_ = _tmp503_->gtype_struct_for;
+						_tmp499_ = _tmp504_ != NULL;
 					} else {
-						_tmp496_ = FALSE;
+						_tmp499_ = FALSE;
 					}
-					_tmp502_ = _tmp496_;
-					if (_tmp502_) {
-						ValaField* _tmp503_;
-						ValaDataType* _tmp504_;
-						ValaDataType* _tmp505_;
-						ValaDelegate* _tmp506_;
-						ValaDelegate* _tmp507_;
-						ValaDelegate* _tmp508_;
-						ValaDelegate* d;
-						ValaGirParser* _tmp509_;
+					_tmp505_ = _tmp499_;
+					if (_tmp505_) {
+						ValaField* _tmp506_;
+						ValaDataType* _tmp507_;
+						ValaDataType* _tmp508_;
+						ValaDelegate* _tmp509_;
 						ValaDelegate* _tmp510_;
-						ValaGirParserNode* _tmp511_;
-						ValaUnresolvedSymbol* _tmp512_;
-						_tmp503_ = field;
-						_tmp504_ = vala_variable_get_variable_type ((ValaVariable*) _tmp503_);
-						_tmp505_ = _tmp504_;
-						_tmp506_ = vala_delegate_type_get_delegate_symbol (VALA_DELEGATE_TYPE (_tmp505_));
-						_tmp507_ = _tmp506_;
-						_tmp508_ = _vala_code_node_ref0 (_tmp507_);
-						d = _tmp508_;
-						_tmp509_ = parser;
-						_tmp510_ = d;
-						_tmp511_ = self->parent;
-						_tmp512_ = _tmp511_->gtype_struct_for;
-						vala_gir_parser_process_virtual_method_field (_tmp509_, self, _tmp510_, _tmp512_);
+						ValaDelegate* _tmp511_;
+						ValaDelegate* d;
+						ValaGirParser* _tmp512_;
+						ValaDelegate* _tmp513_;
+						ValaGirParserNode* _tmp514_;
+						ValaUnresolvedSymbol* _tmp515_;
+						_tmp506_ = field;
+						_tmp507_ = vala_variable_get_variable_type ((ValaVariable*) _tmp506_);
+						_tmp508_ = _tmp507_;
+						_tmp509_ = vala_delegate_type_get_delegate_symbol (VALA_DELEGATE_TYPE (_tmp508_));
+						_tmp510_ = _tmp509_;
+						_tmp511_ = _vala_code_node_ref0 (_tmp510_);
+						d = _tmp511_;
+						_tmp512_ = parser;
+						_tmp513_ = d;
+						_tmp514_ = self->parent;
+						_tmp515_ = _tmp514_->gtype_struct_for;
+						vala_gir_parser_process_virtual_method_field (_tmp512_, self, _tmp513_, _tmp515_);
 						self->merged = TRUE;
 						_vala_code_node_unref0 (d);
 					} else {
-						ValaField* _tmp513_;
-						ValaDataType* _tmp514_;
-						ValaDataType* _tmp515_;
-						_tmp513_ = field;
-						_tmp514_ = vala_variable_get_variable_type ((ValaVariable*) _tmp513_);
-						_tmp515_ = _tmp514_;
-						if (VALA_IS_ARRAY_TYPE (_tmp515_)) {
+						ValaField* _tmp516_;
+						ValaDataType* _tmp517_;
+						ValaDataType* _tmp518_;
+						_tmp516_ = field;
+						_tmp517_ = vala_variable_get_variable_type ((ValaVariable*) _tmp516_);
+						_tmp518_ = _tmp517_;
+						if (VALA_IS_ARRAY_TYPE (_tmp518_)) {
 							ValaGirParserNode* array_length = NULL;
-							ValaGirParserMetadata* _tmp516_;
-							gboolean _tmp517_ = FALSE;
-							gboolean _tmp538_ = FALSE;
-							ValaGirParserNode* _tmp539_;
-							gboolean _tmp542_;
-							_tmp516_ = self->metadata;
-							_tmp517_ = vala_gir_parser_metadata_has_argument (_tmp516_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_FIELD);
-							if (_tmp517_) {
-								ValaGirParserNode* _tmp518_;
-								ValaGirParserMetadata* _tmp519_;
-								gchar* _tmp520_ = NULL;
-								gchar* _tmp521_;
-								ValaGirParserNode* _tmp522_ = NULL;
-								_tmp518_ = self->parent;
-								_tmp519_ = self->metadata;
-								_tmp520_ = vala_gir_parser_metadata_get_string (_tmp519_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_FIELD);
-								_tmp521_ = _tmp520_;
-								_tmp522_ = vala_gir_parser_node_lookup (_tmp518_, _tmp521_, FALSE, NULL);
+							ValaGirParserMetadata* _tmp519_;
+							gboolean _tmp520_ = FALSE;
+							gboolean _tmp541_ = FALSE;
+							ValaGirParserNode* _tmp542_;
+							gboolean _tmp545_;
+							_tmp519_ = self->metadata;
+							_tmp520_ = vala_gir_parser_metadata_has_argument (_tmp519_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_FIELD);
+							if (_tmp520_) {
+								ValaGirParserNode* _tmp521_;
+								ValaGirParserMetadata* _tmp522_;
+								gchar* _tmp523_ = NULL;
+								gchar* _tmp524_;
+								ValaGirParserNode* _tmp525_ = NULL;
+								_tmp521_ = self->parent;
+								_tmp522_ = self->metadata;
+								_tmp523_ = vala_gir_parser_metadata_get_string (_tmp522_, VALA_GIR_PARSER_ARGUMENT_TYPE_ARRAY_LENGTH_FIELD);
+								_tmp524_ = _tmp523_;
+								_tmp525_ = vala_gir_parser_node_lookup (_tmp521_, _tmp524_, FALSE, NULL);
 								_vala_gir_parser_node_unref0 (array_length);
-								array_length = _tmp522_;
-								_g_free0 (_tmp521_);
+								array_length = _tmp525_;
+								_g_free0 (_tmp524_);
 							} else {
-								ValaGirParserNode* _tmp523_;
-								ValaField* _tmp524_;
-								const gchar* _tmp525_;
-								const gchar* _tmp526_;
-								gchar* _tmp527_ = NULL;
-								gchar* _tmp528_;
-								ValaGirParserNode* _tmp529_ = NULL;
-								ValaGirParserNode* _tmp530_;
-								_tmp523_ = self->parent;
-								_tmp524_ = field;
-								_tmp525_ = vala_symbol_get_name ((ValaSymbol*) _tmp524_);
-								_tmp526_ = _tmp525_;
-								_tmp527_ = g_strdup_printf ("n_%s", _tmp526_);
-								_tmp528_ = _tmp527_;
-								_tmp529_ = vala_gir_parser_node_lookup (_tmp523_, _tmp528_, FALSE, NULL);
+								ValaGirParserNode* _tmp526_;
+								ValaField* _tmp527_;
+								const gchar* _tmp528_;
+								const gchar* _tmp529_;
+								gchar* _tmp530_ = NULL;
+								gchar* _tmp531_;
+								ValaGirParserNode* _tmp532_ = NULL;
+								ValaGirParserNode* _tmp533_;
+								_tmp526_ = self->parent;
+								_tmp527_ = field;
+								_tmp528_ = vala_symbol_get_name ((ValaSymbol*) _tmp527_);
+								_tmp529_ = _tmp528_;
+								_tmp530_ = g_strdup_printf ("n_%s", _tmp529_);
+								_tmp531_ = _tmp530_;
+								_tmp532_ = vala_gir_parser_node_lookup (_tmp526_, _tmp531_, FALSE, NULL);
 								_vala_gir_parser_node_unref0 (array_length);
-								array_length = _tmp529_;
-								_g_free0 (_tmp528_);
-								_tmp530_ = array_length;
-								if (_tmp530_ == NULL) {
-									ValaGirParserNode* _tmp531_;
-									ValaField* _tmp532_;
-									const gchar* _tmp533_;
-									const gchar* _tmp534_;
-									gchar* _tmp535_ = NULL;
-									gchar* _tmp536_;
-									ValaGirParserNode* _tmp537_ = NULL;
-									_tmp531_ = self->parent;
-									_tmp532_ = field;
-									_tmp533_ = vala_symbol_get_name ((ValaSymbol*) _tmp532_);
-									_tmp534_ = _tmp533_;
-									_tmp535_ = g_strdup_printf ("%s_length", _tmp534_);
-									_tmp536_ = _tmp535_;
-									_tmp537_ = vala_gir_parser_node_lookup (_tmp531_, _tmp536_, FALSE, NULL);
+								array_length = _tmp532_;
+								_g_free0 (_tmp531_);
+								_tmp533_ = array_length;
+								if (_tmp533_ == NULL) {
+									ValaGirParserNode* _tmp534_;
+									ValaField* _tmp535_;
+									const gchar* _tmp536_;
+									const gchar* _tmp537_;
+									gchar* _tmp538_ = NULL;
+									gchar* _tmp539_;
+									ValaGirParserNode* _tmp540_ = NULL;
+									_tmp534_ = self->parent;
+									_tmp535_ = field;
+									_tmp536_ = vala_symbol_get_name ((ValaSymbol*) _tmp535_);
+									_tmp537_ = _tmp536_;
+									_tmp538_ = g_strdup_printf ("%s_length", _tmp537_);
+									_tmp539_ = _tmp538_;
+									_tmp540_ = vala_gir_parser_node_lookup (_tmp534_, _tmp539_, FALSE, NULL);
 									_vala_gir_parser_node_unref0 (array_length);
-									array_length = _tmp537_;
-									_g_free0 (_tmp536_);
+									array_length = _tmp540_;
+									_g_free0 (_tmp539_);
 								}
 							}
-							_tmp539_ = array_length;
-							if (_tmp539_ != NULL) {
-								ValaGirParserNode* _tmp540_;
-								ValaSymbol* _tmp541_;
-								_tmp540_ = array_length;
-								_tmp541_ = _tmp540_->symbol;
-								_tmp538_ = VALA_IS_FIELD (_tmp541_);
-							} else {
-								_tmp538_ = FALSE;
-							}
-							_tmp542_ = _tmp538_;
-							if (_tmp542_) {
+							_tmp542_ = array_length;
+							if (_tmp542_ != NULL) {
 								ValaGirParserNode* _tmp543_;
 								ValaSymbol* _tmp544_;
-								ValaField* _tmp545_;
+								_tmp543_ = array_length;
+								_tmp544_ = _tmp543_->symbol;
+								_tmp541_ = VALA_IS_FIELD (_tmp544_);
+							} else {
+								_tmp541_ = FALSE;
+							}
+							_tmp545_ = _tmp541_;
+							if (_tmp545_) {
+								ValaGirParserNode* _tmp546_;
+								ValaSymbol* _tmp547_;
+								ValaField* _tmp548_;
 								ValaField* length_field;
-								ValaField* _tmp546_;
-								ValaField* _tmp547_;
-								const gchar* _tmp548_;
-								const gchar* _tmp549_;
+								ValaField* _tmp549_;
 								ValaField* _tmp550_;
-								ValaDataType* _tmp551_;
-								ValaDataType* _tmp552_;
-								gchar* _tmp553_ = NULL;
+								const gchar* _tmp551_;
+								const gchar* _tmp552_;
+								ValaField* _tmp553_;
+								ValaDataType* _tmp554_;
+								ValaDataType* _tmp555_;
+								gchar* _tmp556_ = NULL;
 								gchar* length_type;
-								const gchar* _tmp554_;
-								ValaField* _tmp564_;
-								ValaField* _tmp565_;
-								_tmp543_ = array_length;
-								_tmp544_ = _tmp543_->symbol;
-								_tmp545_ = _vala_code_node_ref0 (VALA_FIELD (_tmp544_));
-								length_field = _tmp545_;
-								_tmp546_ = field;
-								_tmp547_ = length_field;
-								_tmp548_ = vala_symbol_get_name ((ValaSymbol*) _tmp547_);
-								_tmp549_ = _tmp548_;
-								vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp546_, "CCode", "array_length_cname", _tmp549_, NULL);
+								const gchar* _tmp557_;
+								ValaField* _tmp567_;
+								ValaField* _tmp568_;
+								_tmp546_ = array_length;
+								_tmp547_ = _tmp546_->symbol;
+								_tmp548_ = _vala_code_node_ref0 (VALA_FIELD (_tmp547_));
+								length_field = _tmp548_;
+								_tmp549_ = field;
 								_tmp550_ = length_field;
-								_tmp551_ = vala_variable_get_variable_type ((ValaVariable*) _tmp550_);
+								_tmp551_ = vala_symbol_get_name ((ValaSymbol*) _tmp550_);
 								_tmp552_ = _tmp551_;
-								_tmp553_ = vala_data_type_to_qualified_string (_tmp552_, NULL);
-								length_type = _tmp553_;
-								_tmp554_ = length_type;
-								if (g_strcmp0 (_tmp554_, "int") != 0) {
-									ValaGirParser* _tmp555_;
-									ValaGirParserNode* _tmp556_;
-									const gchar* _tmp557_;
-									ValaGirParserNode* _tmp558_ = NULL;
-									ValaGirParserNode* st;
+								vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp549_, "CCode", "array_length_cname", _tmp552_, NULL);
+								_tmp553_ = length_field;
+								_tmp554_ = vala_variable_get_variable_type ((ValaVariable*) _tmp553_);
+								_tmp555_ = _tmp554_;
+								_tmp556_ = vala_data_type_to_qualified_string (_tmp555_, NULL);
+								length_type = _tmp556_;
+								_tmp557_ = length_type;
+								if (g_strcmp0 (_tmp557_, "int") != 0) {
+									ValaGirParser* _tmp558_;
 									ValaGirParserNode* _tmp559_;
-									_tmp555_ = parser;
-									_tmp556_ = _tmp555_->priv->root;
-									_tmp557_ = length_type;
-									_tmp558_ = vala_gir_parser_node_lookup (_tmp556_, _tmp557_, FALSE, NULL);
-									st = _tmp558_;
-									_tmp559_ = st;
-									if (_tmp559_ != NULL) {
-										ValaField* _tmp560_;
-										ValaGirParserNode* _tmp561_;
-										gchar* _tmp562_ = NULL;
-										gchar* _tmp563_;
-										_tmp560_ = field;
-										_tmp561_ = st;
-										_tmp562_ = vala_gir_parser_node_get_cname (_tmp561_);
-										_tmp563_ = _tmp562_;
-										vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp560_, "CCode", "array_length_type", _tmp563_, NULL);
-										_g_free0 (_tmp563_);
+									const gchar* _tmp560_;
+									ValaGirParserNode* _tmp561_ = NULL;
+									ValaGirParserNode* st;
+									ValaGirParserNode* _tmp562_;
+									_tmp558_ = parser;
+									_tmp559_ = _tmp558_->priv->root;
+									_tmp560_ = length_type;
+									_tmp561_ = vala_gir_parser_node_lookup (_tmp559_, _tmp560_, FALSE, NULL);
+									st = _tmp561_;
+									_tmp562_ = st;
+									if (_tmp562_ != NULL) {
+										ValaField* _tmp563_;
+										ValaGirParserNode* _tmp564_;
+										gchar* _tmp565_ = NULL;
+										gchar* _tmp566_;
+										_tmp563_ = field;
+										_tmp564_ = st;
+										_tmp565_ = vala_gir_parser_node_get_cname (_tmp564_);
+										_tmp566_ = _tmp565_;
+										vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp563_, "CCode", "array_length_type", _tmp566_, NULL);
+										_g_free0 (_tmp566_);
 									}
 									_vala_gir_parser_node_unref0 (st);
 								}
-								_tmp564_ = field;
-								vala_code_node_remove_attribute_argument ((ValaCodeNode*) _tmp564_, "CCode", "array_length");
-								_tmp565_ = field;
-								vala_code_node_remove_attribute_argument ((ValaCodeNode*) _tmp565_, "CCode", "array_null_terminated");
+								_tmp567_ = field;
+								vala_code_node_remove_attribute_argument ((ValaCodeNode*) _tmp567_, "CCode", "array_length");
+								_tmp568_ = field;
+								vala_code_node_remove_attribute_argument ((ValaCodeNode*) _tmp568_, "CCode", "array_null_terminated");
 								_g_free0 (length_type);
 								_vala_code_node_unref0 (length_field);
 							}
@@ -18274,169 +18724,169 @@ static void vala_gir_parser_node_process (ValaGirParserNode* self, ValaGirParser
 					_vala_iterable_unref0 (colliding);
 					_vala_code_node_unref0 (field);
 				} else {
-					gboolean _tmp566_ = FALSE;
-					ValaSymbol* _tmp567_;
-					gboolean _tmp569_;
-					_tmp567_ = self->symbol;
-					if (VALA_IS_SIGNAL (_tmp567_)) {
-						_tmp566_ = TRUE;
-					} else {
-						ValaSymbol* _tmp568_;
-						_tmp568_ = self->symbol;
-						_tmp566_ = VALA_IS_DELEGATE (_tmp568_);
-					}
-					_tmp569_ = _tmp566_;
-					if (_tmp569_) {
-						ValaGirParser* _tmp570_;
-						_tmp570_ = parser;
-						vala_gir_parser_process_callable (_tmp570_, self);
+					gboolean _tmp569_ = FALSE;
+					ValaSymbol* _tmp570_;
+					gboolean _tmp572_;
+					_tmp570_ = self->symbol;
+					if (VALA_IS_SIGNAL (_tmp570_)) {
+						_tmp569_ = TRUE;
 					} else {
 						ValaSymbol* _tmp571_;
 						_tmp571_ = self->symbol;
-						if (VALA_IS_INTERFACE (_tmp571_)) {
-							ValaGirParser* _tmp572_;
-							_tmp572_ = parser;
-							vala_gir_parser_process_interface (_tmp572_, self);
+						_tmp569_ = VALA_IS_DELEGATE (_tmp571_);
+					}
+					_tmp572_ = _tmp569_;
+					if (_tmp572_) {
+						ValaGirParser* _tmp573_;
+						_tmp573_ = parser;
+						vala_gir_parser_process_callable (_tmp573_, self);
+					} else {
+						ValaSymbol* _tmp574_;
+						_tmp574_ = self->symbol;
+						if (VALA_IS_INTERFACE (_tmp574_)) {
+							ValaGirParser* _tmp575_;
+							_tmp575_ = parser;
+							vala_gir_parser_process_interface (_tmp575_, self);
 						} else {
-							ValaSymbol* _tmp573_;
-							_tmp573_ = self->symbol;
-							if (VALA_IS_STRUCT (_tmp573_)) {
-								gboolean _tmp574_ = FALSE;
-								ValaGirParserNode* _tmp575_;
-								ValaSymbol* _tmp576_;
-								gboolean _tmp579_;
-								_tmp575_ = self->parent;
-								_tmp576_ = _tmp575_->symbol;
-								if (VALA_IS_OBJECT_TYPE_SYMBOL (_tmp576_)) {
-									_tmp574_ = TRUE;
+							ValaSymbol* _tmp576_;
+							_tmp576_ = self->symbol;
+							if (VALA_IS_STRUCT (_tmp576_)) {
+								gboolean _tmp577_ = FALSE;
+								ValaGirParserNode* _tmp578_;
+								ValaSymbol* _tmp579_;
+								gboolean _tmp582_;
+								_tmp578_ = self->parent;
+								_tmp579_ = _tmp578_->symbol;
+								if (VALA_IS_OBJECT_TYPE_SYMBOL (_tmp579_)) {
+									_tmp577_ = TRUE;
 								} else {
-									ValaGirParserNode* _tmp577_;
-									ValaSymbol* _tmp578_;
-									_tmp577_ = self->parent;
-									_tmp578_ = _tmp577_->symbol;
-									_tmp574_ = VALA_IS_STRUCT (_tmp578_);
+									ValaGirParserNode* _tmp580_;
+									ValaSymbol* _tmp581_;
+									_tmp580_ = self->parent;
+									_tmp581_ = _tmp580_->symbol;
+									_tmp577_ = VALA_IS_STRUCT (_tmp581_);
 								}
-								_tmp579_ = _tmp574_;
-								if (_tmp579_) {
+								_tmp582_ = _tmp577_;
+								if (_tmp582_) {
 									{
-										ValaArrayList* _tmp580_;
-										ValaArrayList* _tmp581_;
+										ValaArrayList* _tmp583_;
+										ValaArrayList* _tmp584_;
 										ValaArrayList* _fn_list;
-										ValaArrayList* _tmp582_;
-										gint _tmp583_;
-										gint _tmp584_;
+										ValaArrayList* _tmp585_;
+										gint _tmp586_;
+										gint _tmp587_;
 										gint _fn_size;
 										gint _fn_index;
-										_tmp580_ = self->members;
-										_tmp581_ = _vala_iterable_ref0 (_tmp580_);
-										_fn_list = _tmp581_;
-										_tmp582_ = _fn_list;
-										_tmp583_ = vala_collection_get_size ((ValaCollection*) _tmp582_);
-										_tmp584_ = _tmp583_;
-										_fn_size = _tmp584_;
+										_tmp583_ = self->members;
+										_tmp584_ = _vala_iterable_ref0 (_tmp583_);
+										_fn_list = _tmp584_;
+										_tmp585_ = _fn_list;
+										_tmp586_ = vala_collection_get_size ((ValaCollection*) _tmp585_);
+										_tmp587_ = _tmp586_;
+										_fn_size = _tmp587_;
 										_fn_index = -1;
 										while (TRUE) {
-											gint _tmp585_;
-											gint _tmp586_;
-											gint _tmp587_;
-											ValaArrayList* _tmp588_;
+											gint _tmp588_;
 											gint _tmp589_;
-											gpointer _tmp590_ = NULL;
+											gint _tmp590_;
+											ValaArrayList* _tmp591_;
+											gint _tmp592_;
+											gpointer _tmp593_ = NULL;
 											ValaGirParserNode* fn;
-											ValaGirParserNode* _tmp591_;
-											ValaSymbol* _tmp592_;
-											ValaField* _tmp593_;
+											ValaGirParserNode* _tmp594_;
+											ValaSymbol* _tmp595_;
+											ValaField* _tmp596_;
 											ValaField* f;
-											ValaField* _tmp594_;
-											_tmp585_ = _fn_index;
-											_fn_index = _tmp585_ + 1;
-											_tmp586_ = _fn_index;
-											_tmp587_ = _fn_size;
-											if (!(_tmp586_ < _tmp587_)) {
+											ValaField* _tmp597_;
+											_tmp588_ = _fn_index;
+											_fn_index = _tmp588_ + 1;
+											_tmp589_ = _fn_index;
+											_tmp590_ = _fn_size;
+											if (!(_tmp589_ < _tmp590_)) {
 												break;
 											}
-											_tmp588_ = _fn_list;
-											_tmp589_ = _fn_index;
-											_tmp590_ = vala_list_get ((ValaList*) _tmp588_, _tmp589_);
-											fn = (ValaGirParserNode*) _tmp590_;
-											_tmp591_ = fn;
-											_tmp592_ = _tmp591_->symbol;
-											_tmp593_ = _vala_code_node_ref0 (VALA_IS_FIELD (_tmp592_) ? ((ValaField*) _tmp592_) : NULL);
-											f = _tmp593_;
-											_tmp594_ = f;
-											if (_tmp594_ != NULL) {
-												ValaField* _tmp595_;
-												ValaMemberBinding _tmp596_;
-												ValaMemberBinding _tmp597_;
-												ValaField* _tmp607_;
-												ValaSymbol* _tmp608_;
-												const gchar* _tmp609_;
-												const gchar* _tmp610_;
-												gchar* _tmp611_;
-												gchar* _tmp612_;
-												ValaField* _tmp613_;
-												const gchar* _tmp614_;
-												const gchar* _tmp615_;
-												gchar* _tmp616_;
-												gchar* _tmp617_;
-												ValaGirParserNode* _tmp618_;
-												ValaField* _tmp619_;
-												const gchar* _tmp620_;
-												const gchar* _tmp621_;
-												gchar* _tmp622_;
-												ValaGirParserNode* _tmp623_;
-												ValaGirParserNode* _tmp624_;
-												_tmp595_ = f;
-												_tmp596_ = vala_field_get_binding (_tmp595_);
-												_tmp597_ = _tmp596_;
-												if (_tmp597_ == VALA_MEMBER_BINDING_INSTANCE) {
-													ValaField* _tmp598_;
-													const gchar* _tmp599_;
-													gchar* _tmp600_;
-													gchar* _tmp601_;
-													ValaGirParserNode* _tmp602_;
-													gchar* _tmp603_ = NULL;
+											_tmp591_ = _fn_list;
+											_tmp592_ = _fn_index;
+											_tmp593_ = vala_list_get ((ValaList*) _tmp591_, _tmp592_);
+											fn = (ValaGirParserNode*) _tmp593_;
+											_tmp594_ = fn;
+											_tmp595_ = _tmp594_->symbol;
+											_tmp596_ = _vala_code_node_ref0 (VALA_IS_FIELD (_tmp595_) ? ((ValaField*) _tmp595_) : NULL);
+											f = _tmp596_;
+											_tmp597_ = f;
+											if (_tmp597_ != NULL) {
+												ValaField* _tmp598_;
+												ValaMemberBinding _tmp599_;
+												ValaMemberBinding _tmp600_;
+												ValaField* _tmp610_;
+												ValaSymbol* _tmp611_;
+												const gchar* _tmp612_;
+												const gchar* _tmp613_;
+												gchar* _tmp614_;
+												gchar* _tmp615_;
+												ValaField* _tmp616_;
+												const gchar* _tmp617_;
+												const gchar* _tmp618_;
+												gchar* _tmp619_;
+												gchar* _tmp620_;
+												ValaGirParserNode* _tmp621_;
+												ValaField* _tmp622_;
+												const gchar* _tmp623_;
+												const gchar* _tmp624_;
+												gchar* _tmp625_;
+												ValaGirParserNode* _tmp626_;
+												ValaGirParserNode* _tmp627_;
+												_tmp598_ = f;
+												_tmp599_ = vala_field_get_binding (_tmp598_);
+												_tmp600_ = _tmp599_;
+												if (_tmp600_ == VALA_MEMBER_BINDING_INSTANCE) {
+													ValaField* _tmp601_;
+													const gchar* _tmp602_;
+													gchar* _tmp603_;
 													gchar* _tmp604_;
-													gchar* _tmp605_;
-													gchar* _tmp606_;
-													_tmp598_ = f;
-													_tmp599_ = self->name;
-													_tmp600_ = g_strconcat (_tmp599_, ".", NULL);
-													_tmp601_ = _tmp600_;
-													_tmp602_ = fn;
-													_tmp603_ = vala_gir_parser_node_get_cname (_tmp602_);
+													ValaGirParserNode* _tmp605_;
+													gchar* _tmp606_ = NULL;
+													gchar* _tmp607_;
+													gchar* _tmp608_;
+													gchar* _tmp609_;
+													_tmp601_ = f;
+													_tmp602_ = self->name;
+													_tmp603_ = g_strconcat (_tmp602_, ".", NULL);
 													_tmp604_ = _tmp603_;
-													_tmp605_ = g_strconcat (_tmp601_, _tmp604_, NULL);
-													_tmp606_ = _tmp605_;
-													vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp598_, "CCode", "cname", _tmp606_, NULL);
-													_g_free0 (_tmp606_);
+													_tmp605_ = fn;
+													_tmp606_ = vala_gir_parser_node_get_cname (_tmp605_);
+													_tmp607_ = _tmp606_;
+													_tmp608_ = g_strconcat (_tmp604_, _tmp607_, NULL);
+													_tmp609_ = _tmp608_;
+													vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp601_, "CCode", "cname", _tmp609_, NULL);
+													_g_free0 (_tmp609_);
+													_g_free0 (_tmp607_);
 													_g_free0 (_tmp604_);
-													_g_free0 (_tmp601_);
 												}
-												_tmp607_ = f;
-												_tmp608_ = self->symbol;
-												_tmp609_ = vala_symbol_get_name (_tmp608_);
-												_tmp610_ = _tmp609_;
-												_tmp611_ = g_strconcat (_tmp610_, "_", NULL);
-												_tmp612_ = _tmp611_;
-												_tmp613_ = f;
-												_tmp614_ = vala_symbol_get_name ((ValaSymbol*) _tmp613_);
+												_tmp610_ = f;
+												_tmp611_ = self->symbol;
+												_tmp612_ = vala_symbol_get_name (_tmp611_);
+												_tmp613_ = _tmp612_;
+												_tmp614_ = g_strconcat (_tmp613_, "_", NULL);
 												_tmp615_ = _tmp614_;
-												_tmp616_ = g_strconcat (_tmp612_, _tmp615_, NULL);
-												_tmp617_ = _tmp616_;
-												vala_symbol_set_name ((ValaSymbol*) _tmp607_, _tmp617_);
-												_g_free0 (_tmp617_);
-												_g_free0 (_tmp612_);
-												_tmp618_ = fn;
-												_tmp619_ = f;
-												_tmp620_ = vala_symbol_get_name ((ValaSymbol*) _tmp619_);
-												_tmp621_ = _tmp620_;
-												_tmp622_ = g_strdup (_tmp621_);
-												_g_free0 (_tmp618_->name);
-												_tmp618_->name = _tmp622_;
-												_tmp623_ = self->parent;
-												_tmp624_ = fn;
-												vala_gir_parser_node_add_member (_tmp623_, _tmp624_);
+												_tmp616_ = f;
+												_tmp617_ = vala_symbol_get_name ((ValaSymbol*) _tmp616_);
+												_tmp618_ = _tmp617_;
+												_tmp619_ = g_strconcat (_tmp615_, _tmp618_, NULL);
+												_tmp620_ = _tmp619_;
+												vala_symbol_set_name ((ValaSymbol*) _tmp610_, _tmp620_);
+												_g_free0 (_tmp620_);
+												_g_free0 (_tmp615_);
+												_tmp621_ = fn;
+												_tmp622_ = f;
+												_tmp623_ = vala_symbol_get_name ((ValaSymbol*) _tmp622_);
+												_tmp624_ = _tmp623_;
+												_tmp625_ = g_strdup (_tmp624_);
+												_g_free0 (_tmp621_->name);
+												_tmp621_->name = _tmp625_;
+												_tmp626_ = self->parent;
+												_tmp627_ = fn;
+												vala_gir_parser_node_add_member (_tmp626_, _tmp627_);
 											}
 											_vala_code_node_unref0 (f);
 											_vala_gir_parser_node_unref0 (fn);
@@ -18445,86 +18895,86 @@ static void vala_gir_parser_node_process (ValaGirParserNode* self, ValaGirParser
 									}
 									self->merged = TRUE;
 								} else {
-									ValaMap* _tmp625_;
-									gpointer _tmp626_ = NULL;
+									ValaMap* _tmp628_;
+									gpointer _tmp629_ = NULL;
 									gchar* gtype_struct_for;
-									const gchar* _tmp627_;
-									_tmp625_ = self->girdata;
-									_tmp626_ = vala_map_get (_tmp625_, "glib:is-gtype-struct-for");
-									gtype_struct_for = (gchar*) _tmp626_;
-									_tmp627_ = gtype_struct_for;
-									if (_tmp627_ != NULL) {
-										ValaGirParser* _tmp628_;
-										ValaGirParserNode* _tmp629_;
-										ValaGirParser* _tmp630_;
-										const gchar* _tmp631_;
-										ValaSourceReference* _tmp632_;
-										ValaUnresolvedSymbol* _tmp633_ = NULL;
-										ValaUnresolvedSymbol* _tmp634_;
-										ValaGirParserNode* _tmp635_ = NULL;
-										ValaGirParserNode* _tmp636_;
-										ValaGirParserNode* iface;
-										gboolean _tmp637_ = FALSE;
-										gboolean _tmp638_ = FALSE;
+									const gchar* _tmp630_;
+									_tmp628_ = self->girdata;
+									_tmp629_ = vala_map_get (_tmp628_, "glib:is-gtype-struct-for");
+									gtype_struct_for = (gchar*) _tmp629_;
+									_tmp630_ = gtype_struct_for;
+									if (_tmp630_ != NULL) {
+										ValaGirParser* _tmp631_;
+										ValaGirParserNode* _tmp632_;
+										ValaGirParser* _tmp633_;
+										const gchar* _tmp634_;
+										ValaSourceReference* _tmp635_;
+										ValaUnresolvedSymbol* _tmp636_ = NULL;
+										ValaUnresolvedSymbol* _tmp637_;
+										ValaGirParserNode* _tmp638_ = NULL;
 										ValaGirParserNode* _tmp639_;
-										gboolean _tmp642_;
-										gboolean _tmp650_;
-										_tmp628_ = parser;
-										_tmp629_ = self->parent;
-										_tmp630_ = parser;
-										_tmp631_ = gtype_struct_for;
-										_tmp632_ = self->source_reference;
-										_tmp633_ = vala_gir_parser_parse_symbol_from_string (_tmp630_, _tmp631_, _tmp632_);
-										_tmp634_ = _tmp633_;
-										_tmp635_ = vala_gir_parser_resolve_node (_tmp628_, _tmp629_, _tmp634_, FALSE);
-										_tmp636_ = _tmp635_;
-										_vala_code_node_unref0 (_tmp634_);
-										iface = _tmp636_;
-										_tmp639_ = iface;
-										if (_tmp639_ != NULL) {
-											ValaGirParserNode* _tmp640_;
-											ValaSymbol* _tmp641_;
-											_tmp640_ = iface;
-											_tmp641_ = _tmp640_->symbol;
-											_tmp638_ = VALA_IS_INTERFACE (_tmp641_);
-										} else {
-											_tmp638_ = FALSE;
-										}
-										_tmp642_ = _tmp638_;
-										if (_tmp642_) {
+										ValaGirParserNode* iface;
+										gboolean _tmp640_ = FALSE;
+										gboolean _tmp641_ = FALSE;
+										ValaGirParserNode* _tmp642_;
+										gboolean _tmp645_;
+										gboolean _tmp653_;
+										_tmp631_ = parser;
+										_tmp632_ = self->parent;
+										_tmp633_ = parser;
+										_tmp634_ = gtype_struct_for;
+										_tmp635_ = self->source_reference;
+										_tmp636_ = vala_gir_parser_parse_symbol_from_string (_tmp633_, _tmp634_, _tmp635_);
+										_tmp637_ = _tmp636_;
+										_tmp638_ = vala_gir_parser_resolve_node (_tmp631_, _tmp632_, _tmp637_, FALSE);
+										_tmp639_ = _tmp638_;
+										_vala_code_node_unref0 (_tmp637_);
+										iface = _tmp639_;
+										_tmp642_ = iface;
+										if (_tmp642_ != NULL) {
 											ValaGirParserNode* _tmp643_;
-											gchar* _tmp644_ = NULL;
-											gchar* _tmp645_;
-											gchar* _tmp646_ = NULL;
-											gchar* _tmp647_;
-											gchar* _tmp648_ = NULL;
-											gchar* _tmp649_;
+											ValaSymbol* _tmp644_;
 											_tmp643_ = iface;
-											_tmp644_ = vala_gir_parser_node_get_cname (_tmp643_);
-											_tmp645_ = _tmp644_;
-											_tmp646_ = g_strdup_printf ("%sIface", _tmp645_);
-											_tmp647_ = _tmp646_;
-											_tmp648_ = vala_gir_parser_node_get_cname (self);
-											_tmp649_ = _tmp648_;
-											_tmp637_ = g_strcmp0 (_tmp647_, _tmp649_) != 0;
-											_g_free0 (_tmp649_);
-											_g_free0 (_tmp647_);
-											_g_free0 (_tmp645_);
+											_tmp644_ = _tmp643_->symbol;
+											_tmp641_ = VALA_IS_INTERFACE (_tmp644_);
 										} else {
-											_tmp637_ = FALSE;
+											_tmp641_ = FALSE;
 										}
-										_tmp650_ = _tmp637_;
-										if (_tmp650_) {
-											ValaGirParserNode* _tmp651_;
-											ValaSymbol* _tmp652_;
-											gchar* _tmp653_ = NULL;
-											gchar* _tmp654_;
-											_tmp651_ = iface;
-											_tmp652_ = _tmp651_->symbol;
-											_tmp653_ = vala_gir_parser_node_get_cname (self);
-											_tmp654_ = _tmp653_;
-											vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp652_, "CCode", "type_cname", _tmp654_, NULL);
-											_g_free0 (_tmp654_);
+										_tmp645_ = _tmp641_;
+										if (_tmp645_) {
+											ValaGirParserNode* _tmp646_;
+											gchar* _tmp647_ = NULL;
+											gchar* _tmp648_;
+											gchar* _tmp649_ = NULL;
+											gchar* _tmp650_;
+											gchar* _tmp651_ = NULL;
+											gchar* _tmp652_;
+											_tmp646_ = iface;
+											_tmp647_ = vala_gir_parser_node_get_cname (_tmp646_);
+											_tmp648_ = _tmp647_;
+											_tmp649_ = g_strdup_printf ("%sIface", _tmp648_);
+											_tmp650_ = _tmp649_;
+											_tmp651_ = vala_gir_parser_node_get_cname (self);
+											_tmp652_ = _tmp651_;
+											_tmp640_ = g_strcmp0 (_tmp650_, _tmp652_) != 0;
+											_g_free0 (_tmp652_);
+											_g_free0 (_tmp650_);
+											_g_free0 (_tmp648_);
+										} else {
+											_tmp640_ = FALSE;
+										}
+										_tmp653_ = _tmp640_;
+										if (_tmp653_) {
+											ValaGirParserNode* _tmp654_;
+											ValaSymbol* _tmp655_;
+											gchar* _tmp656_ = NULL;
+											gchar* _tmp657_;
+											_tmp654_ = iface;
+											_tmp655_ = _tmp654_->symbol;
+											_tmp656_ = vala_gir_parser_node_get_cname (self);
+											_tmp657_ = _tmp656_;
+											vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp655_, "CCode", "type_cname", _tmp657_, NULL);
+											_g_free0 (_tmp657_);
 										}
 										self->merged = TRUE;
 										_vala_gir_parser_node_unref0 (iface);
@@ -18537,345 +18987,345 @@ static void vala_gir_parser_node_process (ValaGirParserNode* self, ValaGirParser
 				}
 			}
 		}
-		_tmp655_ = self->metadata;
-		_tmp656_ = vala_gir_parser_metadata_has_argument (_tmp655_, VALA_GIR_PARSER_ARGUMENT_TYPE_REPLACEMENT);
-		if (_tmp656_) {
-			ValaSymbol* _tmp657_;
-			ValaGirParserMetadata* _tmp658_;
-			gchar* _tmp659_ = NULL;
-			gchar* _tmp660_;
-			_tmp657_ = self->symbol;
-			_tmp658_ = self->metadata;
-			_tmp659_ = vala_gir_parser_metadata_get_string (_tmp658_, VALA_GIR_PARSER_ARGUMENT_TYPE_REPLACEMENT);
-			_tmp660_ = _tmp659_;
-			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp657_, "Deprecated", "replacement", _tmp660_, NULL);
-			_g_free0 (_tmp660_);
+		_tmp658_ = self->metadata;
+		_tmp659_ = vala_gir_parser_metadata_has_argument (_tmp658_, VALA_GIR_PARSER_ARGUMENT_TYPE_REPLACEMENT);
+		if (_tmp659_) {
+			ValaSymbol* _tmp660_;
+			ValaGirParserMetadata* _tmp661_;
+			gchar* _tmp662_ = NULL;
+			gchar* _tmp663_;
+			_tmp660_ = self->symbol;
+			_tmp661_ = self->metadata;
+			_tmp662_ = vala_gir_parser_metadata_get_string (_tmp661_, VALA_GIR_PARSER_ARGUMENT_TYPE_REPLACEMENT);
+			_tmp663_ = _tmp662_;
+			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp660_, "Deprecated", "replacement", _tmp663_, NULL);
+			_g_free0 (_tmp663_);
 		}
-		_tmp661_ = self->metadata;
-		_tmp662_ = vala_gir_parser_metadata_has_argument (_tmp661_, VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED_SINCE);
-		if (_tmp662_) {
-			ValaSymbol* _tmp663_;
-			ValaGirParserMetadata* _tmp664_;
-			gchar* _tmp665_ = NULL;
-			gchar* _tmp666_;
-			_tmp663_ = self->symbol;
-			_tmp664_ = self->metadata;
-			_tmp665_ = vala_gir_parser_metadata_get_string (_tmp664_, VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED_SINCE);
-			_tmp666_ = _tmp665_;
-			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp663_, "Deprecated", "since", _tmp666_, NULL);
-			_g_free0 (_tmp666_);
-		} else {
-			ValaMap* _tmp667_;
-			gpointer _tmp668_ = NULL;
+		_tmp664_ = self->metadata;
+		_tmp665_ = vala_gir_parser_metadata_has_argument (_tmp664_, VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED_SINCE);
+		if (_tmp665_) {
+			ValaSymbol* _tmp666_;
+			ValaGirParserMetadata* _tmp667_;
+			gchar* _tmp668_ = NULL;
 			gchar* _tmp669_;
-			gboolean _tmp670_;
-			_tmp667_ = self->girdata;
-			_tmp668_ = vala_map_get (_tmp667_, "deprecated-version");
-			_tmp669_ = (gchar*) _tmp668_;
-			_tmp670_ = _tmp669_ != NULL;
+			_tmp666_ = self->symbol;
+			_tmp667_ = self->metadata;
+			_tmp668_ = vala_gir_parser_metadata_get_string (_tmp667_, VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED_SINCE);
+			_tmp669_ = _tmp668_;
+			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp666_, "Deprecated", "since", _tmp669_, NULL);
 			_g_free0 (_tmp669_);
-			if (_tmp670_) {
-				ValaSymbol* _tmp671_;
-				ValaMap* _tmp672_;
-				gpointer _tmp673_ = NULL;
-				gchar* _tmp674_;
-				_tmp671_ = self->symbol;
-				_tmp672_ = self->girdata;
-				_tmp673_ = vala_map_get (_tmp672_, "deprecated-version");
-				_tmp674_ = (gchar*) _tmp673_;
-				vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp671_, "Deprecated", "since", _tmp674_, NULL);
-				_g_free0 (_tmp674_);
+		} else {
+			ValaMap* _tmp670_;
+			gpointer _tmp671_ = NULL;
+			gchar* _tmp672_;
+			gboolean _tmp673_;
+			_tmp670_ = self->girdata;
+			_tmp671_ = vala_map_get (_tmp670_, "deprecated-version");
+			_tmp672_ = (gchar*) _tmp671_;
+			_tmp673_ = _tmp672_ != NULL;
+			_g_free0 (_tmp672_);
+			if (_tmp673_) {
+				ValaSymbol* _tmp674_;
+				ValaMap* _tmp675_;
+				gpointer _tmp676_ = NULL;
+				gchar* _tmp677_;
+				_tmp674_ = self->symbol;
+				_tmp675_ = self->girdata;
+				_tmp676_ = vala_map_get (_tmp675_, "deprecated-version");
+				_tmp677_ = (gchar*) _tmp676_;
+				vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp674_, "Deprecated", "since", _tmp677_, NULL);
+				_g_free0 (_tmp677_);
 			}
 		}
-		_tmp675_ = self->metadata;
-		_tmp676_ = vala_gir_parser_metadata_get_bool (_tmp675_, VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED, FALSE);
-		if (_tmp676_) {
-			ValaSymbol* _tmp677_;
-			_tmp677_ = self->symbol;
-			vala_code_node_set_attribute ((ValaCodeNode*) _tmp677_, "Deprecated", TRUE, NULL);
-		}
-		_tmp678_ = self->parent;
-		_tmp679_ = _tmp678_->symbol;
-		if (VALA_IS_NAMESPACE (_tmp679_)) {
+		_tmp678_ = self->metadata;
+		_tmp679_ = vala_gir_parser_metadata_get_bool (_tmp678_, VALA_GIR_PARSER_ARGUMENT_TYPE_DEPRECATED, FALSE);
+		if (_tmp679_) {
 			ValaSymbol* _tmp680_;
-			gchar* _tmp681_ = NULL;
-			gchar* _tmp682_;
 			_tmp680_ = self->symbol;
-			_tmp681_ = vala_gir_parser_node_get_cheader_filename (self);
-			_tmp682_ = _tmp681_;
-			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp680_, "CCode", "cheader_filename", _tmp682_, NULL);
-			_g_free0 (_tmp682_);
+			vala_code_node_set_attribute ((ValaCodeNode*) _tmp680_, "Deprecated", TRUE, NULL);
+		}
+		_tmp681_ = self->parent;
+		_tmp682_ = _tmp681_->symbol;
+		if (VALA_IS_NAMESPACE (_tmp682_)) {
+			ValaSymbol* _tmp683_;
+			gchar* _tmp684_ = NULL;
+			gchar* _tmp685_;
+			_tmp683_ = self->symbol;
+			_tmp684_ = vala_gir_parser_node_get_cheader_filename (self);
+			_tmp685_ = _tmp684_;
+			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp683_, "CCode", "cheader_filename", _tmp685_, NULL);
+			_g_free0 (_tmp685_);
 		} else {
-			ValaGirParserMetadata* _tmp683_;
-			gboolean _tmp684_ = FALSE;
-			_tmp683_ = self->metadata;
-			_tmp684_ = vala_gir_parser_metadata_has_argument (_tmp683_, VALA_GIR_PARSER_ARGUMENT_TYPE_CHEADER_FILENAME);
-			if (_tmp684_) {
-				ValaSymbol* _tmp685_;
-				ValaGirParserMetadata* _tmp686_;
-				gchar* _tmp687_ = NULL;
-				gchar* _tmp688_;
-				_tmp685_ = self->symbol;
-				_tmp686_ = self->metadata;
-				_tmp687_ = vala_gir_parser_metadata_get_string (_tmp686_, VALA_GIR_PARSER_ARGUMENT_TYPE_CHEADER_FILENAME);
-				_tmp688_ = _tmp687_;
-				vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp685_, "CCode", "cheader_filename", _tmp688_, NULL);
-				_g_free0 (_tmp688_);
+			ValaGirParserMetadata* _tmp686_;
+			gboolean _tmp687_ = FALSE;
+			_tmp686_ = self->metadata;
+			_tmp687_ = vala_gir_parser_metadata_has_argument (_tmp686_, VALA_GIR_PARSER_ARGUMENT_TYPE_CHEADER_FILENAME);
+			if (_tmp687_) {
+				ValaSymbol* _tmp688_;
+				ValaGirParserMetadata* _tmp689_;
+				gchar* _tmp690_ = NULL;
+				gchar* _tmp691_;
+				_tmp688_ = self->symbol;
+				_tmp689_ = self->metadata;
+				_tmp690_ = vala_gir_parser_metadata_get_string (_tmp689_, VALA_GIR_PARSER_ARGUMENT_TYPE_CHEADER_FILENAME);
+				_tmp691_ = _tmp690_;
+				vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp688_, "CCode", "cheader_filename", _tmp691_, NULL);
+				_g_free0 (_tmp691_);
 			}
 		}
-		_tmp689_ = vala_gir_parser_node_get_cname (self);
-		_tmp690_ = _tmp689_;
-		_tmp691_ = vala_gir_parser_node_get_default_cname (self);
-		_tmp692_ = _tmp691_;
-		_tmp693_ = g_strcmp0 (_tmp690_, _tmp692_) != 0;
-		_g_free0 (_tmp692_);
-		_g_free0 (_tmp690_);
-		if (_tmp693_) {
-			ValaSymbol* _tmp694_;
-			gchar* _tmp695_ = NULL;
-			gchar* _tmp696_;
-			_tmp694_ = self->symbol;
-			_tmp695_ = vala_gir_parser_node_get_cname (self);
-			_tmp696_ = _tmp695_;
-			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp694_, "CCode", "cname", _tmp696_, NULL);
-			_g_free0 (_tmp696_);
+		_tmp692_ = vala_gir_parser_node_get_cname (self);
+		_tmp693_ = _tmp692_;
+		_tmp694_ = vala_gir_parser_node_get_default_cname (self);
+		_tmp695_ = _tmp694_;
+		_tmp696_ = g_strcmp0 (_tmp693_, _tmp695_) != 0;
+		_g_free0 (_tmp695_);
+		_g_free0 (_tmp693_);
+		if (_tmp696_) {
+			ValaSymbol* _tmp697_;
+			gchar* _tmp698_ = NULL;
+			gchar* _tmp699_;
+			_tmp697_ = self->symbol;
+			_tmp698_ = vala_gir_parser_node_get_cname (self);
+			_tmp699_ = _tmp698_;
+			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp697_, "CCode", "cname", _tmp699_, NULL);
+			_g_free0 (_tmp699_);
 		}
-		_tmp697_ = vala_gir_parser_node_get_lower_case_cprefix (self);
-		_tmp698_ = _tmp697_;
-		_tmp699_ = vala_gir_parser_node_get_default_lower_case_cprefix (self);
-		_tmp700_ = _tmp699_;
-		_tmp701_ = g_strcmp0 (_tmp698_, _tmp700_) != 0;
-		_g_free0 (_tmp700_);
-		_g_free0 (_tmp698_);
-		if (_tmp701_) {
-			ValaSymbol* _tmp702_;
-			_tmp702_ = self->symbol;
-			if (VALA_IS_CLASS (_tmp702_)) {
-				ValaSymbol* _tmp703_;
-				gchar* _tmp704_ = NULL;
-				gchar* _tmp705_;
-				_tmp703_ = self->symbol;
-				_tmp704_ = vala_gir_parser_node_get_lower_case_cprefix (self);
-				_tmp705_ = _tmp704_;
-				vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp703_, "CCode", "cprefix", _tmp705_, NULL);
-				_g_free0 (_tmp705_);
-			} else {
+		_tmp700_ = vala_gir_parser_node_get_lower_case_cprefix (self);
+		_tmp701_ = _tmp700_;
+		_tmp702_ = vala_gir_parser_node_get_default_lower_case_cprefix (self);
+		_tmp703_ = _tmp702_;
+		_tmp704_ = g_strcmp0 (_tmp701_, _tmp703_) != 0;
+		_g_free0 (_tmp703_);
+		_g_free0 (_tmp701_);
+		if (_tmp704_) {
+			ValaSymbol* _tmp705_;
+			_tmp705_ = self->symbol;
+			if (VALA_IS_CLASS (_tmp705_)) {
 				ValaSymbol* _tmp706_;
 				gchar* _tmp707_ = NULL;
 				gchar* _tmp708_;
 				_tmp706_ = self->symbol;
 				_tmp707_ = vala_gir_parser_node_get_lower_case_cprefix (self);
 				_tmp708_ = _tmp707_;
-				vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp706_, "CCode", "lower_case_cprefix", _tmp708_, NULL);
+				vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp706_, "CCode", "cprefix", _tmp708_, NULL);
 				_g_free0 (_tmp708_);
+			} else {
+				ValaSymbol* _tmp709_;
+				gchar* _tmp710_ = NULL;
+				gchar* _tmp711_;
+				_tmp709_ = self->symbol;
+				_tmp710_ = vala_gir_parser_node_get_lower_case_cprefix (self);
+				_tmp711_ = _tmp710_;
+				vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp709_, "CCode", "lower_case_cprefix", _tmp711_, NULL);
+				_g_free0 (_tmp711_);
 			}
 		}
-		_tmp709_ = vala_gir_parser_node_get_lower_case_csuffix (self);
-		_tmp710_ = _tmp709_;
-		_tmp711_ = vala_gir_parser_node_get_default_lower_case_csuffix (self);
-		_tmp712_ = _tmp711_;
-		_tmp713_ = g_strcmp0 (_tmp710_, _tmp712_) != 0;
-		_g_free0 (_tmp712_);
-		_g_free0 (_tmp710_);
-		if (_tmp713_) {
-			ValaSymbol* _tmp714_;
-			gchar* _tmp715_ = NULL;
-			gchar* _tmp716_;
-			_tmp714_ = self->symbol;
-			_tmp715_ = vala_gir_parser_node_get_lower_case_csuffix (self);
-			_tmp716_ = _tmp715_;
-			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp714_, "CCode", "lower_case_csuffix", _tmp716_, NULL);
-			_g_free0 (_tmp716_);
+		_tmp712_ = vala_gir_parser_node_get_lower_case_csuffix (self);
+		_tmp713_ = _tmp712_;
+		_tmp714_ = vala_gir_parser_node_get_default_lower_case_csuffix (self);
+		_tmp715_ = _tmp714_;
+		_tmp716_ = g_strcmp0 (_tmp713_, _tmp715_) != 0;
+		_g_free0 (_tmp715_);
+		_g_free0 (_tmp713_);
+		if (_tmp716_) {
+			ValaSymbol* _tmp717_;
+			gchar* _tmp718_ = NULL;
+			gchar* _tmp719_;
+			_tmp717_ = self->symbol;
+			_tmp718_ = vala_gir_parser_node_get_lower_case_csuffix (self);
+			_tmp719_ = _tmp718_;
+			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp717_, "CCode", "lower_case_csuffix", _tmp719_, NULL);
+			_g_free0 (_tmp719_);
 		}
-		_tmp719_ = self->symbol;
-		_tmp720_ = vala_gir_parser_is_container (_tmp719_);
-		if (_tmp720_) {
-			ValaSymbol* _tmp721_;
-			_tmp721_ = self->symbol;
-			_tmp718_ = !VALA_IS_NAMESPACE (_tmp721_);
+		_tmp722_ = self->symbol;
+		_tmp723_ = vala_gir_parser_is_container (_tmp722_);
+		if (_tmp723_) {
+			ValaSymbol* _tmp724_;
+			_tmp724_ = self->symbol;
+			_tmp721_ = !VALA_IS_NAMESPACE (_tmp724_);
 		} else {
-			_tmp718_ = FALSE;
+			_tmp721_ = FALSE;
 		}
-		_tmp722_ = _tmp718_;
-		if (_tmp722_) {
-			const gchar* _tmp723_;
-			gchar* _tmp724_ = NULL;
-			gchar* _tmp725_;
-			_tmp723_ = self->name;
-			_tmp724_ = vala_gir_parser_node_get_gir_name (self);
-			_tmp725_ = _tmp724_;
-			_tmp717_ = g_strcmp0 (_tmp723_, _tmp725_) != 0;
-			_g_free0 (_tmp725_);
+		_tmp725_ = _tmp721_;
+		if (_tmp725_) {
+			const gchar* _tmp726_;
+			gchar* _tmp727_ = NULL;
+			gchar* _tmp728_;
+			_tmp726_ = self->name;
+			_tmp727_ = vala_gir_parser_node_get_gir_name (self);
+			_tmp728_ = _tmp727_;
+			_tmp720_ = g_strcmp0 (_tmp726_, _tmp728_) != 0;
+			_g_free0 (_tmp728_);
 		} else {
-			_tmp717_ = FALSE;
+			_tmp720_ = FALSE;
 		}
-		_tmp726_ = _tmp717_;
-		if (_tmp726_) {
-			ValaSymbol* _tmp727_;
-			gchar* _tmp728_ = NULL;
-			gchar* _tmp729_;
-			_tmp727_ = self->symbol;
-			_tmp728_ = vala_gir_parser_node_get_gir_name (self);
-			_tmp729_ = _tmp728_;
-			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp727_, "GIR", "name", _tmp729_, NULL);
-			_g_free0 (_tmp729_);
+		_tmp729_ = _tmp720_;
+		if (_tmp729_) {
+			ValaSymbol* _tmp730_;
+			gchar* _tmp731_ = NULL;
+			gchar* _tmp732_;
+			_tmp730_ = self->symbol;
+			_tmp731_ = vala_gir_parser_node_get_gir_name (self);
+			_tmp732_ = _tmp731_;
+			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp730_, "GIR", "name", _tmp732_, NULL);
+			_g_free0 (_tmp732_);
 		}
 	}
-	_tmp732_ = self->new_symbol;
-	if (_tmp732_) {
-		gboolean _tmp733_;
-		_tmp733_ = self->merged;
-		_tmp731_ = _tmp733_;
+	_tmp735_ = self->new_symbol;
+	if (_tmp735_) {
+		gboolean _tmp736_;
+		_tmp736_ = self->merged;
+		_tmp734_ = _tmp736_;
 	} else {
-		_tmp731_ = FALSE;
-	}
-	_tmp734_ = _tmp731_;
-	if (!_tmp734_) {
-		ValaSymbol* _tmp735_;
-		gboolean _tmp736_ = FALSE;
-		_tmp735_ = self->symbol;
-		_tmp736_ = vala_gir_parser_is_container (_tmp735_);
-		_tmp730_ = _tmp736_;
+		_tmp734_ = FALSE;
+	}
+	_tmp737_ = _tmp734_;
+	if (!_tmp737_) {
+		ValaSymbol* _tmp738_;
+		gboolean _tmp739_ = FALSE;
+		_tmp738_ = self->symbol;
+		_tmp739_ = vala_gir_parser_is_container (_tmp738_);
+		_tmp733_ = _tmp739_;
 	} else {
-		_tmp730_ = FALSE;
+		_tmp733_ = FALSE;
 	}
-	_tmp737_ = _tmp730_;
-	if (_tmp737_) {
-		ValaSymbol* _tmp762_;
-		ValaClass* _tmp763_;
-		ValaClass* cl;
-		gboolean _tmp764_ = FALSE;
-		gboolean _tmp765_ = FALSE;
+	_tmp740_ = _tmp733_;
+	if (_tmp740_) {
+		ValaSymbol* _tmp765_;
 		ValaClass* _tmp766_;
-		gboolean _tmp770_;
-		gboolean _tmp774_;
+		ValaClass* cl;
+		gboolean _tmp767_ = FALSE;
+		gboolean _tmp768_ = FALSE;
+		ValaClass* _tmp769_;
+		gboolean _tmp773_;
+		gboolean _tmp777_;
 		{
-			ValaArrayList* _tmp738_;
-			ValaArrayList* _tmp739_;
+			ValaArrayList* _tmp741_;
+			ValaArrayList* _tmp742_;
 			ValaArrayList* _node_list;
-			ValaArrayList* _tmp740_;
-			gint _tmp741_;
-			gint _tmp742_;
+			ValaArrayList* _tmp743_;
+			gint _tmp744_;
+			gint _tmp745_;
 			gint _node_size;
 			gint _node_index;
-			_tmp738_ = self->members;
-			_tmp739_ = _vala_iterable_ref0 (_tmp738_);
-			_node_list = _tmp739_;
-			_tmp740_ = _node_list;
-			_tmp741_ = vala_collection_get_size ((ValaCollection*) _tmp740_);
-			_tmp742_ = _tmp741_;
-			_node_size = _tmp742_;
+			_tmp741_ = self->members;
+			_tmp742_ = _vala_iterable_ref0 (_tmp741_);
+			_node_list = _tmp742_;
+			_tmp743_ = _node_list;
+			_tmp744_ = vala_collection_get_size ((ValaCollection*) _tmp743_);
+			_tmp745_ = _tmp744_;
+			_node_size = _tmp745_;
 			_node_index = -1;
 			while (TRUE) {
-				gint _tmp743_;
-				gint _tmp744_;
-				gint _tmp745_;
-				ValaArrayList* _tmp746_;
+				gint _tmp746_;
 				gint _tmp747_;
-				gpointer _tmp748_ = NULL;
+				gint _tmp748_;
+				ValaArrayList* _tmp749_;
+				gint _tmp750_;
+				gpointer _tmp751_ = NULL;
 				ValaGirParserNode* node;
-				gboolean _tmp749_ = FALSE;
-				gboolean _tmp750_ = FALSE;
-				ValaGirParserNode* _tmp751_;
-				gboolean _tmp752_;
+				gboolean _tmp752_ = FALSE;
+				gboolean _tmp753_ = FALSE;
+				ValaGirParserNode* _tmp754_;
 				gboolean _tmp755_;
 				gboolean _tmp758_;
-				_tmp743_ = _node_index;
-				_node_index = _tmp743_ + 1;
-				_tmp744_ = _node_index;
-				_tmp745_ = _node_size;
-				if (!(_tmp744_ < _tmp745_)) {
-					break;
-				}
-				_tmp746_ = _node_list;
+				gboolean _tmp761_;
+				_tmp746_ = _node_index;
+				_node_index = _tmp746_ + 1;
 				_tmp747_ = _node_index;
-				_tmp748_ = vala_list_get ((ValaList*) _tmp746_, _tmp747_);
-				node = (ValaGirParserNode*) _tmp748_;
-				_tmp751_ = node;
-				_tmp752_ = _tmp751_->new_symbol;
-				if (_tmp752_) {
-					ValaGirParserNode* _tmp753_;
-					gboolean _tmp754_;
-					_tmp753_ = node;
-					_tmp754_ = _tmp753_->merged;
-					_tmp750_ = !_tmp754_;
-				} else {
-					_tmp750_ = FALSE;
+				_tmp748_ = _node_size;
+				if (!(_tmp747_ < _tmp748_)) {
+					break;
 				}
-				_tmp755_ = _tmp750_;
+				_tmp749_ = _node_list;
+				_tmp750_ = _node_index;
+				_tmp751_ = vala_list_get ((ValaList*) _tmp749_, _tmp750_);
+				node = (ValaGirParserNode*) _tmp751_;
+				_tmp754_ = node;
+				_tmp755_ = _tmp754_->new_symbol;
 				if (_tmp755_) {
-					ValaGirParserMetadata* _tmp756_;
-					gboolean _tmp757_ = FALSE;
-					_tmp756_ = self->metadata;
-					_tmp757_ = vala_gir_parser_metadata_get_bool (_tmp756_, VALA_GIR_PARSER_ARGUMENT_TYPE_HIDDEN, FALSE);
-					_tmp749_ = !_tmp757_;
+					ValaGirParserNode* _tmp756_;
+					gboolean _tmp757_;
+					_tmp756_ = node;
+					_tmp757_ = _tmp756_->merged;
+					_tmp753_ = !_tmp757_;
 				} else {
-					_tmp749_ = FALSE;
+					_tmp753_ = FALSE;
 				}
-				_tmp758_ = _tmp749_;
+				_tmp758_ = _tmp753_;
 				if (_tmp758_) {
-					ValaSymbol* _tmp759_;
-					ValaGirParserNode* _tmp760_;
-					ValaSymbol* _tmp761_;
-					_tmp759_ = self->symbol;
-					_tmp760_ = node;
-					_tmp761_ = _tmp760_->symbol;
-					vala_gir_parser_add_symbol_to_container (_tmp759_, _tmp761_);
+					ValaGirParserMetadata* _tmp759_;
+					gboolean _tmp760_ = FALSE;
+					_tmp759_ = self->metadata;
+					_tmp760_ = vala_gir_parser_metadata_get_bool (_tmp759_, VALA_GIR_PARSER_ARGUMENT_TYPE_HIDDEN, FALSE);
+					_tmp752_ = !_tmp760_;
+				} else {
+					_tmp752_ = FALSE;
+				}
+				_tmp761_ = _tmp752_;
+				if (_tmp761_) {
+					ValaSymbol* _tmp762_;
+					ValaGirParserNode* _tmp763_;
+					ValaSymbol* _tmp764_;
+					_tmp762_ = self->symbol;
+					_tmp763_ = node;
+					_tmp764_ = _tmp763_->symbol;
+					vala_gir_parser_add_symbol_to_container (_tmp762_, _tmp764_);
 				}
 				_vala_gir_parser_node_unref0 (node);
 			}
 			_vala_iterable_unref0 (_node_list);
 		}
-		_tmp762_ = self->symbol;
-		_tmp763_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp762_) ? ((ValaClass*) _tmp762_) : NULL);
-		cl = _tmp763_;
-		_tmp766_ = cl;
-		if (_tmp766_ != NULL) {
-			ValaClass* _tmp767_;
-			gboolean _tmp768_;
-			gboolean _tmp769_;
-			_tmp767_ = cl;
-			_tmp768_ = vala_class_get_is_compact (_tmp767_);
-			_tmp769_ = _tmp768_;
-			_tmp765_ = !_tmp769_;
+		_tmp765_ = self->symbol;
+		_tmp766_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp765_) ? ((ValaClass*) _tmp765_) : NULL);
+		cl = _tmp766_;
+		_tmp769_ = cl;
+		if (_tmp769_ != NULL) {
+			ValaClass* _tmp770_;
+			gboolean _tmp771_;
+			gboolean _tmp772_;
+			_tmp770_ = cl;
+			_tmp771_ = vala_class_get_is_compact (_tmp770_);
+			_tmp772_ = _tmp771_;
+			_tmp768_ = !_tmp772_;
 		} else {
-			_tmp765_ = FALSE;
+			_tmp768_ = FALSE;
 		}
-		_tmp770_ = _tmp765_;
-		if (_tmp770_) {
-			ValaClass* _tmp771_;
-			ValaMethod* _tmp772_;
-			ValaMethod* _tmp773_;
-			_tmp771_ = cl;
-			_tmp772_ = vala_class_get_default_construction_method (_tmp771_);
-			_tmp773_ = _tmp772_;
-			_tmp764_ = _tmp773_ == NULL;
+		_tmp773_ = _tmp768_;
+		if (_tmp773_) {
+			ValaClass* _tmp774_;
+			ValaMethod* _tmp775_;
+			ValaMethod* _tmp776_;
+			_tmp774_ = cl;
+			_tmp775_ = vala_class_get_default_construction_method (_tmp774_);
+			_tmp776_ = _tmp775_;
+			_tmp767_ = _tmp776_ == NULL;
 		} else {
-			_tmp764_ = FALSE;
+			_tmp767_ = FALSE;
 		}
-		_tmp774_ = _tmp764_;
-		if (_tmp774_) {
-			ValaClass* _tmp775_;
-			ValaSourceReference* _tmp776_;
-			ValaSourceReference* _tmp777_;
-			ValaCreationMethod* _tmp778_;
+		_tmp777_ = _tmp767_;
+		if (_tmp777_) {
+			ValaClass* _tmp778_;
+			ValaSourceReference* _tmp779_;
+			ValaSourceReference* _tmp780_;
+			ValaCreationMethod* _tmp781_;
 			ValaCreationMethod* cm;
-			ValaCreationMethod* _tmp779_;
-			ValaCreationMethod* _tmp780_;
-			ValaClass* _tmp781_;
 			ValaCreationMethod* _tmp782_;
-			_tmp775_ = cl;
-			_tmp776_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp775_);
-			_tmp777_ = _tmp776_;
-			_tmp778_ = vala_creation_method_new (NULL, NULL, _tmp777_, NULL);
-			cm = _tmp778_;
-			_tmp779_ = cm;
-			vala_method_set_has_construct_function ((ValaMethod*) _tmp779_, FALSE);
-			_tmp780_ = cm;
-			vala_symbol_set_access ((ValaSymbol*) _tmp780_, VALA_SYMBOL_ACCESSIBILITY_PROTECTED);
-			_tmp781_ = cl;
+			ValaCreationMethod* _tmp783_;
+			ValaClass* _tmp784_;
+			ValaCreationMethod* _tmp785_;
+			_tmp778_ = cl;
+			_tmp779_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp778_);
+			_tmp780_ = _tmp779_;
+			_tmp781_ = vala_creation_method_new (NULL, NULL, _tmp780_, NULL);
+			cm = _tmp781_;
 			_tmp782_ = cm;
-			vala_symbol_add_method ((ValaSymbol*) _tmp781_, (ValaMethod*) _tmp782_);
+			vala_method_set_has_construct_function ((ValaMethod*) _tmp782_, FALSE);
+			_tmp783_ = cm;
+			vala_symbol_set_access ((ValaSymbol*) _tmp783_, VALA_SYMBOL_ACCESSIBILITY_PROTECTED);
+			_tmp784_ = cl;
+			_tmp785_ = cm;
+			vala_symbol_add_method ((ValaSymbol*) _tmp784_, (ValaMethod*) _tmp785_);
 			_vala_code_node_unref0 (cm);
 		}
 		_vala_code_node_unref0 (cl);
@@ -19078,6 +19528,7 @@ static void vala_gir_parser_node_finalize (ValaGirParserNode* obj) {
 	_vala_source_reference_unref0 (self->source_reference);
 	_vala_iterable_unref0 (self->members);
 	_vala_map_unref0 (self->scope);
+	_vala_comment_unref0 (self->comment);
 	_vala_code_node_unref0 (self->symbol);
 	_vala_iterable_unref0 (self->parameters);
 	_vala_iterable_unref0 (self->array_length_parameters);
diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala
index 1908a05..530470c 100644
--- a/vala/valagirparser.vala
+++ b/vala/valagirparser.vala
@@ -69,7 +69,8 @@ public class Vala.GirParser : CodeVisitor {
 		CLOSURE,
 		CPREFIX,
 		LOWER_CASE_CPREFIX,
-		ERRORDOMAIN;
+		ERRORDOMAIN,
+		DESTROYS_INSTANCE;
 
 		public static ArgumentType? from_string (string name) {
 			var enum_class = (EnumClass) typeof(ArgumentType).class_ref ();
@@ -489,6 +490,7 @@ public class Vala.GirParser : CodeVisitor {
 		public ArrayList<Node> members = new ArrayList<Node> (); // guarantees fields order
 		public HashMap<string, ArrayList<Node>> scope = new HashMap<string, ArrayList<Node>> (str_hash, str_equal);
 
+		public GirComment comment;
 		public Symbol symbol;
 		public bool new_symbol;
 		public bool merged;
@@ -798,6 +800,9 @@ public class Vala.GirParser : CodeVisitor {
 						}
 					}
 					if (!(m is CreationMethod)) {
+						if (metadata.has_argument (ArgumentType.DESTROYS_INSTANCE)) {
+							m.set_attribute ("DestroysInstance", true);
+						}
 						// merge custom vfunc
 						if (metadata.has_argument (ArgumentType.VFUNC_NAME)) {
 							var vfunc = parent.lookup (metadata.get_string (ArgumentType.VFUNC_NAME));
@@ -1168,10 +1173,6 @@ public class Vala.GirParser : CodeVisitor {
 
 	void next () {
 		current_token = reader.read_token (out begin, out end);
-
-		// Skip *all* <doc> tags
-		if (current_token == MarkupTokenType.START_ELEMENT && reader.name == "doc")
-			skip_element();
 	}
 
 	void start_element (string name) {
@@ -1925,6 +1926,13 @@ public class Vala.GirParser : CodeVisitor {
 		// not enough information, symbol will be created while processing the tree
 
 		next ();
+
+		if (current.comment == null) {
+			current.comment = parse_symbol_doc ();
+		} else {
+			parse_symbol_doc ();
+		}
+
 		bool no_array_length = false;
 		current.base_type = element_get_type (parse_type (null, null, true), true, ref no_array_length);
 
@@ -1932,7 +1940,7 @@ public class Vala.GirParser : CodeVisitor {
 		end_element ("alias");
 	}
 
-	private void calculate_common_prefix (ref string common_prefix, string cname) {
+	private void calculate_common_prefix (ref string? common_prefix, string cname) {
 		if (common_prefix == null) {
 			common_prefix = cname;
 			while (common_prefix.length > 0 && !common_prefix.has_suffix ("_")) {
@@ -1951,6 +1959,44 @@ public class Vala.GirParser : CodeVisitor {
 		}
 	}
 
+	GirComment? parse_symbol_doc () {
+		if (reader.name != "doc") {
+			return null;
+		}
+
+		start_element ("doc");
+		next ();
+
+		GirComment? comment = null;
+
+		if (current_token == MarkupTokenType.TEXT) {
+			comment = new GirComment (reader.content, current.source_reference);
+			next ();
+		}
+
+		end_element ("doc");
+		return comment;
+	}
+
+	Comment? parse_doc () {
+		if (reader.name != "doc") {
+			return null;
+		}
+
+		start_element ("doc");
+		next ();
+
+		Comment? comment = null;
+
+		if (current_token == MarkupTokenType.TEXT) {
+			comment = new Comment (reader.content, current.source_reference);
+			next ();
+		}
+
+		end_element ("doc");
+		return comment;
+	}
+
 	void parse_enumeration (string element_name = "enumeration", bool error_domain = false) {
 		start_element (element_name);
 		push_node (element_get_name (), true);
@@ -1976,7 +2022,9 @@ public class Vala.GirParser : CodeVisitor {
 		string common_prefix = null;
 
 		next ();
-		
+
+		sym.comment = parse_symbol_doc ();
+
 		while (current_token == MarkupTokenType.START_ELEMENT) {
 			if (!push_metadata ()) {
 				skip_element ();
@@ -2026,6 +2074,8 @@ public class Vala.GirParser : CodeVisitor {
 		current.symbol = ev;
 		next ();
 
+		ev.comment = parse_symbol_doc ();
+
 		pop_node ();
 		end_element ("member");
 	}
@@ -2044,16 +2094,21 @@ public class Vala.GirParser : CodeVisitor {
 		current.symbol = ec;
 		next ();
 
+		ec.comment = parse_symbol_doc ();
+
 		pop_node ();
 		end_element ("member");
 	}
 
-	DataType parse_return_value (out string? ctype = null, out int array_length_idx = null, out bool no_array_length = null, out bool array_null_terminated = null) {
+	DataType parse_return_value (out string? ctype = null, out int array_length_idx = null, out bool no_array_length = null, out bool array_null_terminated = null, out Comment? comment = null) {
 		start_element ("return-value");
 
 		string transfer = reader.get_attribute ("transfer-ownership");
 		string allow_none = reader.get_attribute ("allow-none");
 		next ();
+
+		comment = parse_doc ();
+
 		var transfer_elements = transfer != "container";
 		var type = parse_type (out ctype, out array_length_idx, transfer_elements, out no_array_length, out array_null_terminated);
 		if (transfer == "full" || transfer == "container") {
@@ -2067,7 +2122,7 @@ public class Vala.GirParser : CodeVisitor {
 		return type;
 	}
 
-	Parameter parse_parameter (out int array_length_idx = null, out int closure_idx = null, out int destroy_idx = null, out string? scope = null, string? default_name = null) {
+	Parameter parse_parameter (out int array_length_idx = null, out int closure_idx = null, out int destroy_idx = null, out string? scope = null, out Comment? comment, string? default_name = null) {
 		Parameter param;
 
 		array_length_idx = -1;
@@ -2109,6 +2164,9 @@ public class Vala.GirParser : CodeVisitor {
 		}
 
 		next ();
+
+		comment = parse_doc ();
+
 		if (reader.name == "varargs") {
 			start_element ("varargs");
 			next ();
@@ -2352,6 +2410,9 @@ public class Vala.GirParser : CodeVisitor {
 
 		bool first_field = true;
 		next ();
+
+		st.comment = parse_symbol_doc ();
+
 		while (current_token == MarkupTokenType.START_ELEMENT) {
 			if (!push_metadata ()) {
 				if (first_field && reader.name == "field") {
@@ -2398,7 +2459,7 @@ public class Vala.GirParser : CodeVisitor {
 		if (current.new_symbol) {
 			cl = new Class (current.name, current.source_reference);
 			cl.set_attribute_string ("CCode", "type_id", "%s ()".printf (reader.get_attribute ("glib:get-type")));
-			cl.is_abstract = reader.get_attribute ("abstract") == "1";
+			cl.is_abstract = metadata.get_bool (ArgumentType.ABSTRACT, reader.get_attribute ("abstract") == "1");
 
 			if (parent != null) {
 				cl.add_base_type (parse_type_from_gir_name (parent));
@@ -2411,6 +2472,9 @@ public class Vala.GirParser : CodeVisitor {
 		cl.external = true;
 
 		next ();
+
+		cl.comment = parse_symbol_doc ();
+
 		var first_field = true;
 		while (current_token == MarkupTokenType.START_ELEMENT) {
 			if (!push_metadata ()) {
@@ -2489,6 +2553,9 @@ public class Vala.GirParser : CodeVisitor {
 
 
 		next ();
+
+		iface.comment = parse_symbol_doc ();
+
 		while (current_token == MarkupTokenType.START_ELEMENT) {
 			if (!push_metadata ()) {
 				skip_element ();
@@ -2531,12 +2598,16 @@ public class Vala.GirParser : CodeVisitor {
 
 		string allow_none = reader.get_attribute ("allow-none");
 		next ();
+
+		var comment = parse_symbol_doc ();
+
 		var type = parse_type ();
 		bool no_array_length = true;
 		type = element_get_type (type, true, ref no_array_length);
 
 		var field = new Field (current.name, type, null, current.source_reference);
 		field.access = SymbolAccessibility.PUBLIC;
+		field.comment = comment;
 		if (type is ArrayType) {
 			if (no_array_length) {
 				field.set_attribute_bool ("CCode", "array_length", false);
@@ -2555,18 +2626,21 @@ public class Vala.GirParser : CodeVisitor {
 	Property parse_property () {
 		start_element ("property");
 		push_node (element_get_name().replace ("-", "_"), false);
+		bool is_abstract = metadata.get_bool (ArgumentType.ABSTRACT, current.parent.symbol is Interface);
 
 		next ();
+
+		var comment = parse_symbol_doc ();
+
 		bool no_array_length;
 		bool array_null_terminated;
 		var type = parse_type (null, null, false, out no_array_length, out array_null_terminated);
 		type = element_get_type (type, true, ref no_array_length);
 		var prop = new Property (current.name, type, null, null, current.source_reference);
+		prop.comment = comment;
 		prop.access = SymbolAccessibility.PUBLIC;
 		prop.external = true;
-		if (current.parent.symbol is Interface) {
-			prop.is_abstract = true;
-		}
+		prop.is_abstract = is_abstract;
 		if (no_array_length) {
 			prop.set_attribute_bool ("CCode", "array_length", false);
 		}
@@ -2615,13 +2689,23 @@ public class Vala.GirParser : CodeVisitor {
 		string invoker = reader.get_attribute ("invoker");
 
 		next ();
+
+		var comment = parse_symbol_doc ();
+
 		DataType return_type;
 		string return_ctype = null;
 		int return_array_length_idx = -1;
 		bool return_no_array_length = false;
 		bool return_array_null_terminated = false;
 		if (current_token == MarkupTokenType.START_ELEMENT && reader.name == "return-value") {
-			return_type = parse_return_value (out return_ctype, out return_array_length_idx, out return_no_array_length, out return_array_null_terminated);
+			Comment? return_comment;
+			return_type = parse_return_value (out return_ctype, out return_array_length_idx, out return_no_array_length, out return_array_null_terminated, out return_comment);
+			if (return_comment != null) {
+				if (comment == null) {
+					comment = new GirComment (null, current.source_reference);
+				}
+				comment.return_content = return_comment;
+			}
 		} else {
 			return_type = new VoidType ();
 		}
@@ -2655,6 +2739,7 @@ public class Vala.GirParser : CodeVisitor {
 		}
 
 		s.access = SymbolAccessibility.PUBLIC;
+		s.comment = comment;
 		s.external = true;
 
 		if (s is Method) {
@@ -2667,10 +2752,8 @@ public class Vala.GirParser : CodeVisitor {
 				}
 				if (invoker == null && !metadata.has_argument (ArgumentType.VFUNC_NAME)) {
 					s.set_attribute ("NoWrapper", true, s.source_reference);
-				} else {
-					if (current.girdata["name"] != name) {
-						m.set_attribute_string ("CCode", "vfunc_name", current.girdata["name"]);
-					}
+				} if (current.girdata["name"] != name) {
+					m.set_attribute_string ("CCode", "vfunc_name", current.girdata["name"]);
 				}
 			} else if (element_name == "function") {
 				m.binding = MemberBinding.STATIC;
@@ -2742,8 +2825,9 @@ public class Vala.GirParser : CodeVisitor {
 				int array_length_idx, closure_idx, destroy_idx;
 				string scope;
 				string default_param_name = null;
+				Comment? param_comment;
 				default_param_name = "arg%d".printf (parameters.size);
-				var param = parse_parameter (out array_length_idx, out closure_idx, out destroy_idx, out scope, default_param_name);
+				var param = parse_parameter (out array_length_idx, out closure_idx, out destroy_idx, out scope, out param_comment, default_param_name);
 				if (array_length_idx != -1) {
 					current.array_length_parameters.add (array_length_idx);
 				}
@@ -2753,6 +2837,14 @@ public class Vala.GirParser : CodeVisitor {
 				if (destroy_idx != -1) {
 					current.destroy_parameters.add (destroy_idx);
 				}
+				if (param_comment != null) {
+					if (comment == null) {
+						comment = new GirComment (null, s.source_reference);
+						s.comment = comment;
+					}
+
+					comment.add_content_for_parameter ((param.ellipsis)? "..." : param.name, param_comment);
+				}
 
 				var info = new ParameterInfo (param, array_length_idx, closure_idx, destroy_idx);
 
@@ -2811,6 +2903,9 @@ public class Vala.GirParser : CodeVisitor {
 		cl.external = true;
 
 		next ();
+
+		cl.comment = parse_symbol_doc ();
+
 		while (current_token == MarkupTokenType.START_ELEMENT) {
 			if (!push_metadata ()) {
 				skip_element ();
@@ -2855,6 +2950,9 @@ public class Vala.GirParser : CodeVisitor {
 		st.external = true;
 
 		next ();
+
+		st.comment = parse_symbol_doc ();
+
 		while (current_token == MarkupTokenType.START_ELEMENT) {
 			if (!push_metadata ()) {
 				skip_element ();
@@ -2889,10 +2987,14 @@ public class Vala.GirParser : CodeVisitor {
 		push_node (element_get_name (), false);
 
 		next ();
+
+		var comment = parse_symbol_doc ();
+
 		var type = parse_type ();
 		var c = new Constant (current.name, type, null, current.source_reference);
 		current.symbol = c;
 		c.access = SymbolAccessibility.PUBLIC;
+		c.comment = comment;
 		c.external = true;
 
 		pop_node ();
@@ -3035,6 +3137,7 @@ public class Vala.GirParser : CodeVisitor {
 				// threat target="none" as a new struct
 				st.base_type = base_type;
 			}
+			st.comment = alias.comment;
 			st.external = true;
 			st.set_simple_type (simple_type);
 			alias.symbol = st;
@@ -3044,6 +3147,7 @@ public class Vala.GirParser : CodeVisitor {
 			if (base_type != null) {
 				cl.add_base_type (base_type);
 			}
+			cl.comment = alias.comment;
 			cl.external = true;
 			alias.symbol = cl;
 		}
@@ -3214,6 +3318,12 @@ public class Vala.GirParser : CodeVisitor {
 		}
 	}
 
+	bool same_gir (Symbol gir_component, Symbol sym) {
+		var gir_name = gir_component.source_reference.file.gir_namespace;
+		var gir_version = gir_component.source_reference.file.gir_version;
+		return "%s-%s".printf (gir_name, gir_version) in sym.source_reference.file.filename;
+	}
+
 	void process_namespace_method (Node ns, Node node) {
 		/* transform static methods into instance methods if possible.
 		   In most of cases this is a .gir fault we are going to fix */
@@ -3230,7 +3340,7 @@ public class Vala.GirParser : CodeVisitor {
 			// check if it's a missed instance method (often happens for structs)
 			var sym = ((UnresolvedType) first_param.variable_type).unresolved_symbol;
 			var parent = resolve_node (ns, sym);
-			if (parent != null && parent.parent == ns && is_container (parent.symbol) && cname.has_prefix (parent.get_lower_case_cprefix ())) {
+			if (parent != null && same_gir (method, parent.symbol) && parent.parent == ns && is_container (parent.symbol) && cname.has_prefix (parent.get_lower_case_cprefix ())) {
 				// instance method
 				var new_name = method.name.substring (parent.get_lower_case_cprefix().length - ns_cprefix.length);
 				if (parent.lookup (new_name) == null) {
@@ -3249,7 +3359,7 @@ public class Vala.GirParser : CodeVisitor {
 		Node parent = ns;
 		find_parent (cname, ns, ref parent, ref match);
 		var new_name = method.name.substring (parent.get_lower_case_cprefix().length - ns_cprefix.length);
-		if (parent.lookup (new_name) == null) {
+		if (same_gir (method, parent.symbol) && parent.lookup (new_name) == null) {
 			ns.remove_member (node);
 			node.name = new_name;
 			method.name = new_name;
diff --git a/vala/valainitializerlist.c b/vala/valainitializerlist.c
index 0d27f67..1afaa69 100644
--- a/vala/valainitializerlist.c
+++ b/vala/valainitializerlist.c
@@ -381,6 +381,7 @@ void vala_array_type_set_rank (ValaArrayType* self, gint value);
 GType vala_typesymbol_get_type (void) G_GNUC_CONST;
 ValaTypeSymbol* vala_data_type_get_data_type (ValaDataType* self);
 GType vala_struct_get_type (void) G_GNUC_CONST;
+ValaStruct* vala_struct_get_base_struct (ValaStruct* self);
 GType vala_field_get_type (void) G_GNUC_CONST;
 ValaList* vala_struct_get_fields (ValaStruct* self);
 gchar* vala_code_node_to_string (ValaCodeNode* self);
@@ -720,8 +721,8 @@ static gboolean vala_initializer_list_real_check (ValaCodeNode* base, ValaCodeCo
 	ValaDataType* _tmp4_;
 	ValaDataType* _tmp5_;
 	gboolean _error_;
-	gboolean _tmp199_;
 	gboolean _tmp206_;
+	gboolean _tmp213_;
 	self = (ValaInitializerList*) base;
 	g_return_val_if_fail (context != NULL, FALSE);
 	_tmp0_ = vala_code_node_get_checked ((ValaCodeNode*) self);
@@ -950,11 +951,11 @@ static gboolean vala_initializer_list_real_check (ValaCodeNode* base, ValaCodeCo
 				ValaTypeSymbol* _tmp79_;
 				ValaStruct* _tmp80_;
 				ValaStruct* st;
-				ValaStruct* _tmp81_;
-				ValaList* _tmp82_ = NULL;
-				ValaList* _tmp83_;
-				ValaIterator* _tmp84_ = NULL;
-				ValaIterator* _tmp85_;
+				ValaStruct* _tmp88_;
+				ValaList* _tmp89_ = NULL;
+				ValaList* _tmp90_;
+				ValaIterator* _tmp91_ = NULL;
+				ValaIterator* _tmp92_;
 				ValaIterator* field_it;
 				_tmp76_ = vala_expression_get_target_type ((ValaExpression*) self);
 				_tmp77_ = _tmp76_;
@@ -962,97 +963,118 @@ static gboolean vala_initializer_list_real_check (ValaCodeNode* base, ValaCodeCo
 				_tmp79_ = _tmp78_;
 				_tmp80_ = _vala_code_node_ref0 (VALA_STRUCT (_tmp79_));
 				st = _tmp80_;
-				_tmp81_ = st;
-				_tmp82_ = vala_struct_get_fields (_tmp81_);
-				_tmp83_ = _tmp82_;
-				_tmp84_ = vala_iterable_iterator ((ValaIterable*) _tmp83_);
-				_tmp85_ = _tmp84_;
-				_vala_iterable_unref0 (_tmp83_);
-				field_it = _tmp85_;
+				while (TRUE) {
+					ValaStruct* _tmp81_;
+					ValaStruct* _tmp82_;
+					ValaStruct* _tmp83_;
+					ValaStruct* _tmp84_;
+					ValaStruct* _tmp85_;
+					ValaStruct* _tmp86_;
+					ValaStruct* _tmp87_;
+					_tmp81_ = st;
+					_tmp82_ = vala_struct_get_base_struct (_tmp81_);
+					_tmp83_ = _tmp82_;
+					if (!(_tmp83_ != NULL)) {
+						break;
+					}
+					_tmp84_ = st;
+					_tmp85_ = vala_struct_get_base_struct (_tmp84_);
+					_tmp86_ = _tmp85_;
+					_tmp87_ = _vala_code_node_ref0 (_tmp86_);
+					_vala_code_node_unref0 (st);
+					st = _tmp87_;
+				}
+				_tmp88_ = st;
+				_tmp89_ = vala_struct_get_fields (_tmp88_);
+				_tmp90_ = _tmp89_;
+				_tmp91_ = vala_iterable_iterator ((ValaIterable*) _tmp90_);
+				_tmp92_ = _tmp91_;
+				_vala_iterable_unref0 (_tmp90_);
+				field_it = _tmp92_;
 				{
-					ValaList* _tmp86_ = NULL;
+					ValaList* _tmp93_ = NULL;
 					ValaList* _e_list;
-					ValaList* _tmp87_;
-					gint _tmp88_;
-					gint _tmp89_;
+					ValaList* _tmp94_;
+					gint _tmp95_;
+					gint _tmp96_;
 					gint _e_size;
 					gint _e_index;
-					_tmp86_ = vala_initializer_list_get_initializers (self);
-					_e_list = _tmp86_;
-					_tmp87_ = _e_list;
-					_tmp88_ = vala_collection_get_size ((ValaCollection*) _tmp87_);
-					_tmp89_ = _tmp88_;
-					_e_size = _tmp89_;
+					_tmp93_ = vala_initializer_list_get_initializers (self);
+					_e_list = _tmp93_;
+					_tmp94_ = _e_list;
+					_tmp95_ = vala_collection_get_size ((ValaCollection*) _tmp94_);
+					_tmp96_ = _tmp95_;
+					_e_size = _tmp96_;
 					_e_index = -1;
 					while (TRUE) {
-						gint _tmp90_;
-						gint _tmp91_;
-						gint _tmp92_;
-						ValaList* _tmp93_;
-						gint _tmp94_;
-						gpointer _tmp95_ = NULL;
+						gint _tmp97_;
+						gint _tmp98_;
+						gint _tmp99_;
+						ValaList* _tmp100_;
+						gint _tmp101_;
+						gpointer _tmp102_ = NULL;
 						ValaExpression* e;
 						ValaField* field;
-						ValaExpression* _tmp113_;
-						ValaField* _tmp114_;
-						ValaDataType* _tmp115_;
-						ValaDataType* _tmp116_;
-						ValaDataType* _tmp117_ = NULL;
-						ValaDataType* _tmp118_;
-						ValaDataType* _tmp119_;
-						ValaDataType* _tmp120_;
-						gboolean _tmp121_;
-						gboolean _tmp122_;
-						_tmp90_ = _e_index;
-						_e_index = _tmp90_ + 1;
-						_tmp91_ = _e_index;
-						_tmp92_ = _e_size;
-						if (!(_tmp91_ < _tmp92_)) {
+						ValaExpression* _tmp120_;
+						ValaField* _tmp121_;
+						ValaDataType* _tmp122_;
+						ValaDataType* _tmp123_;
+						ValaDataType* _tmp124_ = NULL;
+						ValaDataType* _tmp125_;
+						ValaDataType* _tmp126_;
+						ValaDataType* _tmp127_;
+						gboolean _tmp128_;
+						gboolean _tmp129_;
+						_tmp97_ = _e_index;
+						_e_index = _tmp97_ + 1;
+						_tmp98_ = _e_index;
+						_tmp99_ = _e_size;
+						if (!(_tmp98_ < _tmp99_)) {
 							break;
 						}
-						_tmp93_ = _e_list;
-						_tmp94_ = _e_index;
-						_tmp95_ = vala_list_get (_tmp93_, _tmp94_);
-						e = (ValaExpression*) _tmp95_;
+						_tmp100_ = _e_list;
+						_tmp101_ = _e_index;
+						_tmp102_ = vala_list_get (_tmp100_, _tmp101_);
+						e = (ValaExpression*) _tmp102_;
 						field = NULL;
 						while (TRUE) {
-							ValaField* _tmp96_;
-							ValaIterator* _tmp97_;
-							gboolean _tmp98_ = FALSE;
-							ValaIterator* _tmp108_;
-							gpointer _tmp109_ = NULL;
-							ValaField* _tmp110_;
-							ValaMemberBinding _tmp111_;
-							ValaMemberBinding _tmp112_;
-							_tmp96_ = field;
-							if (!(_tmp96_ == NULL)) {
+							ValaField* _tmp103_;
+							ValaIterator* _tmp104_;
+							gboolean _tmp105_ = FALSE;
+							ValaIterator* _tmp115_;
+							gpointer _tmp116_ = NULL;
+							ValaField* _tmp117_;
+							ValaMemberBinding _tmp118_;
+							ValaMemberBinding _tmp119_;
+							_tmp103_ = field;
+							if (!(_tmp103_ == NULL)) {
 								break;
 							}
-							_tmp97_ = field_it;
-							_tmp98_ = vala_iterator_next (_tmp97_);
-							if (!_tmp98_) {
-								ValaExpression* _tmp99_;
-								ValaSourceReference* _tmp100_;
-								ValaSourceReference* _tmp101_;
-								ValaDataType* _tmp102_;
-								ValaDataType* _tmp103_;
-								gchar* _tmp104_ = NULL;
-								gchar* _tmp105_;
-								gchar* _tmp106_ = NULL;
-								gchar* _tmp107_;
+							_tmp104_ = field_it;
+							_tmp105_ = vala_iterator_next (_tmp104_);
+							if (!_tmp105_) {
+								ValaExpression* _tmp106_;
+								ValaSourceReference* _tmp107_;
+								ValaSourceReference* _tmp108_;
+								ValaDataType* _tmp109_;
+								ValaDataType* _tmp110_;
+								gchar* _tmp111_ = NULL;
+								gchar* _tmp112_;
+								gchar* _tmp113_ = NULL;
+								gchar* _tmp114_;
 								vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
-								_tmp99_ = e;
-								_tmp100_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp99_);
-								_tmp101_ = _tmp100_;
-								_tmp102_ = vala_expression_get_target_type ((ValaExpression*) self);
-								_tmp103_ = _tmp102_;
-								_tmp104_ = vala_code_node_to_string ((ValaCodeNode*) _tmp103_);
-								_tmp105_ = _tmp104_;
-								_tmp106_ = g_strdup_printf ("too many expressions in initializer list for `%s'", _tmp105_);
-								_tmp107_ = _tmp106_;
-								vala_report_error (_tmp101_, _tmp107_);
-								_g_free0 (_tmp107_);
-								_g_free0 (_tmp105_);
+								_tmp106_ = e;
+								_tmp107_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp106_);
+								_tmp108_ = _tmp107_;
+								_tmp109_ = vala_expression_get_target_type ((ValaExpression*) self);
+								_tmp110_ = _tmp109_;
+								_tmp111_ = vala_code_node_to_string ((ValaCodeNode*) _tmp110_);
+								_tmp112_ = _tmp111_;
+								_tmp113_ = g_strdup_printf ("too many expressions in initializer list for `%s'", _tmp112_);
+								_tmp114_ = _tmp113_;
+								vala_report_error (_tmp108_, _tmp114_);
+								_g_free0 (_tmp114_);
+								_g_free0 (_tmp112_);
 								result = FALSE;
 								_vala_code_node_unref0 (field);
 								_vala_code_node_unref0 (e);
@@ -1061,38 +1083,38 @@ static gboolean vala_initializer_list_real_check (ValaCodeNode* base, ValaCodeCo
 								_vala_code_node_unref0 (st);
 								return result;
 							}
-							_tmp108_ = field_it;
-							_tmp109_ = vala_iterator_get (_tmp108_);
+							_tmp115_ = field_it;
+							_tmp116_ = vala_iterator_get (_tmp115_);
 							_vala_code_node_unref0 (field);
-							field = (ValaField*) _tmp109_;
-							_tmp110_ = field;
-							_tmp111_ = vala_field_get_binding (_tmp110_);
-							_tmp112_ = _tmp111_;
-							if (_tmp112_ != VALA_MEMBER_BINDING_INSTANCE) {
+							field = (ValaField*) _tmp116_;
+							_tmp117_ = field;
+							_tmp118_ = vala_field_get_binding (_tmp117_);
+							_tmp119_ = _tmp118_;
+							if (_tmp119_ != VALA_MEMBER_BINDING_INSTANCE) {
 								_vala_code_node_unref0 (field);
 								field = NULL;
 							}
 						}
-						_tmp113_ = e;
-						_tmp114_ = field;
-						_tmp115_ = vala_variable_get_variable_type ((ValaVariable*) _tmp114_);
-						_tmp116_ = _tmp115_;
-						_tmp117_ = vala_data_type_copy (_tmp116_);
-						_tmp118_ = _tmp117_;
-						vala_expression_set_target_type (_tmp113_, _tmp118_);
-						_vala_code_node_unref0 (_tmp118_);
-						_tmp119_ = vala_expression_get_target_type ((ValaExpression*) self);
-						_tmp120_ = _tmp119_;
-						_tmp121_ = vala_data_type_get_value_owned (_tmp120_);
-						_tmp122_ = _tmp121_;
-						if (!_tmp122_) {
-							ValaExpression* _tmp123_;
-							ValaDataType* _tmp124_;
-							ValaDataType* _tmp125_;
-							_tmp123_ = e;
-							_tmp124_ = vala_expression_get_target_type (_tmp123_);
-							_tmp125_ = _tmp124_;
-							vala_data_type_set_value_owned (_tmp125_, FALSE);
+						_tmp120_ = e;
+						_tmp121_ = field;
+						_tmp122_ = vala_variable_get_variable_type ((ValaVariable*) _tmp121_);
+						_tmp123_ = _tmp122_;
+						_tmp124_ = vala_data_type_copy (_tmp123_);
+						_tmp125_ = _tmp124_;
+						vala_expression_set_target_type (_tmp120_, _tmp125_);
+						_vala_code_node_unref0 (_tmp125_);
+						_tmp126_ = vala_expression_get_target_type ((ValaExpression*) self);
+						_tmp127_ = _tmp126_;
+						_tmp128_ = vala_data_type_get_value_owned (_tmp127_);
+						_tmp129_ = _tmp128_;
+						if (!_tmp129_) {
+							ValaExpression* _tmp130_;
+							ValaDataType* _tmp131_;
+							ValaDataType* _tmp132_;
+							_tmp130_ = e;
+							_tmp131_ = vala_expression_get_target_type (_tmp130_);
+							_tmp132_ = _tmp131_;
+							vala_data_type_set_value_owned (_tmp132_, FALSE);
 						}
 						_vala_code_node_unref0 (field);
 						_vala_code_node_unref0 (e);
@@ -1102,220 +1124,220 @@ static gboolean vala_initializer_list_real_check (ValaCodeNode* base, ValaCodeCo
 				_vala_iterator_unref0 (field_it);
 				_vala_code_node_unref0 (st);
 			} else {
-				ValaSourceReference* _tmp126_;
-				ValaSourceReference* _tmp127_;
-				ValaDataType* _tmp128_;
-				ValaDataType* _tmp129_;
-				gchar* _tmp130_ = NULL;
-				gchar* _tmp131_;
-				gchar* _tmp132_ = NULL;
-				gchar* _tmp133_;
+				ValaSourceReference* _tmp133_;
+				ValaSourceReference* _tmp134_;
+				ValaDataType* _tmp135_;
+				ValaDataType* _tmp136_;
+				gchar* _tmp137_ = NULL;
+				gchar* _tmp138_;
+				gchar* _tmp139_ = NULL;
+				gchar* _tmp140_;
 				vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
-				_tmp126_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-				_tmp127_ = _tmp126_;
-				_tmp128_ = vala_expression_get_target_type ((ValaExpression*) self);
-				_tmp129_ = _tmp128_;
-				_tmp130_ = vala_code_node_to_string ((ValaCodeNode*) _tmp129_);
-				_tmp131_ = _tmp130_;
-				_tmp132_ = g_strdup_printf ("initializer list used for `%s', which is neither array nor struct", _tmp131_);
-				_tmp133_ = _tmp132_;
-				vala_report_error (_tmp127_, _tmp133_);
-				_g_free0 (_tmp133_);
-				_g_free0 (_tmp131_);
+				_tmp133_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
+				_tmp134_ = _tmp133_;
+				_tmp135_ = vala_expression_get_target_type ((ValaExpression*) self);
+				_tmp136_ = _tmp135_;
+				_tmp137_ = vala_code_node_to_string ((ValaCodeNode*) _tmp136_);
+				_tmp138_ = _tmp137_;
+				_tmp139_ = g_strdup_printf ("initializer list used for `%s', which is neither array nor struct", _tmp138_);
+				_tmp140_ = _tmp139_;
+				vala_report_error (_tmp134_, _tmp140_);
+				_g_free0 (_tmp140_);
+				_g_free0 (_tmp138_);
 				result = FALSE;
 				return result;
 			}
 		}
 	}
 	{
-		ValaList* _tmp134_;
-		ValaList* _tmp135_;
+		ValaList* _tmp141_;
+		ValaList* _tmp142_;
 		ValaList* _expr_list;
-		ValaList* _tmp136_;
-		gint _tmp137_;
-		gint _tmp138_;
+		ValaList* _tmp143_;
+		gint _tmp144_;
+		gint _tmp145_;
 		gint _expr_size;
 		gint _expr_index;
-		_tmp134_ = self->priv->initializers;
-		_tmp135_ = _vala_iterable_ref0 (_tmp134_);
-		_expr_list = _tmp135_;
-		_tmp136_ = _expr_list;
-		_tmp137_ = vala_collection_get_size ((ValaCollection*) _tmp136_);
-		_tmp138_ = _tmp137_;
-		_expr_size = _tmp138_;
+		_tmp141_ = self->priv->initializers;
+		_tmp142_ = _vala_iterable_ref0 (_tmp141_);
+		_expr_list = _tmp142_;
+		_tmp143_ = _expr_list;
+		_tmp144_ = vala_collection_get_size ((ValaCollection*) _tmp143_);
+		_tmp145_ = _tmp144_;
+		_expr_size = _tmp145_;
 		_expr_index = -1;
 		while (TRUE) {
-			gint _tmp139_;
-			gint _tmp140_;
-			gint _tmp141_;
-			ValaList* _tmp142_;
-			gint _tmp143_;
-			gpointer _tmp144_ = NULL;
+			gint _tmp146_;
+			gint _tmp147_;
+			gint _tmp148_;
+			ValaList* _tmp149_;
+			gint _tmp150_;
+			gpointer _tmp151_ = NULL;
 			ValaExpression* expr;
-			ValaExpression* _tmp145_;
-			ValaCodeContext* _tmp146_;
-			_tmp139_ = _expr_index;
-			_expr_index = _tmp139_ + 1;
-			_tmp140_ = _expr_index;
-			_tmp141_ = _expr_size;
-			if (!(_tmp140_ < _tmp141_)) {
+			ValaExpression* _tmp152_;
+			ValaCodeContext* _tmp153_;
+			_tmp146_ = _expr_index;
+			_expr_index = _tmp146_ + 1;
+			_tmp147_ = _expr_index;
+			_tmp148_ = _expr_size;
+			if (!(_tmp147_ < _tmp148_)) {
 				break;
 			}
-			_tmp142_ = _expr_list;
-			_tmp143_ = _expr_index;
-			_tmp144_ = vala_list_get (_tmp142_, _tmp143_);
-			expr = (ValaExpression*) _tmp144_;
-			_tmp145_ = expr;
-			_tmp146_ = context;
-			vala_code_node_check ((ValaCodeNode*) _tmp145_, _tmp146_);
+			_tmp149_ = _expr_list;
+			_tmp150_ = _expr_index;
+			_tmp151_ = vala_list_get (_tmp149_, _tmp150_);
+			expr = (ValaExpression*) _tmp151_;
+			_tmp152_ = expr;
+			_tmp153_ = context;
+			vala_code_node_check ((ValaCodeNode*) _tmp152_, _tmp153_);
 			_vala_code_node_unref0 (expr);
 		}
 		_vala_iterable_unref0 (_expr_list);
 	}
 	_error_ = FALSE;
 	{
-		ValaList* _tmp147_ = NULL;
+		ValaList* _tmp154_ = NULL;
 		ValaList* _e_list;
-		ValaList* _tmp148_;
-		gint _tmp149_;
-		gint _tmp150_;
+		ValaList* _tmp155_;
+		gint _tmp156_;
+		gint _tmp157_;
 		gint _e_size;
 		gint _e_index;
-		_tmp147_ = vala_initializer_list_get_initializers (self);
-		_e_list = _tmp147_;
-		_tmp148_ = _e_list;
-		_tmp149_ = vala_collection_get_size ((ValaCollection*) _tmp148_);
-		_tmp150_ = _tmp149_;
-		_e_size = _tmp150_;
+		_tmp154_ = vala_initializer_list_get_initializers (self);
+		_e_list = _tmp154_;
+		_tmp155_ = _e_list;
+		_tmp156_ = vala_collection_get_size ((ValaCollection*) _tmp155_);
+		_tmp157_ = _tmp156_;
+		_e_size = _tmp157_;
 		_e_index = -1;
 		while (TRUE) {
-			gint _tmp151_;
-			gint _tmp152_;
-			gint _tmp153_;
-			ValaList* _tmp154_;
-			gint _tmp155_;
-			gpointer _tmp156_ = NULL;
+			gint _tmp158_;
+			gint _tmp159_;
+			gint _tmp160_;
+			ValaList* _tmp161_;
+			gint _tmp162_;
+			gpointer _tmp163_ = NULL;
 			ValaExpression* e;
-			ValaExpression* _tmp157_;
-			ValaDataType* _tmp158_;
-			ValaDataType* _tmp159_;
-			ValaExpression* _tmp163_;
-			ValaUnaryExpression* _tmp164_;
+			ValaExpression* _tmp164_;
+			ValaDataType* _tmp165_;
+			ValaDataType* _tmp166_;
+			ValaExpression* _tmp170_;
+			ValaUnaryExpression* _tmp171_;
 			ValaUnaryExpression* unary;
-			gboolean _tmp165_ = FALSE;
-			ValaUnaryExpression* _tmp166_;
-			gboolean _tmp175_;
-			_tmp151_ = _e_index;
-			_e_index = _tmp151_ + 1;
-			_tmp152_ = _e_index;
-			_tmp153_ = _e_size;
-			if (!(_tmp152_ < _tmp153_)) {
+			gboolean _tmp172_ = FALSE;
+			ValaUnaryExpression* _tmp173_;
+			gboolean _tmp182_;
+			_tmp158_ = _e_index;
+			_e_index = _tmp158_ + 1;
+			_tmp159_ = _e_index;
+			_tmp160_ = _e_size;
+			if (!(_tmp159_ < _tmp160_)) {
 				break;
 			}
-			_tmp154_ = _e_list;
-			_tmp155_ = _e_index;
-			_tmp156_ = vala_list_get (_tmp154_, _tmp155_);
-			e = (ValaExpression*) _tmp156_;
-			_tmp157_ = e;
-			_tmp158_ = vala_expression_get_value_type (_tmp157_);
-			_tmp159_ = _tmp158_;
-			if (_tmp159_ == NULL) {
-				ValaExpression* _tmp160_;
-				ValaSourceReference* _tmp161_;
-				ValaSourceReference* _tmp162_;
+			_tmp161_ = _e_list;
+			_tmp162_ = _e_index;
+			_tmp163_ = vala_list_get (_tmp161_, _tmp162_);
+			e = (ValaExpression*) _tmp163_;
+			_tmp164_ = e;
+			_tmp165_ = vala_expression_get_value_type (_tmp164_);
+			_tmp166_ = _tmp165_;
+			if (_tmp166_ == NULL) {
+				ValaExpression* _tmp167_;
+				ValaSourceReference* _tmp168_;
+				ValaSourceReference* _tmp169_;
 				_error_ = TRUE;
-				_tmp160_ = e;
-				_tmp161_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp160_);
-				_tmp162_ = _tmp161_;
-				vala_report_error (_tmp162_, "expression type not allowed as initializer");
+				_tmp167_ = e;
+				_tmp168_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp167_);
+				_tmp169_ = _tmp168_;
+				vala_report_error (_tmp169_, "expression type not allowed as initializer");
 				_vala_code_node_unref0 (e);
 				continue;
 			}
-			_tmp163_ = e;
-			_tmp164_ = _vala_code_node_ref0 (VALA_IS_UNARY_EXPRESSION (_tmp163_) ? ((ValaUnaryExpression*) _tmp163_) : NULL);
-			unary = _tmp164_;
-			_tmp166_ = unary;
-			if (_tmp166_ != NULL) {
-				gboolean _tmp167_ = FALSE;
-				ValaUnaryExpression* _tmp168_;
-				ValaUnaryOperator _tmp169_;
-				ValaUnaryOperator _tmp170_;
-				gboolean _tmp174_;
-				_tmp168_ = unary;
-				_tmp169_ = vala_unary_expression_get_operator (_tmp168_);
-				_tmp170_ = _tmp169_;
-				if (_tmp170_ == VALA_UNARY_OPERATOR_REF) {
-					_tmp167_ = TRUE;
+			_tmp170_ = e;
+			_tmp171_ = _vala_code_node_ref0 (VALA_IS_UNARY_EXPRESSION (_tmp170_) ? ((ValaUnaryExpression*) _tmp170_) : NULL);
+			unary = _tmp171_;
+			_tmp173_ = unary;
+			if (_tmp173_ != NULL) {
+				gboolean _tmp174_ = FALSE;
+				ValaUnaryExpression* _tmp175_;
+				ValaUnaryOperator _tmp176_;
+				ValaUnaryOperator _tmp177_;
+				gboolean _tmp181_;
+				_tmp175_ = unary;
+				_tmp176_ = vala_unary_expression_get_operator (_tmp175_);
+				_tmp177_ = _tmp176_;
+				if (_tmp177_ == VALA_UNARY_OPERATOR_REF) {
+					_tmp174_ = TRUE;
 				} else {
-					ValaUnaryExpression* _tmp171_;
-					ValaUnaryOperator _tmp172_;
-					ValaUnaryOperator _tmp173_;
-					_tmp171_ = unary;
-					_tmp172_ = vala_unary_expression_get_operator (_tmp171_);
-					_tmp173_ = _tmp172_;
-					_tmp167_ = _tmp173_ == VALA_UNARY_OPERATOR_OUT;
+					ValaUnaryExpression* _tmp178_;
+					ValaUnaryOperator _tmp179_;
+					ValaUnaryOperator _tmp180_;
+					_tmp178_ = unary;
+					_tmp179_ = vala_unary_expression_get_operator (_tmp178_);
+					_tmp180_ = _tmp179_;
+					_tmp174_ = _tmp180_ == VALA_UNARY_OPERATOR_OUT;
 				}
-				_tmp174_ = _tmp167_;
-				_tmp165_ = _tmp174_;
+				_tmp181_ = _tmp174_;
+				_tmp172_ = _tmp181_;
 			} else {
-				_tmp165_ = FALSE;
+				_tmp172_ = FALSE;
 			}
-			_tmp175_ = _tmp165_;
-			if (_tmp175_) {
+			_tmp182_ = _tmp172_;
+			if (_tmp182_) {
 			} else {
-				ValaExpression* _tmp176_;
-				ValaDataType* _tmp177_;
-				ValaDataType* _tmp178_;
-				ValaExpression* _tmp179_;
-				ValaDataType* _tmp180_;
-				ValaDataType* _tmp181_;
-				gboolean _tmp182_ = FALSE;
-				_tmp176_ = e;
-				_tmp177_ = vala_expression_get_value_type (_tmp176_);
-				_tmp178_ = _tmp177_;
-				_tmp179_ = e;
-				_tmp180_ = vala_expression_get_target_type (_tmp179_);
-				_tmp181_ = _tmp180_;
-				_tmp182_ = vala_data_type_compatible (_tmp178_, _tmp181_);
-				if (!_tmp182_) {
-					ValaExpression* _tmp183_;
-					ValaExpression* _tmp184_;
-					ValaSourceReference* _tmp185_;
-					ValaSourceReference* _tmp186_;
-					ValaExpression* _tmp187_;
-					ValaDataType* _tmp188_;
-					ValaDataType* _tmp189_;
-					gchar* _tmp190_ = NULL;
-					gchar* _tmp191_;
-					ValaExpression* _tmp192_;
-					ValaDataType* _tmp193_;
-					ValaDataType* _tmp194_;
-					gchar* _tmp195_ = NULL;
-					gchar* _tmp196_;
+				ValaExpression* _tmp183_;
+				ValaDataType* _tmp184_;
+				ValaDataType* _tmp185_;
+				ValaExpression* _tmp186_;
+				ValaDataType* _tmp187_;
+				ValaDataType* _tmp188_;
+				gboolean _tmp189_ = FALSE;
+				_tmp183_ = e;
+				_tmp184_ = vala_expression_get_value_type (_tmp183_);
+				_tmp185_ = _tmp184_;
+				_tmp186_ = e;
+				_tmp187_ = vala_expression_get_target_type (_tmp186_);
+				_tmp188_ = _tmp187_;
+				_tmp189_ = vala_data_type_compatible (_tmp185_, _tmp188_);
+				if (!_tmp189_) {
+					ValaExpression* _tmp190_;
+					ValaExpression* _tmp191_;
+					ValaSourceReference* _tmp192_;
+					ValaSourceReference* _tmp193_;
+					ValaExpression* _tmp194_;
+					ValaDataType* _tmp195_;
+					ValaDataType* _tmp196_;
 					gchar* _tmp197_ = NULL;
 					gchar* _tmp198_;
+					ValaExpression* _tmp199_;
+					ValaDataType* _tmp200_;
+					ValaDataType* _tmp201_;
+					gchar* _tmp202_ = NULL;
+					gchar* _tmp203_;
+					gchar* _tmp204_ = NULL;
+					gchar* _tmp205_;
 					_error_ = TRUE;
-					_tmp183_ = e;
-					vala_code_node_set_error ((ValaCodeNode*) _tmp183_, TRUE);
-					_tmp184_ = e;
-					_tmp185_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp184_);
-					_tmp186_ = _tmp185_;
-					_tmp187_ = e;
-					_tmp188_ = vala_expression_get_target_type (_tmp187_);
-					_tmp189_ = _tmp188_;
-					_tmp190_ = vala_code_node_to_string ((ValaCodeNode*) _tmp189_);
-					_tmp191_ = _tmp190_;
-					_tmp192_ = e;
-					_tmp193_ = vala_expression_get_value_type (_tmp192_);
-					_tmp194_ = _tmp193_;
-					_tmp195_ = vala_code_node_to_string ((ValaCodeNode*) _tmp194_);
+					_tmp190_ = e;
+					vala_code_node_set_error ((ValaCodeNode*) _tmp190_, TRUE);
+					_tmp191_ = e;
+					_tmp192_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp191_);
+					_tmp193_ = _tmp192_;
+					_tmp194_ = e;
+					_tmp195_ = vala_expression_get_target_type (_tmp194_);
 					_tmp196_ = _tmp195_;
-					_tmp197_ = g_strdup_printf ("Expected initializer of type `%s' but got `%s'", _tmp191_, _tmp196_);
+					_tmp197_ = vala_code_node_to_string ((ValaCodeNode*) _tmp196_);
 					_tmp198_ = _tmp197_;
-					vala_report_error (_tmp186_, _tmp198_);
+					_tmp199_ = e;
+					_tmp200_ = vala_expression_get_value_type (_tmp199_);
+					_tmp201_ = _tmp200_;
+					_tmp202_ = vala_code_node_to_string ((ValaCodeNode*) _tmp201_);
+					_tmp203_ = _tmp202_;
+					_tmp204_ = g_strdup_printf ("Expected initializer of type `%s' but got `%s'", _tmp198_, _tmp203_);
+					_tmp205_ = _tmp204_;
+					vala_report_error (_tmp193_, _tmp205_);
+					_g_free0 (_tmp205_);
+					_g_free0 (_tmp203_);
 					_g_free0 (_tmp198_);
-					_g_free0 (_tmp196_);
-					_g_free0 (_tmp191_);
 				}
 			}
 			_vala_code_node_unref0 (unary);
@@ -1323,26 +1345,26 @@ static gboolean vala_initializer_list_real_check (ValaCodeNode* base, ValaCodeCo
 		}
 		_vala_iterable_unref0 (_e_list);
 	}
-	_tmp199_ = _error_;
-	if (!_tmp199_) {
-		ValaDataType* _tmp200_;
-		ValaDataType* _tmp201_;
-		ValaDataType* _tmp202_ = NULL;
-		ValaDataType* _tmp203_;
-		ValaDataType* _tmp204_;
-		ValaDataType* _tmp205_;
-		_tmp200_ = vala_expression_get_target_type ((ValaExpression*) self);
-		_tmp201_ = _tmp200_;
-		_tmp202_ = vala_data_type_copy (_tmp201_);
-		_tmp203_ = _tmp202_;
-		vala_expression_set_value_type ((ValaExpression*) self, _tmp203_);
-		_vala_code_node_unref0 (_tmp203_);
-		_tmp204_ = vala_expression_get_value_type ((ValaExpression*) self);
-		_tmp205_ = _tmp204_;
-		vala_data_type_set_nullable (_tmp205_, FALSE);
-	}
 	_tmp206_ = _error_;
-	result = !_tmp206_;
+	if (!_tmp206_) {
+		ValaDataType* _tmp207_;
+		ValaDataType* _tmp208_;
+		ValaDataType* _tmp209_ = NULL;
+		ValaDataType* _tmp210_;
+		ValaDataType* _tmp211_;
+		ValaDataType* _tmp212_;
+		_tmp207_ = vala_expression_get_target_type ((ValaExpression*) self);
+		_tmp208_ = _tmp207_;
+		_tmp209_ = vala_data_type_copy (_tmp208_);
+		_tmp210_ = _tmp209_;
+		vala_expression_set_value_type ((ValaExpression*) self, _tmp210_);
+		_vala_code_node_unref0 (_tmp210_);
+		_tmp211_ = vala_expression_get_value_type ((ValaExpression*) self);
+		_tmp212_ = _tmp211_;
+		vala_data_type_set_nullable (_tmp212_, FALSE);
+	}
+	_tmp213_ = _error_;
+	result = !_tmp213_;
 	return result;
 }
 
diff --git a/vala/valainitializerlist.vala b/vala/valainitializerlist.vala
index b2350ae..edd9857 100644
--- a/vala/valainitializerlist.vala
+++ b/vala/valainitializerlist.vala
@@ -153,6 +153,9 @@ public class Vala.InitializerList : Expression {
 		} else if (target_type.data_type is Struct) {
 			/* initializer is used as struct initializer */
 			var st = (Struct) target_type.data_type;
+			while (st.base_struct != null) {
+				st = st.base_struct;
+			}
 
 			var field_it = st.get_fields ().iterator ();
 			foreach (Expression e in get_initializers ()) {
diff --git a/vala/valamarkupreader.c b/vala/valamarkupreader.c
index cdb786a..06730db 100644
--- a/vala/valamarkupreader.c
+++ b/vala/valamarkupreader.c
@@ -537,18 +537,16 @@ ValaMarkupTokenType vala_markup_reader_read_token (ValaMarkupReader* self, ValaS
 	ValaMap* _tmp0_;
 	gboolean _tmp1_;
 	ValaMarkupTokenType type;
-	gchar* _tmp10_;
+	gchar* _tmp8_;
 	gchar* begin;
-	gchar* _tmp11_;
-	gint _tmp12_;
-	gint _tmp13_;
-	ValaSourceLocation _tmp14_ = {0};
-	gchar* _tmp15_;
-	gchar* _tmp16_;
-	gchar* _tmp125_;
-	gint _tmp126_;
-	gint _tmp127_;
-	ValaSourceLocation _tmp128_ = {0};
+	gchar* _tmp9_;
+	gint _tmp10_;
+	gint _tmp11_;
+	gchar* _tmp12_;
+	gchar* _tmp13_;
+	gchar* _tmp122_;
+	gint _tmp123_;
+	gint _tmp124_;
 	g_return_val_if_fail (self != NULL, 0);
 	_tmp0_ = self->priv->attributes;
 	vala_map_clear (_tmp0_);
@@ -557,22 +555,18 @@ ValaMarkupTokenType vala_markup_reader_read_token (ValaMarkupReader* self, ValaS
 		gchar* _tmp2_;
 		gint _tmp3_;
 		gint _tmp4_;
-		ValaSourceLocation _tmp5_ = {0};
-		gchar* _tmp6_;
+		gchar* _tmp5_;
+		gint _tmp6_;
 		gint _tmp7_;
-		gint _tmp8_;
-		ValaSourceLocation _tmp9_ = {0};
 		self->priv->empty_element = FALSE;
 		_tmp2_ = self->priv->begin;
 		_tmp3_ = self->priv->line;
 		_tmp4_ = self->priv->column;
-		vala_source_location_init (&_tmp5_, _tmp2_, _tmp3_, _tmp4_);
-		_vala_token_begin = _tmp5_;
-		_tmp6_ = self->priv->begin;
-		_tmp7_ = self->priv->line;
-		_tmp8_ = self->priv->column;
-		vala_source_location_init (&_tmp9_, _tmp6_, _tmp7_, _tmp8_);
-		_vala_token_end = _tmp9_;
+		vala_source_location_init (&_vala_token_begin, _tmp2_, _tmp3_, _tmp4_);
+		_tmp5_ = self->priv->begin;
+		_tmp6_ = self->priv->line;
+		_tmp7_ = self->priv->column;
+		vala_source_location_init (&_vala_token_end, _tmp5_, _tmp6_, _tmp7_);
 		result = VALA_MARKUP_TOKEN_TYPE_END_ELEMENT;
 		if (token_begin) {
 			*token_begin = _vala_token_begin;
@@ -584,142 +578,141 @@ ValaMarkupTokenType vala_markup_reader_read_token (ValaMarkupReader* self, ValaS
 	}
 	vala_markup_reader_space (self);
 	type = VALA_MARKUP_TOKEN_TYPE_NONE;
-	_tmp10_ = self->priv->current;
-	begin = _tmp10_;
-	_tmp11_ = begin;
-	_tmp12_ = self->priv->line;
-	_tmp13_ = self->priv->column;
-	vala_source_location_init (&_tmp14_, _tmp11_, _tmp12_, _tmp13_);
-	_vala_token_begin = _tmp14_;
-	_tmp15_ = self->priv->current;
-	_tmp16_ = self->priv->end;
-	if (_tmp15_ >= _tmp16_) {
+	_tmp8_ = self->priv->current;
+	begin = _tmp8_;
+	_tmp9_ = begin;
+	_tmp10_ = self->priv->line;
+	_tmp11_ = self->priv->column;
+	vala_source_location_init (&_vala_token_begin, _tmp9_, _tmp10_, _tmp11_);
+	_tmp12_ = self->priv->current;
+	_tmp13_ = self->priv->end;
+	if (_tmp12_ >= _tmp13_) {
 		type = VALA_MARKUP_TOKEN_TYPE_EOF;
 	} else {
-		gchar* _tmp17_;
-		gchar _tmp18_;
-		_tmp17_ = self->priv->current;
-		_tmp18_ = _tmp17_[0];
-		if (_tmp18_ == '<') {
-			gchar* _tmp19_;
-			gchar* _tmp20_;
-			gchar* _tmp21_;
-			_tmp19_ = self->priv->current;
-			self->priv->current = _tmp19_ + 1;
-			_tmp20_ = self->priv->current;
-			_tmp21_ = self->priv->end;
-			if (_tmp20_ >= _tmp21_) {
+		gchar* _tmp14_;
+		gchar _tmp15_;
+		_tmp14_ = self->priv->current;
+		_tmp15_ = _tmp14_[0];
+		if (_tmp15_ == '<') {
+			gchar* _tmp16_;
+			gchar* _tmp17_;
+			gchar* _tmp18_;
+			_tmp16_ = self->priv->current;
+			self->priv->current = _tmp16_ + 1;
+			_tmp17_ = self->priv->current;
+			_tmp18_ = self->priv->end;
+			if (_tmp17_ >= _tmp18_) {
 			} else {
-				gchar* _tmp22_;
-				gchar _tmp23_;
-				_tmp22_ = self->priv->current;
-				_tmp23_ = _tmp22_[0];
-				if (_tmp23_ == '?') {
+				gchar* _tmp19_;
+				gchar _tmp20_;
+				_tmp19_ = self->priv->current;
+				_tmp20_ = _tmp19_[0];
+				if (_tmp20_ == '?') {
 				} else {
-					gchar* _tmp24_;
-					gchar _tmp25_;
-					_tmp24_ = self->priv->current;
-					_tmp25_ = _tmp24_[0];
-					if (_tmp25_ == '!') {
+					gchar* _tmp21_;
+					gchar _tmp22_;
+					_tmp21_ = self->priv->current;
+					_tmp22_ = _tmp21_[0];
+					if (_tmp22_ == '!') {
+						gchar* _tmp23_;
+						gboolean _tmp24_ = FALSE;
+						gboolean _tmp25_ = FALSE;
 						gchar* _tmp26_;
-						gboolean _tmp27_ = FALSE;
-						gboolean _tmp28_ = FALSE;
-						gchar* _tmp29_;
-						gchar* _tmp30_;
+						gchar* _tmp27_;
+						gboolean _tmp30_;
 						gboolean _tmp33_;
-						gboolean _tmp36_;
+						_tmp23_ = self->priv->current;
+						self->priv->current = _tmp23_ + 1;
 						_tmp26_ = self->priv->current;
-						self->priv->current = _tmp26_ + 1;
-						_tmp29_ = self->priv->current;
-						_tmp30_ = self->priv->end;
-						if (_tmp29_ < (_tmp30_ - 1)) {
+						_tmp27_ = self->priv->end;
+						if (_tmp26_ < (_tmp27_ - 1)) {
+							gchar* _tmp28_;
+							gchar _tmp29_;
+							_tmp28_ = self->priv->current;
+							_tmp29_ = _tmp28_[0];
+							_tmp25_ = _tmp29_ == '-';
+						} else {
+							_tmp25_ = FALSE;
+						}
+						_tmp30_ = _tmp25_;
+						if (_tmp30_) {
 							gchar* _tmp31_;
 							gchar _tmp32_;
 							_tmp31_ = self->priv->current;
-							_tmp32_ = _tmp31_[0];
-							_tmp28_ = _tmp32_ == '-';
+							_tmp32_ = _tmp31_[1];
+							_tmp24_ = _tmp32_ == '-';
 						} else {
-							_tmp28_ = FALSE;
+							_tmp24_ = FALSE;
 						}
-						_tmp33_ = _tmp28_;
+						_tmp33_ = _tmp24_;
 						if (_tmp33_) {
 							gchar* _tmp34_;
-							gchar _tmp35_;
+							ValaSourceLocation _tmp52_ = {0};
+							ValaSourceLocation _tmp53_ = {0};
+							ValaMarkupTokenType _tmp54_ = 0;
 							_tmp34_ = self->priv->current;
-							_tmp35_ = _tmp34_[1];
-							_tmp27_ = _tmp35_ == '-';
-						} else {
-							_tmp27_ = FALSE;
-						}
-						_tmp36_ = _tmp27_;
-						if (_tmp36_) {
-							gchar* _tmp37_;
-							ValaSourceLocation _tmp55_ = {0};
-							ValaSourceLocation _tmp56_ = {0};
-							ValaMarkupTokenType _tmp57_ = 0;
-							_tmp37_ = self->priv->current;
-							self->priv->current = _tmp37_ + 2;
+							self->priv->current = _tmp34_ + 2;
 							while (TRUE) {
-								gchar* _tmp38_;
+								gchar* _tmp35_;
+								gchar* _tmp36_;
+								gboolean _tmp37_ = FALSE;
+								gboolean _tmp38_ = FALSE;
 								gchar* _tmp39_;
-								gboolean _tmp40_ = FALSE;
-								gboolean _tmp41_ = FALSE;
-								gchar* _tmp42_;
-								gchar _tmp43_;
+								gchar _tmp40_;
+								gboolean _tmp43_;
 								gboolean _tmp46_;
-								gboolean _tmp49_;
-								gchar* _tmp54_;
-								_tmp38_ = self->priv->current;
-								_tmp39_ = self->priv->end;
-								if (!(_tmp38_ < (_tmp39_ - 2))) {
+								gchar* _tmp51_;
+								_tmp35_ = self->priv->current;
+								_tmp36_ = self->priv->end;
+								if (!(_tmp35_ < (_tmp36_ - 2))) {
 									break;
 								}
-								_tmp42_ = self->priv->current;
-								_tmp43_ = _tmp42_[0];
-								if (_tmp43_ == '-') {
+								_tmp39_ = self->priv->current;
+								_tmp40_ = _tmp39_[0];
+								if (_tmp40_ == '-') {
+									gchar* _tmp41_;
+									gchar _tmp42_;
+									_tmp41_ = self->priv->current;
+									_tmp42_ = _tmp41_[1];
+									_tmp38_ = _tmp42_ == '-';
+								} else {
+									_tmp38_ = FALSE;
+								}
+								_tmp43_ = _tmp38_;
+								if (_tmp43_) {
 									gchar* _tmp44_;
 									gchar _tmp45_;
 									_tmp44_ = self->priv->current;
-									_tmp45_ = _tmp44_[1];
-									_tmp41_ = _tmp45_ == '-';
+									_tmp45_ = _tmp44_[2];
+									_tmp37_ = _tmp45_ == '>';
 								} else {
-									_tmp41_ = FALSE;
+									_tmp37_ = FALSE;
 								}
-								_tmp46_ = _tmp41_;
+								_tmp46_ = _tmp37_;
 								if (_tmp46_) {
 									gchar* _tmp47_;
-									gchar _tmp48_;
 									_tmp47_ = self->priv->current;
-									_tmp48_ = _tmp47_[2];
-									_tmp40_ = _tmp48_ == '>';
-								} else {
-									_tmp40_ = FALSE;
-								}
-								_tmp49_ = _tmp40_;
-								if (_tmp49_) {
-									gchar* _tmp50_;
-									_tmp50_ = self->priv->current;
-									self->priv->current = _tmp50_ + 3;
+									self->priv->current = _tmp47_ + 3;
 									break;
 								} else {
-									gchar* _tmp51_;
-									gchar _tmp52_;
-									_tmp51_ = self->priv->current;
-									_tmp52_ = _tmp51_[0];
-									if (_tmp52_ == '\n') {
-										gint _tmp53_;
-										_tmp53_ = self->priv->line;
-										self->priv->line = _tmp53_ + 1;
+									gchar* _tmp48_;
+									gchar _tmp49_;
+									_tmp48_ = self->priv->current;
+									_tmp49_ = _tmp48_[0];
+									if (_tmp49_ == '\n') {
+										gint _tmp50_;
+										_tmp50_ = self->priv->line;
+										self->priv->line = _tmp50_ + 1;
 										self->priv->column = 0;
 									}
 								}
-								_tmp54_ = self->priv->current;
-								self->priv->current = _tmp54_ + 1;
+								_tmp51_ = self->priv->current;
+								self->priv->current = _tmp51_ + 1;
 							}
-							_tmp57_ = vala_markup_reader_read_token (self, &_tmp55_, &_tmp56_);
-							_vala_token_begin = _tmp55_;
-							_vala_token_end = _tmp56_;
-							result = _tmp57_;
+							_tmp54_ = vala_markup_reader_read_token (self, &_tmp52_, &_tmp53_);
+							_vala_token_begin = _tmp52_;
+							_vala_token_end = _tmp53_;
+							result = _tmp54_;
 							if (token_begin) {
 								*token_begin = _vala_token_begin;
 							}
@@ -729,224 +722,224 @@ ValaMarkupTokenType vala_markup_reader_read_token (ValaMarkupReader* self, ValaS
 							return result;
 						}
 					} else {
-						gchar* _tmp58_;
-						gchar _tmp59_;
-						_tmp58_ = self->priv->current;
-						_tmp59_ = _tmp58_[0];
-						if (_tmp59_ == '/') {
-							gchar* _tmp60_;
-							gchar* _tmp61_ = NULL;
+						gchar* _tmp55_;
+						gchar _tmp56_;
+						_tmp55_ = self->priv->current;
+						_tmp56_ = _tmp55_[0];
+						if (_tmp56_ == '/') {
+							gchar* _tmp57_;
+							gchar* _tmp58_ = NULL;
+							gchar* _tmp59_;
+							gboolean _tmp60_ = FALSE;
+							gchar* _tmp61_;
 							gchar* _tmp62_;
-							gboolean _tmp63_ = FALSE;
-							gchar* _tmp64_;
-							gchar* _tmp65_;
-							gboolean _tmp68_;
-							gchar* _tmp69_;
+							gboolean _tmp65_;
+							gchar* _tmp66_;
 							type = VALA_MARKUP_TOKEN_TYPE_END_ELEMENT;
-							_tmp60_ = self->priv->current;
-							self->priv->current = _tmp60_ + 1;
-							_tmp61_ = vala_markup_reader_read_name (self);
-							_tmp62_ = _tmp61_;
-							vala_markup_reader_set_name (self, _tmp62_);
-							_g_free0 (_tmp62_);
-							_tmp64_ = self->priv->current;
-							_tmp65_ = self->priv->end;
-							if (_tmp64_ >= _tmp65_) {
-								_tmp63_ = TRUE;
+							_tmp57_ = self->priv->current;
+							self->priv->current = _tmp57_ + 1;
+							_tmp58_ = vala_markup_reader_read_name (self);
+							_tmp59_ = _tmp58_;
+							vala_markup_reader_set_name (self, _tmp59_);
+							_g_free0 (_tmp59_);
+							_tmp61_ = self->priv->current;
+							_tmp62_ = self->priv->end;
+							if (_tmp61_ >= _tmp62_) {
+								_tmp60_ = TRUE;
 							} else {
-								gchar* _tmp66_;
-								gchar _tmp67_;
-								_tmp66_ = self->priv->current;
-								_tmp67_ = _tmp66_[0];
-								_tmp63_ = _tmp67_ != '>';
+								gchar* _tmp63_;
+								gchar _tmp64_;
+								_tmp63_ = self->priv->current;
+								_tmp64_ = _tmp63_[0];
+								_tmp60_ = _tmp64_ != '>';
 							}
-							_tmp68_ = _tmp63_;
-							if (_tmp68_) {
+							_tmp65_ = _tmp60_;
+							if (_tmp65_) {
 							}
-							_tmp69_ = self->priv->current;
-							self->priv->current = _tmp69_ + 1;
+							_tmp66_ = self->priv->current;
+							self->priv->current = _tmp66_ + 1;
 						} else {
-							gchar* _tmp70_ = NULL;
-							gchar* _tmp71_;
-							gchar* _tmp108_;
-							gchar _tmp109_;
-							gboolean _tmp111_ = FALSE;
-							gchar* _tmp112_;
-							gchar* _tmp113_;
-							gboolean _tmp116_;
-							gchar* _tmp117_;
+							gchar* _tmp67_ = NULL;
+							gchar* _tmp68_;
+							gchar* _tmp105_;
+							gchar _tmp106_;
+							gboolean _tmp108_ = FALSE;
+							gchar* _tmp109_;
+							gchar* _tmp110_;
+							gboolean _tmp113_;
+							gchar* _tmp114_;
 							type = VALA_MARKUP_TOKEN_TYPE_START_ELEMENT;
-							_tmp70_ = vala_markup_reader_read_name (self);
-							_tmp71_ = _tmp70_;
-							vala_markup_reader_set_name (self, _tmp71_);
-							_g_free0 (_tmp71_);
+							_tmp67_ = vala_markup_reader_read_name (self);
+							_tmp68_ = _tmp67_;
+							vala_markup_reader_set_name (self, _tmp68_);
+							_g_free0 (_tmp68_);
 							vala_markup_reader_space (self);
 							while (TRUE) {
-								gboolean _tmp72_ = FALSE;
-								gboolean _tmp73_ = FALSE;
-								gchar* _tmp74_;
-								gchar* _tmp75_;
+								gboolean _tmp69_ = FALSE;
+								gboolean _tmp70_ = FALSE;
+								gchar* _tmp71_;
+								gchar* _tmp72_;
+								gboolean _tmp75_;
 								gboolean _tmp78_;
-								gboolean _tmp81_;
-								gchar* _tmp82_ = NULL;
+								gchar* _tmp79_ = NULL;
 								gchar* attr_name;
-								gboolean _tmp83_ = FALSE;
-								gchar* _tmp84_;
-								gchar* _tmp85_;
-								gboolean _tmp88_;
+								gboolean _tmp80_ = FALSE;
+								gchar* _tmp81_;
+								gchar* _tmp82_;
+								gboolean _tmp85_;
+								gchar* _tmp86_;
+								gboolean _tmp87_ = FALSE;
+								gchar* _tmp88_;
 								gchar* _tmp89_;
-								gboolean _tmp90_ = FALSE;
-								gchar* _tmp91_;
-								gchar* _tmp92_;
-								gboolean _tmp95_;
-								gchar* _tmp96_;
-								gchar* _tmp97_ = NULL;
+								gboolean _tmp92_;
+								gchar* _tmp93_;
+								gchar* _tmp94_ = NULL;
 								gchar* attr_value;
-								gboolean _tmp98_ = FALSE;
-								gchar* _tmp99_;
-								gchar* _tmp100_;
-								gboolean _tmp103_;
-								gchar* _tmp104_;
-								ValaMap* _tmp105_;
-								const gchar* _tmp106_;
-								const gchar* _tmp107_;
-								_tmp74_ = self->priv->current;
-								_tmp75_ = self->priv->end;
-								if (_tmp74_ < _tmp75_) {
+								gboolean _tmp95_ = FALSE;
+								gchar* _tmp96_;
+								gchar* _tmp97_;
+								gboolean _tmp100_;
+								gchar* _tmp101_;
+								ValaMap* _tmp102_;
+								const gchar* _tmp103_;
+								const gchar* _tmp104_;
+								_tmp71_ = self->priv->current;
+								_tmp72_ = self->priv->end;
+								if (_tmp71_ < _tmp72_) {
+									gchar* _tmp73_;
+									gchar _tmp74_;
+									_tmp73_ = self->priv->current;
+									_tmp74_ = _tmp73_[0];
+									_tmp70_ = _tmp74_ != '>';
+								} else {
+									_tmp70_ = FALSE;
+								}
+								_tmp75_ = _tmp70_;
+								if (_tmp75_) {
 									gchar* _tmp76_;
 									gchar _tmp77_;
 									_tmp76_ = self->priv->current;
 									_tmp77_ = _tmp76_[0];
-									_tmp73_ = _tmp77_ != '>';
-								} else {
-									_tmp73_ = FALSE;
-								}
-								_tmp78_ = _tmp73_;
-								if (_tmp78_) {
-									gchar* _tmp79_;
-									gchar _tmp80_;
-									_tmp79_ = self->priv->current;
-									_tmp80_ = _tmp79_[0];
-									_tmp72_ = _tmp80_ != '/';
+									_tmp69_ = _tmp77_ != '/';
 								} else {
-									_tmp72_ = FALSE;
+									_tmp69_ = FALSE;
 								}
-								_tmp81_ = _tmp72_;
-								if (!_tmp81_) {
+								_tmp78_ = _tmp69_;
+								if (!_tmp78_) {
 									break;
 								}
-								_tmp82_ = vala_markup_reader_read_name (self);
-								attr_name = _tmp82_;
-								_tmp84_ = self->priv->current;
-								_tmp85_ = self->priv->end;
-								if (_tmp84_ >= _tmp85_) {
-									_tmp83_ = TRUE;
+								_tmp79_ = vala_markup_reader_read_name (self);
+								attr_name = _tmp79_;
+								_tmp81_ = self->priv->current;
+								_tmp82_ = self->priv->end;
+								if (_tmp81_ >= _tmp82_) {
+									_tmp80_ = TRUE;
 								} else {
-									gchar* _tmp86_;
-									gchar _tmp87_;
-									_tmp86_ = self->priv->current;
-									_tmp87_ = _tmp86_[0];
-									_tmp83_ = _tmp87_ != '=';
+									gchar* _tmp83_;
+									gchar _tmp84_;
+									_tmp83_ = self->priv->current;
+									_tmp84_ = _tmp83_[0];
+									_tmp80_ = _tmp84_ != '=';
 								}
-								_tmp88_ = _tmp83_;
-								if (_tmp88_) {
+								_tmp85_ = _tmp80_;
+								if (_tmp85_) {
 								}
-								_tmp89_ = self->priv->current;
-								self->priv->current = _tmp89_ + 1;
-								_tmp91_ = self->priv->current;
-								_tmp92_ = self->priv->end;
-								if (_tmp91_ >= _tmp92_) {
-									_tmp90_ = TRUE;
+								_tmp86_ = self->priv->current;
+								self->priv->current = _tmp86_ + 1;
+								_tmp88_ = self->priv->current;
+								_tmp89_ = self->priv->end;
+								if (_tmp88_ >= _tmp89_) {
+									_tmp87_ = TRUE;
 								} else {
-									gchar* _tmp93_;
-									gchar _tmp94_;
-									_tmp93_ = self->priv->current;
-									_tmp94_ = _tmp93_[0];
-									_tmp90_ = _tmp94_ != '"';
+									gchar* _tmp90_;
+									gchar _tmp91_;
+									_tmp90_ = self->priv->current;
+									_tmp91_ = _tmp90_[0];
+									_tmp87_ = _tmp91_ != '"';
 								}
-								_tmp95_ = _tmp90_;
-								if (_tmp95_) {
+								_tmp92_ = _tmp87_;
+								if (_tmp92_) {
 								}
+								_tmp93_ = self->priv->current;
+								self->priv->current = _tmp93_ + 1;
+								_tmp94_ = vala_markup_reader_text (self, '"', FALSE);
+								attr_value = _tmp94_;
 								_tmp96_ = self->priv->current;
-								self->priv->current = _tmp96_ + 1;
-								_tmp97_ = vala_markup_reader_text (self, '"', FALSE);
-								attr_value = _tmp97_;
-								_tmp99_ = self->priv->current;
-								_tmp100_ = self->priv->end;
-								if (_tmp99_ >= _tmp100_) {
-									_tmp98_ = TRUE;
+								_tmp97_ = self->priv->end;
+								if (_tmp96_ >= _tmp97_) {
+									_tmp95_ = TRUE;
 								} else {
-									gchar* _tmp101_;
-									gchar _tmp102_;
-									_tmp101_ = self->priv->current;
-									_tmp102_ = _tmp101_[0];
-									_tmp98_ = _tmp102_ != '"';
+									gchar* _tmp98_;
+									gchar _tmp99_;
+									_tmp98_ = self->priv->current;
+									_tmp99_ = _tmp98_[0];
+									_tmp95_ = _tmp99_ != '"';
 								}
-								_tmp103_ = _tmp98_;
-								if (_tmp103_) {
+								_tmp100_ = _tmp95_;
+								if (_tmp100_) {
 								}
-								_tmp104_ = self->priv->current;
-								self->priv->current = _tmp104_ + 1;
-								_tmp105_ = self->priv->attributes;
-								_tmp106_ = attr_name;
-								_tmp107_ = attr_value;
-								vala_map_set (_tmp105_, _tmp106_, _tmp107_);
+								_tmp101_ = self->priv->current;
+								self->priv->current = _tmp101_ + 1;
+								_tmp102_ = self->priv->attributes;
+								_tmp103_ = attr_name;
+								_tmp104_ = attr_value;
+								vala_map_set (_tmp102_, _tmp103_, _tmp104_);
 								vala_markup_reader_space (self);
 								_g_free0 (attr_value);
 								_g_free0 (attr_name);
 							}
-							_tmp108_ = self->priv->current;
-							_tmp109_ = _tmp108_[0];
-							if (_tmp109_ == '/') {
-								gchar* _tmp110_;
+							_tmp105_ = self->priv->current;
+							_tmp106_ = _tmp105_[0];
+							if (_tmp106_ == '/') {
+								gchar* _tmp107_;
 								self->priv->empty_element = TRUE;
-								_tmp110_ = self->priv->current;
-								self->priv->current = _tmp110_ + 1;
+								_tmp107_ = self->priv->current;
+								self->priv->current = _tmp107_ + 1;
 								vala_markup_reader_space (self);
 							} else {
 								self->priv->empty_element = FALSE;
 							}
-							_tmp112_ = self->priv->current;
-							_tmp113_ = self->priv->end;
-							if (_tmp112_ >= _tmp113_) {
-								_tmp111_ = TRUE;
+							_tmp109_ = self->priv->current;
+							_tmp110_ = self->priv->end;
+							if (_tmp109_ >= _tmp110_) {
+								_tmp108_ = TRUE;
 							} else {
-								gchar* _tmp114_;
-								gchar _tmp115_;
-								_tmp114_ = self->priv->current;
-								_tmp115_ = _tmp114_[0];
-								_tmp111_ = _tmp115_ != '>';
+								gchar* _tmp111_;
+								gchar _tmp112_;
+								_tmp111_ = self->priv->current;
+								_tmp112_ = _tmp111_[0];
+								_tmp108_ = _tmp112_ != '>';
 							}
-							_tmp116_ = _tmp111_;
-							if (_tmp116_) {
+							_tmp113_ = _tmp108_;
+							if (_tmp113_) {
 							}
-							_tmp117_ = self->priv->current;
-							self->priv->current = _tmp117_ + 1;
+							_tmp114_ = self->priv->current;
+							self->priv->current = _tmp114_ + 1;
 						}
 					}
 				}
 			}
 		} else {
-			gchar* _tmp118_;
-			gchar _tmp119_;
+			gchar* _tmp115_;
+			gchar _tmp116_;
 			vala_markup_reader_space (self);
-			_tmp118_ = self->priv->current;
-			_tmp119_ = _tmp118_[0];
-			if (_tmp119_ != '<') {
-				gchar* _tmp120_ = NULL;
-				gchar* _tmp121_;
-				_tmp120_ = vala_markup_reader_text (self, '<', TRUE);
-				_tmp121_ = _tmp120_;
-				vala_markup_reader_set_content (self, _tmp121_);
-				_g_free0 (_tmp121_);
+			_tmp115_ = self->priv->current;
+			_tmp116_ = _tmp115_[0];
+			if (_tmp116_ != '<') {
+				gchar* _tmp117_ = NULL;
+				gchar* _tmp118_;
+				_tmp117_ = vala_markup_reader_text (self, '<', TRUE);
+				_tmp118_ = _tmp117_;
+				vala_markup_reader_set_content (self, _tmp118_);
+				_g_free0 (_tmp118_);
 			} else {
-				ValaSourceLocation _tmp122_ = {0};
-				ValaSourceLocation _tmp123_ = {0};
-				ValaMarkupTokenType _tmp124_ = 0;
-				_tmp124_ = vala_markup_reader_read_token (self, &_tmp122_, &_tmp123_);
-				_vala_token_begin = _tmp122_;
-				_vala_token_end = _tmp123_;
-				result = _tmp124_;
+				ValaSourceLocation _tmp119_ = {0};
+				ValaSourceLocation _tmp120_ = {0};
+				ValaMarkupTokenType _tmp121_ = 0;
+				_tmp121_ = vala_markup_reader_read_token (self, &_tmp119_, &_tmp120_);
+				_vala_token_begin = _tmp119_;
+				_vala_token_end = _tmp120_;
+				result = _tmp121_;
 				if (token_begin) {
 					*token_begin = _vala_token_begin;
 				}
@@ -958,11 +951,10 @@ ValaMarkupTokenType vala_markup_reader_read_token (ValaMarkupReader* self, ValaS
 			type = VALA_MARKUP_TOKEN_TYPE_TEXT;
 		}
 	}
-	_tmp125_ = self->priv->current;
-	_tmp126_ = self->priv->line;
-	_tmp127_ = self->priv->column;
-	vala_source_location_init (&_tmp128_, _tmp125_, _tmp126_, _tmp127_ - 1);
-	_vala_token_end = _tmp128_;
+	_tmp122_ = self->priv->current;
+	_tmp123_ = self->priv->line;
+	_tmp124_ = self->priv->column;
+	vala_source_location_init (&_vala_token_end, _tmp122_, _tmp123_, _tmp124_ - 1);
 	result = type;
 	if (token_begin) {
 		*token_begin = _vala_token_begin;
diff --git a/vala/valamemberaccess.c b/vala/valamemberaccess.c
index 37b9a75..8c94bd7 100644
--- a/vala/valamemberaccess.c
+++ b/vala/valamemberaccess.c
@@ -2277,24 +2277,24 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 	ValaCodeContext* _tmp574_;
 	gboolean _tmp575_ = FALSE;
 	ValaSymbol* _tmp576_;
-	ValaSymbol* _tmp994_;
-	ValaSymbol* _tmp995_;
-	ValaSourceReference* _tmp996_;
-	ValaSourceReference* _tmp997_;
-	ValaSymbol* _tmp998_;
-	ValaSourceReference* _tmp999_;
-	ValaSourceReference* _tmp1000_;
-	ValaSymbolAccessibility _tmp1001_;
-	gboolean _tmp1065_ = FALSE;
-	gboolean _tmp1066_;
-	gboolean _tmp1069_;
-	gboolean _tmp1108_ = FALSE;
-	gboolean _tmp1109_ = FALSE;
-	gboolean _tmp1110_;
-	gboolean _tmp1112_;
-	gboolean _tmp1117_;
-	gboolean _tmp1352_;
-	gboolean _tmp1353_;
+	ValaSymbol* _tmp1000_;
+	ValaSymbol* _tmp1001_;
+	ValaSourceReference* _tmp1002_;
+	ValaSourceReference* _tmp1003_;
+	ValaSymbol* _tmp1004_;
+	ValaSourceReference* _tmp1005_;
+	ValaSourceReference* _tmp1006_;
+	ValaSymbolAccessibility _tmp1007_;
+	gboolean _tmp1071_ = FALSE;
+	gboolean _tmp1072_;
+	gboolean _tmp1075_;
+	gboolean _tmp1114_ = FALSE;
+	gboolean _tmp1115_ = FALSE;
+	gboolean _tmp1116_;
+	gboolean _tmp1118_;
+	gboolean _tmp1123_;
+	gboolean _tmp1358_;
+	gboolean _tmp1359_;
 	self = (ValaMemberAccess*) base;
 	g_return_val_if_fail (context != NULL, FALSE);
 	_tmp0_ = vala_code_node_get_checked ((ValaCodeNode*) self);
@@ -4331,21 +4331,21 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 						ValaMethod* _tmp736_;
 						gboolean _tmp737_;
 						gboolean _tmp738_;
-						ValaMethod* _tmp840_;
-						ValaSymbolAccessibility _tmp841_;
-						ValaSymbolAccessibility _tmp842_;
-						ValaMethod* _tmp843_;
-						ValaMethod* _tmp847_;
-						ValaMemberBinding _tmp848_;
-						ValaMemberBinding _tmp849_;
-						ValaMethod* _tmp873_;
-						ValaDataType* _tmp874_;
-						ValaDataType* _tmp875_;
-						ValaGenericType* _tmp876_;
+						ValaMethod* _tmp846_;
+						ValaSymbolAccessibility _tmp847_;
+						ValaSymbolAccessibility _tmp848_;
+						ValaMethod* _tmp849_;
+						ValaMethod* _tmp853_;
+						ValaMemberBinding _tmp854_;
+						ValaMemberBinding _tmp855_;
+						ValaMethod* _tmp879_;
+						ValaDataType* _tmp880_;
+						ValaDataType* _tmp881_;
+						ValaGenericType* _tmp882_;
 						ValaGenericType* generic_type;
-						gboolean _tmp877_ = FALSE;
-						ValaGenericType* _tmp878_;
-						gboolean _tmp884_;
+						gboolean _tmp883_ = FALSE;
+						ValaGenericType* _tmp884_;
+						gboolean _tmp890_;
 						_tmp734_ = member;
 						_tmp735_ = _vala_code_node_ref0 (VALA_METHOD (_tmp734_));
 						m = _tmp735_;
@@ -4623,9 +4623,11 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 									ValaMethod* _tmp834_;
 									ValaMethod* _tmp835_;
 									ValaMethod* _tmp836_;
-									ValaSymbol* _tmp837_;
-									ValaSymbol* _tmp838_;
-									ValaSymbol* _tmp839_;
+									ValaSignal* _tmp837_;
+									ValaSignal* _tmp838_;
+									ValaSymbol* _tmp843_;
+									ValaSymbol* _tmp844_;
+									ValaSymbol* _tmp845_;
 									_tmp832_ = m;
 									_tmp833_ = vala_method_get_base_interface_method (_tmp832_);
 									_tmp834_ = _tmp833_;
@@ -4633,100 +4635,114 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 									_vala_code_node_unref0 (m);
 									m = _tmp835_;
 									_tmp836_ = m;
-									vala_expression_set_symbol_reference ((ValaExpression*) self, (ValaSymbol*) _tmp836_);
-									_tmp837_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+									_tmp837_ = vala_method_get_signal_reference (_tmp836_);
 									_tmp838_ = _tmp837_;
-									_tmp839_ = _vala_code_node_ref0 (_tmp838_);
+									if (_tmp838_ != NULL) {
+										ValaMethod* _tmp839_;
+										ValaSignal* _tmp840_;
+										ValaSignal* _tmp841_;
+										_tmp839_ = m;
+										_tmp840_ = vala_method_get_signal_reference (_tmp839_);
+										_tmp841_ = _tmp840_;
+										vala_expression_set_symbol_reference ((ValaExpression*) self, (ValaSymbol*) _tmp841_);
+									} else {
+										ValaMethod* _tmp842_;
+										_tmp842_ = m;
+										vala_expression_set_symbol_reference ((ValaExpression*) self, (ValaSymbol*) _tmp842_);
+									}
+									_tmp843_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+									_tmp844_ = _tmp843_;
+									_tmp845_ = _vala_code_node_ref0 (_tmp844_);
 									_vala_code_node_unref0 (member);
-									member = _tmp839_;
+									member = _tmp845_;
 								}
 							}
 						}
-						_tmp840_ = m;
-						_tmp841_ = vala_symbol_get_access ((ValaSymbol*) _tmp840_);
-						_tmp842_ = _tmp841_;
-						access = _tmp842_;
-						_tmp843_ = m;
-						if (!VALA_IS_CREATION_METHOD (_tmp843_)) {
-							ValaMethod* _tmp844_;
-							ValaMemberBinding _tmp845_;
-							ValaMemberBinding _tmp846_;
-							_tmp844_ = m;
-							_tmp845_ = vala_method_get_binding (_tmp844_);
-							_tmp846_ = _tmp845_;
-							instance = _tmp846_ == VALA_MEMBER_BINDING_INSTANCE;
+						_tmp846_ = m;
+						_tmp847_ = vala_symbol_get_access ((ValaSymbol*) _tmp846_);
+						_tmp848_ = _tmp847_;
+						access = _tmp848_;
+						_tmp849_ = m;
+						if (!VALA_IS_CREATION_METHOD (_tmp849_)) {
+							ValaMethod* _tmp850_;
+							ValaMemberBinding _tmp851_;
+							ValaMemberBinding _tmp852_;
+							_tmp850_ = m;
+							_tmp851_ = vala_method_get_binding (_tmp850_);
+							_tmp852_ = _tmp851_;
+							instance = _tmp852_ == VALA_MEMBER_BINDING_INSTANCE;
 						}
-						_tmp847_ = m;
-						_tmp848_ = vala_method_get_binding (_tmp847_);
-						_tmp849_ = _tmp848_;
-						klass = _tmp849_ == VALA_MEMBER_BINDING_CLASS;
+						_tmp853_ = m;
+						_tmp854_ = vala_method_get_binding (_tmp853_);
+						_tmp855_ = _tmp854_;
+						klass = _tmp855_ == VALA_MEMBER_BINDING_CLASS;
 						{
-							ValaMethod* _tmp850_;
-							ValaList* _tmp851_ = NULL;
+							ValaMethod* _tmp856_;
+							ValaList* _tmp857_ = NULL;
 							ValaList* _param_list;
-							ValaList* _tmp852_;
-							gint _tmp853_;
-							gint _tmp854_;
+							ValaList* _tmp858_;
+							gint _tmp859_;
+							gint _tmp860_;
 							gint _param_size;
 							gint _param_index;
-							_tmp850_ = m;
-							_tmp851_ = vala_method_get_parameters (_tmp850_);
-							_param_list = _tmp851_;
-							_tmp852_ = _param_list;
-							_tmp853_ = vala_collection_get_size ((ValaCollection*) _tmp852_);
-							_tmp854_ = _tmp853_;
-							_param_size = _tmp854_;
+							_tmp856_ = m;
+							_tmp857_ = vala_method_get_parameters (_tmp856_);
+							_param_list = _tmp857_;
+							_tmp858_ = _param_list;
+							_tmp859_ = vala_collection_get_size ((ValaCollection*) _tmp858_);
+							_tmp860_ = _tmp859_;
+							_param_size = _tmp860_;
 							_param_index = -1;
 							while (TRUE) {
-								gint _tmp855_;
-								gint _tmp856_;
-								gint _tmp857_;
-								ValaList* _tmp858_;
-								gint _tmp859_;
-								gpointer _tmp860_ = NULL;
+								gint _tmp861_;
+								gint _tmp862_;
+								gint _tmp863_;
+								ValaList* _tmp864_;
+								gint _tmp865_;
+								gpointer _tmp866_ = NULL;
 								ValaParameter* param;
-								ValaParameter* _tmp861_;
-								ValaDataType* _tmp862_;
-								ValaDataType* _tmp863_;
-								ValaGenericType* _tmp864_;
+								ValaParameter* _tmp867_;
+								ValaDataType* _tmp868_;
+								ValaDataType* _tmp869_;
+								ValaGenericType* _tmp870_;
 								ValaGenericType* generic_type;
-								gboolean _tmp865_ = FALSE;
-								ValaGenericType* _tmp866_;
-								gboolean _tmp872_;
-								_tmp855_ = _param_index;
-								_param_index = _tmp855_ + 1;
-								_tmp856_ = _param_index;
-								_tmp857_ = _param_size;
-								if (!(_tmp856_ < _tmp857_)) {
+								gboolean _tmp871_ = FALSE;
+								ValaGenericType* _tmp872_;
+								gboolean _tmp878_;
+								_tmp861_ = _param_index;
+								_param_index = _tmp861_ + 1;
+								_tmp862_ = _param_index;
+								_tmp863_ = _param_size;
+								if (!(_tmp862_ < _tmp863_)) {
 									break;
 								}
-								_tmp858_ = _param_list;
-								_tmp859_ = _param_index;
-								_tmp860_ = vala_list_get (_tmp858_, _tmp859_);
-								param = (ValaParameter*) _tmp860_;
-								_tmp861_ = param;
-								_tmp862_ = vala_variable_get_variable_type ((ValaVariable*) _tmp861_);
-								_tmp863_ = _tmp862_;
-								_tmp864_ = _vala_code_node_ref0 (VALA_IS_GENERIC_TYPE (_tmp863_) ? ((ValaGenericType*) _tmp863_) : NULL);
-								generic_type = _tmp864_;
-								_tmp866_ = generic_type;
-								if (_tmp866_ != NULL) {
-									ValaGenericType* _tmp867_;
-									ValaTypeParameter* _tmp868_;
-									ValaTypeParameter* _tmp869_;
-									ValaSymbol* _tmp870_;
-									ValaSymbol* _tmp871_;
-									_tmp867_ = generic_type;
-									_tmp868_ = vala_data_type_get_type_parameter ((ValaDataType*) _tmp867_);
-									_tmp869_ = _tmp868_;
-									_tmp870_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp869_);
-									_tmp871_ = _tmp870_;
-									_tmp865_ = VALA_IS_TYPESYMBOL (_tmp871_);
+								_tmp864_ = _param_list;
+								_tmp865_ = _param_index;
+								_tmp866_ = vala_list_get (_tmp864_, _tmp865_);
+								param = (ValaParameter*) _tmp866_;
+								_tmp867_ = param;
+								_tmp868_ = vala_variable_get_variable_type ((ValaVariable*) _tmp867_);
+								_tmp869_ = _tmp868_;
+								_tmp870_ = _vala_code_node_ref0 (VALA_IS_GENERIC_TYPE (_tmp869_) ? ((ValaGenericType*) _tmp869_) : NULL);
+								generic_type = _tmp870_;
+								_tmp872_ = generic_type;
+								if (_tmp872_ != NULL) {
+									ValaGenericType* _tmp873_;
+									ValaTypeParameter* _tmp874_;
+									ValaTypeParameter* _tmp875_;
+									ValaSymbol* _tmp876_;
+									ValaSymbol* _tmp877_;
+									_tmp873_ = generic_type;
+									_tmp874_ = vala_data_type_get_type_parameter ((ValaDataType*) _tmp873_);
+									_tmp875_ = _tmp874_;
+									_tmp876_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp875_);
+									_tmp877_ = _tmp876_;
+									_tmp871_ = VALA_IS_TYPESYMBOL (_tmp877_);
 								} else {
-									_tmp865_ = FALSE;
+									_tmp871_ = FALSE;
 								}
-								_tmp872_ = _tmp865_;
-								if (_tmp872_) {
+								_tmp878_ = _tmp871_;
+								if (_tmp878_) {
 									generics = TRUE;
 									_vala_code_node_unref0 (generic_type);
 									_vala_code_node_unref0 (param);
@@ -4737,64 +4753,64 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 							}
 							_vala_iterable_unref0 (_param_list);
 						}
-						_tmp873_ = m;
-						_tmp874_ = vala_method_get_return_type (_tmp873_);
-						_tmp875_ = _tmp874_;
-						_tmp876_ = _vala_code_node_ref0 (VALA_IS_GENERIC_TYPE (_tmp875_) ? ((ValaGenericType*) _tmp875_) : NULL);
-						generic_type = _tmp876_;
-						_tmp878_ = generic_type;
-						if (_tmp878_ != NULL) {
-							ValaGenericType* _tmp879_;
-							ValaTypeParameter* _tmp880_;
-							ValaTypeParameter* _tmp881_;
-							ValaSymbol* _tmp882_;
-							ValaSymbol* _tmp883_;
-							_tmp879_ = generic_type;
-							_tmp880_ = vala_data_type_get_type_parameter ((ValaDataType*) _tmp879_);
-							_tmp881_ = _tmp880_;
-							_tmp882_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp881_);
-							_tmp883_ = _tmp882_;
-							_tmp877_ = VALA_IS_TYPESYMBOL (_tmp883_);
+						_tmp879_ = m;
+						_tmp880_ = vala_method_get_return_type (_tmp879_);
+						_tmp881_ = _tmp880_;
+						_tmp882_ = _vala_code_node_ref0 (VALA_IS_GENERIC_TYPE (_tmp881_) ? ((ValaGenericType*) _tmp881_) : NULL);
+						generic_type = _tmp882_;
+						_tmp884_ = generic_type;
+						if (_tmp884_ != NULL) {
+							ValaGenericType* _tmp885_;
+							ValaTypeParameter* _tmp886_;
+							ValaTypeParameter* _tmp887_;
+							ValaSymbol* _tmp888_;
+							ValaSymbol* _tmp889_;
+							_tmp885_ = generic_type;
+							_tmp886_ = vala_data_type_get_type_parameter ((ValaDataType*) _tmp885_);
+							_tmp887_ = _tmp886_;
+							_tmp888_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp887_);
+							_tmp889_ = _tmp888_;
+							_tmp883_ = VALA_IS_TYPESYMBOL (_tmp889_);
 						} else {
-							_tmp877_ = FALSE;
+							_tmp883_ = FALSE;
 						}
-						_tmp884_ = _tmp877_;
-						if (_tmp884_) {
+						_tmp890_ = _tmp883_;
+						if (_tmp890_) {
 							generics = TRUE;
 						}
 						_vala_code_node_unref0 (generic_type);
 						_vala_code_node_unref0 (m);
 					} else {
-						ValaSymbol* _tmp885_;
-						_tmp885_ = member;
-						if (VALA_IS_PROPERTY (_tmp885_)) {
-							ValaSymbol* _tmp886_;
-							ValaProperty* _tmp887_;
-							ValaProperty* prop;
-							ValaProperty* _tmp888_;
-							ValaCodeContext* _tmp889_;
-							gboolean _tmp890_ = FALSE;
-							ValaProperty* _tmp891_;
-							ValaProperty* _tmp892_;
+						ValaSymbol* _tmp891_;
+						_tmp891_ = member;
+						if (VALA_IS_PROPERTY (_tmp891_)) {
+							ValaSymbol* _tmp892_;
 							ValaProperty* _tmp893_;
-							ValaProperty* _tmp913_;
-							ValaSymbolAccessibility _tmp914_;
-							ValaSymbolAccessibility _tmp915_;
-							gboolean _tmp916_;
-							gboolean _tmp917_;
-							ValaProperty* _tmp984_;
-							ValaMemberBinding _tmp985_;
-							ValaMemberBinding _tmp986_;
-							ValaProperty* _tmp987_;
-							ValaDataType* _tmp988_;
-							ValaDataType* _tmp989_;
-							_tmp886_ = member;
-							_tmp887_ = _vala_code_node_ref0 (VALA_PROPERTY (_tmp886_));
-							prop = _tmp887_;
-							_tmp888_ = prop;
-							_tmp889_ = context;
-							_tmp890_ = vala_code_node_check ((ValaCodeNode*) _tmp888_, _tmp889_);
-							if (!_tmp890_) {
+							ValaProperty* prop;
+							ValaProperty* _tmp894_;
+							ValaCodeContext* _tmp895_;
+							gboolean _tmp896_ = FALSE;
+							ValaProperty* _tmp897_;
+							ValaProperty* _tmp898_;
+							ValaProperty* _tmp899_;
+							ValaProperty* _tmp919_;
+							ValaSymbolAccessibility _tmp920_;
+							ValaSymbolAccessibility _tmp921_;
+							gboolean _tmp922_;
+							gboolean _tmp923_;
+							ValaProperty* _tmp990_;
+							ValaMemberBinding _tmp991_;
+							ValaMemberBinding _tmp992_;
+							ValaProperty* _tmp993_;
+							ValaDataType* _tmp994_;
+							ValaDataType* _tmp995_;
+							_tmp892_ = member;
+							_tmp893_ = _vala_code_node_ref0 (VALA_PROPERTY (_tmp892_));
+							prop = _tmp893_;
+							_tmp894_ = prop;
+							_tmp895_ = context;
+							_tmp896_ = vala_code_node_check ((ValaCodeNode*) _tmp894_, _tmp895_);
+							if (!_tmp896_) {
 								vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
 								result = FALSE;
 								_vala_code_node_unref0 (prop);
@@ -4803,97 +4819,97 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 								_vala_code_node_unref0 (base_symbol);
 								return result;
 							}
-							_tmp891_ = prop;
-							_tmp892_ = vala_property_get_base_property (_tmp891_);
-							_tmp893_ = _tmp892_;
-							if (_tmp893_ != NULL) {
-								ValaProperty* _tmp894_;
-								ValaProperty* _tmp895_;
-								ValaProperty* _tmp896_;
-								ValaProperty* _tmp897_;
-								ValaProperty* _tmp898_;
-								ValaSymbol* _tmp899_;
-								ValaSymbol* _tmp900_;
-								ValaSymbol* _tmp901_;
-								_tmp894_ = prop;
-								_tmp895_ = vala_property_get_base_property (_tmp894_);
-								_tmp896_ = _tmp895_;
-								_tmp897_ = _vala_code_node_ref0 (_tmp896_);
-								_vala_code_node_unref0 (prop);
-								prop = _tmp897_;
-								_tmp898_ = prop;
-								vala_expression_set_symbol_reference ((ValaExpression*) self, (ValaSymbol*) _tmp898_);
-								_tmp899_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
-								_tmp900_ = _tmp899_;
-								_tmp901_ = _vala_code_node_ref0 (_tmp900_);
-								_vala_code_node_unref0 (member);
-								member = _tmp901_;
-							} else {
+							_tmp897_ = prop;
+							_tmp898_ = vala_property_get_base_property (_tmp897_);
+							_tmp899_ = _tmp898_;
+							if (_tmp899_ != NULL) {
+								ValaProperty* _tmp900_;
+								ValaProperty* _tmp901_;
 								ValaProperty* _tmp902_;
 								ValaProperty* _tmp903_;
 								ValaProperty* _tmp904_;
-								_tmp902_ = prop;
-								_tmp903_ = vala_property_get_base_interface_property (_tmp902_);
-								_tmp904_ = _tmp903_;
-								if (_tmp904_ != NULL) {
-									ValaProperty* _tmp905_;
-									ValaProperty* _tmp906_;
-									ValaProperty* _tmp907_;
-									ValaProperty* _tmp908_;
-									ValaProperty* _tmp909_;
-									ValaSymbol* _tmp910_;
-									ValaSymbol* _tmp911_;
-									ValaSymbol* _tmp912_;
-									_tmp905_ = prop;
-									_tmp906_ = vala_property_get_base_interface_property (_tmp905_);
-									_tmp907_ = _tmp906_;
-									_tmp908_ = _vala_code_node_ref0 (_tmp907_);
+								ValaSymbol* _tmp905_;
+								ValaSymbol* _tmp906_;
+								ValaSymbol* _tmp907_;
+								_tmp900_ = prop;
+								_tmp901_ = vala_property_get_base_property (_tmp900_);
+								_tmp902_ = _tmp901_;
+								_tmp903_ = _vala_code_node_ref0 (_tmp902_);
+								_vala_code_node_unref0 (prop);
+								prop = _tmp903_;
+								_tmp904_ = prop;
+								vala_expression_set_symbol_reference ((ValaExpression*) self, (ValaSymbol*) _tmp904_);
+								_tmp905_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+								_tmp906_ = _tmp905_;
+								_tmp907_ = _vala_code_node_ref0 (_tmp906_);
+								_vala_code_node_unref0 (member);
+								member = _tmp907_;
+							} else {
+								ValaProperty* _tmp908_;
+								ValaProperty* _tmp909_;
+								ValaProperty* _tmp910_;
+								_tmp908_ = prop;
+								_tmp909_ = vala_property_get_base_interface_property (_tmp908_);
+								_tmp910_ = _tmp909_;
+								if (_tmp910_ != NULL) {
+									ValaProperty* _tmp911_;
+									ValaProperty* _tmp912_;
+									ValaProperty* _tmp913_;
+									ValaProperty* _tmp914_;
+									ValaProperty* _tmp915_;
+									ValaSymbol* _tmp916_;
+									ValaSymbol* _tmp917_;
+									ValaSymbol* _tmp918_;
+									_tmp911_ = prop;
+									_tmp912_ = vala_property_get_base_interface_property (_tmp911_);
+									_tmp913_ = _tmp912_;
+									_tmp914_ = _vala_code_node_ref0 (_tmp913_);
 									_vala_code_node_unref0 (prop);
-									prop = _tmp908_;
-									_tmp909_ = prop;
-									vala_expression_set_symbol_reference ((ValaExpression*) self, (ValaSymbol*) _tmp909_);
-									_tmp910_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
-									_tmp911_ = _tmp910_;
-									_tmp912_ = _vala_code_node_ref0 (_tmp911_);
+									prop = _tmp914_;
+									_tmp915_ = prop;
+									vala_expression_set_symbol_reference ((ValaExpression*) self, (ValaSymbol*) _tmp915_);
+									_tmp916_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+									_tmp917_ = _tmp916_;
+									_tmp918_ = _vala_code_node_ref0 (_tmp917_);
 									_vala_code_node_unref0 (member);
-									member = _tmp912_;
+									member = _tmp918_;
 								}
 							}
-							_tmp913_ = prop;
-							_tmp914_ = vala_symbol_get_access ((ValaSymbol*) _tmp913_);
-							_tmp915_ = _tmp914_;
-							access = _tmp915_;
-							_tmp916_ = vala_expression_get_lvalue ((ValaExpression*) self);
-							_tmp917_ = _tmp916_;
-							if (_tmp917_) {
-								ValaProperty* _tmp918_;
-								ValaPropertyAccessor* _tmp919_;
-								ValaPropertyAccessor* _tmp920_;
-								ValaProperty* _tmp928_;
-								ValaSymbolAccessibility _tmp929_;
-								ValaSymbolAccessibility _tmp930_;
-								_tmp918_ = prop;
-								_tmp919_ = vala_property_get_set_accessor (_tmp918_);
-								_tmp920_ = _tmp919_;
-								if (_tmp920_ == NULL) {
-									ValaSourceReference* _tmp921_;
-									ValaSourceReference* _tmp922_;
-									ValaProperty* _tmp923_;
-									gchar* _tmp924_ = NULL;
-									gchar* _tmp925_;
-									gchar* _tmp926_ = NULL;
-									gchar* _tmp927_;
+							_tmp919_ = prop;
+							_tmp920_ = vala_symbol_get_access ((ValaSymbol*) _tmp919_);
+							_tmp921_ = _tmp920_;
+							access = _tmp921_;
+							_tmp922_ = vala_expression_get_lvalue ((ValaExpression*) self);
+							_tmp923_ = _tmp922_;
+							if (_tmp923_) {
+								ValaProperty* _tmp924_;
+								ValaPropertyAccessor* _tmp925_;
+								ValaPropertyAccessor* _tmp926_;
+								ValaProperty* _tmp934_;
+								ValaSymbolAccessibility _tmp935_;
+								ValaSymbolAccessibility _tmp936_;
+								_tmp924_ = prop;
+								_tmp925_ = vala_property_get_set_accessor (_tmp924_);
+								_tmp926_ = _tmp925_;
+								if (_tmp926_ == NULL) {
+									ValaSourceReference* _tmp927_;
+									ValaSourceReference* _tmp928_;
+									ValaProperty* _tmp929_;
+									gchar* _tmp930_ = NULL;
+									gchar* _tmp931_;
+									gchar* _tmp932_ = NULL;
+									gchar* _tmp933_;
 									vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
-									_tmp921_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-									_tmp922_ = _tmp921_;
-									_tmp923_ = prop;
-									_tmp924_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp923_);
-									_tmp925_ = _tmp924_;
-									_tmp926_ = g_strdup_printf ("Property `%s' is read-only", _tmp925_);
-									_tmp927_ = _tmp926_;
-									vala_report_error (_tmp922_, _tmp927_);
-									_g_free0 (_tmp927_);
-									_g_free0 (_tmp925_);
+									_tmp927_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
+									_tmp928_ = _tmp927_;
+									_tmp929_ = prop;
+									_tmp930_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp929_);
+									_tmp931_ = _tmp930_;
+									_tmp932_ = g_strdup_printf ("Property `%s' is read-only", _tmp931_);
+									_tmp933_ = _tmp932_;
+									vala_report_error (_tmp928_, _tmp933_);
+									_g_free0 (_tmp933_);
+									_g_free0 (_tmp931_);
 									result = FALSE;
 									_vala_code_node_unref0 (prop);
 									_vala_code_node_unref0 (member);
@@ -4901,47 +4917,31 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 									_vala_code_node_unref0 (base_symbol);
 									return result;
 								}
-								_tmp928_ = prop;
-								_tmp929_ = vala_symbol_get_access ((ValaSymbol*) _tmp928_);
-								_tmp930_ = _tmp929_;
-								if (_tmp930_ == VALA_SYMBOL_ACCESSIBILITY_PUBLIC) {
-									ValaProperty* _tmp931_;
-									ValaPropertyAccessor* _tmp932_;
-									ValaPropertyAccessor* _tmp933_;
-									ValaSymbolAccessibility _tmp934_;
-									ValaSymbolAccessibility _tmp935_;
-									_tmp931_ = prop;
-									_tmp932_ = vala_property_get_set_accessor (_tmp931_);
-									_tmp933_ = _tmp932_;
-									_tmp934_ = vala_symbol_get_access ((ValaSymbol*) _tmp933_);
-									_tmp935_ = _tmp934_;
-									access = _tmp935_;
-								} else {
-									gboolean _tmp936_ = FALSE;
+								_tmp934_ = prop;
+								_tmp935_ = vala_symbol_get_access ((ValaSymbol*) _tmp934_);
+								_tmp936_ = _tmp935_;
+								if (_tmp936_ == VALA_SYMBOL_ACCESSIBILITY_PUBLIC) {
 									ValaProperty* _tmp937_;
-									ValaSymbolAccessibility _tmp938_;
-									ValaSymbolAccessibility _tmp939_;
-									gboolean _tmp945_;
+									ValaPropertyAccessor* _tmp938_;
+									ValaPropertyAccessor* _tmp939_;
+									ValaSymbolAccessibility _tmp940_;
+									ValaSymbolAccessibility _tmp941_;
 									_tmp937_ = prop;
-									_tmp938_ = vala_symbol_get_access ((ValaSymbol*) _tmp937_);
+									_tmp938_ = vala_property_get_set_accessor (_tmp937_);
 									_tmp939_ = _tmp938_;
-									if (_tmp939_ == VALA_SYMBOL_ACCESSIBILITY_PROTECTED) {
-										ValaProperty* _tmp940_;
-										ValaPropertyAccessor* _tmp941_;
-										ValaPropertyAccessor* _tmp942_;
-										ValaSymbolAccessibility _tmp943_;
-										ValaSymbolAccessibility _tmp944_;
-										_tmp940_ = prop;
-										_tmp941_ = vala_property_get_set_accessor (_tmp940_);
-										_tmp942_ = _tmp941_;
-										_tmp943_ = vala_symbol_get_access ((ValaSymbol*) _tmp942_);
-										_tmp944_ = _tmp943_;
-										_tmp936_ = _tmp944_ != VALA_SYMBOL_ACCESSIBILITY_PUBLIC;
-									} else {
-										_tmp936_ = FALSE;
-									}
-									_tmp945_ = _tmp936_;
-									if (_tmp945_) {
+									_tmp940_ = vala_symbol_get_access ((ValaSymbol*) _tmp939_);
+									_tmp941_ = _tmp940_;
+									access = _tmp941_;
+								} else {
+									gboolean _tmp942_ = FALSE;
+									ValaProperty* _tmp943_;
+									ValaSymbolAccessibility _tmp944_;
+									ValaSymbolAccessibility _tmp945_;
+									gboolean _tmp951_;
+									_tmp943_ = prop;
+									_tmp944_ = vala_symbol_get_access ((ValaSymbol*) _tmp943_);
+									_tmp945_ = _tmp944_;
+									if (_tmp945_ == VALA_SYMBOL_ACCESSIBILITY_PROTECTED) {
 										ValaProperty* _tmp946_;
 										ValaPropertyAccessor* _tmp947_;
 										ValaPropertyAccessor* _tmp948_;
@@ -4952,38 +4952,54 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 										_tmp948_ = _tmp947_;
 										_tmp949_ = vala_symbol_get_access ((ValaSymbol*) _tmp948_);
 										_tmp950_ = _tmp949_;
-										access = _tmp950_;
+										_tmp942_ = _tmp950_ != VALA_SYMBOL_ACCESSIBILITY_PUBLIC;
+									} else {
+										_tmp942_ = FALSE;
+									}
+									_tmp951_ = _tmp942_;
+									if (_tmp951_) {
+										ValaProperty* _tmp952_;
+										ValaPropertyAccessor* _tmp953_;
+										ValaPropertyAccessor* _tmp954_;
+										ValaSymbolAccessibility _tmp955_;
+										ValaSymbolAccessibility _tmp956_;
+										_tmp952_ = prop;
+										_tmp953_ = vala_property_get_set_accessor (_tmp952_);
+										_tmp954_ = _tmp953_;
+										_tmp955_ = vala_symbol_get_access ((ValaSymbol*) _tmp954_);
+										_tmp956_ = _tmp955_;
+										access = _tmp956_;
 									}
 								}
 							} else {
-								ValaProperty* _tmp951_;
-								ValaPropertyAccessor* _tmp952_;
-								ValaPropertyAccessor* _tmp953_;
-								ValaProperty* _tmp961_;
-								ValaSymbolAccessibility _tmp962_;
-								ValaSymbolAccessibility _tmp963_;
-								_tmp951_ = prop;
-								_tmp952_ = vala_property_get_get_accessor (_tmp951_);
-								_tmp953_ = _tmp952_;
-								if (_tmp953_ == NULL) {
-									ValaSourceReference* _tmp954_;
-									ValaSourceReference* _tmp955_;
-									ValaProperty* _tmp956_;
-									gchar* _tmp957_ = NULL;
-									gchar* _tmp958_;
-									gchar* _tmp959_ = NULL;
-									gchar* _tmp960_;
+								ValaProperty* _tmp957_;
+								ValaPropertyAccessor* _tmp958_;
+								ValaPropertyAccessor* _tmp959_;
+								ValaProperty* _tmp967_;
+								ValaSymbolAccessibility _tmp968_;
+								ValaSymbolAccessibility _tmp969_;
+								_tmp957_ = prop;
+								_tmp958_ = vala_property_get_get_accessor (_tmp957_);
+								_tmp959_ = _tmp958_;
+								if (_tmp959_ == NULL) {
+									ValaSourceReference* _tmp960_;
+									ValaSourceReference* _tmp961_;
+									ValaProperty* _tmp962_;
+									gchar* _tmp963_ = NULL;
+									gchar* _tmp964_;
+									gchar* _tmp965_ = NULL;
+									gchar* _tmp966_;
 									vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
-									_tmp954_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-									_tmp955_ = _tmp954_;
-									_tmp956_ = prop;
-									_tmp957_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp956_);
-									_tmp958_ = _tmp957_;
-									_tmp959_ = g_strdup_printf ("Property `%s' is write-only", _tmp958_);
-									_tmp960_ = _tmp959_;
-									vala_report_error (_tmp955_, _tmp960_);
-									_g_free0 (_tmp960_);
-									_g_free0 (_tmp958_);
+									_tmp960_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
+									_tmp961_ = _tmp960_;
+									_tmp962_ = prop;
+									_tmp963_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp962_);
+									_tmp964_ = _tmp963_;
+									_tmp965_ = g_strdup_printf ("Property `%s' is write-only", _tmp964_);
+									_tmp966_ = _tmp965_;
+									vala_report_error (_tmp961_, _tmp966_);
+									_g_free0 (_tmp966_);
+									_g_free0 (_tmp964_);
 									result = FALSE;
 									_vala_code_node_unref0 (prop);
 									_vala_code_node_unref0 (member);
@@ -4991,47 +5007,31 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 									_vala_code_node_unref0 (base_symbol);
 									return result;
 								}
-								_tmp961_ = prop;
-								_tmp962_ = vala_symbol_get_access ((ValaSymbol*) _tmp961_);
-								_tmp963_ = _tmp962_;
-								if (_tmp963_ == VALA_SYMBOL_ACCESSIBILITY_PUBLIC) {
-									ValaProperty* _tmp964_;
-									ValaPropertyAccessor* _tmp965_;
-									ValaPropertyAccessor* _tmp966_;
-									ValaSymbolAccessibility _tmp967_;
-									ValaSymbolAccessibility _tmp968_;
-									_tmp964_ = prop;
-									_tmp965_ = vala_property_get_get_accessor (_tmp964_);
-									_tmp966_ = _tmp965_;
-									_tmp967_ = vala_symbol_get_access ((ValaSymbol*) _tmp966_);
-									_tmp968_ = _tmp967_;
-									access = _tmp968_;
-								} else {
-									gboolean _tmp969_ = FALSE;
+								_tmp967_ = prop;
+								_tmp968_ = vala_symbol_get_access ((ValaSymbol*) _tmp967_);
+								_tmp969_ = _tmp968_;
+								if (_tmp969_ == VALA_SYMBOL_ACCESSIBILITY_PUBLIC) {
 									ValaProperty* _tmp970_;
-									ValaSymbolAccessibility _tmp971_;
-									ValaSymbolAccessibility _tmp972_;
-									gboolean _tmp978_;
+									ValaPropertyAccessor* _tmp971_;
+									ValaPropertyAccessor* _tmp972_;
+									ValaSymbolAccessibility _tmp973_;
+									ValaSymbolAccessibility _tmp974_;
 									_tmp970_ = prop;
-									_tmp971_ = vala_symbol_get_access ((ValaSymbol*) _tmp970_);
+									_tmp971_ = vala_property_get_get_accessor (_tmp970_);
 									_tmp972_ = _tmp971_;
-									if (_tmp972_ == VALA_SYMBOL_ACCESSIBILITY_PROTECTED) {
-										ValaProperty* _tmp973_;
-										ValaPropertyAccessor* _tmp974_;
-										ValaPropertyAccessor* _tmp975_;
-										ValaSymbolAccessibility _tmp976_;
-										ValaSymbolAccessibility _tmp977_;
-										_tmp973_ = prop;
-										_tmp974_ = vala_property_get_get_accessor (_tmp973_);
-										_tmp975_ = _tmp974_;
-										_tmp976_ = vala_symbol_get_access ((ValaSymbol*) _tmp975_);
-										_tmp977_ = _tmp976_;
-										_tmp969_ = _tmp977_ != VALA_SYMBOL_ACCESSIBILITY_PUBLIC;
-									} else {
-										_tmp969_ = FALSE;
-									}
-									_tmp978_ = _tmp969_;
-									if (_tmp978_) {
+									_tmp973_ = vala_symbol_get_access ((ValaSymbol*) _tmp972_);
+									_tmp974_ = _tmp973_;
+									access = _tmp974_;
+								} else {
+									gboolean _tmp975_ = FALSE;
+									ValaProperty* _tmp976_;
+									ValaSymbolAccessibility _tmp977_;
+									ValaSymbolAccessibility _tmp978_;
+									gboolean _tmp984_;
+									_tmp976_ = prop;
+									_tmp977_ = vala_symbol_get_access ((ValaSymbol*) _tmp976_);
+									_tmp978_ = _tmp977_;
+									if (_tmp978_ == VALA_SYMBOL_ACCESSIBILITY_PROTECTED) {
 										ValaProperty* _tmp979_;
 										ValaPropertyAccessor* _tmp980_;
 										ValaPropertyAccessor* _tmp981_;
@@ -5042,33 +5042,49 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 										_tmp981_ = _tmp980_;
 										_tmp982_ = vala_symbol_get_access ((ValaSymbol*) _tmp981_);
 										_tmp983_ = _tmp982_;
-										access = _tmp983_;
+										_tmp975_ = _tmp983_ != VALA_SYMBOL_ACCESSIBILITY_PUBLIC;
+									} else {
+										_tmp975_ = FALSE;
+									}
+									_tmp984_ = _tmp975_;
+									if (_tmp984_) {
+										ValaProperty* _tmp985_;
+										ValaPropertyAccessor* _tmp986_;
+										ValaPropertyAccessor* _tmp987_;
+										ValaSymbolAccessibility _tmp988_;
+										ValaSymbolAccessibility _tmp989_;
+										_tmp985_ = prop;
+										_tmp986_ = vala_property_get_get_accessor (_tmp985_);
+										_tmp987_ = _tmp986_;
+										_tmp988_ = vala_symbol_get_access ((ValaSymbol*) _tmp987_);
+										_tmp989_ = _tmp988_;
+										access = _tmp989_;
 									}
 								}
 							}
-							_tmp984_ = prop;
-							_tmp985_ = vala_property_get_binding (_tmp984_);
-							_tmp986_ = _tmp985_;
-							instance = _tmp986_ == VALA_MEMBER_BINDING_INSTANCE;
-							_tmp987_ = prop;
-							_tmp988_ = vala_property_get_property_type (_tmp987_);
-							_tmp989_ = _tmp988_;
-							if (VALA_IS_GENERIC_TYPE (_tmp989_)) {
+							_tmp990_ = prop;
+							_tmp991_ = vala_property_get_binding (_tmp990_);
+							_tmp992_ = _tmp991_;
+							instance = _tmp992_ == VALA_MEMBER_BINDING_INSTANCE;
+							_tmp993_ = prop;
+							_tmp994_ = vala_property_get_property_type (_tmp993_);
+							_tmp995_ = _tmp994_;
+							if (VALA_IS_GENERIC_TYPE (_tmp995_)) {
 								generics = TRUE;
 							}
 							_vala_code_node_unref0 (prop);
 						} else {
-							ValaSymbol* _tmp990_;
-							_tmp990_ = member;
-							if (VALA_IS_SIGNAL (_tmp990_)) {
-								ValaSymbol* _tmp991_;
-								ValaSymbolAccessibility _tmp992_;
-								ValaSymbolAccessibility _tmp993_;
+							ValaSymbol* _tmp996_;
+							_tmp996_ = member;
+							if (VALA_IS_SIGNAL (_tmp996_)) {
+								ValaSymbol* _tmp997_;
+								ValaSymbolAccessibility _tmp998_;
+								ValaSymbolAccessibility _tmp999_;
 								instance = TRUE;
-								_tmp991_ = member;
-								_tmp992_ = vala_symbol_get_access (_tmp991_);
-								_tmp993_ = _tmp992_;
-								access = _tmp993_;
+								_tmp997_ = member;
+								_tmp998_ = vala_symbol_get_access (_tmp997_);
+								_tmp999_ = _tmp998_;
+								access = _tmp999_;
 							}
 						}
 					}
@@ -5076,101 +5092,101 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 			}
 		}
 	}
-	_tmp994_ = member;
-	vala_symbol_set_used (_tmp994_, TRUE);
-	_tmp995_ = member;
-	_tmp996_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-	_tmp997_ = _tmp996_;
-	vala_symbol_check_deprecated (_tmp995_, _tmp997_);
-	_tmp998_ = member;
-	_tmp999_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-	_tmp1000_ = _tmp999_;
-	vala_symbol_check_experimental (_tmp998_, _tmp1000_);
-	_tmp1001_ = access;
-	if (_tmp1001_ == VALA_SYMBOL_ACCESSIBILITY_PROTECTED) {
-		ValaSymbol* _tmp1002_;
-		ValaSymbol* _tmp1003_;
-		ValaSymbol* _tmp1004_;
-		ValaTypeSymbol* _tmp1005_;
+	_tmp1000_ = member;
+	vala_symbol_set_used (_tmp1000_, TRUE);
+	_tmp1001_ = member;
+	_tmp1002_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
+	_tmp1003_ = _tmp1002_;
+	vala_symbol_check_deprecated (_tmp1001_, _tmp1003_);
+	_tmp1004_ = member;
+	_tmp1005_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
+	_tmp1006_ = _tmp1005_;
+	vala_symbol_check_experimental (_tmp1004_, _tmp1006_);
+	_tmp1007_ = access;
+	if (_tmp1007_ == VALA_SYMBOL_ACCESSIBILITY_PROTECTED) {
+		ValaSymbol* _tmp1008_;
+		ValaSymbol* _tmp1009_;
+		ValaSymbol* _tmp1010_;
+		ValaTypeSymbol* _tmp1011_;
 		ValaTypeSymbol* target_type;
 		gboolean in_subtype;
-		gboolean _tmp1029_;
-		_tmp1002_ = member;
-		_tmp1003_ = vala_symbol_get_parent_symbol (_tmp1002_);
-		_tmp1004_ = _tmp1003_;
-		_tmp1005_ = _vala_code_node_ref0 (VALA_TYPESYMBOL (_tmp1004_));
-		target_type = _tmp1005_;
+		gboolean _tmp1035_;
+		_tmp1008_ = member;
+		_tmp1009_ = vala_symbol_get_parent_symbol (_tmp1008_);
+		_tmp1010_ = _tmp1009_;
+		_tmp1011_ = _vala_code_node_ref0 (VALA_TYPESYMBOL (_tmp1010_));
+		target_type = _tmp1011_;
 		in_subtype = FALSE;
 		{
-			ValaCodeContext* _tmp1006_;
-			ValaSemanticAnalyzer* _tmp1007_;
-			ValaSemanticAnalyzer* _tmp1008_;
-			ValaSymbol* _tmp1009_;
-			ValaSymbol* _tmp1010_;
-			ValaSymbol* _tmp1011_;
+			ValaCodeContext* _tmp1012_;
+			ValaSemanticAnalyzer* _tmp1013_;
+			ValaSemanticAnalyzer* _tmp1014_;
+			ValaSymbol* _tmp1015_;
+			ValaSymbol* _tmp1016_;
+			ValaSymbol* _tmp1017_;
 			ValaSymbol* this_symbol;
-			_tmp1006_ = context;
-			_tmp1007_ = vala_code_context_get_analyzer (_tmp1006_);
-			_tmp1008_ = _tmp1007_;
-			_tmp1009_ = vala_semantic_analyzer_get_current_symbol (_tmp1008_);
-			_tmp1010_ = _tmp1009_;
-			_tmp1011_ = _vala_code_node_ref0 (_tmp1010_);
-			this_symbol = _tmp1011_;
+			_tmp1012_ = context;
+			_tmp1013_ = vala_code_context_get_analyzer (_tmp1012_);
+			_tmp1014_ = _tmp1013_;
+			_tmp1015_ = vala_semantic_analyzer_get_current_symbol (_tmp1014_);
+			_tmp1016_ = _tmp1015_;
+			_tmp1017_ = _vala_code_node_ref0 (_tmp1016_);
+			this_symbol = _tmp1017_;
 			{
-				gboolean _tmp1012_;
-				_tmp1012_ = TRUE;
+				gboolean _tmp1018_;
+				_tmp1018_ = TRUE;
 				while (TRUE) {
-					gboolean _tmp1013_;
-					ValaSymbol* _tmp1018_;
-					ValaSymbol* _tmp1019_;
-					ValaTypeSymbol* _tmp1020_;
-					ValaSymbol* _tmp1021_;
-					ValaClass* _tmp1022_;
+					gboolean _tmp1019_;
+					ValaSymbol* _tmp1024_;
+					ValaSymbol* _tmp1025_;
+					ValaTypeSymbol* _tmp1026_;
+					ValaSymbol* _tmp1027_;
+					ValaClass* _tmp1028_;
 					ValaClass* cl;
-					gboolean _tmp1023_ = FALSE;
-					ValaClass* _tmp1024_;
-					gboolean _tmp1028_;
-					_tmp1013_ = _tmp1012_;
-					if (!_tmp1013_) {
-						ValaSymbol* _tmp1014_;
-						ValaSymbol* _tmp1015_;
-						ValaSymbol* _tmp1016_;
-						ValaSymbol* _tmp1017_;
-						_tmp1014_ = this_symbol;
-						_tmp1015_ = vala_symbol_get_parent_symbol (_tmp1014_);
-						_tmp1016_ = _tmp1015_;
-						_tmp1017_ = _vala_code_node_ref0 (_tmp1016_);
+					gboolean _tmp1029_ = FALSE;
+					ValaClass* _tmp1030_;
+					gboolean _tmp1034_;
+					_tmp1019_ = _tmp1018_;
+					if (!_tmp1019_) {
+						ValaSymbol* _tmp1020_;
+						ValaSymbol* _tmp1021_;
+						ValaSymbol* _tmp1022_;
+						ValaSymbol* _tmp1023_;
+						_tmp1020_ = this_symbol;
+						_tmp1021_ = vala_symbol_get_parent_symbol (_tmp1020_);
+						_tmp1022_ = _tmp1021_;
+						_tmp1023_ = _vala_code_node_ref0 (_tmp1022_);
 						_vala_code_node_unref0 (this_symbol);
-						this_symbol = _tmp1017_;
+						this_symbol = _tmp1023_;
 					}
-					_tmp1012_ = FALSE;
-					_tmp1018_ = this_symbol;
-					if (!(_tmp1018_ != NULL)) {
+					_tmp1018_ = FALSE;
+					_tmp1024_ = this_symbol;
+					if (!(_tmp1024_ != NULL)) {
 						break;
 					}
-					_tmp1019_ = this_symbol;
-					_tmp1020_ = target_type;
-					if (_tmp1019_ == VALA_SYMBOL (_tmp1020_)) {
+					_tmp1025_ = this_symbol;
+					_tmp1026_ = target_type;
+					if (_tmp1025_ == VALA_SYMBOL (_tmp1026_)) {
 						in_subtype = TRUE;
 						break;
 					}
-					_tmp1021_ = this_symbol;
-					_tmp1022_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp1021_) ? ((ValaClass*) _tmp1021_) : NULL);
-					cl = _tmp1022_;
-					_tmp1024_ = cl;
-					if (_tmp1024_ != NULL) {
-						ValaClass* _tmp1025_;
-						ValaTypeSymbol* _tmp1026_;
-						gboolean _tmp1027_ = FALSE;
-						_tmp1025_ = cl;
-						_tmp1026_ = target_type;
-						_tmp1027_ = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp1025_, _tmp1026_);
-						_tmp1023_ = _tmp1027_;
+					_tmp1027_ = this_symbol;
+					_tmp1028_ = _vala_code_node_ref0 (VALA_IS_CLASS (_tmp1027_) ? ((ValaClass*) _tmp1027_) : NULL);
+					cl = _tmp1028_;
+					_tmp1030_ = cl;
+					if (_tmp1030_ != NULL) {
+						ValaClass* _tmp1031_;
+						ValaTypeSymbol* _tmp1032_;
+						gboolean _tmp1033_ = FALSE;
+						_tmp1031_ = cl;
+						_tmp1032_ = target_type;
+						_tmp1033_ = vala_typesymbol_is_subtype_of ((ValaTypeSymbol*) _tmp1031_, _tmp1032_);
+						_tmp1029_ = _tmp1033_;
 					} else {
-						_tmp1023_ = FALSE;
+						_tmp1029_ = FALSE;
 					}
-					_tmp1028_ = _tmp1023_;
-					if (_tmp1028_) {
+					_tmp1034_ = _tmp1029_;
+					if (_tmp1034_) {
 						in_subtype = TRUE;
 						_vala_code_node_unref0 (cl);
 						break;
@@ -5180,26 +5196,26 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 			}
 			_vala_code_node_unref0 (this_symbol);
 		}
-		_tmp1029_ = in_subtype;
-		if (!_tmp1029_) {
-			ValaSourceReference* _tmp1030_;
-			ValaSourceReference* _tmp1031_;
-			ValaSymbol* _tmp1032_;
-			gchar* _tmp1033_ = NULL;
-			gchar* _tmp1034_;
-			gchar* _tmp1035_ = NULL;
-			gchar* _tmp1036_;
+		_tmp1035_ = in_subtype;
+		if (!_tmp1035_) {
+			ValaSourceReference* _tmp1036_;
+			ValaSourceReference* _tmp1037_;
+			ValaSymbol* _tmp1038_;
+			gchar* _tmp1039_ = NULL;
+			gchar* _tmp1040_;
+			gchar* _tmp1041_ = NULL;
+			gchar* _tmp1042_;
 			vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
-			_tmp1030_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-			_tmp1031_ = _tmp1030_;
-			_tmp1032_ = member;
-			_tmp1033_ = vala_symbol_get_full_name (_tmp1032_);
-			_tmp1034_ = _tmp1033_;
-			_tmp1035_ = g_strdup_printf ("Access to protected member `%s' denied", _tmp1034_);
-			_tmp1036_ = _tmp1035_;
-			vala_report_error (_tmp1031_, _tmp1036_);
-			_g_free0 (_tmp1036_);
-			_g_free0 (_tmp1034_);
+			_tmp1036_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
+			_tmp1037_ = _tmp1036_;
+			_tmp1038_ = member;
+			_tmp1039_ = vala_symbol_get_full_name (_tmp1038_);
+			_tmp1040_ = _tmp1039_;
+			_tmp1041_ = g_strdup_printf ("Access to protected member `%s' denied", _tmp1040_);
+			_tmp1042_ = _tmp1041_;
+			vala_report_error (_tmp1037_, _tmp1042_);
+			_g_free0 (_tmp1042_);
+			_g_free0 (_tmp1040_);
 			result = FALSE;
 			_vala_code_node_unref0 (target_type);
 			_vala_code_node_unref0 (member);
@@ -5209,66 +5225,66 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 		}
 		_vala_code_node_unref0 (target_type);
 	} else {
-		ValaSymbolAccessibility _tmp1037_;
-		_tmp1037_ = access;
-		if (_tmp1037_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
-			ValaSymbol* _tmp1038_;
-			ValaSymbol* _tmp1039_;
-			ValaSymbol* _tmp1040_;
-			ValaSymbol* _tmp1041_;
+		ValaSymbolAccessibility _tmp1043_;
+		_tmp1043_ = access;
+		if (_tmp1043_ == VALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
+			ValaSymbol* _tmp1044_;
+			ValaSymbol* _tmp1045_;
+			ValaSymbol* _tmp1046_;
+			ValaSymbol* _tmp1047_;
 			ValaSymbol* target_type;
 			gboolean in_target_type;
-			gboolean _tmp1057_;
-			_tmp1038_ = member;
-			_tmp1039_ = vala_symbol_get_parent_symbol (_tmp1038_);
-			_tmp1040_ = _tmp1039_;
-			_tmp1041_ = _vala_code_node_ref0 (_tmp1040_);
-			target_type = _tmp1041_;
+			gboolean _tmp1063_;
+			_tmp1044_ = member;
+			_tmp1045_ = vala_symbol_get_parent_symbol (_tmp1044_);
+			_tmp1046_ = _tmp1045_;
+			_tmp1047_ = _vala_code_node_ref0 (_tmp1046_);
+			target_type = _tmp1047_;
 			in_target_type = FALSE;
 			{
-				ValaCodeContext* _tmp1042_;
-				ValaSemanticAnalyzer* _tmp1043_;
-				ValaSemanticAnalyzer* _tmp1044_;
-				ValaSymbol* _tmp1045_;
-				ValaSymbol* _tmp1046_;
-				ValaSymbol* _tmp1047_;
+				ValaCodeContext* _tmp1048_;
+				ValaSemanticAnalyzer* _tmp1049_;
+				ValaSemanticAnalyzer* _tmp1050_;
+				ValaSymbol* _tmp1051_;
+				ValaSymbol* _tmp1052_;
+				ValaSymbol* _tmp1053_;
 				ValaSymbol* this_symbol;
-				_tmp1042_ = context;
-				_tmp1043_ = vala_code_context_get_analyzer (_tmp1042_);
-				_tmp1044_ = _tmp1043_;
-				_tmp1045_ = vala_semantic_analyzer_get_current_symbol (_tmp1044_);
-				_tmp1046_ = _tmp1045_;
-				_tmp1047_ = _vala_code_node_ref0 (_tmp1046_);
-				this_symbol = _tmp1047_;
+				_tmp1048_ = context;
+				_tmp1049_ = vala_code_context_get_analyzer (_tmp1048_);
+				_tmp1050_ = _tmp1049_;
+				_tmp1051_ = vala_semantic_analyzer_get_current_symbol (_tmp1050_);
+				_tmp1052_ = _tmp1051_;
+				_tmp1053_ = _vala_code_node_ref0 (_tmp1052_);
+				this_symbol = _tmp1053_;
 				{
-					gboolean _tmp1048_;
-					_tmp1048_ = TRUE;
+					gboolean _tmp1054_;
+					_tmp1054_ = TRUE;
 					while (TRUE) {
-						gboolean _tmp1049_;
-						ValaSymbol* _tmp1054_;
-						ValaSymbol* _tmp1055_;
-						ValaSymbol* _tmp1056_;
-						_tmp1049_ = _tmp1048_;
-						if (!_tmp1049_) {
-							ValaSymbol* _tmp1050_;
-							ValaSymbol* _tmp1051_;
-							ValaSymbol* _tmp1052_;
-							ValaSymbol* _tmp1053_;
-							_tmp1050_ = this_symbol;
-							_tmp1051_ = vala_symbol_get_parent_symbol (_tmp1050_);
-							_tmp1052_ = _tmp1051_;
-							_tmp1053_ = _vala_code_node_ref0 (_tmp1052_);
+						gboolean _tmp1055_;
+						ValaSymbol* _tmp1060_;
+						ValaSymbol* _tmp1061_;
+						ValaSymbol* _tmp1062_;
+						_tmp1055_ = _tmp1054_;
+						if (!_tmp1055_) {
+							ValaSymbol* _tmp1056_;
+							ValaSymbol* _tmp1057_;
+							ValaSymbol* _tmp1058_;
+							ValaSymbol* _tmp1059_;
+							_tmp1056_ = this_symbol;
+							_tmp1057_ = vala_symbol_get_parent_symbol (_tmp1056_);
+							_tmp1058_ = _tmp1057_;
+							_tmp1059_ = _vala_code_node_ref0 (_tmp1058_);
 							_vala_code_node_unref0 (this_symbol);
-							this_symbol = _tmp1053_;
+							this_symbol = _tmp1059_;
 						}
-						_tmp1048_ = FALSE;
-						_tmp1054_ = this_symbol;
-						if (!(_tmp1054_ != NULL)) {
+						_tmp1054_ = FALSE;
+						_tmp1060_ = this_symbol;
+						if (!(_tmp1060_ != NULL)) {
 							break;
 						}
-						_tmp1055_ = target_type;
-						_tmp1056_ = this_symbol;
-						if (_tmp1055_ == _tmp1056_) {
+						_tmp1061_ = target_type;
+						_tmp1062_ = this_symbol;
+						if (_tmp1061_ == _tmp1062_) {
 							in_target_type = TRUE;
 							break;
 						}
@@ -5276,26 +5292,26 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 				}
 				_vala_code_node_unref0 (this_symbol);
 			}
-			_tmp1057_ = in_target_type;
-			if (!_tmp1057_) {
-				ValaSourceReference* _tmp1058_;
-				ValaSourceReference* _tmp1059_;
-				ValaSymbol* _tmp1060_;
-				gchar* _tmp1061_ = NULL;
-				gchar* _tmp1062_;
-				gchar* _tmp1063_ = NULL;
-				gchar* _tmp1064_;
+			_tmp1063_ = in_target_type;
+			if (!_tmp1063_) {
+				ValaSourceReference* _tmp1064_;
+				ValaSourceReference* _tmp1065_;
+				ValaSymbol* _tmp1066_;
+				gchar* _tmp1067_ = NULL;
+				gchar* _tmp1068_;
+				gchar* _tmp1069_ = NULL;
+				gchar* _tmp1070_;
 				vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
-				_tmp1058_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-				_tmp1059_ = _tmp1058_;
-				_tmp1060_ = member;
-				_tmp1061_ = vala_symbol_get_full_name (_tmp1060_);
-				_tmp1062_ = _tmp1061_;
-				_tmp1063_ = g_strdup_printf ("Access to private member `%s' denied", _tmp1062_);
-				_tmp1064_ = _tmp1063_;
-				vala_report_error (_tmp1059_, _tmp1064_);
-				_g_free0 (_tmp1064_);
-				_g_free0 (_tmp1062_);
+				_tmp1064_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
+				_tmp1065_ = _tmp1064_;
+				_tmp1066_ = member;
+				_tmp1067_ = vala_symbol_get_full_name (_tmp1066_);
+				_tmp1068_ = _tmp1067_;
+				_tmp1069_ = g_strdup_printf ("Access to private member `%s' denied", _tmp1068_);
+				_tmp1070_ = _tmp1069_;
+				vala_report_error (_tmp1065_, _tmp1070_);
+				_g_free0 (_tmp1070_);
+				_g_free0 (_tmp1068_);
 				result = FALSE;
 				_vala_code_node_unref0 (target_type);
 				_vala_code_node_unref0 (member);
@@ -5306,117 +5322,117 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 			_vala_code_node_unref0 (target_type);
 		}
 	}
-	_tmp1066_ = generics;
-	if (_tmp1066_) {
-		ValaExpression* _tmp1067_;
-		ValaExpression* _tmp1068_;
-		_tmp1067_ = vala_member_access_get_inner (self);
-		_tmp1068_ = _tmp1067_;
-		_tmp1065_ = _tmp1068_ != NULL;
+	_tmp1072_ = generics;
+	if (_tmp1072_) {
+		ValaExpression* _tmp1073_;
+		ValaExpression* _tmp1074_;
+		_tmp1073_ = vala_member_access_get_inner (self);
+		_tmp1074_ = _tmp1073_;
+		_tmp1071_ = _tmp1074_ != NULL;
 	} else {
-		_tmp1065_ = FALSE;
+		_tmp1071_ = FALSE;
 	}
-	_tmp1069_ = _tmp1065_;
-	if (_tmp1069_) {
-		ValaExpression* _tmp1070_;
-		ValaExpression* _tmp1071_;
-		ValaDataType* _tmp1072_;
-		ValaDataType* _tmp1073_;
-		ValaDataType* _tmp1074_;
-		ValaDataType* instance_type;
-		ValaExpression* _tmp1075_;
+	_tmp1075_ = _tmp1071_;
+	if (_tmp1075_) {
 		ValaExpression* _tmp1076_;
-		ValaDataType* _tmp1077_;
+		ValaExpression* _tmp1077_;
 		ValaDataType* _tmp1078_;
-		ValaPointerType* _tmp1079_;
+		ValaDataType* _tmp1079_;
+		ValaDataType* _tmp1080_;
+		ValaDataType* instance_type;
+		ValaExpression* _tmp1081_;
+		ValaExpression* _tmp1082_;
+		ValaDataType* _tmp1083_;
+		ValaDataType* _tmp1084_;
+		ValaPointerType* _tmp1085_;
 		ValaPointerType* pointer_type;
-		ValaPointerType* _tmp1080_;
-		ValaDataType* _tmp1085_;
-		ValaObjectType* _tmp1086_;
+		ValaPointerType* _tmp1086_;
+		ValaDataType* _tmp1091_;
+		ValaObjectType* _tmp1092_;
 		ValaObjectType* object_type;
-		gboolean _tmp1087_ = FALSE;
-		gboolean _tmp1088_ = FALSE;
-		ValaObjectType* _tmp1089_;
-		gboolean _tmp1097_;
+		gboolean _tmp1093_ = FALSE;
+		gboolean _tmp1094_ = FALSE;
+		ValaObjectType* _tmp1095_;
 		gboolean _tmp1103_;
-		_tmp1070_ = vala_member_access_get_inner (self);
-		_tmp1071_ = _tmp1070_;
-		_tmp1072_ = vala_expression_get_value_type (_tmp1071_);
-		_tmp1073_ = _tmp1072_;
-		_tmp1074_ = _vala_code_node_ref0 (_tmp1073_);
-		instance_type = _tmp1074_;
-		_tmp1075_ = vala_member_access_get_inner (self);
-		_tmp1076_ = _tmp1075_;
-		_tmp1077_ = vala_expression_get_value_type (_tmp1076_);
-		_tmp1078_ = _tmp1077_;
-		_tmp1079_ = _vala_code_node_ref0 (VALA_IS_POINTER_TYPE (_tmp1078_) ? ((ValaPointerType*) _tmp1078_) : NULL);
-		pointer_type = _tmp1079_;
-		_tmp1080_ = pointer_type;
-		if (_tmp1080_ != NULL) {
-			ValaPointerType* _tmp1081_;
-			ValaDataType* _tmp1082_;
-			ValaDataType* _tmp1083_;
-			ValaDataType* _tmp1084_;
-			_tmp1081_ = pointer_type;
-			_tmp1082_ = vala_pointer_type_get_base_type (_tmp1081_);
-			_tmp1083_ = _tmp1082_;
-			_tmp1084_ = _vala_code_node_ref0 (_tmp1083_);
+		gboolean _tmp1109_;
+		_tmp1076_ = vala_member_access_get_inner (self);
+		_tmp1077_ = _tmp1076_;
+		_tmp1078_ = vala_expression_get_value_type (_tmp1077_);
+		_tmp1079_ = _tmp1078_;
+		_tmp1080_ = _vala_code_node_ref0 (_tmp1079_);
+		instance_type = _tmp1080_;
+		_tmp1081_ = vala_member_access_get_inner (self);
+		_tmp1082_ = _tmp1081_;
+		_tmp1083_ = vala_expression_get_value_type (_tmp1082_);
+		_tmp1084_ = _tmp1083_;
+		_tmp1085_ = _vala_code_node_ref0 (VALA_IS_POINTER_TYPE (_tmp1084_) ? ((ValaPointerType*) _tmp1084_) : NULL);
+		pointer_type = _tmp1085_;
+		_tmp1086_ = pointer_type;
+		if (_tmp1086_ != NULL) {
+			ValaPointerType* _tmp1087_;
+			ValaDataType* _tmp1088_;
+			ValaDataType* _tmp1089_;
+			ValaDataType* _tmp1090_;
+			_tmp1087_ = pointer_type;
+			_tmp1088_ = vala_pointer_type_get_base_type (_tmp1087_);
+			_tmp1089_ = _tmp1088_;
+			_tmp1090_ = _vala_code_node_ref0 (_tmp1089_);
 			_vala_code_node_unref0 (instance_type);
-			instance_type = _tmp1084_;
-		}
-		_tmp1085_ = instance_type;
-		_tmp1086_ = _vala_code_node_ref0 (VALA_IS_OBJECT_TYPE (_tmp1085_) ? ((ValaObjectType*) _tmp1085_) : NULL);
-		object_type = _tmp1086_;
-		_tmp1089_ = object_type;
-		if (_tmp1089_ != NULL) {
-			ValaObjectType* _tmp1090_;
-			ValaObjectTypeSymbol* _tmp1091_;
-			ValaObjectTypeSymbol* _tmp1092_;
-			ValaList* _tmp1093_ = NULL;
-			ValaList* _tmp1094_;
-			gint _tmp1095_;
-			gint _tmp1096_;
-			_tmp1090_ = object_type;
-			_tmp1091_ = vala_object_type_get_type_symbol (_tmp1090_);
-			_tmp1092_ = _tmp1091_;
-			_tmp1093_ = vala_object_type_symbol_get_type_parameters (_tmp1092_);
-			_tmp1094_ = _tmp1093_;
-			_tmp1095_ = vala_collection_get_size ((ValaCollection*) _tmp1094_);
-			_tmp1096_ = _tmp1095_;
-			_tmp1088_ = _tmp1096_ > 0;
-			_vala_iterable_unref0 (_tmp1094_);
-		} else {
-			_tmp1088_ = FALSE;
+			instance_type = _tmp1090_;
 		}
-		_tmp1097_ = _tmp1088_;
-		if (_tmp1097_) {
-			ValaDataType* _tmp1098_;
+		_tmp1091_ = instance_type;
+		_tmp1092_ = _vala_code_node_ref0 (VALA_IS_OBJECT_TYPE (_tmp1091_) ? ((ValaObjectType*) _tmp1091_) : NULL);
+		object_type = _tmp1092_;
+		_tmp1095_ = object_type;
+		if (_tmp1095_ != NULL) {
+			ValaObjectType* _tmp1096_;
+			ValaObjectTypeSymbol* _tmp1097_;
+			ValaObjectTypeSymbol* _tmp1098_;
 			ValaList* _tmp1099_ = NULL;
 			ValaList* _tmp1100_;
 			gint _tmp1101_;
 			gint _tmp1102_;
-			_tmp1098_ = instance_type;
-			_tmp1099_ = vala_data_type_get_type_arguments (_tmp1098_);
+			_tmp1096_ = object_type;
+			_tmp1097_ = vala_object_type_get_type_symbol (_tmp1096_);
+			_tmp1098_ = _tmp1097_;
+			_tmp1099_ = vala_object_type_symbol_get_type_parameters (_tmp1098_);
 			_tmp1100_ = _tmp1099_;
 			_tmp1101_ = vala_collection_get_size ((ValaCollection*) _tmp1100_);
 			_tmp1102_ = _tmp1101_;
-			_tmp1087_ = _tmp1102_ == 0;
+			_tmp1094_ = _tmp1102_ > 0;
 			_vala_iterable_unref0 (_tmp1100_);
 		} else {
-			_tmp1087_ = FALSE;
+			_tmp1094_ = FALSE;
 		}
-		_tmp1103_ = _tmp1087_;
+		_tmp1103_ = _tmp1094_;
 		if (_tmp1103_) {
-			ValaExpression* _tmp1104_;
-			ValaExpression* _tmp1105_;
-			ValaSourceReference* _tmp1106_;
-			ValaSourceReference* _tmp1107_;
+			ValaDataType* _tmp1104_;
+			ValaList* _tmp1105_ = NULL;
+			ValaList* _tmp1106_;
+			gint _tmp1107_;
+			gint _tmp1108_;
+			_tmp1104_ = instance_type;
+			_tmp1105_ = vala_data_type_get_type_arguments (_tmp1104_);
+			_tmp1106_ = _tmp1105_;
+			_tmp1107_ = vala_collection_get_size ((ValaCollection*) _tmp1106_);
+			_tmp1108_ = _tmp1107_;
+			_tmp1093_ = _tmp1108_ == 0;
+			_vala_iterable_unref0 (_tmp1106_);
+		} else {
+			_tmp1093_ = FALSE;
+		}
+		_tmp1109_ = _tmp1093_;
+		if (_tmp1109_) {
+			ValaExpression* _tmp1110_;
+			ValaExpression* _tmp1111_;
+			ValaSourceReference* _tmp1112_;
+			ValaSourceReference* _tmp1113_;
 			vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
-			_tmp1104_ = vala_member_access_get_inner (self);
-			_tmp1105_ = _tmp1104_;
-			_tmp1106_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp1105_);
-			_tmp1107_ = _tmp1106_;
-			vala_report_error (_tmp1107_, "missing generic type arguments");
+			_tmp1110_ = vala_member_access_get_inner (self);
+			_tmp1111_ = _tmp1110_;
+			_tmp1112_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp1111_);
+			_tmp1113_ = _tmp1112_;
+			vala_report_error (_tmp1113_, "missing generic type arguments");
 			result = FALSE;
 			_vala_code_node_unref0 (object_type);
 			_vala_code_node_unref0 (pointer_type);
@@ -5430,649 +5446,649 @@ static gboolean vala_member_access_real_check (ValaCodeNode* base, ValaCodeConte
 		_vala_code_node_unref0 (pointer_type);
 		_vala_code_node_unref0 (instance_type);
 	}
-	_tmp1110_ = instance;
-	if (_tmp1110_) {
-		gboolean _tmp1111_;
-		_tmp1111_ = may_access_instance_members;
-		_tmp1109_ = !_tmp1111_;
+	_tmp1116_ = instance;
+	if (_tmp1116_) {
+		gboolean _tmp1117_;
+		_tmp1117_ = may_access_instance_members;
+		_tmp1115_ = !_tmp1117_;
 	} else {
-		_tmp1109_ = FALSE;
+		_tmp1115_ = FALSE;
 	}
-	_tmp1112_ = _tmp1109_;
-	if (_tmp1112_) {
-		_tmp1108_ = TRUE;
+	_tmp1118_ = _tmp1115_;
+	if (_tmp1118_) {
+		_tmp1114_ = TRUE;
 	} else {
-		gboolean _tmp1113_ = FALSE;
-		gboolean _tmp1114_;
-		gboolean _tmp1116_;
-		_tmp1114_ = klass;
-		if (_tmp1114_) {
-			gboolean _tmp1115_;
-			_tmp1115_ = may_access_klass_members;
-			_tmp1113_ = !_tmp1115_;
+		gboolean _tmp1119_ = FALSE;
+		gboolean _tmp1120_;
+		gboolean _tmp1122_;
+		_tmp1120_ = klass;
+		if (_tmp1120_) {
+			gboolean _tmp1121_;
+			_tmp1121_ = may_access_klass_members;
+			_tmp1119_ = !_tmp1121_;
 		} else {
-			_tmp1113_ = FALSE;
+			_tmp1119_ = FALSE;
 		}
-		_tmp1116_ = _tmp1113_;
-		_tmp1108_ = _tmp1116_;
+		_tmp1122_ = _tmp1119_;
+		_tmp1114_ = _tmp1122_;
 	}
-	_tmp1117_ = _tmp1108_;
-	if (_tmp1117_) {
-		ValaSymbol* _tmp1118_;
-		ValaSymbol* _tmp1119_;
-		ValaDataType* _tmp1137_;
-		ValaDataType* _tmp1138_;
+	_tmp1123_ = _tmp1114_;
+	if (_tmp1123_) {
+		ValaSymbol* _tmp1124_;
+		ValaSymbol* _tmp1125_;
+		ValaDataType* _tmp1143_;
+		ValaDataType* _tmp1144_;
 		vala_member_access_set_prototype_access (self, TRUE);
-		_tmp1118_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
-		_tmp1119_ = _tmp1118_;
-		if (VALA_IS_METHOD (_tmp1119_)) {
-			ValaCodeContext* _tmp1120_;
-			ValaSemanticAnalyzer* _tmp1121_;
-			ValaSemanticAnalyzer* _tmp1122_;
-			ValaSymbol* _tmp1123_;
-			ValaSymbol* _tmp1124_;
-			gboolean _tmp1125_;
-			gboolean _tmp1126_;
-			ValaDataType* _tmp1127_ = NULL;
-			ValaDataType* _tmp1128_;
-			_tmp1120_ = context;
-			_tmp1121_ = vala_code_context_get_analyzer (_tmp1120_);
-			_tmp1122_ = _tmp1121_;
-			_tmp1123_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
-			_tmp1124_ = _tmp1123_;
-			_tmp1125_ = vala_expression_get_lvalue ((ValaExpression*) self);
-			_tmp1126_ = _tmp1125_;
-			_tmp1127_ = vala_semantic_analyzer_get_value_type_for_symbol (_tmp1122_, _tmp1124_, _tmp1126_);
-			_tmp1128_ = _tmp1127_;
-			vala_expression_set_value_type ((ValaExpression*) self, _tmp1128_);
-			_vala_code_node_unref0 (_tmp1128_);
-		} else {
+		_tmp1124_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+		_tmp1125_ = _tmp1124_;
+		if (VALA_IS_METHOD (_tmp1125_)) {
+			ValaCodeContext* _tmp1126_;
+			ValaSemanticAnalyzer* _tmp1127_;
+			ValaSemanticAnalyzer* _tmp1128_;
 			ValaSymbol* _tmp1129_;
 			ValaSymbol* _tmp1130_;
+			gboolean _tmp1131_;
+			gboolean _tmp1132_;
+			ValaDataType* _tmp1133_ = NULL;
+			ValaDataType* _tmp1134_;
+			_tmp1126_ = context;
+			_tmp1127_ = vala_code_context_get_analyzer (_tmp1126_);
+			_tmp1128_ = _tmp1127_;
 			_tmp1129_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
 			_tmp1130_ = _tmp1129_;
-			if (VALA_IS_FIELD (_tmp1130_)) {
-				ValaSymbol* _tmp1131_;
-				ValaSymbol* _tmp1132_;
-				ValaFieldPrototype* _tmp1133_;
-				ValaFieldPrototype* _tmp1134_;
-				_tmp1131_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
-				_tmp1132_ = _tmp1131_;
-				_tmp1133_ = vala_field_prototype_new (VALA_FIELD (_tmp1132_));
-				_tmp1134_ = _tmp1133_;
-				vala_expression_set_value_type ((ValaExpression*) self, (ValaDataType*) _tmp1134_);
-				_vala_code_node_unref0 (_tmp1134_);
+			_tmp1131_ = vala_expression_get_lvalue ((ValaExpression*) self);
+			_tmp1132_ = _tmp1131_;
+			_tmp1133_ = vala_semantic_analyzer_get_value_type_for_symbol (_tmp1128_, _tmp1130_, _tmp1132_);
+			_tmp1134_ = _tmp1133_;
+			vala_expression_set_value_type ((ValaExpression*) self, _tmp1134_);
+			_vala_code_node_unref0 (_tmp1134_);
+		} else {
+			ValaSymbol* _tmp1135_;
+			ValaSymbol* _tmp1136_;
+			_tmp1135_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+			_tmp1136_ = _tmp1135_;
+			if (VALA_IS_FIELD (_tmp1136_)) {
+				ValaSymbol* _tmp1137_;
+				ValaSymbol* _tmp1138_;
+				ValaFieldPrototype* _tmp1139_;
+				ValaFieldPrototype* _tmp1140_;
+				_tmp1137_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+				_tmp1138_ = _tmp1137_;
+				_tmp1139_ = vala_field_prototype_new (VALA_FIELD (_tmp1138_));
+				_tmp1140_ = _tmp1139_;
+				vala_expression_set_value_type ((ValaExpression*) self, (ValaDataType*) _tmp1140_);
+				_vala_code_node_unref0 (_tmp1140_);
 			} else {
-				ValaInvalidType* _tmp1135_;
-				ValaInvalidType* _tmp1136_;
-				_tmp1135_ = vala_invalid_type_new ();
-				_tmp1136_ = _tmp1135_;
-				vala_expression_set_value_type ((ValaExpression*) self, (ValaDataType*) _tmp1136_);
-				_vala_code_node_unref0 (_tmp1136_);
+				ValaInvalidType* _tmp1141_;
+				ValaInvalidType* _tmp1142_;
+				_tmp1141_ = vala_invalid_type_new ();
+				_tmp1142_ = _tmp1141_;
+				vala_expression_set_value_type ((ValaExpression*) self, (ValaDataType*) _tmp1142_);
+				_vala_code_node_unref0 (_tmp1142_);
 			}
 		}
-		_tmp1137_ = vala_expression_get_target_type ((ValaExpression*) self);
-		_tmp1138_ = _tmp1137_;
-		if (_tmp1138_ != NULL) {
-			ValaDataType* _tmp1139_;
-			ValaDataType* _tmp1140_;
-			ValaDataType* _tmp1141_;
-			ValaDataType* _tmp1142_;
-			gboolean _tmp1143_;
-			gboolean _tmp1144_;
-			_tmp1139_ = vala_expression_get_value_type ((ValaExpression*) self);
-			_tmp1140_ = _tmp1139_;
-			_tmp1141_ = vala_expression_get_target_type ((ValaExpression*) self);
-			_tmp1142_ = _tmp1141_;
-			_tmp1143_ = vala_data_type_get_value_owned (_tmp1142_);
-			_tmp1144_ = _tmp1143_;
-			vala_data_type_set_value_owned (_tmp1140_, _tmp1144_);
+		_tmp1143_ = vala_expression_get_target_type ((ValaExpression*) self);
+		_tmp1144_ = _tmp1143_;
+		if (_tmp1144_ != NULL) {
+			ValaDataType* _tmp1145_;
+			ValaDataType* _tmp1146_;
+			ValaDataType* _tmp1147_;
+			ValaDataType* _tmp1148_;
+			gboolean _tmp1149_;
+			gboolean _tmp1150_;
+			_tmp1145_ = vala_expression_get_value_type ((ValaExpression*) self);
+			_tmp1146_ = _tmp1145_;
+			_tmp1147_ = vala_expression_get_target_type ((ValaExpression*) self);
+			_tmp1148_ = _tmp1147_;
+			_tmp1149_ = vala_data_type_get_value_owned (_tmp1148_);
+			_tmp1150_ = _tmp1149_;
+			vala_data_type_set_value_owned (_tmp1146_, _tmp1150_);
 		}
 	} else {
-		gboolean _tmp1145_ = FALSE;
-		gboolean _tmp1146_;
-		gboolean _tmp1149_;
-		gboolean _tmp1168_ = FALSE;
-		gboolean _tmp1169_ = FALSE;
-		gboolean _tmp1170_ = FALSE;
-		gboolean _tmp1171_ = FALSE;
-		ValaCodeContext* _tmp1172_;
-		gboolean _tmp1173_;
-		gboolean _tmp1174_;
-		gboolean _tmp1176_;
-		gboolean _tmp1183_;
-		gboolean _tmp1188_;
-		gboolean _tmp1193_;
-		ValaCodeContext* _tmp1202_;
-		ValaSemanticAnalyzer* _tmp1203_;
-		ValaSemanticAnalyzer* _tmp1204_;
-		ValaSymbol* _tmp1205_;
-		ValaSymbol* _tmp1206_;
-		gboolean _tmp1207_;
-		gboolean _tmp1208_;
-		ValaDataType* _tmp1209_ = NULL;
-		ValaDataType* _tmp1210_;
-		gboolean _tmp1211_ = FALSE;
-		ValaExpression* _tmp1212_;
-		ValaExpression* _tmp1213_;
-		gboolean _tmp1216_;
-		ValaSymbol* _tmp1227_;
-		ValaSymbol* _tmp1228_;
-		_tmp1146_ = instance;
-		if (_tmp1146_) {
-			ValaExpression* _tmp1147_;
-			ValaExpression* _tmp1148_;
-			_tmp1147_ = vala_member_access_get_inner (self);
-			_tmp1148_ = _tmp1147_;
-			_tmp1145_ = _tmp1148_ == NULL;
+		gboolean _tmp1151_ = FALSE;
+		gboolean _tmp1152_;
+		gboolean _tmp1155_;
+		gboolean _tmp1174_ = FALSE;
+		gboolean _tmp1175_ = FALSE;
+		gboolean _tmp1176_ = FALSE;
+		gboolean _tmp1177_ = FALSE;
+		ValaCodeContext* _tmp1178_;
+		gboolean _tmp1179_;
+		gboolean _tmp1180_;
+		gboolean _tmp1182_;
+		gboolean _tmp1189_;
+		gboolean _tmp1194_;
+		gboolean _tmp1199_;
+		ValaCodeContext* _tmp1208_;
+		ValaSemanticAnalyzer* _tmp1209_;
+		ValaSemanticAnalyzer* _tmp1210_;
+		ValaSymbol* _tmp1211_;
+		ValaSymbol* _tmp1212_;
+		gboolean _tmp1213_;
+		gboolean _tmp1214_;
+		ValaDataType* _tmp1215_ = NULL;
+		ValaDataType* _tmp1216_;
+		gboolean _tmp1217_ = FALSE;
+		ValaExpression* _tmp1218_;
+		ValaExpression* _tmp1219_;
+		gboolean _tmp1222_;
+		ValaSymbol* _tmp1233_;
+		ValaSymbol* _tmp1234_;
+		_tmp1152_ = instance;
+		if (_tmp1152_) {
+			ValaExpression* _tmp1153_;
+			ValaExpression* _tmp1154_;
+			_tmp1153_ = vala_member_access_get_inner (self);
+			_tmp1154_ = _tmp1153_;
+			_tmp1151_ = _tmp1154_ == NULL;
 		} else {
-			_tmp1145_ = FALSE;
+			_tmp1151_ = FALSE;
 		}
-		_tmp1149_ = _tmp1145_;
-		if (_tmp1149_) {
-			ValaSourceReference* _tmp1150_;
-			ValaSourceReference* _tmp1151_;
-			ValaMemberAccess* _tmp1152_;
-			ValaMemberAccess* _tmp1153_;
-			ValaExpression* _tmp1154_;
-			ValaExpression* _tmp1155_;
-			ValaParameter* _tmp1156_;
-			ValaDataType* _tmp1157_;
-			ValaDataType* _tmp1158_;
-			ValaDataType* _tmp1159_ = NULL;
-			ValaDataType* _tmp1160_;
+		_tmp1155_ = _tmp1151_;
+		if (_tmp1155_) {
+			ValaSourceReference* _tmp1156_;
+			ValaSourceReference* _tmp1157_;
+			ValaMemberAccess* _tmp1158_;
+			ValaMemberAccess* _tmp1159_;
+			ValaExpression* _tmp1160_;
 			ValaExpression* _tmp1161_;
-			ValaExpression* _tmp1162_;
+			ValaParameter* _tmp1162_;
 			ValaDataType* _tmp1163_;
 			ValaDataType* _tmp1164_;
-			ValaExpression* _tmp1165_;
-			ValaExpression* _tmp1166_;
-			ValaParameter* _tmp1167_;
-			_tmp1150_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-			_tmp1151_ = _tmp1150_;
-			_tmp1152_ = vala_member_access_new (NULL, "this", _tmp1151_);
-			_tmp1153_ = _tmp1152_;
-			vala_member_access_set_inner (self, (ValaExpression*) _tmp1153_);
-			_vala_code_node_unref0 (_tmp1153_);
-			_tmp1154_ = vala_member_access_get_inner (self);
-			_tmp1155_ = _tmp1154_;
-			_tmp1156_ = this_parameter;
-			_tmp1157_ = vala_variable_get_variable_type ((ValaVariable*) _tmp1156_);
-			_tmp1158_ = _tmp1157_;
-			_tmp1159_ = vala_data_type_copy (_tmp1158_);
-			_tmp1160_ = _tmp1159_;
-			vala_expression_set_value_type (_tmp1155_, _tmp1160_);
-			_vala_code_node_unref0 (_tmp1160_);
-			_tmp1161_ = vala_member_access_get_inner (self);
-			_tmp1162_ = _tmp1161_;
-			_tmp1163_ = vala_expression_get_value_type (_tmp1162_);
+			ValaDataType* _tmp1165_ = NULL;
+			ValaDataType* _tmp1166_;
+			ValaExpression* _tmp1167_;
+			ValaExpression* _tmp1168_;
+			ValaDataType* _tmp1169_;
+			ValaDataType* _tmp1170_;
+			ValaExpression* _tmp1171_;
+			ValaExpression* _tmp1172_;
+			ValaParameter* _tmp1173_;
+			_tmp1156_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
+			_tmp1157_ = _tmp1156_;
+			_tmp1158_ = vala_member_access_new (NULL, "this", _tmp1157_);
+			_tmp1159_ = _tmp1158_;
+			vala_member_access_set_inner (self, (ValaExpression*) _tmp1159_);
+			_vala_code_node_unref0 (_tmp1159_);
+			_tmp1160_ = vala_member_access_get_inner (self);
+			_tmp1161_ = _tmp1160_;
+			_tmp1162_ = this_parameter;
+			_tmp1163_ = vala_variable_get_variable_type ((ValaVariable*) _tmp1162_);
 			_tmp1164_ = _tmp1163_;
-			vala_data_type_set_value_owned (_tmp1164_, FALSE);
-			_tmp1165_ = vala_member_access_get_inner (self);
+			_tmp1165_ = vala_data_type_copy (_tmp1164_);
 			_tmp1166_ = _tmp1165_;
-			_tmp1167_ = this_parameter;
-			vala_expression_set_symbol_reference (_tmp1166_, (ValaSymbol*) _tmp1167_);
+			vala_expression_set_value_type (_tmp1161_, _tmp1166_);
+			_vala_code_node_unref0 (_tmp1166_);
+			_tmp1167_ = vala_member_access_get_inner (self);
+			_tmp1168_ = _tmp1167_;
+			_tmp1169_ = vala_expression_get_value_type (_tmp1168_);
+			_tmp1170_ = _tmp1169_;
+			vala_data_type_set_value_owned (_tmp1170_, FALSE);
+			_tmp1171_ = vala_member_access_get_inner (self);
+			_tmp1172_ = _tmp1171_;
+			_tmp1173_ = this_parameter;
+			vala_expression_set_symbol_reference (_tmp1172_, (ValaSymbol*) _tmp1173_);
 		} else {
 			vala_member_access_check_lvalue_access (self);
 		}
-		_tmp1172_ = context;
-		_tmp1173_ = vala_code_context_get_experimental_non_null (_tmp1172_);
-		_tmp1174_ = _tmp1173_;
-		if (_tmp1174_) {
-			gboolean _tmp1175_;
-			_tmp1175_ = instance;
-			_tmp1171_ = _tmp1175_;
-		} else {
-			_tmp1171_ = FALSE;
-		}
-		_tmp1176_ = _tmp1171_;
-		if (_tmp1176_) {
-			ValaExpression* _tmp1177_;
-			ValaExpression* _tmp1178_;
-			ValaDataType* _tmp1179_;
-			ValaDataType* _tmp1180_;
+		_tmp1178_ = context;
+		_tmp1179_ = vala_code_context_get_experimental_non_null (_tmp1178_);
+		_tmp1180_ = _tmp1179_;
+		if (_tmp1180_) {
 			gboolean _tmp1181_;
-			gboolean _tmp1182_;
-			_tmp1177_ = vala_member_access_get_inner (self);
-			_tmp1178_ = _tmp1177_;
-			_tmp1179_ = vala_expression_get_value_type (_tmp1178_);
-			_tmp1180_ = _tmp1179_;
-			_tmp1181_ = vala_data_type_get_nullable (_tmp1180_);
-			_tmp1182_ = _tmp1181_;
-			_tmp1170_ = _tmp1182_;
+			_tmp1181_ = instance;
+			_tmp1177_ = _tmp1181_;
 		} else {
-			_tmp1170_ = FALSE;
+			_tmp1177_ = FALSE;
 		}
-		_tmp1183_ = _tmp1170_;
-		if (_tmp1183_) {
+		_tmp1182_ = _tmp1177_;
+		if (_tmp1182_) {
+			ValaExpression* _tmp1183_;
 			ValaExpression* _tmp1184_;
-			ValaExpression* _tmp1185_;
+			ValaDataType* _tmp1185_;
 			ValaDataType* _tmp1186_;
-			ValaDataType* _tmp1187_;
-			_tmp1184_ = vala_member_access_get_inner (self);
-			_tmp1185_ = _tmp1184_;
-			_tmp1186_ = vala_expression_get_value_type (_tmp1185_);
-			_tmp1187_ = _tmp1186_;
-			_tmp1169_ = !VALA_IS_POINTER_TYPE (_tmp1187_);
+			gboolean _tmp1187_;
+			gboolean _tmp1188_;
+			_tmp1183_ = vala_member_access_get_inner (self);
+			_tmp1184_ = _tmp1183_;
+			_tmp1185_ = vala_expression_get_value_type (_tmp1184_);
+			_tmp1186_ = _tmp1185_;
+			_tmp1187_ = vala_data_type_get_nullable (_tmp1186_);
+			_tmp1188_ = _tmp1187_;
+			_tmp1176_ = _tmp1188_;
 		} else {
-			_tmp1169_ = FALSE;
+			_tmp1176_ = FALSE;
 		}
-		_tmp1188_ = _tmp1169_;
-		if (_tmp1188_) {
-			ValaExpression* _tmp1189_;
+		_tmp1189_ = _tmp1176_;
+		if (_tmp1189_) {
 			ValaExpression* _tmp1190_;
-			ValaDataType* _tmp1191_;
+			ValaExpression* _tmp1191_;
 			ValaDataType* _tmp1192_;
-			_tmp1189_ = vala_member_access_get_inner (self);
-			_tmp1190_ = _tmp1189_;
-			_tmp1191_ = vala_expression_get_value_type (_tmp1190_);
-			_tmp1192_ = _tmp1191_;
-			_tmp1168_ = !VALA_IS_GENERIC_TYPE (_tmp1192_);
+			ValaDataType* _tmp1193_;
+			_tmp1190_ = vala_member_access_get_inner (self);
+			_tmp1191_ = _tmp1190_;
+			_tmp1192_ = vala_expression_get_value_type (_tmp1191_);
+			_tmp1193_ = _tmp1192_;
+			_tmp1175_ = !VALA_IS_POINTER_TYPE (_tmp1193_);
 		} else {
-			_tmp1168_ = FALSE;
+			_tmp1175_ = FALSE;
 		}
-		_tmp1193_ = _tmp1168_;
-		if (_tmp1193_) {
-			ValaSourceReference* _tmp1194_;
-			ValaSourceReference* _tmp1195_;
-			ValaSymbol* _tmp1196_;
-			ValaSymbol* _tmp1197_;
-			gchar* _tmp1198_ = NULL;
-			gchar* _tmp1199_;
-			gchar* _tmp1200_ = NULL;
-			gchar* _tmp1201_;
-			_tmp1194_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-			_tmp1195_ = _tmp1194_;
-			_tmp1196_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
-			_tmp1197_ = _tmp1196_;
-			_tmp1198_ = vala_symbol_get_full_name (_tmp1197_);
-			_tmp1199_ = _tmp1198_;
-			_tmp1200_ = g_strdup_printf ("Access to instance member `%s' from nullable reference denied", _tmp1199_);
+		_tmp1194_ = _tmp1175_;
+		if (_tmp1194_) {
+			ValaExpression* _tmp1195_;
+			ValaExpression* _tmp1196_;
+			ValaDataType* _tmp1197_;
+			ValaDataType* _tmp1198_;
+			_tmp1195_ = vala_member_access_get_inner (self);
+			_tmp1196_ = _tmp1195_;
+			_tmp1197_ = vala_expression_get_value_type (_tmp1196_);
+			_tmp1198_ = _tmp1197_;
+			_tmp1174_ = !VALA_IS_GENERIC_TYPE (_tmp1198_);
+		} else {
+			_tmp1174_ = FALSE;
+		}
+		_tmp1199_ = _tmp1174_;
+		if (_tmp1199_) {
+			ValaSourceReference* _tmp1200_;
+			ValaSourceReference* _tmp1201_;
+			ValaSymbol* _tmp1202_;
+			ValaSymbol* _tmp1203_;
+			gchar* _tmp1204_ = NULL;
+			gchar* _tmp1205_;
+			gchar* _tmp1206_ = NULL;
+			gchar* _tmp1207_;
+			_tmp1200_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
 			_tmp1201_ = _tmp1200_;
-			vala_report_error (_tmp1195_, _tmp1201_);
-			_g_free0 (_tmp1201_);
-			_g_free0 (_tmp1199_);
+			_tmp1202_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+			_tmp1203_ = _tmp1202_;
+			_tmp1204_ = vala_symbol_get_full_name (_tmp1203_);
+			_tmp1205_ = _tmp1204_;
+			_tmp1206_ = g_strdup_printf ("Access to instance member `%s' from nullable reference denied", _tmp1205_);
+			_tmp1207_ = _tmp1206_;
+			vala_report_error (_tmp1201_, _tmp1207_);
+			_g_free0 (_tmp1207_);
+			_g_free0 (_tmp1205_);
 		}
-		_tmp1202_ = context;
-		_tmp1203_ = vala_code_context_get_analyzer (_tmp1202_);
-		_tmp1204_ = _tmp1203_;
-		_tmp1205_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
-		_tmp1206_ = _tmp1205_;
-		_tmp1207_ = vala_expression_get_lvalue ((ValaExpression*) self);
-		_tmp1208_ = _tmp1207_;
-		_tmp1209_ = vala_semantic_analyzer_get_value_type_for_symbol (_tmp1204_, _tmp1206_, _tmp1208_);
+		_tmp1208_ = context;
+		_tmp1209_ = vala_code_context_get_analyzer (_tmp1208_);
 		_tmp1210_ = _tmp1209_;
-		vala_expression_set_formal_value_type ((ValaExpression*) self, _tmp1210_);
-		_vala_code_node_unref0 (_tmp1210_);
-		_tmp1212_ = vala_member_access_get_inner (self);
-		_tmp1213_ = _tmp1212_;
-		if (_tmp1213_ != NULL) {
-			ValaDataType* _tmp1214_;
-			ValaDataType* _tmp1215_;
-			_tmp1214_ = vala_expression_get_formal_value_type ((ValaExpression*) self);
-			_tmp1215_ = _tmp1214_;
-			_tmp1211_ = _tmp1215_ != NULL;
+		_tmp1211_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+		_tmp1212_ = _tmp1211_;
+		_tmp1213_ = vala_expression_get_lvalue ((ValaExpression*) self);
+		_tmp1214_ = _tmp1213_;
+		_tmp1215_ = vala_semantic_analyzer_get_value_type_for_symbol (_tmp1210_, _tmp1212_, _tmp1214_);
+		_tmp1216_ = _tmp1215_;
+		vala_expression_set_formal_value_type ((ValaExpression*) self, _tmp1216_);
+		_vala_code_node_unref0 (_tmp1216_);
+		_tmp1218_ = vala_member_access_get_inner (self);
+		_tmp1219_ = _tmp1218_;
+		if (_tmp1219_ != NULL) {
+			ValaDataType* _tmp1220_;
+			ValaDataType* _tmp1221_;
+			_tmp1220_ = vala_expression_get_formal_value_type ((ValaExpression*) self);
+			_tmp1221_ = _tmp1220_;
+			_tmp1217_ = _tmp1221_ != NULL;
 		} else {
-			_tmp1211_ = FALSE;
+			_tmp1217_ = FALSE;
 		}
-		_tmp1216_ = _tmp1211_;
-		if (_tmp1216_) {
-			ValaDataType* _tmp1217_;
-			ValaDataType* _tmp1218_;
-			ValaExpression* _tmp1219_;
-			ValaExpression* _tmp1220_;
-			ValaDataType* _tmp1221_;
-			ValaDataType* _tmp1222_;
-			ValaDataType* _tmp1223_ = NULL;
+		_tmp1222_ = _tmp1217_;
+		if (_tmp1222_) {
+			ValaDataType* _tmp1223_;
 			ValaDataType* _tmp1224_;
-			_tmp1217_ = vala_expression_get_formal_value_type ((ValaExpression*) self);
-			_tmp1218_ = _tmp1217_;
-			_tmp1219_ = vala_member_access_get_inner (self);
-			_tmp1220_ = _tmp1219_;
-			_tmp1221_ = vala_expression_get_value_type (_tmp1220_);
-			_tmp1222_ = _tmp1221_;
-			_tmp1223_ = vala_data_type_get_actual_type (_tmp1218_, _tmp1222_, NULL, (ValaCodeNode*) self);
+			ValaExpression* _tmp1225_;
+			ValaExpression* _tmp1226_;
+			ValaDataType* _tmp1227_;
+			ValaDataType* _tmp1228_;
+			ValaDataType* _tmp1229_ = NULL;
+			ValaDataType* _tmp1230_;
+			_tmp1223_ = vala_expression_get_formal_value_type ((ValaExpression*) self);
 			_tmp1224_ = _tmp1223_;
-			vala_expression_set_value_type ((ValaExpression*) self, _tmp1224_);
-			_vala_code_node_unref0 (_tmp1224_);
-		} else {
-			ValaDataType* _tmp1225_;
-			ValaDataType* _tmp1226_;
-			_tmp1225_ = vala_expression_get_formal_value_type ((ValaExpression*) self);
+			_tmp1225_ = vala_member_access_get_inner (self);
 			_tmp1226_ = _tmp1225_;
-			vala_expression_set_value_type ((ValaExpression*) self, _tmp1226_);
+			_tmp1227_ = vala_expression_get_value_type (_tmp1226_);
+			_tmp1228_ = _tmp1227_;
+			_tmp1229_ = vala_data_type_get_actual_type (_tmp1224_, _tmp1228_, NULL, (ValaCodeNode*) self);
+			_tmp1230_ = _tmp1229_;
+			vala_expression_set_value_type ((ValaExpression*) self, _tmp1230_);
+			_vala_code_node_unref0 (_tmp1230_);
+		} else {
+			ValaDataType* _tmp1231_;
+			ValaDataType* _tmp1232_;
+			_tmp1231_ = vala_expression_get_formal_value_type ((ValaExpression*) self);
+			_tmp1232_ = _tmp1231_;
+			vala_expression_set_value_type ((ValaExpression*) self, _tmp1232_);
 		}
-		_tmp1227_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
-		_tmp1228_ = _tmp1227_;
-		if (VALA_IS_METHOD (_tmp1228_)) {
-			ValaSymbol* _tmp1229_;
-			ValaSymbol* _tmp1230_;
-			ValaMethod* _tmp1231_;
+		_tmp1233_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+		_tmp1234_ = _tmp1233_;
+		if (VALA_IS_METHOD (_tmp1234_)) {
+			ValaSymbol* _tmp1235_;
+			ValaSymbol* _tmp1236_;
+			ValaMethod* _tmp1237_;
 			ValaMethod* m;
-			ValaDataType* _tmp1232_;
-			ValaDataType* _tmp1233_;
+			ValaDataType* _tmp1238_;
+			ValaDataType* _tmp1239_;
 			ValaMethod* base_method = NULL;
-			ValaMethod* _tmp1240_;
-			ValaMethod* _tmp1241_;
-			ValaMethod* _tmp1242_;
-			gboolean _tmp1256_ = FALSE;
-			gboolean _tmp1257_;
-			gboolean _tmp1261_;
-			_tmp1229_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
-			_tmp1230_ = _tmp1229_;
-			_tmp1231_ = _vala_code_node_ref0 (VALA_METHOD (_tmp1230_));
-			m = _tmp1231_;
-			_tmp1232_ = vala_expression_get_target_type ((ValaExpression*) self);
-			_tmp1233_ = _tmp1232_;
-			if (_tmp1233_ != NULL) {
-				ValaDataType* _tmp1234_;
-				ValaDataType* _tmp1235_;
-				ValaDataType* _tmp1236_;
-				ValaDataType* _tmp1237_;
-				gboolean _tmp1238_;
-				gboolean _tmp1239_;
-				_tmp1234_ = vala_expression_get_value_type ((ValaExpression*) self);
-				_tmp1235_ = _tmp1234_;
-				_tmp1236_ = vala_expression_get_target_type ((ValaExpression*) self);
-				_tmp1237_ = _tmp1236_;
-				_tmp1238_ = vala_data_type_get_value_owned (_tmp1237_);
-				_tmp1239_ = _tmp1238_;
-				vala_data_type_set_value_owned (_tmp1235_, _tmp1239_);
-			}
-			_tmp1240_ = m;
-			_tmp1241_ = vala_method_get_base_method (_tmp1240_);
-			_tmp1242_ = _tmp1241_;
-			if (_tmp1242_ != NULL) {
-				ValaMethod* _tmp1243_;
-				ValaMethod* _tmp1244_;
-				ValaMethod* _tmp1245_;
-				ValaMethod* _tmp1246_;
-				_tmp1243_ = m;
-				_tmp1244_ = vala_method_get_base_method (_tmp1243_);
+			ValaMethod* _tmp1246_;
+			ValaMethod* _tmp1247_;
+			ValaMethod* _tmp1248_;
+			gboolean _tmp1262_ = FALSE;
+			gboolean _tmp1263_;
+			gboolean _tmp1267_;
+			_tmp1235_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+			_tmp1236_ = _tmp1235_;
+			_tmp1237_ = _vala_code_node_ref0 (VALA_METHOD (_tmp1236_));
+			m = _tmp1237_;
+			_tmp1238_ = vala_expression_get_target_type ((ValaExpression*) self);
+			_tmp1239_ = _tmp1238_;
+			if (_tmp1239_ != NULL) {
+				ValaDataType* _tmp1240_;
+				ValaDataType* _tmp1241_;
+				ValaDataType* _tmp1242_;
+				ValaDataType* _tmp1243_;
+				gboolean _tmp1244_;
+				gboolean _tmp1245_;
+				_tmp1240_ = vala_expression_get_value_type ((ValaExpression*) self);
+				_tmp1241_ = _tmp1240_;
+				_tmp1242_ = vala_expression_get_target_type ((ValaExpression*) self);
+				_tmp1243_ = _tmp1242_;
+				_tmp1244_ = vala_data_type_get_value_owned (_tmp1243_);
 				_tmp1245_ = _tmp1244_;
-				_tmp1246_ = _vala_code_node_ref0 (_tmp1245_);
+				vala_data_type_set_value_owned (_tmp1241_, _tmp1245_);
+			}
+			_tmp1246_ = m;
+			_tmp1247_ = vala_method_get_base_method (_tmp1246_);
+			_tmp1248_ = _tmp1247_;
+			if (_tmp1248_ != NULL) {
+				ValaMethod* _tmp1249_;
+				ValaMethod* _tmp1250_;
+				ValaMethod* _tmp1251_;
+				ValaMethod* _tmp1252_;
+				_tmp1249_ = m;
+				_tmp1250_ = vala_method_get_base_method (_tmp1249_);
+				_tmp1251_ = _tmp1250_;
+				_tmp1252_ = _vala_code_node_ref0 (_tmp1251_);
 				_vala_code_node_unref0 (base_method);
-				base_method = _tmp1246_;
+				base_method = _tmp1252_;
 			} else {
-				ValaMethod* _tmp1247_;
-				ValaMethod* _tmp1248_;
-				ValaMethod* _tmp1249_;
-				_tmp1247_ = m;
-				_tmp1248_ = vala_method_get_base_interface_method (_tmp1247_);
-				_tmp1249_ = _tmp1248_;
-				if (_tmp1249_ != NULL) {
-					ValaMethod* _tmp1250_;
-					ValaMethod* _tmp1251_;
-					ValaMethod* _tmp1252_;
-					ValaMethod* _tmp1253_;
-					_tmp1250_ = m;
-					_tmp1251_ = vala_method_get_base_interface_method (_tmp1250_);
-					_tmp1252_ = _tmp1251_;
-					_tmp1253_ = _vala_code_node_ref0 (_tmp1252_);
+				ValaMethod* _tmp1253_;
+				ValaMethod* _tmp1254_;
+				ValaMethod* _tmp1255_;
+				_tmp1253_ = m;
+				_tmp1254_ = vala_method_get_base_interface_method (_tmp1253_);
+				_tmp1255_ = _tmp1254_;
+				if (_tmp1255_ != NULL) {
+					ValaMethod* _tmp1256_;
+					ValaMethod* _tmp1257_;
+					ValaMethod* _tmp1258_;
+					ValaMethod* _tmp1259_;
+					_tmp1256_ = m;
+					_tmp1257_ = vala_method_get_base_interface_method (_tmp1256_);
+					_tmp1258_ = _tmp1257_;
+					_tmp1259_ = _vala_code_node_ref0 (_tmp1258_);
 					_vala_code_node_unref0 (base_method);
-					base_method = _tmp1253_;
+					base_method = _tmp1259_;
 				} else {
-					ValaMethod* _tmp1254_;
-					ValaMethod* _tmp1255_;
-					_tmp1254_ = m;
-					_tmp1255_ = _vala_code_node_ref0 (_tmp1254_);
+					ValaMethod* _tmp1260_;
+					ValaMethod* _tmp1261_;
+					_tmp1260_ = m;
+					_tmp1261_ = _vala_code_node_ref0 (_tmp1260_);
 					_vala_code_node_unref0 (base_method);
-					base_method = _tmp1255_;
+					base_method = _tmp1261_;
 				}
 			}
-			_tmp1257_ = instance;
-			if (_tmp1257_) {
-				ValaMethod* _tmp1258_;
-				ValaSymbol* _tmp1259_;
-				ValaSymbol* _tmp1260_;
-				_tmp1258_ = base_method;
-				_tmp1259_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp1258_);
-				_tmp1260_ = _tmp1259_;
-				_tmp1256_ = VALA_IS_TYPESYMBOL (_tmp1260_);
+			_tmp1263_ = instance;
+			if (_tmp1263_) {
+				ValaMethod* _tmp1264_;
+				ValaSymbol* _tmp1265_;
+				ValaSymbol* _tmp1266_;
+				_tmp1264_ = base_method;
+				_tmp1265_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp1264_);
+				_tmp1266_ = _tmp1265_;
+				_tmp1262_ = VALA_IS_TYPESYMBOL (_tmp1266_);
 			} else {
-				_tmp1256_ = FALSE;
+				_tmp1262_ = FALSE;
 			}
-			_tmp1261_ = _tmp1256_;
-			if (_tmp1261_) {
-				ValaExpression* _tmp1262_;
-				ValaExpression* _tmp1263_;
-				ValaCodeContext* _tmp1264_;
-				ValaSemanticAnalyzer* _tmp1265_;
-				ValaSemanticAnalyzer* _tmp1266_;
-				ValaMethod* _tmp1267_;
-				ValaSymbol* _tmp1268_;
-				ValaSymbol* _tmp1269_;
-				ValaDataType* _tmp1270_ = NULL;
-				ValaDataType* _tmp1271_;
-				ValaExpression* _tmp1272_;
-				ValaExpression* _tmp1273_;
-				ValaDataType* _tmp1274_;
-				ValaDataType* _tmp1275_;
-				ValaMethod* _tmp1276_;
-				ValaParameter* _tmp1277_;
-				ValaParameter* _tmp1278_;
-				ValaDataType* _tmp1279_;
+			_tmp1267_ = _tmp1262_;
+			if (_tmp1267_) {
+				ValaExpression* _tmp1268_;
+				ValaExpression* _tmp1269_;
+				ValaCodeContext* _tmp1270_;
+				ValaSemanticAnalyzer* _tmp1271_;
+				ValaSemanticAnalyzer* _tmp1272_;
+				ValaMethod* _tmp1273_;
+				ValaSymbol* _tmp1274_;
+				ValaSymbol* _tmp1275_;
+				ValaDataType* _tmp1276_ = NULL;
+				ValaDataType* _tmp1277_;
+				ValaExpression* _tmp1278_;
+				ValaExpression* _tmp1279_;
 				ValaDataType* _tmp1280_;
-				gboolean _tmp1281_;
-				gboolean _tmp1282_;
-				_tmp1262_ = vala_member_access_get_inner (self);
-				_tmp1263_ = _tmp1262_;
-				_tmp1264_ = context;
-				_tmp1265_ = vala_code_context_get_analyzer (_tmp1264_);
-				_tmp1266_ = _tmp1265_;
-				_tmp1267_ = base_method;
-				_tmp1268_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp1267_);
+				ValaDataType* _tmp1281_;
+				ValaMethod* _tmp1282_;
+				ValaParameter* _tmp1283_;
+				ValaParameter* _tmp1284_;
+				ValaDataType* _tmp1285_;
+				ValaDataType* _tmp1286_;
+				gboolean _tmp1287_;
+				gboolean _tmp1288_;
+				_tmp1268_ = vala_member_access_get_inner (self);
 				_tmp1269_ = _tmp1268_;
-				_tmp1270_ = vala_semantic_analyzer_get_data_type_for_symbol (VALA_TYPESYMBOL (_tmp1269_));
-				_tmp1271_ = _tmp1270_;
-				vala_expression_set_target_type (_tmp1263_, _tmp1271_);
-				_vala_code_node_unref0 (_tmp1271_);
-				_tmp1272_ = vala_member_access_get_inner (self);
-				_tmp1273_ = _tmp1272_;
-				_tmp1274_ = vala_expression_get_target_type (_tmp1273_);
+				_tmp1270_ = context;
+				_tmp1271_ = vala_code_context_get_analyzer (_tmp1270_);
+				_tmp1272_ = _tmp1271_;
+				_tmp1273_ = base_method;
+				_tmp1274_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp1273_);
 				_tmp1275_ = _tmp1274_;
-				_tmp1276_ = base_method;
-				_tmp1277_ = vala_method_get_this_parameter (_tmp1276_);
-				_tmp1278_ = _tmp1277_;
-				_tmp1279_ = vala_variable_get_variable_type ((ValaVariable*) _tmp1278_);
-				_tmp1280_ = _tmp1279_;
-				_tmp1281_ = vala_data_type_get_value_owned (_tmp1280_);
-				_tmp1282_ = _tmp1281_;
-				vala_data_type_set_value_owned (_tmp1275_, _tmp1282_);
+				_tmp1276_ = vala_semantic_analyzer_get_data_type_for_symbol (VALA_TYPESYMBOL (_tmp1275_));
+				_tmp1277_ = _tmp1276_;
+				vala_expression_set_target_type (_tmp1269_, _tmp1277_);
+				_vala_code_node_unref0 (_tmp1277_);
+				_tmp1278_ = vala_member_access_get_inner (self);
+				_tmp1279_ = _tmp1278_;
+				_tmp1280_ = vala_expression_get_target_type (_tmp1279_);
+				_tmp1281_ = _tmp1280_;
+				_tmp1282_ = base_method;
+				_tmp1283_ = vala_method_get_this_parameter (_tmp1282_);
+				_tmp1284_ = _tmp1283_;
+				_tmp1285_ = vala_variable_get_variable_type ((ValaVariable*) _tmp1284_);
+				_tmp1286_ = _tmp1285_;
+				_tmp1287_ = vala_data_type_get_value_owned (_tmp1286_);
+				_tmp1288_ = _tmp1287_;
+				vala_data_type_set_value_owned (_tmp1281_, _tmp1288_);
 			}
 			_vala_code_node_unref0 (base_method);
 			_vala_code_node_unref0 (m);
 		} else {
-			ValaSymbol* _tmp1283_;
-			ValaSymbol* _tmp1284_;
-			_tmp1283_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
-			_tmp1284_ = _tmp1283_;
-			if (VALA_IS_PROPERTY (_tmp1284_)) {
-				ValaSymbol* _tmp1285_;
-				ValaSymbol* _tmp1286_;
-				ValaProperty* _tmp1287_;
+			ValaSymbol* _tmp1289_;
+			ValaSymbol* _tmp1290_;
+			_tmp1289_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+			_tmp1290_ = _tmp1289_;
+			if (VALA_IS_PROPERTY (_tmp1290_)) {
+				ValaSymbol* _tmp1291_;
+				ValaSymbol* _tmp1292_;
+				ValaProperty* _tmp1293_;
 				ValaProperty* prop;
 				ValaProperty* base_property = NULL;
-				ValaProperty* _tmp1288_;
-				ValaProperty* _tmp1289_;
-				ValaProperty* _tmp1290_;
-				gboolean _tmp1304_ = FALSE;
-				gboolean _tmp1305_;
-				gboolean _tmp1309_;
-				_tmp1285_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
-				_tmp1286_ = _tmp1285_;
-				_tmp1287_ = _vala_code_node_ref0 (VALA_PROPERTY (_tmp1286_));
-				prop = _tmp1287_;
-				_tmp1288_ = prop;
-				_tmp1289_ = vala_property_get_base_property (_tmp1288_);
-				_tmp1290_ = _tmp1289_;
-				if (_tmp1290_ != NULL) {
-					ValaProperty* _tmp1291_;
-					ValaProperty* _tmp1292_;
-					ValaProperty* _tmp1293_;
-					ValaProperty* _tmp1294_;
-					_tmp1291_ = prop;
-					_tmp1292_ = vala_property_get_base_property (_tmp1291_);
-					_tmp1293_ = _tmp1292_;
-					_tmp1294_ = _vala_code_node_ref0 (_tmp1293_);
+				ValaProperty* _tmp1294_;
+				ValaProperty* _tmp1295_;
+				ValaProperty* _tmp1296_;
+				gboolean _tmp1310_ = FALSE;
+				gboolean _tmp1311_;
+				gboolean _tmp1315_;
+				_tmp1291_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+				_tmp1292_ = _tmp1291_;
+				_tmp1293_ = _vala_code_node_ref0 (VALA_PROPERTY (_tmp1292_));
+				prop = _tmp1293_;
+				_tmp1294_ = prop;
+				_tmp1295_ = vala_property_get_base_property (_tmp1294_);
+				_tmp1296_ = _tmp1295_;
+				if (_tmp1296_ != NULL) {
+					ValaProperty* _tmp1297_;
+					ValaProperty* _tmp1298_;
+					ValaProperty* _tmp1299_;
+					ValaProperty* _tmp1300_;
+					_tmp1297_ = prop;
+					_tmp1298_ = vala_property_get_base_property (_tmp1297_);
+					_tmp1299_ = _tmp1298_;
+					_tmp1300_ = _vala_code_node_ref0 (_tmp1299_);
 					_vala_code_node_unref0 (base_property);
-					base_property = _tmp1294_;
+					base_property = _tmp1300_;
 				} else {
-					ValaProperty* _tmp1295_;
-					ValaProperty* _tmp1296_;
-					ValaProperty* _tmp1297_;
-					_tmp1295_ = prop;
-					_tmp1296_ = vala_property_get_base_interface_property (_tmp1295_);
-					_tmp1297_ = _tmp1296_;
-					if (_tmp1297_ != NULL) {
-						ValaProperty* _tmp1298_;
-						ValaProperty* _tmp1299_;
-						ValaProperty* _tmp1300_;
-						ValaProperty* _tmp1301_;
-						_tmp1298_ = prop;
-						_tmp1299_ = vala_property_get_base_interface_property (_tmp1298_);
-						_tmp1300_ = _tmp1299_;
-						_tmp1301_ = _vala_code_node_ref0 (_tmp1300_);
+					ValaProperty* _tmp1301_;
+					ValaProperty* _tmp1302_;
+					ValaProperty* _tmp1303_;
+					_tmp1301_ = prop;
+					_tmp1302_ = vala_property_get_base_interface_property (_tmp1301_);
+					_tmp1303_ = _tmp1302_;
+					if (_tmp1303_ != NULL) {
+						ValaProperty* _tmp1304_;
+						ValaProperty* _tmp1305_;
+						ValaProperty* _tmp1306_;
+						ValaProperty* _tmp1307_;
+						_tmp1304_ = prop;
+						_tmp1305_ = vala_property_get_base_interface_property (_tmp1304_);
+						_tmp1306_ = _tmp1305_;
+						_tmp1307_ = _vala_code_node_ref0 (_tmp1306_);
 						_vala_code_node_unref0 (base_property);
-						base_property = _tmp1301_;
+						base_property = _tmp1307_;
 					} else {
-						ValaProperty* _tmp1302_;
-						ValaProperty* _tmp1303_;
-						_tmp1302_ = prop;
-						_tmp1303_ = _vala_code_node_ref0 (_tmp1302_);
+						ValaProperty* _tmp1308_;
+						ValaProperty* _tmp1309_;
+						_tmp1308_ = prop;
+						_tmp1309_ = _vala_code_node_ref0 (_tmp1308_);
 						_vala_code_node_unref0 (base_property);
-						base_property = _tmp1303_;
+						base_property = _tmp1309_;
 					}
 				}
-				_tmp1305_ = instance;
-				if (_tmp1305_) {
-					ValaProperty* _tmp1306_;
-					ValaSymbol* _tmp1307_;
-					ValaSymbol* _tmp1308_;
-					_tmp1306_ = base_property;
-					_tmp1307_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp1306_);
-					_tmp1308_ = _tmp1307_;
-					_tmp1304_ = _tmp1308_ != NULL;
+				_tmp1311_ = instance;
+				if (_tmp1311_) {
+					ValaProperty* _tmp1312_;
+					ValaSymbol* _tmp1313_;
+					ValaSymbol* _tmp1314_;
+					_tmp1312_ = base_property;
+					_tmp1313_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp1312_);
+					_tmp1314_ = _tmp1313_;
+					_tmp1310_ = _tmp1314_ != NULL;
 				} else {
-					_tmp1304_ = FALSE;
+					_tmp1310_ = FALSE;
 				}
-				_tmp1309_ = _tmp1304_;
-				if (_tmp1309_) {
-					ValaExpression* _tmp1310_;
-					ValaExpression* _tmp1311_;
-					ValaCodeContext* _tmp1312_;
-					ValaSemanticAnalyzer* _tmp1313_;
-					ValaSemanticAnalyzer* _tmp1314_;
-					ValaProperty* _tmp1315_;
-					ValaSymbol* _tmp1316_;
-					ValaSymbol* _tmp1317_;
-					ValaDataType* _tmp1318_ = NULL;
-					ValaDataType* _tmp1319_;
-					_tmp1310_ = vala_member_access_get_inner (self);
-					_tmp1311_ = _tmp1310_;
-					_tmp1312_ = context;
-					_tmp1313_ = vala_code_context_get_analyzer (_tmp1312_);
-					_tmp1314_ = _tmp1313_;
-					_tmp1315_ = base_property;
-					_tmp1316_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp1315_);
+				_tmp1315_ = _tmp1310_;
+				if (_tmp1315_) {
+					ValaExpression* _tmp1316_;
+					ValaExpression* _tmp1317_;
+					ValaCodeContext* _tmp1318_;
+					ValaSemanticAnalyzer* _tmp1319_;
+					ValaSemanticAnalyzer* _tmp1320_;
+					ValaProperty* _tmp1321_;
+					ValaSymbol* _tmp1322_;
+					ValaSymbol* _tmp1323_;
+					ValaDataType* _tmp1324_ = NULL;
+					ValaDataType* _tmp1325_;
+					_tmp1316_ = vala_member_access_get_inner (self);
 					_tmp1317_ = _tmp1316_;
-					_tmp1318_ = vala_semantic_analyzer_get_data_type_for_symbol (VALA_TYPESYMBOL (_tmp1317_));
-					_tmp1319_ = _tmp1318_;
-					vala_expression_set_target_type (_tmp1311_, _tmp1319_);
-					_vala_code_node_unref0 (_tmp1319_);
+					_tmp1318_ = context;
+					_tmp1319_ = vala_code_context_get_analyzer (_tmp1318_);
+					_tmp1320_ = _tmp1319_;
+					_tmp1321_ = base_property;
+					_tmp1322_ = vala_symbol_get_parent_symbol ((ValaSymbol*) _tmp1321_);
+					_tmp1323_ = _tmp1322_;
+					_tmp1324_ = vala_semantic_analyzer_get_data_type_for_symbol (VALA_TYPESYMBOL (_tmp1323_));
+					_tmp1325_ = _tmp1324_;
+					vala_expression_set_target_type (_tmp1317_, _tmp1325_);
+					_vala_code_node_unref0 (_tmp1325_);
 				}
 				_vala_code_node_unref0 (base_property);
 				_vala_code_node_unref0 (prop);
 			} else {
-				gboolean _tmp1320_ = FALSE;
-				gboolean _tmp1321_ = FALSE;
-				gboolean _tmp1322_ = FALSE;
-				ValaSymbol* _tmp1323_;
-				ValaSymbol* _tmp1324_;
-				gboolean _tmp1327_;
-				gboolean _tmp1329_;
-				gboolean _tmp1334_;
-				_tmp1323_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
-				_tmp1324_ = _tmp1323_;
-				if (VALA_IS_FIELD (_tmp1324_)) {
-					_tmp1322_ = TRUE;
+				gboolean _tmp1326_ = FALSE;
+				gboolean _tmp1327_ = FALSE;
+				gboolean _tmp1328_ = FALSE;
+				ValaSymbol* _tmp1329_;
+				ValaSymbol* _tmp1330_;
+				gboolean _tmp1333_;
+				gboolean _tmp1335_;
+				gboolean _tmp1340_;
+				_tmp1329_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+				_tmp1330_ = _tmp1329_;
+				if (VALA_IS_FIELD (_tmp1330_)) {
+					_tmp1328_ = TRUE;
 				} else {
-					ValaSymbol* _tmp1325_;
-					ValaSymbol* _tmp1326_;
-					_tmp1325_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
-					_tmp1326_ = _tmp1325_;
-					_tmp1322_ = VALA_IS_SIGNAL (_tmp1326_);
-				}
-				_tmp1327_ = _tmp1322_;
-				if (_tmp1327_) {
-					gboolean _tmp1328_;
-					_tmp1328_ = instance;
-					_tmp1321_ = _tmp1328_;
-				} else {
-					_tmp1321_ = FALSE;
-				}
-				_tmp1329_ = _tmp1321_;
-				if (_tmp1329_) {
-					ValaSymbol* _tmp1330_;
 					ValaSymbol* _tmp1331_;
 					ValaSymbol* _tmp1332_;
-					ValaSymbol* _tmp1333_;
-					_tmp1330_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
-					_tmp1331_ = _tmp1330_;
-					_tmp1332_ = vala_symbol_get_parent_symbol (_tmp1331_);
-					_tmp1333_ = _tmp1332_;
-					_tmp1320_ = _tmp1333_ != NULL;
+					_tmp1331_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+					_tmp1332_ = _tmp1331_;
+					_tmp1328_ = VALA_IS_SIGNAL (_tmp1332_);
+				}
+				_tmp1333_ = _tmp1328_;
+				if (_tmp1333_) {
+					gboolean _tmp1334_;
+					_tmp1334_ = instance;
+					_tmp1327_ = _tmp1334_;
 				} else {
-					_tmp1320_ = FALSE;
+					_tmp1327_ = FALSE;
 				}
-				_tmp1334_ = _tmp1320_;
-				if (_tmp1334_) {
-					ValaCodeContext* _tmp1335_;
-					ValaSemanticAnalyzer* _tmp1336_;
-					ValaSemanticAnalyzer* _tmp1337_;
+				_tmp1335_ = _tmp1327_;
+				if (_tmp1335_) {
+					ValaSymbol* _tmp1336_;
+					ValaSymbol* _tmp1337_;
 					ValaSymbol* _tmp1338_;
 					ValaSymbol* _tmp1339_;
-					ValaSymbol* _tmp1340_;
-					ValaSymbol* _tmp1341_;
-					ValaDataType* _tmp1342_ = NULL;
-					ValaDataType* parent_type;
-					ValaExpression* _tmp1343_;
-					ValaExpression* _tmp1344_;
-					ValaDataType* _tmp1345_;
-					ValaExpression* _tmp1346_;
-					ValaExpression* _tmp1347_;
-					ValaDataType* _tmp1348_;
-					ValaDataType* _tmp1349_;
-					ValaDataType* _tmp1350_ = NULL;
-					ValaDataType* _tmp1351_;
-					_tmp1335_ = context;
-					_tmp1336_ = vala_code_context_get_analyzer (_tmp1335_);
+					_tmp1336_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
 					_tmp1337_ = _tmp1336_;
-					_tmp1338_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+					_tmp1338_ = vala_symbol_get_parent_symbol (_tmp1337_);
 					_tmp1339_ = _tmp1338_;
-					_tmp1340_ = vala_symbol_get_parent_symbol (_tmp1339_);
-					_tmp1341_ = _tmp1340_;
-					_tmp1342_ = vala_semantic_analyzer_get_data_type_for_symbol (VALA_TYPESYMBOL (_tmp1341_));
-					parent_type = _tmp1342_;
-					_tmp1343_ = vala_member_access_get_inner (self);
-					_tmp1344_ = _tmp1343_;
-					_tmp1345_ = parent_type;
-					_tmp1346_ = vala_member_access_get_inner (self);
+					_tmp1326_ = _tmp1339_ != NULL;
+				} else {
+					_tmp1326_ = FALSE;
+				}
+				_tmp1340_ = _tmp1326_;
+				if (_tmp1340_) {
+					ValaCodeContext* _tmp1341_;
+					ValaSemanticAnalyzer* _tmp1342_;
+					ValaSemanticAnalyzer* _tmp1343_;
+					ValaSymbol* _tmp1344_;
+					ValaSymbol* _tmp1345_;
+					ValaSymbol* _tmp1346_;
+					ValaSymbol* _tmp1347_;
+					ValaDataType* _tmp1348_ = NULL;
+					ValaDataType* parent_type;
+					ValaExpression* _tmp1349_;
+					ValaExpression* _tmp1350_;
+					ValaDataType* _tmp1351_;
+					ValaExpression* _tmp1352_;
+					ValaExpression* _tmp1353_;
+					ValaDataType* _tmp1354_;
+					ValaDataType* _tmp1355_;
+					ValaDataType* _tmp1356_ = NULL;
+					ValaDataType* _tmp1357_;
+					_tmp1341_ = context;
+					_tmp1342_ = vala_code_context_get_analyzer (_tmp1341_);
+					_tmp1343_ = _tmp1342_;
+					_tmp1344_ = vala_expression_get_symbol_reference ((ValaExpression*) self);
+					_tmp1345_ = _tmp1344_;
+					_tmp1346_ = vala_symbol_get_parent_symbol (_tmp1345_);
 					_tmp1347_ = _tmp1346_;
-					_tmp1348_ = vala_expression_get_value_type (_tmp1347_);
-					_tmp1349_ = _tmp1348_;
-					_tmp1350_ = vala_data_type_get_actual_type (_tmp1345_, _tmp1349_, NULL, (ValaCodeNode*) self);
-					_tmp1351_ = _tmp1350_;
-					vala_expression_set_target_type (_tmp1344_, _tmp1351_);
-					_vala_code_node_unref0 (_tmp1351_);
+					_tmp1348_ = vala_semantic_analyzer_get_data_type_for_symbol (VALA_TYPESYMBOL (_tmp1347_));
+					parent_type = _tmp1348_;
+					_tmp1349_ = vala_member_access_get_inner (self);
+					_tmp1350_ = _tmp1349_;
+					_tmp1351_ = parent_type;
+					_tmp1352_ = vala_member_access_get_inner (self);
+					_tmp1353_ = _tmp1352_;
+					_tmp1354_ = vala_expression_get_value_type (_tmp1353_);
+					_tmp1355_ = _tmp1354_;
+					_tmp1356_ = vala_data_type_get_actual_type (_tmp1351_, _tmp1355_, NULL, (ValaCodeNode*) self);
+					_tmp1357_ = _tmp1356_;
+					vala_expression_set_target_type (_tmp1350_, _tmp1357_);
+					_vala_code_node_unref0 (_tmp1357_);
 					_vala_code_node_unref0 (parent_type);
 				}
 			}
 		}
 	}
-	_tmp1352_ = vala_code_node_get_error ((ValaCodeNode*) self);
-	_tmp1353_ = _tmp1352_;
-	result = !_tmp1353_;
+	_tmp1358_ = vala_code_node_get_error ((ValaCodeNode*) self);
+	_tmp1359_ = _tmp1358_;
+	result = !_tmp1359_;
 	_vala_code_node_unref0 (member);
 	_vala_code_node_unref0 (this_parameter);
 	_vala_code_node_unref0 (base_symbol);
diff --git a/vala/valamemberaccess.vala b/vala/valamemberaccess.vala
index 64d2b51..3958777 100644
--- a/vala/valamemberaccess.vala
+++ b/vala/valamemberaccess.vala
@@ -586,7 +586,15 @@ public class Vala.MemberAccess : Expression {
 			} else if (m.base_interface_method != null) {
 				// refer to base method to inherit default arguments
 				m = m.base_interface_method;
-				symbol_reference = m;
+
+				if (m.signal_reference != null) {
+					// method is class/default handler for a signal
+					// let signal deal with member access
+					symbol_reference = m.signal_reference;
+				} else {
+					symbol_reference = m;
+				}
+
 				member = symbol_reference;
 			}
 			access = m.access;
diff --git a/vala/valamethod.c b/vala/valamethod.c
index 4c51d52..9ae47c3 100644
--- a/vala/valamethod.c
+++ b/vala/valamethod.c
@@ -1522,12 +1522,11 @@ gboolean vala_method_get_is_abstract (ValaMethod* self);
 gboolean vala_method_get_overrides (ValaMethod* self);
 static void vala_method_find_base_class_method (ValaMethod* self, ValaClass* cl);
 ValaSymbol* vala_scope_lookup (ValaScope* self, const gchar* name);
+ValaMethod* vala_signal_get_default_handler (ValaSignal* self);
 void vala_code_node_set_error (ValaCodeNode* self, gboolean value);
 void vala_report_error (ValaSourceReference* source, const gchar* message);
 ValaSourceReference* vala_code_node_get_source_reference (ValaCodeNode* self);
 gchar* vala_symbol_get_full_name (ValaSymbol* self);
-gboolean vala_signal_get_is_virtual (ValaSignal* self);
-ValaMethod* vala_signal_get_default_handler (ValaSignal* self);
 ValaClass* vala_class_get_base_class (ValaClass* self);
 ValaList* vala_class_get_base_types (ValaClass* self);
 ValaTypeSymbol* vala_data_type_get_data_type (ValaDataType* self);
@@ -3074,9 +3073,10 @@ static void vala_method_find_base_class_method (ValaMethod* self, ValaClass* cl)
 	ValaSymbol* _tmp5_ = NULL;
 	ValaSymbol* sym;
 	ValaSymbol* _tmp6_;
-	ValaClass* _tmp53_;
-	ValaClass* _tmp54_;
-	ValaClass* _tmp55_;
+	ValaSymbol* _tmp13_;
+	ValaClass* _tmp36_;
+	ValaClass* _tmp37_;
+	ValaClass* _tmp38_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (cl != NULL);
 	_tmp0_ = cl;
@@ -3087,168 +3087,110 @@ static void vala_method_find_base_class_method (ValaMethod* self, ValaClass* cl)
 	_tmp5_ = vala_scope_lookup (_tmp2_, _tmp4_);
 	sym = _tmp5_;
 	_tmp6_ = sym;
-	if (VALA_IS_METHOD (_tmp6_)) {
+	if (VALA_IS_SIGNAL (_tmp6_)) {
 		ValaSymbol* _tmp7_;
-		ValaMethod* _tmp8_;
-		ValaMethod* base_method;
-		gboolean _tmp9_ = FALSE;
+		ValaSignal* _tmp8_;
+		ValaSignal* sig;
+		ValaSignal* _tmp9_;
 		ValaMethod* _tmp10_;
-		gboolean _tmp11_;
-		gboolean _tmp14_;
+		ValaMethod* _tmp11_;
+		ValaSymbol* _tmp12_;
 		_tmp7_ = sym;
-		_tmp8_ = _vala_code_node_ref0 (VALA_METHOD (_tmp7_));
-		base_method = _tmp8_;
-		_tmp10_ = base_method;
-		_tmp11_ = _tmp10_->priv->_is_abstract;
-		if (_tmp11_) {
-			_tmp9_ = TRUE;
+		_tmp8_ = _vala_code_node_ref0 (VALA_SIGNAL (_tmp7_));
+		sig = _tmp8_;
+		_tmp9_ = sig;
+		_tmp10_ = vala_signal_get_default_handler (_tmp9_);
+		_tmp11_ = _tmp10_;
+		_tmp12_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp11_);
+		_vala_code_node_unref0 (sym);
+		sym = _tmp12_;
+		_vala_code_node_unref0 (sig);
+	}
+	_tmp13_ = sym;
+	if (VALA_IS_METHOD (_tmp13_)) {
+		ValaSymbol* _tmp14_;
+		ValaMethod* _tmp15_;
+		ValaMethod* base_method;
+		gboolean _tmp16_ = FALSE;
+		ValaMethod* _tmp17_;
+		gboolean _tmp18_;
+		gboolean _tmp21_;
+		_tmp14_ = sym;
+		_tmp15_ = _vala_code_node_ref0 (VALA_METHOD (_tmp14_));
+		base_method = _tmp15_;
+		_tmp17_ = base_method;
+		_tmp18_ = _tmp17_->priv->_is_abstract;
+		if (_tmp18_) {
+			_tmp16_ = TRUE;
 		} else {
-			ValaMethod* _tmp12_;
-			gboolean _tmp13_;
-			_tmp12_ = base_method;
-			_tmp13_ = _tmp12_->priv->_is_virtual;
-			_tmp9_ = _tmp13_;
+			ValaMethod* _tmp19_;
+			gboolean _tmp20_;
+			_tmp19_ = base_method;
+			_tmp20_ = _tmp19_->priv->_is_virtual;
+			_tmp16_ = _tmp20_;
 		}
-		_tmp14_ = _tmp9_;
-		if (_tmp14_) {
+		_tmp21_ = _tmp16_;
+		if (_tmp21_) {
 			gchar* invalid_match = NULL;
-			ValaMethod* _tmp15_;
-			gchar* _tmp16_ = NULL;
-			gboolean _tmp17_ = FALSE;
-			ValaMethod* _tmp28_;
-			_tmp15_ = base_method;
-			_tmp17_ = vala_method_compatible (self, _tmp15_, &_tmp16_);
+			ValaMethod* _tmp22_;
+			gchar* _tmp23_ = NULL;
+			gboolean _tmp24_ = FALSE;
+			ValaMethod* _tmp35_;
+			_tmp22_ = base_method;
+			_tmp24_ = vala_method_compatible (self, _tmp22_, &_tmp23_);
 			_g_free0 (invalid_match);
-			invalid_match = _tmp16_;
-			if (!_tmp17_) {
-				ValaSourceReference* _tmp18_;
-				ValaSourceReference* _tmp19_;
-				gchar* _tmp20_ = NULL;
-				gchar* _tmp21_;
-				ValaMethod* _tmp22_;
-				gchar* _tmp23_ = NULL;
-				gchar* _tmp24_;
-				const gchar* _tmp25_;
-				gchar* _tmp26_ = NULL;
-				gchar* _tmp27_;
+			invalid_match = _tmp23_;
+			if (!_tmp24_) {
+				ValaSourceReference* _tmp25_;
+				ValaSourceReference* _tmp26_;
+				gchar* _tmp27_ = NULL;
+				gchar* _tmp28_;
+				ValaMethod* _tmp29_;
+				gchar* _tmp30_ = NULL;
+				gchar* _tmp31_;
+				const gchar* _tmp32_;
+				gchar* _tmp33_ = NULL;
+				gchar* _tmp34_;
 				vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
-				_tmp18_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-				_tmp19_ = _tmp18_;
-				_tmp20_ = vala_symbol_get_full_name ((ValaSymbol*) self);
-				_tmp21_ = _tmp20_;
-				_tmp22_ = base_method;
-				_tmp23_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp22_);
-				_tmp24_ = _tmp23_;
-				_tmp25_ = invalid_match;
-				_tmp26_ = g_strdup_printf ("overriding method `%s' is incompatible with base method `%s': %s.", _tmp21_, _tmp24_, _tmp25_);
-				_tmp27_ = _tmp26_;
-				vala_report_error (_tmp19_, _tmp27_);
-				_g_free0 (_tmp27_);
-				_g_free0 (_tmp24_);
-				_g_free0 (_tmp21_);
+				_tmp25_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
+				_tmp26_ = _tmp25_;
+				_tmp27_ = vala_symbol_get_full_name ((ValaSymbol*) self);
+				_tmp28_ = _tmp27_;
+				_tmp29_ = base_method;
+				_tmp30_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp29_);
+				_tmp31_ = _tmp30_;
+				_tmp32_ = invalid_match;
+				_tmp33_ = g_strdup_printf ("overriding method `%s' is incompatible with base method `%s': %s.", _tmp28_, _tmp31_, _tmp32_);
+				_tmp34_ = _tmp33_;
+				vala_report_error (_tmp26_, _tmp34_);
+				_g_free0 (_tmp34_);
+				_g_free0 (_tmp31_);
+				_g_free0 (_tmp28_);
 				_g_free0 (invalid_match);
 				_vala_code_node_unref0 (base_method);
 				_vala_code_node_unref0 (sym);
 				return;
 			}
-			_tmp28_ = base_method;
-			self->priv->_base_method = _tmp28_;
+			_tmp35_ = base_method;
+			self->priv->_base_method = _tmp35_;
 			_g_free0 (invalid_match);
 			_vala_code_node_unref0 (base_method);
 			_vala_code_node_unref0 (sym);
 			return;
 		}
 		_vala_code_node_unref0 (base_method);
-	} else {
-		ValaSymbol* _tmp29_;
-		_tmp29_ = sym;
-		if (VALA_IS_SIGNAL (_tmp29_)) {
-			ValaSymbol* _tmp30_;
-			ValaSignal* _tmp31_;
-			ValaSignal* sig;
-			ValaSignal* _tmp32_;
-			gboolean _tmp33_;
-			gboolean _tmp34_;
-			_tmp30_ = sym;
-			_tmp31_ = _vala_code_node_ref0 (VALA_SIGNAL (_tmp30_));
-			sig = _tmp31_;
-			_tmp32_ = sig;
-			_tmp33_ = vala_signal_get_is_virtual (_tmp32_);
-			_tmp34_ = _tmp33_;
-			if (_tmp34_) {
-				ValaSignal* _tmp35_;
-				ValaMethod* _tmp36_;
-				ValaMethod* _tmp37_;
-				ValaMethod* _tmp38_;
-				ValaMethod* base_method;
-				gchar* invalid_match = NULL;
-				ValaMethod* _tmp39_;
-				gchar* _tmp40_ = NULL;
-				gboolean _tmp41_ = FALSE;
-				ValaMethod* _tmp52_;
-				_tmp35_ = sig;
-				_tmp36_ = vala_signal_get_default_handler (_tmp35_);
-				_tmp37_ = _tmp36_;
-				_tmp38_ = _vala_code_node_ref0 (_tmp37_);
-				base_method = _tmp38_;
-				_tmp39_ = base_method;
-				_tmp41_ = vala_method_compatible (self, _tmp39_, &_tmp40_);
-				_g_free0 (invalid_match);
-				invalid_match = _tmp40_;
-				if (!_tmp41_) {
-					ValaSourceReference* _tmp42_;
-					ValaSourceReference* _tmp43_;
-					gchar* _tmp44_ = NULL;
-					gchar* _tmp45_;
-					ValaMethod* _tmp46_;
-					gchar* _tmp47_ = NULL;
-					gchar* _tmp48_;
-					const gchar* _tmp49_;
-					gchar* _tmp50_ = NULL;
-					gchar* _tmp51_;
-					vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
-					_tmp42_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-					_tmp43_ = _tmp42_;
-					_tmp44_ = vala_symbol_get_full_name ((ValaSymbol*) self);
-					_tmp45_ = _tmp44_;
-					_tmp46_ = base_method;
-					_tmp47_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp46_);
-					_tmp48_ = _tmp47_;
-					_tmp49_ = invalid_match;
-					_tmp50_ = g_strdup_printf ("overriding method `%s' is incompatible with base method `%s': %s.", _tmp45_, _tmp48_, _tmp49_);
-					_tmp51_ = _tmp50_;
-					vala_report_error (_tmp43_, _tmp51_);
-					_g_free0 (_tmp51_);
-					_g_free0 (_tmp48_);
-					_g_free0 (_tmp45_);
-					_g_free0 (invalid_match);
-					_vala_code_node_unref0 (base_method);
-					_vala_code_node_unref0 (sig);
-					_vala_code_node_unref0 (sym);
-					return;
-				}
-				_tmp52_ = base_method;
-				self->priv->_base_method = _tmp52_;
-				_g_free0 (invalid_match);
-				_vala_code_node_unref0 (base_method);
-				_vala_code_node_unref0 (sig);
-				_vala_code_node_unref0 (sym);
-				return;
-			}
-			_vala_code_node_unref0 (sig);
-		}
 	}
-	_tmp53_ = cl;
-	_tmp54_ = vala_class_get_base_class (_tmp53_);
-	_tmp55_ = _tmp54_;
-	if (_tmp55_ != NULL) {
-		ValaClass* _tmp56_;
-		ValaClass* _tmp57_;
-		ValaClass* _tmp58_;
-		_tmp56_ = cl;
-		_tmp57_ = vala_class_get_base_class (_tmp56_);
-		_tmp58_ = _tmp57_;
-		vala_method_find_base_class_method (self, _tmp58_);
+	_tmp36_ = cl;
+	_tmp37_ = vala_class_get_base_class (_tmp36_);
+	_tmp38_ = _tmp37_;
+	if (_tmp38_ != NULL) {
+		ValaClass* _tmp39_;
+		ValaClass* _tmp40_;
+		ValaClass* _tmp41_;
+		_tmp39_ = cl;
+		_tmp40_ = vala_class_get_base_class (_tmp39_);
+		_tmp41_ = _tmp40_;
+		vala_method_find_base_class_method (self, _tmp41_);
 	}
 	_vala_code_node_unref0 (sym);
 }
@@ -3310,6 +3252,7 @@ static void vala_method_find_base_interface_method (ValaMethod* self, ValaClass*
 				ValaSymbol* _tmp21_ = NULL;
 				ValaSymbol* sym;
 				ValaSymbol* _tmp22_;
+				ValaSymbol* _tmp29_;
 				_tmp14_ = type;
 				_tmp15_ = vala_data_type_get_data_type (_tmp14_);
 				_tmp16_ = _tmp15_;
@@ -3320,66 +3263,86 @@ static void vala_method_find_base_interface_method (ValaMethod* self, ValaClass*
 				_tmp21_ = vala_scope_lookup (_tmp18_, _tmp20_);
 				sym = _tmp21_;
 				_tmp22_ = sym;
-				if (VALA_IS_METHOD (_tmp22_)) {
+				if (VALA_IS_SIGNAL (_tmp22_)) {
 					ValaSymbol* _tmp23_;
-					ValaMethod* _tmp24_;
-					ValaMethod* base_method;
-					gboolean _tmp25_ = FALSE;
+					ValaSignal* _tmp24_;
+					ValaSignal* sig;
+					ValaSignal* _tmp25_;
 					ValaMethod* _tmp26_;
-					gboolean _tmp27_;
-					gboolean _tmp30_;
+					ValaMethod* _tmp27_;
+					ValaSymbol* _tmp28_;
 					_tmp23_ = sym;
-					_tmp24_ = _vala_code_node_ref0 (VALA_METHOD (_tmp23_));
-					base_method = _tmp24_;
-					_tmp26_ = base_method;
-					_tmp27_ = _tmp26_->priv->_is_abstract;
-					if (_tmp27_) {
-						_tmp25_ = TRUE;
+					_tmp24_ = _vala_code_node_ref0 (VALA_SIGNAL (_tmp23_));
+					sig = _tmp24_;
+					_tmp25_ = sig;
+					_tmp26_ = vala_signal_get_default_handler (_tmp25_);
+					_tmp27_ = _tmp26_;
+					_tmp28_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp27_);
+					_vala_code_node_unref0 (sym);
+					sym = _tmp28_;
+					_vala_code_node_unref0 (sig);
+				}
+				_tmp29_ = sym;
+				if (VALA_IS_METHOD (_tmp29_)) {
+					ValaSymbol* _tmp30_;
+					ValaMethod* _tmp31_;
+					ValaMethod* base_method;
+					gboolean _tmp32_ = FALSE;
+					ValaMethod* _tmp33_;
+					gboolean _tmp34_;
+					gboolean _tmp37_;
+					_tmp30_ = sym;
+					_tmp31_ = _vala_code_node_ref0 (VALA_METHOD (_tmp30_));
+					base_method = _tmp31_;
+					_tmp33_ = base_method;
+					_tmp34_ = _tmp33_->priv->_is_abstract;
+					if (_tmp34_) {
+						_tmp32_ = TRUE;
 					} else {
-						ValaMethod* _tmp28_;
-						gboolean _tmp29_;
-						_tmp28_ = base_method;
-						_tmp29_ = _tmp28_->priv->_is_virtual;
-						_tmp25_ = _tmp29_;
+						ValaMethod* _tmp35_;
+						gboolean _tmp36_;
+						_tmp35_ = base_method;
+						_tmp36_ = _tmp35_->priv->_is_virtual;
+						_tmp32_ = _tmp36_;
 					}
-					_tmp30_ = _tmp25_;
-					if (_tmp30_) {
+					_tmp37_ = _tmp32_;
+					if (_tmp37_) {
 						gchar* invalid_match = NULL;
-						ValaMethod* _tmp31_;
-						gchar* _tmp32_ = NULL;
-						gboolean _tmp33_ = FALSE;
-						ValaMethod* _tmp44_;
-						ValaMethod* _tmp45_;
-						_tmp31_ = base_method;
-						_tmp33_ = vala_method_compatible (self, _tmp31_, &_tmp32_);
+						ValaMethod* _tmp38_;
+						gchar* _tmp39_ = NULL;
+						gboolean _tmp40_ = FALSE;
+						ValaMethod* _tmp51_;
+						ValaMethod* _tmp52_;
+						_tmp38_ = base_method;
+						_tmp40_ = vala_method_compatible (self, _tmp38_, &_tmp39_);
 						_g_free0 (invalid_match);
-						invalid_match = _tmp32_;
-						if (!_tmp33_) {
-							ValaSourceReference* _tmp34_;
-							ValaSourceReference* _tmp35_;
-							gchar* _tmp36_ = NULL;
-							gchar* _tmp37_;
-							ValaMethod* _tmp38_;
-							gchar* _tmp39_ = NULL;
-							gchar* _tmp40_;
-							const gchar* _tmp41_;
-							gchar* _tmp42_ = NULL;
-							gchar* _tmp43_;
+						invalid_match = _tmp39_;
+						if (!_tmp40_) {
+							ValaSourceReference* _tmp41_;
+							ValaSourceReference* _tmp42_;
+							gchar* _tmp43_ = NULL;
+							gchar* _tmp44_;
+							ValaMethod* _tmp45_;
+							gchar* _tmp46_ = NULL;
+							gchar* _tmp47_;
+							const gchar* _tmp48_;
+							gchar* _tmp49_ = NULL;
+							gchar* _tmp50_;
 							vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
-							_tmp34_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-							_tmp35_ = _tmp34_;
-							_tmp36_ = vala_symbol_get_full_name ((ValaSymbol*) self);
-							_tmp37_ = _tmp36_;
-							_tmp38_ = base_method;
-							_tmp39_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp38_);
-							_tmp40_ = _tmp39_;
-							_tmp41_ = invalid_match;
-							_tmp42_ = g_strdup_printf ("overriding method `%s' is incompatible with base method `%s': %s.", _tmp37_, _tmp40_, _tmp41_);
-							_tmp43_ = _tmp42_;
-							vala_report_error (_tmp35_, _tmp43_);
-							_g_free0 (_tmp43_);
-							_g_free0 (_tmp40_);
-							_g_free0 (_tmp37_);
+							_tmp41_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
+							_tmp42_ = _tmp41_;
+							_tmp43_ = vala_symbol_get_full_name ((ValaSymbol*) self);
+							_tmp44_ = _tmp43_;
+							_tmp45_ = base_method;
+							_tmp46_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp45_);
+							_tmp47_ = _tmp46_;
+							_tmp48_ = invalid_match;
+							_tmp49_ = g_strdup_printf ("overriding method `%s' is incompatible with base method `%s': %s.", _tmp44_, _tmp47_, _tmp48_);
+							_tmp50_ = _tmp49_;
+							vala_report_error (_tmp42_, _tmp50_);
+							_g_free0 (_tmp50_);
+							_g_free0 (_tmp47_);
+							_g_free0 (_tmp44_);
 							_g_free0 (invalid_match);
 							_vala_code_node_unref0 (base_method);
 							_vala_code_node_unref0 (sym);
@@ -3387,10 +3350,10 @@ static void vala_method_find_base_interface_method (ValaMethod* self, ValaClass*
 							_vala_iterable_unref0 (_type_list);
 							return;
 						}
-						_tmp44_ = base_method;
-						_tmp45_ = _vala_code_node_ref0 (_tmp44_);
+						_tmp51_ = base_method;
+						_tmp52_ = _vala_code_node_ref0 (_tmp51_);
 						_vala_code_node_unref0 (self->priv->_base_interface_method);
-						self->priv->_base_interface_method = _tmp45_;
+						self->priv->_base_interface_method = _tmp52_;
 						_g_free0 (invalid_match);
 						_vala_code_node_unref0 (base_method);
 						_vala_code_node_unref0 (sym);
diff --git a/vala/valamethod.vala b/vala/valamethod.vala
index c2de41d..9f397c4 100644
--- a/vala/valamethod.vala
+++ b/vala/valamethod.vala
@@ -493,6 +493,10 @@ public class Vala.Method : Subroutine {
 
 	private void find_base_class_method (Class cl) {
 		var sym = cl.scope.lookup (name);
+		if (sym is Signal) {
+			var sig = (Signal) sym;
+			sym = sig.default_handler;
+		}
 		if (sym is Method) {
 			var base_method = (Method) sym;
 			if (base_method.is_abstract || base_method.is_virtual) {
@@ -506,20 +510,6 @@ public class Vala.Method : Subroutine {
 				_base_method = base_method;
 				return;
 			}
-		} else if (sym is Signal) {
-			var sig = (Signal) sym;
-			if (sig.is_virtual) {
-				var base_method = sig.default_handler;
-				string invalid_match;
-				if (!compatible (base_method, out invalid_match)) {
-					error = true;
-					Report.error (source_reference, "overriding method `%s' is incompatible with base method `%s': %s.".printf (get_full_name (), base_method.get_full_name (), invalid_match));
-					return;
-				}
-
-				_base_method = base_method;
-				return;
-			}
 		}
 
 		if (cl.base_class != null) {
@@ -532,6 +522,10 @@ public class Vala.Method : Subroutine {
 		foreach (DataType type in cl.get_base_types ()) {
 			if (type.data_type is Interface) {
 				var sym = type.data_type.scope.lookup (name);
+				if (sym is Signal) {
+					var sig = (Signal) sym;
+					sym = sig.default_handler;
+				}
 				if (sym is Method) {
 					var base_method = (Method) sym;
 					if (base_method.is_abstract || base_method.is_virtual) {
diff --git a/vala/valaparameter.c b/vala/valaparameter.c
index b01e7b1..f6e5f28 100644
--- a/vala/valaparameter.c
+++ b/vala/valaparameter.c
@@ -616,6 +616,8 @@ GType vala_null_literal_get_type (void) G_GNUC_CONST;
 gboolean vala_data_type_get_nullable (ValaDataType* self);
 void vala_report_warning (ValaSourceReference* source, const gchar* message);
 gchar* vala_code_node_to_string (ValaCodeNode* self);
+ValaDataType* vala_expression_get_value_type (ValaExpression* self);
+gboolean vala_data_type_compatible (ValaDataType* self, ValaDataType* target_type);
 gboolean vala_semantic_analyzer_is_type_accessible (ValaSemanticAnalyzer* self, ValaSymbol* sym, ValaDataType* type);
 gchar* vala_symbol_get_full_name (ValaSymbol* self);
 gboolean vala_parameter_get_captured (ValaParameter* self);
@@ -860,17 +862,17 @@ static gboolean vala_parameter_real_check (ValaCodeNode* base, ValaCodeContext*
 	gboolean _tmp39_;
 	ValaExpression* _tmp61_;
 	ValaExpression* _tmp62_;
-	gboolean _tmp92_;
-	ValaCodeContext* _tmp111_;
-	ValaSemanticAnalyzer* _tmp112_;
-	ValaSemanticAnalyzer* _tmp113_;
-	ValaSourceFile* _tmp114_;
-	ValaCodeContext* _tmp115_;
-	ValaSemanticAnalyzer* _tmp116_;
-	ValaSemanticAnalyzer* _tmp117_;
-	ValaSymbol* _tmp118_;
-	gboolean _tmp119_;
-	gboolean _tmp120_;
+	gboolean _tmp118_;
+	ValaCodeContext* _tmp137_;
+	ValaSemanticAnalyzer* _tmp138_;
+	ValaSemanticAnalyzer* _tmp139_;
+	ValaSourceFile* _tmp140_;
+	ValaCodeContext* _tmp141_;
+	ValaSemanticAnalyzer* _tmp142_;
+	ValaSemanticAnalyzer* _tmp143_;
+	ValaSymbol* _tmp144_;
+	gboolean _tmp145_;
+	gboolean _tmp146_;
 	self = (ValaParameter*) base;
 	g_return_val_if_fail (context != NULL, FALSE);
 	_tmp0_ = vala_code_node_get_checked ((ValaCodeNode*) self);
@@ -1088,77 +1090,140 @@ static gboolean vala_parameter_real_check (ValaCodeNode* base, ValaCodeContext*
 				_tmp88_ = _tmp87_;
 				vala_report_error (_tmp88_, "only `null' is allowed as default value for out parameters");
 			} else {
-				ValaParameterDirection _tmp89_;
-				_tmp89_ = self->priv->_direction;
-				if (_tmp89_ == VALA_PARAMETER_DIRECTION_REF) {
-					ValaSourceReference* _tmp90_;
-					ValaSourceReference* _tmp91_;
-					_tmp90_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-					_tmp91_ = _tmp90_;
-					vala_report_error (_tmp91_, "default value not allowed for ref parameter");
+				gboolean _tmp89_ = FALSE;
+				ValaParameterDirection _tmp90_;
+				gboolean _tmp98_;
+				_tmp90_ = self->priv->_direction;
+				if (_tmp90_ == VALA_PARAMETER_DIRECTION_IN) {
+					ValaExpression* _tmp91_;
+					ValaExpression* _tmp92_;
+					ValaDataType* _tmp93_;
+					ValaDataType* _tmp94_;
+					ValaDataType* _tmp95_;
+					ValaDataType* _tmp96_;
+					gboolean _tmp97_ = FALSE;
+					_tmp91_ = vala_variable_get_initializer ((ValaVariable*) self);
+					_tmp92_ = _tmp91_;
+					_tmp93_ = vala_expression_get_value_type (_tmp92_);
+					_tmp94_ = _tmp93_;
+					_tmp95_ = vala_variable_get_variable_type ((ValaVariable*) self);
+					_tmp96_ = _tmp95_;
+					_tmp97_ = vala_data_type_compatible (_tmp94_, _tmp96_);
+					_tmp89_ = !_tmp97_;
+				} else {
+					_tmp89_ = FALSE;
+				}
+				_tmp98_ = _tmp89_;
+				if (_tmp98_) {
+					ValaExpression* _tmp99_;
+					ValaExpression* _tmp100_;
+					ValaSourceReference* _tmp101_;
+					ValaSourceReference* _tmp102_;
+					ValaExpression* _tmp103_;
+					ValaExpression* _tmp104_;
+					ValaDataType* _tmp105_;
+					ValaDataType* _tmp106_;
+					gchar* _tmp107_ = NULL;
+					gchar* _tmp108_;
+					ValaDataType* _tmp109_;
+					ValaDataType* _tmp110_;
+					gchar* _tmp111_ = NULL;
+					gchar* _tmp112_;
+					gchar* _tmp113_ = NULL;
+					gchar* _tmp114_;
+					_tmp99_ = vala_variable_get_initializer ((ValaVariable*) self);
+					_tmp100_ = _tmp99_;
+					_tmp101_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp100_);
+					_tmp102_ = _tmp101_;
+					_tmp103_ = vala_variable_get_initializer ((ValaVariable*) self);
+					_tmp104_ = _tmp103_;
+					_tmp105_ = vala_expression_get_value_type (_tmp104_);
+					_tmp106_ = _tmp105_;
+					_tmp107_ = vala_code_node_to_string ((ValaCodeNode*) _tmp106_);
+					_tmp108_ = _tmp107_;
+					_tmp109_ = vala_variable_get_variable_type ((ValaVariable*) self);
+					_tmp110_ = _tmp109_;
+					_tmp111_ = vala_code_node_to_string ((ValaCodeNode*) _tmp110_);
+					_tmp112_ = _tmp111_;
+					_tmp113_ = g_strdup_printf ("Cannot convert from `%s' to `%s'", _tmp108_, _tmp112_);
+					_tmp114_ = _tmp113_;
+					vala_report_error (_tmp102_, _tmp114_);
+					_g_free0 (_tmp114_);
+					_g_free0 (_tmp112_);
+					_g_free0 (_tmp108_);
+				} else {
+					ValaParameterDirection _tmp115_;
+					_tmp115_ = self->priv->_direction;
+					if (_tmp115_ == VALA_PARAMETER_DIRECTION_REF) {
+						ValaSourceReference* _tmp116_;
+						ValaSourceReference* _tmp117_;
+						_tmp116_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
+						_tmp117_ = _tmp116_;
+						vala_report_error (_tmp117_, "default value not allowed for ref parameter");
+					}
 				}
 			}
 		}
 	}
-	_tmp92_ = self->priv->_ellipsis;
-	if (!_tmp92_) {
-		ValaCodeContext* _tmp93_;
-		ValaSemanticAnalyzer* _tmp94_;
-		ValaSemanticAnalyzer* _tmp95_;
-		ValaDataType* _tmp96_;
-		ValaDataType* _tmp97_;
-		gboolean _tmp98_ = FALSE;
-		_tmp93_ = context;
-		_tmp94_ = vala_code_context_get_analyzer (_tmp93_);
-		_tmp95_ = _tmp94_;
-		_tmp96_ = vala_variable_get_variable_type ((ValaVariable*) self);
-		_tmp97_ = _tmp96_;
-		_tmp98_ = vala_semantic_analyzer_is_type_accessible (_tmp95_, (ValaSymbol*) self, _tmp97_);
-		if (!_tmp98_) {
-			ValaSourceReference* _tmp99_;
-			ValaSourceReference* _tmp100_;
-			ValaDataType* _tmp101_;
-			ValaDataType* _tmp102_;
-			gchar* _tmp103_ = NULL;
-			gchar* _tmp104_;
-			ValaSymbol* _tmp105_;
-			ValaSymbol* _tmp106_;
-			gchar* _tmp107_ = NULL;
-			gchar* _tmp108_;
-			gchar* _tmp109_ = NULL;
-			gchar* _tmp110_;
+	_tmp118_ = self->priv->_ellipsis;
+	if (!_tmp118_) {
+		ValaCodeContext* _tmp119_;
+		ValaSemanticAnalyzer* _tmp120_;
+		ValaSemanticAnalyzer* _tmp121_;
+		ValaDataType* _tmp122_;
+		ValaDataType* _tmp123_;
+		gboolean _tmp124_ = FALSE;
+		_tmp119_ = context;
+		_tmp120_ = vala_code_context_get_analyzer (_tmp119_);
+		_tmp121_ = _tmp120_;
+		_tmp122_ = vala_variable_get_variable_type ((ValaVariable*) self);
+		_tmp123_ = _tmp122_;
+		_tmp124_ = vala_semantic_analyzer_is_type_accessible (_tmp121_, (ValaSymbol*) self, _tmp123_);
+		if (!_tmp124_) {
+			ValaSourceReference* _tmp125_;
+			ValaSourceReference* _tmp126_;
+			ValaDataType* _tmp127_;
+			ValaDataType* _tmp128_;
+			gchar* _tmp129_ = NULL;
+			gchar* _tmp130_;
+			ValaSymbol* _tmp131_;
+			ValaSymbol* _tmp132_;
+			gchar* _tmp133_ = NULL;
+			gchar* _tmp134_;
+			gchar* _tmp135_ = NULL;
+			gchar* _tmp136_;
 			vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
-			_tmp99_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-			_tmp100_ = _tmp99_;
-			_tmp101_ = vala_variable_get_variable_type ((ValaVariable*) self);
-			_tmp102_ = _tmp101_;
-			_tmp103_ = vala_code_node_to_string ((ValaCodeNode*) _tmp102_);
-			_tmp104_ = _tmp103_;
-			_tmp105_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
-			_tmp106_ = _tmp105_;
-			_tmp107_ = vala_symbol_get_full_name (_tmp106_);
-			_tmp108_ = _tmp107_;
-			_tmp109_ = g_strdup_printf ("parameter type `%s` is less accessible than method `%s`", _tmp104_, _tmp108_);
-			_tmp110_ = _tmp109_;
-			vala_report_error (_tmp100_, _tmp110_);
-			_g_free0 (_tmp110_);
-			_g_free0 (_tmp108_);
-			_g_free0 (_tmp104_);
+			_tmp125_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
+			_tmp126_ = _tmp125_;
+			_tmp127_ = vala_variable_get_variable_type ((ValaVariable*) self);
+			_tmp128_ = _tmp127_;
+			_tmp129_ = vala_code_node_to_string ((ValaCodeNode*) _tmp128_);
+			_tmp130_ = _tmp129_;
+			_tmp131_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
+			_tmp132_ = _tmp131_;
+			_tmp133_ = vala_symbol_get_full_name (_tmp132_);
+			_tmp134_ = _tmp133_;
+			_tmp135_ = g_strdup_printf ("parameter type `%s` is less accessible than method `%s`", _tmp130_, _tmp134_);
+			_tmp136_ = _tmp135_;
+			vala_report_error (_tmp126_, _tmp136_);
+			_g_free0 (_tmp136_);
+			_g_free0 (_tmp134_);
+			_g_free0 (_tmp130_);
 		}
 	}
-	_tmp111_ = context;
-	_tmp112_ = vala_code_context_get_analyzer (_tmp111_);
-	_tmp113_ = _tmp112_;
-	_tmp114_ = old_source_file;
-	vala_semantic_analyzer_set_current_source_file (_tmp113_, _tmp114_);
-	_tmp115_ = context;
-	_tmp116_ = vala_code_context_get_analyzer (_tmp115_);
-	_tmp117_ = _tmp116_;
-	_tmp118_ = old_symbol;
-	vala_semantic_analyzer_set_current_symbol (_tmp117_, _tmp118_);
-	_tmp119_ = vala_code_node_get_error ((ValaCodeNode*) self);
-	_tmp120_ = _tmp119_;
-	result = !_tmp120_;
+	_tmp137_ = context;
+	_tmp138_ = vala_code_context_get_analyzer (_tmp137_);
+	_tmp139_ = _tmp138_;
+	_tmp140_ = old_source_file;
+	vala_semantic_analyzer_set_current_source_file (_tmp139_, _tmp140_);
+	_tmp141_ = context;
+	_tmp142_ = vala_code_context_get_analyzer (_tmp141_);
+	_tmp143_ = _tmp142_;
+	_tmp144_ = old_symbol;
+	vala_semantic_analyzer_set_current_symbol (_tmp143_, _tmp144_);
+	_tmp145_ = vala_code_node_get_error ((ValaCodeNode*) self);
+	_tmp146_ = _tmp145_;
+	result = !_tmp146_;
 	_vala_code_node_unref0 (old_symbol);
 	_vala_source_file_unref0 (old_source_file);
 	return result;
diff --git a/vala/valaparameter.vala b/vala/valaparameter.vala
index e34b773..22fe0c8 100644
--- a/vala/valaparameter.vala
+++ b/vala/valaparameter.vala
@@ -154,6 +154,8 @@ public class Vala.Parameter : Variable {
 				Report.warning (source_reference, "`null' incompatible with parameter type `%s`".printf (variable_type.to_string ()));
 			} else if (!(initializer is NullLiteral) && direction == ParameterDirection.OUT) {
 				Report.error (source_reference, "only `null' is allowed as default value for out parameters");
+			} else if (direction == ParameterDirection.IN && !initializer.value_type.compatible (variable_type)) {
+				Report.error (initializer.source_reference, "Cannot convert from `%s' to `%s'".printf (initializer.value_type.to_string (), variable_type.to_string ()));
 			} else if (direction == ParameterDirection.REF) {
 				Report.error (source_reference, "default value not allowed for ref parameter");
 			}
diff --git a/vala/valaparser.c b/vala/valaparser.c
index 594edea..8a675f9 100644
--- a/vala/valaparser.c
+++ b/vala/valaparser.c
@@ -2033,6 +2033,8 @@ ValaAttribute* vala_attribute_new (const gchar* name, ValaSourceReference* sourc
 ValaAttribute* vala_attribute_construct (GType object_type, const gchar* name, ValaSourceReference* source_reference);
 void vala_attribute_add_argument (ValaAttribute* self, const gchar* key, const gchar* value);
 static void vala_parser_set_attributes (ValaParser* self, ValaCodeNode* node, ValaList* attributes);
+ValaAttribute* vala_code_node_get_attribute (ValaCodeNode* self, const gchar* name);
+const gchar* vala_attribute_get_name (ValaAttribute* self);
 static void vala_parser_parse_main_block (ValaParser* self, ValaSymbol* parent, GError** error);
 ValaMethod* vala_method_new (const gchar* name, ValaDataType* return_type, ValaSourceReference* source_reference, ValaComment* comment);
 ValaMethod* vala_method_construct (GType object_type, const gchar* name, ValaDataType* return_type, ValaSourceReference* source_reference, ValaComment* comment);
@@ -6644,23 +6646,31 @@ static ValaExpression* vala_parser_parse_object_or_array_creation_expression (Va
 		_vala_code_node_unref0 (member);
 		return result;
 	} else {
-		gboolean _tmp7_ = FALSE;
+		gboolean is_pointer_type;
+		gboolean _tmp7_;
+		gboolean _tmp8_ = FALSE;
+		is_pointer_type = FALSE;
 		while (TRUE) {
 			gboolean _tmp6_ = FALSE;
 			_tmp6_ = vala_parser_accept (self, VALA_TOKEN_TYPE_STAR);
 			if (!_tmp6_) {
 				break;
 			}
+			is_pointer_type = TRUE;
 		}
-		_tmp7_ = vala_parser_accept (self, VALA_TOKEN_TYPE_OPEN_BRACKET);
-		if (_tmp7_) {
-			ValaSourceLocation _tmp8_;
-			ValaExpression* _tmp9_ = NULL;
+		_tmp7_ = is_pointer_type;
+		if (!_tmp7_) {
+			vala_parser_accept (self, VALA_TOKEN_TYPE_INTERR);
+		}
+		_tmp8_ = vala_parser_accept (self, VALA_TOKEN_TYPE_OPEN_BRACKET);
+		if (_tmp8_) {
+			ValaSourceLocation _tmp9_;
+			ValaExpression* _tmp10_ = NULL;
 			ValaExpression* expr;
-			_tmp8_ = begin;
-			vala_parser_rollback (self, &_tmp8_);
-			_tmp9_ = vala_parser_parse_array_creation_expression (self, &_inner_error_);
-			expr = _tmp9_;
+			_tmp9_ = begin;
+			vala_parser_rollback (self, &_tmp9_);
+			_tmp10_ = vala_parser_parse_array_creation_expression (self, &_inner_error_);
+			expr = _tmp10_;
 			if (_inner_error_ != NULL) {
 				if (_inner_error_->domain == VALA_PARSE_ERROR) {
 					g_propagate_error (error, _inner_error_);
@@ -6677,16 +6687,16 @@ static ValaExpression* vala_parser_parse_object_or_array_creation_expression (Va
 			_vala_code_node_unref0 (member);
 			return result;
 		} else {
-			gchar* _tmp10_ = NULL;
-			gchar* _tmp11_;
-			GError* _tmp12_;
+			gchar* _tmp11_ = NULL;
+			gchar* _tmp12_;
 			GError* _tmp13_;
-			_tmp10_ = vala_parser_get_error (self, "expected ( or [");
-			_tmp11_ = _tmp10_;
-			_tmp12_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, _tmp11_);
-			_tmp13_ = _tmp12_;
-			_g_free0 (_tmp11_);
-			_inner_error_ = _tmp13_;
+			GError* _tmp14_;
+			_tmp11_ = vala_parser_get_error (self, "expected ( or [");
+			_tmp12_ = _tmp11_;
+			_tmp13_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, _tmp12_);
+			_tmp14_ = _tmp13_;
+			_g_free0 (_tmp12_);
+			_inner_error_ = _tmp14_;
 			if (_inner_error_->domain == VALA_PARSE_ERROR) {
 				g_propagate_error (error, _inner_error_);
 				_vala_code_node_unref0 (member);
@@ -7021,27 +7031,29 @@ static ValaExpression* vala_parser_parse_array_creation_expression (ValaParser*
 	ValaMemberAccess* _tmp2_;
 	ValaUnresolvedType* _tmp3_ = NULL;
 	ValaDataType* element_type;
+	gboolean is_pointer_type;
+	gboolean _tmp10_;
 	gboolean size_specified;
 	ValaList* size_specifier_list;
 	gboolean first;
 	ValaInitializerList* initializer;
-	gboolean _tmp45_ = FALSE;
-	ValaCodeContext* _tmp46_;
-	ValaProfile _tmp47_;
-	ValaProfile _tmp48_;
-	gboolean _tmp50_;
-	ValaDataType* _tmp53_;
-	ValaList* _tmp54_;
-	gint _tmp55_;
-	gint _tmp56_;
-	ValaInitializerList* _tmp57_;
-	ValaSourceLocation _tmp58_;
-	ValaSourceReference* _tmp59_ = NULL;
-	ValaSourceReference* _tmp60_;
-	ValaArrayCreationExpression* _tmp61_;
-	ValaArrayCreationExpression* _tmp62_;
+	gboolean _tmp48_ = FALSE;
+	ValaCodeContext* _tmp49_;
+	ValaProfile _tmp50_;
+	ValaProfile _tmp51_;
+	gboolean _tmp53_;
+	ValaDataType* _tmp56_;
+	ValaList* _tmp57_;
+	gint _tmp58_;
+	gint _tmp59_;
+	ValaInitializerList* _tmp60_;
+	ValaSourceLocation _tmp61_;
+	ValaSourceReference* _tmp62_ = NULL;
+	ValaSourceReference* _tmp63_;
+	ValaArrayCreationExpression* _tmp64_;
+	ValaArrayCreationExpression* _tmp65_;
 	ValaArrayCreationExpression* expr;
-	gboolean _tmp63_;
+	gboolean _tmp66_;
 	GError * _inner_error_ = NULL;
 	g_return_val_if_fail (self != NULL, NULL);
 	vala_parser_get_location (self, &_tmp0_);
@@ -7072,6 +7084,7 @@ static ValaExpression* vala_parser_parse_array_creation_expression (ValaParser*
 	_tmp2_ = member;
 	_tmp3_ = vala_unresolved_type_new_from_expression ((ValaExpression*) _tmp2_);
 	element_type = (ValaDataType*) _tmp3_;
+	is_pointer_type = FALSE;
 	while (TRUE) {
 		gboolean _tmp4_ = FALSE;
 		ValaDataType* _tmp5_;
@@ -7091,6 +7104,17 @@ static ValaExpression* vala_parser_parse_array_creation_expression (ValaParser*
 		_vala_code_node_unref0 (element_type);
 		element_type = (ValaDataType*) _tmp9_;
 		_vala_source_reference_unref0 (_tmp8_);
+		is_pointer_type = TRUE;
+	}
+	_tmp10_ = is_pointer_type;
+	if (!_tmp10_) {
+		gboolean _tmp11_ = FALSE;
+		_tmp11_ = vala_parser_accept (self, VALA_TOKEN_TYPE_INTERR);
+		if (_tmp11_) {
+			ValaDataType* _tmp12_;
+			_tmp12_ = element_type;
+			vala_data_type_set_nullable (_tmp12_, TRUE);
+		}
 	}
 	vala_parser_expect (self, VALA_TOKEN_TYPE_OPEN_BRACKET, &_inner_error_);
 	if (_inner_error_ != NULL) {
@@ -7111,46 +7135,46 @@ static ValaExpression* vala_parser_parse_array_creation_expression (ValaParser*
 	size_specifier_list = NULL;
 	first = TRUE;
 	{
-		gboolean _tmp10_;
-		_tmp10_ = TRUE;
+		gboolean _tmp13_;
+		_tmp13_ = TRUE;
 		while (TRUE) {
-			gboolean _tmp11_;
-			gboolean _tmp13_;
-			GEqualFunc _tmp27_;
-			ValaArrayList* _tmp28_;
-			_tmp11_ = _tmp10_;
-			if (!_tmp11_) {
-				gboolean _tmp12_ = FALSE;
-				_tmp12_ = vala_parser_accept (self, VALA_TOKEN_TYPE_OPEN_BRACKET);
-				if (!_tmp12_) {
+			gboolean _tmp14_;
+			gboolean _tmp16_;
+			GEqualFunc _tmp30_;
+			ValaArrayList* _tmp31_;
+			_tmp14_ = _tmp13_;
+			if (!_tmp14_) {
+				gboolean _tmp15_ = FALSE;
+				_tmp15_ = vala_parser_accept (self, VALA_TOKEN_TYPE_OPEN_BRACKET);
+				if (!_tmp15_) {
 					break;
 				}
 			}
-			_tmp10_ = FALSE;
-			_tmp13_ = first;
-			if (!_tmp13_) {
-				gboolean _tmp14_;
-				ValaDataType* _tmp19_;
-				ValaList* _tmp20_;
-				gint _tmp21_;
-				gint _tmp22_;
-				ValaDataType* _tmp23_;
-				ValaSourceReference* _tmp24_;
-				ValaSourceReference* _tmp25_;
-				ValaArrayType* _tmp26_;
-				_tmp14_ = size_specified;
-				if (_tmp14_) {
-					gchar* _tmp15_ = NULL;
-					gchar* _tmp16_;
-					GError* _tmp17_;
-					GError* _tmp18_;
-					_tmp15_ = vala_parser_get_error (self, "size of inner arrays must not be specified in array creation expressio" \
+			_tmp13_ = FALSE;
+			_tmp16_ = first;
+			if (!_tmp16_) {
+				gboolean _tmp17_;
+				ValaDataType* _tmp22_;
+				ValaList* _tmp23_;
+				gint _tmp24_;
+				gint _tmp25_;
+				ValaDataType* _tmp26_;
+				ValaSourceReference* _tmp27_;
+				ValaSourceReference* _tmp28_;
+				ValaArrayType* _tmp29_;
+				_tmp17_ = size_specified;
+				if (_tmp17_) {
+					gchar* _tmp18_ = NULL;
+					gchar* _tmp19_;
+					GError* _tmp20_;
+					GError* _tmp21_;
+					_tmp18_ = vala_parser_get_error (self, "size of inner arrays must not be specified in array creation expressio" \
 "n");
-					_tmp16_ = _tmp15_;
-					_tmp17_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, _tmp16_);
-					_tmp18_ = _tmp17_;
-					_g_free0 (_tmp16_);
-					_inner_error_ = _tmp18_;
+					_tmp19_ = _tmp18_;
+					_tmp20_ = g_error_new_literal (VALA_PARSE_ERROR, VALA_PARSE_ERROR_SYNTAX, _tmp19_);
+					_tmp21_ = _tmp20_;
+					_g_free0 (_tmp19_);
+					_inner_error_ = _tmp21_;
 					if (_inner_error_->domain == VALA_PARSE_ERROR) {
 						g_propagate_error (error, _inner_error_);
 						_vala_iterable_unref0 (size_specifier_list);
@@ -7166,72 +7190,72 @@ static ValaExpression* vala_parser_parse_array_creation_expression (ValaParser*
 						return NULL;
 					}
 				}
-				_tmp19_ = element_type;
-				_tmp20_ = size_specifier_list;
-				_tmp21_ = vala_collection_get_size ((ValaCollection*) _tmp20_);
-				_tmp22_ = _tmp21_;
-				_tmp23_ = element_type;
-				_tmp24_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp23_);
+				_tmp22_ = element_type;
+				_tmp23_ = size_specifier_list;
+				_tmp24_ = vala_collection_get_size ((ValaCollection*) _tmp23_);
 				_tmp25_ = _tmp24_;
-				_tmp26_ = vala_array_type_new (_tmp19_, _tmp22_, _tmp25_);
+				_tmp26_ = element_type;
+				_tmp27_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp26_);
+				_tmp28_ = _tmp27_;
+				_tmp29_ = vala_array_type_new (_tmp22_, _tmp25_, _tmp28_);
 				_vala_code_node_unref0 (element_type);
-				element_type = (ValaDataType*) _tmp26_;
+				element_type = (ValaDataType*) _tmp29_;
 			} else {
 				first = FALSE;
 			}
-			_tmp27_ = g_direct_equal;
-			_tmp28_ = vala_array_list_new (VALA_TYPE_EXPRESSION, (GBoxedCopyFunc) vala_code_node_ref, vala_code_node_unref, _tmp27_);
+			_tmp30_ = g_direct_equal;
+			_tmp31_ = vala_array_list_new (VALA_TYPE_EXPRESSION, (GBoxedCopyFunc) vala_code_node_ref, vala_code_node_unref, _tmp30_);
 			_vala_iterable_unref0 (size_specifier_list);
-			size_specifier_list = (ValaList*) _tmp28_;
+			size_specifier_list = (ValaList*) _tmp31_;
 			{
-				gboolean _tmp29_;
-				_tmp29_ = TRUE;
+				gboolean _tmp32_;
+				_tmp32_ = TRUE;
 				while (TRUE) {
-					gboolean _tmp30_;
+					gboolean _tmp33_;
 					ValaExpression* size;
-					gboolean _tmp37_ = FALSE;
-					ValaTokenType _tmp38_ = 0;
-					gboolean _tmp40_;
-					ValaList* _tmp43_;
-					ValaExpression* _tmp44_;
-					_tmp30_ = _tmp29_;
-					if (!_tmp30_) {
-						gboolean _tmp31_ = FALSE;
-						ValaCodeContext* _tmp32_;
-						ValaProfile _tmp33_;
-						ValaProfile _tmp34_;
-						gboolean _tmp36_;
-						_tmp32_ = self->priv->context;
-						_tmp33_ = vala_code_context_get_profile (_tmp32_);
-						_tmp34_ = _tmp33_;
-						if (_tmp34_ != VALA_PROFILE_DOVA) {
-							gboolean _tmp35_ = FALSE;
-							_tmp35_ = vala_parser_accept (self, VALA_TOKEN_TYPE_COMMA);
-							_tmp31_ = _tmp35_;
+					gboolean _tmp40_ = FALSE;
+					ValaTokenType _tmp41_ = 0;
+					gboolean _tmp43_;
+					ValaList* _tmp46_;
+					ValaExpression* _tmp47_;
+					_tmp33_ = _tmp32_;
+					if (!_tmp33_) {
+						gboolean _tmp34_ = FALSE;
+						ValaCodeContext* _tmp35_;
+						ValaProfile _tmp36_;
+						ValaProfile _tmp37_;
+						gboolean _tmp39_;
+						_tmp35_ = self->priv->context;
+						_tmp36_ = vala_code_context_get_profile (_tmp35_);
+						_tmp37_ = _tmp36_;
+						if (_tmp37_ != VALA_PROFILE_DOVA) {
+							gboolean _tmp38_ = FALSE;
+							_tmp38_ = vala_parser_accept (self, VALA_TOKEN_TYPE_COMMA);
+							_tmp34_ = _tmp38_;
 						} else {
-							_tmp31_ = FALSE;
+							_tmp34_ = FALSE;
 						}
-						_tmp36_ = _tmp31_;
-						if (!_tmp36_) {
+						_tmp39_ = _tmp34_;
+						if (!_tmp39_) {
 							break;
 						}
 					}
-					_tmp29_ = FALSE;
+					_tmp32_ = FALSE;
 					size = NULL;
-					_tmp38_ = vala_parser_current (self);
-					if (_tmp38_ != VALA_TOKEN_TYPE_CLOSE_BRACKET) {
-						ValaTokenType _tmp39_ = 0;
-						_tmp39_ = vala_parser_current (self);
-						_tmp37_ = _tmp39_ != VALA_TOKEN_TYPE_COMMA;
+					_tmp41_ = vala_parser_current (self);
+					if (_tmp41_ != VALA_TOKEN_TYPE_CLOSE_BRACKET) {
+						ValaTokenType _tmp42_ = 0;
+						_tmp42_ = vala_parser_current (self);
+						_tmp40_ = _tmp42_ != VALA_TOKEN_TYPE_COMMA;
 					} else {
-						_tmp37_ = FALSE;
+						_tmp40_ = FALSE;
 					}
-					_tmp40_ = _tmp37_;
-					if (_tmp40_) {
-						ValaExpression* _tmp41_ = NULL;
-						ValaExpression* _tmp42_;
-						_tmp41_ = vala_parser_parse_expression (self, &_inner_error_);
-						_tmp42_ = _tmp41_;
+					_tmp43_ = _tmp40_;
+					if (_tmp43_) {
+						ValaExpression* _tmp44_ = NULL;
+						ValaExpression* _tmp45_;
+						_tmp44_ = vala_parser_parse_expression (self, &_inner_error_);
+						_tmp45_ = _tmp44_;
 						if (_inner_error_ != NULL) {
 							if (_inner_error_->domain == VALA_PARSE_ERROR) {
 								g_propagate_error (error, _inner_error_);
@@ -7251,12 +7275,12 @@ static ValaExpression* vala_parser_parse_array_creation_expression (ValaParser*
 							}
 						}
 						_vala_code_node_unref0 (size);
-						size = _tmp42_;
+						size = _tmp45_;
 						size_specified = TRUE;
 					}
-					_tmp43_ = size_specifier_list;
-					_tmp44_ = size;
-					vala_collection_add ((ValaCollection*) _tmp43_, _tmp44_);
+					_tmp46_ = size_specifier_list;
+					_tmp47_ = size;
+					vala_collection_add ((ValaCollection*) _tmp46_, _tmp47_);
 					_vala_code_node_unref0 (size);
 				}
 			}
@@ -7280,22 +7304,22 @@ static ValaExpression* vala_parser_parse_array_creation_expression (ValaParser*
 		}
 	}
 	initializer = NULL;
-	_tmp46_ = self->priv->context;
-	_tmp47_ = vala_code_context_get_profile (_tmp46_);
-	_tmp48_ = _tmp47_;
-	if (_tmp48_ != VALA_PROFILE_DOVA) {
-		ValaTokenType _tmp49_ = 0;
-		_tmp49_ = vala_parser_current (self);
-		_tmp45_ = _tmp49_ == VALA_TOKEN_TYPE_OPEN_BRACE;
+	_tmp49_ = self->priv->context;
+	_tmp50_ = vala_code_context_get_profile (_tmp49_);
+	_tmp51_ = _tmp50_;
+	if (_tmp51_ != VALA_PROFILE_DOVA) {
+		ValaTokenType _tmp52_ = 0;
+		_tmp52_ = vala_parser_current (self);
+		_tmp48_ = _tmp52_ == VALA_TOKEN_TYPE_OPEN_BRACE;
 	} else {
-		_tmp45_ = FALSE;
-	}
-	_tmp50_ = _tmp45_;
-	if (_tmp50_) {
-		ValaInitializerList* _tmp51_ = NULL;
-		ValaInitializerList* _tmp52_;
-		_tmp51_ = vala_parser_parse_initializer (self, &_inner_error_);
-		_tmp52_ = _tmp51_;
+		_tmp48_ = FALSE;
+	}
+	_tmp53_ = _tmp48_;
+	if (_tmp53_) {
+		ValaInitializerList* _tmp54_ = NULL;
+		ValaInitializerList* _tmp55_;
+		_tmp54_ = vala_parser_parse_initializer (self, &_inner_error_);
+		_tmp55_ = _tmp54_;
 		if (_inner_error_ != NULL) {
 			if (_inner_error_->domain == VALA_PARSE_ERROR) {
 				g_propagate_error (error, _inner_error_);
@@ -7315,63 +7339,63 @@ static ValaExpression* vala_parser_parse_array_creation_expression (ValaParser*
 			}
 		}
 		_vala_code_node_unref0 (initializer);
-		initializer = _tmp52_;
-	}
-	_tmp53_ = element_type;
-	_tmp54_ = size_specifier_list;
-	_tmp55_ = vala_collection_get_size ((ValaCollection*) _tmp54_);
-	_tmp56_ = _tmp55_;
-	_tmp57_ = initializer;
-	_tmp58_ = begin;
-	_tmp59_ = vala_parser_get_src (self, &_tmp58_);
-	_tmp60_ = _tmp59_;
-	_tmp61_ = vala_array_creation_expression_new (_tmp53_, _tmp56_, _tmp57_, _tmp60_);
-	_tmp62_ = _tmp61_;
-	_vala_source_reference_unref0 (_tmp60_);
-	expr = _tmp62_;
-	_tmp63_ = size_specified;
-	if (_tmp63_) {
+		initializer = _tmp55_;
+	}
+	_tmp56_ = element_type;
+	_tmp57_ = size_specifier_list;
+	_tmp58_ = vala_collection_get_size ((ValaCollection*) _tmp57_);
+	_tmp59_ = _tmp58_;
+	_tmp60_ = initializer;
+	_tmp61_ = begin;
+	_tmp62_ = vala_parser_get_src (self, &_tmp61_);
+	_tmp63_ = _tmp62_;
+	_tmp64_ = vala_array_creation_expression_new (_tmp56_, _tmp59_, _tmp60_, _tmp63_);
+	_tmp65_ = _tmp64_;
+	_vala_source_reference_unref0 (_tmp63_);
+	expr = _tmp65_;
+	_tmp66_ = size_specified;
+	if (_tmp66_) {
 		{
-			ValaList* _tmp64_;
-			ValaList* _tmp65_;
+			ValaList* _tmp67_;
+			ValaList* _tmp68_;
 			ValaList* _size_list;
-			ValaList* _tmp66_;
-			gint _tmp67_;
-			gint _tmp68_;
+			ValaList* _tmp69_;
+			gint _tmp70_;
+			gint _tmp71_;
 			gint _size_size;
 			gint _size_index;
-			_tmp64_ = size_specifier_list;
-			_tmp65_ = _vala_iterable_ref0 (_tmp64_);
-			_size_list = _tmp65_;
-			_tmp66_ = _size_list;
-			_tmp67_ = vala_collection_get_size ((ValaCollection*) _tmp66_);
-			_tmp68_ = _tmp67_;
-			_size_size = _tmp68_;
+			_tmp67_ = size_specifier_list;
+			_tmp68_ = _vala_iterable_ref0 (_tmp67_);
+			_size_list = _tmp68_;
+			_tmp69_ = _size_list;
+			_tmp70_ = vala_collection_get_size ((ValaCollection*) _tmp69_);
+			_tmp71_ = _tmp70_;
+			_size_size = _tmp71_;
 			_size_index = -1;
 			while (TRUE) {
-				gint _tmp69_;
-				gint _tmp70_;
-				gint _tmp71_;
-				ValaList* _tmp72_;
+				gint _tmp72_;
 				gint _tmp73_;
-				gpointer _tmp74_ = NULL;
+				gint _tmp74_;
+				ValaList* _tmp75_;
+				gint _tmp76_;
+				gpointer _tmp77_ = NULL;
 				ValaExpression* size;
-				ValaArrayCreationExpression* _tmp75_;
-				ValaExpression* _tmp76_;
-				_tmp69_ = _size_index;
-				_size_index = _tmp69_ + 1;
-				_tmp70_ = _size_index;
-				_tmp71_ = _size_size;
-				if (!(_tmp70_ < _tmp71_)) {
+				ValaArrayCreationExpression* _tmp78_;
+				ValaExpression* _tmp79_;
+				_tmp72_ = _size_index;
+				_size_index = _tmp72_ + 1;
+				_tmp73_ = _size_index;
+				_tmp74_ = _size_size;
+				if (!(_tmp73_ < _tmp74_)) {
 					break;
 				}
-				_tmp72_ = _size_list;
-				_tmp73_ = _size_index;
-				_tmp74_ = vala_list_get (_tmp72_, _tmp73_);
-				size = (ValaExpression*) _tmp74_;
-				_tmp75_ = expr;
-				_tmp76_ = size;
-				vala_array_creation_expression_append_size (_tmp75_, _tmp76_);
+				_tmp75_ = _size_list;
+				_tmp76_ = _size_index;
+				_tmp77_ = vala_list_get (_tmp75_, _tmp76_);
+				size = (ValaExpression*) _tmp77_;
+				_tmp78_ = expr;
+				_tmp79_ = size;
+				vala_array_creation_expression_append_size (_tmp78_, _tmp79_);
 				_vala_code_node_unref0 (size);
 			}
 			_vala_iterable_unref0 (_size_list);
@@ -14765,7 +14789,14 @@ static void vala_parser_set_attributes (ValaParser* self, ValaCodeNode* node, Va
 				ValaAttribute* attr;
 				ValaCodeNode* _tmp12_;
 				ValaAttribute* _tmp13_;
-				ValaAttribute* _tmp14_;
+				const gchar* _tmp14_;
+				const gchar* _tmp15_;
+				ValaAttribute* _tmp16_ = NULL;
+				ValaAttribute* _tmp17_;
+				gboolean _tmp18_;
+				ValaCodeNode* _tmp27_;
+				ValaAttribute* _tmp28_;
+				ValaAttribute* _tmp29_;
 				_tmp6_ = _attr_index;
 				_attr_index = _tmp6_ + 1;
 				_tmp7_ = _attr_index;
@@ -14779,8 +14810,36 @@ static void vala_parser_set_attributes (ValaParser* self, ValaCodeNode* node, Va
 				attr = (ValaAttribute*) _tmp11_;
 				_tmp12_ = node;
 				_tmp13_ = attr;
-				_tmp14_ = _vala_code_node_ref0 (_tmp13_);
-				_tmp12_->attributes = g_list_append (_tmp12_->attributes, _tmp14_);
+				_tmp14_ = vala_attribute_get_name (_tmp13_);
+				_tmp15_ = _tmp14_;
+				_tmp16_ = vala_code_node_get_attribute (_tmp12_, _tmp15_);
+				_tmp17_ = _tmp16_;
+				_tmp18_ = _tmp17_ != NULL;
+				_vala_code_node_unref0 (_tmp17_);
+				if (_tmp18_) {
+					ValaAttribute* _tmp19_;
+					ValaSourceReference* _tmp20_;
+					ValaSourceReference* _tmp21_;
+					ValaAttribute* _tmp22_;
+					const gchar* _tmp23_;
+					const gchar* _tmp24_;
+					gchar* _tmp25_ = NULL;
+					gchar* _tmp26_;
+					_tmp19_ = attr;
+					_tmp20_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp19_);
+					_tmp21_ = _tmp20_;
+					_tmp22_ = attr;
+					_tmp23_ = vala_attribute_get_name (_tmp22_);
+					_tmp24_ = _tmp23_;
+					_tmp25_ = g_strdup_printf ("duplicate attribute `%s`", _tmp24_);
+					_tmp26_ = _tmp25_;
+					vala_report_error (_tmp21_, _tmp26_);
+					_g_free0 (_tmp26_);
+				}
+				_tmp27_ = node;
+				_tmp28_ = attr;
+				_tmp29_ = _vala_code_node_ref0 (_tmp28_);
+				_tmp27_->attributes = g_list_append (_tmp27_->attributes, _tmp29_);
 				_vala_code_node_unref0 (attr);
 			}
 			_vala_iterable_unref0 (_attr_list);
diff --git a/vala/valaparser.vala b/vala/valaparser.vala
index 8aee796..76ea0b9 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -844,7 +844,12 @@ public class Vala.Parser : CodeVisitor {
 			var expr = parse_object_creation_expression (begin, member);
 			return expr;
 		} else {
+			bool is_pointer_type = false;
 			while (accept (TokenType.STAR)) {
+				is_pointer_type = true;
+			}
+			if (!is_pointer_type) {
+				accept (TokenType.INTERR);
 			}
 			if (accept (TokenType.OPEN_BRACKET)) {
 				rollback (begin);
@@ -898,8 +903,15 @@ public class Vala.Parser : CodeVisitor {
 		expect (TokenType.NEW);
 		var member = parse_member_name ();
 		DataType element_type = UnresolvedType.new_from_expression (member);
+		bool is_pointer_type = false;
 		while (accept (TokenType.STAR)) {
 			element_type = new PointerType (element_type, get_src (begin));
+			is_pointer_type = true;
+		}
+		if (!is_pointer_type) {
+			if (accept (TokenType.INTERR)) {
+				element_type.nullable = true;
+			}
 		}
 		expect (TokenType.OPEN_BRACKET);
 
@@ -2149,6 +2161,9 @@ public class Vala.Parser : CodeVisitor {
 	void set_attributes (CodeNode node, List<Attribute>? attributes) {
 		if (attributes != null) {
 			foreach (Attribute attr in (List<Attribute>) attributes) {
+				if (node.get_attribute (attr.name) != null) {
+					Report.error (attr.source_reference, "duplicate attribute `%s`".printf (attr.name));
+				}
 				node.attributes.append (attr);
 			}
 		}
diff --git a/vala/valaproperty.c b/vala/valaproperty.c
index 06f33f6..0662e2e 100644
--- a/vala/valaproperty.c
+++ b/vala/valaproperty.c
@@ -344,6 +344,28 @@ typedef struct _ValaSourceReferenceClass ValaSourceReferenceClass;
 
 typedef struct _ValaComment ValaComment;
 typedef struct _ValaCommentClass ValaCommentClass;
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+#define VALA_TYPE_SEMANTIC_ANALYZER (vala_semantic_analyzer_get_type ())
+#define VALA_SEMANTIC_ANALYZER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SEMANTIC_ANALYZER, ValaSemanticAnalyzer))
+#define VALA_SEMANTIC_ANALYZER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SEMANTIC_ANALYZER, ValaSemanticAnalyzerClass))
+#define VALA_IS_SEMANTIC_ANALYZER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SEMANTIC_ANALYZER))
+#define VALA_IS_SEMANTIC_ANALYZER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SEMANTIC_ANALYZER))
+#define VALA_SEMANTIC_ANALYZER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SEMANTIC_ANALYZER, ValaSemanticAnalyzerClass))
+
+typedef struct _ValaSemanticAnalyzer ValaSemanticAnalyzer;
+typedef struct _ValaSemanticAnalyzerClass ValaSemanticAnalyzerClass;
+#define _vala_code_context_unref0(var) ((var == NULL) ? NULL : (var = (vala_code_context_unref (var), NULL)))
+
+#define VALA_TYPE_MEMBER_ACCESS (vala_member_access_get_type ())
+#define VALA_MEMBER_ACCESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_MEMBER_ACCESS, ValaMemberAccess))
+#define VALA_MEMBER_ACCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_MEMBER_ACCESS, ValaMemberAccessClass))
+#define VALA_IS_MEMBER_ACCESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_MEMBER_ACCESS))
+#define VALA_IS_MEMBER_ACCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_MEMBER_ACCESS))
+#define VALA_MEMBER_ACCESS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_MEMBER_ACCESS, ValaMemberAccessClass))
+
+typedef struct _ValaMemberAccess ValaMemberAccess;
+typedef struct _ValaMemberAccessClass ValaMemberAccessClass;
 
 #define VALA_TYPE_SCOPE (vala_scope_get_type ())
 #define VALA_SCOPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SCOPE, ValaScope))
@@ -354,21 +376,10 @@ typedef struct _ValaCommentClass ValaCommentClass;
 
 typedef struct _ValaScope ValaScope;
 typedef struct _ValaScopeClass ValaScopeClass;
-#define _g_free0(var) (var = (g_free (var), NULL))
 #define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
 
 #define VALA_TYPE_SYMBOL_ACCESSIBILITY (vala_symbol_accessibility_get_type ())
 
-#define VALA_TYPE_SEMANTIC_ANALYZER (vala_semantic_analyzer_get_type ())
-#define VALA_SEMANTIC_ANALYZER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SEMANTIC_ANALYZER, ValaSemanticAnalyzer))
-#define VALA_SEMANTIC_ANALYZER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SEMANTIC_ANALYZER, ValaSemanticAnalyzerClass))
-#define VALA_IS_SEMANTIC_ANALYZER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VALA_TYPE_SEMANTIC_ANALYZER))
-#define VALA_IS_SEMANTIC_ANALYZER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VALA_TYPE_SEMANTIC_ANALYZER))
-#define VALA_SEMANTIC_ANALYZER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VALA_TYPE_SEMANTIC_ANALYZER, ValaSemanticAnalyzerClass))
-
-typedef struct _ValaSemanticAnalyzer ValaSemanticAnalyzer;
-typedef struct _ValaSemanticAnalyzerClass ValaSemanticAnalyzerClass;
-
 #define VALA_TYPE_SOURCE_FILE (vala_source_file_get_type ())
 #define VALA_SOURCE_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SOURCE_FILE, ValaSourceFile))
 #define VALA_SOURCE_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SOURCE_FILE, ValaSourceFileClass))
@@ -568,14 +579,20 @@ ValaPropertyAccessor* vala_property_get_set_accessor (ValaProperty* self);
 ValaExpression* vala_property_get_initializer (ValaProperty* self);
 static gboolean vala_property_real_get_lock_used (ValaLockable* base);
 static void vala_property_real_set_lock_used (ValaLockable* base, gboolean used);
-gboolean vala_property_equals (ValaProperty* self, ValaProperty* prop2);
+gboolean vala_property_compatible (ValaProperty* self, ValaProperty* base_property, gchar** invalid_match);
+ValaCodeContext* vala_code_context_get (void);
+GType vala_semantic_analyzer_get_type (void) G_GNUC_CONST;
+ValaSemanticAnalyzer* vala_code_context_get_analyzer (ValaCodeContext* self);
+ValaDataType* vala_semantic_analyzer_get_data_type_for_symbol (ValaTypeSymbol* sym);
+ValaSymbol* vala_symbol_get_parent_symbol (ValaSymbol* self);
 ValaDataType* vala_property_accessor_get_value_type (ValaPropertyAccessor* self);
+GType vala_member_access_get_type (void) G_GNUC_CONST;
+ValaDataType* vala_data_type_get_actual_type (ValaDataType* self, ValaDataType* derived_instance_type, ValaMemberAccess* method_access, ValaCodeNode* node_reference);
 gboolean vala_data_type_equals (ValaDataType* self, ValaDataType* type2);
 gboolean vala_property_accessor_get_writable (ValaPropertyAccessor* self);
 gboolean vala_property_accessor_get_construction (ValaPropertyAccessor* self);
 static void vala_property_real_replace_type (ValaCodeNode* base, ValaDataType* old_type, ValaDataType* new_type);
 static void vala_property_find_base_properties (ValaProperty* self);
-ValaSymbol* vala_symbol_get_parent_symbol (ValaSymbol* self);
 static void vala_property_find_base_interface_property (ValaProperty* self, ValaClass* cl);
 gboolean vala_property_get_is_virtual (ValaProperty* self);
 gboolean vala_property_get_overrides (ValaProperty* self);
@@ -606,8 +623,6 @@ gboolean vala_class_get_is_abstract (ValaClass* self);
 gboolean vala_class_get_is_compact (ValaClass* self);
 GType vala_symbol_accessibility_get_type (void) G_GNUC_CONST;
 ValaSymbolAccessibility vala_symbol_get_access (ValaSymbol* self);
-GType vala_semantic_analyzer_get_type (void) G_GNUC_CONST;
-ValaSemanticAnalyzer* vala_code_context_get_analyzer (ValaCodeContext* self);
 gpointer vala_source_file_ref (gpointer instance);
 void vala_source_file_unref (gpointer instance);
 GParamSpec* vala_param_spec_source_file (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
@@ -767,14 +782,15 @@ static void vala_property_real_set_lock_used (ValaLockable* base, gboolean used)
 
 
 /**
- * Checks whether the accessors and type of the specified property
- * matches this property.
+ * Checks whether the accessors of this property are compatible
+ * with the specified base property.
  *
- * @param prop a property
- * @return     true if the specified property is compatible to this
- *             property
+ * @param base_property a property
+ * @param invalid_match error string about which check failed
+ * @return true if the specified property is compatible to this property
  */
-gboolean vala_property_equals (ValaProperty* self, ValaProperty* prop2) {
+gboolean vala_property_compatible (ValaProperty* self, ValaProperty* base_property, gchar** invalid_match) {
+	gchar* _vala_invalid_match = NULL;
 	gboolean result = FALSE;
 	gboolean _tmp0_ = FALSE;
 	gboolean _tmp1_ = FALSE;
@@ -782,25 +798,34 @@ gboolean vala_property_equals (ValaProperty* self, ValaProperty* prop2) {
 	ValaPropertyAccessor* _tmp3_;
 	gboolean _tmp7_;
 	gboolean _tmp15_;
-	gboolean _tmp16_ = FALSE;
 	gboolean _tmp17_ = FALSE;
-	ValaPropertyAccessor* _tmp18_;
+	gboolean _tmp18_ = FALSE;
 	ValaPropertyAccessor* _tmp19_;
-	gboolean _tmp23_;
-	gboolean _tmp31_;
-	ValaPropertyAccessor* _tmp32_;
-	ValaPropertyAccessor* _tmp33_;
-	ValaPropertyAccessor* _tmp44_;
-	ValaPropertyAccessor* _tmp45_;
+	ValaPropertyAccessor* _tmp20_;
+	gboolean _tmp24_;
+	gboolean _tmp32_;
+	ValaCodeContext* _tmp34_ = NULL;
+	ValaCodeContext* _tmp35_;
+	ValaSemanticAnalyzer* _tmp36_;
+	ValaSemanticAnalyzer* _tmp37_;
+	ValaSymbol* _tmp38_;
+	ValaSymbol* _tmp39_;
+	ValaDataType* _tmp40_ = NULL;
+	ValaDataType* _tmp41_;
+	ValaDataType* object_type;
+	ValaPropertyAccessor* _tmp42_;
+	ValaPropertyAccessor* _tmp43_;
+	ValaPropertyAccessor* _tmp58_;
+	ValaPropertyAccessor* _tmp59_;
 	g_return_val_if_fail (self != NULL, FALSE);
-	g_return_val_if_fail (prop2 != NULL, FALSE);
+	g_return_val_if_fail (base_property != NULL, FALSE);
 	_tmp2_ = vala_property_get_get_accessor (self);
 	_tmp3_ = _tmp2_;
 	if (_tmp3_ == NULL) {
 		ValaProperty* _tmp4_;
 		ValaPropertyAccessor* _tmp5_;
 		ValaPropertyAccessor* _tmp6_;
-		_tmp4_ = prop2;
+		_tmp4_ = base_property;
 		_tmp5_ = vala_property_get_get_accessor (_tmp4_);
 		_tmp6_ = _tmp5_;
 		_tmp1_ = _tmp6_ != NULL;
@@ -821,7 +846,7 @@ gboolean vala_property_equals (ValaProperty* self, ValaProperty* prop2) {
 			ValaProperty* _tmp11_;
 			ValaPropertyAccessor* _tmp12_;
 			ValaPropertyAccessor* _tmp13_;
-			_tmp11_ = prop2;
+			_tmp11_ = base_property;
 			_tmp12_ = vala_property_get_get_accessor (_tmp11_);
 			_tmp13_ = _tmp12_;
 			_tmp8_ = _tmp13_ == NULL;
@@ -833,152 +858,250 @@ gboolean vala_property_equals (ValaProperty* self, ValaProperty* prop2) {
 	}
 	_tmp15_ = _tmp0_;
 	if (_tmp15_) {
+		gchar* _tmp16_;
+		_tmp16_ = g_strdup ("incompatible get accessor");
+		_g_free0 (_vala_invalid_match);
+		_vala_invalid_match = _tmp16_;
 		result = FALSE;
+		if (invalid_match) {
+			*invalid_match = _vala_invalid_match;
+		} else {
+			_g_free0 (_vala_invalid_match);
+		}
 		return result;
 	}
-	_tmp18_ = vala_property_get_set_accessor (self);
-	_tmp19_ = _tmp18_;
-	if (_tmp19_ == NULL) {
-		ValaProperty* _tmp20_;
-		ValaPropertyAccessor* _tmp21_;
+	_tmp19_ = vala_property_get_set_accessor (self);
+	_tmp20_ = _tmp19_;
+	if (_tmp20_ == NULL) {
+		ValaProperty* _tmp21_;
 		ValaPropertyAccessor* _tmp22_;
-		_tmp20_ = prop2;
-		_tmp21_ = vala_property_get_set_accessor (_tmp20_);
-		_tmp22_ = _tmp21_;
-		_tmp17_ = _tmp22_ != NULL;
+		ValaPropertyAccessor* _tmp23_;
+		_tmp21_ = base_property;
+		_tmp22_ = vala_property_get_set_accessor (_tmp21_);
+		_tmp23_ = _tmp22_;
+		_tmp18_ = _tmp23_ != NULL;
 	} else {
-		_tmp17_ = FALSE;
+		_tmp18_ = FALSE;
 	}
-	_tmp23_ = _tmp17_;
-	if (_tmp23_) {
-		_tmp16_ = TRUE;
+	_tmp24_ = _tmp18_;
+	if (_tmp24_) {
+		_tmp17_ = TRUE;
 	} else {
-		gboolean _tmp24_ = FALSE;
-		ValaPropertyAccessor* _tmp25_;
+		gboolean _tmp25_ = FALSE;
 		ValaPropertyAccessor* _tmp26_;
-		gboolean _tmp30_;
-		_tmp25_ = vala_property_get_set_accessor (self);
-		_tmp26_ = _tmp25_;
-		if (_tmp26_ != NULL) {
-			ValaProperty* _tmp27_;
-			ValaPropertyAccessor* _tmp28_;
+		ValaPropertyAccessor* _tmp27_;
+		gboolean _tmp31_;
+		_tmp26_ = vala_property_get_set_accessor (self);
+		_tmp27_ = _tmp26_;
+		if (_tmp27_ != NULL) {
+			ValaProperty* _tmp28_;
 			ValaPropertyAccessor* _tmp29_;
-			_tmp27_ = prop2;
-			_tmp28_ = vala_property_get_set_accessor (_tmp27_);
-			_tmp29_ = _tmp28_;
-			_tmp24_ = _tmp29_ == NULL;
+			ValaPropertyAccessor* _tmp30_;
+			_tmp28_ = base_property;
+			_tmp29_ = vala_property_get_set_accessor (_tmp28_);
+			_tmp30_ = _tmp29_;
+			_tmp25_ = _tmp30_ == NULL;
 		} else {
-			_tmp24_ = FALSE;
+			_tmp25_ = FALSE;
 		}
-		_tmp30_ = _tmp24_;
-		_tmp16_ = _tmp30_;
+		_tmp31_ = _tmp25_;
+		_tmp17_ = _tmp31_;
 	}
-	_tmp31_ = _tmp16_;
-	if (_tmp31_) {
+	_tmp32_ = _tmp17_;
+	if (_tmp32_) {
+		gchar* _tmp33_;
+		_tmp33_ = g_strdup ("incompatible set accessor");
+		_g_free0 (_vala_invalid_match);
+		_vala_invalid_match = _tmp33_;
 		result = FALSE;
-		return result;
-	}
-	_tmp32_ = vala_property_get_get_accessor (self);
-	_tmp33_ = _tmp32_;
-	if (_tmp33_ != NULL) {
-		ValaProperty* _tmp34_;
-		ValaPropertyAccessor* _tmp35_;
-		ValaPropertyAccessor* _tmp36_;
-		ValaDataType* _tmp37_;
-		ValaDataType* _tmp38_;
-		ValaPropertyAccessor* _tmp39_;
-		ValaPropertyAccessor* _tmp40_;
-		ValaDataType* _tmp41_;
-		ValaDataType* _tmp42_;
-		gboolean _tmp43_ = FALSE;
-		_tmp34_ = prop2;
-		_tmp35_ = vala_property_get_get_accessor (_tmp34_);
-		_tmp36_ = _tmp35_;
-		_tmp37_ = vala_property_accessor_get_value_type (_tmp36_);
-		_tmp38_ = _tmp37_;
-		_tmp39_ = vala_property_get_get_accessor (self);
-		_tmp40_ = _tmp39_;
-		_tmp41_ = vala_property_accessor_get_value_type (_tmp40_);
-		_tmp42_ = _tmp41_;
-		_tmp43_ = vala_data_type_equals (_tmp38_, _tmp42_);
-		if (!_tmp43_) {
-			result = FALSE;
-			return result;
+		if (invalid_match) {
+			*invalid_match = _vala_invalid_match;
+		} else {
+			_g_free0 (_vala_invalid_match);
 		}
+		return result;
 	}
-	_tmp44_ = vala_property_get_set_accessor (self);
-	_tmp45_ = _tmp44_;
-	if (_tmp45_ != NULL) {
-		ValaProperty* _tmp46_;
-		ValaPropertyAccessor* _tmp47_;
-		ValaPropertyAccessor* _tmp48_;
+	_tmp34_ = vala_code_context_get ();
+	_tmp35_ = _tmp34_;
+	_tmp36_ = vala_code_context_get_analyzer (_tmp35_);
+	_tmp37_ = _tmp36_;
+	_tmp38_ = vala_symbol_get_parent_symbol ((ValaSymbol*) self);
+	_tmp39_ = _tmp38_;
+	_tmp40_ = vala_semantic_analyzer_get_data_type_for_symbol (VALA_TYPESYMBOL (_tmp39_));
+	_tmp41_ = _tmp40_;
+	_vala_code_context_unref0 (_tmp35_);
+	object_type = _tmp41_;
+	_tmp42_ = vala_property_get_get_accessor (self);
+	_tmp43_ = _tmp42_;
+	if (_tmp43_ != NULL) {
+		ValaProperty* _tmp44_;
+		ValaPropertyAccessor* _tmp45_;
+		ValaPropertyAccessor* _tmp46_;
+		ValaDataType* _tmp47_;
+		ValaDataType* _tmp48_;
 		ValaDataType* _tmp49_;
-		ValaDataType* _tmp50_;
-		ValaPropertyAccessor* _tmp51_;
+		ValaDataType* _tmp50_ = NULL;
+		ValaDataType* actual_base_type;
+		ValaDataType* _tmp51_;
 		ValaPropertyAccessor* _tmp52_;
-		ValaDataType* _tmp53_;
+		ValaPropertyAccessor* _tmp53_;
 		ValaDataType* _tmp54_;
-		gboolean _tmp55_ = FALSE;
-		ValaPropertyAccessor* _tmp56_;
-		ValaPropertyAccessor* _tmp57_;
-		gboolean _tmp58_;
-		gboolean _tmp59_;
-		ValaProperty* _tmp60_;
-		ValaPropertyAccessor* _tmp61_;
-		ValaPropertyAccessor* _tmp62_;
-		gboolean _tmp63_;
-		gboolean _tmp64_;
-		ValaPropertyAccessor* _tmp65_;
-		ValaPropertyAccessor* _tmp66_;
-		gboolean _tmp67_;
-		gboolean _tmp68_;
-		ValaProperty* _tmp69_;
-		ValaPropertyAccessor* _tmp70_;
-		ValaPropertyAccessor* _tmp71_;
-		gboolean _tmp72_;
-		gboolean _tmp73_;
-		_tmp46_ = prop2;
-		_tmp47_ = vala_property_get_set_accessor (_tmp46_);
+		ValaDataType* _tmp55_;
+		gboolean _tmp56_ = FALSE;
+		_tmp44_ = base_property;
+		_tmp45_ = vala_property_get_get_accessor (_tmp44_);
+		_tmp46_ = _tmp45_;
+		_tmp47_ = vala_property_accessor_get_value_type (_tmp46_);
 		_tmp48_ = _tmp47_;
-		_tmp49_ = vala_property_accessor_get_value_type (_tmp48_);
-		_tmp50_ = _tmp49_;
-		_tmp51_ = vala_property_get_set_accessor (self);
-		_tmp52_ = _tmp51_;
-		_tmp53_ = vala_property_accessor_get_value_type (_tmp52_);
-		_tmp54_ = _tmp53_;
-		_tmp55_ = vala_data_type_equals (_tmp50_, _tmp54_);
-		if (!_tmp55_) {
+		_tmp49_ = object_type;
+		_tmp50_ = vala_data_type_get_actual_type (_tmp48_, _tmp49_, NULL, (ValaCodeNode*) self);
+		actual_base_type = _tmp50_;
+		_tmp51_ = actual_base_type;
+		_tmp52_ = vala_property_get_get_accessor (self);
+		_tmp53_ = _tmp52_;
+		_tmp54_ = vala_property_accessor_get_value_type (_tmp53_);
+		_tmp55_ = _tmp54_;
+		_tmp56_ = vala_data_type_equals (_tmp51_, _tmp55_);
+		if (!_tmp56_) {
+			gchar* _tmp57_;
+			_tmp57_ = g_strdup ("incompatible get accessor type");
+			_g_free0 (_vala_invalid_match);
+			_vala_invalid_match = _tmp57_;
 			result = FALSE;
+			_vala_code_node_unref0 (actual_base_type);
+			_vala_code_node_unref0 (object_type);
+			if (invalid_match) {
+				*invalid_match = _vala_invalid_match;
+			} else {
+				_g_free0 (_vala_invalid_match);
+			}
 			return result;
 		}
-		_tmp56_ = vala_property_get_set_accessor (self);
-		_tmp57_ = _tmp56_;
-		_tmp58_ = vala_property_accessor_get_writable (_tmp57_);
-		_tmp59_ = _tmp58_;
-		_tmp60_ = prop2;
+		_vala_code_node_unref0 (actual_base_type);
+	}
+	_tmp58_ = vala_property_get_set_accessor (self);
+	_tmp59_ = _tmp58_;
+	if (_tmp59_ != NULL) {
+		ValaProperty* _tmp60_;
+		ValaPropertyAccessor* _tmp61_;
+		ValaPropertyAccessor* _tmp62_;
+		ValaDataType* _tmp63_;
+		ValaDataType* _tmp64_;
+		ValaDataType* _tmp65_;
+		ValaDataType* _tmp66_ = NULL;
+		ValaDataType* actual_base_type;
+		ValaDataType* _tmp67_;
+		ValaPropertyAccessor* _tmp68_;
+		ValaPropertyAccessor* _tmp69_;
+		ValaDataType* _tmp70_;
+		ValaDataType* _tmp71_;
+		gboolean _tmp72_ = FALSE;
+		ValaPropertyAccessor* _tmp74_;
+		ValaPropertyAccessor* _tmp75_;
+		gboolean _tmp76_;
+		gboolean _tmp77_;
+		ValaProperty* _tmp78_;
+		ValaPropertyAccessor* _tmp79_;
+		ValaPropertyAccessor* _tmp80_;
+		gboolean _tmp81_;
+		gboolean _tmp82_;
+		ValaPropertyAccessor* _tmp84_;
+		ValaPropertyAccessor* _tmp85_;
+		gboolean _tmp86_;
+		gboolean _tmp87_;
+		ValaProperty* _tmp88_;
+		ValaPropertyAccessor* _tmp89_;
+		ValaPropertyAccessor* _tmp90_;
+		gboolean _tmp91_;
+		gboolean _tmp92_;
+		_tmp60_ = base_property;
 		_tmp61_ = vala_property_get_set_accessor (_tmp60_);
 		_tmp62_ = _tmp61_;
-		_tmp63_ = vala_property_accessor_get_writable (_tmp62_);
+		_tmp63_ = vala_property_accessor_get_value_type (_tmp62_);
 		_tmp64_ = _tmp63_;
-		if (_tmp59_ != _tmp64_) {
+		_tmp65_ = object_type;
+		_tmp66_ = vala_data_type_get_actual_type (_tmp64_, _tmp65_, NULL, (ValaCodeNode*) self);
+		actual_base_type = _tmp66_;
+		_tmp67_ = actual_base_type;
+		_tmp68_ = vala_property_get_set_accessor (self);
+		_tmp69_ = _tmp68_;
+		_tmp70_ = vala_property_accessor_get_value_type (_tmp69_);
+		_tmp71_ = _tmp70_;
+		_tmp72_ = vala_data_type_equals (_tmp67_, _tmp71_);
+		if (!_tmp72_) {
+			gchar* _tmp73_;
+			_tmp73_ = g_strdup ("incompatible set accessor type");
+			_g_free0 (_vala_invalid_match);
+			_vala_invalid_match = _tmp73_;
 			result = FALSE;
+			_vala_code_node_unref0 (actual_base_type);
+			_vala_code_node_unref0 (object_type);
+			if (invalid_match) {
+				*invalid_match = _vala_invalid_match;
+			} else {
+				_g_free0 (_vala_invalid_match);
+			}
 			return result;
 		}
-		_tmp65_ = vala_property_get_set_accessor (self);
-		_tmp66_ = _tmp65_;
-		_tmp67_ = vala_property_accessor_get_construction (_tmp66_);
-		_tmp68_ = _tmp67_;
-		_tmp69_ = prop2;
-		_tmp70_ = vala_property_get_set_accessor (_tmp69_);
-		_tmp71_ = _tmp70_;
-		_tmp72_ = vala_property_accessor_get_construction (_tmp71_);
-		_tmp73_ = _tmp72_;
-		if (_tmp68_ != _tmp73_) {
+		_tmp74_ = vala_property_get_set_accessor (self);
+		_tmp75_ = _tmp74_;
+		_tmp76_ = vala_property_accessor_get_writable (_tmp75_);
+		_tmp77_ = _tmp76_;
+		_tmp78_ = base_property;
+		_tmp79_ = vala_property_get_set_accessor (_tmp78_);
+		_tmp80_ = _tmp79_;
+		_tmp81_ = vala_property_accessor_get_writable (_tmp80_);
+		_tmp82_ = _tmp81_;
+		if (_tmp77_ != _tmp82_) {
+			gchar* _tmp83_;
+			_tmp83_ = g_strdup ("incompatible set accessor");
+			_g_free0 (_vala_invalid_match);
+			_vala_invalid_match = _tmp83_;
 			result = FALSE;
+			_vala_code_node_unref0 (actual_base_type);
+			_vala_code_node_unref0 (object_type);
+			if (invalid_match) {
+				*invalid_match = _vala_invalid_match;
+			} else {
+				_g_free0 (_vala_invalid_match);
+			}
+			return result;
+		}
+		_tmp84_ = vala_property_get_set_accessor (self);
+		_tmp85_ = _tmp84_;
+		_tmp86_ = vala_property_accessor_get_construction (_tmp85_);
+		_tmp87_ = _tmp86_;
+		_tmp88_ = base_property;
+		_tmp89_ = vala_property_get_set_accessor (_tmp88_);
+		_tmp90_ = _tmp89_;
+		_tmp91_ = vala_property_accessor_get_construction (_tmp90_);
+		_tmp92_ = _tmp91_;
+		if (_tmp87_ != _tmp92_) {
+			gchar* _tmp93_;
+			_tmp93_ = g_strdup ("incompatible set accessor");
+			_g_free0 (_vala_invalid_match);
+			_vala_invalid_match = _tmp93_;
+			result = FALSE;
+			_vala_code_node_unref0 (actual_base_type);
+			_vala_code_node_unref0 (object_type);
+			if (invalid_match) {
+				*invalid_match = _vala_invalid_match;
+			} else {
+				_g_free0 (_vala_invalid_match);
+			}
 			return result;
 		}
+		_vala_code_node_unref0 (actual_base_type);
 	}
+	_g_free0 (_vala_invalid_match);
+	_vala_invalid_match = NULL;
 	result = TRUE;
+	_vala_code_node_unref0 (object_type);
+	if (invalid_match) {
+		*invalid_match = _vala_invalid_match;
+	} else {
+		_g_free0 (_vala_invalid_match);
+	}
 	return result;
 }
 
@@ -1082,9 +1205,9 @@ static void vala_property_find_base_class_property (ValaProperty* self, ValaClas
 	ValaSymbol* _tmp5_ = NULL;
 	ValaSymbol* sym;
 	ValaSymbol* _tmp6_;
-	ValaClass* _tmp27_;
-	ValaClass* _tmp28_;
 	ValaClass* _tmp29_;
+	ValaClass* _tmp30_;
+	ValaClass* _tmp31_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (cl != NULL);
 	_tmp0_ = cl;
@@ -1119,59 +1242,67 @@ static void vala_property_find_base_class_property (ValaProperty* self, ValaClas
 		}
 		_tmp14_ = _tmp9_;
 		if (_tmp14_) {
+			gchar* invalid_match = NULL;
 			ValaProperty* _tmp15_;
-			gboolean _tmp16_ = FALSE;
-			ValaProperty* _tmp26_;
+			gchar* _tmp16_ = NULL;
+			gboolean _tmp17_ = FALSE;
+			ValaProperty* _tmp28_;
 			_tmp15_ = base_property;
-			_tmp16_ = vala_property_equals (self, _tmp15_);
-			if (!_tmp16_) {
-				ValaSourceReference* _tmp17_;
+			_tmp17_ = vala_property_compatible (self, _tmp15_, &_tmp16_);
+			_g_free0 (invalid_match);
+			invalid_match = _tmp16_;
+			if (!_tmp17_) {
 				ValaSourceReference* _tmp18_;
-				gchar* _tmp19_ = NULL;
-				gchar* _tmp20_;
-				ValaProperty* _tmp21_;
-				gchar* _tmp22_ = NULL;
-				gchar* _tmp23_;
-				gchar* _tmp24_ = NULL;
-				gchar* _tmp25_;
+				ValaSourceReference* _tmp19_;
+				gchar* _tmp20_ = NULL;
+				gchar* _tmp21_;
+				ValaProperty* _tmp22_;
+				gchar* _tmp23_ = NULL;
+				gchar* _tmp24_;
+				const gchar* _tmp25_;
+				gchar* _tmp26_ = NULL;
+				gchar* _tmp27_;
 				vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
-				_tmp17_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-				_tmp18_ = _tmp17_;
-				_tmp19_ = vala_symbol_get_full_name ((ValaSymbol*) self);
-				_tmp20_ = _tmp19_;
-				_tmp21_ = base_property;
-				_tmp22_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp21_);
-				_tmp23_ = _tmp22_;
-				_tmp24_ = g_strdup_printf ("Type and/or accessors of overriding property `%s' do not match overrid" \
-"den property `%s'.", _tmp20_, _tmp23_);
-				_tmp25_ = _tmp24_;
-				vala_report_error (_tmp18_, _tmp25_);
-				_g_free0 (_tmp25_);
-				_g_free0 (_tmp23_);
-				_g_free0 (_tmp20_);
+				_tmp18_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
+				_tmp19_ = _tmp18_;
+				_tmp20_ = vala_symbol_get_full_name ((ValaSymbol*) self);
+				_tmp21_ = _tmp20_;
+				_tmp22_ = base_property;
+				_tmp23_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp22_);
+				_tmp24_ = _tmp23_;
+				_tmp25_ = invalid_match;
+				_tmp26_ = g_strdup_printf ("Type and/or accessors of overriding property `%s' do not match overrid" \
+"den property `%s': %s.", _tmp21_, _tmp24_, _tmp25_);
+				_tmp27_ = _tmp26_;
+				vala_report_error (_tmp19_, _tmp27_);
+				_g_free0 (_tmp27_);
+				_g_free0 (_tmp24_);
+				_g_free0 (_tmp21_);
+				_g_free0 (invalid_match);
 				_vala_code_node_unref0 (base_property);
 				_vala_code_node_unref0 (sym);
 				return;
 			}
-			_tmp26_ = base_property;
-			self->priv->_base_property = _tmp26_;
+			_tmp28_ = base_property;
+			self->priv->_base_property = _tmp28_;
+			_g_free0 (invalid_match);
 			_vala_code_node_unref0 (base_property);
 			_vala_code_node_unref0 (sym);
 			return;
 		}
 		_vala_code_node_unref0 (base_property);
 	}
-	_tmp27_ = cl;
-	_tmp28_ = vala_class_get_base_class (_tmp27_);
-	_tmp29_ = _tmp28_;
-	if (_tmp29_ != NULL) {
-		ValaClass* _tmp30_;
-		ValaClass* _tmp31_;
+	_tmp29_ = cl;
+	_tmp30_ = vala_class_get_base_class (_tmp29_);
+	_tmp31_ = _tmp30_;
+	if (_tmp31_ != NULL) {
 		ValaClass* _tmp32_;
-		_tmp30_ = cl;
-		_tmp31_ = vala_class_get_base_class (_tmp30_);
-		_tmp32_ = _tmp31_;
-		vala_property_find_base_class_property (self, _tmp32_);
+		ValaClass* _tmp33_;
+		ValaClass* _tmp34_;
+		_tmp32_ = cl;
+		_tmp33_ = vala_class_get_base_class (_tmp32_);
+		_tmp34_ = _tmp33_;
+		vala_property_find_base_class_property (self, _tmp34_);
 	}
 	_vala_code_node_unref0 (sym);
 }
@@ -1255,47 +1386,55 @@ static void vala_property_find_base_interface_property (ValaProperty* self, Vala
 					_tmp25_ = base_property;
 					_tmp26_ = _tmp25_->priv->_is_abstract;
 					if (_tmp26_) {
+						gchar* invalid_match = NULL;
 						ValaProperty* _tmp27_;
-						gboolean _tmp28_ = FALSE;
-						ValaProperty* _tmp38_;
-						ValaProperty* _tmp39_;
+						gchar* _tmp28_ = NULL;
+						gboolean _tmp29_ = FALSE;
+						ValaProperty* _tmp40_;
+						ValaProperty* _tmp41_;
 						_tmp27_ = base_property;
-						_tmp28_ = vala_property_equals (self, _tmp27_);
-						if (!_tmp28_) {
-							ValaSourceReference* _tmp29_;
+						_tmp29_ = vala_property_compatible (self, _tmp27_, &_tmp28_);
+						_g_free0 (invalid_match);
+						invalid_match = _tmp28_;
+						if (!_tmp29_) {
 							ValaSourceReference* _tmp30_;
-							gchar* _tmp31_ = NULL;
-							gchar* _tmp32_;
-							ValaProperty* _tmp33_;
-							gchar* _tmp34_ = NULL;
-							gchar* _tmp35_;
-							gchar* _tmp36_ = NULL;
-							gchar* _tmp37_;
+							ValaSourceReference* _tmp31_;
+							gchar* _tmp32_ = NULL;
+							gchar* _tmp33_;
+							ValaProperty* _tmp34_;
+							gchar* _tmp35_ = NULL;
+							gchar* _tmp36_;
+							const gchar* _tmp37_;
+							gchar* _tmp38_ = NULL;
+							gchar* _tmp39_;
 							vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
-							_tmp29_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
-							_tmp30_ = _tmp29_;
-							_tmp31_ = vala_symbol_get_full_name ((ValaSymbol*) self);
-							_tmp32_ = _tmp31_;
-							_tmp33_ = base_property;
-							_tmp34_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp33_);
-							_tmp35_ = _tmp34_;
-							_tmp36_ = g_strdup_printf ("Type and/or accessors of overriding property `%s' do not match overrid" \
-"den property `%s'.", _tmp32_, _tmp35_);
-							_tmp37_ = _tmp36_;
-							vala_report_error (_tmp30_, _tmp37_);
-							_g_free0 (_tmp37_);
-							_g_free0 (_tmp35_);
-							_g_free0 (_tmp32_);
+							_tmp30_ = vala_code_node_get_source_reference ((ValaCodeNode*) self);
+							_tmp31_ = _tmp30_;
+							_tmp32_ = vala_symbol_get_full_name ((ValaSymbol*) self);
+							_tmp33_ = _tmp32_;
+							_tmp34_ = base_property;
+							_tmp35_ = vala_symbol_get_full_name ((ValaSymbol*) _tmp34_);
+							_tmp36_ = _tmp35_;
+							_tmp37_ = invalid_match;
+							_tmp38_ = g_strdup_printf ("Type and/or accessors of overriding property `%s' do not match overrid" \
+"den property `%s': %s.", _tmp33_, _tmp36_, _tmp37_);
+							_tmp39_ = _tmp38_;
+							vala_report_error (_tmp31_, _tmp39_);
+							_g_free0 (_tmp39_);
+							_g_free0 (_tmp36_);
+							_g_free0 (_tmp33_);
+							_g_free0 (invalid_match);
 							_vala_code_node_unref0 (base_property);
 							_vala_code_node_unref0 (sym);
 							_vala_code_node_unref0 (type);
 							_vala_iterable_unref0 (_type_list);
 							return;
 						}
-						_tmp38_ = base_property;
-						_tmp39_ = _vala_code_node_ref0 (_tmp38_);
+						_tmp40_ = base_property;
+						_tmp41_ = _vala_code_node_ref0 (_tmp40_);
 						_vala_code_node_unref0 (self->priv->_base_interface_property);
-						self->priv->_base_interface_property = _tmp39_;
+						self->priv->_base_interface_property = _tmp41_;
+						_g_free0 (invalid_match);
 						_vala_code_node_unref0 (base_property);
 						_vala_code_node_unref0 (sym);
 						_vala_code_node_unref0 (type);
diff --git a/vala/valaproperty.vala b/vala/valaproperty.vala
index 7816020..08b17bb 100644
--- a/vala/valaproperty.vala
+++ b/vala/valaproperty.vala
@@ -189,28 +189,34 @@ public class Vala.Property : Symbol, Lockable {
 	}
 	
 	/**
-	 * Checks whether the accessors and type of the specified property
-	 * matches this property.
+	 * Checks whether the accessors of this property are compatible
+	 * with the specified base property.
 	 *
-	 * @param prop a property
-	 * @return     true if the specified property is compatible to this
-	 *             property
+	 * @param base_property a property
+	 * @param invalid_match error string about which check failed
+	 * @return true if the specified property is compatible to this property
 	 */
-	public bool equals (Property prop2) {
-		if ((get_accessor == null && prop2.get_accessor != null) ||
-		    (get_accessor != null && prop2.get_accessor == null)) {
+	public bool compatible (Property base_property, out string? invalid_match) {
+		if ((get_accessor == null && base_property.get_accessor != null) ||
+		    (get_accessor != null && base_property.get_accessor == null)) {
+			invalid_match = "incompatible get accessor";
 			return false;
 		}
 
-		if ((set_accessor == null && prop2.set_accessor != null) ||
-		    (set_accessor != null && prop2.set_accessor == null)) {
+		if ((set_accessor == null && base_property.set_accessor != null) ||
+		    (set_accessor != null && base_property.set_accessor == null)) {
+			invalid_match = "incompatible set accessor";
 			return false;
 		}
 
+		var object_type = CodeContext.get().analyzer.get_data_type_for_symbol ((TypeSymbol) parent_symbol);
+
 		if (get_accessor != null) {
 			// check accessor value_type instead of property_type
 			// due to possible ownership differences
-			if (!prop2.get_accessor.value_type.equals (get_accessor.value_type)) {
+			var actual_base_type = base_property.get_accessor.value_type.get_actual_type (object_type, null, this);
+			if (!actual_base_type.equals (get_accessor.value_type)) {
+				invalid_match = "incompatible get accessor type";
 				return false;
 			}
 		}
@@ -218,18 +224,23 @@ public class Vala.Property : Symbol, Lockable {
 		if (set_accessor != null) {
 			// check accessor value_type instead of property_type
 			// due to possible ownership differences
-			if (!prop2.set_accessor.value_type.equals (set_accessor.value_type)) {
+			var actual_base_type = base_property.set_accessor.value_type.get_actual_type (object_type, null, this);
+			if (!actual_base_type.equals (set_accessor.value_type)) {
+				invalid_match = "incompatible set accessor type";
 				return false;
 			}
 
-			if (set_accessor.writable != prop2.set_accessor.writable) {
+			if (set_accessor.writable != base_property.set_accessor.writable) {
+				invalid_match = "incompatible set accessor";
 				return false;
 			}
-			if (set_accessor.construction != prop2.set_accessor.construction) {
+			if (set_accessor.construction != base_property.set_accessor.construction) {
+				invalid_match = "incompatible set accessor";
 				return false;
 			}
 		}
 
+		invalid_match = null;
 		return true;
 	}
 
@@ -263,9 +274,10 @@ public class Vala.Property : Symbol, Lockable {
 		if (sym is Property) {
 			var base_property = (Property) sym;
 			if (base_property.is_abstract || base_property.is_virtual) {
-				if (!equals (base_property)) {
+				string invalid_match;
+				if (!compatible (base_property, out invalid_match)) {
 					error = true;
-					Report.error (source_reference, "Type and/or accessors of overriding property `%s' do not match overridden property `%s'.".printf (get_full_name (), base_property.get_full_name ()));
+					Report.error (source_reference, "Type and/or accessors of overriding property `%s' do not match overridden property `%s': %s.".printf (get_full_name (), base_property.get_full_name (), invalid_match));
 					return;
 				}
 
@@ -287,9 +299,10 @@ public class Vala.Property : Symbol, Lockable {
 				if (sym is Property) {
 					var base_property = (Property) sym;
 					if (base_property.is_abstract) {
-						if (!equals (base_property)) {
+						string invalid_match;
+						if (!compatible (base_property, out invalid_match)) {
 							error = true;
-							Report.error (source_reference, "Type and/or accessors of overriding property `%s' do not match overridden property `%s'.".printf (get_full_name (), base_property.get_full_name ()));
+							Report.error (source_reference, "Type and/or accessors of overriding property `%s' do not match overridden property `%s': %s.".printf (get_full_name (), base_property.get_full_name (), invalid_match));
 							return;
 						}
 
diff --git a/vala/valascanner.c b/vala/valascanner.c
index d7b7f5b..2298e34 100644
--- a/vala/valascanner.c
+++ b/vala/valascanner.c
@@ -595,214 +595,211 @@ ValaTokenType vala_scanner_read_regex_token (ValaScanner* self, ValaSourceLocati
 	gchar* _tmp1_;
 	gint _tmp2_;
 	gint _tmp3_;
-	ValaSourceLocation _tmp4_ = {0};
 	gint token_length_in_chars;
+	gchar* _tmp4_;
 	gchar* _tmp5_;
-	gchar* _tmp6_;
-	gint _tmp145_;
-	gchar* _tmp151_;
+	gint _tmp144_;
+	gchar* _tmp150_;
+	gint _tmp151_;
 	gint _tmp152_;
-	gint _tmp153_;
-	ValaSourceLocation _tmp154_ = {0};
 	g_return_val_if_fail (self != NULL, 0);
 	_tmp0_ = self->priv->current;
 	begin = _tmp0_;
 	_tmp1_ = begin;
 	_tmp2_ = self->priv->line;
 	_tmp3_ = self->priv->column;
-	vala_source_location_init (&_tmp4_, _tmp1_, _tmp2_, _tmp3_);
-	_vala_token_begin = _tmp4_;
+	vala_source_location_init (&_vala_token_begin, _tmp1_, _tmp2_, _tmp3_);
 	token_length_in_chars = -1;
-	_tmp5_ = self->priv->current;
-	_tmp6_ = self->priv->end;
-	if (_tmp5_ >= _tmp6_) {
+	_tmp4_ = self->priv->current;
+	_tmp5_ = self->priv->end;
+	if (_tmp4_ >= _tmp5_) {
 		type = VALA_TOKEN_TYPE_EOF;
 	} else {
-		gchar* _tmp7_;
-		gchar _tmp8_;
-		_tmp7_ = self->priv->current;
-		_tmp8_ = _tmp7_[0];
-		switch (_tmp8_) {
+		gchar* _tmp6_;
+		gchar _tmp7_;
+		_tmp6_ = self->priv->current;
+		_tmp7_ = _tmp6_[0];
+		switch (_tmp7_) {
 			case '/':
 			{
-				gchar* _tmp9_;
-				gint _tmp10_;
+				gchar* _tmp8_;
+				gint _tmp9_;
 				gboolean fl_i;
 				gboolean fl_s;
 				gboolean fl_m;
 				gboolean fl_x;
 				type = VALA_TOKEN_TYPE_CLOSE_REGEX_LITERAL;
-				_tmp9_ = self->priv->current;
-				self->priv->current = _tmp9_ + 1;
-				_tmp10_ = self->priv->state_stack_length1;
-				self->priv->state_stack_length1 = _tmp10_ - 1;
+				_tmp8_ = self->priv->current;
+				self->priv->current = _tmp8_ + 1;
+				_tmp9_ = self->priv->state_stack_length1;
+				self->priv->state_stack_length1 = _tmp9_ - 1;
 				fl_i = FALSE;
 				fl_s = FALSE;
 				fl_m = FALSE;
 				fl_x = FALSE;
 				while (TRUE) {
+					gboolean _tmp10_ = FALSE;
 					gboolean _tmp11_ = FALSE;
 					gboolean _tmp12_ = FALSE;
-					gboolean _tmp13_ = FALSE;
-					gchar* _tmp14_;
-					gchar _tmp15_;
-					gboolean _tmp18_;
-					gboolean _tmp21_;
-					gboolean _tmp24_;
-					gchar* _tmp25_;
-					gchar _tmp26_;
-					gchar* _tmp67_;
-					gint _tmp68_;
-					_tmp14_ = self->priv->current;
-					_tmp15_ = _tmp14_[0];
-					if (_tmp15_ == 'i') {
-						_tmp13_ = TRUE;
-					} else {
-						gchar* _tmp16_;
-						gchar _tmp17_;
-						_tmp16_ = self->priv->current;
-						_tmp17_ = _tmp16_[0];
-						_tmp13_ = _tmp17_ == 's';
-					}
-					_tmp18_ = _tmp13_;
-					if (_tmp18_) {
+					gchar* _tmp13_;
+					gchar _tmp14_;
+					gboolean _tmp17_;
+					gboolean _tmp20_;
+					gboolean _tmp23_;
+					gchar* _tmp24_;
+					gchar _tmp25_;
+					gchar* _tmp66_;
+					gint _tmp67_;
+					_tmp13_ = self->priv->current;
+					_tmp14_ = _tmp13_[0];
+					if (_tmp14_ == 'i') {
 						_tmp12_ = TRUE;
 					} else {
-						gchar* _tmp19_;
-						gchar _tmp20_;
-						_tmp19_ = self->priv->current;
-						_tmp20_ = _tmp19_[0];
-						_tmp12_ = _tmp20_ == 'm';
+						gchar* _tmp15_;
+						gchar _tmp16_;
+						_tmp15_ = self->priv->current;
+						_tmp16_ = _tmp15_[0];
+						_tmp12_ = _tmp16_ == 's';
 					}
-					_tmp21_ = _tmp12_;
-					if (_tmp21_) {
+					_tmp17_ = _tmp12_;
+					if (_tmp17_) {
 						_tmp11_ = TRUE;
 					} else {
-						gchar* _tmp22_;
-						gchar _tmp23_;
-						_tmp22_ = self->priv->current;
-						_tmp23_ = _tmp22_[0];
-						_tmp11_ = _tmp23_ == 'x';
+						gchar* _tmp18_;
+						gchar _tmp19_;
+						_tmp18_ = self->priv->current;
+						_tmp19_ = _tmp18_[0];
+						_tmp11_ = _tmp19_ == 'm';
 					}
-					_tmp24_ = _tmp11_;
-					if (!_tmp24_) {
+					_tmp20_ = _tmp11_;
+					if (_tmp20_) {
+						_tmp10_ = TRUE;
+					} else {
+						gchar* _tmp21_;
+						gchar _tmp22_;
+						_tmp21_ = self->priv->current;
+						_tmp22_ = _tmp21_[0];
+						_tmp10_ = _tmp22_ == 'x';
+					}
+					_tmp23_ = _tmp10_;
+					if (!_tmp23_) {
 						break;
 					}
-					_tmp25_ = self->priv->current;
-					_tmp26_ = _tmp25_[0];
-					switch (_tmp26_) {
+					_tmp24_ = self->priv->current;
+					_tmp25_ = _tmp24_[0];
+					switch (_tmp25_) {
 						case 'i':
 						{
-							gboolean _tmp27_;
-							_tmp27_ = fl_i;
-							if (_tmp27_) {
-								ValaSourceFile* _tmp28_;
+							gboolean _tmp26_;
+							_tmp26_ = fl_i;
+							if (_tmp26_) {
+								ValaSourceFile* _tmp27_;
+								gint _tmp28_;
 								gint _tmp29_;
 								gint _tmp30_;
 								gint _tmp31_;
 								gint _tmp32_;
 								gint _tmp33_;
-								gint _tmp34_;
+								ValaSourceReference* _tmp34_;
 								ValaSourceReference* _tmp35_;
-								ValaSourceReference* _tmp36_;
-								_tmp28_ = self->priv->_source_file;
-								_tmp29_ = self->priv->line;
-								_tmp30_ = self->priv->column;
-								_tmp31_ = token_length_in_chars;
-								_tmp32_ = self->priv->line;
-								_tmp33_ = self->priv->column;
-								_tmp34_ = token_length_in_chars;
-								_tmp35_ = vala_source_reference_new (_tmp28_, _tmp29_, _tmp30_ + _tmp31_, _tmp32_, _tmp33_ + _tmp34_);
-								_tmp36_ = _tmp35_;
-								vala_report_error (_tmp36_, "modifier 'i' used more than once");
-								_vala_source_reference_unref0 (_tmp36_);
+								_tmp27_ = self->priv->_source_file;
+								_tmp28_ = self->priv->line;
+								_tmp29_ = self->priv->column;
+								_tmp30_ = token_length_in_chars;
+								_tmp31_ = self->priv->line;
+								_tmp32_ = self->priv->column;
+								_tmp33_ = token_length_in_chars;
+								_tmp34_ = vala_source_reference_new (_tmp27_, _tmp28_, _tmp29_ + _tmp30_, _tmp31_, _tmp32_ + _tmp33_);
+								_tmp35_ = _tmp34_;
+								vala_report_error (_tmp35_, "modifier 'i' used more than once");
+								_vala_source_reference_unref0 (_tmp35_);
 							}
 							fl_i = TRUE;
 							break;
 						}
 						case 's':
 						{
-							gboolean _tmp37_;
-							_tmp37_ = fl_s;
-							if (_tmp37_) {
-								ValaSourceFile* _tmp38_;
+							gboolean _tmp36_;
+							_tmp36_ = fl_s;
+							if (_tmp36_) {
+								ValaSourceFile* _tmp37_;
+								gint _tmp38_;
 								gint _tmp39_;
 								gint _tmp40_;
 								gint _tmp41_;
 								gint _tmp42_;
 								gint _tmp43_;
-								gint _tmp44_;
+								ValaSourceReference* _tmp44_;
 								ValaSourceReference* _tmp45_;
-								ValaSourceReference* _tmp46_;
-								_tmp38_ = self->priv->_source_file;
-								_tmp39_ = self->priv->line;
-								_tmp40_ = self->priv->column;
-								_tmp41_ = token_length_in_chars;
-								_tmp42_ = self->priv->line;
-								_tmp43_ = self->priv->column;
-								_tmp44_ = token_length_in_chars;
-								_tmp45_ = vala_source_reference_new (_tmp38_, _tmp39_, _tmp40_ + _tmp41_, _tmp42_, _tmp43_ + _tmp44_);
-								_tmp46_ = _tmp45_;
-								vala_report_error (_tmp46_, "modifier 's' used more than once");
-								_vala_source_reference_unref0 (_tmp46_);
+								_tmp37_ = self->priv->_source_file;
+								_tmp38_ = self->priv->line;
+								_tmp39_ = self->priv->column;
+								_tmp40_ = token_length_in_chars;
+								_tmp41_ = self->priv->line;
+								_tmp42_ = self->priv->column;
+								_tmp43_ = token_length_in_chars;
+								_tmp44_ = vala_source_reference_new (_tmp37_, _tmp38_, _tmp39_ + _tmp40_, _tmp41_, _tmp42_ + _tmp43_);
+								_tmp45_ = _tmp44_;
+								vala_report_error (_tmp45_, "modifier 's' used more than once");
+								_vala_source_reference_unref0 (_tmp45_);
 							}
 							fl_s = TRUE;
 							break;
 						}
 						case 'm':
 						{
-							gboolean _tmp47_;
-							_tmp47_ = fl_m;
-							if (_tmp47_) {
-								ValaSourceFile* _tmp48_;
+							gboolean _tmp46_;
+							_tmp46_ = fl_m;
+							if (_tmp46_) {
+								ValaSourceFile* _tmp47_;
+								gint _tmp48_;
 								gint _tmp49_;
 								gint _tmp50_;
 								gint _tmp51_;
 								gint _tmp52_;
 								gint _tmp53_;
-								gint _tmp54_;
+								ValaSourceReference* _tmp54_;
 								ValaSourceReference* _tmp55_;
-								ValaSourceReference* _tmp56_;
-								_tmp48_ = self->priv->_source_file;
-								_tmp49_ = self->priv->line;
-								_tmp50_ = self->priv->column;
-								_tmp51_ = token_length_in_chars;
-								_tmp52_ = self->priv->line;
-								_tmp53_ = self->priv->column;
-								_tmp54_ = token_length_in_chars;
-								_tmp55_ = vala_source_reference_new (_tmp48_, _tmp49_, _tmp50_ + _tmp51_, _tmp52_, _tmp53_ + _tmp54_);
-								_tmp56_ = _tmp55_;
-								vala_report_error (_tmp56_, "modifier 'm' used more than once");
-								_vala_source_reference_unref0 (_tmp56_);
+								_tmp47_ = self->priv->_source_file;
+								_tmp48_ = self->priv->line;
+								_tmp49_ = self->priv->column;
+								_tmp50_ = token_length_in_chars;
+								_tmp51_ = self->priv->line;
+								_tmp52_ = self->priv->column;
+								_tmp53_ = token_length_in_chars;
+								_tmp54_ = vala_source_reference_new (_tmp47_, _tmp48_, _tmp49_ + _tmp50_, _tmp51_, _tmp52_ + _tmp53_);
+								_tmp55_ = _tmp54_;
+								vala_report_error (_tmp55_, "modifier 'm' used more than once");
+								_vala_source_reference_unref0 (_tmp55_);
 							}
 							fl_m = TRUE;
 							break;
 						}
 						case 'x':
 						{
-							gboolean _tmp57_;
-							_tmp57_ = fl_x;
-							if (_tmp57_) {
-								ValaSourceFile* _tmp58_;
+							gboolean _tmp56_;
+							_tmp56_ = fl_x;
+							if (_tmp56_) {
+								ValaSourceFile* _tmp57_;
+								gint _tmp58_;
 								gint _tmp59_;
 								gint _tmp60_;
 								gint _tmp61_;
 								gint _tmp62_;
 								gint _tmp63_;
-								gint _tmp64_;
+								ValaSourceReference* _tmp64_;
 								ValaSourceReference* _tmp65_;
-								ValaSourceReference* _tmp66_;
-								_tmp58_ = self->priv->_source_file;
-								_tmp59_ = self->priv->line;
-								_tmp60_ = self->priv->column;
-								_tmp61_ = token_length_in_chars;
-								_tmp62_ = self->priv->line;
-								_tmp63_ = self->priv->column;
-								_tmp64_ = token_length_in_chars;
-								_tmp65_ = vala_source_reference_new (_tmp58_, _tmp59_, _tmp60_ + _tmp61_, _tmp62_, _tmp63_ + _tmp64_);
-								_tmp66_ = _tmp65_;
-								vala_report_error (_tmp66_, "modifier 'x' used more than once");
-								_vala_source_reference_unref0 (_tmp66_);
+								_tmp57_ = self->priv->_source_file;
+								_tmp58_ = self->priv->line;
+								_tmp59_ = self->priv->column;
+								_tmp60_ = token_length_in_chars;
+								_tmp61_ = self->priv->line;
+								_tmp62_ = self->priv->column;
+								_tmp63_ = token_length_in_chars;
+								_tmp64_ = vala_source_reference_new (_tmp57_, _tmp58_, _tmp59_ + _tmp60_, _tmp61_, _tmp62_ + _tmp63_);
+								_tmp65_ = _tmp64_;
+								vala_report_error (_tmp65_, "modifier 'x' used more than once");
+								_vala_source_reference_unref0 (_tmp65_);
 							}
 							fl_x = TRUE;
 							break;
@@ -810,64 +807,64 @@ ValaTokenType vala_scanner_read_regex_token (ValaScanner* self, ValaSourceLocati
 						default:
 						break;
 					}
-					_tmp67_ = self->priv->current;
-					self->priv->current = _tmp67_ + 1;
-					_tmp68_ = token_length_in_chars;
-					token_length_in_chars = _tmp68_ + 1;
+					_tmp66_ = self->priv->current;
+					self->priv->current = _tmp66_ + 1;
+					_tmp67_ = token_length_in_chars;
+					token_length_in_chars = _tmp67_ + 1;
 				}
 				break;
 			}
 			default:
 			{
-				gboolean _tmp126_ = FALSE;
+				gboolean _tmp125_ = FALSE;
+				gchar* _tmp126_;
 				gchar* _tmp127_;
-				gchar* _tmp128_;
-				gboolean _tmp131_;
+				gboolean _tmp130_;
 				type = VALA_TOKEN_TYPE_REGEX_LITERAL;
 				token_length_in_chars = 0;
 				while (TRUE) {
-					gboolean _tmp69_ = FALSE;
+					gboolean _tmp68_ = FALSE;
+					gchar* _tmp69_;
 					gchar* _tmp70_;
-					gchar* _tmp71_;
-					gboolean _tmp74_;
-					gchar* _tmp75_;
-					gchar _tmp76_;
-					_tmp70_ = self->priv->current;
-					_tmp71_ = self->priv->end;
-					if (_tmp70_ < _tmp71_) {
-						gchar* _tmp72_;
-						gchar _tmp73_;
-						_tmp72_ = self->priv->current;
-						_tmp73_ = _tmp72_[0];
-						_tmp69_ = _tmp73_ != '/';
+					gboolean _tmp73_;
+					gchar* _tmp74_;
+					gchar _tmp75_;
+					_tmp69_ = self->priv->current;
+					_tmp70_ = self->priv->end;
+					if (_tmp69_ < _tmp70_) {
+						gchar* _tmp71_;
+						gchar _tmp72_;
+						_tmp71_ = self->priv->current;
+						_tmp72_ = _tmp71_[0];
+						_tmp68_ = _tmp72_ != '/';
 					} else {
-						_tmp69_ = FALSE;
+						_tmp68_ = FALSE;
 					}
-					_tmp74_ = _tmp69_;
-					if (!_tmp74_) {
+					_tmp73_ = _tmp68_;
+					if (!_tmp73_) {
 						break;
 					}
-					_tmp75_ = self->priv->current;
-					_tmp76_ = _tmp75_[0];
-					if (_tmp76_ == '\\') {
-						gchar* _tmp77_;
-						gint _tmp78_;
+					_tmp74_ = self->priv->current;
+					_tmp75_ = _tmp74_[0];
+					if (_tmp75_ == '\\') {
+						gchar* _tmp76_;
+						gint _tmp77_;
+						gchar* _tmp78_;
 						gchar* _tmp79_;
 						gchar* _tmp80_;
-						gchar* _tmp81_;
-						gchar _tmp82_;
-						_tmp77_ = self->priv->current;
-						self->priv->current = _tmp77_ + 1;
-						_tmp78_ = token_length_in_chars;
-						token_length_in_chars = _tmp78_ + 1;
-						_tmp79_ = self->priv->current;
-						_tmp80_ = self->priv->end;
-						if (_tmp79_ >= _tmp80_) {
+						gchar _tmp81_;
+						_tmp76_ = self->priv->current;
+						self->priv->current = _tmp76_ + 1;
+						_tmp77_ = token_length_in_chars;
+						token_length_in_chars = _tmp77_ + 1;
+						_tmp78_ = self->priv->current;
+						_tmp79_ = self->priv->end;
+						if (_tmp78_ >= _tmp79_) {
 							break;
 						}
-						_tmp81_ = self->priv->current;
-						_tmp82_ = _tmp81_[0];
-						switch (_tmp82_) {
+						_tmp80_ = self->priv->current;
+						_tmp81_ = _tmp80_[0];
+						switch (_tmp81_) {
 							case '\'':
 							case '"':
 							case '\\':
@@ -918,180 +915,180 @@ ValaTokenType vala_scanner_read_regex_token (ValaScanner* self, ValaSourceLocati
 							case 'z':
 							case 'Z':
 							{
-								gchar* _tmp83_;
-								gint _tmp84_;
-								_tmp83_ = self->priv->current;
-								self->priv->current = _tmp83_ + 1;
-								_tmp84_ = token_length_in_chars;
-								token_length_in_chars = _tmp84_ + 1;
+								gchar* _tmp82_;
+								gint _tmp83_;
+								_tmp82_ = self->priv->current;
+								self->priv->current = _tmp82_ + 1;
+								_tmp83_ = token_length_in_chars;
+								token_length_in_chars = _tmp83_ + 1;
 								break;
 							}
 							case 'x':
 							{
-								gchar* _tmp85_;
-								gint _tmp86_;
-								_tmp85_ = self->priv->current;
-								self->priv->current = _tmp85_ + 1;
-								_tmp86_ = token_length_in_chars;
-								token_length_in_chars = _tmp86_ + 1;
+								gchar* _tmp84_;
+								gint _tmp85_;
+								_tmp84_ = self->priv->current;
+								self->priv->current = _tmp84_ + 1;
+								_tmp85_ = token_length_in_chars;
+								token_length_in_chars = _tmp85_ + 1;
 								while (TRUE) {
-									gboolean _tmp87_ = FALSE;
+									gboolean _tmp86_ = FALSE;
+									gchar* _tmp87_;
 									gchar* _tmp88_;
-									gchar* _tmp89_;
-									gboolean _tmp93_;
-									gchar* _tmp94_;
-									gint _tmp95_;
-									_tmp88_ = self->priv->current;
-									_tmp89_ = self->priv->end;
-									if (_tmp88_ < _tmp89_) {
-										gchar* _tmp90_;
-										gchar _tmp91_;
-										gboolean _tmp92_ = FALSE;
-										_tmp90_ = self->priv->current;
-										_tmp91_ = _tmp90_[0];
-										_tmp92_ = g_ascii_isxdigit (_tmp91_);
-										_tmp87_ = _tmp92_;
+									gboolean _tmp92_;
+									gchar* _tmp93_;
+									gint _tmp94_;
+									_tmp87_ = self->priv->current;
+									_tmp88_ = self->priv->end;
+									if (_tmp87_ < _tmp88_) {
+										gchar* _tmp89_;
+										gchar _tmp90_;
+										gboolean _tmp91_ = FALSE;
+										_tmp89_ = self->priv->current;
+										_tmp90_ = _tmp89_[0];
+										_tmp91_ = g_ascii_isxdigit (_tmp90_);
+										_tmp86_ = _tmp91_;
 									} else {
-										_tmp87_ = FALSE;
+										_tmp86_ = FALSE;
 									}
-									_tmp93_ = _tmp87_;
-									if (!_tmp93_) {
+									_tmp92_ = _tmp86_;
+									if (!_tmp92_) {
 										break;
 									}
-									_tmp94_ = self->priv->current;
-									self->priv->current = _tmp94_ + 1;
-									_tmp95_ = token_length_in_chars;
-									token_length_in_chars = _tmp95_ + 1;
+									_tmp93_ = self->priv->current;
+									self->priv->current = _tmp93_ + 1;
+									_tmp94_ = token_length_in_chars;
+									token_length_in_chars = _tmp94_ + 1;
 								}
 								break;
 							}
 							default:
 							{
-								ValaSourceFile* _tmp96_;
+								ValaSourceFile* _tmp95_;
+								gint _tmp96_;
 								gint _tmp97_;
 								gint _tmp98_;
 								gint _tmp99_;
 								gint _tmp100_;
 								gint _tmp101_;
-								gint _tmp102_;
+								ValaSourceReference* _tmp102_;
 								ValaSourceReference* _tmp103_;
-								ValaSourceReference* _tmp104_;
-								_tmp96_ = self->priv->_source_file;
-								_tmp97_ = self->priv->line;
-								_tmp98_ = self->priv->column;
-								_tmp99_ = token_length_in_chars;
-								_tmp100_ = self->priv->line;
-								_tmp101_ = self->priv->column;
-								_tmp102_ = token_length_in_chars;
-								_tmp103_ = vala_source_reference_new (_tmp96_, _tmp97_, _tmp98_ + _tmp99_, _tmp100_, _tmp101_ + _tmp102_);
-								_tmp104_ = _tmp103_;
-								vala_report_error (_tmp104_, "invalid escape sequence");
-								_vala_source_reference_unref0 (_tmp104_);
+								_tmp95_ = self->priv->_source_file;
+								_tmp96_ = self->priv->line;
+								_tmp97_ = self->priv->column;
+								_tmp98_ = token_length_in_chars;
+								_tmp99_ = self->priv->line;
+								_tmp100_ = self->priv->column;
+								_tmp101_ = token_length_in_chars;
+								_tmp102_ = vala_source_reference_new (_tmp95_, _tmp96_, _tmp97_ + _tmp98_, _tmp99_, _tmp100_ + _tmp101_);
+								_tmp103_ = _tmp102_;
+								vala_report_error (_tmp103_, "invalid escape sequence");
+								_vala_source_reference_unref0 (_tmp103_);
 								break;
 							}
 						}
 					} else {
-						gchar* _tmp105_;
-						gchar _tmp106_;
-						_tmp105_ = self->priv->current;
-						_tmp106_ = _tmp105_[0];
-						if (_tmp106_ == '\n') {
+						gchar* _tmp104_;
+						gchar _tmp105_;
+						_tmp104_ = self->priv->current;
+						_tmp105_ = _tmp104_[0];
+						if (_tmp105_ == '\n') {
 							break;
 						} else {
+							gchar* _tmp106_;
 							gchar* _tmp107_;
 							gchar* _tmp108_;
-							gchar* _tmp109_;
-							gunichar _tmp110_ = 0U;
+							gunichar _tmp109_ = 0U;
 							gunichar u;
-							gunichar _tmp111_;
-							_tmp107_ = self->priv->current;
-							_tmp108_ = self->priv->end;
-							_tmp109_ = self->priv->current;
-							_tmp110_ = g_utf8_get_char_validated ((const gchar*) _tmp107_, (gssize) ((glong) (_tmp108_ - _tmp109_)));
-							u = _tmp110_;
-							_tmp111_ = u;
-							if (_tmp111_ != ((gunichar) (-1))) {
-								gchar* _tmp112_;
-								gunichar _tmp113_;
-								gint _tmp114_ = 0;
-								gint _tmp115_;
-								_tmp112_ = self->priv->current;
-								_tmp113_ = u;
-								_tmp114_ = g_unichar_to_utf8 (_tmp113_, NULL);
-								self->priv->current = _tmp112_ + _tmp114_;
-								_tmp115_ = token_length_in_chars;
-								token_length_in_chars = _tmp115_ + 1;
+							gunichar _tmp110_;
+							_tmp106_ = self->priv->current;
+							_tmp107_ = self->priv->end;
+							_tmp108_ = self->priv->current;
+							_tmp109_ = g_utf8_get_char_validated ((const gchar*) _tmp106_, (gssize) ((glong) (_tmp107_ - _tmp108_)));
+							u = _tmp109_;
+							_tmp110_ = u;
+							if (_tmp110_ != ((gunichar) (-1))) {
+								gchar* _tmp111_;
+								gunichar _tmp112_;
+								gint _tmp113_ = 0;
+								gint _tmp114_;
+								_tmp111_ = self->priv->current;
+								_tmp112_ = u;
+								_tmp113_ = g_unichar_to_utf8 (_tmp112_, NULL);
+								self->priv->current = _tmp111_ + _tmp113_;
+								_tmp114_ = token_length_in_chars;
+								token_length_in_chars = _tmp114_ + 1;
 							} else {
-								gchar* _tmp116_;
-								ValaSourceFile* _tmp117_;
+								gchar* _tmp115_;
+								ValaSourceFile* _tmp116_;
+								gint _tmp117_;
 								gint _tmp118_;
 								gint _tmp119_;
 								gint _tmp120_;
 								gint _tmp121_;
 								gint _tmp122_;
-								gint _tmp123_;
+								ValaSourceReference* _tmp123_;
 								ValaSourceReference* _tmp124_;
-								ValaSourceReference* _tmp125_;
-								_tmp116_ = self->priv->current;
-								self->priv->current = _tmp116_ + 1;
-								_tmp117_ = self->priv->_source_file;
-								_tmp118_ = self->priv->line;
-								_tmp119_ = self->priv->column;
-								_tmp120_ = token_length_in_chars;
-								_tmp121_ = self->priv->line;
-								_tmp122_ = self->priv->column;
-								_tmp123_ = token_length_in_chars;
-								_tmp124_ = vala_source_reference_new (_tmp117_, _tmp118_, _tmp119_ + _tmp120_, _tmp121_, _tmp122_ + _tmp123_);
-								_tmp125_ = _tmp124_;
-								vala_report_error (_tmp125_, "invalid UTF-8 character");
-								_vala_source_reference_unref0 (_tmp125_);
+								_tmp115_ = self->priv->current;
+								self->priv->current = _tmp115_ + 1;
+								_tmp116_ = self->priv->_source_file;
+								_tmp117_ = self->priv->line;
+								_tmp118_ = self->priv->column;
+								_tmp119_ = token_length_in_chars;
+								_tmp120_ = self->priv->line;
+								_tmp121_ = self->priv->column;
+								_tmp122_ = token_length_in_chars;
+								_tmp123_ = vala_source_reference_new (_tmp116_, _tmp117_, _tmp118_ + _tmp119_, _tmp120_, _tmp121_ + _tmp122_);
+								_tmp124_ = _tmp123_;
+								vala_report_error (_tmp124_, "invalid UTF-8 character");
+								_vala_source_reference_unref0 (_tmp124_);
 							}
 						}
 					}
 				}
-				_tmp127_ = self->priv->current;
-				_tmp128_ = self->priv->end;
-				if (_tmp127_ >= _tmp128_) {
-					_tmp126_ = TRUE;
+				_tmp126_ = self->priv->current;
+				_tmp127_ = self->priv->end;
+				if (_tmp126_ >= _tmp127_) {
+					_tmp125_ = TRUE;
 				} else {
-					gchar* _tmp129_;
-					gchar _tmp130_;
-					_tmp129_ = self->priv->current;
-					_tmp130_ = _tmp129_[0];
-					_tmp126_ = _tmp130_ == '\n';
+					gchar* _tmp128_;
+					gchar _tmp129_;
+					_tmp128_ = self->priv->current;
+					_tmp129_ = _tmp128_[0];
+					_tmp125_ = _tmp129_ == '\n';
 				}
-				_tmp131_ = _tmp126_;
-				if (_tmp131_) {
-					ValaSourceFile* _tmp132_;
+				_tmp130_ = _tmp125_;
+				if (_tmp130_) {
+					ValaSourceFile* _tmp131_;
+					gint _tmp132_;
 					gint _tmp133_;
 					gint _tmp134_;
 					gint _tmp135_;
 					gint _tmp136_;
 					gint _tmp137_;
-					gint _tmp138_;
+					ValaSourceReference* _tmp138_;
 					ValaSourceReference* _tmp139_;
-					ValaSourceReference* _tmp140_;
-					gint _tmp141_;
+					gint _tmp140_;
+					ValaSourceLocation _tmp141_ = {0};
 					ValaSourceLocation _tmp142_ = {0};
-					ValaSourceLocation _tmp143_ = {0};
-					ValaTokenType _tmp144_ = 0;
-					_tmp132_ = self->priv->_source_file;
-					_tmp133_ = self->priv->line;
-					_tmp134_ = self->priv->column;
-					_tmp135_ = token_length_in_chars;
-					_tmp136_ = self->priv->line;
-					_tmp137_ = self->priv->column;
-					_tmp138_ = token_length_in_chars;
-					_tmp139_ = vala_source_reference_new (_tmp132_, _tmp133_, _tmp134_ + _tmp135_, _tmp136_, _tmp137_ + _tmp138_);
-					_tmp140_ = _tmp139_;
-					vala_report_error (_tmp140_, "syntax error, expected \"");
-					_vala_source_reference_unref0 (_tmp140_);
-					_tmp141_ = self->priv->state_stack_length1;
-					self->priv->state_stack_length1 = _tmp141_ - 1;
-					_tmp144_ = vala_scanner_read_token (self, &_tmp142_, &_tmp143_);
-					_vala_token_begin = _tmp142_;
-					_vala_token_end = _tmp143_;
-					result = _tmp144_;
+					ValaTokenType _tmp143_ = 0;
+					_tmp131_ = self->priv->_source_file;
+					_tmp132_ = self->priv->line;
+					_tmp133_ = self->priv->column;
+					_tmp134_ = token_length_in_chars;
+					_tmp135_ = self->priv->line;
+					_tmp136_ = self->priv->column;
+					_tmp137_ = token_length_in_chars;
+					_tmp138_ = vala_source_reference_new (_tmp131_, _tmp132_, _tmp133_ + _tmp134_, _tmp135_, _tmp136_ + _tmp137_);
+					_tmp139_ = _tmp138_;
+					vala_report_error (_tmp139_, "syntax error, expected \"");
+					_vala_source_reference_unref0 (_tmp139_);
+					_tmp140_ = self->priv->state_stack_length1;
+					self->priv->state_stack_length1 = _tmp140_ - 1;
+					_tmp143_ = vala_scanner_read_token (self, &_tmp141_, &_tmp142_);
+					_vala_token_begin = _tmp141_;
+					_vala_token_end = _tmp142_;
+					result = _tmp143_;
 					if (token_begin) {
 						*token_begin = _vala_token_begin;
 					}
@@ -1104,27 +1101,26 @@ ValaTokenType vala_scanner_read_regex_token (ValaScanner* self, ValaSourceLocati
 			}
 		}
 	}
-	_tmp145_ = token_length_in_chars;
-	if (_tmp145_ < 0) {
-		gint _tmp146_;
+	_tmp144_ = token_length_in_chars;
+	if (_tmp144_ < 0) {
+		gint _tmp145_;
+		gchar* _tmp146_;
 		gchar* _tmp147_;
-		gchar* _tmp148_;
-		_tmp146_ = self->priv->column;
-		_tmp147_ = self->priv->current;
-		_tmp148_ = begin;
-		self->priv->column = _tmp146_ + ((gint) (_tmp147_ - _tmp148_));
+		_tmp145_ = self->priv->column;
+		_tmp146_ = self->priv->current;
+		_tmp147_ = begin;
+		self->priv->column = _tmp145_ + ((gint) (_tmp146_ - _tmp147_));
 	} else {
+		gint _tmp148_;
 		gint _tmp149_;
-		gint _tmp150_;
-		_tmp149_ = self->priv->column;
-		_tmp150_ = token_length_in_chars;
-		self->priv->column = _tmp149_ + _tmp150_;
+		_tmp148_ = self->priv->column;
+		_tmp149_ = token_length_in_chars;
+		self->priv->column = _tmp148_ + _tmp149_;
 	}
-	_tmp151_ = self->priv->current;
-	_tmp152_ = self->priv->line;
-	_tmp153_ = self->priv->column;
-	vala_source_location_init (&_tmp154_, _tmp151_, _tmp152_, _tmp153_ - 1);
-	_vala_token_end = _tmp154_;
+	_tmp150_ = self->priv->current;
+	_tmp151_ = self->priv->line;
+	_tmp152_ = self->priv->column;
+	vala_source_location_init (&_vala_token_end, _tmp150_, _tmp151_, _tmp152_ - 1);
 	result = type;
 	if (token_begin) {
 		*token_begin = _vala_token_begin;
@@ -2640,133 +2636,130 @@ ValaTokenType vala_scanner_read_template_token (ValaScanner* self, ValaSourceLoc
 	gchar* _tmp1_;
 	gint _tmp2_;
 	gint _tmp3_;
-	ValaSourceLocation _tmp4_ = {0};
 	gint token_length_in_chars;
+	gchar* _tmp4_;
 	gchar* _tmp5_;
-	gchar* _tmp6_;
-	gint _tmp131_;
-	gchar* _tmp137_;
+	gint _tmp130_;
+	gchar* _tmp136_;
+	gint _tmp137_;
 	gint _tmp138_;
-	gint _tmp139_;
-	ValaSourceLocation _tmp140_ = {0};
 	g_return_val_if_fail (self != NULL, 0);
 	_tmp0_ = self->priv->current;
 	begin = _tmp0_;
 	_tmp1_ = begin;
 	_tmp2_ = self->priv->line;
 	_tmp3_ = self->priv->column;
-	vala_source_location_init (&_tmp4_, _tmp1_, _tmp2_, _tmp3_);
-	_vala_token_begin = _tmp4_;
+	vala_source_location_init (&_vala_token_begin, _tmp1_, _tmp2_, _tmp3_);
 	token_length_in_chars = -1;
-	_tmp5_ = self->priv->current;
-	_tmp6_ = self->priv->end;
-	if (_tmp5_ >= _tmp6_) {
+	_tmp4_ = self->priv->current;
+	_tmp5_ = self->priv->end;
+	if (_tmp4_ >= _tmp5_) {
 		type = VALA_TOKEN_TYPE_EOF;
 	} else {
-		gchar* _tmp7_;
-		gchar _tmp8_;
-		_tmp7_ = self->priv->current;
-		_tmp8_ = _tmp7_[0];
-		switch (_tmp8_) {
+		gchar* _tmp6_;
+		gchar _tmp7_;
+		_tmp6_ = self->priv->current;
+		_tmp7_ = _tmp6_[0];
+		switch (_tmp7_) {
 			case '"':
 			{
-				gchar* _tmp9_;
-				gint _tmp10_;
+				gchar* _tmp8_;
+				gint _tmp9_;
 				type = VALA_TOKEN_TYPE_CLOSE_TEMPLATE;
-				_tmp9_ = self->priv->current;
-				self->priv->current = _tmp9_ + 1;
-				_tmp10_ = self->priv->state_stack_length1;
-				self->priv->state_stack_length1 = _tmp10_ - 1;
+				_tmp8_ = self->priv->current;
+				self->priv->current = _tmp8_ + 1;
+				_tmp9_ = self->priv->state_stack_length1;
+				self->priv->state_stack_length1 = _tmp9_ - 1;
 				break;
 			}
 			case '$':
 			{
+				gchar* _tmp10_;
 				gchar* _tmp11_;
-				gchar* _tmp12_;
-				gboolean _tmp13_ = FALSE;
-				gchar* _tmp14_;
-				gchar _tmp15_;
-				gboolean _tmp16_ = FALSE;
-				gboolean _tmp19_;
-				_tmp11_ = _vala_token_begin.pos;
-				_vala_token_begin.pos = _tmp11_ + 1;
-				_tmp12_ = self->priv->current;
-				self->priv->current = _tmp12_ + 1;
-				_tmp14_ = self->priv->current;
-				_tmp15_ = _tmp14_[0];
-				_tmp16_ = g_ascii_isalpha (_tmp15_);
-				if (_tmp16_) {
-					_tmp13_ = TRUE;
+				gboolean _tmp12_ = FALSE;
+				gchar* _tmp13_;
+				gchar _tmp14_;
+				gboolean _tmp15_ = FALSE;
+				gboolean _tmp18_;
+				_tmp10_ = _vala_token_begin.pos;
+				_vala_token_begin.pos = _tmp10_ + 1;
+				_tmp11_ = self->priv->current;
+				self->priv->current = _tmp11_ + 1;
+				_tmp13_ = self->priv->current;
+				_tmp14_ = _tmp13_[0];
+				_tmp15_ = g_ascii_isalpha (_tmp14_);
+				if (_tmp15_) {
+					_tmp12_ = TRUE;
 				} else {
-					gchar* _tmp17_;
-					gchar _tmp18_;
-					_tmp17_ = self->priv->current;
-					_tmp18_ = _tmp17_[0];
-					_tmp13_ = _tmp18_ == '_';
+					gchar* _tmp16_;
+					gchar _tmp17_;
+					_tmp16_ = self->priv->current;
+					_tmp17_ = _tmp16_[0];
+					_tmp12_ = _tmp17_ == '_';
 				}
-				_tmp19_ = _tmp13_;
-				if (_tmp19_) {
+				_tmp18_ = _tmp12_;
+				if (_tmp18_) {
 					gint len;
-					ValaScannerState* _tmp29_;
-					gint _tmp29__length1;
+					ValaScannerState* _tmp28_;
+					gint _tmp28__length1;
 					len = 0;
 					while (TRUE) {
-						gboolean _tmp20_ = FALSE;
+						gboolean _tmp19_ = FALSE;
+						gchar* _tmp20_;
 						gchar* _tmp21_;
-						gchar* _tmp22_;
-						gboolean _tmp26_;
-						gchar* _tmp27_;
-						gint _tmp28_;
-						_tmp21_ = self->priv->current;
-						_tmp22_ = self->priv->end;
-						if (_tmp21_ < _tmp22_) {
-							gchar* _tmp23_;
-							gchar _tmp24_;
-							gboolean _tmp25_ = FALSE;
-							_tmp23_ = self->priv->current;
-							_tmp24_ = _tmp23_[0];
-							_tmp25_ = vala_scanner_is_ident_char (self, _tmp24_);
-							_tmp20_ = _tmp25_;
+						gboolean _tmp25_;
+						gchar* _tmp26_;
+						gint _tmp27_;
+						_tmp20_ = self->priv->current;
+						_tmp21_ = self->priv->end;
+						if (_tmp20_ < _tmp21_) {
+							gchar* _tmp22_;
+							gchar _tmp23_;
+							gboolean _tmp24_ = FALSE;
+							_tmp22_ = self->priv->current;
+							_tmp23_ = _tmp22_[0];
+							_tmp24_ = vala_scanner_is_ident_char (self, _tmp23_);
+							_tmp19_ = _tmp24_;
 						} else {
-							_tmp20_ = FALSE;
+							_tmp19_ = FALSE;
 						}
-						_tmp26_ = _tmp20_;
-						if (!_tmp26_) {
+						_tmp25_ = _tmp19_;
+						if (!_tmp25_) {
 							break;
 						}
-						_tmp27_ = self->priv->current;
-						self->priv->current = _tmp27_ + 1;
-						_tmp28_ = len;
-						len = _tmp28_ + 1;
+						_tmp26_ = self->priv->current;
+						self->priv->current = _tmp26_ + 1;
+						_tmp27_ = len;
+						len = _tmp27_ + 1;
 					}
 					type = VALA_TOKEN_TYPE_IDENTIFIER;
-					_tmp29_ = self->priv->state_stack;
-					_tmp29__length1 = self->priv->state_stack_length1;
+					_tmp28_ = self->priv->state_stack;
+					_tmp28__length1 = self->priv->state_stack_length1;
 					_vala_array_add13 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_SCANNER_STATE_TEMPLATE_PART);
 				} else {
-					gchar* _tmp30_;
-					gchar _tmp31_;
-					_tmp30_ = self->priv->current;
-					_tmp31_ = _tmp30_[0];
-					if (_tmp31_ == '(') {
-						gchar* _tmp32_;
-						gint _tmp33_;
-						ValaScannerState* _tmp34_;
-						gint _tmp34__length1;
+					gchar* _tmp29_;
+					gchar _tmp30_;
+					_tmp29_ = self->priv->current;
+					_tmp30_ = _tmp29_[0];
+					if (_tmp30_ == '(') {
+						gchar* _tmp31_;
+						gint _tmp32_;
+						ValaScannerState* _tmp33_;
+						gint _tmp33__length1;
+						ValaSourceLocation _tmp34_ = {0};
 						ValaSourceLocation _tmp35_ = {0};
-						ValaSourceLocation _tmp36_ = {0};
-						ValaTokenType _tmp37_ = 0;
-						_tmp32_ = self->priv->current;
-						self->priv->current = _tmp32_ + 1;
-						_tmp33_ = self->priv->column;
-						self->priv->column = _tmp33_ + 2;
-						_tmp34_ = self->priv->state_stack;
-						_tmp34__length1 = self->priv->state_stack_length1;
+						ValaTokenType _tmp36_ = 0;
+						_tmp31_ = self->priv->current;
+						self->priv->current = _tmp31_ + 1;
+						_tmp32_ = self->priv->column;
+						self->priv->column = _tmp32_ + 2;
+						_tmp33_ = self->priv->state_stack;
+						_tmp33__length1 = self->priv->state_stack_length1;
 						_vala_array_add14 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_SCANNER_STATE_PARENS);
-						_tmp37_ = vala_scanner_read_token (self, &_tmp35_, &_tmp36_);
-						_vala_token_begin = _tmp35_;
-						_vala_token_end = _tmp36_;
-						result = _tmp37_;
+						_tmp36_ = vala_scanner_read_token (self, &_tmp34_, &_tmp35_);
+						_vala_token_begin = _tmp34_;
+						_vala_token_end = _tmp35_;
+						result = _tmp36_;
 						if (token_begin) {
 							*token_begin = _vala_token_begin;
 						}
@@ -2775,44 +2768,44 @@ ValaTokenType vala_scanner_read_template_token (ValaScanner* self, ValaSourceLoc
 						}
 						return result;
 					} else {
-						gchar* _tmp38_;
-						gchar _tmp39_;
-						_tmp38_ = self->priv->current;
-						_tmp39_ = _tmp38_[0];
-						if (_tmp39_ == '$') {
-							gchar* _tmp40_;
-							ValaScannerState* _tmp41_;
-							gint _tmp41__length1;
+						gchar* _tmp37_;
+						gchar _tmp38_;
+						_tmp37_ = self->priv->current;
+						_tmp38_ = _tmp37_[0];
+						if (_tmp38_ == '$') {
+							gchar* _tmp39_;
+							ValaScannerState* _tmp40_;
+							gint _tmp40__length1;
 							type = VALA_TOKEN_TYPE_TEMPLATE_STRING_LITERAL;
-							_tmp40_ = self->priv->current;
-							self->priv->current = _tmp40_ + 1;
-							_tmp41_ = self->priv->state_stack;
-							_tmp41__length1 = self->priv->state_stack_length1;
+							_tmp39_ = self->priv->current;
+							self->priv->current = _tmp39_ + 1;
+							_tmp40_ = self->priv->state_stack;
+							_tmp40__length1 = self->priv->state_stack_length1;
 							_vala_array_add15 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_SCANNER_STATE_TEMPLATE_PART);
 						} else {
-							ValaSourceFile* _tmp42_;
+							ValaSourceFile* _tmp41_;
+							gint _tmp42_;
 							gint _tmp43_;
 							gint _tmp44_;
 							gint _tmp45_;
-							gint _tmp46_;
+							ValaSourceReference* _tmp46_;
 							ValaSourceReference* _tmp47_;
-							ValaSourceReference* _tmp48_;
+							ValaSourceLocation _tmp48_ = {0};
 							ValaSourceLocation _tmp49_ = {0};
-							ValaSourceLocation _tmp50_ = {0};
-							ValaTokenType _tmp51_ = 0;
-							_tmp42_ = self->priv->_source_file;
-							_tmp43_ = self->priv->line;
-							_tmp44_ = self->priv->column;
-							_tmp45_ = self->priv->line;
-							_tmp46_ = self->priv->column;
-							_tmp47_ = vala_source_reference_new (_tmp42_, _tmp43_, _tmp44_ + 1, _tmp45_, _tmp46_ + 1);
-							_tmp48_ = _tmp47_;
-							vala_report_error (_tmp48_, "unexpected character");
-							_vala_source_reference_unref0 (_tmp48_);
-							_tmp51_ = vala_scanner_read_template_token (self, &_tmp49_, &_tmp50_);
-							_vala_token_begin = _tmp49_;
-							_vala_token_end = _tmp50_;
-							result = _tmp51_;
+							ValaTokenType _tmp50_ = 0;
+							_tmp41_ = self->priv->_source_file;
+							_tmp42_ = self->priv->line;
+							_tmp43_ = self->priv->column;
+							_tmp44_ = self->priv->line;
+							_tmp45_ = self->priv->column;
+							_tmp46_ = vala_source_reference_new (_tmp41_, _tmp42_, _tmp43_ + 1, _tmp44_, _tmp45_ + 1);
+							_tmp47_ = _tmp46_;
+							vala_report_error (_tmp47_, "unexpected character");
+							_vala_source_reference_unref0 (_tmp47_);
+							_tmp50_ = vala_scanner_read_template_token (self, &_tmp48_, &_tmp49_);
+							_vala_token_begin = _tmp48_;
+							_vala_token_end = _tmp49_;
+							result = _tmp50_;
 							if (token_begin) {
 								*token_begin = _vala_token_begin;
 							}
@@ -2827,67 +2820,67 @@ ValaTokenType vala_scanner_read_template_token (ValaScanner* self, ValaSourceLoc
 			}
 			default:
 			{
+				gchar* _tmp114_;
 				gchar* _tmp115_;
-				gchar* _tmp116_;
-				ValaScannerState* _tmp130_;
-				gint _tmp130__length1;
+				ValaScannerState* _tmp129_;
+				gint _tmp129__length1;
 				type = VALA_TOKEN_TYPE_TEMPLATE_STRING_LITERAL;
 				token_length_in_chars = 0;
 				while (TRUE) {
+					gboolean _tmp51_ = FALSE;
 					gboolean _tmp52_ = FALSE;
-					gboolean _tmp53_ = FALSE;
+					gchar* _tmp53_;
 					gchar* _tmp54_;
-					gchar* _tmp55_;
-					gboolean _tmp58_;
-					gboolean _tmp61_;
-					gchar* _tmp62_;
-					gchar _tmp63_;
-					_tmp54_ = self->priv->current;
-					_tmp55_ = self->priv->end;
-					if (_tmp54_ < _tmp55_) {
-						gchar* _tmp56_;
-						gchar _tmp57_;
-						_tmp56_ = self->priv->current;
-						_tmp57_ = _tmp56_[0];
-						_tmp53_ = _tmp57_ != '"';
+					gboolean _tmp57_;
+					gboolean _tmp60_;
+					gchar* _tmp61_;
+					gchar _tmp62_;
+					_tmp53_ = self->priv->current;
+					_tmp54_ = self->priv->end;
+					if (_tmp53_ < _tmp54_) {
+						gchar* _tmp55_;
+						gchar _tmp56_;
+						_tmp55_ = self->priv->current;
+						_tmp56_ = _tmp55_[0];
+						_tmp52_ = _tmp56_ != '"';
 					} else {
-						_tmp53_ = FALSE;
+						_tmp52_ = FALSE;
 					}
-					_tmp58_ = _tmp53_;
-					if (_tmp58_) {
-						gchar* _tmp59_;
-						gchar _tmp60_;
-						_tmp59_ = self->priv->current;
-						_tmp60_ = _tmp59_[0];
-						_tmp52_ = _tmp60_ != '$';
+					_tmp57_ = _tmp52_;
+					if (_tmp57_) {
+						gchar* _tmp58_;
+						gchar _tmp59_;
+						_tmp58_ = self->priv->current;
+						_tmp59_ = _tmp58_[0];
+						_tmp51_ = _tmp59_ != '$';
 					} else {
-						_tmp52_ = FALSE;
+						_tmp51_ = FALSE;
 					}
-					_tmp61_ = _tmp52_;
-					if (!_tmp61_) {
+					_tmp60_ = _tmp51_;
+					if (!_tmp60_) {
 						break;
 					}
-					_tmp62_ = self->priv->current;
-					_tmp63_ = _tmp62_[0];
-					if (_tmp63_ == '\\') {
-						gchar* _tmp64_;
-						gint _tmp65_;
+					_tmp61_ = self->priv->current;
+					_tmp62_ = _tmp61_[0];
+					if (_tmp62_ == '\\') {
+						gchar* _tmp63_;
+						gint _tmp64_;
+						gchar* _tmp65_;
 						gchar* _tmp66_;
 						gchar* _tmp67_;
-						gchar* _tmp68_;
-						gchar _tmp69_;
-						_tmp64_ = self->priv->current;
-						self->priv->current = _tmp64_ + 1;
-						_tmp65_ = token_length_in_chars;
-						token_length_in_chars = _tmp65_ + 1;
-						_tmp66_ = self->priv->current;
-						_tmp67_ = self->priv->end;
-						if (_tmp66_ >= _tmp67_) {
+						gchar _tmp68_;
+						_tmp63_ = self->priv->current;
+						self->priv->current = _tmp63_ + 1;
+						_tmp64_ = token_length_in_chars;
+						token_length_in_chars = _tmp64_ + 1;
+						_tmp65_ = self->priv->current;
+						_tmp66_ = self->priv->end;
+						if (_tmp65_ >= _tmp66_) {
 							break;
 						}
-						_tmp68_ = self->priv->current;
-						_tmp69_ = _tmp68_[0];
-						switch (_tmp69_) {
+						_tmp67_ = self->priv->current;
+						_tmp68_ = _tmp67_[0];
+						switch (_tmp68_) {
 							case '\'':
 							case '"':
 							case '\\':
@@ -2898,177 +2891,177 @@ ValaTokenType vala_scanner_read_template_token (ValaScanner* self, ValaSourceLoc
 							case 'r':
 							case 't':
 							{
-								gchar* _tmp70_;
-								gint _tmp71_;
-								_tmp70_ = self->priv->current;
-								self->priv->current = _tmp70_ + 1;
-								_tmp71_ = token_length_in_chars;
-								token_length_in_chars = _tmp71_ + 1;
+								gchar* _tmp69_;
+								gint _tmp70_;
+								_tmp69_ = self->priv->current;
+								self->priv->current = _tmp69_ + 1;
+								_tmp70_ = token_length_in_chars;
+								token_length_in_chars = _tmp70_ + 1;
 								break;
 							}
 							case 'x':
 							{
-								gchar* _tmp72_;
-								gint _tmp73_;
-								_tmp72_ = self->priv->current;
-								self->priv->current = _tmp72_ + 1;
-								_tmp73_ = token_length_in_chars;
-								token_length_in_chars = _tmp73_ + 1;
+								gchar* _tmp71_;
+								gint _tmp72_;
+								_tmp71_ = self->priv->current;
+								self->priv->current = _tmp71_ + 1;
+								_tmp72_ = token_length_in_chars;
+								token_length_in_chars = _tmp72_ + 1;
 								while (TRUE) {
-									gboolean _tmp74_ = FALSE;
+									gboolean _tmp73_ = FALSE;
+									gchar* _tmp74_;
 									gchar* _tmp75_;
-									gchar* _tmp76_;
-									gboolean _tmp80_;
-									gchar* _tmp81_;
-									gint _tmp82_;
-									_tmp75_ = self->priv->current;
-									_tmp76_ = self->priv->end;
-									if (_tmp75_ < _tmp76_) {
-										gchar* _tmp77_;
-										gchar _tmp78_;
-										gboolean _tmp79_ = FALSE;
-										_tmp77_ = self->priv->current;
-										_tmp78_ = _tmp77_[0];
-										_tmp79_ = g_ascii_isxdigit (_tmp78_);
-										_tmp74_ = _tmp79_;
+									gboolean _tmp79_;
+									gchar* _tmp80_;
+									gint _tmp81_;
+									_tmp74_ = self->priv->current;
+									_tmp75_ = self->priv->end;
+									if (_tmp74_ < _tmp75_) {
+										gchar* _tmp76_;
+										gchar _tmp77_;
+										gboolean _tmp78_ = FALSE;
+										_tmp76_ = self->priv->current;
+										_tmp77_ = _tmp76_[0];
+										_tmp78_ = g_ascii_isxdigit (_tmp77_);
+										_tmp73_ = _tmp78_;
 									} else {
-										_tmp74_ = FALSE;
+										_tmp73_ = FALSE;
 									}
-									_tmp80_ = _tmp74_;
-									if (!_tmp80_) {
+									_tmp79_ = _tmp73_;
+									if (!_tmp79_) {
 										break;
 									}
-									_tmp81_ = self->priv->current;
-									self->priv->current = _tmp81_ + 1;
-									_tmp82_ = token_length_in_chars;
-									token_length_in_chars = _tmp82_ + 1;
+									_tmp80_ = self->priv->current;
+									self->priv->current = _tmp80_ + 1;
+									_tmp81_ = token_length_in_chars;
+									token_length_in_chars = _tmp81_ + 1;
 								}
 								break;
 							}
 							default:
 							{
-								ValaSourceFile* _tmp83_;
+								ValaSourceFile* _tmp82_;
+								gint _tmp83_;
 								gint _tmp84_;
 								gint _tmp85_;
 								gint _tmp86_;
 								gint _tmp87_;
 								gint _tmp88_;
-								gint _tmp89_;
+								ValaSourceReference* _tmp89_;
 								ValaSourceReference* _tmp90_;
-								ValaSourceReference* _tmp91_;
-								_tmp83_ = self->priv->_source_file;
-								_tmp84_ = self->priv->line;
-								_tmp85_ = self->priv->column;
-								_tmp86_ = token_length_in_chars;
-								_tmp87_ = self->priv->line;
-								_tmp88_ = self->priv->column;
-								_tmp89_ = token_length_in_chars;
-								_tmp90_ = vala_source_reference_new (_tmp83_, _tmp84_, _tmp85_ + _tmp86_, _tmp87_, _tmp88_ + _tmp89_);
-								_tmp91_ = _tmp90_;
-								vala_report_error (_tmp91_, "invalid escape sequence");
-								_vala_source_reference_unref0 (_tmp91_);
+								_tmp82_ = self->priv->_source_file;
+								_tmp83_ = self->priv->line;
+								_tmp84_ = self->priv->column;
+								_tmp85_ = token_length_in_chars;
+								_tmp86_ = self->priv->line;
+								_tmp87_ = self->priv->column;
+								_tmp88_ = token_length_in_chars;
+								_tmp89_ = vala_source_reference_new (_tmp82_, _tmp83_, _tmp84_ + _tmp85_, _tmp86_, _tmp87_ + _tmp88_);
+								_tmp90_ = _tmp89_;
+								vala_report_error (_tmp90_, "invalid escape sequence");
+								_vala_source_reference_unref0 (_tmp90_);
 								break;
 							}
 						}
 					} else {
-						gchar* _tmp92_;
-						gchar _tmp93_;
-						_tmp92_ = self->priv->current;
-						_tmp93_ = _tmp92_[0];
-						if (_tmp93_ == '\n') {
-							gchar* _tmp94_;
-							gint _tmp95_;
-							_tmp94_ = self->priv->current;
-							self->priv->current = _tmp94_ + 1;
-							_tmp95_ = self->priv->line;
-							self->priv->line = _tmp95_ + 1;
+						gchar* _tmp91_;
+						gchar _tmp92_;
+						_tmp91_ = self->priv->current;
+						_tmp92_ = _tmp91_[0];
+						if (_tmp92_ == '\n') {
+							gchar* _tmp93_;
+							gint _tmp94_;
+							_tmp93_ = self->priv->current;
+							self->priv->current = _tmp93_ + 1;
+							_tmp94_ = self->priv->line;
+							self->priv->line = _tmp94_ + 1;
 							self->priv->column = 1;
 							token_length_in_chars = 1;
 						} else {
+							gchar* _tmp95_;
 							gchar* _tmp96_;
 							gchar* _tmp97_;
-							gchar* _tmp98_;
-							gunichar _tmp99_ = 0U;
+							gunichar _tmp98_ = 0U;
 							gunichar u;
-							gunichar _tmp100_;
-							_tmp96_ = self->priv->current;
-							_tmp97_ = self->priv->end;
-							_tmp98_ = self->priv->current;
-							_tmp99_ = g_utf8_get_char_validated ((const gchar*) _tmp96_, (gssize) ((glong) (_tmp97_ - _tmp98_)));
-							u = _tmp99_;
-							_tmp100_ = u;
-							if (_tmp100_ != ((gunichar) (-1))) {
-								gchar* _tmp101_;
-								gunichar _tmp102_;
-								gint _tmp103_ = 0;
-								gint _tmp104_;
-								_tmp101_ = self->priv->current;
-								_tmp102_ = u;
-								_tmp103_ = g_unichar_to_utf8 (_tmp102_, NULL);
-								self->priv->current = _tmp101_ + _tmp103_;
-								_tmp104_ = token_length_in_chars;
-								token_length_in_chars = _tmp104_ + 1;
+							gunichar _tmp99_;
+							_tmp95_ = self->priv->current;
+							_tmp96_ = self->priv->end;
+							_tmp97_ = self->priv->current;
+							_tmp98_ = g_utf8_get_char_validated ((const gchar*) _tmp95_, (gssize) ((glong) (_tmp96_ - _tmp97_)));
+							u = _tmp98_;
+							_tmp99_ = u;
+							if (_tmp99_ != ((gunichar) (-1))) {
+								gchar* _tmp100_;
+								gunichar _tmp101_;
+								gint _tmp102_ = 0;
+								gint _tmp103_;
+								_tmp100_ = self->priv->current;
+								_tmp101_ = u;
+								_tmp102_ = g_unichar_to_utf8 (_tmp101_, NULL);
+								self->priv->current = _tmp100_ + _tmp102_;
+								_tmp103_ = token_length_in_chars;
+								token_length_in_chars = _tmp103_ + 1;
 							} else {
-								gchar* _tmp105_;
-								ValaSourceFile* _tmp106_;
+								gchar* _tmp104_;
+								ValaSourceFile* _tmp105_;
+								gint _tmp106_;
 								gint _tmp107_;
 								gint _tmp108_;
 								gint _tmp109_;
 								gint _tmp110_;
 								gint _tmp111_;
-								gint _tmp112_;
+								ValaSourceReference* _tmp112_;
 								ValaSourceReference* _tmp113_;
-								ValaSourceReference* _tmp114_;
-								_tmp105_ = self->priv->current;
-								self->priv->current = _tmp105_ + 1;
-								_tmp106_ = self->priv->_source_file;
-								_tmp107_ = self->priv->line;
-								_tmp108_ = self->priv->column;
-								_tmp109_ = token_length_in_chars;
-								_tmp110_ = self->priv->line;
-								_tmp111_ = self->priv->column;
-								_tmp112_ = token_length_in_chars;
-								_tmp113_ = vala_source_reference_new (_tmp106_, _tmp107_, _tmp108_ + _tmp109_, _tmp110_, _tmp111_ + _tmp112_);
-								_tmp114_ = _tmp113_;
-								vala_report_error (_tmp114_, "invalid UTF-8 character");
-								_vala_source_reference_unref0 (_tmp114_);
+								_tmp104_ = self->priv->current;
+								self->priv->current = _tmp104_ + 1;
+								_tmp105_ = self->priv->_source_file;
+								_tmp106_ = self->priv->line;
+								_tmp107_ = self->priv->column;
+								_tmp108_ = token_length_in_chars;
+								_tmp109_ = self->priv->line;
+								_tmp110_ = self->priv->column;
+								_tmp111_ = token_length_in_chars;
+								_tmp112_ = vala_source_reference_new (_tmp105_, _tmp106_, _tmp107_ + _tmp108_, _tmp109_, _tmp110_ + _tmp111_);
+								_tmp113_ = _tmp112_;
+								vala_report_error (_tmp113_, "invalid UTF-8 character");
+								_vala_source_reference_unref0 (_tmp113_);
 							}
 						}
 					}
 				}
-				_tmp115_ = self->priv->current;
-				_tmp116_ = self->priv->end;
-				if (_tmp115_ >= _tmp116_) {
-					ValaSourceFile* _tmp117_;
+				_tmp114_ = self->priv->current;
+				_tmp115_ = self->priv->end;
+				if (_tmp114_ >= _tmp115_) {
+					ValaSourceFile* _tmp116_;
+					gint _tmp117_;
 					gint _tmp118_;
 					gint _tmp119_;
 					gint _tmp120_;
 					gint _tmp121_;
 					gint _tmp122_;
-					gint _tmp123_;
+					ValaSourceReference* _tmp123_;
 					ValaSourceReference* _tmp124_;
-					ValaSourceReference* _tmp125_;
-					gint _tmp126_;
+					gint _tmp125_;
+					ValaSourceLocation _tmp126_ = {0};
 					ValaSourceLocation _tmp127_ = {0};
-					ValaSourceLocation _tmp128_ = {0};
-					ValaTokenType _tmp129_ = 0;
-					_tmp117_ = self->priv->_source_file;
-					_tmp118_ = self->priv->line;
-					_tmp119_ = self->priv->column;
-					_tmp120_ = token_length_in_chars;
-					_tmp121_ = self->priv->line;
-					_tmp122_ = self->priv->column;
-					_tmp123_ = token_length_in_chars;
-					_tmp124_ = vala_source_reference_new (_tmp117_, _tmp118_, _tmp119_ + _tmp120_, _tmp121_, _tmp122_ + _tmp123_);
-					_tmp125_ = _tmp124_;
-					vala_report_error (_tmp125_, "syntax error, expected \"");
-					_vala_source_reference_unref0 (_tmp125_);
-					_tmp126_ = self->priv->state_stack_length1;
-					self->priv->state_stack_length1 = _tmp126_ - 1;
-					_tmp129_ = vala_scanner_read_token (self, &_tmp127_, &_tmp128_);
-					_vala_token_begin = _tmp127_;
-					_vala_token_end = _tmp128_;
-					result = _tmp129_;
+					ValaTokenType _tmp128_ = 0;
+					_tmp116_ = self->priv->_source_file;
+					_tmp117_ = self->priv->line;
+					_tmp118_ = self->priv->column;
+					_tmp119_ = token_length_in_chars;
+					_tmp120_ = self->priv->line;
+					_tmp121_ = self->priv->column;
+					_tmp122_ = token_length_in_chars;
+					_tmp123_ = vala_source_reference_new (_tmp116_, _tmp117_, _tmp118_ + _tmp119_, _tmp120_, _tmp121_ + _tmp122_);
+					_tmp124_ = _tmp123_;
+					vala_report_error (_tmp124_, "syntax error, expected \"");
+					_vala_source_reference_unref0 (_tmp124_);
+					_tmp125_ = self->priv->state_stack_length1;
+					self->priv->state_stack_length1 = _tmp125_ - 1;
+					_tmp128_ = vala_scanner_read_token (self, &_tmp126_, &_tmp127_);
+					_vala_token_begin = _tmp126_;
+					_vala_token_end = _tmp127_;
+					result = _tmp128_;
 					if (token_begin) {
 						*token_begin = _vala_token_begin;
 					}
@@ -3077,34 +3070,33 @@ ValaTokenType vala_scanner_read_template_token (ValaScanner* self, ValaSourceLoc
 					}
 					return result;
 				}
-				_tmp130_ = self->priv->state_stack;
-				_tmp130__length1 = self->priv->state_stack_length1;
+				_tmp129_ = self->priv->state_stack;
+				_tmp129__length1 = self->priv->state_stack_length1;
 				_vala_array_add16 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_SCANNER_STATE_TEMPLATE_PART);
 				break;
 			}
 		}
 	}
-	_tmp131_ = token_length_in_chars;
-	if (_tmp131_ < 0) {
-		gint _tmp132_;
+	_tmp130_ = token_length_in_chars;
+	if (_tmp130_ < 0) {
+		gint _tmp131_;
+		gchar* _tmp132_;
 		gchar* _tmp133_;
-		gchar* _tmp134_;
-		_tmp132_ = self->priv->column;
-		_tmp133_ = self->priv->current;
-		_tmp134_ = begin;
-		self->priv->column = _tmp132_ + ((gint) (_tmp133_ - _tmp134_));
+		_tmp131_ = self->priv->column;
+		_tmp132_ = self->priv->current;
+		_tmp133_ = begin;
+		self->priv->column = _tmp131_ + ((gint) (_tmp132_ - _tmp133_));
 	} else {
+		gint _tmp134_;
 		gint _tmp135_;
-		gint _tmp136_;
-		_tmp135_ = self->priv->column;
-		_tmp136_ = token_length_in_chars;
-		self->priv->column = _tmp135_ + _tmp136_;
+		_tmp134_ = self->priv->column;
+		_tmp135_ = token_length_in_chars;
+		self->priv->column = _tmp134_ + _tmp135_;
 	}
-	_tmp137_ = self->priv->current;
-	_tmp138_ = self->priv->line;
-	_tmp139_ = self->priv->column;
-	vala_source_location_init (&_tmp140_, _tmp137_, _tmp138_, _tmp139_ - 1);
-	_vala_token_end = _tmp140_;
+	_tmp136_ = self->priv->current;
+	_tmp137_ = self->priv->line;
+	_tmp138_ = self->priv->column;
+	vala_source_location_init (&_vala_token_end, _tmp136_, _tmp137_, _tmp138_ - 1);
 	result = type;
 	if (token_begin) {
 		*token_begin = _vala_token_begin;
@@ -3176,21 +3168,19 @@ ValaTokenType vala_scanner_read_token (ValaScanner* self, ValaSourceLocation* to
 	ValaTokenType result = 0;
 	gboolean _tmp0_ = FALSE;
 	ValaTokenType type = 0;
-	gchar* _tmp18_;
+	gchar* _tmp16_;
 	gchar* begin;
-	gchar* _tmp19_;
-	gint _tmp20_;
-	gint _tmp21_;
-	ValaSourceLocation _tmp22_ = {0};
+	gchar* _tmp17_;
+	gint _tmp18_;
+	gint _tmp19_;
 	gint token_length_in_chars;
-	gchar* _tmp23_;
-	gchar* _tmp24_;
-	gint _tmp434_;
-	gchar* _tmp440_;
-	gint _tmp441_;
-	gint _tmp442_;
-	ValaSourceLocation _tmp443_ = {0};
-	ValaTokenType _tmp444_;
+	gchar* _tmp20_;
+	gchar* _tmp21_;
+	gint _tmp431_;
+	gchar* _tmp437_;
+	gint _tmp438_;
+	gint _tmp439_;
+	ValaTokenType _tmp440_;
 	g_return_val_if_fail (self != NULL, 0);
 	_tmp0_ = vala_scanner_in_template (self);
 	if (_tmp0_) {
@@ -3216,23 +3206,19 @@ ValaTokenType vala_scanner_read_token (ValaScanner* self, ValaSourceLocation* to
 			gchar* _tmp6_;
 			gint _tmp7_;
 			gint _tmp8_;
-			ValaSourceLocation _tmp9_ = {0};
-			gchar* _tmp10_;
+			gchar* _tmp9_;
+			gint _tmp10_;
 			gint _tmp11_;
-			gint _tmp12_;
-			ValaSourceLocation _tmp13_ = {0};
 			_tmp5_ = self->priv->state_stack_length1;
 			self->priv->state_stack_length1 = _tmp5_ - 1;
 			_tmp6_ = self->priv->current;
 			_tmp7_ = self->priv->line;
 			_tmp8_ = self->priv->column;
-			vala_source_location_init (&_tmp9_, _tmp6_, _tmp7_, _tmp8_);
-			_vala_token_begin = _tmp9_;
-			_tmp10_ = self->priv->current;
-			_tmp11_ = self->priv->line;
-			_tmp12_ = self->priv->column;
-			vala_source_location_init (&_tmp13_, _tmp10_, _tmp11_, _tmp12_ - 1);
-			_vala_token_end = _tmp13_;
+			vala_source_location_init (&_vala_token_begin, _tmp6_, _tmp7_, _tmp8_);
+			_tmp9_ = self->priv->current;
+			_tmp10_ = self->priv->line;
+			_tmp11_ = self->priv->column;
+			vala_source_location_init (&_vala_token_end, _tmp9_, _tmp10_, _tmp11_ - 1);
 			result = VALA_TOKEN_TYPE_COMMA;
 			if (token_begin) {
 				*token_begin = _vala_token_begin;
@@ -3242,16 +3228,16 @@ ValaTokenType vala_scanner_read_token (ValaScanner* self, ValaSourceLocation* to
 			}
 			return result;
 		} else {
-			gboolean _tmp14_ = FALSE;
-			_tmp14_ = vala_scanner_in_regex_literal (self);
-			if (_tmp14_) {
-				ValaSourceLocation _tmp15_ = {0};
-				ValaSourceLocation _tmp16_ = {0};
-				ValaTokenType _tmp17_ = 0;
-				_tmp17_ = vala_scanner_read_regex_token (self, &_tmp15_, &_tmp16_);
-				_vala_token_begin = _tmp15_;
-				_vala_token_end = _tmp16_;
-				result = _tmp17_;
+			gboolean _tmp12_ = FALSE;
+			_tmp12_ = vala_scanner_in_regex_literal (self);
+			if (_tmp12_) {
+				ValaSourceLocation _tmp13_ = {0};
+				ValaSourceLocation _tmp14_ = {0};
+				ValaTokenType _tmp15_ = 0;
+				_tmp15_ = vala_scanner_read_regex_token (self, &_tmp13_, &_tmp14_);
+				_vala_token_begin = _tmp13_;
+				_vala_token_end = _tmp14_;
+				result = _tmp15_;
 				if (token_begin) {
 					*token_begin = _vala_token_begin;
 				}
@@ -3263,428 +3249,427 @@ ValaTokenType vala_scanner_read_token (ValaScanner* self, ValaSourceLocation* to
 		}
 	}
 	vala_scanner_space (self);
-	_tmp18_ = self->priv->current;
-	begin = _tmp18_;
-	_tmp19_ = begin;
-	_tmp20_ = self->priv->line;
-	_tmp21_ = self->priv->column;
-	vala_source_location_init (&_tmp22_, _tmp19_, _tmp20_, _tmp21_);
-	_vala_token_begin = _tmp22_;
+	_tmp16_ = self->priv->current;
+	begin = _tmp16_;
+	_tmp17_ = begin;
+	_tmp18_ = self->priv->line;
+	_tmp19_ = self->priv->column;
+	vala_source_location_init (&_vala_token_begin, _tmp17_, _tmp18_, _tmp19_);
 	token_length_in_chars = -1;
-	_tmp23_ = self->priv->current;
-	_tmp24_ = self->priv->end;
-	if (_tmp23_ >= _tmp24_) {
+	_tmp20_ = self->priv->current;
+	_tmp21_ = self->priv->end;
+	if (_tmp20_ >= _tmp21_) {
 		type = VALA_TOKEN_TYPE_EOF;
 	} else {
+		gboolean _tmp22_ = FALSE;
+		gchar* _tmp23_;
+		gchar _tmp24_;
 		gboolean _tmp25_ = FALSE;
-		gchar* _tmp26_;
-		gchar _tmp27_;
-		gboolean _tmp28_ = FALSE;
-		gboolean _tmp31_;
-		_tmp26_ = self->priv->current;
-		_tmp27_ = _tmp26_[0];
-		_tmp28_ = g_ascii_isalpha (_tmp27_);
-		if (_tmp28_) {
-			_tmp25_ = TRUE;
+		gboolean _tmp28_;
+		_tmp23_ = self->priv->current;
+		_tmp24_ = _tmp23_[0];
+		_tmp25_ = g_ascii_isalpha (_tmp24_);
+		if (_tmp25_) {
+			_tmp22_ = TRUE;
 		} else {
-			gchar* _tmp29_;
-			gchar _tmp30_;
-			_tmp29_ = self->priv->current;
-			_tmp30_ = _tmp29_[0];
-			_tmp25_ = _tmp30_ == '_';
+			gchar* _tmp26_;
+			gchar _tmp27_;
+			_tmp26_ = self->priv->current;
+			_tmp27_ = _tmp26_[0];
+			_tmp22_ = _tmp27_ == '_';
 		}
-		_tmp31_ = _tmp25_;
-		if (_tmp31_) {
+		_tmp28_ = _tmp22_;
+		if (_tmp28_) {
 			gint len;
-			gchar* _tmp41_;
-			gint _tmp42_;
-			ValaTokenType _tmp43_ = 0;
+			gchar* _tmp38_;
+			gint _tmp39_;
+			ValaTokenType _tmp40_ = 0;
 			len = 0;
 			while (TRUE) {
-				gboolean _tmp32_ = FALSE;
-				gchar* _tmp33_;
-				gchar* _tmp34_;
-				gboolean _tmp38_;
-				gchar* _tmp39_;
-				gint _tmp40_;
-				_tmp33_ = self->priv->current;
-				_tmp34_ = self->priv->end;
-				if (_tmp33_ < _tmp34_) {
-					gchar* _tmp35_;
-					gchar _tmp36_;
-					gboolean _tmp37_ = FALSE;
-					_tmp35_ = self->priv->current;
-					_tmp36_ = _tmp35_[0];
-					_tmp37_ = vala_scanner_is_ident_char (self, _tmp36_);
-					_tmp32_ = _tmp37_;
+				gboolean _tmp29_ = FALSE;
+				gchar* _tmp30_;
+				gchar* _tmp31_;
+				gboolean _tmp35_;
+				gchar* _tmp36_;
+				gint _tmp37_;
+				_tmp30_ = self->priv->current;
+				_tmp31_ = self->priv->end;
+				if (_tmp30_ < _tmp31_) {
+					gchar* _tmp32_;
+					gchar _tmp33_;
+					gboolean _tmp34_ = FALSE;
+					_tmp32_ = self->priv->current;
+					_tmp33_ = _tmp32_[0];
+					_tmp34_ = vala_scanner_is_ident_char (self, _tmp33_);
+					_tmp29_ = _tmp34_;
 				} else {
-					_tmp32_ = FALSE;
+					_tmp29_ = FALSE;
 				}
-				_tmp38_ = _tmp32_;
-				if (!_tmp38_) {
+				_tmp35_ = _tmp29_;
+				if (!_tmp35_) {
 					break;
 				}
-				_tmp39_ = self->priv->current;
-				self->priv->current = _tmp39_ + 1;
-				_tmp40_ = len;
-				len = _tmp40_ + 1;
+				_tmp36_ = self->priv->current;
+				self->priv->current = _tmp36_ + 1;
+				_tmp37_ = len;
+				len = _tmp37_ + 1;
 			}
-			_tmp41_ = begin;
-			_tmp42_ = len;
-			_tmp43_ = vala_scanner_get_identifier_or_keyword (_tmp41_, _tmp42_);
-			type = _tmp43_;
+			_tmp38_ = begin;
+			_tmp39_ = len;
+			_tmp40_ = vala_scanner_get_identifier_or_keyword (_tmp38_, _tmp39_);
+			type = _tmp40_;
 		} else {
-			gboolean _tmp44_ = FALSE;
-			gchar* _tmp45_;
-			gchar _tmp46_;
-			gboolean _tmp52_;
-			_tmp45_ = self->priv->current;
-			_tmp46_ = _tmp45_[0];
-			if (_tmp46_ == '@') {
-				ValaSourceFile* _tmp47_;
-				ValaCodeContext* _tmp48_;
-				ValaCodeContext* _tmp49_;
-				ValaProfile _tmp50_;
-				ValaProfile _tmp51_;
-				_tmp47_ = self->priv->_source_file;
-				_tmp48_ = vala_source_file_get_context (_tmp47_);
-				_tmp49_ = _tmp48_;
-				_tmp50_ = vala_code_context_get_profile (_tmp49_);
-				_tmp51_ = _tmp50_;
-				_tmp44_ = _tmp51_ != VALA_PROFILE_DOVA;
+			gboolean _tmp41_ = FALSE;
+			gchar* _tmp42_;
+			gchar _tmp43_;
+			gboolean _tmp49_;
+			_tmp42_ = self->priv->current;
+			_tmp43_ = _tmp42_[0];
+			if (_tmp43_ == '@') {
+				ValaSourceFile* _tmp44_;
+				ValaCodeContext* _tmp45_;
+				ValaCodeContext* _tmp46_;
+				ValaProfile _tmp47_;
+				ValaProfile _tmp48_;
+				_tmp44_ = self->priv->_source_file;
+				_tmp45_ = vala_source_file_get_context (_tmp44_);
+				_tmp46_ = _tmp45_;
+				_tmp47_ = vala_code_context_get_profile (_tmp46_);
+				_tmp48_ = _tmp47_;
+				_tmp41_ = _tmp48_ != VALA_PROFILE_DOVA;
 			} else {
-				_tmp44_ = FALSE;
+				_tmp41_ = FALSE;
 			}
-			_tmp52_ = _tmp44_;
-			if (_tmp52_) {
-				gboolean _tmp53_ = FALSE;
-				gchar* _tmp54_;
-				gchar* _tmp55_;
-				gboolean _tmp58_;
-				_tmp54_ = self->priv->current;
-				_tmp55_ = self->priv->end;
-				if (_tmp54_ < (_tmp55_ - 1)) {
-					gchar* _tmp56_;
-					gchar _tmp57_;
-					_tmp56_ = self->priv->current;
-					_tmp57_ = _tmp56_[1];
-					_tmp53_ = _tmp57_ == '"';
+			_tmp49_ = _tmp41_;
+			if (_tmp49_) {
+				gboolean _tmp50_ = FALSE;
+				gchar* _tmp51_;
+				gchar* _tmp52_;
+				gboolean _tmp55_;
+				_tmp51_ = self->priv->current;
+				_tmp52_ = self->priv->end;
+				if (_tmp51_ < (_tmp52_ - 1)) {
+					gchar* _tmp53_;
+					gchar _tmp54_;
+					_tmp53_ = self->priv->current;
+					_tmp54_ = _tmp53_[1];
+					_tmp50_ = _tmp54_ == '"';
 				} else {
-					_tmp53_ = FALSE;
+					_tmp50_ = FALSE;
 				}
-				_tmp58_ = _tmp53_;
-				if (_tmp58_) {
-					gchar* _tmp59_;
-					ValaScannerState* _tmp60_;
-					gint _tmp60__length1;
+				_tmp55_ = _tmp50_;
+				if (_tmp55_) {
+					gchar* _tmp56_;
+					ValaScannerState* _tmp57_;
+					gint _tmp57__length1;
 					type = VALA_TOKEN_TYPE_OPEN_TEMPLATE;
-					_tmp59_ = self->priv->current;
-					self->priv->current = _tmp59_ + 2;
-					_tmp60_ = self->priv->state_stack;
-					_tmp60__length1 = self->priv->state_stack_length1;
+					_tmp56_ = self->priv->current;
+					self->priv->current = _tmp56_ + 2;
+					_tmp57_ = self->priv->state_stack;
+					_tmp57__length1 = self->priv->state_stack_length1;
 					_vala_array_add17 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_SCANNER_STATE_TEMPLATE);
 				} else {
-					gchar* _tmp61_;
-					gchar* _tmp62_;
+					gchar* _tmp58_;
+					gchar* _tmp59_;
 					gint len;
-					_tmp61_ = _vala_token_begin.pos;
-					_vala_token_begin.pos = _tmp61_ + 1;
-					_tmp62_ = self->priv->current;
-					self->priv->current = _tmp62_ + 1;
+					_tmp58_ = _vala_token_begin.pos;
+					_vala_token_begin.pos = _tmp58_ + 1;
+					_tmp59_ = self->priv->current;
+					self->priv->current = _tmp59_ + 1;
 					len = 0;
 					while (TRUE) {
-						gboolean _tmp63_ = FALSE;
-						gchar* _tmp64_;
-						gchar* _tmp65_;
-						gboolean _tmp69_;
-						gchar* _tmp70_;
-						gint _tmp71_;
-						_tmp64_ = self->priv->current;
-						_tmp65_ = self->priv->end;
-						if (_tmp64_ < _tmp65_) {
-							gchar* _tmp66_;
-							gchar _tmp67_;
-							gboolean _tmp68_ = FALSE;
-							_tmp66_ = self->priv->current;
-							_tmp67_ = _tmp66_[0];
-							_tmp68_ = vala_scanner_is_ident_char (self, _tmp67_);
-							_tmp63_ = _tmp68_;
+						gboolean _tmp60_ = FALSE;
+						gchar* _tmp61_;
+						gchar* _tmp62_;
+						gboolean _tmp66_;
+						gchar* _tmp67_;
+						gint _tmp68_;
+						_tmp61_ = self->priv->current;
+						_tmp62_ = self->priv->end;
+						if (_tmp61_ < _tmp62_) {
+							gchar* _tmp63_;
+							gchar _tmp64_;
+							gboolean _tmp65_ = FALSE;
+							_tmp63_ = self->priv->current;
+							_tmp64_ = _tmp63_[0];
+							_tmp65_ = vala_scanner_is_ident_char (self, _tmp64_);
+							_tmp60_ = _tmp65_;
 						} else {
-							_tmp63_ = FALSE;
+							_tmp60_ = FALSE;
 						}
-						_tmp69_ = _tmp63_;
-						if (!_tmp69_) {
+						_tmp66_ = _tmp60_;
+						if (!_tmp66_) {
 							break;
 						}
-						_tmp70_ = self->priv->current;
-						self->priv->current = _tmp70_ + 1;
-						_tmp71_ = len;
-						len = _tmp71_ + 1;
+						_tmp67_ = self->priv->current;
+						self->priv->current = _tmp67_ + 1;
+						_tmp68_ = len;
+						len = _tmp68_ + 1;
 					}
 					type = VALA_TOKEN_TYPE_IDENTIFIER;
 				}
 			} else {
-				gchar* _tmp72_;
-				gchar _tmp73_;
-				gboolean _tmp74_ = FALSE;
-				_tmp72_ = self->priv->current;
-				_tmp73_ = _tmp72_[0];
-				_tmp74_ = g_ascii_isdigit (_tmp73_);
-				if (_tmp74_) {
-					ValaTokenType _tmp75_ = 0;
-					_tmp75_ = vala_scanner_read_number (self);
-					type = _tmp75_;
+				gchar* _tmp69_;
+				gchar _tmp70_;
+				gboolean _tmp71_ = FALSE;
+				_tmp69_ = self->priv->current;
+				_tmp70_ = _tmp69_[0];
+				_tmp71_ = g_ascii_isdigit (_tmp70_);
+				if (_tmp71_) {
+					ValaTokenType _tmp72_ = 0;
+					_tmp72_ = vala_scanner_read_number (self);
+					type = _tmp72_;
 				} else {
-					gchar* _tmp76_;
-					gchar _tmp77_;
-					_tmp76_ = self->priv->current;
-					_tmp77_ = _tmp76_[0];
-					switch (_tmp77_) {
+					gchar* _tmp73_;
+					gchar _tmp74_;
+					_tmp73_ = self->priv->current;
+					_tmp74_ = _tmp73_[0];
+					switch (_tmp74_) {
 						case '{':
 						{
-							gchar* _tmp78_;
-							ValaScannerState* _tmp79_;
-							gint _tmp79__length1;
+							gchar* _tmp75_;
+							ValaScannerState* _tmp76_;
+							gint _tmp76__length1;
 							type = VALA_TOKEN_TYPE_OPEN_BRACE;
-							_tmp78_ = self->priv->current;
-							self->priv->current = _tmp78_ + 1;
-							_tmp79_ = self->priv->state_stack;
-							_tmp79__length1 = self->priv->state_stack_length1;
+							_tmp75_ = self->priv->current;
+							self->priv->current = _tmp75_ + 1;
+							_tmp76_ = self->priv->state_stack;
+							_tmp76__length1 = self->priv->state_stack_length1;
 							_vala_array_add18 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_SCANNER_STATE_BRACE);
 							break;
 						}
 						case '}':
 						{
-							gchar* _tmp80_;
-							ValaScannerState* _tmp81_;
-							gint _tmp81__length1;
+							gchar* _tmp77_;
+							ValaScannerState* _tmp78_;
+							gint _tmp78__length1;
 							type = VALA_TOKEN_TYPE_CLOSE_BRACE;
-							_tmp80_ = self->priv->current;
-							self->priv->current = _tmp80_ + 1;
-							_tmp81_ = self->priv->state_stack;
-							_tmp81__length1 = self->priv->state_stack_length1;
-							if (_tmp81__length1 > 0) {
-								gint _tmp82_;
-								_tmp82_ = self->priv->state_stack_length1;
-								self->priv->state_stack_length1 = _tmp82_ - 1;
+							_tmp77_ = self->priv->current;
+							self->priv->current = _tmp77_ + 1;
+							_tmp78_ = self->priv->state_stack;
+							_tmp78__length1 = self->priv->state_stack_length1;
+							if (_tmp78__length1 > 0) {
+								gint _tmp79_;
+								_tmp79_ = self->priv->state_stack_length1;
+								self->priv->state_stack_length1 = _tmp79_ - 1;
 							}
 							break;
 						}
 						case '(':
 						{
-							gchar* _tmp83_;
-							ValaScannerState* _tmp84_;
-							gint _tmp84__length1;
+							gchar* _tmp80_;
+							ValaScannerState* _tmp81_;
+							gint _tmp81__length1;
 							type = VALA_TOKEN_TYPE_OPEN_PARENS;
-							_tmp83_ = self->priv->current;
-							self->priv->current = _tmp83_ + 1;
-							_tmp84_ = self->priv->state_stack;
-							_tmp84__length1 = self->priv->state_stack_length1;
+							_tmp80_ = self->priv->current;
+							self->priv->current = _tmp80_ + 1;
+							_tmp81_ = self->priv->state_stack;
+							_tmp81__length1 = self->priv->state_stack_length1;
 							_vala_array_add19 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_SCANNER_STATE_PARENS);
 							break;
 						}
 						case ')':
 						{
-							gchar* _tmp85_;
-							ValaScannerState* _tmp86_;
-							gint _tmp86__length1;
-							gboolean _tmp88_ = FALSE;
+							gchar* _tmp82_;
+							ValaScannerState* _tmp83_;
+							gint _tmp83__length1;
+							gboolean _tmp85_ = FALSE;
 							type = VALA_TOKEN_TYPE_CLOSE_PARENS;
-							_tmp85_ = self->priv->current;
-							self->priv->current = _tmp85_ + 1;
-							_tmp86_ = self->priv->state_stack;
-							_tmp86__length1 = self->priv->state_stack_length1;
-							if (_tmp86__length1 > 0) {
-								gint _tmp87_;
-								_tmp87_ = self->priv->state_stack_length1;
-								self->priv->state_stack_length1 = _tmp87_ - 1;
+							_tmp82_ = self->priv->current;
+							self->priv->current = _tmp82_ + 1;
+							_tmp83_ = self->priv->state_stack;
+							_tmp83__length1 = self->priv->state_stack_length1;
+							if (_tmp83__length1 > 0) {
+								gint _tmp84_;
+								_tmp84_ = self->priv->state_stack_length1;
+								self->priv->state_stack_length1 = _tmp84_ - 1;
 							}
-							_tmp88_ = vala_scanner_in_template (self);
-							if (_tmp88_) {
+							_tmp85_ = vala_scanner_in_template (self);
+							if (_tmp85_) {
 								type = VALA_TOKEN_TYPE_COMMA;
 							}
 							break;
 						}
 						case '[':
 						{
-							gchar* _tmp89_;
-							ValaScannerState* _tmp90_;
-							gint _tmp90__length1;
+							gchar* _tmp86_;
+							ValaScannerState* _tmp87_;
+							gint _tmp87__length1;
 							type = VALA_TOKEN_TYPE_OPEN_BRACKET;
-							_tmp89_ = self->priv->current;
-							self->priv->current = _tmp89_ + 1;
-							_tmp90_ = self->priv->state_stack;
-							_tmp90__length1 = self->priv->state_stack_length1;
+							_tmp86_ = self->priv->current;
+							self->priv->current = _tmp86_ + 1;
+							_tmp87_ = self->priv->state_stack;
+							_tmp87__length1 = self->priv->state_stack_length1;
 							_vala_array_add20 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_SCANNER_STATE_BRACKET);
 							break;
 						}
 						case ']':
 						{
-							gchar* _tmp91_;
-							ValaScannerState* _tmp92_;
-							gint _tmp92__length1;
+							gchar* _tmp88_;
+							ValaScannerState* _tmp89_;
+							gint _tmp89__length1;
 							type = VALA_TOKEN_TYPE_CLOSE_BRACKET;
-							_tmp91_ = self->priv->current;
-							self->priv->current = _tmp91_ + 1;
-							_tmp92_ = self->priv->state_stack;
-							_tmp92__length1 = self->priv->state_stack_length1;
-							if (_tmp92__length1 > 0) {
-								gint _tmp93_;
-								_tmp93_ = self->priv->state_stack_length1;
-								self->priv->state_stack_length1 = _tmp93_ - 1;
+							_tmp88_ = self->priv->current;
+							self->priv->current = _tmp88_ + 1;
+							_tmp89_ = self->priv->state_stack;
+							_tmp89__length1 = self->priv->state_stack_length1;
+							if (_tmp89__length1 > 0) {
+								gint _tmp90_;
+								_tmp90_ = self->priv->state_stack_length1;
+								self->priv->state_stack_length1 = _tmp90_ - 1;
 							}
 							break;
 						}
 						case '.':
 						{
-							gchar* _tmp94_;
-							gchar* _tmp95_;
-							gchar* _tmp96_;
+							gchar* _tmp91_;
+							gchar* _tmp92_;
+							gchar* _tmp93_;
 							type = VALA_TOKEN_TYPE_DOT;
-							_tmp94_ = self->priv->current;
-							self->priv->current = _tmp94_ + 1;
-							_tmp95_ = self->priv->current;
-							_tmp96_ = self->priv->end;
-							if (_tmp95_ < (_tmp96_ - 1)) {
-								gboolean _tmp97_ = FALSE;
-								gchar* _tmp98_;
-								gchar _tmp99_;
-								gboolean _tmp102_;
-								_tmp98_ = self->priv->current;
-								_tmp99_ = _tmp98_[0];
-								if (_tmp99_ == '.') {
-									gchar* _tmp100_;
-									gchar _tmp101_;
-									_tmp100_ = self->priv->current;
-									_tmp101_ = _tmp100_[1];
-									_tmp97_ = _tmp101_ == '.';
+							_tmp91_ = self->priv->current;
+							self->priv->current = _tmp91_ + 1;
+							_tmp92_ = self->priv->current;
+							_tmp93_ = self->priv->end;
+							if (_tmp92_ < (_tmp93_ - 1)) {
+								gboolean _tmp94_ = FALSE;
+								gchar* _tmp95_;
+								gchar _tmp96_;
+								gboolean _tmp99_;
+								_tmp95_ = self->priv->current;
+								_tmp96_ = _tmp95_[0];
+								if (_tmp96_ == '.') {
+									gchar* _tmp97_;
+									gchar _tmp98_;
+									_tmp97_ = self->priv->current;
+									_tmp98_ = _tmp97_[1];
+									_tmp94_ = _tmp98_ == '.';
 								} else {
-									_tmp97_ = FALSE;
+									_tmp94_ = FALSE;
 								}
-								_tmp102_ = _tmp97_;
-								if (_tmp102_) {
-									gchar* _tmp103_;
+								_tmp99_ = _tmp94_;
+								if (_tmp99_) {
+									gchar* _tmp100_;
 									type = VALA_TOKEN_TYPE_ELLIPSIS;
-									_tmp103_ = self->priv->current;
-									self->priv->current = _tmp103_ + 2;
+									_tmp100_ = self->priv->current;
+									self->priv->current = _tmp100_ + 2;
 								}
 							}
 							break;
 						}
 						case ':':
 						{
+							gchar* _tmp101_;
+							gboolean _tmp102_ = FALSE;
+							gchar* _tmp103_;
 							gchar* _tmp104_;
-							gboolean _tmp105_ = FALSE;
-							gchar* _tmp106_;
-							gchar* _tmp107_;
-							gboolean _tmp110_;
+							gboolean _tmp107_;
 							type = VALA_TOKEN_TYPE_COLON;
-							_tmp104_ = self->priv->current;
-							self->priv->current = _tmp104_ + 1;
-							_tmp106_ = self->priv->current;
-							_tmp107_ = self->priv->end;
-							if (_tmp106_ < _tmp107_) {
-								gchar* _tmp108_;
-								gchar _tmp109_;
-								_tmp108_ = self->priv->current;
-								_tmp109_ = _tmp108_[0];
-								_tmp105_ = _tmp109_ == ':';
+							_tmp101_ = self->priv->current;
+							self->priv->current = _tmp101_ + 1;
+							_tmp103_ = self->priv->current;
+							_tmp104_ = self->priv->end;
+							if (_tmp103_ < _tmp104_) {
+								gchar* _tmp105_;
+								gchar _tmp106_;
+								_tmp105_ = self->priv->current;
+								_tmp106_ = _tmp105_[0];
+								_tmp102_ = _tmp106_ == ':';
 							} else {
-								_tmp105_ = FALSE;
+								_tmp102_ = FALSE;
 							}
-							_tmp110_ = _tmp105_;
-							if (_tmp110_) {
-								gchar* _tmp111_;
+							_tmp107_ = _tmp102_;
+							if (_tmp107_) {
+								gchar* _tmp108_;
 								type = VALA_TOKEN_TYPE_DOUBLE_COLON;
-								_tmp111_ = self->priv->current;
-								self->priv->current = _tmp111_ + 1;
+								_tmp108_ = self->priv->current;
+								self->priv->current = _tmp108_ + 1;
 							}
 							break;
 						}
 						case ',':
 						{
-							gchar* _tmp112_;
+							gchar* _tmp109_;
 							type = VALA_TOKEN_TYPE_COMMA;
-							_tmp112_ = self->priv->current;
-							self->priv->current = _tmp112_ + 1;
+							_tmp109_ = self->priv->current;
+							self->priv->current = _tmp109_ + 1;
 							break;
 						}
 						case ';':
 						{
-							gchar* _tmp113_;
+							gchar* _tmp110_;
 							type = VALA_TOKEN_TYPE_SEMICOLON;
-							_tmp113_ = self->priv->current;
-							self->priv->current = _tmp113_ + 1;
+							_tmp110_ = self->priv->current;
+							self->priv->current = _tmp110_ + 1;
 							break;
 						}
 						case '#':
 						{
-							gchar* _tmp114_;
+							gchar* _tmp111_;
 							type = VALA_TOKEN_TYPE_HASH;
-							_tmp114_ = self->priv->current;
-							self->priv->current = _tmp114_ + 1;
+							_tmp111_ = self->priv->current;
+							self->priv->current = _tmp111_ + 1;
 							break;
 						}
 						case '?':
 						{
+							gchar* _tmp112_;
+							gboolean _tmp113_ = FALSE;
+							gchar* _tmp114_;
 							gchar* _tmp115_;
-							gboolean _tmp116_ = FALSE;
-							gchar* _tmp117_;
-							gchar* _tmp118_;
-							gboolean _tmp121_;
+							gboolean _tmp118_;
 							type = VALA_TOKEN_TYPE_INTERR;
-							_tmp115_ = self->priv->current;
-							self->priv->current = _tmp115_ + 1;
-							_tmp117_ = self->priv->current;
-							_tmp118_ = self->priv->end;
-							if (_tmp117_ < _tmp118_) {
-								gchar* _tmp119_;
-								gchar _tmp120_;
-								_tmp119_ = self->priv->current;
-								_tmp120_ = _tmp119_[0];
-								_tmp116_ = _tmp120_ == '?';
+							_tmp112_ = self->priv->current;
+							self->priv->current = _tmp112_ + 1;
+							_tmp114_ = self->priv->current;
+							_tmp115_ = self->priv->end;
+							if (_tmp114_ < _tmp115_) {
+								gchar* _tmp116_;
+								gchar _tmp117_;
+								_tmp116_ = self->priv->current;
+								_tmp117_ = _tmp116_[0];
+								_tmp113_ = _tmp117_ == '?';
 							} else {
-								_tmp116_ = FALSE;
+								_tmp113_ = FALSE;
 							}
-							_tmp121_ = _tmp116_;
-							if (_tmp121_) {
-								gchar* _tmp122_;
+							_tmp118_ = _tmp113_;
+							if (_tmp118_) {
+								gchar* _tmp119_;
 								type = VALA_TOKEN_TYPE_OP_COALESCING;
-								_tmp122_ = self->priv->current;
-								self->priv->current = _tmp122_ + 1;
+								_tmp119_ = self->priv->current;
+								self->priv->current = _tmp119_ + 1;
 							}
 							break;
 						}
 						case '|':
 						{
-							gchar* _tmp123_;
-							gchar* _tmp124_;
-							gchar* _tmp125_;
+							gchar* _tmp120_;
+							gchar* _tmp121_;
+							gchar* _tmp122_;
 							type = VALA_TOKEN_TYPE_BITWISE_OR;
-							_tmp123_ = self->priv->current;
-							self->priv->current = _tmp123_ + 1;
-							_tmp124_ = self->priv->current;
-							_tmp125_ = self->priv->end;
-							if (_tmp124_ < _tmp125_) {
-								gchar* _tmp126_;
-								gchar _tmp127_;
-								_tmp126_ = self->priv->current;
-								_tmp127_ = _tmp126_[0];
-								switch (_tmp127_) {
+							_tmp120_ = self->priv->current;
+							self->priv->current = _tmp120_ + 1;
+							_tmp121_ = self->priv->current;
+							_tmp122_ = self->priv->end;
+							if (_tmp121_ < _tmp122_) {
+								gchar* _tmp123_;
+								gchar _tmp124_;
+								_tmp123_ = self->priv->current;
+								_tmp124_ = _tmp123_[0];
+								switch (_tmp124_) {
 									case '=':
 									{
-										gchar* _tmp128_;
+										gchar* _tmp125_;
 										type = VALA_TOKEN_TYPE_ASSIGN_BITWISE_OR;
-										_tmp128_ = self->priv->current;
-										self->priv->current = _tmp128_ + 1;
+										_tmp125_ = self->priv->current;
+										self->priv->current = _tmp125_ + 1;
 										break;
 									}
 									case '|':
 									{
-										gchar* _tmp129_;
+										gchar* _tmp126_;
 										type = VALA_TOKEN_TYPE_OP_OR;
-										_tmp129_ = self->priv->current;
-										self->priv->current = _tmp129_ + 1;
+										_tmp126_ = self->priv->current;
+										self->priv->current = _tmp126_ + 1;
 										break;
 									}
 									default:
@@ -3695,34 +3680,34 @@ ValaTokenType vala_scanner_read_token (ValaScanner* self, ValaSourceLocation* to
 						}
 						case '&':
 						{
-							gchar* _tmp130_;
-							gchar* _tmp131_;
-							gchar* _tmp132_;
+							gchar* _tmp127_;
+							gchar* _tmp128_;
+							gchar* _tmp129_;
 							type = VALA_TOKEN_TYPE_BITWISE_AND;
-							_tmp130_ = self->priv->current;
-							self->priv->current = _tmp130_ + 1;
-							_tmp131_ = self->priv->current;
-							_tmp132_ = self->priv->end;
-							if (_tmp131_ < _tmp132_) {
-								gchar* _tmp133_;
-								gchar _tmp134_;
-								_tmp133_ = self->priv->current;
-								_tmp134_ = _tmp133_[0];
-								switch (_tmp134_) {
+							_tmp127_ = self->priv->current;
+							self->priv->current = _tmp127_ + 1;
+							_tmp128_ = self->priv->current;
+							_tmp129_ = self->priv->end;
+							if (_tmp128_ < _tmp129_) {
+								gchar* _tmp130_;
+								gchar _tmp131_;
+								_tmp130_ = self->priv->current;
+								_tmp131_ = _tmp130_[0];
+								switch (_tmp131_) {
 									case '=':
 									{
-										gchar* _tmp135_;
+										gchar* _tmp132_;
 										type = VALA_TOKEN_TYPE_ASSIGN_BITWISE_AND;
-										_tmp135_ = self->priv->current;
-										self->priv->current = _tmp135_ + 1;
+										_tmp132_ = self->priv->current;
+										self->priv->current = _tmp132_ + 1;
 										break;
 									}
 									case '&':
 									{
-										gchar* _tmp136_;
+										gchar* _tmp133_;
 										type = VALA_TOKEN_TYPE_OP_AND;
-										_tmp136_ = self->priv->current;
-										self->priv->current = _tmp136_ + 1;
+										_tmp133_ = self->priv->current;
+										self->priv->current = _tmp133_ + 1;
 										break;
 									}
 									default:
@@ -3733,72 +3718,72 @@ ValaTokenType vala_scanner_read_token (ValaScanner* self, ValaSourceLocation* to
 						}
 						case '^':
 						{
+							gchar* _tmp134_;
+							gboolean _tmp135_ = FALSE;
+							gchar* _tmp136_;
 							gchar* _tmp137_;
-							gboolean _tmp138_ = FALSE;
-							gchar* _tmp139_;
-							gchar* _tmp140_;
-							gboolean _tmp143_;
+							gboolean _tmp140_;
 							type = VALA_TOKEN_TYPE_CARRET;
-							_tmp137_ = self->priv->current;
-							self->priv->current = _tmp137_ + 1;
-							_tmp139_ = self->priv->current;
-							_tmp140_ = self->priv->end;
-							if (_tmp139_ < _tmp140_) {
-								gchar* _tmp141_;
-								gchar _tmp142_;
-								_tmp141_ = self->priv->current;
-								_tmp142_ = _tmp141_[0];
-								_tmp138_ = _tmp142_ == '=';
+							_tmp134_ = self->priv->current;
+							self->priv->current = _tmp134_ + 1;
+							_tmp136_ = self->priv->current;
+							_tmp137_ = self->priv->end;
+							if (_tmp136_ < _tmp137_) {
+								gchar* _tmp138_;
+								gchar _tmp139_;
+								_tmp138_ = self->priv->current;
+								_tmp139_ = _tmp138_[0];
+								_tmp135_ = _tmp139_ == '=';
 							} else {
-								_tmp138_ = FALSE;
+								_tmp135_ = FALSE;
 							}
-							_tmp143_ = _tmp138_;
-							if (_tmp143_) {
-								gchar* _tmp144_;
+							_tmp140_ = _tmp135_;
+							if (_tmp140_) {
+								gchar* _tmp141_;
 								type = VALA_TOKEN_TYPE_ASSIGN_BITWISE_XOR;
-								_tmp144_ = self->priv->current;
-								self->priv->current = _tmp144_ + 1;
+								_tmp141_ = self->priv->current;
+								self->priv->current = _tmp141_ + 1;
 							}
 							break;
 						}
 						case '~':
 						{
-							gchar* _tmp145_;
+							gchar* _tmp142_;
 							type = VALA_TOKEN_TYPE_TILDE;
-							_tmp145_ = self->priv->current;
-							self->priv->current = _tmp145_ + 1;
+							_tmp142_ = self->priv->current;
+							self->priv->current = _tmp142_ + 1;
 							break;
 						}
 						case '=':
 						{
-							gchar* _tmp146_;
-							gchar* _tmp147_;
-							gchar* _tmp148_;
+							gchar* _tmp143_;
+							gchar* _tmp144_;
+							gchar* _tmp145_;
 							type = VALA_TOKEN_TYPE_ASSIGN;
-							_tmp146_ = self->priv->current;
-							self->priv->current = _tmp146_ + 1;
-							_tmp147_ = self->priv->current;
-							_tmp148_ = self->priv->end;
-							if (_tmp147_ < _tmp148_) {
-								gchar* _tmp149_;
-								gchar _tmp150_;
-								_tmp149_ = self->priv->current;
-								_tmp150_ = _tmp149_[0];
-								switch (_tmp150_) {
+							_tmp143_ = self->priv->current;
+							self->priv->current = _tmp143_ + 1;
+							_tmp144_ = self->priv->current;
+							_tmp145_ = self->priv->end;
+							if (_tmp144_ < _tmp145_) {
+								gchar* _tmp146_;
+								gchar _tmp147_;
+								_tmp146_ = self->priv->current;
+								_tmp147_ = _tmp146_[0];
+								switch (_tmp147_) {
 									case '=':
 									{
-										gchar* _tmp151_;
+										gchar* _tmp148_;
 										type = VALA_TOKEN_TYPE_OP_EQ;
-										_tmp151_ = self->priv->current;
-										self->priv->current = _tmp151_ + 1;
+										_tmp148_ = self->priv->current;
+										self->priv->current = _tmp148_ + 1;
 										break;
 									}
 									case '>':
 									{
-										gchar* _tmp152_;
+										gchar* _tmp149_;
 										type = VALA_TOKEN_TYPE_LAMBDA;
-										_tmp152_ = self->priv->current;
-										self->priv->current = _tmp152_ + 1;
+										_tmp149_ = self->priv->current;
+										self->priv->current = _tmp149_ + 1;
 										break;
 									}
 									default:
@@ -3809,55 +3794,55 @@ ValaTokenType vala_scanner_read_token (ValaScanner* self, ValaSourceLocation* to
 						}
 						case '<':
 						{
-							gchar* _tmp153_;
-							gchar* _tmp154_;
-							gchar* _tmp155_;
+							gchar* _tmp150_;
+							gchar* _tmp151_;
+							gchar* _tmp152_;
 							type = VALA_TOKEN_TYPE_OP_LT;
-							_tmp153_ = self->priv->current;
-							self->priv->current = _tmp153_ + 1;
-							_tmp154_ = self->priv->current;
-							_tmp155_ = self->priv->end;
-							if (_tmp154_ < _tmp155_) {
-								gchar* _tmp156_;
-								gchar _tmp157_;
-								_tmp156_ = self->priv->current;
-								_tmp157_ = _tmp156_[0];
-								switch (_tmp157_) {
+							_tmp150_ = self->priv->current;
+							self->priv->current = _tmp150_ + 1;
+							_tmp151_ = self->priv->current;
+							_tmp152_ = self->priv->end;
+							if (_tmp151_ < _tmp152_) {
+								gchar* _tmp153_;
+								gchar _tmp154_;
+								_tmp153_ = self->priv->current;
+								_tmp154_ = _tmp153_[0];
+								switch (_tmp154_) {
 									case '=':
 									{
-										gchar* _tmp158_;
+										gchar* _tmp155_;
 										type = VALA_TOKEN_TYPE_OP_LE;
-										_tmp158_ = self->priv->current;
-										self->priv->current = _tmp158_ + 1;
+										_tmp155_ = self->priv->current;
+										self->priv->current = _tmp155_ + 1;
 										break;
 									}
 									case '<':
 									{
+										gchar* _tmp156_;
+										gboolean _tmp157_ = FALSE;
+										gchar* _tmp158_;
 										gchar* _tmp159_;
-										gboolean _tmp160_ = FALSE;
-										gchar* _tmp161_;
-										gchar* _tmp162_;
-										gboolean _tmp165_;
+										gboolean _tmp162_;
 										type = VALA_TOKEN_TYPE_OP_SHIFT_LEFT;
-										_tmp159_ = self->priv->current;
-										self->priv->current = _tmp159_ + 1;
-										_tmp161_ = self->priv->current;
-										_tmp162_ = self->priv->end;
-										if (_tmp161_ < _tmp162_) {
-											gchar* _tmp163_;
-											gchar _tmp164_;
-											_tmp163_ = self->priv->current;
-											_tmp164_ = _tmp163_[0];
-											_tmp160_ = _tmp164_ == '=';
+										_tmp156_ = self->priv->current;
+										self->priv->current = _tmp156_ + 1;
+										_tmp158_ = self->priv->current;
+										_tmp159_ = self->priv->end;
+										if (_tmp158_ < _tmp159_) {
+											gchar* _tmp160_;
+											gchar _tmp161_;
+											_tmp160_ = self->priv->current;
+											_tmp161_ = _tmp160_[0];
+											_tmp157_ = _tmp161_ == '=';
 										} else {
-											_tmp160_ = FALSE;
+											_tmp157_ = FALSE;
 										}
-										_tmp165_ = _tmp160_;
-										if (_tmp165_) {
-											gchar* _tmp166_;
+										_tmp162_ = _tmp157_;
+										if (_tmp162_) {
+											gchar* _tmp163_;
 											type = VALA_TOKEN_TYPE_ASSIGN_SHIFT_LEFT;
-											_tmp166_ = self->priv->current;
-											self->priv->current = _tmp166_ + 1;
+											_tmp163_ = self->priv->current;
+											self->priv->current = _tmp163_ + 1;
 										}
 										break;
 									}
@@ -3869,94 +3854,94 @@ ValaTokenType vala_scanner_read_token (ValaScanner* self, ValaSourceLocation* to
 						}
 						case '>':
 						{
+							gchar* _tmp164_;
+							gboolean _tmp165_ = FALSE;
+							gchar* _tmp166_;
 							gchar* _tmp167_;
-							gboolean _tmp168_ = FALSE;
-							gchar* _tmp169_;
-							gchar* _tmp170_;
-							gboolean _tmp173_;
+							gboolean _tmp170_;
 							type = VALA_TOKEN_TYPE_OP_GT;
-							_tmp167_ = self->priv->current;
-							self->priv->current = _tmp167_ + 1;
-							_tmp169_ = self->priv->current;
-							_tmp170_ = self->priv->end;
-							if (_tmp169_ < _tmp170_) {
-								gchar* _tmp171_;
-								gchar _tmp172_;
-								_tmp171_ = self->priv->current;
-								_tmp172_ = _tmp171_[0];
-								_tmp168_ = _tmp172_ == '=';
+							_tmp164_ = self->priv->current;
+							self->priv->current = _tmp164_ + 1;
+							_tmp166_ = self->priv->current;
+							_tmp167_ = self->priv->end;
+							if (_tmp166_ < _tmp167_) {
+								gchar* _tmp168_;
+								gchar _tmp169_;
+								_tmp168_ = self->priv->current;
+								_tmp169_ = _tmp168_[0];
+								_tmp165_ = _tmp169_ == '=';
 							} else {
-								_tmp168_ = FALSE;
+								_tmp165_ = FALSE;
 							}
-							_tmp173_ = _tmp168_;
-							if (_tmp173_) {
-								gchar* _tmp174_;
+							_tmp170_ = _tmp165_;
+							if (_tmp170_) {
+								gchar* _tmp171_;
 								type = VALA_TOKEN_TYPE_OP_GE;
-								_tmp174_ = self->priv->current;
-								self->priv->current = _tmp174_ + 1;
+								_tmp171_ = self->priv->current;
+								self->priv->current = _tmp171_ + 1;
 							}
 							break;
 						}
 						case '!':
 						{
+							gchar* _tmp172_;
+							gboolean _tmp173_ = FALSE;
+							gchar* _tmp174_;
 							gchar* _tmp175_;
-							gboolean _tmp176_ = FALSE;
-							gchar* _tmp177_;
-							gchar* _tmp178_;
-							gboolean _tmp181_;
+							gboolean _tmp178_;
 							type = VALA_TOKEN_TYPE_OP_NEG;
-							_tmp175_ = self->priv->current;
-							self->priv->current = _tmp175_ + 1;
-							_tmp177_ = self->priv->current;
-							_tmp178_ = self->priv->end;
-							if (_tmp177_ < _tmp178_) {
-								gchar* _tmp179_;
-								gchar _tmp180_;
-								_tmp179_ = self->priv->current;
-								_tmp180_ = _tmp179_[0];
-								_tmp176_ = _tmp180_ == '=';
+							_tmp172_ = self->priv->current;
+							self->priv->current = _tmp172_ + 1;
+							_tmp174_ = self->priv->current;
+							_tmp175_ = self->priv->end;
+							if (_tmp174_ < _tmp175_) {
+								gchar* _tmp176_;
+								gchar _tmp177_;
+								_tmp176_ = self->priv->current;
+								_tmp177_ = _tmp176_[0];
+								_tmp173_ = _tmp177_ == '=';
 							} else {
-								_tmp176_ = FALSE;
+								_tmp173_ = FALSE;
 							}
-							_tmp181_ = _tmp176_;
-							if (_tmp181_) {
-								gchar* _tmp182_;
+							_tmp178_ = _tmp173_;
+							if (_tmp178_) {
+								gchar* _tmp179_;
 								type = VALA_TOKEN_TYPE_OP_NE;
-								_tmp182_ = self->priv->current;
-								self->priv->current = _tmp182_ + 1;
+								_tmp179_ = self->priv->current;
+								self->priv->current = _tmp179_ + 1;
 							}
 							break;
 						}
 						case '+':
 						{
-							gchar* _tmp183_;
-							gchar* _tmp184_;
-							gchar* _tmp185_;
+							gchar* _tmp180_;
+							gchar* _tmp181_;
+							gchar* _tmp182_;
 							type = VALA_TOKEN_TYPE_PLUS;
-							_tmp183_ = self->priv->current;
-							self->priv->current = _tmp183_ + 1;
-							_tmp184_ = self->priv->current;
-							_tmp185_ = self->priv->end;
-							if (_tmp184_ < _tmp185_) {
-								gchar* _tmp186_;
-								gchar _tmp187_;
-								_tmp186_ = self->priv->current;
-								_tmp187_ = _tmp186_[0];
-								switch (_tmp187_) {
+							_tmp180_ = self->priv->current;
+							self->priv->current = _tmp180_ + 1;
+							_tmp181_ = self->priv->current;
+							_tmp182_ = self->priv->end;
+							if (_tmp181_ < _tmp182_) {
+								gchar* _tmp183_;
+								gchar _tmp184_;
+								_tmp183_ = self->priv->current;
+								_tmp184_ = _tmp183_[0];
+								switch (_tmp184_) {
 									case '=':
 									{
-										gchar* _tmp188_;
+										gchar* _tmp185_;
 										type = VALA_TOKEN_TYPE_ASSIGN_ADD;
-										_tmp188_ = self->priv->current;
-										self->priv->current = _tmp188_ + 1;
+										_tmp185_ = self->priv->current;
+										self->priv->current = _tmp185_ + 1;
 										break;
 									}
 									case '+':
 									{
-										gchar* _tmp189_;
+										gchar* _tmp186_;
 										type = VALA_TOKEN_TYPE_OP_INC;
-										_tmp189_ = self->priv->current;
-										self->priv->current = _tmp189_ + 1;
+										_tmp186_ = self->priv->current;
+										self->priv->current = _tmp186_ + 1;
 										break;
 									}
 									default:
@@ -3967,42 +3952,42 @@ ValaTokenType vala_scanner_read_token (ValaScanner* self, ValaSourceLocation* to
 						}
 						case '-':
 						{
-							gchar* _tmp190_;
-							gchar* _tmp191_;
-							gchar* _tmp192_;
+							gchar* _tmp187_;
+							gchar* _tmp188_;
+							gchar* _tmp189_;
 							type = VALA_TOKEN_TYPE_MINUS;
-							_tmp190_ = self->priv->current;
-							self->priv->current = _tmp190_ + 1;
-							_tmp191_ = self->priv->current;
-							_tmp192_ = self->priv->end;
-							if (_tmp191_ < _tmp192_) {
-								gchar* _tmp193_;
-								gchar _tmp194_;
-								_tmp193_ = self->priv->current;
-								_tmp194_ = _tmp193_[0];
-								switch (_tmp194_) {
+							_tmp187_ = self->priv->current;
+							self->priv->current = _tmp187_ + 1;
+							_tmp188_ = self->priv->current;
+							_tmp189_ = self->priv->end;
+							if (_tmp188_ < _tmp189_) {
+								gchar* _tmp190_;
+								gchar _tmp191_;
+								_tmp190_ = self->priv->current;
+								_tmp191_ = _tmp190_[0];
+								switch (_tmp191_) {
 									case '=':
 									{
-										gchar* _tmp195_;
+										gchar* _tmp192_;
 										type = VALA_TOKEN_TYPE_ASSIGN_SUB;
-										_tmp195_ = self->priv->current;
-										self->priv->current = _tmp195_ + 1;
+										_tmp192_ = self->priv->current;
+										self->priv->current = _tmp192_ + 1;
 										break;
 									}
 									case '-':
 									{
-										gchar* _tmp196_;
+										gchar* _tmp193_;
 										type = VALA_TOKEN_TYPE_OP_DEC;
-										_tmp196_ = self->priv->current;
-										self->priv->current = _tmp196_ + 1;
+										_tmp193_ = self->priv->current;
+										self->priv->current = _tmp193_ + 1;
 										break;
 									}
 									case '>':
 									{
-										gchar* _tmp197_;
+										gchar* _tmp194_;
 										type = VALA_TOKEN_TYPE_OP_PTR;
-										_tmp197_ = self->priv->current;
-										self->priv->current = _tmp197_ + 1;
+										_tmp194_ = self->priv->current;
+										self->priv->current = _tmp194_ + 1;
 										break;
 									}
 									default:
@@ -4013,39 +3998,39 @@ ValaTokenType vala_scanner_read_token (ValaScanner* self, ValaSourceLocation* to
 						}
 						case '*':
 						{
+							gchar* _tmp195_;
+							gboolean _tmp196_ = FALSE;
+							gchar* _tmp197_;
 							gchar* _tmp198_;
-							gboolean _tmp199_ = FALSE;
-							gchar* _tmp200_;
-							gchar* _tmp201_;
-							gboolean _tmp204_;
+							gboolean _tmp201_;
 							type = VALA_TOKEN_TYPE_STAR;
-							_tmp198_ = self->priv->current;
-							self->priv->current = _tmp198_ + 1;
-							_tmp200_ = self->priv->current;
-							_tmp201_ = self->priv->end;
-							if (_tmp200_ < _tmp201_) {
-								gchar* _tmp202_;
-								gchar _tmp203_;
-								_tmp202_ = self->priv->current;
-								_tmp203_ = _tmp202_[0];
-								_tmp199_ = _tmp203_ == '=';
+							_tmp195_ = self->priv->current;
+							self->priv->current = _tmp195_ + 1;
+							_tmp197_ = self->priv->current;
+							_tmp198_ = self->priv->end;
+							if (_tmp197_ < _tmp198_) {
+								gchar* _tmp199_;
+								gchar _tmp200_;
+								_tmp199_ = self->priv->current;
+								_tmp200_ = _tmp199_[0];
+								_tmp196_ = _tmp200_ == '=';
 							} else {
-								_tmp199_ = FALSE;
+								_tmp196_ = FALSE;
 							}
-							_tmp204_ = _tmp199_;
-							if (_tmp204_) {
-								gchar* _tmp205_;
+							_tmp201_ = _tmp196_;
+							if (_tmp201_) {
+								gchar* _tmp202_;
 								type = VALA_TOKEN_TYPE_ASSIGN_MUL;
-								_tmp205_ = self->priv->current;
-								self->priv->current = _tmp205_ + 1;
+								_tmp202_ = self->priv->current;
+								self->priv->current = _tmp202_ + 1;
 							}
 							break;
 						}
 						case '/':
 						{
-							ValaTokenType _tmp206_;
-							_tmp206_ = self->priv->previous;
-							switch (_tmp206_) {
+							ValaTokenType _tmp203_;
+							_tmp203_ = self->priv->previous;
+							switch (_tmp203_) {
 								case VALA_TOKEN_TYPE_ASSIGN:
 								case VALA_TOKEN_TYPE_COMMA:
 								case VALA_TOKEN_TYPE_MINUS:
@@ -4064,44 +4049,44 @@ ValaTokenType vala_scanner_read_token (ValaScanner* self, ValaSourceLocation* to
 								case VALA_TOKEN_TYPE_PLUS:
 								case VALA_TOKEN_TYPE_RETURN:
 								{
-									ValaScannerState* _tmp207_;
-									gint _tmp207__length1;
-									gchar* _tmp208_;
+									ValaScannerState* _tmp204_;
+									gint _tmp204__length1;
+									gchar* _tmp205_;
 									type = VALA_TOKEN_TYPE_OPEN_REGEX_LITERAL;
-									_tmp207_ = self->priv->state_stack;
-									_tmp207__length1 = self->priv->state_stack_length1;
+									_tmp204_ = self->priv->state_stack;
+									_tmp204__length1 = self->priv->state_stack_length1;
 									_vala_array_add21 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_SCANNER_STATE_REGEX_LITERAL);
-									_tmp208_ = self->priv->current;
-									self->priv->current = _tmp208_ + 1;
+									_tmp205_ = self->priv->current;
+									self->priv->current = _tmp205_ + 1;
 									break;
 								}
 								default:
 								{
+									gchar* _tmp206_;
+									gboolean _tmp207_ = FALSE;
+									gchar* _tmp208_;
 									gchar* _tmp209_;
-									gboolean _tmp210_ = FALSE;
-									gchar* _tmp211_;
-									gchar* _tmp212_;
-									gboolean _tmp215_;
+									gboolean _tmp212_;
 									type = VALA_TOKEN_TYPE_DIV;
-									_tmp209_ = self->priv->current;
-									self->priv->current = _tmp209_ + 1;
-									_tmp211_ = self->priv->current;
-									_tmp212_ = self->priv->end;
-									if (_tmp211_ < _tmp212_) {
-										gchar* _tmp213_;
-										gchar _tmp214_;
-										_tmp213_ = self->priv->current;
-										_tmp214_ = _tmp213_[0];
-										_tmp210_ = _tmp214_ == '=';
+									_tmp206_ = self->priv->current;
+									self->priv->current = _tmp206_ + 1;
+									_tmp208_ = self->priv->current;
+									_tmp209_ = self->priv->end;
+									if (_tmp208_ < _tmp209_) {
+										gchar* _tmp210_;
+										gchar _tmp211_;
+										_tmp210_ = self->priv->current;
+										_tmp211_ = _tmp210_[0];
+										_tmp207_ = _tmp211_ == '=';
 									} else {
-										_tmp210_ = FALSE;
+										_tmp207_ = FALSE;
 									}
-									_tmp215_ = _tmp210_;
-									if (_tmp215_) {
-										gchar* _tmp216_;
+									_tmp212_ = _tmp207_;
+									if (_tmp212_) {
+										gchar* _tmp213_;
 										type = VALA_TOKEN_TYPE_ASSIGN_DIV;
-										_tmp216_ = self->priv->current;
-										self->priv->current = _tmp216_ + 1;
+										_tmp213_ = self->priv->current;
+										self->priv->current = _tmp213_ + 1;
 									}
 									break;
 								}
@@ -4110,247 +4095,247 @@ ValaTokenType vala_scanner_read_token (ValaScanner* self, ValaSourceLocation* to
 						}
 						case '%':
 						{
+							gchar* _tmp214_;
+							gboolean _tmp215_ = FALSE;
+							gchar* _tmp216_;
 							gchar* _tmp217_;
-							gboolean _tmp218_ = FALSE;
-							gchar* _tmp219_;
-							gchar* _tmp220_;
-							gboolean _tmp223_;
+							gboolean _tmp220_;
 							type = VALA_TOKEN_TYPE_PERCENT;
-							_tmp217_ = self->priv->current;
-							self->priv->current = _tmp217_ + 1;
-							_tmp219_ = self->priv->current;
-							_tmp220_ = self->priv->end;
-							if (_tmp219_ < _tmp220_) {
-								gchar* _tmp221_;
-								gchar _tmp222_;
-								_tmp221_ = self->priv->current;
-								_tmp222_ = _tmp221_[0];
-								_tmp218_ = _tmp222_ == '=';
+							_tmp214_ = self->priv->current;
+							self->priv->current = _tmp214_ + 1;
+							_tmp216_ = self->priv->current;
+							_tmp217_ = self->priv->end;
+							if (_tmp216_ < _tmp217_) {
+								gchar* _tmp218_;
+								gchar _tmp219_;
+								_tmp218_ = self->priv->current;
+								_tmp219_ = _tmp218_[0];
+								_tmp215_ = _tmp219_ == '=';
 							} else {
-								_tmp218_ = FALSE;
+								_tmp215_ = FALSE;
 							}
-							_tmp223_ = _tmp218_;
-							if (_tmp223_) {
-								gchar* _tmp224_;
+							_tmp220_ = _tmp215_;
+							if (_tmp220_) {
+								gchar* _tmp221_;
 								type = VALA_TOKEN_TYPE_ASSIGN_PERCENT;
-								_tmp224_ = self->priv->current;
-								self->priv->current = _tmp224_ + 1;
+								_tmp221_ = self->priv->current;
+								self->priv->current = _tmp221_ + 1;
 							}
 							break;
 						}
 						case '\'':
 						case '"':
 						{
-							gchar* _tmp225_;
-							gchar _tmp226_;
-							gchar* _tmp296_;
-							gchar* _tmp391_;
-							gchar* _tmp392_;
-							_tmp225_ = begin;
-							_tmp226_ = _tmp225_[0];
-							if (_tmp226_ == '\'') {
+							gchar* _tmp222_;
+							gchar _tmp223_;
+							gchar* _tmp293_;
+							gchar* _tmp388_;
+							gchar* _tmp389_;
+							_tmp222_ = begin;
+							_tmp223_ = _tmp222_[0];
+							if (_tmp223_ == '\'') {
 								type = VALA_TOKEN_TYPE_CHARACTER_LITERAL;
 							} else {
-								gboolean _tmp227_ = FALSE;
-								gboolean _tmp228_ = FALSE;
-								gchar* _tmp229_;
-								gchar* _tmp230_;
+								gboolean _tmp224_ = FALSE;
+								gboolean _tmp225_ = FALSE;
+								gchar* _tmp226_;
+								gchar* _tmp227_;
+								gboolean _tmp230_;
 								gboolean _tmp233_;
-								gboolean _tmp236_;
-								_tmp229_ = self->priv->current;
-								_tmp230_ = self->priv->end;
-								if (_tmp229_ < (_tmp230_ - 6)) {
+								_tmp226_ = self->priv->current;
+								_tmp227_ = self->priv->end;
+								if (_tmp226_ < (_tmp227_ - 6)) {
+									gchar* _tmp228_;
+									gchar _tmp229_;
+									_tmp228_ = begin;
+									_tmp229_ = _tmp228_[1];
+									_tmp225_ = _tmp229_ == '"';
+								} else {
+									_tmp225_ = FALSE;
+								}
+								_tmp230_ = _tmp225_;
+								if (_tmp230_) {
 									gchar* _tmp231_;
 									gchar _tmp232_;
 									_tmp231_ = begin;
-									_tmp232_ = _tmp231_[1];
-									_tmp228_ = _tmp232_ == '"';
+									_tmp232_ = _tmp231_[2];
+									_tmp224_ = _tmp232_ == '"';
 								} else {
-									_tmp228_ = FALSE;
+									_tmp224_ = FALSE;
 								}
-								_tmp233_ = _tmp228_;
+								_tmp233_ = _tmp224_;
 								if (_tmp233_) {
 									gchar* _tmp234_;
-									gchar _tmp235_;
-									_tmp234_ = begin;
-									_tmp235_ = _tmp234_[2];
-									_tmp227_ = _tmp235_ == '"';
-								} else {
-									_tmp227_ = FALSE;
-								}
-								_tmp236_ = _tmp227_;
-								if (_tmp236_) {
-									gchar* _tmp237_;
-									gboolean _tmp276_ = FALSE;
-									gboolean _tmp277_ = FALSE;
-									gchar* _tmp278_;
-									gchar _tmp279_;
+									gboolean _tmp273_ = FALSE;
+									gboolean _tmp274_ = FALSE;
+									gchar* _tmp275_;
+									gchar _tmp276_;
+									gboolean _tmp279_;
 									gboolean _tmp282_;
-									gboolean _tmp285_;
 									type = VALA_TOKEN_TYPE_VERBATIM_STRING_LITERAL;
 									token_length_in_chars = 6;
-									_tmp237_ = self->priv->current;
-									self->priv->current = _tmp237_ + 3;
+									_tmp234_ = self->priv->current;
+									self->priv->current = _tmp234_ + 3;
 									while (TRUE) {
-										gchar* _tmp238_;
-										gchar* _tmp239_;
-										gboolean _tmp240_ = FALSE;
-										gboolean _tmp241_ = FALSE;
-										gboolean _tmp242_ = FALSE;
-										gchar* _tmp243_;
-										gchar _tmp244_;
+										gchar* _tmp235_;
+										gchar* _tmp236_;
+										gboolean _tmp237_ = FALSE;
+										gboolean _tmp238_ = FALSE;
+										gboolean _tmp239_ = FALSE;
+										gchar* _tmp240_;
+										gchar _tmp241_;
+										gboolean _tmp244_;
 										gboolean _tmp247_;
 										gboolean _tmp250_;
-										gboolean _tmp253_;
-										_tmp238_ = self->priv->current;
-										_tmp239_ = self->priv->end;
-										if (!(_tmp238_ < (_tmp239_ - 4))) {
+										_tmp235_ = self->priv->current;
+										_tmp236_ = self->priv->end;
+										if (!(_tmp235_ < (_tmp236_ - 4))) {
 											break;
 										}
-										_tmp243_ = self->priv->current;
-										_tmp244_ = _tmp243_[0];
-										if (_tmp244_ == '"') {
+										_tmp240_ = self->priv->current;
+										_tmp241_ = _tmp240_[0];
+										if (_tmp241_ == '"') {
+											gchar* _tmp242_;
+											gchar _tmp243_;
+											_tmp242_ = self->priv->current;
+											_tmp243_ = _tmp242_[1];
+											_tmp239_ = _tmp243_ == '"';
+										} else {
+											_tmp239_ = FALSE;
+										}
+										_tmp244_ = _tmp239_;
+										if (_tmp244_) {
 											gchar* _tmp245_;
 											gchar _tmp246_;
 											_tmp245_ = self->priv->current;
-											_tmp246_ = _tmp245_[1];
-											_tmp242_ = _tmp246_ == '"';
+											_tmp246_ = _tmp245_[2];
+											_tmp238_ = _tmp246_ == '"';
 										} else {
-											_tmp242_ = FALSE;
+											_tmp238_ = FALSE;
 										}
-										_tmp247_ = _tmp242_;
+										_tmp247_ = _tmp238_;
 										if (_tmp247_) {
 											gchar* _tmp248_;
 											gchar _tmp249_;
 											_tmp248_ = self->priv->current;
-											_tmp249_ = _tmp248_[2];
-											_tmp241_ = _tmp249_ == '"';
+											_tmp249_ = _tmp248_[3];
+											_tmp237_ = _tmp249_ != '"';
 										} else {
-											_tmp241_ = FALSE;
+											_tmp237_ = FALSE;
 										}
-										_tmp250_ = _tmp241_;
+										_tmp250_ = _tmp237_;
 										if (_tmp250_) {
+											break;
+										} else {
 											gchar* _tmp251_;
 											gchar _tmp252_;
 											_tmp251_ = self->priv->current;
-											_tmp252_ = _tmp251_[3];
-											_tmp240_ = _tmp252_ != '"';
-										} else {
-											_tmp240_ = FALSE;
-										}
-										_tmp253_ = _tmp240_;
-										if (_tmp253_) {
-											break;
-										} else {
-											gchar* _tmp254_;
-											gchar _tmp255_;
-											_tmp254_ = self->priv->current;
-											_tmp255_ = _tmp254_[0];
-											if (_tmp255_ == '\n') {
-												gchar* _tmp256_;
-												gint _tmp257_;
-												_tmp256_ = self->priv->current;
-												self->priv->current = _tmp256_ + 1;
-												_tmp257_ = self->priv->line;
-												self->priv->line = _tmp257_ + 1;
+											_tmp252_ = _tmp251_[0];
+											if (_tmp252_ == '\n') {
+												gchar* _tmp253_;
+												gint _tmp254_;
+												_tmp253_ = self->priv->current;
+												self->priv->current = _tmp253_ + 1;
+												_tmp254_ = self->priv->line;
+												self->priv->line = _tmp254_ + 1;
 												self->priv->column = 1;
 												token_length_in_chars = 3;
 											} else {
-												gchar* _tmp258_;
-												gchar* _tmp259_;
-												gchar* _tmp260_;
-												gunichar _tmp261_ = 0U;
+												gchar* _tmp255_;
+												gchar* _tmp256_;
+												gchar* _tmp257_;
+												gunichar _tmp258_ = 0U;
 												gunichar u;
-												gunichar _tmp262_;
-												_tmp258_ = self->priv->current;
-												_tmp259_ = self->priv->end;
-												_tmp260_ = self->priv->current;
-												_tmp261_ = g_utf8_get_char_validated ((const gchar*) _tmp258_, (gssize) ((glong) (_tmp259_ - _tmp260_)));
-												u = _tmp261_;
-												_tmp262_ = u;
-												if (_tmp262_ != ((gunichar) (-1))) {
-													gchar* _tmp263_;
-													gunichar _tmp264_;
-													gint _tmp265_ = 0;
-													gint _tmp266_;
-													_tmp263_ = self->priv->current;
-													_tmp264_ = u;
-													_tmp265_ = g_unichar_to_utf8 (_tmp264_, NULL);
-													self->priv->current = _tmp263_ + _tmp265_;
-													_tmp266_ = token_length_in_chars;
-													token_length_in_chars = _tmp266_ + 1;
+												gunichar _tmp259_;
+												_tmp255_ = self->priv->current;
+												_tmp256_ = self->priv->end;
+												_tmp257_ = self->priv->current;
+												_tmp258_ = g_utf8_get_char_validated ((const gchar*) _tmp255_, (gssize) ((glong) (_tmp256_ - _tmp257_)));
+												u = _tmp258_;
+												_tmp259_ = u;
+												if (_tmp259_ != ((gunichar) (-1))) {
+													gchar* _tmp260_;
+													gunichar _tmp261_;
+													gint _tmp262_ = 0;
+													gint _tmp263_;
+													_tmp260_ = self->priv->current;
+													_tmp261_ = u;
+													_tmp262_ = g_unichar_to_utf8 (_tmp261_, NULL);
+													self->priv->current = _tmp260_ + _tmp262_;
+													_tmp263_ = token_length_in_chars;
+													token_length_in_chars = _tmp263_ + 1;
 												} else {
-													ValaSourceFile* _tmp267_;
+													ValaSourceFile* _tmp264_;
+													gint _tmp265_;
+													gint _tmp266_;
+													gint _tmp267_;
 													gint _tmp268_;
 													gint _tmp269_;
 													gint _tmp270_;
-													gint _tmp271_;
-													gint _tmp272_;
-													gint _tmp273_;
-													ValaSourceReference* _tmp274_;
-													ValaSourceReference* _tmp275_;
-													_tmp267_ = self->priv->_source_file;
+													ValaSourceReference* _tmp271_;
+													ValaSourceReference* _tmp272_;
+													_tmp264_ = self->priv->_source_file;
+													_tmp265_ = self->priv->line;
+													_tmp266_ = self->priv->column;
+													_tmp267_ = token_length_in_chars;
 													_tmp268_ = self->priv->line;
 													_tmp269_ = self->priv->column;
 													_tmp270_ = token_length_in_chars;
-													_tmp271_ = self->priv->line;
-													_tmp272_ = self->priv->column;
-													_tmp273_ = token_length_in_chars;
-													_tmp274_ = vala_source_reference_new (_tmp267_, _tmp268_, _tmp269_ + _tmp270_, _tmp271_, _tmp272_ + _tmp273_);
-													_tmp275_ = _tmp274_;
-													vala_report_error (_tmp275_, "invalid UTF-8 character");
-													_vala_source_reference_unref0 (_tmp275_);
+													_tmp271_ = vala_source_reference_new (_tmp264_, _tmp265_, _tmp266_ + _tmp267_, _tmp268_, _tmp269_ + _tmp270_);
+													_tmp272_ = _tmp271_;
+													vala_report_error (_tmp272_, "invalid UTF-8 character");
+													_vala_source_reference_unref0 (_tmp272_);
 												}
 											}
 										}
 									}
-									_tmp278_ = self->priv->current;
-									_tmp279_ = _tmp278_[0];
-									if (_tmp279_ == '"') {
+									_tmp275_ = self->priv->current;
+									_tmp276_ = _tmp275_[0];
+									if (_tmp276_ == '"') {
+										gchar* _tmp277_;
+										gchar _tmp278_;
+										_tmp277_ = self->priv->current;
+										_tmp278_ = _tmp277_[1];
+										_tmp274_ = _tmp278_ == '"';
+									} else {
+										_tmp274_ = FALSE;
+									}
+									_tmp279_ = _tmp274_;
+									if (_tmp279_) {
 										gchar* _tmp280_;
 										gchar _tmp281_;
 										_tmp280_ = self->priv->current;
-										_tmp281_ = _tmp280_[1];
-										_tmp277_ = _tmp281_ == '"';
+										_tmp281_ = _tmp280_[2];
+										_tmp273_ = _tmp281_ == '"';
 									} else {
-										_tmp277_ = FALSE;
+										_tmp273_ = FALSE;
 									}
-									_tmp282_ = _tmp277_;
+									_tmp282_ = _tmp273_;
 									if (_tmp282_) {
 										gchar* _tmp283_;
-										gchar _tmp284_;
 										_tmp283_ = self->priv->current;
-										_tmp284_ = _tmp283_[2];
-										_tmp276_ = _tmp284_ == '"';
-									} else {
-										_tmp276_ = FALSE;
-									}
-									_tmp285_ = _tmp276_;
-									if (_tmp285_) {
-										gchar* _tmp286_;
-										_tmp286_ = self->priv->current;
-										self->priv->current = _tmp286_ + 3;
+										self->priv->current = _tmp283_ + 3;
 									} else {
-										ValaSourceFile* _tmp287_;
+										ValaSourceFile* _tmp284_;
+										gint _tmp285_;
+										gint _tmp286_;
+										gint _tmp287_;
 										gint _tmp288_;
 										gint _tmp289_;
 										gint _tmp290_;
-										gint _tmp291_;
-										gint _tmp292_;
-										gint _tmp293_;
-										ValaSourceReference* _tmp294_;
-										ValaSourceReference* _tmp295_;
-										_tmp287_ = self->priv->_source_file;
+										ValaSourceReference* _tmp291_;
+										ValaSourceReference* _tmp292_;
+										_tmp284_ = self->priv->_source_file;
+										_tmp285_ = self->priv->line;
+										_tmp286_ = self->priv->column;
+										_tmp287_ = token_length_in_chars;
 										_tmp288_ = self->priv->line;
 										_tmp289_ = self->priv->column;
 										_tmp290_ = token_length_in_chars;
-										_tmp291_ = self->priv->line;
-										_tmp292_ = self->priv->column;
-										_tmp293_ = token_length_in_chars;
-										_tmp294_ = vala_source_reference_new (_tmp287_, _tmp288_, _tmp289_ + _tmp290_, _tmp291_, _tmp292_ + _tmp293_);
-										_tmp295_ = _tmp294_;
-										vala_report_error (_tmp295_, "syntax error, expected \"\"\"");
-										_vala_source_reference_unref0 (_tmp295_);
+										_tmp291_ = vala_source_reference_new (_tmp284_, _tmp285_, _tmp286_ + _tmp287_, _tmp288_, _tmp289_ + _tmp290_);
+										_tmp292_ = _tmp291_;
+										vala_report_error (_tmp292_, "syntax error, expected \"\"\"");
+										_vala_source_reference_unref0 (_tmp292_);
 									}
 									break;
 								} else {
@@ -4358,61 +4343,61 @@ ValaTokenType vala_scanner_read_token (ValaScanner* self, ValaSourceLocation* to
 								}
 							}
 							token_length_in_chars = 2;
-							_tmp296_ = self->priv->current;
-							self->priv->current = _tmp296_ + 1;
+							_tmp293_ = self->priv->current;
+							self->priv->current = _tmp293_ + 1;
 							while (TRUE) {
-								gboolean _tmp297_ = FALSE;
-								gchar* _tmp298_;
-								gchar* _tmp299_;
-								gboolean _tmp304_;
-								gchar* _tmp305_;
-								gchar _tmp306_;
-								gboolean _tmp372_ = FALSE;
-								gboolean _tmp373_ = FALSE;
-								gchar* _tmp374_;
-								gchar* _tmp375_;
+								gboolean _tmp294_ = FALSE;
+								gchar* _tmp295_;
+								gchar* _tmp296_;
+								gboolean _tmp301_;
+								gchar* _tmp302_;
+								gchar _tmp303_;
+								gboolean _tmp369_ = FALSE;
+								gboolean _tmp370_ = FALSE;
+								gchar* _tmp371_;
+								gchar* _tmp372_;
+								gboolean _tmp375_;
 								gboolean _tmp378_;
-								gboolean _tmp381_;
-								_tmp298_ = self->priv->current;
-								_tmp299_ = self->priv->end;
-								if (_tmp298_ < _tmp299_) {
-									gchar* _tmp300_;
-									gchar _tmp301_;
-									gchar* _tmp302_;
-									gchar _tmp303_;
-									_tmp300_ = self->priv->current;
-									_tmp301_ = _tmp300_[0];
-									_tmp302_ = begin;
-									_tmp303_ = _tmp302_[0];
-									_tmp297_ = _tmp301_ != _tmp303_;
+								_tmp295_ = self->priv->current;
+								_tmp296_ = self->priv->end;
+								if (_tmp295_ < _tmp296_) {
+									gchar* _tmp297_;
+									gchar _tmp298_;
+									gchar* _tmp299_;
+									gchar _tmp300_;
+									_tmp297_ = self->priv->current;
+									_tmp298_ = _tmp297_[0];
+									_tmp299_ = begin;
+									_tmp300_ = _tmp299_[0];
+									_tmp294_ = _tmp298_ != _tmp300_;
 								} else {
-									_tmp297_ = FALSE;
+									_tmp294_ = FALSE;
 								}
-								_tmp304_ = _tmp297_;
-								if (!_tmp304_) {
+								_tmp301_ = _tmp294_;
+								if (!_tmp301_) {
 									break;
 								}
-								_tmp305_ = self->priv->current;
-								_tmp306_ = _tmp305_[0];
-								if (_tmp306_ == '\\') {
+								_tmp302_ = self->priv->current;
+								_tmp303_ = _tmp302_[0];
+								if (_tmp303_ == '\\') {
+									gchar* _tmp304_;
+									gint _tmp305_;
+									gchar* _tmp306_;
 									gchar* _tmp307_;
-									gint _tmp308_;
-									gchar* _tmp309_;
-									gchar* _tmp310_;
-									gchar* _tmp311_;
-									gchar _tmp312_;
-									_tmp307_ = self->priv->current;
-									self->priv->current = _tmp307_ + 1;
-									_tmp308_ = token_length_in_chars;
-									token_length_in_chars = _tmp308_ + 1;
-									_tmp309_ = self->priv->current;
-									_tmp310_ = self->priv->end;
-									if (_tmp309_ >= _tmp310_) {
+									gchar* _tmp308_;
+									gchar _tmp309_;
+									_tmp304_ = self->priv->current;
+									self->priv->current = _tmp304_ + 1;
+									_tmp305_ = token_length_in_chars;
+									token_length_in_chars = _tmp305_ + 1;
+									_tmp306_ = self->priv->current;
+									_tmp307_ = self->priv->end;
+									if (_tmp306_ >= _tmp307_) {
 										break;
 									}
-									_tmp311_ = self->priv->current;
-									_tmp312_ = _tmp311_[0];
-									switch (_tmp312_) {
+									_tmp308_ = self->priv->current;
+									_tmp309_ = _tmp308_[0];
+									switch (_tmp309_) {
 										case '\'':
 										case '"':
 										case '\\':
@@ -4424,340 +4409,340 @@ ValaTokenType vala_scanner_read_token (ValaScanner* self, ValaSourceLocation* to
 										case 't':
 										case '$':
 										{
-											gchar* _tmp313_;
-											gint _tmp314_;
-											_tmp313_ = self->priv->current;
-											self->priv->current = _tmp313_ + 1;
-											_tmp314_ = token_length_in_chars;
-											token_length_in_chars = _tmp314_ + 1;
+											gchar* _tmp310_;
+											gint _tmp311_;
+											_tmp310_ = self->priv->current;
+											self->priv->current = _tmp310_ + 1;
+											_tmp311_ = token_length_in_chars;
+											token_length_in_chars = _tmp311_ + 1;
 											break;
 										}
 										case 'x':
 										{
-											gchar* _tmp315_;
-											gint _tmp316_;
-											_tmp315_ = self->priv->current;
-											self->priv->current = _tmp315_ + 1;
-											_tmp316_ = token_length_in_chars;
-											token_length_in_chars = _tmp316_ + 1;
+											gchar* _tmp312_;
+											gint _tmp313_;
+											_tmp312_ = self->priv->current;
+											self->priv->current = _tmp312_ + 1;
+											_tmp313_ = token_length_in_chars;
+											token_length_in_chars = _tmp313_ + 1;
 											while (TRUE) {
-												gboolean _tmp317_ = FALSE;
-												gchar* _tmp318_;
-												gchar* _tmp319_;
-												gboolean _tmp323_;
-												gchar* _tmp324_;
-												gint _tmp325_;
-												_tmp318_ = self->priv->current;
-												_tmp319_ = self->priv->end;
-												if (_tmp318_ < _tmp319_) {
-													gchar* _tmp320_;
-													gchar _tmp321_;
-													gboolean _tmp322_ = FALSE;
-													_tmp320_ = self->priv->current;
-													_tmp321_ = _tmp320_[0];
-													_tmp322_ = g_ascii_isxdigit (_tmp321_);
-													_tmp317_ = _tmp322_;
+												gboolean _tmp314_ = FALSE;
+												gchar* _tmp315_;
+												gchar* _tmp316_;
+												gboolean _tmp320_;
+												gchar* _tmp321_;
+												gint _tmp322_;
+												_tmp315_ = self->priv->current;
+												_tmp316_ = self->priv->end;
+												if (_tmp315_ < _tmp316_) {
+													gchar* _tmp317_;
+													gchar _tmp318_;
+													gboolean _tmp319_ = FALSE;
+													_tmp317_ = self->priv->current;
+													_tmp318_ = _tmp317_[0];
+													_tmp319_ = g_ascii_isxdigit (_tmp318_);
+													_tmp314_ = _tmp319_;
 												} else {
-													_tmp317_ = FALSE;
+													_tmp314_ = FALSE;
 												}
-												_tmp323_ = _tmp317_;
-												if (!_tmp323_) {
+												_tmp320_ = _tmp314_;
+												if (!_tmp320_) {
 													break;
 												}
-												_tmp324_ = self->priv->current;
-												self->priv->current = _tmp324_ + 1;
-												_tmp325_ = token_length_in_chars;
-												token_length_in_chars = _tmp325_ + 1;
+												_tmp321_ = self->priv->current;
+												self->priv->current = _tmp321_ + 1;
+												_tmp322_ = token_length_in_chars;
+												token_length_in_chars = _tmp322_ + 1;
 											}
 											break;
 										}
 										default:
 										{
-											ValaSourceFile* _tmp326_;
+											ValaSourceFile* _tmp323_;
+											gint _tmp324_;
+											gint _tmp325_;
+											gint _tmp326_;
 											gint _tmp327_;
 											gint _tmp328_;
 											gint _tmp329_;
-											gint _tmp330_;
-											gint _tmp331_;
-											gint _tmp332_;
-											ValaSourceReference* _tmp333_;
-											ValaSourceReference* _tmp334_;
-											_tmp326_ = self->priv->_source_file;
+											ValaSourceReference* _tmp330_;
+											ValaSourceReference* _tmp331_;
+											_tmp323_ = self->priv->_source_file;
+											_tmp324_ = self->priv->line;
+											_tmp325_ = self->priv->column;
+											_tmp326_ = token_length_in_chars;
 											_tmp327_ = self->priv->line;
 											_tmp328_ = self->priv->column;
 											_tmp329_ = token_length_in_chars;
-											_tmp330_ = self->priv->line;
-											_tmp331_ = self->priv->column;
-											_tmp332_ = token_length_in_chars;
-											_tmp333_ = vala_source_reference_new (_tmp326_, _tmp327_, _tmp328_ + _tmp329_, _tmp330_, _tmp331_ + _tmp332_);
-											_tmp334_ = _tmp333_;
-											vala_report_error (_tmp334_, "invalid escape sequence");
-											_vala_source_reference_unref0 (_tmp334_);
+											_tmp330_ = vala_source_reference_new (_tmp323_, _tmp324_, _tmp325_ + _tmp326_, _tmp327_, _tmp328_ + _tmp329_);
+											_tmp331_ = _tmp330_;
+											vala_report_error (_tmp331_, "invalid escape sequence");
+											_vala_source_reference_unref0 (_tmp331_);
 											break;
 										}
 									}
 								} else {
-									gchar* _tmp335_;
-									gchar _tmp336_;
-									_tmp335_ = self->priv->current;
-									_tmp336_ = _tmp335_[0];
-									if (_tmp336_ == '\n') {
-										gchar* _tmp337_;
-										gint _tmp338_;
-										_tmp337_ = self->priv->current;
-										self->priv->current = _tmp337_ + 1;
-										_tmp338_ = self->priv->line;
-										self->priv->line = _tmp338_ + 1;
+									gchar* _tmp332_;
+									gchar _tmp333_;
+									_tmp332_ = self->priv->current;
+									_tmp333_ = _tmp332_[0];
+									if (_tmp333_ == '\n') {
+										gchar* _tmp334_;
+										gint _tmp335_;
+										_tmp334_ = self->priv->current;
+										self->priv->current = _tmp334_ + 1;
+										_tmp335_ = self->priv->line;
+										self->priv->line = _tmp335_ + 1;
 										self->priv->column = 1;
 										token_length_in_chars = 1;
 									} else {
-										gboolean _tmp339_ = FALSE;
-										gboolean _tmp340_ = FALSE;
-										ValaTokenType _tmp341_;
+										gboolean _tmp336_ = FALSE;
+										gboolean _tmp337_ = FALSE;
+										ValaTokenType _tmp338_;
+										gboolean _tmp344_;
 										gboolean _tmp347_;
-										gboolean _tmp350_;
-										gchar* _tmp353_;
-										gchar* _tmp354_;
-										gchar* _tmp355_;
-										gunichar _tmp356_ = 0U;
+										gchar* _tmp350_;
+										gchar* _tmp351_;
+										gchar* _tmp352_;
+										gunichar _tmp353_ = 0U;
 										gunichar u;
-										gunichar _tmp357_;
-										_tmp341_ = type;
-										if (_tmp341_ == VALA_TOKEN_TYPE_STRING_LITERAL) {
-											ValaSourceFile* _tmp342_;
-											ValaCodeContext* _tmp343_;
-											ValaCodeContext* _tmp344_;
-											ValaProfile _tmp345_;
-											ValaProfile _tmp346_;
-											_tmp342_ = self->priv->_source_file;
-											_tmp343_ = vala_source_file_get_context (_tmp342_);
-											_tmp344_ = _tmp343_;
-											_tmp345_ = vala_code_context_get_profile (_tmp344_);
-											_tmp346_ = _tmp345_;
-											_tmp340_ = _tmp346_ == VALA_PROFILE_DOVA;
+										gunichar _tmp354_;
+										_tmp338_ = type;
+										if (_tmp338_ == VALA_TOKEN_TYPE_STRING_LITERAL) {
+											ValaSourceFile* _tmp339_;
+											ValaCodeContext* _tmp340_;
+											ValaCodeContext* _tmp341_;
+											ValaProfile _tmp342_;
+											ValaProfile _tmp343_;
+											_tmp339_ = self->priv->_source_file;
+											_tmp340_ = vala_source_file_get_context (_tmp339_);
+											_tmp341_ = _tmp340_;
+											_tmp342_ = vala_code_context_get_profile (_tmp341_);
+											_tmp343_ = _tmp342_;
+											_tmp337_ = _tmp343_ == VALA_PROFILE_DOVA;
 										} else {
-											_tmp340_ = FALSE;
+											_tmp337_ = FALSE;
 										}
-										_tmp347_ = _tmp340_;
-										if (_tmp347_) {
-											gchar* _tmp348_;
-											gchar _tmp349_;
-											_tmp348_ = self->priv->current;
-											_tmp349_ = _tmp348_[0];
-											_tmp339_ = _tmp349_ == '$';
+										_tmp344_ = _tmp337_;
+										if (_tmp344_) {
+											gchar* _tmp345_;
+											gchar _tmp346_;
+											_tmp345_ = self->priv->current;
+											_tmp346_ = _tmp345_[0];
+											_tmp336_ = _tmp346_ == '$';
 										} else {
-											_tmp339_ = FALSE;
+											_tmp336_ = FALSE;
 										}
-										_tmp350_ = _tmp339_;
-										if (_tmp350_) {
-											gchar* _tmp351_;
-											ValaScannerState* _tmp352_;
-											gint _tmp352__length1;
+										_tmp347_ = _tmp336_;
+										if (_tmp347_) {
+											gchar* _tmp348_;
+											ValaScannerState* _tmp349_;
+											gint _tmp349__length1;
 											type = VALA_TOKEN_TYPE_OPEN_TEMPLATE;
-											_tmp351_ = begin;
-											self->priv->current = _tmp351_;
-											_tmp352_ = self->priv->state_stack;
-											_tmp352__length1 = self->priv->state_stack_length1;
+											_tmp348_ = begin;
+											self->priv->current = _tmp348_;
+											_tmp349_ = self->priv->state_stack;
+											_tmp349__length1 = self->priv->state_stack_length1;
 											_vala_array_add22 (&self->priv->state_stack, &self->priv->state_stack_length1, &self->priv->_state_stack_size_, VALA_SCANNER_STATE_TEMPLATE);
 											break;
 										}
-										_tmp353_ = self->priv->current;
-										_tmp354_ = self->priv->end;
-										_tmp355_ = self->priv->current;
-										_tmp356_ = g_utf8_get_char_validated ((const gchar*) _tmp353_, (gssize) ((glong) (_tmp354_ - _tmp355_)));
-										u = _tmp356_;
-										_tmp357_ = u;
-										if (_tmp357_ != ((gunichar) (-1))) {
-											gchar* _tmp358_;
-											gunichar _tmp359_;
-											gint _tmp360_ = 0;
-											gint _tmp361_;
-											_tmp358_ = self->priv->current;
-											_tmp359_ = u;
-											_tmp360_ = g_unichar_to_utf8 (_tmp359_, NULL);
-											self->priv->current = _tmp358_ + _tmp360_;
-											_tmp361_ = token_length_in_chars;
-											token_length_in_chars = _tmp361_ + 1;
+										_tmp350_ = self->priv->current;
+										_tmp351_ = self->priv->end;
+										_tmp352_ = self->priv->current;
+										_tmp353_ = g_utf8_get_char_validated ((const gchar*) _tmp350_, (gssize) ((glong) (_tmp351_ - _tmp352_)));
+										u = _tmp353_;
+										_tmp354_ = u;
+										if (_tmp354_ != ((gunichar) (-1))) {
+											gchar* _tmp355_;
+											gunichar _tmp356_;
+											gint _tmp357_ = 0;
+											gint _tmp358_;
+											_tmp355_ = self->priv->current;
+											_tmp356_ = u;
+											_tmp357_ = g_unichar_to_utf8 (_tmp356_, NULL);
+											self->priv->current = _tmp355_ + _tmp357_;
+											_tmp358_ = token_length_in_chars;
+											token_length_in_chars = _tmp358_ + 1;
 										} else {
-											gchar* _tmp362_;
-											ValaSourceFile* _tmp363_;
+											gchar* _tmp359_;
+											ValaSourceFile* _tmp360_;
+											gint _tmp361_;
+											gint _tmp362_;
+											gint _tmp363_;
 											gint _tmp364_;
 											gint _tmp365_;
 											gint _tmp366_;
-											gint _tmp367_;
-											gint _tmp368_;
-											gint _tmp369_;
-											ValaSourceReference* _tmp370_;
-											ValaSourceReference* _tmp371_;
-											_tmp362_ = self->priv->current;
-											self->priv->current = _tmp362_ + 1;
-											_tmp363_ = self->priv->_source_file;
+											ValaSourceReference* _tmp367_;
+											ValaSourceReference* _tmp368_;
+											_tmp359_ = self->priv->current;
+											self->priv->current = _tmp359_ + 1;
+											_tmp360_ = self->priv->_source_file;
+											_tmp361_ = self->priv->line;
+											_tmp362_ = self->priv->column;
+											_tmp363_ = token_length_in_chars;
 											_tmp364_ = self->priv->line;
 											_tmp365_ = self->priv->column;
 											_tmp366_ = token_length_in_chars;
-											_tmp367_ = self->priv->line;
-											_tmp368_ = self->priv->column;
-											_tmp369_ = token_length_in_chars;
-											_tmp370_ = vala_source_reference_new (_tmp363_, _tmp364_, _tmp365_ + _tmp366_, _tmp367_, _tmp368_ + _tmp369_);
-											_tmp371_ = _tmp370_;
-											vala_report_error (_tmp371_, "invalid UTF-8 character");
-											_vala_source_reference_unref0 (_tmp371_);
+											_tmp367_ = vala_source_reference_new (_tmp360_, _tmp361_, _tmp362_ + _tmp363_, _tmp364_, _tmp365_ + _tmp366_);
+											_tmp368_ = _tmp367_;
+											vala_report_error (_tmp368_, "invalid UTF-8 character");
+											_vala_source_reference_unref0 (_tmp368_);
 										}
 									}
 								}
-								_tmp374_ = self->priv->current;
-								_tmp375_ = self->priv->end;
-								if (_tmp374_ < _tmp375_) {
+								_tmp371_ = self->priv->current;
+								_tmp372_ = self->priv->end;
+								if (_tmp371_ < _tmp372_) {
+									gchar* _tmp373_;
+									gchar _tmp374_;
+									_tmp373_ = begin;
+									_tmp374_ = _tmp373_[0];
+									_tmp370_ = _tmp374_ == '\'';
+								} else {
+									_tmp370_ = FALSE;
+								}
+								_tmp375_ = _tmp370_;
+								if (_tmp375_) {
 									gchar* _tmp376_;
 									gchar _tmp377_;
-									_tmp376_ = begin;
+									_tmp376_ = self->priv->current;
 									_tmp377_ = _tmp376_[0];
-									_tmp373_ = _tmp377_ == '\'';
+									_tmp369_ = _tmp377_ != '\'';
 								} else {
-									_tmp373_ = FALSE;
+									_tmp369_ = FALSE;
 								}
-								_tmp378_ = _tmp373_;
+								_tmp378_ = _tmp369_;
 								if (_tmp378_) {
-									gchar* _tmp379_;
-									gchar _tmp380_;
-									_tmp379_ = self->priv->current;
-									_tmp380_ = _tmp379_[0];
-									_tmp372_ = _tmp380_ != '\'';
-								} else {
-									_tmp372_ = FALSE;
-								}
-								_tmp381_ = _tmp372_;
-								if (_tmp381_) {
-									ValaSourceFile* _tmp382_;
+									ValaSourceFile* _tmp379_;
+									gint _tmp380_;
+									gint _tmp381_;
+									gint _tmp382_;
 									gint _tmp383_;
 									gint _tmp384_;
 									gint _tmp385_;
-									gint _tmp386_;
-									gint _tmp387_;
-									gint _tmp388_;
-									ValaSourceReference* _tmp389_;
-									ValaSourceReference* _tmp390_;
-									_tmp382_ = self->priv->_source_file;
+									ValaSourceReference* _tmp386_;
+									ValaSourceReference* _tmp387_;
+									_tmp379_ = self->priv->_source_file;
+									_tmp380_ = self->priv->line;
+									_tmp381_ = self->priv->column;
+									_tmp382_ = token_length_in_chars;
 									_tmp383_ = self->priv->line;
 									_tmp384_ = self->priv->column;
 									_tmp385_ = token_length_in_chars;
-									_tmp386_ = self->priv->line;
-									_tmp387_ = self->priv->column;
-									_tmp388_ = token_length_in_chars;
-									_tmp389_ = vala_source_reference_new (_tmp382_, _tmp383_, _tmp384_ + _tmp385_, _tmp386_, _tmp387_ + _tmp388_);
-									_tmp390_ = _tmp389_;
-									vala_report_error (_tmp390_, "invalid character literal");
-									_vala_source_reference_unref0 (_tmp390_);
+									_tmp386_ = vala_source_reference_new (_tmp379_, _tmp380_, _tmp381_ + _tmp382_, _tmp383_, _tmp384_ + _tmp385_);
+									_tmp387_ = _tmp386_;
+									vala_report_error (_tmp387_, "invalid character literal");
+									_vala_source_reference_unref0 (_tmp387_);
 								}
 							}
-							_tmp391_ = self->priv->current;
-							_tmp392_ = self->priv->end;
-							if (_tmp391_ < _tmp392_) {
-								gchar* _tmp393_;
-								_tmp393_ = self->priv->current;
-								self->priv->current = _tmp393_ + 1;
+							_tmp388_ = self->priv->current;
+							_tmp389_ = self->priv->end;
+							if (_tmp388_ < _tmp389_) {
+								gchar* _tmp390_;
+								_tmp390_ = self->priv->current;
+								self->priv->current = _tmp390_ + 1;
 							} else {
-								ValaSourceFile* _tmp394_;
+								ValaSourceFile* _tmp391_;
+								gint _tmp392_;
+								gint _tmp393_;
+								gint _tmp394_;
 								gint _tmp395_;
 								gint _tmp396_;
 								gint _tmp397_;
-								gint _tmp398_;
-								gint _tmp399_;
-								gint _tmp400_;
-								ValaSourceReference* _tmp401_;
-								ValaSourceReference* _tmp402_;
+								ValaSourceReference* _tmp398_;
+								ValaSourceReference* _tmp399_;
+								gchar* _tmp400_;
+								gchar _tmp401_;
+								gchar* _tmp402_ = NULL;
 								gchar* _tmp403_;
-								gchar _tmp404_;
-								gchar* _tmp405_ = NULL;
-								gchar* _tmp406_;
-								_tmp394_ = self->priv->_source_file;
+								_tmp391_ = self->priv->_source_file;
+								_tmp392_ = self->priv->line;
+								_tmp393_ = self->priv->column;
+								_tmp394_ = token_length_in_chars;
 								_tmp395_ = self->priv->line;
 								_tmp396_ = self->priv->column;
 								_tmp397_ = token_length_in_chars;
-								_tmp398_ = self->priv->line;
-								_tmp399_ = self->priv->column;
-								_tmp400_ = token_length_in_chars;
-								_tmp401_ = vala_source_reference_new (_tmp394_, _tmp395_, _tmp396_ + _tmp397_, _tmp398_, _tmp399_ + _tmp400_);
-								_tmp402_ = _tmp401_;
-								_tmp403_ = begin;
-								_tmp404_ = _tmp403_[0];
-								_tmp405_ = g_strdup_printf ("syntax error, expected %c", (gint) _tmp404_);
-								_tmp406_ = _tmp405_;
-								vala_report_error (_tmp402_, _tmp406_);
-								_g_free0 (_tmp406_);
-								_vala_source_reference_unref0 (_tmp402_);
+								_tmp398_ = vala_source_reference_new (_tmp391_, _tmp392_, _tmp393_ + _tmp394_, _tmp395_, _tmp396_ + _tmp397_);
+								_tmp399_ = _tmp398_;
+								_tmp400_ = begin;
+								_tmp401_ = _tmp400_[0];
+								_tmp402_ = g_strdup_printf ("syntax error, expected %c", (gint) _tmp401_);
+								_tmp403_ = _tmp402_;
+								vala_report_error (_tmp399_, _tmp403_);
+								_g_free0 (_tmp403_);
+								_vala_source_reference_unref0 (_tmp399_);
 							}
 							break;
 						}
 						default:
 						{
-							gchar* _tmp407_;
-							gchar* _tmp408_;
-							gchar* _tmp409_;
-							gunichar _tmp410_ = 0U;
+							gchar* _tmp404_;
+							gchar* _tmp405_;
+							gchar* _tmp406_;
+							gunichar _tmp407_ = 0U;
 							gunichar u;
-							gunichar _tmp411_;
-							gint _tmp430_;
-							ValaSourceLocation _tmp431_ = {0};
-							ValaSourceLocation _tmp432_ = {0};
-							ValaTokenType _tmp433_ = 0;
-							_tmp407_ = self->priv->current;
-							_tmp408_ = self->priv->end;
-							_tmp409_ = self->priv->current;
-							_tmp410_ = g_utf8_get_char_validated ((const gchar*) _tmp407_, (gssize) ((glong) (_tmp408_ - _tmp409_)));
-							u = _tmp410_;
-							_tmp411_ = u;
-							if (_tmp411_ != ((gunichar) (-1))) {
-								gchar* _tmp412_;
-								gunichar _tmp413_;
-								gint _tmp414_ = 0;
-								ValaSourceFile* _tmp415_;
+							gunichar _tmp408_;
+							gint _tmp427_;
+							ValaSourceLocation _tmp428_ = {0};
+							ValaSourceLocation _tmp429_ = {0};
+							ValaTokenType _tmp430_ = 0;
+							_tmp404_ = self->priv->current;
+							_tmp405_ = self->priv->end;
+							_tmp406_ = self->priv->current;
+							_tmp407_ = g_utf8_get_char_validated ((const gchar*) _tmp404_, (gssize) ((glong) (_tmp405_ - _tmp406_)));
+							u = _tmp407_;
+							_tmp408_ = u;
+							if (_tmp408_ != ((gunichar) (-1))) {
+								gchar* _tmp409_;
+								gunichar _tmp410_;
+								gint _tmp411_ = 0;
+								ValaSourceFile* _tmp412_;
+								gint _tmp413_;
+								gint _tmp414_;
+								gint _tmp415_;
 								gint _tmp416_;
-								gint _tmp417_;
-								gint _tmp418_;
-								gint _tmp419_;
-								ValaSourceReference* _tmp420_;
-								ValaSourceReference* _tmp421_;
-								_tmp412_ = self->priv->current;
-								_tmp413_ = u;
-								_tmp414_ = g_unichar_to_utf8 (_tmp413_, NULL);
-								self->priv->current = _tmp412_ + _tmp414_;
-								_tmp415_ = self->priv->_source_file;
-								_tmp416_ = self->priv->line;
-								_tmp417_ = self->priv->column;
-								_tmp418_ = self->priv->line;
-								_tmp419_ = self->priv->column;
-								_tmp420_ = vala_source_reference_new (_tmp415_, _tmp416_, _tmp417_, _tmp418_, _tmp419_);
-								_tmp421_ = _tmp420_;
-								vala_report_error (_tmp421_, "syntax error, unexpected character");
-								_vala_source_reference_unref0 (_tmp421_);
+								ValaSourceReference* _tmp417_;
+								ValaSourceReference* _tmp418_;
+								_tmp409_ = self->priv->current;
+								_tmp410_ = u;
+								_tmp411_ = g_unichar_to_utf8 (_tmp410_, NULL);
+								self->priv->current = _tmp409_ + _tmp411_;
+								_tmp412_ = self->priv->_source_file;
+								_tmp413_ = self->priv->line;
+								_tmp414_ = self->priv->column;
+								_tmp415_ = self->priv->line;
+								_tmp416_ = self->priv->column;
+								_tmp417_ = vala_source_reference_new (_tmp412_, _tmp413_, _tmp414_, _tmp415_, _tmp416_);
+								_tmp418_ = _tmp417_;
+								vala_report_error (_tmp418_, "syntax error, unexpected character");
+								_vala_source_reference_unref0 (_tmp418_);
 							} else {
-								gchar* _tmp422_;
-								ValaSourceFile* _tmp423_;
+								gchar* _tmp419_;
+								ValaSourceFile* _tmp420_;
+								gint _tmp421_;
+								gint _tmp422_;
+								gint _tmp423_;
 								gint _tmp424_;
-								gint _tmp425_;
-								gint _tmp426_;
-								gint _tmp427_;
-								ValaSourceReference* _tmp428_;
-								ValaSourceReference* _tmp429_;
-								_tmp422_ = self->priv->current;
-								self->priv->current = _tmp422_ + 1;
-								_tmp423_ = self->priv->_source_file;
-								_tmp424_ = self->priv->line;
-								_tmp425_ = self->priv->column;
-								_tmp426_ = self->priv->line;
-								_tmp427_ = self->priv->column;
-								_tmp428_ = vala_source_reference_new (_tmp423_, _tmp424_, _tmp425_, _tmp426_, _tmp427_);
-								_tmp429_ = _tmp428_;
-								vala_report_error (_tmp429_, "invalid UTF-8 character");
-								_vala_source_reference_unref0 (_tmp429_);
+								ValaSourceReference* _tmp425_;
+								ValaSourceReference* _tmp426_;
+								_tmp419_ = self->priv->current;
+								self->priv->current = _tmp419_ + 1;
+								_tmp420_ = self->priv->_source_file;
+								_tmp421_ = self->priv->line;
+								_tmp422_ = self->priv->column;
+								_tmp423_ = self->priv->line;
+								_tmp424_ = self->priv->column;
+								_tmp425_ = vala_source_reference_new (_tmp420_, _tmp421_, _tmp422_, _tmp423_, _tmp424_);
+								_tmp426_ = _tmp425_;
+								vala_report_error (_tmp426_, "invalid UTF-8 character");
+								_vala_source_reference_unref0 (_tmp426_);
 							}
-							_tmp430_ = self->priv->column;
-							self->priv->column = _tmp430_ + 1;
-							_tmp433_ = vala_scanner_read_token (self, &_tmp431_, &_tmp432_);
-							_vala_token_begin = _tmp431_;
-							_vala_token_end = _tmp432_;
-							result = _tmp433_;
+							_tmp427_ = self->priv->column;
+							self->priv->column = _tmp427_ + 1;
+							_tmp430_ = vala_scanner_read_token (self, &_tmp428_, &_tmp429_);
+							_vala_token_begin = _tmp428_;
+							_vala_token_end = _tmp429_;
+							result = _tmp430_;
 							if (token_begin) {
 								*token_begin = _vala_token_begin;
 							}
@@ -4771,29 +4756,28 @@ ValaTokenType vala_scanner_read_token (ValaScanner* self, ValaSourceLocation* to
 			}
 		}
 	}
-	_tmp434_ = token_length_in_chars;
-	if (_tmp434_ < 0) {
+	_tmp431_ = token_length_in_chars;
+	if (_tmp431_ < 0) {
+		gint _tmp432_;
+		gchar* _tmp433_;
+		gchar* _tmp434_;
+		_tmp432_ = self->priv->column;
+		_tmp433_ = self->priv->current;
+		_tmp434_ = begin;
+		self->priv->column = _tmp432_ + ((gint) (_tmp433_ - _tmp434_));
+	} else {
 		gint _tmp435_;
-		gchar* _tmp436_;
-		gchar* _tmp437_;
+		gint _tmp436_;
 		_tmp435_ = self->priv->column;
-		_tmp436_ = self->priv->current;
-		_tmp437_ = begin;
-		self->priv->column = _tmp435_ + ((gint) (_tmp436_ - _tmp437_));
-	} else {
-		gint _tmp438_;
-		gint _tmp439_;
-		_tmp438_ = self->priv->column;
-		_tmp439_ = token_length_in_chars;
-		self->priv->column = _tmp438_ + _tmp439_;
+		_tmp436_ = token_length_in_chars;
+		self->priv->column = _tmp435_ + _tmp436_;
 	}
-	_tmp440_ = self->priv->current;
-	_tmp441_ = self->priv->line;
-	_tmp442_ = self->priv->column;
-	vala_source_location_init (&_tmp443_, _tmp440_, _tmp441_, _tmp442_ - 1);
-	_vala_token_end = _tmp443_;
-	_tmp444_ = type;
-	self->priv->previous = _tmp444_;
+	_tmp437_ = self->priv->current;
+	_tmp438_ = self->priv->line;
+	_tmp439_ = self->priv->column;
+	vala_source_location_init (&_vala_token_end, _tmp437_, _tmp438_, _tmp439_ - 1);
+	_tmp440_ = type;
+	self->priv->previous = _tmp440_;
 	result = type;
 	if (token_begin) {
 		*token_begin = _vala_token_begin;
diff --git a/vala/valasizeofexpression.c b/vala/valasizeofexpression.c
index bbc235f..a538dd9 100644
--- a/vala/valasizeofexpression.c
+++ b/vala/valasizeofexpression.c
@@ -1261,6 +1261,7 @@ static void vala_sizeof_expression_real_accept_children (ValaCodeNode* base, Val
 ValaDataType* vala_sizeof_expression_get_type_reference (ValaSizeofExpression* self);
 void vala_code_node_accept (ValaCodeNode* self, ValaCodeVisitor* visitor);
 static gboolean vala_sizeof_expression_real_is_pure (ValaExpression* base);
+static gboolean vala_sizeof_expression_real_is_constant (ValaExpression* base);
 static void vala_sizeof_expression_real_replace_type (ValaCodeNode* base, ValaDataType* old_type, ValaDataType* new_type);
 static gboolean vala_sizeof_expression_real_check (ValaCodeNode* base, ValaCodeContext* context);
 gboolean vala_code_node_get_checked (ValaCodeNode* self);
@@ -1431,6 +1432,15 @@ static gboolean vala_sizeof_expression_real_is_pure (ValaExpression* base) {
 }
 
 
+static gboolean vala_sizeof_expression_real_is_constant (ValaExpression* base) {
+	ValaSizeofExpression * self;
+	gboolean result = FALSE;
+	self = (ValaSizeofExpression*) base;
+	result = TRUE;
+	return result;
+}
+
+
 static void vala_sizeof_expression_real_replace_type (ValaCodeNode* base, ValaDataType* old_type, ValaDataType* new_type) {
 	ValaSizeofExpression * self;
 	ValaDataType* _tmp0_;
@@ -1542,6 +1552,7 @@ static void vala_sizeof_expression_class_init (ValaSizeofExpressionClass * klass
 	VALA_CODE_NODE_CLASS (klass)->accept = vala_sizeof_expression_real_accept;
 	VALA_CODE_NODE_CLASS (klass)->accept_children = vala_sizeof_expression_real_accept_children;
 	VALA_EXPRESSION_CLASS (klass)->is_pure = vala_sizeof_expression_real_is_pure;
+	VALA_EXPRESSION_CLASS (klass)->is_constant = vala_sizeof_expression_real_is_constant;
 	VALA_CODE_NODE_CLASS (klass)->replace_type = vala_sizeof_expression_real_replace_type;
 	VALA_CODE_NODE_CLASS (klass)->check = vala_sizeof_expression_real_check;
 	VALA_CODE_NODE_CLASS (klass)->emit = vala_sizeof_expression_real_emit;
diff --git a/vala/valasizeofexpression.vala b/vala/valasizeofexpression.vala
index 01fda86..42c1ee5 100644
--- a/vala/valasizeofexpression.vala
+++ b/vala/valasizeofexpression.vala
@@ -65,6 +65,10 @@ public class Vala.SizeofExpression : Expression {
 		return true;
 	}
 
+	public override bool is_constant () {
+		return true;
+	}
+
 	public override void replace_type (DataType old_type, DataType new_type) {
 		if (type_reference == old_type) {
 			type_reference = new_type;
diff --git a/vala/valatypecheck.c b/vala/valatypecheck.c
index e45a0ce..5a6da62 100644
--- a/vala/valatypecheck.c
+++ b/vala/valatypecheck.c
@@ -154,6 +154,9 @@ typedef struct _ValaSourceReferenceClass ValaSourceReferenceClass;
 typedef struct _ValaTypeSymbol ValaTypeSymbol;
 typedef struct _ValaTypeSymbolClass ValaTypeSymbolClass;
 
+#define VALA_TYPE_PROFILE (vala_profile_get_type ())
+#define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
+
 #define VALA_TYPE_SEMANTIC_ANALYZER (vala_semantic_analyzer_get_type ())
 #define VALA_SEMANTIC_ANALYZER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VALA_TYPE_SEMANTIC_ANALYZER, ValaSemanticAnalyzer))
 #define VALA_SEMANTIC_ANALYZER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VALA_TYPE_SEMANTIC_ANALYZER, ValaSemanticAnalyzerClass))
@@ -1073,6 +1076,12 @@ struct _ValaTypeCheckPrivate {
 	ValaDataType* _data_type;
 };
 
+typedef enum  {
+	VALA_PROFILE_POSIX,
+	VALA_PROFILE_GOBJECT,
+	VALA_PROFILE_DOVA
+} ValaProfile;
+
 struct _ValaCodeVisitor {
 	GTypeInstance parent_instance;
 	volatile int ref_count;
@@ -1272,9 +1281,16 @@ gboolean vala_code_node_get_checked (ValaCodeNode* self);
 gboolean vala_code_node_get_error (ValaCodeNode* self);
 void vala_code_node_set_checked (ValaCodeNode* self, gboolean value);
 gboolean vala_code_node_check (ValaCodeNode* self, ValaCodeContext* context);
+ValaDataType* vala_expression_get_value_type (ValaExpression* self);
+void vala_report_error (ValaSourceReference* source, const gchar* message);
+ValaSourceReference* vala_code_node_get_source_reference (ValaCodeNode* self);
+void vala_code_node_set_error (ValaCodeNode* self, gboolean value);
 GType vala_typesymbol_get_type (void) G_GNUC_CONST;
 ValaTypeSymbol* vala_data_type_get_data_type (ValaDataType* self);
-void vala_code_node_set_error (ValaCodeNode* self, gboolean value);
+GType vala_profile_get_type (void) G_GNUC_CONST;
+ValaProfile vala_code_context_get_profile (ValaCodeContext* self);
+ValaList* vala_data_type_get_type_arguments (ValaDataType* self);
+void vala_report_warning (ValaSourceReference* source, const gchar* message);
 GType vala_semantic_analyzer_get_type (void) G_GNUC_CONST;
 ValaSemanticAnalyzer* vala_code_context_get_analyzer (ValaCodeContext* self);
 gpointer vala_source_file_ref (gpointer instance);
@@ -1506,16 +1522,25 @@ static gboolean vala_typecheck_real_check (ValaCodeNode* base, ValaCodeContext*
 	ValaDataType* _tmp7_;
 	ValaDataType* _tmp8_;
 	ValaCodeContext* _tmp9_;
-	ValaDataType* _tmp10_;
-	ValaDataType* _tmp11_;
-	ValaTypeSymbol* _tmp12_;
-	ValaTypeSymbol* _tmp13_;
-	ValaCodeContext* _tmp14_;
-	ValaSemanticAnalyzer* _tmp15_;
-	ValaSemanticAnalyzer* _tmp16_;
-	ValaDataType* _tmp17_;
-	gboolean _tmp18_;
-	gboolean _tmp19_;
+	ValaExpression* _tmp10_;
+	ValaExpression* _tmp11_;
+	ValaDataType* _tmp12_;
+	ValaDataType* _tmp13_;
+	ValaDataType* _tmp18_;
+	ValaDataType* _tmp19_;
+	ValaTypeSymbol* _tmp20_;
+	ValaTypeSymbol* _tmp21_;
+	gboolean _tmp22_ = FALSE;
+	ValaCodeContext* _tmp23_;
+	ValaProfile _tmp24_;
+	ValaProfile _tmp25_;
+	gboolean _tmp32_;
+	ValaCodeContext* _tmp36_;
+	ValaSemanticAnalyzer* _tmp37_;
+	ValaSemanticAnalyzer* _tmp38_;
+	ValaDataType* _tmp39_;
+	gboolean _tmp40_;
+	gboolean _tmp41_;
 	self = (ValaTypeCheck*) base;
 	g_return_val_if_fail (context != NULL, FALSE);
 	_tmp0_ = vala_code_node_get_checked ((ValaCodeNode*) self);
@@ -1537,23 +1562,72 @@ static gboolean vala_typecheck_real_check (ValaCodeNode* base, ValaCodeContext*
 	_tmp8_ = _tmp7_;
 	_tmp9_ = context;
 	vala_code_node_check ((ValaCodeNode*) _tmp8_, _tmp9_);
-	_tmp10_ = vala_typecheck_get_type_reference (self);
+	_tmp10_ = vala_typecheck_get_expression (self);
 	_tmp11_ = _tmp10_;
-	_tmp12_ = vala_data_type_get_data_type (_tmp11_);
+	_tmp12_ = vala_expression_get_value_type (_tmp11_);
 	_tmp13_ = _tmp12_;
 	if (_tmp13_ == NULL) {
+		ValaExpression* _tmp14_;
+		ValaExpression* _tmp15_;
+		ValaSourceReference* _tmp16_;
+		ValaSourceReference* _tmp17_;
+		_tmp14_ = vala_typecheck_get_expression (self);
+		_tmp15_ = _tmp14_;
+		_tmp16_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp15_);
+		_tmp17_ = _tmp16_;
+		vala_report_error (_tmp17_, "invalid left operand");
 		vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
 		result = FALSE;
 		return result;
 	}
-	_tmp14_ = context;
-	_tmp15_ = vala_code_context_get_analyzer (_tmp14_);
-	_tmp16_ = _tmp15_;
-	_tmp17_ = _tmp16_->bool_type;
-	vala_expression_set_value_type ((ValaExpression*) self, _tmp17_);
-	_tmp18_ = vala_code_node_get_error ((ValaCodeNode*) self);
+	_tmp18_ = vala_typecheck_get_type_reference (self);
 	_tmp19_ = _tmp18_;
-	result = !_tmp19_;
+	_tmp20_ = vala_data_type_get_data_type (_tmp19_);
+	_tmp21_ = _tmp20_;
+	if (_tmp21_ == NULL) {
+		vala_code_node_set_error ((ValaCodeNode*) self, TRUE);
+		result = FALSE;
+		return result;
+	}
+	_tmp23_ = context;
+	_tmp24_ = vala_code_context_get_profile (_tmp23_);
+	_tmp25_ = _tmp24_;
+	if (_tmp25_ == VALA_PROFILE_GOBJECT) {
+		ValaDataType* _tmp26_;
+		ValaDataType* _tmp27_;
+		ValaList* _tmp28_ = NULL;
+		ValaList* _tmp29_;
+		gint _tmp30_;
+		gint _tmp31_;
+		_tmp26_ = vala_typecheck_get_type_reference (self);
+		_tmp27_ = _tmp26_;
+		_tmp28_ = vala_data_type_get_type_arguments (_tmp27_);
+		_tmp29_ = _tmp28_;
+		_tmp30_ = vala_collection_get_size ((ValaCollection*) _tmp29_);
+		_tmp31_ = _tmp30_;
+		_tmp22_ = _tmp31_ > 0;
+		_vala_iterable_unref0 (_tmp29_);
+	} else {
+		_tmp22_ = FALSE;
+	}
+	_tmp32_ = _tmp22_;
+	if (_tmp32_) {
+		ValaDataType* _tmp33_;
+		ValaSourceReference* _tmp34_;
+		ValaSourceReference* _tmp35_;
+		_tmp33_ = self->priv->_data_type;
+		_tmp34_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp33_);
+		_tmp35_ = _tmp34_;
+		vala_report_warning (_tmp35_, "Type argument list has no effect");
+	}
+	_tmp36_ = context;
+	_tmp37_ = vala_code_context_get_analyzer (_tmp36_);
+	_tmp38_ = _tmp37_;
+	_tmp39_ = _tmp38_->bool_type;
+	vala_expression_set_value_type ((ValaExpression*) self, _tmp39_);
+	_tmp40_ = vala_code_node_get_error ((ValaCodeNode*) self);
+	_tmp41_ = _tmp40_;
+	result = !_tmp41_;
 	return result;
 }
 
diff --git a/vala/valatypecheck.vala b/vala/valatypecheck.vala
index 749401d..2214733 100644
--- a/vala/valatypecheck.vala
+++ b/vala/valatypecheck.vala
@@ -104,12 +104,22 @@ public class Vala.TypeCheck : Expression {
 		
 		type_reference.check (context);
 
+		if (expression.value_type == null) {
+			Report.error (expression.source_reference, "invalid left operand");
+			error = true;
+			return false;
+		}
+
 		if (type_reference.data_type == null) {
 			/* if type resolving didn't succeed, skip this check */
 			error = true;
 			return false;
 		}
 
+		if (context.profile == Profile.GOBJECT && type_reference.get_type_arguments ().size > 0) {
+			Report.warning (_data_type.source_reference, "Type argument list has no effect");
+		}
+
 		value_type = context.analyzer.bool_type;
 
 		return !error;
diff --git a/vala/valatypeofexpression.c b/vala/valatypeofexpression.c
index 7ee9fb6..6925fb2 100644
--- a/vala/valatypeofexpression.c
+++ b/vala/valatypeofexpression.c
@@ -1026,6 +1026,9 @@ typedef struct _ValaReferenceTypeClass ValaReferenceTypeClass;
 typedef struct _ValaObjectType ValaObjectType;
 typedef struct _ValaObjectTypeClass ValaObjectTypeClass;
 
+#define VALA_TYPE_PROFILE (vala_profile_get_type ())
+#define _vala_iterable_unref0(var) ((var == NULL) ? NULL : (var = (vala_iterable_unref (var), NULL)))
+
 struct _ValaCodeNode {
 	GTypeInstance parent_instance;
 	volatile int ref_count;
@@ -1207,6 +1210,12 @@ struct _ValaSemanticAnalyzerClass {
 	ValaCodeVisitorClass parent_class;
 };
 
+typedef enum  {
+	VALA_PROFILE_POSIX,
+	VALA_PROFILE_GOBJECT,
+	VALA_PROFILE_DOVA
+} ValaProfile;
+
 
 static gpointer vala_typeof_expression_parent_class = NULL;
 
@@ -1363,6 +1372,11 @@ GType vala_struct_value_type_get_type (void) G_GNUC_CONST;
 GType vala_reference_type_get_type (void) G_GNUC_CONST;
 GType vala_object_type_get_type (void) G_GNUC_CONST;
 void vala_expression_set_value_type (ValaExpression* self, ValaDataType* value);
+GType vala_profile_get_type (void) G_GNUC_CONST;
+ValaProfile vala_code_context_get_profile (ValaCodeContext* self);
+ValaList* vala_data_type_get_type_arguments (ValaDataType* self);
+void vala_report_warning (ValaSourceReference* source, const gchar* message);
+ValaSourceReference* vala_code_node_get_source_reference (ValaCodeNode* self);
 static void vala_typeof_expression_real_emit (ValaCodeNode* base, ValaCodeGenerator* codegen);
 void vala_code_node_set_parent_node (ValaCodeNode* self, ValaCodeNode* value);
 static void vala_typeof_expression_finalize (ValaCodeNode* obj);
@@ -1462,8 +1476,13 @@ static gboolean vala_typeof_expression_real_check (ValaCodeNode* base, ValaCodeC
 	ValaSemanticAnalyzer* _tmp8_;
 	ValaSemanticAnalyzer* _tmp9_;
 	ValaDataType* _tmp10_;
-	gboolean _tmp11_;
-	gboolean _tmp12_;
+	gboolean _tmp11_ = FALSE;
+	ValaCodeContext* _tmp12_;
+	ValaProfile _tmp13_;
+	ValaProfile _tmp14_;
+	gboolean _tmp21_;
+	gboolean _tmp25_;
+	gboolean _tmp26_;
 	self = (ValaTypeofExpression*) base;
 	g_return_val_if_fail (context != NULL, FALSE);
 	_tmp0_ = vala_code_node_get_checked ((ValaCodeNode*) self);
@@ -1486,9 +1505,40 @@ static gboolean vala_typeof_expression_real_check (ValaCodeNode* base, ValaCodeC
 	_tmp9_ = _tmp8_;
 	_tmp10_ = _tmp9_->type_type;
 	vala_expression_set_value_type ((ValaExpression*) self, _tmp10_);
-	_tmp11_ = vala_code_node_get_error ((ValaCodeNode*) self);
-	_tmp12_ = _tmp11_;
-	result = !_tmp12_;
+	_tmp12_ = context;
+	_tmp13_ = vala_code_context_get_profile (_tmp12_);
+	_tmp14_ = _tmp13_;
+	if (_tmp14_ == VALA_PROFILE_GOBJECT) {
+		ValaDataType* _tmp15_;
+		ValaDataType* _tmp16_;
+		ValaList* _tmp17_ = NULL;
+		ValaList* _tmp18_;
+		gint _tmp19_;
+		gint _tmp20_;
+		_tmp15_ = vala_typeof_expression_get_type_reference (self);
+		_tmp16_ = _tmp15_;
+		_tmp17_ = vala_data_type_get_type_arguments (_tmp16_);
+		_tmp18_ = _tmp17_;
+		_tmp19_ = vala_collection_get_size ((ValaCollection*) _tmp18_);
+		_tmp20_ = _tmp19_;
+		_tmp11_ = _tmp20_ > 0;
+		_vala_iterable_unref0 (_tmp18_);
+	} else {
+		_tmp11_ = FALSE;
+	}
+	_tmp21_ = _tmp11_;
+	if (_tmp21_) {
+		ValaDataType* _tmp22_;
+		ValaSourceReference* _tmp23_;
+		ValaSourceReference* _tmp24_;
+		_tmp22_ = self->priv->_data_type;
+		_tmp23_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp22_);
+		_tmp24_ = _tmp23_;
+		vala_report_warning (_tmp24_, "Type argument list without effect");
+	}
+	_tmp25_ = vala_code_node_get_error ((ValaCodeNode*) self);
+	_tmp26_ = _tmp25_;
+	result = !_tmp26_;
 	return result;
 }
 
diff --git a/vala/valatypeofexpression.vala b/vala/valatypeofexpression.vala
index 9efb1f5..1154016 100644
--- a/vala/valatypeofexpression.vala
+++ b/vala/valatypeofexpression.vala
@@ -82,6 +82,10 @@ public class Vala.TypeofExpression : Expression {
 
 		value_type = context.analyzer.type_type;
 
+		if (context.profile == Profile.GOBJECT && type_reference.get_type_arguments ().size > 0) {
+			Report.warning (_data_type.source_reference, "Type argument list without effect");
+		}
+
 		return !error;
 	}
 
diff --git a/vapi/Makefile.am b/vapi/Makefile.am
index f1d5557..02329b7 100644
--- a/vapi/Makefile.am
+++ b/vapi/Makefile.am
@@ -28,6 +28,8 @@ dist_vapi_DATA = \
 	clutter-json-1.0.vapi \
 	cogl-1.0.vapi \
 	cogl-1.0.deps \
+	cogl-pango-1.0.vapi \
+	cogl-pango-1.0.deps \
 	curses.vapi \
 	dbus-glib-1.vapi \
 	enchant.vapi \
@@ -47,6 +49,8 @@ dist_vapi_DATA = \
 	gdk-x11-3.0.vapi \
 	gdl-1.0.deps \
 	gdl-1.0.vapi \
+	gdl-3.0.deps \
+	gdl-3.0.vapi \
 	gdu.deps \
 	gdu.vapi \
 	gdu-gtk.deps \
@@ -155,6 +159,8 @@ dist_vapi_DATA = \
 	libnl-1.vapi \
 	libnl-2.0.deps \
 	libnl-2.0.vapi \
+	libnl-3.0.deps \
+	libnl-3.0.vapi \
 	libnotify.deps \
 	libnotify.vapi \
 	liboobs-1.vapi \
@@ -223,6 +229,8 @@ dist_vapi_DATA = \
 	tracker-indexer-module-1.0.vapi \
 	twitter-glib-1.0.deps \
 	twitter-glib-1.0.vapi \
+	udisks2.deps \
+	udisks2.vapi \
 	unique-1.0.deps \
 	unique-1.0.vapi \
 	v4l2.vapi \
@@ -235,6 +243,8 @@ dist_vapi_DATA = \
 	webkit-1.0.vapi \
 	x11.vapi \
 	xcb.vapi \
+	xtst.vapi \
+	xtst.deps \
 	zlib.vapi \
 	$(NULL)
 
@@ -242,7 +252,96 @@ dist_noinst_DATA = \
 	config.vapi \
 	$(NULL)
 
-BINDINGS = atk clutter-1.0 clutter-gtk-0.10 clutter-gtk-1.0 cogl-1.0 gconf-2.0 gdk-2.0 gdk-3.0 gdk-pixbuf-2.0 gdk-x11-2.0 gdk-x11-3.0 gdl-1.0 gdu gdu-gtk gedit-2.20 gedit gio-2.0 gio-unix-2.0 gnome-desktop-2.0 gnome-keyring-1 gnome-vfs-2.0 goocanvas gstreamer-0.10 gstreamer-app-0.10 gstreamer-audio-0.10 gstreamer-base-0.10 gstreamer-cdda-0.10 gstreamer-check-0.10 gstreamer-controller-0.10 gstreamer-dataprotocol-0.10 gstreamer-fft-0.10 gstreamer-interfaces-0.10 gstreamer-net-0.10 gstreamer-netbuffer-0.10 gstreamer-pbutils-0.10 gstreamer-riff-0.10 gstreamer-rtp-0.10 gstreamer-rtsp-0.10 gstreamer-sdp-0.10 gstreamer-tag-0.10 gstreamer-video-0.10 gtk+-2.0 gtk+-3.0 gtksourceview-2.0 gtksourceview-3.0 gudev-1.0 hildon-1 hildon-fm-2 json-glib-1.0 libepc-1.0 libgda-4.0 libgda-report-4.0 libgdata libglade-2.0 libgnome-2.0 libgnome-menu libgnomeui-2.0 libgsf-1 libnotify liboobs-1 libpeas-1.0 librsvg-2.0 libsexy libsoup-2.2 libsoup-2.4 libwnck-1.0 loudmouth-1.0 mx-1.0 pango pangocairo p
 oppler-glib purple rest-0.6 rest-extras-0.6 rest-0.7 tracker-indexer-module-1.0 twitter-glib-1.0 unique-1.0 vte vte-2.90 webkit-1.0
+GIDL_BINDINGS = \
+	clutter-gtk-1.0 \
+	cogl-1.0 \
+	gconf-2.0 \
+	gdk-2.0 \
+	gdk-x11-2.0 \
+	gdk-x11-3.0 \
+	gdl-1.0 \
+	gdu \
+	gdk-gtk \
+	gedit-2.20 \
+	gnome-desktop-2.0 \
+	gnome-keyring-1 \
+	gnome-vfs-2.0 \
+	goocanvas \
+	gstreamer-0.10 \
+	gstreamer-app-0.10 \
+	gstreamer-audio-0.10 \
+	gstreamer-base-0.10 \
+	gstreamer-cdda-0.10 \
+	gstreamer-check-0.10 \
+	gstreamer-controller-0.10 \
+	gstreamer-dataprotocol-0.10 \
+	gstreamer-fft-0.10 \
+	gstreamer-interfaces-0.10 \
+	gstreamer-net-0.10 \
+	gstreamer-netbuffer-0.10 \
+	gstreamer-pbutils-0.10 \
+	gstreamer-riff-0.10 \
+	gstreamer-rtp-0.10 \
+	gstreamer-rtsp-0.10 \
+	gstreamer-sdp-0.10 \
+	gstreamer-tag-0.10 \
+	gstreamer-video-0.10 \
+	gtk+-2.0 \
+	gtk+-3.0 \
+	gtksourceview-2.0 \
+	hildon-1 \
+	hildon-fm-2 \
+	libepc-1.0 \
+	libgda-4.0 \
+	libgda-report-4.0 \
+	libglade-2.0 \
+	libgnome-2.0 \
+	libgnome-menu \
+	libgnomeui-2.0 \
+	libgsf-1 \
+	libnotify \
+	liboobs-1 \
+	librsvg-2.0 \
+	libsexy \
+	libsoup-2.2 \
+	loudmouth-1.0 \
+	pango \
+	purple \
+	rest-0.6 \
+	rest-extras-0.6 \
+	tracker-indexer-module-1.0 \
+	twitter-glib-1.0 \
+	unique-1.0 \
+	vte \
+	webkit-1.0 \
+	$(NULL)
+
+GIR_BINDINGS = \
+	atk \
+	clutter-1.0 \
+	cogl-pango \
+	gdk-3.0 \
+	gdk-pixbuf-2.0 \
+	gdl-3.0 \
+	gedit \
+	gio-2.0 \
+	gtksourceview-3.0 \
+	gudev-1.0 \
+	json-glib-1.0 \
+	libgdata \
+	libpeas-1.0 \
+	libsoup-2.4 \
+	libwnck-3.0 \
+	mx-1.0 \
+	packagekit-glib2 \
+	pangocairo \
+	poppler-glib \
+	rest-0.7 \
+	udisks2 \
+	vte-2.90 \
+	$(NULL)
+
+BINDINGS = $(GIR_BINDINGS) $(GIDL_BINDINGS)
 
 VAPIGEN = $(top_builddir)/vapigen/vapigen
 VAPIGENFLAGS = --vapidir $(srcdir)
@@ -254,7 +353,11 @@ GEDIT_GIRDIR=$$($(PKG_CONFIG) gedit --variable=prefix)/share/gedit/gir-1.0
 
 .PHONY: all-bindings $(BINDINGS)
 
-all-bindings: $(BINDINGS)
+gir-bindings: $(GIR_BINDINGS)
+
+gidl-bindings: $(GIDL_BINDINGS)
+
+all-bindings: gir-bindings gidl-bindings
 
 atk:
 	$(GENVAPI) --library $(srcdir)/atk --metadatadir $(METADATADIR) $(METADATADIR)/Atk-1.0-custom.vala $(GIRDIR)/Atk-1.0.gir
@@ -266,11 +369,14 @@ clutter-gtk-0.10:
 	$(GENVAPI) --library $(srcdir)/clutter-gtk-0.10 $(PACKAGESDIR)/clutter-gtk-0.10/clutter-gtk-0.10.gi
 
 clutter-gtk-1.0:
-	$(GENVAPI) --library $(srcdir)/clutter-gtk-1.0 $(PACKAGESDIR)/clutter-gtk-1.0/clutter-gtk-1.0.gi
+	$(GENVAPI) --library $(srcdir)/clutter-gtk-1.0 --metadatadir $(METADATADIR) $(METADATADIR)/GtkClutter-1.0-custom.vala --pkg clutter-1.0 --pkg gtk+-3.0 --pkg cogl-pango-1.0 $(GIRDIR)/GtkClutter-1.0.gir
 
 cogl-1.0:
 	$(GENVAPI) --library $(srcdir)/cogl-1.0 $(PACKAGESDIR)/cogl-1.0/cogl-1.0-custom.vala $(PACKAGESDIR)/cogl-1.0/cogl-1.0.gi
 
+cogl-pango-1.0:
+	$(GENVAPI) --library $(srcdir)/cogl-pango-1.0 --metadatadir $(METADATADIR) --pkg cogl-1.0 --pkg pango $(GIRDIR)/CoglPango-1.0.gir
+
 gconf-2.0:
 	$(GENVAPI) --library $(srcdir)/gconf-2.0 $(PACKAGESDIR)/gconf-2.0/gconf-2.0.gi
 
@@ -292,6 +398,9 @@ gdk-x11-3.0:
 gdl-1.0:
 	$(GENVAPI) --library $(srcdir)/gdl-1.0 $(PACKAGESDIR)/gdl-1.0/gdl-1.0-custom.vala $(PACKAGESDIR)/gdl-1.0/gdl-1.0.gi
 
+gdl-3.0:
+	$(GENVAPI) --library $(srcdir)/gdl-3.0 --pkg gio-2.0 --pkg gtk+-3.0 --metadatadir $(METADATADIR) $(GIRDIR)/Gdl-3.gir
+
 gdu:
 	$(GENVAPI) --library $(srcdir)/gdu $(PACKAGESDIR)/gdu/gdu.gi
 
@@ -305,7 +414,7 @@ gedit:
 	$(GENVAPI) --library $(srcdir)/gedit --metadatadir $(METADATADIR) $(GEDIT_GIRDIR)/Gedit-3.0.gir
 
 gio-2.0:
-	$(GENVAPI) --library $(srcdir)/gio-2.0 $(PACKAGESDIR)/gio-2.0/gio-2.0-custom.vala $(PACKAGESDIR)/gio-2.0/gio-2.0.gi
+	$(GENVAPI) --library $(srcdir)/gio-2.0 --metadatadir $(METADATADIR) $(METADATADIR)/Gio-2.0-custom.vala $(GIRDIR)/Gio-2.0.gir
 
 gio-unix-2.0:
 	$(GENVAPI) --library $(srcdir)/gio-unix-2.0 $(PACKAGESDIR)/gio-unix-2.0/gio-unix-2.0-custom.vala $(PACKAGESDIR)/gio-unix-2.0/gio-unix-2.0.gi
@@ -437,7 +546,7 @@ liboobs-1:
 	$(GENVAPI) --library $(srcdir)/liboobs-1 $(PACKAGESDIR)/liboobs-1/liboobs-1.gi
 
 libpeas-1.0:
-	$(GENVAPI) --library $(srcdir)/libpeas-1.0 --metadatadir $(METADATADIR) $(GIRDIR)/Peas-1.0.gir
+	$(GENVAPI) --library $(srcdir)/libpeas-1.0 --pkg gio-2.0 --metadatadir $(METADATADIR) $(GIRDIR)/Peas-1.0.gir
 
 librsvg-2.0:
 	$(GENVAPI) --library $(srcdir)/librsvg-2.0 $(PACKAGESDIR)/librsvg-2.0/librsvg-2.0.gi
@@ -463,6 +572,9 @@ loudmouth-1.0:
 mx-1.0:
 	$(GENVAPI) --library $(srcdir)/mx-1.0 --metadatadir $(METADATADIR) $(METADATADIR)/Mx-1.0-custom.vala $(GIRDIR)/Mx-1.0.gir
 
+packagekit-glib2:
+	$(GENVAPI) --library $(srcdir)/packagekit-glib2 --metadatadir $(METADATADIR) --pkg gio-2.0 $(GIRDIR)/PackageKitGlib-1.0.gir
+
 pango:
 	$(GENVAPI) --library $(srcdir)/pango $(PACKAGESDIR)/pango/pango-custom.vala $(PACKAGESDIR)/pango/pango.gi
 
@@ -470,7 +582,7 @@ pangocairo:
 	$(GENVAPI) --library $(srcdir)/pangocairo --metadatadir $(METADATADIR) $(GIRDIR)/PangoCairo-1.0.gir
 
 poppler-glib:
-	$(GENVAPI) --library $(srcdir)/poppler-glib $(PACKAGESDIR)/poppler-glib/poppler-glib.gi
+	$(GENVAPI) --library $(srcdir)/poppler-glib --metadatadir $(METADATADIR) $(GIRDIR)/Poppler-0.18.gir
 
 purple:
 	$(GENVAPI) --library $(srcdir)/purple $(PACKAGESDIR)/purple/purple-custom.vala $(PACKAGESDIR)/purple/purple.gi
@@ -482,7 +594,7 @@ rest-extras-0.6:
 	$(GENVAPI) --library $(srcdir)/rest-extras-0.6 $(PACKAGESDIR)/rest-extras-0.6/rest-extras-0.6-custom.vala $(PACKAGESDIR)/rest-extras-0.6/rest-extras-0.6.gi
 
 rest-0.7:
-	$(GENVAPI) --library $(srcdir)/rest-0.7 --metadatadir $(METADATADIR) $(GIRDIR)/Rest-0.7.gir
+	$(GENVAPI) --library $(srcdir)/rest-0.7 --metadatadir $(METADATADIR) --pkg gio-2.0 $(GIRDIR)/Rest-0.7.gir
 
 tracker-indexer-module-1.0:
 	$(GENVAPI) --library $(srcdir)/tracker-indexer-module-1.0 $(PACKAGESDIR)/tracker-indexer-module-1.0/tracker-indexer-module-1.0-custom.vala $(PACKAGESDIR)/tracker-indexer-module-1.0/tracker-indexer-module-1.0.gi
@@ -490,6 +602,9 @@ tracker-indexer-module-1.0:
 twitter-glib-1.0:
 	$(GENVAPI) --library $(srcdir)/twitter-glib-1.0 $(PACKAGESDIR)/twitter-glib-1.0/twitter-glib-1.0.gi
 
+udisks2:
+	$(GENVAPI) --library $(srcdir)/udisks2 --metadatadir $(METADATADIR) --pkg gio-2.0 $(GIRDIR)/UDisks-2.0.gir
+
 unique-1.0:
 	$(GENVAPI) --library $(srcdir)/unique-1.0 $(PACKAGESDIR)/unique-1.0/unique-1.0.gi
 
diff --git a/vapi/Makefile.in b/vapi/Makefile.in
index ee74e06..d0129dd 100644
--- a/vapi/Makefile.in
+++ b/vapi/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,6 +15,23 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkglibexecdir = $(libexecdir)/@PACKAGE@
@@ -47,14 +63,19 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_ AM_V@)
+am__v_GEN_ = $(am__v_GEN_ AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+AM_V_at = $(am__v_at_ AM_V@)
+am__v_at_ = $(am__v_at_ AM_DEFAULT_V@)
 am__v_at_0 = @
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -76,6 +97,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(vapidir)"
 DATA = $(dist_noinst_DATA) $(dist_vapi_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -202,7 +229,6 @@ libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 prefix = @prefix@
@@ -243,6 +269,8 @@ dist_vapi_DATA = \
 	clutter-json-1.0.vapi \
 	cogl-1.0.vapi \
 	cogl-1.0.deps \
+	cogl-pango-1.0.vapi \
+	cogl-pango-1.0.deps \
 	curses.vapi \
 	dbus-glib-1.vapi \
 	enchant.vapi \
@@ -262,6 +290,8 @@ dist_vapi_DATA = \
 	gdk-x11-3.0.vapi \
 	gdl-1.0.deps \
 	gdl-1.0.vapi \
+	gdl-3.0.deps \
+	gdl-3.0.vapi \
 	gdu.deps \
 	gdu.vapi \
 	gdu-gtk.deps \
@@ -370,6 +400,8 @@ dist_vapi_DATA = \
 	libnl-1.vapi \
 	libnl-2.0.deps \
 	libnl-2.0.vapi \
+	libnl-3.0.deps \
+	libnl-3.0.vapi \
 	libnotify.deps \
 	libnotify.vapi \
 	liboobs-1.vapi \
@@ -438,6 +470,8 @@ dist_vapi_DATA = \
 	tracker-indexer-module-1.0.vapi \
 	twitter-glib-1.0.deps \
 	twitter-glib-1.0.vapi \
+	udisks2.deps \
+	udisks2.vapi \
 	unique-1.0.deps \
 	unique-1.0.vapi \
 	v4l2.vapi \
@@ -450,6 +484,8 @@ dist_vapi_DATA = \
 	webkit-1.0.vapi \
 	x11.vapi \
 	xcb.vapi \
+	xtst.vapi \
+	xtst.deps \
 	zlib.vapi \
 	$(NULL)
 
@@ -457,27 +493,96 @@ dist_noinst_DATA = \
 	config.vapi \
 	$(NULL)
 
-BINDINGS = atk clutter-1.0 clutter-gtk-0.10 clutter-gtk-1.0 cogl-1.0 \
-	gconf-2.0 gdk-2.0 gdk-3.0 gdk-pixbuf-2.0 gdk-x11-2.0 \
-	gdk-x11-3.0 gdl-1.0 gdu gdu-gtk gedit-2.20 gedit gio-2.0 \
-	gio-unix-2.0 gnome-desktop-2.0 gnome-keyring-1 gnome-vfs-2.0 \
-	goocanvas gstreamer-0.10 gstreamer-app-0.10 \
-	gstreamer-audio-0.10 gstreamer-base-0.10 gstreamer-cdda-0.10 \
-	gstreamer-check-0.10 gstreamer-controller-0.10 \
-	gstreamer-dataprotocol-0.10 gstreamer-fft-0.10 \
-	gstreamer-interfaces-0.10 gstreamer-net-0.10 \
-	gstreamer-netbuffer-0.10 gstreamer-pbutils-0.10 \
-	gstreamer-riff-0.10 gstreamer-rtp-0.10 gstreamer-rtsp-0.10 \
-	gstreamer-sdp-0.10 gstreamer-tag-0.10 gstreamer-video-0.10 \
-	gtk+-2.0 gtk+-3.0 gtksourceview-2.0 gtksourceview-3.0 \
-	gudev-1.0 hildon-1 hildon-fm-2 json-glib-1.0 libepc-1.0 \
-	libgda-4.0 libgda-report-4.0 libgdata libglade-2.0 \
-	libgnome-2.0 libgnome-menu libgnomeui-2.0 libgsf-1 libnotify \
-	liboobs-1 libpeas-1.0 librsvg-2.0 libsexy libsoup-2.2 \
-	libsoup-2.4 libwnck-1.0 loudmouth-1.0 mx-1.0 pango pangocairo \
-	poppler-glib purple rest-0.6 rest-extras-0.6 rest-0.7 \
-	tracker-indexer-module-1.0 twitter-glib-1.0 unique-1.0 vte \
-	vte-2.90 webkit-1.0
+GIDL_BINDINGS = \
+	clutter-gtk-1.0 \
+	cogl-1.0 \
+	gconf-2.0 \
+	gdk-2.0 \
+	gdk-x11-2.0 \
+	gdk-x11-3.0 \
+	gdl-1.0 \
+	gdu \
+	gdk-gtk \
+	gedit-2.20 \
+	gnome-desktop-2.0 \
+	gnome-keyring-1 \
+	gnome-vfs-2.0 \
+	goocanvas \
+	gstreamer-0.10 \
+	gstreamer-app-0.10 \
+	gstreamer-audio-0.10 \
+	gstreamer-base-0.10 \
+	gstreamer-cdda-0.10 \
+	gstreamer-check-0.10 \
+	gstreamer-controller-0.10 \
+	gstreamer-dataprotocol-0.10 \
+	gstreamer-fft-0.10 \
+	gstreamer-interfaces-0.10 \
+	gstreamer-net-0.10 \
+	gstreamer-netbuffer-0.10 \
+	gstreamer-pbutils-0.10 \
+	gstreamer-riff-0.10 \
+	gstreamer-rtp-0.10 \
+	gstreamer-rtsp-0.10 \
+	gstreamer-sdp-0.10 \
+	gstreamer-tag-0.10 \
+	gstreamer-video-0.10 \
+	gtk+-2.0 \
+	gtk+-3.0 \
+	gtksourceview-2.0 \
+	hildon-1 \
+	hildon-fm-2 \
+	libepc-1.0 \
+	libgda-4.0 \
+	libgda-report-4.0 \
+	libglade-2.0 \
+	libgnome-2.0 \
+	libgnome-menu \
+	libgnomeui-2.0 \
+	libgsf-1 \
+	libnotify \
+	liboobs-1 \
+	librsvg-2.0 \
+	libsexy \
+	libsoup-2.2 \
+	loudmouth-1.0 \
+	pango \
+	purple \
+	rest-0.6 \
+	rest-extras-0.6 \
+	tracker-indexer-module-1.0 \
+	twitter-glib-1.0 \
+	unique-1.0 \
+	vte \
+	webkit-1.0 \
+	$(NULL)
+
+GIR_BINDINGS = \
+	atk \
+	clutter-1.0 \
+	cogl-pango \
+	gdk-3.0 \
+	gdk-pixbuf-2.0 \
+	gdl-3.0 \
+	gedit \
+	gio-2.0 \
+	gtksourceview-3.0 \
+	gudev-1.0 \
+	json-glib-1.0 \
+	libgdata \
+	libpeas-1.0 \
+	libsoup-2.4 \
+	libwnck-3.0 \
+	mx-1.0 \
+	packagekit-glib2 \
+	pangocairo \
+	poppler-glib \
+	rest-0.7 \
+	udisks2 \
+	vte-2.90 \
+	$(NULL)
+
+BINDINGS = $(GIR_BINDINGS) $(GIDL_BINDINGS)
 VAPIGEN = $(top_builddir)/vapigen/vapigen
 VAPIGENFLAGS = --vapidir $(srcdir)
 GENVAPI = $(VAPIGEN) $(VAPIGENFLAGS)
@@ -526,8 +631,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-dist_vapiDATA: $(dist_vapi_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(vapidir)" || $(MKDIR_P) "$(DESTDIR)$(vapidir)"
 	@list='$(dist_vapi_DATA)'; test -n "$(vapidir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(vapidir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(vapidir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -541,15 +649,15 @@ uninstall-dist_vapiDATA:
 	@$(NORMAL_UNINSTALL)
 	@list='$(dist_vapi_DATA)'; test -n "$(vapidir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(vapidir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(vapidir)" && rm -f $$files
+	dir='$(DESTDIR)$(vapidir)'; $(am__uninstall_files_from_dir)
 tags: TAGS
 TAGS:
 
 ctags: CTAGS
 CTAGS:
 
+cscope cscopelist:
+
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -598,10 +706,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -699,7 +812,11 @@ libvala PACKAGE_SUFFIX@.vapi: ../gee/gee.vapi ../ccode/ccode.vapi ../vala/vala.v
 
 .PHONY: all-bindings $(BINDINGS)
 
-all-bindings: $(BINDINGS)
+gir-bindings: $(GIR_BINDINGS)
+
+gidl-bindings: $(GIDL_BINDINGS)
+
+all-bindings: gir-bindings gidl-bindings
 
 atk:
 	$(GENVAPI) --library $(srcdir)/atk --metadatadir $(METADATADIR) $(METADATADIR)/Atk-1.0-custom.vala $(GIRDIR)/Atk-1.0.gir
@@ -711,11 +828,14 @@ clutter-gtk-0.10:
 	$(GENVAPI) --library $(srcdir)/clutter-gtk-0.10 $(PACKAGESDIR)/clutter-gtk-0.10/clutter-gtk-0.10.gi
 
 clutter-gtk-1.0:
-	$(GENVAPI) --library $(srcdir)/clutter-gtk-1.0 $(PACKAGESDIR)/clutter-gtk-1.0/clutter-gtk-1.0.gi
+	$(GENVAPI) --library $(srcdir)/clutter-gtk-1.0 --metadatadir $(METADATADIR) $(METADATADIR)/GtkClutter-1.0-custom.vala --pkg clutter-1.0 --pkg gtk+-3.0 --pkg cogl-pango-1.0 $(GIRDIR)/GtkClutter-1.0.gir
 
 cogl-1.0:
 	$(GENVAPI) --library $(srcdir)/cogl-1.0 $(PACKAGESDIR)/cogl-1.0/cogl-1.0-custom.vala $(PACKAGESDIR)/cogl-1.0/cogl-1.0.gi
 
+cogl-pango-1.0:
+	$(GENVAPI) --library $(srcdir)/cogl-pango-1.0 --metadatadir $(METADATADIR) --pkg cogl-1.0 --pkg pango $(GIRDIR)/CoglPango-1.0.gir
+
 gconf-2.0:
 	$(GENVAPI) --library $(srcdir)/gconf-2.0 $(PACKAGESDIR)/gconf-2.0/gconf-2.0.gi
 
@@ -737,6 +857,9 @@ gdk-x11-3.0:
 gdl-1.0:
 	$(GENVAPI) --library $(srcdir)/gdl-1.0 $(PACKAGESDIR)/gdl-1.0/gdl-1.0-custom.vala $(PACKAGESDIR)/gdl-1.0/gdl-1.0.gi
 
+gdl-3.0:
+	$(GENVAPI) --library $(srcdir)/gdl-3.0 --pkg gio-2.0 --pkg gtk+-3.0 --metadatadir $(METADATADIR) $(GIRDIR)/Gdl-3.gir
+
 gdu:
 	$(GENVAPI) --library $(srcdir)/gdu $(PACKAGESDIR)/gdu/gdu.gi
 
@@ -750,7 +873,7 @@ gedit:
 	$(GENVAPI) --library $(srcdir)/gedit --metadatadir $(METADATADIR) $(GEDIT_GIRDIR)/Gedit-3.0.gir
 
 gio-2.0:
-	$(GENVAPI) --library $(srcdir)/gio-2.0 $(PACKAGESDIR)/gio-2.0/gio-2.0-custom.vala $(PACKAGESDIR)/gio-2.0/gio-2.0.gi
+	$(GENVAPI) --library $(srcdir)/gio-2.0 --metadatadir $(METADATADIR) $(METADATADIR)/Gio-2.0-custom.vala $(GIRDIR)/Gio-2.0.gir
 
 gio-unix-2.0:
 	$(GENVAPI) --library $(srcdir)/gio-unix-2.0 $(PACKAGESDIR)/gio-unix-2.0/gio-unix-2.0-custom.vala $(PACKAGESDIR)/gio-unix-2.0/gio-unix-2.0.gi
@@ -882,7 +1005,7 @@ liboobs-1:
 	$(GENVAPI) --library $(srcdir)/liboobs-1 $(PACKAGESDIR)/liboobs-1/liboobs-1.gi
 
 libpeas-1.0:
-	$(GENVAPI) --library $(srcdir)/libpeas-1.0 --metadatadir $(METADATADIR) $(GIRDIR)/Peas-1.0.gir
+	$(GENVAPI) --library $(srcdir)/libpeas-1.0 --pkg gio-2.0 --metadatadir $(METADATADIR) $(GIRDIR)/Peas-1.0.gir
 
 librsvg-2.0:
 	$(GENVAPI) --library $(srcdir)/librsvg-2.0 $(PACKAGESDIR)/librsvg-2.0/librsvg-2.0.gi
@@ -908,6 +1031,9 @@ loudmouth-1.0:
 mx-1.0:
 	$(GENVAPI) --library $(srcdir)/mx-1.0 --metadatadir $(METADATADIR) $(METADATADIR)/Mx-1.0-custom.vala $(GIRDIR)/Mx-1.0.gir
 
+packagekit-glib2:
+	$(GENVAPI) --library $(srcdir)/packagekit-glib2 --metadatadir $(METADATADIR) --pkg gio-2.0 $(GIRDIR)/PackageKitGlib-1.0.gir
+
 pango:
 	$(GENVAPI) --library $(srcdir)/pango $(PACKAGESDIR)/pango/pango-custom.vala $(PACKAGESDIR)/pango/pango.gi
 
@@ -915,7 +1041,7 @@ pangocairo:
 	$(GENVAPI) --library $(srcdir)/pangocairo --metadatadir $(METADATADIR) $(GIRDIR)/PangoCairo-1.0.gir
 
 poppler-glib:
-	$(GENVAPI) --library $(srcdir)/poppler-glib $(PACKAGESDIR)/poppler-glib/poppler-glib.gi
+	$(GENVAPI) --library $(srcdir)/poppler-glib --metadatadir $(METADATADIR) $(GIRDIR)/Poppler-0.18.gir
 
 purple:
 	$(GENVAPI) --library $(srcdir)/purple $(PACKAGESDIR)/purple/purple-custom.vala $(PACKAGESDIR)/purple/purple.gi
@@ -927,7 +1053,7 @@ rest-extras-0.6:
 	$(GENVAPI) --library $(srcdir)/rest-extras-0.6 $(PACKAGESDIR)/rest-extras-0.6/rest-extras-0.6-custom.vala $(PACKAGESDIR)/rest-extras-0.6/rest-extras-0.6.gi
 
 rest-0.7:
-	$(GENVAPI) --library $(srcdir)/rest-0.7 --metadatadir $(METADATADIR) $(GIRDIR)/Rest-0.7.gir
+	$(GENVAPI) --library $(srcdir)/rest-0.7 --metadatadir $(METADATADIR) --pkg gio-2.0 $(GIRDIR)/Rest-0.7.gir
 
 tracker-indexer-module-1.0:
 	$(GENVAPI) --library $(srcdir)/tracker-indexer-module-1.0 $(PACKAGESDIR)/tracker-indexer-module-1.0/tracker-indexer-module-1.0-custom.vala $(PACKAGESDIR)/tracker-indexer-module-1.0/tracker-indexer-module-1.0.gi
@@ -935,6 +1061,9 @@ tracker-indexer-module-1.0:
 twitter-glib-1.0:
 	$(GENVAPI) --library $(srcdir)/twitter-glib-1.0 $(PACKAGESDIR)/twitter-glib-1.0/twitter-glib-1.0.gi
 
+udisks2:
+	$(GENVAPI) --library $(srcdir)/udisks2 --metadatadir $(METADATADIR) --pkg gio-2.0 $(GIRDIR)/UDisks-2.0.gir
+
 unique-1.0:
 	$(GENVAPI) --library $(srcdir)/unique-1.0 $(PACKAGESDIR)/unique-1.0/unique-1.0.gi
 
diff --git a/vapi/alsa.vapi b/vapi/alsa.vapi
index 1b7cae5..c7ef4e0 100644
--- a/vapi/alsa.vapi
+++ b/vapi/alsa.vapi
@@ -709,7 +709,7 @@ namespace Alsa {
         public int load ();
 
         [CCode (cname = "snd_mixer_selem_register")]
-        public int register (MixerRegistrationOptions? options = 0, out MixerClass classp = null );
+        public int register (MixerRegistrationOptions? options = null, out MixerClass classp = null );
 
         public MixerElement first_elem ();
         public MixerElement last_elem ();
diff --git a/vapi/atk.vapi b/vapi/atk.vapi
index 4509c49..4044800 100644
--- a/vapi/atk.vapi
+++ b/vapi/atk.vapi
@@ -766,7 +766,7 @@ namespace Atk {
 	[CCode (cheader_filename = "atk/atk.h", has_target = false)]
 	public delegate void EventListenerInit ();
 	[CCode (cheader_filename = "atk/atk.h", has_target = false)]
-	public delegate void FocusHandler (Atk.Object obj, bool focus_in);
+	public delegate void FocusHandler (Atk.Object arg0, bool arg1);
 	[CCode (cheader_filename = "atk/atk.h")]
 	public delegate bool Function ();
 	[CCode (cheader_filename = "atk/atk.h")]
diff --git a/vapi/avahi-client.vapi b/vapi/avahi-client.vapi
index 56857bf..467a1f3 100644
--- a/vapi/avahi-client.vapi
+++ b/vapi/avahi-client.vapi
@@ -123,12 +123,13 @@ namespace Avahi {
 		}
 
 		[CCode(cname="avahi_string_list_parse")]
-		private static int _parse(char[] data, out StringList dest);
-		[CCode(cname="avahi_string_list_parse_dup")]
+		public static int deserialize (char[] data, out StringList dest);
+		[Deprecated (since = "vala-0.16", replacement = "deserialize")]
+		[CCode (cname = "avahi_string_list_parse_dup")]
 		public static StringList parse(char[] data) throws Error {
 			StringList dest;
 
-			int errno = _parse(data, out dest);
+			int errno = deserialize (data, out dest);
 			if (errno < 0) {
 				var err = new Error.FAILURE(strerror(errno));
 				err.code = errno;
@@ -156,22 +157,31 @@ namespace Avahi {
 		public unowned string? get_type_from_subtype(string s);
 		public unowned string? unescape_label(ref unowned string name, char[] dest=new char[LABEL_MAX]);
 
-		[CCode(cname="avahi_escape_label")]
+		[CCode (cname="avahi_escape_label")]
 		private string? _escape_label(char* src, size_t src_len, ref char* dest, ref size_t dest_len);
-		[CCode(cname="avahi_escape_label_dup")]
+		[CCode (cname = "_vala_avahi_escape_label")]
 		public string? escape_label(string s) {
 			size_t len = LABEL_MAX * 4;
 			char* dest = new char[len];
 			return _escape_label(s, s.length, ref dest, ref len);
 		}
 
-		[CCode(cname="avahi_service_name_join")]
-		private int _service_name_join(char* dest, size_t dest_len, string name, string type, string domain);
-		[CCode(cname="avahi_service_name_join_dup")]
-		public string service_name_join(string name, string type, string domain) throws Error {
-			char* dest = new char[DOMAIN_NAME_MAX];
+		[CCode (cname = "avahi_service_name_join")]
+		public int _service_name_join ([CCode (array_length_type = "size_t")] uint8[] dest, string name, string type, string domain);
+		[CCode (cname = "_avahi_service_name_join")]
+		public int join_service_name (out string? dest, string name, string type, string domain) {
+			uint8[] dest_data = new uint8[DOMAIN_NAME_MAX];
+			int errno = _service_name_join (dest_data, name, type, domain);
+			dest = (errno >= 0) ? (string) dest_data : null;
+			return errno;
+		}
+
+		[Deprecated (since = "vala-0.16", replacement = "join_service_name")]
+		[CCode (cname = "_vala_avahi_service_name_join")]
+		public string service_name_join (string name, string type, string domain) throws Error {
+			uint8[] dest = new uint8[DOMAIN_NAME_MAX];
 
-			int errno = _service_name_join(dest, DOMAIN_NAME_MAX, name, type, domain);
+			int errno = _service_name_join(dest, name, type, domain);
 			if (errno < 0) {
 				var err = new Error.FAILURE(strerror(errno));
 				err.code = errno;
@@ -181,24 +191,44 @@ namespace Avahi {
 			return (string) dest;
 		}
 
-		[CCode(cname="avahi_service_name_split")]
-		private int _service_name_split(string src, char* name,   size_t name_len,
-													char* type,   size_t type_len,
-													char* domain, size_t domain_len);
-		[CCode(cname="avahi_service_name_split_dup")]
+		[CCode (cname = "avahi_service_name_split")]
+		public int _service_name_split(string src, [CCode (array_length_type = "size_t")] uint8[] name, [CCode (array_length_type = "size_t")] uint8[] type, [CCode (array_length_type = "size_t")] uint8[] domain);
+
+		[CCode(cname = "_vala_avahi_service_name_split")]
+		public int split_service_name (string src, out string name, out string type, out string domain) {
+			uint8[] name_data = new uint8[LABEL_MAX];
+			uint8[] type_data = new uint8[DOMAIN_NAME_MAX];
+			uint8[] domain_data = new uint8[DOMAIN_NAME_MAX];
+
+			int errno = _service_name_split (src, name_data, type_data, domain_data);
+
+			if (errno >= 0) {
+				name = (string) name_data;
+				type = (string) type_data;
+				domain = (string) domain_data;
+			}
+
+			return errno;
+		}
+
+		[Deprecated (since = "vala-0.16", replacement = "split_service_name")]
+		[CCode (cname = "avahi_service_name_split_dup")]
 		public void service_name_split(string src, out string name, out string type, out string domain) throws Error {
-			name = (string) new char[LABEL_MAX];
-			type = (string) new char[DOMAIN_NAME_MAX];
-			domain = (string) new char[DOMAIN_NAME_MAX];
+			uint8[] name_data = new uint8[LABEL_MAX];
+			uint8[] type_data = new uint8[DOMAIN_NAME_MAX];
+			uint8[] domain_data = new uint8[DOMAIN_NAME_MAX];
+
+			int errno = _service_name_split (src, name_data, type_data, domain_data);
 
-			int errno = _service_name_split(src, name,   LABEL_MAX,
-												 type,   DOMAIN_NAME_MAX,
-												 domain, DOMAIN_NAME_MAX);
 			if (errno < 0) {
 				var err = new Error.FAILURE(strerror(errno));
 				err.code = errno;
 				throw err;
 			}
+
+			name = (string) name_data;
+			type = (string) type_data;
+			domain = (string) domain_data;
 		}
 
 		public bool is_valid_service_type_generic(string s);
@@ -220,7 +250,7 @@ namespace Avahi {
 	}
 
 
-    /* Entry group */
+	/* Entry group */
 
 	[Flags]
 	[CCode(cheader_filename="avahi-common/defs.h", cname="AvahiPublishFlags", cfrefix="AVAHI_PUBLISH_")]
diff --git a/vapi/clutter-1.0.vapi b/vapi/clutter-1.0.vapi
index cbe69af..5bcf4a5 100644
--- a/vapi/clutter-1.0.vapi
+++ b/vapi/clutter-1.0.vapi
@@ -8,6 +8,4538 @@ namespace Clutter {
 		[CCode (cheader_filename = "clutter/clutter.h")]
 		public static uint add_full (int priority, uint fps, owned GLib.SourceFunc func);
 	}
+	namespace Key {
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_0")]
+		public const int @0;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_1")]
+		public const int @1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_2")]
+		public const int @2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3")]
+		public const int @3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_AltCursor")]
+		public const int @3270_AltCursor;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_Attn")]
+		public const int @3270_Attn;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_BackTab")]
+		public const int @3270_BackTab;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_ChangeScreen")]
+		public const int @3270_ChangeScreen;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_Copy")]
+		public const int @3270_Copy;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_CursorBlink")]
+		public const int @3270_CursorBlink;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_CursorSelect")]
+		public const int @3270_CursorSelect;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_DeleteWord")]
+		public const int @3270_DeleteWord;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_Duplicate")]
+		public const int @3270_Duplicate;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_Enter")]
+		public const int @3270_Enter;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_EraseEOF")]
+		public const int @3270_EraseEOF;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_EraseInput")]
+		public const int @3270_EraseInput;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_ExSelect")]
+		public const int @3270_ExSelect;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_FieldMark")]
+		public const int @3270_FieldMark;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_Ident")]
+		public const int @3270_Ident;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_Jump")]
+		public const int @3270_Jump;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_KeyClick")]
+		public const int @3270_KeyClick;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_Left2")]
+		public const int @3270_Left2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_PA1")]
+		public const int @3270_PA1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_PA2")]
+		public const int @3270_PA2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_PA3")]
+		public const int @3270_PA3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_Play")]
+		public const int @3270_Play;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_PrintScreen")]
+		public const int @3270_PrintScreen;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_Quit")]
+		public const int @3270_Quit;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_Record")]
+		public const int @3270_Record;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_Reset")]
+		public const int @3270_Reset;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_Right2")]
+		public const int @3270_Right2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_Rule")]
+		public const int @3270_Rule;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_Setup")]
+		public const int @3270_Setup;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_3270_Test")]
+		public const int @3270_Test;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_4")]
+		public const int @4;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_5")]
+		public const int @5;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_6")]
+		public const int @6;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_7")]
+		public const int @7;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_8")]
+		public const int @8;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_9")]
+		public const int @9;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_A")]
+		public const int A;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AE")]
+		public const int AE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Aacute")]
+		public const int Aacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Abelowdot")]
+		public const int Abelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Abreve")]
+		public const int Abreve;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Abreveacute")]
+		public const int Abreveacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Abrevebelowdot")]
+		public const int Abrevebelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Abrevegrave")]
+		public const int Abrevegrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Abrevehook")]
+		public const int Abrevehook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Abrevetilde")]
+		public const int Abrevetilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AccessX_Enable")]
+		public const int AccessX_Enable;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AccessX_Feedback_Enable")]
+		public const int AccessX_Feedback_Enable;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Acircumflex")]
+		public const int Acircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Acircumflexacute")]
+		public const int Acircumflexacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Acircumflexbelowdot")]
+		public const int Acircumflexbelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Acircumflexgrave")]
+		public const int Acircumflexgrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Acircumflexhook")]
+		public const int Acircumflexhook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Acircumflextilde")]
+		public const int Acircumflextilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AddFavorite")]
+		public const int AddFavorite;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Adiaeresis")]
+		public const int Adiaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Agrave")]
+		public const int Agrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ahook")]
+		public const int Ahook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Alt_L")]
+		public const int Alt_L;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Alt_R")]
+		public const int Alt_R;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Amacron")]
+		public const int Amacron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Aogonek")]
+		public const int Aogonek;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ApplicationLeft")]
+		public const int ApplicationLeft;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ApplicationRight")]
+		public const int ApplicationRight;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_0")]
+		public const int Arabic_0;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_1")]
+		public const int Arabic_1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_2")]
+		public const int Arabic_2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_3")]
+		public const int Arabic_3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_4")]
+		public const int Arabic_4;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_5")]
+		public const int Arabic_5;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_6")]
+		public const int Arabic_6;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_7")]
+		public const int Arabic_7;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_8")]
+		public const int Arabic_8;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_9")]
+		public const int Arabic_9;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_ain")]
+		public const int Arabic_ain;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_alef")]
+		public const int Arabic_alef;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_alefmaksura")]
+		public const int Arabic_alefmaksura;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_beh")]
+		public const int Arabic_beh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_comma")]
+		public const int Arabic_comma;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_dad")]
+		public const int Arabic_dad;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_dal")]
+		public const int Arabic_dal;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_damma")]
+		public const int Arabic_damma;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_dammatan")]
+		public const int Arabic_dammatan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_ddal")]
+		public const int Arabic_ddal;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_farsi_yeh")]
+		public const int Arabic_farsi_yeh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_fatha")]
+		public const int Arabic_fatha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_fathatan")]
+		public const int Arabic_fathatan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_feh")]
+		public const int Arabic_feh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_fullstop")]
+		public const int Arabic_fullstop;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_gaf")]
+		public const int Arabic_gaf;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_ghain")]
+		public const int Arabic_ghain;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_ha")]
+		public const int Arabic_ha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_hah")]
+		public const int Arabic_hah;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_hamza")]
+		public const int Arabic_hamza;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_hamza_above")]
+		public const int Arabic_hamza_above;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_hamza_below")]
+		public const int Arabic_hamza_below;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_hamzaonalef")]
+		public const int Arabic_hamzaonalef;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_hamzaonwaw")]
+		public const int Arabic_hamzaonwaw;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_hamzaonyeh")]
+		public const int Arabic_hamzaonyeh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_hamzaunderalef")]
+		public const int Arabic_hamzaunderalef;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_heh")]
+		public const int Arabic_heh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_heh_doachashmee")]
+		public const int Arabic_heh_doachashmee;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_heh_goal")]
+		public const int Arabic_heh_goal;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_jeem")]
+		public const int Arabic_jeem;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_jeh")]
+		public const int Arabic_jeh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_kaf")]
+		public const int Arabic_kaf;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_kasra")]
+		public const int Arabic_kasra;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_kasratan")]
+		public const int Arabic_kasratan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_keheh")]
+		public const int Arabic_keheh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_khah")]
+		public const int Arabic_khah;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_lam")]
+		public const int Arabic_lam;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_madda_above")]
+		public const int Arabic_madda_above;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_maddaonalef")]
+		public const int Arabic_maddaonalef;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_meem")]
+		public const int Arabic_meem;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_noon")]
+		public const int Arabic_noon;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_noon_ghunna")]
+		public const int Arabic_noon_ghunna;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_peh")]
+		public const int Arabic_peh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_percent")]
+		public const int Arabic_percent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_qaf")]
+		public const int Arabic_qaf;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_question_mark")]
+		public const int Arabic_question_mark;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_ra")]
+		public const int Arabic_ra;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_rreh")]
+		public const int Arabic_rreh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_sad")]
+		public const int Arabic_sad;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_seen")]
+		public const int Arabic_seen;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_semicolon")]
+		public const int Arabic_semicolon;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_shadda")]
+		public const int Arabic_shadda;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_sheen")]
+		public const int Arabic_sheen;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_sukun")]
+		public const int Arabic_sukun;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_superscript_alef")]
+		public const int Arabic_superscript_alef;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_switch")]
+		public const int Arabic_switch;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_tah")]
+		public const int Arabic_tah;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_tatweel")]
+		public const int Arabic_tatweel;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_tcheh")]
+		public const int Arabic_tcheh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_teh")]
+		public const int Arabic_teh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_tehmarbuta")]
+		public const int Arabic_tehmarbuta;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_thal")]
+		public const int Arabic_thal;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_theh")]
+		public const int Arabic_theh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_tteh")]
+		public const int Arabic_tteh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_veh")]
+		public const int Arabic_veh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_waw")]
+		public const int Arabic_waw;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_yeh")]
+		public const int Arabic_yeh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_yeh_baree")]
+		public const int Arabic_yeh_baree;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_zah")]
+		public const int Arabic_zah;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Arabic_zain")]
+		public const int Arabic_zain;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Aring")]
+		public const int Aring;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_AT")]
+		public const int Armenian_AT;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_AYB")]
+		public const int Armenian_AYB;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_BEN")]
+		public const int Armenian_BEN;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_CHA")]
+		public const int Armenian_CHA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_DA")]
+		public const int Armenian_DA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_DZA")]
+		public const int Armenian_DZA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_E")]
+		public const int Armenian_E;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_FE")]
+		public const int Armenian_FE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_GHAT")]
+		public const int Armenian_GHAT;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_GIM")]
+		public const int Armenian_GIM;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_HI")]
+		public const int Armenian_HI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_HO")]
+		public const int Armenian_HO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_INI")]
+		public const int Armenian_INI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_JE")]
+		public const int Armenian_JE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_KE")]
+		public const int Armenian_KE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_KEN")]
+		public const int Armenian_KEN;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_KHE")]
+		public const int Armenian_KHE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_LYUN")]
+		public const int Armenian_LYUN;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_MEN")]
+		public const int Armenian_MEN;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_NU")]
+		public const int Armenian_NU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_O")]
+		public const int Armenian_O;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_PE")]
+		public const int Armenian_PE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_PYUR")]
+		public const int Armenian_PYUR;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_RA")]
+		public const int Armenian_RA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_RE")]
+		public const int Armenian_RE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_SE")]
+		public const int Armenian_SE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_SHA")]
+		public const int Armenian_SHA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_TCHE")]
+		public const int Armenian_TCHE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_TO")]
+		public const int Armenian_TO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_TSA")]
+		public const int Armenian_TSA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_TSO")]
+		public const int Armenian_TSO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_TYUN")]
+		public const int Armenian_TYUN;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_VEV")]
+		public const int Armenian_VEV;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_VO")]
+		public const int Armenian_VO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_VYUN")]
+		public const int Armenian_VYUN;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_YECH")]
+		public const int Armenian_YECH;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_ZA")]
+		public const int Armenian_ZA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_ZHE")]
+		public const int Armenian_ZHE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_accent")]
+		public const int Armenian_accent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_amanak")]
+		public const int Armenian_amanak;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_apostrophe")]
+		public const int Armenian_apostrophe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_at")]
+		public const int Armenian_at;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_ayb")]
+		public const int Armenian_ayb;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_ben")]
+		public const int Armenian_ben;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_but")]
+		public const int Armenian_but;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_cha")]
+		public const int Armenian_cha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_da")]
+		public const int Armenian_da;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_dza")]
+		public const int Armenian_dza;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_e")]
+		public const int Armenian_e;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_exclam")]
+		public const int Armenian_exclam;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_fe")]
+		public const int Armenian_fe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_full_stop")]
+		public const int Armenian_full_stop;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_ghat")]
+		public const int Armenian_ghat;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_gim")]
+		public const int Armenian_gim;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_hi")]
+		public const int Armenian_hi;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_ho")]
+		public const int Armenian_ho;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_hyphen")]
+		public const int Armenian_hyphen;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_ini")]
+		public const int Armenian_ini;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_je")]
+		public const int Armenian_je;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_ke")]
+		public const int Armenian_ke;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_ken")]
+		public const int Armenian_ken;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_khe")]
+		public const int Armenian_khe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_ligature_ew")]
+		public const int Armenian_ligature_ew;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_lyun")]
+		public const int Armenian_lyun;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_men")]
+		public const int Armenian_men;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_nu")]
+		public const int Armenian_nu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_o")]
+		public const int Armenian_o;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_paruyk")]
+		public const int Armenian_paruyk;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_pe")]
+		public const int Armenian_pe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_pyur")]
+		public const int Armenian_pyur;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_question")]
+		public const int Armenian_question;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_ra")]
+		public const int Armenian_ra;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_re")]
+		public const int Armenian_re;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_se")]
+		public const int Armenian_se;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_separation_mark")]
+		public const int Armenian_separation_mark;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_sha")]
+		public const int Armenian_sha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_shesht")]
+		public const int Armenian_shesht;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_tche")]
+		public const int Armenian_tche;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_to")]
+		public const int Armenian_to;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_tsa")]
+		public const int Armenian_tsa;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_tso")]
+		public const int Armenian_tso;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_tyun")]
+		public const int Armenian_tyun;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_verjaket")]
+		public const int Armenian_verjaket;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_vev")]
+		public const int Armenian_vev;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_vo")]
+		public const int Armenian_vo;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_vyun")]
+		public const int Armenian_vyun;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_yech")]
+		public const int Armenian_yech;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_yentamna")]
+		public const int Armenian_yentamna;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_za")]
+		public const int Armenian_za;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Armenian_zhe")]
+		public const int Armenian_zhe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Atilde")]
+		public const int Atilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudibleBell_Enable")]
+		public const int AudibleBell_Enable;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudioCycleTrack")]
+		public const int AudioCycleTrack;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudioForward")]
+		public const int AudioForward;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudioLowerVolume")]
+		public const int AudioLowerVolume;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudioMedia")]
+		public const int AudioMedia;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudioMute")]
+		public const int AudioMute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudioNext")]
+		public const int AudioNext;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudioPause")]
+		public const int AudioPause;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudioPlay")]
+		public const int AudioPlay;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudioPrev")]
+		public const int AudioPrev;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudioRaiseVolume")]
+		public const int AudioRaiseVolume;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudioRandomPlay")]
+		public const int AudioRandomPlay;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudioRecord")]
+		public const int AudioRecord;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudioRepeat")]
+		public const int AudioRepeat;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudioRewind")]
+		public const int AudioRewind;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_AudioStop")]
+		public const int AudioStop;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Away")]
+		public const int Away;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_B")]
+		public const int B;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Babovedot")]
+		public const int Babovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Back")]
+		public const int Back;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_BackForward")]
+		public const int BackForward;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_BackSpace")]
+		public const int BackSpace;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Battery")]
+		public const int Battery;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Begin")]
+		public const int Begin;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Blue")]
+		public const int Blue;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Bluetooth")]
+		public const int Bluetooth;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Book")]
+		public const int Book;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_BounceKeys_Enable")]
+		public const int BounceKeys_Enable;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Break")]
+		public const int Break;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_BrightnessAdjust")]
+		public const int BrightnessAdjust;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Byelorussian_SHORTU")]
+		public const int Byelorussian_SHORTU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Byelorussian_shortu")]
+		public const int Byelorussian_shortu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_C")]
+		public const int C;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_CD")]
+		public const int CD;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_CH")]
+		public const int CH;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_C_H")]
+		public const int C_H;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_C_h")]
+		public const int C_h;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cabovedot")]
+		public const int Cabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cacute")]
+		public const int Cacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Calculator")]
+		public const int Calculator;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Calendar")]
+		public const int Calendar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cancel")]
+		public const int Cancel;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Caps_Lock")]
+		public const int Caps_Lock;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ccaron")]
+		public const int Ccaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ccedilla")]
+		public const int Ccedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ccircumflex")]
+		public const int Ccircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ch")]
+		public const int Ch;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Clear")]
+		public const int Clear;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ClearGrab")]
+		public const int ClearGrab;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Close")]
+		public const int Close;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Codeinput")]
+		public const int Codeinput;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ColonSign")]
+		public const int ColonSign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Community")]
+		public const int Community;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ContrastAdjust")]
+		public const int ContrastAdjust;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Control_L")]
+		public const int Control_L;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Control_R")]
+		public const int Control_R;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Copy")]
+		public const int Copy;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_CruzeiroSign")]
+		public const int CruzeiroSign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cut")]
+		public const int Cut;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_CycleAngle")]
+		public const int CycleAngle;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_A")]
+		public const int Cyrillic_A;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_BE")]
+		public const int Cyrillic_BE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_CHE")]
+		public const int Cyrillic_CHE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_CHE_descender")]
+		public const int Cyrillic_CHE_descender;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_CHE_vertstroke")]
+		public const int Cyrillic_CHE_vertstroke;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_DE")]
+		public const int Cyrillic_DE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_DZHE")]
+		public const int Cyrillic_DZHE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_E")]
+		public const int Cyrillic_E;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_EF")]
+		public const int Cyrillic_EF;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_EL")]
+		public const int Cyrillic_EL;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_EM")]
+		public const int Cyrillic_EM;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_EN")]
+		public const int Cyrillic_EN;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_EN_descender")]
+		public const int Cyrillic_EN_descender;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ER")]
+		public const int Cyrillic_ER;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ES")]
+		public const int Cyrillic_ES;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_GHE")]
+		public const int Cyrillic_GHE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_GHE_bar")]
+		public const int Cyrillic_GHE_bar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_HA")]
+		public const int Cyrillic_HA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_HARDSIGN")]
+		public const int Cyrillic_HARDSIGN;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_HA_descender")]
+		public const int Cyrillic_HA_descender;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_I")]
+		public const int Cyrillic_I;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_IE")]
+		public const int Cyrillic_IE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_IO")]
+		public const int Cyrillic_IO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_I_macron")]
+		public const int Cyrillic_I_macron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_JE")]
+		public const int Cyrillic_JE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_KA")]
+		public const int Cyrillic_KA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_KA_descender")]
+		public const int Cyrillic_KA_descender;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_KA_vertstroke")]
+		public const int Cyrillic_KA_vertstroke;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_LJE")]
+		public const int Cyrillic_LJE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_NJE")]
+		public const int Cyrillic_NJE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_O")]
+		public const int Cyrillic_O;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_O_bar")]
+		public const int Cyrillic_O_bar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_PE")]
+		public const int Cyrillic_PE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_SCHWA")]
+		public const int Cyrillic_SCHWA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_SHA")]
+		public const int Cyrillic_SHA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_SHCHA")]
+		public const int Cyrillic_SHCHA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_SHHA")]
+		public const int Cyrillic_SHHA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_SHORTI")]
+		public const int Cyrillic_SHORTI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_SOFTSIGN")]
+		public const int Cyrillic_SOFTSIGN;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_TE")]
+		public const int Cyrillic_TE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_TSE")]
+		public const int Cyrillic_TSE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_U")]
+		public const int Cyrillic_U;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_U_macron")]
+		public const int Cyrillic_U_macron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_U_straight")]
+		public const int Cyrillic_U_straight;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_U_straight_bar")]
+		public const int Cyrillic_U_straight_bar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_VE")]
+		public const int Cyrillic_VE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_YA")]
+		public const int Cyrillic_YA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_YERU")]
+		public const int Cyrillic_YERU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_YU")]
+		public const int Cyrillic_YU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ZE")]
+		public const int Cyrillic_ZE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ZHE")]
+		public const int Cyrillic_ZHE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ZHE_descender")]
+		public const int Cyrillic_ZHE_descender;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_a")]
+		public const int Cyrillic_a;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_be")]
+		public const int Cyrillic_be;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_che")]
+		public const int Cyrillic_che;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_che_descender")]
+		public const int Cyrillic_che_descender;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_che_vertstroke")]
+		public const int Cyrillic_che_vertstroke;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_de")]
+		public const int Cyrillic_de;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_dzhe")]
+		public const int Cyrillic_dzhe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_e")]
+		public const int Cyrillic_e;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ef")]
+		public const int Cyrillic_ef;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_el")]
+		public const int Cyrillic_el;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_em")]
+		public const int Cyrillic_em;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_en")]
+		public const int Cyrillic_en;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_en_descender")]
+		public const int Cyrillic_en_descender;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_er")]
+		public const int Cyrillic_er;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_es")]
+		public const int Cyrillic_es;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ghe")]
+		public const int Cyrillic_ghe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ghe_bar")]
+		public const int Cyrillic_ghe_bar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ha")]
+		public const int Cyrillic_ha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ha_descender")]
+		public const int Cyrillic_ha_descender;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_hardsign")]
+		public const int Cyrillic_hardsign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_i")]
+		public const int Cyrillic_i;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_i_macron")]
+		public const int Cyrillic_i_macron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ie")]
+		public const int Cyrillic_ie;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_io")]
+		public const int Cyrillic_io;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_je")]
+		public const int Cyrillic_je;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ka")]
+		public const int Cyrillic_ka;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ka_descender")]
+		public const int Cyrillic_ka_descender;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ka_vertstroke")]
+		public const int Cyrillic_ka_vertstroke;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_lje")]
+		public const int Cyrillic_lje;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_nje")]
+		public const int Cyrillic_nje;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_o")]
+		public const int Cyrillic_o;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_o_bar")]
+		public const int Cyrillic_o_bar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_pe")]
+		public const int Cyrillic_pe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_schwa")]
+		public const int Cyrillic_schwa;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_sha")]
+		public const int Cyrillic_sha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_shcha")]
+		public const int Cyrillic_shcha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_shha")]
+		public const int Cyrillic_shha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_shorti")]
+		public const int Cyrillic_shorti;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_softsign")]
+		public const int Cyrillic_softsign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_te")]
+		public const int Cyrillic_te;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_tse")]
+		public const int Cyrillic_tse;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_u")]
+		public const int Cyrillic_u;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_u_macron")]
+		public const int Cyrillic_u_macron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_u_straight")]
+		public const int Cyrillic_u_straight;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_u_straight_bar")]
+		public const int Cyrillic_u_straight_bar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ve")]
+		public const int Cyrillic_ve;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ya")]
+		public const int Cyrillic_ya;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_yeru")]
+		public const int Cyrillic_yeru;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_yu")]
+		public const int Cyrillic_yu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_ze")]
+		public const int Cyrillic_ze;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_zhe")]
+		public const int Cyrillic_zhe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Cyrillic_zhe_descender")]
+		public const int Cyrillic_zhe_descender;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_D")]
+		public const int D;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_DOS")]
+		public const int DOS;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Dabovedot")]
+		public const int Dabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Dcaron")]
+		public const int Dcaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Delete")]
+		public const int Delete;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Display")]
+		public const int Display;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Documents")]
+		public const int Documents;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_DongSign")]
+		public const int DongSign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Down")]
+		public const int Down;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Dstroke")]
+		public const int Dstroke;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_E")]
+		public const int E;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ENG")]
+		public const int ENG;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ETH")]
+		public const int ETH;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Eabovedot")]
+		public const int Eabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Eacute")]
+		public const int Eacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ebelowdot")]
+		public const int Ebelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ecaron")]
+		public const int Ecaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ecircumflex")]
+		public const int Ecircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ecircumflexacute")]
+		public const int Ecircumflexacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ecircumflexbelowdot")]
+		public const int Ecircumflexbelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ecircumflexgrave")]
+		public const int Ecircumflexgrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ecircumflexhook")]
+		public const int Ecircumflexhook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ecircumflextilde")]
+		public const int Ecircumflextilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_EcuSign")]
+		public const int EcuSign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ediaeresis")]
+		public const int Ediaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Egrave")]
+		public const int Egrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ehook")]
+		public const int Ehook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Eisu_Shift")]
+		public const int Eisu_Shift;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Eisu_toggle")]
+		public const int Eisu_toggle;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Eject")]
+		public const int Eject;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Emacron")]
+		public const int Emacron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_End")]
+		public const int End;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Eogonek")]
+		public const int Eogonek;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Escape")]
+		public const int Escape;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Eth")]
+		public const int Eth;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Etilde")]
+		public const int Etilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_EuroSign")]
+		public const int EuroSign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Excel")]
+		public const int Excel;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Execute")]
+		public const int Execute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Explorer")]
+		public const int Explorer;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F")]
+		public const int F;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F1")]
+		public const int F1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F10")]
+		public const int F10;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F11")]
+		public const int F11;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F12")]
+		public const int F12;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F13")]
+		public const int F13;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F14")]
+		public const int F14;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F15")]
+		public const int F15;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F16")]
+		public const int F16;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F17")]
+		public const int F17;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F18")]
+		public const int F18;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F19")]
+		public const int F19;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F2")]
+		public const int F2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F20")]
+		public const int F20;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F21")]
+		public const int F21;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F22")]
+		public const int F22;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F23")]
+		public const int F23;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F24")]
+		public const int F24;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F25")]
+		public const int F25;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F26")]
+		public const int F26;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F27")]
+		public const int F27;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F28")]
+		public const int F28;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F29")]
+		public const int F29;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F3")]
+		public const int F3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F30")]
+		public const int F30;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F31")]
+		public const int F31;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F32")]
+		public const int F32;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F33")]
+		public const int F33;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F34")]
+		public const int F34;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F35")]
+		public const int F35;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F4")]
+		public const int F4;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F5")]
+		public const int F5;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F6")]
+		public const int F6;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F7")]
+		public const int F7;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F8")]
+		public const int F8;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_F9")]
+		public const int F9;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_FFrancSign")]
+		public const int FFrancSign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Fabovedot")]
+		public const int Fabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Farsi_0")]
+		public const int Farsi_0;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Farsi_1")]
+		public const int Farsi_1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Farsi_2")]
+		public const int Farsi_2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Farsi_3")]
+		public const int Farsi_3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Farsi_4")]
+		public const int Farsi_4;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Farsi_5")]
+		public const int Farsi_5;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Farsi_6")]
+		public const int Farsi_6;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Farsi_7")]
+		public const int Farsi_7;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Farsi_8")]
+		public const int Farsi_8;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Farsi_9")]
+		public const int Farsi_9;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Farsi_yeh")]
+		public const int Farsi_yeh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Favorites")]
+		public const int Favorites;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Finance")]
+		public const int Finance;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Find")]
+		public const int Find;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_First_Virtual_Screen")]
+		public const int First_Virtual_Screen;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Forward")]
+		public const int Forward;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_FrameBack")]
+		public const int FrameBack;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_FrameForward")]
+		public const int FrameForward;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_G")]
+		public const int G;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Gabovedot")]
+		public const int Gabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Game")]
+		public const int Game;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Gbreve")]
+		public const int Gbreve;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Gcaron")]
+		public const int Gcaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Gcedilla")]
+		public const int Gcedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Gcircumflex")]
+		public const int Gcircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_an")]
+		public const int Georgian_an;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_ban")]
+		public const int Georgian_ban;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_can")]
+		public const int Georgian_can;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_char")]
+		public const int Georgian_char;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_chin")]
+		public const int Georgian_chin;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_cil")]
+		public const int Georgian_cil;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_don")]
+		public const int Georgian_don;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_en")]
+		public const int Georgian_en;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_fi")]
+		public const int Georgian_fi;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_gan")]
+		public const int Georgian_gan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_ghan")]
+		public const int Georgian_ghan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_hae")]
+		public const int Georgian_hae;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_har")]
+		public const int Georgian_har;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_he")]
+		public const int Georgian_he;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_hie")]
+		public const int Georgian_hie;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_hoe")]
+		public const int Georgian_hoe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_in")]
+		public const int Georgian_in;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_jhan")]
+		public const int Georgian_jhan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_jil")]
+		public const int Georgian_jil;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_kan")]
+		public const int Georgian_kan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_khar")]
+		public const int Georgian_khar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_las")]
+		public const int Georgian_las;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_man")]
+		public const int Georgian_man;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_nar")]
+		public const int Georgian_nar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_on")]
+		public const int Georgian_on;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_par")]
+		public const int Georgian_par;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_phar")]
+		public const int Georgian_phar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_qar")]
+		public const int Georgian_qar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_rae")]
+		public const int Georgian_rae;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_san")]
+		public const int Georgian_san;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_shin")]
+		public const int Georgian_shin;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_tan")]
+		public const int Georgian_tan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_tar")]
+		public const int Georgian_tar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_un")]
+		public const int Georgian_un;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_vin")]
+		public const int Georgian_vin;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_we")]
+		public const int Georgian_we;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_xan")]
+		public const int Georgian_xan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_zen")]
+		public const int Georgian_zen;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Georgian_zhar")]
+		public const int Georgian_zhar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Go")]
+		public const int Go;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_ALPHA")]
+		public const int Greek_ALPHA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_ALPHAaccent")]
+		public const int Greek_ALPHAaccent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_BETA")]
+		public const int Greek_BETA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_CHI")]
+		public const int Greek_CHI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_DELTA")]
+		public const int Greek_DELTA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_EPSILON")]
+		public const int Greek_EPSILON;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_EPSILONaccent")]
+		public const int Greek_EPSILONaccent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_ETA")]
+		public const int Greek_ETA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_ETAaccent")]
+		public const int Greek_ETAaccent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_GAMMA")]
+		public const int Greek_GAMMA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_IOTA")]
+		public const int Greek_IOTA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_IOTAaccent")]
+		public const int Greek_IOTAaccent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_IOTAdiaeresis")]
+		public const int Greek_IOTAdiaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_IOTAdieresis")]
+		public const int Greek_IOTAdieresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_KAPPA")]
+		public const int Greek_KAPPA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_LAMBDA")]
+		public const int Greek_LAMBDA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_LAMDA")]
+		public const int Greek_LAMDA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_MU")]
+		public const int Greek_MU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_NU")]
+		public const int Greek_NU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_OMEGA")]
+		public const int Greek_OMEGA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_OMEGAaccent")]
+		public const int Greek_OMEGAaccent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_OMICRON")]
+		public const int Greek_OMICRON;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_OMICRONaccent")]
+		public const int Greek_OMICRONaccent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_PHI")]
+		public const int Greek_PHI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_PI")]
+		public const int Greek_PI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_PSI")]
+		public const int Greek_PSI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_RHO")]
+		public const int Greek_RHO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_SIGMA")]
+		public const int Greek_SIGMA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_TAU")]
+		public const int Greek_TAU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_THETA")]
+		public const int Greek_THETA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_UPSILON")]
+		public const int Greek_UPSILON;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_UPSILONaccent")]
+		public const int Greek_UPSILONaccent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_UPSILONdieresis")]
+		public const int Greek_UPSILONdieresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_XI")]
+		public const int Greek_XI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_ZETA")]
+		public const int Greek_ZETA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_accentdieresis")]
+		public const int Greek_accentdieresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_alpha")]
+		public const int Greek_alpha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_alphaaccent")]
+		public const int Greek_alphaaccent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_beta")]
+		public const int Greek_beta;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_chi")]
+		public const int Greek_chi;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_delta")]
+		public const int Greek_delta;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_epsilon")]
+		public const int Greek_epsilon;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_epsilonaccent")]
+		public const int Greek_epsilonaccent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_eta")]
+		public const int Greek_eta;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_etaaccent")]
+		public const int Greek_etaaccent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_finalsmallsigma")]
+		public const int Greek_finalsmallsigma;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_gamma")]
+		public const int Greek_gamma;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_horizbar")]
+		public const int Greek_horizbar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_iota")]
+		public const int Greek_iota;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_iotaaccent")]
+		public const int Greek_iotaaccent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_iotaaccentdieresis")]
+		public const int Greek_iotaaccentdieresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_iotadieresis")]
+		public const int Greek_iotadieresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_kappa")]
+		public const int Greek_kappa;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_lambda")]
+		public const int Greek_lambda;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_lamda")]
+		public const int Greek_lamda;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_mu")]
+		public const int Greek_mu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_nu")]
+		public const int Greek_nu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_omega")]
+		public const int Greek_omega;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_omegaaccent")]
+		public const int Greek_omegaaccent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_omicron")]
+		public const int Greek_omicron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_omicronaccent")]
+		public const int Greek_omicronaccent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_phi")]
+		public const int Greek_phi;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_pi")]
+		public const int Greek_pi;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_psi")]
+		public const int Greek_psi;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_rho")]
+		public const int Greek_rho;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_sigma")]
+		public const int Greek_sigma;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_switch")]
+		public const int Greek_switch;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_tau")]
+		public const int Greek_tau;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_theta")]
+		public const int Greek_theta;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_upsilon")]
+		public const int Greek_upsilon;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_upsilonaccent")]
+		public const int Greek_upsilonaccent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_upsilonaccentdieresis")]
+		public const int Greek_upsilonaccentdieresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_upsilondieresis")]
+		public const int Greek_upsilondieresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_xi")]
+		public const int Greek_xi;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Greek_zeta")]
+		public const int Greek_zeta;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Green")]
+		public const int Green;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_H")]
+		public const int H;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul")]
+		public const int Hangul;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_A")]
+		public const int Hangul_A;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_AE")]
+		public const int Hangul_AE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_AraeA")]
+		public const int Hangul_AraeA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_AraeAE")]
+		public const int Hangul_AraeAE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Banja")]
+		public const int Hangul_Banja;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Cieuc")]
+		public const int Hangul_Cieuc;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Codeinput")]
+		public const int Hangul_Codeinput;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Dikeud")]
+		public const int Hangul_Dikeud;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_E")]
+		public const int Hangul_E;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_EO")]
+		public const int Hangul_EO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_EU")]
+		public const int Hangul_EU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_End")]
+		public const int Hangul_End;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Hanja")]
+		public const int Hangul_Hanja;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Hieuh")]
+		public const int Hangul_Hieuh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_I")]
+		public const int Hangul_I;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Ieung")]
+		public const int Hangul_Ieung;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_Cieuc")]
+		public const int Hangul_J_Cieuc;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_Dikeud")]
+		public const int Hangul_J_Dikeud;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_Hieuh")]
+		public const int Hangul_J_Hieuh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_Ieung")]
+		public const int Hangul_J_Ieung;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_Jieuj")]
+		public const int Hangul_J_Jieuj;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_Khieuq")]
+		public const int Hangul_J_Khieuq;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_Kiyeog")]
+		public const int Hangul_J_Kiyeog;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_KiyeogSios")]
+		public const int Hangul_J_KiyeogSios;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_KkogjiDalrinIeung")]
+		public const int Hangul_J_KkogjiDalrinIeung;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_Mieum")]
+		public const int Hangul_J_Mieum;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_Nieun")]
+		public const int Hangul_J_Nieun;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_NieunHieuh")]
+		public const int Hangul_J_NieunHieuh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_NieunJieuj")]
+		public const int Hangul_J_NieunJieuj;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_PanSios")]
+		public const int Hangul_J_PanSios;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_Phieuf")]
+		public const int Hangul_J_Phieuf;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_Pieub")]
+		public const int Hangul_J_Pieub;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_PieubSios")]
+		public const int Hangul_J_PieubSios;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_Rieul")]
+		public const int Hangul_J_Rieul;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_RieulHieuh")]
+		public const int Hangul_J_RieulHieuh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_RieulKiyeog")]
+		public const int Hangul_J_RieulKiyeog;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_RieulMieum")]
+		public const int Hangul_J_RieulMieum;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_RieulPhieuf")]
+		public const int Hangul_J_RieulPhieuf;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_RieulPieub")]
+		public const int Hangul_J_RieulPieub;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_RieulSios")]
+		public const int Hangul_J_RieulSios;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_RieulTieut")]
+		public const int Hangul_J_RieulTieut;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_Sios")]
+		public const int Hangul_J_Sios;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_SsangKiyeog")]
+		public const int Hangul_J_SsangKiyeog;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_SsangSios")]
+		public const int Hangul_J_SsangSios;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_Tieut")]
+		public const int Hangul_J_Tieut;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_J_YeorinHieuh")]
+		public const int Hangul_J_YeorinHieuh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Jamo")]
+		public const int Hangul_Jamo;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Jeonja")]
+		public const int Hangul_Jeonja;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Jieuj")]
+		public const int Hangul_Jieuj;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Khieuq")]
+		public const int Hangul_Khieuq;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Kiyeog")]
+		public const int Hangul_Kiyeog;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_KiyeogSios")]
+		public const int Hangul_KiyeogSios;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_KkogjiDalrinIeung")]
+		public const int Hangul_KkogjiDalrinIeung;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Mieum")]
+		public const int Hangul_Mieum;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_MultipleCandidate")]
+		public const int Hangul_MultipleCandidate;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Nieun")]
+		public const int Hangul_Nieun;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_NieunHieuh")]
+		public const int Hangul_NieunHieuh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_NieunJieuj")]
+		public const int Hangul_NieunJieuj;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_O")]
+		public const int Hangul_O;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_OE")]
+		public const int Hangul_OE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_PanSios")]
+		public const int Hangul_PanSios;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Phieuf")]
+		public const int Hangul_Phieuf;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Pieub")]
+		public const int Hangul_Pieub;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_PieubSios")]
+		public const int Hangul_PieubSios;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_PostHanja")]
+		public const int Hangul_PostHanja;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_PreHanja")]
+		public const int Hangul_PreHanja;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_PreviousCandidate")]
+		public const int Hangul_PreviousCandidate;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Rieul")]
+		public const int Hangul_Rieul;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_RieulHieuh")]
+		public const int Hangul_RieulHieuh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_RieulKiyeog")]
+		public const int Hangul_RieulKiyeog;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_RieulMieum")]
+		public const int Hangul_RieulMieum;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_RieulPhieuf")]
+		public const int Hangul_RieulPhieuf;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_RieulPieub")]
+		public const int Hangul_RieulPieub;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_RieulSios")]
+		public const int Hangul_RieulSios;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_RieulTieut")]
+		public const int Hangul_RieulTieut;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_RieulYeorinHieuh")]
+		public const int Hangul_RieulYeorinHieuh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Romaja")]
+		public const int Hangul_Romaja;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_SingleCandidate")]
+		public const int Hangul_SingleCandidate;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Sios")]
+		public const int Hangul_Sios;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Special")]
+		public const int Hangul_Special;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_SsangDikeud")]
+		public const int Hangul_SsangDikeud;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_SsangJieuj")]
+		public const int Hangul_SsangJieuj;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_SsangKiyeog")]
+		public const int Hangul_SsangKiyeog;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_SsangPieub")]
+		public const int Hangul_SsangPieub;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_SsangSios")]
+		public const int Hangul_SsangSios;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Start")]
+		public const int Hangul_Start;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_SunkyeongeumMieum")]
+		public const int Hangul_SunkyeongeumMieum;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_SunkyeongeumPhieuf")]
+		public const int Hangul_SunkyeongeumPhieuf;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_SunkyeongeumPieub")]
+		public const int Hangul_SunkyeongeumPieub;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_Tieut")]
+		public const int Hangul_Tieut;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_U")]
+		public const int Hangul_U;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_WA")]
+		public const int Hangul_WA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_WAE")]
+		public const int Hangul_WAE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_WE")]
+		public const int Hangul_WE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_WEO")]
+		public const int Hangul_WEO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_WI")]
+		public const int Hangul_WI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_YA")]
+		public const int Hangul_YA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_YAE")]
+		public const int Hangul_YAE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_YE")]
+		public const int Hangul_YE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_YEO")]
+		public const int Hangul_YEO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_YI")]
+		public const int Hangul_YI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_YO")]
+		public const int Hangul_YO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_YU")]
+		public const int Hangul_YU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_YeorinHieuh")]
+		public const int Hangul_YeorinHieuh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hangul_switch")]
+		public const int Hangul_switch;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hankaku")]
+		public const int Hankaku;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hcircumflex")]
+		public const int Hcircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hebrew_switch")]
+		public const int Hebrew_switch;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Help")]
+		public const int Help;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Henkan")]
+		public const int Henkan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Henkan_Mode")]
+		public const int Henkan_Mode;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hibernate")]
+		public const int Hibernate;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hiragana")]
+		public const int Hiragana;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hiragana_Katakana")]
+		public const int Hiragana_Katakana;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_History")]
+		public const int History;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Home")]
+		public const int Home;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_HomePage")]
+		public const int HomePage;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_HotLinks")]
+		public const int HotLinks;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hstroke")]
+		public const int Hstroke;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hyper_L")]
+		public const int Hyper_L;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Hyper_R")]
+		public const int Hyper_R;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_I")]
+		public const int I;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Center_Object")]
+		public const int ISO_Center_Object;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Continuous_Underline")]
+		public const int ISO_Continuous_Underline;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Discontinuous_Underline")]
+		public const int ISO_Discontinuous_Underline;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Emphasize")]
+		public const int ISO_Emphasize;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Enter")]
+		public const int ISO_Enter;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Fast_Cursor_Down")]
+		public const int ISO_Fast_Cursor_Down;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Fast_Cursor_Left")]
+		public const int ISO_Fast_Cursor_Left;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Fast_Cursor_Right")]
+		public const int ISO_Fast_Cursor_Right;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Fast_Cursor_Up")]
+		public const int ISO_Fast_Cursor_Up;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_First_Group")]
+		public const int ISO_First_Group;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_First_Group_Lock")]
+		public const int ISO_First_Group_Lock;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Group_Latch")]
+		public const int ISO_Group_Latch;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Group_Lock")]
+		public const int ISO_Group_Lock;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Group_Shift")]
+		public const int ISO_Group_Shift;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Last_Group")]
+		public const int ISO_Last_Group;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Last_Group_Lock")]
+		public const int ISO_Last_Group_Lock;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Left_Tab")]
+		public const int ISO_Left_Tab;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Level2_Latch")]
+		public const int ISO_Level2_Latch;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Level3_Latch")]
+		public const int ISO_Level3_Latch;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Level3_Lock")]
+		public const int ISO_Level3_Lock;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Level3_Shift")]
+		public const int ISO_Level3_Shift;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Level5_Latch")]
+		public const int ISO_Level5_Latch;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Level5_Lock")]
+		public const int ISO_Level5_Lock;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Level5_Shift")]
+		public const int ISO_Level5_Shift;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Lock")]
+		public const int ISO_Lock;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Move_Line_Down")]
+		public const int ISO_Move_Line_Down;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Move_Line_Up")]
+		public const int ISO_Move_Line_Up;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Next_Group")]
+		public const int ISO_Next_Group;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Next_Group_Lock")]
+		public const int ISO_Next_Group_Lock;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Partial_Line_Down")]
+		public const int ISO_Partial_Line_Down;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Partial_Line_Up")]
+		public const int ISO_Partial_Line_Up;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Partial_Space_Left")]
+		public const int ISO_Partial_Space_Left;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Partial_Space_Right")]
+		public const int ISO_Partial_Space_Right;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Prev_Group")]
+		public const int ISO_Prev_Group;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Prev_Group_Lock")]
+		public const int ISO_Prev_Group_Lock;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Release_Both_Margins")]
+		public const int ISO_Release_Both_Margins;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Release_Margin_Left")]
+		public const int ISO_Release_Margin_Left;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Release_Margin_Right")]
+		public const int ISO_Release_Margin_Right;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Set_Margin_Left")]
+		public const int ISO_Set_Margin_Left;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ISO_Set_Margin_Right")]
+		public const int ISO_Set_Margin_Right;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Iabovedot")]
+		public const int Iabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Iacute")]
+		public const int Iacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ibelowdot")]
+		public const int Ibelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ibreve")]
+		public const int Ibreve;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Icircumflex")]
+		public const int Icircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Idiaeresis")]
+		public const int Idiaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Igrave")]
+		public const int Igrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ihook")]
+		public const int Ihook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Imacron")]
+		public const int Imacron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Insert")]
+		public const int Insert;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Iogonek")]
+		public const int Iogonek;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Itilde")]
+		public const int Itilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_J")]
+		public const int J;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Jcircumflex")]
+		public const int Jcircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_K")]
+		public const int K;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_0")]
+		public const int KP_0;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_1")]
+		public const int KP_1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_2")]
+		public const int KP_2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_3")]
+		public const int KP_3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_4")]
+		public const int KP_4;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_5")]
+		public const int KP_5;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_6")]
+		public const int KP_6;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_7")]
+		public const int KP_7;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_8")]
+		public const int KP_8;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_9")]
+		public const int KP_9;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Add")]
+		public const int KP_Add;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Begin")]
+		public const int KP_Begin;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Decimal")]
+		public const int KP_Decimal;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Delete")]
+		public const int KP_Delete;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Divide")]
+		public const int KP_Divide;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Down")]
+		public const int KP_Down;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_End")]
+		public const int KP_End;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Enter")]
+		public const int KP_Enter;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Equal")]
+		public const int KP_Equal;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_F1")]
+		public const int KP_F1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_F2")]
+		public const int KP_F2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_F3")]
+		public const int KP_F3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_F4")]
+		public const int KP_F4;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Home")]
+		public const int KP_Home;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Insert")]
+		public const int KP_Insert;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Left")]
+		public const int KP_Left;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Multiply")]
+		public const int KP_Multiply;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Next")]
+		public const int KP_Next;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Page_Down")]
+		public const int KP_Page_Down;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Page_Up")]
+		public const int KP_Page_Up;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Prior")]
+		public const int KP_Prior;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Right")]
+		public const int KP_Right;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Separator")]
+		public const int KP_Separator;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Space")]
+		public const int KP_Space;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Subtract")]
+		public const int KP_Subtract;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Tab")]
+		public const int KP_Tab;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KP_Up")]
+		public const int KP_Up;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Kana_Lock")]
+		public const int Kana_Lock;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Kana_Shift")]
+		public const int Kana_Shift;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Kanji")]
+		public const int Kanji;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Kanji_Bangou")]
+		public const int Kanji_Bangou;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Katakana")]
+		public const int Katakana;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KbdBrightnessDown")]
+		public const int KbdBrightnessDown;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KbdBrightnessUp")]
+		public const int KbdBrightnessUp;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_KbdLightOnOff")]
+		public const int KbdLightOnOff;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Kcedilla")]
+		public const int Kcedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Korean_Won")]
+		public const int Korean_Won;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_L")]
+		public const int L;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_L1")]
+		public const int L1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_L10")]
+		public const int L10;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_L2")]
+		public const int L2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_L3")]
+		public const int L3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_L4")]
+		public const int L4;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_L5")]
+		public const int L5;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_L6")]
+		public const int L6;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_L7")]
+		public const int L7;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_L8")]
+		public const int L8;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_L9")]
+		public const int L9;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Lacute")]
+		public const int Lacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Last_Virtual_Screen")]
+		public const int Last_Virtual_Screen;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Launch0")]
+		public const int Launch0;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Launch1")]
+		public const int Launch1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Launch2")]
+		public const int Launch2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Launch3")]
+		public const int Launch3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Launch4")]
+		public const int Launch4;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Launch5")]
+		public const int Launch5;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Launch6")]
+		public const int Launch6;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Launch7")]
+		public const int Launch7;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Launch8")]
+		public const int Launch8;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Launch9")]
+		public const int Launch9;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_LaunchA")]
+		public const int LaunchA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_LaunchB")]
+		public const int LaunchB;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_LaunchC")]
+		public const int LaunchC;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_LaunchD")]
+		public const int LaunchD;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_LaunchE")]
+		public const int LaunchE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_LaunchF")]
+		public const int LaunchF;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Lbelowdot")]
+		public const int Lbelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Lcaron")]
+		public const int Lcaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Lcedilla")]
+		public const int Lcedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Left")]
+		public const int Left;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_LightBulb")]
+		public const int LightBulb;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Linefeed")]
+		public const int Linefeed;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_LiraSign")]
+		public const int LiraSign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_LogGrabInfo")]
+		public const int LogGrabInfo;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_LogOff")]
+		public const int LogOff;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_LogWindowTree")]
+		public const int LogWindowTree;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Lstroke")]
+		public const int Lstroke;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_M")]
+		public const int M;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Mabovedot")]
+		public const int Mabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Macedonia_DSE")]
+		public const int Macedonia_DSE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Macedonia_GJE")]
+		public const int Macedonia_GJE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Macedonia_KJE")]
+		public const int Macedonia_KJE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Macedonia_dse")]
+		public const int Macedonia_dse;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Macedonia_gje")]
+		public const int Macedonia_gje;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Macedonia_kje")]
+		public const int Macedonia_kje;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Mae_Koho")]
+		public const int Mae_Koho;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Mail")]
+		public const int Mail;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_MailForward")]
+		public const int MailForward;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Market")]
+		public const int Market;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Massyo")]
+		public const int Massyo;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Meeting")]
+		public const int Meeting;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Memo")]
+		public const int Memo;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Menu")]
+		public const int Menu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_MenuKB")]
+		public const int MenuKB;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_MenuPB")]
+		public const int MenuPB;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Messenger")]
+		public const int Messenger;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Meta_L")]
+		public const int Meta_L;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Meta_R")]
+		public const int Meta_R;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_MillSign")]
+		public const int MillSign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ModeLock")]
+		public const int ModeLock;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Mode_switch")]
+		public const int Mode_switch;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_MonBrightnessDown")]
+		public const int MonBrightnessDown;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_MonBrightnessUp")]
+		public const int MonBrightnessUp;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_MouseKeys_Accel_Enable")]
+		public const int MouseKeys_Accel_Enable;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_MouseKeys_Enable")]
+		public const int MouseKeys_Enable;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Muhenkan")]
+		public const int Muhenkan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Multi_key")]
+		public const int Multi_key;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_MultipleCandidate")]
+		public const int MultipleCandidate;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Music")]
+		public const int Music;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_MyComputer")]
+		public const int MyComputer;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_MySites")]
+		public const int MySites;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_N")]
+		public const int N;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Nacute")]
+		public const int Nacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_NairaSign")]
+		public const int NairaSign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ncaron")]
+		public const int Ncaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ncedilla")]
+		public const int Ncedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_New")]
+		public const int New;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_NewSheqelSign")]
+		public const int NewSheqelSign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_News")]
+		public const int News;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Next")]
+		public const int Next;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Next_VMode")]
+		public const int Next_VMode;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Next_Virtual_Screen")]
+		public const int Next_Virtual_Screen;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ntilde")]
+		public const int Ntilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Num_Lock")]
+		public const int Num_Lock;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_O")]
+		public const int O;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_OE")]
+		public const int OE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Oacute")]
+		public const int Oacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Obarred")]
+		public const int Obarred;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Obelowdot")]
+		public const int Obelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ocaron")]
+		public const int Ocaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ocircumflex")]
+		public const int Ocircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ocircumflexacute")]
+		public const int Ocircumflexacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ocircumflexbelowdot")]
+		public const int Ocircumflexbelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ocircumflexgrave")]
+		public const int Ocircumflexgrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ocircumflexhook")]
+		public const int Ocircumflexhook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ocircumflextilde")]
+		public const int Ocircumflextilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Odiaeresis")]
+		public const int Odiaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Odoubleacute")]
+		public const int Odoubleacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_OfficeHome")]
+		public const int OfficeHome;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ograve")]
+		public const int Ograve;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ohook")]
+		public const int Ohook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ohorn")]
+		public const int Ohorn;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ohornacute")]
+		public const int Ohornacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ohornbelowdot")]
+		public const int Ohornbelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ohorngrave")]
+		public const int Ohorngrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ohornhook")]
+		public const int Ohornhook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ohorntilde")]
+		public const int Ohorntilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Omacron")]
+		public const int Omacron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ooblique")]
+		public const int Ooblique;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Open")]
+		public const int Open;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_OpenURL")]
+		public const int OpenURL;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Option")]
+		public const int Option;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Oslash")]
+		public const int Oslash;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Otilde")]
+		public const int Otilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Overlay1_Enable")]
+		public const int Overlay1_Enable;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Overlay2_Enable")]
+		public const int Overlay2_Enable;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_P")]
+		public const int P;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pabovedot")]
+		public const int Pabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Page_Down")]
+		public const int Page_Down;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Page_Up")]
+		public const int Page_Up;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Paste")]
+		public const int Paste;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pause")]
+		public const int Pause;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_PesetaSign")]
+		public const int PesetaSign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Phone")]
+		public const int Phone;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pictures")]
+		public const int Pictures;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Accelerate")]
+		public const int Pointer_Accelerate;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Button1")]
+		public const int Pointer_Button1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Button2")]
+		public const int Pointer_Button2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Button3")]
+		public const int Pointer_Button3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Button4")]
+		public const int Pointer_Button4;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Button5")]
+		public const int Pointer_Button5;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Button_Dflt")]
+		public const int Pointer_Button_Dflt;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_DblClick1")]
+		public const int Pointer_DblClick1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_DblClick2")]
+		public const int Pointer_DblClick2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_DblClick3")]
+		public const int Pointer_DblClick3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_DblClick4")]
+		public const int Pointer_DblClick4;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_DblClick5")]
+		public const int Pointer_DblClick5;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_DblClick_Dflt")]
+		public const int Pointer_DblClick_Dflt;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_DfltBtnNext")]
+		public const int Pointer_DfltBtnNext;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_DfltBtnPrev")]
+		public const int Pointer_DfltBtnPrev;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Down")]
+		public const int Pointer_Down;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_DownLeft")]
+		public const int Pointer_DownLeft;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_DownRight")]
+		public const int Pointer_DownRight;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Drag1")]
+		public const int Pointer_Drag1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Drag2")]
+		public const int Pointer_Drag2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Drag3")]
+		public const int Pointer_Drag3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Drag4")]
+		public const int Pointer_Drag4;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Drag5")]
+		public const int Pointer_Drag5;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Drag_Dflt")]
+		public const int Pointer_Drag_Dflt;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_EnableKeys")]
+		public const int Pointer_EnableKeys;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Left")]
+		public const int Pointer_Left;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Right")]
+		public const int Pointer_Right;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_Up")]
+		public const int Pointer_Up;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_UpLeft")]
+		public const int Pointer_UpLeft;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Pointer_UpRight")]
+		public const int Pointer_UpRight;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_PowerDown")]
+		public const int PowerDown;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_PowerOff")]
+		public const int PowerOff;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Prev_VMode")]
+		public const int Prev_VMode;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Prev_Virtual_Screen")]
+		public const int Prev_Virtual_Screen;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_PreviousCandidate")]
+		public const int PreviousCandidate;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Print")]
+		public const int Print;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Prior")]
+		public const int Prior;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Q")]
+		public const int Q;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R")]
+		public const int R;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R1")]
+		public const int R1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R10")]
+		public const int R10;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R11")]
+		public const int R11;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R12")]
+		public const int R12;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R13")]
+		public const int R13;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R14")]
+		public const int R14;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R15")]
+		public const int R15;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R2")]
+		public const int R2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R3")]
+		public const int R3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R4")]
+		public const int R4;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R5")]
+		public const int R5;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R6")]
+		public const int R6;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R7")]
+		public const int R7;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R8")]
+		public const int R8;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_R9")]
+		public const int R9;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Racute")]
+		public const int Racute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Rcaron")]
+		public const int Rcaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Rcedilla")]
+		public const int Rcedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Red")]
+		public const int Red;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Redo")]
+		public const int Redo;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Refresh")]
+		public const int Refresh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Reload")]
+		public const int Reload;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_RepeatKeys_Enable")]
+		public const int RepeatKeys_Enable;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Reply")]
+		public const int Reply;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Return")]
+		public const int Return;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Right")]
+		public const int Right;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_RockerDown")]
+		public const int RockerDown;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_RockerEnter")]
+		public const int RockerEnter;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_RockerUp")]
+		public const int RockerUp;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Romaji")]
+		public const int Romaji;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_RotateWindows")]
+		public const int RotateWindows;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_RotationKB")]
+		public const int RotationKB;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_RotationPB")]
+		public const int RotationPB;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_RupeeSign")]
+		public const int RupeeSign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_S")]
+		public const int S;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_SCHWA")]
+		public const int SCHWA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sabovedot")]
+		public const int Sabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sacute")]
+		public const int Sacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Save")]
+		public const int Save;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Scaron")]
+		public const int Scaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Scedilla")]
+		public const int Scedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Scircumflex")]
+		public const int Scircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ScreenSaver")]
+		public const int ScreenSaver;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ScrollClick")]
+		public const int ScrollClick;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ScrollDown")]
+		public const int ScrollDown;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ScrollUp")]
+		public const int ScrollUp;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Scroll_Lock")]
+		public const int Scroll_Lock;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Search")]
+		public const int Search;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Select")]
+		public const int Select;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_SelectButton")]
+		public const int SelectButton;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Send")]
+		public const int Send;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Serbian_DJE")]
+		public const int Serbian_DJE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Serbian_DZE")]
+		public const int Serbian_DZE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Serbian_JE")]
+		public const int Serbian_JE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Serbian_LJE")]
+		public const int Serbian_LJE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Serbian_NJE")]
+		public const int Serbian_NJE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Serbian_TSHE")]
+		public const int Serbian_TSHE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Serbian_dje")]
+		public const int Serbian_dje;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Serbian_dze")]
+		public const int Serbian_dze;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Serbian_je")]
+		public const int Serbian_je;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Serbian_lje")]
+		public const int Serbian_lje;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Serbian_nje")]
+		public const int Serbian_nje;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Serbian_tshe")]
+		public const int Serbian_tshe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Shift_L")]
+		public const int Shift_L;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Shift_Lock")]
+		public const int Shift_Lock;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Shift_R")]
+		public const int Shift_R;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Shop")]
+		public const int Shop;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_SingleCandidate")]
+		public const int SingleCandidate;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_a")]
+		public const int Sinh_a;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_aa")]
+		public const int Sinh_aa;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_aa2")]
+		public const int Sinh_aa2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ae")]
+		public const int Sinh_ae;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ae2")]
+		public const int Sinh_ae2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_aee")]
+		public const int Sinh_aee;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_aee2")]
+		public const int Sinh_aee2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ai")]
+		public const int Sinh_ai;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ai2")]
+		public const int Sinh_ai2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_al")]
+		public const int Sinh_al;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_au")]
+		public const int Sinh_au;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_au2")]
+		public const int Sinh_au2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ba")]
+		public const int Sinh_ba;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_bha")]
+		public const int Sinh_bha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ca")]
+		public const int Sinh_ca;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_cha")]
+		public const int Sinh_cha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_dda")]
+		public const int Sinh_dda;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ddha")]
+		public const int Sinh_ddha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_dha")]
+		public const int Sinh_dha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_dhha")]
+		public const int Sinh_dhha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_e")]
+		public const int Sinh_e;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_e2")]
+		public const int Sinh_e2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ee")]
+		public const int Sinh_ee;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ee2")]
+		public const int Sinh_ee2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_fa")]
+		public const int Sinh_fa;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ga")]
+		public const int Sinh_ga;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_gha")]
+		public const int Sinh_gha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_h2")]
+		public const int Sinh_h2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ha")]
+		public const int Sinh_ha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_i")]
+		public const int Sinh_i;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_i2")]
+		public const int Sinh_i2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ii")]
+		public const int Sinh_ii;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ii2")]
+		public const int Sinh_ii2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ja")]
+		public const int Sinh_ja;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_jha")]
+		public const int Sinh_jha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_jnya")]
+		public const int Sinh_jnya;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ka")]
+		public const int Sinh_ka;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_kha")]
+		public const int Sinh_kha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_kunddaliya")]
+		public const int Sinh_kunddaliya;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_la")]
+		public const int Sinh_la;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_lla")]
+		public const int Sinh_lla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_lu")]
+		public const int Sinh_lu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_lu2")]
+		public const int Sinh_lu2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_luu")]
+		public const int Sinh_luu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_luu2")]
+		public const int Sinh_luu2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ma")]
+		public const int Sinh_ma;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_mba")]
+		public const int Sinh_mba;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_na")]
+		public const int Sinh_na;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ndda")]
+		public const int Sinh_ndda;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ndha")]
+		public const int Sinh_ndha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ng")]
+		public const int Sinh_ng;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ng2")]
+		public const int Sinh_ng2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_nga")]
+		public const int Sinh_nga;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_nja")]
+		public const int Sinh_nja;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_nna")]
+		public const int Sinh_nna;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_nya")]
+		public const int Sinh_nya;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_o")]
+		public const int Sinh_o;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_o2")]
+		public const int Sinh_o2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_oo")]
+		public const int Sinh_oo;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_oo2")]
+		public const int Sinh_oo2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_pa")]
+		public const int Sinh_pa;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_pha")]
+		public const int Sinh_pha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ra")]
+		public const int Sinh_ra;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ri")]
+		public const int Sinh_ri;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_rii")]
+		public const int Sinh_rii;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ru2")]
+		public const int Sinh_ru2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ruu2")]
+		public const int Sinh_ruu2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_sa")]
+		public const int Sinh_sa;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_sha")]
+		public const int Sinh_sha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ssha")]
+		public const int Sinh_ssha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_tha")]
+		public const int Sinh_tha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_thha")]
+		public const int Sinh_thha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_tta")]
+		public const int Sinh_tta;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ttha")]
+		public const int Sinh_ttha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_u")]
+		public const int Sinh_u;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_u2")]
+		public const int Sinh_u2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_uu")]
+		public const int Sinh_uu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_uu2")]
+		public const int Sinh_uu2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_va")]
+		public const int Sinh_va;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sinh_ya")]
+		public const int Sinh_ya;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sleep")]
+		public const int Sleep;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_SlowKeys_Enable")]
+		public const int SlowKeys_Enable;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Spell")]
+		public const int Spell;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_SplitScreen")]
+		public const int SplitScreen;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Standby")]
+		public const int Standby;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Start")]
+		public const int Start;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_StickyKeys_Enable")]
+		public const int StickyKeys_Enable;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Stop")]
+		public const int Stop;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Subtitle")]
+		public const int Subtitle;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Super_L")]
+		public const int Super_L;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Super_R")]
+		public const int Super_R;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Support")]
+		public const int Support;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Suspend")]
+		public const int Suspend;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Switch_VT_1")]
+		public const int Switch_VT_1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Switch_VT_10")]
+		public const int Switch_VT_10;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Switch_VT_11")]
+		public const int Switch_VT_11;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Switch_VT_12")]
+		public const int Switch_VT_12;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Switch_VT_2")]
+		public const int Switch_VT_2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Switch_VT_3")]
+		public const int Switch_VT_3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Switch_VT_4")]
+		public const int Switch_VT_4;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Switch_VT_5")]
+		public const int Switch_VT_5;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Switch_VT_6")]
+		public const int Switch_VT_6;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Switch_VT_7")]
+		public const int Switch_VT_7;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Switch_VT_8")]
+		public const int Switch_VT_8;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Switch_VT_9")]
+		public const int Switch_VT_9;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Sys_Req")]
+		public const int Sys_Req;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_T")]
+		public const int T;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_THORN")]
+		public const int THORN;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Tab")]
+		public const int Tab;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Tabovedot")]
+		public const int Tabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_TaskPane")]
+		public const int TaskPane;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Tcaron")]
+		public const int Tcaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Tcedilla")]
+		public const int Tcedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Terminal")]
+		public const int Terminal;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Terminate_Server")]
+		public const int Terminate_Server;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_baht")]
+		public const int Thai_baht;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_bobaimai")]
+		public const int Thai_bobaimai;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_chochan")]
+		public const int Thai_chochan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_chochang")]
+		public const int Thai_chochang;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_choching")]
+		public const int Thai_choching;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_chochoe")]
+		public const int Thai_chochoe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_dochada")]
+		public const int Thai_dochada;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_dodek")]
+		public const int Thai_dodek;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_fofa")]
+		public const int Thai_fofa;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_fofan")]
+		public const int Thai_fofan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_hohip")]
+		public const int Thai_hohip;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_honokhuk")]
+		public const int Thai_honokhuk;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_khokhai")]
+		public const int Thai_khokhai;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_khokhon")]
+		public const int Thai_khokhon;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_khokhuat")]
+		public const int Thai_khokhuat;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_khokhwai")]
+		public const int Thai_khokhwai;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_khorakhang")]
+		public const int Thai_khorakhang;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_kokai")]
+		public const int Thai_kokai;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_lakkhangyao")]
+		public const int Thai_lakkhangyao;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_lekchet")]
+		public const int Thai_lekchet;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_lekha")]
+		public const int Thai_lekha;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_lekhok")]
+		public const int Thai_lekhok;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_lekkao")]
+		public const int Thai_lekkao;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_leknung")]
+		public const int Thai_leknung;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_lekpaet")]
+		public const int Thai_lekpaet;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_leksam")]
+		public const int Thai_leksam;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_leksi")]
+		public const int Thai_leksi;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_leksong")]
+		public const int Thai_leksong;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_leksun")]
+		public const int Thai_leksun;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_lochula")]
+		public const int Thai_lochula;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_loling")]
+		public const int Thai_loling;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_lu")]
+		public const int Thai_lu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_maichattawa")]
+		public const int Thai_maichattawa;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_maiek")]
+		public const int Thai_maiek;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_maihanakat")]
+		public const int Thai_maihanakat;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_maihanakat_maitho")]
+		public const int Thai_maihanakat_maitho;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_maitaikhu")]
+		public const int Thai_maitaikhu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_maitho")]
+		public const int Thai_maitho;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_maitri")]
+		public const int Thai_maitri;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_maiyamok")]
+		public const int Thai_maiyamok;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_moma")]
+		public const int Thai_moma;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_ngongu")]
+		public const int Thai_ngongu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_nikhahit")]
+		public const int Thai_nikhahit;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_nonen")]
+		public const int Thai_nonen;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_nonu")]
+		public const int Thai_nonu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_oang")]
+		public const int Thai_oang;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_paiyannoi")]
+		public const int Thai_paiyannoi;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_phinthu")]
+		public const int Thai_phinthu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_phophan")]
+		public const int Thai_phophan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_phophung")]
+		public const int Thai_phophung;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_phosamphao")]
+		public const int Thai_phosamphao;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_popla")]
+		public const int Thai_popla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_rorua")]
+		public const int Thai_rorua;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_ru")]
+		public const int Thai_ru;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_saraa")]
+		public const int Thai_saraa;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_saraaa")]
+		public const int Thai_saraaa;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_saraae")]
+		public const int Thai_saraae;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_saraaimaimalai")]
+		public const int Thai_saraaimaimalai;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_saraaimaimuan")]
+		public const int Thai_saraaimaimuan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_saraam")]
+		public const int Thai_saraam;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_sarae")]
+		public const int Thai_sarae;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_sarai")]
+		public const int Thai_sarai;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_saraii")]
+		public const int Thai_saraii;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_sarao")]
+		public const int Thai_sarao;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_sarau")]
+		public const int Thai_sarau;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_saraue")]
+		public const int Thai_saraue;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_sarauee")]
+		public const int Thai_sarauee;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_sarauu")]
+		public const int Thai_sarauu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_sorusi")]
+		public const int Thai_sorusi;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_sosala")]
+		public const int Thai_sosala;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_soso")]
+		public const int Thai_soso;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_sosua")]
+		public const int Thai_sosua;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_thanthakhat")]
+		public const int Thai_thanthakhat;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_thonangmontho")]
+		public const int Thai_thonangmontho;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_thophuthao")]
+		public const int Thai_thophuthao;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_thothahan")]
+		public const int Thai_thothahan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_thothan")]
+		public const int Thai_thothan;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_thothong")]
+		public const int Thai_thothong;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_thothung")]
+		public const int Thai_thothung;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_topatak")]
+		public const int Thai_topatak;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_totao")]
+		public const int Thai_totao;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_wowaen")]
+		public const int Thai_wowaen;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_yoyak")]
+		public const int Thai_yoyak;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thai_yoying")]
+		public const int Thai_yoying;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Thorn")]
+		public const int Thorn;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Time")]
+		public const int Time;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ToDoList")]
+		public const int ToDoList;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Tools")]
+		public const int Tools;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_TopMenu")]
+		public const int TopMenu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_TouchpadOff")]
+		public const int TouchpadOff;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_TouchpadOn")]
+		public const int TouchpadOn;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_TouchpadToggle")]
+		public const int TouchpadToggle;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Touroku")]
+		public const int Touroku;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Travel")]
+		public const int Travel;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Tslash")]
+		public const int Tslash;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_U")]
+		public const int U;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_UWB")]
+		public const int UWB;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Uacute")]
+		public const int Uacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ubelowdot")]
+		public const int Ubelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ubreve")]
+		public const int Ubreve;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ucircumflex")]
+		public const int Ucircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Udiaeresis")]
+		public const int Udiaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Udoubleacute")]
+		public const int Udoubleacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ugrave")]
+		public const int Ugrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Uhook")]
+		public const int Uhook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Uhorn")]
+		public const int Uhorn;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Uhornacute")]
+		public const int Uhornacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Uhornbelowdot")]
+		public const int Uhornbelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Uhorngrave")]
+		public const int Uhorngrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Uhornhook")]
+		public const int Uhornhook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Uhorntilde")]
+		public const int Uhorntilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ukrainian_GHE_WITH_UPTURN")]
+		public const int Ukrainian_GHE_WITH_UPTURN;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ukrainian_I")]
+		public const int Ukrainian_I;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ukrainian_IE")]
+		public const int Ukrainian_IE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ukrainian_YI")]
+		public const int Ukrainian_YI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ukrainian_ghe_with_upturn")]
+		public const int Ukrainian_ghe_with_upturn;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ukrainian_i")]
+		public const int Ukrainian_i;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ukrainian_ie")]
+		public const int Ukrainian_ie;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ukrainian_yi")]
+		public const int Ukrainian_yi;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ukranian_I")]
+		public const int Ukranian_I;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ukranian_JE")]
+		public const int Ukranian_JE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ukranian_YI")]
+		public const int Ukranian_YI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ukranian_i")]
+		public const int Ukranian_i;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ukranian_je")]
+		public const int Ukranian_je;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ukranian_yi")]
+		public const int Ukranian_yi;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Umacron")]
+		public const int Umacron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Undo")]
+		public const int Undo;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ungrab")]
+		public const int Ungrab;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Uogonek")]
+		public const int Uogonek;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Up")]
+		public const int Up;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Uring")]
+		public const int Uring;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_User1KB")]
+		public const int User1KB;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_User2KB")]
+		public const int User2KB;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_UserPB")]
+		public const int UserPB;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Utilde")]
+		public const int Utilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_V")]
+		public const int V;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_VendorHome")]
+		public const int VendorHome;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Video")]
+		public const int Video;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_View")]
+		public const int View;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_VoidSymbol")]
+		public const int VoidSymbol;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_W")]
+		public const int W;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_WLAN")]
+		public const int WLAN;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_WWW")]
+		public const int WWW;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Wacute")]
+		public const int Wacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_WakeUp")]
+		public const int WakeUp;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Wcircumflex")]
+		public const int Wcircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Wdiaeresis")]
+		public const int Wdiaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_WebCam")]
+		public const int WebCam;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Wgrave")]
+		public const int Wgrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_WheelButton")]
+		public const int WheelButton;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_WindowClear")]
+		public const int WindowClear;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_WonSign")]
+		public const int WonSign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Word")]
+		public const int Word;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_X")]
+		public const int X;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Xabovedot")]
+		public const int Xabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Xfer")]
+		public const int Xfer;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Y")]
+		public const int Y;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Yacute")]
+		public const int Yacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ybelowdot")]
+		public const int Ybelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ycircumflex")]
+		public const int Ycircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ydiaeresis")]
+		public const int Ydiaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Yellow")]
+		public const int Yellow;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ygrave")]
+		public const int Ygrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Yhook")]
+		public const int Yhook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Ytilde")]
+		public const int Ytilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Z")]
+		public const int Z;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Zabovedot")]
+		public const int Zabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Zacute")]
+		public const int Zacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Zcaron")]
+		public const int Zcaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Zen_Koho")]
+		public const int Zen_Koho;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Zenkaku")]
+		public const int Zenkaku;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Zenkaku_Hankaku")]
+		public const int Zenkaku_Hankaku;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ZoomIn")]
+		public const int ZoomIn;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ZoomOut")]
+		public const int ZoomOut;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_Zstroke")]
+		public const int Zstroke;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_a")]
+		public const int a;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_aacute")]
+		public const int aacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_abelowdot")]
+		public const int abelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_abovedot")]
+		public const int abovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_abreve")]
+		public const int abreve;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_abreveacute")]
+		public const int abreveacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_abrevebelowdot")]
+		public const int abrevebelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_abrevegrave")]
+		public const int abrevegrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_abrevehook")]
+		public const int abrevehook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_abrevetilde")]
+		public const int abrevetilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_acircumflex")]
+		public const int acircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_acircumflexacute")]
+		public const int acircumflexacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_acircumflexbelowdot")]
+		public const int acircumflexbelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_acircumflexgrave")]
+		public const int acircumflexgrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_acircumflexhook")]
+		public const int acircumflexhook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_acircumflextilde")]
+		public const int acircumflextilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_acute")]
+		public const int acute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_adiaeresis")]
+		public const int adiaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ae")]
+		public const int ae;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_agrave")]
+		public const int agrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ahook")]
+		public const int ahook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_amacron")]
+		public const int amacron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ampersand")]
+		public const int ampersand;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_aogonek")]
+		public const int aogonek;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_apostrophe")]
+		public const int apostrophe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_approxeq")]
+		public const int approxeq;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_approximate")]
+		public const int approximate;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_aring")]
+		public const int aring;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_asciicircum")]
+		public const int asciicircum;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_asciitilde")]
+		public const int asciitilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_asterisk")]
+		public const int asterisk;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_at")]
+		public const int at;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_atilde")]
+		public const int atilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_b")]
+		public const int b;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_babovedot")]
+		public const int babovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_backslash")]
+		public const int backslash;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ballotcross")]
+		public const int ballotcross;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_bar")]
+		public const int bar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_because")]
+		public const int because;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_blank")]
+		public const int blank;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_botintegral")]
+		public const int botintegral;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_botleftparens")]
+		public const int botleftparens;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_botleftsqbracket")]
+		public const int botleftsqbracket;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_botleftsummation")]
+		public const int botleftsummation;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_botrightparens")]
+		public const int botrightparens;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_botrightsqbracket")]
+		public const int botrightsqbracket;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_botrightsummation")]
+		public const int botrightsummation;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_bott")]
+		public const int bott;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_botvertsummationconnector")]
+		public const int botvertsummationconnector;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braceleft")]
+		public const int braceleft;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braceright")]
+		public const int braceright;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_bracketleft")]
+		public const int bracketleft;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_bracketright")]
+		public const int bracketright;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_blank")]
+		public const int braille_blank;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dot_1")]
+		public const int braille_dot_1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dot_10")]
+		public const int braille_dot_10;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dot_2")]
+		public const int braille_dot_2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dot_3")]
+		public const int braille_dot_3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dot_4")]
+		public const int braille_dot_4;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dot_5")]
+		public const int braille_dot_5;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dot_6")]
+		public const int braille_dot_6;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dot_7")]
+		public const int braille_dot_7;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dot_8")]
+		public const int braille_dot_8;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dot_9")]
+		public const int braille_dot_9;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1")]
+		public const int braille_dots_1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12")]
+		public const int braille_dots_12;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_123")]
+		public const int braille_dots_123;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1234")]
+		public const int braille_dots_1234;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12345")]
+		public const int braille_dots_12345;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_123456")]
+		public const int braille_dots_123456;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1234567")]
+		public const int braille_dots_1234567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12345678")]
+		public const int braille_dots_12345678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1234568")]
+		public const int braille_dots_1234568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_123457")]
+		public const int braille_dots_123457;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1234578")]
+		public const int braille_dots_1234578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_123458")]
+		public const int braille_dots_123458;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12346")]
+		public const int braille_dots_12346;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_123467")]
+		public const int braille_dots_123467;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1234678")]
+		public const int braille_dots_1234678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_123468")]
+		public const int braille_dots_123468;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12347")]
+		public const int braille_dots_12347;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_123478")]
+		public const int braille_dots_123478;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12348")]
+		public const int braille_dots_12348;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1235")]
+		public const int braille_dots_1235;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12356")]
+		public const int braille_dots_12356;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_123567")]
+		public const int braille_dots_123567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1235678")]
+		public const int braille_dots_1235678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_123568")]
+		public const int braille_dots_123568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12357")]
+		public const int braille_dots_12357;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_123578")]
+		public const int braille_dots_123578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12358")]
+		public const int braille_dots_12358;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1236")]
+		public const int braille_dots_1236;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12367")]
+		public const int braille_dots_12367;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_123678")]
+		public const int braille_dots_123678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12368")]
+		public const int braille_dots_12368;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1237")]
+		public const int braille_dots_1237;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12378")]
+		public const int braille_dots_12378;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1238")]
+		public const int braille_dots_1238;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_124")]
+		public const int braille_dots_124;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1245")]
+		public const int braille_dots_1245;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12456")]
+		public const int braille_dots_12456;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_124567")]
+		public const int braille_dots_124567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1245678")]
+		public const int braille_dots_1245678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_124568")]
+		public const int braille_dots_124568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12457")]
+		public const int braille_dots_12457;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_124578")]
+		public const int braille_dots_124578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12458")]
+		public const int braille_dots_12458;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1246")]
+		public const int braille_dots_1246;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12467")]
+		public const int braille_dots_12467;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_124678")]
+		public const int braille_dots_124678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12468")]
+		public const int braille_dots_12468;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1247")]
+		public const int braille_dots_1247;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12478")]
+		public const int braille_dots_12478;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1248")]
+		public const int braille_dots_1248;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_125")]
+		public const int braille_dots_125;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1256")]
+		public const int braille_dots_1256;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12567")]
+		public const int braille_dots_12567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_125678")]
+		public const int braille_dots_125678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12568")]
+		public const int braille_dots_12568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1257")]
+		public const int braille_dots_1257;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12578")]
+		public const int braille_dots_12578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1258")]
+		public const int braille_dots_1258;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_126")]
+		public const int braille_dots_126;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1267")]
+		public const int braille_dots_1267;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_12678")]
+		public const int braille_dots_12678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1268")]
+		public const int braille_dots_1268;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_127")]
+		public const int braille_dots_127;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1278")]
+		public const int braille_dots_1278;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_128")]
+		public const int braille_dots_128;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_13")]
+		public const int braille_dots_13;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_134")]
+		public const int braille_dots_134;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1345")]
+		public const int braille_dots_1345;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_13456")]
+		public const int braille_dots_13456;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_134567")]
+		public const int braille_dots_134567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1345678")]
+		public const int braille_dots_1345678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_134568")]
+		public const int braille_dots_134568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_13457")]
+		public const int braille_dots_13457;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_134578")]
+		public const int braille_dots_134578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_13458")]
+		public const int braille_dots_13458;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1346")]
+		public const int braille_dots_1346;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_13467")]
+		public const int braille_dots_13467;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_134678")]
+		public const int braille_dots_134678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_13468")]
+		public const int braille_dots_13468;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1347")]
+		public const int braille_dots_1347;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_13478")]
+		public const int braille_dots_13478;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1348")]
+		public const int braille_dots_1348;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_135")]
+		public const int braille_dots_135;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1356")]
+		public const int braille_dots_1356;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_13567")]
+		public const int braille_dots_13567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_135678")]
+		public const int braille_dots_135678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_13568")]
+		public const int braille_dots_13568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1357")]
+		public const int braille_dots_1357;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_13578")]
+		public const int braille_dots_13578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1358")]
+		public const int braille_dots_1358;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_136")]
+		public const int braille_dots_136;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1367")]
+		public const int braille_dots_1367;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_13678")]
+		public const int braille_dots_13678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1368")]
+		public const int braille_dots_1368;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_137")]
+		public const int braille_dots_137;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1378")]
+		public const int braille_dots_1378;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_138")]
+		public const int braille_dots_138;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_14")]
+		public const int braille_dots_14;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_145")]
+		public const int braille_dots_145;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1456")]
+		public const int braille_dots_1456;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_14567")]
+		public const int braille_dots_14567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_145678")]
+		public const int braille_dots_145678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_14568")]
+		public const int braille_dots_14568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1457")]
+		public const int braille_dots_1457;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_14578")]
+		public const int braille_dots_14578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1458")]
+		public const int braille_dots_1458;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_146")]
+		public const int braille_dots_146;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1467")]
+		public const int braille_dots_1467;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_14678")]
+		public const int braille_dots_14678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1468")]
+		public const int braille_dots_1468;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_147")]
+		public const int braille_dots_147;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1478")]
+		public const int braille_dots_1478;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_148")]
+		public const int braille_dots_148;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_15")]
+		public const int braille_dots_15;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_156")]
+		public const int braille_dots_156;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1567")]
+		public const int braille_dots_1567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_15678")]
+		public const int braille_dots_15678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1568")]
+		public const int braille_dots_1568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_157")]
+		public const int braille_dots_157;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1578")]
+		public const int braille_dots_1578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_158")]
+		public const int braille_dots_158;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_16")]
+		public const int braille_dots_16;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_167")]
+		public const int braille_dots_167;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_1678")]
+		public const int braille_dots_1678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_168")]
+		public const int braille_dots_168;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_17")]
+		public const int braille_dots_17;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_178")]
+		public const int braille_dots_178;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_18")]
+		public const int braille_dots_18;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2")]
+		public const int braille_dots_2;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_23")]
+		public const int braille_dots_23;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_234")]
+		public const int braille_dots_234;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2345")]
+		public const int braille_dots_2345;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_23456")]
+		public const int braille_dots_23456;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_234567")]
+		public const int braille_dots_234567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2345678")]
+		public const int braille_dots_2345678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_234568")]
+		public const int braille_dots_234568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_23457")]
+		public const int braille_dots_23457;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_234578")]
+		public const int braille_dots_234578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_23458")]
+		public const int braille_dots_23458;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2346")]
+		public const int braille_dots_2346;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_23467")]
+		public const int braille_dots_23467;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_234678")]
+		public const int braille_dots_234678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_23468")]
+		public const int braille_dots_23468;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2347")]
+		public const int braille_dots_2347;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_23478")]
+		public const int braille_dots_23478;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2348")]
+		public const int braille_dots_2348;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_235")]
+		public const int braille_dots_235;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2356")]
+		public const int braille_dots_2356;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_23567")]
+		public const int braille_dots_23567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_235678")]
+		public const int braille_dots_235678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_23568")]
+		public const int braille_dots_23568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2357")]
+		public const int braille_dots_2357;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_23578")]
+		public const int braille_dots_23578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2358")]
+		public const int braille_dots_2358;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_236")]
+		public const int braille_dots_236;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2367")]
+		public const int braille_dots_2367;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_23678")]
+		public const int braille_dots_23678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2368")]
+		public const int braille_dots_2368;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_237")]
+		public const int braille_dots_237;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2378")]
+		public const int braille_dots_2378;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_238")]
+		public const int braille_dots_238;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_24")]
+		public const int braille_dots_24;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_245")]
+		public const int braille_dots_245;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2456")]
+		public const int braille_dots_2456;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_24567")]
+		public const int braille_dots_24567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_245678")]
+		public const int braille_dots_245678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_24568")]
+		public const int braille_dots_24568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2457")]
+		public const int braille_dots_2457;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_24578")]
+		public const int braille_dots_24578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2458")]
+		public const int braille_dots_2458;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_246")]
+		public const int braille_dots_246;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2467")]
+		public const int braille_dots_2467;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_24678")]
+		public const int braille_dots_24678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2468")]
+		public const int braille_dots_2468;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_247")]
+		public const int braille_dots_247;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2478")]
+		public const int braille_dots_2478;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_248")]
+		public const int braille_dots_248;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_25")]
+		public const int braille_dots_25;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_256")]
+		public const int braille_dots_256;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2567")]
+		public const int braille_dots_2567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_25678")]
+		public const int braille_dots_25678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2568")]
+		public const int braille_dots_2568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_257")]
+		public const int braille_dots_257;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2578")]
+		public const int braille_dots_2578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_258")]
+		public const int braille_dots_258;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_26")]
+		public const int braille_dots_26;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_267")]
+		public const int braille_dots_267;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_2678")]
+		public const int braille_dots_2678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_268")]
+		public const int braille_dots_268;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_27")]
+		public const int braille_dots_27;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_278")]
+		public const int braille_dots_278;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_28")]
+		public const int braille_dots_28;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_3")]
+		public const int braille_dots_3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_34")]
+		public const int braille_dots_34;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_345")]
+		public const int braille_dots_345;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_3456")]
+		public const int braille_dots_3456;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_34567")]
+		public const int braille_dots_34567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_345678")]
+		public const int braille_dots_345678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_34568")]
+		public const int braille_dots_34568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_3457")]
+		public const int braille_dots_3457;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_34578")]
+		public const int braille_dots_34578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_3458")]
+		public const int braille_dots_3458;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_346")]
+		public const int braille_dots_346;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_3467")]
+		public const int braille_dots_3467;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_34678")]
+		public const int braille_dots_34678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_3468")]
+		public const int braille_dots_3468;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_347")]
+		public const int braille_dots_347;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_3478")]
+		public const int braille_dots_3478;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_348")]
+		public const int braille_dots_348;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_35")]
+		public const int braille_dots_35;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_356")]
+		public const int braille_dots_356;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_3567")]
+		public const int braille_dots_3567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_35678")]
+		public const int braille_dots_35678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_3568")]
+		public const int braille_dots_3568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_357")]
+		public const int braille_dots_357;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_3578")]
+		public const int braille_dots_3578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_358")]
+		public const int braille_dots_358;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_36")]
+		public const int braille_dots_36;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_367")]
+		public const int braille_dots_367;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_3678")]
+		public const int braille_dots_3678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_368")]
+		public const int braille_dots_368;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_37")]
+		public const int braille_dots_37;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_378")]
+		public const int braille_dots_378;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_38")]
+		public const int braille_dots_38;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_4")]
+		public const int braille_dots_4;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_45")]
+		public const int braille_dots_45;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_456")]
+		public const int braille_dots_456;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_4567")]
+		public const int braille_dots_4567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_45678")]
+		public const int braille_dots_45678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_4568")]
+		public const int braille_dots_4568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_457")]
+		public const int braille_dots_457;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_4578")]
+		public const int braille_dots_4578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_458")]
+		public const int braille_dots_458;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_46")]
+		public const int braille_dots_46;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_467")]
+		public const int braille_dots_467;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_4678")]
+		public const int braille_dots_4678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_468")]
+		public const int braille_dots_468;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_47")]
+		public const int braille_dots_47;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_478")]
+		public const int braille_dots_478;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_48")]
+		public const int braille_dots_48;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_5")]
+		public const int braille_dots_5;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_56")]
+		public const int braille_dots_56;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_567")]
+		public const int braille_dots_567;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_5678")]
+		public const int braille_dots_5678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_568")]
+		public const int braille_dots_568;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_57")]
+		public const int braille_dots_57;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_578")]
+		public const int braille_dots_578;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_58")]
+		public const int braille_dots_58;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_6")]
+		public const int braille_dots_6;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_67")]
+		public const int braille_dots_67;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_678")]
+		public const int braille_dots_678;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_68")]
+		public const int braille_dots_68;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_7")]
+		public const int braille_dots_7;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_78")]
+		public const int braille_dots_78;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_braille_dots_8")]
+		public const int braille_dots_8;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_breve")]
+		public const int breve;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_brokenbar")]
+		public const int brokenbar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_c")]
+		public const int c;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_c_h")]
+		public const int c_h;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_cabovedot")]
+		public const int cabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_cacute")]
+		public const int cacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_careof")]
+		public const int careof;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_caret")]
+		public const int caret;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_caron")]
+		public const int caron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ccaron")]
+		public const int ccaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ccedilla")]
+		public const int ccedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ccircumflex")]
+		public const int ccircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_cedilla")]
+		public const int cedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_cent")]
+		public const int cent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ch")]
+		public const int ch;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_checkerboard")]
+		public const int checkerboard;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_checkmark")]
+		public const int checkmark;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_circle")]
+		public const int circle;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_club")]
+		public const int club;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_colon")]
+		public const int colon;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_comma")]
+		public const int comma;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_containsas")]
+		public const int containsas;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_copyright")]
+		public const int copyright;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_cr")]
+		public const int cr;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_crossinglines")]
+		public const int crossinglines;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_cuberoot")]
+		public const int cuberoot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_currency")]
+		public const int currency;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_cursor")]
+		public const int cursor;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_d")]
+		public const int d;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dabovedot")]
+		public const int dabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dagger")]
+		public const int dagger;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dcaron")]
+		public const int dcaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_A")]
+		public const int dead_A;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_E")]
+		public const int dead_E;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_I")]
+		public const int dead_I;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_O")]
+		public const int dead_O;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_U")]
+		public const int dead_U;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_a")]
+		public const int dead_a;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_abovecomma")]
+		public const int dead_abovecomma;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_abovedot")]
+		public const int dead_abovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_abovereversedcomma")]
+		public const int dead_abovereversedcomma;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_abovering")]
+		public const int dead_abovering;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_acute")]
+		public const int dead_acute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_belowbreve")]
+		public const int dead_belowbreve;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_belowcircumflex")]
+		public const int dead_belowcircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_belowcomma")]
+		public const int dead_belowcomma;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_belowdiaeresis")]
+		public const int dead_belowdiaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_belowdot")]
+		public const int dead_belowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_belowmacron")]
+		public const int dead_belowmacron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_belowring")]
+		public const int dead_belowring;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_belowtilde")]
+		public const int dead_belowtilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_breve")]
+		public const int dead_breve;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_capital_schwa")]
+		public const int dead_capital_schwa;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_caron")]
+		public const int dead_caron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_cedilla")]
+		public const int dead_cedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_circumflex")]
+		public const int dead_circumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_currency")]
+		public const int dead_currency;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_dasia")]
+		public const int dead_dasia;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_diaeresis")]
+		public const int dead_diaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_doubleacute")]
+		public const int dead_doubleacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_doublegrave")]
+		public const int dead_doublegrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_e")]
+		public const int dead_e;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_grave")]
+		public const int dead_grave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_hook")]
+		public const int dead_hook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_horn")]
+		public const int dead_horn;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_i")]
+		public const int dead_i;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_invertedbreve")]
+		public const int dead_invertedbreve;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_iota")]
+		public const int dead_iota;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_macron")]
+		public const int dead_macron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_o")]
+		public const int dead_o;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_ogonek")]
+		public const int dead_ogonek;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_perispomeni")]
+		public const int dead_perispomeni;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_psili")]
+		public const int dead_psili;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_semivoiced_sound")]
+		public const int dead_semivoiced_sound;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_small_schwa")]
+		public const int dead_small_schwa;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_stroke")]
+		public const int dead_stroke;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_tilde")]
+		public const int dead_tilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_u")]
+		public const int dead_u;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dead_voiced_sound")]
+		public const int dead_voiced_sound;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_decimalpoint")]
+		public const int decimalpoint;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_degree")]
+		public const int degree;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_diaeresis")]
+		public const int diaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_diamond")]
+		public const int diamond;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_digitspace")]
+		public const int digitspace;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dintegral")]
+		public const int dintegral;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_division")]
+		public const int division;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dollar")]
+		public const int dollar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_doubbaselinedot")]
+		public const int doubbaselinedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_doubleacute")]
+		public const int doubleacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_doubledagger")]
+		public const int doubledagger;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_doublelowquotemark")]
+		public const int doublelowquotemark;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_downarrow")]
+		public const int downarrow;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_downcaret")]
+		public const int downcaret;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_downshoe")]
+		public const int downshoe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_downstile")]
+		public const int downstile;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_downtack")]
+		public const int downtack;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_dstroke")]
+		public const int dstroke;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_e")]
+		public const int e;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_eabovedot")]
+		public const int eabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_eacute")]
+		public const int eacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ebelowdot")]
+		public const int ebelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ecaron")]
+		public const int ecaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ecircumflex")]
+		public const int ecircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ecircumflexacute")]
+		public const int ecircumflexacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ecircumflexbelowdot")]
+		public const int ecircumflexbelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ecircumflexgrave")]
+		public const int ecircumflexgrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ecircumflexhook")]
+		public const int ecircumflexhook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ecircumflextilde")]
+		public const int ecircumflextilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ediaeresis")]
+		public const int ediaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_egrave")]
+		public const int egrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ehook")]
+		public const int ehook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_eightsubscript")]
+		public const int eightsubscript;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_eightsuperior")]
+		public const int eightsuperior;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_elementof")]
+		public const int elementof;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ellipsis")]
+		public const int ellipsis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_em3space")]
+		public const int em3space;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_em4space")]
+		public const int em4space;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_emacron")]
+		public const int emacron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_emdash")]
+		public const int emdash;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_emfilledcircle")]
+		public const int emfilledcircle;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_emfilledrect")]
+		public const int emfilledrect;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_emopencircle")]
+		public const int emopencircle;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_emopenrectangle")]
+		public const int emopenrectangle;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_emptyset")]
+		public const int emptyset;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_emspace")]
+		public const int emspace;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_endash")]
+		public const int endash;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_enfilledcircbullet")]
+		public const int enfilledcircbullet;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_enfilledsqbullet")]
+		public const int enfilledsqbullet;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_eng")]
+		public const int eng;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_enopencircbullet")]
+		public const int enopencircbullet;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_enopensquarebullet")]
+		public const int enopensquarebullet;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_enspace")]
+		public const int enspace;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_eogonek")]
+		public const int eogonek;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_equal")]
+		public const int equal;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_eth")]
+		public const int eth;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_etilde")]
+		public const int etilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_exclam")]
+		public const int exclam;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_exclamdown")]
+		public const int exclamdown;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_f")]
+		public const int f;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_fabovedot")]
+		public const int fabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_femalesymbol")]
+		public const int femalesymbol;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ff")]
+		public const int ff;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_figdash")]
+		public const int figdash;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_filledlefttribullet")]
+		public const int filledlefttribullet;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_filledrectbullet")]
+		public const int filledrectbullet;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_filledrighttribullet")]
+		public const int filledrighttribullet;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_filledtribulletdown")]
+		public const int filledtribulletdown;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_filledtribulletup")]
+		public const int filledtribulletup;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_fiveeighths")]
+		public const int fiveeighths;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_fivesixths")]
+		public const int fivesixths;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_fivesubscript")]
+		public const int fivesubscript;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_fivesuperior")]
+		public const int fivesuperior;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_fourfifths")]
+		public const int fourfifths;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_foursubscript")]
+		public const int foursubscript;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_foursuperior")]
+		public const int foursuperior;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_fourthroot")]
+		public const int fourthroot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_function")]
+		public const int function;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_g")]
+		public const int g;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_gabovedot")]
+		public const int gabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_gbreve")]
+		public const int gbreve;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_gcaron")]
+		public const int gcaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_gcedilla")]
+		public const int gcedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_gcircumflex")]
+		public const int gcircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_grave")]
+		public const int grave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_greater")]
+		public const int greater;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_greaterthanequal")]
+		public const int greaterthanequal;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_guillemotleft")]
+		public const int guillemotleft;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_guillemotright")]
+		public const int guillemotright;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_h")]
+		public const int h;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hairspace")]
+		public const int hairspace;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hcircumflex")]
+		public const int hcircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_heart")]
+		public const int heart;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_aleph")]
+		public const int hebrew_aleph;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_ayin")]
+		public const int hebrew_ayin;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_bet")]
+		public const int hebrew_bet;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_beth")]
+		public const int hebrew_beth;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_chet")]
+		public const int hebrew_chet;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_dalet")]
+		public const int hebrew_dalet;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_daleth")]
+		public const int hebrew_daleth;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_doublelowline")]
+		public const int hebrew_doublelowline;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_finalkaph")]
+		public const int hebrew_finalkaph;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_finalmem")]
+		public const int hebrew_finalmem;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_finalnun")]
+		public const int hebrew_finalnun;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_finalpe")]
+		public const int hebrew_finalpe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_finalzade")]
+		public const int hebrew_finalzade;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_finalzadi")]
+		public const int hebrew_finalzadi;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_gimel")]
+		public const int hebrew_gimel;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_gimmel")]
+		public const int hebrew_gimmel;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_he")]
+		public const int hebrew_he;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_het")]
+		public const int hebrew_het;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_kaph")]
+		public const int hebrew_kaph;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_kuf")]
+		public const int hebrew_kuf;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_lamed")]
+		public const int hebrew_lamed;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_mem")]
+		public const int hebrew_mem;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_nun")]
+		public const int hebrew_nun;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_pe")]
+		public const int hebrew_pe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_qoph")]
+		public const int hebrew_qoph;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_resh")]
+		public const int hebrew_resh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_samech")]
+		public const int hebrew_samech;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_samekh")]
+		public const int hebrew_samekh;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_shin")]
+		public const int hebrew_shin;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_taf")]
+		public const int hebrew_taf;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_taw")]
+		public const int hebrew_taw;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_tet")]
+		public const int hebrew_tet;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_teth")]
+		public const int hebrew_teth;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_waw")]
+		public const int hebrew_waw;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_yod")]
+		public const int hebrew_yod;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_zade")]
+		public const int hebrew_zade;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_zadi")]
+		public const int hebrew_zadi;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_zain")]
+		public const int hebrew_zain;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hebrew_zayin")]
+		public const int hebrew_zayin;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hexagram")]
+		public const int hexagram;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_horizconnector")]
+		public const int horizconnector;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_horizlinescan1")]
+		public const int horizlinescan1;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_horizlinescan3")]
+		public const int horizlinescan3;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_horizlinescan5")]
+		public const int horizlinescan5;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_horizlinescan7")]
+		public const int horizlinescan7;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_horizlinescan9")]
+		public const int horizlinescan9;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hstroke")]
+		public const int hstroke;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ht")]
+		public const int ht;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_hyphen")]
+		public const int hyphen;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_i")]
+		public const int i;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_iTouch")]
+		public const int iTouch;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_iacute")]
+		public const int iacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ibelowdot")]
+		public const int ibelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ibreve")]
+		public const int ibreve;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_icircumflex")]
+		public const int icircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_identical")]
+		public const int identical;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_idiaeresis")]
+		public const int idiaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_idotless")]
+		public const int idotless;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ifonlyif")]
+		public const int ifonlyif;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_igrave")]
+		public const int igrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ihook")]
+		public const int ihook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_imacron")]
+		public const int imacron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_implies")]
+		public const int implies;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_includedin")]
+		public const int includedin;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_includes")]
+		public const int includes;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_infinity")]
+		public const int infinity;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_integral")]
+		public const int integral;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_intersection")]
+		public const int intersection;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_iogonek")]
+		public const int iogonek;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_itilde")]
+		public const int itilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_j")]
+		public const int j;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_jcircumflex")]
+		public const int jcircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_jot")]
+		public const int jot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_k")]
+		public const int k;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_A")]
+		public const int kana_A;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_CHI")]
+		public const int kana_CHI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_E")]
+		public const int kana_E;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_FU")]
+		public const int kana_FU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_HA")]
+		public const int kana_HA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_HE")]
+		public const int kana_HE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_HI")]
+		public const int kana_HI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_HO")]
+		public const int kana_HO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_HU")]
+		public const int kana_HU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_I")]
+		public const int kana_I;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_KA")]
+		public const int kana_KA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_KE")]
+		public const int kana_KE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_KI")]
+		public const int kana_KI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_KO")]
+		public const int kana_KO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_KU")]
+		public const int kana_KU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_MA")]
+		public const int kana_MA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_ME")]
+		public const int kana_ME;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_MI")]
+		public const int kana_MI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_MO")]
+		public const int kana_MO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_MU")]
+		public const int kana_MU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_N")]
+		public const int kana_N;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_NA")]
+		public const int kana_NA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_NE")]
+		public const int kana_NE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_NI")]
+		public const int kana_NI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_NO")]
+		public const int kana_NO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_NU")]
+		public const int kana_NU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_O")]
+		public const int kana_O;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_RA")]
+		public const int kana_RA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_RE")]
+		public const int kana_RE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_RI")]
+		public const int kana_RI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_RO")]
+		public const int kana_RO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_RU")]
+		public const int kana_RU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_SA")]
+		public const int kana_SA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_SE")]
+		public const int kana_SE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_SHI")]
+		public const int kana_SHI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_SO")]
+		public const int kana_SO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_SU")]
+		public const int kana_SU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_TA")]
+		public const int kana_TA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_TE")]
+		public const int kana_TE;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_TI")]
+		public const int kana_TI;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_TO")]
+		public const int kana_TO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_TSU")]
+		public const int kana_TSU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_TU")]
+		public const int kana_TU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_U")]
+		public const int kana_U;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_WA")]
+		public const int kana_WA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_WO")]
+		public const int kana_WO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_YA")]
+		public const int kana_YA;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_YO")]
+		public const int kana_YO;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_YU")]
+		public const int kana_YU;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_a")]
+		public const int kana_a;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_closingbracket")]
+		public const int kana_closingbracket;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_comma")]
+		public const int kana_comma;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_conjunctive")]
+		public const int kana_conjunctive;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_e")]
+		public const int kana_e;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_fullstop")]
+		public const int kana_fullstop;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_i")]
+		public const int kana_i;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_middledot")]
+		public const int kana_middledot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_o")]
+		public const int kana_o;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_openingbracket")]
+		public const int kana_openingbracket;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_switch")]
+		public const int kana_switch;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_tsu")]
+		public const int kana_tsu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_tu")]
+		public const int kana_tu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_u")]
+		public const int kana_u;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_ya")]
+		public const int kana_ya;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_yo")]
+		public const int kana_yo;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kana_yu")]
+		public const int kana_yu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kappa")]
+		public const int kappa;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kcedilla")]
+		public const int kcedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_kra")]
+		public const int kra;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_l")]
+		public const int l;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_lacute")]
+		public const int lacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_latincross")]
+		public const int latincross;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_lbelowdot")]
+		public const int lbelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_lcaron")]
+		public const int lcaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_lcedilla")]
+		public const int lcedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_leftanglebracket")]
+		public const int leftanglebracket;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_leftarrow")]
+		public const int leftarrow;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_leftcaret")]
+		public const int leftcaret;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_leftdoublequotemark")]
+		public const int leftdoublequotemark;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_leftmiddlecurlybrace")]
+		public const int leftmiddlecurlybrace;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_leftopentriangle")]
+		public const int leftopentriangle;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_leftpointer")]
+		public const int leftpointer;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_leftradical")]
+		public const int leftradical;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_leftshoe")]
+		public const int leftshoe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_leftsinglequotemark")]
+		public const int leftsinglequotemark;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_leftt")]
+		public const int leftt;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_lefttack")]
+		public const int lefttack;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_less")]
+		public const int less;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_lessthanequal")]
+		public const int lessthanequal;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_lf")]
+		public const int lf;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_logicaland")]
+		public const int logicaland;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_logicalor")]
+		public const int logicalor;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_lowleftcorner")]
+		public const int lowleftcorner;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_lowrightcorner")]
+		public const int lowrightcorner;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_lstroke")]
+		public const int lstroke;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_m")]
+		public const int m;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_mabovedot")]
+		public const int mabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_macron")]
+		public const int macron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_malesymbol")]
+		public const int malesymbol;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_maltesecross")]
+		public const int maltesecross;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_marker")]
+		public const int marker;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_masculine")]
+		public const int masculine;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_minus")]
+		public const int minus;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_minutes")]
+		public const int minutes;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_mu")]
+		public const int mu;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_multiply")]
+		public const int multiply;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_musicalflat")]
+		public const int musicalflat;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_musicalsharp")]
+		public const int musicalsharp;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_n")]
+		public const int n;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_nabla")]
+		public const int nabla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_nacute")]
+		public const int nacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ncaron")]
+		public const int ncaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ncedilla")]
+		public const int ncedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ninesubscript")]
+		public const int ninesubscript;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ninesuperior")]
+		public const int ninesuperior;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_nl")]
+		public const int nl;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_nobreakspace")]
+		public const int nobreakspace;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_notapproxeq")]
+		public const int notapproxeq;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_notelementof")]
+		public const int notelementof;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_notequal")]
+		public const int notequal;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_notidentical")]
+		public const int notidentical;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_notsign")]
+		public const int notsign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ntilde")]
+		public const int ntilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_numbersign")]
+		public const int numbersign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_numerosign")]
+		public const int numerosign;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_o")]
+		public const int o;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_oacute")]
+		public const int oacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_obarred")]
+		public const int obarred;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_obelowdot")]
+		public const int obelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ocaron")]
+		public const int ocaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ocircumflex")]
+		public const int ocircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ocircumflexacute")]
+		public const int ocircumflexacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ocircumflexbelowdot")]
+		public const int ocircumflexbelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ocircumflexgrave")]
+		public const int ocircumflexgrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ocircumflexhook")]
+		public const int ocircumflexhook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ocircumflextilde")]
+		public const int ocircumflextilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_odiaeresis")]
+		public const int odiaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_odoubleacute")]
+		public const int odoubleacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_oe")]
+		public const int oe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ogonek")]
+		public const int ogonek;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ograve")]
+		public const int ograve;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ohook")]
+		public const int ohook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ohorn")]
+		public const int ohorn;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ohornacute")]
+		public const int ohornacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ohornbelowdot")]
+		public const int ohornbelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ohorngrave")]
+		public const int ohorngrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ohornhook")]
+		public const int ohornhook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ohorntilde")]
+		public const int ohorntilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_omacron")]
+		public const int omacron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_oneeighth")]
+		public const int oneeighth;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_onefifth")]
+		public const int onefifth;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_onehalf")]
+		public const int onehalf;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_onequarter")]
+		public const int onequarter;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_onesixth")]
+		public const int onesixth;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_onesubscript")]
+		public const int onesubscript;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_onesuperior")]
+		public const int onesuperior;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_onethird")]
+		public const int onethird;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ooblique")]
+		public const int ooblique;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_openrectbullet")]
+		public const int openrectbullet;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_openstar")]
+		public const int openstar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_opentribulletdown")]
+		public const int opentribulletdown;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_opentribulletup")]
+		public const int opentribulletup;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ordfeminine")]
+		public const int ordfeminine;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_oslash")]
+		public const int oslash;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_otilde")]
+		public const int otilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_overbar")]
+		public const int overbar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_overline")]
+		public const int overline;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_p")]
+		public const int p;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_pabovedot")]
+		public const int pabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_paragraph")]
+		public const int paragraph;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_parenleft")]
+		public const int parenleft;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_parenright")]
+		public const int parenright;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_partdifferential")]
+		public const int partdifferential;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_partialderivative")]
+		public const int partialderivative;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_percent")]
+		public const int percent;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_period")]
+		public const int period;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_periodcentered")]
+		public const int periodcentered;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_phonographcopyright")]
+		public const int phonographcopyright;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_plus")]
+		public const int plus;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_plusminus")]
+		public const int plusminus;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_prescription")]
+		public const int prescription;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_prolongedsound")]
+		public const int prolongedsound;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_punctspace")]
+		public const int punctspace;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_q")]
+		public const int q;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_quad")]
+		public const int quad;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_question")]
+		public const int question;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_questiondown")]
+		public const int questiondown;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_quotedbl")]
+		public const int quotedbl;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_quoteleft")]
+		public const int quoteleft;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_quoteright")]
+		public const int quoteright;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_r")]
+		public const int r;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_racute")]
+		public const int racute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_radical")]
+		public const int radical;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_rcaron")]
+		public const int rcaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_rcedilla")]
+		public const int rcedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_registered")]
+		public const int registered;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_rightanglebracket")]
+		public const int rightanglebracket;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_rightarrow")]
+		public const int rightarrow;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_rightcaret")]
+		public const int rightcaret;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_rightdoublequotemark")]
+		public const int rightdoublequotemark;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_rightmiddlecurlybrace")]
+		public const int rightmiddlecurlybrace;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_rightmiddlesummation")]
+		public const int rightmiddlesummation;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_rightopentriangle")]
+		public const int rightopentriangle;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_rightpointer")]
+		public const int rightpointer;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_rightshoe")]
+		public const int rightshoe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_rightsinglequotemark")]
+		public const int rightsinglequotemark;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_rightt")]
+		public const int rightt;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_righttack")]
+		public const int righttack;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_s")]
+		public const int s;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_sabovedot")]
+		public const int sabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_sacute")]
+		public const int sacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_scaron")]
+		public const int scaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_scedilla")]
+		public const int scedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_schwa")]
+		public const int schwa;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_scircumflex")]
+		public const int scircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_script_switch")]
+		public const int script_switch;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_seconds")]
+		public const int seconds;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_section")]
+		public const int section;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_semicolon")]
+		public const int semicolon;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_semivoicedsound")]
+		public const int semivoicedsound;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_seveneighths")]
+		public const int seveneighths;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_sevensubscript")]
+		public const int sevensubscript;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_sevensuperior")]
+		public const int sevensuperior;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_signaturemark")]
+		public const int signaturemark;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_signifblank")]
+		public const int signifblank;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_similarequal")]
+		public const int similarequal;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_singlelowquotemark")]
+		public const int singlelowquotemark;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_sixsubscript")]
+		public const int sixsubscript;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_sixsuperior")]
+		public const int sixsuperior;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_slash")]
+		public const int slash;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_soliddiamond")]
+		public const int soliddiamond;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_space")]
+		public const int space;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_squareroot")]
+		public const int squareroot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ssharp")]
+		public const int ssharp;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_sterling")]
+		public const int sterling;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_stricteq")]
+		public const int stricteq;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_t")]
+		public const int t;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_tabovedot")]
+		public const int tabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_tcaron")]
+		public const int tcaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_tcedilla")]
+		public const int tcedilla;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_telephone")]
+		public const int telephone;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_telephonerecorder")]
+		public const int telephonerecorder;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_therefore")]
+		public const int therefore;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_thinspace")]
+		public const int thinspace;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_thorn")]
+		public const int thorn;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_threeeighths")]
+		public const int threeeighths;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_threefifths")]
+		public const int threefifths;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_threequarters")]
+		public const int threequarters;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_threesubscript")]
+		public const int threesubscript;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_threesuperior")]
+		public const int threesuperior;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_tintegral")]
+		public const int tintegral;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_topintegral")]
+		public const int topintegral;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_topleftparens")]
+		public const int topleftparens;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_topleftradical")]
+		public const int topleftradical;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_topleftsqbracket")]
+		public const int topleftsqbracket;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_topleftsummation")]
+		public const int topleftsummation;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_toprightparens")]
+		public const int toprightparens;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_toprightsqbracket")]
+		public const int toprightsqbracket;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_toprightsummation")]
+		public const int toprightsummation;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_topt")]
+		public const int topt;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_topvertsummationconnector")]
+		public const int topvertsummationconnector;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_trademark")]
+		public const int trademark;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_trademarkincircle")]
+		public const int trademarkincircle;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_tslash")]
+		public const int tslash;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_twofifths")]
+		public const int twofifths;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_twosubscript")]
+		public const int twosubscript;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_twosuperior")]
+		public const int twosuperior;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_twothirds")]
+		public const int twothirds;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_u")]
+		public const int u;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_uacute")]
+		public const int uacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ubelowdot")]
+		public const int ubelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ubreve")]
+		public const int ubreve;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ucircumflex")]
+		public const int ucircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_udiaeresis")]
+		public const int udiaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_udoubleacute")]
+		public const int udoubleacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ugrave")]
+		public const int ugrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_uhook")]
+		public const int uhook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_uhorn")]
+		public const int uhorn;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_uhornacute")]
+		public const int uhornacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_uhornbelowdot")]
+		public const int uhornbelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_uhorngrave")]
+		public const int uhorngrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_uhornhook")]
+		public const int uhornhook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_uhorntilde")]
+		public const int uhorntilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_umacron")]
+		public const int umacron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_underbar")]
+		public const int underbar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_underscore")]
+		public const int underscore;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_union")]
+		public const int union;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_uogonek")]
+		public const int uogonek;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_uparrow")]
+		public const int uparrow;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_upcaret")]
+		public const int upcaret;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_upleftcorner")]
+		public const int upleftcorner;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_uprightcorner")]
+		public const int uprightcorner;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_upshoe")]
+		public const int upshoe;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_upstile")]
+		public const int upstile;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_uptack")]
+		public const int uptack;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_uring")]
+		public const int uring;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_utilde")]
+		public const int utilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_v")]
+		public const int v;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_variation")]
+		public const int variation;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_vertbar")]
+		public const int vertbar;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_vertconnector")]
+		public const int vertconnector;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_voicedsound")]
+		public const int voicedsound;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_vt")]
+		public const int vt;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_w")]
+		public const int w;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_wacute")]
+		public const int wacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_wcircumflex")]
+		public const int wcircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_wdiaeresis")]
+		public const int wdiaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_wgrave")]
+		public const int wgrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_x")]
+		public const int x;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_xabovedot")]
+		public const int xabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_y")]
+		public const int y;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_yacute")]
+		public const int yacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ybelowdot")]
+		public const int ybelowdot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ycircumflex")]
+		public const int ycircumflex;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ydiaeresis")]
+		public const int ydiaeresis;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_yen")]
+		public const int yen;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ygrave")]
+		public const int ygrave;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_yhook")]
+		public const int yhook;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_ytilde")]
+		public const int ytilde;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_z")]
+		public const int z;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_zabovedot")]
+		public const int zabovedot;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_zacute")]
+		public const int zacute;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_zcaron")]
+		public const int zcaron;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_zerosubscript")]
+		public const int zerosubscript;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_zerosuperior")]
+		public const int zerosuperior;
+		[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_KEY_zstroke")]
+		public const int zstroke;
+	}
 	namespace Threads {
 		namespace FrameSource {
 			[CCode (cheader_filename = "clutter/clutter.h", cname = "clutter_threads_add_frame_source")]
@@ -30,8 +4562,11 @@ namespace Clutter {
 		[CCode (cheader_filename = "clutter/clutter.h")]
 		public static uint add_repaint_func (owned GLib.SourceFunc func);
 		[CCode (cheader_filename = "clutter/clutter.h")]
+		public static uint add_repaint_func_full (Clutter.RepaintFlags flags, owned GLib.SourceFunc func);
+		[CCode (cheader_filename = "clutter/clutter.h")]
 		public static void enter ();
 		[CCode (cheader_filename = "clutter/clutter.h")]
+		[Deprecated (since = "1.10")]
 		public static void init ();
 		[CCode (cheader_filename = "clutter/clutter.h")]
 		public static void leave ();
@@ -46,9 +4581,14 @@ namespace Clutter {
 	}
 	namespace Value {
 		[CCode (cheader_filename = "clutter/clutter.h")]
+		public static Clutter.PaintNode dup_paint_node (GLib.Value value);
+		[CCode (cheader_filename = "clutter/clutter.h")]
 		public static unowned Clutter.Color? get_color (GLib.Value value);
 		[CCode (cheader_filename = "clutter/clutter.h")]
+		[Deprecated (since = "1.10")]
 		public static unowned Cogl.Fixed? get_fixed (GLib.Value value);
+		[CCode (cheader_filename = "clutter/clutter.h")]
+		public static unowned Clutter.PaintNode get_paint_node (GLib.Value value);
 		[CCode (array_length_pos = 1.1, array_length_type = "gsize", cheader_filename = "clutter/clutter.h")]
 		public static unowned float[] get_shader_float (GLib.Value value);
 		[CCode (array_length_pos = 1.1, array_length_type = "gsize", cheader_filename = "clutter/clutter.h")]
@@ -60,8 +4600,11 @@ namespace Clutter {
 		[CCode (cheader_filename = "clutter/clutter.h")]
 		public static void set_color (GLib.Value value, Clutter.Color color);
 		[CCode (cheader_filename = "clutter/clutter.h")]
+		[Deprecated (since = "1.10")]
 		public static void set_fixed (GLib.Value value, Cogl.Fixed fixed_);
 		[CCode (cheader_filename = "clutter/clutter.h")]
+		public static void set_paint_node (GLib.Value value, Clutter.PaintNode? node);
+		[CCode (cheader_filename = "clutter/clutter.h")]
 		public static void set_shader_float (GLib.Value value, [CCode (array_length_cname = "size", array_length_pos = 1.5, type = "gfloat*")] float[] floats);
 		[CCode (cheader_filename = "clutter/clutter.h")]
 		public static void set_shader_int (GLib.Value value, [CCode (array_length_cname = "size", array_length_pos = 1.5, type = "gint*")] int[] ints);
@@ -69,6 +4612,8 @@ namespace Clutter {
 		public static void set_shader_matrix (GLib.Value value, [CCode (array_length_cname = "size", array_length_pos = 1.5, type = "gfloat*")] float[] matrix);
 		[CCode (cheader_filename = "clutter/clutter.h")]
 		public static void set_units (GLib.Value value, Clutter.Units units);
+		[CCode (cheader_filename = "clutter/clutter.h")]
+		public static void take_paint_node (GLib.Value value, Clutter.PaintNode? node);
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_action_get_type ()")]
 	public abstract class Action : Clutter.ActorMeta {
@@ -76,22 +4621,26 @@ namespace Clutter {
 		protected Action ();
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_actor_get_type ()")]
-	public abstract class Actor : GLib.InitiallyUnowned, Atk.Implementor, Clutter.Animatable, Clutter.Scriptable {
+	public class Actor : GLib.InitiallyUnowned, Atk.Implementor, Clutter.Animatable, Clutter.Container, Clutter.Scriptable {
 		public uint32 flags;
 		[CCode (has_construct_function = false)]
-		protected Actor ();
+		public Actor ();
 		public void add_action (Clutter.Action action);
 		public void add_action_with_name (string name, Clutter.Action action);
+		public void add_child (Clutter.Actor child);
 		public void add_constraint (Clutter.Constraint constraint);
 		public void add_constraint_with_name (string name, Clutter.Constraint constraint);
 		public void add_effect (Clutter.Effect effect);
 		public void add_effect_with_name (string name, Clutter.Effect effect);
+		public void add_transition (string name, Clutter.Transition transition);
 		public virtual void allocate (Clutter.ActorBox box, Clutter.AllocationFlags flags);
 		public void allocate_align_fill (Clutter.ActorBox box, double x_align, double y_align, bool x_fill, bool y_fill, Clutter.AllocationFlags flags);
 		public void allocate_available_size (float x, float y, float available_width, float available_height, Clutter.AllocationFlags flags);
 		public void allocate_preferred_size (Clutter.AllocationFlags flags);
 		public unowned Clutter.Animation animate (ulong mode, uint duration, ...);
+		[Deprecated (since = "1.10")]
 		public unowned Clutter.Animation animate_with_alpha (Clutter.Alpha alpha, ...);
+		[Deprecated (since = "1.10")]
 		public unowned Clutter.Animation animate_with_alphav (Clutter.Alpha alpha, [CCode (array_length_cname = "n_properties", array_length_pos = 1.5)] string[] properties, [CCode (array_length_cname = "n_properties", array_length_pos = 1.5)] GLib.Value[] values);
 		public unowned Clutter.Animation animate_with_timeline (ulong mode, Clutter.Timeline timeline, ...);
 		public unowned Clutter.Animation animate_with_timelinev (ulong mode, Clutter.Timeline timeline, [CCode (array_length_cname = "n_properties", array_length_pos = 2.5)] string[] properties, [CCode (array_length_cname = "n_properties", array_length_pos = 2.5)] GLib.Value[] values);
@@ -106,8 +4655,11 @@ namespace Clutter {
 		public bool contains (Clutter.Actor descendant);
 		public void continue_paint ();
 		public Pango.Context create_pango_context ();
-		public Pango.Layout create_pango_layout (string text);
+		public Pango.Layout create_pango_layout (string? text);
+		public void destroy_all_children ();
 		public void detach_animation ();
+		[CCode (cname = "clutter_actor_event")]
+		public bool emit_event (Clutter.Event event, bool capture);
 		public void get_abs_allocation_vertices ([CCode (array_length = false)] out Clutter.Vertex[] verts);
 		public virtual unowned Atk.Object get_accessible ();
 		public unowned Clutter.Action get_action (string name);
@@ -118,25 +4670,47 @@ namespace Clutter {
 		public void get_anchor_point (out float anchor_x, out float anchor_y);
 		public Clutter.Gravity get_anchor_point_gravity ();
 		public unowned Clutter.Animation get_animation ();
+		public Clutter.Color get_background_color ();
 		[CCode (cname = "clutter_get_actor_by_gid")]
 		[Deprecated (since = "1.8")]
 		public static unowned Clutter.Actor get_by_gid (uint32 id_);
+		public unowned Clutter.Actor get_child_at_index (int index_);
+		public GLib.List<weak Clutter.Actor> get_children ();
 		public void get_clip (out float xoff, out float yoff, out float width, out float height);
 		public bool get_clip_to_allocation ();
 		public unowned Clutter.Constraint get_constraint (string name);
 		public GLib.List<weak Clutter.Constraint> get_constraints ();
+		public unowned Clutter.Content get_content ();
+		public Clutter.ActorBox get_content_box ();
+		public Clutter.ContentGravity get_content_gravity ();
+		public void get_content_scaling_filters (out Clutter.ScalingFilter min_filter, out Clutter.ScalingFilter mag_filter);
+		public unowned Clutter.PaintVolume get_default_paint_volume ();
 		public float get_depth ();
+		public uint get_easing_delay ();
+		public uint get_easing_duration ();
+		public Clutter.AnimationMode get_easing_mode ();
 		public unowned Clutter.Effect get_effect (string name);
 		public GLib.List<weak Clutter.Effect> get_effects ();
+		public unowned Clutter.Actor get_first_child ();
 		public bool get_fixed_position_set ();
 		public Clutter.ActorFlags get_flags ();
+		[Deprecated (since = "1.10")]
 		public Clutter.Geometry get_geometry ();
 		[Deprecated (since = "1.8")]
 		public uint32 get_gid ();
 		[CCode (cname = "clutter_actor_has_pointer")]
 		public bool get_has_pointer ();
 		public float get_height ();
+		public unowned Clutter.Actor get_last_child ();
+		public unowned Clutter.LayoutManager get_layout_manager ();
+		public void get_margin (out unowned Clutter.Margin margin);
+		public float get_margin_bottom ();
+		public float get_margin_left ();
+		public float get_margin_right ();
+		public float get_margin_top ();
+		public int get_n_children ();
 		public unowned string get_name ();
+		public unowned Clutter.Actor get_next_sibling ();
 		public Clutter.OffscreenRedirect get_offscreen_redirect ();
 		public uint8 get_opacity ();
 		public bool get_paint_box (out Clutter.ActorBox box);
@@ -150,6 +4724,7 @@ namespace Clutter {
 		public virtual void get_preferred_height (float for_width, out float min_height_p, out float natural_height_p);
 		public void get_preferred_size (out float min_width_p, out float min_height_p, out float natural_width_p, out float natural_height_p);
 		public virtual void get_preferred_width (float for_height, out float min_width_p, out float natural_width_p);
+		public unowned Clutter.Actor get_previous_sibling ();
 		public bool get_reactive ();
 		public Clutter.RequestMode get_request_mode ();
 		public double get_rotation (Clutter.RotateAxis axis, out float x, out float y, out float z);
@@ -165,49 +4740,95 @@ namespace Clutter {
 		public unowned Clutter.PaintVolume get_transformed_paint_volume (Clutter.Actor relative_to_ancestor);
 		public void get_transformed_position (out float x, out float y);
 		public void get_transformed_size (out float width, out float height);
+		public unowned Clutter.Transition get_transition (string name);
 		public float get_width ();
 		public float get_x ();
+		public Clutter.ActorAlign get_x_align ();
 		public float get_y ();
+		public Clutter.ActorAlign get_y_align ();
 		public Clutter.Gravity get_z_rotation_gravity ();
 		public void grab_key_focus ();
+		public bool has_actions ();
 		public bool has_allocation ();
+		public bool has_constraints ();
+		public bool has_effects ();
 		public bool has_key_focus ();
 		public virtual bool has_overlaps ();
+		[Deprecated (since = "1.10")]
 		public virtual void hide_all ();
+		public void insert_child_above (Clutter.Actor child, Clutter.Actor? sibling);
+		public void insert_child_at_index (Clutter.Actor child, int index_);
+		public void insert_child_below (Clutter.Actor child, Clutter.Actor? sibling);
 		public bool is_in_clone_paint ();
 		public bool is_rotated ();
 		public bool is_scaled ();
+		[Deprecated (since = "1.10")]
 		public void lower (Clutter.Actor? above);
+		[Deprecated (since = "1.10")]
 		public void lower_bottom ();
 		public virtual void map ();
 		public void move_anchor_point (float anchor_x, float anchor_y);
 		public void move_anchor_point_from_gravity (Clutter.Gravity gravity);
 		public void move_by (float dx, float dy);
+		[NoWrapper]
+		public virtual void paint_node (Clutter.PaintNode root);
+		[Deprecated (since = "1.10")]
 		public void pop_internal ();
+		[Deprecated (since = "1.10")]
 		public void push_internal ();
 		public void queue_redraw ();
+		public void queue_redraw_with_clip (Cairo.RectangleInt? clip);
+		[Deprecated (since = "1.10")]
 		public void raise (Clutter.Actor? below);
+		[Deprecated (since = "1.10")]
 		public void raise_top ();
 		public void remove_action (Clutter.Action action);
 		public void remove_action_by_name (string name);
+		public void remove_all_children ();
+		public void remove_all_transitions ();
+		public void remove_child (Clutter.Actor child);
 		public void remove_clip ();
 		public void remove_constraint (Clutter.Constraint constraint);
 		public void remove_constraint_by_name (string name);
 		public void remove_effect (Clutter.Effect effect);
 		public void remove_effect_by_name (string name);
+		public void remove_transition (string name);
+		[Deprecated (since = "1.10")]
 		public void reparent (Clutter.Actor new_parent);
+		public void replace_child (Clutter.Actor old_child, Clutter.Actor new_child);
+		public void restore_easing_state ();
+		public void save_easing_state ();
+		public void set_allocation (Clutter.ActorBox box, Clutter.AllocationFlags flags);
 		public void set_anchor_point (float anchor_x, float anchor_y);
 		public void set_anchor_point_from_gravity (Clutter.Gravity gravity);
+		public void set_background_color (Clutter.Color? color);
+		public void set_child_above_sibling (Clutter.Actor child, Clutter.Actor? sibling);
+		public void set_child_at_index (Clutter.Actor child, int index_);
+		public void set_child_below_sibling (Clutter.Actor child, Clutter.Actor? sibling);
 		public void set_clip (float xoff, float yoff, float width, float height);
 		public void set_clip_to_allocation (bool clip_set);
+		public void set_content (Clutter.Content? content);
+		public void set_content_gravity (Clutter.ContentGravity gravity);
+		public void set_content_scaling_filters (Clutter.ScalingFilter min_filter, Clutter.ScalingFilter mag_filter);
 		public void set_depth (float depth);
+		public void set_easing_delay (uint msecs);
+		public void set_easing_duration (uint msecs);
+		public void set_easing_mode (Clutter.AnimationMode mode);
 		public void set_fixed_position_set (bool is_set);
 		public void set_flags (Clutter.ActorFlags flags);
+		[Deprecated (since = "1.10")]
 		public void set_geometry (Clutter.Geometry geometry);
 		public void set_height (float height);
+		public void set_layout_manager (Clutter.LayoutManager? manager);
+		public void set_margin (Clutter.Margin margin);
+		public void set_margin_bottom (float margin);
+		public void set_margin_left (float margin);
+		public void set_margin_right (float margin);
+		public void set_margin_top (float margin);
 		public void set_name (string name);
 		public void set_offscreen_redirect (Clutter.OffscreenRedirect redirect);
 		public void set_opacity (uint8 opacity);
+		[Deprecated (since = "1.10")]
 		public void set_parent (Clutter.Actor parent);
 		public void set_position (float x, float y);
 		public void set_reactive (bool reactive);
@@ -228,12 +4849,16 @@ namespace Clutter {
 		public void set_text_direction (Clutter.TextDirection text_dir);
 		public void set_width (float width);
 		public void set_x (float x);
+		public void set_x_align (Clutter.ActorAlign x_align);
 		public void set_y (float y);
+		public void set_y_align (Clutter.ActorAlign y_align);
 		public void set_z_rotation_from_gravity (double angle, Clutter.Gravity gravity);
 		public bool should_pick_paint ();
+		[Deprecated (since = "1.10")]
 		public virtual void show_all ();
 		public bool transform_stage_point (float x, float y, out float x_out, out float y_out);
 		public virtual void unmap ();
+		[Deprecated (since = "1.10")]
 		public void unparent ();
 		public void unset_flags (Clutter.ActorFlags flags);
 		[NoAccessorMethod]
@@ -246,14 +4871,21 @@ namespace Clutter {
 		public float anchor_x { get; set; }
 		[NoAccessorMethod]
 		public float anchor_y { get; set; }
+		public Clutter.Color background_color { get; set; }
+		[NoAccessorMethod]
+		public bool background_color_set { get; }
 		[NoAccessorMethod]
 		public Clutter.Geometry clip { get; set; }
 		public bool clip_to_allocation { get; set; }
 		[NoAccessorMethod]
 		public Clutter.Constraint constraints { set; }
+		public Clutter.Content content { get; set; }
+		public Clutter.ActorBox content_box { get; }
+		public Clutter.ContentGravity content_gravity { get; set; }
 		public float depth { get; set; }
 		[NoAccessorMethod]
 		public Clutter.Effect effect { set; }
+		public Clutter.Actor first_child { get; }
 		public bool fixed_position_set { get; set; }
 		[NoAccessorMethod]
 		public float fixed_x { get; set; }
@@ -264,8 +4896,16 @@ namespace Clutter {
 		[NoAccessorMethod]
 		public bool has_pointer { get; }
 		public float height { get; set; }
+		public Clutter.Actor last_child { get; }
+		public Clutter.LayoutManager layout_manager { get; set; }
+		[NoAccessorMethod]
+		public Clutter.ScalingFilter magnification_filter { get; set; }
 		[NoAccessorMethod]
 		public bool mapped { get; }
+		public float margin_bottom { get; set; }
+		public float margin_left { get; set; }
+		public float margin_right { get; set; }
+		public float margin_top { get; set; }
 		[NoAccessorMethod]
 		public float min_height { get; set; }
 		[NoAccessorMethod]
@@ -274,6 +4914,8 @@ namespace Clutter {
 		public float min_width { get; set; }
 		[NoAccessorMethod]
 		public bool min_width_set { get; set; }
+		[NoAccessorMethod]
+		public Clutter.ScalingFilter minification_filter { get; set; }
 		public string name { get; set; }
 		[NoAccessorMethod]
 		public float natural_height { get; set; }
@@ -320,7 +4962,9 @@ namespace Clutter {
 		public bool visible { get; set; }
 		public float width { get; set; }
 		public float x { get; set; }
+		public Clutter.ActorAlign x_align { get; set; }
 		public float y { get; set; }
+		public Clutter.ActorAlign y_align { get; set; }
 		public signal void allocation_changed (Clutter.ActorBox box, Clutter.AllocationFlags flags);
 		public virtual signal bool button_press_event (Clutter.ButtonEvent event);
 		public virtual signal bool button_release_event (Clutter.ButtonEvent event);
@@ -328,7 +4972,6 @@ namespace Clutter {
 		[HasEmitter]
 		public virtual signal void destroy ();
 		public virtual signal bool enter_event (Clutter.CrossingEvent event);
-		[HasEmitter]
 		public virtual signal bool event (Clutter.Event event);
 		[HasEmitter]
 		public virtual signal void hide ();
@@ -349,6 +4992,7 @@ namespace Clutter {
 		public virtual signal bool scroll_event (Clutter.ScrollEvent event);
 		[HasEmitter]
 		public virtual signal void show ();
+		public signal void transitions_completed ();
 		[HasEmitter]
 		public virtual signal void unrealize ();
 	}
@@ -360,7 +5004,7 @@ namespace Clutter {
 		public bool get_enabled ();
 		public unowned string get_name ();
 		[NoWrapper]
-		public virtual void set_actor (Clutter.Actor actor);
+		public virtual void set_actor (Clutter.Actor? actor);
 		public void set_enabled (bool is_enabled);
 		public void set_name (string name);
 		public Clutter.Actor actor { get; }
@@ -408,6 +5052,7 @@ namespace Clutter {
 		public Animation ();
 		public unowned Clutter.Animation bind (string property_name, GLib.Value final);
 		public unowned Clutter.Animation bind_interval (string property_name, owned Clutter.Interval interval);
+		[Deprecated (since = "1.10")]
 		public unowned Clutter.Alpha get_alpha ();
 		public uint get_duration ();
 		public unowned Clutter.Interval get_interval (string property_name);
@@ -416,15 +5061,17 @@ namespace Clutter {
 		public unowned GLib.Object get_object ();
 		public unowned Clutter.Timeline get_timeline ();
 		public bool has_property (string property_name);
+		[Deprecated (since = "1.10")]
 		public void set_alpha (Clutter.Alpha alpha);
 		public void set_duration (uint msecs);
 		public void set_loop (bool loop);
 		public void set_mode (ulong mode);
 		public void set_object (GLib.Object object);
-		public void set_timeline (Clutter.Timeline timeline);
+		public void set_timeline (Clutter.Timeline? timeline);
 		public void unbind_property (string property_name);
 		public unowned Clutter.Animation update (string property_name, GLib.Value final);
 		public void update_interval (string property_name, Clutter.Interval interval);
+		[Deprecated (since = "1.10")]
 		public Clutter.Alpha alpha { get; set; }
 		public uint duration { get; set; }
 		public bool loop { get; set; }
@@ -507,6 +5154,7 @@ namespace Clutter {
 		[Deprecated (since = "1.4")]
 		public void set_font_name (string font_name);
 		public void set_font_options (Cairo.FontOptions options);
+		[Deprecated (since = "1.4")]
 		public void set_resolution (double dpi);
 		public signal void font_changed ();
 		public signal void resolution_changed ();
@@ -698,20 +5346,30 @@ namespace Clutter {
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_box_get_type ()")]
 	public class Box : Clutter.Actor, Atk.Implementor, Clutter.Animatable, Clutter.Container, Clutter.Scriptable {
 		[CCode (has_construct_function = false, type = "ClutterActor*")]
+		[Deprecated (since = "1.10")]
 		public Box (Clutter.LayoutManager manager);
+		[Deprecated (since = "1.10")]
 		public Clutter.Color get_color ();
+		[Deprecated (since = "1.10")]
 		public unowned Clutter.LayoutManager get_layout_manager ();
+		[Deprecated (since = "1.10")]
 		public void pack (Clutter.Actor actor, ...);
+		[Deprecated (since = "1.10")]
 		public void pack_after (Clutter.Actor actor, Clutter.Actor? sibling, ...);
+		[Deprecated (since = "1.10")]
 		public void pack_at (Clutter.Actor actor, int position, ...);
+		[Deprecated (since = "1.10")]
 		public void pack_before (Clutter.Actor actor, Clutter.Actor? sibling, ...);
+		[Deprecated (since = "1.10")]
 		public void packv (Clutter.Actor actor, [CCode (array_length_cname = "n_properties", array_length_pos = 1.5, array_length_type = "guint")] string[] properties, [CCode (array_length_cname = "n_properties", array_length_pos = 1.5, array_length_type = "guint")] GLib.Value[] values);
+		[Deprecated (since = "1.10")]
 		public void set_color (Clutter.Color? color);
+		[Deprecated (since = "1.10")]
 		public void set_layout_manager (Clutter.LayoutManager manager);
 		public Clutter.Color color { get; set; }
 		[NoAccessorMethod]
 		public bool color_set { get; set; }
-		public Clutter.LayoutManager layout_manager { get; set construct; }
+		public Clutter.LayoutManager layout_manager { get; set; }
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_box_layout_get_type ()")]
 	public class BoxLayout : Clutter.LayoutManager {
@@ -746,8 +5404,23 @@ namespace Clutter {
 		public bool use_animations { get; set; }
 		public bool vertical { get; set; }
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_brightness_contrast_effect_get_type ()")]
+	public class BrightnessContrastEffect : Clutter.OffscreenEffect {
+		[CCode (has_construct_function = false, type = "ClutterEffect*")]
+		public BrightnessContrastEffect ();
+		public void get_brightness (out float red, out float green, out float blue);
+		public void get_contrast (out float red, out float green, out float blue);
+		public void set_brightness (float brightness);
+		public void set_brightness_full (float red, float green, float blue);
+		public void set_contrast (float contrast);
+		public void set_contrast_full (float red, float green, float blue);
+		[NoAccessorMethod]
+		public Clutter.Color brightness { get; set; }
+		[NoAccessorMethod]
+		public Clutter.Color contrast { get; set; }
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_cairo_texture_get_type ()")]
-	public class CairoTexture : Clutter.Texture, Atk.Implementor, Clutter.Animatable, Clutter.Scriptable {
+	public class CairoTexture : Clutter.Texture, Atk.Implementor, Clutter.Animatable, Clutter.Container, Clutter.Scriptable {
 		[CCode (has_construct_function = false, type = "ClutterActor*")]
 		public CairoTexture (uint width, uint height);
 		public void clear ();
@@ -769,6 +5442,18 @@ namespace Clutter {
 		public virtual signal Cairo.Surface create_surface (uint width, uint height);
 		public virtual signal bool draw (Cairo.Context cr);
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_canvas_get_type ()")]
+	public class Canvas : GLib.Object, Clutter.Content {
+		[CCode (has_construct_function = false)]
+		protected Canvas ();
+		public static Clutter.Content @new ();
+		public void set_size (int width, int height);
+		[NoAccessorMethod]
+		public int height { get; set; }
+		[NoAccessorMethod]
+		public int width { get; set; }
+		public virtual signal bool draw (Cairo.Context cr, int width, int height);
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_child_meta_get_type ()")]
 	public abstract class ChildMeta : GLib.Object {
 		[CCode (has_construct_function = false)]
@@ -797,14 +5482,24 @@ namespace Clutter {
 		public virtual signal void clicked (Clutter.Actor actor);
 		public virtual signal bool long_press (Clutter.Actor actor, Clutter.LongPressState state);
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_clip_node_get_type ()")]
+	public class ClipNode : Clutter.PaintNode {
+		[CCode (has_construct_function = false, type = "ClutterPaintNode*")]
+		public ClipNode ();
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_clone_get_type ()")]
-	public class Clone : Clutter.Actor, Atk.Implementor, Clutter.Animatable, Clutter.Scriptable {
+	public class Clone : Clutter.Actor, Atk.Implementor, Clutter.Animatable, Clutter.Container, Clutter.Scriptable {
 		[CCode (has_construct_function = false, type = "ClutterActor*")]
 		public Clone (Clutter.Actor source);
 		public unowned Clutter.Actor get_source ();
-		public void set_source (Clutter.Actor source);
+		public void set_source (Clutter.Actor? source);
 		public Clutter.Actor source { get; set construct; }
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_color_node_get_type ()")]
+	public class ColorNode : Clutter.PipelineNode {
+		[CCode (has_construct_function = false, type = "ClutterPaintNode*")]
+		public ColorNode (Clutter.Color? color);
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_colorize_effect_get_type ()")]
 	public class ColorizeEffect : Clutter.OffscreenEffect {
 		[CCode (has_construct_function = false, type = "ClutterEffect*")]
@@ -853,8 +5548,6 @@ namespace Clutter {
 		public virtual unowned Clutter.InputDevice get_core_device (Clutter.InputDeviceType device_type);
 		public static unowned Clutter.DeviceManager get_default ();
 		public virtual unowned Clutter.InputDevice get_device (int device_id);
-		[NoWrapper]
-		public virtual unowned GLib.SList<Clutter.InputDevice> get_devices ();
 		public GLib.SList<weak Clutter.InputDevice> list_devices ();
 		public unowned GLib.SList<Clutter.InputDevice> peek_devices ();
 		[NoWrapper]
@@ -921,6 +5614,7 @@ namespace Clutter {
 		public Clutter.MotionEvent motion;
 		public Clutter.ScrollEvent scroll;
 		public Clutter.StageStateEvent stage_state;
+		public Clutter.TouchEvent touch;
 		public Clutter.EventType type;
 		[CCode (has_construct_function = false)]
 		public Event (Clutter.EventType type);
@@ -934,11 +5628,13 @@ namespace Clutter {
 		public unowned Clutter.InputDevice get_device ();
 		public int get_device_id ();
 		public Clutter.InputDeviceType get_device_type ();
+		public unowned Clutter.EventSequence get_event_sequence ();
 		public Clutter.EventFlags get_flags ();
 		public uint16 get_key_code ();
 		public uint get_key_symbol ();
 		public uint32 get_key_unicode ();
 		public unowned Clutter.Actor get_related ();
+		public void get_scroll_delta (out double dx, out double dy);
 		public Clutter.ScrollDirection get_scroll_direction ();
 		public unowned Clutter.Actor get_source ();
 		public unowned Clutter.InputDevice get_source_device ();
@@ -957,6 +5653,7 @@ namespace Clutter {
 		public void set_key_symbol (uint key_sym);
 		public void set_key_unicode (uint32 key_unicode);
 		public void set_related (Clutter.Actor? actor);
+		public void set_scroll_delta (double dx, double dy);
 		public void set_scroll_direction (Clutter.ScrollDirection direction);
 		public void set_source (Clutter.Actor? actor);
 		public void set_source_device (Clutter.InputDevice? device);
@@ -964,6 +5661,10 @@ namespace Clutter {
 		public void set_state (Clutter.ModifierType state);
 		public void set_time (uint32 time_);
 	}
+	[CCode (cheader_filename = "clutter/clutter.h")]
+	[Compact]
+	public class EventSequence {
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_fixed_layout_get_type ()")]
 	public class FixedLayout : Clutter.LayoutManager {
 		[CCode (has_construct_function = false, type = "ClutterLayoutManager*")]
@@ -1013,18 +5714,30 @@ namespace Clutter {
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_group_get_type ()")]
 	public class Group : Clutter.Actor, Atk.Implementor, Clutter.Animatable, Clutter.Container, Clutter.Scriptable {
 		[CCode (has_construct_function = false, type = "ClutterActor*")]
+		[Deprecated (since = "1.10")]
 		public Group ();
+		[Deprecated (since = "1.10")]
 		public int get_n_children ();
+		[Deprecated (since = "1.10")]
 		public unowned Clutter.Actor get_nth_child (int index_);
+		[Deprecated (since = "1.10")]
 		public void remove_all ();
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_image_get_type ()")]
+	public class Image : GLib.Object, Clutter.Content {
+		[CCode (has_construct_function = false)]
+		protected Image ();
+		public static Clutter.Content @new ();
+		public bool set_area ([CCode (array_length = false)] uint8[] data, Cogl.PixelFormat pixel_format, Cairo.RectangleInt rect, uint row_stride) throws GLib.Error;
+		public bool set_data ([CCode (array_length = false)] uint8[] data, Cogl.PixelFormat pixel_format, uint width, uint height, uint row_stride) throws GLib.Error;
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_input_device_get_type ()")]
 	public class InputDevice : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected InputDevice ();
 		public unowned Clutter.InputDevice get_associated_device ();
 		public Clutter.InputAxis get_axis (uint index_);
-		public bool get_axis_value ([CCode (array_length = false, array_null_terminated = true)] double[] axes, Clutter.InputAxis axis, out double value);
+		public bool get_axis_value ([CCode (array_length = false)] double[] axes, Clutter.InputAxis axis, out double value);
 		public void get_device_coords (out int x, out int y);
 		public int get_device_id ();
 		public Clutter.InputMode get_device_mode ();
@@ -1032,7 +5745,9 @@ namespace Clutter {
 		public Clutter.InputDeviceType get_device_type ();
 		public bool get_enabled ();
 		[CCode (cname = "clutter_get_input_device_for_id")]
+		[Deprecated (since = "1.10")]
 		public static unowned Clutter.InputDevice get_for_id (int id_);
+		public unowned Clutter.Actor get_grabbed_actor ();
 		public bool get_has_cursor ();
 		public bool get_key (uint index_, out uint keyval, out Clutter.ModifierType modifiers);
 		public uint get_n_axes ();
@@ -1040,8 +5755,11 @@ namespace Clutter {
 		public unowned Clutter.Actor get_pointer_actor ();
 		public unowned Clutter.Stage get_pointer_stage ();
 		public GLib.List<weak Clutter.InputDevice> get_slave_devices ();
+		public void grab (Clutter.Actor actor);
+		public bool keycode_to_evdev (uint hardware_keycode, uint evdev_keycode);
 		public void set_enabled (bool enabled);
 		public void set_key (uint index_, uint keyval, Clutter.ModifierType modifiers);
+		public void ungrab ();
 		public void update_from_event (Clutter.Event event, bool update_stage);
 		[NoAccessorMethod]
 		public Clutter.Backend backend { owned get; construct; }
@@ -1071,7 +5789,9 @@ namespace Clutter {
 		public GLib.Value peek_final_value ();
 		public GLib.Value peek_initial_value ();
 		public static void register_progress_func (GLib.Type value_type, Clutter.ProgressFunc func);
+		public void set_final (...);
 		public void set_final_value (GLib.Value value);
+		public void set_initial (...);
 		public void set_initial_value (GLib.Value value);
 		public void set_interval (...);
 		public virtual bool validate (GLib.ParamSpec pspec);
@@ -1113,11 +5833,23 @@ namespace Clutter {
 		public Clutter.LayoutManager manager { get; construct; }
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_list_model_get_type ()")]
-	public class ListModel : Clutter.Model, Clutter.Scriptable, Clutter.Scriptable {
+	public class ListModel : Clutter.Model, Clutter.Scriptable {
 		[CCode (has_construct_function = false, type = "ClutterModel*")]
 		public ListModel (uint n_columns, ...);
-		[CCode (cname = "clutter_list_model_newv", has_construct_function = false, type = "ClutterModel*")]
-		public ListModel.newv ([CCode (array_length_pos = 0.9)] GLib.Type[] types, [CCode (array_length_pos = 0.9)] string[] names);
+		[CCode (has_construct_function = false, type = "ClutterModel*")]
+		public ListModel.newv ([CCode (array_length_cname = "n_columns", array_length_pos = 0.5, array_length_type = "guint")] GLib.Type[] types, [CCode (array_length_cname = "n_columns", array_length_pos = 0.5, array_length_type = "guint")] string[] names);
+	}
+	[CCode (cheader_filename = "clutter/clutter.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "clutter_margin_get_type ()")]
+	[Compact]
+	public class Margin {
+		public float bottom;
+		public float left;
+		public float right;
+		public float top;
+		[CCode (has_construct_function = false)]
+		public Margin ();
+		public Clutter.Margin copy ();
+		public void free ();
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_model_get_type ()")]
 	public abstract class Model : GLib.Object, Clutter.Scriptable {
@@ -1187,6 +5919,7 @@ namespace Clutter {
 		public virtual Cogl.Handle create_texture (float width, float height);
 		public unowned Cogl.Material get_target ();
 		public bool get_target_size (out float width, out float height);
+		public unowned Cogl.Handle get_texture ();
 		public virtual void paint_target ();
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_page_turn_effect_get_type ()")]
@@ -1203,6 +5936,17 @@ namespace Clutter {
 		public double period { get; set; }
 		public float radius { get; set; }
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_paint_node_get_type ()")]
+	public abstract class PaintNode {
+		[CCode (has_construct_function = false)]
+		protected PaintNode ();
+		public void add_child (Clutter.PaintNode child);
+		public void add_rectangle (Clutter.ActorBox rect);
+		public void add_texture_rectangle (Clutter.ActorBox rect, float x_1, float y_1, float x_2, float y_2);
+		public Clutter.PaintNode @ref ();
+		public void set_name (string name);
+		public void unref ();
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "clutter_paint_volume_get_type ()")]
 	[Compact]
 	public class PaintVolume {
@@ -1218,9 +5962,10 @@ namespace Clutter {
 		public void set_origin (Clutter.Vertex origin);
 		public void set_width (float width);
 		public void union (Clutter.PaintVolume another_pv);
+		public void union_box (Clutter.ActorBox box);
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", lower_case_csuffix = "param_units", type_id = "clutter_param_units_get_type ()")]
-	public class ParamSpecUnit {
+	public class ParamSpecUnit : GLib.ParamSpec {
 		[CCode (has_construct_function = false)]
 		protected ParamSpecUnit ();
 	}
@@ -1243,9 +5988,9 @@ namespace Clutter {
 		public string get_description ();
 		public uint get_length ();
 		public uint get_n_nodes ();
-		public void get_node (uint index_, Clutter.PathNode node);
+		public Clutter.PathNode get_node (uint index_);
 		public GLib.SList<weak Clutter.PathNode> get_nodes ();
-		public uint get_position (double progress, Clutter.Knot position);
+		public uint get_position (double progress, out Clutter.Knot position);
 		public void insert_node (int index_, Clutter.PathNode node);
 		public void remove_node (uint index_);
 		public void replace_node (uint index_, Clutter.PathNode node);
@@ -1269,8 +6014,21 @@ namespace Clutter {
 		public Clutter.Path path { get; set; }
 		public signal void node_reached (Clutter.Actor actor, uint index);
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_pipeline_node_get_type ()")]
+	public class PipelineNode : Clutter.PaintNode {
+		[CCode (has_construct_function = false)]
+		protected PipelineNode ();
+	}
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_property_transition_get_type ()")]
+	public class PropertyTransition : Clutter.Transition, Clutter.Scriptable {
+		[CCode (has_construct_function = false, type = "ClutterTransition*")]
+		public PropertyTransition (string? property_name);
+		public unowned string get_property_name ();
+		public void set_property_name (string? property_name);
+		public string property_name { get; set; }
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_rectangle_get_type ()")]
-	public class Rectangle : Clutter.Actor, Atk.Implementor, Clutter.Animatable, Clutter.Scriptable {
+	public class Rectangle : Clutter.Actor, Atk.Implementor, Clutter.Animatable, Clutter.Container, Clutter.Scriptable {
 		[CCode (has_construct_function = false, type = "ClutterActor*")]
 		public Rectangle ();
 		public Clutter.Color get_border_color ();
@@ -1323,16 +6081,20 @@ namespace Clutter {
 		public unowned GLib.Object get_object (string name);
 		public int get_objects (...);
 		public unowned Clutter.State get_states (string? name);
+		public unowned string get_translation_domain ();
 		public virtual GLib.Type get_type_from_name (string type_name);
 		public GLib.List<weak GLib.Object> list_objects ();
 		public uint load_from_data (string data, ssize_t length) throws GLib.Error;
 		public uint load_from_file (string filename) throws GLib.Error;
+		public uint load_from_resource (string resource_path) throws GLib.Error;
 		public string lookup_filename (string filename);
+		public void set_translation_domain (string? domain);
 		public void unmerge_objects (uint merge_id);
 		[NoAccessorMethod]
 		public string filename { owned get; }
 		[NoAccessorMethod]
 		public bool filename_set { get; }
+		public string translation_domain { get; set; }
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_settings_get_type ()")]
 	public class Settings : GLib.Object {
@@ -1359,7 +6121,11 @@ namespace Clutter {
 		[NoAccessorMethod]
 		public string font_subpixel_order { owned get; set; }
 		[NoAccessorMethod]
+		public uint fontconfig_timestamp { set; }
+		[NoAccessorMethod]
 		public int long_press_duration { get; set; }
+		[NoAccessorMethod]
+		public uint password_hint_time { get; set; }
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_shader_get_type ()")]
 	[Deprecated (since = "1.8")]
@@ -1369,6 +6135,7 @@ namespace Clutter {
 		public Shader ();
 		[Deprecated (since = "1.8")]
 		public bool compile () throws GLib.Error;
+		public static GLib.Quark error_quark ();
 		[Deprecated (since = "1.8")]
 		public unowned Cogl.Handle get_cogl_fragment_shader ();
 		[Deprecated (since = "1.8")]
@@ -1412,24 +6179,26 @@ namespace Clutter {
 		public ShaderEffect (Clutter.ShaderType shader_type);
 		public unowned Cogl.Handle get_program ();
 		public unowned Cogl.Handle get_shader ();
+		[NoWrapper]
+		public virtual string get_static_shader_source ();
 		public bool set_shader_source (string source);
 		public void set_uniform_value (string name, GLib.Value value);
 		public Clutter.ShaderType shader_type { construct; }
 	}
-	[CCode (cheader_filename = "clutter/clutter.h")]
-	[Compact]
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_shader_float_get_type ()")]
 	public class ShaderFloat {
-		public static GLib.Type get_type ();
+		[CCode (has_construct_function = false)]
+		protected ShaderFloat ();
 	}
-	[CCode (cheader_filename = "clutter/clutter.h")]
-	[Compact]
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_shader_int_get_type ()")]
 	public class ShaderInt {
-		public static GLib.Type get_type ();
+		[CCode (has_construct_function = false)]
+		protected ShaderInt ();
 	}
-	[CCode (cheader_filename = "clutter/clutter.h")]
-	[Compact]
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_shader_matrix_get_type ()")]
 	public class ShaderMatrix {
-		public static GLib.Type get_type ();
+		[CCode (has_construct_function = false)]
+		protected ShaderMatrix ();
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_snap_constraint_get_type ()")]
 	public class SnapConstraint : Clutter.Constraint {
@@ -1459,8 +6228,11 @@ namespace Clutter {
 		public void ensure_viewport ();
 		public bool get_accept_focus ();
 		public unowned Clutter.Actor get_actor_at_pos (Clutter.PickMode pick_mode, int x, int y);
+		[Deprecated (since = "1.10")]
 		public Clutter.Color get_color ();
+		[Deprecated (since = "1.10")]
 		public static unowned Clutter.Stage get_default ();
+		[Deprecated (since = "1.10")]
 		public Clutter.Fog get_fog ();
 		public bool get_fullscreen ();
 		public unowned Clutter.Actor get_key_focus ();
@@ -1472,17 +6244,22 @@ namespace Clutter {
 		public bool get_throttle_motion_events ();
 		public unowned string get_title ();
 		public bool get_use_alpha ();
+		[Deprecated (since = "1.10")]
 		public bool get_use_fog ();
 		public bool get_user_resizable ();
 		public void hide_cursor ();
+		[Deprecated (since = "1.10")]
 		public bool is_default ();
+		[Deprecated (since = "1.10")]
 		public void queue_redraw ();
-		[CCode (array_length = false, array_null_terminated = true)]
+		[CCode (array_length = false)]
 		public uint8[] read_pixels (int x, int y, int width = -1, int height = -1);
 		[CCode (cname = "clutter_redraw")]
 		public void redraw ();
 		public void set_accept_focus (bool accept_focus);
+		[Deprecated (since = "1.10")]
 		public void set_color (Clutter.Color color);
+		[Deprecated (since = "1.10")]
 		public void set_fog (Clutter.Fog fog);
 		public void set_fullscreen (bool fullscreen);
 		public void set_key_focus (Clutter.Actor? actor);
@@ -1493,23 +6270,28 @@ namespace Clutter {
 		public void set_throttle_motion_events (bool throttle);
 		public void set_title (string title);
 		public void set_use_alpha (bool use_alpha);
+		[Deprecated (since = "1.10")]
 		public void set_use_fog (bool fog);
 		public void set_user_resizable (bool resizable);
 		public void show_cursor ();
 		public bool accept_focus { get; set; }
+		[Deprecated (since = "1.10")]
 		public Clutter.Color color { get; set; }
 		[NoAccessorMethod]
 		public bool cursor_visible { get; set; }
+		[Deprecated (since = "1.10")]
 		public Clutter.Fog fog { get; set; }
 		[NoAccessorMethod]
 		public bool fullscreen_set { get; }
 		public Clutter.Actor key_focus { get; set; }
 		public bool no_clear_hint { get; set; }
+		[Deprecated (since = "1.10")]
 		[NoAccessorMethod]
 		public bool offscreen { get; set; }
 		public Clutter.Perspective perspective { get; set; }
 		public string title { get; set; }
 		public bool use_alpha { get; set; }
+		[Deprecated (since = "1.10")]
 		public bool use_fog { get; set; }
 		public bool user_resizable { get; set; }
 		public virtual signal void activate ();
@@ -1545,7 +6327,7 @@ namespace Clutter {
 		public void remove_key (string? source_state_name, string? target_state_name, GLib.Object? object, string? property_name);
 		public void set_animator (string source_state_name, string target_state_name, Clutter.Animator? animator);
 		public void set_duration (string? source_state_name, string? target_state_name, uint duration);
-		public unowned Clutter.State set_key (string source_state_name, string target_state_name, GLib.Object object, string property_name, uint mode, GLib.Value value, double pre_delay, double post_delay);
+		public unowned Clutter.State set_key (string? source_state_name, string target_state_name, GLib.Object object, string property_name, uint mode, GLib.Value value, double pre_delay, double post_delay);
 		public unowned Clutter.Timeline set_state (string target_state_name);
 		public unowned Clutter.Timeline warp_to_state (string target_state_name);
 		[NoAccessorMethod]
@@ -1605,15 +6387,17 @@ namespace Clutter {
 		public bool use_animations { get; set; }
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_text_get_type ()")]
-	public class Text : Clutter.Actor, Atk.Implementor, Clutter.Animatable, Clutter.Scriptable {
+	public class Text : Clutter.Actor, Atk.Implementor, Clutter.Animatable, Clutter.Container, Clutter.Scriptable {
 		[CCode (has_construct_function = false, type = "ClutterActor*")]
 		public Text ();
+		public int coords_to_position (float x, float y);
 		public void delete_chars (uint n_chars);
 		public bool delete_selection ();
 		[CCode (has_construct_function = false, type = "ClutterActor*")]
 		public Text.full (string font_name, string text, Clutter.Color color);
 		public bool get_activatable ();
 		public unowned Pango.AttrList get_attributes ();
+		public unowned Clutter.TextBuffer get_buffer ();
 		public string get_chars (ssize_t start_pos, ssize_t end_pos);
 		public Clutter.Color get_color ();
 		public Clutter.Color get_cursor_color ();
@@ -1644,9 +6428,10 @@ namespace Clutter {
 		public void insert_unichar (unichar wc);
 		public bool position_to_coords (int position, out float x, out float y, out float line_height = null);
 		public void set_activatable (bool activatable);
-		public void set_attributes (Pango.AttrList attrs);
+		public void set_attributes (Pango.AttrList? attrs);
+		public void set_buffer (Clutter.TextBuffer buffer);
 		public void set_color (Clutter.Color color);
-		public void set_cursor_color (Clutter.Color color);
+		public void set_cursor_color (Clutter.Color? color);
 		public void set_cursor_position (int position);
 		public void set_cursor_size (int size);
 		public void set_cursor_visible (bool cursor_visible);
@@ -1658,22 +6443,27 @@ namespace Clutter {
 		public void set_line_alignment (Pango.Alignment alignment);
 		public void set_line_wrap (bool line_wrap);
 		public void set_line_wrap_mode (Pango.WrapMode wrap_mode);
-		public void set_markup (string markup);
+		public void set_markup (string? markup);
 		public void set_max_length (int max);
 		public void set_password_char (unichar wc);
 		public void set_preedit_string (string? preedit_str, Pango.AttrList? preedit_attrs, uint cursor_pos);
 		public void set_selectable (bool selectable);
-		public void set_selected_text_color (Clutter.Color color);
+		public void set_selected_text_color (Clutter.Color? color);
 		public void set_selection (ssize_t start_pos, ssize_t end_pos);
 		public void set_selection_bound (int selection_bound);
-		public void set_selection_color (Clutter.Color color);
+		public void set_selection_color (Clutter.Color? color);
 		public void set_single_line_mode (bool single_line);
-		public void set_text (string text);
+		public void set_text (string? text);
 		public void set_use_markup (bool setting);
+		[CCode (cname = "clutter_text_activate")]
+		public bool try_activate ();
+		[CCode (has_construct_function = false, type = "ClutterActor*")]
+		public Text.with_buffer (Clutter.TextBuffer buffer);
 		[CCode (has_construct_function = false, type = "ClutterActor*")]
 		public Text.with_text (string? font_name, string text);
 		public bool activatable { get; set; }
 		public Pango.AttrList attributes { get; set; }
+		public Clutter.TextBuffer buffer { get; set; }
 		public Clutter.Color color { get; set; }
 		public Clutter.Color cursor_color { get; set; }
 		[NoAccessorMethod]
@@ -1703,15 +6493,44 @@ namespace Clutter {
 		public bool single_line_mode { get; set; }
 		public string text { get; set; }
 		public bool use_markup { get; set; }
-		[HasEmitter]
 		public virtual signal void activate ();
 		public virtual signal void cursor_event (Clutter.Geometry geometry);
 		[HasEmitter]
 		public signal void delete_text (int start_pos, int end_pos);
 		public virtual signal void text_changed ();
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_text_buffer_get_type ()")]
+	public class TextBuffer : GLib.Object {
+		[CCode (has_construct_function = false)]
+		public TextBuffer ();
+		public virtual uint delete_text (uint position, uint n_chars);
+		public void emit_deleted_text (uint position, uint n_chars);
+		public void emit_inserted_text (uint position, string chars, uint n_chars);
+		public size_t get_bytes ();
+		public virtual uint get_length ();
+		public int get_max_length ();
+		public unowned string get_text ();
+		[CCode (vfunc_name = "get_text")]
+		[NoWrapper]
+		public virtual unowned string get_text_with_length (size_t n_bytes);
+		public virtual uint insert_text (uint position, string chars, uint n_chars);
+		public void set_max_length (int max_length);
+		public void set_text (string chars, int n_chars);
+		[CCode (has_construct_function = false)]
+		public TextBuffer.with_text (string? text, ssize_t text_len);
+		public uint length { get; }
+		public int max_length { get; set; }
+		public string text { get; }
+		public virtual signal void deleted_text (uint position, uint n_chars);
+		public virtual signal void inserted_text (uint position, string chars, uint n_chars);
+	}
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_text_node_get_type ()")]
+	public class TextNode : Clutter.PaintNode {
+		[CCode (has_construct_function = false, type = "ClutterPaintNode*")]
+		public TextNode (Pango.Layout? layout, Clutter.Color? color);
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_texture_get_type ()")]
-	public class Texture : Clutter.Actor, Atk.Implementor, Clutter.Animatable, Clutter.Scriptable, Atk.Implementor, Clutter.Animatable, Clutter.Scriptable {
+	public class Texture : Clutter.Actor, Atk.Implementor, Clutter.Animatable, Clutter.Scriptable, Atk.Implementor, Clutter.Animatable, Clutter.Container, Clutter.Scriptable {
 		[CCode (has_construct_function = false, type = "ClutterActor*")]
 		public Texture ();
 		[CCode (has_construct_function = false, type = "ClutterActor*")]
@@ -1731,13 +6550,14 @@ namespace Clutter {
 		public Cogl.PixelFormat get_pixel_format ();
 		public void get_repeat (out bool repeat_x, out bool repeat_y);
 		public bool get_sync_size ();
-		public bool set_area_from_rgb_data ([CCode (array_length = false, array_null_terminated = true)] uint8[] data, bool has_alpha, int x, int y, int width, int height, int rowstride, int bpp, Clutter.TextureFlags flags) throws GLib.Error;
+		public bool set_area_from_rgb_data ([CCode (array_length = false)] uint8[] data, bool has_alpha, int x, int y, int width, int height, int rowstride, int bpp, Clutter.TextureFlags flags) throws GLib.Error;
 		public void set_cogl_material (Cogl.Handle cogl_material);
 		public void set_cogl_texture (Cogl.Handle cogl_tex);
 		public void set_filter_quality (Clutter.TextureQuality filter_quality);
 		public bool set_from_file (string filename) throws GLib.Error;
-		public bool set_from_rgb_data ([CCode (array_length = false, array_null_terminated = true)] uint8[] data, bool has_alpha, int width, int height, int rowstride, int bpp, Clutter.TextureFlags flags) throws GLib.Error;
-		public bool set_from_yuv_data ([CCode (array_length = false, array_null_terminated = true)] uint8[] data, int width, int height, Clutter.TextureFlags flags) throws GLib.Error;
+		public bool set_from_rgb_data ([CCode (array_length = false)] uint8[] data, bool has_alpha, int width, int height, int rowstride, int bpp, Clutter.TextureFlags flags) throws GLib.Error;
+		[Deprecated (since = "1.10")]
+		public bool set_from_yuv_data ([CCode (array_length = false)] uint8[] data, int width, int height, Clutter.TextureFlags flags) throws GLib.Error;
 		public void set_keep_aspect_ratio (bool keep_aspect);
 		public void set_load_async (bool load_async);
 		public void set_load_data_async (bool load_async);
@@ -1767,25 +6587,36 @@ namespace Clutter {
 		public virtual signal void pixbuf_change ();
 		public virtual signal void size_change (int width, int height);
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_texture_node_get_type ()")]
+	public class TextureNode : Clutter.PipelineNode {
+		[CCode (has_construct_function = false, type = "ClutterPaintNode*")]
+		public TextureNode (Cogl.Texture texture, Clutter.Color color, Clutter.ScalingFilter min_filter, Clutter.ScalingFilter mag_filter);
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_timeline_get_type ()")]
-	public class Timeline : GLib.Object {
+	public class Timeline : GLib.Object, Clutter.Scriptable {
 		[CCode (has_construct_function = false)]
 		public Timeline (uint msecs);
 		public void add_marker_at_time (string marker_name, uint msecs);
 		public void advance (uint msecs);
 		public void advance_to_marker (string marker_name);
+		[Deprecated (since = "1.10")]
 		public Clutter.Timeline clone ();
 		public bool get_auto_reverse ();
+		public int get_current_repeat ();
 		public uint get_delay ();
 		public uint get_delta ();
 		public Clutter.TimelineDirection get_direction ();
 		public uint get_duration ();
+		public int64 get_duration_hint ();
 		public uint get_elapsed_time ();
+		[Deprecated (since = "1.10")]
 		public bool get_loop ();
 		public double get_progress ();
+		public Clutter.AnimationMode get_progress_mode ();
+		public int get_repeat_count ();
 		public bool has_marker (string marker_name);
 		public bool is_playing ();
-		[CCode (array_length_pos = 1.1, array_length_type = "gsize")]
+		[CCode (array_length_pos = 1.1, array_length_type = "gsize", array_null_terminated = true)]
 		public string[] list_markers (int msecs);
 		public void pause ();
 		public void remove_marker (string marker_name);
@@ -1794,7 +6625,11 @@ namespace Clutter {
 		public void set_delay (uint msecs);
 		public void set_direction (Clutter.TimelineDirection direction);
 		public void set_duration (uint msecs);
+		[Deprecated (since = "1.10")]
 		public void set_loop (bool loop);
+		public void set_progress_func (owned Clutter.TimelineProgressFunc? func);
+		public void set_progress_mode (Clutter.AnimationMode mode);
+		public void set_repeat_count (int count);
 		public void skip (uint msecs);
 		public void start ();
 		public void stop ();
@@ -1802,9 +6637,12 @@ namespace Clutter {
 		public uint delay { get; set; }
 		public Clutter.TimelineDirection direction { get; set; }
 		public uint duration { get; set; }
+		[Deprecated (since = "1.10")]
 		public bool loop { get; set; }
+		public Clutter.AnimationMode progress_mode { get; set; }
+		public int repeat_count { get; set; }
 		public virtual signal void completed ();
-		public virtual signal void marker_reached (string marker_name, int frame_num);
+		public virtual signal void marker_reached (string marker_name, int msecs);
 		public virtual signal void new_frame (int msecs);
 		public virtual signal void paused ();
 		public virtual signal void started ();
@@ -1817,6 +6655,26 @@ namespace Clutter {
 		public uint add (uint fps, owned GLib.SourceFunc func);
 		public void remove (uint id_);
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_transition_get_type ()")]
+	public abstract class Transition : Clutter.Timeline, Clutter.Scriptable {
+		[CCode (has_construct_function = false)]
+		protected Transition ();
+		[NoWrapper]
+		public virtual void attached (Clutter.Animatable animatable);
+		[NoWrapper]
+		public virtual void compute_value (Clutter.Animatable animatable, Clutter.Interval interval, double progress);
+		[NoWrapper]
+		public virtual void detached (Clutter.Animatable animatable);
+		public unowned Clutter.Animatable get_animatable ();
+		public unowned Clutter.Interval get_interval ();
+		public bool get_remove_on_complete ();
+		public void set_animatable (Clutter.Animatable? animatable);
+		public void set_interval (Clutter.Interval? interval);
+		public void set_remove_on_complete (bool remove_complete);
+		public Clutter.Animatable animatable { get; set; }
+		public Clutter.Interval interval { get; set; }
+		public bool remove_on_complete { get; set; }
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_animatable_get_type ()")]
 	public interface Animatable : GLib.Object {
 		[Deprecated (since = "1.8")]
@@ -1836,31 +6694,52 @@ namespace Clutter {
 		public void child_get_property (Clutter.Actor child, string property, GLib.Value value);
 		public void child_set (Clutter.Actor actor, ...);
 		public void child_set_property (Clutter.Actor child, string property, GLib.Value value);
+		public static unowned GLib.ParamSpec class_find_child_property (GLib.ObjectClass klass, string property_name);
+		[CCode (array_length_pos = 1.1, array_length_type = "guint")]
+		public static GLib.ParamSpec[] class_list_child_properties (GLib.ObjectClass klass);
 		public virtual void create_child_meta (Clutter.Actor actor);
 		public virtual void destroy_child_meta (Clutter.Actor actor);
 		public unowned Clutter.Actor find_child_by_name (string child_name);
 		[CCode (cname = "clutter_container_class_find_child_property")]
 		public class unowned GLib.ParamSpec find_child_property (string property_name);
+		[Deprecated (since = "1.10")]
 		public abstract void @foreach (Clutter.Callback callback);
+		[Deprecated (since = "1.10")]
 		public virtual void foreach_with_internals (Clutter.Callback callback);
 		public virtual unowned Clutter.ChildMeta get_child_meta (Clutter.Actor actor);
+		[Deprecated (since = "1.10")]
 		public GLib.List<weak Clutter.Actor> get_children ();
 		[CCode (cname = "clutter_container_class_list_child_properties")]
 		public class unowned GLib.ParamSpec[] list_child_properties ();
 		[CCode (vfunc_name = "lower")]
+		[Deprecated (since = "1.10")]
 		public virtual void lower_child (Clutter.Actor actor, Clutter.Actor? sibling = null);
 		[CCode (vfunc_name = "raise")]
+		[Deprecated (since = "1.10")]
 		public virtual void raise_child (Clutter.Actor actor, Clutter.Actor? sibling = null);
+		[Deprecated (since = "1.10")]
 		public void remove (...);
 		[CCode (vfunc_name = "remove")]
+		[Deprecated (since = "1.10")]
 		public abstract void remove_actor (Clutter.Actor actor);
+		[Deprecated (since = "1.10")]
 		public void remove_valist (Clutter.Actor first_actor, va_list var_args);
+		[Deprecated (since = "1.10")]
 		public abstract void sort_depth_order ();
 		public virtual signal void actor_added (Clutter.Actor actor);
 		public virtual signal void actor_removed (Clutter.Actor actor);
 		[HasEmitter]
 		public virtual signal void child_notify (Clutter.Actor child, GLib.ParamSpec pspec);
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_content_get_type ()")]
+	public interface Content : GLib.Object {
+		public abstract bool get_preferred_size (out float width, out float height);
+		public abstract void invalidate ();
+		[NoWrapper]
+		public abstract void paint_content (Clutter.Actor actor, Clutter.PaintNode node);
+		public virtual signal void attached (Clutter.Actor actor);
+		public virtual signal void detached (Clutter.Actor actor);
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_media_get_type ()")]
 	public interface Media : GLib.Object {
 		public double get_audio_volume ();
@@ -1960,12 +6839,22 @@ namespace Clutter {
 		public float get_width ();
 		public float get_x ();
 		public float get_y ();
+		public void init (float x_1, float y_1, float x_2, float y_2);
+		public void init_rect (float x, float y, float width, float height);
 		public Clutter.ActorBox interpolate (Clutter.ActorBox final, double progress);
 		public void set_origin (float x, float y);
 		public void set_size (float width, float height);
 		public Clutter.ActorBox union (Clutter.ActorBox b);
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", has_type_id = false)]
+	public struct ActorIter {
+		public void destroy ();
+		public void init (Clutter.Actor root);
+		public bool next (out Clutter.Actor child);
+		public bool prev (out Clutter.Actor child);
+		public void remove ();
+	}
+	[CCode (cheader_filename = "clutter/clutter.h", has_type_id = false)]
 	public struct AnyEvent {
 		public Clutter.EventType type;
 		public uint32 time;
@@ -2030,6 +6919,7 @@ namespace Clutter {
 		public weak Clutter.Actor related;
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "clutter_fog_get_type ()")]
+	[Deprecated (since = "1.10")]
 	public struct Fog {
 		public float z_near;
 		public float z_far;
@@ -2117,6 +7007,20 @@ namespace Clutter {
 		public Clutter.StageState changed_mask;
 		public Clutter.StageState new_state;
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", has_type_id = false)]
+	public struct TouchEvent {
+		public Clutter.EventType type;
+		public uint32 time;
+		public Clutter.EventFlags flags;
+		public weak Clutter.Stage stage;
+		public weak Clutter.Actor source;
+		public float x;
+		public float y;
+		public weak Clutter.EventSequence sequence;
+		public Clutter.ModifierType modifier_state;
+		public double axes;
+		public weak Clutter.InputDevice device;
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", type_id = "CLUTTER_TYPE_UNITS")]
 	public struct Units {
 		public Clutter.Units copy ();
@@ -2146,6 +7050,14 @@ namespace Clutter {
 		public Clutter.Vertex copy ();
 		public bool equal (Clutter.Vertex vertex_b);
 		public void free ();
+		public void init (float x, float y, float z);
+	}
+	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_ACTOR_ALIGN_")]
+	public enum ActorAlign {
+		FILL,
+		START,
+		CENTER,
+		END
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_ACTOR_")]
 	[Flags]
@@ -2159,13 +7071,15 @@ namespace Clutter {
 	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_ALIGN_")]
 	public enum AlignAxis {
 		X_AXIS,
-		Y_AXIS
+		Y_AXIS,
+		BOTH
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_")]
 	[Flags]
 	public enum AllocationFlags {
 		ALLOCATION_NONE,
-		ABSOLUTE_ORIGIN_CHANGED
+		ABSOLUTE_ORIGIN_CHANGED,
+		DELEGATE_LAYOUT
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_")]
 	public enum AnimationMode {
@@ -2218,7 +7132,8 @@ namespace Clutter {
 		WIDTH,
 		HEIGHT,
 		POSITION,
-		SIZE
+		SIZE,
+		ALL
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_BOX_ALIGNMENT_")]
 	public enum BoxAlignment {
@@ -2226,6 +7141,20 @@ namespace Clutter {
 		END,
 		CENTER
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_CONTENT_GRAVITY_")]
+	public enum ContentGravity {
+		TOP_LEFT,
+		TOP,
+		TOP_RIGHT,
+		LEFT,
+		CENTER,
+		RIGHT,
+		BOTTOM_LEFT,
+		BOTTOM,
+		BOTTOM_RIGHT,
+		RESIZE_FILL,
+		RESIZE_ASPECT
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_DRAG_")]
 	public enum DragAxis {
 		AXIS_NONE,
@@ -2258,7 +7187,12 @@ namespace Clutter {
 		STAGE_STATE,
 		DESTROY_NOTIFY,
 		CLIENT_MESSAGE,
-		DELETE
+		DELETE,
+		TOUCH_BEGIN,
+		TOUCH_UPDATE,
+		TOUCH_END,
+		TOUCH_CANCEL,
+		EVENT_LAST
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_FEATURE_")]
 	[Flags]
@@ -2390,9 +7324,9 @@ namespace Clutter {
 		MODIFIER_MASK
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_OFFSCREEN_REDIRECT_")]
+	[Flags]
 	public enum OffscreenRedirect {
 		AUTOMATIC_FOR_OPACITY,
-		ALWAYS_FOR_OPACITY,
 		ALWAYS
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_PATH_")]
@@ -2411,6 +7345,13 @@ namespace Clutter {
 		REACTIVE,
 		ALL
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_REPAINT_FLAGS_")]
+	[Flags]
+	public enum RepaintFlags {
+		PRE_PAINT,
+		POST_PAINT,
+		QUEUE_REDRAW_ON_ADD
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_REQUEST_")]
 	public enum RequestMode {
 		HEIGHT_FOR_WIDTH,
@@ -2427,12 +7368,25 @@ namespace Clutter {
 		CW,
 		CCW
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_SCALING_FILTER_")]
+	public enum ScalingFilter {
+		LINEAR,
+		NEAREST,
+		TRILINEAR
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_SCROLL_")]
 	public enum ScrollDirection {
 		UP,
 		DOWN,
 		LEFT,
-		RIGHT
+		RIGHT,
+		SMOOTH
+	}
+	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_SHADER_ERROR_")]
+	public enum ShaderError {
+		NO_ASM,
+		NO_GLSL,
+		COMPILE
 	}
 	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_")]
 	public enum ShaderType {
@@ -2563,6 +7517,11 @@ namespace Clutter {
 		MOTION_NOTIFY_EVENT,
 		LAST_EVENT
 	}
+	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_IMAGE_ERROR_INVALID_")]
+	public errordomain ImageError {
+		DATA;
+		public static GLib.Quark quark ();
+	}
 	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_SCRIPT_ERROR_INVALID_")]
 	public errordomain ScriptError {
 		TYPE_FUNCTION,
@@ -2570,13 +7529,6 @@ namespace Clutter {
 		VALUE;
 		public static GLib.Quark quark ();
 	}
-	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_SHADER_ERROR_")]
-	public errordomain ShaderError {
-		NO_ASM,
-		NO_GLSL,
-		COMPILE;
-		public static GLib.Quark quark ();
-	}
 	[CCode (cheader_filename = "clutter/clutter.h", cprefix = "CLUTTER_TEXTURE_ERROR_")]
 	public errordomain TextureError {
 		OUT_OF_MEMORY,
@@ -2604,27 +7556,29 @@ namespace Clutter {
 	public delegate bool ProgressFunc (GLib.Value a, GLib.Value b, double progress, GLib.Value retval);
 	[CCode (cheader_filename = "clutter/clutter.h", instance_pos = 6.9)]
 	public delegate void ScriptConnectFunc (Clutter.Script script, GLib.Object object, string signal_name, string handler_name, GLib.Object connect_object, GLib.ConnectFlags flags);
-	[CCode (cheader_filename = "clutter/clutter.h")]
+	[CCode (cheader_filename = "clutter/clutter.h", instance_pos = 3.9)]
+	public delegate double TimelineProgressFunc (Clutter.Timeline timeline, double elapsed, double total);
+	[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_COGL")]
 	public const string COGL;
-	[CCode (cheader_filename = "clutter/clutter.h")]
+	[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_CURRENT_TIME")]
 	public const int CURRENT_TIME;
-	[CCode (cheader_filename = "clutter/clutter.h")]
+	[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_FLAVOUR")]
 	public const string FLAVOUR;
-	[CCode (cheader_filename = "clutter/clutter.h")]
+	[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_MAJOR_VERSION")]
 	public const int MAJOR_VERSION;
-	[CCode (cheader_filename = "clutter/clutter.h")]
+	[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_MICRO_VERSION")]
 	public const int MICRO_VERSION;
-	[CCode (cheader_filename = "clutter/clutter.h")]
+	[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_MINOR_VERSION")]
 	public const int MINOR_VERSION;
-	[CCode (cheader_filename = "clutter/clutter.h")]
+	[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_PATH_RELATIVE")]
 	public const int PATH_RELATIVE;
-	[CCode (cheader_filename = "clutter/clutter.h")]
+	[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_PRIORITY_REDRAW")]
 	public const int PRIORITY_REDRAW;
-	[CCode (cheader_filename = "clutter/clutter.h")]
+	[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_VERSION")]
 	public const double VERSION;
-	[CCode (cheader_filename = "clutter/clutter.h")]
+	[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_VERSION_HEX")]
 	public const int VERSION_HEX;
-	[CCode (cheader_filename = "clutter/clutter.h")]
+	[CCode (cheader_filename = "clutter/clutter.h", cname = "CLUTTER_VERSION_S")]
 	public const string VERSION_S;
 	[CCode (cheader_filename = "clutter/clutter.h")]
 	public static void base_init ();
@@ -2633,6 +7587,9 @@ namespace Clutter {
 	[CCode (cheader_filename = "clutter/clutter.h")]
 	public static bool check_version (uint major, uint minor, uint micro);
 	[CCode (cheader_filename = "clutter/clutter.h")]
+	public static bool check_windowing_backend (string backend_type);
+	[CCode (cheader_filename = "clutter/clutter.h")]
+	[Deprecated (since = "1.10")]
 	public static void clear_glyph_cache ();
 	[CCode (cheader_filename = "clutter/clutter.h")]
 	public static void do_event (Clutter.Event event);
@@ -2645,6 +7602,7 @@ namespace Clutter {
 	[CCode (cheader_filename = "clutter/clutter.h")]
 	public static uint32 get_current_event_time ();
 	[CCode (cheader_filename = "clutter/clutter.h")]
+	[Deprecated (since = "1.10")]
 	public static bool get_debug_enabled ();
 	[CCode (cheader_filename = "clutter/clutter.h")]
 	public static unowned Clutter.Backend get_default_backend ();
@@ -2653,6 +7611,7 @@ namespace Clutter {
 	[CCode (cheader_filename = "clutter/clutter.h")]
 	public static Clutter.TextDirection get_default_text_direction ();
 	[CCode (cheader_filename = "clutter/clutter.h")]
+	[Deprecated (since = "1.10")]
 	public static Clutter.FontFlags get_font_flags ();
 	[CCode (cheader_filename = "clutter/clutter.h")]
 	public static unowned Pango.FontMap get_font_map ();
@@ -2670,14 +7629,17 @@ namespace Clutter {
 	[CCode (cheader_filename = "clutter/clutter.h")]
 	public static unowned string get_script_id (GLib.Object gobject);
 	[CCode (cheader_filename = "clutter/clutter.h")]
+	[Deprecated (since = "1.10")]
 	public static bool get_show_fps ();
 	[CCode (cheader_filename = "clutter/clutter.h")]
+	[Deprecated (since = "1.10")]
 	public static ulong get_timestamp ();
 	[CCode (cheader_filename = "clutter/clutter.h")]
 	public static void grab_keyboard (Clutter.Actor actor);
 	[CCode (cheader_filename = "clutter/clutter.h")]
 	public static void grab_pointer (Clutter.Actor actor);
 	[CCode (cheader_filename = "clutter/clutter.h")]
+	[Deprecated (since = "1.10")]
 	public static void grab_pointer_for_device (Clutter.Actor actor, int id_);
 	[CCode (cheader_filename = "clutter/clutter.h")]
 	public static Clutter.InitError init ([CCode (array_length_cname = "argc", array_length_pos = 0.5)] ref unowned string[]? argv);
@@ -2692,8 +7654,10 @@ namespace Clutter {
 	[CCode (cheader_filename = "clutter/clutter.h")]
 	public static void main_quit ();
 	[CCode (cheader_filename = "clutter/clutter.h")]
+	[Deprecated (since = "1.10")]
 	public static void set_default_frame_rate (uint frames_per_sec);
 	[CCode (cheader_filename = "clutter/clutter.h")]
+	[Deprecated (since = "1.10")]
 	public static void set_font_flags (Clutter.FontFlags flags);
 	[CCode (cheader_filename = "clutter/clutter.h")]
 	[Deprecated (since = "1.8")]
@@ -2709,5 +7673,8 @@ namespace Clutter {
 	[CCode (cheader_filename = "clutter/clutter.h")]
 	public static void ungrab_pointer ();
 	[CCode (cheader_filename = "clutter/clutter.h")]
+	[Deprecated (since = "1.10")]
 	public static void ungrab_pointer_for_device (int id_);
+	[CCode (cheader_filename = "clutter/clutter.h")]
+	public static uint unicode_to_keysym (uint32 wc);
 }
diff --git a/vapi/clutter-gtk-1.0.vapi b/vapi/clutter-gtk-1.0.vapi
index 3d5800e..07886ff 100644
--- a/vapi/clutter-gtk-1.0.vapi
+++ b/vapi/clutter-gtk-1.0.vapi
@@ -1,8 +1,9 @@
 /* clutter-gtk-1.0.vapi generated by vapigen, do not modify. */
 
+[CCode (cprefix = "GtkClutter", gir_namespace = "GtkClutter", gir_version = "1.0", lower_case_cprefix = "gtk_clutter_")]
 namespace GtkClutter {
-	[CCode (cheader_filename = "clutter-gtk/clutter-gtk.h")]
-	public class Actor : Clutter.Actor, Clutter.Scriptable, Clutter.Animatable, Atk.Implementor, Clutter.Container {
+	[CCode (cheader_filename = "clutter-gtk/clutter-gtk.h", type_id = "gtk_clutter_actor_get_type ()")]
+	public class Actor : Clutter.Actor, Atk.Implementor, Clutter.Animatable, Clutter.Container, Clutter.Scriptable {
 		[CCode (has_construct_function = false, type = "ClutterActor*")]
 		public Actor ();
 		public unowned Gtk.Widget get_contents ();
@@ -12,30 +13,34 @@ namespace GtkClutter {
 		[NoAccessorMethod]
 		public Gtk.Widget contents { owned get; set construct; }
 	}
-	[CCode (cheader_filename = "clutter-gtk/clutter-gtk.h")]
+	[CCode (cheader_filename = "clutter-gtk/clutter-gtk.h", type_id = "gtk_clutter_embed_get_type ()")]
 	public class Embed : Gtk.Container, Atk.Implementor, Gtk.Buildable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public Embed ();
 		public unowned Clutter.Actor get_stage ();
 	}
-	[CCode (cheader_filename = "clutter-gtk/clutter-gtk.h")]
-	public class Texture : Clutter.Texture, Clutter.Scriptable, Clutter.Animatable, Atk.Implementor {
+	[CCode (cheader_filename = "clutter-gtk/clutter-gtk.h", type_id = "gtk_clutter_texture_get_type ()")]
+	public class Texture : Clutter.Texture, Atk.Implementor, Clutter.Animatable, Clutter.Scriptable {
 		[CCode (has_construct_function = false, type = "ClutterActor*")]
 		public Texture ();
 		public static GLib.Quark error_quark ();
-		public bool set_from_icon_name (Gtk.Widget widget, string icon_name, Gtk.IconSize icon_size) throws GLib.Error;
+		public bool set_from_icon_name (Gtk.Widget? widget, string icon_name, Gtk.IconSize icon_size) throws GLib.Error;
 		public bool set_from_pixbuf (Gdk.Pixbuf pixbuf) throws GLib.Error;
 		public bool set_from_stock (Gtk.Widget widget, string stock_id, Gtk.IconSize icon_size) throws GLib.Error;
 	}
-	[CCode (cheader_filename = "clutter-gtk/clutter-gtk.h")]
+	[CCode (cheader_filename = "clutter-gtk/clutter-gtk.h", type_id = "gtk_clutter_window_get_type ()")]
 	public class Window : Gtk.Window, Atk.Implementor, Gtk.Buildable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public Window ();
 		public unowned Clutter.Actor get_stage ();
 	}
-	[CCode (cheader_filename = "clutter-gtk/clutter-gtk.h", cprefix = "GTK_CLUTTER_TEXTURE_ERROR_INVALID_STOCK_", has_type_id = false)]
-	public enum TextureError {
-		ID
+	[CCode (cheader_filename = "clutter-gtk/clutter-gtk.h", cprefix = "GTK_CLUTTER_TEXTURE_ERROR_INVALID_STOCK_")]
+	public errordomain TextureError {
+		[CCode (cname = "GTK_CLUTTER_TEXTURE_ERROR_INVALID_STOCK_ID")]
+		[Deprecated (replacement = "INVALID_STOCK_ID", since = "vala-0.16")]
+		ID,
+		[CCode (cname = "GTK_CLUTTER_TEXTURE_ERROR_INVALID_STOCK_ID")]
+		INVALID_STOCK_ID
 	}
 	[CCode (cheader_filename = "clutter-gtk/clutter-gtk.h")]
 	public const int CLUTTER_GTK_MAJOR_VERSION;
@@ -52,7 +57,7 @@ namespace GtkClutter {
 	[CCode (cheader_filename = "clutter-gtk/clutter-gtk.h")]
 	public static GLib.OptionGroup get_option_group ();
 	[CCode (cheader_filename = "clutter-gtk/clutter-gtk.h")]
-	public static Clutter.InitError init ([CCode (array_length_pos = 0.9)] ref unowned string[] argv);
+	public static Clutter.InitError init ([CCode (array_length_cname = "argc", array_length_pos = 0.5)] ref unowned string[]? argv);
 	[CCode (cheader_filename = "clutter-gtk/clutter-gtk.h")]
-	public static Clutter.InitError init_with_args ([CCode (array_length_pos = 0.9)] ref unowned string[] argv, string parameter_string, [CCode (array_length = false)] GLib.OptionEntry[] entries, string? translation_domain) throws GLib.Error;
+	public static Clutter.InitError init_with_args ([CCode (array_length_cname = "argc", array_length_pos = 0.5)] ref unowned string[]? argv, string? parameter_string, [CCode (array_length = false, array_null_terminated = true)] GLib.OptionEntry[]? entries, string? translation_domain) throws GLib.Error;
 }
diff --git a/vapi/cogl-1.0.vapi b/vapi/cogl-1.0.vapi
index 8e63d35..6e6b51c 100644
--- a/vapi/cogl-1.0.vapi
+++ b/vapi/cogl-1.0.vapi
@@ -136,7 +136,7 @@ namespace Cogl {
 		[CCode (cname = "cogl_offscreen_new_to_texture", has_construct_function = false, type = "CoglHandle*")]
 		public Offscreen.to_texture (Cogl.Texture handle);
 	}
-	[CCode (cheader_filename = "cogl/cogl.h")]
+	[CCode (cheader_filename = "cogl-pango/cogl-pango.h")]
 	[Compact]
 	public class PangoFontMap {
 		[CCode (has_construct_function = false, type = "PangoFontMap*")]
@@ -148,19 +148,17 @@ namespace Cogl {
 		public void set_resolution (double dpi);
 		public void set_use_mipmapping (bool value);
 	}
-	[CCode (cheader_filename = "cogl/cogl.h")]
+	[CCode (cheader_filename = "cogl-pango/cogl-pango.h")]
 	[Compact]
 	public class PangoRenderer {
 	}
-	[CCode (cheader_filename = "cogl/cogl.h")]
+	[CCode (cheader_filename = "cogl-pango/cogl-pango.h")]
 	[Compact]
 	public class PangoRendererClass {
 	}
 	[CCode (cheader_filename = "cogl/cogl.h", copy_function = "cogl_path_copy")]
 	[Compact]
 	public class Path {
-		[CCode (has_construct_function = false, type = "void")]
-		public Path ();
 		public static void arc (float center_x, float center_y, float radius_x, float radius_y, float angle_1, float angle_2);
 		public static void close ();
 		public unowned Cogl.Path copy ();
@@ -173,6 +171,7 @@ namespace Cogl {
 		public static void line (float x_1, float y_1, float x_2, float y_2);
 		public static void line_to (float x, float y);
 		public static void move_to (float x, float y);
+		public static void @new ();
 		public static void polygon ([CCode (array_length = false)] float[] coords, int num_points);
 		public static void polyline ([CCode (array_length = false)] float[] coords, int num_points);
 		public static void rectangle (float x_1, float y_1, float x_2, float y_2);
@@ -714,7 +713,7 @@ namespace Cogl {
 	[CCode (cheader_filename = "cogl/cogl.h")]
 	public static void get_projection_matrix (Cogl.Matrix matrix);
 	[CCode (cheader_filename = "cogl/cogl.h")]
-	public static void get_viewport (float[] v);
+	public static void get_viewport ([CCode (array_length = false)] float[] v);
 	[CCode (cheader_filename = "cogl/cogl.h")]
 	public static GLib.Type indices_type_get_type ();
 	[CCode (cheader_filename = "cogl/cogl.h")]
@@ -723,13 +722,13 @@ namespace Cogl {
 	public static bool is_vertex_buffer_indices (Cogl.Bitmap handle);
 	[CCode (cheader_filename = "cogl/cogl.h")]
 	public static void ortho (float left, float right, float bottom, float top, float near, float far);
-	[CCode (cheader_filename = "cogl/cogl.h")]
+	[CCode (cheader_filename = "cogl-pango/cogl-pango.h")]
 	public static void pango_ensure_glyph_cache_for_layout (Pango.Layout layout);
-	[CCode (cheader_filename = "cogl/cogl.h")]
+	[CCode (cheader_filename = "cogl-pango/cogl-pango.h")]
 	public static void pango_render_layout (Pango.Layout layout, int x, int y, Cogl.Color color, int flags);
-	[CCode (cheader_filename = "cogl/cogl.h")]
+	[CCode (cheader_filename = "cogl-pango/cogl-pango.h")]
 	public static void pango_render_layout_line (Pango.LayoutLine line, int x, int y, Cogl.Color color);
-	[CCode (cheader_filename = "cogl/cogl.h")]
+	[CCode (cheader_filename = "cogl-pango/cogl-pango.h")]
 	public static void pango_render_layout_subpixel (Pango.Layout layout, int x, int y, Cogl.Color color, int flags);
 	[CCode (cheader_filename = "cogl/cogl.h")]
 	public static void perspective (float fovy, float aspect, float z_near, float z_far);
diff --git a/vapi/cogl-pango-1.0.deps b/vapi/cogl-pango-1.0.deps
new file mode 100644
index 0000000..ebc27e5
--- /dev/null
+++ b/vapi/cogl-pango-1.0.deps
@@ -0,0 +1,2 @@
+cogl-1.0
+pango
diff --git a/vapi/cogl-pango-1.0.vapi b/vapi/cogl-pango-1.0.vapi
new file mode 100644
index 0000000..4b2599c
--- /dev/null
+++ b/vapi/cogl-pango-1.0.vapi
@@ -0,0 +1,30 @@
+/* cogl-pango-1.0.vapi generated by vapigen, do not modify. */
+
+[CCode (cprefix = "CoglPango", gir_namespace = "CoglPango", gir_version = "1.0", lower_case_cprefix = "cogl_pango_")]
+namespace CoglPango {
+	[CCode (cheader_filename = "cogl-pango/cogl-pango.h")]
+	public class FontMap : Pango.FontMap {
+		[CCode (has_construct_function = false)]
+		protected FontMap ();
+		public static void clear_glyph_cache (Pango.CairoFontMap fm);
+		public static Pango.Context create_context (Pango.CairoFontMap fm);
+		public static unowned Pango.Renderer get_renderer (Pango.CairoFontMap fm);
+		public static bool get_use_mipmapping (Pango.CairoFontMap fm);
+		public static Pango.FontMap @new ();
+		public static void set_resolution (Pango.CairoFontMap font_map, double dpi);
+		public static void set_use_mipmapping (Pango.CairoFontMap fm, bool value);
+	}
+	[CCode (cheader_filename = "cogl-pango/cogl-pango.h", type_id = "cogl_pango_renderer_get_type ()")]
+	public class Renderer : Pango.Renderer {
+		[CCode (has_construct_function = false)]
+		protected Renderer ();
+	}
+	[CCode (cheader_filename = "cogl-pango/cogl-pango.h")]
+	public static void ensure_glyph_cache_for_layout (Pango.Layout layout);
+	[CCode (cheader_filename = "cogl-pango/cogl-pango.h")]
+	public static void render_layout (Pango.Layout layout, int x, int y, Cogl.Color color, int flags);
+	[CCode (cheader_filename = "cogl-pango/cogl-pango.h")]
+	public static void render_layout_line (Pango.LayoutLine line, int x, int y, Cogl.Color color);
+	[CCode (cheader_filename = "cogl-pango/cogl-pango.h")]
+	public static void render_layout_subpixel (Pango.Layout layout, int x, int y, Cogl.Color color, int flags);
+}
diff --git a/vapi/dbus-glib-1.vapi b/vapi/dbus-glib-1.vapi
index 5502fe2..f79574c 100644
--- a/vapi/dbus-glib-1.vapi
+++ b/vapi/dbus-glib-1.vapi
@@ -21,7 +21,7 @@
  *  Michael 'Mickey' Lauer <mlauer vanille-media de>
  */
 
-[CCode (cheader_filename = "dbus/dbus-glib-lowlevel.h,dbus/dbus-glib.h")]
+[CCode (cheader_filename = "dbus/dbus-glib-lowlevel.h,dbus/dbus-glib.h", gir_namespace = "DBusGLib", gir_version = "1.0")]
 namespace DBus {
 	public const string SERVICE_DBUS;
 	public const string PATH_DBUS;
@@ -242,6 +242,8 @@ namespace DBus {
 	[Compact]
 	[CCode (ref_function = "dbus_g_connection_ref", unref_function = "dbus_g_connection_unref", cname = "DBusGConnection")]
 	public class Connection {
+		[CCode (cname = "dbus_g_connection_open")]
+		public Connection (string address) throws Error;
 		[CCode (cname = "dbus_g_proxy_new_for_name")]
 		public Object get_object (string name, string path, string? interface_ = null);
 		[CCode (cname="dbus_g_proxy_new_for_name_owner")]
diff --git a/vapi/gdk-2.0.vapi b/vapi/gdk-2.0.vapi
index 4419fc1..d93accf 100644
--- a/vapi/gdk-2.0.vapi
+++ b/vapi/gdk-2.0.vapi
@@ -35,7 +35,7 @@ namespace Gdk {
 	public class Bitmap {
 		public weak GLib.Object parent_instance;
 		[Deprecated (since = "2.22")]
-		public static Gdk.Bitmap create_from_data (Gdk.Drawable drawable, string data, int width, int height);
+		public static Gdk.Bitmap create_from_data (Gdk.Drawable drawable, [CCode (array_length = false)] uint8[] data, int width, int height);
 	}
 	[CCode (cheader_filename = "gdk/gdk.h")]
 	public class Colormap : GLib.Object {
@@ -440,7 +440,7 @@ namespace Gdk {
 		[Deprecated (since = "2.22")]
 		public static unowned Gdk.Pixmap colormap_create_from_xpm_d (Gdk.Drawable drawable, Gdk.Colormap colormap, out unowned Gdk.Bitmap mask, Gdk.Color transparent_color, string data);
 		[Deprecated (since = "2.22")]
-		public static unowned Gdk.Pixmap create_from_data (Gdk.Drawable drawable, string data, int width, int height, int depth, Gdk.Color fg, Gdk.Color bg);
+		public static unowned Gdk.Pixmap create_from_data (Gdk.Drawable drawable, [CCode (array_length = false)] uint8[] data, int width, int height, int depth, Gdk.Color fg, Gdk.Color bg);
 		[Deprecated (since = "2.22")]
 		public static unowned Gdk.Pixmap create_from_xpm (Gdk.Drawable drawable, out unowned Gdk.Bitmap mask, Gdk.Color transparent_color, string filename);
 		[Deprecated (since = "2.22")]
diff --git a/vapi/gdk-3.0.vapi b/vapi/gdk-3.0.vapi
index ccaf35d..30ab898 100644
--- a/vapi/gdk-3.0.vapi
+++ b/vapi/gdk-3.0.vapi
@@ -551,6 +551,12 @@ namespace Gdk {
 		public const int C;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_CD")]
 		public const int CD;
+		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_CH")]
+		public const int CH;
+		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_C_H")]
+		public const int C_H;
+		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_C_h")]
+		public const int C_h;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_Cabovedot")]
 		public const int Cabovedot;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_Cacute")]
@@ -569,6 +575,8 @@ namespace Gdk {
 		public const int Ccedilla;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_Ccircumflex")]
 		public const int Ccircumflex;
+		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_Ch")]
+		public const int Ch;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_Clear")]
 		public const int Clear;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_ClearGrab")]
@@ -829,6 +837,8 @@ namespace Gdk {
 		public const int ENG;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_ETH")]
 		public const int ETH;
+		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_EZH")]
+		public const int EZH;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_Eabovedot")]
 		public const int Eabovedot;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_Eacute")]
@@ -1765,8 +1775,12 @@ namespace Gdk {
 		public const int Linefeed;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_LiraSign")]
 		public const int LiraSign;
+		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_LogGrabInfo")]
+		public const int LogGrabInfo;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_LogOff")]
 		public const int LogOff;
+		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_LogWindowTree")]
+		public const int LogWindowTree;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_Lstroke")]
 		public const int Lstroke;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_M")]
@@ -3383,6 +3397,8 @@ namespace Gdk {
 		public const int brokenbar;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_c")]
 		public const int c;
+		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_c_h")]
+		public const int c_h;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_cabovedot")]
 		public const int cabovedot;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_cacute")]
@@ -3403,6 +3419,8 @@ namespace Gdk {
 		public const int cedilla;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_cent")]
 		public const int cent;
+		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_ch")]
+		public const int ch;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_checkerboard")]
 		public const int checkerboard;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_checkmark")]
@@ -3499,6 +3517,8 @@ namespace Gdk {
 		public const int dead_e;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_dead_grave")]
 		public const int dead_grave;
+		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_dead_greek")]
+		public const int dead_greek;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_dead_hook")]
 		public const int dead_hook;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_dead_horn")]
@@ -3649,6 +3669,8 @@ namespace Gdk {
 		public const int exclam;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_exclamdown")]
 		public const int exclamdown;
+		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_ezh")]
+		public const int ezh;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_f")]
 		public const int f;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_fabovedot")]
@@ -4219,6 +4241,8 @@ namespace Gdk {
 		public const int period;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_periodcentered")]
 		public const int periodcentered;
+		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_permille")]
+		public const int permille;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_phonographcopyright")]
 		public const int phonographcopyright;
 		[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_KEY_plus")]
@@ -4552,7 +4576,7 @@ namespace Gdk {
 		public Gdk.Display display { owned get; construct; }
 	}
 	[CCode (cheader_filename = "gdk/gdk.h", type_id = "gdk_cursor_get_type ()")]
-	public abstract class Cursor : GLib.Object {
+	public class Cursor : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public Cursor (Gdk.CursorType cursor_type);
 		[CCode (has_construct_function = false)]
@@ -4575,7 +4599,7 @@ namespace Gdk {
 	public abstract class Device : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected Device ();
-		public static void free_history ([CCode (array_length_cname = "n_events", array_length_pos = 1.1)] Gdk.TimeCoord[] events);
+		public static void free_history ([CCode (array_length_cname = "n_events", array_length_pos = 1.1, type = "GdkTimeCoord**")] Gdk.TimeCoord[] events);
 		public unowned Gdk.Device? get_associated_device ();
 		public bool get_axis ([CCode (array_length = false)] double[] axes, Gdk.AxisUse use, out double value);
 		public Gdk.AxisUse get_axis_use (uint index_);
@@ -4591,7 +4615,7 @@ namespace Gdk {
 		public unowned string get_name ();
 		public void get_position (out unowned Gdk.Screen screen, out int x, out int y);
 		public Gdk.InputSource get_source ();
-		public void get_state (Gdk.Window window, [CCode (array_length = false)] double[] axes, out Gdk.ModifierType mask);
+		public void get_state (Gdk.Window window, [CCode (array_length = false, type = "gdouble*")] double[] axes, out Gdk.ModifierType mask);
 		public unowned Gdk.Window get_window_at_position (out int win_x, out int win_y);
 		public Gdk.GrabStatus grab (Gdk.Window window, Gdk.GrabOwnership grab_ownership, bool owner_events, Gdk.EventMask event_mask, Gdk.Cursor? cursor, uint32 time_);
 		public GLib.List<weak Gdk.Atom> list_axes ();
@@ -4728,6 +4752,7 @@ namespace Gdk {
 		public Gdk.EventScroll scroll;
 		public Gdk.EventSelection selection;
 		public Gdk.EventSetting setting;
+		public Gdk.EventTouch touch;
 		public Gdk.EventType type;
 		public Gdk.EventVisibility visibility;
 		public Gdk.EventWindowState window_state;
@@ -4745,6 +4770,7 @@ namespace Gdk {
 		public bool get_keyval (out uint keyval);
 		public bool get_root_coords (out double x_root, out double y_root);
 		public unowned Gdk.Screen get_screen ();
+		public bool get_scroll_deltas (out double delta_x, out double delta_y);
 		public bool get_scroll_direction (out Gdk.ScrollDirection direction);
 		public unowned Gdk.Device get_source_device ();
 		public bool get_state (out Gdk.ModifierType state);
@@ -4756,6 +4782,11 @@ namespace Gdk {
 		public void set_device (Gdk.Device device);
 		public void set_screen (Gdk.Screen screen);
 		public void set_source_device (Gdk.Device device);
+		public bool triggers_context_menu ();
+	}
+	[CCode (cheader_filename = "gdk/gdk.h")]
+	[Compact]
+	public class EventSequence {
 	}
 	[CCode (cheader_filename = "gdk/gdk.h", type_id = "gdk_keymap_get_type ()")]
 	public class Keymap : GLib.Object {
@@ -4768,6 +4799,8 @@ namespace Gdk {
 		public bool get_entries_for_keycode (uint hardware_keycode, [CCode (array_length_cname = "n_entries", array_length_pos = 3.1)] out Gdk.KeymapKey[] keys, [CCode (array_length_cname = "n_entries", array_length_pos = 3.1)] out uint[] keyvals);
 		public bool get_entries_for_keyval (uint keyval, [CCode (array_length_cname = "n_keys", array_length_pos = 2.1)] out Gdk.KeymapKey[] keys);
 		public static unowned Gdk.Keymap get_for_display (Gdk.Display display);
+		public Gdk.ModifierType get_modifier_mask (Gdk.ModifierIntent intent);
+		public uint get_modifier_state ();
 		public bool get_num_lock_state ();
 		public bool have_bidi_layouts ();
 		public uint lookup_key (Gdk.KeymapKey key);
@@ -4793,6 +4826,7 @@ namespace Gdk {
 		public int get_monitor_height_mm (int monitor_num);
 		public string get_monitor_plug_name (int monitor_num);
 		public int get_monitor_width_mm (int monitor_num);
+		public Gdk.Rectangle get_monitor_workarea (int monitor_num);
 		public int get_n_monitors ();
 		public int get_number ();
 		public int get_primary_monitor ();
@@ -4844,21 +4878,24 @@ namespace Gdk {
 	[CCode (cheader_filename = "gdk/gdk.h")]
 	public class Window : GLib.Object {
 		[CCode (has_construct_function = false)]
-		public Window (Gdk.Window? parent, Gdk.WindowAttr attributes, int attributes_mask);
+		public Window (Gdk.Window? parent, Gdk.WindowAttr attributes, Gdk.WindowAttributesType attributes_mask);
 		public void add_filter (Gdk.FilterFunc function);
 		[Deprecated (since = "3.0")]
 		public static unowned Gdk.Window at_pointer (out int win_x, out int win_y);
 		public void beep ();
 		public void begin_move_drag (int button, int root_x, int root_y, uint32 timestamp);
+		public void begin_move_drag_for_device (Gdk.Device device, int button, int root_x, int root_y, uint32 timestamp);
 		public void begin_paint_rect (Gdk.Rectangle rectangle);
 		public void begin_paint_region (Cairo.Region region);
 		public void begin_resize_drag (Gdk.WindowEdge edge, int button, int root_x, int root_y, uint32 timestamp);
+		public void begin_resize_drag_for_device (Gdk.WindowEdge edge, Gdk.Device device, int button, int root_x, int root_y, uint32 timestamp);
 		public void configure_finished ();
 		public static void constrain_size (Gdk.Geometry geometry, uint flags, int width, int height, out int new_width, out int new_height);
 		public void coords_from_parent (double parent_x, double parent_y, out double x, out double y);
 		public void coords_to_parent (double x, double y, out double parent_x, out double parent_y);
 		public Cairo.Surface create_similar_surface (Cairo.Content content, int width, int height);
 		public void deiconify ();
+		[DestroysInstance]
 		public void destroy ();
 		public void enable_synchronized_configure ();
 		public void end_paint ();
@@ -4939,6 +4976,7 @@ namespace Gdk {
 		public void restack (Gdk.Window? sibling, bool above);
 		public void scroll (int dx, int dy);
 		public void set_accept_focus (bool accept_focus);
+		[Deprecated (since = "3.4")]
 		public void set_background (Gdk.Color color);
 		public void set_background_pattern (Cairo.Pattern? pattern);
 		public void set_background_rgba (Gdk.RGBA rgba);
@@ -4996,7 +5034,7 @@ namespace Gdk {
 	}
 	[CCode (cheader_filename = "gdk/gdk.h")]
 	[SimpleType]
-	public struct Atom {
+	public struct Atom : uint {
 		[CCode (cname = "GDK_NONE")]
 		public static Gdk.Atom NONE;
 		public static Gdk.Atom intern (string atom_name, bool only_if_exists);
@@ -5098,7 +5136,7 @@ namespace Gdk {
 		public bool implicit;
 		public weak Gdk.Window grab_window;
 	}
-	[CCode (cheader_filename = "gdk/gdk.h")]
+	[CCode (cheader_filename = "gdk/gdk.h", has_type_id = false)]
 	public struct EventKey {
 		[CCode (cname = "string")]
 		public weak string str;
@@ -5147,7 +5185,7 @@ namespace Gdk {
 		public int8 send_event;
 		public Gdk.Atom atom;
 		public uint32 time;
-		public uint state;
+		public Gdk.PropertyState state;
 	}
 	[CCode (cheader_filename = "gdk/gdk.h", has_type_id = false)]
 	public struct EventProximity {
@@ -5170,6 +5208,8 @@ namespace Gdk {
 		public weak Gdk.Device device;
 		public double x_root;
 		public double y_root;
+		public double delta_x;
+		public double delta_y;
 	}
 	[CCode (cheader_filename = "gdk/gdk.h", has_type_id = false)]
 	public struct EventSelection {
@@ -5191,6 +5231,22 @@ namespace Gdk {
 		public weak string name;
 	}
 	[CCode (cheader_filename = "gdk/gdk.h", has_type_id = false)]
+	public struct EventTouch {
+		public Gdk.EventType type;
+		public weak Gdk.Window window;
+		public int8 send_event;
+		public uint32 time;
+		public double x;
+		public double y;
+		public double axes;
+		public Gdk.ModifierType state;
+		public weak Gdk.EventSequence sequence;
+		public bool emulating_pointer;
+		public weak Gdk.Device device;
+		public double x_root;
+		public double y_root;
+	}
+	[CCode (cheader_filename = "gdk/gdk.h", has_type_id = false)]
 	public struct EventVisibility {
 		public Gdk.EventType type;
 		public weak Gdk.Window window;
@@ -5294,7 +5350,10 @@ namespace Gdk {
 		UNGRAB,
 		GTK_GRAB,
 		GTK_UNGRAB,
-		STATE_CHANGED
+		STATE_CHANGED,
+		TOUCH_BEGIN,
+		TOUCH_END,
+		DEVICE_SWITCH
 	}
 	[CCode (cheader_filename = "gdk/gdk.h", cprefix = "GDK_")]
 	public enum CursorType {
@@ -5429,6 +5488,8 @@ namespace Gdk {
 		PROXIMITY_OUT_MASK,
 		SUBSTRUCTURE_MASK,
 		SCROLL_MASK,
+		TOUCH_MASK,
+		SMOOTH_SCROLL_MASK,
 		ALL_EVENTS_MASK
 	}
 	[CCode (cheader_filename = "gdk/gdk.h", cprefix = "GDK_")]
@@ -5440,7 +5501,9 @@ namespace Gdk {
 		MOTION_NOTIFY,
 		BUTTON_PRESS,
 		@2BUTTON_PRESS,
+		DOUBLE_BUTTON_PRESS,
 		@3BUTTON_PRESS,
+		TRIPLE_BUTTON_PRESS,
 		BUTTON_RELEASE,
 		KEY_PRESS,
 		KEY_RELEASE,
@@ -5470,14 +5533,12 @@ namespace Gdk {
 		OWNER_CHANGE,
 		GRAB_BROKEN,
 		DAMAGE,
+		TOUCH_BEGIN,
+		TOUCH_UPDATE,
+		TOUCH_END,
+		TOUCH_CANCEL,
 		EVENT_LAST
 	}
-	[CCode (cheader_filename = "gdk/gdk.h", cprefix = "GDK_EXTENSION_EVENTS_")]
-	public enum ExtensionMode {
-		NONE,
-		ALL,
-		CURSOR
-	}
 	[CCode (cheader_filename = "gdk/gdk.h", cprefix = "GDK_FILTER_")]
 	public enum FilterReturn {
 		CONTINUE,
@@ -5523,7 +5584,18 @@ namespace Gdk {
 		PEN,
 		ERASER,
 		CURSOR,
-		KEYBOARD
+		KEYBOARD,
+		TOUCHSCREEN,
+		TOUCHPAD
+	}
+	[CCode (cheader_filename = "gdk/gdk.h", cprefix = "GDK_MODIFIER_INTENT_")]
+	public enum ModifierIntent {
+		PRIMARY_ACCELERATOR,
+		CONTEXT_MENU,
+		EXTEND_SELECTION,
+		MODIFY_SELECTION,
+		NO_TEXT_INPUT,
+		SHIFT_GROUP
 	}
 	[CCode (cheader_filename = "gdk/gdk.h", cprefix = "GDK_")]
 	[Flags]
@@ -5578,7 +5650,8 @@ namespace Gdk {
 		UP,
 		DOWN,
 		LEFT,
-		RIGHT
+		RIGHT,
+		SMOOTH
 	}
 	[CCode (cheader_filename = "gdk/gdk.h", cprefix = "GDK_SETTING_ACTION_")]
 	public enum SettingAction {
@@ -5675,7 +5748,8 @@ namespace Gdk {
 		STICKY,
 		FULLSCREEN,
 		ABOVE,
-		BELOW
+		BELOW,
+		FOCUSED
 	}
 	[CCode (cheader_filename = "gdk/gdk.h", cprefix = "GDK_WINDOW_")]
 	public enum WindowType {
@@ -5705,8 +5779,10 @@ namespace Gdk {
 	}
 	[CCode (cheader_filename = "gdk/gdk.h", cprefix = "GDK_INPUT_")]
 	public enum WindowWindowClass {
-		OUTPUT,
-		ONLY
+		[CCode (cname = "GDK_INPUT_OUTPUT")]
+		INPUT_OUTPUT,
+		[CCode (cname = "GDK_INPUT_ONLY")]
+		INPUT_ONLY
 	}
 	[CCode (cheader_filename = "gdk/gdk.h", instance_pos = 1.9)]
 	public delegate void EventFunc (Gdk.Event event);
@@ -5714,6 +5790,12 @@ namespace Gdk {
 	public delegate Gdk.FilterReturn FilterFunc (Gdk.XEvent xevent, Gdk.Event event);
 	[CCode (cheader_filename = "gdk/gdk.h", instance_pos = 1.9)]
 	public delegate bool WindowChildFunc (Gdk.Window window);
+	[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_BUTTON_MIDDLE")]
+	public const int BUTTON_MIDDLE;
+	[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_BUTTON_PRIMARY")]
+	public const int BUTTON_PRIMARY;
+	[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_BUTTON_SECONDARY")]
+	public const int BUTTON_SECONDARY;
 	[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_CURRENT_TIME")]
 	public const int CURRENT_TIME;
 	[CCode (cheader_filename = "gdk/gdk.h", cname = "GDK_MAX_TIMECOORD_AXES")]
@@ -5743,6 +5825,7 @@ namespace Gdk {
 	[CCode (cheader_filename = "gdk/gdk.h")]
 	public static Cairo.Region cairo_region_create_from_surface (Cairo.Surface surface);
 	[CCode (cheader_filename = "gdk/gdk.h")]
+	[Deprecated (since = "3.4")]
 	public static void cairo_set_source_color (Cairo.Context cr, Gdk.Color color);
 	[CCode (cheader_filename = "gdk/gdk.h")]
 	public static void cairo_set_source_pixbuf (Cairo.Context cr, Gdk.Pixbuf pixbuf, double pixbuf_x, double pixbuf_y);
diff --git a/vapi/gdk-pixbuf-2.0.vapi b/vapi/gdk-pixbuf-2.0.vapi
index ca81e1a..0a0eaac 100644
--- a/vapi/gdk-pixbuf-2.0.vapi
+++ b/vapi/gdk-pixbuf-2.0.vapi
@@ -34,6 +34,7 @@ namespace Gdk {
 		[CCode (has_construct_function = false)]
 		public Pixbuf.from_xpm_data ([CCode (array_length = false, type = "char**")] string[] data);
 		public int get_bits_per_sample ();
+		public size_t get_byte_length ();
 		public Gdk.Colorspace get_colorspace ();
 		public static unowned Gdk.PixbufFormat get_file_info (string filename, out int width, out int height);
 		public static GLib.SList<weak Gdk.PixbufFormat> get_formats ();
@@ -43,6 +44,8 @@ namespace Gdk {
 		public unowned string get_option (string key);
 		[CCode (array_length = false)]
 		public unowned uint8[] get_pixels ();
+		[CCode (array_length_pos = 0.1, array_length_type = "guint")]
+		public unowned uint8[] get_pixels_with_length ();
 		public int get_rowstride ();
 		public int get_width ();
 		[CCode (cname = "gdk_pixbuf_new_from_stream_async", finish_name = "gdk_pixbuf_new_from_stream_finish")]
@@ -218,7 +221,7 @@ namespace Gdk {
 	}
 	[CCode (cheader_filename = "gdk-pixbuf/gdk-pixdata.h")]
 	public delegate void PixbufDestroyNotify ([CCode (array_length = false)] uint8[] pixels);
-	[CCode (cheader_filename = "gdk-pixbuf/gdk-pixdata.h", instance_pos = 3.9)]
+	[CCode (cheader_filename = "gdk-pixbuf/gdk-pixdata.h", instance_pos = -0.9)]
 	public delegate bool PixbufSaveFunc ([CCode (array_length_type = "gsize")] uint8[] buf) throws GLib.Error;
 	[CCode (cheader_filename = "gdk-pixbuf/gdk-pixbuf.h", cname = "GDK_PIXBUF_FEATURES_H")]
 	public const int PIXBUF_FEATURES_H;
diff --git a/vapi/gdl-3.0.deps b/vapi/gdl-3.0.deps
new file mode 100644
index 0000000..5049a1a
--- /dev/null
+++ b/vapi/gdl-3.0.deps
@@ -0,0 +1,2 @@
+gtk+-3.0
+gio-2.0
diff --git a/vapi/gdl-3.0.vapi b/vapi/gdl-3.0.vapi
new file mode 100644
index 0000000..376fcc1
--- /dev/null
+++ b/vapi/gdl-3.0.vapi
@@ -0,0 +1,337 @@
+/* gdl-3.0.vapi generated by vapigen, do not modify. */
+
+[CCode (cprefix = "Gdl", gir_namespace = "Gdl", gir_version = "3", lower_case_cprefix = "gdl_")]
+namespace Gdl {
+	[CCode (cheader_filename = "gdl/gdl.h", type_id = "gdl_dock_get_type ()")]
+	public class Dock : Gdl.DockObject, Atk.Implementor, Gtk.Buildable {
+		public weak Gdl.DockObject root;
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public Dock ();
+		public void add_floating_item (Gdl.DockItem item, int x, int y, int width, int height);
+		public void add_item (Gdl.DockItem item, Gdl.DockPlacement place);
+		public void xor_rect (Gdk.Rectangle rect);
+		public void xor_rect_hide ();
+		[NoAccessorMethod]
+		public string default_title { owned get; set; }
+		[NoAccessorMethod]
+		public bool floating { get; construct; }
+		[NoAccessorMethod]
+		public int floatx { get; set construct; }
+		[NoAccessorMethod]
+		public int floaty { get; set construct; }
+		[NoAccessorMethod]
+		public int height { get; set construct; }
+		[NoAccessorMethod]
+		public int width { get; set construct; }
+		public virtual signal void layout_changed ();
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", type_id = "gdl_dock_bar_get_type ()")]
+	public class DockBar : Gtk.Box, Atk.Implementor, Gtk.Buildable, Gtk.Orientable {
+		public weak Gdl.Dock dock;
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public DockBar (Gdl.Dock dock);
+		public Gtk.Orientation get_orientation ();
+		public Gdl.DockBarStyle get_style ();
+		public void set_orientation (Gtk.Orientation orientation);
+		public void set_style (Gdl.DockBarStyle style);
+		[NoAccessorMethod]
+		public Gdl.DockBarStyle dockbar_style { get; set construct; }
+		[NoAccessorMethod]
+		public Gdl.DockMaster master { owned get; set; }
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", type_id = "gdl_dock_item_get_type ()")]
+	public class DockItem : Gdl.DockObject, Atk.Implementor, Gtk.Buildable {
+		public weak Gtk.Widget child;
+		public int dragoff_x;
+		public int dragoff_y;
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public DockItem (string name, string long_name, Gdl.DockItemBehavior behavior);
+		public void bind (Gtk.Widget dock);
+		public void dock_to (Gdl.DockItem? target, Gdl.DockPlacement position, int docking_param);
+		public void hide_grip ();
+		public void hide_item ();
+		public void iconify_item ();
+		public void @lock ();
+		public void notify_deselected ();
+		public void notify_selected ();
+		public void preferred_size (Gtk.Requisition req);
+		public void set_default_position (Gdl.DockObject reference);
+		public virtual void set_orientation (Gtk.Orientation orientation);
+		public void set_tablabel (Gtk.Widget tablabel);
+		public void show_grip ();
+		public void show_item ();
+		public void unbind ();
+		public void unlock ();
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public DockItem.with_pixbuf_icon (string name, string long_name, Gdk.Pixbuf pixbuf_icon, Gdl.DockItemBehavior behavior);
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public DockItem.with_stock (string name, string long_name, string stock_id, Gdl.DockItemBehavior behavior);
+		[NoAccessorMethod]
+		public Gdl.DockItemBehavior behavior { get; set; }
+		[NoAccessorMethod]
+		public bool locked { get; set; }
+		[NoAccessorMethod]
+		public Gtk.Orientation orientation { get; set construct; }
+		[NoAccessorMethod]
+		public int preferred_height { get; set; }
+		[NoAccessorMethod]
+		public int preferred_width { get; set; }
+		[NoAccessorMethod]
+		public bool resize { get; set; }
+		public signal void deselected ();
+		public virtual signal void dock_drag_begin ();
+		public virtual signal void dock_drag_end (bool cancelled);
+		public virtual signal void dock_drag_motion (int x, int y);
+		public signal void selected ();
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", type_id = "gdl_dock_item_button_image_get_type ()")]
+	public class DockItemButtonImage : Gtk.Widget, Atk.Implementor, Gtk.Buildable {
+		public Gdl.DockItemButtonImageType image_type;
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public DockItemButtonImage (Gdl.DockItemButtonImageType image_type);
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", type_id = "gdl_dock_item_grip_get_type ()")]
+	public class DockItemGrip : Gtk.Container, Atk.Implementor, Gtk.Buildable {
+		public weak Gdk.Window title_window;
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public DockItemGrip (Gdl.DockItem item);
+		public void hide_handle ();
+		public void set_label (Gtk.Widget label);
+		public void show_handle ();
+		public Gdl.DockItem item { construct; }
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", type_id = "gdl_dock_layout_get_type ()")]
+	public class DockLayout : GLib.Object {
+		[CCode (has_construct_function = false)]
+		public DockLayout (Gdl.Dock dock);
+		public void attach (Gdl.DockMaster master);
+		public void delete_layout (string name);
+		public bool is_dirty ();
+		public bool load_from_file (string filename);
+		public bool load_layout (string name);
+		public void save_layout (string name);
+		public bool save_to_file (string filename);
+		[NoAccessorMethod]
+		public bool dirty { get; }
+		[NoAccessorMethod]
+		public Gdl.DockMaster master { owned get; set; }
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", type_id = "gdl_dock_master_get_type ()")]
+	public class DockMaster : GLib.Object {
+		public weak Gdl.DockObject controller;
+		public int dock_number;
+		public weak GLib.HashTable<void*,void*> dock_objects;
+		public weak GLib.List<void*> toplevel_docks;
+		[CCode (has_construct_function = false)]
+		protected DockMaster ();
+		public void add (Gdl.DockObject object);
+		public void remove (Gdl.DockObject object);
+		public void set_controller (Gdl.DockObject new_controller);
+		[NoAccessorMethod]
+		public string default_title { owned get; set; }
+		[NoAccessorMethod]
+		public int locked { get; set; }
+		[NoAccessorMethod]
+		public Gdl.SwitcherStyle switcher_style { get; set; }
+		public virtual signal void layout_changed ();
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", type_id = "gdl_dock_notebook_get_type ()")]
+	public class DockNotebook : Gdl.DockItem, Atk.Implementor, Gtk.Buildable {
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public DockNotebook ();
+		[NoAccessorMethod]
+		public int page { get; set; }
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", type_id = "gdl_dock_object_get_type ()")]
+	public class DockObject : Gtk.Container, Atk.Implementor, Gtk.Buildable {
+		public Gdl.DockObjectFlags flags;
+		public int freeze_count;
+		public bool reduce_pending;
+		[CCode (has_construct_function = false)]
+		protected DockObject ();
+		public void bind (GLib.Object master);
+		public virtual bool child_placement (Gdl.DockObject child, Gdl.DockPlacement placement);
+		public virtual bool dock_request (int x, int y, Gdl.DockRequest request);
+		public void freeze ();
+		public bool is_bound ();
+		public bool is_compound ();
+		public static unowned string nick_from_type (GLib.Type type);
+		public virtual void present (Gdl.DockObject child);
+		public virtual void reduce ();
+		public virtual bool reorder (Gdl.DockObject child, Gdl.DockPlacement new_position, GLib.Value other_data);
+		public static GLib.Type set_type_for_nick (string nick, GLib.Type type);
+		public void thaw ();
+		public static GLib.Type type_from_nick (string nick);
+		public void unbind ();
+		[NoAccessorMethod]
+		public string long_name { owned get; set construct; }
+		[NoAccessorMethod]
+		public Gdl.DockMaster master { owned get; set construct; }
+		[NoAccessorMethod]
+		public string name { owned get; construct; }
+		[NoAccessorMethod]
+		public void* pixbuf_icon { get; set; }
+		[NoAccessorMethod]
+		public string stock_id { owned get; set construct; }
+		[HasEmitter]
+		public virtual signal void detach (bool recursive);
+		[HasEmitter]
+		public virtual signal void dock (Gdl.DockObject requestor, Gdl.DockPlacement position, GLib.Value other_data);
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", type_id = "gdl_dock_paned_get_type ()")]
+	public class DockPaned : Gdl.DockItem, Atk.Implementor, Gtk.Buildable {
+		public bool position_changed;
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public DockPaned (Gtk.Orientation orientation);
+		[NoAccessorMethod]
+		public uint position { get; set; }
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", type_id = "gdl_dock_param_get_type ()")]
+	public class DockParam {
+		[CCode (has_construct_function = false)]
+		protected DockParam ();
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", type_id = "gdl_dock_placeholder_get_type ()")]
+	public class DockPlaceholder : Gdl.DockObject, Atk.Implementor, Gtk.Buildable {
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public DockPlaceholder (string name, Gdl.DockObject object, Gdl.DockPlacement position, bool sticky);
+		public void attach (Gdl.DockObject object);
+		[NoAccessorMethod]
+		public bool floating { get; construct; }
+		[NoAccessorMethod]
+		public int floatx { get; construct; }
+		[NoAccessorMethod]
+		public int floaty { get; construct; }
+		[NoAccessorMethod]
+		public int height { get; set construct; }
+		[NoAccessorMethod]
+		public Gdl.DockObject host { owned get; set; }
+		[NoAccessorMethod]
+		public Gdl.DockPlacement next_placement { get; set; }
+		[NoAccessorMethod]
+		public bool sticky { get; construct; }
+		[NoAccessorMethod]
+		public int width { get; set construct; }
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", type_id = "gdl_dock_tablabel_get_type ()")]
+	public class DockTablabel : Gtk.Bin, Atk.Implementor, Gtk.Buildable {
+		public bool active;
+		public uint drag_handle_size;
+		public Gdk.EventButton drag_start_event;
+		public weak Gdk.Window event_window;
+		public bool pre_drag;
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public DockTablabel (Gdl.DockItem item);
+		public void activate ();
+		public void deactivate ();
+		[NoAccessorMethod]
+		public Gdl.DockItem item { owned get; set; }
+		public virtual signal void button_pressed_handle (Gdk.Event event);
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", type_id = "gdl_preview_window_get_type ()")]
+	public class PreviewWindow : Gtk.Window, Atk.Implementor, Gtk.Buildable {
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public PreviewWindow ();
+		public void update (Gdk.Rectangle rect);
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", type_id = "gdl_switcher_get_type ()")]
+	public class Switcher : Gtk.Notebook, Atk.Implementor, Gtk.Buildable {
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public Switcher ();
+		public int insert_page (Gtk.Widget page, Gtk.Widget tab_widget, string label, string tooltips, string stock_id, Gdk.Pixbuf pixbuf_icon, int position);
+		[NoAccessorMethod]
+		public Gdl.SwitcherStyle switcher_style { get; set; }
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", has_type_id = false)]
+	public struct DockRequest {
+		public weak Gdl.DockObject applicant;
+		public weak Gdl.DockObject target;
+		public Gdl.DockPlacement position;
+		public Cairo.RectangleInt rect;
+		public GLib.Value extra;
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", cprefix = "GDL_DOCK_BAR_")]
+	public enum DockBarStyle {
+		ICONS,
+		TEXT,
+		BOTH,
+		AUTO
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", cprefix = "GDL_DOCK_ITEM_BEH_")]
+	[Flags]
+	public enum DockItemBehavior {
+		NORMAL,
+		NEVER_FLOATING,
+		NEVER_VERTICAL,
+		NEVER_HORIZONTAL,
+		LOCKED,
+		CANT_DOCK_TOP,
+		CANT_DOCK_BOTTOM,
+		CANT_DOCK_LEFT,
+		CANT_DOCK_RIGHT,
+		CANT_DOCK_CENTER,
+		CANT_CLOSE,
+		CANT_ICONIFY,
+		NO_GRIP
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", cprefix = "GDL_DOCK_ITEM_BUTTON_IMAGE_")]
+	public enum DockItemButtonImageType {
+		CLOSE,
+		ICONIFY
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", cprefix = "GDL_DOCK_")]
+	[Flags]
+	public enum DockItemFlags {
+		IN_DRAG,
+		IN_PREDRAG,
+		ICONIFIED,
+		USER_ACTION
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", cprefix = "GDL_DOCK_")]
+	[Flags]
+	public enum DockObjectFlags {
+		AUTOMATIC,
+		ATTACHED,
+		IN_REFLOW,
+		IN_DETACH
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", cprefix = "GDL_DOCK_PARAM_")]
+	[Flags]
+	public enum DockParamFlags {
+		EXPORT,
+		AFTER
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", cprefix = "GDL_DOCK_")]
+	public enum DockPlacement {
+		NONE,
+		TOP,
+		BOTTOM,
+		RIGHT,
+		LEFT,
+		CENTER,
+		FLOATING
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", cprefix = "GDL_SWITCHER_STYLE_")]
+	public enum SwitcherStyle {
+		TEXT,
+		ICON,
+		BOTH,
+		TOOLBAR,
+		TABS,
+		NONE
+	}
+	[CCode (cheader_filename = "gdl/gdl.h", cname = "GDL_DOCK_MASTER_PROPERTY")]
+	public const string DOCK_MASTER_PROPERTY;
+	[CCode (cheader_filename = "gdl/gdl.h", cname = "GDL_DOCK_NAME_PROPERTY")]
+	public const string DOCK_NAME_PROPERTY;
+	[CCode (cheader_filename = "gdl/gdl.h", cname = "GDL_DOCK_OBJECT_FLAGS_SHIFT")]
+	public const int DOCK_OBJECT_FLAGS_SHIFT;
+	[CCode (cheader_filename = "gdl/gdl.h")]
+	public static string gettext (string msgid);
+	[CCode (cheader_filename = "gdl/gdl.h")]
+	public static void marshal_VOID__INT_INT (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data);
+	[CCode (cheader_filename = "gdl/gdl.h")]
+	public static void marshal_VOID__OBJECT_ENUM_BOXED (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data);
+	[CCode (cheader_filename = "gdl/gdl.h")]
+	public static void marshal_VOID__UINT_UINT (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data);
+}
diff --git a/vapi/gio-2.0.vapi b/vapi/gio-2.0.vapi
index 601b3c5..2744269 100644
--- a/vapi/gio-2.0.vapi
+++ b/vapi/gio-2.0.vapi
@@ -12,17 +12,17 @@ namespace GLib {
 		[CCode (cheader_filename = "gio/gio.h")]
 		public static GLib.DBusConnection get_sync (GLib.BusType bus_type, GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		[CCode (cheader_filename = "gio/gio.h", cname = "g_bus_own_name_with_closures")]
-		public static uint own_name (GLib.BusType bus_type, string name, GLib.BusNameOwnerFlags flags, [CCode (type = "GClosure*")] owned GLib.BusAcquiredCallback? bus_acquired_handler = null, [CCode (type = "GClosure*")] owned GLib.BusNameAcquiredCallback? name_acquired_handler = null, [CCode (type = "GClosure*")] owned GLib.BusNameLostCallback? name_lost_handler = null);
+		public static uint own_name (GLib.BusType bus_type, string name, GLib.BusNameOwnerFlags flags, [CCode (type = "GClosure*")] owned GLib.BusAcquiredCallback? bus_acquired_closure = null, [CCode (type = "GClosure*")] owned GLib.BusNameAcquiredCallback? name_acquired_closure = null, [CCode (type = "GClosure*")] owned GLib.BusNameLostCallback? name_lost_closure = null);
 		[CCode (cheader_filename = "gio/gio.h", cname = "g_bus_own_name_on_connection_with_closures")]
-		public static uint own_name_on_connection (GLib.DBusConnection connection, string name, GLib.BusNameOwnerFlags flags, [CCode (type = "GClosure*")] owned GLib.BusNameAcquiredCallback? name_acquired_handler = null, [CCode (type = "GClosure*")] owned GLib.BusNameLostCallback? name_lost_handler = null);
+		public static uint own_name_on_connection (GLib.DBusConnection connection, string name, GLib.BusNameOwnerFlags flags, [CCode (type = "GClosure*")] owned GLib.BusNameAcquiredCallback? name_acquired_closure = null, [CCode (type = "GClosure*")] owned GLib.BusNameLostCallback? name_lost_closure = null);
 		[CCode (cheader_filename = "gio/gio.h")]
 		public static void unown_name (uint owner_id);
 		[CCode (cheader_filename = "gio/gio.h")]
 		public static void unwatch_name (uint watcher_id);
 		[CCode (cheader_filename = "gio/gio.h", cname = "g_bus_watch_name_with_closures")]
-		public static uint watch_name (GLib.BusType bus_type, string name, GLib.BusNameWatcherFlags flags, [CCode (type = "GClosure*")] owned GLib.BusNameAppearedCallback? name_appeared_handler, [CCode (type = "GClosure*")] owned GLib.BusNameVanishedCallback? name_vanished_handler);
+		public static uint watch_name (GLib.BusType bus_type, string name, GLib.BusNameWatcherFlags flags, [CCode (type = "GClosure*")] owned GLib.BusNameAppearedCallback? name_appeared_closure = null, [CCode (type = "GClosure*")] owned GLib.BusNameVanishedCallback? name_vanished_closure = null);
 		[CCode (cheader_filename = "gio/gio.h", cname = "g_bus_watch_name_on_connection_with_closures")]
-		public static uint watch_name_on_connection (GLib.DBusConnection connection, string name, GLib.BusNameWatcherFlags flags, [CCode (type = "GClosure*")] owned GLib.BusNameAppearedCallback? name_appeared_handler, [CCode (type = "GClosure*")] owned GLib.BusNameVanishedCallback? name_vanished_handler);
+		public static uint watch_name_on_connection (GLib.DBusConnection connection, string name, GLib.BusNameWatcherFlags flags, [CCode (type = "GClosure*")] owned GLib.BusNameAppearedCallback? name_appeared_closure = null, [CCode (type = "GClosure*")] owned GLib.BusNameVanishedCallback? name_vanished_closure = null);
 	}
 	namespace ContentType {
 		[CCode (cheader_filename = "gio/gio.h")]
@@ -30,43 +30,232 @@ namespace GLib {
 		[CCode (cheader_filename = "gio/gio.h")]
 		public static bool equals (string type1, string type2);
 		[CCode (cheader_filename = "gio/gio.h")]
-		public static string from_mime_type (string mime_type);
+		public static string? from_mime_type (string mime_type);
 		[CCode (cheader_filename = "gio/gio.h")]
 		public static string get_description (string type);
 		[CCode (cheader_filename = "gio/gio.h")]
 		public static GLib.Icon get_icon (string type);
 		[CCode (cheader_filename = "gio/gio.h")]
-		public static string get_mime_type (string type);
+		public static string? get_mime_type (string type);
 		[CCode (cheader_filename = "gio/gio.h")]
-		public static string guess (string? filename, uchar[]? data, out bool result_uncertain);
+		public static string guess (string? filename, [CCode (array_length_cname = "data_size", array_length_pos = 2.5, array_length_type = "gsize")] uint8[]? data, out bool result_uncertain);
 		[CCode (array_length = false, array_null_terminated = true, cheader_filename = "gio/gio.h")]
 		public static string[] guess_for_tree (GLib.File root);
 		[CCode (cheader_filename = "gio/gio.h")]
 		public static bool is_a (string type, string supertype);
 		[CCode (cheader_filename = "gio/gio.h")]
 		public static bool is_unknown (string type);
+		[CCode (cheader_filename = "gio/gio.h", cname = "g_content_types_get_registered")]
+		public static GLib.List<string> list_registered ();
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	[Compact]
-	public class ActionEntry {
-		public weak GLib.Callback activate;
-		public weak GLib.Callback change_state;
-		public weak string name;
-		[CCode (array_length = false)]
-		public weak size_t[] padding;
-		public weak string parameter_type;
-		public weak string state;
-	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	namespace DBus {
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static async GLib.IOStream address_get_stream (string address, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static GLib.IOStream address_get_stream_sync (string address, string out_guid, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static unowned string annotation_info_lookup ([CCode (array_length = false, array_null_terminated = true)] GLib.DBusAnnotationInfo[] annotations, string name);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static string generate_guid ();
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static GLib.Variant gvalue_to_gvariant (GLib.Value gvalue, GLib.VariantType type);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static void gvariant_to_gvalue (GLib.Variant value, GLib.Value out_gvalue);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static bool is_address (string string);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static bool is_guid (string string);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static bool is_interface_name (string string);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static bool is_member_name (string string);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static bool is_name (string string);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static bool is_supported_address (string string) throws GLib.Error;
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static bool is_unique_name (string string);
+	}
+	namespace FileAttribute {
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE")]
+		public const string ACCESS_CAN_DELETE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE")]
+		public const string ACCESS_CAN_EXECUTE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_ACCESS_CAN_READ")]
+		public const string ACCESS_CAN_READ;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME")]
+		public const string ACCESS_CAN_RENAME;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH")]
+		public const string ACCESS_CAN_TRASH;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE")]
+		public const string ACCESS_CAN_WRITE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_DOS_IS_ARCHIVE")]
+		public const string DOS_IS_ARCHIVE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_DOS_IS_SYSTEM")]
+		public const string DOS_IS_SYSTEM;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_ETAG_VALUE")]
+		public const string ETAG_VALUE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_FILESYSTEM_FREE")]
+		public const string FILESYSTEM_FREE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_FILESYSTEM_READONLY")]
+		public const string FILESYSTEM_READONLY;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_FILESYSTEM_SIZE")]
+		public const string FILESYSTEM_SIZE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_FILESYSTEM_TYPE")]
+		public const string FILESYSTEM_TYPE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_FILESYSTEM_USED")]
+		public const string FILESYSTEM_USED;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW")]
+		public const string FILESYSTEM_USE_PREVIEW;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_GVFS_BACKEND")]
+		public const string GVFS_BACKEND;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_ID_FILE")]
+		public const string ID_FILE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_ID_FILESYSTEM")]
+		public const string ID_FILESYSTEM;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT")]
+		public const string MOUNTABLE_CAN_EJECT;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT")]
+		public const string MOUNTABLE_CAN_MOUNT;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_MOUNTABLE_CAN_POLL")]
+		public const string MOUNTABLE_CAN_POLL;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START")]
+		public const string MOUNTABLE_CAN_START;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START_DEGRADED")]
+		public const string MOUNTABLE_CAN_START_DEGRADED;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_MOUNTABLE_CAN_STOP")]
+		public const string MOUNTABLE_CAN_STOP;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT")]
+		public const string MOUNTABLE_CAN_UNMOUNT;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI")]
+		public const string MOUNTABLE_HAL_UDI;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC")]
+		public const string MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_MOUNTABLE_START_STOP_TYPE")]
+		public const string MOUNTABLE_START_STOP_TYPE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE")]
+		public const string MOUNTABLE_UNIX_DEVICE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE")]
+		public const string MOUNTABLE_UNIX_DEVICE_FILE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_OWNER_GROUP")]
+		public const string OWNER_GROUP;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_OWNER_USER")]
+		public const string OWNER_USER;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_OWNER_USER_REAL")]
+		public const string OWNER_USER_REAL;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_PREVIEW_ICON")]
+		public const string PREVIEW_ICON;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_SELINUX_CONTEXT")]
+		public const string SELINUX_CONTEXT;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE")]
+		public const string STANDARD_ALLOCATED_SIZE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE")]
+		public const string STANDARD_CONTENT_TYPE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_COPY_NAME")]
+		public const string STANDARD_COPY_NAME;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_DESCRIPTION")]
+		public const string STANDARD_DESCRIPTION;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME")]
+		public const string STANDARD_DISPLAY_NAME;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME")]
+		public const string STANDARD_EDIT_NAME;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE")]
+		public const string STANDARD_FAST_CONTENT_TYPE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_ICON")]
+		public const string STANDARD_ICON;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP")]
+		public const string STANDARD_IS_BACKUP;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN")]
+		public const string STANDARD_IS_HIDDEN;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK")]
+		public const string STANDARD_IS_SYMLINK;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL")]
+		public const string STANDARD_IS_VIRTUAL;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_NAME")]
+		public const string STANDARD_NAME;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_SIZE")]
+		public const string STANDARD_SIZE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_SORT_ORDER")]
+		public const string STANDARD_SORT_ORDER;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET")]
+		public const string STANDARD_SYMLINK_TARGET;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_TARGET_URI")]
+		public const string STANDARD_TARGET_URI;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_STANDARD_TYPE")]
+		public const string STANDARD_TYPE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_THUMBNAILING_FAILED")]
+		public const string THUMBNAILING_FAILED;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_THUMBNAIL_PATH")]
+		public const string THUMBNAIL_PATH;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_TIME_ACCESS")]
+		public const string TIME_ACCESS;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_TIME_ACCESS_USEC")]
+		public const string TIME_ACCESS_USEC;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_TIME_CHANGED")]
+		public const string TIME_CHANGED;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_TIME_CHANGED_USEC")]
+		public const string TIME_CHANGED_USEC;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_TIME_CREATED")]
+		public const string TIME_CREATED;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_TIME_CREATED_USEC")]
+		public const string TIME_CREATED_USEC;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_TIME_MODIFIED")]
+		public const string TIME_MODIFIED;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC")]
+		public const string TIME_MODIFIED_USEC;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_TRASH_DELETION_DATE")]
+		public const string TRASH_DELETION_DATE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_TRASH_ITEM_COUNT")]
+		public const string TRASH_ITEM_COUNT;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_TRASH_ORIG_PATH")]
+		public const string TRASH_ORIG_PATH;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_UNIX_BLOCKS")]
+		public const string UNIX_BLOCKS;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_UNIX_BLOCK_SIZE")]
+		public const string UNIX_BLOCK_SIZE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_UNIX_DEVICE")]
+		public const string UNIX_DEVICE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_UNIX_GID")]
+		public const string UNIX_GID;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_UNIX_INODE")]
+		public const string UNIX_INODE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT")]
+		public const string UNIX_IS_MOUNTPOINT;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_UNIX_MODE")]
+		public const string UNIX_MODE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_UNIX_NLINK")]
+		public const string UNIX_NLINK;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_UNIX_RDEV")]
+		public const string UNIX_RDEV;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_FILE_ATTRIBUTE_UNIX_UID")]
+		public const string UNIX_UID;
+	}
+	namespace VolumeIdentifier {
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_VOLUME_IDENTIFIER_KIND_HAL_UDI")]
+		public const string HAL_UDI;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_VOLUME_IDENTIFIER_KIND_LABEL")]
+		public const string LABEL;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_VOLUME_IDENTIFIER_KIND_NFS_MOUNT")]
+		public const string NFS_MOUNT;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE")]
+		public const string UNIX_DEVICE;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_VOLUME_IDENTIFIER_KIND_UUID")]
+		public const string UUID;
+	}
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_app_launch_context_get_type ()")]
 	public class AppLaunchContext : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public AppLaunchContext ();
 		public virtual string get_display (GLib.AppInfo info, GLib.List<GLib.File> files);
+		[CCode (array_length = false, array_null_terminated = true)]
+		public string[] get_environment ();
 		public virtual string get_startup_notify_id (GLib.AppInfo info, GLib.List<GLib.File> files);
 		public virtual void launch_failed (string startup_notify_id);
+		public void setenv (string variable, string value);
+		public void unsetenv (string variable);
 	}
-	[CCode (cheader_filename = "gio/gio.h", cname = "GApplication")]
-	public class Application : GLib.Object, GLib.ActionGroup {
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_application_get_type ()")]
+	public class Application : GLib.Object, GLib.ActionGroup, GLib.ActionMap {
 		[CCode (has_construct_function = false)]
 		public Application (string application_id, GLib.ApplicationFlags flags);
 		[NoWrapper]
@@ -75,7 +264,12 @@ namespace GLib {
 		public virtual void after_emit (GLib.Variant platform_data);
 		[NoWrapper]
 		public virtual void before_emit (GLib.Variant platform_data);
+		[NoWrapper]
+		public virtual bool dbus_register (GLib.DBusConnection connection, string object_path) throws GLib.Error;
+		[NoWrapper]
+		public virtual void dbus_unregister (GLib.DBusConnection connection, string object_path);
 		public unowned string get_application_id ();
+		public static unowned GLib.Application get_default ();
 		public GLib.ApplicationFlags get_flags ();
 		public uint get_inactivity_timeout ();
 		public bool get_is_registered ();
@@ -83,18 +277,17 @@ namespace GLib {
 		public void hold ();
 		public static bool id_is_valid (string application_id);
 		[NoWrapper]
-		public virtual bool local_command_line ([CCode (array_length = false, array_null_terminated = true)] ref unowned string[] arguments, out int exit_status);
-		[CCode (cname = "g_application_quit_with_data")]
-		public bool quit (GLib.Variant? platform_data = null);
+		public virtual bool local_command_line ([CCode (array_length = false, type = "gchar***")] ref unowned string[] arguments, out int exit_status);
 		[NoWrapper]
 		public virtual void quit_mainloop ();
 		public bool register (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public void release ();
-		public int run ([CCode (array_length_pos = 0.9)] string[]? argv = null);
+		public int run ([CCode (array_length_cname = "argc", array_length_pos = 0.5)] string[]? argv = null);
 		[NoWrapper]
 		public virtual void run_mainloop ();
-		public void set_action_group (GLib.ActionGroup action_group);
+		public void set_action_group (GLib.ActionGroup? action_group);
 		public void set_application_id (string application_id);
+		public void set_default ();
 		public void set_flags (GLib.ApplicationFlags flags);
 		public void set_inactivity_timeout (uint inactivity_timeout);
 		public GLib.ActionGroup action_group { set; }
@@ -107,16 +300,19 @@ namespace GLib {
 		public virtual signal void activate ();
 		public virtual signal int command_line (GLib.ApplicationCommandLine command_line);
 		[HasEmitter]
-		public virtual signal void open (GLib.File[] files, string hint);
+		public virtual signal void open ([CCode (array_length_cname = "n_files", array_length_pos = 1.5)] GLib.File[] files, string hint);
+		public virtual signal void shutdown ();
 		public virtual signal void startup ();
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_application_command_line_get_type ()")]
 	public class ApplicationCommandLine : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected ApplicationCommandLine ();
+		[CCode (array_length_pos = 0.1)]
 		public string[] get_arguments ();
 		public unowned string get_cwd ();
-		public unowned string get_environ ();
+		[CCode (array_length = false, array_null_terminated = true)]
+		public unowned string[] get_environ ();
 		public int get_exit_status ();
 		public bool get_is_remote ();
 		public GLib.Variant? get_platform_data ();
@@ -134,7 +330,7 @@ namespace GLib {
 		public bool is_remote { get; }
 		public GLib.Variant platform_data { construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_buffered_input_stream_get_type ()")]
 	public class BufferedInputStream : GLib.FilterInputStream {
 		[CCode (has_construct_function = false, type = "GInputStream*")]
 		public BufferedInputStream (GLib.InputStream base_stream);
@@ -142,8 +338,8 @@ namespace GLib {
 		public virtual async ssize_t fill_async (ssize_t count, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public size_t get_available ();
 		public size_t get_buffer_size ();
-		public size_t peek ([CCode (array_length_pos = 2.9, array_length_type = "gsize")] uint8[] buffer, size_t offset = 0);
-		[CCode (array_length_type = "gsize")]
+		public size_t peek ([CCode (array_length_cname = "count", array_length_pos = 2.1, array_length_type = "gsize")] uint8[] buffer, size_t offset = 0);
+		[CCode (array_length_pos = 0.1, array_length_type = "gsize")]
 		public unowned uint8[] peek_buffer ();
 		public int read_byte (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public void set_buffer_size (size_t size);
@@ -151,7 +347,7 @@ namespace GLib {
 		public BufferedInputStream.sized (GLib.InputStream base_stream, size_t size);
 		public uint buffer_size { get; set construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_buffered_output_stream_get_type ()")]
 	public class BufferedOutputStream : GLib.FilterOutputStream {
 		[CCode (has_construct_function = false, type = "GOutputStream*")]
 		public BufferedOutputStream (GLib.OutputStream base_stream);
@@ -169,7 +365,7 @@ namespace GLib {
 		[CCode (has_construct_function = false)]
 		public Cancellable ();
 		public void cancel ();
-		public ulong connect ([CCode (type = "GCallback*")] owned GLib.Func<GLib.Cancellable> callback);
+		public ulong connect ([CCode (type = "GCallback")] owned GLib.Func<GLib.Cancellable> callback);
 		public void disconnect (ulong handler_id);
 		public static unowned GLib.Cancellable? get_current ();
 		public int get_fd ();
@@ -180,10 +376,16 @@ namespace GLib {
 		public void release_fd ();
 		public void reset ();
 		public bool set_error_if_cancelled () throws GLib.IOError;
-		public unowned GLib.TimeoutSource source_new ();
+		public GLib.CancellableSource source_new ();
 		public virtual signal void cancelled ();
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", cname = "GSource", ref_function = "g_source_ref", unref_function = "g_source_unref")]
+	[Compact]
+	public class CancellableSource : GLib.Source {
+		[CCode (cname = "g_source_set_callback")]
+		public void set_callback ([CCode (type = "GSourceFunc")] owned GLib.CancellableSourceFunc func);
+	}
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_charset_converter_get_type ()")]
 	public class CharsetConverter : GLib.Object, GLib.Converter, GLib.Initable {
 		[CCode (has_construct_function = false)]
 		public CharsetConverter (string to_charset, string from_charset) throws GLib.Error;
@@ -196,21 +398,21 @@ namespace GLib {
 		public string to_charset { owned get; construct; }
 		public bool use_fallback { get; set construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_converter_input_stream_get_type ()")]
 	public class ConverterInputStream : GLib.FilterInputStream {
 		[CCode (has_construct_function = false, type = "GInputStream*")]
 		public ConverterInputStream (GLib.InputStream base_stream, GLib.Converter converter);
 		public unowned GLib.Converter get_converter ();
 		public GLib.Converter converter { get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_converter_output_stream_get_type ()")]
 	public class ConverterOutputStream : GLib.FilterOutputStream {
 		[CCode (has_construct_function = false, type = "GOutputStream*")]
 		public ConverterOutputStream (GLib.OutputStream base_stream, GLib.Converter converter);
 		public unowned GLib.Converter get_converter ();
 		public GLib.Converter converter { get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_credentials_get_type ()")]
 	public class Credentials : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public Credentials ();
@@ -219,108 +421,110 @@ namespace GLib {
 		public bool is_same_user (GLib.Credentials other_credentials) throws GLib.Error;
 		public void set_native (GLib.CredentialsType native_type, void* native);
 		public bool set_unix_user (uint uid) throws GLib.Error;
-		public unowned string to_string ();
+		public string to_string ();
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	[Compact]
-	public class CredentialsClass {
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_dbus_action_group_get_type ()")]
+	public class DBusActionGroup : GLib.Object, GLib.ActionGroup, GLib.RemoteActionGroup {
+		[CCode (has_construct_function = false)]
+		protected DBusActionGroup ();
+		public static GLib.DBusActionGroup @get (GLib.DBusConnection connection, string bus_name, string object_path);
 	}
 	[CCode (cheader_filename = "gio/gio.h", ref_function = "g_dbus_annotation_info_ref", type_id = "g_dbus_annotation_info_get_type ()", unref_function = "g_dbus_annotation_info_unref")]
 	[Compact]
 	public class DBusAnnotationInfo {
 		[CCode (array_length = false, array_null_terminated = true)]
-		public weak GLib.DBusAnnotationInfo[] annotations;
-		public weak string key;
+		public GLib.DBusAnnotationInfo[] annotations;
+		public string key;
 		public int ref_count;
-		public weak string value;
-		public unowned string lookup (string name);
+		public string value;
 	}
 	[CCode (cheader_filename = "gio/gio.h", ref_function = "g_dbus_arg_info_ref", type_id = "g_dbus_arg_info_get_type ()", unref_function = "g_dbus_arg_info_unref")]
 	[Compact]
 	public class DBusArgInfo {
 		[CCode (array_length = false, array_null_terminated = true)]
-		public weak GLib.DBusAnnotationInfo[] annotations;
-		public weak string name;
+		public GLib.DBusAnnotationInfo[] annotations;
+		public string name;
 		public int ref_count;
-		public weak string signature;
+		public string signature;
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_dbus_auth_observer_get_type ()")]
 	public class DBusAuthObserver : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public DBusAuthObserver ();
-		[HasEmitter]
-		public virtual signal bool authorize_authenticated_peer (GLib.IOStream p0, GLib.Credentials p1);
+		public virtual signal bool authorize_authenticated_peer (GLib.IOStream stream, GLib.Credentials credentials);
 	}
-	[CCode (cheader_filename = "gio/gio.h", cname = "GDBusConnection")]
-	public class DBusConnection : GLib.Object, GLib.Initable, GLib.AsyncInitable {
-		[CCode (has_construct_function = false, type = "void")]
-		public async DBusConnection (GLib.IOStream stream, string guid, GLib.DBusConnectionFlags flags, GLib.DBusAuthObserver? observer = null, GLib.Cancellable? cancellable = null) throws GLib.Error;
+	[CCode (cheader_filename = "gio/gio.h")]
+	public class DBusConnection : GLib.Object, GLib.AsyncInitable, GLib.Initable, GLib.AsyncInitable, GLib.Initable {
+		[CCode (has_construct_function = false)]
+		protected DBusConnection ();
 		public uint add_filter (owned GLib.DBusMessageFilterFunction filter_function);
-		public async GLib.Variant call (string bus_name, string object_path, string interface_name, string method_name, GLib.Variant? parameters, GLib.VariantType? reply_type, GLib.DBusCallFlags flags, int timeout_msec, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public async GLib.Variant call (string? bus_name, string object_path, string interface_name, string method_name, GLib.Variant? parameters, GLib.VariantType? reply_type, GLib.DBusCallFlags flags, int timeout_msec, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public GLib.Variant call_sync (string bus_name, string object_path, string interface_name, string method_name, GLib.Variant? parameters, GLib.VariantType? reply_type, GLib.DBusCallFlags flags, int timeout_msec, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public async GLib.Variant call_with_unix_fd_list (string bus_name, string object_path, string interface_name, string method_name, GLib.Variant? parameters, GLib.VariantType? reply_type, GLib.DBusCallFlags flags, int timeout_msec, GLib.UnixFDList? fd_list, GLib.Cancellable? cancellable = null, out GLib.UnixFDList? out_fd_list) throws GLib.Error;
-		public GLib.Variant call_with_unix_fd_list_sync (string bus_name, string object_path, string interface_name, string method_name, GLib.Variant? parameters, GLib.VariantType? reply_type, GLib.DBusCallFlags flags, int timeout_msec, GLib.UnixFDList? fd_list, out GLib.UnixFDList? out_fd_list, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public async GLib.Variant call_with_unix_fd_list (string? bus_name, string object_path, string interface_name, string method_name, GLib.Variant? parameters, GLib.VariantType? reply_type, GLib.DBusCallFlags flags, int timeout_msec, GLib.UnixFDList? fd_list = null, GLib.Cancellable? cancellable = null, out GLib.UnixFDList? out_fd_list = null) throws GLib.Error;
+		public GLib.Variant call_with_unix_fd_list_sync (string bus_name, string object_path, string interface_name, string method_name, GLib.Variant? parameters, GLib.VariantType? reply_type, GLib.DBusCallFlags flags, int timeout_msec, GLib.UnixFDList? fd_list = null, out GLib.UnixFDList? out_fd_list = null, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public async bool close (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public bool close_sync (GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public bool emit_signal (string? destination_bus_name, string object_path, string interface_name, string signal_name, GLib.Variant parameters) throws GLib.Error;
+		public bool emit_signal (string? destination_bus_name, string object_path, string interface_name, string signal_name, GLib.Variant? parameters) throws GLib.Error;
+		public uint export_action_group (string object_path, GLib.ActionGroup action_group) throws GLib.Error;
+		public uint export_menu_model (string object_path, GLib.MenuModel menu) throws GLib.Error;
 		public async bool flush (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public bool flush_sync (GLib.Cancellable? cancellable = null) throws GLib.Error;
-		[CCode (has_construct_function = false, type = "void")]
-		public async DBusConnection.for_address (string address, GLib.DBusConnectionFlags flags, GLib.DBusAuthObserver? observer = null, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[CCode (has_construct_function = false)]
 		public DBusConnection.for_address_sync (string address, GLib.DBusConnectionFlags flags, GLib.DBusAuthObserver? observer = null, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public GLib.DBusCapabilityFlags get_capabilities ();
 		public bool get_exit_on_close ();
 		public unowned string get_guid ();
+		public uint32 get_last_serial ();
 		public unowned GLib.Credentials get_peer_credentials ();
 		public async T get_proxy<T> (string? name, string object_path, GLib.DBusProxyFlags flags = 0, GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public T get_proxy_sync<T> (string? name, string object_path, GLib.DBusProxyFlags flags = 0, GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public unowned GLib.IOStream get_stream ();
 		public unowned string get_unique_name ();
 		public bool is_closed ();
+		[CCode (cname = "g_dbus_connection_new", finish_function = "g_dbus_connection_new_finish")]
+		public static async GLib.DBusConnection @new (GLib.IOStream stream, string guid, GLib.DBusConnectionFlags flags, GLib.DBusAuthObserver? observer = null, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[CCode (cname = "g_dbus_connection_new_for_address", finish_function = "g_dbus_connection_new_for_address_finish")]
+		public static async GLib.DBusConnection new_for_address (string address, GLib.DBusConnectionFlags flags, GLib.DBusAuthObserver? observer = null, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public uint register_object<T> (string object_path, T object) throws GLib.IOError;
-		public uint register_subtree (string object_path, GLib.DBusSubtreeVTable vtable, GLib.DBusSubtreeFlags flags, GLib.DestroyNotify user_data_free_func) throws GLib.Error;
+		public uint register_subtree (string object_path, GLib.DBusSubtreeVTable vtable, GLib.DBusSubtreeFlags flags, void* user_data, GLib.DestroyNotify user_data_free_func) throws GLib.Error;
 		public void remove_filter (uint filter_id);
 		public bool send_message (GLib.DBusMessage message, GLib.DBusSendMessageFlags flags, out uint32 out_serial) throws GLib.Error;
 		public async GLib.DBusMessage send_message_with_reply (GLib.DBusMessage message, GLib.DBusSendMessageFlags flags, int timeout_msec, uint32* out_serial = null, GLib.Cancellable? cancellable = null) throws GLib.IOError;
-		public GLib.DBusMessage send_message_with_reply_sync (GLib.DBusMessage message, GLib.DBusSendMessageFlags flags, int timeout_msec, out uint32 out_serial, GLib.Cancellable? cancellable = null) throws GLib.IOError;
+		public GLib.DBusMessage send_message_with_reply_sync (GLib.DBusMessage message, GLib.DBusSendMessageFlags flags, int timeout_msec, out uint32 out_serial = null, GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public void set_exit_on_close (bool exit_on_close);
 		public uint signal_subscribe (string? sender, string? interface_name, string? member, string? object_path, string? arg0, GLib.DBusSignalFlags flags, owned GLib.DBusSignalCallback callback);
 		public void signal_unsubscribe (uint subscription_id);
 		public void start_message_processing ();
 		[CCode (has_construct_function = false)]
-		public DBusConnection.sync (GLib.IOStream stream, string guid, GLib.DBusConnectionFlags flags, GLib.DBusAuthObserver? observer = null, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public DBusConnection.sync (GLib.IOStream stream, string? guid, GLib.DBusConnectionFlags flags, GLib.DBusAuthObserver? observer = null, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public void unexport_action_group (uint export_id);
+		public void unexport_menu_model (uint export_id);
 		public bool unregister_object (uint registration_id);
 		public bool unregister_subtree (uint registration_id);
 		public string address { construct; }
 		public GLib.DBusAuthObserver authentication_observer { construct; }
 		public GLib.DBusCapabilityFlags capabilities { get; }
+		[NoAccessorMethod]
+		public bool closed { get; }
 		public bool exit_on_close { get; set; }
 		public GLib.DBusConnectionFlags flags { construct; }
 		public string guid { get; construct; }
 		public GLib.IOStream stream { get; construct; }
 		public string unique_name { get; }
-		public virtual signal void closed (bool p0, GLib.Error p1);
-	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	[Compact]
-	public class DBusErrorEntry {
-		public weak string dbus_error_name;
-		public int error_code;
 	}
 	[CCode (cheader_filename = "gio/gio.h", ref_function = "g_dbus_interface_info_ref", type_id = "g_dbus_interface_info_get_type ()", unref_function = "g_dbus_interface_info_unref")]
 	[Compact]
 	public class DBusInterfaceInfo {
 		[CCode (array_length = false, array_null_terminated = true)]
-		public weak GLib.DBusAnnotationInfo[] annotations;
+		public GLib.DBusAnnotationInfo[] annotations;
 		[CCode (array_length = false, array_null_terminated = true)]
-		public weak GLib.DBusMethodInfo[] methods;
-		public weak string name;
+		public GLib.DBusMethodInfo[] methods;
+		public string name;
 		[CCode (array_length = false, array_null_terminated = true)]
-		public weak GLib.DBusPropertyInfo[] properties;
+		public GLib.DBusPropertyInfo[] properties;
 		public int ref_count;
 		[CCode (array_length = false, array_null_terminated = true)]
-		public weak GLib.DBusSignalInfo[] signals;
+		public GLib.DBusSignalInfo[] signals;
 		public void cache_build ();
 		public void cache_release ();
 		public void generate_xml (uint indent, GLib.StringBuilder string_builder);
@@ -328,48 +532,50 @@ namespace GLib {
 		public unowned GLib.DBusPropertyInfo lookup_property (string name);
 		public unowned GLib.DBusSignalInfo lookup_signal (string name);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	public class DBusInterfaceSkeleton : GLib.Object, GLib.DBusInterface {
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_dbus_interface_skeleton_get_type ()")]
+	public abstract class DBusInterfaceSkeleton : GLib.Object, GLib.DBusInterface {
 		[CCode (has_construct_function = false)]
 		protected DBusInterfaceSkeleton ();
 		public bool export (GLib.DBusConnection connection, string object_path) throws GLib.Error;
 		public virtual void flush ();
 		public unowned GLib.DBusConnection get_connection ();
+		public GLib.List<GLib.DBusConnection> get_connections ();
 		public GLib.DBusInterfaceSkeletonFlags get_flags ();
 		public virtual unowned GLib.DBusInterfaceInfo get_info ();
 		public unowned string get_object_path ();
-		public virtual unowned GLib.Variant get_properties ();
-		public virtual unowned GLib.DBusInterfaceVTable get_vtable ();
+		public virtual GLib.Variant get_properties ();
+		public virtual GLib.DBusInterfaceVTable? get_vtable ();
+		public bool has_connection (GLib.DBusConnection connection);
 		public void set_flags (GLib.DBusInterfaceSkeletonFlags flags);
 		public void unexport ();
+		public void unexport_from_connection (GLib.DBusConnection connection);
 		[NoAccessorMethod]
 		public GLib.DBusInterfaceSkeletonFlags g_flags { get; set; }
 		public virtual signal bool g_authorize_method (GLib.DBusMethodInvocation invocation);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	[Compact]
-	public class DBusInterfaceVTable {
-		public weak GLib.DBusInterfaceGetPropertyFunc get_property;
-		public weak GLib.DBusInterfaceMethodCallFunc method_call;
-		public void* padding;
-		public weak GLib.DBusInterfaceSetPropertyFunc set_property;
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_dbus_menu_model_get_type ()")]
+	public class DBusMenuModel : GLib.MenuModel {
+		[CCode (has_construct_function = false)]
+		protected DBusMenuModel ();
+		public static GLib.DBusMenuModel @get (GLib.DBusConnection connection, string bus_name, string object_path);
 	}
 	[CCode (cheader_filename = "gio/gio.h")]
 	public class DBusMessage : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public DBusMessage ();
-		public static ssize_t bytes_needed (uchar[] blob, size_t blob_len) throws GLib.Error;
-		public unowned GLib.DBusMessage copy () throws GLib.Error;
+		public static ssize_t bytes_needed ([CCode (array_length_cname = "blob_len", array_length_pos = 1.1, array_length_type = "gsize")] uint8[] blob) throws GLib.Error;
+		public GLib.DBusMessage copy () throws GLib.Error;
 		[CCode (has_construct_function = false)]
-		public DBusMessage.from_blob (uchar[] blob, size_t blob_len, GLib.DBusCapabilityFlags capabilities) throws GLib.Error;
+		public DBusMessage.from_blob ([CCode (array_length_cname = "blob_len", array_length_pos = 1.5, array_length_type = "gsize")] uint8[] blob, GLib.DBusCapabilityFlags capabilities) throws GLib.Error;
 		public unowned string get_arg0 ();
-		public unowned GLib.Variant get_body ();
+		public GLib.Variant get_body ();
 		public GLib.DBusMessageByteOrder get_byte_order ();
 		public unowned string get_destination ();
 		public unowned string get_error_name ();
 		public GLib.DBusMessageFlags get_flags ();
-		public unowned GLib.Variant get_header (GLib.DBusMessageHeaderField header_field);
-		public unowned uchar[] get_header_fields ();
+		public GLib.Variant get_header (GLib.DBusMessageHeaderField header_field);
+		[CCode (array_length = false, array_null_terminated = true)]
+		public uchar[] get_header_fields ();
 		public unowned string get_interface ();
 		public bool get_locked ();
 		public unowned string get_member ();
@@ -385,14 +591,15 @@ namespace GLib {
 		[CCode (has_construct_function = false)]
 		public DBusMessage.method_call (string name, string path, string interface_, string method);
 		[CCode (has_construct_function = false)]
-		public DBusMessage.method_error (GLib.DBusMessage method_call_message, string error_name, string error_message_format);
+		[PrintfFormat]
+		public DBusMessage.method_error (GLib.DBusMessage method_call_message, string error_name, string error_message_format, ...);
 		[CCode (has_construct_function = false)]
 		public DBusMessage.method_error_literal (GLib.DBusMessage method_call_message, string error_name, string error_message);
 		[CCode (has_construct_function = false)]
-		public DBusMessage.method_error_valist (GLib.DBusMessage method_call_message, string error_name, string error_message_format, void* var_args);
+		public DBusMessage.method_error_valist (GLib.DBusMessage method_call_message, string error_name, string error_message_format, va_list var_args);
 		[CCode (has_construct_function = false)]
 		public DBusMessage.method_reply (GLib.DBusMessage method_call_message);
-		public unowned string print (uint indent = 0);
+		public string print (uint indent = 0);
 		public void set_body (GLib.Variant body);
 		public void set_byte_order (GLib.DBusMessageByteOrder byte_order);
 		public void set_destination (string value);
@@ -408,10 +615,11 @@ namespace GLib {
 		public void set_sender (string value);
 		public void set_serial (uint32 serial);
 		public void set_signature (string value);
-		public void set_unix_fd_list (GLib.UnixFDList fd_list);
+		public void set_unix_fd_list (GLib.UnixFDList? fd_list);
 		[CCode (has_construct_function = false)]
 		public DBusMessage  signal (string path, string interface_, string @signal);
-		public unowned uchar[] to_blob (size_t out_size, GLib.DBusCapabilityFlags capabilities) throws GLib.Error;
+		[CCode (array_length_pos = 0.5, array_length_type = "gsize")]
+		public uint8[] to_blob (GLib.DBusCapabilityFlags capabilities) throws GLib.Error;
 		public bool to_gerror () throws GLib.Error;
 		public bool locked { get; }
 	}
@@ -419,15 +627,15 @@ namespace GLib {
 	[Compact]
 	public class DBusMethodInfo {
 		[CCode (array_length = false, array_null_terminated = true)]
-		public weak GLib.DBusAnnotationInfo[] annotations;
+		public GLib.DBusAnnotationInfo[] annotations;
 		[CCode (array_length = false, array_null_terminated = true)]
-		public weak GLib.DBusArgInfo[] in_args;
-		public weak string name;
+		public GLib.DBusArgInfo[] in_args;
+		public string name;
 		[CCode (array_length = false, array_null_terminated = true)]
-		public weak GLib.DBusArgInfo[] out_args;
+		public GLib.DBusArgInfo[] out_args;
 		public int ref_count;
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_dbus_method_invocation_get_type ()")]
 	public class DBusMethodInvocation : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected DBusMethodInvocation ();
@@ -441,48 +649,46 @@ namespace GLib {
 		public unowned string get_sender ();
 		public void* get_user_data ();
 		public void return_dbus_error (string error_name, string error_message);
-		public void return_error (GLib.Quark domain, int code, string format);
+		public void return_error (GLib.Quark domain, int code, string format, ...);
 		public void return_error_literal (GLib.Quark domain, int code, string message);
-		public void return_error_valist (GLib.Quark domain, int code, string format, void* var_args);
+		public void return_error_valist (GLib.Quark domain, int code, string format, [CCode (type = "va_list")] va_list var_args);
 		public void return_gerror (GLib.Error error);
 		public void return_value (GLib.Variant? parameters);
 		public void return_value_with_unix_fd_list (GLib.Variant? parameters, GLib.UnixFDList? fd_list);
-		public void take_error (GLib.Error error);
+		public void take_error (owned GLib.Error error);
 	}
 	[CCode (cheader_filename = "gio/gio.h", ref_function = "g_dbus_node_info_ref", type_id = "g_dbus_node_info_get_type ()", unref_function = "g_dbus_node_info_unref")]
 	[Compact]
 	public class DBusNodeInfo {
 		[CCode (array_length = false, array_null_terminated = true)]
-		public weak GLib.DBusAnnotationInfo[] annotations;
+		public GLib.DBusAnnotationInfo[] annotations;
 		[CCode (array_length = false, array_null_terminated = true)]
-		public weak GLib.DBusInterfaceInfo[] interfaces;
+		public GLib.DBusInterfaceInfo[] interfaces;
 		[CCode (array_length = false, array_null_terminated = true)]
-		public weak GLib.DBusNodeInfo[] nodes;
-		public weak string path;
+		public GLib.DBusNodeInfo[] nodes;
+		public string path;
 		public int ref_count;
 		[CCode (has_construct_function = false)]
 		public DBusNodeInfo.for_xml (string xml_data) throws GLib.Error;
 		public void generate_xml (uint indent, GLib.StringBuilder string_builder);
 		public unowned GLib.DBusInterfaceInfo lookup_interface (string name);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	public class DBusObjectManagerClient : GLib.Object, GLib.Initable, GLib.AsyncInitable, GLib.DBusObjectManager {
-		[CCode (has_construct_function = false, type = "void")]
-		public DBusObjectManagerClient (GLib.DBusConnection connection, GLib.DBusObjectManagerClientFlags flags, string name, string object_path, GLib.DBusProxyTypeFunc get_proxy_type_func, void* get_proxy_type_user_data, GLib.DestroyNotify get_proxy_type_destroy_notify, GLib.Cancellable? cancellable = null, GLib.AsyncReadyCallback callback);
-		[CCode (has_construct_function = false, type = "GDBusObjectManager*")]
-		public DBusObjectManagerClient.finish (GLib.AsyncResult res) throws GLib.Error;
-		[CCode (has_construct_function = false, type = "void")]
-		public DBusObjectManagerClient.for_bus (GLib.BusType bus_type, GLib.DBusObjectManagerClientFlags flags, string name, string object_path, GLib.DBusProxyTypeFunc get_proxy_type_func, void* get_proxy_type_user_data, GLib.DestroyNotify get_proxy_type_destroy_notify, GLib.Cancellable? cancellable = null, GLib.AsyncReadyCallback callback);
-		[CCode (has_construct_function = false, type = "GDBusObjectManager*")]
-		public DBusObjectManagerClient.for_bus_finish (GLib.AsyncResult res) throws GLib.Error;
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_dbus_object_manager_client_get_type ()")]
+	public class DBusObjectManagerClient : GLib.Object, GLib.AsyncInitable, GLib.DBusObjectManager, GLib.Initable, GLib.AsyncInitable, GLib.DBusObjectManager, GLib.Initable {
+		[CCode (has_construct_function = false)]
+		protected DBusObjectManagerClient ();
 		[CCode (has_construct_function = false, type = "GDBusObjectManager*")]
-		public DBusObjectManagerClient.for_bus_sync (GLib.BusType bus_type, GLib.DBusObjectManagerClientFlags flags, string name, string object_path, GLib.DBusProxyTypeFunc get_proxy_type_func, void* get_proxy_type_user_data, GLib.DestroyNotify get_proxy_type_destroy_notify, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public DBusObjectManagerClient.for_bus_sync (GLib.BusType bus_type, GLib.DBusObjectManagerClientFlags flags, string name, string object_path, [CCode (delegate_target_pos = 5.33333, destroy_notify_pos = 5.66667)] owned GLib.DBusProxyTypeFunc get_proxy_type_func, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public unowned GLib.DBusConnection get_connection ();
 		public GLib.DBusObjectManagerClientFlags get_flags ();
 		public unowned string get_name ();
-		public unowned string get_name_owner ();
+		public string? get_name_owner ();
+		[CCode (cname = "g_dbus_object_manager_client_new", finish_function = "g_dbus_object_manager_client_new_finish")]
+		public static async GLib.DBusObjectManagerClient @new (GLib.DBusConnection connection, GLib.DBusObjectManagerClientFlags flags, string name, string object_path, [CCode (delegate_target_pos = 5.33333, destroy_notify_pos = 5.66667)] owned GLib.DBusProxyTypeFunc get_proxy_type_func, GLib.Cancellable? cancellable = null);
+		[CCode (cname = "g_dbus_object_manager_client_new_for_bus", finish_function = "g_dbus_object_manager_client_new_for_bus_finish")]
+		public static async GLib.DBusObjectManagerClient new_for_bus (GLib.BusType bus_type, GLib.DBusObjectManagerClientFlags flags, string name, string object_path, [CCode (delegate_target_pos = 5.33333, destroy_notify_pos = 5.66667)] owned GLib.DBusProxyTypeFunc get_proxy_type_func, GLib.Cancellable? cancellable = null);
 		[CCode (has_construct_function = false, type = "GDBusObjectManager*")]
-		public DBusObjectManagerClient.sync (GLib.DBusConnection connection, GLib.DBusObjectManagerClientFlags flags, string name, string object_path, GLib.DBusProxyTypeFunc get_proxy_type_func, void* get_proxy_type_user_data, GLib.DestroyNotify get_proxy_type_destroy_notify, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public DBusObjectManagerClient.sync (GLib.DBusConnection connection, GLib.DBusObjectManagerClientFlags flags, string name, string object_path, [CCode (delegate_target_pos = 5.33333, destroy_notify_pos = 5.66667)] owned GLib.DBusProxyTypeFunc get_proxy_type_func, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public GLib.BusType bus_type { construct; }
 		public GLib.DBusConnection connection { get; construct; }
 		public GLib.DBusObjectManagerClientFlags flags { get; construct; }
@@ -493,35 +699,36 @@ namespace GLib {
 		[NoAccessorMethod]
 		public void* get_proxy_type_user_data { get; construct; }
 		public string name { get; construct; }
-		public string name_owner { get; }
+		public string? name_owner { owned get; }
 		[NoAccessorMethod]
 		public string object_path { owned get; construct; }
-		public virtual signal void interface_proxy_properties_changed (GLib.DBusObjectProxy object_proxy, GLib.DBusProxy interface_proxy, GLib.Variant changed_properties, string[] invalidated_properties);
+		public virtual signal void interface_proxy_properties_changed (GLib.DBusObjectProxy object_proxy, GLib.DBusProxy interface_proxy, GLib.Variant changed_properties, [CCode (array_length = false, array_null_terminated = true)] string[] invalidated_properties);
 		public virtual signal void interface_proxy_signal (GLib.DBusObjectProxy object_proxy, GLib.DBusProxy interface_proxy, string sender_name, string signal_name, GLib.Variant parameters);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_dbus_object_manager_server_get_type ()")]
 	public class DBusObjectManagerServer : GLib.Object, GLib.DBusObjectManager {
 		[CCode (has_construct_function = false)]
 		public DBusObjectManagerServer (string object_path);
 		public void export (GLib.DBusObjectSkeleton object);
 		public void export_uniquely (GLib.DBusObjectSkeleton object);
-		public unowned GLib.DBusConnection get_connection ();
-		public void set_connection (GLib.DBusConnection connection);
+		public GLib.DBusConnection get_connection ();
+		public void set_connection (GLib.DBusConnection? connection);
 		public bool unexport (string object_path);
-		public GLib.DBusConnection connection { get; set; }
+		public GLib.DBusConnection connection { owned get; set; }
 		[NoAccessorMethod]
 		public string object_path { owned get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_dbus_object_proxy_get_type ()")]
 	public class DBusObjectProxy : GLib.Object, GLib.DBusObject {
 		[CCode (has_construct_function = false)]
 		public DBusObjectProxy (GLib.DBusConnection connection, string object_path);
 		public unowned GLib.DBusConnection get_connection ();
-		public GLib.DBusConnection connection { get; construct; }
 		[NoAccessorMethod]
-		public string object_path { owned get; construct; }
+		public GLib.DBusConnection g_connection { owned get; construct; }
+		[NoAccessorMethod]
+		public string g_object_path { owned get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_dbus_object_skeleton_get_type ()")]
 	public class DBusObjectSkeleton : GLib.Object, GLib.DBusObject {
 		[CCode (has_construct_function = false)]
 		public DBusObjectSkeleton (string object_path);
@@ -531,46 +738,49 @@ namespace GLib {
 		public void remove_interface_by_name (string interface_name);
 		public void set_object_path (string object_path);
 		[NoAccessorMethod]
-		public string object_path { owned get; set construct; }
+		public string g_object_path { owned get; set construct; }
 		public virtual signal bool authorize_method (GLib.DBusInterfaceSkeleton interface_, GLib.DBusMethodInvocation invocation);
 	}
-	[CCode (cheader_filename = "gio/gio.h", ref_function = "g_dbus_property_info_ref", type_id = "g_dbus_property_info_get_type ()", unref_function = "g_dbus_property_info_unref")]
+	[CCode (cheader_filename = "gio/gio.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "g_dbus_property_info_get_type ()")]
 	[Compact]
 	public class DBusPropertyInfo {
 		[CCode (array_length = false, array_null_terminated = true)]
-		public weak GLib.DBusAnnotationInfo[] annotations;
+		public GLib.DBusAnnotationInfo[] annotations;
 		public GLib.DBusPropertyInfoFlags flags;
-		public weak string name;
+		public string name;
 		public int ref_count;
-		public weak string signature;
+		public string signature;
 	}
 	[CCode (cheader_filename = "gio/gio.h")]
-	public class DBusProxy : GLib.Object, GLib.DBusInterface, GLib.Initable, GLib.AsyncInitable {
-		[CCode (has_construct_function = false, type = "void")]
-		public async DBusProxy (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, GLib.DBusInterfaceInfo? info, string name, string object_path, string interface_name, GLib.Cancellable? cancellable = null) throws GLib.Error;
+	public class DBusProxy : GLib.Object, GLib.AsyncInitable, GLib.DBusInterface, GLib.Initable, GLib.AsyncInitable, GLib.DBusInterface, GLib.Initable {
+		[CCode (has_construct_function = false)]
+		protected DBusProxy ();
 		public async GLib.Variant call (string method_name, GLib.Variant? parameters, GLib.DBusCallFlags flags, int timeout_msec, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public GLib.Variant call_sync (string method_name, GLib.Variant? parameters, GLib.DBusCallFlags flags, int timeout_msec, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public async GLib.Variant call_with_unix_fd_list (string method_name, GLib.Variant? parameters, GLib.DBusCallFlags flags, int timeout_msec, GLib.UnixFDList? fd_list, GLib.Cancellable? cancellable = null, out GLib.UnixFDList? out_fd_list) throws GLib.Error;
-		public GLib.Variant call_with_unix_fd_list_sync (string method_name, GLib.Variant? parameters, GLib.DBusCallFlags flags, int timeout_msec, GLib.UnixFDList? fd_list, out GLib.UnixFDList? out_fd_list, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		[CCode (has_construct_function = false, type = "void")]
-		public async DBusProxy.for_bus (GLib.BusType bus_type, GLib.DBusProxyFlags flags, GLib.DBusInterfaceInfo? info, string name, string object_path, string interface_name, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public async GLib.Variant call_with_unix_fd_list (string method_name, GLib.Variant? parameters, GLib.DBusCallFlags flags, int timeout_msec, GLib.UnixFDList? fd_list = null, GLib.Cancellable? cancellable = null, out GLib.UnixFDList? out_fd_list = null) throws GLib.Error;
+		public GLib.Variant call_with_unix_fd_list_sync (string method_name, GLib.Variant? parameters, GLib.DBusCallFlags flags, int timeout_msec, GLib.UnixFDList? fd_list = null, out GLib.UnixFDList? out_fd_list = null, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[CCode (cname = "g_dbus_proxy_new_for_bus", finish_function = "g_dbus_proxy_new_for_bus_finish")]
+		public static async GLib.DBusProxy create_for_bus (GLib.BusType bus_type, GLib.DBusProxyFlags flags, GLib.DBusInterfaceInfo? info, string name, string object_path, string interface_name, GLib.Cancellable? cancellable = null);
 		[CCode (has_construct_function = false)]
 		public DBusProxy.for_bus_sync (GLib.BusType bus_type, GLib.DBusProxyFlags flags, GLib.DBusInterfaceInfo? info, string name, string object_path, string interface_name, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public unowned GLib.Variant get_cached_property (string property_name);
-		public unowned string get_cached_property_names ();
+		public GLib.Variant get_cached_property (string property_name);
+		[CCode (array_length = false, array_null_terminated = true)]
+		public string[] get_cached_property_names ();
 		public unowned GLib.DBusConnection get_connection ();
 		public int get_default_timeout ();
 		public GLib.DBusProxyFlags get_flags ();
-		public unowned GLib.DBusInterfaceInfo get_interface_info ();
+		public GLib.DBusInterfaceInfo get_interface_info ();
 		public unowned string get_interface_name ();
 		public unowned string get_name ();
-		public unowned string get_name_owner ();
+		public string get_name_owner ();
 		public unowned string get_object_path ();
-		public void set_cached_property (string property_name, GLib.Variant value);
+		[CCode (cname = "g_dbus_proxy_new", finish_function = "g_dbus_proxy_new_finish")]
+		public static async GLib.DBusProxy @new (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, GLib.DBusInterfaceInfo? info, string? name, string object_path, string interface_name, GLib.Cancellable? cancellable = null);
+		public void set_cached_property (string property_name, GLib.Variant? value);
 		public void set_default_timeout (int timeout_msec);
-		public void set_interface_info (GLib.DBusInterfaceInfo info);
+		public void set_interface_info (GLib.DBusInterfaceInfo? info);
 		[CCode (has_construct_function = false)]
-		public DBusProxy.sync (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, GLib.DBusInterfaceInfo? info, string name, string object_path, string interface_name, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public DBusProxy.sync (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, GLib.DBusInterfaceInfo? info, string? name, string object_path, string interface_name, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public GLib.BusType g_bus_type { construct; }
 		[NoAccessorMethod]
 		public GLib.DBusConnection g_connection { owned get; construct; }
@@ -591,7 +801,7 @@ namespace GLib {
 		public virtual signal void g_properties_changed (GLib.Variant changed_properties, [CCode (array_length = false, array_null_terminated = true)] string[] invalidated_properties);
 		public virtual signal void g_signal (string sender_name, string signal_name, GLib.Variant parameters);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_dbus_server_get_type ()")]
 	public class DBusServer : GLib.Object, GLib.Initable {
 		[CCode (has_construct_function = false)]
 		protected DBusServer ();
@@ -612,33 +822,25 @@ namespace GLib {
 		public string client_address { get; }
 		public GLib.DBusServerFlags flags { get; construct; }
 		public string guid { get; construct; }
-		public virtual signal bool new_connection (GLib.DBusConnection p0);
+		public signal bool new_connection (GLib.DBusConnection connection);
 	}
 	[CCode (cheader_filename = "gio/gio.h", ref_function = "g_dbus_signal_info_ref", type_id = "g_dbus_signal_info_get_type ()", unref_function = "g_dbus_signal_info_unref")]
 	[Compact]
 	public class DBusSignalInfo {
 		[CCode (array_length = false, array_null_terminated = true)]
-		public weak GLib.DBusAnnotationInfo[] annotations;
+		public GLib.DBusAnnotationInfo[] annotations;
 		[CCode (array_length = false, array_null_terminated = true)]
-		public weak GLib.DBusArgInfo[] args;
-		public weak string name;
+		public GLib.DBusArgInfo[] args;
+		public string name;
 		public int ref_count;
 	}
 	[CCode (cheader_filename = "gio/gio.h")]
-	[Compact]
-	public class DBusSubtreeVTable {
-		public weak GLib.DBusSubtreeDispatchFunc dispatch;
-		public weak GLib.DBusSubtreeEnumerateFunc enumerate;
-		public weak GLib.DBusSubtreeIntrospectFunc introspect;
-		public void* padding;
-	}
-	[CCode (cheader_filename = "gio/gio.h")]
 	public class DataInputStream : GLib.BufferedInputStream {
 		[CCode (has_construct_function = false)]
 		public DataInputStream (GLib.InputStream base_stream);
 		public GLib.DataStreamByteOrder get_byte_order ();
 		public GLib.DataStreamNewlineType get_newline_type ();
-		public uchar read_byte (GLib.Cancellable? cancellable = null) throws GLib.IOError;
+		public uint8 read_byte (GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public int16 read_int16 (GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public int32 read_int32 (GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public int64 read_int64 (GLib.Cancellable? cancellable = null) throws GLib.IOError;
@@ -663,7 +865,7 @@ namespace GLib {
 		[CCode (has_construct_function = false)]
 		public DataOutputStream (GLib.OutputStream base_stream);
 		public GLib.DataStreamByteOrder get_byte_order ();
-		public bool put_byte (uchar data, GLib.Cancellable? cancellable = null) throws GLib.IOError;
+		public bool put_byte (uint8 data, GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public bool put_int16 (int16 data, GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public bool put_int32 (int32 data, GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public bool put_int64 (int64 data, GLib.Cancellable? cancellable = null) throws GLib.IOError;
@@ -674,7 +876,7 @@ namespace GLib {
 		public void set_byte_order (GLib.DataStreamByteOrder order);
 		public GLib.DataStreamByteOrder byte_order { get; set; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_emblem_get_type ()")]
 	public class Emblem : GLib.Object, GLib.Icon {
 		[CCode (has_construct_function = false)]
 		public Emblem (GLib.Icon icon);
@@ -685,14 +887,10 @@ namespace GLib {
 		public GLib.Object icon { get; construct; }
 		public GLib.EmblemOrigin origin { get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	[Compact]
-	public class EmblemClass {
-	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_emblemed_icon_get_type ()")]
 	public class EmblemedIcon : GLib.Object, GLib.Icon {
 		[CCode (has_construct_function = false, type = "GIcon*")]
-		public EmblemedIcon (GLib.Icon icon, GLib.Emblem emblem);
+		public EmblemedIcon (GLib.Icon icon, GLib.Emblem? emblem);
 		public void add_emblem (GLib.Emblem emblem);
 		public void clear_emblems ();
 		public unowned GLib.List<GLib.Emblem> get_emblems ();
@@ -715,7 +913,7 @@ namespace GLib {
 		[CCode (has_construct_function = false)]
 		public FileAttributeInfoList ();
 		public void add (string name, GLib.FileAttributeType type, GLib.FileAttributeInfoFlags flags);
-		public unowned GLib.FileAttributeInfoList dup ();
+		public GLib.FileAttributeInfoList dup ();
 		public unowned GLib.FileAttributeInfo lookup (string name);
 	}
 	[CCode (cheader_filename = "gio/gio.h", ref_function = "g_file_attribute_matcher_ref", type_id = "g_file_attribute_matcher_get_type ()", unref_function = "g_file_attribute_matcher_unref")]
@@ -727,8 +925,10 @@ namespace GLib {
 		public unowned string enumerate_next ();
 		public bool matches (string attribute);
 		public bool matches_only (string attribute);
+		public GLib.FileAttributeMatcher subtract (GLib.FileAttributeMatcher subtract);
+		public string to_string ();
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_file_enumerator_get_type ()")]
 	public class FileEnumerator : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected FileEnumerator ();
@@ -744,7 +944,7 @@ namespace GLib {
 		public void set_pending (bool pending);
 		public GLib.File container { construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_file_io_stream_get_type ()")]
 	public class FileIOStream : GLib.IOStream, GLib.Seekable {
 		[CCode (has_construct_function = false)]
 		protected FileIOStream ();
@@ -752,9 +952,9 @@ namespace GLib {
 		public virtual bool can_seek ();
 		[NoWrapper]
 		public virtual bool can_truncate ();
-		public virtual unowned string get_etag ();
-		public virtual unowned GLib.FileInfo query_info (string attributes, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public virtual async unowned GLib.FileInfo query_info_async (string attributes, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public virtual string get_etag ();
+		public virtual GLib.FileInfo query_info (string attributes, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public virtual async GLib.FileInfo query_info_async (string attributes, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[NoWrapper]
 		public virtual bool seek (int64 offset, GLib.SeekType type, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[NoWrapper]
@@ -762,34 +962,31 @@ namespace GLib {
 		[NoWrapper]
 		public virtual bool truncate_fn (int64 size, GLib.Cancellable? cancellable = null) throws GLib.Error;
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_file_icon_get_type ()")]
 	public class FileIcon : GLib.Object, GLib.Icon, GLib.LoadableIcon {
 		[CCode (has_construct_function = false, type = "GIcon*")]
 		public FileIcon (GLib.File file);
 		public unowned GLib.File get_file ();
 		public GLib.File file { get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	[Compact]
-	public class FileIconClass {
-	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_file_info_get_type ()")]
 	public class FileInfo : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public FileInfo ();
 		public void clear_status ();
 		public void copy_into (GLib.FileInfo dest_info);
-		public unowned GLib.FileInfo dup ();
-		public unowned string get_attribute_as_string (string attribute);
+		public GLib.FileInfo dup ();
+		public string get_attribute_as_string (string attribute);
 		public bool get_attribute_boolean (string attribute);
 		public unowned string get_attribute_byte_string (string attribute);
-		public bool get_attribute_data (string attribute, GLib.FileAttributeType? type, void* value_pp, GLib.FileAttributeStatus? status);
+		public bool get_attribute_data (string attribute, out GLib.FileAttributeType type, out void* value_pp, out GLib.FileAttributeStatus status);
 		public int32 get_attribute_int32 (string attribute);
 		public int64 get_attribute_int64 (string attribute);
 		public unowned GLib.Object get_attribute_object (string attribute);
 		public GLib.FileAttributeStatus get_attribute_status (string attribute);
 		public unowned string get_attribute_string (string attribute);
-		public unowned string get_attribute_stringv (string attribute);
+		[CCode (array_length = false, array_null_terminated = true)]
+		public unowned string[] get_attribute_stringv (string attribute);
 		public GLib.FileAttributeType get_attribute_type (string attribute);
 		public uint32 get_attribute_uint32 (string attribute);
 		public uint64 get_attribute_uint64 (string attribute);
@@ -802,14 +999,15 @@ namespace GLib {
 		public bool get_is_backup ();
 		public bool get_is_hidden ();
 		public bool get_is_symlink ();
-		public void get_modification_time (out GLib.TimeVal _result);
+		public GLib.TimeVal get_modification_time ();
 		public unowned string get_name ();
 		public int64 get_size ();
 		public int32 get_sort_order ();
 		public unowned string get_symlink_target ();
 		public bool has_attribute (string attribute);
 		public bool has_namespace (string name_space);
-		public unowned string list_attributes (string name_space);
+		[CCode (array_length = false, array_null_terminated = true)]
+		public string[] list_attributes (string name_space);
 		public void remove_attribute (string attribute);
 		public void set_attribute (string attribute, GLib.FileAttributeType type, void* value_p);
 		public void set_attribute_boolean (string attribute, bool attr_value);
@@ -820,7 +1018,7 @@ namespace GLib {
 		public void set_attribute_object (string attribute, GLib.Object attr_value);
 		public bool set_attribute_status (string attribute, GLib.FileAttributeStatus status);
 		public void set_attribute_string (string attribute, string attr_value);
-		public void set_attribute_stringv (string attribute, out unowned string attr_value);
+		public void set_attribute_stringv (string attribute, [CCode (array_length = false)] string[] attr_value);
 		public void set_attribute_uint32 (string attribute, uint32 attr_value);
 		public void set_attribute_uint64 (string attribute, uint64 attr_value);
 		public void set_content_type (string content_type);
@@ -837,25 +1035,21 @@ namespace GLib {
 		public void set_symlink_target (string symlink_target);
 		public void unset_attribute_mask ();
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	[Compact]
-	public class FileInfoClass {
-	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_file_input_stream_get_type ()")]
 	public class FileInputStream : GLib.InputStream, GLib.Seekable {
 		[CCode (has_construct_function = false)]
 		protected FileInputStream ();
 		[NoWrapper]
 		public virtual bool can_seek ();
-		public virtual unowned GLib.FileInfo query_info (string attributes, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public virtual async unowned GLib.FileInfo query_info_async (string attributes, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public virtual GLib.FileInfo query_info (string attributes, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public virtual async GLib.FileInfo query_info_async (string attributes, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[NoWrapper]
 		public virtual bool seek (int64 offset, GLib.SeekType type, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[NoWrapper]
 		public virtual int64 tell ();
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	public class FileMonitor : GLib.Object {
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_file_monitor_get_type ()")]
+	public abstract class FileMonitor : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected FileMonitor ();
 		public virtual bool cancel ();
@@ -868,7 +1062,7 @@ namespace GLib {
 		public int rate_limit { get; set; }
 		public virtual signal void changed (GLib.File file, GLib.File? other_file, GLib.FileMonitorEvent event_type);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_file_output_stream_get_type ()")]
 	public class FileOutputStream : GLib.OutputStream, GLib.Seekable {
 		[CCode (has_construct_function = false)]
 		protected FileOutputStream ();
@@ -876,9 +1070,9 @@ namespace GLib {
 		public virtual bool can_seek ();
 		[NoWrapper]
 		public virtual bool can_truncate ();
-		public virtual unowned string get_etag ();
-		public virtual unowned GLib.FileInfo query_info (string attributes, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public virtual async unowned GLib.FileInfo query_info_async (string attributes, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public virtual string get_etag ();
+		public virtual GLib.FileInfo query_info (string attributes, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public virtual async GLib.FileInfo query_info_async (string attributes, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[NoWrapper]
 		public virtual bool seek (int64 offset, GLib.SeekType type, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[NoWrapper]
@@ -886,17 +1080,18 @@ namespace GLib {
 		[NoWrapper]
 		public virtual bool truncate_fn (int64 size, GLib.Cancellable? cancellable = null) throws GLib.Error;
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_filename_completer_get_type ()")]
 	public class FilenameCompleter : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public FilenameCompleter ();
-		public unowned string get_completion_suffix (string initial_text);
-		public unowned string get_completions (string initial_text);
+		public string get_completion_suffix (string initial_text);
+		[CCode (array_length = false, array_null_terminated = true)]
+		public string[] get_completions (string initial_text);
 		public void set_dirs_only (bool dirs_only);
 		public virtual signal void got_completion_data ();
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	public class FilterInputStream : GLib.InputStream {
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_filter_input_stream_get_type ()")]
+	public abstract class FilterInputStream : GLib.InputStream {
 		[CCode (has_construct_function = false)]
 		protected FilterInputStream ();
 		public unowned GLib.InputStream get_base_stream ();
@@ -905,8 +1100,8 @@ namespace GLib {
 		public GLib.InputStream base_stream { get; construct; }
 		public bool close_base_stream { get; set construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	public class FilterOutputStream : GLib.OutputStream {
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_filter_output_stream_get_type ()")]
+	public abstract class FilterOutputStream : GLib.OutputStream {
 		[CCode (has_construct_function = false)]
 		protected FilterOutputStream ();
 		public unowned GLib.OutputStream get_base_stream ();
@@ -915,39 +1110,62 @@ namespace GLib {
 		public GLib.OutputStream base_stream { get; construct; }
 		public bool close_base_stream { get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h", cname = "GIOExtension")]
+	[CCode (cheader_filename = "gio/gio.h")]
 	[Compact]
 	public class IOExtension {
 		public unowned string get_name ();
 		public int get_priority ();
 		public GLib.Type get_type ();
-		public unowned GLib.TypeClass ref_class ();
 	}
 	[CCode (cheader_filename = "gio/gio.h")]
 	[Compact]
 	public class IOExtensionPoint {
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME")]
+		public const string DESKTOP_APP_INFO_LOOKUP;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME")]
+		public const string NATIVE_VOLUME_MONITOR;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_NETWORK_MONITOR_EXTENSION_POINT_NAME")]
+		public const string NETWORK_MONITOR;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_PROXY_EXTENSION_POINT_NAME")]
+		public const string PROXY;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_PROXY_RESOLVER_EXTENSION_POINT_NAME")]
+		public const string PROXY_RESOLVER;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_TLS_BACKEND_EXTENSION_POINT_NAME")]
+		public const string TLS_BACKEND;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_VFS_EXTENSION_POINT_NAME")]
+		public const string VFS;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_VOLUME_MONITOR_EXTENSION_POINT_NAME")]
+		public const string VOLUME_MONITOR;
 		public unowned GLib.IOExtension get_extension_by_name (string name);
 		public unowned GLib.List<GLib.IOExtension> get_extensions ();
 		public GLib.Type get_required_type ();
+		[CCode (cheader_filename = "gio/gio.h")]
 		public static unowned GLib.IOExtension implement (string extension_point_name, GLib.Type type, string extension_name, int priority);
+		[CCode (cheader_filename = "gio/gio.h")]
 		public static unowned GLib.IOExtensionPoint lookup (string name);
+		[CCode (cheader_filename = "gio/gio.h")]
 		public static unowned GLib.IOExtensionPoint register (string name);
 		public void set_required_type (GLib.Type type);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_io_module_get_type ()")]
 	public class IOModule : GLib.TypeModule, GLib.TypePlugin {
 		[CCode (has_construct_function = false)]
 		public IOModule (string filename);
 		public void load ();
-		public static unowned string query ();
+		[CCode (cheader_filename = "gio/gio.h", cname = "g_io_modules_load_all_in_directory")]
+		public static GLib.List<GLib.IOModule> load_all_in_directory (string dirname);
+		[CCode (cheader_filename = "gio/gio.h", cname = "g_io_modules_load_all_in_directory_with_scope")]
+		public static GLib.List<GLib.IOModule> load_all_in_directory_with_scope (string dirname, GLib.IOModuleScope scope);
+		[CCode (array_length = false, array_null_terminated = true)]
+		public static string[] query ();
+		[CCode (cheader_filename = "gio/gio.h", cname = "g_io_modules_scan_all_in_directory")]
+		public static void scan_all_in_directory (string dirname);
+		[CCode (cheader_filename = "gio/gio.h", cname = "g_io_modules_scan_all_in_directory_with_scope")]
+		public static void scan_all_in_directory_with_scope (string dirname, GLib.IOModuleScope scope);
 		public void unload ();
 	}
 	[CCode (cheader_filename = "gio/gio.h")]
 	[Compact]
-	public class IOModuleClass {
-	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	[Compact]
 	public class IOModuleScope {
 		[CCode (has_construct_function = false)]
 		public IOModuleScope (GLib.IOModuleScopeFlags flags);
@@ -956,6 +1174,10 @@ namespace GLib {
 	[CCode (cheader_filename = "gio/gio.h")]
 	[Compact]
 	public class IOSchedulerJob {
+		[CCode (cheader_filename = "gio/gio.h", cname = "g_io_scheduler_cancel_all_jobs")]
+		public static void cancel_all ();
+		[CCode (cheader_filename = "gio/gio.h", cname = "g_io_scheduler_push_job")]
+		public static void push ([CCode (delegate_target_pos = 1.33333, destroy_notify_pos = 1.66667)] owned GLib.IOSchedulerJobFunc job_func, int io_priority, GLib.Cancellable? cancellable = null);
 		public bool send_to_mainloop (owned GLib.SourceFunc func);
 		public void send_to_mainloop_async (owned GLib.SourceFunc func);
 	}
@@ -964,10 +1186,9 @@ namespace GLib {
 		[CCode (has_construct_function = false)]
 		protected IOStream ();
 		public void clear_pending ();
-		public bool close (GLib.Cancellable? cancellable = null) throws GLib.IOError;
+		[CCode (vfunc_name = "close_fn")]
+		public virtual bool close (GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public virtual async bool close_async (int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.IOError;
-		[NoWrapper]
-		public virtual bool close_fn (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public virtual unowned GLib.InputStream get_input_stream ();
 		public virtual unowned GLib.OutputStream get_output_stream ();
 		public bool has_pending ();
@@ -975,7 +1196,7 @@ namespace GLib {
 		public bool set_pending () throws GLib.Error;
 		public async bool splice_async (GLib.IOStream stream2, GLib.IOStreamSpliceFlags flags, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[NoAccessorMethod]
-		public bool closed { get; set; }
+		public bool closed { get; }
 		public abstract GLib.InputStream input_stream { get; }
 		public abstract GLib.OutputStream output_stream { get; }
 	}
@@ -983,7 +1204,7 @@ namespace GLib {
 	[Compact]
 	public class IOStreamAdapter {
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_inet_address_get_type ()")]
 	public class InetAddress : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected InetAddress ();
@@ -993,7 +1214,7 @@ namespace GLib {
 		[CCode (has_construct_function = false)]
 		public InetAddress.from_bytes ([CCode (array_length = false)] uint8[] bytes, GLib.SocketFamily family);
 		[CCode (has_construct_function = false)]
-		public InetAddress.from_string (string str);
+		public InetAddress.from_string (string string);
 		public GLib.SocketFamily get_family ();
 		public bool get_is_any ();
 		public bool get_is_link_local ();
@@ -1025,24 +1246,45 @@ namespace GLib {
 		public bool is_multicast { get; }
 		public bool is_site_local { get; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_inet_address_mask_get_type ()")]
+	public class InetAddressMask : GLib.Object, GLib.Initable {
+		[CCode (has_construct_function = false)]
+		public InetAddressMask (GLib.InetAddress addr, uint length) throws GLib.Error;
+		public bool equal (GLib.InetAddressMask mask2);
+		[CCode (has_construct_function = false)]
+		public InetAddressMask.from_string (string mask_string) throws GLib.Error;
+		public unowned GLib.InetAddress get_address ();
+		public GLib.SocketFamily get_family ();
+		public uint get_length ();
+		public bool matches (GLib.InetAddress address);
+		public string to_string ();
+		[NoAccessorMethod]
+		public GLib.InetAddress address { owned get; set; }
+		public GLib.SocketFamily family { get; }
+		[NoAccessorMethod]
+		public uint length { get; set; }
+	}
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_inet_socket_address_get_type ()")]
 	public class InetSocketAddress : GLib.SocketAddress, GLib.SocketConnectable {
 		[CCode (has_construct_function = false, type = "GSocketAddress*")]
 		public InetSocketAddress (GLib.InetAddress address, uint16 port);
 		public unowned GLib.InetAddress get_address ();
+		public uint32 get_flowinfo ();
 		public uint16 get_port ();
+		public uint32 get_scope_id ();
 		public GLib.InetAddress address { get; construct; }
+		public uint flowinfo { get; construct; }
 		public uint port { get; construct; }
+		public uint scope_id { get; construct; }
 	}
 	[CCode (cheader_filename = "gio/gio.h")]
 	public abstract class InputStream : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected InputStream ();
 		public void clear_pending ();
-		public bool close (GLib.Cancellable? cancellable = null) throws GLib.IOError;
+		[CCode (vfunc_name = "close_fn")]
+		public abstract bool close (GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public virtual async bool close_async (int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.IOError;
-		[NoWrapper]
-		public virtual bool close_fn (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public bool has_pending ();
 		public bool is_closed ();
 		[CCode (vfunc_name = "read_fn")]
@@ -1053,19 +1295,13 @@ namespace GLib {
 		public virtual ssize_t skip (size_t count, GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public virtual async ssize_t skip_async (size_t count, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.IOError;
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	[Compact]
-	public class InputVector {
-		[CCode (array_length_cname = "size", array_length_type = "gsize")]
-		public uint8[] buffer;
-	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_memory_input_stream_get_type ()")]
 	public class MemoryInputStream : GLib.InputStream, GLib.Seekable {
 		[CCode (has_construct_function = false, type = "GInputStream*")]
 		public MemoryInputStream ();
-		public void add_data ([CCode (array_length_type = "gsize")] owned uint8[] data, GLib.DestroyNotify? destroy);
+		public void add_data ([CCode (array_length_cname = "len", array_length_pos = 1.5, array_length_type = "gssize")] owned uint8[] data, GLib.DestroyNotify? destroy);
 		[CCode (has_construct_function = false, type = "GInputStream*")]
-		public MemoryInputStream.from_data ([CCode (array_length_type = "gsize")] owned uint8[] data, GLib.DestroyNotify? destroy);
+		public MemoryInputStream.from_data ([CCode (array_length_cname = "len", array_length_pos = 1.5, array_length_type = "gssize")] owned uint8[] data, GLib.DestroyNotify? destroy);
 	}
 	[CCode (cheader_filename = "gio/gio.h")]
 	public class MemoryOutputStream : GLib.OutputStream, GLib.Seekable {
@@ -1080,12 +1316,101 @@ namespace GLib {
 		public void* data { get; construct; }
 		public ulong data_size { get; }
 		[NoAccessorMethod]
-		public void* destroy_function { get; construct; }
+		public GLib.DestroyNotify? destroy_function { get; construct; }
 		[NoAccessorMethod]
-		public void* realloc_function { get; construct; }
+		public GLib.ReallocFunc? realloc_function { get; construct; }
 		public ulong size { get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_menu_get_type ()")]
+	public class Menu : GLib.MenuModel {
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_MENU_ATTRIBUTE_ACTION")]
+		public const string ATTRIBUTE_ACTION;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_MENU_ATTRIBUTE_LABEL")]
+		public const string ATTRIBUTE_LABEL;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_MENU_ATTRIBUTE_TARGET")]
+		public const string ATTRIBUTE_TARGET;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_MENU_LINK_SECTION")]
+		public const string LINK_SECTION;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_MENU_LINK_SUBMENU")]
+		public const string LINK_SUBMENU;
+		[CCode (has_construct_function = false)]
+		public Menu ();
+		public void append (string? label, string? detailed_action);
+		public void append_item (GLib.MenuItem item);
+		public void append_section (string? label, GLib.MenuModel section);
+		public void append_submenu (string? label, GLib.MenuModel submenu);
+		public void freeze ();
+		public void insert (int position, string? label, string? detailed_action);
+		public void insert_item (int position, GLib.MenuItem item);
+		public void insert_section (int position, string? label, GLib.MenuModel section);
+		public void insert_submenu (int position, string? label, GLib.MenuModel submenu);
+		public static GLib.HashTable<void*,void*> markup_parser_end (GLib.MarkupParseContext context);
+		public static GLib.Menu markup_parser_end_menu (GLib.MarkupParseContext context);
+		public static void markup_parser_start (GLib.MarkupParseContext context, string? domain, GLib.HashTable<void*,void*>? objects);
+		public static void markup_parser_start_menu (GLib.MarkupParseContext context, string? domain, GLib.HashTable<void*,void*>? objects);
+		public static void markup_print_stderr (GLib.MenuModel model);
+		public static GLib.StringBuilder markup_print_string (GLib.StringBuilder string, GLib.MenuModel model, int indent, int tabstop);
+		public void prepend (string? label, string? detailed_action);
+		public void prepend_item (GLib.MenuItem item);
+		public void prepend_section (string? label, GLib.MenuModel section);
+		public void prepend_submenu (string? label, GLib.MenuModel submenu);
+		public void remove (int position);
+	}
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_menu_attribute_iter_get_type ()")]
+	public abstract class MenuAttributeIter : GLib.Object {
+		[CCode (has_construct_function = false)]
+		protected MenuAttributeIter ();
+		public unowned string get_name ();
+		public virtual bool get_next (string out_type, out GLib.Variant value);
+		public GLib.Variant get_value ();
+		public bool next ();
+	}
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_menu_item_get_type ()")]
+	public class MenuItem : GLib.Object {
+		[CCode (has_construct_function = false)]
+		public MenuItem (string? label, string? detailed_action);
+		[CCode (has_construct_function = false)]
+		public MenuItem.section (string? label, GLib.MenuModel section);
+		public void set_action_and_target (string? action, string? format_string, ...);
+		public void set_action_and_target_value (string? action, GLib.Variant? target_value);
+		public void set_attribute (string attribute, string? format_string, ...);
+		public void set_attribute_value (string attribute, GLib.Variant? value);
+		public void set_detailed_action (string detailed_action);
+		public void set_label (string? label);
+		public void set_link (string link, GLib.MenuModel? model);
+		public void set_section (GLib.MenuModel? section);
+		public void set_submenu (GLib.MenuModel? submenu);
+		[CCode (has_construct_function = false)]
+		public MenuItem.submenu (string? label, GLib.MenuModel submenu);
+	}
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_menu_link_iter_get_type ()")]
+	public abstract class MenuLinkIter : GLib.Object {
+		[CCode (has_construct_function = false)]
+		protected MenuLinkIter ();
+		public unowned string get_name ();
+		public virtual bool get_next (string out_name, out GLib.MenuModel value);
+		public GLib.MenuModel get_value ();
+		public bool next ();
+	}
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_menu_model_get_type ()")]
+	public abstract class MenuModel : GLib.Object {
+		[CCode (has_construct_function = false)]
+		protected MenuModel ();
+		public bool get_item_attribute (int item_index, string attribute, string format_string, ...);
+		public virtual GLib.Variant get_item_attribute_value (int item_index, string attribute, GLib.VariantType? expected_type);
+		[NoWrapper]
+		public virtual void get_item_attributes (int item_index, GLib.HashTable<void*,void*> attributes);
+		public virtual GLib.MenuModel get_item_link (int item_index, string link);
+		[NoWrapper]
+		public virtual void get_item_links (int item_index, GLib.HashTable<void*,void*> links);
+		public virtual int get_n_items ();
+		public virtual bool is_mutable ();
+		public virtual GLib.MenuAttributeIter iterate_item_attributes (int item_index);
+		public virtual GLib.MenuLinkIter iterate_item_links (int item_index);
+		[HasEmitter]
+		public signal void items_changed (int position, int removed, int added);
+	}
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_mount_operation_get_type ()")]
 	public class MountOperation : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public MountOperation ();
@@ -1115,26 +1440,26 @@ namespace GLib {
 		public virtual signal void show_processes (string message, GLib.Array<GLib.Pid> processes, [CCode (array_length = false, array_null_terminated = true)] string[] choices);
 	}
 	[CCode (cheader_filename = "gio/gio.h")]
-	public class NativeVolumeMonitor : GLib.VolumeMonitor {
+	public abstract class NativeVolumeMonitor : GLib.VolumeMonitor {
 		[CCode (has_construct_function = false)]
 		protected NativeVolumeMonitor ();
 		[NoWrapper]
-		public virtual unowned GLib.Mount get_mount_for_mount_path (string mount_path, GLib.Cancellable? cancellable = null);
+		public abstract GLib.Mount get_mount_for_mount_path (string mount_path, GLib.Cancellable? cancellable = null);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_network_address_get_type ()")]
 	public class NetworkAddress : GLib.Object, GLib.SocketConnectable {
 		[CCode (has_construct_function = false, type = "GSocketConnectable*")]
 		public NetworkAddress (string hostname, uint16 port);
 		public unowned string get_hostname ();
 		public uint16 get_port ();
 		public unowned string get_scheme ();
-		public static unowned GLib.SocketConnectable parse (string host_and_port, uint16 default_port) throws GLib.Error;
-		public static unowned GLib.SocketConnectable parse_uri (string uri, uint16 default_port) throws GLib.Error;
+		public static GLib.SocketConnectable parse (string host_and_port, uint16 default_port) throws GLib.Error;
+		public static GLib.SocketConnectable parse_uri (string uri, uint16 default_port) throws GLib.Error;
 		public string hostname { get; construct; }
 		public uint port { get; construct; }
 		public string scheme { get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_network_service_get_type ()")]
 	public class NetworkService : GLib.Object, GLib.SocketConnectable {
 		[CCode (has_construct_function = false, type = "GSocketConnectable*")]
 		public NetworkService (string service, string protocol, string domain);
@@ -1153,10 +1478,9 @@ namespace GLib {
 		[CCode (has_construct_function = false)]
 		protected OutputStream ();
 		public void clear_pending ();
-		public bool close (GLib.Cancellable? cancellable = null) throws GLib.IOError;
+		[CCode (vfunc_name = "close_fn")]
+		public abstract bool close (GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public virtual async bool close_async (int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.IOError;
-		[NoWrapper]
-		public virtual bool close_fn (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public virtual bool flush (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public virtual async bool flush_async (int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public bool has_pending ();
@@ -1170,14 +1494,8 @@ namespace GLib {
 		public bool write_all ([CCode (array_length_type = "gsize")] uint8[] buffer, out size_t bytes_written, GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public virtual async ssize_t write_async ([CCode (array_length_type = "gsize")] uint8[] buffer, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.IOError;
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	[Compact]
-	public class OutputVector {
-		[CCode (array_length_cname = "size", array_length_type = "gsize")]
-		public uint8[] buffer;
-	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	public class Permission : GLib.Object {
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_permission_get_type ()")]
+	public abstract class Permission : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected Permission ();
 		public virtual bool acquire (GLib.Cancellable? cancellable = null) throws GLib.Error;
@@ -1192,10 +1510,18 @@ namespace GLib {
 		public bool can_acquire { get; }
 		public bool can_release { get; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", cname = "GSource", ref_function = "g_source_ref", unref_function = "g_source_unref")]
+	[Compact]
+	public class PollableSource : GLib.Source {
+		[CCode (type = "GSource*")]
+		public PollableSource (GLib.Object pollable_stream);
+		[CCode (cname = "g_source_set_callback")]
+		public void set_callback ([CCode (type = "GSourceFunc")] owned GLib.PollableSourceFunc func);
+	}
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_proxy_address_get_type ()")]
 	public class ProxyAddress : GLib.InetSocketAddress, GLib.SocketConnectable {
 		[CCode (has_construct_function = false, type = "GSocketAddress*")]
-		public ProxyAddress (GLib.InetAddress inetaddr, uint16 port, string protocol, string dest_hostname, uint16 dest_port, string username, string password);
+		public ProxyAddress (GLib.InetAddress inetaddr, uint16 port, string protocol, string dest_hostname, uint16 dest_port, string? username, string? password);
 		public unowned string get_destination_hostname ();
 		public uint16 get_destination_port ();
 		public unowned string get_password ();
@@ -1207,7 +1533,7 @@ namespace GLib {
 		public string protocol { get; construct; }
 		public string username { get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_proxy_address_enumerator_get_type ()")]
 	public class ProxyAddressEnumerator : GLib.SocketAddressEnumerator {
 		[CCode (has_construct_function = false)]
 		protected ProxyAddressEnumerator ();
@@ -1220,37 +1546,62 @@ namespace GLib {
 	public class Resolver : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected Resolver ();
-		public static GLib.Quark error_quark ();
-		public static unowned GLib.Resolver get_default ();
-		public virtual unowned string lookup_by_address (GLib.InetAddress address, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public virtual async unowned string lookup_by_address_async (GLib.InetAddress address, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public static GLib.Resolver get_default ();
+		public virtual string lookup_by_address (GLib.InetAddress address, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public virtual async string lookup_by_address_async (GLib.InetAddress address, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public virtual GLib.List<GLib.InetAddress> lookup_by_name (string hostname, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public virtual async GLib.List<GLib.InetAddress> lookup_by_name_async (string hostname, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public virtual GLib.List<GLib.SrvTarget> lookup_service (string service, string protocol, string domain, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public virtual async GLib.List<GLib.SrvTarget> lookup_service_async (string service, string protocol, string domain, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public GLib.List<GLib.SrvTarget> lookup_service (string service, string protocol, string domain, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[CCode (finish_function = "g_resolver_lookup_service_finish")]
+		public async GLib.List<GLib.SrvTarget> lookup_service_async (string service, string protocol, string domain, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[CCode (vfunc_name = "lookup_service")]
+		[NoWrapper]
+		public virtual GLib.List<GLib.SrvTarget> lookup_service_fn (string rrname, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[CCode (finish_function = "g_resolver_lookup_service_finish", vfunc_name = "lookup_service_async")]
+		[NoWrapper]
+		public virtual async GLib.List<GLib.SrvTarget> lookup_service_fn_async (string rrname, GLib.Cancellable? cancellable = null);
 		public void set_default ();
 		public virtual signal void reload ();
 	}
+	[CCode (cheader_filename = "gio/gio.h", ref_function = "g_resource_ref", type_id = "g_resource_get_type ()", unref_function = "g_resource_unref")]
+	[Compact]
+	public class Resource {
+		[CCode (cname = "g_resources_register")]
+		public void _register ();
+		[CCode (cname = "g_resources_unregister")]
+		public void _unregister ();
+		[CCode (array_length = false, array_null_terminated = true)]
+		public string[] enumerate_children (string path, GLib.ResourceLookupFlags lookup_flags) throws GLib.Error;
+		[CCode (has_construct_function = false)]
+		public Resource.from_data (GLib.Bytes data) throws GLib.Error;
+		public bool get_info (string path, GLib.ResourceLookupFlags lookup_flags, out size_t size, out uint32 flags) throws GLib.Error;
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static GLib.Resource load (string filename) throws GLib.Error;
+		public GLib.Bytes lookup_data (string path, GLib.ResourceLookupFlags lookup_flags) throws GLib.Error;
+		public GLib.InputStream open_stream (string path, GLib.ResourceLookupFlags lookup_flags) throws GLib.Error;
+	}
 	[CCode (cheader_filename = "gio/gio.h")]
 	public class Settings : GLib.Object {
 		[CCode (has_construct_function = false)]
-		public Settings (string schema);
+		public Settings (string schema_id);
 		public void apply ();
-		public void bind (string key, void* object, string property, GLib.SettingsBindFlags flags);
-		public void bind_with_mapping (string key, void* object, string property, GLib.SettingsBindFlags flags, GLib.SettingsBindGetMapping get_mapping, GLib.SettingsBindSetMapping set_mapping, GLib.DestroyNotify destroy);
-		public void bind_writable (string key, void* object, string property, bool inverted);
+		public void bind (string key, GLib.Object object, string property, GLib.SettingsBindFlags flags);
+		public void bind_with_mapping (string key, GLib.Object object, string property, GLib.SettingsBindFlags flags, GLib.SettingsBindGetMapping get_mapping, owned GLib.SettingsBindSetMapping set_mapping);
+		public void bind_writable (string key, GLib.Object object, string property, bool inverted);
 		public void delay ();
+		[CCode (has_construct_function = false)]
+		public Settings.full (GLib.SettingsSchema schema, GLib.SettingsBackend? backend, string? path);
 		[CCode (sentinel = "")]
 		public void @get (string key, string format, ...);
 		public bool get_boolean (string key);
-		public unowned GLib.Settings get_child (string name);
+		public GLib.Settings get_child (string name);
 		public double get_double (string key);
 		public int get_enum (string key);
 		public uint get_flags (string key);
 		public bool get_has_unapplied ();
 		public int get_int (string key);
 		public void* get_mapped (string key, GLib.SettingsGetMapping mapping);
-		public unowned GLib.Variant get_range (string key);
+		public GLib.Variant get_range (string key);
 		public string get_string (string key);
 		[CCode (array_length = false, array_null_terminated = true)]
 		public string[] get_strv (string key);
@@ -1261,7 +1612,8 @@ namespace GLib {
 		public string[] list_children ();
 		[CCode (array_length = false, array_null_terminated = true)]
 		public string[] list_keys ();
-		public static unowned string list_relocatable_schemas ();
+		[CCode (array_length = false, array_null_terminated = true)]
+		public static unowned string[] list_relocatable_schemas ();
 		[CCode (array_length = false, array_null_terminated = true)]
 		public static unowned string[] list_schemas ();
 		public bool range_check (string key, GLib.Variant value);
@@ -1275,17 +1627,17 @@ namespace GLib {
 		public bool set_flags (string key, uint value);
 		public bool set_int (string key, int value);
 		public bool set_string (string key, string value);
-		public bool set_strv (string key, [CCode (array_length = false)] string[] value);
+		public bool set_strv (string key, [CCode (array_length = false, array_null_terminated = true)] string[]? value);
 		public bool set_uint (string key, uint value);
 		public bool set_value (string key, GLib.Variant value);
 		public static void sync ();
 		public static void unbind (void* object, string property);
 		[CCode (has_construct_function = false)]
-		public Settings.with_backend (string schema, GLib.SettingsBackend backend);
+		public Settings.with_backend (string schema_id, GLib.SettingsBackend backend);
 		[CCode (has_construct_function = false)]
-		public Settings.with_backend_and_path (string schema, GLib.SettingsBackend backend, string path);
+		public Settings.with_backend_and_path (string schema_id, GLib.SettingsBackend backend, string path);
 		[CCode (has_construct_function = false)]
-		public Settings.with_path (string schema, string path);
+		public Settings.with_path (string schema_id, string path);
 		[NoAccessorMethod]
 		public GLib.SettingsBackend backend { owned get; construct; }
 		[NoAccessorMethod]
@@ -1295,75 +1647,92 @@ namespace GLib {
 		public string path { owned get; construct; }
 		[NoAccessorMethod]
 		public string schema { owned get; construct; }
-		public virtual signal bool change_event (void* keys, int n_keys);
+		[NoAccessorMethod]
+		public string schema_id { owned get; construct; }
+		[NoAccessorMethod]
+		public GLib.SettingsSchema settings_schema { owned get; construct; }
+		public virtual signal bool change_event (GLib.Quark[]? keys);
 		public virtual signal void changed (string key);
 		public virtual signal bool writable_change_event (uint key);
 		public virtual signal void writable_changed (string key);
 	}
 	[CCode (cheader_filename = "gio/gio.h")]
 	public class SettingsBackend : GLib.Object {
+		[CCode (has_construct_function = false)]
+		protected SettingsBackend ();
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "g_settings_schema_get_type ()")]
+	[Compact]
+	public class SettingsSchema {
+		public unowned string get_id ();
+		public unowned string get_path ();
+		public GLib.SettingsSchema @ref ();
+		public void unref ();
+	}
+	[CCode (cheader_filename = "gio/gio.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "g_settings_schema_source_get_type ()")]
+	[Compact]
+	public class SettingsSchemaSource {
+		[CCode (has_construct_function = false)]
+		public SettingsSchemaSource.from_directory (string directory, GLib.SettingsSchemaSource? parent, bool trusted) throws GLib.Error;
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static unowned GLib.SettingsSchemaSource get_default ();
+		public GLib.SettingsSchema lookup (string schema_id, bool recursive);
+		public GLib.SettingsSchemaSource @ref ();
+		public void unref ();
+	}
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_simple_action_get_type ()")]
 	public class SimpleAction : GLib.Object, GLib.Action {
 		[CCode (has_construct_function = false)]
-		public SimpleAction (string name, GLib.VariantType parameter_type);
+		public SimpleAction (string name, GLib.VariantType? parameter_type);
 		public void set_enabled (bool enabled);
 		public void set_state (GLib.Variant value);
 		[CCode (has_construct_function = false)]
-		public SimpleAction.stateful (string name, GLib.VariantType parameter_type, GLib.Variant state);
-		[NoAccessorMethod]
-		public bool enabled { get; }
-		[NoAccessorMethod]
-		public string name { owned get; }
-		[NoAccessorMethod]
-		public GLib.VariantType parameter_type { owned get; }
-		[NoAccessorMethod]
-		public GLib.Variant state { owned get; }
-		[NoAccessorMethod]
-		public GLib.VariantType state_type { owned get; }
-		public virtual signal void activate (GLib.Variant p0);
-		public virtual signal void change_state (GLib.Variant p0);
+		public SimpleAction.stateful (string name, GLib.VariantType? parameter_type, GLib.Variant state);
+		public signal void activate (GLib.Variant? parameter);
+		public signal void change_state (GLib.Variant? value);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	public class SimpleActionGroup : GLib.Object, GLib.ActionGroup {
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_simple_action_group_get_type ()")]
+	public class SimpleActionGroup : GLib.Object, GLib.ActionGroup, GLib.ActionMap {
 		[CCode (has_construct_function = false)]
 		public SimpleActionGroup ();
-		public void add_entries (GLib.ActionEntry[] entries);
+		public void add_entries ([CCode (array_length_cname = "n_entries", array_length_pos = 1.5)] GLib.ActionEntry[] entries, void* user_data);
 		public void insert (GLib.Action action);
 		public unowned GLib.Action lookup (string action_name);
 		public void remove (string action_name);
 	}
 	[CCode (cheader_filename = "gio/gio.h")]
-	public class SimpleAsyncResult : GLib.Object, GLib.AsyncResult {
+	public class SimpleAsyncResult : GLib.Object, GLib.AsyncResult, GLib.AsyncResult {
 		[CCode (has_construct_function = false)]
-		public SimpleAsyncResult (GLib.Object? source_object, GLib.AsyncReadyCallback callback, void* source_tag);
+		public SimpleAsyncResult (GLib.Object? source_object, void* source_tag);
 		public void complete ();
 		public void complete_in_idle ();
 		[CCode (has_construct_function = false)]
-		public SimpleAsyncResult.error (GLib.Object source_object, GLib.AsyncReadyCallback callback, GLib.Quark domain, int code, string format);
+		[PrintfFormat]
+		public SimpleAsyncResult.error (GLib.Object? source_object, GLib.Quark domain, int code, string format, ...);
 		[CCode (has_construct_function = false)]
-		public SimpleAsyncResult.from_error (GLib.Object source_object, GLib.AsyncReadyCallback callback, GLib.Error error);
+		public SimpleAsyncResult.from_error (GLib.Object? source_object, GLib.Error error);
 		public bool get_op_res_gboolean ();
-		public void* get_op_res_gpointer ();
+		[CCode (simple_generics = true)]
+		public unowned T get_op_res_gpointer<T> ();
 		public ssize_t get_op_res_gssize ();
 		public void* get_source_tag ();
-		public static bool is_valid (GLib.AsyncResult _result, GLib.Object source, void* source_tag);
+		public static bool is_valid (GLib.AsyncResult result, GLib.Object source, void* source_tag);
 		public bool propagate_error () throws GLib.Error;
+		[CCode (cheader_filename = "gio/gio.h", cname = "g_simple_async_report_gerror_in_idle")]
+		public static async void report_gerror_in_idle (GLib.Object? object, GLib.Error error);
 		public void run_in_thread (GLib.SimpleAsyncThreadFunc func, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null);
-		public void set_error (GLib.Quark domain, int code, string format);
-		public void set_error_va (GLib.Quark domain, int code, string format, void* args);
+		[PrintfFormat]
+		public void set_error (GLib.Quark domain, int code, string format, ...);
+		public void set_error_va (GLib.Quark domain, int code, string format, va_list args);
 		public void set_from_error (GLib.Error error);
 		public void set_handle_cancellation (bool handle_cancellation);
 		public void set_op_res_gboolean (bool op_res);
-		public void set_op_res_gpointer (void* op_res, GLib.DestroyNotify destroy_op_res);
+		[CCode (simple_generics = true)]
+		public void set_op_res_gpointer<T> (owned T op_res);
 		public void set_op_res_gssize (ssize_t op_res);
 		public void take_error (GLib.Error error);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	[Compact]
-	public class SimpleAsyncResultClass {
-	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_simple_permission_get_type ()")]
 	public class SimplePermission : GLib.Permission {
 		[CCode (has_construct_function = false, type = "GPermission*")]
 		public SimplePermission (bool allowed);
@@ -1382,48 +1751,63 @@ namespace GLib {
 		public GLib.SocketSource create_source (GLib.IOCondition condition, GLib.Cancellable? cancellable = null);
 		[CCode (has_construct_function = false)]
 		public Socket.from_fd (int fd) throws GLib.Error;
+		public ssize_t get_available_bytes ();
 		public bool get_blocking ();
-		public unowned GLib.Credentials get_credentials () throws GLib.Error;
+		public bool get_broadcast ();
+		public GLib.Credentials get_credentials () throws GLib.Error;
 		public GLib.SocketFamily get_family ();
 		public int get_fd ();
 		public bool get_keepalive ();
 		public int get_listen_backlog ();
-		public unowned GLib.SocketAddress get_local_address () throws GLib.Error;
+		public GLib.SocketAddress get_local_address () throws GLib.Error;
+		public bool get_multicast_loopback ();
+		public uint get_multicast_ttl ();
 		public GLib.SocketProtocol get_protocol ();
-		public unowned GLib.SocketAddress get_remote_address () throws GLib.Error;
+		public GLib.SocketAddress get_remote_address () throws GLib.Error;
 		public GLib.SocketType get_socket_type ();
 		public uint get_timeout ();
+		public uint get_ttl ();
 		public bool is_closed ();
 		public bool is_connected ();
+		public bool join_multicast_group (GLib.InetAddress group, bool source_specific, string iface) throws GLib.Error;
+		public bool leave_multicast_group (GLib.InetAddress group, bool source_specific, string iface) throws GLib.Error;
 		public bool listen () throws GLib.Error;
-		public ssize_t receive (uint8[] buffer, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public ssize_t receive_from (out unowned GLib.SocketAddress address, uint8[] buffer, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public ssize_t receive_message (out unowned GLib.SocketAddress address, GLib.InputVector vectors, int num_vectors, out unowned GLib.SocketControlMessage messages, int num_messages, int flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public ssize_t receive_with_blocking (uint8[] buffer, bool blocking, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public ssize_t send (uint8[] buffer, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public ssize_t send_message (GLib.SocketAddress address, GLib.OutputVector vectors, int num_vectors, out unowned GLib.SocketControlMessage messages, int num_messages, int flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public ssize_t send_to (GLib.SocketAddress address, uint8[] buffer, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public ssize_t send_with_blocking (uint8[] buffer, bool blocking, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public ssize_t receive ([CCode (array_length_cname = "size", array_length_pos = 1.5, array_length_type = "gsize", type = "gchar*")] uint8[] buffer, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public ssize_t receive_from (out GLib.SocketAddress address, [CCode (array_length_cname = "size", array_length_pos = 2.5, array_length_type = "gsize")] uint8[] buffer, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public ssize_t receive_message (out GLib.SocketAddress address, [CCode (array_length_cname = "num_vectors", array_length_pos = 2.5)] GLib.InputVector[] vectors, [CCode (array_length_cname = "num_messages", array_length_pos = 3.5)] GLib.SocketControlMessage[]? messages, int flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public ssize_t receive_with_blocking ([CCode (array_length_cname = "size", array_length_pos = 1.5, array_length_type = "gsize", type = "gchar*")] uint8[] buffer, bool blocking, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public ssize_t send ([CCode (array_length_cname = "size", array_length_pos = 1.5, array_length_type = "gsize")] uint8[] buffer, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public ssize_t send_message (GLib.SocketAddress address, [CCode (array_length_cname = "num_vectors", array_length_pos = 2.5)] GLib.OutputVector[] vectors, [CCode (array_length_cname = "num_messages", array_length_pos = 3.5)] GLib.SocketControlMessage[]? messages, int flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public ssize_t send_to (GLib.SocketAddress address, [CCode (array_length_cname = "size", array_length_pos = 2.5, array_length_type = "gsize")] uint8[] buffer, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public ssize_t send_with_blocking ([CCode (array_length_cname = "size", array_length_pos = 1.5, array_length_type = "gsize")] uint8[] buffer, bool blocking, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public void set_blocking (bool blocking);
+		public void set_broadcast (bool broadcast);
 		public void set_keepalive (bool keepalive);
 		public void set_listen_backlog (int backlog);
+		public void set_multicast_loopback (bool loopback);
+		public void set_multicast_ttl (uint ttl);
 		public void set_timeout (uint timeout);
+		public void set_ttl (uint ttl);
 		public bool shutdown (bool shutdown_read, bool shutdown_write) throws GLib.Error;
 		public bool speaks_ipv4 ();
 		public bool blocking { get; set; }
+		public bool broadcast { get; set; }
 		public GLib.SocketFamily family { get; construct; }
 		public int fd { get; construct; }
 		public bool keepalive { get; set; }
 		public int listen_backlog { get; set; }
-		public GLib.SocketAddress local_address { get; }
+		public GLib.SocketAddress local_address { owned get; }
+		public bool multicast_loopback { get; set; }
+		public uint multicast_ttl { get; set; }
 		public GLib.SocketProtocol protocol { get; construct; }
-		public GLib.SocketAddress remote_address { get; }
+		public GLib.SocketAddress remote_address { owned get; }
 		public uint timeout { get; set; }
+		public uint ttl { get; set; }
 		[NoAccessorMethod]
 		public GLib.SocketType type { get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	public class SocketAddress : GLib.Object, GLib.SocketConnectable {
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_socket_address_get_type ()")]
+	public abstract class SocketAddress : GLib.Object, GLib.SocketConnectable {
 		[CCode (has_construct_function = false)]
 		protected SocketAddress ();
 		[CCode (has_construct_function = false)]
@@ -1433,26 +1817,26 @@ namespace GLib {
 		public virtual bool to_native (void* dest, size_t destlen) throws GLib.Error;
 		public GLib.SocketFamily family { get; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	public class SocketAddressEnumerator : GLib.Object {
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_socket_address_enumerator_get_type ()")]
+	public abstract class SocketAddressEnumerator : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected SocketAddressEnumerator ();
-		public virtual unowned GLib.SocketAddress next (GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public virtual async unowned GLib.SocketAddress next_async (GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public virtual GLib.SocketAddress next (GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public virtual async GLib.SocketAddress next_async (GLib.Cancellable? cancellable = null) throws GLib.Error;
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_socket_client_get_type ()")]
 	public class SocketClient : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public SocketClient ();
 		public void add_application_proxy (string protocol);
-		public unowned GLib.SocketConnection connect (GLib.SocketConnectable connectable, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public async unowned GLib.SocketConnection connect_async (GLib.SocketConnectable connectable, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public unowned GLib.SocketConnection connect_to_host (string host_and_port, uint16 default_port, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public async unowned GLib.SocketConnection connect_to_host_async (string host_and_port, uint16 default_port, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public unowned GLib.SocketConnection connect_to_service (string domain, string service, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public async unowned GLib.SocketConnection connect_to_service_async (string domain, string service, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public unowned GLib.SocketConnection connect_to_uri (string uri, uint16 default_port, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public async unowned GLib.SocketConnection connect_to_uri_async (string uri, uint16 default_port, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public GLib.SocketConnection connect (GLib.SocketConnectable connectable, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public async GLib.SocketConnection connect_async (GLib.SocketConnectable connectable, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public GLib.SocketConnection connect_to_host (string host_and_port, uint16 default_port, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public async GLib.SocketConnection connect_to_host_async (string host_and_port, uint16 default_port, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public GLib.SocketConnection connect_to_service (string domain, string service, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public async GLib.SocketConnection connect_to_service_async (string domain, string service, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public GLib.SocketConnection connect_to_uri (string uri, uint16 default_port, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public async GLib.SocketConnection connect_to_uri_async (string uri, uint16 default_port, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public bool get_enable_proxy ();
 		public GLib.SocketFamily get_family ();
 		public unowned GLib.SocketAddress get_local_address ();
@@ -1478,41 +1862,45 @@ namespace GLib {
 		public GLib.TlsCertificateFlags tls_validation_flags { get; set construct; }
 		[NoAccessorMethod]
 		public GLib.SocketType type { get; set construct; }
+		public virtual signal void event (GLib.SocketClientEvent event, GLib.SocketConnectable connectable, GLib.IOStream connection);
 	}
 	[CCode (cheader_filename = "gio/gio.h")]
 	public class SocketConnection : GLib.IOStream {
 		[CCode (has_construct_function = false)]
 		protected SocketConnection ();
-		public static unowned GLib.SocketConnection factory_create_connection (GLib.Socket socket);
+		public bool connect (GLib.SocketAddress address, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public async bool connect_async (GLib.SocketAddress address, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public static GLib.SocketConnection factory_create_connection (GLib.Socket socket);
 		public static GLib.Type factory_lookup_type (GLib.SocketFamily family, GLib.SocketType type, int protocol_id);
 		public static void factory_register_type (GLib.Type g_type, GLib.SocketFamily family, GLib.SocketType type, int protocol);
-		public unowned GLib.SocketAddress get_local_address () throws GLib.Error;
-		public unowned GLib.SocketAddress get_remote_address () throws GLib.Error;
+		public GLib.SocketAddress get_local_address () throws GLib.Error;
+		public GLib.SocketAddress get_remote_address () throws GLib.Error;
 		public unowned GLib.Socket get_socket ();
+		public bool is_connected ();
 		public GLib.Socket socket { get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	public class SocketControlMessage : GLib.Object {
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_socket_control_message_get_type ()")]
+	public abstract class SocketControlMessage : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected SocketControlMessage ();
-		public virtual GLib.SocketControlMessage deserialize (int level, int type, [CCode (array_length_pos = 2.9, array_length_type = "gsize")] uint8[] data);
+		public static GLib.SocketControlMessage deserialize (int level, int type, [CCode (array_length_cname = "size", array_length_pos = 2.5, array_length_type = "gsize")] uint8[] data);
 		public virtual int get_level ();
 		public int get_msg_type ();
 		public virtual size_t get_size ();
 		[NoWrapper]
 		public virtual int get_type ();
-		public virtual void serialize ([CCode (array_length = false)] uint8[] data);
+		public virtual void serialize ([CCode (array_length = false, type = "gpointer")] uint8[] data);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_socket_listener_get_type ()")]
 	public class SocketListener : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public SocketListener ();
-		public unowned GLib.SocketConnection accept (out unowned GLib.Object source_object, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public async unowned GLib.SocketConnection accept_async (GLib.Cancellable? cancellable = null, out GLib.Object? source_object = null) throws GLib.Error;
-		public unowned GLib.Socket accept_socket (out unowned GLib.Object source_object, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public async unowned GLib.Socket accept_socket_async (GLib.Cancellable? cancellable = null, out GLib.Object? source_object = null) throws GLib.Error;
-		public bool add_address (GLib.SocketAddress address, GLib.SocketType type, GLib.SocketProtocol protocol, GLib.Object? source_object, out unowned GLib.SocketAddress effective_address) throws GLib.Error;
-		public uint16 add_any_inet_port (GLib.Object source_object) throws GLib.Error;
+		public GLib.SocketConnection accept (out unowned GLib.Object source_object = null, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public async GLib.SocketConnection accept_async (GLib.Cancellable? cancellable = null, out unowned GLib.Object source_object = null) throws GLib.Error;
+		public GLib.Socket accept_socket (out unowned GLib.Object source_object = null, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public async GLib.Socket accept_socket_async (GLib.Cancellable? cancellable = null, out unowned GLib.Object source_object = null) throws GLib.Error;
+		public bool add_address (GLib.SocketAddress address, GLib.SocketType type, GLib.SocketProtocol protocol, GLib.Object? source_object, out GLib.SocketAddress effective_address) throws GLib.Error;
+		public uint16 add_any_inet_port (GLib.Object? source_object) throws GLib.Error;
 		public bool add_inet_port (uint16 port, GLib.Object? source_object) throws GLib.Error;
 		public bool add_socket (GLib.Socket socket, GLib.Object? source_object) throws GLib.Error;
 		[NoWrapper]
@@ -1522,7 +1910,7 @@ namespace GLib {
 		[NoAccessorMethod]
 		public int listen_backlog { get; set construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_socket_service_get_type ()")]
 	public class SocketService : GLib.SocketListener {
 		[CCode (has_construct_function = false)]
 		public SocketService ();
@@ -1537,7 +1925,7 @@ namespace GLib {
 		[CCode (cname = "g_source_set_callback")]
 		public void set_callback ([CCode (type = "GSourceFunc")] owned GLib.SocketSourceFunc func);
 	}
-	[CCode (cheader_filename = "gio/gio.h", copy_function = "g_srv_target_copy", type_id = "g_srv_target_get_type ()")]
+	[CCode (cheader_filename = "gio/gio.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "g_srv_target_get_type ()")]
 	[Compact]
 	public class SrvTarget {
 		[CCode (has_construct_function = false)]
@@ -1547,9 +1935,10 @@ namespace GLib {
 		public uint16 get_port ();
 		public uint16 get_priority ();
 		public uint16 get_weight ();
+		[CCode (cheader_filename = "gio/gio.h")]
 		public static GLib.List<GLib.SrvTarget> list_sort (owned GLib.List<GLib.SrvTarget> targets);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_tcp_connection_get_type ()")]
 	public class TcpConnection : GLib.SocketConnection {
 		[CCode (has_construct_function = false)]
 		protected TcpConnection ();
@@ -1557,20 +1946,20 @@ namespace GLib {
 		public void set_graceful_disconnect (bool graceful_disconnect);
 		public bool graceful_disconnect { get; set; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_tcp_wrapper_connection_get_type ()")]
 	public class TcpWrapperConnection : GLib.TcpConnection {
 		[CCode (has_construct_function = false, type = "GSocketConnection*")]
 		public TcpWrapperConnection (GLib.IOStream base_io_stream, GLib.Socket socket);
 		public unowned GLib.IOStream get_base_io_stream ();
 		public GLib.IOStream base_io_stream { get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_themed_icon_get_type ()")]
 	public class ThemedIcon : GLib.Object, GLib.Icon {
 		[CCode (has_construct_function = false, type = "GIcon*")]
 		public ThemedIcon (string iconname);
 		public void append_name (string iconname);
 		[CCode (has_construct_function = false, type = "GIcon*")]
-		public ThemedIcon.from_names (string[] iconnames);
+		public ThemedIcon.from_names ([CCode (array_length_cname = "len", array_length_pos = 1.1)] string[] iconnames);
 		[CCode (array_length = false, array_null_terminated = true)]
 		public unowned string[] get_names ();
 		public void prepend_name (string iconname);
@@ -1582,11 +1971,7 @@ namespace GLib {
 		[NoAccessorMethod]
 		public bool use_default_fallbacks { get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	[Compact]
-	public class ThemedIconClass {
-	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_threaded_socket_service_get_type ()")]
 	public class ThreadedSocketService : GLib.SocketService {
 		[CCode (has_construct_function = false, type = "GSocketService*")]
 		public ThreadedSocketService (int max_threads);
@@ -1594,7 +1979,7 @@ namespace GLib {
 		public int max_threads { get; construct; }
 		public virtual signal bool run (GLib.SocketConnection connection, GLib.Object source_object);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_tls_certificate_get_type ()")]
 	public class TlsCertificate : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected TlsCertificate ();
@@ -1605,8 +1990,8 @@ namespace GLib {
 		[CCode (has_construct_function = false)]
 		public TlsCertificate.from_pem (string data, ssize_t length) throws GLib.Error;
 		public unowned GLib.TlsCertificate get_issuer ();
-		public static unowned GLib.List list_new_from_file (string file) throws GLib.Error;
-		public virtual GLib.TlsCertificateFlags verify (GLib.SocketConnectable identity, GLib.TlsCertificate trusted_ca);
+		public static GLib.List<GLib.TlsCertificate> list_new_from_file (string file) throws GLib.Error;
+		public virtual GLib.TlsCertificateFlags verify (GLib.SocketConnectable? identity, GLib.TlsCertificate? trusted_ca);
 		[NoAccessorMethod]
 		public GLib.ByteArray certificate { owned get; construct; }
 		[NoAccessorMethod]
@@ -1615,8 +2000,8 @@ namespace GLib {
 		public GLib.ByteArray private_key { construct; }
 		public string private_key_pem { construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	public class TlsConnection : GLib.IOStream {
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_tls_connection_get_type ()")]
+	public abstract class TlsConnection : GLib.IOStream {
 		[CCode (has_construct_function = false)]
 		protected TlsConnection ();
 		public bool emit_accept_certificate (GLib.TlsCertificate peer_cert, GLib.TlsCertificateFlags errors);
@@ -1627,14 +2012,16 @@ namespace GLib {
 		public GLib.TlsCertificateFlags get_peer_certificate_errors ();
 		public GLib.TlsRehandshakeMode get_rehandshake_mode ();
 		public bool get_require_close_notify ();
+		[Deprecated (since = "2.30")]
 		public bool get_use_system_certdb ();
 		public virtual bool handshake (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public virtual async bool handshake_async (int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public void set_certificate (GLib.TlsCertificate certificate);
 		public void set_database (GLib.TlsDatabase database);
-		public void set_interaction (GLib.TlsInteraction interaction);
+		public void set_interaction (GLib.TlsInteraction? interaction);
 		public void set_rehandshake_mode (GLib.TlsRehandshakeMode mode);
 		public void set_require_close_notify (bool require_close_notify);
+		[Deprecated (since = "2.30")]
 		public void set_use_system_certdb (bool use_system_certdb);
 		[NoAccessorMethod]
 		public GLib.IOStream base_io_stream { owned get; construct; }
@@ -1645,24 +2032,29 @@ namespace GLib {
 		public GLib.TlsCertificateFlags peer_certificate_errors { get; }
 		public GLib.TlsRehandshakeMode rehandshake_mode { get; set construct; }
 		public bool require_close_notify { get; set construct; }
+		[Deprecated (since = "2.30")]
 		public bool use_system_certdb { get; set construct; }
 		public virtual signal bool accept_certificate (GLib.TlsCertificate peer_cert, GLib.TlsCertificateFlags errors);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	public class TlsDatabase : GLib.Object {
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_tls_database_get_type ()")]
+	public abstract class TlsDatabase : GLib.Object {
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_TLS_DATABASE_PURPOSE_AUTHENTICATE_CLIENT")]
+		public const string PURPOSE_AUTHENTICATE_CLIENT;
+		[CCode (cheader_filename = "gio/gio.h", cname = "G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER")]
+		public const string PURPOSE_AUTHENTICATE_SERVER;
 		[CCode (has_construct_function = false)]
 		protected TlsDatabase ();
 		public virtual string? create_certificate_handle (GLib.TlsCertificate certificate);
-		public virtual GLib.TlsCertificate lookup_certificate_for_handle (string handle, GLib.TlsInteraction interaction, GLib.TlsDatabaseLookupFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public virtual async GLib.TlsCertificate lookup_certificate_for_handle_async (string handle, GLib.TlsInteraction interaction, GLib.TlsDatabaseLookupFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public virtual GLib.TlsCertificate lookup_certificate_issuer (GLib.TlsCertificate certificate, GLib.TlsInteraction interaction, GLib.TlsDatabaseLookupFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public virtual async GLib.TlsCertificate lookup_certificate_issuer_async (GLib.TlsCertificate certificate, GLib.TlsInteraction interaction, GLib.TlsDatabaseLookupFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public virtual GLib.List<GLib.TlsCertificate> lookup_certificates_issued_by (GLib.ByteArray issuer_raw_dn, GLib.TlsInteraction interaction, GLib.TlsDatabaseLookupFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public virtual async GLib.List<GLib.TlsCertificate> lookup_certificates_issued_by_async (GLib.ByteArray issuer_raw_dn, GLib.TlsInteraction interaction, GLib.TlsDatabaseLookupFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public virtual GLib.TlsCertificateFlags verify_chain (GLib.TlsCertificate chain, string purpose, GLib.SocketConnectable identity, GLib.TlsInteraction interaction, GLib.TlsDatabaseVerifyFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public virtual async GLib.TlsCertificateFlags verify_chain_async (GLib.TlsCertificate chain, string purpose, GLib.SocketConnectable identity, GLib.TlsInteraction interaction, GLib.TlsDatabaseVerifyFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
-	}
-	[CCode (cheader_filename = "gio/gio.h")]
+		public virtual GLib.TlsCertificate lookup_certificate_for_handle (string handle, GLib.TlsInteraction? interaction, GLib.TlsDatabaseLookupFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public virtual async GLib.TlsCertificate lookup_certificate_for_handle_async (string handle, GLib.TlsInteraction? interaction, GLib.TlsDatabaseLookupFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public virtual GLib.TlsCertificate lookup_certificate_issuer (GLib.TlsCertificate certificate, GLib.TlsInteraction? interaction, GLib.TlsDatabaseLookupFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public virtual async GLib.TlsCertificate lookup_certificate_issuer_async (GLib.TlsCertificate certificate, GLib.TlsInteraction? interaction, GLib.TlsDatabaseLookupFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public virtual GLib.List<GLib.TlsCertificate> lookup_certificates_issued_by (GLib.ByteArray issuer_raw_dn, GLib.TlsInteraction? interaction, GLib.TlsDatabaseLookupFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public virtual async void lookup_certificates_issued_by_async (GLib.ByteArray issuer_raw_dn, GLib.TlsInteraction? interaction, GLib.TlsDatabaseLookupFlags flags, GLib.Cancellable? cancellable = null);
+		public virtual GLib.TlsCertificateFlags verify_chain (GLib.TlsCertificate chain, string purpose, GLib.SocketConnectable? identity, GLib.TlsInteraction? interaction, GLib.TlsDatabaseVerifyFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public virtual async GLib.TlsCertificateFlags verify_chain_async (GLib.TlsCertificate chain, string purpose, GLib.SocketConnectable? identity, GLib.TlsInteraction? interaction, GLib.TlsDatabaseVerifyFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_tls_interaction_get_type ()")]
 	public class TlsInteraction : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected TlsInteraction ();
@@ -1678,32 +2070,34 @@ namespace GLib {
 		public virtual unowned string get_default_warning ();
 		public unowned string get_description ();
 		public GLib.TlsPasswordFlags get_flags ();
-		public virtual unowned uchar[] get_value (size_t length);
+		[CCode (array_length_pos = 0.1)]
+		public virtual unowned uint8[] get_value ();
 		public unowned string get_warning ();
 		public void set_description (string description);
 		public void set_flags (GLib.TlsPasswordFlags flags);
-		public virtual void set_value (uchar[] value, ssize_t length);
-		public void set_value_full (uchar[] value, ssize_t length, GLib.DestroyNotify destroy);
+		public void set_value ([CCode (array_length_cname = "length", array_length_pos = 1.1, array_length_type = "gssize", type = "guchar*")] uint8[] value);
+		[CCode (vfunc_name = "set_value")]
+		public virtual void set_value_full ([CCode (array_length_cname = "length", array_length_pos = 1.5, array_length_type = "gssize", type = "guchar*")] owned uint8[] value, GLib.DestroyNotify? notify = GLib.free);
 		public void set_warning (string warning);
 		public string description { get; set; }
 		public GLib.TlsPasswordFlags flags { get; set; }
 		public string warning { get; set; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
-	[Compact]
-	public class UnixCredentialsMessage {
-	}
-	[CCode (cheader_filename = "gio/gunixfdlist.h")]
+	[CCode (cheader_filename = "gio/gunixfdlist.h", type_id = "g_unix_fd_list_get_type ()")]
 	public class UnixFDList : GLib.Object {
+		[CCode (has_construct_function = false)]
 		public UnixFDList ();
-		public int append (int fd) throws GLib.IOError;
-		public UnixFDList.from_array (int[] fds);
-		public int @get (int index) throws GLib.IOError;
+		public int append (int fd) throws GLib.Error;
+		[CCode (has_construct_function = false)]
+		public UnixFDList.from_array ([CCode (array_length_cname = "n_fds", array_length_pos = 1.1)] int[] fds);
+		public int @get (int index_) throws GLib.Error;
+		public int get_length ();
+		[CCode (array_length_pos = 0.1)]
 		public unowned int[] peek_fds ();
+		[CCode (array_length_pos = 0.1)]
 		public int[] steal_fds ();
-		public int length { get; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_vfs_get_type ()")]
 	public class Vfs : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected Vfs ();
@@ -1713,6 +2107,7 @@ namespace GLib {
 		public virtual GLib.File get_file_for_path (string path);
 		public virtual GLib.File get_file_for_uri (string uri);
 		public static unowned GLib.Vfs get_local ();
+		[CCode (array_length = false, array_null_terminated = true)]
 		public virtual unowned string[] get_supported_uri_schemes ();
 		public virtual bool is_active ();
 		[NoWrapper]
@@ -1723,13 +2118,14 @@ namespace GLib {
 		public virtual void local_file_removed (string filename);
 		[NoWrapper]
 		public virtual bool local_file_set_attributes (string filename, GLib.FileInfo info, GLib.FileQueryInfoFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public virtual unowned GLib.File parse_name (string parse_name);
+		public virtual GLib.File parse_name (string parse_name);
 	}
 	[CCode (cheader_filename = "gio/gio.h")]
 	public class VolumeMonitor : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected VolumeMonitor ();
-		public virtual unowned GLib.Volume adopt_orphan_mount (GLib.Mount mount);
+		[Deprecated (since = "2.20")]
+		public static GLib.Volume adopt_orphan_mount (GLib.Mount mount);
 		public static GLib.VolumeMonitor @get ();
 		public virtual GLib.List<GLib.Drive> get_connected_drives ();
 		public virtual GLib.Mount get_mount_for_uuid (string uuid);
@@ -1751,19 +2147,19 @@ namespace GLib {
 		public virtual signal void volume_changed (GLib.Volume volume);
 		public virtual signal void volume_removed (GLib.Volume volume);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_zlib_compressor_get_type ()")]
 	public class ZlibCompressor : GLib.Object, GLib.Converter {
 		[CCode (has_construct_function = false)]
 		public ZlibCompressor (GLib.ZlibCompressorFormat format, int level = -1);
 		public unowned GLib.FileInfo get_file_info ();
-		public void set_file_info (GLib.FileInfo file_info);
+		public void set_file_info (GLib.FileInfo? file_info);
 		public GLib.FileInfo file_info { get; set; }
 		[NoAccessorMethod]
 		public GLib.ZlibCompressorFormat format { get; construct; }
 		[NoAccessorMethod]
 		public int level { get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_zlib_decompressor_get_type ()")]
 	public class ZlibDecompressor : GLib.Object, GLib.Converter {
 		[CCode (has_construct_function = false)]
 		public ZlibDecompressor (GLib.ZlibCompressorFormat format);
@@ -1772,23 +2168,23 @@ namespace GLib {
 		[NoAccessorMethod]
 		public GLib.ZlibCompressorFormat format { get; construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_cname = "GActionInterface", type_id = "g_action_get_type ()")]
 	public interface Action : GLib.Object {
-		public abstract void activate (GLib.Variant parameter);
+		public abstract void activate (GLib.Variant? parameter);
 		public abstract void change_state (GLib.Variant value);
 		public abstract bool get_enabled ();
 		public abstract unowned string get_name ();
 		public abstract unowned GLib.VariantType get_parameter_type ();
-		public abstract unowned GLib.Variant get_state ();
-		public abstract unowned GLib.Variant get_state_hint ();
+		public abstract GLib.Variant get_state ();
+		public abstract GLib.Variant get_state_hint ();
 		public abstract unowned GLib.VariantType get_state_type ();
-		public bool enabled { get; }
-		public string name { get; }
-		public GLib.VariantType parameter_type { get; }
-		public GLib.Variant state { get; }
-		public GLib.VariantType state_type { get; }
+		public abstract bool enabled { get; }
+		public abstract string name { get; }
+		public abstract GLib.VariantType parameter_type { get; }
+		public abstract GLib.Variant state { owned get; }
+		public abstract GLib.VariantType state_type { get; }
 	}
-	[CCode (cheader_filename = "gio/gio.h", type_cname = "GActionGroupInterface")]
+	[CCode (cheader_filename = "gio/gio.h", type_cname = "GActionGroupInterface", type_id = "g_action_group_get_type ()")]
 	public interface ActionGroup : GLib.Object {
 		public abstract void activate_action (string action_name, GLib.Variant? parameter);
 		public abstract void change_action_state (string action_name, GLib.Variant value);
@@ -1800,42 +2196,49 @@ namespace GLib {
 		public abstract bool has_action (string action_name);
 		[CCode (array_length = false, array_null_terminated = true)]
 		public abstract string[] list_actions ();
+		public virtual bool query_action (string action_name, out bool enabled, out GLib.VariantType parameter_type, out GLib.VariantType state_type, out GLib.Variant state_hint, out GLib.Variant state);
 		[HasEmitter]
-		public signal void action_added (string action_name);
+		public virtual signal void action_added (string action_name);
 		[HasEmitter]
-		public signal void action_enabled_changed (string action_name, bool enabled);
+		public virtual signal void action_enabled_changed (string action_name, bool enabled);
 		[HasEmitter]
-		public signal void action_removed (string action_name);
+		public virtual signal void action_removed (string action_name);
 		[HasEmitter]
-		public signal void action_state_changed (string action_name, GLib.Variant state);
+		public virtual signal void action_state_changed (string action_name, GLib.Variant state);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_cname = "GActionMapInterface", type_id = "g_action_map_get_type ()")]
+	public interface ActionMap : GLib.ActionGroup, GLib.Object {
+		public abstract void add_action (GLib.Action action);
+		public void add_action_entries ([CCode (array_length_cname = "n_entries", array_length_pos = 1.5)] GLib.ActionEntry[] entries, void* user_data);
+		public abstract unowned GLib.Action lookup_action (string action_name);
+		public abstract void remove_action (string action_name);
+	}
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_app_info_get_type ()")]
 	public interface AppInfo : GLib.Object {
 		public abstract bool add_supports_type (string content_type) throws GLib.Error;
 		public abstract bool can_delete ();
 		public abstract bool can_remove_supports_type ();
-		public static unowned GLib.AppInfo create_from_commandline (string commandline, string? application_name, GLib.AppInfoCreateFlags flags) throws GLib.Error;
-		public bool @delete ();
-		[NoWrapper]
-		public abstract bool do_delete ();
-		public abstract unowned GLib.AppInfo dup ();
+		public static GLib.AppInfo create_from_commandline (string commandline, string? application_name, GLib.AppInfoCreateFlags flags) throws GLib.Error;
+		[CCode (vfunc_name = "do_delete")]
+		public abstract bool @delete ();
+		public abstract GLib.AppInfo dup ();
 		public abstract bool equal (GLib.AppInfo appinfo2);
 		public static GLib.List<GLib.AppInfo> get_all ();
 		public static GLib.List<GLib.AppInfo> get_all_for_type (string content_type);
 		public abstract unowned string get_commandline ();
-		public static unowned GLib.AppInfo get_default_for_type (string content_type, bool must_support_uris);
-		public static unowned GLib.AppInfo get_default_for_uri_scheme (string uri_scheme);
+		public static GLib.AppInfo get_default_for_type (string content_type, bool must_support_uris);
+		public static GLib.AppInfo get_default_for_uri_scheme (string uri_scheme);
 		public abstract unowned string get_description ();
 		public abstract unowned string get_display_name ();
 		public abstract unowned string get_executable ();
-		public static unowned GLib.List get_fallback_for_type (string content_type);
+		public static GLib.List<GLib.AppInfo> get_fallback_for_type (string content_type);
 		public abstract unowned GLib.Icon get_icon ();
 		public abstract unowned string get_id ();
 		public abstract unowned string get_name ();
-		public static unowned GLib.List get_recommended_for_type (string content_type);
+		public static GLib.List<GLib.AppInfo> get_recommended_for_type (string content_type);
 		public abstract bool launch (GLib.List<GLib.File>? files, GLib.AppLaunchContext? launch_context) throws GLib.Error;
 		public static bool launch_default_for_uri (string uri, GLib.AppLaunchContext? launch_context) throws GLib.Error;
-		public abstract bool launch_uris (GLib.List<string>? uris, GLib.AppLaunchContext launch_context) throws GLib.Error;
+		public abstract bool launch_uris (GLib.List<string>? uris, GLib.AppLaunchContext? launch_context) throws GLib.Error;
 		public abstract bool remove_supports_type (string content_type) throws GLib.Error;
 		public static void reset_type_associations (string content_type);
 		public abstract bool set_as_default_for_extension (string extension) throws GLib.Error;
@@ -1848,58 +2251,64 @@ namespace GLib {
 	[CCode (cheader_filename = "gio/gio.h")]
 	public interface AsyncInitable : GLib.Object {
 		public abstract async bool init_async (int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public static async unowned GLib.Object new_async (GLib.Type object_type, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable, ...) throws GLib.Error;
-		public static async void new_valist_async (GLib.Type object_type, string first_property_name, void* var_args, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null);
-		public static async void newv_async (GLib.Type object_type, uint n_parameters, GLib.Parameter parameters, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null);
-	}
-	[CCode (cheader_filename = "gio/gio.h")]
+		[CCode (finish_function = "g_async_initable_new_finish")]
+		public static async GLib.Object new_async (GLib.Type object_type, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable, ...) throws GLib.Error;
+		[CCode (finish_function = "g_async_initable_new_finish")]
+		public static async GLib.Object new_valist_async (GLib.Type object_type, string first_property_name, va_list var_args, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null);
+		[CCode (finish_function = "g_async_initable_new_finish")]
+		public static async GLib.Object newv_async (GLib.Type object_type, [CCode (array_length_pos = 1.1)] GLib.Parameter[] parameters, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null);
+	}
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_async_result_get_type ()")]
 	public interface AsyncResult : GLib.Object {
-		public abstract unowned GLib.Object get_source_object ();
+		public abstract GLib.Object get_source_object ();
 		public abstract void* get_user_data ();
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_converter_get_type ()")]
 	public interface Converter : GLib.Object {
-		public abstract GLib.ConverterResult convert ([CCode (array_length_type = "gsize")] uint8[] inbuf, [CCode (array_length_type = "gsize")] uint8[] outbuf, GLib.ConverterFlags flags, out size_t bytes_read, out size_t bytes_written) throws GLib.Error;
+		public abstract GLib.ConverterResult convert ([CCode (array_length_cname = "inbuf_size", array_length_pos = 1.5, array_length_type = "gsize")] uint8[] inbuf, [CCode (array_length_cname = "outbuf_size", array_length_pos = 2.5, array_length_type = "gsize", type = "void*")] uint8[] outbuf, GLib.ConverterFlags flags, out size_t bytes_read, out size_t bytes_written) throws GLib.Error;
 		public abstract void reset ();
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_dbus_interface_get_type ()")]
 	public interface DBusInterface : GLib.Object {
 		public abstract unowned GLib.DBusInterfaceInfo get_info ();
 		public abstract unowned GLib.DBusObject get_object ();
 		public abstract void set_object (GLib.DBusObject object);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_dbus_object_get_type ()")]
 	public interface DBusObject : GLib.Object {
-		public abstract unowned GLib.DBusInterface get_interface (string interface_name);
+		public abstract GLib.DBusInterface get_interface (string interface_name);
 		public abstract GLib.List<GLib.DBusInterface> get_interfaces ();
 		public abstract unowned string get_object_path ();
-		public signal void interface_added (GLib.DBusInterface interface_);
-		public signal void interface_removed (GLib.DBusInterface interface_);
+		public virtual signal void interface_added (GLib.DBusInterface interface_);
+		public virtual signal void interface_removed (GLib.DBusInterface interface_);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_dbus_object_manager_get_type ()")]
 	public interface DBusObjectManager : GLib.Object {
-		public abstract unowned GLib.DBusInterface get_interface (string object_path, string interface_name);
-		public abstract unowned GLib.DBusObject get_object (string object_path);
+		public abstract GLib.DBusInterface get_interface (string object_path, string interface_name);
+		public abstract GLib.DBusObject get_object (string object_path);
 		public abstract unowned string get_object_path ();
-		public abstract unowned GLib.List get_objects ();
-		public signal void interface_added (GLib.DBusObject object, GLib.DBusInterface interface_);
-		public signal void interface_removed (GLib.DBusObject object, GLib.DBusInterface interface_);
-		public signal void object_added (GLib.DBusObject object);
-		public signal void object_removed (GLib.DBusObject object);
+		public abstract GLib.List<GLib.DBusObject> get_objects ();
+		public virtual signal void interface_added (GLib.DBusObject object, GLib.DBusInterface interface_);
+		public virtual signal void interface_removed (GLib.DBusObject object, GLib.DBusInterface interface_);
+		public virtual signal void object_added (GLib.DBusObject object);
+		public virtual signal void object_removed (GLib.DBusObject object);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_drive_get_type ()")]
 	public interface Drive : GLib.Object {
 		public abstract bool can_eject ();
 		public abstract bool can_poll_for_media ();
 		public abstract bool can_start ();
 		public abstract bool can_start_degraded ();
 		public abstract bool can_stop ();
+		[Deprecated (since = "2.22")]
 		public abstract async bool eject (GLib.MountUnmountFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract async bool eject_with_operation (GLib.MountUnmountFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract unowned string enumerate_identifiers ();
-		public abstract unowned GLib.Icon get_icon ();
-		public abstract unowned string get_identifier (string kind);
-		public abstract unowned string get_name ();
+		[CCode (array_length = false, array_null_terminated = true)]
+		public abstract string[] enumerate_identifiers ();
+		public abstract GLib.Icon get_icon ();
+		public abstract string get_identifier (string kind);
+		public abstract string get_name ();
+		public abstract unowned string get_sort_key ();
 		public abstract GLib.DriveStartStopType get_start_stop_type ();
 		public abstract GLib.List<GLib.Volume> get_volumes ();
 		public abstract bool has_media ();
@@ -1909,12 +2318,12 @@ namespace GLib {
 		public abstract async bool poll_for_media (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract async bool start (GLib.DriveStartFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract async bool stop (GLib.MountUnmountFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public signal void changed ();
-		public signal void disconnected ();
-		public signal void eject_button ();
-		public signal void stop_button ();
+		public virtual signal void changed ();
+		public virtual signal void disconnected ();
+		public virtual signal void eject_button ();
+		public virtual signal void stop_button ();
 	}
-	[CCode (cheader_filename = "gio/gio.h", cname = "GFile")]
+	[CCode (cheader_filename = "gio/gio.h")]
 	public interface File : GLib.Object {
 		public abstract GLib.FileOutputStream append_to (GLib.FileCreateFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract async GLib.FileOutputStream append_to_async (GLib.FileCreateFlags flags, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
@@ -1923,12 +2332,12 @@ namespace GLib {
 		public bool copy_attributes (GLib.File destination, GLib.FileCopyFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract GLib.FileOutputStream create (GLib.FileCreateFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract async GLib.FileOutputStream create_async (GLib.FileCreateFlags flags, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract unowned GLib.FileIOStream create_readwrite (GLib.FileCreateFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract async unowned GLib.FileIOStream create_readwrite_async (GLib.FileCreateFlags flags, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public bool @delete (GLib.Cancellable? cancellable = null) throws GLib.Error;
-		[NoWrapper]
-		public abstract bool delete_file (GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract unowned GLib.File dup ();
+		public abstract GLib.FileIOStream create_readwrite (GLib.FileCreateFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public abstract async GLib.FileIOStream create_readwrite_async (GLib.FileCreateFlags flags, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[CCode (vfunc_name = "delete_file")]
+		public abstract bool @delete (GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public abstract GLib.File dup ();
+		[Deprecated (since = "2.22")]
 		public abstract async bool eject_mountable (GLib.MountUnmountFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract async bool eject_mountable_with_operation (GLib.MountUnmountFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract GLib.FileEnumerator enumerate_children (string attributes, GLib.FileQueryInfoFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
@@ -1946,51 +2355,56 @@ namespace GLib {
 		public abstract string get_uri ();
 		public abstract string get_uri_scheme ();
 		public bool has_parent (GLib.File? parent);
-		public bool has_prefix (GLib.File prefix);
+		[CCode (vfunc_name = "prefix_matches")]
+		public abstract bool has_prefix (GLib.File file);
 		public abstract bool has_uri_scheme (string uri_scheme);
 		public abstract uint hash ();
 		public abstract bool is_native ();
-		public bool load_contents (GLib.Cancellable? cancellable = null, out uint8[] contents, out string etag_out = null) throws GLib.Error;
-		public async bool load_contents_async (GLib.Cancellable? cancellable = null, out uint8[] contents, out string etag_out = null) throws GLib.Error;
-		public async bool load_partial_contents_async (GLib.Cancellable? cancellable, GLib.FileReadMoreCallback read_more_callback, out uint8[] contents, out string etag_out = null) throws GLib.Error;
+		public bool load_contents (GLib.Cancellable? cancellable = null, [CCode (array_length_cname = "length", array_length_pos = 2.5, array_length_type = "gsize")] out uint8[] contents, out string etag_out) throws GLib.Error;
+		public async bool load_contents_async (GLib.Cancellable? cancellable = null, [CCode (array_length_cname = "length", array_length_pos = 2.5, array_length_type = "gsize")] out uint8[] contents, out string etag_out) throws GLib.Error;
+		public async bool load_partial_contents_async (GLib.Cancellable? cancellable = null, GLib.FileReadMoreCallback read_more_callback, [CCode (array_length_cname = "length", array_length_pos = 2.5, array_length_type = "gsize")] out uint8[] contents, out string etag_out) throws GLib.Error;
 		public abstract bool make_directory (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public bool make_directory_with_parents (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract bool make_symbolic_link (string symlink_value, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public unowned GLib.FileMonitor monitor (GLib.FileMonitorFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public GLib.FileMonitor monitor (GLib.FileMonitorFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[CCode (vfunc_name = "monitor_dir")]
 		public abstract GLib.FileMonitor monitor_directory (GLib.FileMonitorFlags flags, GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public abstract GLib.FileMonitor monitor_file (GLib.FileMonitorFlags flags, GLib.Cancellable? cancellable = null) throws GLib.IOError;
 		public abstract async bool mount_enclosing_volume (GLib.MountMountFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract async unowned GLib.File mount_mountable (GLib.MountMountFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public abstract async GLib.File mount_mountable (GLib.MountMountFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract bool move (GLib.File destination, GLib.FileCopyFlags flags, GLib.Cancellable? cancellable = null, GLib.FileProgressCallback? progress_callback = null) throws GLib.Error;
 		public static GLib.File new_for_commandline_arg (string arg);
 		public static GLib.File new_for_path (string path);
 		public static GLib.File new_for_uri (string uri);
-		public abstract unowned GLib.FileIOStream open_readwrite (GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract async unowned GLib.FileIOStream open_readwrite_async (int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public static GLib.File new_tmp (string? tmpl, out GLib.FileIOStream iostream) throws GLib.Error;
+		public abstract GLib.FileIOStream open_readwrite (GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public abstract async GLib.FileIOStream open_readwrite_async (int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public static GLib.File parse_name (string parse_name);
 		public abstract async bool poll_mountable (GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[Deprecated (replacement = "has_prefix", since = "vala-0.16")]
 		[NoWrapper]
 		public abstract bool prefix_matches (GLib.File file);
 		public GLib.AppInfo query_default_handler (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public bool query_exists (GLib.Cancellable? cancellable = null);
 		public GLib.FileType query_file_type (GLib.FileQueryInfoFlags flags, GLib.Cancellable? cancellable = null);
 		public abstract GLib.FileInfo query_filesystem_info (string attributes, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract async unowned GLib.FileInfo query_filesystem_info_async (string attributes, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public abstract async GLib.FileInfo query_filesystem_info_async (string attributes, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract GLib.FileInfo query_info (string attributes, GLib.FileQueryInfoFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract async GLib.FileInfo query_info_async (string attributes, GLib.FileQueryInfoFlags flags, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract unowned GLib.FileAttributeInfoList query_settable_attributes (GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract unowned GLib.FileAttributeInfoList query_writable_namespaces (GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public GLib.FileInputStream read (GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public abstract GLib.FileAttributeInfoList query_settable_attributes (GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public abstract GLib.FileAttributeInfoList query_writable_namespaces (GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[CCode (vfunc_name = "read_fn")]
+		public abstract GLib.FileInputStream read (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract async GLib.FileInputStream read_async (int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[Deprecated (replacement = "read", since = "vala-0.16")]
 		[NoWrapper]
 		public abstract unowned GLib.FileInputStream read_fn (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract GLib.FileOutputStream replace (string? etag, bool make_backup, GLib.FileCreateFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract async GLib.FileOutputStream replace_async (string? etag, bool make_backup, GLib.FileCreateFlags flags, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public bool replace_contents (string contents, size_t length, string? etag, bool make_backup, GLib.FileCreateFlags flags, out string? new_etag, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public async bool replace_contents_async (string contents, size_t length, string? etag, bool make_backup, GLib.FileCreateFlags flags, GLib.Cancellable? cancellable = null, out string? new_etag = null) throws GLib.Error;
-		public abstract unowned GLib.FileIOStream replace_readwrite (string? etag, bool make_backup, GLib.FileCreateFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract async unowned GLib.FileIOStream replace_readwrite_async (string? etag, bool make_backup, GLib.FileCreateFlags flags, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public bool replace_contents ([CCode (array_length_cname = "length", array_length_pos = 1.5, array_length_type = "gsize")] uint8[] contents, string? etag, bool make_backup, GLib.FileCreateFlags flags, out string new_etag, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public async bool replace_contents_async ([CCode (array_length_cname = "length", array_length_pos = 1.5, array_length_type = "gsize")] uint8[] contents, string? etag, bool make_backup, GLib.FileCreateFlags flags, GLib.Cancellable? cancellable = null, out string new_etag) throws GLib.Error;
+		public abstract GLib.FileIOStream replace_readwrite (string? etag, bool make_backup, GLib.FileCreateFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public abstract async GLib.FileIOStream replace_readwrite_async (string? etag, bool make_backup, GLib.FileCreateFlags flags, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract GLib.File resolve_relative_path (string relative_path);
 		public abstract bool set_attribute (string attribute, GLib.FileAttributeType type, void* value_p, GLib.FileQueryInfoFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public bool set_attribute_byte_string (string attribute, string value, GLib.FileQueryInfoFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
@@ -1999,94 +2413,119 @@ namespace GLib {
 		public bool set_attribute_string (string attribute, string value, GLib.FileQueryInfoFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public bool set_attribute_uint32 (string attribute, uint32 value, GLib.FileQueryInfoFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public bool set_attribute_uint64 (string attribute, uint64 value, GLib.FileQueryInfoFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract async bool set_attributes_async (GLib.FileInfo info, GLib.FileQueryInfoFlags flags, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable, out unowned GLib.FileInfo info_out) throws GLib.Error;
+		public abstract async bool set_attributes_async (GLib.FileInfo info, GLib.FileQueryInfoFlags flags, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null, out FileInfo info_out) throws GLib.Error;
 		public abstract bool set_attributes_from_info (GLib.FileInfo info, GLib.FileQueryInfoFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract unowned GLib.File set_display_name (string display_name, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract async unowned GLib.File set_display_name_async (string display_name, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract async bool start_mountable (GLib.DriveStartFlags flags, GLib.MountOperation start_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public abstract GLib.File set_display_name (string display_name, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public abstract async GLib.File set_display_name_async (string display_name, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public abstract async bool start_mountable (GLib.DriveStartFlags flags, GLib.MountOperation? start_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract async bool stop_mountable (GLib.MountUnmountFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public bool supports_thread_contexts ();
 		public abstract bool trash (GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[Deprecated (since = "2.22")]
 		public abstract async bool unmount_mountable (GLib.MountUnmountFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract async bool unmount_mountable_with_operation (GLib.MountUnmountFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
 	}
 	[CCode (cheader_filename = "gio/gio.h")]
 	public interface Icon : GLib.Object {
-		public abstract bool equal (GLib.Icon icon2);
+		public abstract bool equal (GLib.Icon? icon2);
 		[NoWrapper]
 		public virtual GLib.Icon? from_tokens (string[] tokens, int version) throws GLib.Error;
 		public abstract uint hash ();
 		public static GLib.Icon? new_for_string (string str) throws GLib.Error;
 		public string? to_string ();
 		[NoWrapper]
-		public virtual bool to_tokens (GLib.PtrArray tokens, out int out_version);
+		public virtual bool to_tokens (GLib.GenericArray<string> tokens, out int out_version);
 	}
 	[CCode (cheader_filename = "gio/gio.h")]
 	public interface Initable : GLib.Object {
 		public abstract bool init (GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public static void* @new (GLib.Type object_type, GLib.Cancellable? cancellable, ...) throws GLib.Error;
-		public static unowned GLib.Object new_valist (GLib.Type object_type, string first_property_name, void* var_args, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public static void* newv (GLib.Type object_type, uint n_parameters, GLib.Parameter parameters, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public static GLib.Object @new (GLib.Type object_type, GLib.Cancellable? cancellable = null, ...) throws GLib.Error;
+		public static GLib.Object new_valist (GLib.Type object_type, string first_property_name, va_list var_args, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public static GLib.Object newv (GLib.Type object_type, [CCode (array_length_cname = "n_parameters", array_length_pos = 1.5, array_length_type = "guint")] GLib.Parameter[] parameters, GLib.Cancellable? cancellable = null) throws GLib.Error;
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_loadable_icon_get_type ()")]
 	public interface LoadableIcon : GLib.Icon, GLib.Object {
 		public abstract GLib.InputStream load (int size, out string? type, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract async GLib.InputStream load_async (int size, GLib.Cancellable? cancellable, out string? type) throws GLib.Error;
+		public abstract async GLib.InputStream load_async (int size, GLib.Cancellable? cancellable = null, out string? type = null) throws GLib.Error;
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_mount_get_type ()")]
 	public interface Mount : GLib.Object {
 		public abstract bool can_eject ();
 		public abstract bool can_unmount ();
+		[Deprecated (since = "2.22")]
 		public abstract async bool eject (GLib.MountUnmountFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract async bool eject_with_operation (GLib.MountUnmountFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract unowned GLib.File get_default_location ();
-		public abstract unowned GLib.Drive get_drive ();
-		public abstract unowned GLib.Icon get_icon ();
-		public abstract unowned string get_name ();
-		public abstract unowned GLib.File get_root ();
-		public abstract unowned string get_uuid ();
-		public abstract unowned GLib.Volume get_volume ();
-		public abstract async unowned string guess_content_type (bool force_rescan, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract unowned string guess_content_type_sync (bool force_rescan, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public abstract GLib.File get_default_location ();
+		public abstract GLib.Drive get_drive ();
+		public abstract GLib.Icon get_icon ();
+		public abstract string get_name ();
+		public abstract GLib.File get_root ();
+		public abstract unowned string get_sort_key ();
+		public abstract string get_uuid ();
+		public abstract GLib.Volume get_volume ();
+		[CCode (array_length = false, array_null_terminated = true)]
+		public abstract async string[] guess_content_type (bool force_rescan, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[CCode (array_length = false, array_null_terminated = true)]
+		public abstract string[] guess_content_type_sync (bool force_rescan, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public bool is_shadowed ();
 		public abstract async bool remount (GLib.MountMountFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public void shadow ();
+		[Deprecated (since = "2.22")]
 		public abstract async bool unmount (GLib.MountUnmountFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract async bool unmount_with_operation (GLib.MountUnmountFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public void unshadow ();
-		public signal void changed ();
-		public signal void pre_unmount ();
-		public signal void unmounted ();
+		public virtual signal void changed ();
+		public virtual signal void pre_unmount ();
+		public virtual signal void unmounted ();
+	}
+	[CCode (cheader_filename = "gio/gio.h", type_cname = "GNetworkMonitorInterface", type_id = "g_network_monitor_get_type ()")]
+	public interface NetworkMonitor : GLib.Initable, GLib.Object {
+		public abstract bool can_reach (GLib.SocketConnectable connectable, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public abstract async bool can_reach_async (GLib.SocketConnectable connectable, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public static unowned GLib.NetworkMonitor get_default ();
+		public bool get_network_available ();
+		[NoAccessorMethod]
+		public abstract bool network_available { get; }
+		public virtual signal void network_changed (bool available);
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_cname = "GPollableInputStreamInterface", type_id = "g_pollable_input_stream_get_type ()")]
 	public interface PollableInputStream : GLib.InputStream {
 		public abstract bool can_poll ();
-		public abstract GLib.TimeoutSource create_source (GLib.Cancellable? cancellable = null);
+		public abstract GLib.PollableSource create_source (GLib.Cancellable? cancellable = null);
 		public abstract bool is_readable ();
-		public abstract ssize_t read_nonblocking ([CCode (array_length_type = "gsize")] uint8[] buffer, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public ssize_t read_nonblocking ([CCode (array_length_cname = "size", array_length_pos = 1.5, array_length_type = "gsize", type = "void*")] uint8[] buffer, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[CCode (vfunc_name = "read_nonblocking")]
+		public abstract ssize_t read_nonblocking_fn ([CCode (array_length_cname = "size", array_length_pos = 1.1, array_length_type = "gsize", type = "void*")] uint8[] buffer) throws GLib.Error;
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_cname = "GPollableOutputStreamInterface", type_id = "g_pollable_output_stream_get_type ()")]
 	public interface PollableOutputStream : GLib.OutputStream {
 		public abstract bool can_poll ();
-		public abstract GLib.TimeoutSource create_source (GLib.Cancellable? cancellable = null);
+		public abstract GLib.PollableSource create_source (GLib.Cancellable? cancellable = null);
 		public abstract bool is_writable ();
-		public abstract ssize_t write_nonblocking ([CCode (array_length_type = "gsize")] uint8[] buffer, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public abstract ssize_t write_nonblocking ([CCode (array_length_cname = "size", array_length_pos = 1.1, array_length_type = "gsize")] uint8[] buffer) throws GLib.Error;
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_cname = "GProxyInterface", type_id = "g_proxy_get_type ()")]
 	public interface Proxy : GLib.Object {
-		public abstract unowned GLib.IOStream connect (GLib.IOStream connection, GLib.ProxyAddress proxy_address, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract async unowned GLib.IOStream connect_async (GLib.IOStream connection, GLib.ProxyAddress proxy_address, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public static unowned GLib.Proxy get_default_for_protocol (string protocol);
+		public abstract GLib.IOStream connect (GLib.IOStream connection, GLib.ProxyAddress proxy_address, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public abstract async GLib.IOStream connect_async (GLib.IOStream connection, GLib.ProxyAddress proxy_address, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		public static GLib.Proxy get_default_for_protocol (string protocol);
 		public abstract bool supports_hostname ();
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_cname = "GProxyResolverInterface", type_id = "g_proxy_resolver_get_type ()")]
 	public interface ProxyResolver : GLib.Object {
 		public static unowned GLib.ProxyResolver get_default ();
 		public abstract bool is_supported ();
-		public abstract unowned string lookup (string uri, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract async unowned string lookup_async (string uri, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[CCode (array_length = false, array_null_terminated = true)]
+		public abstract string[] lookup (string uri, GLib.Cancellable? cancellable = null) throws GLib.Error;
+		[CCode (array_length = false, array_null_terminated = true)]
+		public abstract async string[] lookup_async (string uri, GLib.Cancellable? cancellable = null) throws GLib.Error;
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_cname = "GRemoteActionGroupInterface", type_id = "g_remote_action_group_get_type ()")]
+	public interface RemoteActionGroup : GLib.ActionGroup, GLib.Object {
+		public abstract void activate_action_full (string action_name, GLib.Variant parameter, GLib.Variant platform_data);
+		public abstract void change_action_state_full (string action_name, GLib.Variant value, GLib.Variant platform_data);
+	}
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_seekable_get_type ()")]
 	public interface Seekable : GLib.Object {
 		public abstract bool can_seek ();
 		public abstract bool can_truncate ();
@@ -2095,68 +2534,109 @@ namespace GLib {
 		[CCode (vfunc_name = "truncate_fn")]
 		public abstract bool truncate (int64 offset, GLib.Cancellable? cancellable = null) throws GLib.Error;
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_socket_connectable_get_type ()")]
 	public interface SocketConnectable : GLib.Object {
-		public abstract unowned GLib.SocketAddressEnumerator enumerate ();
-		public abstract unowned GLib.SocketAddressEnumerator proxy_enumerate ();
+		public abstract GLib.SocketAddressEnumerator enumerate ();
+		public abstract GLib.SocketAddressEnumerator proxy_enumerate ();
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_cname = "GTlsBackendInterface", type_id = "g_tls_backend_get_type ()")]
 	public interface TlsBackend : GLib.Object {
 		public abstract GLib.Type get_certificate_type ();
 		public abstract GLib.Type get_client_connection_type ();
 		public static unowned GLib.TlsBackend get_default ();
-		public abstract unowned GLib.TlsDatabase get_default_database ();
+		public abstract GLib.TlsDatabase get_default_database ();
 		public abstract GLib.Type get_file_database_type ();
 		public abstract GLib.Type get_server_connection_type ();
 		public abstract bool supports_tls ();
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_cname = "GTlsClientConnectionInterface", type_id = "g_tls_client_connection_get_type ()")]
 	public interface TlsClientConnection : GLib.TlsConnection {
-		public unowned GLib.List get_accepted_cas ();
+		public GLib.List<GLib.ByteArray> get_accepted_cas ();
 		public unowned GLib.SocketConnectable get_server_identity ();
 		public bool get_use_ssl3 ();
 		public GLib.TlsCertificateFlags get_validation_flags ();
-		public static unowned GLib.IOStream @new (GLib.IOStream base_io_stream, GLib.SocketConnectable server_identity) throws GLib.Error;
+		public static GLib.TlsClientConnection? @new (GLib.IOStream base_io_stream, GLib.SocketConnectable? server_identity) throws GLib.Error;
 		public void set_server_identity (GLib.SocketConnectable identity);
 		public void set_use_ssl3 (bool use_ssl3);
 		public void set_validation_flags (GLib.TlsCertificateFlags flags);
-		public void* accepted_cas { get; }
-		public GLib.SocketConnectable server_identity { get; set construct; }
-		public bool use_ssl3 { get; set construct; }
-		public GLib.TlsCertificateFlags validation_flags { get; set construct; }
+		[NoAccessorMethod]
+		public abstract GLib.List<GLib.ByteArray> accepted_cas { owned get; }
+		[NoAccessorMethod]
+		public abstract GLib.SocketConnectable server_identity { owned get; set construct; }
+		[NoAccessorMethod]
+		public abstract bool use_ssl3 { get; set construct; }
+		[NoAccessorMethod]
+		public abstract GLib.TlsCertificateFlags validation_flags { get; set construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_cname = "GTlsFileDatabaseInterface", type_id = "g_tls_file_database_get_type ()")]
 	public interface TlsFileDatabase : GLib.TlsDatabase {
-		public static unowned GLib.TlsDatabase @new (string anchors) throws GLib.Error;
+		public static GLib.TlsFileDatabase? @new (string anchors) throws GLib.Error;
 		[NoAccessorMethod]
-		public string anchors { owned get; set construct; }
+		public abstract string anchors { owned get; set construct; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_cname = "GTlsServerConnectionInterface", type_id = "g_tls_server_connection_get_type ()")]
 	public interface TlsServerConnection : GLib.TlsConnection {
-		public static unowned GLib.IOStream @new (GLib.IOStream base_io_stream, GLib.TlsCertificate certificate) throws GLib.Error;
+		public static GLib.TlsServerConnection? @new (GLib.IOStream base_io_stream, GLib.TlsCertificate? certificate) throws GLib.Error;
 		[NoAccessorMethod]
-		public GLib.TlsAuthenticationMode authentication_mode { get; set; }
+		public abstract GLib.TlsAuthenticationMode authentication_mode { get; set; }
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", type_id = "g_volume_get_type ()")]
 	public interface Volume : GLib.Object {
 		public abstract bool can_eject ();
 		public abstract bool can_mount ();
+		[Deprecated (since = "2.22")]
 		public abstract async bool eject (GLib.MountUnmountFlags flags, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract async bool eject_with_operation (GLib.MountUnmountFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		public abstract unowned string enumerate_identifiers ();
-		public abstract unowned GLib.File get_activation_root ();
-		public abstract unowned GLib.Drive get_drive ();
-		public abstract unowned GLib.Icon get_icon ();
-		public abstract unowned string get_identifier (string kind);
-		public abstract unowned GLib.Mount get_mount ();
-		public abstract unowned string get_name ();
-		public abstract unowned string get_uuid ();
-		public async bool mount (GLib.MountMountFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
-		[NoWrapper]
-		public abstract void mount_fn (GLib.MountMountFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable, GLib.AsyncReadyCallback callback);
+		[CCode (array_length = false, array_null_terminated = true)]
+		public abstract string[] enumerate_identifiers ();
+		public abstract GLib.File get_activation_root ();
+		public abstract GLib.Drive get_drive ();
+		public abstract GLib.Icon get_icon ();
+		public abstract string get_identifier (string kind);
+		public abstract GLib.Mount get_mount ();
+		public abstract string get_name ();
+		public abstract unowned string get_sort_key ();
+		public abstract string get_uuid ();
+		[CCode (vfunc_name = "mount_fn")]
+		public abstract async bool mount (GLib.MountMountFlags flags, GLib.MountOperation? mount_operation, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public abstract bool should_automount ();
-		public signal void changed ();
-		public signal void removed ();
+		public virtual signal void changed ();
+		public virtual signal void removed ();
+	}
+	[CCode (cheader_filename = "gio/gio.h", has_type_id = false)]
+	public struct ActionEntry {
+		public weak string name;
+		public GLib.SimpleActionActivateCallback activate;
+		public weak string parameter_type;
+		public weak string state;
+		public GLib.SimpleActionChangeStateCallback change_state;
+	}
+	[CCode (cheader_filename = "gio/gio.h", has_type_id = false)]
+	public struct DBusErrorEntry {
+		public int error_code;
+		public weak string dbus_error_name;
+	}
+	[CCode (cheader_filename = "gio/gio.h", has_type_id = false)]
+	public struct DBusInterfaceVTable {
+		public weak GLib.DBusInterfaceMethodCallFunc method_call;
+		public weak GLib.DBusInterfaceGetPropertyFunc get_property;
+		public weak GLib.DBusInterfaceSetPropertyFunc set_property;
+	}
+	[CCode (cheader_filename = "gio/gio.h", has_type_id = false)]
+	public struct DBusSubtreeVTable {
+		public weak GLib.DBusSubtreeEnumerateFunc enumerate;
+		public weak GLib.DBusSubtreeIntrospectFunc introspect;
+		public weak GLib.DBusSubtreeDispatchFunc dispatch;
+	}
+	[CCode (cheader_filename = "gio/gio.h", has_type_id = false)]
+	public struct InputVector {
+		public void* buffer;
+		public size_t size;
+	}
+	[CCode (cheader_filename = "gio/gio.h", has_type_id = false)]
+	public struct OutputVector {
+		public void* buffer;
+		public size_t size;
 	}
 	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_APP_INFO_CREATE_")]
 	[Flags]
@@ -2204,12 +2684,17 @@ namespace GLib {
 		STARTER,
 		NONE,
 		SYSTEM,
-		SESSION
+		SESSION;
+		[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_address_get_for_bus_sync")]
+		public static string get_address_sync (GLib.BusType bus_type, GLib.Cancellable? cancellable = null) throws GLib.Error;
 	}
 	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_CONVERTER_")]
 	[Flags]
 	public enum ConverterFlags {
+		[Deprecated (replacement = "ConverterFlags.NONE", since = "vala-0.16")]
 		NO_FLAGS,
+		[CCode (cname = "G_CONVERTER_NO_FLAGS")]
+		NONE,
 		INPUT_AT_END,
 		FLUSH
 	}
@@ -2348,6 +2833,7 @@ namespace GLib {
 		ANY
 	}
 	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_DRIVE_START_")]
+	[Flags]
 	public enum DriveStartFlags {
 		NONE
 	}
@@ -2464,6 +2950,7 @@ namespace GLib {
 		WAIT_FOR_BOTH
 	}
 	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_MOUNT_MOUNT_")]
+	[Flags]
 	public enum MountMountFlags {
 		NONE
 	}
@@ -2492,6 +2979,17 @@ namespace GLib {
 		FOR_SESSION,
 		PERMANENTLY
 	}
+	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_RESOURCE_FLAGS_")]
+	[Flags]
+	public enum ResourceFlags {
+		NONE,
+		COMPRESSED
+	}
+	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_RESOURCE_LOOKUP_FLAGS_")]
+	[Flags]
+	public enum ResourceLookupFlags {
+		NONE
+	}
 	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_SETTINGS_BIND_")]
 	[Flags]
 	public enum SettingsBindFlags {
@@ -2502,6 +3000,18 @@ namespace GLib {
 		GET_NO_CHANGES,
 		INVERT_BOOLEAN
 	}
+	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_SOCKET_CLIENT_")]
+	public enum SocketClientEvent {
+		RESOLVING,
+		RESOLVED,
+		CONNECTING,
+		CONNECTED,
+		PROXY_NEGOTIATING,
+		PROXY_NEGOTIATED,
+		TLS_HANDSHAKING,
+		TLS_HANDSHAKED,
+		COMPLETE
+	}
 	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_SOCKET_FAMILY_")]
 	public enum SocketFamily {
 		INVALID,
@@ -2555,19 +3065,10 @@ namespace GLib {
 		KEYPAIR
 	}
 	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_TLS_DATABASE_VERIFY_")]
+	[Flags]
 	public enum TlsDatabaseVerifyFlags {
 		NONE
 	}
-	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_TLS_ERROR_")]
-	public enum TlsError {
-		UNAVAILABLE,
-		MISC,
-		BAD_CERTIFICATE,
-		NOT_TLS,
-		HANDSHAKE,
-		CERTIFICATE_REQUIRED,
-		EOF
-	}
 	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_TLS_INTERACTION_")]
 	public enum TlsInteractionResult {
 		UNHANDLED,
@@ -2644,9 +3145,28 @@ namespace GLib {
 		INVALID_FILE_CONTENT,
 		SELINUX_SECURITY_CONTEXT_UNKNOWN,
 		ADT_AUDIT_DATA_UNKNOWN,
-		OBJECT_PATH_IN_USE
+		OBJECT_PATH_IN_USE;
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static string encode_gerror (GLib.Error error);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static string get_remote_error (GLib.Error error);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static bool is_remote_error (GLib.Error error);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static GLib.Error new_for_dbus_error (string dbus_error_name, string dbus_error_message);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static GLib.Quark quark ();
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static bool register_error (GLib.Quark error_domain, int error_code, string dbus_error_name);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static void register_error_domain (string error_domain_quark_name, size_t quark_volatile, GLib.DBusErrorEntry entries, uint num_entries);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static bool strip_remote_error (GLib.Error error);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static bool unregister_error (GLib.Quark error_domain, int error_code, string dbus_error_name);
 	}
-	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_IO_ERROR_")]
+	[CCode (cheader_filename = "gio/gio.h", cname = "GIOErrorEnum", cprefix = "G_IO_ERROR_")]
+	[GIR (name = "IOErrorEnum")]
 	public errordomain IOError {
 		FAILED,
 		NOT_FOUND,
@@ -2691,245 +3211,380 @@ namespace GLib {
 		PROXY_FAILED,
 		PROXY_AUTH_FAILED,
 		PROXY_NEED_AUTH,
-		PROXY_NOT_ALLOWED
+		PROXY_NOT_ALLOWED;
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static unowned GLib.IOError from_errno (int err_no);
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static GLib.Quark quark ();
 	}
 	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_RESOLVER_ERROR_")]
 	public errordomain ResolverError {
 		NOT_FOUND,
 		TEMPORARY_FAILURE,
-		INTERNAL
+		INTERNAL;
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static GLib.Quark quark ();
 	}
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_RESOURCE_ERROR_")]
+	public errordomain ResourceError {
+		NOT_FOUND,
+		INTERNAL;
+		[CCode (cheader_filename = "gio/gio.h")]
+		public static GLib.Quark quark ();
+	}
+	[CCode (cheader_filename = "gio/gio.h", cprefix = "G_TLS_ERROR_")]
+	public errordomain TlsError {
+		UNAVAILABLE,
+		MISC,
+		BAD_CERTIFICATE,
+		NOT_TLS,
+		HANDSHAKE,
+		CERTIFICATE_REQUIRED,
+		EOF
+	}
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 2.9)]
 	public delegate void AsyncReadyCallback (GLib.Object? source_object, GLib.AsyncResult res);
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 2.9)]
 	public delegate void BusAcquiredCallback (GLib.DBusConnection connection, string name);
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 2.9)]
 	public delegate void BusNameAcquiredCallback (GLib.DBusConnection connection, string name);
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 3.9)]
 	public delegate void BusNameAppearedCallback (GLib.DBusConnection connection, string name, string name_owner);
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 2.9)]
 	public delegate void BusNameLostCallback (GLib.DBusConnection connection, string name);
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 2.9)]
 	public delegate void BusNameVanishedCallback (GLib.DBusConnection connection, string name);
-	[CCode (cheader_filename = "gio/gio.h")]
-	public delegate bool CancellableSourceFunc (GLib.Cancellable? cancellable);
-	[CCode (cheader_filename = "gio/gio.h")]
-	public delegate unowned GLib.Variant DBusInterfaceGetPropertyFunc (GLib.DBusConnection connection, string sender, string object_path, string interface_name, string property_name) throws GLib.Error;
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 1.9)]
+	public delegate bool CancellableSourceFunc (GLib.Cancellable? cancellable = null);
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 6.9)]
+	public delegate GLib.Variant DBusInterfaceGetPropertyFunc (GLib.DBusConnection connection, string sender, string object_path, string interface_name, string property_name) throws GLib.Error;
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 7.9)]
 	public delegate void DBusInterfaceMethodCallFunc (GLib.DBusConnection connection, string sender, string object_path, string interface_name, string method_name, GLib.Variant parameters, GLib.DBusMethodInvocation invocation);
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 7.9)]
 	public delegate bool DBusInterfaceSetPropertyFunc (GLib.DBusConnection connection, string sender, string object_path, string interface_name, string property_name, GLib.Variant value) throws GLib.Error;
-	[CCode (cheader_filename = "gio/gio.h")]
-	public delegate unowned GLib.DBusMessage DBusMessageFilterFunction (GLib.DBusConnection connection, GLib.DBusMessage message, bool incoming);
-	[CCode (cheader_filename = "gio/gio.h")]
-	public delegate GLib.Type DBusProxyTypeFunc (GLib.DBusObjectManagerClient manager, string object_path, string interface_name);
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 3.9)]
+	public delegate GLib.DBusMessage DBusMessageFilterFunction (GLib.DBusConnection connection, owned GLib.DBusMessage message, bool incoming);
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 3.9)]
+	public delegate GLib.Type DBusProxyTypeFunc (GLib.DBusObjectManagerClient manager, string object_path, string? interface_name);
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 6.9)]
 	public delegate void DBusSignalCallback (GLib.DBusConnection connection, string sender_name, string object_path, string interface_name, string signal_name, GLib.Variant parameters);
-	[CCode (cheader_filename = "gio/gio.h")]
-	public delegate unowned GLib.DBusInterfaceVTable DBusSubtreeDispatchFunc (GLib.DBusConnection connection, string sender, string object_path, string interface_name, string node, void* out_user_data);
-	[CCode (cheader_filename = "gio/gio.h")]
-	public delegate unowned string DBusSubtreeEnumerateFunc (GLib.DBusConnection connection, string sender, string object_path);
-	[CCode (cheader_filename = "gio/gio.h")]
-	public delegate unowned GLib.DBusInterfaceInfo DBusSubtreeIntrospectFunc (GLib.DBusConnection connection, string sender, string object_path, string node);
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 6.9)]
+	public delegate unowned GLib.DBusInterfaceVTable? DBusSubtreeDispatchFunc (GLib.DBusConnection connection, string sender, string object_path, string interface_name, string node, void* out_user_data);
+	[CCode (array_length = false, array_null_terminated = true, cheader_filename = "gio/gio.h", instance_pos = 3.9)]
+	public delegate string[] DBusSubtreeEnumerateFunc (GLib.DBusConnection connection, string sender, string object_path);
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 4.9)]
+	public delegate GLib.DBusInterfaceInfo DBusSubtreeIntrospectFunc (GLib.DBusConnection connection, string sender, string object_path, string node);
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 2.9)]
 	public delegate void FileProgressCallback (int64 current_num_bytes, int64 total_num_bytes);
 	[CCode (cheader_filename = "gio/gio.h", has_target = false)]
 	public delegate bool FileReadMoreCallback (string file_contents, int64 file_size, void* callback_data);
-	[CCode (cheader_filename = "gio/gio.h")]
-	public delegate bool IOSchedulerJobFunc (GLib.IOSchedulerJob job, GLib.Cancellable? cancellable);
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 2.9)]
+	public delegate bool IOSchedulerJobFunc (GLib.IOSchedulerJob job, GLib.Cancellable? cancellable = null);
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 1.9)]
 	public delegate bool PollableSourceFunc (GLib.Object pollable_stream);
 	[CCode (cheader_filename = "gio/gio.h", has_target = false)]
 	public delegate void* ReallocFunc (void* data, size_t size);
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 2.9)]
 	public delegate bool SettingsBindGetMapping (GLib.Value value, GLib.Variant variant);
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 2.9)]
 	public delegate GLib.Variant SettingsBindSetMapping (GLib.Value value, GLib.VariantType expected_type);
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 2.9)]
+	public delegate bool SettingsGetMapping (GLib.Variant value, out void* result);
 	[CCode (cheader_filename = "gio/gio.h")]
-	public delegate bool SettingsGetMapping (GLib.Variant value, void* result);
-	[CCode (cheader_filename = "gio/gio.h", has_target = false)]
-	public delegate void SimpleAsyncThreadFunc (GLib.SimpleAsyncResult res, GLib.Object object, GLib.Cancellable? cancellable);
+	public delegate void SimpleActionActivateCallback (GLib.SimpleAction action, GLib.Variant? parameter);
 	[CCode (cheader_filename = "gio/gio.h")]
+	public delegate void SimpleActionChangeStateCallback (GLib.SimpleAction action, GLib.Variant value);
+	[CCode (cheader_filename = "gio/gio.h", has_target = false)]
+	public delegate void SimpleAsyncThreadFunc (GLib.SimpleAsyncResult res, GLib.Object object, GLib.Cancellable? cancellable = null);
+	[CCode (cheader_filename = "gio/gio.h", instance_pos = 2.9)]
 	public delegate bool SocketSourceFunc (GLib.Socket socket, GLib.IOCondition condition);
-	[CCode (cheader_filename = "gio/gio.h", cname = "g_file_equal")]
+	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "File.equal", since = "vala-0.16")]
 	public static GLib.EqualFunc file_equal;
-	[CCode (cheader_filename = "gio/gio.h", cname = "g_file_hash")]
+	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "File.hash", since = "vala-0.16")]
 	public static GLib.HashFunc file_hash;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.ACCESS_CAN_DELETE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_ACCESS_CAN_DELETE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.ACCESS_CAN_EXECUTE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.ACCESS_CAN_READ", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_ACCESS_CAN_READ;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.ACCESS_CAN_RENAME", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_ACCESS_CAN_RENAME;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.ACCESS_CAN_TRASH", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_ACCESS_CAN_TRASH;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.ACCESS_CAN_WRITE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_ACCESS_CAN_WRITE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.DOS_IS_ARCHIVE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_DOS_IS_ARCHIVE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.DOS_IS_SYSTEM", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_DOS_IS_SYSTEM;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.ETAG_VALUE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_ETAG_VALUE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.FILESYSTEM_FREE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_FILESYSTEM_FREE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.FILESYSTEM_READONLY", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_FILESYSTEM_READONLY;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.FILESYSTEM_SIZE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_FILESYSTEM_SIZE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.FILESYSTEM_TYPE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_FILESYSTEM_TYPE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.FILESYSTEM_USE_PREVIEW", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.GVFS_BACKEND", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_GVFS_BACKEND;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.ID_FILE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_ID_FILE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.ID_FILESYSTEM", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_ID_FILESYSTEM;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.MOUNTABLE_CAN_EJECT", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.MOUNTABLE_CAN_MOUNT", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.MOUNTABLE_CAN_POLL", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_MOUNTABLE_CAN_POLL;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.MOUNTABLE_CAN_START", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_MOUNTABLE_CAN_START;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.MOUNTABLE_CAN_START_DEGRADED", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_MOUNTABLE_CAN_START_DEGRADED;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.MOUNTABLE_CAN_STOP", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_MOUNTABLE_CAN_STOP;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.MOUNTABLE_CAN_UNMOUNT", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.MOUNTABLE_HAL_UDI", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.MOUNTABLE_START_STOP_TYPE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_MOUNTABLE_START_STOP_TYPE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.MOUNTABLE_UNIX_DEVICE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.MOUNTABLE_UNIX_DEVICE_FILE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.OWNER_GROUP", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_OWNER_GROUP;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.OWNER_USER", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_OWNER_USER;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.OWNER_USER_REAL", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_OWNER_USER_REAL;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.PREVIEW_ICON", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_PREVIEW_ICON;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.SELINUX_CONTEXT", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_SELINUX_CONTEXT;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_ALLOCATED_SIZE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_CONTENT_TYPE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_COPY_NAME", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_COPY_NAME;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_DESCRIPTION", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_DESCRIPTION;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_DISPLAY_NAME", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_EDIT_NAME", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_EDIT_NAME;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_FAST_CONTENT_TYPE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_ICON", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_ICON;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_IS_BACKUP", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_IS_BACKUP;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_IS_HIDDEN", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_IS_HIDDEN;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_IS_SYMLINK", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_IS_SYMLINK;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_IS_VIRTUAL", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_NAME", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_NAME;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_SIZE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_SIZE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_SORT_ORDER", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_SORT_ORDER;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_SYMLINK_TARGET", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_TARGET_URI", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_TARGET_URI;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.STANDARD_TYPE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_STANDARD_TYPE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.THUMBNAILING_FAILED", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_THUMBNAILING_FAILED;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.THUMBNAIL_PATH", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_THUMBNAIL_PATH;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.TIME_ACCESS", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_TIME_ACCESS;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.TIME_ACCESS_USEC", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_TIME_ACCESS_USEC;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.TIME_CHANGED", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_TIME_CHANGED;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.TIME_CHANGED_USEC", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_TIME_CHANGED_USEC;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.TIME_CREATED", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_TIME_CREATED;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.TIME_CREATED_USEC", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_TIME_CREATED_USEC;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.TIME_MODIFIED", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_TIME_MODIFIED;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.TIME_MODIFIED_USEC", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_TIME_MODIFIED_USEC;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.TRASH_DELETION_DATE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_TRASH_DELETION_DATE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.TRASH_ITEM_COUNT", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_TRASH_ITEM_COUNT;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.TRASH_ORIG_PATH", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_TRASH_ORIG_PATH;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.UNIX_BLOCKS", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_UNIX_BLOCKS;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.UNIX_BLOCK_SIZE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_UNIX_BLOCK_SIZE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.UNIX_DEVICE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_UNIX_DEVICE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.UNIX_GID", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_UNIX_GID;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.UNIX_INODE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_UNIX_INODE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.UNIX_IS_MOUNTPOINT", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.UNIX_MODE", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_UNIX_MODE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.UNIX_NLINK", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_UNIX_NLINK;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.UNIX_RDEV", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_UNIX_RDEV;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "FileAttribute.UNIX_UID", since = "vala-0.16")]
 	public const string FILE_ATTRIBUTE_UNIX_UID;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "Menu.ATTRIBUTE_ACTION", since = "vala-0.16")]
+	public const string MENU_ATTRIBUTE_ACTION;
+	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "Menu.ATTRIBUTE_LABEL", since = "vala-0.16")]
+	public const string MENU_ATTRIBUTE_LABEL;
+	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "Menu.ATTRIBUTE_TARGET", since = "vala-0.16")]
+	public const string MENU_ATTRIBUTE_TARGET;
+	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "Menu.LINK_SECTION_SECTION", since = "vala-0.16")]
+	public const string MENU_LINK_SECTION;
+	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "Menu.LINK_SUBMENU", since = "vala-0.16")]
+	public const string MENU_LINK_SUBMENU;
+	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "IOExtensionPoint.NATIVE_VOLUME_MONITOR", since = "vala-0.16")]
 	public const string NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "IOExtensionPoint.NETWORK_MONITOR", since = "vala-0.16")]
+	public const string NETWORK_MONITOR_EXTENSION_POINT_NAME;
+	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "IOExtensionPoint.PROXY", since = "vala-0.16")]
 	public const string PROXY_EXTENSION_POINT_NAME;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "IOExtensionPoint.PROXY_RESOLVER", since = "vala-0.16")]
 	public const string PROXY_RESOLVER_EXTENSION_POINT_NAME;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "IOExtensionPoint.TLS_BACKEND", since = "vala-0.16")]
 	public const string TLS_BACKEND_EXTENSION_POINT_NAME;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "TlsDatabase.PURPOSE_AUTHENTICATE_CLIENT", since = "vala-0.16")]
 	public const string TLS_DATABASE_PURPOSE_AUTHENTICATE_CLIENT;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "TlsDatabase.PURPOSE_AUTHENTICATE_SERVER", since = "vala-0.16")]
 	public const string TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "IOExtensionPoint.VFS", since = "vala-0.16")]
 	public const string VFS_EXTENSION_POINT_NAME;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "GLib.VolumeIdentifier.HAL_UDI", since = "vala-0.16")]
 	public const string VOLUME_IDENTIFIER_KIND_HAL_UDI;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "GLib.VolumeIdentifier.LABEL", since = "vala-0.16")]
 	public const string VOLUME_IDENTIFIER_KIND_LABEL;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "GLib.VolumeIdentifier.NFS_MOUNT", since = "vala-0.16")]
 	public const string VOLUME_IDENTIFIER_KIND_NFS_MOUNT;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "GLib.VolumeIdentifier.UNIX_DEVICE", since = "vala-0.16")]
 	public const string VOLUME_IDENTIFIER_KIND_UNIX_DEVICE;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "GLib.VolumeIdentifier.UUID", since = "vala-0.16")]
 	public const string VOLUME_IDENTIFIER_KIND_UUID;
 	[CCode (cheader_filename = "gio/gio.h")]
+	[Deprecated (replacement = "IOExtensionPoint.VOLUME_MONITOR", since = "vala-0.16")]
 	public const string VOLUME_MONITOR_EXTENSION_POINT_NAME;
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_content_type_can_be_executable")]
 	[Deprecated (replacement = "GLib.ContentType.can_be_executable", since = "vala-0.12")]
@@ -2939,7 +3594,7 @@ namespace GLib {
 	public static bool g_content_type_equals (string type1, string type2);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_content_type_from_mime_type")]
 	[Deprecated (replacement = "GLib.ContentType.from_mime_type", since = "vala-0.12")]
-	public static string g_content_type_from_mime_type (string mime_type);
+	public static string? g_content_type_from_mime_type (string mime_type);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_content_type_get_description")]
 	[Deprecated (replacement = "GLib.ContentType.get_description", since = "vala-0.12")]
 	public static string g_content_type_get_description (string type);
@@ -2948,7 +3603,7 @@ namespace GLib {
 	public static GLib.Icon g_content_type_get_icon (string type);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_content_type_get_mime_type")]
 	[Deprecated (replacement = "GLib.ContentType.get_mime_type", since = "vala-0.12")]
-	public static string g_content_type_get_mime_type (string type);
+	public static string? g_content_type_get_mime_type (string type);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_content_type_guess")]
 	[Deprecated (replacement = "GLib.ContentType.guess", since = "vala-0.12")]
 	public static string g_content_type_guess (string filename, uchar[] data, out bool result_uncertain);
@@ -2962,81 +3617,128 @@ namespace GLib {
 	[Deprecated (replacement = "GLib.ContentType.is_unknown", since = "vala-0.12")]
 	public static bool g_content_type_is_unknown (string type);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_content_types_get_registered")]
+	[Deprecated (replacement = "ContentType.list_registered", since = "vala-0.16")]
 	public static GLib.List<string> g_content_types_get_registered ();
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_address_get_for_bus_sync")]
+	[Deprecated (replacement = "BusType.get_address_sync", since = "vala-0.16")]
 	public static unowned string g_dbus_address_get_for_bus_sync (GLib.BusType bus_type, GLib.Cancellable? cancellable = null) throws GLib.Error;
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_address_get_stream")]
+	[Deprecated (replacement = "DBus.address_get_stream", since = "vala-0.16")]
 	public static async void g_dbus_address_get_stream (string address, GLib.Cancellable? cancellable = null);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_address_get_stream_finish")]
+	[Deprecated (replacement = "DBus.address_get_stream_finish", since = "vala-0.16")]
 	public static unowned GLib.IOStream g_dbus_address_get_stream_finish (GLib.AsyncResult res, string out_guid) throws GLib.Error;
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_address_get_stream_sync")]
+	[Deprecated (replacement = "DBus.address_get_stream_sync", since = "vala-0.16")]
 	public static unowned GLib.IOStream g_dbus_address_get_stream_sync (string address, string out_guid, GLib.Cancellable? cancellable = null) throws GLib.Error;
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_error_encode_gerror")]
+	[Deprecated (replacement = "DBusError.encode_gerror", since = "vala-0.16")]
 	public static unowned string g_dbus_error_encode_gerror (GLib.Error error);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_error_get_remote_error")]
+	[Deprecated (replacement = "DBusError.get_remote_error", since = "vala-0.16")]
 	public static unowned string g_dbus_error_get_remote_error (GLib.Error error);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_error_is_remote_error")]
+	[Deprecated (replacement = "DBusError.error_is_remote_error", since = "vala-0.16")]
 	public static bool g_dbus_error_is_remote_error (GLib.Error error);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_error_new_for_dbus_error")]
+	[Deprecated (replacement = "DBusError.new_for_dbus_error", since = "vala-0.16")]
 	public static unowned GLib.Error g_dbus_error_new_for_dbus_error (string dbus_error_name, string dbus_error_message);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_error_quark")]
+	[Deprecated (replacement = "DBusError.quark", since = "vala-0.16")]
 	public static GLib.Quark g_dbus_error_quark ();
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_error_register_error")]
+	[Deprecated (replacement = "DBusError.register_error", since = "vala-0.16")]
 	public static bool g_dbus_error_register_error (GLib.Quark error_domain, int error_code, string dbus_error_name);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_error_register_error_domain")]
+	[Deprecated (replacement = "DBusError.register_error_domain", since = "vala-0.16")]
 	public static void g_dbus_error_register_error_domain (string error_domain_quark_name, size_t quark_volatile, GLib.DBusErrorEntry entries, uint num_entries);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_error_set_dbus_error")]
+	[Deprecated (replacement = "DBusError.set_dbus_error", since = "vala-0.16")]
 	public static void g_dbus_error_set_dbus_error (string dbus_error_name, string dbus_error_message, string format) throws GLib.Error;
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_error_set_dbus_error_valist")]
+	[Deprecated (replacement = "DBusError.set_dbus_error_valist", since = "vala-0.16")]
 	public static void g_dbus_error_set_dbus_error_valist (string dbus_error_name, string dbus_error_message, string format, void* var_args) throws GLib.Error;
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_error_strip_remote_error")]
+	[Deprecated (replacement = "DBusError.strip_remote_error", since = "vala-0.16")]
 	public static bool g_dbus_error_strip_remote_error (GLib.Error error);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_error_unregister_error")]
+	[Deprecated (replacement = "DBusError.unregister_error", since = "vala-0.16")]
 	public static bool g_dbus_error_unregister_error (GLib.Quark error_domain, int error_code, string dbus_error_name);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_generate_guid")]
+	[Deprecated (replacement = "DBus.generate_guid", since = "vala-0.16")]
 	public static unowned string g_dbus_generate_guid ();
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_gvalue_to_gvariant")]
+	[Deprecated (replacement = "DBus.gvalue_to_gvariant", since = "vala-0.16")]
 	public static unowned GLib.Variant g_dbus_gvalue_to_gvariant (GLib.Value gvalue, GLib.VariantType type);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_gvariant_to_gvalue")]
+	[Deprecated (replacement = "DBus.gvariant_to_gvalue", since = "vala-0.16")]
 	public static void g_dbus_gvariant_to_gvalue (GLib.Variant value, GLib.Value out_gvalue);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_is_address")]
+	[Deprecated (replacement = "DBus.is_address", since = "vala-0.16")]
 	public static bool g_dbus_is_address (string str);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_is_guid")]
+	[Deprecated (replacement = "DBus.is_guid", since = "vala-0.16")]
 	public static bool g_dbus_is_guid (string str);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_is_interface_name")]
+	[Deprecated (replacement = "DBus.is_interface_name", since = "vala-0.16")]
 	public static bool g_dbus_is_interface_name (string str);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_is_member_name")]
+	[Deprecated (replacement = "DBus.is_member_name", since = "vala-0.16")]
 	public static bool g_dbus_is_member_name (string str);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_is_name")]
+	[Deprecated (replacement = "DBus.is_name", since = "vala-0.16")]
 	public static bool g_dbus_is_name (string str);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_is_supported_address")]
+	[Deprecated (replacement = "DBus.is_supported_address", since = "vala-0.16")]
 	public static bool g_dbus_is_supported_address (string str) throws GLib.Error;
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_dbus_is_unique_name")]
+	[Deprecated (replacement = "DBus.is_unique_name", since = "vala-0.16")]
 	public static bool g_dbus_is_unique_name (string str);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_io_error_from_errno")]
+	[Deprecated (replacement = "IOError.from_errno", since = "vala-0.16")]
 	public static unowned GLib.IOError g_io_error_from_errno (int err_no);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_io_error_quark")]
+	[Deprecated (replacement = "IOError.quark", since = "vala-0.16")]
 	public static GLib.Quark g_io_error_quark ();
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_io_modules_load_all_in_directory")]
+	[Deprecated (replacement = "IOModule.load_all_in_directory", since = "vala-0.16")]
 	public static GLib.List<weak GLib.TypeModule> g_io_modules_load_all_in_directory (string dirname);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_io_modules_load_all_in_directory_with_scope")]
+	[Deprecated (replacement = "IOModule.load_all_in_directory_with_scope", since = "vala-0.16")]
 	public static unowned GLib.List g_io_modules_load_all_in_directory_with_scope (string dirname, GLib.IOModuleScope scope);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_io_modules_scan_all_in_directory")]
+	[Deprecated (replacement = "IOModule.scan_all_in_directory", since = "vala-0.16")]
 	public static void g_io_modules_scan_all_in_directory (string dirname);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_io_modules_scan_all_in_directory_with_scope")]
+	[Deprecated (replacement = "IOModule.xscan_all_in_directory_with_scope", since = "vala-0.16")]
 	public static void g_io_modules_scan_all_in_directory_with_scope (string dirname, GLib.IOModuleScope scope);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_io_scheduler_cancel_all_jobs")]
+	[Deprecated (replacement = "IOSchedulerJob.cancel_all", since = "vala-0.16")]
 	public static void g_io_scheduler_cancel_all_jobs ();
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_io_scheduler_push_job")]
+	[Deprecated (replacement = "IOSchedulerJob.push", since = "vala-0.16")]
 	public static void g_io_scheduler_push_job (owned GLib.IOSchedulerJobFunc job_func, int io_priority = GLib.Priority.DEFAULT, GLib.Cancellable? cancellable = null);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_pollable_source_new")]
+	[Deprecated (replacement = "PollableSource", since = "vala-0.16")]
 	public static unowned GLib.TimeoutSource g_pollable_source_new (GLib.Object pollable_stream);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_simple_async_report_error_in_idle")]
+	[Deprecated (replacement = "report_error_in_idle", since = "vala-0.16")]
 	public static void g_simple_async_report_error_in_idle (GLib.Object object, GLib.AsyncReadyCallback callback, GLib.Quark domain, int code, string format);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_simple_async_report_gerror_in_idle")]
+	[Deprecated (replacement = "report_gerror_in_idle", since = "vala-0.16")]
 	public static void g_simple_async_report_gerror_in_idle (GLib.Object object, GLib.AsyncReadyCallback callback, GLib.Error error);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_simple_async_report_take_gerror_in_idle")]
+	[Deprecated (replacement = "report_take_gerror_in_idle", since = "vala-0.16")]
 	public static void g_simple_async_report_take_gerror_in_idle (GLib.Object object, GLib.AsyncReadyCallback callback, GLib.Error error);
 	[CCode (cheader_filename = "gio/gio.h", cname = "g_tls_error_quark")]
+	[Deprecated (replacement = "TlsError.quark", since = "vala-0.16")]
 	public static GLib.Quark g_tls_error_quark ();
+	[CCode (array_length = false, array_null_terminated = true, cheader_filename = "gio/gio.h")]
+	public static string[] resources_enumerate_children (string path, GLib.ResourceLookupFlags lookup_flags) throws GLib.Error;
+	[CCode (cheader_filename = "gio/gio.h")]
+	public static bool resources_get_info (string path, GLib.ResourceLookupFlags lookup_flags, out size_t size, out uint32 flags) throws GLib.Error;
+	[CCode (cheader_filename = "gio/gio.h")]
+	public static GLib.Bytes resources_lookup_data (string path, GLib.ResourceLookupFlags lookup_flags) throws GLib.Error;
+	[CCode (cheader_filename = "gio/gio.h")]
+	public static GLib.InputStream resources_open_stream (string path, GLib.ResourceLookupFlags lookup_flags) throws GLib.Error;
 }
diff --git a/vapi/glib-2.0.vapi b/vapi/glib-2.0.vapi
index a947553..01bc8b3 100644
--- a/vapi/glib-2.0.vapi
+++ b/vapi/glib-2.0.vapi
@@ -853,6 +853,9 @@ public struct unichar {
 	public static unichar max (unichar a, unichar b);
 	[CCode (cname = "CLAMP")]
 	public unichar clamp (unichar low, unichar high);
+
+	[CCode (cname = "G_UNICHAR_MAX_DECOMPOSITION_LENGTH")]
+	public const int MAX_DECOMPOSITION_LENGTH;
 }
 
 [CCode (cname = "GUnicodeScript", cprefix = "G_UNICODE_SCRIPT_", has_type_id = false)]
@@ -939,7 +942,38 @@ public enum UnicodeScript {
 	VAI,
 	CARIAN,
 	LYCIAN,
-	LYDIAN
+	LYDIAN,
+
+	/* Unicode-5.2 additions */
+	AVESTAN,                /* Avst */
+	BAMUM,                  /* Bamu */
+	EGYPTIAN_HIEROGLYPHS,   /* Egyp */
+	IMPERIAL_ARAMAIC,       /* Armi */
+	INSCRIPTIONAL_PAHLAVI,  /* Phli */
+	INSCRIPTIONAL_PARTHIAN, /* Prti */
+	JAVANESE,               /* Java */
+	KAITHI,                 /* Kthi */
+	LISU,                   /* Lisu */
+	MEETEI_MAYEK,           /* Mtei */
+	OLD_SOUTH_ARABIAN,      /* Sarb */
+	OLD_TURKIC,             /* Orkh */
+	SAMARITAN,              /* Samr */
+	TAI_THAM,               /* Lana */
+	TAI_VIET,               /* Tavt */
+
+	/* Unicode-6.0 additions */
+	BATAK,                  /* Batk */
+	BRAHMI,                 /* Brah */
+	MANDAIC,                /* Mand */
+
+	/* Unicode-6.1 additions */
+	CHAKMA,                 /* Cakm */
+	MEROITIC_CURSIVE,       /* Merc */
+	MEROITIC_HIEROGLYPHS,   /* Mero */
+	MIAO,                   /* Plrd */
+	SHARADA,                /* Shrd */
+	SORA_SOMPENG,           /* Sora */
+	TAKRI                   /* Takr */
 }
 
 [CCode (cname = "GUnicodeType", cprefix = "G_UNICODE_", has_type_id = false)]
@@ -1013,7 +1047,10 @@ public enum UnicodeBreakType {
 	HANGUL_V_JAMO,
 	HANGUL_T_JAMO,
 	HANGUL_LV_SYLLABLE,
-	HANGUL_LVT_SYLLABLE
+	HANGUL_LVT_SYLLABLE,
+	CLOSE_PARANTHESIS,
+	CONDITIONAL_JAPANESE_STARTER,
+	HEBREW_LETTER
 }
 
 [CCode (cname = "GNormalizeMode", cprefix = "G_NORMALIZE_", has_type_id = false)]
@@ -1361,7 +1398,7 @@ public class string {
 		if (str == null) {
 			str_size = 0;
 		} else {
-			str_size = str.length;
+			str_size = ((!)(str)).length;
 		}
 
 		string* result = GLib.malloc0 (this.length - (end - start) + str_size + 1);
@@ -1614,6 +1651,7 @@ namespace GLib {
 		public static int get ([CCode (type = "volatile gint *")] ref int atomic);
 		public static void set ([CCode (type = "volatile gint *")] ref int atomic, int newval);
 		public static void add ([CCode (type = "volatile gint *")] ref int atomic, int val);
+		[Deprecated (since = "2.30", replacement = "add")]
 		public static int exchange_and_add ([CCode (type = "volatile gint *")] ref int atomic, int val);
 		public static bool compare_and_exchange ([CCode (type = "volatile gint *")] ref int atomic, int oldval, int newval);
 		public static void inc ([CCode (type = "volatile gint *")] ref int atomic);
@@ -1673,7 +1711,8 @@ namespace GLib {
 		public int depth ();
 		[CCode (cname = "g_main_current_source")]
 		public static unowned Source current_source ();
-		public static unowned MainContext get_thread_default ();
+		public static unowned MainContext? get_thread_default ();
+		public static unowned MainContext ref_thread_default ();
 		public void push_thread_default ();
 		public void pop_thread_default ();
 		public unowned string? get_name ();
@@ -1716,7 +1755,7 @@ namespace GLib {
 
 	[CCode (type_id = "G_TYPE_INT", marshaller_type_name = "INT", get_value_function = "g_value_get_int", set_value_function = "g_value_set_int", default_value = "0")]
 	[IntegerType (rank = 6)]
-	public struct Pid {
+	public struct Pid : int {
 	}
 
 	public delegate void ChildWatchFunc (Pid pid, int status);
@@ -1751,11 +1790,18 @@ namespace GLib {
 		public void set_can_recurse (bool can_recurse);
 		public bool get_can_recurse ();
 		public uint get_id ();
+		public unowned string? get_name ();
+		public void set_name (string? name);
+		public static void set_name_by_id (uint tag, string? name);
 		public unowned MainContext get_context ();
 		public void set_callback (owned SourceFunc func);
 		public void set_callback_indirect (void* callback_data, SourceCallbackFuncs callback_funcs);
 		public void add_poll (ref PollFD fd);
 		public void remove_poll (ref PollFD fd);
+		public void add_child_source (Source child_source);
+		public void remove_child_source (Source child_source);
+		public int64 get_time ();
+		[Deprecated (since = "2.28", replacement = "get_time")]
 		public void get_current_time (out TimeVal timeval);
 		public static bool remove (uint id);
 		public static bool remove_by_funcs_user_data (void* user_data);
@@ -1774,8 +1820,7 @@ namespace GLib {
 	[CCode (has_target = false)]
 	public delegate void SourceFinalizeFunc (Source source);
 
-	[Compact]
-	public class SourceFuncs {
+	public struct SourceFuncs {
 		public SourcePrepareFunc prepare;
 		public SourceCheckFunc check;
 		public SourceDispatchFunc dispatch;
@@ -1816,10 +1861,20 @@ namespace GLib {
 	}
 	
 	[Compact]
+#if GLIB_2_32
+	[CCode (ref_function = "g_thread_ref", unref_function = "g_thread_unref")]
+#endif
 	public class Thread<T> {
+#if GLIB_2_32
+		public Thread (string? name, ThreadFunc<T> func);
+		[CCode (cname = "g_thread_try_new")]
+		public Thread.try (string? name, ThreadFunc<T> func) throws GLib.Error;
+#endif
 		public static bool supported ();
+		[Deprecated (since = "2.32", replacement = "new Thread<T> ()")]
 		[CCode (simple_generics = true)]
 		public static unowned Thread<T> create<T> (ThreadFunc<T> func, bool joinable) throws ThreadError;
+		[Deprecated (since = "2.32", replacement = "new Thread<T> ()")]
 		[CCode (simple_generics = true)]
 		public static unowned Thread<T> create_full<T> (ThreadFunc<T> func, ulong stack_size, bool joinable, bool bound, ThreadPriority priority) throws ThreadError;
 		[CCode (simple_generics = true)]
@@ -1833,17 +1888,43 @@ namespace GLib {
 		[CCode (cname = "g_usleep")]
 		public static void usleep (ulong microseconds);
 	}
-	
+
+#if GLIB_2_32
+	[CCode (destroy_function = "g_mutex_clear")]
+	public struct Mutex {
+#else
 	[Compact]
 	[CCode (free_function = "g_mutex_free")]
+	[Deprecated (since = "glib-2.32", replacement = "Mutex (with --target-glib=2.32)")]
 	public class Mutex {
+#endif
 		public Mutex ();
 		public void @lock ();
 		public bool trylock ();
 		public void unlock ();
 	}
 
+	[CCode (destroy_function = "g_rec_mutex_clear")]
+	public struct RecMutex {
+		public RecMutex ();
+		public void lock ();
+		public bool trylock ();
+		public void unlock ();
+	}
+
+	[CCode (destroy_function = "g_rw_lock_clear")]
+	public struct RWLock {
+		public RWLock ();
+		public void writer_lock ();
+		public bool writer_trylock ();
+		public void writer_unlock ();
+		public void reader_lock ();
+		public bool reader_tryolock ();
+		public void reader_unlock ();
+	}
+
 	[CCode (destroy_function = "g_static_mutex_free", default_value = "G_STATIC_MUTEX_INIT")]
+	[Deprecated (since = "glib-2.32", replacement = "Mutex")]
 	public struct StaticMutex {
 		public StaticMutex ();
 		public void lock ();
@@ -1853,6 +1934,7 @@ namespace GLib {
 	}
 
 	[CCode (destroy_function = "g_static_rec_mutex_free", default_value = "G_STATIC_REC_MUTEX_INIT")]
+	[Deprecated (since = "glib-2.32", replacement = "RecMutex")]
 	public struct StaticRecMutex {
 		public StaticRecMutex ();
 		public void lock ();
@@ -1862,6 +1944,7 @@ namespace GLib {
 	}
 
 	[CCode (destroy_function = "g_static_rw_lock_free", default_value = "G_STATIC_RW_LOCK_INIT")]
+	[Deprecated (since = "glib-2.32", replacement = "RWLock")]
 	public struct StaticRWLock {
 		public StaticRWLock ();
 		public void reader_lock ();
@@ -1875,9 +1958,10 @@ namespace GLib {
 	[Compact]
 	[CCode (ref_function = "", unref_function = "")]
 	public class Private {
-		public Private (DestroyNotify destroy_func);
+		public Private (DestroyNotify? destroy_func = null);
 		public void* get ();
 		public void set (void* data);
+		public void replace (void* data);
 	}
 
 	[CCode (destroy_function = "g_static_private_free", default_value = "G_STATIC_PRIVATE_INIT")]
@@ -1887,14 +1971,22 @@ namespace GLib {
 		public void set (void* data, DestroyNotify? destroy_func);
 	}
 
+#if GLIB_2_32
+	[CCode (destroy_function = "g_cond_clear")]
+	public struct Cond {
+#else
 	[Compact]
 	[CCode (free_function = "g_cond_free")]
+	[Deprecated (since = "glib-2.32", replacement = "Cond (with --target-glib=2.32)")]
 	public class Cond {
+#endif
 		public Cond ();
 		public void @signal ();
 		public void broadcast ();
 		public void wait (Mutex mutex);
+		[Deprecated (since = "2.32", replacement = "wait_until")]
 		public bool timed_wait (Mutex mutex, TimeVal abs_time);
+		public bool wait_until (Mutex mutex, int64 end_time);
 	}
 	
 	/* Thread Pools */
@@ -1912,7 +2004,7 @@ namespace GLib {
 		public static int get_max_unused_threads ();
 		public static uint get_num_unused_threads ();
 		public static void stop_unused_threads ();
-		public void set_sort_function (CompareDataFunc func);
+		public void set_sort_function (CompareDataFunc<T> func);
 		public static void set_max_idle_time (uint interval);
 		public static uint get_max_idle_time ();
 	}
@@ -1926,8 +2018,8 @@ namespace GLib {
 		public void push (owned G data);
 		public void push_sorted (owned G data, CompareDataFunc<G> func);
 		public G pop ();
-		public G try_pop ();
-		public G timed_pop (ref TimeVal end_time);
+		public G? try_pop ();
+		public G? timed_pop (ref TimeVal end_time);
 		public int length ();
 		public void sort (CompareDataFunc<G> func);
 		public void @lock ();
@@ -1937,8 +2029,8 @@ namespace GLib {
 		public void push_unlocked (owned G data);
 		public void push_sorted_unlocked (owned G data, CompareDataFunc<G> func);
 		public G pop_unlocked ();
-		public G try_pop_unlocked ();
-		public G timed_pop_unlocked (ref TimeVal end_time);
+		public G? try_pop_unlocked ();
+		public G? timed_pop_unlocked (ref TimeVal end_time);
 		public int length_unlocked ();
 		public void sort_unlocked (CompareDataFunc<G> func);
 	}
@@ -2283,6 +2375,22 @@ namespace GLib {
 		public static string compute_for_string (ChecksumType checksum_type, string str, size_t length = -1);
 	}
 
+	/* Secure HMAC Digests */
+
+	[Compact]
+	[CCode (ref_function = "g_hmac_ref", unref_function = "g_hmac_unref")]
+	public class Hmac {
+		public Hmac (ChecksumType digest_type, [CCode (array_length_type = "gsize")] uint8[] key);
+		public Hmac copy ();
+		public void update ([CCode (array_length_type = "gssize")] uint8[] data, size_t length);
+		public unowned string get_string ();
+		public void get_digest ([CCode (array_length = false)] uint8[] buffer, ref size_t digest_len);
+		[CCode (cname = "g_compute_hmac_for_data")]
+		public static string compute_for_data (ChecksumType checksum_type, uint8[] key, uint8[] data);
+		[CCode (cname = "g_compute_hmac_for_string")]
+		public static string compute_for_string (ChecksumType checksum_type, uint8[] key, string str, size_t length = -1);
+	}
+
 	/* Date and Time Functions */
 
 	[CCode (has_type_id = false)]
@@ -2628,12 +2736,24 @@ namespace GLib {
 		public static string get_current_dir ();
 		[CCode (cname = "g_find_program_in_path")]
 		public static string? find_program_in_path (string program);
+		[Deprecated (since = "2.32")]
 		[CCode (cname = "g_atexit")]
 		public static void atexit (VoidFunc func);
 		[CCode (cname = "g_chdir")]
 		public static int set_current_dir (string path);
 	}
 
+	namespace Environ {
+		[CCode (cname = "g_get_environ", array_length = false, array_null_terminated = true)]
+		public static string[] get ();
+		[CCode (cname = "g_environ_getenv")]
+		public static string? get_variable ([CCode (array_length = false, array_null_terminated = true)] string[] envp, string variable);
+		[CCode (cname = "g_environ_setenv", array_length = false, array_null_terminated = true)]
+		public static string[] set_variable ([CCode (array_length = false, array_null_terminated = true)] owned string[] envp, string variable, string value, bool overwrite = true);
+		[CCode (cname = "g_environ_unsetenv", array_length = false, array_null_terminated = true)]
+		public static string[] unset_variable ([CCode (array_length = false, array_null_terminated = true)] owned string[] envp, string variable);
+	}
+
 	[CCode (has_type_id = false)]
 	public enum UserDirectory {
 		DESKTOP,
@@ -2685,7 +2805,7 @@ namespace GLib {
 	[CCode (has_target = false)]
 	public delegate void VoidFunc ();
 
-	[Deprecated (replacement = "format_size")]
+	[Deprecated (since = "2.16", replacement = "format_size")]
 	public string format_size_for_display (int64 size);
 
 	[CCode (cname = "g_format_size_full")]
@@ -2850,6 +2970,7 @@ namespace GLib {
 
 	/* Automatic String Completion */
 
+	[Deprecated (since = "2.26")]
 	[Compact]
 	[CCode (free_function = "g_completion_free")]
 	public class Completion {
@@ -3031,7 +3152,7 @@ namespace GLib {
 		EXISTS
 	}
 
-	[CCode (cprefix = "SEEK_", has_type_id = false)]
+	[CCode (cname = "int", cprefix = "SEEK_", has_type_id = false)]
 	public enum FileSeek {
 		SET,
 		CUR,
@@ -3096,12 +3217,12 @@ namespace GLib {
 				if (c == '\n') {
 					break;
 				}
-				ret.append_c ((char) c);
+				((!)(ret)).append_c ((char) c);
 			}
 			if (ret == null) {
 				return null;
 			} else {
-				return ret.str;
+				return ((!)(ret)).str;
 			}
 		}
 	}
@@ -3137,7 +3258,7 @@ namespace GLib {
 		public static int close (int fd);
 	}
 
-	[CCode (cname = "struct stat", cheader_filename = "sys/stat.h")]
+	[CCode (cname = "struct stat", cheader_filename = "sys/stat.h,glib/gstdio.h")]
 	public struct Stat {
 		[CCode (cname = "g_stat", instance_pos = -1)]
 		public Stat (string filename);
@@ -3153,6 +3274,7 @@ namespace GLib {
 		public void rewind ();
 	}
 	
+	[CCode (cheader_filename = "glib/gstdio.h")]
 	namespace DirUtils {
 		[CCode (cname = "g_mkdir")]
 		public static int create (string pathname, int mode);
@@ -3160,6 +3282,8 @@ namespace GLib {
 		public static int create_with_parents (string pathname, int mode);
 		[CCode (cname = "mkdtemp")]
 		public static unowned string mkdtemp (string template);
+		[CCode (cname = "g_dir_make_tmp")]
+		public static string make_tmp (string tmpl) throws FileError;
 		[CCode (cname = "g_rmdir")]
 		public static int remove (string filename);
 	}
@@ -3194,10 +3318,10 @@ namespace GLib {
 		public const string RESERVED_CHARS_GENERIC_DELIMITERS;
 		public const string RESERVED_CHARS_SUBCOMPONENT_DELIMITERS;
 
-		public static string parse_scheme (string uri);
-		public static string escape_string (string unescaped, string reserved_chars_allowed, bool allow_utf8);
-		public static string unescape_string (string escaped_string, string? illegal_characters = null);
-		public static string unescape_segment (string escaped_string, string escaped_string_end, string? illegal_characters = null);
+		public static string? parse_scheme (string uri);
+		public static string escape_string (string unescaped, string? reserved_chars_allowed = null, bool allow_utf8 = true);
+		public static string? unescape_string (string escaped_string, string? illegal_characters = null);
+		public static string? unescape_segment (string? escaped_string, string? escaped_string_end, string? illegal_characters = null);
 		[CCode (array_length = false, array_null_terminated = true)]
 		public static string[] list_extract_uris (string uri_list);
 	}
@@ -3282,7 +3406,7 @@ namespace GLib {
 		public void* arg_data;
 
 		public unowned string description;
-		public unowned string arg_description;
+		public unowned string? arg_description;
 	}
 
 	[Compact]
@@ -3404,7 +3528,8 @@ namespace GLib {
 
 	[CCode (cprefix = "G_MARKUP_", has_type_id = false)]
 	public enum MarkupParseFlags {
-		TREAT_CDATA_AS_TEXT
+		TREAT_CDATA_AS_TEXT,
+		PREFIX_ERROR_POSITION
 	}
 
 	[Compact]
@@ -3418,6 +3543,7 @@ namespace GLib {
 		public void get_position (out int line_number, out int char_number);
 		public void push (MarkupParser parser, void* user_data);
 		public void* pop ();
+		public void* get_user_data ();
 	}
 	
 	public delegate void MarkupParserStartElementFunc (MarkupParseContext context, string element_name, [CCode (array_length = false, array_null_terminated = true)] string[] attribute_names, [CCode (array_length = false, array_null_terminated = true)] string[] attribute_values) throws MarkupError;
@@ -3474,7 +3600,11 @@ namespace GLib {
 	}
 
 	[Compact]
+#if GLIB_2_32
+	[CCode (free_function = "g_key_file_free", ref_function = "g_key_file_ref", unref_function = "g_key_file_unref", type_id = "G_KEY_FILE")]
+#else
 	[CCode (free_function = "g_key_file_free")]
+#endif
 	public class KeyFile {
 		public KeyFile ();
 		public void set_list_separator (char separator);
@@ -3914,10 +4044,13 @@ namespace GLib {
 		public HashTable.full (HashFunc<K>? hash_func, EqualFunc<K>? key_equal_func, DestroyNotify? key_destroy_func, DestroyNotify? value_destroy_func);
 		public void insert (owned K key, owned V value);
 		public void replace (owned K key, owned V value);
-		public unowned V lookup (K key);
+		public void add (owned K key);
+		public unowned V? lookup (K key);
 		public bool lookup_extended (K lookup_key, out unowned K orig_key, out unowned V value);
+		public bool contains (K key);
 		public bool remove (K key);
 		public void remove_all ();
+		public uint foreach_remove (HRFunc<K,V> predicate);
 		[CCode (cname = "g_hash_table_lookup")]
 		public unowned V? @get (K key);
 		[CCode (cname = "g_hash_table_insert")]
@@ -3927,7 +4060,7 @@ namespace GLib {
 		public void @foreach (HFunc<K,V> func);
 		[CCode (cname = "g_hash_table_foreach")]
 		public void for_each (HFunc<K,V> func);
-		public unowned V find (HRFunc<K,V> predicate);
+		public unowned V? find (HRFunc<K,V> predicate);
 		public uint size ();
 		public bool steal (K key);
 		public void steal_all ();
@@ -4009,6 +4142,14 @@ namespace GLib {
 		public string str;
 		public ssize_t len;
 		public ssize_t allocated_len;
+
+		public uint8[] data {
+			get {
+				unowned uint8[] res = (uint8[]) this.str;
+				res.length = (int) this.len;
+				return res;
+			}
+		}
 	}
 
 	/* String Chunks */
@@ -4099,6 +4240,43 @@ namespace GLib {
 		private uint len;
 	}
 
+	[Compact]
+	[CCode (cprefix = "g_bytes_", ref_function = "g_bytes_ref", unref_function = "g_bytes_unref", type_id = "G_TYPE_BYTES")]
+	public class Bytes {
+		public Bytes ([CCode (array_length_type = "gsize")] uint8[] data);
+		public Bytes.take ([CCode (array_length_type = "gsize")] owned uint8[] data);
+		public Bytes.static ([CCode (array_length_type = "gsize")] uint8[] data);
+		public Bytes.with_free_func ([CCode (array_length_type = "gsize")] owned uint8[] data, GLib.DestroyNotify? free_func = GLib.g_free);
+		public Bytes.from_bytes (GLib.Bytes bytes, size_t offset, size_t length);
+
+		[CCode (array_length_type = "gsize")]
+		public unowned uint8[] get_data ();
+		public size_t get_size ();
+		public uint hash ();
+		public int compare (GLib.Bytes bytes2);
+		public static uint8[] unref_to_data (owned GLib.Bytes bytes);
+		public static GLib.ByteArray unref_to_array (owned GLib.Bytes bytes);
+
+		[CCode (cname = "_vala_g_bytes_get")]
+		public uint8 get (int index) {
+			unowned uint8[] data = this.get_data ();
+			return data[index];
+		}
+
+		[CCode (cname = "_vala_g_bytes_slice")]
+		public GLib.Bytes slice (int start, int end) {
+			unowned uint8[] data = this.get_data ();
+			return new GLib.Bytes (data[start:end]);
+		}
+
+		public int length {
+			[CCode (cname = "_vala_g_bytes_get_length")]
+			get {
+				return (int) this.get_size ();
+			}
+		}
+	}
+
 	/* Byte Arrays */
 
 	[Compact]
@@ -4111,7 +4289,9 @@ namespace GLib {
 		public ByteArray ();
 		[CCode (cname = "g_byte_array_sized_new")]
 		public ByteArray.sized (uint reserved_size);
+		public ByteArray.take (owned uint8[] data);
 		public void append (uint8[] data);
+		public static GLib.Bytes free_to_bytes (owned GLib.ByteArray array);
 		public void prepend (uint8[] data);
 		public void remove_index (uint index);
 		public void remove_index_fast (uint index);
@@ -4523,6 +4703,7 @@ namespace GLib {
 		public Variant.variant (Variant value);
 		public Variant.maybe (VariantType? child_type, Variant? child);
 		public Variant.array (VariantType? child_type, Variant[] children);
+		public Variant.fixed_array (VariantType? element_type, [CCode (array_length_type = "gsize")] Variant[] elements, size_t element_size);
 		public Variant.tuple (Variant[] children);
 		public Variant.dict_entry (Variant key, Variant value);
 		public Variant get_variant ();
@@ -4604,4 +4785,20 @@ namespace GLib {
 
 	[CCode (simple_generics = true)]
 	private static void qsort_with_data<T> (T[] elems, size_t size, [CCode (type = "GCompareDataFunc")] GLib.CompareDataFunc<T> compare_func);
+
+	/* Unix-specific functions. All of these have to include glib-unix.h. */
+	namespace Unix {
+		[CCode (cheader_filename = "glib-unix.h", cname = "g_unix_signal_add_full")]
+		public static uint signal_add (int signum, owned GLib.SourceFunc handler, [CCode (pos = 0.9)] int priority = Priority.DEFAULT);
+
+		[CCode (cheader_filename = "glib-unix.h", cname = "GSource")]
+		public class SignalSource : GLib.Source {
+			public SignalSource (int signum);
+		}
+
+		[CCode (cheader_filename = "glib-unix.h")]
+		public static bool open_pipe (int fds, int flags) throws GLib.Error;
+		[CCode (cheader_filename = "glib-unix.h")]
+		public static bool set_fd_nonblocking (int fd, bool nonblock) throws GLib.Error;
+	}
 }
diff --git a/vapi/gnome-keyring-1.vapi b/vapi/gnome-keyring-1.vapi
index 32242b7..fb86eda 100644
--- a/vapi/gnome-keyring-1.vapi
+++ b/vapi/gnome-keyring-1.vapi
@@ -245,7 +245,7 @@ namespace GnomeKeyring {
 	[CCode (cheader_filename = "gnome-keyring.h")]
 	public static GnomeKeyring.Result item_get_info_full_sync (string? keyring, uint32 id, uint32 flags, out unowned GnomeKeyring.ItemInfo info);
 	[CCode (cheader_filename = "gnome-keyring.h")]
-	public static unowned GnomeKeyring.Result? item_get_info_sync (string keyring, uint32 id, out unowned GnomeKeyring.ItemInfo info);
+	public static GnomeKeyring.Result item_get_info_sync (string keyring, uint32 id, out unowned GnomeKeyring.ItemInfo info);
 	[CCode (cheader_filename = "gnome-keyring.h")]
 	public static void* item_grant_access_rights (string? keyring, string display_name, string full_path, uint32 id, GnomeKeyring.AccessType rights, owned GnomeKeyring.OperationDoneCallback callback);
 	[CCode (cheader_filename = "gnome-keyring.h")]
diff --git a/vapi/gobject-2.0.vapi b/vapi/gobject-2.0.vapi
index 38f5638..d00668b 100644
--- a/vapi/gobject-2.0.vapi
+++ b/vapi/gobject-2.0.vapi
@@ -66,6 +66,9 @@ namespace GLib {
 		public Quark qname ();
 		public Type parent ();
 
+		public void* get_qdata (Quark quark);
+		public void set_qdata (Quark quark, void* data);
+
 		public void query (out TypeQuery query);
 
 		public TypeClass class_ref ();
@@ -298,7 +301,7 @@ namespace GLib {
 		INVERT_BOOLEAN
 	}
 
-	public delegate bool BindingTransformFunc (GLib.Binding binding, GLib.Value source_value, GLib.Value target_value);
+	public delegate bool BindingTransformFunc (GLib.Binding binding, GLib.Value source_value, ref GLib.Value target_value);
 
 	public class Binding : GLib.Object {
 		public weak GLib.Object source { get; }
@@ -324,6 +327,7 @@ namespace GLib {
 
 		public static Object @new (Type type, ...);
 		public static Object newv (Type type, [CCode (array_length_pos = 1.9)] Parameter[] parameters);
+		public static Object new_valist (Type type, string? firstprop, va_list var_args);
 
 		[CCode (cname = "G_TYPE_FROM_INSTANCE")]
 		public Type get_type ();
@@ -375,6 +379,13 @@ namespace GLib {
 		public unowned GLib.Binding bind_property (string source_property, GLib.Object target, string target_property, GLib.BindingFlags flags, [CCode (type = "GClosure*")] owned GLib.BindingTransformFunc? transform_to = null, [CCode (type = "GClosure*")] owned GLib.BindingTransformFunc? transform_from = null);
 	}
 
+	[CCode (destroy_function = "g_weak_ref_clear")]
+	public struct WeakRef {
+		public WeakRef (GLib.Object object);
+		public GLib.Object? get ();
+		public void set (GLib.Object object);
+	}
+
 	[CCode (instance_pos = 0)]
 	public delegate void ToggleNotify (GLib.Object object, bool is_last_ref);
 
@@ -428,7 +439,7 @@ namespace GLib {
 	}
 
 	[CCode (has_target = false)]
-	public delegate void ValueTransform (Value src_value, out Value dest_value);
+	public delegate void ValueTransform (Value src_value, ref Value dest_value);
 
 	[CCode (copy_function = "g_value_copy", destroy_function = "g_value_unset", type_id = "G_TYPE_VALUE", marshaller_type_name = "BOXED", get_value_function = "g_value_get_boxed", set_value_function = "g_value_set_boxed", take_value_function = "g_value_take_boxed", type_signature = "v")]
 	public struct Value {
@@ -457,6 +468,8 @@ namespace GLib {
 		public bool get_boolean ();
 		public void set_char (char v_char);
 		public char get_char ();
+		public void set_schar (int8 v_char);
+		public int8 get_schar ();
 		public void set_uchar (uchar v_uchar);
 		public uchar get_uchar ();
 		public void set_int (int v_int);
diff --git a/vapi/gsl.vapi b/vapi/gsl.vapi
index 0005d4f..370ee2e 100644
--- a/vapi/gsl.vapi
+++ b/vapi/gsl.vapi
@@ -4309,7 +4309,7 @@ namespace Gsl
 	}
 	
 	[Compact]
-	[CCode (cname="gsl_multifit_linear_workspace", cheader_filename="gsl/gsl_multifit.h")]
+	[CCode (cname="gsl_multifit_linear_workspace", free_function="gsl_multifit_linear_free", cheader_filename="gsl/gsl_multifit.h")]
 	public class MultifitLinearWorkspace
 	{
 		public size_t n;
@@ -4322,7 +4322,7 @@ namespace Gsl
 		public Vector xt;
 		public Vector D;
 		
-		[CCode (cname="gsl_multifit_linear_workspace_alloc")]
+		[CCode (cname="gsl_multifit_linear_alloc")]
 		public MultifitLinearWorkspace (size_t n, size_t p);
 	}
 	
diff --git a/vapi/gstreamer-0.10.vapi b/vapi/gstreamer-0.10.vapi
index e083a9f..50bc235 100644
--- a/vapi/gstreamer-0.10.vapi
+++ b/vapi/gstreamer-0.10.vapi
@@ -43,10 +43,10 @@ namespace Gst {
 		public bool state_dirty;
 		[CCode (has_construct_function = false, type = "GstElement*")]
 		public Bin (string? name);
-		public bool add (owned Gst.Element element);
+		public bool add (Gst.Element element);
 		[NoWrapper]
 		public virtual bool add_element (Gst.Element element);
-		public void add_many (params owned Gst.Element[] elements);
+		public void add_many (params Gst.Element[] elements);
 		public Gst.Pad? find_unconnected_pad (Gst.PadDirection direction);
 		public Gst.Pad? find_unlinked_pad (Gst.PadDirection direction);
 		public Gst.Element? get_by_interface (GLib.Type iface);
@@ -411,7 +411,7 @@ namespace Gst {
 		[CCode (has_construct_function = false)]
 		protected Element ();
 		public void abort_state ();
-		public bool add_pad (owned Gst.Pad pad);
+		public bool add_pad (Gst.Pad pad);
 		[CCode (cname = "gst_element_class_add_pad_template")]
 		public class void add_pad_template (Gst.PadTemplate templ);
 		public virtual Gst.StateChangeReturn change_state (Gst.StateChange transition);
@@ -453,6 +453,7 @@ namespace Gst {
 		public bool link_pads_full (string srcpadname, Gst.Element dest, string destpadname, Gst.PadLinkCheck flags);
 		public void lost_state ();
 		public void lost_state_full (bool new_base_time);
+		[CCode (returns_floating_reference = true)]
 		public static Gst.Element? make_from_uri (Gst.URIType type, string uri, string? elementname);
 		public void message_full (Gst.MessageType type, GLib.Quark domain, int code, owned string? text, owned string? debug, string file, string function, int line);
 		public bool post_message (owned Gst.Message message);
@@ -1473,7 +1474,7 @@ namespace Gst {
 		[CCode (cname = "gst_type_find_suggest_simple")]
 		public void suggest_simple (uint probability, string media_type, string fieldname);
 	}
-	[CCode (cheader_filename = "gst/gst.h")]
+	[CCode (cheader_filename = "gst/gst.h", type_id = "GST_TYPE_TYPE_FIND_FACTORY")]
 	public class TypeFindFactory : Gst.PluginFeature {
 		public weak Gst.Caps caps;
 		public weak string extensions;
@@ -2949,9 +2950,9 @@ namespace Gst {
 	public static unowned GLib.ParamSpec param_spec_fraction (string name, string nick, string blurb, int min_num, int min_denom, int max_num, int max_denom, int default_num, int default_denom, GLib.ParamFlags flags);
 	[CCode (cheader_filename = "gst/gst.h")]
 	public static unowned GLib.ParamSpec param_spec_mini_object (string name, string nick, string blurb, GLib.Type object_type, GLib.ParamFlags flags);
-	[CCode (cheader_filename = "gst/gst.h")]
+	[CCode (cheader_filename = "gst/gst.h", returns_floating_reference = true)]
 	public static Gst.Element? parse_bin_from_description (string bin_description, bool ghost_unlinked_pads) throws GLib.Error;
-	[CCode (cheader_filename = "gst/gst.h")]
+	[CCode (cheader_filename = "gst/gst.h", returns_floating_reference = true)]
 	public static Gst.Element? parse_bin_from_description_full (string bin_description, bool ghost_unlinked_pads, Gst.ParseContext? context, Gst.ParseFlags flags) throws GLib.Error;
 	[CCode (cheader_filename = "gst/gst.h")]
 	public static GLib.Quark parse_error_quark ();
diff --git a/vapi/gtk+-2.0.vapi b/vapi/gtk+-2.0.vapi
index 630e73f..3d2cda9 100644
--- a/vapi/gtk+-2.0.vapi
+++ b/vapi/gtk+-2.0.vapi
@@ -706,7 +706,7 @@ namespace Gtk {
 		public void set_focus_on_click (bool focus_on_click);
 		public void set_image (Gtk.Widget image);
 		public void set_image_position (Gtk.PositionType position);
-		public void set_label (string label);
+		public void set_label (string? label);
 		public void set_relief (Gtk.ReliefStyle newstyle);
 		public void set_use_stock (bool use_stock);
 		public void set_use_underline (bool use_underline);
@@ -1320,7 +1320,7 @@ namespace Gtk {
 		public static unowned GLib.ParamSpec class_list_child_properties (GLib.ObjectClass cclass, uint n_properties);
 		[NoWrapper]
 		public virtual unowned string composite_name (Gtk.Widget child);
-		public virtual void forall (Gtk.Callback callback);
+		public void forall (Gtk.Callback callback);
 		[CCode (vfunc_name = "forall")]
 		public virtual void forall_internal (bool include_internal, Gtk.Callback callback);
 		public void @foreach (Gtk.Callback callback);
@@ -1967,7 +1967,7 @@ namespace Gtk {
 		public bool snap_edge_set { get; set; }
 		public virtual signal void child_attached (Gtk.Widget child);
 	}
-	[CCode (cheader_filename = "gtk/gtk.h")]
+	[CCode (cheader_filename = "gtk/gtk.h,gtk/gtkimmodule.h")]
 	public class IMContext : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected IMContext ();
@@ -2087,10 +2087,10 @@ namespace Gtk {
 		public unowned string get_example_icon_name ();
 		public static unowned Gtk.IconTheme get_for_screen (Gdk.Screen screen);
 		public int get_icon_sizes (string icon_name);
-		public void get_search_path (string path, int n_elements);
+		public void get_search_path (out string[] path);
 		public bool has_icon (string icon_name);
 		public GLib.List<string> list_contexts ();
-		public GLib.List<string> list_icons (string context);
+		public GLib.List<string> list_icons (string? context);
 		public Gdk.Pixbuf? load_icon (string icon_name, int size, Gtk.IconLookupFlags flags) throws GLib.Error;
 		public Gtk.IconInfo lookup_by_gicon (GLib.Icon icon, int size, Gtk.IconLookupFlags flags);
 		public Gtk.IconInfo lookup_icon (string icon_name, int size, Gtk.IconLookupFlags flags);
@@ -4253,7 +4253,7 @@ namespace Gtk {
 		public void add (Gdk.Atom target, uint flags, uint info);
 		public void add_image_targets (uint info, bool writable);
 		public void add_rich_text_targets (uint info, bool deserializable, Gtk.TextBuffer buffer);
-		public void add_table (Gtk.TargetEntry[] targets, uint ntargets);
+		public void add_table (Gtk.TargetEntry[] targets);
 		public void add_text_targets (uint info);
 		public void add_uri_targets (uint info);
 		public bool find (Gdk.Atom target, uint info);
@@ -4475,7 +4475,7 @@ namespace Gtk {
 		public weak Gtk.TextTagTable table;
 		public weak Gtk.TextAttributes values;
 		[CCode (has_construct_function = false)]
-		public TextTag (string name);
+		public TextTag (string? name = null);
 		public int get_priority ();
 		public void set_priority (int priority);
 		[NoAccessorMethod]
@@ -6031,7 +6031,7 @@ namespace Gtk {
 		[HasEmitter]
 		public signal void delete_text (int start_pos, int end_pos);
 		[HasEmitter]
-		public signal void insert_text (string text, int length, void* position);
+		public signal void insert_text (string text, int length, ref int position);
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public interface FileChooser : Gtk.Widget {
@@ -6267,7 +6267,7 @@ namespace Gtk {
 		public int width;
 		public int height;
 	}
-	[CCode (cheader_filename = "gtk/gtk.h")]
+	[CCode (cheader_filename = "gtk/gtk.h,gtk/gtkimmodule.h")]
 	public struct IMContextInfo {
 		public weak string context_id;
 		public weak string context_name;
@@ -7425,7 +7425,7 @@ namespace Gtk {
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public delegate int AssistantPageFunc (int current_page);
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public delegate void BuilderConnectFunc (Gtk.Builder builder, GLib.Object object, string signal_name, string handler_name, GLib.Object connect_object, GLib.ConnectFlags flags);
+	public delegate void BuilderConnectFunc (Gtk.Builder builder, GLib.Object object, string signal_name, string handler_name, GLib.Object? connect_object, GLib.ConnectFlags flags);
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public delegate string CalendarDetailFunc (Gtk.Calendar calendar, uint year, uint month, uint day);
 	[CCode (cheader_filename = "gtk/gtk.h")]
@@ -8271,7 +8271,7 @@ namespace Gtk {
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public static unowned Gtk.Widget test_find_widget (Gtk.Widget widget, string label_pattern, GLib.Type widget_type);
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public static void test_init (int argcp, out unowned string argvp);
+	public static void test_init ([CCode (array_length_pos = 0.9)] ref unowned string[] argvp, ...);
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public static unowned GLib.Type[] test_list_all_types (uint n_types);
 	[CCode (cheader_filename = "gtk/gtk.h")]
diff --git a/vapi/gtk+-3.0.vapi b/vapi/gtk+-3.0.vapi
index 94cc263..35b806d 100644
--- a/vapi/gtk+-3.0.vapi
+++ b/vapi/gtk+-3.0.vapi
@@ -226,6 +226,7 @@ namespace Gtk {
 	public class AboutDialog : Gtk.Dialog, Atk.Implementor, Gtk.Buildable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public AboutDialog ();
+		public void add_credit_section (string section_name, string people);
 		public unowned string get_artists ();
 		public unowned string get_authors ();
 		public unowned string get_comments ();
@@ -348,6 +349,11 @@ namespace Gtk {
 		public virtual void connect_widget_destroyed ();
 		public unowned Gtk.Widget get_widget ();
 		public void set_widget (Gtk.Widget widget);
+		[NoWrapper]
+		public virtual void widget_set ();
+		[NoWrapper]
+		public virtual void widget_unset ();
+		public Gtk.Widget widget { get; set; }
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public class Action : GLib.Object, Gtk.Buildable {
@@ -509,11 +515,14 @@ namespace Gtk {
 		public void append_custom_item (string name, string label, GLib.Icon icon);
 		public void append_separator ();
 		public unowned string get_heading ();
+		public bool get_show_default_item ();
 		public bool get_show_dialog_item ();
 		public void set_active_custom_item (string name);
 		public void set_heading (string heading);
+		public void set_show_default_item (bool setting);
 		public void set_show_dialog_item (bool setting);
 		public string heading { get; set; }
+		public bool show_default_item { get; set construct; }
 		public bool show_dialog_item { get; set construct; }
 		public virtual signal void custom_item_activated (string item_name);
 	}
@@ -557,16 +566,39 @@ namespace Gtk {
 		public virtual signal void populate_popup (Gtk.Menu menu, GLib.AppInfo app_info);
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class Application : GLib.Application, GLib.ActionGroup {
+	public class Application : GLib.Application, GLib.ActionGroup, GLib.ActionMap {
 		[CCode (has_construct_function = false)]
 		public Application (string application_id, GLib.ApplicationFlags flags);
+		public void add_accelerator (string accelerator, string action_name, GLib.Variant parameter);
 		public void add_window (Gtk.Window window);
+		public bool end_session (Gtk.ApplicationEndSessionStyle style, bool request_confirmation);
+		public unowned GLib.MenuModel get_app_menu ();
+		public unowned GLib.MenuModel get_menubar ();
 		public unowned GLib.List<weak Gtk.Window> get_windows ();
+		public uint inhibit (Gtk.Window window, Gtk.ApplicationInhibitFlags flags, string reason);
+		public bool is_inhibited (Gtk.ApplicationInhibitFlags flags);
+		public void remove_accelerator (string action_name, GLib.Variant parameter);
 		public void remove_window (Gtk.Window window);
+		public void set_app_menu (GLib.MenuModel app_menu);
+		public void set_menubar (GLib.MenuModel menubar);
+		public void uninhibit (uint cookie);
+		public GLib.MenuModel app_menu { get; set; }
+		public GLib.MenuModel menubar { get; set; }
+		[NoAccessorMethod]
+		public bool register_session { get; set; }
+		public virtual signal void quit ();
 		public virtual signal void window_added (Gtk.Window window);
 		public virtual signal void window_removed (Gtk.Window window);
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
+	public class ApplicationWindow : Gtk.Window, Atk.Implementor, Gtk.Buildable, GLib.ActionGroup, GLib.ActionMap {
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public ApplicationWindow (Gtk.Application application);
+		public bool get_show_menubar ();
+		public void set_show_menubar (bool show_menubar);
+		public bool show_menubar { get; set construct; }
+	}
+	[CCode (cheader_filename = "gtk/gtk.h")]
 	public class Arrow : Gtk.Misc, Atk.Implementor, Gtk.Buildable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public Arrow (Gtk.ArrowType arrow_type, Gtk.ShadowType shadow_type);
@@ -693,8 +725,10 @@ namespace Gtk {
 		[CCode (has_construct_function = false)]
 		public Builder ();
 		public uint add_from_file (string filename) throws GLib.Error;
+		public uint add_from_resource (string resource_path) throws GLib.Error;
 		public uint add_from_string (string buffer, size_t length) throws GLib.Error;
 		public uint add_objects_from_file (string filename, [CCode (array_length = false)] string[] object_ids) throws GLib.Error;
+		public uint add_objects_from_resource (string resource_path, string object_ids) throws GLib.Error;
 		public uint add_objects_from_string (string buffer, size_t length, [CCode (array_length = false)] string[] object_ids) throws GLib.Error;
 		public void connect_signals (void* user_data);
 		public void connect_signals_full (Gtk.BuilderConnectFunc func);
@@ -709,7 +743,7 @@ namespace Gtk {
 		public string translation_domain { get; set; }
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class Button : Gtk.Bin, Atk.Implementor, Gtk.Buildable, Gtk.Activatable {
+	public class Button : Gtk.Bin, Atk.Implementor, Gtk.Buildable, Gtk.Actionable, Gtk.Activatable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public Button ();
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
@@ -727,7 +761,7 @@ namespace Gtk {
 		public void set_focus_on_click (bool focus_on_click);
 		public void set_image (Gtk.Widget image);
 		public void set_image_position (Gtk.PositionType position);
-		public void set_label (string label);
+		public void set_label (string? label);
 		public void set_relief (Gtk.ReliefStyle newstyle);
 		public void set_use_stock (bool use_stock);
 		public void set_use_underline (bool use_underline);
@@ -1223,7 +1257,7 @@ namespace Gtk {
 		public Gtk.TreeModel model { get; set; }
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class CheckButton : Gtk.ToggleButton, Atk.Implementor, Gtk.Buildable, Gtk.Activatable {
+	public class CheckButton : Gtk.ToggleButton, Atk.Implementor, Gtk.Buildable, Gtk.Actionable, Gtk.Activatable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public CheckButton ();
 		[NoWrapper]
@@ -1292,12 +1326,12 @@ namespace Gtk {
 		public virtual signal void owner_change (Gdk.Event p0);
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class ColorButton : Gtk.Button, Atk.Implementor, Gtk.Buildable, Gtk.Activatable {
+	public class ColorButton : Gtk.Button, Atk.Implementor, Gtk.Buildable, Gtk.Actionable, Gtk.Activatable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public ColorButton ();
 		public uint16 get_alpha ();
 		public void get_color (out Gdk.Color color);
-		public void get_rgba (Gdk.RGBA rgba);
+		public Gdk.RGBA get_rgba ();
 		public unowned string get_title ();
 		public bool get_use_alpha ();
 		public void set_alpha (uint16 alpha);
@@ -1429,6 +1463,7 @@ namespace Gtk {
 		public string tearoff_title { owned get; set; }
 		public int wrap_width { get; set; }
 		public virtual signal void changed ();
+		public virtual signal unowned string format_entry_text (string path);
 		public virtual signal void move_active (Gtk.ScrollType p0);
 		[HasEmitter]
 		public virtual signal bool popdown ();
@@ -1468,8 +1503,9 @@ namespace Gtk {
 		public static unowned GLib.ParamSpec class_list_child_properties (GLib.ObjectClass cclass, uint n_properties);
 		[NoWrapper]
 		public virtual unowned string composite_name (Gtk.Widget child);
-		public virtual void forall (Gtk.Callback callback);
+		public void forall (Gtk.Callback callback);
 		[CCode (vfunc_name = "forall")]
+		[NoWrapper]
 		public virtual void forall_internal (bool include_internal, Gtk.Callback callback);
 		public void @foreach (Gtk.Callback callback);
 		public uint get_border_width ();
@@ -1542,7 +1578,8 @@ namespace Gtk {
 		public unowned Gtk.Widget add_button (string button_text, int response_id);
 		public void add_buttons (...);
 		public unowned Gtk.Widget get_action_area ();
-		public unowned Gtk.Widget get_content_area ();
+		[CCode (type = "GtkWidget*")]
+		public unowned Gtk.Box get_content_area ();
 		public int get_response_for_widget (Gtk.Widget widget);
 		public unowned Gtk.Widget get_widget_for_response (int response_id);
 		public int run ();
@@ -1595,9 +1632,9 @@ namespace Gtk {
 		public double get_progress_fraction ();
 		public double get_progress_pulse_step ();
 		public unowned string get_text ();
-		public void get_text_area (Gdk.Rectangle text_area);
+		public void get_text_area (out Gdk.Rectangle text_area);
 		[NoWrapper]
-		public virtual void get_text_area_size (int x, int y, int width, int height);
+		public virtual void get_text_area_size (out int x, out int y, out int width, out int height);
 		public uint16 get_text_length ();
 		public bool get_visibility ();
 		public int get_width_chars ();
@@ -1744,6 +1781,7 @@ namespace Gtk {
 		[CCode (has_construct_function = false)]
 		public EntryCompletion ();
 		public void complete ();
+		public unowned string compute_prefix (string key);
 		public void delete_action (int index_);
 		public unowned string get_completion_prefix ();
 		public unowned Gtk.Widget get_entry ();
@@ -1894,7 +1932,7 @@ namespace Gtk {
 		public int y;
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class FontButton : Gtk.Button, Atk.Implementor, Gtk.Buildable, Gtk.Activatable {
+	public class FontButton : Gtk.Button, Atk.Implementor, Gtk.Buildable, Gtk.Actionable, Gtk.Activatable, Gtk.FontChooser {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public FontButton ();
 		public unowned string get_font_name ();
@@ -1920,33 +1958,14 @@ namespace Gtk {
 		public virtual signal void font_set ();
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class FontChooser : Gtk.Box, Atk.Implementor, Gtk.Buildable, Gtk.Orientable {
+	public class FontChooserDialog : Gtk.Dialog, Atk.Implementor, Gtk.Buildable, Gtk.FontChooser {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
-		public FontChooser ();
-		public unowned Pango.FontFace get_face ();
-		public unowned Pango.FontFamily get_family ();
-		public unowned string get_font_name ();
-		public unowned string get_preview_text ();
-		public bool get_show_preview_entry ();
-		public int get_size ();
-		public void set_filter_func (owned Gtk.FontFilterFunc filter);
-		public bool set_font_name (string fontname);
-		public void set_preview_text (string text);
-		public void set_show_preview_entry (bool show_preview_entry);
-		public string font_name { get; set; }
-		public string preview_text { get; set; }
-		public bool show_preview_entry { get; set; }
-		public virtual signal void font_activated (string fontname);
+		public FontChooserDialog (string title, Gtk.Window parent);
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class FontChooserDialog : Gtk.Dialog, Atk.Implementor, Gtk.Buildable {
+	public class FontChooserWidget : Gtk.Box, Atk.Implementor, Gtk.Buildable, Gtk.Orientable, Gtk.FontChooser {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
-		public FontChooserDialog (string title, Gtk.Window window);
-		public unowned Gtk.Widget get_font_chooser ();
-		public unowned string get_font_name ();
-		public unowned string get_preview_text ();
-		public bool set_font_name (string fontname);
-		public void set_preview_text (string text);
+		public FontChooserWidget ();
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public class FontSelection : Gtk.Box, Atk.Implementor, Gtk.Buildable, Gtk.Orientable {
@@ -2010,6 +2029,7 @@ namespace Gtk {
 		[CCode (has_construct_function = false)]
 		public Gradient.radial (double x0, double y0, double radius0, double x1, double y1, double radius1);
 		public bool resolve (Gtk.StyleProperties props, out unowned Cairo.Pattern resolved_gradient);
+		public unowned Cairo.Pattern resolve_for_context (Gtk.StyleContext context);
 		public unowned string to_string ();
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
@@ -2099,7 +2119,7 @@ namespace Gtk {
 		public bool snap_edge_set { get; set; }
 		public virtual signal void child_attached (Gtk.Widget child);
 	}
-	[CCode (cheader_filename = "gtk/gtk.h")]
+	[CCode (cheader_filename = "gtk/gtk.h,gtk/gtkimmodule.h")]
 	public class IMContext : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected IMContext ();
@@ -2213,10 +2233,10 @@ namespace Gtk {
 		public unowned string get_example_icon_name ();
 		public static unowned Gtk.IconTheme get_for_screen (Gdk.Screen screen);
 		public int get_icon_sizes (string icon_name);
-		public void get_search_path (string path, int n_elements);
+		public void get_search_path (out string[] path);
 		public bool has_icon (string icon_name);
 		public GLib.List<string> list_contexts ();
-		public GLib.List<string> list_icons (string context);
+		public GLib.List<string> list_icons (string? context);
 		public Gdk.Pixbuf? load_icon (string icon_name, int size, Gtk.IconLookupFlags flags) throws GLib.Error;
 		public Gtk.IconInfo lookup_by_gicon (GLib.Icon icon, int size, Gtk.IconLookupFlags flags);
 		public Gtk.IconInfo lookup_icon (string icon_name, int size, Gtk.IconLookupFlags flags);
@@ -2335,6 +2355,8 @@ namespace Gtk {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public Image.from_pixbuf (Gdk.Pixbuf pixbuf);
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public Image.from_resource (string resource_path);
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public Image.from_stock (string stock_id, Gtk.IconSize size);
 		public unowned Gdk.PixbufAnimation get_animation ();
 		public void get_gicon (out unowned GLib.Icon gicon, Gtk.IconSize size);
@@ -2350,6 +2372,7 @@ namespace Gtk {
 		public void set_from_icon_name (string icon_name, Gtk.IconSize size);
 		public void set_from_icon_set (Gtk.IconSet icon_set, Gtk.IconSize size);
 		public void set_from_pixbuf (Gdk.Pixbuf pixbuf);
+		public void set_from_resource (string resource_path);
 		public void set_from_stock (string stock_id, Gtk.IconSize size);
 		public void set_pixel_size (int pixel_size);
 		[NoAccessorMethod]
@@ -2525,7 +2548,7 @@ namespace Gtk {
 		public uint width { get; set; }
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class LinkButton : Gtk.Button, Atk.Implementor, Gtk.Buildable, Gtk.Activatable {
+	public class LinkButton : Gtk.Button, Atk.Implementor, Gtk.Buildable, Gtk.Actionable, Gtk.Activatable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public LinkButton (string uri);
 		public unowned string get_uri ();
@@ -2567,7 +2590,7 @@ namespace Gtk {
 		public void swap (Gtk.TreeIter a, Gtk.TreeIter b);
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class LockButton : Gtk.Button, Atk.Implementor, Gtk.Buildable, Gtk.Activatable {
+	public class LockButton : Gtk.Button, Atk.Implementor, Gtk.Buildable, Gtk.Actionable, Gtk.Activatable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public LockButton (GLib.Permission permission);
 		public unowned GLib.Permission get_permission ();
@@ -2607,6 +2630,8 @@ namespace Gtk {
 		public void attach (Gtk.Widget child, uint left_attach, uint right_attach, uint top_attach, uint bottom_attach);
 		public void attach_to_widget (Gtk.Widget attach_widget, Gtk.MenuDetachFunc? detacher);
 		public void detach ();
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public Menu.from_model (GLib.MenuModel model);
 		public unowned Gtk.AccelGroup get_accel_group ();
 		public unowned string get_accel_path ();
 		public unowned Gtk.Widget get_active ();
@@ -2645,6 +2670,8 @@ namespace Gtk {
 	public class MenuBar : Gtk.MenuShell, Atk.Implementor, Gtk.Buildable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public MenuBar ();
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public MenuBar.from_model (GLib.MenuModel model);
 		public Gtk.PackDirection get_child_pack_direction ();
 		public Gtk.PackDirection get_pack_direction ();
 		public void set_child_pack_direction (Gtk.PackDirection child_pack_dir);
@@ -2717,7 +2744,7 @@ namespace Gtk {
 		public virtual signal void selection_done ();
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class MenuToolButton : Gtk.ToolButton, Atk.Implementor, Gtk.Buildable, Gtk.Activatable {
+	public class MenuToolButton : Gtk.ToolButton, Atk.Implementor, Gtk.Buildable, Gtk.Activatable, Gtk.Actionable {
 		[CCode (has_construct_function = false, type = "GtkToolItem*")]
 		public MenuToolButton (Gtk.Widget? icon_widget, string? label);
 		[CCode (has_construct_function = false, type = "GtkToolItem*")]
@@ -3211,7 +3238,7 @@ namespace Gtk {
 		public virtual signal void changed (Gtk.RadioAction current);
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class RadioButton : Gtk.CheckButton, Atk.Implementor, Gtk.Buildable, Gtk.Activatable {
+	public class RadioButton : Gtk.CheckButton, Atk.Implementor, Gtk.Buildable, Gtk.Actionable, Gtk.Activatable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public RadioButton (GLib.SList<Gtk.RadioButton>? group);
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
@@ -3251,7 +3278,7 @@ namespace Gtk {
 		public virtual signal void group_changed ();
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class RadioToolButton : Gtk.ToggleToolButton, Atk.Implementor, Gtk.Buildable, Gtk.Activatable {
+	public class RadioToolButton : Gtk.ToggleToolButton, Atk.Implementor, Gtk.Buildable, Gtk.Activatable, Gtk.Actionable {
 		[CCode (has_construct_function = false, type = "GtkToolItem*")]
 		public RadioToolButton (GLib.SList<Gtk.RadioToolButton>? group);
 		[CCode (has_construct_function = false, type = "GtkToolItem*")]
@@ -3493,21 +3520,24 @@ namespace Gtk {
 		public void clear_marks ();
 		public int get_digits ();
 		public bool get_draw_value ();
+		public bool get_has_origin ();
 		public unowned Pango.Layout get_layout ();
 		public virtual void get_layout_offsets (out int x, out int y);
 		public Gtk.PositionType get_value_pos ();
 		public void set_digits (int digits);
 		public void set_draw_value (bool draw_value);
+		public void set_has_origin (bool has_origin);
 		public void set_value_pos (Gtk.PositionType pos);
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public Scale.with_range (Gtk.Orientation orientation, double min, double max, double step);
 		public int digits { get; set; }
 		public bool draw_value { get; set; }
+		public bool has_origin { get; set; }
 		public Gtk.PositionType value_pos { get; set; }
 		public virtual signal string format_value (double value);
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class ScaleButton : Gtk.Button, Atk.Implementor, Gtk.Buildable, Gtk.Activatable, Gtk.Orientable {
+	public class ScaleButton : Gtk.Button, Atk.Implementor, Gtk.Buildable, Gtk.Actionable, Gtk.Activatable, Gtk.Orientable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public ScaleButton (Gtk.IconSize size, double min, double max, double step, [CCode (array_length = false)] string[] icons);
 		public unowned Gtk.Adjustment get_adjustment ();
@@ -3532,7 +3562,7 @@ namespace Gtk {
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public class Scrollbar : Gtk.Range, Atk.Implementor, Gtk.Buildable, Gtk.Orientable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
-		public Scrollbar (Gtk.Orientation orientation, Gtk.Adjustment adjustment);
+		public Scrollbar (Gtk.Orientation orientation, Gtk.Adjustment? adjustment);
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public class ScrolledWindow : Gtk.Bin, Atk.Implementor, Gtk.Buildable {
@@ -3579,7 +3609,7 @@ namespace Gtk {
 		[CCode (array_length = false)]
 		public unowned uchar[] get_data ();
 		public Gdk.Atom get_data_type ();
-		public unowned uchar[] get_data_with_length (int length);
+		public unowned uchar[] get_data_with_length ();
 		public unowned Gdk.Display get_display ();
 		public int get_format ();
 		public int get_length ();
@@ -3730,6 +3760,10 @@ namespace Gtk {
 		[NoAccessorMethod]
 		public Gtk.CornerType gtk_scrolled_window_placement { get; set; }
 		[NoAccessorMethod]
+		public bool gtk_shell_shows_app_menu { get; set; }
+		[NoAccessorMethod]
+		public bool gtk_shell_shows_menubar { get; set; }
+		[NoAccessorMethod]
 		public bool gtk_show_input_method_menu { get; set; }
 		[NoAccessorMethod]
 		public bool gtk_show_unicode_menu { get; set; }
@@ -3838,7 +3872,7 @@ namespace Gtk {
 		public double value { get; set; }
 		public bool wrap { get; set; }
 		public virtual signal void change_value (Gtk.ScrollType scroll);
-		public virtual signal int input (void* new_value);
+		public virtual signal int input (out double new_value);
 		public virtual signal bool output ();
 		public virtual signal void value_changed ();
 		public virtual signal void wrapped ();
@@ -4054,20 +4088,22 @@ namespace Gtk {
 		public Gtk.JunctionSides get_junction_sides ();
 		public Gtk.Border get_margin (Gtk.StateFlags state);
 		public Gtk.Border get_padding (Gtk.StateFlags state);
+		public unowned Gtk.StyleContext get_parent ();
 		public unowned Gtk.WidgetPath get_path ();
 		public void get_property (string property, Gtk.StateFlags state, GLib.Value value);
 		public unowned Gdk.Screen get_screen ();
+		public unowned Gtk.CssSection get_section (string property);
 		public Gtk.StateFlags get_state ();
 		public void get_style (...);
 		public void get_style_property (string property_name, GLib.Value value);
 		public void get_style_valist (void* args);
 		public void get_valist (Gtk.StateFlags state, void* args);
 		public bool has_class (string class_name);
-		public bool has_region (string region_name, Gtk.RegionFlags flags_return);
+		public bool has_region (string region_name, out Gtk.RegionFlags flags_return);
 		public void invalidate ();
 		public unowned GLib.List list_classes ();
 		public unowned GLib.List list_regions ();
-		public bool lookup_color (string color_name, Gdk.RGBA color);
+		public bool lookup_color (string color_name, out Gdk.RGBA color);
 		public unowned Gtk.IconSet lookup_icon_set (string stock_id);
 		public void notify_state_change (Gdk.Window window, void* region_id, Gtk.StateType state, bool state_value);
 		public void pop_animatable_region ();
@@ -4115,11 +4151,13 @@ namespace Gtk {
 		public void set_background (Gdk.Window window);
 		public void set_direction (Gtk.TextDirection direction);
 		public void set_junction_sides (Gtk.JunctionSides sides);
+		public void set_parent (Gtk.StyleContext parent);
 		public void set_path (Gtk.WidgetPath path);
 		public void set_screen (Gdk.Screen screen);
 		public void set_state (Gtk.StateFlags flags);
 		public bool state_is_running (Gtk.StateType state, double progress);
 		public Gtk.TextDirection direction { get; set; }
+		public Gtk.StyleContext parent { get; set; }
 		public Gdk.Screen screen { get; set; }
 		public virtual signal void changed ();
 	}
@@ -4142,7 +4180,7 @@ namespace Gtk {
 		public void unset_property (string property, Gtk.StateFlags state);
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class Switch : Gtk.Widget, Atk.Implementor, Gtk.Buildable, Gtk.Activatable {
+	public class Switch : Gtk.Widget, Atk.Implementor, Gtk.Buildable, Gtk.Actionable, Gtk.Activatable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public Switch ();
 		public bool get_active ();
@@ -4165,6 +4203,8 @@ namespace Gtk {
 		[CCode (has_construct_function = false)]
 		public SymbolicColor.shade (Gtk.SymbolicColor color, double factor);
 		public unowned string to_string ();
+		[CCode (has_construct_function = false)]
+		public SymbolicColor.win32 (string theme_class, int id);
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public class Table : Gtk.Container, Atk.Implementor, Gtk.Buildable {
@@ -4231,7 +4271,7 @@ namespace Gtk {
 		public void add (Gdk.Atom target, uint flags, uint info);
 		public void add_image_targets (uint info, bool writable);
 		public void add_rich_text_targets (uint info, bool deserializable, Gtk.TextBuffer buffer);
-		public void add_table (Gtk.TargetEntry[] targets, uint ntargets);
+		public void add_table (Gtk.TargetEntry[] targets);
 		public void add_text_targets (uint info);
 		public void add_uri_targets (uint info);
 		public bool find (Gdk.Atom target, uint info);
@@ -4414,7 +4454,7 @@ namespace Gtk {
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public class TextTag : GLib.Object {
 		[CCode (has_construct_function = false)]
-		public TextTag (string name);
+		public TextTag (string? name = null);
 		public int get_priority ();
 		public void set_priority (int priority);
 		[NoAccessorMethod]
@@ -4685,10 +4725,10 @@ namespace Gtk {
 		public void get_style_valist (void* args);
 		public void get_valist (Gtk.StateFlags state, void* args);
 		public bool has_class (string style_class);
-		public bool has_region (string style_region, Gtk.RegionFlags flags);
+		public bool has_region (string style_region, out Gtk.RegionFlags flags);
 		public static unowned Gtk.ThemingEngine load (string name);
 		public bool lookup_color (string color_name, out Gdk.RGBA color);
-		public static void register_property (string name_space, Gtk.StylePropertyParser parse_func, GLib.ParamSpec pspec);
+		public static void register_property (string name_space, Gtk.StylePropertyParser? parse_func, GLib.ParamSpec pspec);
 		[NoWrapper]
 		public virtual void render_activity (Cairo.Context cr, double x, double y, double width, double height);
 		[NoWrapper]
@@ -4739,7 +4779,7 @@ namespace Gtk {
 		public virtual signal void toggled ();
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class ToggleButton : Gtk.Button, Atk.Implementor, Gtk.Buildable, Gtk.Activatable {
+	public class ToggleButton : Gtk.Button, Atk.Implementor, Gtk.Buildable, Gtk.Actionable, Gtk.Activatable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public ToggleButton ();
 		public bool get_active ();
@@ -4760,7 +4800,7 @@ namespace Gtk {
 		public virtual signal void toggled ();
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class ToggleToolButton : Gtk.ToolButton, Atk.Implementor, Gtk.Buildable, Gtk.Activatable {
+	public class ToggleToolButton : Gtk.ToolButton, Atk.Implementor, Gtk.Buildable, Gtk.Activatable, Gtk.Actionable {
 		[CCode (has_construct_function = false, type = "GtkToolItem*")]
 		public ToggleToolButton ();
 		[CCode (has_construct_function = false, type = "GtkToolItem*")]
@@ -4771,7 +4811,7 @@ namespace Gtk {
 		public virtual signal void toggled ();
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class ToolButton : Gtk.ToolItem, Atk.Implementor, Gtk.Buildable, Gtk.Activatable {
+	public class ToolButton : Gtk.ToolItem, Atk.Implementor, Gtk.Buildable, Gtk.Activatable, Gtk.Actionable {
 		[CCode (has_construct_function = false, type = "GtkToolItem*")]
 		public ToolButton (Gtk.Widget? icon_widget, string? label);
 		[CCode (has_construct_function = false, type = "GtkToolItem*")]
@@ -5109,6 +5149,7 @@ namespace Gtk {
 		public bool get_hover_selection ();
 		public int get_level_indentation ();
 		public unowned Gtk.TreeModel get_model ();
+		public uint get_n_columns ();
 		public bool get_path_at_pos (int x, int y, out Gtk.TreePath? path, out unowned Gtk.TreeViewColumn? column, out int cell_x, out int cell_y);
 		public bool get_reorderable ();
 		public unowned Gtk.TreeViewRowSeparatorFunc get_row_separator_func ();
@@ -5286,6 +5327,7 @@ namespace Gtk {
 		public UIManager ();
 		public void add_ui (uint merge_id, string path, string name, string? action, Gtk.UIManagerItemType type, bool top);
 		public uint add_ui_from_file (string filename) throws GLib.Error;
+		public uint add_ui_from_resource (string resource_path) throws GLib.Error;
 		public uint add_ui_from_string (string buffer, ssize_t length) throws GLib.Error;
 		public void ensure_update ();
 		public unowned Gtk.AccelGroup get_accel_group ();
@@ -5356,7 +5398,7 @@ namespace Gtk {
 		public Gtk.ShadowType shadow_type { get; set; }
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public class VolumeButton : Gtk.ScaleButton, Atk.Implementor, Gtk.Buildable, Gtk.Activatable, Gtk.Orientable {
+	public class VolumeButton : Gtk.ScaleButton, Atk.Implementor, Gtk.Buildable, Gtk.Actionable, Gtk.Activatable, Gtk.Orientable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public VolumeButton ();
 		[NoAccessorMethod]
@@ -5378,7 +5420,10 @@ namespace Gtk {
 		public virtual void adjust_size_request (Gtk.Orientation orientation, ref int minimum_size, ref int natural_size);
 		public bool child_focus (Gtk.DirectionType direction);
 		public void class_path (out uint path_length, out unowned string path, out unowned string path_reversed);
-		public virtual void compute_expand (Gtk.Orientation orientation);
+		public virtual bool compute_expand (Gtk.Orientation orientation);
+		[CCode (vfunc_name = "compute_expand")]
+		[NoWrapper]
+		public virtual void compute_expand_internal (out bool hexpand, out bool vexpand);
 		public Pango.Context create_pango_context ();
 		public Pango.Layout create_pango_layout (string? text);
 		public void destroyed (out unowned Gtk.Widget widget_pointer);
@@ -5420,6 +5465,7 @@ namespace Gtk {
 		public int get_margin_left ();
 		public int get_margin_right ();
 		public int get_margin_top ();
+		public Gdk.ModifierType get_modifier_mask (Gdk.ModifierIntent intent);
 		public unowned Gtk.RcStyle get_modifier_style ();
 		public bool get_no_show_all ();
 		public unowned Pango.Context get_pango_context ();
@@ -5429,9 +5475,21 @@ namespace Gtk {
 		public void get_pointer (out int x, out int y);
 		public virtual void get_preferred_height (out int minimum_height, out int natural_height);
 		public virtual void get_preferred_height_for_width (int width, out int minimum_height, out int natural_height);
+		[CCode (vfunc_name = "get_preferred_height_for_width")]
+		[NoWrapper]
+		public virtual void get_preferred_height_for_width_internal (int width, out int minimum_height, out int natural_height);
+		[CCode (vfunc_name = "get_preferred_height")]
+		[NoWrapper]
+		public virtual void get_preferred_height_internal (out int minimum_height, out int natural_height);
 		public void get_preferred_size (out Gtk.Requisition minimum_size, out Gtk.Requisition natural_size);
 		public virtual void get_preferred_width (out int minimum_width, out int natural_width);
 		public virtual void get_preferred_width_for_height (int height, out int minimum_width, out int natural_width);
+		[CCode (vfunc_name = "get_preferred_width_for_height")]
+		[NoWrapper]
+		public virtual void get_preferred_width_for_height_internal (int height, out int minimum_width, out int natural_width);
+		[CCode (vfunc_name = "get_preferred_width")]
+		[NoWrapper]
+		public virtual void get_preferred_width_internal (out int minimum_width, out int natural_width);
 		public bool get_realized ();
 		public bool get_receives_default ();
 		public virtual Gtk.SizeRequestMode get_request_mode ();
@@ -5727,7 +5785,7 @@ namespace Gtk {
 		public bool iter_has_qclass (int pos, GLib.Quark qname);
 		public bool iter_has_qname (int pos, GLib.Quark qname);
 		public bool iter_has_qregion (int pos, GLib.Quark qname, Gtk.RegionFlags flags);
-		public bool iter_has_region (int pos, string name, Gtk.RegionFlags flags);
+		public bool iter_has_region (int pos, string name, out Gtk.RegionFlags flags);
 		public unowned GLib.SList iter_list_classes (int pos);
 		public unowned GLib.SList iter_list_regions (int pos);
 		public void iter_remove_class (int pos, string name);
@@ -5753,6 +5811,7 @@ namespace Gtk {
 		public void fullscreen ();
 		public bool get_accept_focus ();
 		public unowned Gtk.Application get_application ();
+		public unowned Gtk.Widget get_attached_to ();
 		public bool get_decorated ();
 		public static GLib.List<weak Gdk.Pixbuf> get_default_icon_list ();
 		public static unowned string get_default_icon_name ();
@@ -5766,6 +5825,7 @@ namespace Gtk {
 		public Gdk.Gravity get_gravity ();
 		public unowned Gtk.WindowGroup get_group ();
 		public bool get_has_resize_grip ();
+		public bool get_hide_titlebar_when_maximized ();
 		public unowned Gdk.Pixbuf get_icon ();
 		public GLib.List<weak Gdk.Pixbuf> get_icon_list ();
 		public unowned string get_icon_name ();
@@ -5804,6 +5864,7 @@ namespace Gtk {
 		public void resize_to_geometry (int width, int height);
 		public void set_accept_focus (bool setting);
 		public void set_application (Gtk.Application application);
+		public void set_attached_to (Gtk.Widget attach_widget);
 		public static void set_auto_startup_notification (bool setting);
 		public void set_decorated (bool setting);
 		public void set_default (Gtk.Widget default_widget);
@@ -5821,6 +5882,7 @@ namespace Gtk {
 		public void set_gravity (Gdk.Gravity gravity);
 		public void set_has_resize_grip (bool value);
 		public void set_has_user_ref_count (bool setting);
+		public void set_hide_titlebar_when_maximized (bool setting);
 		public void set_icon (Gdk.Pixbuf icon);
 		public bool set_icon_from_file (string filename) throws GLib.Error;
 		public void set_icon_list (GLib.List<Gdk.Pixbuf> list);
@@ -5849,6 +5911,7 @@ namespace Gtk {
 		public void unstick ();
 		public bool accept_focus { get; set; }
 		public Gtk.Application application { get; set; }
+		public Gtk.Widget attached_to { get; set construct; }
 		public bool decorated { get; set; }
 		[NoAccessorMethod]
 		public int default_height { get; set; }
@@ -5862,6 +5925,7 @@ namespace Gtk {
 		public bool has_resize_grip { get; set; }
 		[NoAccessorMethod]
 		public bool has_toplevel_focus { get; }
+		public bool hide_titlebar_when_maximized { get; set; }
 		public Gdk.Pixbuf icon { get; set; }
 		public string icon_name { get; set; }
 		[NoAccessorMethod]
@@ -5910,6 +5974,18 @@ namespace Gtk {
 		public void remove_window (Gtk.Window window);
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
+	public interface Actionable : Gtk.Widget {
+		public abstract unowned string get_action_name ();
+		public abstract unowned GLib.Variant get_action_target_value ();
+		public abstract void set_action_name (string action_name);
+		public void set_action_target (string format_string);
+		public abstract void set_action_target_value (GLib.Variant target_value);
+		public void set_detailed_action_name (string detailed_action_name);
+		public string action_name { get; set; }
+		[NoAccessorMethod]
+		public GLib.Variant action_target { owned get; set; }
+	}
+	[CCode (cheader_filename = "gtk/gtk.h")]
 	public interface Activatable : GLib.Object {
 		public void do_set_related_action (Gtk.Action action);
 		public unowned Gtk.Action get_related_action ();
@@ -5987,7 +6063,7 @@ namespace Gtk {
 		[HasEmitter]
 		public signal void delete_text (int start_pos, int end_pos);
 		[HasEmitter]
-		public signal void insert_text (string new_text, int new_text_length, void* position);
+		public signal void insert_text (string new_text, int new_text_length, ref int position);
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public interface FileChooser : Gtk.Widget {
@@ -6071,6 +6147,26 @@ namespace Gtk {
 	public interface FileChooserEmbed {
 	}
 	[CCode (cheader_filename = "gtk/gtk.h")]
+	public interface FontChooser : GLib.Object {
+		public unowned string get_font ();
+		public unowned Pango.FontDescription get_font_desc ();
+		public abstract unowned Pango.FontFace get_font_face ();
+		public abstract unowned Pango.FontFamily get_font_family ();
+		public abstract int get_font_size ();
+		public unowned string get_preview_text ();
+		public bool get_show_preview_entry ();
+		public abstract void set_filter_func (owned Gtk.FontFilterFunc filter);
+		public void set_font (string fontname);
+		public void set_font_desc (Pango.FontDescription font_desc);
+		public void set_preview_text (string text);
+		public void set_show_preview_entry (bool show_preview_entry);
+		public string font { get; set; }
+		public Pango.FontDescription font_desc { get; set; }
+		public string preview_text { get; set; }
+		public bool show_preview_entry { get; set; }
+		public signal void font_activated (string fontname);
+	}
+	[CCode (cheader_filename = "gtk/gtk.h")]
 	public interface Orientable : GLib.Object {
 		public Gtk.Orientation get_orientation ();
 		public void set_orientation (Gtk.Orientation orientation);
@@ -6262,7 +6358,7 @@ namespace Gtk {
 		public int16 top;
 		public int16 bottom;
 	}
-	[CCode (cheader_filename = "gtk/gtk.h")]
+	[CCode (cheader_filename = "gtk/gtk.h,gtk/gtkimmodule.h")]
 	public struct IMContextInfo {
 		public weak string context_id;
 		public weak string context_name;
@@ -6457,6 +6553,20 @@ namespace Gtk {
 		END,
 		CENTER
 	}
+	[CCode (cheader_filename = "gtk/gtk.h", cprefix = "GTK_APPLICATION_")]
+	public enum ApplicationEndSessionStyle {
+		LOGOUT,
+		REBOOT,
+		SHUTDOWN
+	}
+	[CCode (cheader_filename = "gtk/gtk.h", cprefix = "GTK_APPLICATION_INHIBIT_")]
+	[Flags]
+	public enum ApplicationInhibitFlags {
+		LOGOUT,
+		SWITCH,
+		SUSPEND,
+		IDLE
+	}
 	[CCode (cheader_filename = "gtk/gtk.h", cprefix = "GTK_ARROWS_")]
 	public enum ArrowPlacement {
 		BOTH,
@@ -6492,7 +6602,13 @@ namespace Gtk {
 		NONE,
 		SOLID,
 		INSET,
-		OUTSET
+		OUTSET,
+		HIDDEN,
+		DOTTED,
+		DASHED,
+		DOUBLE,
+		GROOVE,
+		RIDGE
 	}
 	[CCode (cheader_filename = "gtk/gtk.h", cprefix = "GTK_BUTTONBOX_")]
 	public enum ButtonBoxStyle {
@@ -6538,7 +6654,9 @@ namespace Gtk {
 		PRELIT,
 		INSENSITIVE,
 		SORTED,
-		FOCUSED
+		FOCUSED,
+		EXPANDABLE,
+		EXPANDED
 	}
 	[CCode (cheader_filename = "gtk/gtk.h", cprefix = "GTK_CORNER_")]
 	public enum CornerType {
@@ -6999,6 +7117,7 @@ namespace Gtk {
 		ODD,
 		FIRST,
 		LAST,
+		ONLY,
 		SORTED
 	}
 	[CCode (cheader_filename = "gtk/gtk.h", cprefix = "GTK_RELIEF_")]
@@ -7130,7 +7249,8 @@ namespace Gtk {
 		SELECTED,
 		INSENSITIVE,
 		INCONSISTENT,
-		FOCUSED
+		FOCUSED,
+		BACKDROP
 	}
 	[CCode (cheader_filename = "gtk/gtk.h", cprefix = "GTK_STATE_")]
 	public enum StateType {
@@ -7293,7 +7413,7 @@ namespace Gtk {
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public delegate int AssistantPageFunc (int current_page);
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public delegate void BuilderConnectFunc (Gtk.Builder builder, GLib.Object object, string signal_name, string handler_name, GLib.Object connect_object, GLib.ConnectFlags flags);
+	public delegate void BuilderConnectFunc (Gtk.Builder builder, GLib.Object object, string signal_name, string handler_name, GLib.Object? connect_object, GLib.ConnectFlags flags);
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public delegate string CalendarDetailFunc (Gtk.Calendar calendar, uint year, uint month, uint day);
 	[CCode (cheader_filename = "gtk/gtk.h")]
@@ -7802,8 +7922,12 @@ namespace Gtk {
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_ACCELERATOR;
 	[CCode (cheader_filename = "gtk/gtk.h")]
+	public const string STYLE_CLASS_ARROW;
+	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_BACKGROUND;
 	[CCode (cheader_filename = "gtk/gtk.h")]
+	public const string STYLE_CLASS_BOTTOM;
+	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_BUTTON;
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_CALENDAR;
@@ -7842,6 +7966,10 @@ namespace Gtk {
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_INLINE_TOOLBAR;
 	[CCode (cheader_filename = "gtk/gtk.h")]
+	public const string STYLE_CLASS_LEFT;
+	[CCode (cheader_filename = "gtk/gtk.h")]
+	public const string STYLE_CLASS_LINKED;
+	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_MARK;
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_MENU;
@@ -7858,12 +7986,16 @@ namespace Gtk {
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_PROGRESSBAR;
 	[CCode (cheader_filename = "gtk/gtk.h")]
+	public const string STYLE_CLASS_PULSE;
+	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_QUESTION;
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_RADIO;
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_RAISED;
 	[CCode (cheader_filename = "gtk/gtk.h")]
+	public const string STYLE_CLASS_RIGHT;
+	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_RUBBERBAND;
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_SCALE;
@@ -7888,6 +8020,8 @@ namespace Gtk {
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_TOOLTIP;
 	[CCode (cheader_filename = "gtk/gtk.h")]
+	public const string STYLE_CLASS_TOP;
+	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_TROUGH;
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public const string STYLE_CLASS_VERTICAL;
@@ -7944,10 +8078,16 @@ namespace Gtk {
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public static unowned string accelerator_get_label (uint accelerator_key, Gdk.ModifierType accelerator_mods);
 	[CCode (cheader_filename = "gtk/gtk.h")]
+	public static unowned string accelerator_get_label_with_keycode (Gdk.Display display, uint accelerator_key, uint keycode, Gdk.ModifierType accelerator_mods);
+	[CCode (cheader_filename = "gtk/gtk.h")]
 	public static unowned string accelerator_name (uint accelerator_key, Gdk.ModifierType accelerator_mods);
 	[CCode (cheader_filename = "gtk/gtk.h")]
+	public static unowned string accelerator_name_with_keycode (Gdk.Display display, uint accelerator_key, uint keycode, Gdk.ModifierType accelerator_mods);
+	[CCode (cheader_filename = "gtk/gtk.h")]
 	public static void accelerator_parse (string accelerator, out uint accelerator_key, out Gdk.ModifierType accelerator_mods);
 	[CCode (cheader_filename = "gtk/gtk.h")]
+	public static void accelerator_parse_with_keycode (string accelerator, uint accelerator_key, uint accelerator_codes, Gdk.ModifierType accelerator_mods);
+	[CCode (cheader_filename = "gtk/gtk.h")]
 	public static void accelerator_set_default_mod_mask (Gdk.ModifierType default_mod_mask);
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public static bool accelerator_valid (uint keyval, Gdk.ModifierType modifiers);
@@ -8242,6 +8382,8 @@ namespace Gtk {
 	[Deprecated (replacement = "StyleContext.render_icon_pixbuf", since = "vala-0.16")]
 	public static unowned Gdk.Pixbuf render_icon_pixbuf (Gtk.StyleContext context, Gtk.IconSource source, Gtk.IconSize size);
 	[CCode (cheader_filename = "gtk/gtk.h")]
+	public static void render_insertion_cursor (Gtk.StyleContext context, Cairo.Context cr, double x, double y, Pango.Layout layout, int index, Pango.Direction direction);
+	[CCode (cheader_filename = "gtk/gtk.h")]
 	[Deprecated (replacement = "StyleContext.render_layout", since = "vala-0.16")]
 	public static void render_layout (Gtk.StyleContext context, Cairo.Context cr, double x, double y, Pango.Layout layout);
 	[CCode (cheader_filename = "gtk/gtk.h")]
@@ -8311,7 +8453,7 @@ namespace Gtk {
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public static unowned Gtk.Widget test_find_widget (Gtk.Widget widget, string label_pattern, GLib.Type widget_type);
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public static void test_init (int argcp, out unowned string argvp);
+	public static void test_init ([CCode (array_length_pos = 0.9)] ref unowned string[] argvp, ...);
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public static unowned GLib.Type[] test_list_all_types (uint n_types);
 	[CCode (cheader_filename = "gtk/gtk.h")]
diff --git a/vapi/gtksourceview-3.0.vapi b/vapi/gtksourceview-3.0.vapi
index 0eb41e1..509c303 100644
--- a/vapi/gtksourceview-3.0.vapi
+++ b/vapi/gtksourceview-3.0.vapi
@@ -3,9 +3,9 @@
 [CCode (cprefix = "Gtk", gir_namespace = "GtkSource", gir_version = "3.0", lower_case_cprefix = "gtk_")]
 namespace Gtk {
 	namespace SourceCompletionCapability {
-		[CCode (cheader_filename = "gtksourceview/gtksource.h")]
+		[CCode (cheader_filename = "gtksourceview/gtksource.h", cname = "GTK_SOURCE_COMPLETION_CAPABILITY_AUTOMATIC")]
 		public const string AUTOMATIC;
-		[CCode (cheader_filename = "gtksourceview/gtksource.h")]
+		[CCode (cheader_filename = "gtksourceview/gtksource.h", cname = "GTK_SOURCE_COMPLETION_CAPABILITY_INTERACTIVE")]
 		public const string INTERACTIVE;
 	}
 	[CCode (cheader_filename = "gtksourceview/gtksource.h", type_id = "gtk_source_buffer_get_type ()")]
@@ -74,6 +74,8 @@ namespace Gtk {
 		[NoWrapper]
 		public virtual bool proposal_activated (Gtk.SourceCompletionProvider provider, Gtk.SourceCompletionProposal proposal);
 		public bool remove_provider (Gtk.SourceCompletionProvider provider) throws GLib.Error;
+		[CCode (cname = "gtk_source_completion_show")]
+		public bool start (GLib.List<Gtk.SourceCompletionProvider>? providers, owned Gtk.SourceCompletionContext context);
 		public void unblock_interactive ();
 		[NoAccessorMethod]
 		public uint accelerators { get; set construct; }
@@ -98,7 +100,6 @@ namespace Gtk {
 		public virtual signal void move_cursor (Gtk.ScrollStep step, int num);
 		public virtual signal void move_page (Gtk.ScrollStep step, int num);
 		public virtual signal void populate_context (Gtk.SourceCompletionContext context);
-		[HasEmitter]
 		public virtual signal void show ();
 	}
 	[CCode (cheader_filename = "gtksourceview/gtksource.h", type_id = "gtk_source_completion_context_get_type ()")]
@@ -175,6 +176,7 @@ namespace Gtk {
 		[CCode (has_construct_function = false)]
 		protected SourceGutter ();
 		public void get_padding (int xpad, int ypad);
+		public unowned Gtk.SourceGutterRenderer get_renderer_at_pos (int x, int y);
 		public unowned Gdk.Window get_window ();
 		public bool insert (Gtk.SourceGutterRenderer renderer, int position);
 		public void queue_draw ();
@@ -195,7 +197,6 @@ namespace Gtk {
 	public abstract class SourceGutterRenderer : GLib.InitiallyUnowned {
 		[CCode (has_construct_function = false)]
 		protected SourceGutterRenderer ();
-		public virtual void activate (Gtk.TextIter iter, Gdk.Rectangle area, Gdk.Event event);
 		public virtual void begin (Cairo.Context cr, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gtk.TextIter start, Gtk.TextIter end);
 		[NoWrapper]
 		public virtual void change_buffer (Gtk.TextBuffer old_buffer);
@@ -211,8 +212,6 @@ namespace Gtk {
 		public unowned Gtk.TextView get_view ();
 		public bool get_visible ();
 		public Gtk.TextWindowType get_window_type ();
-		public virtual bool query_activatable (Gtk.TextIter iter, Gdk.Rectangle area, Gdk.Event event);
-		public virtual bool query_tooltip (Gtk.TextIter iter, Gdk.Rectangle area, int x, int y, Gtk.Tooltip tooltip);
 		public void set_alignment (float xalign, float yalign);
 		public void set_alignment_mode (Gtk.SourceGutterRendererAlignmentMode mode);
 		public void set_background (Gdk.RGBA? color);
@@ -237,8 +236,14 @@ namespace Gtk {
 		[NoAccessorMethod]
 		public int ypad { get; set construct; }
 		[HasEmitter]
+		public virtual signal void activate (Gtk.TextIter iter, Cairo.RectangleInt area, Gdk.Event event);
+		[HasEmitter]
+		public virtual signal bool query_activatable (Gtk.TextIter iter, Cairo.RectangleInt area, Gdk.Event event);
+		[HasEmitter]
 		public virtual signal void query_data (Gtk.TextIter start, Gtk.TextIter end, Gtk.SourceGutterRendererState state);
 		[HasEmitter]
+		public virtual signal bool query_tooltip (Gtk.TextIter iter, Cairo.RectangleInt area, int x, int y, Gtk.Tooltip tooltip);
+		[HasEmitter]
 		public virtual signal void queue_draw ();
 	}
 	[CCode (cheader_filename = "gtksourceview/gtksource.h", type_id = "gtk_source_gutter_renderer_pixbuf_get_type ()")]
@@ -287,6 +292,7 @@ namespace Gtk {
 		public string[] get_mime_types ();
 		public unowned string get_name ();
 		public unowned string get_section ();
+		public unowned string get_style_fallback (string style_id);
 		[CCode (array_length = false, array_null_terminated = true)]
 		public string[] get_style_ids ();
 		public unowned string get_style_name (string style_id);
diff --git a/vapi/libgdata.vapi b/vapi/libgdata.vapi
index c9066de..2df388f 100644
--- a/vapi/libgdata.vapi
+++ b/vapi/libgdata.vapi
@@ -3,81 +3,81 @@
 [CCode (cprefix = "GData", gir_namespace = "GData", gir_version = "0.0", lower_case_cprefix = "gdata_")]
 namespace GData {
 	namespace ContactsGender {
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CONTACTS_GENDER_FEMALE")]
 		public const string FEMALE;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CONTACTS_GENDER_MALE")]
 		public const string MALE;
 	}
 	namespace ContactsGroupType {
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CONTACTS_GROUP_CONTACTS")]
 		public const string CONTACTS;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CONTACTS_GROUP_COWORKERS")]
 		public const string COWORKERS;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CONTACTS_GROUP_FAMILY")]
 		public const string FAMILY;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CONTACTS_GROUP_FRIENDS")]
 		public const string FRIENDS;
 	}
 	namespace ContactsPriority {
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CONTACTS_PRIORITY_HIGH")]
 		public const string HIGH;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CONTACTS_PRIORITY_LOW")]
 		public const string LOW;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CONTACTS_PRIORITY_NORMAL")]
 		public const string NORMAL;
 	}
 	namespace ContactsSensitivity {
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CONTACTS_SENSITIVITY_CONFIDENTIAL")]
 		public const string CONFIDENTIAL;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CONTACTS_SENSITIVITY_NORMAL")]
 		public const string NORMAL;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CONTACTS_SENSITIVITY_PERSONAL")]
 		public const string PERSONAL;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CONTACTS_SENSITIVITY_PRIVATE")]
 		public const string PRIVATE;
 	}
 	namespace DocumentsPresentationFormat {
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_PRESENTATION_PDF")]
 		public const string PDF;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_PRESENTATION_PNG")]
 		public const string PNG;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_PRESENTATION_PPT")]
 		public const string PPT;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_PRESENTATION_SWF")]
 		public const string SWF;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_PRESENTATION_TXT")]
 		public const string TXT;
 	}
 	namespace DocumentsSpreadsheetFormat {
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_SPREADSHEET_CSV")]
 		public const string CSV;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_SPREADSHEET_HTML")]
 		public const string HTML;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_SPREADSHEET_ODS")]
 		public const string ODS;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_SPREADSHEET_PDF")]
 		public const string PDF;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_SPREADSHEET_TSV")]
 		public const string TSV;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_SPREADSHEET_XLS")]
 		public const string XLS;
 	}
 	namespace DocumentsTextFormat {
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_TEXT_DOC")]
 		public const string DOC;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_TEXT_HTML")]
 		public const string HTML;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_TEXT_ODT")]
 		public const string ODT;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_TEXT_PDF")]
 		public const string PDF;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_TEXT_PNG")]
 		public const string PNG;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_TEXT_RTF")]
 		public const string RTF;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_TEXT_TXT")]
 		public const string TXT;
-		[CCode (cheader_filename = "gdata/gdata.h")]
+		[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_TEXT_ZIP")]
 		public const string ZIP;
 	}
 	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_app_categories_get_type ()")]
@@ -118,6 +118,15 @@ namespace GData {
 		public string name { get; set; }
 		public string uri { get; set; }
 	}
+	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_authorization_domain_get_type ()")]
+	public class AuthorizationDomain : GLib.Object {
+		[CCode (has_construct_function = false)]
+		protected AuthorizationDomain ();
+		public unowned string get_scope ();
+		public unowned string get_service_name ();
+		public string scope { get; construct; }
+		public string service_name { get; construct; }
+	}
 	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_batch_operation_get_type ()")]
 	public class BatchOperation : GLib.Object {
 		[CCode (has_construct_function = false)]
@@ -126,10 +135,12 @@ namespace GData {
 		public uint add_insertion (GData.Entry entry, GData.BatchOperationCallback callback);
 		public uint add_query (string id, GLib.Type entry_type, GData.BatchOperationCallback callback);
 		public uint add_update (GData.Entry entry, GData.BatchOperationCallback callback);
+		public unowned GData.AuthorizationDomain get_authorization_domain ();
 		public unowned string get_feed_uri ();
 		public unowned GData.Service get_service ();
 		public bool run (GLib.Cancellable? cancellable) throws GLib.Error;
 		public async bool run_async (GLib.Cancellable? cancellable) throws GLib.Error;
+		public GData.AuthorizationDomain authorization_domain { get; construct; }
 		public string feed_uri { get; construct; }
 		public GData.Service service { get; construct; }
 	}
@@ -220,6 +231,7 @@ namespace GData {
 		[CCode (has_construct_function = false)]
 		public CalendarQuery (string? q);
 		public bool get_future_events ();
+		public uint get_max_attendees ();
 		public unowned string get_order_by ();
 		public int64 get_recurrence_expansion_end ();
 		public int64 get_recurrence_expansion_start ();
@@ -229,9 +241,11 @@ namespace GData {
 		public int64 get_start_min ();
 		public unowned string get_timezone ();
 		public void set_future_events (bool future_events);
+		public void set_max_attendees (uint max_attendees);
 		public void set_order_by (string? order_by);
 		public void set_recurrence_expansion_end (int64 end);
 		public void set_recurrence_expansion_start (int64 start);
+		public void set_show_deleted (bool show_deleted);
 		public void set_single_events (bool single_events);
 		public void set_sort_order (string? sort_order);
 		public void set_start_max (int64 start_max);
@@ -240,9 +254,12 @@ namespace GData {
 		[CCode (has_construct_function = false)]
 		public CalendarQuery.with_limits (string? q, int64? start_min, int64? start_max);
 		public bool future_events { get; set; }
+		public uint max_attendees { get; set; }
 		public string order_by { get; set; }
 		public int64 recurrence_expansion_end { get; set; }
 		public int64 recurrence_expansion_start { get; set; }
+		[NoAccessorMethod]
+		public bool show_deleted { get; set; }
 		public bool single_events { get; set; }
 		public string sort_order { get; set; }
 		public int64 start_max { get; set; }
@@ -252,15 +269,16 @@ namespace GData {
 	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_calendar_service_get_type ()")]
 	public class CalendarService : GData.Service, GData.Batchable {
 		[CCode (has_construct_function = false)]
-		public CalendarService (string client_id);
+		public CalendarService (GData.Authorizer? authorizer);
+		public static unowned GData.AuthorizationDomain get_primary_authorization_domain ();
 		public GData.CalendarEvent insert_event (GData.CalendarEvent event, GLib.Cancellable? cancellable) throws GLib.Error;
 		public async void insert_event_async (GData.CalendarEvent event, GLib.Cancellable? cancellable);
-		public GData.Feed query_all_calendars (GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback) throws GLib.Error;
-		public async void query_all_calendars_async (GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback);
-		public GData.Feed query_events (GData.CalendarCalendar calendar, GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback) throws GLib.Error;
-		public async void query_events_async (GData.CalendarCalendar calendar, GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback);
-		public GData.Feed query_own_calendars (GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback) throws GLib.Error;
-		public async void query_own_calendars_async (GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback);
+		public GData.Feed query_all_calendars (GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback? progress_callback) throws GLib.Error;
+		public async void query_all_calendars_async (GData.Query? query, GLib.Cancellable? cancellable, owned GData.QueryProgressCallback? progress_callback);
+		public GData.Feed query_events (GData.CalendarCalendar calendar, GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback? progress_callback) throws GLib.Error;
+		public async void query_events_async (GData.CalendarCalendar calendar, GData.Query? query, GLib.Cancellable? cancellable, owned GData.QueryProgressCallback? progress_callback);
+		public GData.Feed query_own_calendars (GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback? progress_callback) throws GLib.Error;
+		public async void query_own_calendars_async (GData.Query? query, GLib.Cancellable? cancellable, owned GData.QueryProgressCallback? progress_callback);
 	}
 	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_category_get_type ()")]
 	public class Category : GData.Parsable, GData.Comparable {
@@ -276,6 +294,33 @@ namespace GData {
 		public string scheme { get; set; }
 		public string term { get; set; }
 	}
+	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_client_login_authorizer_get_type ()")]
+	public class ClientLoginAuthorizer : GLib.Object, GData.Authorizer {
+		[CCode (has_construct_function = false)]
+		public ClientLoginAuthorizer (string client_id, GLib.Type service_type);
+		public bool authenticate (string username, string password, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool authenticate_async (string username, string password, GLib.Cancellable? cancellable) throws GLib.Error;
+		[CCode (has_construct_function = false)]
+		public ClientLoginAuthorizer.for_authorization_domains (string client_id, GLib.List<GData.AuthorizationDomain> authorization_domains);
+		public unowned string get_client_id ();
+		public unowned string get_password ();
+		public Soup.URI get_proxy_uri ();
+		public uint get_timeout ();
+		public unowned string get_username ();
+		public void set_proxy_uri (Soup.URI? proxy_uri);
+		public void set_timeout (uint timeout);
+		public string client_id { get; construct; }
+		public string password { get; }
+		public Soup.URI proxy_uri { owned get; set; }
+		public uint timeout { get; set; }
+		public string username { get; }
+		public signal string captcha_challenge (string uri);
+	}
+	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_comment_get_type ()")]
+	public abstract class Comment : GData.Entry {
+		[CCode (has_construct_function = false)]
+		protected Comment ();
+	}
 	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_contacts_contact_get_type ()")]
 	public class ContactsContact : GData.Entry {
 		[CCode (has_construct_function = false)]
@@ -304,6 +349,7 @@ namespace GData {
 		public unowned GLib.HashTable<void*,void*> get_extended_properties ();
 		public unowned string get_extended_property (string name);
 		public unowned GLib.List<GData.GContactExternalID> get_external_ids ();
+		public unowned string get_file_as ();
 		public unowned string get_gender ();
 		public GLib.List<weak string> get_groups ();
 		public unowned GLib.List<string> get_hobbies ();
@@ -322,6 +368,7 @@ namespace GData {
 		public uint8[] get_photo (GData.ContactsService service, out string content_type, GLib.Cancellable? cancellable) throws GLib.Error;
 		[CCode (array_length_pos = 1.1)]
 		public async uint8 get_photo_async (GData.ContactsService service, out size_t length, out string content_type) throws GLib.Error;
+		public unowned string get_photo_etag ();
 		public unowned GLib.List<GData.GDPostalAddress> get_postal_addresses ();
 		public unowned GData.GContactCalendar get_primary_calendar ();
 		public unowned GData.GDEmailAddress get_primary_email_address ();
@@ -358,6 +405,7 @@ namespace GData {
 		public void set_birthday (GLib.Date? birthday, bool birthday_has_year);
 		public void set_directory_server (string? directory_server);
 		public bool set_extended_property (string name, string? value);
+		public void set_file_as (string? file_as);
 		public void set_gender (string? gender);
 		public void set_initials (string? initials);
 		public void set_maiden_name (string? maiden_name);
@@ -381,15 +429,15 @@ namespace GData {
 		public bool deleted { get; }
 		public string directory_server { get; set; }
 		public int64 edited { get; }
+		public string file_as { get; set; }
 		public string gender { get; set; }
-		[NoAccessorMethod]
-		public bool has_photo { get; }
 		public string initials { get; set; }
 		public string maiden_name { get; set; }
 		public string mileage { get; set; }
 		public GData.GDName name { get; set; }
 		public string nickname { get; set; }
 		public string occupation { get; set; }
+		public string photo_etag { get; }
 		public string priority { get; set; }
 		public string sensitivity { get; set; }
 		public string short_name { get; set; }
@@ -432,15 +480,16 @@ namespace GData {
 	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_contacts_service_get_type ()")]
 	public class ContactsService : GData.Service, GData.Batchable {
 		[CCode (has_construct_function = false)]
-		public ContactsService (string client_id);
+		public ContactsService (GData.Authorizer? authorizer);
+		public static unowned GData.AuthorizationDomain get_primary_authorization_domain ();
 		public GData.ContactsContact insert_contact (GData.ContactsContact contact, GLib.Cancellable? cancellable) throws GLib.Error;
 		public async void insert_contact_async (GData.ContactsContact contact, GLib.Cancellable? cancellable);
 		public GData.ContactsGroup insert_group (GData.ContactsGroup group, GLib.Cancellable? cancellable) throws GLib.Error;
 		public async void insert_group_async (GData.ContactsGroup group, GLib.Cancellable? cancellable);
-		public GData.Feed query_contacts (GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback) throws GLib.Error;
-		public async void query_contacts_async (GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback);
-		public GData.Feed query_groups (GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback) throws GLib.Error;
-		public async void query_groups_async (GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback);
+		public GData.Feed query_contacts (GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback? progress_callback) throws GLib.Error;
+		public async void query_contacts_async (GData.Query? query, GLib.Cancellable? cancellable, owned GData.QueryProgressCallback? progress_callback);
+		public GData.Feed query_groups (GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback? progress_callback) throws GLib.Error;
+		public async void query_groups_async (GData.Query? query, GLib.Cancellable? cancellable, owned GData.QueryProgressCallback? progress_callback);
 	}
 	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_documents_document_get_type ()")]
 	public abstract class DocumentsDocument : GData.DocumentsEntry, GData.AccessHandler {
@@ -453,18 +502,22 @@ namespace GData {
 	public abstract class DocumentsEntry : GData.Entry, GData.AccessHandler {
 		[CCode (has_construct_function = false)]
 		protected DocumentsEntry ();
+		[Deprecated (since = "Use gdata_documents_entry_get_resource_id() instead. See #GDataDocumentsEntry:document-id. (Since")]
 		public unowned string get_document_id ();
 		public int64 get_edited ();
 		public unowned GData.Author get_last_modified_by ();
 		public int64 get_last_viewed ();
 		public string get_path ();
+		public unowned string get_resource_id ();
 		public void set_writers_can_invite (bool writers_can_invite);
+		[Deprecated (since = "This a substring of the #GDataDocumentsEntry:resource-id, which is more general and should be used instead. (Since")]
 		public string document_id { get; }
 		public int64 edited { get; }
 		[NoAccessorMethod]
 		public bool is_deleted { get; set; }
 		public GData.Author last_modified_by { get; }
 		public int64 last_viewed { get; }
+		public string resource_id { get; }
 		[NoAccessorMethod]
 		public bool writers_can_invite { get; set; }
 	}
@@ -513,19 +566,19 @@ namespace GData {
 	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_documents_service_get_type ()")]
 	public class DocumentsService : GData.Service, GData.Batchable {
 		[CCode (has_construct_function = false)]
-		public DocumentsService (string client_id);
+		public DocumentsService (GData.Authorizer? authorizer);
 		public GData.DocumentsEntry add_entry_to_folder (GData.DocumentsEntry entry, GData.DocumentsFolder folder, GLib.Cancellable? cancellable) throws GLib.Error;
 		public async GData.DocumentsEntry add_entry_to_folder_async (GData.DocumentsEntry entry, GData.DocumentsFolder folder, GLib.Cancellable? cancellable) throws GLib.Error;
 		public GData.DocumentsDocument finish_upload (GData.UploadStream upload_stream) throws GLib.Error;
+		public static unowned GData.AuthorizationDomain get_primary_authorization_domain ();
+		public static unowned GData.AuthorizationDomain get_spreadsheet_authorization_domain ();
 		public static string get_upload_uri (GData.DocumentsFolder? folder);
-		public GData.DocumentsFeed query_documents (GData.DocumentsQuery? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback) throws GLib.Error;
-		public async void query_documents_async (GData.DocumentsQuery? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback);
+		public GData.DocumentsFeed query_documents (GData.DocumentsQuery? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback? progress_callback) throws GLib.Error;
+		public async void query_documents_async (GData.DocumentsQuery? query, GLib.Cancellable? cancellable, owned GData.QueryProgressCallback? progress_callback);
 		public GData.DocumentsEntry remove_entry_from_folder (GData.DocumentsEntry entry, GData.DocumentsFolder folder, GLib.Cancellable? cancellable) throws GLib.Error;
 		public async GData.DocumentsEntry remove_entry_from_folder_async (GData.DocumentsEntry entry, GData.DocumentsFolder folder, GLib.Cancellable? cancellable) throws GLib.Error;
 		public GData.UploadStream update_document (GData.DocumentsDocument document, string slug, string content_type, GLib.Cancellable? cancellable) throws GLib.Error;
 		public GData.UploadStream upload_document (GData.DocumentsDocument? document, string slug, string content_type, GData.DocumentsFolder? folder, GLib.Cancellable? cancellable) throws GLib.Error;
-		[NoAccessorMethod]
-		public GData.Service spreadsheet_service { owned get; }
 	}
 	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_documents_spreadsheet_get_type ()")]
 	public class DocumentsSpreadsheet : GData.DocumentsDocument, GData.AccessHandler {
@@ -541,12 +594,14 @@ namespace GData {
 	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_download_stream_get_type ()")]
 	public class DownloadStream : GLib.InputStream, GLib.Seekable {
 		[CCode (has_construct_function = false, type = "GInputStream*")]
-		public DownloadStream (GData.Service service, string download_uri, GLib.Cancellable? cancellable);
+		public DownloadStream (GData.Service service, GData.AuthorizationDomain? domain, string download_uri, GLib.Cancellable? cancellable);
+		public unowned GData.AuthorizationDomain get_authorization_domain ();
 		public unowned GLib.Cancellable get_cancellable ();
 		public ssize_t get_content_length ();
 		public unowned string get_content_type ();
 		public unowned string get_download_uri ();
 		public unowned GData.Service get_service ();
+		public GData.AuthorizationDomain authorization_domain { get; construct; }
 		public GLib.Cancellable cancellable { get; construct; }
 		public long content_length { get; }
 		public string content_type { get; }
@@ -573,6 +628,7 @@ namespace GData {
 		public int64 get_updated ();
 		public unowned GData.Link look_up_link (string rel);
 		public GLib.List<weak GData.Link> look_up_links (string rel);
+		public bool remove_link (GData.Link _link);
 		public void set_content (string? content);
 		public void set_content_uri (string? content_uri);
 		public void set_rights (string? rights);
@@ -1053,6 +1109,28 @@ namespace GData {
 		public string uri { get; }
 		public uint width { get; }
 	}
+	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_oauth1_authorizer_get_type ()")]
+	public class OAuth1Authorizer : GLib.Object, GData.Authorizer {
+		[CCode (has_construct_function = false)]
+		public OAuth1Authorizer (string? application_name, GLib.Type service_type);
+		[CCode (has_construct_function = false)]
+		public OAuth1Authorizer.for_authorization_domains (string? application_name, GLib.List<GData.AuthorizationDomain> authorization_domains);
+		public unowned string get_application_name ();
+		public unowned string get_locale ();
+		public Soup.URI get_proxy_uri ();
+		public uint get_timeout ();
+		public string request_authentication_uri (out string token, out string token_secret, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async string request_authentication_uri_async (GLib.Cancellable? cancellable, out string token, out string token_secret) throws GLib.Error;
+		public bool request_authorization (string token, string token_secret, string verifier, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool request_authorization_async (string token, string token_secret, string verifier, GLib.Cancellable? cancellable) throws GLib.Error;
+		public void set_locale (string? locale);
+		public void set_proxy_uri (Soup.URI? proxy_uri);
+		public void set_timeout (uint timeout);
+		public string application_name { get; construct; }
+		public string locale { get; set; }
+		public Soup.URI proxy_uri { owned get; set; }
+		public uint timeout { get; set; }
+	}
 	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_parsable_get_type ()")]
 	public abstract class Parsable : GLib.Object {
 		[CCode (has_construct_function = false)]
@@ -1121,13 +1199,18 @@ namespace GData {
 		public string user { get; }
 		public GData.PicasaWebVisibility visibility { get; set; }
 	}
+	[CCode (cheader_filename = "gdata/gdata.h", lower_case_csuffix = "picasaweb_comment", type_id = "gdata_picasaweb_comment_get_type ()")]
+	public class PicasaWebComment : GData.Comment {
+		[CCode (has_construct_function = false)]
+		public PicasaWebComment (string id);
+	}
 	[CCode (cheader_filename = "gdata/gdata.h", lower_case_csuffix = "picasaweb_feed", type_id = "gdata_picasaweb_feed_get_type ()")]
 	public class PicasaWebFeed : GData.Feed {
 		[CCode (has_construct_function = false)]
 		protected PicasaWebFeed ();
 	}
 	[CCode (cheader_filename = "gdata/gdata.h", lower_case_csuffix = "picasaweb_file", type_id = "gdata_picasaweb_file_get_type ()")]
-	public class PicasaWebFile : GData.Entry {
+	public class PicasaWebFile : GData.Entry, GData.Commentable {
 		[CCode (has_construct_function = false)]
 		public PicasaWebFile (string? id);
 		public unowned string get_album_id ();
@@ -1226,15 +1309,17 @@ namespace GData {
 	[CCode (cheader_filename = "gdata/gdata.h", lower_case_csuffix = "picasaweb_service", type_id = "gdata_picasaweb_service_get_type ()")]
 	public class PicasaWebService : GData.Service {
 		[CCode (has_construct_function = false)]
-		public PicasaWebService (string client_id);
+		public PicasaWebService (GData.Authorizer? authorizer);
 		public GData.PicasaWebFile finish_file_upload (GData.UploadStream upload_stream) throws GLib.Error;
+		public static unowned GData.AuthorizationDomain get_primary_authorization_domain ();
 		public GData.PicasaWebUser get_user (string? username, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async GData.PicasaWebUser get_user_async (string? username, GLib.Cancellable? cancellable) throws GLib.Error;
 		public GData.PicasaWebAlbum insert_album (GData.PicasaWebAlbum album, GLib.Cancellable? cancellable) throws GLib.Error;
 		public async void insert_album_async (GData.PicasaWebAlbum album, GLib.Cancellable? cancellable);
-		public GData.Feed query_all_albums (GData.Query? query, string? username, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback) throws GLib.Error;
-		public async void query_all_albums_async (GData.Query? query, string? username, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback);
-		public GData.Feed query_files (GData.PicasaWebAlbum? album, GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback) throws GLib.Error;
-		public async void query_files_async (GData.PicasaWebAlbum? album, GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback);
+		public GData.Feed query_all_albums (GData.Query? query, string? username, GLib.Cancellable? cancellable, GData.QueryProgressCallback? progress_callback) throws GLib.Error;
+		public async void query_all_albums_async (GData.Query? query, string? username, GLib.Cancellable? cancellable, owned GData.QueryProgressCallback? progress_callback);
+		public GData.Feed query_files (GData.PicasaWebAlbum? album, GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback? progress_callback) throws GLib.Error;
+		public async void query_files_async (GData.PicasaWebAlbum? album, GData.Query? query, GLib.Cancellable? cancellable, owned GData.QueryProgressCallback? progress_callback);
 		public GData.UploadStream upload_file (GData.PicasaWebAlbum? album, GData.PicasaWebFile file_entry, string slug, string content_type, GLib.Cancellable? cancellable) throws GLib.Error;
 	}
 	[CCode (cheader_filename = "gdata/gdata.h", lower_case_csuffix = "picasaweb_user", type_id = "gdata_picasaweb_user_get_type ()")]
@@ -1303,47 +1388,39 @@ namespace GData {
 		[CCode (has_construct_function = false)]
 		protected Service ();
 		[NoWrapper]
-		public virtual void append_query_headers (Soup.Message message);
-		public bool authenticate (string username, string password, GLib.Cancellable? cancellable) throws GLib.Error;
-		public async bool authenticate_async (string username, string password, GLib.Cancellable? cancellable) throws GLib.Error;
-		public bool delete_entry (GData.Entry entry, GLib.Cancellable? cancellable) throws GLib.Error;
-		public async bool delete_entry_async (GData.Entry entry, GLib.Cancellable? cancellable) throws GLib.Error;
-		public unowned string get_client_id ();
+		public virtual void append_query_headers (GData.AuthorizationDomain domain, Soup.Message message);
+		public bool delete_entry (GData.AuthorizationDomain? domain, GData.Entry entry, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool delete_entry_async (GData.AuthorizationDomain? domain, GData.Entry entry, GLib.Cancellable? cancellable) throws GLib.Error;
+		public static GLib.List<weak GData.AuthorizationDomain> get_authorization_domains (GLib.Type service_type);
+		public unowned GData.Authorizer get_authorizer ();
 		public unowned string get_locale ();
-		public unowned string get_password ();
 		public unowned Soup.URI get_proxy_uri ();
 		public uint get_timeout ();
-		public unowned string get_username ();
-		public GData.Entry insert_entry (string upload_uri, GData.Entry entry, GLib.Cancellable? cancellable) throws GLib.Error;
-		public async GData.Entry insert_entry_async (string upload_uri, GData.Entry entry, GLib.Cancellable? cancellable) throws GLib.Error;
-		public bool is_authenticated ();
-		[NoWrapper]
-		public virtual bool parse_authentication_response (uint status, string response_body, int length) throws GLib.Error;
+		public GData.Entry insert_entry (GData.AuthorizationDomain? domain, string upload_uri, GData.Entry entry, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async GData.Entry insert_entry_async (GData.AuthorizationDomain? domain, string upload_uri, GData.Entry entry, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool is_authorized ();
 		[NoWrapper]
 		public virtual void parse_error_response (GData.OperationType operation_type, uint status, string reason_phrase, string response_body, int length) throws GLib.Error;
-		public GData.Feed query (string feed_uri, GData.Query? query, GLib.Type entry_type, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback) throws GLib.Error;
-		public async GData.Feed query_async (string feed_uri, GData.Query? query, GLib.Type entry_type, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback) throws GLib.Error;
-		public GData.Entry query_single_entry (string entry_id, GData.Query? query, GLib.Type entry_type, GLib.Cancellable? cancellable) throws GLib.Error;
-		public async GData.Entry query_single_entry_async (string entry_id, GData.Query? query, GLib.Type entry_type, GLib.Cancellable? cancellable) throws GLib.Error;
+		public GData.Feed query (GData.AuthorizationDomain? domain, string feed_uri, GData.Query? query, GLib.Type entry_type, GLib.Cancellable? cancellable, GData.QueryProgressCallback? progress_callback) throws GLib.Error;
+		public async GData.Feed query_async (GData.AuthorizationDomain? domain, string feed_uri, GData.Query? query, GLib.Type entry_type, GLib.Cancellable? cancellable, owned GData.QueryProgressCallback? progress_callback) throws GLib.Error;
+		public GData.Entry query_single_entry (GData.AuthorizationDomain? domain, string entry_id, GData.Query? query, GLib.Type entry_type, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async GData.Entry query_single_entry_async (GData.AuthorizationDomain? domain, string entry_id, GData.Query? query, GLib.Type entry_type, GLib.Cancellable? cancellable) throws GLib.Error;
+		public void set_authorizer (GData.Authorizer authorizer);
 		public void set_locale (string? locale);
 		public void set_proxy_uri (Soup.URI? proxy_uri);
 		public void set_timeout (uint timeout);
-		public GData.Entry update_entry (GData.Entry entry, GLib.Cancellable? cancellable) throws GLib.Error;
-		public async GData.Entry update_entry_async (GData.Entry entry, GLib.Cancellable? cancellable) throws GLib.Error;
-		[NoAccessorMethod]
-		public bool authenticated { get; }
-		public string client_id { get; construct; }
+		public GData.Entry update_entry (GData.AuthorizationDomain? domain, GData.Entry entry, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async GData.Entry update_entry_async (GData.AuthorizationDomain? domain, GData.Entry entry, GLib.Cancellable? cancellable) throws GLib.Error;
+		public GData.Authorizer authorizer { get; set; }
 		public string locale { get; set; }
-		public string password { get; }
 		public Soup.URI proxy_uri { get; set; }
 		public uint timeout { get; set; }
-		public string username { get; }
-		public signal string captcha_challenge (string object);
 	}
 	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_upload_stream_get_type ()")]
 	public class UploadStream : GLib.OutputStream {
 		[CCode (has_construct_function = false, type = "GOutputStream*")]
-		public UploadStream (GData.Service service, string method, string upload_uri, GData.Entry? entry, string slug, string content_type, GLib.Cancellable? cancellable);
+		public UploadStream (GData.Service service, GData.AuthorizationDomain? domain, string method, string upload_uri, GData.Entry? entry, string slug, string content_type, GLib.Cancellable? cancellable);
+		public unowned GData.AuthorizationDomain get_authorization_domain ();
 		public unowned GLib.Cancellable get_cancellable ();
 		public unowned string get_content_type ();
 		public unowned GData.Entry get_entry ();
@@ -1352,6 +1429,7 @@ namespace GData {
 		public unowned GData.Service get_service ();
 		public unowned string get_slug ();
 		public unowned string get_upload_uri ();
+		public GData.AuthorizationDomain authorization_domain { get; construct; }
 		public GLib.Cancellable cancellable { get; construct; }
 		public string content_type { get; construct; }
 		public GData.Entry entry { get; construct; }
@@ -1370,6 +1448,14 @@ namespace GData {
 		[NoAccessorMethod]
 		public bool is_deprecated { get; }
 	}
+	[CCode (cheader_filename = "gdata/gdata.h", lower_case_csuffix = "youtube_comment", type_id = "gdata_youtube_comment_get_type ()")]
+	public class YouTubeComment : GData.Comment {
+		[CCode (has_construct_function = false)]
+		public YouTubeComment (string id);
+		public unowned string get_parent_comment_uri ();
+		public void set_parent_comment_uri (string parent_comment_uri);
+		public string parent_comment_uri { get; set; }
+	}
 	[CCode (cheader_filename = "gdata/gdata.h", lower_case_csuffix = "youtube_content", type_id = "gdata_youtube_content_get_type ()")]
 	public class YouTubeContent : GData.MediaContent {
 		[CCode (has_construct_function = false)]
@@ -1391,6 +1477,7 @@ namespace GData {
 		public GData.YouTubeAge get_age ();
 		public GData.YouTubeFormat get_format ();
 		public unowned string get_language ();
+		public unowned string get_license ();
 		public void get_location (out double latitude, out double longitude, out double radius, out bool has_location);
 		public unowned string get_order_by ();
 		public unowned string get_restriction ();
@@ -1400,6 +1487,7 @@ namespace GData {
 		public void set_age (GData.YouTubeAge age);
 		public void set_format (GData.YouTubeFormat format);
 		public void set_language (string? language);
+		public void set_license (string? license);
 		public void set_location (double latitude, double longitude, double radius, bool has_location);
 		public void set_order_by (string? order_by);
 		public void set_restriction (string? restriction);
@@ -1413,6 +1501,7 @@ namespace GData {
 		public string language { get; set; }
 		[NoAccessorMethod]
 		public double latitude { get; set; }
+		public string license { get; set; }
 		[NoAccessorMethod]
 		public double location_radius { get; set; }
 		[NoAccessorMethod]
@@ -1426,18 +1515,19 @@ namespace GData {
 	[CCode (cheader_filename = "gdata/gdata.h", lower_case_csuffix = "youtube_service", type_id = "gdata_youtube_service_get_type ()")]
 	public class YouTubeService : GData.Service, GData.Batchable {
 		[CCode (has_construct_function = false)]
-		public YouTubeService (string developer_key, string client_id);
+		public YouTubeService (string developer_key, GData.Authorizer? authorizer);
 		public static GLib.Quark error_quark ();
 		public GData.YouTubeVideo finish_video_upload (GData.UploadStream upload_stream) throws GLib.Error;
 		public GData.APPCategories get_categories (GLib.Cancellable? cancellable) throws GLib.Error;
 		public async GData.APPCategories get_categories_async (GLib.Cancellable? cancellable) throws GLib.Error;
 		public unowned string get_developer_key ();
-		public GData.Feed query_related (GData.YouTubeVideo video, GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback) throws GLib.Error;
-		public async void query_related_async (GData.YouTubeVideo video, GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback);
-		public GData.Feed query_standard_feed (GData.YouTubeStandardFeedType feed_type, GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback) throws GLib.Error;
-		public async void query_standard_feed_async (GData.YouTubeStandardFeedType feed_type, GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback);
-		public GData.Feed query_videos (GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback) throws GLib.Error;
-		public async void query_videos_async (GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback);
+		public static unowned GData.AuthorizationDomain get_primary_authorization_domain ();
+		public GData.Feed query_related (GData.YouTubeVideo video, GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback? progress_callback) throws GLib.Error;
+		public async void query_related_async (GData.YouTubeVideo video, GData.Query? query, GLib.Cancellable? cancellable, owned GData.QueryProgressCallback? progress_callback);
+		public GData.Feed query_standard_feed (GData.YouTubeStandardFeedType feed_type, GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback? progress_callback) throws GLib.Error;
+		public async void query_standard_feed_async (GData.YouTubeStandardFeedType feed_type, GData.Query? query, GLib.Cancellable? cancellable, owned GData.QueryProgressCallback? progress_callback);
+		public GData.Feed query_videos (GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback? progress_callback) throws GLib.Error;
+		public async void query_videos_async (GData.Query? query, GLib.Cancellable? cancellable, owned GData.QueryProgressCallback? progress_callback);
 		public GData.UploadStream upload_video (GData.YouTubeVideo video, string slug, string content_type, GLib.Cancellable? cancellable) throws GLib.Error;
 		public string developer_key { get; construct; }
 	}
@@ -1455,7 +1545,7 @@ namespace GData {
 		public string reason_code { get; }
 	}
 	[CCode (cheader_filename = "gdata/gdata.h", lower_case_csuffix = "youtube_video", type_id = "gdata_youtube_video_get_type ()")]
-	public class YouTubeVideo : GData.Entry {
+	public class YouTubeVideo : GData.Entry, GData.Commentable {
 		[CCode (has_construct_function = false)]
 		public YouTubeVideo (string? id);
 		public GData.YouTubePermission get_access_control (string action);
@@ -1469,6 +1559,7 @@ namespace GData {
 		[CCode (array_length = false, array_null_terminated = true)]
 		public unowned string[] get_keywords ();
 		public unowned string get_location ();
+		public unowned string get_media_rating (string rating_type);
 		public unowned string get_player_uri ();
 		public void get_rating (out uint min, out uint max, out uint count, out double average);
 		public int64 get_recorded ();
@@ -1524,12 +1615,34 @@ namespace GData {
 	}
 	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_access_handler_get_type ()")]
 	public interface AccessHandler : GData.Entry {
-		public GData.Feed get_rules (GData.Service service, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback) throws GLib.Error;
-		public async void get_rules_async (GData.Service service, GLib.Cancellable? cancellable, GData.QueryProgressCallback progress_callback);
+		public GData.Feed get_rules (GData.Service service, GLib.Cancellable? cancellable, GData.QueryProgressCallback? progress_callback) throws GLib.Error;
+		public async void get_rules_async (GData.Service service, GLib.Cancellable? cancellable, owned GData.QueryProgressCallback? progress_callback);
+	}
+	[CCode (cheader_filename = "gdata/gdata.h", type_cname = "GDataAuthorizerInterface", type_id = "gdata_authorizer_get_type ()")]
+	public interface Authorizer : GLib.Object {
+		public abstract bool is_authorized_for_domain (GData.AuthorizationDomain domain);
+		public abstract void process_request (GData.AuthorizationDomain? domain, Soup.Message message);
+		public abstract bool refresh_authorization (GLib.Cancellable? cancellable) throws GLib.Error;
+		public abstract async bool refresh_authorization_async (GLib.Cancellable? cancellable) throws GLib.Error;
 	}
 	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_batchable_get_type ()")]
 	public interface Batchable : GData.Service {
-		public GData.BatchOperation create_operation (string feed_uri);
+		public GData.BatchOperation create_operation (GData.AuthorizationDomain? domain, string feed_uri);
+	}
+	[CCode (cheader_filename = "gdata/gdata.h", type_cname = "GDataCommentableInterface", type_id = "gdata_commentable_get_type ()")]
+	public interface Commentable : GData.Entry {
+		public bool delete_comment (GData.Service service, GData.Comment comment_, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool delete_comment_async (GData.Service service, GData.Comment comment_, GLib.Cancellable? cancellable) throws GLib.Error;
+		[NoWrapper]
+		public abstract string get_insert_comment_uri (GData.Comment comment);
+		[NoWrapper]
+		public abstract string get_query_comments_uri ();
+		public GData.Comment insert_comment (GData.Service service, GData.Comment comment_, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async GData.Comment insert_comment_async (GData.Service service, GData.Comment comment_, GLib.Cancellable? cancellable) throws GLib.Error;
+		[NoWrapper]
+		public abstract bool is_comment_deletable (GData.Comment comment);
+		public GData.Feed query_comments (GData.Service service, GData.Query? query, GLib.Cancellable? cancellable, GData.QueryProgressCallback? progress_callback) throws GLib.Error;
+		public async GData.Feed query_comments_async (GData.Service service, GData.Query? query, GLib.Cancellable? cancellable, owned GData.QueryProgressCallback? progress_callback) throws GLib.Error;
 	}
 	[CCode (cheader_filename = "gdata/gdata.h", type_id = "gdata_comparable_get_type ()")]
 	public interface Comparable : GLib.Object {
@@ -1545,8 +1658,15 @@ namespace GData {
 		public static bool from_hexadecimal (string hexadecimal, out GData.Color color);
 		public string to_hexadecimal ();
 	}
-	[CCode (cheader_filename = "gdata/gdata.h", cprefix = "GDATA_AUTHENTICATION_ERROR_")]
-	public enum AuthenticationError {
+	[CCode (cheader_filename = "gdata/gdata.h", cprefix = "GDATA_BATCH_OPERATION_")]
+	public enum BatchOperationType {
+		QUERY,
+		INSERTION,
+		UPDATE,
+		DELETION
+	}
+	[CCode (cheader_filename = "gdata/gdata.h", cprefix = "GDATA_CLIENT_LOGIN_AUTHORIZER_ERROR_")]
+	public enum ClientLoginAuthorizerError {
 		BAD_AUTHENTICATION,
 		NOT_VERIFIED,
 		TERMS_NOT_AGREED,
@@ -1554,16 +1674,10 @@ namespace GData {
 		ACCOUNT_DELETED,
 		ACCOUNT_DISABLED,
 		SERVICE_DISABLED,
-		ACCOUNT_MIGRATED;
+		ACCOUNT_MIGRATED,
+		INVALID_SECOND_FACTOR;
 		public static GLib.Quark quark ();
 	}
-	[CCode (cheader_filename = "gdata/gdata.h", cprefix = "GDATA_BATCH_OPERATION_")]
-	public enum BatchOperationType {
-		QUERY,
-		INSERTION,
-		UPDATE,
-		DELETION
-	}
 	[CCode (cheader_filename = "gdata/gdata.h", cprefix = "GDATA_DOCUMENTS_SERVICE_ERROR_INVALID_CONTENT_")]
 	public enum DocumentsServiceError {
 		TYPE;
@@ -1680,270 +1794,288 @@ namespace GData {
 	public delegate void BatchOperationCallback (uint operation_id, GData.BatchOperationType operation_type, GData.Entry entry, GLib.Error error);
 	[CCode (cheader_filename = "gdata/gdata.h", instance_pos = 3.9)]
 	public delegate void QueryProgressCallback (GData.Entry entry, uint entry_key, uint entry_count);
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_ACCESS_ROLE_NONE")]
 	public const string ACCESS_ROLE_NONE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_ACCESS_SCOPE_DEFAULT")]
 	public const string ACCESS_SCOPE_DEFAULT;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_ACCESS_SCOPE_DOMAIN")]
 	public const string ACCESS_SCOPE_DOMAIN;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_ACCESS_SCOPE_USER")]
 	public const string ACCESS_SCOPE_USER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CALENDAR_ACCESS_ROLE_EDITOR")]
 	public const string CALENDAR_ACCESS_ROLE_EDITOR;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CALENDAR_ACCESS_ROLE_FREE_BUSY")]
 	public const string CALENDAR_ACCESS_ROLE_FREE_BUSY;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CALENDAR_ACCESS_ROLE_OWNER")]
 	public const string CALENDAR_ACCESS_ROLE_OWNER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CALENDAR_ACCESS_ROLE_READ")]
 	public const string CALENDAR_ACCESS_ROLE_READ;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CALENDAR_ACCESS_ROLE_ROOT")]
 	public const string CALENDAR_ACCESS_ROLE_ROOT;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_CATEGORY_SCHEMA_LABELS")]
+	public const string CATEGORY_SCHEMA_LABELS;
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_ACCESS_ROLE_OWNER")]
 	public const string DOCUMENTS_ACCESS_ROLE_OWNER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_ACCESS_ROLE_READER")]
 	public const string DOCUMENTS_ACCESS_ROLE_READER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_DOCUMENTS_ACCESS_ROLE_WRITER")]
 	public const string DOCUMENTS_ACCESS_ROLE_WRITER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_CALENDAR_FREE_BUSY")]
 	public const string GCONTACT_CALENDAR_FREE_BUSY;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_CALENDAR_HOME")]
 	public const string GCONTACT_CALENDAR_HOME;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_CALENDAR_WORK")]
 	public const string GCONTACT_CALENDAR_WORK;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_EVENT_ANNIVERSARY")]
 	public const string GCONTACT_EVENT_ANNIVERSARY;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_EVENT_OTHER")]
 	public const string GCONTACT_EVENT_OTHER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_EXTERNAL_ID_ACCOUNT")]
 	public const string GCONTACT_EXTERNAL_ID_ACCOUNT;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_EXTERNAL_ID_CUSTOMER")]
 	public const string GCONTACT_EXTERNAL_ID_CUSTOMER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_EXTERNAL_ID_NETWORK")]
 	public const string GCONTACT_EXTERNAL_ID_NETWORK;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_EXTERNAL_ID_ORGANIZATION")]
 	public const string GCONTACT_EXTERNAL_ID_ORGANIZATION;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_JOT_HOME")]
 	public const string GCONTACT_JOT_HOME;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_JOT_KEYWORDS")]
 	public const string GCONTACT_JOT_KEYWORDS;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_JOT_OTHER")]
 	public const string GCONTACT_JOT_OTHER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_JOT_USER")]
 	public const string GCONTACT_JOT_USER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_JOT_WORK")]
 	public const string GCONTACT_JOT_WORK;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_RELATION_ASSISTANT")]
 	public const string GCONTACT_RELATION_ASSISTANT;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_RELATION_BROTHER")]
 	public const string GCONTACT_RELATION_BROTHER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_RELATION_CHILD")]
 	public const string GCONTACT_RELATION_CHILD;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_RELATION_DOMESTIC_PARTNER")]
 	public const string GCONTACT_RELATION_DOMESTIC_PARTNER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_RELATION_FATHER")]
 	public const string GCONTACT_RELATION_FATHER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_RELATION_FRIEND")]
 	public const string GCONTACT_RELATION_FRIEND;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_RELATION_MANAGER")]
 	public const string GCONTACT_RELATION_MANAGER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_RELATION_MOTHER")]
 	public const string GCONTACT_RELATION_MOTHER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_RELATION_PARENT")]
 	public const string GCONTACT_RELATION_PARENT;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_RELATION_PARTNER")]
 	public const string GCONTACT_RELATION_PARTNER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_RELATION_REFERRER")]
 	public const string GCONTACT_RELATION_REFERRER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_RELATION_RELATIVE")]
 	public const string GCONTACT_RELATION_RELATIVE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_RELATION_SISTER")]
 	public const string GCONTACT_RELATION_SISTER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_RELATION_SPOUSE")]
 	public const string GCONTACT_RELATION_SPOUSE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_WEBSITE_BLOG")]
 	public const string GCONTACT_WEBSITE_BLOG;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_WEBSITE_FTP")]
 	public const string GCONTACT_WEBSITE_FTP;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_WEBSITE_HOME")]
 	public const string GCONTACT_WEBSITE_HOME;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_WEBSITE_HOME_PAGE")]
 	public const string GCONTACT_WEBSITE_HOME_PAGE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_WEBSITE_OTHER")]
 	public const string GCONTACT_WEBSITE_OTHER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_WEBSITE_PROFILE")]
 	public const string GCONTACT_WEBSITE_PROFILE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GCONTACT_WEBSITE_WORK")]
 	public const string GCONTACT_WEBSITE_WORK;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_ADDRESS_USAGE_GENERAL")]
 	public const string GD_ADDRESS_USAGE_GENERAL;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_ADDRESS_USAGE_LOCAL")]
 	public const string GD_ADDRESS_USAGE_LOCAL;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_EMAIL_ADDRESS_HOME")]
 	public const string GD_EMAIL_ADDRESS_HOME;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_EMAIL_ADDRESS_OTHER")]
 	public const string GD_EMAIL_ADDRESS_OTHER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_EMAIL_ADDRESS_WORK")]
 	public const string GD_EMAIL_ADDRESS_WORK;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_EVENT_STATUS_CANCELED")]
 	public const string GD_EVENT_STATUS_CANCELED;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_EVENT_STATUS_CONFIRMED")]
 	public const string GD_EVENT_STATUS_CONFIRMED;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_EVENT_STATUS_TENTATIVE")]
 	public const string GD_EVENT_STATUS_TENTATIVE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_EVENT_TRANSPARENCY_OPAQUE")]
 	public const string GD_EVENT_TRANSPARENCY_OPAQUE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_EVENT_TRANSPARENCY_TRANSPARENT")]
 	public const string GD_EVENT_TRANSPARENCY_TRANSPARENT;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_EVENT_VISIBILITY_CONFIDENTIAL")]
 	public const string GD_EVENT_VISIBILITY_CONFIDENTIAL;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_EVENT_VISIBILITY_DEFAULT")]
 	public const string GD_EVENT_VISIBILITY_DEFAULT;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_EVENT_VISIBILITY_PRIVATE")]
 	public const string GD_EVENT_VISIBILITY_PRIVATE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_EVENT_VISIBILITY_PUBLIC")]
 	public const string GD_EVENT_VISIBILITY_PUBLIC;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_IM_ADDRESS_HOME")]
 	public const string GD_IM_ADDRESS_HOME;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_IM_ADDRESS_NETMEETING")]
 	public const string GD_IM_ADDRESS_NETMEETING;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_IM_ADDRESS_OTHER")]
 	public const string GD_IM_ADDRESS_OTHER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_IM_ADDRESS_WORK")]
 	public const string GD_IM_ADDRESS_WORK;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_IM_PROTOCOL_AIM")]
 	public const string GD_IM_PROTOCOL_AIM;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_IM_PROTOCOL_GOOGLE_TALK")]
 	public const string GD_IM_PROTOCOL_GOOGLE_TALK;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_IM_PROTOCOL_ICQ")]
 	public const string GD_IM_PROTOCOL_ICQ;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_IM_PROTOCOL_JABBER")]
 	public const string GD_IM_PROTOCOL_JABBER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_IM_PROTOCOL_LIVE_MESSENGER")]
 	public const string GD_IM_PROTOCOL_LIVE_MESSENGER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_IM_PROTOCOL_QQ")]
 	public const string GD_IM_PROTOCOL_QQ;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_IM_PROTOCOL_SKYPE")]
 	public const string GD_IM_PROTOCOL_SKYPE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_IM_PROTOCOL_YAHOO_MESSENGER")]
 	public const string GD_IM_PROTOCOL_YAHOO_MESSENGER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_MAIL_CLASS_BOTH")]
 	public const string GD_MAIL_CLASS_BOTH;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_MAIL_CLASS_LETTERS")]
 	public const string GD_MAIL_CLASS_LETTERS;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_MAIL_CLASS_NEITHER")]
 	public const string GD_MAIL_CLASS_NEITHER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_MAIL_CLASS_PARCELS")]
 	public const string GD_MAIL_CLASS_PARCELS;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_ORGANIZATION_OTHER")]
 	public const string GD_ORGANIZATION_OTHER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_ORGANIZATION_WORK")]
 	public const string GD_ORGANIZATION_WORK;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_ASSISTANT")]
 	public const string GD_PHONE_NUMBER_ASSISTANT;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_CALLBACK")]
 	public const string GD_PHONE_NUMBER_CALLBACK;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_CAR")]
 	public const string GD_PHONE_NUMBER_CAR;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_COMPANY_MAIN")]
 	public const string GD_PHONE_NUMBER_COMPANY_MAIN;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_FAX")]
 	public const string GD_PHONE_NUMBER_FAX;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_HOME")]
 	public const string GD_PHONE_NUMBER_HOME;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_HOME_FAX")]
 	public const string GD_PHONE_NUMBER_HOME_FAX;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_ISDN")]
 	public const string GD_PHONE_NUMBER_ISDN;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_MAIN")]
 	public const string GD_PHONE_NUMBER_MAIN;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_MOBILE")]
 	public const string GD_PHONE_NUMBER_MOBILE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_OTHER")]
 	public const string GD_PHONE_NUMBER_OTHER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_OTHER_FAX")]
 	public const string GD_PHONE_NUMBER_OTHER_FAX;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_PAGER")]
 	public const string GD_PHONE_NUMBER_PAGER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_RADIO")]
 	public const string GD_PHONE_NUMBER_RADIO;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_TELEX")]
 	public const string GD_PHONE_NUMBER_TELEX;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_TTY_TDD")]
 	public const string GD_PHONE_NUMBER_TTY_TDD;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_WORK")]
 	public const string GD_PHONE_NUMBER_WORK;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_WORK_FAX")]
 	public const string GD_PHONE_NUMBER_WORK_FAX;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_WORK_MOBILE")]
 	public const string GD_PHONE_NUMBER_WORK_MOBILE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_PHONE_NUMBER_WORK_PAGER")]
 	public const string GD_PHONE_NUMBER_WORK_PAGER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_POSTAL_ADDRESS_HOME")]
 	public const string GD_POSTAL_ADDRESS_HOME;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_POSTAL_ADDRESS_OTHER")]
 	public const string GD_POSTAL_ADDRESS_OTHER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_POSTAL_ADDRESS_WORK")]
 	public const string GD_POSTAL_ADDRESS_WORK;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_REMINDER_ALERT")]
 	public const string GD_REMINDER_ALERT;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_REMINDER_EMAIL")]
 	public const string GD_REMINDER_EMAIL;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_REMINDER_SMS")]
 	public const string GD_REMINDER_SMS;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_WHERE_EVENT")]
 	public const string GD_WHERE_EVENT;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_WHERE_EVENT_ALTERNATE")]
 	public const string GD_WHERE_EVENT_ALTERNATE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_WHERE_EVENT_PARKING")]
 	public const string GD_WHERE_EVENT_PARKING;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_WHO_EVENT_ATTENDEE")]
 	public const string GD_WHO_EVENT_ATTENDEE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_WHO_EVENT_ORGANIZER")]
 	public const string GD_WHO_EVENT_ORGANIZER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_WHO_EVENT_PERFORMER")]
 	public const string GD_WHO_EVENT_PERFORMER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_GD_WHO_EVENT_SPEAKER")]
 	public const string GD_WHO_EVENT_SPEAKER;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_LINK_ACCESS_CONTROL_LIST")]
 	public const string LINK_ACCESS_CONTROL_LIST;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_LINK_ALTERNATE")]
 	public const string LINK_ALTERNATE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_LINK_BATCH")]
 	public const string LINK_BATCH;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_LINK_EDIT")]
 	public const string LINK_EDIT;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_LINK_EDIT_MEDIA")]
 	public const string LINK_EDIT_MEDIA;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_LINK_ENCLOSURE")]
 	public const string LINK_ENCLOSURE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_LINK_RELATED")]
 	public const string LINK_RELATED;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_LINK_SELF")]
 	public const string LINK_SELF;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_LINK_VIA")]
 	public const string LINK_VIA;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_MAJOR_VERSION")]
+	public const int MAJOR_VERSION;
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_MICRO_VERSION")]
+	public const int MICRO_VERSION;
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_MINOR_VERSION")]
+	public const int MINOR_VERSION;
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_PICASAWEB_VIDEO_STATUS_FAILED")]
 	public const string PICASAWEB_VIDEO_STATUS_FAILED;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_PICASAWEB_VIDEO_STATUS_FINAL")]
 	public const string PICASAWEB_VIDEO_STATUS_FINAL;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_PICASAWEB_VIDEO_STATUS_PENDING")]
 	public const string PICASAWEB_VIDEO_STATUS_PENDING;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_PICASAWEB_VIDEO_STATUS_READY")]
 	public const string PICASAWEB_VIDEO_STATUS_READY;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_YOUTUBE_ACTION_COMMENT")]
 	public const string YOUTUBE_ACTION_COMMENT;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_YOUTUBE_ACTION_COMMENT_VOTE")]
 	public const string YOUTUBE_ACTION_COMMENT_VOTE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_YOUTUBE_ACTION_EMBED")]
 	public const string YOUTUBE_ACTION_EMBED;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_YOUTUBE_ACTION_RATE")]
 	public const string YOUTUBE_ACTION_RATE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_YOUTUBE_ACTION_SYNDICATE")]
 	public const string YOUTUBE_ACTION_SYNDICATE;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_YOUTUBE_ACTION_VIDEO_RESPOND")]
 	public const string YOUTUBE_ACTION_VIDEO_RESPOND;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_YOUTUBE_ASPECT_RATIO_WIDESCREEN")]
 	public const string YOUTUBE_ASPECT_RATIO_WIDESCREEN;
-	[CCode (cheader_filename = "gdata/gdata.h")]
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_YOUTUBE_CREDIT_ENTITY_PARTNER")]
 	public const string YOUTUBE_CREDIT_ENTITY_PARTNER;
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_YOUTUBE_LICENSE_CC")]
+	public const string YOUTUBE_LICENSE_CC;
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_YOUTUBE_LICENSE_STANDARD")]
+	public const string YOUTUBE_LICENSE_STANDARD;
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_YOUTUBE_RATING_TYPE_MPAA")]
+	public const string YOUTUBE_RATING_TYPE_MPAA;
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_YOUTUBE_RATING_TYPE_SIMPLE")]
+	public const string YOUTUBE_RATING_TYPE_SIMPLE;
+	[CCode (cheader_filename = "gdata/gdata.h", cname = "GDATA_YOUTUBE_RATING_TYPE_V_CHIP")]
+	public const string YOUTUBE_RATING_TYPE_V_CHIP;
 }
diff --git a/vapi/libnl-3.0.deps b/vapi/libnl-3.0.deps
new file mode 100644
index 0000000..a08e1f3
--- /dev/null
+++ b/vapi/libnl-3.0.deps
@@ -0,0 +1 @@
+linux
diff --git a/vapi/libnl-3.0.vapi b/vapi/libnl-3.0.vapi
new file mode 100644
index 0000000..a20f459
--- /dev/null
+++ b/vapi/libnl-3.0.vapi
@@ -0,0 +1,443 @@
+/*
+ * libnl-3.0.vapi
+ *
+ * Copyright (C) 2009-2010 Michael 'Mickey' Lauer <mlauer vanille-media de>
+ * Copyright (C) 2011 Klaus Kurzmann <mok fluxnetz de>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ *
+ */
+
+[CCode (lower_case_cprefix = "nl_", cheader_filename = "netlink/netlink.h")]
+namespace Netlink {
+
+    [CCode (cname = "nl_geterror", cheader_filename = "netlink/netlink.h")]
+    public static unowned string strerror( int number );
+
+    [CCode (instance_pos = -1)]
+    public delegate void CallbackFunc (Object obj);
+
+    [CCode (cname = "nl_recmsg_msg_cb_t", cheader_filename = "netlink/netlink.h", instance_pos = -1)]
+    public delegate int MessageCallbackFunc (Message msg);
+
+    [Compact]
+    [CCode (cprefix = "rtnl_addr_", cname = "struct nl_addr", free_function = "", cheader_filename = "netlink/netlink.h")]
+    public class Address : Object {
+        [CCode (cname = "nl_addr_alloc")]
+        public Address();
+
+        public void     put();
+        public int      build_add_request (int a, out Message m);
+        public int      build_delete_request (int a, out Message m);
+
+        public int      set_label (string label);
+        public string   get_label ();
+
+        public void     set_family (int family);
+        public int      get_family ();
+
+
+        public Netlink.Address? get_local();
+        public Netlink.Address? get_peer();
+        public Netlink.Address? get_broadcast();
+        public Netlink.Address? get_anycast();
+        public Netlink.Address? get_multicast();
+
+        public void     set_prefixlen (int len);
+        public int      get_prefixlen ();
+
+        public int      get_ifindex();
+        public int      get_scope();
+
+        public void     set_flags (int flags);
+        public void     unset_flags (int flags);
+        public int     get_flags ();
+
+        [CCode (cname = "nl_addr_get_len")]
+        public int      get_len();
+
+        [CCode (cname = "nl_addr_get_binary_addr")]
+        public void*    get_binary_addr();
+
+        [CCode (cname = "nl_addr2str")]
+        public unowned string to_stringbuf(char[] buf);
+
+        public string to_string() {
+            char[] buf = new char[256];
+            return to_stringbuf( buf );
+        }
+    }
+
+    [Compact]
+    [CCode (cprefix = "nla_", cname = "struct nlattr", free_function = "", cheader_filename = "netlink/netlink.h")]
+    public class Attribute {
+        public static int       attr_size (int payload);
+        public static int       total_size (int payload);
+        public static int       padlen (int payload);
+
+        public int              type();
+        public void*            data();
+        public int              len();
+        public int              ok (int remaining);
+        public Attribute        next (out int remaining);
+        public static int       parse (Attribute[] attributes, Attribute head, int len, AttributePolicy? policy = null);
+        public int              validate (int len, int maxtype, AttributePolicy? policy = null);
+        public Attribute        find (int len, int attrtype);
+    }
+
+    [Compact]
+    [CCode (cname = "struct nla_policy", free_function = "")]
+    public class AttributePolicy {
+        [CCode (cname = "")]
+        public AttributePolicy( AttributeType type = AttributeType.UNSPEC, uint16 minlen = 0, uint16 maxlen = 65535 )
+        {
+            this.type = type;
+            this.minlen = minlen;
+            this.maxlen = maxlen;
+        }
+        public uint16    type;
+        public uint16    minlen;
+        public uint16    maxlen;
+    }
+
+    [CCode (cprefix = "NLA_", cname = "int", cheader_filename = "netlink/attr.h")]
+    public enum AttributeType {
+        UNSPEC,     /**< Unspecified type, binary data chunk */
+        U8,         /**< 8 bit integer */
+        U16,        /**< 16 bit integer */
+        U32,        /**< 32 bit integer */
+        U64,        /**< 64 bit integer */
+        STRING,     /**< NUL terminated character string */
+        FLAG,       /**< Flag */
+        MSECS,      /**< Micro seconds (64bit) */
+        NESTED,     /**< Nested attributes */
+        TYPE_MAX
+    }
+
+    [Compact]
+    [CCode (cprefix = "rtnl_addr_", cname = "struct rtnl_addr", free_function = "", cheader_filename = "netlink/route/addr.h")]
+    public class RouteAddress : Address {
+        [CCode (cname = "rtnl_addr_alloc")]
+        public RouteAddress();
+
+        public void     set_ifindex (int index );
+        public int      get_ifindex ();
+
+        public void     set_scope (int scope);
+        public int      get_scope ();
+
+        public unowned Address get_local();
+    }
+
+    [Compact]
+    [CCode (cprefix = "nl_cache_", cname = "struct nl_cache", free_function = "nl_cache_free", cheader_filename = "netlink/netlink.h")]
+    public class Cache {
+        public static int alloc_name (string name, out Cache c);
+
+        public void @foreach (CallbackFunc cb);
+        public void foreach_filter (Object obj, CallbackFunc cb);
+
+        public void  mngt_provide();
+        public void  mngt_unprovide();
+    }
+
+    [Compact]
+    [CCode (cprefix = "nl_cb_", cname = "struct nl_cb", free_function = "", cheader_filename = "netlink/netlink.h")]
+    public class Callback {
+        [CCode (cname = "nl_cb_alloc")]
+        public Callback (CallbackKind kind = CallbackKind.DEFAULT);
+        [CCode (cname = "nl_cb_set")]
+        public int @set (CallbackType type, CallbackKind kind, MessageCallbackFunc func);
+        [CCode (cname = "nl_cb_set_all")]
+        public int set_all (CallbackKind kind, MessageCallbackFunc func);
+    }
+
+    [CCode (cname = "enum nl_cb_action", cprefix = "NL_", cheader_filename = "netlink/netlink.h")]
+    public enum CallbackAction {
+        OK,         //   Proceed with whatever comes next.
+        SKIP,       //   Skip this message.
+        STOP,       //   Stop parsing altogether and discard remaining messages.
+    }
+
+    [CCode (cname = "enum nl_cb_kind", cprefix = "NL_CB_", cheader_filename = "netlink/netlink.h")]
+    public enum CallbackKind {
+        DEFAULT,    // 	 Default handlers (quiet).
+        VERBOSE,    // 	 Verbose default handlers (error messages printed).
+        DEBUG,      // 	 Debug handlers for debugging.
+        CUSTOM,     // 	 Customized handler specified by the user.
+    }
+
+    [CCode (cname = "enum nl_cb_type", cprefix = "NL_CB_", cheader_filename = "netlink/netlink.h")]
+    public enum CallbackType {
+        VALID,      // 	 Message is valid.
+        FINISH,     // 	 Last message in a series of multi part messages received.
+        OVERRUN,    // 	 Report received that data was lost.
+        SKIPPED,    // 	 Message wants to be skipped.
+        ACK,        // 	 Message is an acknowledge.
+        MSG_IN,     // 	 Called for every message received.
+        MSG_OUT,    // 	 Called for every message sent out except for nl_sendto().
+        INVALID,    // 	 Message is malformed and invalid.
+        SEQ_CHECK,  // 	 Called instead of internal sequence number checking.
+        SEND_ACK,   // 	 Sending of an acknowledge message has been requested.
+    }
+
+    [Compact]
+    [CCode (cprefix = "nl_link_cache_", cname = "struct nl_cache", free_function = "nl_cache_free", cheader_filename = "netlink/netlink.h")]
+    public class LinkCache : Cache
+    {
+        [CCode (cname = "rtnl_link_name2i")]
+        public int name2i (string name);
+        [CCode (cname = "rtnl_link_i2name")]
+        public unowned string i2name( int idx, char[] buffer );
+    }
+
+    [Compact]
+    [CCode (cprefix = "nl_addr_cache", cname = "struct nl_cache", free_function = "nl_cache_free", cheader_filename = "netlink/netlink.h")]
+    public class AddrCache : Cache
+    {
+    }
+
+    [Compact]
+    [CCode (cprefix = "nl_msg_", cname = "struct nl_msg", free_function = "nl_msg_free", cheader_filename = "netlink/netlink.h")]
+    public class Message
+    {
+        public void             dump (Posix.FILE file);
+        public int              parse (CallbackFunc func);
+        [CCode (cname = "nlmsg_hdr")]
+        public MessageHeader    header ();
+    }
+
+    [Compact]
+    [CCode (cprefix = "nlmsg_", cname = "struct nlmsghdr", free_function = "", cheader_filename = "netlink/netlink.h")]
+    public class MessageHeader
+    {
+        // field access
+        public uint32 nlmsg_len;
+        public uint16 nlmsg_type;
+        public uint16 nlmsg_flags;
+        public uint32 nlmsg_seq;
+        public uint32 nlmsg_pid;
+
+        // size calculations
+        public static int       msg_size (int payload);
+        public static int       total_size (int payload);
+        public static int       padlen (int payload);
+
+        // payload access
+        public void*            data ();
+        public int              len ();
+        public void*            tail ();
+
+        // attribute access
+        public Attribute        attrdata (int hdrlen);
+        public int              attrlen (int hdrlen);
+
+        // message parsing
+        public bool             valid_hdr (int hdrlen);
+        public bool             ok (int remaining);
+        public MessageHeader    next (out int remaining);
+        public int              parse (int hdrlen, [CCode (array_length = "false")] out Attribute[] attributes, AttributeType maxtype, AttributePolicy? policy = null);
+        public Attribute?       find_attr (int hdrlen, AttributeType type);
+        public int              validate (int hdrlen, AttributeType maxtype, AttributePolicy policy);
+    }
+
+    [Compact]
+    [CCode (cprefix = "nl_socket_", cname = "struct nl_sock", free_function = "nl_socket_free")]
+    public class Socket {
+        [CCode (cname = "nl_socket_alloc")]
+        public Socket();
+
+        [CCode (cname = "rtnl_link_alloc_cache")]
+        public int              link_alloc_cache (int family, out LinkCache c);
+        [CCode (cname = "rtnl_addr_alloc_cache")]
+        public int              addr_alloc_cache (out AddrCache c);
+
+        // connection management
+        [CCode (cname = "nl_close")]
+        public int              close ();
+        [CCode (cname = "nl_connect")]
+        public int              connect (int family);
+
+        // group management
+        public int              add_memberships (int group, ...);
+        public int              add_membership (int group);
+        public int              drop_memberships (int group, ...);
+        public int              drop_membership (int group);
+        public uint32           get_peer_port ();
+        public void             set_peer_port (uint32 port);
+
+        // callback management
+        public Callback         get_cb ();
+        public void             set_cb (Callback cb);
+        public int              modify_cb (CallbackType type, CallbackKind kind, MessageCallbackFunc callback);
+
+        // configuration
+        public int              set_buffer_size (int rxbuf, int txbuf);
+        public int              set_passcred (bool on);
+        public int              recv_pktinfo (bool on);
+
+        public void             disable_seq_check ();
+        public uint             use_seq ();
+        public void             disable_auto_ack ();
+        public void             enable_auto_ack ();
+
+        public int              get_fd ();
+        public int              set_nonblocking ();
+        public void             enable_msg_peek ();
+        public void             disable_msg_peek ();
+
+        // receiving messages
+        [CCode (cname = "nl_recv")]
+        public int              recv (out Linux.Netlink.SockAddrNl addr, out char[] buf, out Linux.Socket.ucred cred);
+
+        [CCode (cname = "nl_recvmsgs")]
+        public int              recvmsgs (Callback cb);
+
+        [CCode (cname = "nl_recvmsgs_default")]
+        public int              recvmsgs_default ();
+
+        [CCode (cname = "nl_wait_for_ack")]
+        public int              wait_for_ack ();
+    }
+
+    [Compact]
+    [CCode (cprefix = "nl_object_", cname = "struct nl_object", free_function = "nl_object_free", cheader_filename = "netlink/object.h")]
+    public class Object
+    {
+        public uint32 ce_mask;
+
+        public unowned string attrs2str	(uint32 attrs, char[] buf);
+        public unowned string attr_list (char[] buf);
+        public void dump (DumpParams params);
+
+    }
+
+    [CCode (cprefix = "NL_DUMP_", cname = "int", cheader_filename = "netlink/types.h")]
+    public enum DumpType {
+        LINE,           /**< Dump object briefly on one line */
+        DETAILS,        /**< Dump all attributes but no statistics */
+        STATS,          /**< Dump all attributes including statistics */
+    }
+
+    [CCode (cname = "struct nl_dump_params", free_function = "", cheader_filename = "netlink/types.h")]
+    public struct DumpParams {
+        public DumpType dp_type;
+        public int dp_prefix;
+        public bool dp_print_index;
+        public bool dp_dump_msgtype;
+        public unowned Posix.FILE dp_fd;
+        public unowned string dp_buf;
+        public size_t dp_buflen;
+    }
+
+    [Compact]
+    [CCode (cprefix = "rtnl_link_", cname = "struct rtnl_link", free_function = "rtnl_link_destroy", cheader_filename = "netlink/route/link.h")]
+    public class Link
+    {
+	    public unowned string get_name();
+	    public Netlink.Address? get_addr();
+	    public Netlink.Address? get_broadcast();
+	    public uint get_flags();
+	    public int get_family();
+	    public uint get_arptype();
+	    public int get_ifindex();
+	    public uint get_mtu();
+	    public uint get_txqlen();
+        public uint get_weight();
+        public unowned string? get_qdisc();
+    }
+
+    [Compact]
+    [CCode (cprefix = "rtnl_route_", cname = "struct rtnl_route", cheader_filename = "netlink/route/route.h")]
+    public class Route
+    {
+        public uint32 get_table();
+        public uint8 get_scope();
+        public uint8 get_tos();
+        public uint8 get_protocol();
+        public uint32 get_priority();
+        public uint8 get_family();
+        public Netlink.Address? get_dst();
+        public Netlink.Address? get_src();
+        public uint8 get_type();
+        public uint32 get_flags();
+        public int get_metric();
+        public Netlink.Address? get_pref_src();
+        public int get_iif();
+    }
+
+    [Compact]
+    [CCode (cprefix = "rtnl_neigh_", cname = "struct rtnl_neigh", cheader_filename = "netlink/route/neighbour.h")]
+    public class Neighbour
+    {
+        public int get_state();
+        public uint get_flags();
+        public int get_ifindex();
+        public Netlink.Address? get_lladdr();
+        public Netlink.Address? get_dst();
+        public int get_type();
+        public int get_family();
+    }
+
+    [Compact]
+    [CCode (cprefix = "rtnl_rule_", cname = "struct rtnl_rule", cheader_filename = "netlink/route/rule.h")]
+    public class Rule
+    {
+        public int get_family();
+        public uint32 get_prio();
+        public uint32 get_mark();
+        public uint32 get_mask();
+        public uint32 get_table();
+        public uint8 get_dsfield();
+        public Netlink.Address? get_src();
+        public Netlink.Address? get_dst();
+        public uint8 get_action();
+        public unowned string? get_iif();
+        public unowned string? get_oif();
+        public uint32 get_realms();
+        public uint32 get_goto();
+    }
+
+    [Compact]
+    [CCode (cprefix = "rtnl_qdisc_", cname = "struct rtnl_qdisc", cheader_filename = "netlink/route/qdisc.h")]
+    public class Qdisc
+    {
+        public int get_ifindex();
+        public uint32 get_handle();
+        public uint32 get_parent();
+        public unowned string? get_kind();
+        public uint64 get_stat();
+    }
+
+    [CCode (cname = "nl_nlmsgtype2str", cheader_filename = "netlink/msg.h")]
+    public unowned string msgType2Str( int type, char[] buf );
+    [CCode (cname = "nl_af2str", cheader_filename = "netlink/addr.h")]
+    public unowned string af2Str( int family, char[] buf );
+    [CCode (cname = "nl_llproto2str", cheader_filename = "netlink/utils.h")]
+    public unowned string llproto2Str( uint proto, char[] buf );
+    [CCode (cname = "rtnl_link_flags2str", cheader_filename = "netlink/route/link.h")]
+    public unowned string linkFlags2Str( uint flags, char[] buf );
+    [CCode (cname = "rtnl_scope2str", cheader_filename = "netlink/route/rtnl.h")]
+    public unowned string routeScope2Str( int scope, char[] buf );
+    [CCode (cname = "nl_rtntype2str", cheader_filename = "netlink/netlink.h")]
+    public unowned string routeType2Str( int type, char[] buf );
+    [CCode (cname = "rtnl_addr_flags2str", cheader_filename = "netlink/netlink.h")]
+    public unowned string addrFlags2Str( int flags, char[] buf );
+    [CCode (cname = "rtnl_neigh_flags2str", cheader_filename = "netlink/netlink.h")]
+    public unowned string neighFlags2Str( uint flags, char[] buf );
+    [CCode (cname = "rtnl_neigh_state2str", cheader_filename = "netlink/netlink.h")]
+    public unowned string neighState2Str( int state, char[] buf );
+
+}
diff --git a/vapi/libosso.vapi b/vapi/libosso.vapi
index 95e5f24..c6879c5 100644
--- a/vapi/libosso.vapi
+++ b/vapi/libosso.vapi
@@ -96,7 +96,7 @@ namespace Osso {
 		/* Time Notification */
 		[CCode (cname = "osso_time_set_notification_cb")]
 		public Status set_time_notification_callback (TimeCallback cb, void* data);
-		[CCode (cname = "osso_time_set")]
+		//[CCode (cname = "osso_time_set")]
 		//public Status set_time (time_t new_time);
 
 		/* Locale */
diff --git a/vapi/libpeas-1.0.vapi b/vapi/libpeas-1.0.vapi
index f728d32..987cbd9 100644
--- a/vapi/libpeas-1.0.vapi
+++ b/vapi/libpeas-1.0.vapi
@@ -16,23 +16,24 @@ namespace Peas {
 		public string[] get_loaded_plugins ();
 		public unowned Peas.PluginInfo get_plugin_info (string plugin_name);
 		public unowned GLib.List<Peas.PluginInfo> get_plugin_list ();
+		public void prepend_search_path (string module_dir, string? data_dir);
 		public bool provides_extension (Peas.PluginInfo info, GLib.Type extension_type);
 		public void rescan_plugins ();
 		public void set_loaded_plugins ([CCode (array_length = false, array_null_terminated = true)] string[]? plugin_names);
+		[CCode (cname = "peas_engine_load_plugin")]
+		public bool try_load_plugin (Peas.PluginInfo info);
+		[CCode (cname = "peas_engine_unload_plugin")]
+		public bool try_unload_plugin (Peas.PluginInfo info);
 		[CCode (array_length = false, array_null_terminated = true)]
 		public string[] loaded_plugins { owned get; set; }
 		public void* plugin_list { get; }
-		[HasEmitter]
 		public virtual signal void load_plugin (Peas.PluginInfo info);
-		[HasEmitter]
 		public virtual signal void unload_plugin (Peas.PluginInfo info);
 	}
 	[CCode (cheader_filename = "libpeas/peas.h")]
 	public class Extension : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected Extension ();
-		public static GLib.Type get_extension_type (Peas.Extension exten);
-		public static GLib.Type get_type ();
 	}
 	[CCode (cheader_filename = "libpeas/peas.h", type_id = "peas_extension_base_get_type ()")]
 	public abstract class ExtensionBase : GLib.Object {
@@ -49,7 +50,8 @@ namespace Peas {
 		public ExtensionSet (Peas.Engine engine, GLib.Type exten_type, ...);
 		public void @foreach (Peas.ExtensionSetForeachFunc func);
 		public unowned Peas.Extension get_extension (Peas.PluginInfo info);
-		public static Peas.ExtensionSet newv (Peas.Engine? engine, GLib.Type exten_type, [CCode (array_length_cname = "n_parameters", array_length_pos = 2.5, array_length_type = "guint")] GLib.Parameter[] parameters);
+		[CCode (has_construct_function = false)]
+		public ExtensionSet.newv (Peas.Engine? engine, GLib.Type exten_type, [CCode (array_length_cname = "n_parameters", array_length_pos = 2.5, array_length_type = "guint")] GLib.Parameter[] parameters);
 		public void* construct_properties { construct; }
 		[NoAccessorMethod]
 		public Peas.Engine engine { owned get; construct; }
@@ -81,11 +83,13 @@ namespace Peas {
 		[CCode (array_length = false, array_null_terminated = true)]
 		public unowned string[] get_dependencies ();
 		public unowned string get_description ();
+		public unowned string get_external_data (string key);
 		public unowned string get_help_uri ();
 		public unowned string get_icon_name ();
 		public unowned string get_module_dir ();
 		public unowned string get_module_name ();
 		public unowned string get_name ();
+		public GLib.Settings get_settings (string? schema_id);
 		public unowned string get_version ();
 		public unowned string get_website ();
 		public bool has_dependency (string module_name);
@@ -110,8 +114,8 @@ namespace Peas {
 		DEP_LOADING_FAILED;
 		public static GLib.Quark quark ();
 	}
-	[CCode (cheader_filename = "libpeas/peas.h", has_target = false)]
-	public delegate void ExtensionSetForeachFunc (Peas.ExtensionSet @set, Peas.PluginInfo info, Peas.Extension exten, void* data);
+	[CCode (cheader_filename = "libpeas/peas.h", instance_pos = 3.9)]
+	public delegate void ExtensionSetForeachFunc (Peas.ExtensionSet @set, Peas.PluginInfo info, Peas.Extension exten);
 	[CCode (cheader_filename = "libpeas/peas.h", instance_pos = 1.9)]
 	public delegate GLib.Object FactoryFunc ([CCode (array_length_cname = "n_parameters", array_length_pos = 0.5, array_length_type = "guint")] GLib.Parameter[] parameters);
 }
diff --git a/vapi/libsoup-2.4.vapi b/vapi/libsoup-2.4.vapi
index 9991f3b..1572818 100644
--- a/vapi/libsoup-2.4.vapi
+++ b/vapi/libsoup-2.4.vapi
@@ -6,11 +6,11 @@ namespace Soup {
 		[CCode (cheader_filename = "libsoup/soup.h")]
 		public static GLib.HashTable<string,string> decode (string encoded_form);
 		[CCode (cheader_filename = "libsoup/soup.h")]
-		public static GLib.HashTable<string,string> decode_multipart (Soup.Message msg, string file_control_name, out string filename, out string content_type, out Soup.Buffer file);
+		public static GLib.HashTable<string,string> decode_multipart (Soup.Message msg, string? file_control_name, out string filename, out string content_type, out Soup.Buffer file);
 		[CCode (cheader_filename = "libsoup/soup.h")]
 		public static string encode (...);
 		[CCode (cheader_filename = "libsoup/soup.h")]
-		public static string encode_datalist (GLib.Datalist form_data_set);
+		public static string encode_datalist (GLib.Datalist<string> form_data_set);
 		[CCode (cheader_filename = "libsoup/soup.h")]
 		public static string encode_hash (GLib.HashTable<string,string> form_data_set);
 		[CCode (cheader_filename = "libsoup/soup.h")]
@@ -18,7 +18,7 @@ namespace Soup {
 		[CCode (cheader_filename = "libsoup/soup.h")]
 		public static Soup.Message request_new (string method, string uri, ...);
 		[CCode (cheader_filename = "libsoup/soup.h")]
-		public static Soup.Message request_new_from_datalist (string method, string uri, GLib.Datalist form_data_set);
+		public static Soup.Message request_new_from_datalist (string method, string uri, GLib.Datalist<string> form_data_set);
 		[CCode (cheader_filename = "libsoup/soup.h")]
 		public static Soup.Message request_new_from_hash (string method, string uri, GLib.HashTable<string,string> form_data_set);
 		[CCode (cheader_filename = "libsoup/soup.h")]
@@ -49,7 +49,7 @@ namespace Soup {
 		[PrintfFormat]
 		public static string build_fault (int fault_code, string fault_format, ...);
 		[CCode (cheader_filename = "libsoup/soup.h")]
-		public static string build_method_call (string method_name, [CCode (array_length_cname = "n_params", array_length_pos = 2.1, type = "GValue*")] GLib.Value[] @params);
+		public static string build_method_call (string method_name, [CCode (array_length_cname = "n_params", array_length_pos = 2.1)] GLib.Value[] @params);
 		[CCode (cheader_filename = "libsoup/soup.h")]
 		public static string build_method_response (GLib.Value value);
 		[CCode (cheader_filename = "libsoup/soup.h")]
@@ -78,8 +78,8 @@ namespace Soup {
 		public Address (string name, uint port);
 		[CCode (has_construct_function = false)]
 		public Address.any (Soup.AddressFamily family, uint port);
-		public static bool equal_by_ip ([CCode (type = "gconstpointer")] Soup.Address addr1, [CCode (type = "gconstpointer")] Soup.Address addr2);
-		public static bool equal_by_name ([CCode (type = "gconstpointer")] Soup.Address addr1, [CCode (type = "gconstpointer")] Soup.Address addr2);
+		public bool equal_by_ip ([CCode (type = "gconstpointer")] Soup.Address addr2);
+		public bool equal_by_name ([CCode (type = "gconstpointer")] Soup.Address addr2);
 		[CCode (has_construct_function = false)]
 		public Address.from_sockaddr (void* sa, int len);
 		public GLib.SocketAddress get_gsockaddr ();
@@ -87,8 +87,8 @@ namespace Soup {
 		public unowned string get_physical ();
 		public uint get_port ();
 		public void* get_sockaddr (int len);
-		public static uint hash_by_ip (void* addr);
-		public static uint hash_by_name (void* addr);
+		public uint hash_by_ip ();
+		public uint hash_by_name ();
 		public bool is_resolved ();
 		public void resolve_async (GLib.MainContext? async_context, GLib.Cancellable? cancellable, Soup.AddressCallback callback);
 		public uint resolve_sync (GLib.Cancellable? cancellable);
@@ -98,6 +98,8 @@ namespace Soup {
 		public string physical { get; }
 		public int port { get; construct; }
 		[NoAccessorMethod]
+		public string protocol { owned get; construct; }
+		[NoAccessorMethod]
 		public void* sockaddr { get; construct; }
 	}
 	[CCode (cheader_filename = "libsoup/soup.h", type_id = "soup_auth_get_type ()")]
@@ -119,7 +121,17 @@ namespace Soup {
 		public bool is_for_proxy { get; construct; }
 		public string realm { get; construct; }
 		public string scheme_name { get; }
-		public signal void save_password (string object, string p0);
+		public signal void save_password (string username, string password);
+	}
+	[CCode (cheader_filename = "libsoup/soup.h", type_id = "soup_auth_basic_get_type ()")]
+	public class AuthBasic : Soup.Auth {
+		[CCode (has_construct_function = false)]
+		protected AuthBasic ();
+	}
+	[CCode (cheader_filename = "libsoup/soup.h", type_id = "soup_auth_digest_get_type ()")]
+	public class AuthDigest : Soup.Auth {
+		[CCode (has_construct_function = false)]
+		protected AuthDigest ();
 	}
 	[CCode (cheader_filename = "libsoup/soup.h", type_id = "soup_auth_domain_get_type ()")]
 	public abstract class AuthDomain : GLib.Object {
@@ -170,6 +182,11 @@ namespace Soup {
 		[NoAccessorMethod]
 		public void* auth_data { get; set; }
 	}
+	[CCode (cheader_filename = "libsoup/soup.h", type_id = "soup_auth_ntlm_get_type ()")]
+	public class AuthNTLM : Soup.Auth {
+		[CCode (has_construct_function = false)]
+		protected AuthNTLM ();
+	}
 	[CCode (cheader_filename = "libsoup/soup.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "soup_buffer_get_type ()")]
 	[Compact]
 	public class Buffer {
@@ -215,7 +232,6 @@ namespace Soup {
 	public class ContentSniffer : GLib.Object, Soup.SessionFeature {
 		[CCode (has_construct_function = false)]
 		public ContentSniffer ();
-		[NoWrapper]
 		public virtual size_t get_buffer_size ();
 		public virtual string sniff (Soup.Message msg, Soup.Buffer buffer, out GLib.HashTable<string,string>? @params);
 	}
@@ -260,10 +276,13 @@ namespace Soup {
 		[CCode (has_construct_function = false)]
 		public CookieJar ();
 		public void add_cookie (Soup.Cookie cookie);
+		public void add_cookie_with_first_party (Soup.URI first_party, Soup.Cookie cookie);
 		public GLib.SList<Soup.Cookie> all_cookies ();
 		public void delete_cookie (Soup.Cookie cookie);
 		public Soup.CookieJarAcceptPolicy get_accept_policy ();
+		public GLib.SList<Soup.Cookie> get_cookie_list (Soup.URI uri, bool for_http);
 		public string get_cookies (Soup.URI uri, bool for_http);
+		public virtual bool is_persistent ();
 		public virtual void save ();
 		public void set_accept_policy (Soup.CookieJarAcceptPolicy policy);
 		public void set_cookie (Soup.URI uri, string cookie);
@@ -339,12 +358,14 @@ namespace Soup {
 		public unowned Soup.URI get_first_party ();
 		public Soup.MessageFlags get_flags ();
 		public Soup.HTTPVersion get_http_version ();
+		public bool get_https_status (out unowned GLib.TlsCertificate certificate, out GLib.TlsCertificateFlags errors);
 		public unowned Soup.URI get_uri ();
 		public bool is_keepalive ();
 		public void set_chunk_allocator (owned Soup.ChunkAllocator allocator);
 		public void set_first_party (Soup.URI first_party);
 		public void set_flags (Soup.MessageFlags flags);
 		public void set_http_version (Soup.HTTPVersion version);
+		public void set_redirect (uint status_code, string redirect_uri);
 		public void set_request (string content_type, Soup.MemoryUse req_use, [CCode (array_length_cname = "req_length", array_length_pos = 3.1, array_length_type = "gsize", type = "char*")] uint8[] req_body);
 		public void set_response (string? content_type, Soup.MemoryUse resp_use, [CCode (array_length_cname = "resp_length", array_length_pos = 3.1, array_length_type = "gsize")] uint8[] resp_body);
 		public void set_status (uint status_code);
@@ -361,9 +382,13 @@ namespace Soup {
 		public bool server_side { get; construct; }
 		[NoAccessorMethod]
 		public uint status_code { get; set; }
+		[NoAccessorMethod]
+		public GLib.TlsCertificate tls_certificate { owned get; set; }
+		[NoAccessorMethod]
+		public GLib.TlsCertificateFlags tls_errors { get; set; }
 		public Soup.URI uri { get; set; }
 		[HasEmitter]
-		public signal void content_sniffed (string content_type, GLib.HashTable<void*,void*> @params);
+		public signal void content_sniffed (string content_type, GLib.HashTable<string,string> @params);
 		[HasEmitter]
 		public virtual signal void finished ();
 		[HasEmitter]
@@ -374,6 +399,7 @@ namespace Soup {
 		public virtual signal void got_headers ();
 		[HasEmitter]
 		public virtual signal void got_informational ();
+		public signal void network_event (GLib.SocketClientEvent event, GLib.IOStream connection);
 		[HasEmitter]
 		public virtual signal void restarted ();
 		[HasEmitter]
@@ -414,6 +440,7 @@ namespace Soup {
 		[CCode (has_construct_function = false)]
 		public MessageHeaders (Soup.MessageHeadersType type);
 		public void append (string name, string value);
+		public void clean_connection_headers ();
 		public void clear ();
 		public void @foreach (Soup.MessageHeadersForeachFunc func);
 		public void free ();
@@ -427,7 +454,7 @@ namespace Soup {
 		public Soup.Expectation get_expectations ();
 		public unowned string get_list (string name);
 		public unowned string get_one (string name);
-		public bool get_ranges (int64 total_length, out Soup.Range ranges, int length);
+		public bool get_ranges (int64 total_length, [CCode (array_length_cname = "length", array_length_pos = 2.1, type = "SoupRange**")] out Soup.Range[] ranges);
 		public void remove (string name);
 		public void replace (string name, string value);
 		public void set_content_disposition (string disposition, GLib.HashTable<string,string>? @params);
@@ -462,12 +489,20 @@ namespace Soup {
 		public bool get_part (int part, out unowned Soup.MessageHeaders headers, out unowned Soup.Buffer body);
 		public void to_message (Soup.MessageHeaders dest_headers, Soup.MessageBody dest_body);
 	}
+	[CCode (cheader_filename = "libsoup/soup.h", type_id = "soup_proxy_resolver_default_get_type ()")]
+	public class ProxyResolverDefault : GLib.Object, Soup.ProxyURIResolver, Soup.SessionFeature {
+		[CCode (has_construct_function = false)]
+		protected ProxyResolverDefault ();
+		[NoAccessorMethod]
+		public GLib.ProxyResolver gproxy_resolver { set; }
+	}
 	[CCode (cheader_filename = "libsoup/soup.h", type_id = "soup_server_get_type ()")]
 	public class Server : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public Server (string optname1, ...);
 		public void add_auth_domain (Soup.AuthDomain auth_domain);
 		public void add_handler (string? path, owned Soup.ServerCallback callback);
+		public void disconnect ();
 		public unowned GLib.MainContext get_async_context ();
 		public unowned Soup.Socket get_listener ();
 		public uint get_port ();
@@ -491,6 +526,8 @@ namespace Soup {
 		public string ssl_cert_file { owned get; construct; }
 		[NoAccessorMethod]
 		public string ssl_key_file { owned get; construct; }
+		[NoAccessorMethod]
+		public GLib.TlsCertificate tls_certificate { owned get; construct; }
 		public virtual signal void request_aborted (Soup.Message msg, Soup.ClientContext client);
 		public virtual signal void request_finished (Soup.Message msg, Soup.ClientContext client);
 		public virtual signal void request_read (Soup.Message msg, Soup.ClientContext client);
@@ -501,29 +538,42 @@ namespace Soup {
 		[CCode (has_construct_function = false)]
 		protected Session ();
 		public void abort ();
+		public void add_feature (Soup.SessionFeature feature);
+		public void add_feature_by_type (GLib.Type feature_type);
 		[NoWrapper]
 		public virtual void auth_required (Soup.Message msg, Soup.Auth auth, bool retrying);
 		public virtual void cancel_message (Soup.Message msg, uint status_code);
+		[NoWrapper]
+		public virtual void flush_queue ();
 		public unowned GLib.MainContext get_async_context ();
 		public unowned Soup.SessionFeature get_feature (GLib.Type feature_type);
 		public unowned Soup.SessionFeature get_feature_for_message (GLib.Type feature_type, Soup.Message msg);
 		public GLib.SList<Soup.SessionFeature> get_features (GLib.Type feature_type);
+		[NoWrapper]
+		public virtual void kick ();
 		public void pause_message (Soup.Message msg);
+		public void prefetch_dns (string hostname, GLib.Cancellable? cancellable, Soup.AddressCallback? callback);
+		[Deprecated (since = "2.38")]
 		public void prepare_for_uri (Soup.URI uri);
 		public virtual void queue_message (owned Soup.Message msg, Soup.SessionCallback? callback);
+		public bool redirect_message (Soup.Message msg);
 		public void remove_feature (Soup.SessionFeature feature);
+		public void remove_feature_by_type (GLib.Type feature_type);
 		public virtual void requeue_message (Soup.Message msg);
 		public virtual uint send_message (Soup.Message msg);
 		public void unpause_message (Soup.Message msg);
+		public bool would_redirect (Soup.Message msg);
 		[NoAccessorMethod]
 		public string accept_language { owned get; set; }
 		[NoAccessorMethod]
 		public bool accept_language_auto { get; set; }
+		public GLib.MainContext async_context { get; owned construct; }
+		[CCode (array_length = false, array_null_terminated = true)]
 		[NoAccessorMethod]
-		public Soup.SessionFeature add_feature { owned get; set; }
+		public string[] http_aliases { owned get; set; }
+		[CCode (array_length = false, array_null_terminated = true)]
 		[NoAccessorMethod]
-		public GLib.Type add_feature_by_type { get; set; }
-		public GLib.MainContext async_context { get; owned construct; }
+		public string[] https_aliases { owned get; set; }
 		[NoAccessorMethod]
 		public uint idle_timeout { get; set; }
 		[NoAccessorMethod]
@@ -533,23 +583,27 @@ namespace Soup {
 		[NoAccessorMethod]
 		public Soup.URI proxy_uri { owned get; set; }
 		[NoAccessorMethod]
-		public GLib.Type remove_feature_by_type { get; set; }
-		[NoAccessorMethod]
 		public string ssl_ca_file { owned get; set; }
 		[NoAccessorMethod]
 		public bool ssl_strict { get; set; }
 		[NoAccessorMethod]
+		public bool ssl_use_system_ca_file { get; set; }
+		[NoAccessorMethod]
 		public uint timeout { get; set; }
 		[NoAccessorMethod]
+		public GLib.TlsDatabase tls_database { owned get; set; }
+		[NoAccessorMethod]
 		public bool use_ntlm { get; set; }
 		[NoAccessorMethod]
+		public bool use_thread_context { get; set; }
+		[NoAccessorMethod]
 		public string user_agent { owned get; set; }
 		public virtual signal void authenticate (Soup.Message msg, Soup.Auth auth, bool retrying);
-		public signal void connection_created (GLib.Object object);
-		public signal void request_queued (Soup.Message object);
+		public signal void connection_created (GLib.Object connection);
+		public signal void request_queued (Soup.Message msg);
 		public virtual signal void request_started (Soup.Message msg, Soup.Socket socket);
-		public signal void request_unqueued (Soup.Message object);
-		public signal void tunneling (GLib.Object object);
+		public signal void request_unqueued (Soup.Message msg);
+		public signal void tunneling (GLib.Object connection);
 	}
 	[CCode (cheader_filename = "libsoup/soup.h", type_id = "soup_session_async_get_type ()")]
 	public class SessionAsync : Soup.Session {
@@ -595,12 +649,23 @@ namespace Soup {
 		[NoAccessorMethod]
 		public void* ssl_creds { get; set; }
 		[NoAccessorMethod]
+		public bool ssl_fallback { get; construct; }
+		[NoAccessorMethod]
 		public bool ssl_strict { get; construct; }
 		[NoAccessorMethod]
 		public uint timeout { get; set; }
 		[NoAccessorMethod]
-		public bool trusted_certificate { get; construct; }
+		public GLib.TlsCertificate tls_certificate { owned get; }
+		[NoAccessorMethod]
+		public GLib.TlsCertificateFlags tls_errors { get; }
+		[NoAccessorMethod]
+		public bool trusted_certificate { get; }
+		[NoAccessorMethod]
+		public bool use_proxy { get; construct; }
+		[NoAccessorMethod]
+		public bool use_thread_context { get; construct; }
 		public virtual signal void disconnected ();
+		public signal void event (GLib.SocketClientEvent event, GLib.IOStream connection);
 		public virtual signal void new_connection (Soup.Socket arg1);
 		public virtual signal void readable ();
 		public virtual signal void writable ();
@@ -617,7 +682,7 @@ namespace Soup {
 		public weak string scheme;
 		public weak string user;
 		[CCode (has_construct_function = false)]
-		public URI (string uri_string);
+		public URI (string? uri_string);
 		public Soup.URI copy ();
 		public Soup.URI copy_host ();
 		public static string decode (string part);
@@ -632,25 +697,26 @@ namespace Soup {
 		public unowned string get_query ();
 		public unowned string get_scheme ();
 		public unowned string get_user ();
-		public static bool host_equal ([CCode (type = "gconstpointer")] Soup.URI v1, [CCode (type = "gconstpointer")] Soup.URI v2);
-		public static uint host_hash ([CCode (type = "gconstpointer")] Soup.URI key);
+		public bool host_equal (Soup.URI v2);
+		public uint host_hash ();
 		public static string normalize (string part, string unescape_extra);
-		public void set_fragment (string fragment);
-		public void set_host (string host);
-		public void set_password (string password);
+		public void set_fragment (string? fragment);
+		public void set_host (string? host);
+		public void set_password (string? password);
 		public void set_path (string path);
 		public void set_port (uint port);
-		public void set_query (string query);
+		public void set_query (string? query);
 		public void set_query_from_fields (...);
 		public void set_query_from_form (GLib.HashTable<string,string> form);
 		public void set_scheme (string scheme);
-		public void set_user (string user);
+		public void set_user (string? user);
 		public string to_string (bool just_path_and_query);
 		public bool uses_default_port ();
 		[CCode (has_construct_function = false)]
 		public URI.with_base (Soup.URI @base, string uri_string);
 	}
 	[CCode (cheader_filename = "libsoup/soup.h", type_cname = "SoupProxyResolverInterface", type_id = "soup_proxy_resolver_get_type ()")]
+	[Deprecated (replacement = "Soup.ProxyURIResolver")]
 	public interface ProxyResolver : Soup.SessionFeature, GLib.Object {
 		public abstract void get_proxy_async (Soup.Message msg, GLib.MainContext async_context, GLib.Cancellable? cancellable, Soup.ProxyResolverCallback callaback);
 		public abstract uint get_proxy_sync (Soup.Message msg, GLib.Cancellable? cancellable, out unowned Soup.Address addr);
@@ -658,12 +724,15 @@ namespace Soup {
 	[CCode (cheader_filename = "libsoup/soup.h", type_cname = "SoupProxyURIResolverInterface", type_id = "soup_proxy_uri_resolver_get_type ()")]
 	public interface ProxyURIResolver : GLib.Object {
 		public abstract void get_proxy_uri_async (Soup.URI uri, GLib.MainContext? async_context, GLib.Cancellable? cancellable, Soup.ProxyURIResolverCallback callback);
-		public abstract uint get_proxy_uri_sync (Soup.URI uri, GLib.Cancellable? cancellable, out unowned Soup.URI proxy_uri);
+		public abstract uint get_proxy_uri_sync (Soup.URI uri, GLib.Cancellable? cancellable, out Soup.URI proxy_uri);
 	}
 	[CCode (cheader_filename = "libsoup/soup.h", type_cname = "SoupSessionFeatureInterface", type_id = "soup_session_feature_get_type ()")]
 	public interface SessionFeature : GLib.Object {
+		public abstract bool add_feature (GLib.Type type);
 		public abstract void attach (Soup.Session session);
 		public abstract void detach (Soup.Session session);
+		public abstract bool has_feature (GLib.Type type);
+		public abstract bool remove_feature (GLib.Type type);
 		[NoWrapper]
 		public abstract void request_queued (Soup.Session session, Soup.Message msg);
 		[NoWrapper]
@@ -673,8 +742,6 @@ namespace Soup {
 	}
 	[CCode (cheader_filename = "libsoup/soup.h", has_type_id = false)]
 	public struct MessageHeadersIter {
-		[CCode (array_length = false, array_null_terminated = true)]
-		public weak void*[] dummy;
 		public void init (Soup.MessageHeaders hdrs);
 		public bool next (out unowned string name, out unowned string value);
 	}
@@ -689,6 +756,25 @@ namespace Soup {
 		IPV4,
 		IPV6
 	}
+	[CCode (cheader_filename = "libsoup/soup.h", cprefix = "SOUP_CACHE_RESPONSE_")]
+	public enum CacheResponse {
+		FRESH,
+		NEEDS_VALIDATION,
+		STALE
+	}
+	[CCode (cheader_filename = "libsoup/soup.h", cprefix = "SOUP_CACHE_")]
+	public enum CacheType {
+		SINGLE_USER,
+		SHARED
+	}
+	[CCode (cheader_filename = "libsoup/soup.h", cprefix = "SOUP_CACHE_")]
+	[Flags]
+	public enum Cacheability {
+		CACHEABLE,
+		UNCACHEABLE,
+		INVALIDATES,
+		VALIDATES
+	}
 	[CCode (cheader_filename = "libsoup/soup.h", cprefix = "SOUP_CONNECTION_")]
 	public enum ConnectionState {
 		NEW,
@@ -747,6 +833,7 @@ namespace Soup {
 		MALFORMED,
 		TRY_AGAIN,
 		TOO_MANY_REDIRECTS,
+		TLS_FAILED,
 		CONTINUE,
 		SWITCHING_PROTOCOLS,
 		PROCESSING,
@@ -817,9 +904,11 @@ namespace Soup {
 	[Flags]
 	public enum MessageFlags {
 		NO_REDIRECT,
+		CAN_REBUILD,
 		OVERWRITE_CHUNKS,
 		CONTENT_DECODED,
-		CERTIFICATE_TRUSTED
+		CERTIFICATE_TRUSTED,
+		NEW_CONNECTION
 	}
 	[CCode (cheader_filename = "libsoup/soup.h", cprefix = "SOUP_MESSAGE_HEADERS_")]
 	public enum MessageHeadersType {
@@ -827,6 +916,11 @@ namespace Soup {
 		RESPONSE,
 		MULTIPART
 	}
+	[CCode (cheader_filename = "libsoup/soup.h", cprefix = "SOUP_REQUESTER_ERROR_")]
+	public enum RequesterError {
+		BAD_URI,
+		UNSUPPORTED_URI_SCHEME
+	}
 	[CCode (cheader_filename = "libsoup/soup.h", cprefix = "SOUP_SOCKET_")]
 	public enum SocketIOStatus {
 		OK,
@@ -834,7 +928,7 @@ namespace Soup {
 		EOF,
 		ERROR
 	}
-	[CCode (cheader_filename = "libsoup/soup.h", cprefix = "SOUP_SSL_ERROR_")]
+	[CCode (cheader_filename = "libsoup/soup.h")]
 	public errordomain SSLError {
 		HANDSHAKE_NEEDS_READ,
 		HANDSHAKE_NEEDS_WRITE,
@@ -842,7 +936,7 @@ namespace Soup {
 		HANDSHAKE_FAILED;
 		public static GLib.Quark quark ();
 	}
-	[CCode (cheader_filename = "libsoup/soup.h", has_target = false)]
+	[CCode (cheader_filename = "libsoup/soup.h", instance_pos = 2.9)]
 	public delegate void AddressCallback (Soup.Address addr, uint status);
 	[CCode (cheader_filename = "libsoup/soup.h", instance_pos = 4.9)]
 	public delegate bool AuthDomainBasicAuthCallback (Soup.AuthDomain domain, Soup.Message msg, string username, string password);
@@ -870,231 +964,267 @@ namespace Soup {
 	public delegate void SessionCallback (Soup.Session session, Soup.Message msg);
 	[CCode (cheader_filename = "libsoup/soup.h", instance_pos = 2.9)]
 	public delegate void SocketCallback (Soup.Socket sock, uint status);
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_ADDRESS_ANY_PORT")]
 	public const int ADDRESS_ANY_PORT;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_ADDRESS_FAMILY")]
 	public const string ADDRESS_FAMILY;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_ADDRESS_NAME")]
 	public const string ADDRESS_NAME;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_ADDRESS_PHYSICAL")]
 	public const string ADDRESS_PHYSICAL;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_ADDRESS_PORT")]
 	public const string ADDRESS_PORT;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_ADDRESS_PROTOCOL")]
+	public const string ADDRESS_PROTOCOL;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_ADDRESS_SOCKADDR")]
 	public const string ADDRESS_SOCKADDR;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_DOMAIN_ADD_PATH")]
 	public const string AUTH_DOMAIN_ADD_PATH;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_DOMAIN_BASIC_AUTH_CALLBACK")]
 	public const string AUTH_DOMAIN_BASIC_AUTH_CALLBACK;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_DOMAIN_BASIC_AUTH_DATA")]
 	public const string AUTH_DOMAIN_BASIC_AUTH_DATA;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_DOMAIN_BASIC_H")]
 	public const int AUTH_DOMAIN_BASIC_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_DOMAIN_DIGEST_AUTH_CALLBACK")]
 	public const string AUTH_DOMAIN_DIGEST_AUTH_CALLBACK;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_DOMAIN_DIGEST_AUTH_DATA")]
 	public const string AUTH_DOMAIN_DIGEST_AUTH_DATA;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_DOMAIN_DIGEST_H")]
 	public const int AUTH_DOMAIN_DIGEST_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_DOMAIN_FILTER")]
 	public const string AUTH_DOMAIN_FILTER;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_DOMAIN_FILTER_DATA")]
 	public const string AUTH_DOMAIN_FILTER_DATA;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_DOMAIN_GENERIC_AUTH_CALLBACK")]
 	public const string AUTH_DOMAIN_GENERIC_AUTH_CALLBACK;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_DOMAIN_GENERIC_AUTH_DATA")]
 	public const string AUTH_DOMAIN_GENERIC_AUTH_DATA;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_DOMAIN_H")]
 	public const int AUTH_DOMAIN_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_DOMAIN_PROXY")]
 	public const string AUTH_DOMAIN_PROXY;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_DOMAIN_REALM")]
 	public const string AUTH_DOMAIN_REALM;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_DOMAIN_REMOVE_PATH")]
 	public const string AUTH_DOMAIN_REMOVE_PATH;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_H")]
 	public const int AUTH_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_HOST")]
 	public const string AUTH_HOST;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_IS_AUTHENTICATED")]
 	public const string AUTH_IS_AUTHENTICATED;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_IS_FOR_PROXY")]
 	public const string AUTH_IS_FOR_PROXY;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_REALM")]
 	public const string AUTH_REALM;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_AUTH_SCHEME_NAME")]
 	public const string AUTH_SCHEME_NAME;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_CACHE_H")]
+	public const int CACHE_H;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_CHAR_HTTP_CTL")]
 	public const int CHAR_HTTP_CTL;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_CHAR_HTTP_SEPARATOR")]
 	public const int CHAR_HTTP_SEPARATOR;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_CHAR_URI_GEN_DELIMS")]
 	public const int CHAR_URI_GEN_DELIMS;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_CHAR_URI_PERCENT_ENCODED")]
 	public const int CHAR_URI_PERCENT_ENCODED;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_CHAR_URI_SUB_DELIMS")]
 	public const int CHAR_URI_SUB_DELIMS;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_CONTENT_DECODER_H")]
 	public const int CONTENT_DECODER_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_CONTENT_SNIFFER_H")]
 	public const int CONTENT_SNIFFER_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_COOKIE_H")]
 	public const int COOKIE_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_COOKIE_JAR_ACCEPT_POLICY")]
 	public const string COOKIE_JAR_ACCEPT_POLICY;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_COOKIE_JAR_H")]
 	public const int COOKIE_JAR_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_COOKIE_JAR_READ_ONLY")]
 	public const string COOKIE_JAR_READ_ONLY;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_COOKIE_JAR_TEXT_FILENAME")]
 	public const string COOKIE_JAR_TEXT_FILENAME;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_COOKIE_JAR_TEXT_H")]
 	public const int COOKIE_JAR_TEXT_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_COOKIE_MAX_AGE_ONE_DAY")]
 	public const int COOKIE_MAX_AGE_ONE_DAY;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_COOKIE_MAX_AGE_ONE_HOUR")]
 	public const int COOKIE_MAX_AGE_ONE_HOUR;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_COOKIE_MAX_AGE_ONE_WEEK")]
 	public const int COOKIE_MAX_AGE_ONE_WEEK;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_COOKIE_MAX_AGE_ONE_YEAR")]
 	public const int COOKIE_MAX_AGE_ONE_YEAR;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_DATE_H")]
 	public const int DATE_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_FORM_H")]
 	public const int FORM_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_FORM_MIME_TYPE_MULTIPART")]
 	public const string FORM_MIME_TYPE_MULTIPART;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_FORM_MIME_TYPE_URLENCODED")]
 	public const string FORM_MIME_TYPE_URLENCODED;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_HEADERS_H")]
 	public const int HEADERS_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_LOGGER_H")]
 	public const int LOGGER_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_BODY_H")]
 	public const int MESSAGE_BODY_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_FIRST_PARTY")]
 	public const string MESSAGE_FIRST_PARTY;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_FLAGS")]
 	public const string MESSAGE_FLAGS;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_H")]
 	public const int MESSAGE_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_HEADERS_H")]
 	public const int MESSAGE_HEADERS_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_HTTP_VERSION")]
 	public const string MESSAGE_HTTP_VERSION;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_METHOD")]
 	public const string MESSAGE_METHOD;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_REASON_PHRASE")]
 	public const string MESSAGE_REASON_PHRASE;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_REQUEST_BODY")]
 	public const string MESSAGE_REQUEST_BODY;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_REQUEST_HEADERS")]
 	public const string MESSAGE_REQUEST_HEADERS;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_RESPONSE_BODY")]
 	public const string MESSAGE_RESPONSE_BODY;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_RESPONSE_HEADERS")]
 	public const string MESSAGE_RESPONSE_HEADERS;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_SERVER_SIDE")]
 	public const string MESSAGE_SERVER_SIDE;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_STATUS_CODE")]
 	public const string MESSAGE_STATUS_CODE;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_TLS_CERTIFICATE")]
+	public const string MESSAGE_TLS_CERTIFICATE;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_TLS_ERRORS")]
+	public const string MESSAGE_TLS_ERRORS;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MESSAGE_URI")]
 	public const string MESSAGE_URI;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_METHOD_H")]
 	public const int METHOD_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MISC_H")]
 	public const int MISC_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_MULTIPART_H")]
 	public const int MULTIPART_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_PASSWORD_MANAGER_H")]
 	public const int PASSWORD_MANAGER_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
-	public const int PROXY_RESOLVER_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_PROXY_RESOLVER_DEFAULT_H")]
+	public const int PROXY_RESOLVER_DEFAULT_H;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_PROXY_URI_RESOLVER_H")]
 	public const int PROXY_URI_RESOLVER_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_REQUESTER_H")]
+	public const int REQUESTER_H;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_REQUEST_DATA_H")]
+	public const int REQUEST_DATA_H;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_REQUEST_FILE_H")]
+	public const int REQUEST_FILE_H;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_REQUEST_H")]
+	public const int REQUEST_H;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_REQUEST_HTTP_H")]
+	public const int REQUEST_HTTP_H;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_REQUEST_SESSION")]
+	public const string REQUEST_SESSION;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_REQUEST_URI")]
+	public const string REQUEST_URI;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SERVER_ASYNC_CONTEXT")]
 	public const string SERVER_ASYNC_CONTEXT;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SERVER_H")]
 	public const int SERVER_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SERVER_INTERFACE")]
 	public const string SERVER_INTERFACE;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SERVER_PORT")]
 	public const string SERVER_PORT;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SERVER_RAW_PATHS")]
 	public const string SERVER_RAW_PATHS;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SERVER_SERVER_HEADER")]
 	public const string SERVER_SERVER_HEADER;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SERVER_SSL_CERT_FILE")]
 	public const string SERVER_SSL_CERT_FILE;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SERVER_SSL_KEY_FILE")]
 	public const string SERVER_SSL_KEY_FILE;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SERVER_TLS_CERTIFICATE")]
+	public const string SERVER_TLS_CERTIFICATE;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_ACCEPT_LANGUAGE")]
 	public const string SESSION_ACCEPT_LANGUAGE;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_ACCEPT_LANGUAGE_AUTO")]
 	public const string SESSION_ACCEPT_LANGUAGE_AUTO;
-	[CCode (cheader_filename = "libsoup/soup.h")]
-	public const string SESSION_ADD_FEATURE;
-	[CCode (cheader_filename = "libsoup/soup.h")]
-	public const string SESSION_ADD_FEATURE_BY_TYPE;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_ASYNC_CONTEXT")]
 	public const string SESSION_ASYNC_CONTEXT;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_ASYNC_H")]
 	public const int SESSION_ASYNC_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_FEATURE_H")]
 	public const int SESSION_FEATURE_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_H")]
 	public const int SESSION_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_HTTPS_ALIASES")]
+	public const string SESSION_HTTPS_ALIASES;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_HTTP_ALIASES")]
+	public const string SESSION_HTTP_ALIASES;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_IDLE_TIMEOUT")]
 	public const string SESSION_IDLE_TIMEOUT;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_MAX_CONNS")]
 	public const string SESSION_MAX_CONNS;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_MAX_CONNS_PER_HOST")]
 	public const string SESSION_MAX_CONNS_PER_HOST;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_PROXY_URI")]
 	public const string SESSION_PROXY_URI;
-	[CCode (cheader_filename = "libsoup/soup.h")]
-	public const string SESSION_REMOVE_FEATURE_BY_TYPE;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_SSL_CA_FILE")]
 	public const string SESSION_SSL_CA_FILE;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_SSL_STRICT")]
 	public const string SESSION_SSL_STRICT;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_SSL_USE_SYSTEM_CA_FILE")]
+	public const string SESSION_SSL_USE_SYSTEM_CA_FILE;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_SYNC_H")]
 	public const int SESSION_SYNC_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_TIMEOUT")]
 	public const string SESSION_TIMEOUT;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_TLS_DATABASE")]
+	public const string SESSION_TLS_DATABASE;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_USER_AGENT")]
 	public const string SESSION_USER_AGENT;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_USE_NTLM")]
 	public const string SESSION_USE_NTLM;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SESSION_USE_THREAD_CONTEXT")]
+	public const string SESSION_USE_THREAD_CONTEXT;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SOCKET_ASYNC_CONTEXT")]
 	public const string SOCKET_ASYNC_CONTEXT;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SOCKET_FLAG_NONBLOCKING")]
 	public const string SOCKET_FLAG_NONBLOCKING;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SOCKET_H")]
 	public const int SOCKET_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SOCKET_IS_SERVER")]
 	public const string SOCKET_IS_SERVER;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SOCKET_LOCAL_ADDRESS")]
 	public const string SOCKET_LOCAL_ADDRESS;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SOCKET_REMOTE_ADDRESS")]
 	public const string SOCKET_REMOTE_ADDRESS;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SOCKET_SSL_CREDENTIALS")]
 	public const string SOCKET_SSL_CREDENTIALS;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SOCKET_SSL_FALLBACK")]
+	public const string SOCKET_SSL_FALLBACK;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SOCKET_SSL_STRICT")]
 	public const string SOCKET_SSL_STRICT;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SOCKET_TIMEOUT")]
 	public const string SOCKET_TIMEOUT;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SOCKET_TLS_CERTIFICATE")]
+	public const string SOCKET_TLS_CERTIFICATE;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SOCKET_TLS_ERRORS")]
+	public const string SOCKET_TLS_ERRORS;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SOCKET_TRUSTED_CERTIFICATE")]
 	public const string SOCKET_TRUSTED_CERTIFICATE;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_SOCKET_USE_THREAD_CONTEXT")]
+	public const string SOCKET_USE_THREAD_CONTEXT;
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_STATUS_H")]
 	public const int STATUS_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_TYPES_H")]
 	public const int TYPES_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_URI_H")]
 	public const int URI_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_VALUE_UTILS_H")]
 	public const int VALUE_UTILS_H;
-	[CCode (cheader_filename = "libsoup/soup.h")]
+	[CCode (cheader_filename = "libsoup/soup.h", cname = "SOUP_XMLRPC_H")]
 	public const int XMLRPC_H;
 	[CCode (cheader_filename = "libsoup/soup.h")]
 	public static unowned GLib.TimeoutSource add_completion (GLib.MainContext? async_context, GLib.SourceFunc function);
diff --git a/vapi/libvala-0.16.vapi b/vapi/libvala-0.16.vapi
index a5b7ba3..7d1979f 100644
--- a/vapi/libvala-0.16.vapi
+++ b/vapi/libvala-0.16.vapi
@@ -35,6 +35,7 @@ namespace Vala {
 		public override V @get (K key);
 		public override Vala.Set<K> get_keys ();
 		public override Vala.Collection<V> get_values ();
+		public override Vala.MapIterator<K,V> map_iterator ();
 		public override bool remove (K key);
 		public override void @set (K key, V value);
 		public GLib.EqualFunc key_equal_func { set; }
@@ -84,11 +85,19 @@ namespace Vala {
 		public abstract V @get (K key);
 		public abstract Vala.Set<K> get_keys ();
 		public abstract Vala.Collection<V> get_values ();
+		public abstract Vala.MapIterator<K,V> map_iterator ();
 		public abstract bool remove (K key);
 		public abstract void @set (K key, V value);
 		public abstract int size { get; }
 	}
 	[CCode (cheader_filename = "valagee.h")]
+	public abstract class MapIterator<K,V> {
+		public MapIterator ();
+		public abstract K get_key ();
+		public abstract V get_value ();
+		public abstract bool next ();
+	}
+	[CCode (cheader_filename = "valagee.h")]
 	public abstract class Set<G> : Vala.Collection<G> {
 		public Set ();
 	}
@@ -1298,7 +1307,7 @@ namespace Vala {
 	[CCode (cheader_filename = "vala.h")]
 	public class Comment {
 		public Comment (string comment, Vala.SourceReference _source_reference);
-		public virtual string content { get; set; }
+		public string content { get; set; }
 		public Vala.SourceReference source_reference { get; set; }
 	}
 	[CCode (cheader_filename = "vala.h")]
@@ -1690,6 +1699,13 @@ namespace Vala {
 		public override string to_qualified_string (Vala.Scope? scope = null);
 	}
 	[CCode (cheader_filename = "vala.h")]
+	public class GirComment : Vala.Comment {
+		public GirComment (string? comment, Vala.SourceReference _source_reference);
+		public Vala.Comment? get_content_for_parameter (string name);
+		public Vala.MapIterator<string,Vala.Comment> parameter_iterator ();
+		public Vala.Comment? return_content { get; set; }
+	}
+	[CCode (cheader_filename = "vala.h")]
 	public class GirParser : Vala.CodeVisitor {
 		public GirParser ();
 		public void parse (Vala.CodeContext context);
@@ -2170,7 +2186,7 @@ namespace Vala {
 		public override void accept (Vala.CodeVisitor visitor);
 		public override void accept_children (Vala.CodeVisitor visitor);
 		public override bool check (Vala.CodeContext context);
-		public bool equals (Vala.Property prop2);
+		public bool compatible (Vala.Property base_property, out string? invalid_match);
 		public override void replace_type (Vala.DataType old_type, Vala.DataType new_type);
 		public Vala.Property base_interface_property { get; }
 		public Vala.Property base_property { get; }
@@ -2406,6 +2422,7 @@ namespace Vala {
 		public override void accept_children (Vala.CodeVisitor visitor);
 		public override bool check (Vala.CodeContext context);
 		public override void emit (Vala.CodeGenerator codegen);
+		public override bool is_constant ();
 		public override bool is_pure ();
 		public override void replace_type (Vala.DataType old_type, Vala.DataType new_type);
 		public Vala.DataType type_reference { get; set; }
@@ -3167,11 +3184,13 @@ namespace Vala {
 		public string copy_function { get; }
 		public string default_value { get; }
 		public bool delegate_target { get; private set; }
+		public string delegate_target_name { get; }
 		public string destroy_function { get; }
 		public string finish_name { get; }
 		public string finish_real_name { get; }
 		public string finish_vfunc_name { get; }
 		public string free_function { get; }
+		public bool free_function_address_of { get; }
 		public string get_value_function { get; }
 		public string header_filenames { get; }
 		public string lower_case_prefix { get; }
@@ -3324,6 +3343,7 @@ namespace Vala {
 		public virtual void generate_error_domain_declaration (Vala.ErrorDomain edomain, Vala.CCodeFile decl_space);
 		public void generate_field_declaration (Vala.Field f, Vala.CCodeFile decl_space);
 		protected string generate_free_func_wrapper (Vala.DataType type);
+		protected string generate_free_function_address_of_wrapper (Vala.DataType type);
 		public Vala.CCodeFunctionCall generate_instance_cast (Vala.CCodeExpression expr, Vala.TypeSymbol type);
 		public virtual void generate_interface_declaration (Vala.Interface iface, Vala.CCodeFile decl_space);
 		public virtual void generate_method_declaration (Vala.Method m, Vala.CCodeFile decl_space);
@@ -3353,6 +3373,7 @@ namespace Vala {
 		public static string get_ccode_declarator_suffix (Vala.DataType type);
 		public static string get_ccode_default_value (Vala.TypeSymbol sym);
 		public static bool get_ccode_delegate_target (Vala.CodeNode node);
+		public static string get_ccode_delegate_target_name (Vala.Variable variable);
 		public static double get_ccode_delegate_target_pos (Vala.CodeNode node);
 		public static string get_ccode_destroy_function (Vala.TypeSymbol sym);
 		public static double get_ccode_destroy_notify_pos (Vala.CodeNode node);
@@ -3361,6 +3382,7 @@ namespace Vala {
 		public static string get_ccode_finish_real_name (Vala.Method m);
 		public static string get_ccode_finish_vfunc_name (Vala.Method m);
 		public static string get_ccode_free_function (Vala.TypeSymbol sym);
+		public static bool get_ccode_free_function_address_of (Vala.Class cl);
 		public static double get_ccode_generic_type_pos (Vala.Method m);
 		public static string get_ccode_get_value_function (Vala.CodeNode sym);
 		public static bool get_ccode_has_copy_function (Vala.Struct st);
@@ -3453,11 +3475,13 @@ namespace Vala {
 		public bool is_lvalue_access_allowed (Vala.DataType type);
 		public bool is_pure_ccode_expression (Vala.CCodeExpression cexpr);
 		public static bool is_reference_counting (Vala.TypeSymbol sym);
+		public bool is_simple_struct_creation (Vala.Variable variable, Vala.Expression expr);
 		public Vala.TargetValue load_temp_value (Vala.TargetValue lvalue);
 		public abstract Vala.TargetValue load_this_parameter (Vala.TypeSymbol sym);
 		public abstract Vala.TargetValue load_variable (Vala.Variable variable, Vala.TargetValue value);
 		public virtual bool method_has_wrapper (Vala.Method method);
 		public unowned Vala.Block? next_closure_block (Vala.Symbol sym);
+		public bool no_implicit_copy (Vala.DataType type);
 		public void pop_context ();
 		public void pop_function ();
 		public void pop_line ();
@@ -3975,6 +3999,23 @@ namespace Vala {
 	[CCode (cheader_filename = "valacodegen.h")]
 	public class GIRWriter : Vala.CodeVisitor {
 		public GIRWriter ();
+		protected virtual string? get_class_comment (Vala.Class c);
+		protected virtual string? get_constant_comment (Vala.Constant c);
+		protected virtual string? get_delegate_comment (Vala.Delegate cb);
+		protected virtual string? get_delegate_return_comment (Vala.Delegate cb);
+		protected virtual string? get_enum_comment (Vala.Enum en);
+		protected virtual string? get_enum_value_comment (Vala.EnumValue ev);
+		protected virtual string? get_error_code_comment (Vala.ErrorCode ecode);
+		protected virtual string? get_error_domain_comment (Vala.ErrorDomain edomain);
+		protected virtual string? get_field_comment (Vala.Field f);
+		protected virtual string? get_interface_comment (Vala.Interface iface);
+		protected virtual string? get_method_comment (Vala.Method m);
+		protected virtual string? get_method_return_comment (Vala.Method m);
+		protected virtual string? get_parameter_comment (Vala.Parameter param);
+		protected virtual string? get_property_comment (Vala.Property prop);
+		protected virtual string? get_signal_comment (Vala.Signal sig);
+		protected virtual string? get_signal_return_comment (Vala.Signal sig);
+		protected virtual string? get_struct_comment (Vala.Struct st);
 		public override void visit_class (Vala.Class cl);
 		public override void visit_constant (Vala.Constant c);
 		public override void visit_creation_method (Vala.CreationMethod m);
diff --git a/vapi/libwnck-3.0.vapi b/vapi/libwnck-3.0.vapi
index 94c52a8..3c89394 100644
--- a/vapi/libwnck-3.0.vapi
+++ b/vapi/libwnck-3.0.vapi
@@ -228,7 +228,7 @@ namespace Wnck {
 		public bool is_virtual ();
 		public virtual signal void name_changed ();
 	}
-	[CCode (cheader_filename = "libwnck/libwnck.h")]
+	[CCode (cheader_filename = "libwnck/libwnck.h", has_type_id = false)]
 	public struct ResourceUsage {
 		public ulong total_bytes_estimate;
 		public ulong pixmap_bytes;
@@ -247,7 +247,7 @@ namespace Wnck {
 		[CCode (cname = "wnck_xid_read_resource_usage")]
 		public static Wnck.ResourceUsage xid_read (Gdk.Display gdk_display, ulong xid);
 	}
-	[CCode (cheader_filename = "libwnck/libwnck.h")]
+	[CCode (cheader_filename = "libwnck/libwnck.h", has_type_id = false)]
 	public struct WorkspaceLayout {
 		public int rows;
 		public int cols;
diff --git a/vapi/libxml-2.0.vapi b/vapi/libxml-2.0.vapi
index 6f88301..1e73482 100644
--- a/vapi/libxml-2.0.vapi
+++ b/vapi/libxml-2.0.vapi
@@ -335,8 +335,11 @@ namespace Xml {
 		public Doc* doc;
 		public int compression;
 		public int standalone;
+		[CCode (cname = "intSubset")]
 		public Dtd* int_subset;
+		[CCode (cname = "extSubset")]
 		public Dtd* ext_subset;
+		[CCode (cname = "oldNs")]
 		public Ns* old_ns;
 		public weak string version;
 		public weak string encoding;
@@ -952,6 +955,24 @@ namespace Xml {
 	public class SchemaValidCtxt {
 	}
 
+	/* xmlsave */
+
+	[Compact]
+	[CCode (cname = "xmlSaveCtxt", free_function = "xmlSaveClose", cheader_filename = "libxml/xmlsave.h")]
+	public class SaveCtxt {
+		[CCode (cname = "xmlSaveToIO")]
+		public SaveCtxt.to_io (OutputWriteCallback iowrite, OutputCloseCallback ioclose, void * ioctx = null, string? encoding = null, int options = 0);
+
+		[CCode (cname = "xmlSaveClose")]
+		public int close ();
+		[CCode (cname = "xmlSaveFlush")]
+		public int flush ();
+		[CCode (cname = "xmlSaveDoc")]
+		public int save_doc (Xml.Doc *doc);
+		[CCode (cname = "xmlSaveTree")]
+		public int save_tree (Xml.Node *node);
+	}
+
 	/* xmlwriter - the XMLWriter implementation */
 
 	[Compact]
diff --git a/vapi/linux.vapi b/vapi/linux.vapi
index 89419a6..199ee80 100644
--- a/vapi/linux.vapi
+++ b/vapi/linux.vapi
@@ -1028,8 +1028,7 @@ namespace Linux {
     [CCode (cheader_filename = "execinfo.h")]
     public int backtrace (void* buffer, int size);
 
-    [CCode (cheader_filename = "execinfo.h")]
-    [CCode (array_length = false)]
+    [CCode (cheader_filename = "execinfo.h", array_length = false)]
     public string[] backtrace_symbols (void* buffer, int size);
 
     [CCode (cheader_filename = "execinfo.h")]
@@ -1283,6 +1282,7 @@ namespace Linux {
 
         [CCode (cname = "struct ifreq", has_type_id = false, cheader_filename = "netinet/in.h,linux/if.h", destroy_function = "")]
         public struct IfReq {
+            [CCode (array_length = false)]
             public char[] ifr_name;
             public Posix.SockAddr ifr_addr;
             public Posix.SockAddr ifr_dstaddr;
@@ -1322,12 +1322,12 @@ namespace Linux {
                 public unowned IfAddrs? ifa_next;
                 public string ifa_name;
                 public uint ifa_flags;
-                public Posix.SockAddr* ifa_addr;
-                public Posix.SockAddr* ifa_netmask;
+                public Posix.SockAddr? ifa_addr;
+                public Posix.SockAddr? ifa_netmask;
                 [CCode (cname = "ifa_ifu.ifu_broadaddr")]
-                public Posix.SockAddr* ifa_ifu_broadaddr;
+                public Posix.SockAddr? ifa_ifu_broadaddr;
                 [CCode (cname = "ifa_ifu.ifu_dstaddr")]
-                public Posix.SockAddr* ifa_ifu_dstaddr;
+                public Posix.SockAddr? ifa_ifu_dstaddr;
                 public void* ifa_data;
         }
 
@@ -3151,11 +3151,24 @@ namespace Linux {
     [CCode (cprefix = "", lower_case_cprefix = "")]
     namespace Rtc {
 
+        [CCode (cname = "struct rtc_time", cheader_filename = "linux/rtc.h", has_type_id = false)]
+        public struct Time {
+            public int tm_sec;
+            public int tm_min;
+            public int tm_hour;
+            public int tm_mday;
+            public int tm_mon;
+            public int tm_year;
+            public int tm_wday;
+            public int tm_yday;
+            public int tm_isdst;
+        }
+
         [CCode (cname = "struct rtc_wkalrm", has_type_id = false, cheader_filename = "linux/rtc.h")]
         public struct WakeAlarm {
             public char enabled;
             public char pending;
-            public Posix.tm time;
+            public Linux.Rtc.Time time;
         }
 
         [CCode (cheader_filename = "linux/rtc.h,sys/ioctl.h")]
@@ -3407,7 +3420,6 @@ namespace Linux {
         [CCode (cheader_filename = "termios.h")]
         public const int TIOCM_DSR;
         [CCode (cheader_filename = "termios.h")]
-        [CCode (cheader_filename = "termios.h")]
         public const int TIOCM_OUT1;
         [CCode (cheader_filename = "termios.h")]
         public const int TIOCM_OUT2;
diff --git a/vapi/mx-1.0.vapi b/vapi/mx-1.0.vapi
index 8454451..189378c 100644
--- a/vapi/mx-1.0.vapi
+++ b/vapi/mx-1.0.vapi
@@ -3,7 +3,7 @@
 [CCode (cprefix = "Mx", gir_namespace = "Mx", gir_version = "1.0", lower_case_cprefix = "mx_")]
 namespace Mx {
 	[CCode (cheader_filename = "mx/mx.h", type_id = "mx_action_get_type ()")]
-	public class Action : GLib.InitiallyUnowned {
+	public class Action : GLib.InitiallyUnowned, GLib.Action {
 		[CCode (has_construct_function = false)]
 		public Action ();
 		[CCode (has_construct_function = false)]
@@ -11,15 +11,20 @@ namespace Mx {
 		public bool get_active ();
 		public unowned string get_display_name ();
 		public unowned string get_icon ();
-		public unowned string get_name ();
 		public void set_active (bool active);
 		public void set_display_name (string name);
 		public void set_icon (string name);
 		public void set_name (string name);
+		[CCode (has_construct_function = false)]
+		public Action.stateful (string name, GLib.VariantType? parameter_type, GLib.Variant state);
+		[CCode (has_construct_function = false)]
+		public Action.with_parameter (string name, GLib.VariantType? parameter_type);
+		[Deprecated (since = "1.4")]
 		public bool active { get; set; }
 		public string display_name { get; set; }
 		public string icon { get; set; }
-		public string name { get; set; }
+		public signal void activate (GLib.Variant? parameter);
+		[Deprecated (since = "1.4")]
 		public virtual signal void activated ();
 	}
 	[CCode (cheader_filename = "mx/mx.h", type_id = "mx_actor_manager_get_type ()")]
@@ -95,6 +100,7 @@ namespace Mx {
 		public Mx.ApplicationFlags get_flags ();
 		public unowned GLib.List<Mx.Window> get_windows ();
 		public void invoke_action (string name);
+		public void invoke_action_with_parameter (string name, GLib.Variant variant);
 		public bool is_running ();
 		public void quit ();
 		[NoWrapper]
@@ -163,6 +169,8 @@ namespace Mx {
 		public void set_orientation (Mx.Orientation orientation);
 		public void set_scroll_to_focused (bool scroll_to_focused);
 		public void set_spacing (uint spacing);
+		[CCode (has_construct_function = false, type = "ClutterActor*")]
+		public BoxLayout.with_orientation (Mx.Orientation orientation);
 		public bool enable_animations { get; set; }
 		public Mx.Orientation orientation { get; set; }
 		public bool scroll_to_focused { get; set; }
@@ -358,18 +366,27 @@ namespace Mx {
 		public Entry ();
 		public unowned Clutter.Actor get_clutter_text ();
 		public unowned string get_hint_text ();
+		public unowned string get_icon_highlight_suffix ();
 		public unichar get_password_char ();
 		public unowned string get_text ();
 		public void set_hint_text (string text);
+		public void set_icon_highlight_suffix (string suffix);
 		public void set_password_char (unichar password_char);
 		public void set_primary_icon_from_file (string filename);
+		public void set_primary_icon_tooltip_text (string text);
 		public void set_secondary_icon_from_file (string filename);
+		public void set_secondary_icon_tooltip_text (string text);
 		public void set_text (string text);
 		[CCode (has_construct_function = false, type = "ClutterActor*")]
 		public Entry.with_text (string text);
 		public Clutter.Text clutter_text { get; }
 		public string hint_text { get; set; }
+		public string icon_highlight_suffix { get; set; }
 		public uint password_char { get; set; }
+		[NoAccessorMethod]
+		public string primary_icon_tooltip_text { owned get; set; }
+		[NoAccessorMethod]
+		public string secondary_icon_tooltip_text { owned get; set; }
 		public string text { get; set; }
 		public virtual signal void primary_icon_clicked ();
 		public virtual signal void secondary_icon_clicked ();
@@ -514,10 +531,10 @@ namespace Mx {
 		public uint get_scale_width_threshold ();
 		public uint get_transition_duration ();
 		public void set_allow_upscale (bool allow);
-		public bool set_from_buffer (uint8 buffer, size_t buffer_size, GLib.DestroyNotify buffer_free_func) throws GLib.Error;
-		public bool set_from_buffer_at_size (uint8 buffer, size_t buffer_size, GLib.DestroyNotify buffer_free_func, int width, int height) throws GLib.Error;
+		public bool set_from_buffer ([CCode (array_length_cname = "buffer_size", array_length_pos = 1.5, array_length_type = "gsize", type = "guchar*")] owned uint8[]? buffer, GLib.DestroyNotify? buffer_free_func) throws GLib.Error;
+		public bool set_from_buffer_at_size ([CCode (array_length_cname = "buffer_size", array_length_pos = 1.5, array_length_type = "gsize", type = "guchar*")] owned uint8[]? buffer, GLib.DestroyNotify? buffer_free_func, int width, int height) throws GLib.Error;
 		public bool set_from_cogl_texture (Cogl.Handle texture);
-		public bool set_from_data (uint8 data, Cogl.PixelFormat pixel_format, int width, int height, int rowstride) throws GLib.Error;
+		public bool set_from_data ([CCode (array_length = false, type = "guchar*")] uint8[]? data, Cogl.PixelFormat pixel_format, int width, int height, int rowstride) throws GLib.Error;
 		public bool set_from_file (string filename) throws GLib.Error;
 		public bool set_from_file_at_size (string filename, int width, int height) throws GLib.Error;
 		public void set_image_rotation (float rotation);
@@ -560,6 +577,7 @@ namespace Mx {
 		public double get_acceleration_factor ();
 		public uint get_clamp_duration ();
 		public ulong get_clamp_mode ();
+		public bool get_clamp_to_center ();
 		public double get_deceleration ();
 		public uint32 get_mouse_button ();
 		public double get_overshoot ();
@@ -568,6 +586,7 @@ namespace Mx {
 		public void set_acceleration_factor (double acceleration_factor);
 		public void set_clamp_duration (uint clamp_duration);
 		public void set_clamp_mode (ulong clamp_mode);
+		public void set_clamp_to_center (bool clamp_to_center);
 		public void set_deceleration (double rate);
 		public void set_mouse_button (uint32 button);
 		public void set_overshoot (double overshoot);
@@ -577,10 +596,13 @@ namespace Mx {
 		public double acceleration_factor { get; set; }
 		public uint clamp_duration { get; set; }
 		public ulong clamp_mode { get; set; }
+		public bool clamp_to_center { get; set; }
 		public double deceleration { get; set; }
 		public uint mouse_button { get; set; }
 		public double overshoot { get; set; }
 		public Mx.ScrollPolicy scroll_policy { get; set; }
+		[NoAccessorMethod]
+		public Mx.KineticScrollViewState state { get; }
 		public bool use_captured { get; set; }
 	}
 	[CCode (cheader_filename = "mx/mx.h", type_id = "mx_label_get_type ()")]
@@ -590,12 +612,14 @@ namespace Mx {
 		public unowned Clutter.Actor get_clutter_text ();
 		public bool get_fade_out ();
 		public bool get_line_wrap ();
+		public bool get_show_tooltip ();
 		public unowned string get_text ();
 		public bool get_use_markup ();
 		public Mx.Align get_x_align ();
 		public Mx.Align get_y_align ();
 		public void set_fade_out (bool fade);
 		public void set_line_wrap (bool line_wrap);
+		public void set_show_tooltip (bool show_tooltip);
 		public void set_text (string text);
 		public void set_use_markup (bool use_markup);
 		public void set_x_align (Mx.Align align);
@@ -605,6 +629,7 @@ namespace Mx {
 		public Clutter.Text clutter_text { get; }
 		public bool fade_out { get; set; }
 		public bool line_wrap { get; set; }
+		public bool show_tooltip { get; set; }
 		public string text { get; set; }
 		public bool use_markup { get; set; }
 		public Mx.Align x_align { get; set; }
@@ -779,13 +804,13 @@ namespace Mx {
 	public class Stack : Mx.Widget, Atk.Implementor, Clutter.Animatable, Clutter.Container, Clutter.Scriptable, Mx.Focusable, Mx.Stylable {
 		[CCode (has_construct_function = false, type = "ClutterActor*")]
 		public Stack ();
-		public bool child_get_fill_space (Clutter.Actor child);
+		public bool child_get_crop (Clutter.Actor child);
 		public bool child_get_fit (Clutter.Actor child);
 		public Mx.Align child_get_x_align (Clutter.Actor child);
 		public bool child_get_x_fill (Clutter.Actor child);
 		public Mx.Align child_get_y_align (Clutter.Actor child);
 		public bool child_get_y_fill (Clutter.Actor child);
-		public void child_set_fill_space (Clutter.Actor child, bool fill_space);
+		public void child_set_crop (Clutter.Actor child, bool crop);
 		public void child_set_fit (Clutter.Actor child, bool fit);
 		public void child_set_x_align (Clutter.Actor child, Mx.Align x_align);
 		public void child_set_x_fill (Clutter.Actor child, bool x_fill);
@@ -989,6 +1014,7 @@ namespace Mx {
 		public static bool is_in_browse_mode ();
 		public void set_text (string text);
 		public void set_tip_area (Clutter.Geometry area);
+		public void set_tip_area_from_actor (Clutter.Actor actor);
 		public void show ();
 		public string text { get; set; }
 		public Clutter.Geometry tip_area { get; set; }
@@ -1027,6 +1053,8 @@ namespace Mx {
 		public void long_press_query (Clutter.ButtonEvent event);
 		[NoWrapper]
 		public virtual void paint_background (Clutter.Actor background, Clutter.Color color);
+		[CCode (cname = "mx_widget_paint_background")]
+		public void paint_background_with_defaults ();
 		public void set_disabled (bool disabled);
 		public void set_menu (Mx.Menu menu);
 		public void set_tooltip_delay (uint delay);
@@ -1235,6 +1263,13 @@ namespace Mx {
 		FIT,
 		CROP
 	}
+	[CCode (cheader_filename = "mx/mx.h", cprefix = "MX_KINETIC_SCROLL_VIEW_STATE_")]
+	public enum KineticScrollViewState {
+		IDLE,
+		PANNING,
+		SCROLLING,
+		CLAMPING
+	}
 	[CCode (cheader_filename = "mx/mx.h", cprefix = "MX_LONG_PRESS_")]
 	public enum LongPressAction {
 		QUERY,
@@ -1302,17 +1337,17 @@ namespace Mx {
 	public delegate void ActionCallbackFunc (Mx.Action action);
 	[CCode (cheader_filename = "mx/mx.h", instance_pos = 2.9)]
 	public delegate void ClipboardCallbackFunc (Mx.Clipboard clipboard, string text);
-	[CCode (cheader_filename = "mx/mx.h")]
+	[CCode (cheader_filename = "mx/mx.h", cname = "MX_MAJOR_VERSION")]
 	public const int MAJOR_VERSION;
-	[CCode (cheader_filename = "mx/mx.h")]
+	[CCode (cheader_filename = "mx/mx.h", cname = "MX_MICRO_VERSION")]
 	public const int MICRO_VERSION;
-	[CCode (cheader_filename = "mx/mx.h")]
+	[CCode (cheader_filename = "mx/mx.h", cname = "MX_MINOR_VERSION")]
 	public const int MINOR_VERSION;
-	[CCode (cheader_filename = "mx/mx.h")]
+	[CCode (cheader_filename = "mx/mx.h", cname = "MX_PARAM_TRANSLATEABLE")]
 	public const int PARAM_TRANSLATEABLE;
-	[CCode (cheader_filename = "mx/mx.h")]
+	[CCode (cheader_filename = "mx/mx.h", cname = "MX_VERSION_HEX")]
 	public const int VERSION_HEX;
-	[CCode (cheader_filename = "mx/mx.h")]
+	[CCode (cheader_filename = "mx/mx.h", cname = "MX_VERSION_S")]
 	public const string VERSION_S;
 	[CCode (cheader_filename = "mx/mx.h")]
 	public static void actor_box_clamp_to_pixels (Clutter.ActorBox box);
diff --git a/vapi/pango.vapi b/vapi/pango.vapi
index cf7bee1..c22073c 100644
--- a/vapi/pango.vapi
+++ b/vapi/pango.vapi
@@ -796,7 +796,7 @@ namespace Pango {
 		NORMAL,
 		SMALL_CAPS
 	}
-	[CCode (cheader_filename = "pango/pango.h", cprefix = "PANGO_WEIGHT_")]
+	[CCode (cheader_filename = "pango/pango.h", cprefix = "PANGO_WEIGHT_", default_value = "PANGO_WEIGHT_NORMAL")]
 	public enum Weight {
 		THIN,
 		ULTRALIGHT,
diff --git a/vapi/pangocairo.vapi b/vapi/pangocairo.vapi
index 3f23329..ce282ba 100644
--- a/vapi/pangocairo.vapi
+++ b/vapi/pangocairo.vapi
@@ -15,8 +15,8 @@ namespace Pango {
 		public static unowned Pango.FontMap get_default ();
 		public Cairo.FontType get_font_type ();
 		public double get_resolution ();
-		public static unowned Pango.FontMap @new ();
-		public static unowned Pango.FontMap new_for_font_type (Cairo.FontType fonttype);
+		public static Pango.FontMap @new ();
+		public static Pango.FontMap new_for_font_type (Cairo.FontType fonttype);
 		public void set_default ();
 		public void set_resolution (double dpi);
 	}
@@ -41,6 +41,12 @@ namespace Pango {
 	[CCode (cheader_filename = "pango/pangocairo.h")]
 	public static void cairo_error_underline_path (Cairo.Context cr, double x, double y, double width, double height);
 	[CCode (cheader_filename = "pango/pangocairo.h")]
+	public static unowned Pango.FontMap cairo_font_map_get_default ();
+	[CCode (cheader_filename = "pango/pangocairo.h")]
+	public static Pango.FontMap cairo_font_map_new ();
+	[CCode (cheader_filename = "pango/pangocairo.h")]
+	public static Pango.FontMap cairo_font_map_new_for_font_type (Cairo.FontType fonttype);
+	[CCode (cheader_filename = "pango/pangocairo.h")]
 	public static void cairo_glyph_string_path (Cairo.Context cr, Pango.Font font, Pango.GlyphString glyphs);
 	[CCode (cheader_filename = "pango/pangocairo.h")]
 	public static void cairo_layout_line_path (Cairo.Context cr, Pango.LayoutLine line);
diff --git a/vapi/pixman-1.vapi b/vapi/pixman-1.vapi
index b1633b4..883c537 100644
--- a/vapi/pixman-1.vapi
+++ b/vapi/pixman-1.vapi
@@ -21,6 +21,10 @@ namespace Pixman {
 
 	[SimpleType, IntegerType (rank = 6), CCode (cname = "pixman_fixed_t")]
 	public struct Fixed : Fixed1616 {
+		[CCode (cname = "pixman_double_to_fixed")]
+		public Fixed.double (double val);
+		[CCode (cname = "pixman_int_to_fixed")]
+		public Fixed.int (int val);
 		public int to_int ();
 		public double to_double ();
 		public Fixed frac ();
@@ -92,10 +96,7 @@ namespace Pixman {
 
 	[CCode (cname = "pixman_region16_t", has_type_id = false, cprefix = "pixman_region_", destroy_function = "pixman_region_fini")]
 	public struct Region16 {
-		public int16 x;
-		public int16 y;
-		public uint16 width;
-		public uint16 height;
+		Pixman.Box16 extents;
 
 		public Region16 ();
 		public Region16.rect (int x, int y, uint width, uint height);
@@ -117,9 +118,10 @@ namespace Pixman {
 		public bool contains_point (int x, int y, Pixman.Box16 box);
 		public Pixman.RegionOverlap contains_rectangle (Pixman.Box16 prect);
 		public bool not_empty ();
-		public Pixman.Box16* extents ();
+		[CCode (cname = "pixman_region_extents")]
+		public unowned Pixman.Box16? get_extents ();
 		public int n_rects ();
-		public Pixman.Box16[] rectangles ();
+		public unowned Pixman.Box16[] rectangles ();
 		public bool equal (Pixman.Region16 region2);
 		public bool selfcheck ();
 		public void reset (Pixman.Box16 box);
@@ -140,10 +142,7 @@ namespace Pixman {
 
 	[CCode (cname = "pixman_region32_t", has_type_id = false, destroy_function = "pixman_region32_fini")]
 	public struct Region32 {
-		public int32 x;
-		public int32 y;
-		public uint32 width;
-		public uint32 height;
+		public Pixman.Box32 extents;
 
 		public Region32 ();
 		public Region32.rect (int x, int y, uint width, uint height);
@@ -165,9 +164,10 @@ namespace Pixman {
 		public bool contains_point (int x, int y, Pixman.Box32 box);
 		public Pixman.RegionOverlap contains_rectangle (Pixman.Box32 prect);
 		public bool not_empty ();
-		public Pixman.Box32* extents ();
+		[CCode (cname = "pixman_region32_extents")]
+		public unowned Pixman.Box32? get_extents ();
 		public int n_rects ();
-		public Pixman.Box32[] rectangles ();
+		public unowned Pixman.Box32[] rectangles ();
 		public bool equal (Pixman.Region32 region2);
 		public bool selfcheck ();
 		public void reset (Pixman.Box32 box);
diff --git a/vapi/poppler-glib.vapi b/vapi/poppler-glib.vapi
index 5759cc1..e2c5ffd 100644
--- a/vapi/poppler-glib.vapi
+++ b/vapi/poppler-glib.vapi
@@ -1,32 +1,59 @@
 /* poppler-glib.vapi generated by vapigen, do not modify. */
 
+[CCode (cprefix = "Poppler", gir_namespace = "Poppler", gir_version = "0.18", lower_case_cprefix = "poppler_")]
 namespace Poppler {
-	[CCode (cheader_filename = "poppler.h", copy_function = "poppler_action_copy", type_id = "poppler_action_get_type ()")]
+	namespace AnnotTextIcon {
+		[CCode (cheader_filename = "poppler.h", cname = "POPPLER_ANNOT_TEXT_ICON_CIRCLE")]
+		public const string CIRCLE;
+		[CCode (cheader_filename = "poppler.h", cname = "POPPLER_ANNOT_TEXT_ICON_COMMENT")]
+		public const string COMMENT;
+		[CCode (cheader_filename = "poppler.h", cname = "POPPLER_ANNOT_TEXT_ICON_CROSS")]
+		public const string CROSS;
+		[CCode (cheader_filename = "poppler.h", cname = "POPPLER_ANNOT_TEXT_ICON_HELP")]
+		public const string HELP;
+		[CCode (cheader_filename = "poppler.h", cname = "POPPLER_ANNOT_TEXT_ICON_INSERT")]
+		public const string INSERT;
+		[CCode (cheader_filename = "poppler.h", cname = "POPPLER_ANNOT_TEXT_ICON_KEY")]
+		public const string KEY;
+		[CCode (cheader_filename = "poppler.h", cname = "POPPLER_ANNOT_TEXT_ICON_NEW_PARAGRAPH")]
+		public const string NEW_PARAGRAPH;
+		[CCode (cheader_filename = "poppler.h", cname = "POPPLER_ANNOT_TEXT_ICON_NOTE")]
+		public const string NOTE;
+		[CCode (cheader_filename = "poppler.h", cname = "POPPLER_ANNOT_TEXT_ICON_PARAGRAPH")]
+		public const string PARAGRAPH;
+	}
+	[CCode (cheader_filename = "poppler.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "poppler_action_get_type ()")]
 	[Compact]
 	public class Action {
 		public Poppler.ActionAny any;
 		public Poppler.ActionGotoDest goto_dest;
 		public Poppler.ActionGotoRemote goto_remote;
+		public Poppler.ActionJavascript javascript;
 		public Poppler.ActionLaunch launch;
 		public Poppler.ActionMovie movie;
 		public Poppler.ActionNamed named;
+		public Poppler.ActionOCGState ocg_state;
+		public Poppler.ActionRendition rendition;
 		public Poppler.ActionType type;
 		public Poppler.ActionUri uri;
 		public Poppler.Action copy ();
+		public void free ();
 	}
-	[CCode (cheader_filename = "poppler.h")]
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_annot_get_type ()")]
 	public class Annot : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected Annot ();
 		public Poppler.AnnotType get_annot_type ();
-		public unowned Poppler.Color get_color ();
-		public unowned string get_contents ();
+		public Poppler.Color get_color ();
+		public string get_contents ();
 		public Poppler.AnnotFlag get_flags ();
-		public unowned string get_modified ();
-		public unowned string get_name ();
+		public string get_modified ();
+		public string get_name ();
+		public int get_page_index ();
+		public void set_color (Poppler.Color? poppler_color);
 		public void set_contents (string contents);
 	}
-	[CCode (cheader_filename = "poppler.h", copy_function = "poppler_annot_callout_line_copy", type_id = "poppler_annot_callout_line_get_type ()")]
+	[CCode (cheader_filename = "poppler.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "poppler_annot_callout_line_get_type ()")]
 	[Compact]
 	public class AnnotCalloutLine {
 		public bool multiline;
@@ -38,60 +65,88 @@ namespace Poppler {
 		public double y3;
 		[CCode (has_construct_function = false)]
 		public AnnotCalloutLine ();
-		public unowned Poppler.AnnotCalloutLine copy ();
+		public Poppler.AnnotCalloutLine copy ();
+		public void free ();
 	}
-	[CCode (cheader_filename = "poppler.h")]
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_annot_file_attachment_get_type ()")]
+	public class AnnotFileAttachment : Poppler.AnnotMarkup {
+		[CCode (has_construct_function = false)]
+		protected AnnotFileAttachment ();
+		public Poppler.Attachment get_attachment ();
+		public string get_name ();
+	}
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_annot_free_text_get_type ()")]
 	public class AnnotFreeText : Poppler.AnnotMarkup {
 		[CCode (has_construct_function = false)]
 		protected AnnotFreeText ();
-		public unowned Poppler.AnnotCalloutLine get_callout_line ();
+		public Poppler.AnnotCalloutLine get_callout_line ();
 		public Poppler.AnnotFreeTextQuadding get_quadding ();
 	}
-	[CCode (cheader_filename = "poppler.h", copy_function = "poppler_annot_mapping_copy", type_id = "poppler_annot_mapping_get_type ()")]
+	[CCode (cheader_filename = "poppler.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "poppler_annot_mapping_get_type ()")]
 	[Compact]
 	public class AnnotMapping {
-		public weak Poppler.Annot annot;
+		public Poppler.Annot annot;
 		public Poppler.Rectangle area;
 		[CCode (has_construct_function = false)]
 		public AnnotMapping ();
-		public unowned Poppler.AnnotMapping copy ();
+		public Poppler.AnnotMapping copy ();
+		public void free ();
 	}
-	[CCode (cheader_filename = "poppler.h")]
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_annot_markup_get_type ()")]
 	public class AnnotMarkup : Poppler.Annot {
 		[CCode (has_construct_function = false)]
 		protected AnnotMarkup ();
 		public GLib.Date get_date ();
 		public Poppler.AnnotExternalDataType get_external_data ();
-		public unowned string get_label ();
+		public string get_label ();
 		public double get_opacity ();
 		public bool get_popup_is_open ();
-		public bool get_popup_rectangle (Poppler.Rectangle poppler_rect);
+		public bool get_popup_rectangle (out Poppler.Rectangle poppler_rect);
 		public Poppler.AnnotMarkupReplyType get_reply_to ();
-		public unowned string get_subject ();
+		public string get_subject ();
 		public bool has_popup ();
+		public void set_label (string? label);
+		public void set_opacity (double opacity);
+		public void set_popup (Poppler.Rectangle popup_rect);
+		public void set_popup_is_open (bool is_open);
 	}
-	[CCode (cheader_filename = "poppler.h")]
-	public class AnnotText : Poppler.AnnotMarkup {
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_annot_movie_get_type ()")]
+	public class AnnotMovie : Poppler.Annot {
 		[CCode (has_construct_function = false)]
-		protected AnnotText ();
-		public unowned string get_icon ();
+		protected AnnotMovie ();
+		public unowned Poppler.Movie get_movie ();
+		public string get_title ();
+	}
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_annot_screen_get_type ()")]
+	public class AnnotScreen : Poppler.Annot {
+		[CCode (has_construct_function = false)]
+		protected AnnotScreen ();
+		public unowned Poppler.Action get_action ();
+	}
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_annot_text_get_type ()")]
+	public class AnnotText : Poppler.AnnotMarkup {
+		[CCode (has_construct_function = false, type = "PopplerAnnot*")]
+		public AnnotText (Poppler.Document doc, Poppler.Rectangle rect);
+		public string get_icon ();
 		public bool get_is_open ();
 		public Poppler.AnnotTextState get_state ();
+		public void set_icon (string icon);
+		public void set_is_open (bool is_open);
 	}
-	[CCode (cheader_filename = "poppler.h")]
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_attachment_get_type ()")]
 	public class Attachment : GLib.Object {
-		public weak GLib.StringBuilder checksum;
+		public GLib.StringBuilder checksum;
 		public GLib.Time ctime;
-		public weak string description;
+		public string description;
 		public GLib.Time mtime;
-		public weak string name;
+		public string name;
 		public size_t size;
 		[CCode (has_construct_function = false)]
 		protected Attachment ();
 		public bool save (string filename) throws GLib.Error;
 		public bool save_to_callback (Poppler.AttachmentSaveFunc save_func) throws GLib.Error;
 	}
-	[CCode (cheader_filename = "poppler.h", copy_function = "poppler_color_copy", type_id = "poppler_color_get_type ()")]
+	[CCode (cheader_filename = "poppler.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "poppler_color_get_type ()")]
 	[Compact]
 	public class Color {
 		public uint16 blue;
@@ -99,9 +154,10 @@ namespace Poppler {
 		public uint16 red;
 		[CCode (has_construct_function = false)]
 		public Color ();
-		public unowned Poppler.Color copy ();
+		public Poppler.Color copy ();
+		public void free ();
 	}
-	[CCode (cheader_filename = "poppler.h", copy_function = "poppler_dest_copy", type_id = "poppler_dest_get_type ()")]
+	[CCode (cheader_filename = "poppler.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "poppler_dest_get_type ()")]
 	[Compact]
 	public class Dest {
 		public double bottom;
@@ -109,36 +165,51 @@ namespace Poppler {
 		public uint change_top;
 		public uint change_zoom;
 		public double left;
-		public weak string named_dest;
+		public string named_dest;
 		public int page_num;
 		public double right;
 		public double top;
 		public Poppler.DestType type;
 		public double zoom;
 		public Poppler.Dest copy ();
+		public void free ();
 	}
-	[CCode (cheader_filename = "poppler.h")]
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_document_get_type ()")]
 	public class Document : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected Document ();
-		public unowned Poppler.Dest find_dest (string link_name);
+		public Poppler.Dest find_dest (string link_name);
 		[CCode (has_construct_function = false)]
-		public Document.from_data (string data, int length, string password) throws GLib.Error;
+		public Document.from_data (string data, int length, string? password) throws GLib.Error;
 		[CCode (has_construct_function = false)]
 		public Document.from_file (string uri, string? password) throws GLib.Error;
-		public unowned GLib.List get_attachments ();
-		public unowned Poppler.FormField get_form_field (int id);
+		public GLib.List<Poppler.Attachment> get_attachments ();
+		public string get_author ();
+		public long get_creation_date ();
+		public string get_creator ();
+		public Poppler.FormField get_form_field (int id);
+		public bool get_id (out string permanent_id, out string update_id);
+		public string get_keywords ();
+		public string get_metadata ();
+		public long get_modification_date ();
+		public uint get_n_attachments ();
 		public int get_n_pages ();
-		public unowned Poppler.Page get_page (int index);
-		public unowned Poppler.Page get_page_by_label (string label);
+		public Poppler.Page get_page (int index);
+		public Poppler.Page get_page_by_label (string label);
+		public Poppler.PageLayout get_page_layout ();
+		public Poppler.PageMode get_page_mode ();
+		public void get_pdf_version (out uint major_version, out uint minor_version);
+		public string get_pdf_version_string ();
+		public Poppler.Permissions get_permissions ();
+		public string get_producer ();
+		public string get_subject ();
+		public string get_title ();
 		public bool has_attachments ();
+		public bool is_linearized ();
 		public bool save (string uri) throws GLib.Error;
 		public bool save_a_copy (string uri) throws GLib.Error;
-		[NoAccessorMethod]
 		public string author { owned get; }
-		[NoAccessorMethod]
 		public int creation_date { get; }
-		[NoAccessorMethod]
 		public string creator { owned get; }
 		[NoAccessorMethod]
 		public string format { owned get; }
@@ -146,49 +217,44 @@ namespace Poppler {
 		public uint format_major { get; }
 		[NoAccessorMethod]
 		public uint format_minor { get; }
-		[NoAccessorMethod]
 		public string keywords { owned get; }
 		[NoAccessorMethod]
-		public string linearized { owned get; }
-		[NoAccessorMethod]
+		public bool linearized { get; }
 		public string metadata { owned get; }
 		[NoAccessorMethod]
 		public int mod_date { get; }
-		[NoAccessorMethod]
 		public Poppler.PageLayout page_layout { get; }
-		[NoAccessorMethod]
 		public Poppler.PageMode page_mode { get; }
-		[NoAccessorMethod]
 		public Poppler.Permissions permissions { get; }
-		[NoAccessorMethod]
 		public string producer { owned get; }
-		[NoAccessorMethod]
 		public string subject { owned get; }
-		[NoAccessorMethod]
 		public string title { owned get; }
 		[NoAccessorMethod]
 		public Poppler.ViewerPreferences viewer_preferences { get; }
 	}
-	[CCode (cheader_filename = "poppler.h")]
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_font_info_get_type ()")]
 	public class FontInfo : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public FontInfo (Poppler.Document document);
 		public void free ();
-		public bool scan (int n_pages, out unowned Poppler.FontsIter iter);
+		public bool scan (int n_pages, out Poppler.FontsIter iter);
 	}
-	[CCode (cheader_filename = "poppler.h", copy_function = "poppler_fonts_iter_copy", type_id = "poppler_fonts_iter_get_type ()")]
+	[CCode (cheader_filename = "poppler.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "poppler_fonts_iter_get_type ()")]
 	[Compact]
 	public class FontsIter {
 		public Poppler.FontsIter copy ();
+		public void free ();
+		public unowned string get_encoding ();
 		public unowned string get_file_name ();
 		public Poppler.FontType get_font_type ();
 		public unowned string get_full_name ();
 		public unowned string get_name ();
+		public unowned string get_substitute_name ();
 		public bool is_embedded ();
 		public bool is_subset ();
 		public bool next ();
 	}
-	[CCode (cheader_filename = "poppler.h")]
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_form_field_get_type ()")]
 	public class FormField : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected FormField ();
@@ -199,38 +265,43 @@ namespace Poppler {
 		public bool choice_commit_on_change ();
 		public bool choice_do_spell_check ();
 		public Poppler.FormChoiceType choice_get_choice_type ();
-		public unowned string choice_get_item (int index);
+		public string choice_get_item (int index);
 		public int choice_get_n_items ();
-		public unowned string choice_get_text ();
+		public string choice_get_text ();
 		public bool choice_is_editable ();
 		public bool choice_is_item_selected (int index);
 		public void choice_select_item (int index);
 		public void choice_set_text (string text);
 		public void choice_toggle_item (int index);
 		public void choice_unselect_all ();
+		public unowned Poppler.Action get_action ();
 		public Poppler.FormFieldType get_field_type ();
 		public double get_font_size ();
 		public int get_id ();
+		public string get_mapping_name ();
+		public string get_name ();
+		public string get_partial_name ();
 		public bool is_read_only ();
 		public bool text_do_scroll ();
 		public bool text_do_spell_check ();
 		public int text_get_max_len ();
-		public unowned string text_get_text ();
+		public string text_get_text ();
 		public Poppler.FormTextType text_get_text_type ();
 		public bool text_is_password ();
 		public bool text_is_rich_text ();
 		public void text_set_text (string text);
 	}
-	[CCode (cheader_filename = "poppler.h", copy_function = "poppler_form_field_mapping_copy", type_id = "poppler_form_field_mapping_get_type ()")]
+	[CCode (cheader_filename = "poppler.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "poppler_form_field_mapping_get_type ()")]
 	[Compact]
 	public class FormFieldMapping {
 		public Poppler.Rectangle area;
-		public weak Poppler.FormField field;
+		public Poppler.FormField field;
 		[CCode (has_construct_function = false)]
 		public FormFieldMapping ();
 		public Poppler.FormFieldMapping copy ();
+		public void free ();
 	}
-	[CCode (cheader_filename = "poppler.h", copy_function = "poppler_image_mapping_copy", type_id = "poppler_image_mapping_get_type ()")]
+	[CCode (cheader_filename = "poppler.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "poppler_image_mapping_get_type ()")]
 	[Compact]
 	public class ImageMapping {
 		public Poppler.Rectangle area;
@@ -238,19 +309,21 @@ namespace Poppler {
 		[CCode (has_construct_function = false)]
 		public ImageMapping ();
 		public Poppler.ImageMapping copy ();
+		public void free ();
 	}
-	[CCode (cheader_filename = "poppler.h", copy_function = "poppler_index_iter_copy", type_id = "poppler_index_iter_get_type ()")]
+	[CCode (cheader_filename = "poppler.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "poppler_index_iter_get_type ()")]
 	[Compact]
 	public class IndexIter {
 		[CCode (has_construct_function = false)]
 		public IndexIter (Poppler.Document document);
 		public Poppler.IndexIter copy ();
-		public unowned Poppler.Action get_action ();
-		public unowned Poppler.IndexIter get_child ();
+		public void free ();
+		public Poppler.Action get_action ();
+		public Poppler.IndexIter get_child ();
 		public bool is_open ();
 		public bool next ();
 	}
-	[CCode (cheader_filename = "poppler.h")]
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_layer_get_type ()")]
 	public class Layer : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected Layer ();
@@ -261,27 +334,47 @@ namespace Poppler {
 		public bool is_visible ();
 		public void show ();
 	}
-	[CCode (cheader_filename = "poppler.h", copy_function = "poppler_layers_iter_copy", type_id = "poppler_layers_iter_get_type ()")]
+	[CCode (cheader_filename = "poppler.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "poppler_layers_iter_get_type ()")]
 	[Compact]
 	public class LayersIter {
 		[CCode (has_construct_function = false)]
 		public LayersIter (Poppler.Document document);
-		public unowned Poppler.LayersIter copy ();
-		public unowned Poppler.LayersIter get_child ();
-		public unowned Poppler.Layer get_layer ();
-		public unowned string get_title ();
+		public Poppler.LayersIter copy ();
+		public void free ();
+		public Poppler.LayersIter get_child ();
+		public Poppler.Layer get_layer ();
+		public string get_title ();
 		public bool next ();
 	}
-	[CCode (cheader_filename = "poppler.h", copy_function = "poppler_link_mapping_copy", type_id = "poppler_link_mapping_get_type ()")]
+	[CCode (cheader_filename = "poppler.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "poppler_link_mapping_get_type ()")]
 	[Compact]
 	public class LinkMapping {
-		public weak Poppler.Action action;
+		public Poppler.Action action;
 		public Poppler.Rectangle area;
 		[CCode (has_construct_function = false)]
 		public LinkMapping ();
 		public Poppler.LinkMapping copy ();
+		public void free ();
 	}
-	[CCode (cheader_filename = "poppler.h")]
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_media_get_type ()")]
+	public class Media : GLib.Object {
+		[CCode (has_construct_function = false)]
+		protected Media ();
+		public unowned string get_filename ();
+		public unowned string get_mime_type ();
+		public bool is_embedded ();
+		public bool save (string filename) throws GLib.Error;
+		public bool save_to_callback (Poppler.MediaSaveFunc save_func) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_movie_get_type ()")]
+	public class Movie : GLib.Object {
+		[CCode (has_construct_function = false)]
+		protected Movie ();
+		public unowned string get_filename ();
+		public bool need_poster ();
+		public bool show_controls ();
+	}
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_ps_file_get_type ()")]
 	public class PSFile : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public PSFile (Poppler.Document document, string filename, int first_page, int n_pages);
@@ -289,42 +382,46 @@ namespace Poppler {
 		public void set_duplex (bool duplex);
 		public void set_paper_size (double width, double height);
 	}
-	[CCode (cheader_filename = "poppler.h")]
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_page_get_type ()")]
 	public class Page : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected Page ();
-		public unowned GLib.List find_text (string text);
-		public static void free_annot_mapping (GLib.List list);
-		public static void free_form_field_mapping (GLib.List list);
-		public static void free_image_mapping (GLib.List list);
-		public static void free_link_mapping (GLib.List list);
-		public unowned GLib.List get_annot_mapping ();
-		public void get_crop_box (out Poppler.Rectangle rect);
+		public void add_annot (Poppler.Annot annot);
+		public GLib.List<Poppler.Rectangle> find_text (string text);
+		public static void free_annot_mapping (GLib.List<Poppler.AnnotMapping> list);
+		public static void free_form_field_mapping (GLib.List<Poppler.FormFieldMapping> list);
+		public static void free_image_mapping (GLib.List<Poppler.ImageMapping> list);
+		public static void free_link_mapping (GLib.List<Poppler.LinkMapping> list);
+		public static void free_text_attributes (GLib.List<Poppler.TextAttributes> list);
+		public GLib.List<Poppler.AnnotMapping> get_annot_mapping ();
+		public Poppler.Rectangle get_crop_box ();
 		public double get_duration ();
-		public unowned GLib.List get_form_field_mapping ();
-		public unowned Cairo.Surface get_image (int image_id);
-		public unowned GLib.List get_image_mapping ();
+		public GLib.List<Poppler.FormFieldMapping> get_form_field_mapping ();
+		public Cairo.Surface get_image (int image_id);
+		public GLib.List<Poppler.ImageMapping> get_image_mapping ();
 		public int get_index ();
-		public unowned GLib.List get_link_mapping ();
-		public unowned GLib.List get_selection_region (double scale, Poppler.SelectionStyle style, Poppler.Rectangle selection);
+		public string get_label ();
+		public GLib.List<Poppler.LinkMapping> get_link_mapping ();
+		public Cairo.Region get_selected_region (double scale, Poppler.SelectionStyle style, Poppler.Rectangle selection);
+		public string get_selected_text (Poppler.SelectionStyle style, Poppler.Rectangle selection);
+		[Deprecated (since = "0.16")]
+		public GLib.List<Poppler.Rectangle> get_selection_region (double scale, Poppler.SelectionStyle style, Poppler.Rectangle selection);
 		public void get_size (out double width, out double height);
-		public unowned string get_text (Poppler.SelectionStyle style, Poppler.Rectangle rect);
-		public unowned Cairo.Surface get_thumbnail ();
-		public unowned Gdk.Pixbuf get_thumbnail_pixbuf ();
-		public bool get_thumbnail_size (int width, int height);
-		public unowned Poppler.PageTransition get_transition ();
-		public void render (Cairo.Context cairo);
-		public void render_for_printing (Cairo.Context cairo);
-		public void render_selection (Cairo.Context cairo, Poppler.Rectangle selection, Poppler.Rectangle old_selection, Poppler.SelectionStyle style, Poppler.Color glyph_color, Poppler.Color background_color);
-		public void render_selection_to_pixbuf (double scale, int rotation, Gdk.Pixbuf pixbuf, Poppler.Rectangle selection, Poppler.Rectangle old_selection, Poppler.SelectionStyle style, Gdk.Color glyph_color, Gdk.Color background_color);
-		public void render_to_pixbuf (int src_x, int src_y, int src_width, int src_height, double scale, int rotation, Gdk.Pixbuf pixbuf);
-		public void render_to_pixbuf_for_printing (int src_x, int src_y, int src_width, int src_height, double scale, int rotation, Gdk.Pixbuf pixbuf);
+		public string get_text ();
+		public GLib.List<Poppler.TextAttributes> get_text_attributes ();
+		public bool get_text_layout ([CCode (array_length_cname = "n_rectangles", array_length_pos = 1.1, array_length_type = "guint")] out Poppler.Rectangle[] rectangles);
+		public Cairo.Surface get_thumbnail ();
+		public bool get_thumbnail_size (out int width, out int height);
+		public Poppler.PageTransition get_transition ();
+		public void render ([CCode (type = "cairo_t*")] Cairo.Context cairo);
+		public void render_for_printing ([CCode (type = "cairo_t*")] Cairo.Context cairo);
+		public void render_for_printing_with_options ([CCode (type = "cairo_t*")] Cairo.Context cairo, Poppler.PrintFlags options);
+		public void render_selection ([CCode (type = "cairo_t*")] Cairo.Context cairo, Poppler.Rectangle selection, Poppler.Rectangle old_selection, Poppler.SelectionStyle style, Poppler.Color glyph_color, Poppler.Color background_color);
 		public void render_to_ps (Poppler.PSFile ps_file);
-		public static void selection_region_free (GLib.List region);
-		[NoAccessorMethod]
+		public static void selection_region_free (GLib.List<Poppler.Rectangle> region);
 		public string label { owned get; }
 	}
-	[CCode (cheader_filename = "poppler.h", copy_function = "poppler_page_transition_copy", type_id = "poppler_page_transition_get_type ()")]
+	[CCode (cheader_filename = "poppler.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "poppler_page_transition_get_type ()")]
 	[Compact]
 	public class PageTransition {
 		public Poppler.PageTransitionAlignment alignment;
@@ -337,55 +434,113 @@ namespace Poppler {
 		[CCode (has_construct_function = false)]
 		public PageTransition ();
 		public Poppler.PageTransition copy ();
+		public void free ();
+	}
+	[CCode (cheader_filename = "poppler.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "poppler_text_attributes_get_type ()")]
+	[Compact]
+	public class TextAttributes {
+		public Poppler.Color color;
+		public int end_index;
+		public string font_name;
+		public double font_size;
+		public bool is_underlined;
+		public int start_index;
+		[CCode (has_construct_function = false)]
+		public TextAttributes ();
+		public Poppler.TextAttributes copy ();
+		public void free ();
 	}
 	[CCode (cheader_filename = "poppler.h", has_type_id = false)]
 	public struct ActionAny {
 		public Poppler.ActionType type;
-		public weak string title;
+		public string title;
 	}
 	[CCode (cheader_filename = "poppler.h", has_type_id = false)]
 	public struct ActionGotoDest {
 		public Poppler.ActionType type;
-		public weak string title;
-		public weak Poppler.Dest dest;
+		public string title;
+		public Poppler.Dest dest;
 	}
 	[CCode (cheader_filename = "poppler.h", has_type_id = false)]
 	public struct ActionGotoRemote {
 		public Poppler.ActionType type;
-		public weak string title;
-		public weak string file_name;
-		public weak Poppler.Dest dest;
+		public string title;
+		public string file_name;
+		public Poppler.Dest dest;
+	}
+	[CCode (cheader_filename = "poppler.h", has_type_id = false)]
+	public struct ActionJavascript {
+		public Poppler.ActionType type;
+		public string title;
+		public string script;
 	}
 	[CCode (cheader_filename = "poppler.h", has_type_id = false)]
 	public struct ActionLaunch {
 		public Poppler.ActionType type;
-		public weak string title;
-		public weak string file_name;
-		public weak string @params;
+		public string title;
+		public string file_name;
+		public string @params;
+	}
+	[CCode (cheader_filename = "poppler.h", has_type_id = false)]
+	public struct ActionLayer {
+		public Poppler.ActionLayerAction action;
+		public weak GLib.List<Poppler.ActionLayer> layers;
 	}
 	[CCode (cheader_filename = "poppler.h", has_type_id = false)]
 	public struct ActionMovie {
 		public Poppler.ActionType type;
-		public weak string title;
+		public string title;
+		public Poppler.ActionMovieOperation operation;
+		public Poppler.Movie movie;
 	}
 	[CCode (cheader_filename = "poppler.h", has_type_id = false)]
 	public struct ActionNamed {
 		public Poppler.ActionType type;
-		public weak string title;
-		public weak string named_dest;
+		public string title;
+		public string named_dest;
+	}
+	[CCode (cheader_filename = "poppler.h", has_type_id = false)]
+	public struct ActionOCGState {
+		public Poppler.ActionType type;
+		public string title;
+		public GLib.List<Poppler.ActionLayer> state_list;
+	}
+	[CCode (cheader_filename = "poppler.h", has_type_id = false)]
+	public struct ActionRendition {
+		public Poppler.ActionType type;
+		public string title;
+		public int op;
+		public Poppler.Media media;
 	}
 	[CCode (cheader_filename = "poppler.h", has_type_id = false)]
 	public struct ActionUri {
 		public Poppler.ActionType type;
-		public weak string title;
-		public weak string uri;
+		public string title;
+		public string uri;
 	}
-	[CCode (cheader_filename = "poppler.h")]
+	[CCode (cheader_filename = "poppler.h", type_id = "poppler_rectangle_get_type ()")]
 	public struct Rectangle {
 		public double x1;
 		public double y1;
 		public double x2;
 		public double y2;
+		[CCode (has_construct_function = false, type = "PopplerRectangle*")]
+		public Rectangle ();
+		public Poppler.Rectangle copy ();
+		public void free ();
+	}
+	[CCode (cheader_filename = "poppler.h", cprefix = "POPPLER_ACTION_LAYER_")]
+	public enum ActionLayerAction {
+		ON,
+		OFF,
+		TOGGLE
+	}
+	[CCode (cheader_filename = "poppler.h", cprefix = "POPPLER_ACTION_MOVIE_")]
+	public enum ActionMovieOperation {
+		PLAY,
+		PAUSE,
+		RESUME,
+		STOP
 	}
 	[CCode (cheader_filename = "poppler.h", cprefix = "POPPLER_ACTION_")]
 	public enum ActionType {
@@ -396,7 +551,10 @@ namespace Poppler {
 		LAUNCH,
 		URI,
 		NAMED,
-		MOVIE
+		MOVIE,
+		RENDITION,
+		OCG_STATE,
+		JAVASCRIPT
 	}
 	[CCode (cheader_filename = "poppler.h", cprefix = "POPPLER_ANNOT_EXTERNAL_DATA_MARKUP_")]
 	public enum AnnotExternalDataType {
@@ -488,14 +646,6 @@ namespace Poppler {
 		FITBV,
 		NAMED
 	}
-	[CCode (cheader_filename = "poppler.h", cprefix = "POPPLER_ERROR_")]
-	public enum Error {
-		INVALID,
-		ENCRYPTED,
-		OPEN_FILE,
-		BAD_CATALOG,
-		DAMAGED
-	}
 	[CCode (cheader_filename = "poppler.h", cprefix = "POPPLER_FONT_TYPE_")]
 	public enum FontType {
 		UNKNOWN,
@@ -596,8 +746,19 @@ namespace Poppler {
 		OK_TO_COPY,
 		OK_TO_ADD_NOTES,
 		OK_TO_FILL_FORM,
+		OK_TO_EXTRACT_CONTENTS,
+		OK_TO_ASSEMBLE,
+		OK_TO_PRINT_HIGH_RESOLUTION,
 		FULL
 	}
+	[CCode (cheader_filename = "poppler.h", cprefix = "POPPLER_PRINT_")]
+	[Flags]
+	public enum PrintFlags {
+		DOCUMENT,
+		MARKUP_ANNOTS,
+		STAMP_ANNOTS_ONLY,
+		ALL
+	}
 	[CCode (cheader_filename = "poppler.h", cprefix = "POPPLER_SELECTION_")]
 	public enum SelectionStyle {
 		GLYPH,
@@ -616,22 +777,29 @@ namespace Poppler {
 		DISPLAY_DOC_TITLE,
 		DIRECTION_RTL
 	}
-	[CCode (cheader_filename = "poppler.h", has_target = false)]
-	public delegate bool AttachmentSaveFunc (string buf, size_t count, void* data) throws GLib.Error;
-	[CCode (cheader_filename = "poppler.h")]
+	[CCode (cheader_filename = "poppler.h", cprefix = "POPPLER_ERROR_")]
+	public errordomain Error {
+		INVALID,
+		ENCRYPTED,
+		OPEN_FILE,
+		BAD_CATALOG,
+		DAMAGED;
+		public static GLib.Quark quark ();
+	}
+	[CCode (cheader_filename = "poppler.h", instance_pos = 1.9)]
+	public delegate bool AttachmentSaveFunc ([CCode (array_length_cname = "count", array_length_pos = 1.1, array_length_type = "gsize")] uint8[] buf) throws GLib.Error;
+	[CCode (cheader_filename = "poppler.h", instance_pos = 1.9)]
+	public delegate bool MediaSaveFunc ([CCode (array_length_cname = "count", array_length_pos = 1.1, array_length_type = "gsize")] uint8[] buf) throws GLib.Error;
+	[CCode (cheader_filename = "poppler.h", cname = "POPPLER_HAS_CAIRO")]
 	public const int HAS_CAIRO;
-	[CCode (cheader_filename = "poppler.h")]
+	[CCode (cheader_filename = "poppler.h", cname = "POPPLER_MAJOR_VERSION")]
 	public const int MAJOR_VERSION;
-	[CCode (cheader_filename = "poppler.h")]
+	[CCode (cheader_filename = "poppler.h", cname = "POPPLER_MICRO_VERSION")]
 	public const int MICRO_VERSION;
-	[CCode (cheader_filename = "poppler.h")]
+	[CCode (cheader_filename = "poppler.h", cname = "POPPLER_MINOR_VERSION")]
 	public const int MINOR_VERSION;
 	[CCode (cheader_filename = "poppler.h")]
-	public const int WITH_GDK;
-	[CCode (cheader_filename = "poppler.h")]
-	public static bool date_parse (string date, ulong timet);
-	[CCode (cheader_filename = "poppler.h")]
-	public static GLib.Quark error_quark ();
+	public static bool date_parse (string date, long timet);
 	[CCode (cheader_filename = "poppler.h")]
 	public static Poppler.Backend get_backend ();
 	[CCode (cheader_filename = "poppler.h")]
diff --git a/vapi/posix.vapi b/vapi/posix.vapi
index 9578263..43e0c88 100644
--- a/vapi/posix.vapi
+++ b/vapi/posix.vapi
@@ -484,6 +484,8 @@ namespace Posix {
 	[CCode (cheader_filename = "arpa/inet.h")]
 	unowned string inet_ntop (int af, void* src, uint8[] dst);
 	[CCode (cheader_filename = "arpa/inet.h")]
+	public int inet_pton (int af, string src, void* dst);
+	[CCode (cheader_filename = "arpa/inet.h")]
 	public uint32 htonl (uint32 hostlong);
 	[CCode (cheader_filename = "arpa/inet.h")]
 	public uint32 ntohl (uint32 netlong);
@@ -789,6 +791,20 @@ namespace Posix {
 	[CCode (cheader_filename = "math.h")]
 	public float scalbf (float x, float n);
 
+    [CCode (cheader_filename = "netdb.h")]
+    public const int NI_NAMEREQD;
+    [CCode (cheader_filename = "netdb.h")]
+    public const int NI_DGRAM;
+    [CCode (cheader_filename = "netdb.h")]
+    public const int NI_NOFQDN;
+    [CCode (cheader_filename = "netdb.h")]
+    public const int NI_NUMERICHOST;
+    [CCode (cheader_filename = "netdb.h")]
+    public const int NI_NUMERICSERV;
+
+    [CCode (cheader_filename = "netdb.h,sys/socket.h")]
+    public int getnameinfo (SockAddr sa, socklen_t salen, char[] node, char[] service, int flags);
+
 	[CCode (cheader_filename = "poll.h", cname = "struct pollfd")]
 	public struct pollfd {
 		public int fd;
@@ -1037,6 +1053,7 @@ namespace Posix {
 		int              sa_flags;
 	}
 
+	[SimpleType]
 	[CCode (cname = "sigval_t", cheader_filename = "signal.h")]
 	public struct sigval_t {
 		int   sival_int;
@@ -1084,6 +1101,8 @@ namespace Posix {
 	[CCode (cheader_filename = "signal.h")]
 	public int sigprocmask (int how, sigset_t sigset, sigset_t oset);
 	[CCode (cheader_filename = "signal.h")]
+	public int sigqueue (pid_t pid, int signum, sigval_t val);
+	[CCode (cheader_filename = "signal.h")]
 	public int sigsuspend (sigset_t sigset);
 	[CCode (cheader_filename = "signal.h")]
 	public int sigpending (sigset_t sigset);
@@ -1134,6 +1153,9 @@ namespace Posix {
 	public int mkostemp (string template, int flags);
 
 	[CCode (cheader_filename = "stdlib.h")]
+	public string? realpath (string path, uint8[]? resolved_path = null);
+
+	[CCode (cheader_filename = "stdlib.h")]
 	public int posix_openpt (int flags);
 	[CCode (cheader_filename = "stdlib.h")]
 	public int grantpt (int fd);
@@ -1175,7 +1197,7 @@ namespace Posix {
 	[CCode (cheader_filename = "string.h")]
 	public unowned string strcat (string s1, string s2);
 	[CCode (cheader_filename = "string.h")]
-	public unowned string strchr (string s, int c);
+	public unowned string? strchr (string s, int c);
 	[CCode (cheader_filename = "string.h")]
 	public int strcmp (string s1, string s2);
 	[CCode (cheader_filename = "string.h")]
@@ -1185,7 +1207,7 @@ namespace Posix {
 	[CCode (cheader_filename = "string.h")]
 	public size_t strcspn (string s1, string s2);
 	[CCode (cheader_filename = "string.h")]
-	public unowned string strdup (string s1);
+	public string strdup (string s1);
 	[CCode (cheader_filename = "string.h")]
 	public unowned string strerror (int errnum);
 	[CCode (cheader_filename = "string.h")]
@@ -1199,20 +1221,23 @@ namespace Posix {
 	[CCode (cheader_filename = "string.h")]
 	public unowned string strncpy (string s1, string s2, size_t n);
 	[CCode (cheader_filename = "string.h")]
-	public unowned string strpbrk (string s1, string s2);
+	public unowned string? strpbrk (string s1, string s2);
 	[CCode (cheader_filename = "string.h")]
-	public unowned string strrchr (string s, int c);
+	public unowned string? strrchr (string s, int c);
 	[CCode (cheader_filename = "string.h")]
 	public size_t strspn (string s1, string s2);
 	[CCode (cheader_filename = "string.h")]
-	public unowned string strstr (string s1, string s2);
+	public unowned string? strstr (string s1, string s2);
 	[CCode (cheader_filename = "string.h")]
-	public unowned string strtok (string s1, string s2);
+	public unowned string? strtok (string s1, string s2);
 	[CCode (cheader_filename = "string.h")]
-	public unowned string strtok_r (string s, string sep, out string lasts);
+	public unowned string? strtok_r (string? s, string sep, out unowned string lasts);
 	[CCode (cheader_filename = "string.h")]
 	public size_t strxfrm (string s1, string s2, size_t n);
 
+	[CCode (cheader_filename = "strings.h")]
+	public int ffs (int i);
+
 	[CCode (cheader_filename = "stropts.h")]
 	public const int I_PUSH;
 	[CCode (cheader_filename = "stropts.h")]
@@ -1463,10 +1488,8 @@ namespace Posix {
 	[CCode (cheader_filename = "sys/socket.h")]
 	public int socketpair (int domain, int type, int protocol, [CCode (array_length = false)] int[] sv);
 
-    [SimpleType]
-    [IntegerType]
     [CCode (cname = "socklen_t", cheader_filename = "sys/socket.h", default_value = "0")]
-    public struct socklen_t {
+    public struct socklen_t : int {
     }
 
 	[SimpleType]
@@ -1475,8 +1498,16 @@ namespace Posix {
 		public uint32 s_addr;
 	}
 
+	[CCode (cname = "struct in6_addr", cheader_filename = "sys/socket.h", destroy_function = "")]
+	public struct In6Addr {
+		public uchar[] s6_addr[16];
+	}
+
 	[CCode (cname = "struct sockaddr", cheader_filename = "sys/socket.h", destroy_function = "")]
 	public struct SockAddr {
+        public int sa_family;
+        [CCode (array_length = false)]
+        public char[] data;
 	}
 
 	[CCode (cname = "struct sockaddr_in", cheader_filename = "netinet/in.h", destroy_function = "")]
@@ -1486,6 +1517,15 @@ namespace Posix {
 		public InAddr sin_addr;
 	}
 
+	[CCode (cname = "struct sockaddr_in6", cheader_filename = "netinet/in.h", destroy_function = "")]
+	public struct SockAddrIn6 {
+		public int sin6_family;
+		public uint16 sin6_port;
+		public uint32 sin6_flowinfo;
+		public In6Addr sin6_addr;
+		public uint32 sin6_scope_id;
+	}
+
 	[CCode (cheader_filename = "sys/stat.h")]
 	public int mkfifo (string filename, mode_t mode);
 
@@ -1562,8 +1602,11 @@ namespace Posix {
 		public gid_t st_gid;
 		public dev_t st_rdev;
 		public size_t st_size;
+		public timespec st_atim;
 		public time_t st_atime;
+		public timespec st_mtim;
 		public time_t st_mtime;
+		public timespec st_ctim;
 		public time_t st_ctime;
 		public blksize_t st_blksize;
 		public blkcnt_t st_blocks;
@@ -1584,6 +1627,11 @@ namespace Posix {
 	[CCode (cheader_filename = "sys/types.h,sys/stat.h,fcntl.h,unistd.h")]
 	public pid_t mknod (string pathname, mode_t mode, dev_t dev);
 
+	[CCode (cheader_filename = "sys/stat.h")]
+	public int utimensat (int dirfd, string pathname, [CCode (array_length = false)] timespec[] times, int flags = 0);
+	[CCode (cheader_filename = "sys/stat.h")]
+	public int futimens (int fd, [CCode (array_length = false)] timespec[] times);
+
 	[CCode (cheader_filename = "sys/wait.h")]
 	public pid_t wait (out int status);
 	[CCode (cheader_filename = "sys/wait.h")]
@@ -1625,6 +1673,11 @@ namespace Posix {
 		public fsfilcnt_t f_favail;
 	}
 
+	[CCode (cheader_filename = "sys/statvfs.h", cname = "statvfs")]
+	public int statvfs_exec (string path, out statvfs buf);
+	[CCode (cheader_filename = "sys/statvfs.h")]
+	public int fstatvfs (int fs, out statvfs buf);
+
 	[SimpleType]
 	[IntegerType (rank = 9)]
 	[CCode (cname="off_t", cheader_filename = "sys/types.h")]
@@ -1686,7 +1739,7 @@ namespace Posix {
 		public clock_t ();
 	}
 
-	[CCode (cheader_filename = "time.h")]
+	[CCode (cname = "struct tm", cheader_filename = "time.h", has_type_id = false)]
 	public struct tm {
 		public int tm_sec;
 		public int tm_min;
@@ -1705,6 +1758,16 @@ namespace Posix {
 		public long tv_nsec;
 	}
 
+    [CCode (array_length = false, cheader_filename = "time.h")]
+	public string[] tzname;
+	[CCode (cheader_filename = "time.h")]
+	public const long timezone;
+	[CCode (cheader_filename = "time.h")]
+	public const int daylight;
+
+	[CCode (cheader_filename = "time.h")]
+	public void tzset ();
+
 	[SimpleType]
 	[IntegerType]
 	[CCode (cheader_filename = "time.h")]
@@ -1745,6 +1808,10 @@ namespace Posix {
 	[CCode (cheader_filename = "unistd.h")]
 	public int execlp (string path, params string[] arg);
 	[CCode (cheader_filename = "unistd.h")]
+	public int execv (string path, [CCode (array_length = false, null_terminated = true)] string[] arg);
+	[CCode (cheader_filename = "unistd.h")]
+	public int execvp (string path, [CCode (array_length = false, null_terminated = true)] string[] arg);
+	[CCode (cheader_filename = "unistd.h")]
 	public int pipe ([CCode (array_length = false, null_terminated = false)] int[] pipefd);
 	[CCode (cheader_filename = "unistd.h")]
 	public ssize_t read (int fd, void* buf, size_t count);
@@ -1997,7 +2064,7 @@ namespace Posix {
 	}
 
 	[CCode (cheader_filename = "termios.h")]
-	public int tcgetattr (int fd, termios termios_p);
+	public int tcgetattr (int fd, out termios termios_p);
 	[CCode (cheader_filename = "termios.h")]
 	public int tcsetattr (int fd, int optional_actions, termios termios_p);
 	[CCode (cheader_filename = "termios.h")]
@@ -2009,17 +2076,17 @@ namespace Posix {
 	[CCode (cheader_filename = "termios.h")]
 	public int tcflow (int fd, int action);
 	[CCode (cheader_filename = "termios.h")]
-	public void cfmakeraw (termios termios_p);
+	public void cfmakeraw (ref termios termios_p);
 	[CCode (cheader_filename = "termios.h")]
 	public speed_t cfgetispeed (termios termios_p);
 	[CCode (cheader_filename = "termios.h")]
 	public speed_t cfgetospeed (termios termios_p);
 	[CCode (cheader_filename = "termios.h")]
-	public int cfsetispeed (termios termios_p, speed_t speed);
+	public int cfsetispeed (ref termios termios_p, speed_t speed);
 	[CCode (cheader_filename = "termios.h")]
-	public int cfsetospeed (termios termios_p, speed_t speed);
+	public int cfsetospeed (ref termios termios_p, speed_t speed);
 	[CCode (cheader_filename = "termios.h")]
-	public int cfsetspeed (termios termios, speed_t speed);
+	public int cfsetspeed (ref termios termios, speed_t speed);
 
 	//c_iflag
 	[CCode (cheader_filename = "termios.h")]
@@ -2258,17 +2325,17 @@ namespace Posix {
 	}
 
 	[CCode (cheader_filename = "sys/select.h")]
-	public int select (int nfds, fd_set? readfds, fd_set? writefds, fd_set? exceptfds, timeval timeout);
+	public int select (int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, timeval timeout);
 	[CCode (cheader_filename = "sys/select.h")]
-	public void FD_CLR (int fd, fd_set @set);
+	public void FD_CLR (int fd, ref fd_set @set);
 	[CCode (cheader_filename = "sys/select.h")]
 	public int  FD_ISSET (int fd, fd_set @set);
 	[CCode (cheader_filename = "sys/select.h")]
-	public void FD_SET (int fd, fd_set @set);
+	public void FD_SET (int fd, ref fd_set @set);
 	[CCode (cheader_filename = "sys/select.h")]
-	public void FD_ZERO (fd_set @set);
+	public void FD_ZERO (out fd_set @set);
 	[CCode (cheader_filename = "sys/select.h")]
-	public int pselect (int nfds, fd_set? readfds, fd_set? writefds, fd_set? exceptfds, timespec timeout, sigset_t sigmask);
+	public int pselect (int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, timespec timeout, sigset_t sigmask);
 
 	// sys/mman.h - Posix mmap(), munmap(), mprotect()
 	[CCode (cheader_filename = "sys/mman.h")]
diff --git a/vapi/readline.vapi b/vapi/readline.vapi
index e130fef..6ff09fd 100644
--- a/vapi/readline.vapi
+++ b/vapi/readline.vapi
@@ -54,7 +54,7 @@ namespace Readline {
 	[CCode (cname = "rl_vintfunc_t", has_target = false)]
 	public delegate void     VintFunc (int a);
 	[CCode (cname = "rl_vcpfunc_t", has_target = false)]
-	public delegate void     VcpFunc (string s);
+	public delegate void     VcpFunc (string? s);
 	[CCode (cname = "rl_vcppfunc_t", has_target = false)]
 	public delegate void     VcppFunc (string[] s);
 	[CCode (cname = "rl_cpvfunc_t", has_target = false)]
diff --git a/vapi/rest-0.7.vapi b/vapi/rest-0.7.vapi
index d9a00d6..bb5efd5 100644
--- a/vapi/rest-0.7.vapi
+++ b/vapi/rest-0.7.vapi
@@ -34,6 +34,7 @@ namespace Rest {
 		public unowned string get_token ();
 		public unowned string get_token_secret ();
 		public bool is_oauth10a ();
+		public Rest.Proxy new_echo_proxy (string service_url, string url_format, bool binding_required);
 		public bool request_token (string function, string callback_uri) throws GLib.Error;
 		public void set_signature_host (string signature_host);
 		public void set_token (string token);
@@ -56,23 +57,32 @@ namespace Rest {
 		protected OAuthProxyCall ();
 		public void parse_token_reponse ();
 	}
-	[CCode (cheader_filename = "rest/rest-param.h")]
+	[CCode (cheader_filename = "rest/rest-param.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "rest_param_get_type ()")]
 	[Compact]
 	public class Param {
+		[CCode (has_construct_function = false)]
+		public Param.full (global::string name, Rest.MemoryUse use, [CCode (array_length_cname = "length", array_length_pos = 3.5, array_length_type = "gsize")] uint8[] data, global::string content_type, global::string filename);
+		public void* get_content ();
 		public size_t get_content_length ();
-		public unowned string get_content_type ();
-		public unowned string get_file_name ();
-		public unowned string get_name ();
+		public unowned global::string get_content_type ();
+		public unowned global::string get_file_name ();
+		public unowned global::string get_name ();
 		public bool is_string ();
+		public Rest.Param @ref ();
+		[CCode (has_construct_function = false)]
+		public Param.string (global::string name, Rest.MemoryUse use, global::string string);
 		public void unref ();
+		[CCode (has_construct_function = false)]
+		public Param.with_owner (global::string name, [CCode (array_length_cname = "length", array_length_pos = 2.5, array_length_type = "gsize")] uint8[] data, global::string content_type, global::string? filename, owned void* owner, GLib.DestroyNotify? owner_dnotify);
 	}
 	[CCode (cheader_filename = "rest/rest-params.h")]
 	[Compact]
 	public class Params {
 		public void add (Rest.Param param);
 		public bool are_strings ();
-		public unowned GLib.HashTable<string,string> as_string_hash_table ();
+		public GLib.HashTable<string,string> as_string_hash_table ();
 		public void free ();
+		public Rest.Param @get (string name);
 		public void remove (string name);
 	}
 	[CCode (cheader_filename = "rest/rest-params.h")]
@@ -87,15 +97,23 @@ namespace Rest {
 		public Proxy (string url_format, bool binding_required);
 		public bool bind (...);
 		public unowned string get_user_agent ();
-		public virtual unowned Rest.ProxyCall new_call ();
+		public virtual Rest.ProxyCall new_call ();
 		public void set_user_agent (string user_agent);
+		[CCode (has_construct_function = false)]
+		public Proxy.with_authentication (string url_format, bool binding_required, string username, string password);
 		[NoAccessorMethod]
 		public bool binding_required { get; set; }
 		[NoAccessorMethod]
 		public bool disable_cookies { get; construct; }
 		[NoAccessorMethod]
+		public string password { owned get; construct; }
+		[NoAccessorMethod]
+		public bool ssl_strict { get; set; }
+		[NoAccessorMethod]
 		public string url_format { owned get; set; }
 		public string user_agent { get; set; }
+		[NoAccessorMethod]
+		public string username { owned get; construct; }
 	}
 	[CCode (cheader_filename = "rest/rest-proxy-call.h", type_id = "rest_proxy_call_get_type ()")]
 	public class ProxyCall : GLib.Object {
@@ -107,15 +125,17 @@ namespace Rest {
 		public void add_param_full (Rest.Param param);
 		public void add_params (...);
 		public bool cancel ();
-		public bool continuous ([CCode (delegate_target_pos = 2.1)] Rest.ProxyCallContinuousCallback cb, GLib.Object weak_object) throws GLib.Error;
+		public bool continuous ([CCode (delegate_target_pos = 2.1)] Rest.ProxyCallContinuousCallback callback, GLib.Object weak_object) throws GLib.Error;
 		public unowned string get_method ();
 		public unowned Rest.Params get_params ();
 		public unowned string get_payload ();
 		public int64 get_payload_length ();
-		public unowned GLib.HashTable<void*,void*> get_response_headers ();
+		public GLib.HashTable<weak void*,weak void*> get_response_headers ();
 		public uint get_status_code ();
 		public unowned string get_status_message ();
+		public async bool invoke_async (GLib.Cancellable? cancellable) throws GLib.Error;
 		public unowned string lookup_header (string header);
+		public Rest.Param lookup_param (string name);
 		public unowned string lookup_response_header (string header);
 		[NoWrapper]
 		public virtual bool prepare () throws GLib.Error;
@@ -128,7 +148,7 @@ namespace Rest {
 		public void set_function (string function);
 		public void set_method (string method);
 		public bool sync () throws GLib.Error;
-		public bool upload ([CCode (delegate_target_pos = 2.1)] Rest.ProxyCallUploadCallback cb, GLib.Object weak_object) throws GLib.Error;
+		public bool upload ([CCode (delegate_target_pos = 2.1)] Rest.ProxyCallUploadCallback callback, GLib.Object weak_object) throws GLib.Error;
 		[NoAccessorMethod]
 		public Rest.Proxy proxy { owned get; construct; }
 	}
diff --git a/vapi/sdl.vapi b/vapi/sdl.vapi
index 3adf4f2..52ddaae 100644
--- a/vapi/sdl.vapi
+++ b/vapi/sdl.vapi
@@ -981,9 +981,11 @@ namespace SDL {
 		STOPPED, PLAYING, PAUSED
 	}// AudioStatus
 
+	[CCode (instance_pos = 0.1)]
+	public delegate void AudioCallback(uint8[] stream);
+
 	[CCode (cname="SDL_AudioSpec")]
-	[Compact]
-	public class AudioSpec {
+	public struct AudioSpec {
 		public int freq;
 		public AudioFormat format;
 		public uchar channels;
@@ -991,8 +993,8 @@ namespace SDL {
 		public uint16 samples;
 		public uint16 padding;
 		public uint32 size;
-
-		public void* userdata;
+		[CCode (delegate_target_cname = "userdata")]
+		public unowned AudioCallback callback;
 	}// AudioSpec
 
 	[CCode (cname="SDL_AudioCVT")]
@@ -1021,11 +1023,14 @@ namespace SDL {
 
 	[Compact]
 	public class Audio {
+		[CCode (cname="SDL_MIX_MAXVOLUME")]
+		public const int MIX_MAXVOLUME;
+
 		[CCode (cname="SDL_AudioDriverName")]
 		public static unowned string driver_name(string namebuf, int maxlen);
 		
 		[CCode (cname="SDL_OpenAudio")]
-		public static int open(AudioSpec desired, AudioSpec obtained);
+		public static int open(AudioSpec desired, out AudioSpec obtained);
 
 		[CCode (cname="SDL_GetAudioStatus")]
 		public static AudioStatus status();
@@ -1034,13 +1039,13 @@ namespace SDL {
 		public static void pause(int pause_on);
 
 		[CCode (cname="SDL_LoadWAV_RW")]
-		public static AudioSpec load(RWops src, int freesrc=0, AudioSpec spec, uchar** audio_buf, ref uint32 audio_len);
+		public static unowned AudioSpec? load(RWops src, int freesrc=0, ref AudioSpec spec, out uint8[] audio_buf);
 
 		[CCode (cname="SDL_FreeWAV")]
 		public static void free(uchar* audio_buf);
 
 		[CCode (cname="SDL_MixAudio")]
-		public static void mix(uchar[] dst, uchar[] src, uint32 len, int volume);
+		public static void mix([CCode (array_length = false)] uchar[] dst, [CCode (array_length = false)] uchar[] src, uint32 len, int volume);
 
 		[CCode (cname="SDL_LockAudio")]
 		public static void do_lock();
diff --git a/vapi/udisks2.deps b/vapi/udisks2.deps
new file mode 100644
index 0000000..cd10dfd
--- /dev/null
+++ b/vapi/udisks2.deps
@@ -0,0 +1 @@
+gio-2.0
diff --git a/vapi/udisks2.vapi b/vapi/udisks2.vapi
new file mode 100644
index 0000000..b724726
--- /dev/null
+++ b/vapi/udisks2.vapi
@@ -0,0 +1,740 @@
+/* udisks2.vapi generated by vapigen, do not modify. */
+
+[CCode (cprefix = "UDisks", gir_namespace = "UDisks", gir_version = "2.0", lower_case_cprefix = "udisks_")]
+namespace UDisks {
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_block_proxy_get_type ()")]
+	public class BlockProxy : GLib.DBusProxy, GLib.AsyncInitable, GLib.DBusInterface, GLib.Initable, UDisks.Block {
+		[CCode (cname = "udisks_block_proxy_new")]
+		public async BlockProxy (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksBlock*")]
+		public BlockProxy.finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (cname = "udisks_block_proxy_new_for_bus")]
+		public async BlockProxy.for_bus (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksBlock*")]
+		public BlockProxy.for_bus_finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksBlock*")]
+		public BlockProxy.for_bus_sync (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksBlock*")]
+		public BlockProxy.sync (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_block_skeleton_get_type ()")]
+	public class BlockSkeleton : GLib.DBusInterfaceSkeleton, GLib.DBusInterface, UDisks.Block {
+		[CCode (has_construct_function = false, type = "UDisksBlock*")]
+		public BlockSkeleton ();
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_client_get_type ()")]
+	public class Client : GLib.Object, GLib.AsyncInitable, GLib.Initable {
+		[CCode (cname = "udisks_client_new")]
+		public async Client (GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false)]
+		public Client.finish (GLib.AsyncResult res) throws GLib.Error;
+		public UDisks.Block get_block_for_dev (int block_device_number);
+		public UDisks.Block get_block_for_drive (UDisks.Drive drive, bool get_physical);
+		public GLib.List<UDisks.Block> get_block_for_label (string label);
+		public GLib.List<UDisks.Block> get_block_for_uuid (string uuid);
+		public UDisks.Block get_cleartext_block (UDisks.Block block);
+		public UDisks.Drive get_drive_for_block (UDisks.Block block);
+		public void get_drive_info (UDisks.Drive drive, out string out_name, out string out_description, out GLib.Icon out_drive_icon, out string out_media_description, out GLib.Icon out_media_icon);
+		public string get_id_for_display (string usage, string type, string version, bool long_string);
+		public GLib.List<UDisks.Job> get_jobs_for_object (UDisks.Object object);
+		public unowned UDisks.Manager get_manager ();
+		public string get_media_compat_for_display (string media_compat);
+		public UDisks.Object get_object (string object_path);
+		public unowned GLib.DBusObjectManager get_object_manager ();
+		public string get_partition_info (UDisks.Partition partition);
+		public UDisks.PartitionTable get_partition_table (UDisks.Partition partition);
+		public unowned string get_partition_table_subtype_for_display (string partition_table_type, string partition_table_subtype);
+		[CCode (array_length = false, array_null_terminated = true)]
+		public string[] get_partition_table_subtypes (string partition_table_type);
+		public unowned string get_partition_table_type_for_display (string partition_table_type);
+		public unowned string get_partition_type_for_display (string partition_table_type, string partition_type);
+		public GLib.List<UDisks.PartitionTypeInfo> get_partition_type_infos (string partition_table_type, string? partition_table_subtype);
+		public GLib.List<UDisks.Partition> get_partitions (UDisks.PartitionTable table);
+		public string get_size_for_display (uint64 size, bool use_pow2, bool long_string);
+		public unowned UDisks.Object peek_object (string object_path);
+		public void settle ();
+		[CCode (has_construct_function = false)]
+		public Client.sync (GLib.Cancellable? cancellable) throws GLib.Error;
+		public UDisks.Manager manager { get; }
+		public GLib.DBusObjectManager object_manager { get; }
+		public signal void changed ();
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_drive_ata_proxy_get_type ()")]
+	public class DriveAtaProxy : GLib.DBusProxy, GLib.AsyncInitable, GLib.DBusInterface, GLib.Initable, UDisks.DriveAta {
+		[CCode (cname = "udisks_drive_ata_proxy_new")]
+		public async DriveAtaProxy (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksDriveAta*")]
+		public DriveAtaProxy.finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (cname = "udisks_drive_ata_proxy_new_for_bus")]
+		public async DriveAtaProxy.for_bus (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksDriveAta*")]
+		public DriveAtaProxy.for_bus_finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksDriveAta*")]
+		public DriveAtaProxy.for_bus_sync (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksDriveAta*")]
+		public DriveAtaProxy.sync (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_drive_ata_skeleton_get_type ()")]
+	public class DriveAtaSkeleton : GLib.DBusInterfaceSkeleton, GLib.DBusInterface, UDisks.DriveAta {
+		[CCode (has_construct_function = false, type = "UDisksDriveAta*")]
+		public DriveAtaSkeleton ();
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_drive_proxy_get_type ()")]
+	public class DriveProxy : GLib.DBusProxy, GLib.AsyncInitable, GLib.DBusInterface, GLib.Initable, UDisks.Drive {
+		[CCode (cname = "udisks_drive_proxy_new")]
+		public async DriveProxy (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksDrive*")]
+		public DriveProxy.finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (cname = "udisks_drive_proxy_new_for_bus")]
+		public async DriveProxy.for_bus (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksDrive*")]
+		public DriveProxy.for_bus_finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksDrive*")]
+		public DriveProxy.for_bus_sync (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksDrive*")]
+		public DriveProxy.sync (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_drive_skeleton_get_type ()")]
+	public class DriveSkeleton : GLib.DBusInterfaceSkeleton, GLib.DBusInterface, UDisks.Drive {
+		[CCode (has_construct_function = false, type = "UDisksDrive*")]
+		public DriveSkeleton ();
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_encrypted_proxy_get_type ()")]
+	public class EncryptedProxy : GLib.DBusProxy, GLib.AsyncInitable, GLib.DBusInterface, GLib.Initable, UDisks.Encrypted {
+		[CCode (cname = "udisks_encrypted_proxy_new")]
+		public async EncryptedProxy (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksEncrypted*")]
+		public EncryptedProxy.finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (cname = "udisks_encrypted_proxy_new_for_bus")]
+		public async EncryptedProxy.for_bus (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksEncrypted*")]
+		public EncryptedProxy.for_bus_finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksEncrypted*")]
+		public EncryptedProxy.for_bus_sync (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksEncrypted*")]
+		public EncryptedProxy.sync (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_encrypted_skeleton_get_type ()")]
+	public class EncryptedSkeleton : GLib.DBusInterfaceSkeleton, GLib.DBusInterface, UDisks.Encrypted {
+		[CCode (has_construct_function = false, type = "UDisksEncrypted*")]
+		public EncryptedSkeleton ();
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_filesystem_proxy_get_type ()")]
+	public class FilesystemProxy : GLib.DBusProxy, GLib.AsyncInitable, GLib.DBusInterface, GLib.Initable, UDisks.Filesystem {
+		[CCode (cname = "udisks_filesystem_proxy_new")]
+		public async FilesystemProxy (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksFilesystem*")]
+		public FilesystemProxy.finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (cname = "udisks_filesystem_proxy_new_for_bus")]
+		public async FilesystemProxy.for_bus (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksFilesystem*")]
+		public FilesystemProxy.for_bus_finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksFilesystem*")]
+		public FilesystemProxy.for_bus_sync (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksFilesystem*")]
+		public FilesystemProxy.sync (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_filesystem_skeleton_get_type ()")]
+	public class FilesystemSkeleton : GLib.DBusInterfaceSkeleton, GLib.DBusInterface, UDisks.Filesystem {
+		[CCode (has_construct_function = false, type = "UDisksFilesystem*")]
+		public FilesystemSkeleton ();
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_job_proxy_get_type ()")]
+	public class JobProxy : GLib.DBusProxy, GLib.AsyncInitable, GLib.DBusInterface, GLib.Initable, UDisks.Job {
+		[CCode (cname = "udisks_job_proxy_new")]
+		public async JobProxy (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksJob*")]
+		public JobProxy.finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (cname = "udisks_job_proxy_new_for_bus")]
+		public async JobProxy.for_bus (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksJob*")]
+		public JobProxy.for_bus_finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksJob*")]
+		public JobProxy.for_bus_sync (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksJob*")]
+		public JobProxy.sync (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_job_skeleton_get_type ()")]
+	public class JobSkeleton : GLib.DBusInterfaceSkeleton, GLib.DBusInterface, UDisks.Job {
+		[CCode (has_construct_function = false, type = "UDisksJob*")]
+		public JobSkeleton ();
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_loop_proxy_get_type ()")]
+	public class LoopProxy : GLib.DBusProxy, GLib.AsyncInitable, GLib.DBusInterface, GLib.Initable, UDisks.Loop {
+		[CCode (cname = "udisks_loop_proxy_new")]
+		public async LoopProxy (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksLoop*")]
+		public LoopProxy.finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (cname = "udisks_loop_proxy_new_for_bus")]
+		public async LoopProxy.for_bus (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksLoop*")]
+		public LoopProxy.for_bus_finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksLoop*")]
+		public LoopProxy.for_bus_sync (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksLoop*")]
+		public LoopProxy.sync (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_loop_skeleton_get_type ()")]
+	public class LoopSkeleton : GLib.DBusInterfaceSkeleton, GLib.DBusInterface, UDisks.Loop {
+		[CCode (has_construct_function = false, type = "UDisksLoop*")]
+		public LoopSkeleton ();
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_manager_proxy_get_type ()")]
+	public class ManagerProxy : GLib.DBusProxy, GLib.AsyncInitable, GLib.DBusInterface, GLib.Initable, UDisks.Manager {
+		[CCode (cname = "udisks_manager_proxy_new")]
+		public async ManagerProxy (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksManager*")]
+		public ManagerProxy.finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (cname = "udisks_manager_proxy_new_for_bus")]
+		public async ManagerProxy.for_bus (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksManager*")]
+		public ManagerProxy.for_bus_finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksManager*")]
+		public ManagerProxy.for_bus_sync (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksManager*")]
+		public ManagerProxy.sync (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_manager_skeleton_get_type ()")]
+	public class ManagerSkeleton : GLib.DBusInterfaceSkeleton, GLib.DBusInterface, UDisks.Manager {
+		[CCode (has_construct_function = false, type = "UDisksManager*")]
+		public ManagerSkeleton ();
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_object_manager_client_get_type ()")]
+	public class ObjectManagerClient : GLib.DBusObjectManagerClient, GLib.AsyncInitable, GLib.DBusObjectManager, GLib.Initable {
+		[CCode (cname = "udisks_object_manager_client_new")]
+		public async ObjectManagerClient (GLib.DBusConnection connection, GLib.DBusObjectManagerClientFlags flags, string? name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "GDBusObjectManager*")]
+		public ObjectManagerClient.finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (cname = "udisks_object_manager_client_new_for_bus")]
+		public async ObjectManagerClient.for_bus (GLib.BusType bus_type, GLib.DBusObjectManagerClientFlags flags, string name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "GDBusObjectManager*")]
+		public ObjectManagerClient.for_bus_finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "GDBusObjectManager*")]
+		public ObjectManagerClient.for_bus_sync (GLib.BusType bus_type, GLib.DBusObjectManagerClientFlags flags, string name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+		public static GLib.Type get_proxy_type (GLib.DBusObjectManagerClient manager, string object_path, string? interface_name, void* user_data);
+		[CCode (has_construct_function = false, type = "GDBusObjectManager*")]
+		public ObjectManagerClient.sync (GLib.DBusConnection connection, GLib.DBusObjectManagerClientFlags flags, string? name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_object_proxy_get_type ()")]
+	public class ObjectProxy : GLib.DBusObjectProxy, GLib.DBusObject, UDisks.Object {
+		[CCode (has_construct_function = false)]
+		public ObjectProxy (GLib.DBusConnection connection, string object_path);
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_object_skeleton_get_type ()")]
+	public class ObjectSkeleton : GLib.DBusObjectSkeleton, GLib.DBusObject, UDisks.Object {
+		[CCode (has_construct_function = false)]
+		public ObjectSkeleton (string object_path);
+		public void set_block (UDisks.Block? interface_);
+		public void set_drive (UDisks.Drive? interface_);
+		public void set_drive_ata (UDisks.DriveAta? interface_);
+		public void set_encrypted (UDisks.Encrypted? interface_);
+		public void set_filesystem (UDisks.Filesystem? interface_);
+		public void set_job (UDisks.Job? interface_);
+		public void set_loop (UDisks.Loop? interface_);
+		public void set_manager (UDisks.Manager? interface_);
+		public void set_partition (UDisks.Partition? interface_);
+		public void set_partition_table (UDisks.PartitionTable? interface_);
+		public void set_swapspace (UDisks.Swapspace? interface_);
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_partition_proxy_get_type ()")]
+	public class PartitionProxy : GLib.DBusProxy, GLib.AsyncInitable, GLib.DBusInterface, GLib.Initable, UDisks.Partition {
+		[CCode (cname = "udisks_partition_proxy_new")]
+		public async PartitionProxy (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksPartition*")]
+		public PartitionProxy.finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (cname = "udisks_partition_proxy_new_for_bus")]
+		public async PartitionProxy.for_bus (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksPartition*")]
+		public PartitionProxy.for_bus_finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksPartition*")]
+		public PartitionProxy.for_bus_sync (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksPartition*")]
+		public PartitionProxy.sync (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_partition_skeleton_get_type ()")]
+	public class PartitionSkeleton : GLib.DBusInterfaceSkeleton, GLib.DBusInterface, UDisks.Partition {
+		[CCode (has_construct_function = false, type = "UDisksPartition*")]
+		public PartitionSkeleton ();
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_partition_table_proxy_get_type ()")]
+	public class PartitionTableProxy : GLib.DBusProxy, GLib.AsyncInitable, GLib.DBusInterface, GLib.Initable, UDisks.PartitionTable {
+		[CCode (cname = "udisks_partition_table_proxy_new")]
+		public async PartitionTableProxy (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksPartitionTable*")]
+		public PartitionTableProxy.finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (cname = "udisks_partition_table_proxy_new_for_bus")]
+		public async PartitionTableProxy.for_bus (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksPartitionTable*")]
+		public PartitionTableProxy.for_bus_finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksPartitionTable*")]
+		public PartitionTableProxy.for_bus_sync (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksPartitionTable*")]
+		public PartitionTableProxy.sync (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_partition_table_skeleton_get_type ()")]
+	public class PartitionTableSkeleton : GLib.DBusInterfaceSkeleton, GLib.DBusInterface, UDisks.PartitionTable {
+		[CCode (has_construct_function = false, type = "UDisksPartitionTable*")]
+		public PartitionTableSkeleton ();
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "udisks_partition_type_info_get_type ()")]
+	[Compact]
+	public class PartitionTypeInfo {
+		public UDisks.PartitionTypeInfoFlags flags;
+		public weak string table_subtype;
+		public weak string table_type;
+		public weak string type;
+		public void free ();
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_swapspace_proxy_get_type ()")]
+	public class SwapspaceProxy : GLib.DBusProxy, GLib.AsyncInitable, GLib.DBusInterface, GLib.Initable, UDisks.Swapspace {
+		[CCode (cname = "udisks_swapspace_proxy_new")]
+		public async SwapspaceProxy (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksSwapspace*")]
+		public SwapspaceProxy.finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (cname = "udisks_swapspace_proxy_new_for_bus")]
+		public async SwapspaceProxy.for_bus (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable);
+		[CCode (has_construct_function = false, type = "UDisksSwapspace*")]
+		public SwapspaceProxy.for_bus_finish (GLib.AsyncResult res) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksSwapspace*")]
+		public SwapspaceProxy.for_bus_sync (GLib.BusType bus_type, GLib.DBusProxyFlags flags, string name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+		[CCode (has_construct_function = false, type = "UDisksSwapspace*")]
+		public SwapspaceProxy.sync (GLib.DBusConnection connection, GLib.DBusProxyFlags flags, string? name, string object_path, GLib.Cancellable? cancellable) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_swapspace_skeleton_get_type ()")]
+	public class SwapspaceSkeleton : GLib.DBusInterfaceSkeleton, GLib.DBusInterface, UDisks.Swapspace {
+		[CCode (has_construct_function = false, type = "UDisksSwapspace*")]
+		public SwapspaceSkeleton ();
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_block_get_type ()")]
+	public interface Block : GLib.Object {
+		public async bool call_add_configuration_item (GLib.Variant arg_item, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_add_configuration_item_sync (GLib.Variant arg_item, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_format (string arg_type, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_format_sync (string arg_type, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_get_secret_configuration (GLib.Variant arg_options, GLib.Cancellable? cancellable, out GLib.Variant out_configuration) throws GLib.Error;
+		public bool call_get_secret_configuration_sync (GLib.Variant arg_options, out GLib.Variant out_configuration, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_open_for_backup (GLib.Variant arg_options, GLib.UnixFDList? fd_list, GLib.Cancellable? cancellable, out GLib.Variant out_fd, out GLib.UnixFDList out_fd_list) throws GLib.Error;
+		public bool call_open_for_backup_sync (GLib.Variant arg_options, GLib.UnixFDList? fd_list, out GLib.Variant out_fd, out GLib.UnixFDList out_fd_list, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_open_for_restore (GLib.Variant arg_options, GLib.UnixFDList? fd_list, GLib.Cancellable? cancellable, out GLib.Variant out_fd, out GLib.UnixFDList out_fd_list) throws GLib.Error;
+		public bool call_open_for_restore_sync (GLib.Variant arg_options, GLib.UnixFDList? fd_list, out GLib.Variant out_fd, out GLib.UnixFDList out_fd_list, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_remove_configuration_item (GLib.Variant arg_item, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_remove_configuration_item_sync (GLib.Variant arg_item, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_update_configuration_item (GLib.Variant arg_old_item, GLib.Variant arg_new_item, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_update_configuration_item_sync (GLib.Variant arg_old_item, GLib.Variant arg_new_item, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public void complete_add_configuration_item (owned GLib.DBusMethodInvocation invocation);
+		public void complete_format (owned GLib.DBusMethodInvocation invocation);
+		public void complete_get_secret_configuration (owned GLib.DBusMethodInvocation invocation, GLib.Variant configuration);
+		public void complete_open_for_backup (owned GLib.DBusMethodInvocation invocation, GLib.UnixFDList? fd_list, GLib.Variant fd);
+		public void complete_open_for_restore (owned GLib.DBusMethodInvocation invocation, GLib.UnixFDList? fd_list, GLib.Variant fd);
+		public void complete_remove_configuration_item (owned GLib.DBusMethodInvocation invocation);
+		public void complete_update_configuration_item (owned GLib.DBusMethodInvocation invocation);
+		public static unowned GLib.DBusInterfaceInfo interface_info ();
+		public static uint override_properties (GLib.ObjectClass klass, uint property_id_begin);
+		[NoAccessorMethod]
+		public abstract GLib.Variant configuration { owned get; set; }
+		[NoAccessorMethod]
+		public abstract string crypto_backing_device { owned get; set; }
+		[NoAccessorMethod]
+		public abstract string device { owned get; set; }
+		[NoAccessorMethod]
+		public abstract uint64 device_number { get; set; }
+		[NoAccessorMethod]
+		public abstract string drive { owned get; set; }
+		[NoAccessorMethod]
+		public abstract bool hint_auto { get; set; }
+		[NoAccessorMethod]
+		public abstract string hint_icon_name { owned get; set; }
+		[NoAccessorMethod]
+		public abstract bool hint_ignore { get; set; }
+		[NoAccessorMethod]
+		public abstract string hint_name { owned get; set; }
+		[NoAccessorMethod]
+		public abstract bool hint_partitionable { get; set; }
+		[NoAccessorMethod]
+		public abstract bool hint_system { get; set; }
+		[NoAccessorMethod]
+		public abstract string id_label { owned get; set; }
+		[NoAccessorMethod]
+		public abstract string id_type { owned get; set; }
+		[NoAccessorMethod]
+		public abstract string id_usage { owned get; set; }
+		[NoAccessorMethod]
+		public abstract string id_uuid { owned get; set; }
+		[NoAccessorMethod]
+		public abstract string id_version { owned get; set; }
+		[NoAccessorMethod]
+		public abstract string preferred_device { owned get; set; }
+		[NoAccessorMethod]
+		public abstract bool read_only { get; set; }
+		[NoAccessorMethod]
+		public abstract uint64 size { get; set; }
+		[CCode (array_length = false, array_null_terminated = true)]
+		[NoAccessorMethod]
+		public abstract string[] symlinks { owned get; set; }
+		public virtual signal bool handle_add_configuration_item (GLib.DBusMethodInvocation invocation, GLib.Variant arg_item, GLib.Variant arg_options);
+		public virtual signal bool handle_format (GLib.DBusMethodInvocation invocation, string arg_type, GLib.Variant arg_options);
+		public virtual signal bool handle_get_secret_configuration (GLib.DBusMethodInvocation invocation, GLib.Variant arg_options);
+		public virtual signal bool handle_open_for_backup (GLib.DBusMethodInvocation invocation, GLib.UnixFDList? fd_list, GLib.Variant arg_options);
+		public virtual signal bool handle_open_for_restore (GLib.DBusMethodInvocation invocation, GLib.UnixFDList? fd_list, GLib.Variant arg_options);
+		public virtual signal bool handle_remove_configuration_item (GLib.DBusMethodInvocation invocation, GLib.Variant arg_item, GLib.Variant arg_options);
+		public virtual signal bool handle_update_configuration_item (GLib.DBusMethodInvocation invocation, GLib.Variant arg_old_item, GLib.Variant arg_new_item, GLib.Variant arg_options);
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_drive_get_type ()")]
+	public interface Drive : GLib.Object {
+		public async bool call_eject (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_eject_sync (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public void complete_eject (owned GLib.DBusMethodInvocation invocation);
+		public static unowned GLib.DBusInterfaceInfo interface_info ();
+		public static uint override_properties (GLib.ObjectClass klass, uint property_id_begin);
+		[NoAccessorMethod]
+		public abstract string connection_bus { owned get; set; }
+		[NoAccessorMethod]
+		public abstract bool ejectable { get; set; }
+		[NoAccessorMethod]
+		public abstract string media { owned get; set; }
+		[NoAccessorMethod]
+		public abstract bool media_available { get; set; }
+		[NoAccessorMethod]
+		public abstract bool media_change_detected { get; set; }
+		[CCode (array_length = false, array_null_terminated = true)]
+		[NoAccessorMethod]
+		public abstract string[] media_compatibility { owned get; set; }
+		[NoAccessorMethod]
+		public abstract bool media_removable { get; set; }
+		[NoAccessorMethod]
+		public abstract string model { owned get; set; }
+		[NoAccessorMethod]
+		public abstract bool optical { get; set; }
+		[NoAccessorMethod]
+		public abstract bool optical_blank { get; set; }
+		[NoAccessorMethod]
+		public abstract uint optical_num_audio_tracks { get; set; }
+		[NoAccessorMethod]
+		public abstract uint optical_num_data_tracks { get; set; }
+		[NoAccessorMethod]
+		public abstract uint optical_num_sessions { get; set; }
+		[NoAccessorMethod]
+		public abstract uint optical_num_tracks { get; set; }
+		[NoAccessorMethod]
+		public abstract bool removable { get; set; }
+		[NoAccessorMethod]
+		public abstract string revision { owned get; set; }
+		[NoAccessorMethod]
+		public abstract int rotation_rate { get; set; }
+		[NoAccessorMethod]
+		public abstract string serial { owned get; set; }
+		[NoAccessorMethod]
+		public abstract uint64 size { get; set; }
+		[NoAccessorMethod]
+		public abstract string sort_key { owned get; set; }
+		[NoAccessorMethod]
+		public abstract uint64 time_detected { get; set; }
+		[NoAccessorMethod]
+		public abstract uint64 time_media_detected { get; set; }
+		[NoAccessorMethod]
+		public abstract string vendor { owned get; set; }
+		[NoAccessorMethod]
+		public abstract string wwn { owned get; set; }
+		public virtual signal bool handle_eject (GLib.DBusMethodInvocation invocation, GLib.Variant arg_options);
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_drive_ata_get_type ()")]
+	public interface DriveAta : GLib.Object {
+		public async bool call_smart_get_attributes (GLib.Variant arg_options, GLib.Cancellable? cancellable, out GLib.Variant out_attributes) throws GLib.Error;
+		public bool call_smart_get_attributes_sync (GLib.Variant arg_options, out GLib.Variant out_attributes, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_smart_selftest_abort (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_smart_selftest_abort_sync (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_smart_selftest_start (string arg_type, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_smart_selftest_start_sync (string arg_type, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_smart_update (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_smart_update_sync (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public void complete_smart_get_attributes (owned GLib.DBusMethodInvocation invocation, GLib.Variant attributes);
+		public void complete_smart_selftest_abort (owned GLib.DBusMethodInvocation invocation);
+		public void complete_smart_selftest_start (owned GLib.DBusMethodInvocation invocation);
+		public void complete_smart_update (owned GLib.DBusMethodInvocation invocation);
+		public static unowned GLib.DBusInterfaceInfo interface_info ();
+		public static uint override_properties (GLib.ObjectClass klass, uint property_id_begin);
+		[NoAccessorMethod]
+		public abstract bool smart_enabled { get; set; }
+		[NoAccessorMethod]
+		public abstract bool smart_failing { get; set; }
+		[NoAccessorMethod]
+		public abstract int smart_num_attributes_failed_in_the_past { get; set; }
+		[NoAccessorMethod]
+		public abstract int smart_num_attributes_failing { get; set; }
+		[NoAccessorMethod]
+		public abstract int64 smart_num_bad_sectors { get; set; }
+		[NoAccessorMethod]
+		public abstract uint64 smart_power_on_seconds { get; set; }
+		[NoAccessorMethod]
+		public abstract int smart_selftest_percent_remaining { get; set; }
+		[NoAccessorMethod]
+		public abstract string smart_selftest_status { owned get; set; }
+		[NoAccessorMethod]
+		public abstract bool smart_supported { get; set; }
+		[NoAccessorMethod]
+		public abstract double smart_temperature { get; set; }
+		[NoAccessorMethod]
+		public abstract uint64 smart_updated { get; set; }
+		public virtual signal bool handle_smart_get_attributes (GLib.DBusMethodInvocation invocation, GLib.Variant arg_options);
+		public virtual signal bool handle_smart_selftest_abort (GLib.DBusMethodInvocation invocation, GLib.Variant arg_options);
+		public virtual signal bool handle_smart_selftest_start (GLib.DBusMethodInvocation invocation, string arg_type, GLib.Variant arg_options);
+		public virtual signal bool handle_smart_update (GLib.DBusMethodInvocation invocation, GLib.Variant arg_options);
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_encrypted_get_type ()")]
+	public interface Encrypted : GLib.Object {
+		public async bool call_change_passphrase (string arg_passphrase, string arg_new_passphrase, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_change_passphrase_sync (string arg_passphrase, string arg_new_passphrase, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_lock (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_lock_sync (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_unlock (string arg_passphrase, GLib.Variant arg_options, GLib.Cancellable? cancellable, out string out_cleartext_device) throws GLib.Error;
+		public bool call_unlock_sync (string arg_passphrase, GLib.Variant arg_options, out string out_cleartext_device, GLib.Cancellable? cancellable) throws GLib.Error;
+		public void complete_change_passphrase (owned GLib.DBusMethodInvocation invocation);
+		public void complete_lock (owned GLib.DBusMethodInvocation invocation);
+		public void complete_unlock (owned GLib.DBusMethodInvocation invocation, string cleartext_device);
+		public static unowned GLib.DBusInterfaceInfo interface_info ();
+		public static uint override_properties (GLib.ObjectClass klass, uint property_id_begin);
+		public virtual signal bool handle_change_passphrase (GLib.DBusMethodInvocation invocation, string arg_passphrase, string arg_new_passphrase, GLib.Variant arg_options);
+		public virtual signal bool handle_lock (GLib.DBusMethodInvocation invocation, GLib.Variant arg_options);
+		public virtual signal bool handle_unlock (GLib.DBusMethodInvocation invocation, string arg_passphrase, GLib.Variant arg_options);
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_filesystem_get_type ()")]
+	public interface Filesystem : GLib.Object {
+		public async bool call_mount (GLib.Variant arg_options, GLib.Cancellable? cancellable, out string out_mount_path) throws GLib.Error;
+		public bool call_mount_sync (GLib.Variant arg_options, out string out_mount_path, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_set_label (string arg_label, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_set_label_sync (string arg_label, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_unmount (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_unmount_sync (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public void complete_mount (owned GLib.DBusMethodInvocation invocation, string mount_path);
+		public void complete_set_label (owned GLib.DBusMethodInvocation invocation);
+		public void complete_unmount (owned GLib.DBusMethodInvocation invocation);
+		public static unowned GLib.DBusInterfaceInfo interface_info ();
+		public static uint override_properties (GLib.ObjectClass klass, uint property_id_begin);
+		[CCode (array_length = false, array_null_terminated = true)]
+		[NoAccessorMethod]
+		public abstract string[] mount_points { owned get; set; }
+		public virtual signal bool handle_mount (GLib.DBusMethodInvocation invocation, GLib.Variant arg_options);
+		public virtual signal bool handle_set_label (GLib.DBusMethodInvocation invocation, string arg_label, GLib.Variant arg_options);
+		public virtual signal bool handle_unmount (GLib.DBusMethodInvocation invocation, GLib.Variant arg_options);
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_job_get_type ()")]
+	public interface Job : GLib.Object {
+		public async bool call_cancel (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_cancel_sync (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public void complete_cancel (owned GLib.DBusMethodInvocation invocation);
+		public void emit_completed (bool arg_success, string arg_message);
+		public static unowned GLib.DBusInterfaceInfo interface_info ();
+		public static uint override_properties (GLib.ObjectClass klass, uint property_id_begin);
+		[NoAccessorMethod]
+		public abstract uint64 expected_end_time { get; set; }
+		[CCode (array_length = false, array_null_terminated = true)]
+		[NoAccessorMethod]
+		public abstract string[] objects { owned get; set; }
+		[NoAccessorMethod]
+		public abstract double progress { get; set; }
+		[NoAccessorMethod]
+		public abstract uint64 start_time { get; set; }
+		public virtual signal void completed (bool arg_success, string arg_message);
+		public virtual signal bool handle_cancel (GLib.DBusMethodInvocation invocation, GLib.Variant arg_options);
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_loop_get_type ()")]
+	public interface Loop : GLib.Object {
+		public async bool call_delete (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_delete_sync (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public void complete_delete (owned GLib.DBusMethodInvocation invocation);
+		public static unowned GLib.DBusInterfaceInfo interface_info ();
+		public static uint override_properties (GLib.ObjectClass klass, uint property_id_begin);
+		[NoAccessorMethod]
+		public abstract string backing_file { owned get; set; }
+		public virtual signal bool handle_delete (GLib.DBusMethodInvocation invocation, GLib.Variant arg_options);
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_manager_get_type ()")]
+	public interface Manager : GLib.Object {
+		public async bool call_loop_setup (GLib.Variant arg_fd, GLib.Variant arg_options, GLib.UnixFDList? fd_list, GLib.Cancellable? cancellable, out string out_resulting_device, out GLib.UnixFDList out_fd_list) throws GLib.Error;
+		public bool call_loop_setup_sync (GLib.Variant arg_fd, GLib.Variant arg_options, GLib.UnixFDList? fd_list, out string out_resulting_device, out GLib.UnixFDList out_fd_list, GLib.Cancellable? cancellable) throws GLib.Error;
+		public void complete_loop_setup (owned GLib.DBusMethodInvocation invocation, GLib.UnixFDList? fd_list, string resulting_device);
+		public static unowned GLib.DBusInterfaceInfo interface_info ();
+		public static uint override_properties (GLib.ObjectClass klass, uint property_id_begin);
+		[NoAccessorMethod]
+		public abstract string version { owned get; set; }
+		public virtual signal bool handle_loop_setup (GLib.DBusMethodInvocation invocation, GLib.UnixFDList? fd_list, GLib.Variant arg_fd, GLib.Variant arg_options);
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_object_get_type ()")]
+	public interface Object : GLib.DBusObject, GLib.Object {
+		public UDisks.Block get_block ();
+		public UDisks.Drive get_drive ();
+		public UDisks.DriveAta get_drive_ata ();
+		public UDisks.Encrypted get_encrypted ();
+		public UDisks.Filesystem get_filesystem ();
+		public UDisks.Job get_job ();
+		public UDisks.Loop get_loop ();
+		public UDisks.Manager get_manager ();
+		public UDisks.Partition get_partition ();
+		public UDisks.PartitionTable get_partition_table ();
+		public UDisks.Swapspace get_swapspace ();
+		[NoAccessorMethod]
+		public abstract UDisks.Block block { owned get; set; }
+		[NoAccessorMethod]
+		public abstract UDisks.Drive drive { owned get; set; }
+		[NoAccessorMethod]
+		public abstract UDisks.DriveAta drive_ata { owned get; set; }
+		[NoAccessorMethod]
+		public abstract UDisks.Encrypted encrypted { owned get; set; }
+		[NoAccessorMethod]
+		public abstract UDisks.Filesystem filesystem { owned get; set; }
+		[NoAccessorMethod]
+		public abstract UDisks.Job job { owned get; set; }
+		[NoAccessorMethod]
+		public abstract UDisks.Loop loop { owned get; set; }
+		[NoAccessorMethod]
+		public abstract UDisks.Manager manager { owned get; set; }
+		[NoAccessorMethod]
+		public abstract UDisks.Partition partition { owned get; set; }
+		[NoAccessorMethod]
+		public abstract UDisks.PartitionTable partition_table { owned get; set; }
+		[NoAccessorMethod]
+		public abstract UDisks.Swapspace swapspace { owned get; set; }
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_partition_get_type ()")]
+	public interface Partition : GLib.Object {
+		public async bool call_delete (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_delete_sync (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_set_flags (uint64 arg_flags, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_set_flags_sync (uint64 arg_flags, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_set_name (string arg_name, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_set_name_sync (string arg_name, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_set_type (string arg_type, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_set_type_sync (string arg_type, GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public void complete_delete (owned GLib.DBusMethodInvocation invocation);
+		public void complete_set_flags (owned GLib.DBusMethodInvocation invocation);
+		public void complete_set_name (owned GLib.DBusMethodInvocation invocation);
+		public void complete_set_type (owned GLib.DBusMethodInvocation invocation);
+		public static unowned GLib.DBusInterfaceInfo interface_info ();
+		public static uint override_properties (GLib.ObjectClass klass, uint property_id_begin);
+		[NoAccessorMethod]
+		public abstract uint64 flags { get; set; }
+		[NoAccessorMethod]
+		public abstract bool is_contained { get; set; }
+		[NoAccessorMethod]
+		public abstract bool is_container { get; set; }
+		[NoAccessorMethod]
+		public abstract string name { owned get; set; }
+		[NoAccessorMethod]
+		public abstract uint number { get; set; }
+		[NoAccessorMethod]
+		public abstract uint64 offset { get; set; }
+		[NoAccessorMethod]
+		public abstract uint64 size { get; set; }
+		[NoAccessorMethod]
+		public abstract string table { owned get; set; }
+		[NoAccessorMethod]
+		public abstract string type_ { owned get; set; }
+		[NoAccessorMethod]
+		public abstract string uuid { owned get; set; }
+		public virtual signal bool handle_delete (GLib.DBusMethodInvocation invocation, GLib.Variant arg_options);
+		public virtual signal bool handle_set_flags (GLib.DBusMethodInvocation invocation, uint64 arg_flags, GLib.Variant arg_options);
+		public virtual signal bool handle_set_name (GLib.DBusMethodInvocation invocation, string arg_name, GLib.Variant arg_options);
+		public virtual signal bool handle_set_type (GLib.DBusMethodInvocation invocation, string arg_type, GLib.Variant arg_options);
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_partition_table_get_type ()")]
+	public interface PartitionTable : GLib.Object {
+		public async bool call_create_partition (uint64 arg_offset, uint64 arg_size, string arg_type, string arg_name, GLib.Variant arg_options, GLib.Cancellable? cancellable, out string out_created_partition) throws GLib.Error;
+		public bool call_create_partition_sync (uint64 arg_offset, uint64 arg_size, string arg_type, string arg_name, GLib.Variant arg_options, out string out_created_partition, GLib.Cancellable? cancellable) throws GLib.Error;
+		public void complete_create_partition (owned GLib.DBusMethodInvocation invocation, string created_partition);
+		public static unowned GLib.DBusInterfaceInfo interface_info ();
+		public static uint override_properties (GLib.ObjectClass klass, uint property_id_begin);
+		[NoAccessorMethod]
+		public abstract string type_ { owned get; set; }
+		public virtual signal bool handle_create_partition (GLib.DBusMethodInvocation invocation, uint64 arg_offset, uint64 arg_size, string arg_type, string arg_name, GLib.Variant arg_options);
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", type_id = "udisks_swapspace_get_type ()")]
+	public interface Swapspace : GLib.Object {
+		public async bool call_start (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_start_sync (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public async bool call_stop (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public bool call_stop_sync (GLib.Variant arg_options, GLib.Cancellable? cancellable) throws GLib.Error;
+		public void complete_start (owned GLib.DBusMethodInvocation invocation);
+		public void complete_stop (owned GLib.DBusMethodInvocation invocation);
+		public static unowned GLib.DBusInterfaceInfo interface_info ();
+		public static uint override_properties (GLib.ObjectClass klass, uint property_id_begin);
+		[NoAccessorMethod]
+		public abstract bool active { get; set; }
+		public virtual signal bool handle_start (GLib.DBusMethodInvocation invocation, GLib.Variant arg_options);
+		public virtual signal bool handle_stop (GLib.DBusMethodInvocation invocation, GLib.Variant arg_options);
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", cprefix = "UDISKS_ERROR_")]
+	public enum Error {
+		FAILED,
+		CANCELLED,
+		ALREADY_CANCELLED,
+		NOT_AUTHORIZED,
+		NOT_AUTHORIZED_CAN_OBTAIN,
+		NOT_AUTHORIZED_DISMISSED,
+		ALREADY_MOUNTED,
+		NOT_MOUNTED,
+		OPTION_NOT_PERMITTED,
+		MOUNTED_BY_OTHER_USER,
+		ALREADY_UNMOUNTING,
+		NOT_SUPPORTED,
+		TIMED_OUT,
+		WOULD_WAKEUP,
+		DEVICE_BUSY;
+		public static GLib.Quark quark ();
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", cprefix = "UDISKS_PARTITION_TYPE_INFO_FLAGS_")]
+	[Flags]
+	public enum PartitionTypeInfoFlags {
+		NONE,
+		SWAP,
+		RAID,
+		HIDDEN,
+		CREATE_ONLY,
+		SYSTEM
+	}
+	[CCode (cheader_filename = "udisks/udisks.h", cname = "UDISKS_ERROR_NUM_ENTRIES")]
+	public const int ERROR_NUM_ENTRIES;
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static unowned GLib.DBusInterfaceInfo block_interface_info ();
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static uint block_override_properties (GLib.ObjectClass klass, uint property_id_begin);
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static unowned GLib.DBusInterfaceInfo drive_ata_interface_info ();
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static uint drive_ata_override_properties (GLib.ObjectClass klass, uint property_id_begin);
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static unowned GLib.DBusInterfaceInfo drive_interface_info ();
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static uint drive_override_properties (GLib.ObjectClass klass, uint property_id_begin);
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static unowned GLib.DBusInterfaceInfo encrypted_interface_info ();
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static uint encrypted_override_properties (GLib.ObjectClass klass, uint property_id_begin);
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static unowned GLib.DBusInterfaceInfo filesystem_interface_info ();
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static uint filesystem_override_properties (GLib.ObjectClass klass, uint property_id_begin);
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static unowned GLib.DBusInterfaceInfo job_interface_info ();
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static uint job_override_properties (GLib.ObjectClass klass, uint property_id_begin);
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static unowned GLib.DBusInterfaceInfo loop_interface_info ();
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static uint loop_override_properties (GLib.ObjectClass klass, uint property_id_begin);
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static unowned GLib.DBusInterfaceInfo manager_interface_info ();
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static uint manager_override_properties (GLib.ObjectClass klass, uint property_id_begin);
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static unowned GLib.DBusInterfaceInfo partition_interface_info ();
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static uint partition_override_properties (GLib.ObjectClass klass, uint property_id_begin);
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static unowned GLib.DBusInterfaceInfo partition_table_interface_info ();
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static uint partition_table_override_properties (GLib.ObjectClass klass, uint property_id_begin);
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static unowned GLib.DBusInterfaceInfo swapspace_interface_info ();
+	[CCode (cheader_filename = "udisks/udisks.h")]
+	public static uint swapspace_override_properties (GLib.ObjectClass klass, uint property_id_begin);
+}
diff --git a/vapi/vte-2.90.vapi b/vapi/vte-2.90.vapi
index 14816e2..f39ecb0 100644
--- a/vapi/vte-2.90.vapi
+++ b/vapi/vte-2.90.vapi
@@ -8,7 +8,6 @@ namespace Vte {
 		public Pty (Vte.PtyFlags flags) throws GLib.Error;
 		public void child_setup ();
 		public void close ();
-		public static GLib.Quark error_quark ();
 		[CCode (has_construct_function = false)]
 		public Pty.foreign (int fd) throws GLib.Error;
 		public int get_fd ();
@@ -18,11 +17,13 @@ namespace Vte {
 		public bool set_utf8 (bool utf8) throws GLib.Error;
 		public int fd { get; construct; }
 		[NoAccessorMethod]
+		public Vte.PtyFlags flags { get; construct; }
+		[NoAccessorMethod]
 		public string term { owned get; set; }
 	}
 	[CCode (cheader_filename = "vte/vte.h", type_id = "vte_terminal_get_type ()")]
 	public class Terminal : Gtk.Widget, Atk.Implementor, Gtk.Buildable, Gtk.Scrollable {
-		[CCode (has_construct_function = false)]
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
 		public Terminal ();
 		public void copy_primary ();
 		public void feed (string data, long length);
@@ -126,6 +127,12 @@ namespace Vte {
 		public Gdk.Color background_tint_color { get; set; }
 		[NoAccessorMethod]
 		public bool background_transparent { get; set; }
+		[NoAccessorMethod]
+		public Vte.TerminalEraseBinding backspace_binding { get; set; }
+		public Vte.TerminalCursorBlinkMode cursor_blink_mode { get; set; }
+		public Vte.TerminalCursorShape cursor_shape { get; set; }
+		[NoAccessorMethod]
+		public Vte.TerminalEraseBinding delete_binding { get; set; }
 		public string emulation { get; set; }
 		public string encoding { get; set; }
 		[NoAccessorMethod]
@@ -182,11 +189,6 @@ namespace Vte {
 	[CCode (cheader_filename = "vte/vte.h", cname = "_VteCharAttributes", has_type_id = false)]
 	public struct _CharAttributes {
 	}
-	[CCode (cheader_filename = "vte/vte.h", cprefix = "VTE_PTY_ERROR_")]
-	public enum PtyError {
-		PTY_HELPER_FAILED,
-		PTY98_FAILED
-	}
 	[CCode (cheader_filename = "vte/vte.h", cprefix = "VTE_PTY_")]
 	[Flags]
 	public enum PtyFlags {
@@ -197,6 +199,12 @@ namespace Vte {
 		NO_FALLBACK,
 		DEFAULT
 	}
+	[CCode (cheader_filename = "vte/vte.h", cprefix = "VTE_ANTI_ALIAS_")]
+	public enum TerminalAntiAlias {
+		USE_DEFAULT,
+		FORCE_ENABLE,
+		FORCE_DISABLE
+	}
 	[CCode (cheader_filename = "vte/vte.h", cprefix = "VTE_CURSOR_BLINK_")]
 	public enum TerminalCursorBlinkMode {
 		SYSTEM,
@@ -221,6 +229,12 @@ namespace Vte {
 	public enum TerminalWriteFlags {
 		DEFAULT
 	}
+	[CCode (cheader_filename = "vte/vte.h", cprefix = "VTE_PTY_ERROR_")]
+	public errordomain PtyError {
+		PTY_HELPER_FAILED,
+		PTY98_FAILED;
+		public static GLib.Quark quark ();
+	}
 	[CCode (cheader_filename = "vte/vte.h", instance_pos = 3.9)]
 	public delegate bool SelectionFunc (Vte.Terminal terminal, long column, long row);
 	[CCode (cheader_filename = "vte/vte.h")]
diff --git a/vapi/webkit-1.0.vapi b/vapi/webkit-1.0.vapi
index 03aa1fc..01954c3 100644
--- a/vapi/webkit-1.0.vapi
+++ b/vapi/webkit-1.0.vapi
@@ -3,6 +3,4002 @@
 [CCode (lower_case_cprefix = "webkit_")]
 namespace WebKit {
 	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMAttr : WebKit.DOMNode, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMAttr ();
+		public bool get_is_id ();
+		public unowned string get_name ();
+		public unowned WebKit.DOMElement get_owner_element ();
+		public bool get_specified ();
+		public unowned string get_value ();
+		public void set_value (string value) throws GLib.Error;
+		public bool is_id { get; }
+		public string name { get; }
+		public WebKit.DOMElement owner_element { get; }
+		public bool specified { get; }
+		public string value { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMBarInfo : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMBarInfo ();
+		public bool get_visible ();
+		public bool visible { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMBlob : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMBlob ();
+		public uint64 get_size ();
+		public unowned WebKit.DOMBlob slice (int64 start, int64 end, string content_type);
+		public unowned WebKit.DOMBlob webkit_slice (int64 start, int64 end, string content_type);
+		public uint64 size { get; }
+		[NoAccessorMethod]
+		public string type { owned get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMCDATASection : WebKit.DOMText, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMCDATASection ();
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMCSSRule : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMCSSRule ();
+		[CCode (cname = "webkit_dom_css_rule_get_css_text")]
+		public unowned string get_css_text ();
+		[CCode (cname = "webkit_dom_css_rule_get_parent_rule")]
+		public unowned WebKit.DOMCSSRule get_parent_rule ();
+		[CCode (cname = "webkit_dom_css_rule_get_parent_style_sheet")]
+		public unowned WebKit.DOMCSSStyleSheet get_parent_style_sheet ();
+		[CCode (cname = "webkit_dom_css_rule_set_css_text")]
+		public void set_css_text (string value) throws GLib.Error;
+		public string css_text { get; set; }
+		public WebKit.DOMCSSRule parent_rule { get; }
+		public WebKit.DOMCSSStyleSheet parent_style_sheet { get; }
+		[NoAccessorMethod]
+		public uint type { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMCSSRuleList : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMCSSRuleList ();
+		[CCode (cname = "webkit_dom_css_rule_list_get_length")]
+		public ulong get_length ();
+		[CCode (cname = "webkit_dom_css_rule_list_item")]
+		public unowned WebKit.DOMCSSRule item (ulong index);
+		public ulong length { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMCSSStyleDeclaration : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMCSSStyleDeclaration ();
+		[CCode (cname = "webkit_dom_css_style_declaration_get_css_text")]
+		public unowned string get_css_text ();
+		[CCode (cname = "webkit_dom_css_style_declaration_get_length")]
+		public ulong get_length ();
+		[CCode (cname = "webkit_dom_css_style_declaration_get_parent_rule")]
+		public unowned WebKit.DOMCSSRule get_parent_rule ();
+		[CCode (cname = "webkit_dom_css_style_declaration_get_property_css_value")]
+		public unowned WebKit.DOMCSSValue get_property_css_value (string property_name);
+		[CCode (cname = "webkit_dom_css_style_declaration_get_property_priority")]
+		public unowned string get_property_priority (string property_name);
+		[CCode (cname = "webkit_dom_css_style_declaration_get_property_shorthand")]
+		public unowned string get_property_shorthand (string property_name);
+		[CCode (cname = "webkit_dom_css_style_declaration_get_property_value")]
+		public unowned string get_property_value (string property_name);
+		[CCode (cname = "webkit_dom_css_style_declaration_is_property_implicit")]
+		public bool is_property_implicit (string property_name);
+		[CCode (cname = "webkit_dom_css_style_declaration_item")]
+		public unowned string item (ulong index);
+		[CCode (cname = "webkit_dom_css_style_declaration_remove_property")]
+		public unowned string remove_property (string property_name) throws GLib.Error;
+		[CCode (cname = "webkit_dom_css_style_declaration_set_css_text")]
+		public void set_css_text (string value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_css_style_declaration_set_property")]
+		public void set_property (string property_name, string value, string priority) throws GLib.Error;
+		public string css_text { get; set; }
+		public ulong length { get; }
+		public WebKit.DOMCSSRule parent_rule { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMCSSStyleSheet : WebKit.DOMStyleSheet {
+		[CCode (has_construct_function = false)]
+		protected DOMCSSStyleSheet ();
+		[CCode (cname = "webkit_dom_css_style_sheet_add_rule")]
+		public long add_rule (string selector, string style, ulong index) throws GLib.Error;
+		[CCode (cname = "webkit_dom_css_style_sheet_delete_rule")]
+		public void delete_rule (ulong index) throws GLib.Error;
+		[CCode (cname = "webkit_dom_css_style_sheet_get_css_rules")]
+		public unowned WebKit.DOMCSSRuleList get_css_rules ();
+		[CCode (cname = "webkit_dom_css_style_sheet_get_owner_rule")]
+		public unowned WebKit.DOMCSSRule get_owner_rule ();
+		[CCode (cname = "webkit_dom_css_style_sheet_get_rules")]
+		public unowned WebKit.DOMCSSRuleList get_rules ();
+		[CCode (cname = "webkit_dom_css_style_sheet_insert_rule")]
+		public ulong insert_rule (string rule, ulong index) throws GLib.Error;
+		[CCode (cname = "webkit_dom_css_style_sheet_remove_rule")]
+		public void remove_rule (ulong index) throws GLib.Error;
+		public WebKit.DOMCSSRuleList css_rules { get; }
+		public WebKit.DOMCSSRule owner_rule { get; }
+		public WebKit.DOMCSSRuleList rules { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMCSSValue : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMCSSValue ();
+		[CCode (cname = "webkit_dom_css_value_get_css_text")]
+		public unowned string get_css_text ();
+		[CCode (cname = "webkit_dom_css_value_get_css_value_type")]
+		public ushort get_css_value_type ();
+		[CCode (cname = "webkit_dom_css_value_set_css_text")]
+		public void set_css_text (string value) throws GLib.Error;
+		public string css_text { get; set; }
+		public uint css_value_type { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMCharacterData : WebKit.DOMNode, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMCharacterData ();
+		public void append_data (string data) throws GLib.Error;
+		public void delete_data (ulong offset, ulong length) throws GLib.Error;
+		public unowned string get_data ();
+		public ulong get_length ();
+		public void insert_data (ulong offset, string data) throws GLib.Error;
+		public void replace_data (ulong offset, ulong length, string data) throws GLib.Error;
+		public void set_data (string value) throws GLib.Error;
+		public unowned string substring_data (ulong offset, ulong length) throws GLib.Error;
+		public string data { get; set; }
+		public ulong length { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMComment : WebKit.DOMCharacterData, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMComment ();
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMConsole : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMConsole ();
+		public unowned WebKit.DOMMemoryInfo get_memory ();
+		public void group_end ();
+		public void time (string title);
+		public WebKit.DOMMemoryInfo memory { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	[Compact]
+	public class DOMCustom {
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	[Compact]
+	public class DOMCustomClass {
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDOMApplicationCache : WebKit.DOMObject, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMDOMApplicationCache ();
+		[CCode (cname = "webkit_dom_dom_application_cache_get_status")]
+		public ushort get_status ();
+		[CCode (cname = "webkit_dom_dom_application_cache_swap_cache")]
+		public void swap_cache () throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_application_cache_update")]
+		public void update () throws GLib.Error;
+		public uint status { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDOMImplementation : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMDOMImplementation ();
+		[CCode (cname = "webkit_dom_dom_implementation_create_css_style_sheet")]
+		public unowned WebKit.DOMCSSStyleSheet create_css_style_sheet (string title, string media) throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_implementation_create_document")]
+		public unowned WebKit.DOMDocument create_document (string namespace_uri, string qualified_name, WebKit.DOMDocumentType doctype) throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_implementation_create_document_type")]
+		public unowned WebKit.DOMDocumentType create_document_type (string qualified_name, string public_id, string system_id) throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_implementation_create_html_document")]
+		public unowned WebKit.DOMHTMLDocument create_html_document (string title);
+		[CCode (cname = "webkit_dom_dom_implementation_has_feature")]
+		public bool has_feature (string feature, string version);
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDOMMimeType : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMDOMMimeType ();
+		[CCode (cname = "webkit_dom_dom_mime_type_get_description")]
+		public unowned string get_description ();
+		[CCode (cname = "webkit_dom_dom_mime_type_get_enabled_plugin")]
+		public unowned WebKit.DOMDOMPlugin get_enabled_plugin ();
+		[CCode (cname = "webkit_dom_dom_mime_type_get_suffixes")]
+		public unowned string get_suffixes ();
+		public string description { get; }
+		public WebKit.DOMDOMPlugin enabled_plugin { get; }
+		public string suffixes { get; }
+		[NoAccessorMethod]
+		public string type { owned get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDOMMimeTypeArray : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMDOMMimeTypeArray ();
+		[CCode (cname = "webkit_dom_dom_mime_type_array_get_length")]
+		public ulong get_length ();
+		[CCode (cname = "webkit_dom_dom_mime_type_array_item")]
+		public unowned WebKit.DOMDOMMimeType item (ulong index);
+		[CCode (cname = "webkit_dom_dom_mime_type_array_named_item")]
+		public unowned WebKit.DOMDOMMimeType named_item (string name);
+		public ulong length { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDOMPlugin : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMDOMPlugin ();
+		[CCode (cname = "webkit_dom_dom_plugin_get_description")]
+		public unowned string get_description ();
+		[CCode (cname = "webkit_dom_dom_plugin_get_filename")]
+		public unowned string get_filename ();
+		[CCode (cname = "webkit_dom_dom_plugin_get_length")]
+		public ulong get_length ();
+		[CCode (cname = "webkit_dom_dom_plugin_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_dom_plugin_item")]
+		public unowned WebKit.DOMDOMMimeType item (ulong index);
+		[CCode (cname = "webkit_dom_dom_plugin_named_item")]
+		public unowned WebKit.DOMDOMMimeType named_item (string name);
+		public string description { get; }
+		public string filename { get; }
+		public ulong length { get; }
+		public string name { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDOMPluginArray : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMDOMPluginArray ();
+		[CCode (cname = "webkit_dom_dom_plugin_array_get_length")]
+		public ulong get_length ();
+		[CCode (cname = "webkit_dom_dom_plugin_array_item")]
+		public unowned WebKit.DOMDOMPlugin item (ulong index);
+		[CCode (cname = "webkit_dom_dom_plugin_array_named_item")]
+		public unowned WebKit.DOMDOMPlugin named_item (string name);
+		[CCode (cname = "webkit_dom_dom_plugin_array_refresh")]
+		public void refresh (bool reload);
+		public ulong length { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDOMSelection : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMDOMSelection ();
+		[CCode (cname = "webkit_dom_dom_selection_add_range")]
+		public void add_range (WebKit.DOMRange range);
+		[CCode (cname = "webkit_dom_dom_selection_collapse")]
+		public void collapse (WebKit.DOMNode node, long index) throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_selection_collapse_to_end")]
+		public void collapse_to_end () throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_selection_collapse_to_start")]
+		public void collapse_to_start () throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_selection_contains_node")]
+		public bool contains_node (WebKit.DOMNode node, bool allow_partial);
+		[CCode (cname = "webkit_dom_dom_selection_delete_from_document")]
+		public void delete_from_document ();
+		[CCode (cname = "webkit_dom_dom_selection_empty")]
+		public void empty ();
+		[CCode (cname = "webkit_dom_dom_selection_extend")]
+		public void extend (WebKit.DOMNode node, long offset) throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_selection_get_anchor_node")]
+		public unowned WebKit.DOMNode get_anchor_node ();
+		[CCode (cname = "webkit_dom_dom_selection_get_anchor_offset")]
+		public long get_anchor_offset ();
+		[CCode (cname = "webkit_dom_dom_selection_get_base_node")]
+		public unowned WebKit.DOMNode get_base_node ();
+		[CCode (cname = "webkit_dom_dom_selection_get_base_offset")]
+		public long get_base_offset ();
+		[CCode (cname = "webkit_dom_dom_selection_get_extent_node")]
+		public unowned WebKit.DOMNode get_extent_node ();
+		[CCode (cname = "webkit_dom_dom_selection_get_extent_offset")]
+		public long get_extent_offset ();
+		[CCode (cname = "webkit_dom_dom_selection_get_focus_node")]
+		public unowned WebKit.DOMNode get_focus_node ();
+		[CCode (cname = "webkit_dom_dom_selection_get_focus_offset")]
+		public long get_focus_offset ();
+		[CCode (cname = "webkit_dom_dom_selection_get_is_collapsed")]
+		public bool get_is_collapsed ();
+		[CCode (cname = "webkit_dom_dom_selection_get_range_at")]
+		public unowned WebKit.DOMRange get_range_at (long index) throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_selection_get_range_count")]
+		public long get_range_count ();
+		[CCode (cname = "webkit_dom_dom_selection_modify")]
+		public void modify (string alter, string direction, string granularity);
+		[CCode (cname = "webkit_dom_dom_selection_remove_all_ranges")]
+		public void remove_all_ranges ();
+		[CCode (cname = "webkit_dom_dom_selection_select_all_children")]
+		public void select_all_children (WebKit.DOMNode node) throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_selection_set_base_and_extent")]
+		public void set_base_and_extent (WebKit.DOMNode base_node, long base_offset, WebKit.DOMNode extent_node, long extent_offset) throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_selection_set_position")]
+		public void set_position (WebKit.DOMNode node, long offset) throws GLib.Error;
+		public WebKit.DOMNode anchor_node { get; }
+		public long anchor_offset { get; }
+		public WebKit.DOMNode base_node { get; }
+		public long base_offset { get; }
+		public WebKit.DOMNode extent_node { get; }
+		public long extent_offset { get; }
+		public WebKit.DOMNode focus_node { get; }
+		public long focus_offset { get; }
+		public bool is_collapsed { get; }
+		public long range_count { get; }
+		[NoAccessorMethod]
+		public string type { owned get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDOMSettableTokenList : WebKit.DOMDOMTokenList {
+		[CCode (has_construct_function = false)]
+		protected DOMDOMSettableTokenList ();
+		[CCode (cname = "webkit_dom_dom_settable_token_list_get_value")]
+		public unowned string get_value ();
+		[CCode (cname = "webkit_dom_dom_settable_token_list_set_value")]
+		public void set_value (string value);
+		public string value { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDOMStringList : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMDOMStringList ();
+		[CCode (cname = "webkit_dom_dom_string_list_contains")]
+		public bool contains (string str);
+		[CCode (cname = "webkit_dom_dom_string_list_get_length")]
+		public ulong get_length ();
+		[CCode (cname = "webkit_dom_dom_string_list_item")]
+		public unowned string item (ulong index);
+		public ulong length { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDOMStringMap : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMDOMStringMap ();
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDOMTokenList : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMDOMTokenList ();
+		[CCode (cname = "webkit_dom_dom_token_list_add")]
+		public void add (string token) throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_token_list_contains")]
+		public bool contains (string token) throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_token_list_get_length")]
+		public ulong get_length ();
+		[CCode (cname = "webkit_dom_dom_token_list_item")]
+		public unowned string item (ulong index);
+		[CCode (cname = "webkit_dom_dom_token_list_remove")]
+		public void remove (string token) throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_token_list_toggle")]
+		public bool toggle (string token) throws GLib.Error;
+		public ulong length { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDOMWindow : WebKit.DOMObject, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMDOMWindow ();
+		[CCode (cname = "webkit_dom_dom_window_alert")]
+		public void alert (string message);
+		[CCode (cname = "webkit_dom_dom_window_atob")]
+		public unowned string atob (string str) throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_window_blur")]
+		public void blur ();
+		[CCode (cname = "webkit_dom_dom_window_btoa")]
+		public unowned string btoa (string str) throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_window_capture_events")]
+		public void capture_events ();
+		[CCode (cname = "webkit_dom_dom_window_clear_interval")]
+		public void clear_interval (long handle);
+		[CCode (cname = "webkit_dom_dom_window_clear_timeout")]
+		public void clear_timeout (long handle);
+		[CCode (cname = "webkit_dom_dom_window_close")]
+		public void close ();
+		[CCode (cname = "webkit_dom_dom_window_confirm")]
+		public bool confirm (string message);
+		[CCode (cname = "webkit_dom_dom_window_find")]
+		public bool find (string str, bool case_sensitive, bool backwards, bool wrap, bool whole_word, bool search_in_frames, bool show_dialog);
+		[CCode (cname = "webkit_dom_dom_window_focus")]
+		public void focus ();
+		[CCode (cname = "webkit_dom_dom_window_get_application_cache")]
+		public unowned WebKit.DOMDOMApplicationCache get_application_cache ();
+		[CCode (cname = "webkit_dom_dom_window_get_client_information")]
+		public unowned WebKit.DOMNavigator get_client_information ();
+		[CCode (cname = "webkit_dom_dom_window_get_closed")]
+		public bool get_closed ();
+		[CCode (cname = "webkit_dom_dom_window_get_computed_style")]
+		public unowned WebKit.DOMCSSStyleDeclaration get_computed_style (WebKit.DOMElement element, string pseudo_element);
+		[CCode (cname = "webkit_dom_dom_window_get_console")]
+		public unowned WebKit.DOMConsole get_console ();
+		[CCode (cname = "webkit_dom_dom_window_get_default_status")]
+		public unowned string get_default_status ();
+		[CCode (cname = "webkit_dom_dom_window_get_device_pixel_ratio")]
+		public double get_device_pixel_ratio ();
+		[CCode (cname = "webkit_dom_dom_window_get_document")]
+		public unowned WebKit.DOMDocument get_document ();
+		[CCode (cname = "webkit_dom_dom_window_get_frame_element")]
+		public unowned WebKit.DOMElement get_frame_element ();
+		[CCode (cname = "webkit_dom_dom_window_get_frames")]
+		public unowned WebKit.DOMDOMWindow get_frames ();
+		[CCode (cname = "webkit_dom_dom_window_get_history")]
+		public unowned WebKit.DOMHistory get_history ();
+		[CCode (cname = "webkit_dom_dom_window_get_inner_height")]
+		public long get_inner_height ();
+		[CCode (cname = "webkit_dom_dom_window_get_inner_width")]
+		public long get_inner_width ();
+		[CCode (cname = "webkit_dom_dom_window_get_length")]
+		public ulong get_length ();
+		[CCode (cname = "webkit_dom_dom_window_get_local_storage")]
+		public unowned WebKit.DOMStorage get_local_storage () throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_window_get_locationbar")]
+		public unowned WebKit.DOMBarInfo get_locationbar ();
+		[CCode (cname = "webkit_dom_dom_window_get_menubar")]
+		public unowned WebKit.DOMBarInfo get_menubar ();
+		[CCode (cname = "webkit_dom_dom_window_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_dom_window_get_navigator")]
+		public unowned WebKit.DOMNavigator get_navigator ();
+		[CCode (cname = "webkit_dom_dom_window_get_offscreen_buffering")]
+		public bool get_offscreen_buffering ();
+		[CCode (cname = "webkit_dom_dom_window_get_opener")]
+		public unowned WebKit.DOMDOMWindow get_opener ();
+		[CCode (cname = "webkit_dom_dom_window_get_outer_height")]
+		public long get_outer_height ();
+		[CCode (cname = "webkit_dom_dom_window_get_outer_width")]
+		public long get_outer_width ();
+		[CCode (cname = "webkit_dom_dom_window_get_page_x_offset")]
+		public long get_page_x_offset ();
+		[CCode (cname = "webkit_dom_dom_window_get_page_y_offset")]
+		public long get_page_y_offset ();
+		[CCode (cname = "webkit_dom_dom_window_get_parent")]
+		public unowned WebKit.DOMDOMWindow get_parent ();
+		[CCode (cname = "webkit_dom_dom_window_get_personalbar")]
+		public unowned WebKit.DOMBarInfo get_personalbar ();
+		[CCode (cname = "webkit_dom_dom_window_get_screen")]
+		public unowned WebKit.DOMScreen get_screen ();
+		[CCode (cname = "webkit_dom_dom_window_get_screen_left")]
+		public long get_screen_left ();
+		[CCode (cname = "webkit_dom_dom_window_get_screen_top")]
+		public long get_screen_top ();
+		[CCode (cname = "webkit_dom_dom_window_get_screen_x")]
+		public long get_screen_x ();
+		[CCode (cname = "webkit_dom_dom_window_get_screen_y")]
+		public long get_screen_y ();
+		[CCode (cname = "webkit_dom_dom_window_get_scroll_x")]
+		public long get_scroll_x ();
+		[CCode (cname = "webkit_dom_dom_window_get_scroll_y")]
+		public long get_scroll_y ();
+		[CCode (cname = "webkit_dom_dom_window_get_scrollbars")]
+		public unowned WebKit.DOMBarInfo get_scrollbars ();
+		[CCode (cname = "webkit_dom_dom_window_get_selection")]
+		public unowned WebKit.DOMDOMSelection get_selection ();
+		[CCode (cname = "webkit_dom_dom_window_get_self")]
+		public unowned WebKit.DOMDOMWindow get_self ();
+		[CCode (cname = "webkit_dom_dom_window_get_session_storage")]
+		public unowned WebKit.DOMStorage get_session_storage () throws GLib.Error;
+		[CCode (cname = "webkit_dom_dom_window_get_status")]
+		public unowned string get_status ();
+		[CCode (cname = "webkit_dom_dom_window_get_statusbar")]
+		public unowned WebKit.DOMBarInfo get_statusbar ();
+		[CCode (cname = "webkit_dom_dom_window_get_style_media")]
+		public unowned WebKit.DOMStyleMedia get_style_media ();
+		[CCode (cname = "webkit_dom_dom_window_get_toolbar")]
+		public unowned WebKit.DOMBarInfo get_toolbar ();
+		[CCode (cname = "webkit_dom_dom_window_get_top")]
+		public unowned WebKit.DOMDOMWindow get_top ();
+		[CCode (cname = "webkit_dom_dom_window_get_window")]
+		public unowned WebKit.DOMDOMWindow get_window ();
+		[CCode (cname = "webkit_dom_dom_window_match_media")]
+		public unowned WebKit.DOMMediaQueryList match_media (string query);
+		[CCode (cname = "webkit_dom_dom_window_move_by")]
+		public void move_by (float x, float y);
+		[CCode (cname = "webkit_dom_dom_window_move_to")]
+		public void move_to (float x, float y);
+		[CCode (cname = "webkit_dom_dom_window_print")]
+		public void print ();
+		[CCode (cname = "webkit_dom_dom_window_prompt")]
+		public unowned string prompt (string message, string default_value);
+		[CCode (cname = "webkit_dom_dom_window_release_events")]
+		public void release_events ();
+		[CCode (cname = "webkit_dom_dom_window_resize_by")]
+		public void resize_by (float x, float y);
+		[CCode (cname = "webkit_dom_dom_window_resize_to")]
+		public void resize_to (float width, float height);
+		[CCode (cname = "webkit_dom_dom_window_scroll")]
+		public void scroll (long x, long y);
+		[CCode (cname = "webkit_dom_dom_window_scroll_by")]
+		public void scroll_by (long x, long y);
+		[CCode (cname = "webkit_dom_dom_window_scroll_to")]
+		public void scroll_to (long x, long y);
+		[CCode (cname = "webkit_dom_dom_window_set_default_status")]
+		public void set_default_status (string value);
+		[CCode (cname = "webkit_dom_dom_window_set_name")]
+		public void set_name (string value);
+		[CCode (cname = "webkit_dom_dom_window_set_status")]
+		public void set_status (string value);
+		[CCode (cname = "webkit_dom_dom_window_stop")]
+		public void stop ();
+		[CCode (cname = "webkit_dom_dom_window_webkit_convert_point_from_node_to_page")]
+		public unowned WebKit.DOMWebKitPoint webkit_convert_point_from_node_to_page (WebKit.DOMNode node, WebKit.DOMWebKitPoint p);
+		[CCode (cname = "webkit_dom_dom_window_webkit_convert_point_from_page_to_node")]
+		public unowned WebKit.DOMWebKitPoint webkit_convert_point_from_page_to_node (WebKit.DOMNode node, WebKit.DOMWebKitPoint p);
+		public WebKit.DOMDOMApplicationCache application_cache { get; }
+		[NoAccessorMethod]
+		public WebKit.DOMNavigator client_information { owned get; set; }
+		public bool closed { get; }
+		[NoAccessorMethod]
+		public WebKit.DOMConsole console { owned get; set; }
+		public string default_status { get; set; }
+		[NoAccessorMethod]
+		public double device_pixel_ratio { get; set; }
+		public WebKit.DOMDocument document { get; }
+		public WebKit.DOMElement frame_element { get; }
+		[NoAccessorMethod]
+		public WebKit.DOMDOMWindow frames { owned get; set; }
+		[NoAccessorMethod]
+		public WebKit.DOMHistory history { owned get; set; }
+		[NoAccessorMethod]
+		public long inner_height { get; set; }
+		[NoAccessorMethod]
+		public long inner_width { get; set; }
+		[NoAccessorMethod]
+		public ulong length { get; set; }
+		public WebKit.DOMStorage local_storage { get; }
+		[NoAccessorMethod]
+		public WebKit.DOMBarInfo locationbar { owned get; set; }
+		[NoAccessorMethod]
+		public WebKit.DOMBarInfo menubar { owned get; set; }
+		public string name { get; set; }
+		[NoAccessorMethod]
+		public WebKit.DOMNavigator navigator { owned get; set; }
+		[NoAccessorMethod]
+		public bool offscreen_buffering { get; set; }
+		[NoAccessorMethod]
+		public WebKit.DOMDOMWindow opener { owned get; set; }
+		[NoAccessorMethod]
+		public long outer_height { get; set; }
+		[NoAccessorMethod]
+		public long outer_width { get; set; }
+		public long page_x_offset { get; }
+		public long page_y_offset { get; }
+		[NoAccessorMethod]
+		public WebKit.DOMDOMWindow parent { owned get; set; }
+		[NoAccessorMethod]
+		public WebKit.DOMBarInfo personalbar { owned get; set; }
+		[NoAccessorMethod]
+		public WebKit.DOMScreen screen { owned get; set; }
+		[NoAccessorMethod]
+		public long screen_left { get; set; }
+		[NoAccessorMethod]
+		public long screen_top { get; set; }
+		[NoAccessorMethod]
+		public long screen_x { get; set; }
+		[NoAccessorMethod]
+		public long screen_y { get; set; }
+		[NoAccessorMethod]
+		public long scroll_x { get; set; }
+		[NoAccessorMethod]
+		public long scroll_y { get; set; }
+		[NoAccessorMethod]
+		public WebKit.DOMBarInfo scrollbars { owned get; set; }
+		[NoAccessorMethod]
+		public WebKit.DOMDOMWindow self { owned get; set; }
+		public WebKit.DOMStorage session_storage { get; }
+		public string status { get; set; }
+		[NoAccessorMethod]
+		public WebKit.DOMBarInfo statusbar { owned get; set; }
+		public WebKit.DOMStyleMedia style_media { get; }
+		[NoAccessorMethod]
+		public WebKit.DOMBarInfo toolbar { owned get; set; }
+		[NoAccessorMethod]
+		public WebKit.DOMDOMWindow top { owned get; set; }
+		public WebKit.DOMDOMWindow window { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDatabase : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMDatabase ();
+		public unowned string get_version ();
+		public string version { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDocument : WebKit.DOMNode, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMDocument ();
+		public unowned WebKit.DOMNode adopt_node (WebKit.DOMNode source) throws GLib.Error;
+		public unowned WebKit.DOMRange caret_range_from_point (long x, long y);
+		public unowned WebKit.DOMAttr create_attribute (string name) throws GLib.Error;
+		public unowned WebKit.DOMAttr create_attribute_ns (string namespace_uri, string qualified_name) throws GLib.Error;
+		public unowned WebKit.DOMCDATASection create_cdata_section (string data) throws GLib.Error;
+		public unowned WebKit.DOMComment create_comment (string data);
+		public unowned WebKit.DOMCSSStyleDeclaration create_css_style_declaration ();
+		public unowned WebKit.DOMDocumentFragment create_document_fragment ();
+		public unowned WebKit.DOMElement create_element (string tag_name) throws GLib.Error;
+		public unowned WebKit.DOMElement create_element_ns (string namespace_uri, string qualified_name) throws GLib.Error;
+		public unowned WebKit.DOMEntityReference create_entity_reference (string name) throws GLib.Error;
+		public unowned WebKit.DOMEvent create_event (string event_type) throws GLib.Error;
+		public unowned WebKit.DOMXPathExpression create_expression (string expression, WebKit.DOMXPathNSResolver resolver) throws GLib.Error;
+		public unowned WebKit.DOMNodeIterator create_node_iterator (WebKit.DOMNode root, ulong what_to_show, WebKit.DOMNodeFilter filter, bool expand_entity_references) throws GLib.Error;
+		public unowned WebKit.DOMXPathNSResolver create_ns_resolver (WebKit.DOMNode node_resolver);
+		public unowned WebKit.DOMProcessingInstruction create_processing_instruction (string target, string data) throws GLib.Error;
+		public unowned WebKit.DOMRange create_range ();
+		public unowned WebKit.DOMText create_text_node (string data);
+		public unowned WebKit.DOMTreeWalker create_tree_walker (WebKit.DOMNode root, ulong what_to_show, WebKit.DOMNodeFilter filter, bool expand_entity_references) throws GLib.Error;
+		public unowned WebKit.DOMElement element_from_point (long x, long y);
+		public unowned WebKit.DOMXPathResult evaluate (string expression, WebKit.DOMNode context_node, WebKit.DOMXPathNSResolver resolver, ushort type, WebKit.DOMXPathResult in_result) throws GLib.Error;
+		public bool exec_command (string command, bool user_interface, string value);
+		public unowned WebKit.DOMHTMLCollection get_anchors ();
+		public unowned WebKit.DOMHTMLCollection get_applets ();
+		public unowned WebKit.DOMHTMLElement get_body ();
+		public unowned string get_character_set ();
+		public unowned string get_charset ();
+		public unowned string get_compat_mode ();
+		public unowned string get_cookie () throws GLib.Error;
+		public unowned string get_default_charset ();
+		public unowned WebKit.DOMDOMWindow get_default_view ();
+		public unowned WebKit.DOMDocumentType get_doctype ();
+		public unowned WebKit.DOMElement get_document_element ();
+		public unowned string get_document_uri ();
+		public unowned string get_domain ();
+		public unowned WebKit.DOMElement get_element_by_id (string element_id);
+		public unowned WebKit.DOMNodeList get_elements_by_class_name (string tagname);
+		public unowned WebKit.DOMNodeList get_elements_by_name (string element_name);
+		public unowned WebKit.DOMNodeList get_elements_by_tag_name (string tagname);
+		public unowned WebKit.DOMNodeList get_elements_by_tag_name_ns (string namespace_uri, string local_name);
+		public unowned WebKit.DOMHTMLCollection get_forms ();
+		public unowned WebKit.DOMHTMLHeadElement get_head ();
+		public unowned WebKit.DOMHTMLCollection get_images ();
+		public unowned WebKit.DOMDOMImplementation get_implementation ();
+		public unowned string get_input_encoding ();
+		public unowned string get_last_modified ();
+		public unowned WebKit.DOMHTMLCollection get_links ();
+		public unowned WebKit.DOMCSSStyleDeclaration get_override_style (WebKit.DOMElement element, string pseudo_element);
+		public unowned string get_preferred_stylesheet_set ();
+		public unowned string get_ready_state ();
+		public unowned string get_referrer ();
+		public unowned string get_selected_stylesheet_set ();
+		public unowned WebKit.DOMStyleSheetList get_style_sheets ();
+		public unowned string get_title ();
+		public unowned WebKit.DOMElement get_webkit_current_full_screen_element ();
+		public bool get_webkit_full_screen_keyboard_input_allowed ();
+		public bool get_webkit_hidden ();
+		public bool get_webkit_is_full_screen ();
+		public unowned string get_webkit_visibility_state ();
+		public unowned string get_xml_encoding ();
+		public bool get_xml_standalone ();
+		public unowned string get_xml_version ();
+		public unowned WebKit.DOMNode import_node (WebKit.DOMNode imported_node, bool deep) throws GLib.Error;
+		public bool query_command_enabled (string command);
+		public bool query_command_indeterm (string command);
+		public bool query_command_state (string command);
+		public bool query_command_supported (string command);
+		public unowned string query_command_value (string command);
+		public unowned WebKit.DOMElement query_selector (string selectors) throws GLib.Error;
+		public unowned WebKit.DOMNodeList query_selector_all (string selectors) throws GLib.Error;
+		public void set_body (WebKit.DOMHTMLElement value) throws GLib.Error;
+		public void set_charset (string value);
+		public void set_cookie (string value) throws GLib.Error;
+		public void set_document_uri (string value);
+		public void set_selected_stylesheet_set (string value);
+		public void set_title (string value);
+		public void set_xml_standalone (bool value) throws GLib.Error;
+		public void set_xml_version (string value) throws GLib.Error;
+		public void webkit_cancel_full_screen ();
+		public WebKit.DOMHTMLCollection anchors { get; }
+		public WebKit.DOMHTMLCollection applets { get; }
+		public WebKit.DOMHTMLElement body { get; set; }
+		public string character_set { get; }
+		public string charset { get; set; }
+		public string compat_mode { get; }
+		public string cookie { get; set; }
+		public string default_charset { get; }
+		public WebKit.DOMDOMWindow default_view { get; }
+		public WebKit.DOMDocumentType doctype { get; }
+		public WebKit.DOMElement document_element { get; }
+		public string document_uri { get; set; }
+		public string domain { get; }
+		public WebKit.DOMHTMLCollection forms { get; }
+		public WebKit.DOMHTMLHeadElement head { get; }
+		public WebKit.DOMHTMLCollection images { get; }
+		public WebKit.DOMDOMImplementation implementation { get; }
+		public string input_encoding { get; }
+		public string last_modified { get; }
+		public WebKit.DOMHTMLCollection links { get; }
+		public string preferred_stylesheet_set { get; }
+		public string ready_state { get; }
+		public string referrer { get; }
+		public string selected_stylesheet_set { get; set; }
+		public WebKit.DOMStyleSheetList style_sheets { get; }
+		public string title { get; set; }
+		[NoAccessorMethod]
+		public string url { owned get; }
+		public WebKit.DOMElement webkit_current_full_screen_element { get; }
+		public bool webkit_full_screen_keyboard_input_allowed { get; }
+		public bool webkit_is_full_screen { get; }
+		public string xml_encoding { get; }
+		public bool xml_standalone { get; set; }
+		public string xml_version { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDocumentFragment : WebKit.DOMNode, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMDocumentFragment ();
+		public unowned WebKit.DOMElement query_selector (string selectors) throws GLib.Error;
+		public unowned WebKit.DOMNodeList query_selector_all (string selectors) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMDocumentType : WebKit.DOMNode, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMDocumentType ();
+		public unowned WebKit.DOMNamedNodeMap get_entities ();
+		public unowned string get_internal_subset ();
+		public unowned string get_name ();
+		public unowned WebKit.DOMNamedNodeMap get_notations ();
+		public unowned string get_public_id ();
+		public unowned string get_system_id ();
+		public WebKit.DOMNamedNodeMap entities { get; }
+		public string internal_subset { get; }
+		public string name { get; }
+		public WebKit.DOMNamedNodeMap notations { get; }
+		public string public_id { get; }
+		public string system_id { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMElement : WebKit.DOMNode, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMElement ();
+		public void blur ();
+		public void focus ();
+		public unowned string get_attribute (string name);
+		public unowned WebKit.DOMAttr get_attribute_node (string name);
+		public unowned WebKit.DOMAttr get_attribute_node_ns (string namespace_uri, string local_name);
+		public unowned string get_attribute_ns (string namespace_uri, string local_name);
+		public ulong get_child_element_count ();
+		public long get_client_height ();
+		public long get_client_left ();
+		public long get_client_top ();
+		public long get_client_width ();
+		public unowned WebKit.DOMNodeList get_elements_by_class_name (string name);
+		public unowned WebKit.DOMNodeList get_elements_by_tag_name (string name);
+		public unowned WebKit.DOMNodeList get_elements_by_tag_name_ns (string namespace_uri, string local_name);
+		public unowned WebKit.DOMElement get_first_element_child ();
+		public unowned WebKit.DOMElement get_last_element_child ();
+		public unowned WebKit.DOMElement get_next_element_sibling ();
+		public long get_offset_height ();
+		public long get_offset_left ();
+		public unowned WebKit.DOMElement get_offset_parent ();
+		public long get_offset_top ();
+		public long get_offset_width ();
+		public unowned WebKit.DOMElement get_previous_element_sibling ();
+		public long get_scroll_height ();
+		public long get_scroll_left ();
+		public long get_scroll_top ();
+		public long get_scroll_width ();
+		public unowned WebKit.DOMCSSStyleDeclaration get_style ();
+		public unowned string get_tag_name ();
+		public bool has_attribute (string name);
+		public bool has_attribute_ns (string namespace_uri, string local_name);
+		public unowned WebKit.DOMElement query_selector (string selectors) throws GLib.Error;
+		public unowned WebKit.DOMNodeList query_selector_all (string selectors) throws GLib.Error;
+		public void remove_attribute (string name) throws GLib.Error;
+		public unowned WebKit.DOMAttr remove_attribute_node (WebKit.DOMAttr old_attr) throws GLib.Error;
+		public void remove_attribute_ns (string namespace_uri, string local_name) throws GLib.Error;
+		public void scroll_by_lines (long lines);
+		public void scroll_by_pages (long pages);
+		public void scroll_into_view (bool align_with_top);
+		public void scroll_into_view_if_needed (bool center_if_needed);
+		public void set_attribute (string name, string value) throws GLib.Error;
+		public unowned WebKit.DOMAttr set_attribute_node (WebKit.DOMAttr new_attr) throws GLib.Error;
+		public unowned WebKit.DOMAttr set_attribute_node_ns (WebKit.DOMAttr new_attr) throws GLib.Error;
+		public void set_attribute_ns (string namespace_uri, string qualified_name, string value) throws GLib.Error;
+		public void set_scroll_left (long value);
+		public void set_scroll_top (long value);
+		public bool webkit_matches_selector (string selectors) throws GLib.Error;
+		public void webkit_request_full_screen (ushort flags);
+		public ulong child_element_count { get; }
+		public long client_height { get; }
+		public long client_left { get; }
+		public long client_top { get; }
+		public long client_width { get; }
+		public WebKit.DOMElement first_element_child { get; }
+		public WebKit.DOMElement last_element_child { get; }
+		public WebKit.DOMElement next_element_sibling { get; }
+		public long offset_height { get; }
+		public long offset_left { get; }
+		public WebKit.DOMElement offset_parent { get; }
+		public long offset_top { get; }
+		public long offset_width { get; }
+		public WebKit.DOMElement previous_element_sibling { get; }
+		public long scroll_height { get; }
+		public long scroll_left { get; set; }
+		public long scroll_top { get; set; }
+		public long scroll_width { get; }
+		public WebKit.DOMCSSStyleDeclaration style { get; }
+		public string tag_name { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMEntityReference : WebKit.DOMNode, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMEntityReference ();
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMEvent : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMEvent ();
+		public bool get_bubbles ();
+		public bool get_cancel_bubble ();
+		public bool get_cancelable ();
+		public unowned WebKit.DOMEventTarget get_current_target ();
+		public bool get_default_prevented ();
+		public ushort get_event_phase ();
+		public bool get_return_value ();
+		public unowned WebKit.DOMEventTarget get_src_element ();
+		public unowned WebKit.DOMEventTarget get_target ();
+		public uint32 get_time_stamp ();
+		public void init_event (string event_type_arg, bool can_bubble_arg, bool cancelable_arg);
+		public void prevent_default ();
+		public void set_cancel_bubble (bool value);
+		public void set_return_value (bool value);
+		public void stop_immediate_propagation ();
+		public void stop_propagation ();
+		public bool bubbles { get; }
+		public bool cancel_bubble { get; set; }
+		public bool cancelable { get; }
+		public WebKit.DOMEventTarget current_target { get; }
+		public bool default_prevented { get; }
+		public uint event_phase { get; }
+		public bool return_value { get; set; }
+		public WebKit.DOMEventTarget src_element { get; }
+		public WebKit.DOMEventTarget target { get; }
+		public uint time_stamp { get; }
+		[NoAccessorMethod]
+		public string type { owned get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	[Compact]
+	public class DOMEventTargetClass {
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMFile : WebKit.DOMBlob {
+		[CCode (has_construct_function = false)]
+		protected DOMFile ();
+		public unowned string get_file_name ();
+		public uint64 get_file_size ();
+		public unowned string get_name ();
+		public string file_name { get; }
+		public uint64 file_size { get; }
+		public string name { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMFileList : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMFileList ();
+		public ulong get_length ();
+		public unowned WebKit.DOMFile item (ulong index);
+		public ulong length { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMGeolocation : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMGeolocation ();
+		public void clear_watch (long watch_id);
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLAnchorElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLAnchorElement ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_access_key")]
+		public unowned string get_access_key ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_charset")]
+		public unowned string get_charset ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_coords")]
+		public unowned string get_coords ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_download")]
+		public unowned string get_download ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_hash")]
+		public unowned string get_hash ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_host")]
+		public unowned string get_host ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_hostname")]
+		public unowned string get_hostname ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_href")]
+		public unowned string get_href ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_hreflang")]
+		public unowned string get_hreflang ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_origin")]
+		public unowned string get_origin ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_parameter")]
+		public unowned string get_parameter (string name);
+		[CCode (cname = "webkit_dom_html_anchor_element_get_pathname")]
+		public unowned string get_pathname ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_ping")]
+		public unowned string get_ping ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_port")]
+		public unowned string get_port ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_protocol")]
+		public unowned string get_protocol ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_rel")]
+		public unowned string get_rel ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_rev")]
+		public unowned string get_rev ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_search")]
+		public unowned string get_search ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_shape")]
+		public unowned string get_shape ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_target")]
+		public unowned string get_target ();
+		[CCode (cname = "webkit_dom_html_anchor_element_get_text")]
+		public unowned string get_text ();
+		[CCode (cname = "webkit_dom_html_anchor_element_set_access_key")]
+		public void set_access_key (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_charset")]
+		public void set_charset (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_coords")]
+		public void set_coords (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_download")]
+		public void set_download (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_hash")]
+		public void set_hash (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_host")]
+		public void set_host (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_hostname")]
+		public void set_hostname (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_href")]
+		public void set_href (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_hreflang")]
+		public void set_hreflang (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_name")]
+		public void set_name (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_pathname")]
+		public void set_pathname (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_ping")]
+		public void set_ping (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_port")]
+		public void set_port (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_protocol")]
+		public void set_protocol (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_rel")]
+		public void set_rel (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_rev")]
+		public void set_rev (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_search")]
+		public void set_search (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_shape")]
+		public void set_shape (string value);
+		[CCode (cname = "webkit_dom_html_anchor_element_set_target")]
+		public void set_target (string value);
+		public string access_key { get; set; }
+		public string charset { get; set; }
+		public string coords { get; set; }
+		public string hash { get; set; }
+		public string host { get; set; }
+		public string hostname { get; set; }
+		public string href { get; set; }
+		public string hreflang { get; set; }
+		public string name { get; set; }
+		public string origin { get; }
+		public string pathname { get; set; }
+		public string ping { get; set; }
+		public string port { get; set; }
+		public string protocol { get; set; }
+		public string rel { get; set; }
+		public string rev { get; set; }
+		public string search { get; set; }
+		public string shape { get; set; }
+		public string target { get; set; }
+		public string text { get; }
+		[NoAccessorMethod]
+		public string type { owned get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLAppletElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLAppletElement ();
+		[CCode (cname = "webkit_dom_html_applet_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_applet_element_get_alt")]
+		public unowned string get_alt ();
+		[CCode (cname = "webkit_dom_html_applet_element_get_archive")]
+		public unowned string get_archive ();
+		[CCode (cname = "webkit_dom_html_applet_element_get_code")]
+		public unowned string get_code ();
+		[CCode (cname = "webkit_dom_html_applet_element_get_code_base")]
+		public unowned string get_code_base ();
+		[CCode (cname = "webkit_dom_html_applet_element_get_height")]
+		public unowned string get_height ();
+		[CCode (cname = "webkit_dom_html_applet_element_get_hspace")]
+		public long get_hspace ();
+		[CCode (cname = "webkit_dom_html_applet_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_applet_element_get_object")]
+		public unowned string get_object ();
+		[CCode (cname = "webkit_dom_html_applet_element_get_vspace")]
+		public long get_vspace ();
+		[CCode (cname = "webkit_dom_html_applet_element_get_width")]
+		public unowned string get_width ();
+		[CCode (cname = "webkit_dom_html_applet_element_set_align")]
+		public void set_align (string value);
+		[CCode (cname = "webkit_dom_html_applet_element_set_alt")]
+		public void set_alt (string value);
+		[CCode (cname = "webkit_dom_html_applet_element_set_archive")]
+		public void set_archive (string value);
+		[CCode (cname = "webkit_dom_html_applet_element_set_code")]
+		public void set_code (string value);
+		[CCode (cname = "webkit_dom_html_applet_element_set_code_base")]
+		public void set_code_base (string value);
+		[CCode (cname = "webkit_dom_html_applet_element_set_height")]
+		public void set_height (string value);
+		[CCode (cname = "webkit_dom_html_applet_element_set_hspace")]
+		public void set_hspace (long value);
+		[CCode (cname = "webkit_dom_html_applet_element_set_name")]
+		public void set_name (string value);
+		[CCode (cname = "webkit_dom_html_applet_element_set_object")]
+		public void set_object (string value);
+		[CCode (cname = "webkit_dom_html_applet_element_set_vspace")]
+		public void set_vspace (long value);
+		[CCode (cname = "webkit_dom_html_applet_element_set_width")]
+		public void set_width (string value);
+		public string align { get; set; }
+		public string alt { get; set; }
+		public string archive { get; set; }
+		public string code { get; set; }
+		public string code_base { get; set; }
+		public string height { get; set; }
+		public long hspace { get; set; }
+		public string name { get; set; }
+		public string object { get; set; }
+		public long vspace { get; set; }
+		public string width { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLAreaElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLAreaElement ();
+		[CCode (cname = "webkit_dom_html_area_element_get_access_key")]
+		public unowned string get_access_key ();
+		[CCode (cname = "webkit_dom_html_area_element_get_alt")]
+		public unowned string get_alt ();
+		[CCode (cname = "webkit_dom_html_area_element_get_coords")]
+		public unowned string get_coords ();
+		[CCode (cname = "webkit_dom_html_area_element_get_hash")]
+		public unowned string get_hash ();
+		[CCode (cname = "webkit_dom_html_area_element_get_host")]
+		public unowned string get_host ();
+		[CCode (cname = "webkit_dom_html_area_element_get_hostname")]
+		public unowned string get_hostname ();
+		[CCode (cname = "webkit_dom_html_area_element_get_href")]
+		public unowned string get_href ();
+		[CCode (cname = "webkit_dom_html_area_element_get_no_href")]
+		public bool get_no_href ();
+		[CCode (cname = "webkit_dom_html_area_element_get_pathname")]
+		public unowned string get_pathname ();
+		[CCode (cname = "webkit_dom_html_area_element_get_ping")]
+		public unowned string get_ping ();
+		[CCode (cname = "webkit_dom_html_area_element_get_port")]
+		public unowned string get_port ();
+		[CCode (cname = "webkit_dom_html_area_element_get_protocol")]
+		public unowned string get_protocol ();
+		[CCode (cname = "webkit_dom_html_area_element_get_search")]
+		public unowned string get_search ();
+		[CCode (cname = "webkit_dom_html_area_element_get_shape")]
+		public unowned string get_shape ();
+		[CCode (cname = "webkit_dom_html_area_element_get_target")]
+		public unowned string get_target ();
+		[CCode (cname = "webkit_dom_html_area_element_set_access_key")]
+		public void set_access_key (string value);
+		[CCode (cname = "webkit_dom_html_area_element_set_alt")]
+		public void set_alt (string value);
+		[CCode (cname = "webkit_dom_html_area_element_set_coords")]
+		public void set_coords (string value);
+		[CCode (cname = "webkit_dom_html_area_element_set_href")]
+		public void set_href (string value);
+		[CCode (cname = "webkit_dom_html_area_element_set_no_href")]
+		public void set_no_href (bool value);
+		[CCode (cname = "webkit_dom_html_area_element_set_ping")]
+		public void set_ping (string value);
+		[CCode (cname = "webkit_dom_html_area_element_set_shape")]
+		public void set_shape (string value);
+		[CCode (cname = "webkit_dom_html_area_element_set_target")]
+		public void set_target (string value);
+		public string access_key { get; set; }
+		public string alt { get; set; }
+		public string coords { get; set; }
+		public string hash { get; }
+		public string host { get; }
+		public string hostname { get; }
+		public string href { get; set; }
+		public bool no_href { get; set; }
+		public string pathname { get; }
+		public string ping { get; set; }
+		public string port { get; }
+		public string protocol { get; }
+		public string search { get; }
+		public string shape { get; set; }
+		public string target { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLAudioElement : WebKit.DOMHTMLMediaElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLAudioElement ();
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLBRElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLBRElement ();
+		[CCode (cname = "webkit_dom_htmlbr_element_get_clear")]
+		public unowned string get_clear ();
+		[CCode (cname = "webkit_dom_htmlbr_element_set_clear")]
+		public void set_clear (string value);
+		public string clear { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLBaseElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLBaseElement ();
+		[CCode (cname = "webkit_dom_html_base_element_get_href")]
+		public unowned string get_href ();
+		[CCode (cname = "webkit_dom_html_base_element_get_target")]
+		public unowned string get_target ();
+		[CCode (cname = "webkit_dom_html_base_element_set_href")]
+		public void set_href (string value);
+		[CCode (cname = "webkit_dom_html_base_element_set_target")]
+		public void set_target (string value);
+		public string href { get; set; }
+		public string target { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLBaseFontElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLBaseFontElement ();
+		[CCode (cname = "webkit_dom_html_base_font_element_get_color")]
+		public unowned string get_color ();
+		[CCode (cname = "webkit_dom_html_base_font_element_get_face")]
+		public unowned string get_face ();
+		[CCode (cname = "webkit_dom_html_base_font_element_get_size")]
+		public long get_size ();
+		[CCode (cname = "webkit_dom_html_base_font_element_set_color")]
+		public void set_color (string value);
+		[CCode (cname = "webkit_dom_html_base_font_element_set_face")]
+		public void set_face (string value);
+		[CCode (cname = "webkit_dom_html_base_font_element_set_size")]
+		public void set_size (long value);
+		public string color { get; set; }
+		public string face { get; set; }
+		public long size { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLBodyElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLBodyElement ();
+		[CCode (cname = "webkit_dom_html_body_element_get_a_link")]
+		public unowned string get_a_link ();
+		[CCode (cname = "webkit_dom_html_body_element_get_background")]
+		public unowned string get_background ();
+		[CCode (cname = "webkit_dom_html_body_element_get_bg_color")]
+		public unowned string get_bg_color ();
+		[CCode (cname = "webkit_dom_html_body_element_get_link")]
+		public unowned string get_link ();
+		[CCode (cname = "webkit_dom_html_body_element_get_text")]
+		public unowned string get_text ();
+		[CCode (cname = "webkit_dom_html_body_element_get_v_link")]
+		public unowned string get_v_link ();
+		[CCode (cname = "webkit_dom_html_body_element_set_a_link")]
+		public void set_a_link (string value);
+		[CCode (cname = "webkit_dom_html_body_element_set_background")]
+		public void set_background (string value);
+		[CCode (cname = "webkit_dom_html_body_element_set_bg_color")]
+		public void set_bg_color (string value);
+		[CCode (cname = "webkit_dom_html_body_element_set_link")]
+		public void set_link (string value);
+		[CCode (cname = "webkit_dom_html_body_element_set_text")]
+		public void set_text (string value);
+		[CCode (cname = "webkit_dom_html_body_element_set_v_link")]
+		public void set_v_link (string value);
+		public string a_link { get; set; }
+		public string background { get; set; }
+		public string bg_color { get; set; }
+		public string link { get; set; }
+		public string text { get; set; }
+		public string v_link { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLButtonElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLButtonElement ();
+		[CCode (cname = "webkit_dom_html_button_element_check_validity")]
+		public bool check_validity ();
+		[CCode (cname = "webkit_dom_html_button_element_click")]
+		public void click ();
+		[CCode (cname = "webkit_dom_html_button_element_get_access_key")]
+		public unowned string get_access_key ();
+		[CCode (cname = "webkit_dom_html_button_element_get_autofocus")]
+		public bool get_autofocus ();
+		[CCode (cname = "webkit_dom_html_button_element_get_disabled")]
+		public bool get_disabled ();
+		[CCode (cname = "webkit_dom_html_button_element_get_form")]
+		public unowned WebKit.DOMHTMLFormElement get_form ();
+		[CCode (cname = "webkit_dom_html_button_element_get_form_action")]
+		public unowned string get_form_action ();
+		[CCode (cname = "webkit_dom_html_button_element_get_form_enctype")]
+		public unowned string get_form_enctype ();
+		[CCode (cname = "webkit_dom_html_button_element_get_form_method")]
+		public unowned string get_form_method ();
+		[CCode (cname = "webkit_dom_html_button_element_get_form_no_validate")]
+		public bool get_form_no_validate ();
+		[CCode (cname = "webkit_dom_html_button_element_get_form_target")]
+		public unowned string get_form_target ();
+		[CCode (cname = "webkit_dom_html_button_element_get_labels")]
+		public unowned WebKit.DOMNodeList get_labels ();
+		[CCode (cname = "webkit_dom_html_button_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_button_element_get_validation_message")]
+		public unowned string get_validation_message ();
+		[CCode (cname = "webkit_dom_html_button_element_get_validity")]
+		public unowned WebKit.DOMValidityState get_validity ();
+		[CCode (cname = "webkit_dom_html_button_element_get_value")]
+		public unowned string get_value ();
+		[CCode (cname = "webkit_dom_html_button_element_get_will_validate")]
+		public bool get_will_validate ();
+		[CCode (cname = "webkit_dom_html_button_element_set_access_key")]
+		public void set_access_key (string value);
+		[CCode (cname = "webkit_dom_html_button_element_set_autofocus")]
+		public void set_autofocus (bool value);
+		[CCode (cname = "webkit_dom_html_button_element_set_custom_validity")]
+		public void set_custom_validity (string error);
+		[CCode (cname = "webkit_dom_html_button_element_set_disabled")]
+		public void set_disabled (bool value);
+		[CCode (cname = "webkit_dom_html_button_element_set_form_action")]
+		public void set_form_action (string value);
+		[CCode (cname = "webkit_dom_html_button_element_set_form_enctype")]
+		public void set_form_enctype (string value);
+		[CCode (cname = "webkit_dom_html_button_element_set_form_method")]
+		public void set_form_method (string value);
+		[CCode (cname = "webkit_dom_html_button_element_set_form_no_validate")]
+		public void set_form_no_validate (bool value);
+		[CCode (cname = "webkit_dom_html_button_element_set_form_target")]
+		public void set_form_target (string value);
+		[CCode (cname = "webkit_dom_html_button_element_set_name")]
+		public void set_name (string value);
+		[CCode (cname = "webkit_dom_html_button_element_set_value")]
+		public void set_value (string value);
+		public string access_key { get; set; }
+		public bool autofocus { get; set; }
+		public bool disabled { get; set; }
+		public WebKit.DOMHTMLFormElement form { get; }
+		public string form_action { get; set; }
+		public string form_enctype { get; set; }
+		public string form_method { get; set; }
+		public bool form_no_validate { get; set; }
+		public string form_target { get; set; }
+		public WebKit.DOMNodeList labels { get; }
+		public string name { get; set; }
+		[NoAccessorMethod]
+		public string type { owned get; }
+		public string validation_message { get; }
+		public WebKit.DOMValidityState validity { get; }
+		public string value { get; set; }
+		public bool will_validate { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLCanvasElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLCanvasElement ();
+		[CCode (cname = "webkit_dom_html_canvas_element_get_height")]
+		public long get_height ();
+		[CCode (cname = "webkit_dom_html_canvas_element_get_width")]
+		public long get_width ();
+		[CCode (cname = "webkit_dom_html_canvas_element_set_height")]
+		public void set_height (long value);
+		[CCode (cname = "webkit_dom_html_canvas_element_set_width")]
+		public void set_width (long value);
+		public long height { get; set; }
+		public long width { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLCollection : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLCollection ();
+		[CCode (cname = "webkit_dom_html_collection_get_length")]
+		public ulong get_length ();
+		[CCode (cname = "webkit_dom_html_collection_item")]
+		public unowned WebKit.DOMNode item (ulong index);
+		[CCode (cname = "webkit_dom_html_collection_named_item")]
+		public unowned WebKit.DOMNode named_item (string name);
+		public ulong length { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLDListElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLDListElement ();
+		[CCode (cname = "webkit_dom_htmld_list_element_get_compact")]
+		public bool get_compact ();
+		[CCode (cname = "webkit_dom_htmld_list_element_set_compact")]
+		public void set_compact (bool value);
+		public bool compact { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLDetailsElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLDetailsElement ();
+		[CCode (cname = "webkit_dom_html_details_element_get_open")]
+		public bool get_open ();
+		[CCode (cname = "webkit_dom_html_details_element_set_open")]
+		public void set_open (bool value);
+		public bool open { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLDirectoryElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLDirectoryElement ();
+		[CCode (cname = "webkit_dom_html_directory_element_get_compact")]
+		public bool get_compact ();
+		[CCode (cname = "webkit_dom_html_directory_element_set_compact")]
+		public void set_compact (bool value);
+		public bool compact { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLDivElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLDivElement ();
+		[CCode (cname = "webkit_dom_html_div_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_div_element_set_align")]
+		public void set_align (string value);
+		public string align { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLDocument : WebKit.DOMDocument, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLDocument ();
+		[CCode (cname = "webkit_dom_html_document_capture_events")]
+		public void capture_events ();
+		[CCode (cname = "webkit_dom_html_document_clear")]
+		public void clear ();
+		[CCode (cname = "webkit_dom_html_document_close")]
+		public void close ();
+		[CCode (cname = "webkit_dom_html_document_get_active_element")]
+		public unowned WebKit.DOMElement get_active_element ();
+		[CCode (cname = "webkit_dom_html_document_get_alink_color")]
+		public unowned string get_alink_color ();
+		[CCode (cname = "webkit_dom_html_document_get_bg_color")]
+		public unowned string get_bg_color ();
+		[CCode (cname = "webkit_dom_html_document_get_compat_mode")]
+		public unowned string get_compat_mode ();
+		[CCode (cname = "webkit_dom_html_document_get_design_mode")]
+		public unowned string get_design_mode ();
+		[CCode (cname = "webkit_dom_html_document_get_dir")]
+		public unowned string get_dir ();
+		[CCode (cname = "webkit_dom_html_document_get_embeds")]
+		public unowned WebKit.DOMHTMLCollection get_embeds ();
+		[CCode (cname = "webkit_dom_html_document_get_fg_color")]
+		public unowned string get_fg_color ();
+		[CCode (cname = "webkit_dom_html_document_get_height")]
+		public long get_height ();
+		[CCode (cname = "webkit_dom_html_document_get_link_color")]
+		public unowned string get_link_color ();
+		[CCode (cname = "webkit_dom_html_document_get_plugins")]
+		public unowned WebKit.DOMHTMLCollection get_plugins ();
+		[CCode (cname = "webkit_dom_html_document_get_scripts")]
+		public unowned WebKit.DOMHTMLCollection get_scripts ();
+		[CCode (cname = "webkit_dom_html_document_get_vlink_color")]
+		public unowned string get_vlink_color ();
+		[CCode (cname = "webkit_dom_html_document_get_width")]
+		public long get_width ();
+		[CCode (cname = "webkit_dom_html_document_has_focus")]
+		public bool has_focus ();
+		[CCode (cname = "webkit_dom_html_document_release_events")]
+		public void release_events ();
+		[CCode (cname = "webkit_dom_html_document_set_alink_color")]
+		public void set_alink_color (string value);
+		[CCode (cname = "webkit_dom_html_document_set_bg_color")]
+		public void set_bg_color (string value);
+		[CCode (cname = "webkit_dom_html_document_set_design_mode")]
+		public void set_design_mode (string value);
+		[CCode (cname = "webkit_dom_html_document_set_dir")]
+		public void set_dir (string value);
+		[CCode (cname = "webkit_dom_html_document_set_fg_color")]
+		public void set_fg_color (string value);
+		[CCode (cname = "webkit_dom_html_document_set_link_color")]
+		public void set_link_color (string value);
+		[CCode (cname = "webkit_dom_html_document_set_vlink_color")]
+		public void set_vlink_color (string value);
+		public WebKit.DOMElement active_element { get; }
+		public string alink_color { get; set; }
+		public string bg_color { get; set; }
+		public string compat_mode { get; }
+		public string design_mode { get; set; }
+		public string dir { get; set; }
+		public WebKit.DOMHTMLCollection embeds { get; }
+		public string fg_color { get; set; }
+		public long height { get; }
+		public string link_color { get; set; }
+		public WebKit.DOMHTMLCollection plugins { get; }
+		public WebKit.DOMHTMLCollection scripts { get; }
+		public string vlink_color { get; set; }
+		public long width { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLElement : WebKit.DOMElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLElement ();
+		[CCode (cname = "webkit_dom_html_element_get_children")]
+		public unowned WebKit.DOMHTMLCollection get_children ();
+		[CCode (cname = "webkit_dom_html_element_get_class_list")]
+		public unowned WebKit.DOMDOMTokenList get_class_list ();
+		[CCode (cname = "webkit_dom_html_element_get_class_name")]
+		public unowned string get_class_name ();
+		[CCode (cname = "webkit_dom_html_element_get_content_editable")]
+		public unowned string get_content_editable ();
+		[CCode (cname = "webkit_dom_html_element_get_dir")]
+		public unowned string get_dir ();
+		[CCode (cname = "webkit_dom_html_element_get_draggable")]
+		public bool get_draggable ();
+		[CCode (cname = "webkit_dom_html_element_get_hidden")]
+		public bool get_hidden ();
+		[CCode (cname = "webkit_dom_html_element_get_id")]
+		public unowned string get_id ();
+		[CCode (cname = "webkit_dom_html_element_get_inner_html")]
+		public unowned string get_inner_html ();
+		[CCode (cname = "webkit_dom_html_element_get_inner_text")]
+		public unowned string get_inner_text ();
+		[CCode (cname = "webkit_dom_html_element_get_is_content_editable")]
+		public bool get_is_content_editable ();
+		[CCode (cname = "webkit_dom_html_element_get_lang")]
+		public unowned string get_lang ();
+		[CCode (cname = "webkit_dom_html_element_get_outer_html")]
+		public unowned string get_outer_html ();
+		[CCode (cname = "webkit_dom_html_element_get_outer_text")]
+		public unowned string get_outer_text ();
+		[CCode (cname = "webkit_dom_html_element_get_spellcheck")]
+		public bool get_spellcheck ();
+		[CCode (cname = "webkit_dom_html_element_get_tab_index")]
+		public long get_tab_index ();
+		[CCode (cname = "webkit_dom_html_element_get_title")]
+		public unowned string get_title ();
+		[CCode (cname = "webkit_dom_html_element_get_webkitdropzone")]
+		public unowned string get_webkitdropzone ();
+		[CCode (cname = "webkit_dom_html_element_insert_adjacent_element")]
+		public unowned WebKit.DOMElement insert_adjacent_element (string where, WebKit.DOMElement element) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_element_insert_adjacent_html")]
+		public void insert_adjacent_html (string where, string html) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_element_insert_adjacent_text")]
+		public void insert_adjacent_text (string where, string text) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_element_set_class_name")]
+		public void set_class_name (string value);
+		[CCode (cname = "webkit_dom_html_element_set_content_editable")]
+		public void set_content_editable (string value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_element_set_dir")]
+		public void set_dir (string value);
+		[CCode (cname = "webkit_dom_html_element_set_draggable")]
+		public void set_draggable (bool value);
+		[CCode (cname = "webkit_dom_html_element_set_hidden")]
+		public void set_hidden (bool value);
+		[CCode (cname = "webkit_dom_html_element_set_id")]
+		public void set_id (string value);
+		[CCode (cname = "webkit_dom_html_element_set_inner_html")]
+		public void set_inner_html (string value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_element_set_inner_text")]
+		public void set_inner_text (string value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_element_set_lang")]
+		public void set_lang (string value);
+		[CCode (cname = "webkit_dom_html_element_set_outer_html")]
+		public void set_outer_html (string value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_element_set_outer_text")]
+		public void set_outer_text (string value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_element_set_spellcheck")]
+		public void set_spellcheck (bool value);
+		[CCode (cname = "webkit_dom_html_element_set_tab_index")]
+		public void set_tab_index (long value);
+		[CCode (cname = "webkit_dom_html_element_set_title")]
+		public void set_title (string value);
+		[CCode (cname = "webkit_dom_html_element_set_webkitdropzone")]
+		public void set_webkitdropzone (string value);
+		public WebKit.DOMHTMLCollection children { get; }
+		public WebKit.DOMDOMTokenList class_list { get; }
+		public string class_name { get; set; }
+		public string content_editable { get; set; }
+		public string dir { get; set; }
+		public bool draggable { get; set; }
+		public bool hidden { get; set; }
+		public string id { get; set; }
+		public string inner_html { get; set; }
+		public string inner_text { get; set; }
+		public bool is_content_editable { get; }
+		public string lang { get; set; }
+		public string outer_html { get; set; }
+		public string outer_text { get; set; }
+		public bool spellcheck { get; set; }
+		public long tab_index { get; set; }
+		public string title { get; set; }
+		public string webkitdropzone { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLEmbedElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLEmbedElement ();
+		[CCode (cname = "webkit_dom_html_embed_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_embed_element_get_height")]
+		public long get_height ();
+		[CCode (cname = "webkit_dom_html_embed_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_embed_element_get_src")]
+		public unowned string get_src ();
+		[CCode (cname = "webkit_dom_html_embed_element_get_width")]
+		public long get_width ();
+		[CCode (cname = "webkit_dom_html_embed_element_set_align")]
+		public void set_align (string value);
+		[CCode (cname = "webkit_dom_html_embed_element_set_height")]
+		public void set_height (long value);
+		[CCode (cname = "webkit_dom_html_embed_element_set_name")]
+		public void set_name (string value);
+		[CCode (cname = "webkit_dom_html_embed_element_set_src")]
+		public void set_src (string value);
+		[CCode (cname = "webkit_dom_html_embed_element_set_width")]
+		public void set_width (long value);
+		public string align { get; set; }
+		public long height { get; set; }
+		public string name { get; set; }
+		public string src { get; set; }
+		[NoAccessorMethod]
+		public string type { owned get; set; }
+		public long width { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLFieldSetElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLFieldSetElement ();
+		[CCode (cname = "webkit_dom_html_field_set_element_check_validity")]
+		public bool check_validity ();
+		[CCode (cname = "webkit_dom_html_field_set_element_get_form")]
+		public unowned WebKit.DOMHTMLFormElement get_form ();
+		[CCode (cname = "webkit_dom_html_field_set_element_get_validation_message")]
+		public unowned string get_validation_message ();
+		[CCode (cname = "webkit_dom_html_field_set_element_get_validity")]
+		public unowned WebKit.DOMValidityState get_validity ();
+		[CCode (cname = "webkit_dom_html_field_set_element_get_will_validate")]
+		public bool get_will_validate ();
+		[CCode (cname = "webkit_dom_html_field_set_element_set_custom_validity")]
+		public void set_custom_validity (string error);
+		public WebKit.DOMHTMLFormElement form { get; }
+		public string validation_message { get; }
+		public WebKit.DOMValidityState validity { get; }
+		public bool will_validate { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLFontElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLFontElement ();
+		[CCode (cname = "webkit_dom_html_font_element_get_color")]
+		public unowned string get_color ();
+		[CCode (cname = "webkit_dom_html_font_element_get_face")]
+		public unowned string get_face ();
+		[CCode (cname = "webkit_dom_html_font_element_get_size")]
+		public unowned string get_size ();
+		[CCode (cname = "webkit_dom_html_font_element_set_color")]
+		public void set_color (string value);
+		[CCode (cname = "webkit_dom_html_font_element_set_face")]
+		public void set_face (string value);
+		[CCode (cname = "webkit_dom_html_font_element_set_size")]
+		public void set_size (string value);
+		public string color { get; set; }
+		public string face { get; set; }
+		public string size { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLFormElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLFormElement ();
+		[CCode (cname = "webkit_dom_html_form_element_check_validity")]
+		public bool check_validity ();
+		[CCode (cname = "webkit_dom_html_form_element_dispatch_form_change")]
+		public void dispatch_form_change ();
+		[CCode (cname = "webkit_dom_html_form_element_dispatch_form_input")]
+		public void dispatch_form_input ();
+		[CCode (cname = "webkit_dom_html_form_element_get_accept_charset")]
+		public unowned string get_accept_charset ();
+		[CCode (cname = "webkit_dom_html_form_element_get_action")]
+		public unowned string get_action ();
+		[CCode (cname = "webkit_dom_html_form_element_get_autocomplete")]
+		public unowned string get_autocomplete ();
+		[CCode (cname = "webkit_dom_html_form_element_get_elements")]
+		public unowned WebKit.DOMHTMLCollection get_elements ();
+		[CCode (cname = "webkit_dom_html_form_element_get_encoding")]
+		public unowned string get_encoding ();
+		[CCode (cname = "webkit_dom_html_form_element_get_enctype")]
+		public unowned string get_enctype ();
+		[CCode (cname = "webkit_dom_html_form_element_get_length")]
+		public long get_length ();
+		[CCode (cname = "webkit_dom_html_form_element_get_method")]
+		public unowned string get_method ();
+		[CCode (cname = "webkit_dom_html_form_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_form_element_get_no_validate")]
+		public bool get_no_validate ();
+		[CCode (cname = "webkit_dom_html_form_element_get_target")]
+		public unowned string get_target ();
+		[CCode (cname = "webkit_dom_html_form_element_reset")]
+		public void reset ();
+		[CCode (cname = "webkit_dom_html_form_element_set_accept_charset")]
+		public void set_accept_charset (string value);
+		[CCode (cname = "webkit_dom_html_form_element_set_action")]
+		public void set_action (string value);
+		[CCode (cname = "webkit_dom_html_form_element_set_autocomplete")]
+		public void set_autocomplete (string value);
+		[CCode (cname = "webkit_dom_html_form_element_set_encoding")]
+		public void set_encoding (string value);
+		[CCode (cname = "webkit_dom_html_form_element_set_enctype")]
+		public void set_enctype (string value);
+		[CCode (cname = "webkit_dom_html_form_element_set_method")]
+		public void set_method (string value);
+		[CCode (cname = "webkit_dom_html_form_element_set_name")]
+		public void set_name (string value);
+		[CCode (cname = "webkit_dom_html_form_element_set_no_validate")]
+		public void set_no_validate (bool value);
+		[CCode (cname = "webkit_dom_html_form_element_set_target")]
+		public void set_target (string value);
+		[CCode (cname = "webkit_dom_html_form_element_submit")]
+		public void submit ();
+		public string accept_charset { get; set; }
+		public string action { get; set; }
+		public string autocomplete { get; set; }
+		public WebKit.DOMHTMLCollection elements { get; }
+		public string encoding { get; set; }
+		public string enctype { get; set; }
+		public long length { get; }
+		public string method { get; set; }
+		public string name { get; set; }
+		public bool no_validate { get; set; }
+		public string target { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLFrameElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLFrameElement ();
+		[CCode (cname = "webkit_dom_html_frame_element_get_content_document")]
+		public unowned WebKit.DOMDocument get_content_document ();
+		[CCode (cname = "webkit_dom_html_frame_element_get_content_window")]
+		public unowned WebKit.DOMDOMWindow get_content_window ();
+		[CCode (cname = "webkit_dom_html_frame_element_get_frame_border")]
+		public unowned string get_frame_border ();
+		[CCode (cname = "webkit_dom_html_frame_element_get_height")]
+		public long get_height ();
+		[CCode (cname = "webkit_dom_html_frame_element_get_long_desc")]
+		public unowned string get_long_desc ();
+		[CCode (cname = "webkit_dom_html_frame_element_get_margin_height")]
+		public unowned string get_margin_height ();
+		[CCode (cname = "webkit_dom_html_frame_element_get_margin_width")]
+		public unowned string get_margin_width ();
+		[CCode (cname = "webkit_dom_html_frame_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_frame_element_get_no_resize")]
+		public bool get_no_resize ();
+		[CCode (cname = "webkit_dom_html_frame_element_get_scrolling")]
+		public unowned string get_scrolling ();
+		[CCode (cname = "webkit_dom_html_frame_element_get_src")]
+		public unowned string get_src ();
+		[CCode (cname = "webkit_dom_html_frame_element_get_width")]
+		public long get_width ();
+		[CCode (cname = "webkit_dom_html_frame_element_set_frame_border")]
+		public void set_frame_border (string value);
+		[CCode (cname = "webkit_dom_html_frame_element_set_long_desc")]
+		public void set_long_desc (string value);
+		[CCode (cname = "webkit_dom_html_frame_element_set_margin_height")]
+		public void set_margin_height (string value);
+		[CCode (cname = "webkit_dom_html_frame_element_set_margin_width")]
+		public void set_margin_width (string value);
+		[CCode (cname = "webkit_dom_html_frame_element_set_name")]
+		public void set_name (string value);
+		[CCode (cname = "webkit_dom_html_frame_element_set_no_resize")]
+		public void set_no_resize (bool value);
+		[CCode (cname = "webkit_dom_html_frame_element_set_scrolling")]
+		public void set_scrolling (string value);
+		[CCode (cname = "webkit_dom_html_frame_element_set_src")]
+		public void set_src (string value);
+		public WebKit.DOMDocument content_document { get; }
+		public WebKit.DOMDOMWindow content_window { get; }
+		public string frame_border { get; set; }
+		public long height { get; }
+		public string long_desc { get; set; }
+		public string margin_height { get; set; }
+		public string margin_width { get; set; }
+		public string name { get; set; }
+		public bool no_resize { get; set; }
+		public string scrolling { get; set; }
+		public string src { get; set; }
+		public long width { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLFrameSetElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLFrameSetElement ();
+		[CCode (cname = "webkit_dom_html_frame_set_element_get_cols")]
+		public unowned string get_cols ();
+		[CCode (cname = "webkit_dom_html_frame_set_element_get_rows")]
+		public unowned string get_rows ();
+		[CCode (cname = "webkit_dom_html_frame_set_element_set_cols")]
+		public void set_cols (string value);
+		[CCode (cname = "webkit_dom_html_frame_set_element_set_rows")]
+		public void set_rows (string value);
+		public string cols { get; set; }
+		public string rows { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLHRElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLHRElement ();
+		[CCode (cname = "webkit_dom_htmlhr_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_htmlhr_element_get_no_shade")]
+		public bool get_no_shade ();
+		[CCode (cname = "webkit_dom_htmlhr_element_get_size")]
+		public unowned string get_size ();
+		[CCode (cname = "webkit_dom_htmlhr_element_get_width")]
+		public unowned string get_width ();
+		[CCode (cname = "webkit_dom_htmlhr_element_set_align")]
+		public void set_align (string value);
+		[CCode (cname = "webkit_dom_htmlhr_element_set_no_shade")]
+		public void set_no_shade (bool value);
+		[CCode (cname = "webkit_dom_htmlhr_element_set_size")]
+		public void set_size (string value);
+		[CCode (cname = "webkit_dom_htmlhr_element_set_width")]
+		public void set_width (string value);
+		public string align { get; set; }
+		public bool no_shade { get; set; }
+		public string size { get; set; }
+		public string width { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLHeadElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLHeadElement ();
+		[CCode (cname = "webkit_dom_html_head_element_get_profile")]
+		public unowned string get_profile ();
+		[CCode (cname = "webkit_dom_html_head_element_set_profile")]
+		public void set_profile (string value);
+		public string profile { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLHeadingElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLHeadingElement ();
+		[CCode (cname = "webkit_dom_html_heading_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_heading_element_set_align")]
+		public void set_align (string value);
+		public string align { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLHtmlElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLHtmlElement ();
+		[CCode (cname = "webkit_dom_html_html_element_get_manifest")]
+		public unowned string get_manifest ();
+		[CCode (cname = "webkit_dom_html_html_element_get_version")]
+		public unowned string get_version ();
+		[CCode (cname = "webkit_dom_html_html_element_set_manifest")]
+		public void set_manifest (string value);
+		[CCode (cname = "webkit_dom_html_html_element_set_version")]
+		public void set_version (string value);
+		public string manifest { get; set; }
+		public string version { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLIFrameElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLIFrameElement ();
+		[CCode (cname = "webkit_dom_html_iframe_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_iframe_element_get_content_document")]
+		public unowned WebKit.DOMDocument get_content_document ();
+		[CCode (cname = "webkit_dom_html_iframe_element_get_content_window")]
+		public unowned WebKit.DOMDOMWindow get_content_window ();
+		[CCode (cname = "webkit_dom_html_iframe_element_get_frame_border")]
+		public unowned string get_frame_border ();
+		[CCode (cname = "webkit_dom_html_iframe_element_get_height")]
+		public unowned string get_height ();
+		[CCode (cname = "webkit_dom_html_iframe_element_get_long_desc")]
+		public unowned string get_long_desc ();
+		[CCode (cname = "webkit_dom_html_iframe_element_get_margin_height")]
+		public unowned string get_margin_height ();
+		[CCode (cname = "webkit_dom_html_iframe_element_get_margin_width")]
+		public unowned string get_margin_width ();
+		[CCode (cname = "webkit_dom_html_iframe_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_iframe_element_get_sandbox")]
+		public unowned string get_sandbox ();
+		[CCode (cname = "webkit_dom_html_iframe_element_get_scrolling")]
+		public unowned string get_scrolling ();
+		[CCode (cname = "webkit_dom_html_iframe_element_get_src")]
+		public unowned string get_src ();
+		[CCode (cname = "webkit_dom_html_iframe_element_get_width")]
+		public unowned string get_width ();
+		[CCode (cname = "webkit_dom_html_iframe_element_set_align")]
+		public void set_align (string value);
+		[CCode (cname = "webkit_dom_html_iframe_element_set_frame_border")]
+		public void set_frame_border (string value);
+		[CCode (cname = "webkit_dom_html_iframe_element_set_height")]
+		public void set_height (string value);
+		[CCode (cname = "webkit_dom_html_iframe_element_set_long_desc")]
+		public void set_long_desc (string value);
+		[CCode (cname = "webkit_dom_html_iframe_element_set_margin_height")]
+		public void set_margin_height (string value);
+		[CCode (cname = "webkit_dom_html_iframe_element_set_margin_width")]
+		public void set_margin_width (string value);
+		[CCode (cname = "webkit_dom_html_iframe_element_set_name")]
+		public void set_name (string value);
+		[CCode (cname = "webkit_dom_html_iframe_element_set_sandbox")]
+		public void set_sandbox (string value);
+		[CCode (cname = "webkit_dom_html_iframe_element_set_scrolling")]
+		public void set_scrolling (string value);
+		[CCode (cname = "webkit_dom_html_iframe_element_set_src")]
+		public void set_src (string value);
+		[CCode (cname = "webkit_dom_html_iframe_element_set_width")]
+		public void set_width (string value);
+		public string align { get; set; }
+		public WebKit.DOMDocument content_document { get; }
+		public WebKit.DOMDOMWindow content_window { get; }
+		public string frame_border { get; set; }
+		public string height { get; set; }
+		public string long_desc { get; set; }
+		public string margin_height { get; set; }
+		public string margin_width { get; set; }
+		public string name { get; set; }
+		public string sandbox { get; set; }
+		public string scrolling { get; set; }
+		public string src { get; set; }
+		public string width { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLImageElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLImageElement ();
+		[CCode (cname = "webkit_dom_html_image_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_image_element_get_alt")]
+		public unowned string get_alt ();
+		[CCode (cname = "webkit_dom_html_image_element_get_border")]
+		public unowned string get_border ();
+		[CCode (cname = "webkit_dom_html_image_element_get_complete")]
+		public bool get_complete ();
+		[CCode (cname = "webkit_dom_html_image_element_get_cross_origin")]
+		public unowned string get_cross_origin ();
+		[CCode (cname = "webkit_dom_html_image_element_get_height")]
+		public long get_height ();
+		[CCode (cname = "webkit_dom_html_image_element_get_hspace")]
+		public long get_hspace ();
+		[CCode (cname = "webkit_dom_html_image_element_get_is_map")]
+		public bool get_is_map ();
+		[CCode (cname = "webkit_dom_html_image_element_get_long_desc")]
+		public unowned string get_long_desc ();
+		[CCode (cname = "webkit_dom_html_image_element_get_lowsrc")]
+		public unowned string get_lowsrc ();
+		[CCode (cname = "webkit_dom_html_image_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_image_element_get_natural_height")]
+		public long get_natural_height ();
+		[CCode (cname = "webkit_dom_html_image_element_get_natural_width")]
+		public long get_natural_width ();
+		[CCode (cname = "webkit_dom_html_image_element_get_src")]
+		public unowned string get_src ();
+		[CCode (cname = "webkit_dom_html_image_element_get_use_map")]
+		public unowned string get_use_map ();
+		[CCode (cname = "webkit_dom_html_image_element_get_vspace")]
+		public long get_vspace ();
+		[CCode (cname = "webkit_dom_html_image_element_get_width")]
+		public long get_width ();
+		[CCode (cname = "webkit_dom_html_image_element_get_x")]
+		public long get_x ();
+		[CCode (cname = "webkit_dom_html_image_element_get_y")]
+		public long get_y ();
+		[CCode (cname = "webkit_dom_html_image_element_set_align")]
+		public void set_align (string value);
+		[CCode (cname = "webkit_dom_html_image_element_set_alt")]
+		public void set_alt (string value);
+		[CCode (cname = "webkit_dom_html_image_element_set_border")]
+		public void set_border (string value);
+		[CCode (cname = "webkit_dom_html_image_element_set_cross_origin")]
+		public void set_cross_origin (string value);
+		[CCode (cname = "webkit_dom_html_image_element_set_height")]
+		public void set_height (long value);
+		[CCode (cname = "webkit_dom_html_image_element_set_hspace")]
+		public void set_hspace (long value);
+		[CCode (cname = "webkit_dom_html_image_element_set_is_map")]
+		public void set_is_map (bool value);
+		[CCode (cname = "webkit_dom_html_image_element_set_long_desc")]
+		public void set_long_desc (string value);
+		[CCode (cname = "webkit_dom_html_image_element_set_lowsrc")]
+		public void set_lowsrc (string value);
+		[CCode (cname = "webkit_dom_html_image_element_set_name")]
+		public void set_name (string value);
+		[CCode (cname = "webkit_dom_html_image_element_set_src")]
+		public void set_src (string value);
+		[CCode (cname = "webkit_dom_html_image_element_set_use_map")]
+		public void set_use_map (string value);
+		[CCode (cname = "webkit_dom_html_image_element_set_vspace")]
+		public void set_vspace (long value);
+		[CCode (cname = "webkit_dom_html_image_element_set_width")]
+		public void set_width (long value);
+		public string align { get; set; }
+		public string alt { get; set; }
+		public string border { get; set; }
+		public bool complete { get; }
+		public string cross_origin { get; set; }
+		public long height { get; set; }
+		public long hspace { get; set; }
+		public bool is_map { get; set; }
+		public string long_desc { get; set; }
+		public string lowsrc { get; set; }
+		public string name { get; set; }
+		public long natural_height { get; }
+		public long natural_width { get; }
+		public string src { get; set; }
+		public string use_map { get; set; }
+		public long vspace { get; set; }
+		public long width { get; set; }
+		public long x { get; }
+		public long y { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLInputElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLInputElement ();
+		[CCode (cname = "webkit_dom_html_input_element_check_validity")]
+		public bool check_validity ();
+		[CCode (cname = "webkit_dom_html_input_element_click")]
+		public void click ();
+		[CCode (cname = "webkit_dom_html_input_element_get_accept")]
+		public unowned string get_accept ();
+		[CCode (cname = "webkit_dom_html_input_element_get_access_key")]
+		public unowned string get_access_key ();
+		[CCode (cname = "webkit_dom_html_input_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_input_element_get_alt")]
+		public unowned string get_alt ();
+		[CCode (cname = "webkit_dom_html_input_element_get_autocomplete")]
+		public unowned string get_autocomplete ();
+		[CCode (cname = "webkit_dom_html_input_element_get_autofocus")]
+		public bool get_autofocus ();
+		[CCode (cname = "webkit_dom_html_input_element_get_checked")]
+		public bool get_checked ();
+		[CCode (cname = "webkit_dom_html_input_element_get_default_checked")]
+		public bool get_default_checked ();
+		[CCode (cname = "webkit_dom_html_input_element_get_default_value")]
+		public unowned string get_default_value ();
+		[CCode (cname = "webkit_dom_html_input_element_get_disabled")]
+		public bool get_disabled ();
+		[CCode (cname = "webkit_dom_html_input_element_get_files")]
+		public unowned WebKit.DOMFileList get_files ();
+		[CCode (cname = "webkit_dom_html_input_element_get_form")]
+		public unowned WebKit.DOMHTMLFormElement get_form ();
+		[CCode (cname = "webkit_dom_html_input_element_get_form_action")]
+		public unowned string get_form_action ();
+		[CCode (cname = "webkit_dom_html_input_element_get_form_enctype")]
+		public unowned string get_form_enctype ();
+		[CCode (cname = "webkit_dom_html_input_element_get_form_method")]
+		public unowned string get_form_method ();
+		[CCode (cname = "webkit_dom_html_input_element_get_form_no_validate")]
+		public bool get_form_no_validate ();
+		[CCode (cname = "webkit_dom_html_input_element_get_form_target")]
+		public unowned string get_form_target ();
+		[CCode (cname = "webkit_dom_html_input_element_get_incremental")]
+		public bool get_incremental ();
+		[CCode (cname = "webkit_dom_html_input_element_get_indeterminate")]
+		public bool get_indeterminate ();
+		[CCode (cname = "webkit_dom_html_input_element_get_labels")]
+		public unowned WebKit.DOMNodeList get_labels ();
+		[CCode (cname = "webkit_dom_html_input_element_get_list")]
+		public unowned WebKit.DOMHTMLElement get_list ();
+		[CCode (cname = "webkit_dom_html_input_element_get_max")]
+		public unowned string get_max ();
+		[CCode (cname = "webkit_dom_html_input_element_get_max_length")]
+		public long get_max_length ();
+		[CCode (cname = "webkit_dom_html_input_element_get_min")]
+		public unowned string get_min ();
+		[CCode (cname = "webkit_dom_html_input_element_get_multiple")]
+		public bool get_multiple ();
+		[CCode (cname = "webkit_dom_html_input_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_input_element_get_pattern")]
+		public unowned string get_pattern ();
+		[CCode (cname = "webkit_dom_html_input_element_get_placeholder")]
+		public unowned string get_placeholder ();
+		[CCode (cname = "webkit_dom_html_input_element_get_read_only")]
+		public bool get_read_only ();
+		[CCode (cname = "webkit_dom_html_input_element_get_required")]
+		public bool get_required ();
+		[CCode (cname = "webkit_dom_html_input_element_get_selected_option")]
+		public unowned WebKit.DOMHTMLOptionElement get_selected_option ();
+		[CCode (cname = "webkit_dom_html_input_element_get_size")]
+		public ulong get_size ();
+		[CCode (cname = "webkit_dom_html_input_element_get_src")]
+		public unowned string get_src ();
+		[CCode (cname = "webkit_dom_html_input_element_get_step")]
+		public unowned string get_step ();
+		[CCode (cname = "webkit_dom_html_input_element_get_use_map")]
+		public unowned string get_use_map ();
+		[CCode (cname = "webkit_dom_html_input_element_get_validation_message")]
+		public unowned string get_validation_message ();
+		[CCode (cname = "webkit_dom_html_input_element_get_validity")]
+		public unowned WebKit.DOMValidityState get_validity ();
+		[CCode (cname = "webkit_dom_html_input_element_get_value")]
+		public unowned string get_value ();
+		[CCode (cname = "webkit_dom_html_input_element_get_value_as_number")]
+		public double get_value_as_number ();
+		[CCode (cname = "webkit_dom_html_input_element_get_webkit_grammar")]
+		public bool get_webkit_grammar ();
+		[CCode (cname = "webkit_dom_html_input_element_get_webkit_speech")]
+		public bool get_webkit_speech ();
+		[CCode (cname = "webkit_dom_html_input_element_get_webkitdirectory")]
+		public bool get_webkitdirectory ();
+		[CCode (cname = "webkit_dom_html_input_element_get_will_validate")]
+		public bool get_will_validate ();
+		[CCode (cname = "webkit_dom_html_input_element_is_edited")]
+		public bool is_edited ();
+		[CCode (cname = "webkit_dom_html_input_element_select")]
+		public void select ();
+		[CCode (cname = "webkit_dom_html_input_element_set_accept")]
+		public void set_accept (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_access_key")]
+		public void set_access_key (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_align")]
+		public void set_align (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_alt")]
+		public void set_alt (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_autocomplete")]
+		public void set_autocomplete (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_autofocus")]
+		public void set_autofocus (bool value);
+		[CCode (cname = "webkit_dom_html_input_element_set_checked")]
+		public void set_checked (bool value);
+		[CCode (cname = "webkit_dom_html_input_element_set_custom_validity")]
+		public void set_custom_validity (string error);
+		[CCode (cname = "webkit_dom_html_input_element_set_default_checked")]
+		public void set_default_checked (bool value);
+		[CCode (cname = "webkit_dom_html_input_element_set_default_value")]
+		public void set_default_value (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_disabled")]
+		public void set_disabled (bool value);
+		[CCode (cname = "webkit_dom_html_input_element_set_form_action")]
+		public void set_form_action (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_form_enctype")]
+		public void set_form_enctype (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_form_method")]
+		public void set_form_method (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_form_no_validate")]
+		public void set_form_no_validate (bool value);
+		[CCode (cname = "webkit_dom_html_input_element_set_form_target")]
+		public void set_form_target (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_incremental")]
+		public void set_incremental (bool value);
+		[CCode (cname = "webkit_dom_html_input_element_set_indeterminate")]
+		public void set_indeterminate (bool value);
+		[CCode (cname = "webkit_dom_html_input_element_set_max")]
+		public void set_max (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_max_length")]
+		public void set_max_length (long value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_input_element_set_min")]
+		public void set_min (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_multiple")]
+		public void set_multiple (bool value);
+		[CCode (cname = "webkit_dom_html_input_element_set_name")]
+		public void set_name (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_pattern")]
+		public void set_pattern (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_placeholder")]
+		public void set_placeholder (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_read_only")]
+		public void set_read_only (bool value);
+		[CCode (cname = "webkit_dom_html_input_element_set_required")]
+		public void set_required (bool value);
+		[CCode (cname = "webkit_dom_html_input_element_set_size")]
+		public void set_size (ulong value);
+		[CCode (cname = "webkit_dom_html_input_element_set_src")]
+		public void set_src (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_step")]
+		public void set_step (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_use_map")]
+		public void set_use_map (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_value")]
+		public void set_value (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_value_as_number")]
+		public void set_value_as_number (double value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_input_element_set_value_for_user")]
+		public void set_value_for_user (string value);
+		[CCode (cname = "webkit_dom_html_input_element_set_webkit_grammar")]
+		public void set_webkit_grammar (bool value);
+		[CCode (cname = "webkit_dom_html_input_element_set_webkit_speech")]
+		public void set_webkit_speech (bool value);
+		[CCode (cname = "webkit_dom_html_input_element_set_webkitdirectory")]
+		public void set_webkitdirectory (bool value);
+		[CCode (cname = "webkit_dom_html_input_element_step_down")]
+		public void step_down (long n) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_input_element_step_up")]
+		public void step_up (long n) throws GLib.Error;
+		public string accept { get; set; }
+		public string access_key { get; set; }
+		public string align { get; set; }
+		public string alt { get; set; }
+		public string autocomplete { get; set; }
+		public bool autofocus { get; set; }
+		public bool checked { get; set; }
+		public bool default_checked { get; set; }
+		public string default_value { get; set; }
+		public bool disabled { get; set; }
+		public WebKit.DOMFileList files { get; }
+		public WebKit.DOMHTMLFormElement form { get; }
+		public string form_action { get; set; }
+		public string form_enctype { get; set; }
+		public string form_method { get; set; }
+		public bool form_no_validate { get; set; }
+		public string form_target { get; set; }
+		public bool incremental { get; set; }
+		public bool indeterminate { get; set; }
+		public WebKit.DOMNodeList labels { get; }
+		public WebKit.DOMHTMLElement list { get; }
+		public string max { get; set; }
+		public long max_length { get; set; }
+		public string min { get; set; }
+		public bool multiple { get; set; }
+		public string name { get; set; }
+		public string pattern { get; set; }
+		public string placeholder { get; set; }
+		public bool read_only { get; set; }
+		public bool required { get; set; }
+		public WebKit.DOMHTMLOptionElement selected_option { get; }
+		public ulong size { get; set; }
+		public string src { get; set; }
+		public string step { get; set; }
+		[NoAccessorMethod]
+		public string type { owned get; set; }
+		public string use_map { get; set; }
+		public string validation_message { get; }
+		public WebKit.DOMValidityState validity { get; }
+		public string value { get; set; }
+		public double value_as_number { get; set; }
+		public bool will_validate { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLIsIndexElement : WebKit.DOMHTMLInputElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLIsIndexElement ();
+		[CCode (cname = "webkit_dom_html_is_index_element_get_form")]
+		public unowned WebKit.DOMHTMLFormElement get_form ();
+		[CCode (cname = "webkit_dom_html_is_index_element_get_prompt")]
+		public unowned string get_prompt ();
+		[CCode (cname = "webkit_dom_html_is_index_element_set_prompt")]
+		public void set_prompt (string value);
+		public WebKit.DOMHTMLFormElement form { get; }
+		public string prompt { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLKeygenElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLKeygenElement ();
+		[CCode (cname = "webkit_dom_html_keygen_element_check_validity")]
+		public bool check_validity ();
+		[CCode (cname = "webkit_dom_html_keygen_element_get_autofocus")]
+		public bool get_autofocus ();
+		[CCode (cname = "webkit_dom_html_keygen_element_get_challenge")]
+		public unowned string get_challenge ();
+		[CCode (cname = "webkit_dom_html_keygen_element_get_disabled")]
+		public bool get_disabled ();
+		[CCode (cname = "webkit_dom_html_keygen_element_get_form")]
+		public unowned WebKit.DOMHTMLFormElement get_form ();
+		[CCode (cname = "webkit_dom_html_keygen_element_get_keytype")]
+		public unowned string get_keytype ();
+		[CCode (cname = "webkit_dom_html_keygen_element_get_labels")]
+		public unowned WebKit.DOMNodeList get_labels ();
+		[CCode (cname = "webkit_dom_html_keygen_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_keygen_element_get_validation_message")]
+		public unowned string get_validation_message ();
+		[CCode (cname = "webkit_dom_html_keygen_element_get_validity")]
+		public unowned WebKit.DOMValidityState get_validity ();
+		[CCode (cname = "webkit_dom_html_keygen_element_get_will_validate")]
+		public bool get_will_validate ();
+		[CCode (cname = "webkit_dom_html_keygen_element_set_autofocus")]
+		public void set_autofocus (bool value);
+		[CCode (cname = "webkit_dom_html_keygen_element_set_challenge")]
+		public void set_challenge (string value);
+		[CCode (cname = "webkit_dom_html_keygen_element_set_custom_validity")]
+		public void set_custom_validity (string error);
+		[CCode (cname = "webkit_dom_html_keygen_element_set_disabled")]
+		public void set_disabled (bool value);
+		[CCode (cname = "webkit_dom_html_keygen_element_set_keytype")]
+		public void set_keytype (string value);
+		[CCode (cname = "webkit_dom_html_keygen_element_set_name")]
+		public void set_name (string value);
+		public bool autofocus { get; set; }
+		public string challenge { get; set; }
+		public bool disabled { get; set; }
+		public WebKit.DOMHTMLFormElement form { get; }
+		public string keytype { get; set; }
+		public WebKit.DOMNodeList labels { get; }
+		public string name { get; set; }
+		[NoAccessorMethod]
+		public string type { owned get; }
+		public string validation_message { get; }
+		public WebKit.DOMValidityState validity { get; }
+		public bool will_validate { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLLIElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLLIElement ();
+		[CCode (cname = "webkit_dom_htmlli_element_get_value")]
+		public long get_value ();
+		[CCode (cname = "webkit_dom_htmlli_element_set_value")]
+		public void set_value (long value);
+		[NoAccessorMethod]
+		public string type { owned get; set; }
+		public long value { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLLabelElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLLabelElement ();
+		[CCode (cname = "webkit_dom_html_label_element_get_access_key")]
+		public unowned string get_access_key ();
+		[CCode (cname = "webkit_dom_html_label_element_get_control")]
+		public unowned WebKit.DOMHTMLElement get_control ();
+		[CCode (cname = "webkit_dom_html_label_element_get_form")]
+		public unowned WebKit.DOMHTMLFormElement get_form ();
+		[CCode (cname = "webkit_dom_html_label_element_get_html_for")]
+		public unowned string get_html_for ();
+		[CCode (cname = "webkit_dom_html_label_element_set_access_key")]
+		public void set_access_key (string value);
+		[CCode (cname = "webkit_dom_html_label_element_set_html_for")]
+		public void set_html_for (string value);
+		public string access_key { get; set; }
+		public WebKit.DOMHTMLElement control { get; }
+		public WebKit.DOMHTMLFormElement form { get; }
+		public string html_for { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLLegendElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLLegendElement ();
+		[CCode (cname = "webkit_dom_html_legend_element_get_access_key")]
+		public unowned string get_access_key ();
+		[CCode (cname = "webkit_dom_html_legend_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_legend_element_get_form")]
+		public unowned WebKit.DOMHTMLFormElement get_form ();
+		[CCode (cname = "webkit_dom_html_legend_element_set_access_key")]
+		public void set_access_key (string value);
+		[CCode (cname = "webkit_dom_html_legend_element_set_align")]
+		public void set_align (string value);
+		public string access_key { get; set; }
+		public string align { get; set; }
+		public WebKit.DOMHTMLFormElement form { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLLinkElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLLinkElement ();
+		[CCode (cname = "webkit_dom_html_link_element_get_charset")]
+		public unowned string get_charset ();
+		[CCode (cname = "webkit_dom_html_link_element_get_disabled")]
+		public bool get_disabled ();
+		[CCode (cname = "webkit_dom_html_link_element_get_href")]
+		public unowned string get_href ();
+		[CCode (cname = "webkit_dom_html_link_element_get_hreflang")]
+		public unowned string get_hreflang ();
+		[CCode (cname = "webkit_dom_html_link_element_get_media")]
+		public unowned string get_media ();
+		[CCode (cname = "webkit_dom_html_link_element_get_rel")]
+		public unowned string get_rel ();
+		[CCode (cname = "webkit_dom_html_link_element_get_rev")]
+		public unowned string get_rev ();
+		[CCode (cname = "webkit_dom_html_link_element_get_sheet")]
+		public unowned WebKit.DOMStyleSheet get_sheet ();
+		[CCode (cname = "webkit_dom_html_link_element_get_target")]
+		public unowned string get_target ();
+		[CCode (cname = "webkit_dom_html_link_element_set_charset")]
+		public void set_charset (string value);
+		[CCode (cname = "webkit_dom_html_link_element_set_disabled")]
+		public void set_disabled (bool value);
+		[CCode (cname = "webkit_dom_html_link_element_set_href")]
+		public void set_href (string value);
+		[CCode (cname = "webkit_dom_html_link_element_set_hreflang")]
+		public void set_hreflang (string value);
+		[CCode (cname = "webkit_dom_html_link_element_set_media")]
+		public void set_media (string value);
+		[CCode (cname = "webkit_dom_html_link_element_set_rel")]
+		public void set_rel (string value);
+		[CCode (cname = "webkit_dom_html_link_element_set_rev")]
+		public void set_rev (string value);
+		[CCode (cname = "webkit_dom_html_link_element_set_target")]
+		public void set_target (string value);
+		public string charset { get; set; }
+		public bool disabled { get; set; }
+		public string href { get; set; }
+		public string hreflang { get; set; }
+		public string media { get; set; }
+		public string rel { get; set; }
+		public string rev { get; set; }
+		public WebKit.DOMStyleSheet sheet { get; }
+		public string target { get; set; }
+		[NoAccessorMethod]
+		public string type { owned get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLMapElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLMapElement ();
+		[CCode (cname = "webkit_dom_html_map_element_get_areas")]
+		public unowned WebKit.DOMHTMLCollection get_areas ();
+		[CCode (cname = "webkit_dom_html_map_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_map_element_set_name")]
+		public void set_name (string value);
+		public WebKit.DOMHTMLCollection areas { get; }
+		public string name { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLMarqueeElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLMarqueeElement ();
+		[CCode (cname = "webkit_dom_html_marquee_element_get_behavior")]
+		public unowned string get_behavior ();
+		[CCode (cname = "webkit_dom_html_marquee_element_get_bg_color")]
+		public unowned string get_bg_color ();
+		[CCode (cname = "webkit_dom_html_marquee_element_get_direction")]
+		public unowned string get_direction ();
+		[CCode (cname = "webkit_dom_html_marquee_element_get_height")]
+		public unowned string get_height ();
+		[CCode (cname = "webkit_dom_html_marquee_element_get_hspace")]
+		public ulong get_hspace ();
+		[CCode (cname = "webkit_dom_html_marquee_element_get_loop")]
+		public long get_loop ();
+		[CCode (cname = "webkit_dom_html_marquee_element_get_scroll_amount")]
+		public long get_scroll_amount ();
+		[CCode (cname = "webkit_dom_html_marquee_element_get_scroll_delay")]
+		public long get_scroll_delay ();
+		[CCode (cname = "webkit_dom_html_marquee_element_get_true_speed")]
+		public bool get_true_speed ();
+		[CCode (cname = "webkit_dom_html_marquee_element_get_vspace")]
+		public ulong get_vspace ();
+		[CCode (cname = "webkit_dom_html_marquee_element_get_width")]
+		public unowned string get_width ();
+		[CCode (cname = "webkit_dom_html_marquee_element_set_behavior")]
+		public void set_behavior (string value);
+		[CCode (cname = "webkit_dom_html_marquee_element_set_bg_color")]
+		public void set_bg_color (string value);
+		[CCode (cname = "webkit_dom_html_marquee_element_set_direction")]
+		public void set_direction (string value);
+		[CCode (cname = "webkit_dom_html_marquee_element_set_height")]
+		public void set_height (string value);
+		[CCode (cname = "webkit_dom_html_marquee_element_set_hspace")]
+		public void set_hspace (ulong value);
+		[CCode (cname = "webkit_dom_html_marquee_element_set_loop")]
+		public void set_loop (long value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_marquee_element_set_scroll_amount")]
+		public void set_scroll_amount (long value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_marquee_element_set_scroll_delay")]
+		public void set_scroll_delay (long value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_marquee_element_set_true_speed")]
+		public void set_true_speed (bool value);
+		[CCode (cname = "webkit_dom_html_marquee_element_set_vspace")]
+		public void set_vspace (ulong value);
+		[CCode (cname = "webkit_dom_html_marquee_element_set_width")]
+		public void set_width (string value);
+		[CCode (cname = "webkit_dom_html_marquee_element_start")]
+		public void start ();
+		[CCode (cname = "webkit_dom_html_marquee_element_stop")]
+		public void stop ();
+		public string behavior { get; set; }
+		public string bg_color { get; set; }
+		public string direction { get; set; }
+		public string height { get; set; }
+		public ulong hspace { get; set; }
+		public long loop { get; set; }
+		public long scroll_amount { get; set; }
+		public long scroll_delay { get; set; }
+		public bool true_speed { get; set; }
+		public ulong vspace { get; set; }
+		public string width { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLMediaElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLMediaElement ();
+		[CCode (cname = "webkit_dom_html_media_element_can_play_type")]
+		public unowned string can_play_type (string type);
+		[CCode (cname = "webkit_dom_html_media_element_get_autoplay")]
+		public bool get_autoplay ();
+		[CCode (cname = "webkit_dom_html_media_element_get_buffered")]
+		public unowned WebKit.DOMTimeRanges get_buffered ();
+		[CCode (cname = "webkit_dom_html_media_element_get_controls")]
+		public bool get_controls ();
+		[CCode (cname = "webkit_dom_html_media_element_get_current_src")]
+		public unowned string get_current_src ();
+		[CCode (cname = "webkit_dom_html_media_element_get_current_time")]
+		public float get_current_time ();
+		[CCode (cname = "webkit_dom_html_media_element_get_default_muted")]
+		public bool get_default_muted ();
+		[CCode (cname = "webkit_dom_html_media_element_get_default_playback_rate")]
+		public float get_default_playback_rate ();
+		[CCode (cname = "webkit_dom_html_media_element_get_duration")]
+		public float get_duration ();
+		[CCode (cname = "webkit_dom_html_media_element_get_ended")]
+		public bool get_ended ();
+		[CCode (cname = "webkit_dom_html_media_element_get_error")]
+		public unowned WebKit.DOMMediaError get_error ();
+		[CCode (cname = "webkit_dom_html_media_element_get_initial_time")]
+		public double get_initial_time ();
+		[CCode (cname = "webkit_dom_html_media_element_get_loop")]
+		public bool get_loop ();
+		[CCode (cname = "webkit_dom_html_media_element_get_muted")]
+		public bool get_muted ();
+		[CCode (cname = "webkit_dom_html_media_element_get_network_state")]
+		public ushort get_network_state ();
+		[CCode (cname = "webkit_dom_html_media_element_get_paused")]
+		public bool get_paused ();
+		[CCode (cname = "webkit_dom_html_media_element_get_playback_rate")]
+		public float get_playback_rate ();
+		[CCode (cname = "webkit_dom_html_media_element_get_played")]
+		public unowned WebKit.DOMTimeRanges get_played ();
+		[CCode (cname = "webkit_dom_html_media_element_get_preload")]
+		public unowned string get_preload ();
+		[CCode (cname = "webkit_dom_html_media_element_get_ready_state")]
+		public ushort get_ready_state ();
+		[CCode (cname = "webkit_dom_html_media_element_get_seekable")]
+		public unowned WebKit.DOMTimeRanges get_seekable ();
+		[CCode (cname = "webkit_dom_html_media_element_get_seeking")]
+		public bool get_seeking ();
+		[CCode (cname = "webkit_dom_html_media_element_get_src")]
+		public unowned string get_src ();
+		[CCode (cname = "webkit_dom_html_media_element_get_start_time")]
+		public float get_start_time ();
+		[CCode (cname = "webkit_dom_html_media_element_get_volume")]
+		public float get_volume ();
+		[CCode (cname = "webkit_dom_html_media_element_get_webkit_audio_decoded_byte_count")]
+		public ulong get_webkit_audio_decoded_byte_count ();
+		[CCode (cname = "webkit_dom_html_media_element_get_webkit_closed_captions_visible")]
+		public bool get_webkit_closed_captions_visible ();
+		[CCode (cname = "webkit_dom_html_media_element_get_webkit_has_closed_captions")]
+		public bool get_webkit_has_closed_captions ();
+		[CCode (cname = "webkit_dom_html_media_element_get_webkit_preserves_pitch")]
+		public bool get_webkit_preserves_pitch ();
+		[CCode (cname = "webkit_dom_html_media_element_get_webkit_video_decoded_byte_count")]
+		public ulong get_webkit_video_decoded_byte_count ();
+		[CCode (cname = "webkit_dom_html_media_element_load")]
+		public void load () throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_media_element_pause")]
+		public void pause ();
+		[CCode (cname = "webkit_dom_html_media_element_play")]
+		public void play ();
+		[CCode (cname = "webkit_dom_html_media_element_set_autoplay")]
+		public void set_autoplay (bool value);
+		[CCode (cname = "webkit_dom_html_media_element_set_controls")]
+		public void set_controls (bool value);
+		[CCode (cname = "webkit_dom_html_media_element_set_current_time")]
+		public void set_current_time (float value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_media_element_set_default_muted")]
+		public void set_default_muted (bool value);
+		[CCode (cname = "webkit_dom_html_media_element_set_default_playback_rate")]
+		public void set_default_playback_rate (float value);
+		[CCode (cname = "webkit_dom_html_media_element_set_loop")]
+		public void set_loop (bool value);
+		[CCode (cname = "webkit_dom_html_media_element_set_muted")]
+		public void set_muted (bool value);
+		[CCode (cname = "webkit_dom_html_media_element_set_playback_rate")]
+		public void set_playback_rate (float value);
+		[CCode (cname = "webkit_dom_html_media_element_set_preload")]
+		public void set_preload (string value);
+		[CCode (cname = "webkit_dom_html_media_element_set_src")]
+		public void set_src (string value);
+		[CCode (cname = "webkit_dom_html_media_element_set_volume")]
+		public void set_volume (float value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_media_element_set_webkit_closed_captions_visible")]
+		public void set_webkit_closed_captions_visible (bool value);
+		[CCode (cname = "webkit_dom_html_media_element_set_webkit_preserves_pitch")]
+		public void set_webkit_preserves_pitch (bool value);
+		public bool autoplay { get; set; }
+		public WebKit.DOMTimeRanges buffered { get; }
+		public bool controls { get; set; }
+		public string current_src { get; }
+		public float current_time { get; set; }
+		public bool default_muted { get; set; }
+		public float default_playback_rate { get; set; }
+		public float duration { get; }
+		public bool ended { get; }
+		public WebKit.DOMMediaError error { get; }
+		public double initial_time { get; }
+		public bool loop { get; set; }
+		public bool muted { get; set; }
+		public uint network_state { get; }
+		public bool paused { get; }
+		public float playback_rate { get; set; }
+		public WebKit.DOMTimeRanges played { get; }
+		public string preload { get; set; }
+		public uint ready_state { get; }
+		public WebKit.DOMTimeRanges seekable { get; }
+		public bool seeking { get; }
+		public string src { get; set; }
+		public float start_time { get; }
+		public float volume { get; set; }
+		public bool webkit_closed_captions_visible { get; set; }
+		public bool webkit_has_closed_captions { get; }
+		public bool webkit_preserves_pitch { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLMenuElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLMenuElement ();
+		[CCode (cname = "webkit_dom_html_menu_element_get_compact")]
+		public bool get_compact ();
+		[CCode (cname = "webkit_dom_html_menu_element_set_compact")]
+		public void set_compact (bool value);
+		public bool compact { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLMetaElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLMetaElement ();
+		[CCode (cname = "webkit_dom_html_meta_element_get_content")]
+		public unowned string get_content ();
+		[CCode (cname = "webkit_dom_html_meta_element_get_http_equiv")]
+		public unowned string get_http_equiv ();
+		[CCode (cname = "webkit_dom_html_meta_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_meta_element_get_scheme")]
+		public unowned string get_scheme ();
+		[CCode (cname = "webkit_dom_html_meta_element_set_content")]
+		public void set_content (string value);
+		[CCode (cname = "webkit_dom_html_meta_element_set_http_equiv")]
+		public void set_http_equiv (string value);
+		[CCode (cname = "webkit_dom_html_meta_element_set_name")]
+		public void set_name (string value);
+		[CCode (cname = "webkit_dom_html_meta_element_set_scheme")]
+		public void set_scheme (string value);
+		public string content { get; set; }
+		public string http_equiv { get; set; }
+		public string name { get; set; }
+		public string scheme { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLModElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLModElement ();
+		[CCode (cname = "webkit_dom_html_mod_element_get_cite")]
+		public unowned string get_cite ();
+		[CCode (cname = "webkit_dom_html_mod_element_get_date_time")]
+		public unowned string get_date_time ();
+		[CCode (cname = "webkit_dom_html_mod_element_set_cite")]
+		public void set_cite (string value);
+		[CCode (cname = "webkit_dom_html_mod_element_set_date_time")]
+		public void set_date_time (string value);
+		public string cite { get; set; }
+		public string date_time { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLOListElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLOListElement ();
+		[CCode (cname = "webkit_dom_htmlo_list_element_get_compact")]
+		public bool get_compact ();
+		[CCode (cname = "webkit_dom_htmlo_list_element_get_start")]
+		public long get_start ();
+		[CCode (cname = "webkit_dom_htmlo_list_element_set_compact")]
+		public void set_compact (bool value);
+		[CCode (cname = "webkit_dom_htmlo_list_element_set_start")]
+		public void set_start (long value);
+		public bool compact { get; set; }
+		public long start { get; set; }
+		[NoAccessorMethod]
+		public string type { owned get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLObjectElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLObjectElement ();
+		[CCode (cname = "webkit_dom_html_object_element_check_validity")]
+		public bool check_validity ();
+		[CCode (cname = "webkit_dom_html_object_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_object_element_get_archive")]
+		public unowned string get_archive ();
+		[CCode (cname = "webkit_dom_html_object_element_get_border")]
+		public unowned string get_border ();
+		[CCode (cname = "webkit_dom_html_object_element_get_code")]
+		public unowned string get_code ();
+		[CCode (cname = "webkit_dom_html_object_element_get_code_base")]
+		public unowned string get_code_base ();
+		[CCode (cname = "webkit_dom_html_object_element_get_code_type")]
+		public unowned string get_code_type ();
+		[CCode (cname = "webkit_dom_html_object_element_get_content_document")]
+		public unowned WebKit.DOMDocument get_content_document ();
+		[CCode (cname = "webkit_dom_html_object_element_get_data")]
+		public unowned string get_data ();
+		[CCode (cname = "webkit_dom_html_object_element_get_declare")]
+		public bool get_declare ();
+		[CCode (cname = "webkit_dom_html_object_element_get_form")]
+		public unowned WebKit.DOMHTMLFormElement get_form ();
+		[CCode (cname = "webkit_dom_html_object_element_get_height")]
+		public unowned string get_height ();
+		[CCode (cname = "webkit_dom_html_object_element_get_hspace")]
+		public long get_hspace ();
+		[CCode (cname = "webkit_dom_html_object_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_object_element_get_standby")]
+		public unowned string get_standby ();
+		[CCode (cname = "webkit_dom_html_object_element_get_use_map")]
+		public unowned string get_use_map ();
+		[CCode (cname = "webkit_dom_html_object_element_get_validation_message")]
+		public unowned string get_validation_message ();
+		[CCode (cname = "webkit_dom_html_object_element_get_validity")]
+		public unowned WebKit.DOMValidityState get_validity ();
+		[CCode (cname = "webkit_dom_html_object_element_get_vspace")]
+		public long get_vspace ();
+		[CCode (cname = "webkit_dom_html_object_element_get_width")]
+		public unowned string get_width ();
+		[CCode (cname = "webkit_dom_html_object_element_get_will_validate")]
+		public bool get_will_validate ();
+		[CCode (cname = "webkit_dom_html_object_element_set_align")]
+		public void set_align (string value);
+		[CCode (cname = "webkit_dom_html_object_element_set_archive")]
+		public void set_archive (string value);
+		[CCode (cname = "webkit_dom_html_object_element_set_border")]
+		public void set_border (string value);
+		[CCode (cname = "webkit_dom_html_object_element_set_code")]
+		public void set_code (string value);
+		[CCode (cname = "webkit_dom_html_object_element_set_code_base")]
+		public void set_code_base (string value);
+		[CCode (cname = "webkit_dom_html_object_element_set_code_type")]
+		public void set_code_type (string value);
+		[CCode (cname = "webkit_dom_html_object_element_set_custom_validity")]
+		public void set_custom_validity (string error);
+		[CCode (cname = "webkit_dom_html_object_element_set_data")]
+		public void set_data (string value);
+		[CCode (cname = "webkit_dom_html_object_element_set_declare")]
+		public void set_declare (bool value);
+		[CCode (cname = "webkit_dom_html_object_element_set_height")]
+		public void set_height (string value);
+		[CCode (cname = "webkit_dom_html_object_element_set_hspace")]
+		public void set_hspace (long value);
+		[CCode (cname = "webkit_dom_html_object_element_set_name")]
+		public void set_name (string value);
+		[CCode (cname = "webkit_dom_html_object_element_set_standby")]
+		public void set_standby (string value);
+		[CCode (cname = "webkit_dom_html_object_element_set_use_map")]
+		public void set_use_map (string value);
+		[CCode (cname = "webkit_dom_html_object_element_set_vspace")]
+		public void set_vspace (long value);
+		[CCode (cname = "webkit_dom_html_object_element_set_width")]
+		public void set_width (string value);
+		public string align { get; set; }
+		public string archive { get; set; }
+		public string border { get; set; }
+		public string code { get; set; }
+		public string code_base { get; set; }
+		public string code_type { get; set; }
+		public WebKit.DOMDocument content_document { get; }
+		public string data { get; set; }
+		public bool declare { get; set; }
+		public WebKit.DOMHTMLFormElement form { get; }
+		public string height { get; set; }
+		public long hspace { get; set; }
+		public string name { get; set; }
+		public string standby { get; set; }
+		[NoAccessorMethod]
+		public string type { owned get; set; }
+		public string use_map { get; set; }
+		public string validation_message { get; }
+		public WebKit.DOMValidityState validity { get; }
+		public long vspace { get; set; }
+		public string width { get; set; }
+		public bool will_validate { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLOptGroupElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLOptGroupElement ();
+		[CCode (cname = "webkit_dom_html_opt_group_element_get_disabled")]
+		public bool get_disabled ();
+		[CCode (cname = "webkit_dom_html_opt_group_element_get_label")]
+		public unowned string get_label ();
+		[CCode (cname = "webkit_dom_html_opt_group_element_set_disabled")]
+		public void set_disabled (bool value);
+		[CCode (cname = "webkit_dom_html_opt_group_element_set_label")]
+		public void set_label (string value);
+		public bool disabled { get; set; }
+		public string label { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLOptionElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLOptionElement ();
+		[CCode (cname = "webkit_dom_html_option_element_get_default_selected")]
+		public bool get_default_selected ();
+		[CCode (cname = "webkit_dom_html_option_element_get_disabled")]
+		public bool get_disabled ();
+		[CCode (cname = "webkit_dom_html_option_element_get_form")]
+		public unowned WebKit.DOMHTMLFormElement get_form ();
+		[CCode (cname = "webkit_dom_html_option_element_get_index")]
+		public long get_index ();
+		[CCode (cname = "webkit_dom_html_option_element_get_label")]
+		public unowned string get_label ();
+		[CCode (cname = "webkit_dom_html_option_element_get_selected")]
+		public bool get_selected ();
+		[CCode (cname = "webkit_dom_html_option_element_get_text")]
+		public unowned string get_text ();
+		[CCode (cname = "webkit_dom_html_option_element_get_value")]
+		public unowned string get_value ();
+		[CCode (cname = "webkit_dom_html_option_element_set_default_selected")]
+		public void set_default_selected (bool value);
+		[CCode (cname = "webkit_dom_html_option_element_set_disabled")]
+		public void set_disabled (bool value);
+		[CCode (cname = "webkit_dom_html_option_element_set_label")]
+		public void set_label (string value);
+		[CCode (cname = "webkit_dom_html_option_element_set_selected")]
+		public void set_selected (bool value);
+		[CCode (cname = "webkit_dom_html_option_element_set_value")]
+		public void set_value (string value);
+		public bool default_selected { get; set; }
+		public bool disabled { get; set; }
+		public WebKit.DOMHTMLFormElement form { get; }
+		public long index { get; }
+		public string label { get; set; }
+		public bool selected { get; set; }
+		public string text { get; }
+		public string value { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLOptionsCollection : WebKit.DOMHTMLCollection {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLOptionsCollection ();
+		[CCode (cname = "webkit_dom_html_options_collection_get_selected_index")]
+		public long get_selected_index ();
+		[CCode (cname = "webkit_dom_html_options_collection_set_selected_index")]
+		public void set_selected_index (long value);
+		public long selected_index { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLParagraphElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLParagraphElement ();
+		[CCode (cname = "webkit_dom_html_paragraph_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_paragraph_element_set_align")]
+		public void set_align (string value);
+		public string align { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLParamElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLParamElement ();
+		[CCode (cname = "webkit_dom_html_param_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_param_element_get_value")]
+		public unowned string get_value ();
+		[CCode (cname = "webkit_dom_html_param_element_get_value_type")]
+		public unowned string get_value_type ();
+		[CCode (cname = "webkit_dom_html_param_element_set_name")]
+		public void set_name (string value);
+		[CCode (cname = "webkit_dom_html_param_element_set_value")]
+		public void set_value (string value);
+		[CCode (cname = "webkit_dom_html_param_element_set_value_type")]
+		public void set_value_type (string value);
+		public string name { get; set; }
+		[NoAccessorMethod]
+		public string type { owned get; set; }
+		public string value { get; set; }
+		public string value_type { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLPreElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLPreElement ();
+		[CCode (cname = "webkit_dom_html_pre_element_get_width")]
+		public long get_width ();
+		[CCode (cname = "webkit_dom_html_pre_element_get_wrap")]
+		public bool get_wrap ();
+		[CCode (cname = "webkit_dom_html_pre_element_set_width")]
+		public void set_width (long value);
+		[CCode (cname = "webkit_dom_html_pre_element_set_wrap")]
+		public void set_wrap (bool value);
+		public long width { get; set; }
+		public bool wrap { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLQuoteElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLQuoteElement ();
+		[CCode (cname = "webkit_dom_html_quote_element_get_cite")]
+		public unowned string get_cite ();
+		[CCode (cname = "webkit_dom_html_quote_element_set_cite")]
+		public void set_cite (string value);
+		public string cite { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLScriptElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLScriptElement ();
+		[CCode (cname = "webkit_dom_html_script_element_get_async")]
+		public bool get_async ();
+		[CCode (cname = "webkit_dom_html_script_element_get_charset")]
+		public unowned string get_charset ();
+		[CCode (cname = "webkit_dom_html_script_element_get_defer")]
+		public bool get_defer ();
+		[CCode (cname = "webkit_dom_html_script_element_get_event")]
+		public unowned string get_event ();
+		[CCode (cname = "webkit_dom_html_script_element_get_html_for")]
+		public unowned string get_html_for ();
+		[CCode (cname = "webkit_dom_html_script_element_get_src")]
+		public unowned string get_src ();
+		[CCode (cname = "webkit_dom_html_script_element_get_text")]
+		public unowned string get_text ();
+		[CCode (cname = "webkit_dom_html_script_element_set_async")]
+		public void set_async (bool value);
+		[CCode (cname = "webkit_dom_html_script_element_set_charset")]
+		public void set_charset (string value);
+		[CCode (cname = "webkit_dom_html_script_element_set_defer")]
+		public void set_defer (bool value);
+		[CCode (cname = "webkit_dom_html_script_element_set_event")]
+		public void set_event (string value);
+		[CCode (cname = "webkit_dom_html_script_element_set_html_for")]
+		public void set_html_for (string value);
+		[CCode (cname = "webkit_dom_html_script_element_set_src")]
+		public void set_src (string value);
+		[CCode (cname = "webkit_dom_html_script_element_set_text")]
+		public void set_text (string value);
+		public bool @async { get; set; }
+		public string charset { get; set; }
+		public bool defer { get; set; }
+		public string event { get; set; }
+		public string html_for { get; set; }
+		public string src { get; set; }
+		public string text { get; set; }
+		[NoAccessorMethod]
+		public string type { owned get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLSelectElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLSelectElement ();
+		[CCode (cname = "webkit_dom_html_select_element_add")]
+		public void add (WebKit.DOMHTMLElement element, WebKit.DOMHTMLElement before) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_select_element_check_validity")]
+		public bool check_validity ();
+		[CCode (cname = "webkit_dom_html_select_element_get_autofocus")]
+		public bool get_autofocus ();
+		[CCode (cname = "webkit_dom_html_select_element_get_disabled")]
+		public bool get_disabled ();
+		[CCode (cname = "webkit_dom_html_select_element_get_form")]
+		public unowned WebKit.DOMHTMLFormElement get_form ();
+		[CCode (cname = "webkit_dom_html_select_element_get_labels")]
+		public unowned WebKit.DOMNodeList get_labels ();
+		[CCode (cname = "webkit_dom_html_select_element_get_length")]
+		public ulong get_length ();
+		[CCode (cname = "webkit_dom_html_select_element_get_multiple")]
+		public bool get_multiple ();
+		[CCode (cname = "webkit_dom_html_select_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_select_element_get_options")]
+		public unowned WebKit.DOMHTMLOptionsCollection get_options ();
+		[CCode (cname = "webkit_dom_html_select_element_get_required")]
+		public bool get_required ();
+		[CCode (cname = "webkit_dom_html_select_element_get_selected_index")]
+		public long get_selected_index ();
+		[CCode (cname = "webkit_dom_html_select_element_get_size")]
+		public long get_size ();
+		[CCode (cname = "webkit_dom_html_select_element_get_validation_message")]
+		public unowned string get_validation_message ();
+		[CCode (cname = "webkit_dom_html_select_element_get_validity")]
+		public unowned WebKit.DOMValidityState get_validity ();
+		[CCode (cname = "webkit_dom_html_select_element_get_value")]
+		public unowned string get_value ();
+		[CCode (cname = "webkit_dom_html_select_element_get_will_validate")]
+		public bool get_will_validate ();
+		[CCode (cname = "webkit_dom_html_select_element_item")]
+		public unowned WebKit.DOMNode item (ulong index);
+		[CCode (cname = "webkit_dom_html_select_element_named_item")]
+		public unowned WebKit.DOMNode named_item (string name);
+		[CCode (cname = "webkit_dom_html_select_element_remove")]
+		public void remove (long index);
+		[CCode (cname = "webkit_dom_html_select_element_set_autofocus")]
+		public void set_autofocus (bool value);
+		[CCode (cname = "webkit_dom_html_select_element_set_custom_validity")]
+		public void set_custom_validity (string error);
+		[CCode (cname = "webkit_dom_html_select_element_set_disabled")]
+		public void set_disabled (bool value);
+		[CCode (cname = "webkit_dom_html_select_element_set_length")]
+		public void set_length (ulong value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_select_element_set_multiple")]
+		public void set_multiple (bool value);
+		[CCode (cname = "webkit_dom_html_select_element_set_name")]
+		public void set_name (string value);
+		[CCode (cname = "webkit_dom_html_select_element_set_required")]
+		public void set_required (bool value);
+		[CCode (cname = "webkit_dom_html_select_element_set_selected_index")]
+		public void set_selected_index (long value);
+		[CCode (cname = "webkit_dom_html_select_element_set_size")]
+		public void set_size (long value);
+		[CCode (cname = "webkit_dom_html_select_element_set_value")]
+		public void set_value (string value);
+		public bool autofocus { get; set; }
+		public bool disabled { get; set; }
+		public WebKit.DOMHTMLFormElement form { get; }
+		public WebKit.DOMNodeList labels { get; }
+		public ulong length { get; set; }
+		public bool multiple { get; set; }
+		public string name { get; set; }
+		public WebKit.DOMHTMLOptionsCollection options { get; }
+		public bool required { get; set; }
+		public long selected_index { get; set; }
+		public long size { get; set; }
+		[NoAccessorMethod]
+		public string type { owned get; }
+		public string validation_message { get; }
+		public WebKit.DOMValidityState validity { get; }
+		public string value { get; set; }
+		public bool will_validate { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLStyleElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLStyleElement ();
+		[CCode (cname = "webkit_dom_html_style_element_get_disabled")]
+		public bool get_disabled ();
+		[CCode (cname = "webkit_dom_html_style_element_get_media")]
+		public unowned string get_media ();
+		[CCode (cname = "webkit_dom_html_style_element_get_sheet")]
+		public unowned WebKit.DOMStyleSheet get_sheet ();
+		[CCode (cname = "webkit_dom_html_style_element_set_disabled")]
+		public void set_disabled (bool value);
+		[CCode (cname = "webkit_dom_html_style_element_set_media")]
+		public void set_media (string value);
+		public bool disabled { get; set; }
+		public string media { get; set; }
+		public WebKit.DOMStyleSheet sheet { get; }
+		[NoAccessorMethod]
+		public string type { owned get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLTableCaptionElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLTableCaptionElement ();
+		[CCode (cname = "webkit_dom_html_table_caption_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_table_caption_element_set_align")]
+		public void set_align (string value);
+		public string align { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLTableCellElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLTableCellElement ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_get_abbr")]
+		public unowned string get_abbr ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_get_axis")]
+		public unowned string get_axis ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_get_bg_color")]
+		public unowned string get_bg_color ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_get_cell_index")]
+		public long get_cell_index ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_get_ch")]
+		public unowned string get_ch ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_get_ch_off")]
+		public unowned string get_ch_off ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_get_col_span")]
+		public long get_col_span ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_get_headers")]
+		public unowned string get_headers ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_get_height")]
+		public unowned string get_height ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_get_no_wrap")]
+		public bool get_no_wrap ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_get_row_span")]
+		public long get_row_span ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_get_scope")]
+		public unowned string get_scope ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_get_v_align")]
+		public unowned string get_v_align ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_get_width")]
+		public unowned string get_width ();
+		[CCode (cname = "webkit_dom_html_table_cell_element_set_abbr")]
+		public void set_abbr (string value);
+		[CCode (cname = "webkit_dom_html_table_cell_element_set_align")]
+		public void set_align (string value);
+		[CCode (cname = "webkit_dom_html_table_cell_element_set_axis")]
+		public void set_axis (string value);
+		[CCode (cname = "webkit_dom_html_table_cell_element_set_bg_color")]
+		public void set_bg_color (string value);
+		[CCode (cname = "webkit_dom_html_table_cell_element_set_ch")]
+		public void set_ch (string value);
+		[CCode (cname = "webkit_dom_html_table_cell_element_set_ch_off")]
+		public void set_ch_off (string value);
+		[CCode (cname = "webkit_dom_html_table_cell_element_set_col_span")]
+		public void set_col_span (long value);
+		[CCode (cname = "webkit_dom_html_table_cell_element_set_headers")]
+		public void set_headers (string value);
+		[CCode (cname = "webkit_dom_html_table_cell_element_set_height")]
+		public void set_height (string value);
+		[CCode (cname = "webkit_dom_html_table_cell_element_set_no_wrap")]
+		public void set_no_wrap (bool value);
+		[CCode (cname = "webkit_dom_html_table_cell_element_set_row_span")]
+		public void set_row_span (long value);
+		[CCode (cname = "webkit_dom_html_table_cell_element_set_scope")]
+		public void set_scope (string value);
+		[CCode (cname = "webkit_dom_html_table_cell_element_set_v_align")]
+		public void set_v_align (string value);
+		[CCode (cname = "webkit_dom_html_table_cell_element_set_width")]
+		public void set_width (string value);
+		public string abbr { get; set; }
+		public string align { get; set; }
+		public string axis { get; set; }
+		public string bg_color { get; set; }
+		public long cell_index { get; }
+		public string ch { get; set; }
+		public string ch_off { get; set; }
+		public long col_span { get; set; }
+		public string headers { get; set; }
+		public string height { get; set; }
+		public bool no_wrap { get; set; }
+		public long row_span { get; set; }
+		public string scope { get; set; }
+		public string v_align { get; set; }
+		public string width { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLTableColElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLTableColElement ();
+		[CCode (cname = "webkit_dom_html_table_col_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_table_col_element_get_ch")]
+		public unowned string get_ch ();
+		[CCode (cname = "webkit_dom_html_table_col_element_get_ch_off")]
+		public unowned string get_ch_off ();
+		[CCode (cname = "webkit_dom_html_table_col_element_get_span")]
+		public long get_span ();
+		[CCode (cname = "webkit_dom_html_table_col_element_get_v_align")]
+		public unowned string get_v_align ();
+		[CCode (cname = "webkit_dom_html_table_col_element_get_width")]
+		public unowned string get_width ();
+		[CCode (cname = "webkit_dom_html_table_col_element_set_align")]
+		public void set_align (string value);
+		[CCode (cname = "webkit_dom_html_table_col_element_set_ch")]
+		public void set_ch (string value);
+		[CCode (cname = "webkit_dom_html_table_col_element_set_ch_off")]
+		public void set_ch_off (string value);
+		[CCode (cname = "webkit_dom_html_table_col_element_set_span")]
+		public void set_span (long value);
+		[CCode (cname = "webkit_dom_html_table_col_element_set_v_align")]
+		public void set_v_align (string value);
+		[CCode (cname = "webkit_dom_html_table_col_element_set_width")]
+		public void set_width (string value);
+		public string align { get; set; }
+		public string ch { get; set; }
+		public string ch_off { get; set; }
+		public long span { get; set; }
+		public string v_align { get; set; }
+		public string width { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLTableElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLTableElement ();
+		[CCode (cname = "webkit_dom_html_table_element_create_caption")]
+		public unowned WebKit.DOMHTMLElement create_caption ();
+		[CCode (cname = "webkit_dom_html_table_element_create_t_foot")]
+		public unowned WebKit.DOMHTMLElement create_t_foot ();
+		[CCode (cname = "webkit_dom_html_table_element_create_t_head")]
+		public unowned WebKit.DOMHTMLElement create_t_head ();
+		[CCode (cname = "webkit_dom_html_table_element_delete_caption")]
+		public void delete_caption ();
+		[CCode (cname = "webkit_dom_html_table_element_delete_row")]
+		public void delete_row (long index) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_table_element_delete_t_foot")]
+		public void delete_t_foot ();
+		[CCode (cname = "webkit_dom_html_table_element_delete_t_head")]
+		public void delete_t_head ();
+		[CCode (cname = "webkit_dom_html_table_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_table_element_get_bg_color")]
+		public unowned string get_bg_color ();
+		[CCode (cname = "webkit_dom_html_table_element_get_border")]
+		public unowned string get_border ();
+		[CCode (cname = "webkit_dom_html_table_element_get_caption")]
+		public unowned WebKit.DOMHTMLTableCaptionElement get_caption ();
+		[CCode (cname = "webkit_dom_html_table_element_get_cell_padding")]
+		public unowned string get_cell_padding ();
+		[CCode (cname = "webkit_dom_html_table_element_get_cell_spacing")]
+		public unowned string get_cell_spacing ();
+		[CCode (cname = "webkit_dom_html_table_element_get_frame")]
+		public unowned string get_frame ();
+		[CCode (cname = "webkit_dom_html_table_element_get_rows")]
+		public unowned WebKit.DOMHTMLCollection get_rows ();
+		[CCode (cname = "webkit_dom_html_table_element_get_rules")]
+		public unowned string get_rules ();
+		[CCode (cname = "webkit_dom_html_table_element_get_summary")]
+		public unowned string get_summary ();
+		[CCode (cname = "webkit_dom_html_table_element_get_t_bodies")]
+		public unowned WebKit.DOMHTMLCollection get_t_bodies ();
+		[CCode (cname = "webkit_dom_html_table_element_get_t_foot")]
+		public unowned WebKit.DOMHTMLTableSectionElement get_t_foot ();
+		[CCode (cname = "webkit_dom_html_table_element_get_t_head")]
+		public unowned WebKit.DOMHTMLTableSectionElement get_t_head ();
+		[CCode (cname = "webkit_dom_html_table_element_get_width")]
+		public unowned string get_width ();
+		[CCode (cname = "webkit_dom_html_table_element_insert_row")]
+		public unowned WebKit.DOMHTMLElement insert_row (long index) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_table_element_set_align")]
+		public void set_align (string value);
+		[CCode (cname = "webkit_dom_html_table_element_set_bg_color")]
+		public void set_bg_color (string value);
+		[CCode (cname = "webkit_dom_html_table_element_set_border")]
+		public void set_border (string value);
+		[CCode (cname = "webkit_dom_html_table_element_set_caption")]
+		public void set_caption (WebKit.DOMHTMLTableCaptionElement value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_table_element_set_cell_padding")]
+		public void set_cell_padding (string value);
+		[CCode (cname = "webkit_dom_html_table_element_set_cell_spacing")]
+		public void set_cell_spacing (string value);
+		[CCode (cname = "webkit_dom_html_table_element_set_frame")]
+		public void set_frame (string value);
+		[CCode (cname = "webkit_dom_html_table_element_set_rules")]
+		public void set_rules (string value);
+		[CCode (cname = "webkit_dom_html_table_element_set_summary")]
+		public void set_summary (string value);
+		[CCode (cname = "webkit_dom_html_table_element_set_t_foot")]
+		public void set_t_foot (WebKit.DOMHTMLTableSectionElement value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_table_element_set_t_head")]
+		public void set_t_head (WebKit.DOMHTMLTableSectionElement value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_table_element_set_width")]
+		public void set_width (string value);
+		public string align { get; set; }
+		public string bg_color { get; set; }
+		public string border { get; set; }
+		public WebKit.DOMHTMLTableCaptionElement caption { get; set; }
+		public string cell_padding { get; set; }
+		public string cell_spacing { get; set; }
+		public string frame { get; set; }
+		public WebKit.DOMHTMLCollection rows { get; }
+		public string rules { get; set; }
+		public string summary { get; set; }
+		public WebKit.DOMHTMLCollection t_bodies { get; }
+		public WebKit.DOMHTMLTableSectionElement t_foot { get; set; }
+		public WebKit.DOMHTMLTableSectionElement t_head { get; set; }
+		public string width { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLTableRowElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLTableRowElement ();
+		[CCode (cname = "webkit_dom_html_table_row_element_delete_cell")]
+		public void delete_cell (long index) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_table_row_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_table_row_element_get_bg_color")]
+		public unowned string get_bg_color ();
+		[CCode (cname = "webkit_dom_html_table_row_element_get_cells")]
+		public unowned WebKit.DOMHTMLCollection get_cells ();
+		[CCode (cname = "webkit_dom_html_table_row_element_get_ch")]
+		public unowned string get_ch ();
+		[CCode (cname = "webkit_dom_html_table_row_element_get_ch_off")]
+		public unowned string get_ch_off ();
+		[CCode (cname = "webkit_dom_html_table_row_element_get_row_index")]
+		public long get_row_index ();
+		[CCode (cname = "webkit_dom_html_table_row_element_get_section_row_index")]
+		public long get_section_row_index ();
+		[CCode (cname = "webkit_dom_html_table_row_element_get_v_align")]
+		public unowned string get_v_align ();
+		[CCode (cname = "webkit_dom_html_table_row_element_insert_cell")]
+		public unowned WebKit.DOMHTMLElement insert_cell (long index) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_table_row_element_set_align")]
+		public void set_align (string value);
+		[CCode (cname = "webkit_dom_html_table_row_element_set_bg_color")]
+		public void set_bg_color (string value);
+		[CCode (cname = "webkit_dom_html_table_row_element_set_ch")]
+		public void set_ch (string value);
+		[CCode (cname = "webkit_dom_html_table_row_element_set_ch_off")]
+		public void set_ch_off (string value);
+		[CCode (cname = "webkit_dom_html_table_row_element_set_v_align")]
+		public void set_v_align (string value);
+		public string align { get; set; }
+		public string bg_color { get; set; }
+		public WebKit.DOMHTMLCollection cells { get; }
+		public string ch { get; set; }
+		public string ch_off { get; set; }
+		public long row_index { get; }
+		public long section_row_index { get; }
+		public string v_align { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLTableSectionElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLTableSectionElement ();
+		[CCode (cname = "webkit_dom_html_table_section_element_delete_row")]
+		public void delete_row (long index) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_table_section_element_get_align")]
+		public unowned string get_align ();
+		[CCode (cname = "webkit_dom_html_table_section_element_get_ch")]
+		public unowned string get_ch ();
+		[CCode (cname = "webkit_dom_html_table_section_element_get_ch_off")]
+		public unowned string get_ch_off ();
+		[CCode (cname = "webkit_dom_html_table_section_element_get_rows")]
+		public unowned WebKit.DOMHTMLCollection get_rows ();
+		[CCode (cname = "webkit_dom_html_table_section_element_get_v_align")]
+		public unowned string get_v_align ();
+		[CCode (cname = "webkit_dom_html_table_section_element_insert_row")]
+		public unowned WebKit.DOMHTMLElement insert_row (long index) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_table_section_element_set_align")]
+		public void set_align (string value);
+		[CCode (cname = "webkit_dom_html_table_section_element_set_ch")]
+		public void set_ch (string value);
+		[CCode (cname = "webkit_dom_html_table_section_element_set_ch_off")]
+		public void set_ch_off (string value);
+		[CCode (cname = "webkit_dom_html_table_section_element_set_v_align")]
+		public void set_v_align (string value);
+		public string align { get; set; }
+		public string ch { get; set; }
+		public string ch_off { get; set; }
+		public WebKit.DOMHTMLCollection rows { get; }
+		public string v_align { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLTextAreaElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLTextAreaElement ();
+		[CCode (cname = "webkit_dom_html_text_area_element_check_validity")]
+		public bool check_validity ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_access_key")]
+		public unowned string get_access_key ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_autofocus")]
+		public bool get_autofocus ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_cols")]
+		public long get_cols ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_default_value")]
+		public unowned string get_default_value ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_disabled")]
+		public bool get_disabled ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_form")]
+		public unowned WebKit.DOMHTMLFormElement get_form ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_labels")]
+		public unowned WebKit.DOMNodeList get_labels ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_max_length")]
+		public long get_max_length ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_placeholder")]
+		public unowned string get_placeholder ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_read_only")]
+		public bool get_read_only ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_required")]
+		public bool get_required ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_rows")]
+		public long get_rows ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_selection_direction")]
+		public unowned string get_selection_direction ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_selection_end")]
+		public long get_selection_end ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_selection_start")]
+		public long get_selection_start ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_text_length")]
+		public ulong get_text_length ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_validation_message")]
+		public unowned string get_validation_message ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_validity")]
+		public unowned WebKit.DOMValidityState get_validity ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_value")]
+		public unowned string get_value ();
+		[CCode (cname = "webkit_dom_html_text_area_element_get_will_validate")]
+		public bool get_will_validate ();
+		[CCode (cname = "webkit_dom_html_text_area_element_is_edited")]
+		public bool is_edited ();
+		[CCode (cname = "webkit_dom_html_text_area_element_select")]
+		public void select ();
+		[CCode (cname = "webkit_dom_html_text_area_element_set_access_key")]
+		public void set_access_key (string value);
+		[CCode (cname = "webkit_dom_html_text_area_element_set_autofocus")]
+		public void set_autofocus (bool value);
+		[CCode (cname = "webkit_dom_html_text_area_element_set_cols")]
+		public void set_cols (long value);
+		[CCode (cname = "webkit_dom_html_text_area_element_set_custom_validity")]
+		public void set_custom_validity (string error);
+		[CCode (cname = "webkit_dom_html_text_area_element_set_default_value")]
+		public void set_default_value (string value);
+		[CCode (cname = "webkit_dom_html_text_area_element_set_disabled")]
+		public void set_disabled (bool value);
+		[CCode (cname = "webkit_dom_html_text_area_element_set_max_length")]
+		public void set_max_length (long value) throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_text_area_element_set_name")]
+		public void set_name (string value);
+		[CCode (cname = "webkit_dom_html_text_area_element_set_placeholder")]
+		public void set_placeholder (string value);
+		[CCode (cname = "webkit_dom_html_text_area_element_set_read_only")]
+		public void set_read_only (bool value);
+		[CCode (cname = "webkit_dom_html_text_area_element_set_required")]
+		public void set_required (bool value);
+		[CCode (cname = "webkit_dom_html_text_area_element_set_rows")]
+		public void set_rows (long value);
+		[CCode (cname = "webkit_dom_html_text_area_element_set_selection_direction")]
+		public void set_selection_direction (string value);
+		[CCode (cname = "webkit_dom_html_text_area_element_set_selection_end")]
+		public void set_selection_end (long value);
+		[CCode (cname = "webkit_dom_html_text_area_element_set_selection_range")]
+		public void set_selection_range (long start, long end, string direction);
+		[CCode (cname = "webkit_dom_html_text_area_element_set_selection_start")]
+		public void set_selection_start (long value);
+		[CCode (cname = "webkit_dom_html_text_area_element_set_value")]
+		public void set_value (string value);
+		public string access_key { get; set; }
+		public bool autofocus { get; set; }
+		public long cols { get; set; }
+		public string default_value { get; set; }
+		public bool disabled { get; set; }
+		public WebKit.DOMHTMLFormElement form { get; }
+		public WebKit.DOMNodeList labels { get; }
+		public long max_length { get; set; }
+		public string name { get; set; }
+		public string placeholder { get; set; }
+		public bool read_only { get; set; }
+		public bool required { get; set; }
+		public long rows { get; set; }
+		public string selection_direction { get; set; }
+		public long selection_end { get; set; }
+		public long selection_start { get; set; }
+		public ulong text_length { get; }
+		[NoAccessorMethod]
+		public string type { owned get; }
+		public string validation_message { get; }
+		public WebKit.DOMValidityState validity { get; }
+		public string value { get; set; }
+		public bool will_validate { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLTitleElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLTitleElement ();
+		[CCode (cname = "webkit_dom_html_title_element_get_text")]
+		public unowned string get_text ();
+		[CCode (cname = "webkit_dom_html_title_element_set_text")]
+		public void set_text (string value);
+		public string text { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLUListElement : WebKit.DOMHTMLElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLUListElement ();
+		[CCode (cname = "webkit_dom_htmlu_list_element_get_compact")]
+		public bool get_compact ();
+		[CCode (cname = "webkit_dom_htmlu_list_element_set_compact")]
+		public void set_compact (bool value);
+		public bool compact { get; set; }
+		[NoAccessorMethod]
+		public string type { owned get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHTMLVideoElement : WebKit.DOMHTMLMediaElement, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMHTMLVideoElement ();
+		[CCode (cname = "webkit_dom_html_video_element_get_height")]
+		public ulong get_height ();
+		[CCode (cname = "webkit_dom_html_video_element_get_poster")]
+		public unowned string get_poster ();
+		[CCode (cname = "webkit_dom_html_video_element_get_video_height")]
+		public ulong get_video_height ();
+		[CCode (cname = "webkit_dom_html_video_element_get_video_width")]
+		public ulong get_video_width ();
+		[CCode (cname = "webkit_dom_html_video_element_get_webkit_decoded_frame_count")]
+		public ulong get_webkit_decoded_frame_count ();
+		[CCode (cname = "webkit_dom_html_video_element_get_webkit_displaying_fullscreen")]
+		public bool get_webkit_displaying_fullscreen ();
+		[CCode (cname = "webkit_dom_html_video_element_get_webkit_dropped_frame_count")]
+		public ulong get_webkit_dropped_frame_count ();
+		[CCode (cname = "webkit_dom_html_video_element_get_webkit_supports_fullscreen")]
+		public bool get_webkit_supports_fullscreen ();
+		[CCode (cname = "webkit_dom_html_video_element_get_width")]
+		public ulong get_width ();
+		[CCode (cname = "webkit_dom_html_video_element_set_height")]
+		public void set_height (ulong value);
+		[CCode (cname = "webkit_dom_html_video_element_set_poster")]
+		public void set_poster (string value);
+		[CCode (cname = "webkit_dom_html_video_element_set_width")]
+		public void set_width (ulong value);
+		[CCode (cname = "webkit_dom_html_video_element_webkit_enter_full_screen")]
+		public void webkit_enter_full_screen () throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_video_element_webkit_enter_fullscreen")]
+		public void webkit_enter_fullscreen () throws GLib.Error;
+		[CCode (cname = "webkit_dom_html_video_element_webkit_exit_full_screen")]
+		public void webkit_exit_full_screen ();
+		[CCode (cname = "webkit_dom_html_video_element_webkit_exit_fullscreen")]
+		public void webkit_exit_fullscreen ();
+		public ulong height { get; set; }
+		public string poster { get; set; }
+		public ulong video_height { get; }
+		public ulong video_width { get; }
+		public bool webkit_displaying_fullscreen { get; }
+		public bool webkit_supports_fullscreen { get; }
+		public ulong width { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMHistory : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMHistory ();
+		public void back ();
+		public void forward ();
+		public ulong get_length ();
+		public void go (long distance);
+		public ulong length { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMLocation : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMLocation ();
+		public unowned string get_origin ();
+		public unowned string get_parameter (string name);
+		public string origin { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMMediaError : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMMediaError ();
+		public ushort get_code ();
+		public uint code { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMMediaList : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMMediaList ();
+		public void append_medium (string new_medium) throws GLib.Error;
+		public void delete_medium (string old_medium) throws GLib.Error;
+		public ulong get_length ();
+		public unowned string get_media_text ();
+		public unowned string item (ulong index);
+		public void set_media_text (string value) throws GLib.Error;
+		public ulong length { get; }
+		public string media_text { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMMediaQueryList : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMMediaQueryList ();
+		public bool get_matches ();
+		public unowned string get_media ();
+		public bool matches { get; }
+		public string media { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMMemoryInfo : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMMemoryInfo ();
+		public ulong get_js_heap_size_limit ();
+		public ulong get_total_js_heap_size ();
+		public ulong get_used_js_heap_size ();
+		public ulong js_heap_size_limit { get; }
+		public ulong total_js_heap_size { get; }
+		public ulong used_js_heap_size { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMMessagePort : WebKit.DOMObject, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMMessagePort ();
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMMouseEvent : WebKit.DOMUIEvent {
+		[CCode (has_construct_function = false)]
+		protected DOMMouseEvent ();
+		public bool get_alt_key ();
+		public ushort get_button ();
+		public long get_client_x ();
+		public long get_client_y ();
+		public bool get_ctrl_key ();
+		public unowned WebKit.DOMNode get_from_element ();
+		public bool get_meta_key ();
+		public long get_offset_x ();
+		public long get_offset_y ();
+		public unowned WebKit.DOMEventTarget get_related_target ();
+		public long get_screen_x ();
+		public long get_screen_y ();
+		public bool get_shift_key ();
+		public unowned WebKit.DOMNode get_to_element ();
+		public long get_x ();
+		public long get_y ();
+		public void init_mouse_event (string type, bool can_bubble, bool cancelable, WebKit.DOMDOMWindow view, long detail, long screen_x, long screen_y, long client_x, long client_y, bool ctrl_key, bool alt_key, bool shift_key, bool meta_key, ushort button, WebKit.DOMEventTarget related_target);
+		public bool alt_key { get; }
+		public uint button { get; }
+		public long client_x { get; }
+		public long client_y { get; }
+		public bool ctrl_key { get; }
+		public WebKit.DOMNode from_element { get; }
+		public bool meta_key { get; }
+		public long offset_x { get; }
+		public long offset_y { get; }
+		public WebKit.DOMEventTarget related_target { get; }
+		public long screen_x { get; }
+		public long screen_y { get; }
+		public bool shift_key { get; }
+		public WebKit.DOMNode to_element { get; }
+		public long x { get; }
+		public long y { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMNamedNodeMap : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMNamedNodeMap ();
+		public ulong get_length ();
+		public unowned WebKit.DOMNode get_named_item (string name);
+		public unowned WebKit.DOMNode get_named_item_ns (string namespace_uri, string local_name);
+		public unowned WebKit.DOMNode item (ulong index);
+		public unowned WebKit.DOMNode remove_named_item (string name) throws GLib.Error;
+		public unowned WebKit.DOMNode remove_named_item_ns (string namespace_uri, string local_name) throws GLib.Error;
+		public unowned WebKit.DOMNode set_named_item (WebKit.DOMNode node) throws GLib.Error;
+		public unowned WebKit.DOMNode set_named_item_ns (WebKit.DOMNode node) throws GLib.Error;
+		public ulong length { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMNavigator : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMNavigator ();
+		public unowned string get_app_code_name ();
+		public unowned string get_app_name ();
+		public unowned string get_app_version ();
+		public bool get_cookie_enabled ();
+		public unowned WebKit.DOMGeolocation get_geolocation ();
+		public unowned string get_language ();
+		public unowned WebKit.DOMDOMMimeTypeArray get_mime_types ();
+		public bool get_on_line ();
+		public unowned string get_platform ();
+		public unowned WebKit.DOMDOMPluginArray get_plugins ();
+		public unowned string get_product ();
+		public unowned string get_product_sub ();
+		public void get_storage_updates ();
+		public unowned string get_user_agent ();
+		public unowned string get_vendor ();
+		public unowned string get_vendor_sub ();
+		public bool java_enabled ();
+		public string app_code_name { get; }
+		public string app_name { get; }
+		public string app_version { get; }
+		public bool cookie_enabled { get; }
+		public WebKit.DOMGeolocation geolocation { get; }
+		public string language { get; }
+		public WebKit.DOMDOMMimeTypeArray mime_types { get; }
+		public bool on_line { get; }
+		public string platform { get; }
+		public WebKit.DOMDOMPluginArray plugins { get; }
+		public string product { get; }
+		public string product_sub { get; }
+		public string user_agent { get; }
+		public string vendor { get; }
+		public string vendor_sub { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMNode : WebKit.DOMObject, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMNode ();
+		public unowned WebKit.DOMNode append_child (WebKit.DOMNode new_child) throws GLib.Error;
+		public unowned WebKit.DOMNode clone_node (bool deep);
+		public ushort compare_document_position (WebKit.DOMNode other);
+		public bool contains (WebKit.DOMNode other);
+		public unowned WebKit.DOMNamedNodeMap get_attributes ();
+		public unowned string get_base_uri ();
+		public unowned WebKit.DOMNodeList get_child_nodes ();
+		public unowned WebKit.DOMNode get_first_child ();
+		public unowned WebKit.DOMNode get_last_child ();
+		public unowned string get_local_name ();
+		public unowned string get_namespace_uri ();
+		public unowned WebKit.DOMNode get_next_sibling ();
+		public unowned string get_node_name ();
+		public ushort get_node_type ();
+		public unowned string get_node_value ();
+		public unowned WebKit.DOMDocument get_owner_document ();
+		public unowned WebKit.DOMElement get_parent_element ();
+		public unowned WebKit.DOMNode get_parent_node ();
+		public unowned string get_prefix ();
+		public unowned WebKit.DOMNode get_previous_sibling ();
+		public unowned string get_text_content ();
+		public bool has_attributes ();
+		public bool has_child_nodes ();
+		public unowned WebKit.DOMNode insert_before (WebKit.DOMNode new_child, WebKit.DOMNode ref_child) throws GLib.Error;
+		public bool is_default_namespace (string namespace_uri);
+		public bool is_equal_node (WebKit.DOMNode other);
+		public bool is_same_node (WebKit.DOMNode other);
+		public bool is_supported (string feature, string version);
+		public unowned string lookup_namespace_uri (string prefix);
+		public unowned string lookup_prefix (string namespace_uri);
+		public void normalize ();
+		public unowned WebKit.DOMNode remove_child (WebKit.DOMNode old_child) throws GLib.Error;
+		public unowned WebKit.DOMNode replace_child (WebKit.DOMNode new_child, WebKit.DOMNode old_child) throws GLib.Error;
+		public void set_node_value (string value) throws GLib.Error;
+		public void set_prefix (string value) throws GLib.Error;
+		public void set_text_content (string value) throws GLib.Error;
+		public WebKit.DOMNamedNodeMap attributes { get; }
+		public string base_uri { get; }
+		public WebKit.DOMNodeList child_nodes { get; }
+		public WebKit.DOMNode first_child { get; }
+		public WebKit.DOMNode last_child { get; }
+		public string local_name { get; }
+		public string namespace_uri { get; }
+		public WebKit.DOMNode next_sibling { get; }
+		public string node_name { get; }
+		public uint node_type { get; }
+		public string node_value { get; set; }
+		public WebKit.DOMDocument owner_document { get; }
+		public WebKit.DOMElement parent_element { get; }
+		public WebKit.DOMNode parent_node { get; }
+		public string prefix { get; set; }
+		public WebKit.DOMNode previous_sibling { get; }
+		public string text_content { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMNodeFilter : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMNodeFilter ();
+		public short accept_node (WebKit.DOMNode n);
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMNodeIterator : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMNodeIterator ();
+		public void detach ();
+		public bool get_expand_entity_references ();
+		public unowned WebKit.DOMNodeFilter get_filter ();
+		public bool get_pointer_before_reference_node ();
+		public unowned WebKit.DOMNode get_reference_node ();
+		public unowned WebKit.DOMNode get_root ();
+		public ulong get_what_to_show ();
+		public unowned WebKit.DOMNode next_node () throws GLib.Error;
+		public unowned WebKit.DOMNode previous_node () throws GLib.Error;
+		public bool expand_entity_references { get; }
+		public WebKit.DOMNodeFilter filter { get; }
+		public bool pointer_before_reference_node { get; }
+		public WebKit.DOMNode reference_node { get; }
+		public WebKit.DOMNode root { get; }
+		public ulong what_to_show { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMNodeList : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMNodeList ();
+		public ulong get_length ();
+		public unowned WebKit.DOMNode item (ulong index);
+		public ulong length { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMObject : GLib.Object {
+		public void* coreObject;
+		[CCode (has_construct_function = false)]
+		protected DOMObject ();
+		public void* core_object { construct; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMProcessingInstruction : WebKit.DOMNode, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMProcessingInstruction ();
+		public unowned string get_data ();
+		public unowned WebKit.DOMStyleSheet get_sheet ();
+		public unowned string get_target ();
+		public void set_data (string value) throws GLib.Error;
+		public string data { get; set; }
+		public WebKit.DOMStyleSheet sheet { get; }
+		public string target { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMRange : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMRange ();
+		public unowned WebKit.DOMDocumentFragment clone_contents () throws GLib.Error;
+		public unowned WebKit.DOMRange clone_range () throws GLib.Error;
+		public void collapse (bool to_start) throws GLib.Error;
+		public short compare_boundary_points (ushort how, WebKit.DOMRange source_range) throws GLib.Error;
+		public short compare_node (WebKit.DOMNode ref_node) throws GLib.Error;
+		public short compare_point (WebKit.DOMNode ref_node, long offset) throws GLib.Error;
+		public unowned WebKit.DOMDocumentFragment create_contextual_fragment (string html) throws GLib.Error;
+		public void delete_contents () throws GLib.Error;
+		public void detach () throws GLib.Error;
+		public void expand (string unit) throws GLib.Error;
+		public unowned WebKit.DOMDocumentFragment extract_contents () throws GLib.Error;
+		public bool get_collapsed () throws GLib.Error;
+		public unowned WebKit.DOMNode get_common_ancestor_container () throws GLib.Error;
+		public unowned WebKit.DOMNode get_end_container () throws GLib.Error;
+		public long get_end_offset () throws GLib.Error;
+		public unowned WebKit.DOMNode get_start_container () throws GLib.Error;
+		public long get_start_offset () throws GLib.Error;
+		public unowned string get_text ();
+		public void insert_node (WebKit.DOMNode new_node) throws GLib.Error;
+		public bool intersects_node (WebKit.DOMNode ref_node) throws GLib.Error;
+		public bool is_point_in_range (WebKit.DOMNode ref_node, long offset) throws GLib.Error;
+		public void select_node (WebKit.DOMNode ref_node) throws GLib.Error;
+		public void select_node_contents (WebKit.DOMNode ref_node) throws GLib.Error;
+		public void set_end (WebKit.DOMNode ref_node, long offset) throws GLib.Error;
+		public void set_end_after (WebKit.DOMNode ref_node) throws GLib.Error;
+		public void set_end_before (WebKit.DOMNode ref_node) throws GLib.Error;
+		public void set_start (WebKit.DOMNode ref_node, long offset) throws GLib.Error;
+		public void set_start_after (WebKit.DOMNode ref_node) throws GLib.Error;
+		public void set_start_before (WebKit.DOMNode ref_node) throws GLib.Error;
+		public void surround_contents (WebKit.DOMNode new_parent) throws GLib.Error;
+		public unowned string to_string () throws GLib.Error;
+		public bool collapsed { get; }
+		public WebKit.DOMNode common_ancestor_container { get; }
+		public WebKit.DOMNode end_container { get; }
+		public long end_offset { get; }
+		public WebKit.DOMNode start_container { get; }
+		public long start_offset { get; }
+		public string text { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMScreen : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMScreen ();
+		public ulong get_avail_height ();
+		public long get_avail_left ();
+		public long get_avail_top ();
+		public ulong get_avail_width ();
+		public ulong get_color_depth ();
+		public ulong get_height ();
+		public ulong get_pixel_depth ();
+		public ulong get_width ();
+		public ulong avail_height { get; }
+		public long avail_left { get; }
+		public long avail_top { get; }
+		public ulong avail_width { get; }
+		public ulong color_depth { get; }
+		public ulong height { get; }
+		public ulong pixel_depth { get; }
+		public ulong width { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMStorage : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMStorage ();
+		public void clear ();
+		public unowned string get_item (string key);
+		public ulong get_length ();
+		public unowned string key (ulong index);
+		public void remove_item (string key);
+		public void set_item (string key, string data) throws GLib.Error;
+		public ulong length { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMStyleMedia : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMStyleMedia ();
+		public bool match_medium (string mediaquery);
+		[NoAccessorMethod]
+		public string type { owned get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMStyleSheet : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMStyleSheet ();
+		public bool get_disabled ();
+		public unowned string get_href ();
+		public unowned WebKit.DOMMediaList get_media ();
+		public unowned WebKit.DOMNode get_owner_node ();
+		public unowned WebKit.DOMStyleSheet get_parent_style_sheet ();
+		public unowned string get_title ();
+		public void set_disabled (bool value);
+		public bool disabled { get; set; }
+		public string href { get; }
+		public WebKit.DOMMediaList media { get; }
+		public WebKit.DOMNode owner_node { get; }
+		public WebKit.DOMStyleSheet parent_style_sheet { get; }
+		public string title { get; }
+		[NoAccessorMethod]
+		public string type { owned get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMStyleSheetList : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMStyleSheetList ();
+		public ulong get_length ();
+		public unowned WebKit.DOMStyleSheet item (ulong index);
+		public ulong length { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMText : WebKit.DOMCharacterData, WebKit.DOMEventTarget {
+		[CCode (has_construct_function = false)]
+		protected DOMText ();
+		public unowned string get_whole_text ();
+		public unowned WebKit.DOMText replace_whole_text (string content) throws GLib.Error;
+		public unowned WebKit.DOMText split_text (ulong offset) throws GLib.Error;
+		public string whole_text { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMTimeRanges : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMTimeRanges ();
+		public float end (ulong index) throws GLib.Error;
+		public ulong get_length ();
+		public float start (ulong index) throws GLib.Error;
+		public ulong length { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMTreeWalker : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMTreeWalker ();
+		public unowned WebKit.DOMNode first_child ();
+		public unowned WebKit.DOMNode get_current_node ();
+		public bool get_expand_entity_references ();
+		public unowned WebKit.DOMNodeFilter get_filter ();
+		public unowned WebKit.DOMNode get_root ();
+		public ulong get_what_to_show ();
+		public unowned WebKit.DOMNode last_child ();
+		public unowned WebKit.DOMNode next_node ();
+		public unowned WebKit.DOMNode next_sibling ();
+		public unowned WebKit.DOMNode parent_node ();
+		public unowned WebKit.DOMNode previous_node ();
+		public unowned WebKit.DOMNode previous_sibling ();
+		public void set_current_node (WebKit.DOMNode value) throws GLib.Error;
+		public WebKit.DOMNode current_node { get; set; }
+		public bool expand_entity_references { get; }
+		public WebKit.DOMNodeFilter filter { get; }
+		public WebKit.DOMNode root { get; }
+		public ulong what_to_show { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMUIEvent : WebKit.DOMEvent {
+		[CCode (has_construct_function = false)]
+		protected DOMUIEvent ();
+		[CCode (cname = "webkit_dom_ui_event_get_char_code")]
+		public long get_char_code ();
+		[CCode (cname = "webkit_dom_ui_event_get_detail")]
+		public long get_detail ();
+		[CCode (cname = "webkit_dom_ui_event_get_key_code")]
+		public long get_key_code ();
+		[CCode (cname = "webkit_dom_ui_event_get_layer_x")]
+		public long get_layer_x ();
+		[CCode (cname = "webkit_dom_ui_event_get_layer_y")]
+		public long get_layer_y ();
+		[CCode (cname = "webkit_dom_ui_event_get_page_x")]
+		public long get_page_x ();
+		[CCode (cname = "webkit_dom_ui_event_get_page_y")]
+		public long get_page_y ();
+		[CCode (cname = "webkit_dom_ui_event_get_view")]
+		public unowned WebKit.DOMDOMWindow get_view ();
+		[CCode (cname = "webkit_dom_ui_event_get_which")]
+		public long get_which ();
+		[CCode (cname = "webkit_dom_ui_event_init_ui_event")]
+		public void init_ui_event (string type, bool can_bubble, bool cancelable, WebKit.DOMDOMWindow view, long detail);
+		public long char_code { get; }
+		public long detail { get; }
+		public long key_code { get; }
+		public long layer_x { get; }
+		public long layer_y { get; }
+		public long page_x { get; }
+		public long page_y { get; }
+		public WebKit.DOMDOMWindow view { get; }
+		public long which { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMValidityState : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMValidityState ();
+		public bool get_custom_error ();
+		public bool get_pattern_mismatch ();
+		public bool get_range_overflow ();
+		public bool get_range_underflow ();
+		public bool get_step_mismatch ();
+		public bool get_too_long ();
+		public bool get_type_mismatch ();
+		public bool get_valid ();
+		public bool get_value_missing ();
+		public bool custom_error { get; }
+		public bool pattern_mismatch { get; }
+		public bool range_overflow { get; }
+		public bool range_underflow { get; }
+		public bool step_mismatch { get; }
+		public bool too_long { get; }
+		public bool type_mismatch { get; }
+		public bool valid { get; }
+		public bool value_missing { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMWebKitAnimation : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMWebKitAnimation ();
+		[CCode (cname = "webkit_dom_webkit_animation_get_delay")]
+		public double get_delay ();
+		[CCode (cname = "webkit_dom_webkit_animation_get_direction")]
+		public ushort get_direction ();
+		[CCode (cname = "webkit_dom_webkit_animation_get_duration")]
+		public double get_duration ();
+		[CCode (cname = "webkit_dom_webkit_animation_get_elapsed_time")]
+		public double get_elapsed_time ();
+		[CCode (cname = "webkit_dom_webkit_animation_get_ended")]
+		public bool get_ended ();
+		[CCode (cname = "webkit_dom_webkit_animation_get_fill_mode")]
+		public ushort get_fill_mode ();
+		[CCode (cname = "webkit_dom_webkit_animation_get_name")]
+		public unowned string get_name ();
+		[CCode (cname = "webkit_dom_webkit_animation_get_paused")]
+		public bool get_paused ();
+		[CCode (cname = "webkit_dom_webkit_animation_pause")]
+		public void pause ();
+		[CCode (cname = "webkit_dom_webkit_animation_play")]
+		public void play ();
+		[CCode (cname = "webkit_dom_webkit_animation_set_elapsed_time")]
+		public void set_elapsed_time (double value);
+		public double delay { get; }
+		public uint direction { get; }
+		public double duration { get; }
+		public double elapsed_time { get; set; }
+		public bool ended { get; }
+		public uint fill_mode { get; }
+		[NoAccessorMethod]
+		public int iteration_count { get; }
+		public string name { get; }
+		public bool paused { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMWebKitAnimationList : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMWebKitAnimationList ();
+		[CCode (cname = "webkit_dom_webkit_animation_list_get_length")]
+		public ulong get_length ();
+		[CCode (cname = "webkit_dom_webkit_animation_list_item")]
+		public unowned WebKit.DOMWebKitAnimation item (ulong index);
+		public ulong length { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMWebKitPoint : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMWebKitPoint ();
+		[CCode (cname = "webkit_dom_webkit_point_get_x")]
+		public float get_x ();
+		[CCode (cname = "webkit_dom_webkit_point_get_y")]
+		public float get_y ();
+		[CCode (cname = "webkit_dom_webkit_point_set_x")]
+		public void set_x (float value);
+		[CCode (cname = "webkit_dom_webkit_point_set_y")]
+		public void set_y (float value);
+		public float x { get; set; }
+		public float y { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMXPathExpression : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMXPathExpression ();
+		[CCode (cname = "webkit_dom_xpath_expression_evaluate")]
+		public unowned WebKit.DOMXPathResult evaluate (WebKit.DOMNode context_node, ushort type, WebKit.DOMXPathResult in_result) throws GLib.Error;
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMXPathNSResolver : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMXPathNSResolver ();
+		[CCode (cname = "webkit_dom_xpath_ns_resolver_lookup_namespace_uri")]
+		public unowned string lookup_namespace_uri (string prefix);
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class DOMXPathResult : WebKit.DOMObject {
+		[CCode (has_construct_function = false)]
+		protected DOMXPathResult ();
+		[CCode (cname = "webkit_dom_xpath_result_get_boolean_value")]
+		public bool get_boolean_value () throws GLib.Error;
+		[CCode (cname = "webkit_dom_xpath_result_get_invalid_iterator_state")]
+		public bool get_invalid_iterator_state ();
+		[CCode (cname = "webkit_dom_xpath_result_get_number_value")]
+		public double get_number_value () throws GLib.Error;
+		[CCode (cname = "webkit_dom_xpath_result_get_result_type")]
+		public ushort get_result_type ();
+		[CCode (cname = "webkit_dom_xpath_result_get_single_node_value")]
+		public unowned WebKit.DOMNode get_single_node_value () throws GLib.Error;
+		[CCode (cname = "webkit_dom_xpath_result_get_snapshot_length")]
+		public ulong get_snapshot_length () throws GLib.Error;
+		[CCode (cname = "webkit_dom_xpath_result_get_string_value")]
+		public unowned string get_string_value () throws GLib.Error;
+		[CCode (cname = "webkit_dom_xpath_result_iterate_next")]
+		public unowned WebKit.DOMNode iterate_next () throws GLib.Error;
+		[CCode (cname = "webkit_dom_xpath_result_snapshot_item")]
+		public unowned WebKit.DOMNode snapshot_item (ulong index) throws GLib.Error;
+		public bool boolean_value { get; }
+		public bool invalid_iterator_state { get; }
+		public double number_value { get; }
+		public uint result_type { get; }
+		public WebKit.DOMNode single_node_value { get; }
+		public ulong snapshot_length { get; }
+		public string string_value { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
 	public class Download : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public Download (WebKit.NetworkRequest request);
@@ -43,11 +4039,25 @@ namespace WebKit {
 		[NoAccessorMethod]
 		public string image_uri { owned get; construct; }
 		[NoAccessorMethod]
+		public WebKit.DOMNode inner_node { owned get; construct; }
+		[NoAccessorMethod]
 		public string link_uri { owned get; construct; }
 		[NoAccessorMethod]
 		public string media_uri { owned get; construct; }
 	}
 	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class IconDatabase : GLib.Object {
+		[CCode (has_construct_function = false)]
+		protected IconDatabase ();
+		public void clear ();
+		public unowned Gdk.Pixbuf get_icon_pixbuf (string page_uri);
+		public unowned string get_icon_uri (string page_uri);
+		public unowned string get_path ();
+		public void set_path (string path);
+		public string path { get; set; }
+		public virtual signal void icon_loaded (WebKit.WebFrame p0, string p1);
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
 	public class NetworkRequest : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public NetworkRequest (string uri);
@@ -91,6 +4101,40 @@ namespace WebKit {
 		public virtual signal unowned Gtk.Widget current_toplevel (Soup.Message message);
 	}
 	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class ViewportAttributes : GLib.Object {
+		[CCode (has_construct_function = false)]
+		protected ViewportAttributes ();
+		public void recompute ();
+		[NoAccessorMethod]
+		public int available_height { get; set; }
+		[NoAccessorMethod]
+		public int available_width { get; set; }
+		[NoAccessorMethod]
+		public int desktop_width { get; set; }
+		[NoAccessorMethod]
+		public int device_dpi { get; set; }
+		[NoAccessorMethod]
+		public int device_height { get; set; }
+		[NoAccessorMethod]
+		public float device_pixel_ratio { get; }
+		[NoAccessorMethod]
+		public int device_width { get; set; }
+		[NoAccessorMethod]
+		public int height { get; }
+		[NoAccessorMethod]
+		public float initial_scale_factor { get; }
+		[NoAccessorMethod]
+		public float maximum_scale_factor { get; }
+		[NoAccessorMethod]
+		public float minimum_scale_factor { get; }
+		[NoAccessorMethod]
+		public bool user_scalable { get; }
+		[NoAccessorMethod]
+		public bool valid { get; }
+		[NoAccessorMethod]
+		public int width { get; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
 	public class WebBackForwardList : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected WebBackForwardList ();
@@ -159,6 +4203,7 @@ namespace WebKit {
 		public unowned WebKit.NetworkResponse get_network_response ();
 		public unowned WebKit.WebFrame get_parent ();
 		public unowned WebKit.WebDataSource get_provisional_data_source ();
+		public unowned WebKit.DOMRange get_range_for_word_around_caret ();
 		public unowned WebKit.SecurityOrigin get_security_origin ();
 		public unowned string get_title ();
 		public unowned string get_uri ();
@@ -171,6 +4216,7 @@ namespace WebKit {
 		public void print ();
 		public Gtk.PrintOperationResult print_full (Gtk.PrintOperation operation, Gtk.PrintOperationAction action) throws GLib.Error;
 		public void reload ();
+		public void replace_selection (string text);
 		public void stop_loading ();
 		public Gtk.PolicyType horizontal_scrollbar_policy { get; }
 		public WebKit.LoadStatus load_status { get; }
@@ -212,6 +4258,7 @@ namespace WebKit {
 		public unowned string get_inspected_uri ();
 		public unowned WebKit.WebView get_web_view ();
 		public void inspect_coordinates (double x, double y);
+		public void inspect_node (WebKit.DOMNode node);
 		public void show ();
 		public string inspected_uri { get; }
 		[NoAccessorMethod]
@@ -244,6 +4291,34 @@ namespace WebKit {
 		public string target_frame { get; construct; }
 	}
 	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class WebPlugin : GLib.Object {
+		[CCode (has_construct_function = false)]
+		protected WebPlugin ();
+		public unowned string get_description ();
+		public bool get_enabled ();
+		public unowned GLib.SList get_mimetypes ();
+		public unowned string get_name ();
+		public unowned string get_path ();
+		public void set_enabled (bool p2);
+		public bool enabled { get; set; }
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public class WebPluginDatabase : GLib.Object {
+		[CCode (has_construct_function = false)]
+		protected WebPluginDatabase ();
+		public unowned WebKit.WebPlugin get_plugin_for_mimetype (string p2);
+		public unowned GLib.SList get_plugins ();
+		public static void plugins_list_free (GLib.SList p1);
+		public void refresh ();
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	[Compact]
+	public class WebPluginMIMEType {
+		public weak string description;
+		public weak string extensions;
+		public weak string name;
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
 	public class WebPolicyDecision : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected WebPolicyDecision ();
@@ -296,14 +4371,22 @@ namespace WebKit {
 		[NoAccessorMethod]
 		public bool enable_developer_extras { get; set construct; }
 		[NoAccessorMethod]
+		public bool enable_dns_prefetching { get; set construct; }
+		[NoAccessorMethod]
 		public bool enable_dom_paste { get; set construct; }
 		[NoAccessorMethod]
 		public bool enable_file_access_from_file_uris { get; set construct; }
 		[NoAccessorMethod]
+		public bool enable_frame_flattening { get; set construct; }
+		[NoAccessorMethod]
+		public bool enable_fullscreen { get; set construct; }
+		[NoAccessorMethod]
 		public bool enable_html5_database { get; set construct; }
 		[NoAccessorMethod]
 		public bool enable_html5_local_storage { get; set construct; }
 		[NoAccessorMethod]
+		public bool enable_hyperlink_auditing { get; set construct; }
+		[NoAccessorMethod]
 		public bool enable_java_applet { get; set construct; }
 		[NoAccessorMethod]
 		public bool enable_offline_web_application_cache { get; set construct; }
@@ -324,12 +4407,16 @@ namespace WebKit {
 		[NoAccessorMethod]
 		public bool enable_universal_access_from_file_uris { get; set construct; }
 		[NoAccessorMethod]
+		public bool enable_webgl { get; set construct; }
+		[NoAccessorMethod]
 		public bool enable_xss_auditor { get; set construct; }
 		[NoAccessorMethod]
 		public bool enforce_96_dpi { get; set construct; }
 		[NoAccessorMethod]
 		public string fantasy_font_family { owned get; set construct; }
 		[NoAccessorMethod]
+		public string html5_local_storage_database_path { owned get; set construct; }
+		[NoAccessorMethod]
 		public bool javascript_can_access_clipboard { get; set construct; }
 		[NoAccessorMethod]
 		public bool javascript_can_open_windows_automatically { get; set construct; }
@@ -378,11 +4465,13 @@ namespace WebKit {
 		public unowned WebKit.WebBackForwardList get_back_forward_list ();
 		public unowned Gtk.TargetList get_copy_target_list ();
 		public unowned string get_custom_encoding ();
+		public unowned WebKit.DOMDocument get_dom_document ();
 		public bool get_editable ();
 		public unowned string get_encoding ();
 		public unowned WebKit.WebFrame get_focused_frame ();
 		public bool get_full_content_zoom ();
 		public unowned WebKit.HitTestResult get_hit_test_result (Gdk.EventButton event);
+		public unowned Gdk.Pixbuf get_icon_pixbuf ();
 		public unowned string get_icon_uri ();
 		public unowned WebKit.WebInspector get_inspector ();
 		public WebKit.LoadStatus get_load_status ();
@@ -393,7 +4482,9 @@ namespace WebKit {
 		public unowned string get_title ();
 		public bool get_transparent ();
 		public unowned string get_uri ();
+		public WebKit.WebViewViewMode get_view_mode ();
 		public bool get_view_source_mode ();
+		public unowned WebKit.ViewportAttributes get_viewport_attributes ();
 		public unowned WebKit.WebWindowFeatures get_window_features ();
 		public float get_zoom_level ();
 		public void go_back ();
@@ -417,8 +4508,11 @@ namespace WebKit {
 		public void set_maintains_back_forward_list (bool flag);
 		public void set_settings (WebKit.WebSettings settings);
 		public void set_transparent (bool flag);
+		public void set_view_mode (WebKit.WebViewViewMode mode);
 		public void set_view_source_mode (bool view_source_mode);
 		public void set_zoom_level (float zoom_level);
+		[NoWrapper]
+		public virtual bool should_allow_editing_action ();
 		public void stop_loading ();
 		public void unmark_text_matches ();
 		public void zoom_in ();
@@ -434,10 +4528,14 @@ namespace WebKit {
 		public WebKit.LoadStatus load_status { get; }
 		public Gtk.TargetList paste_target_list { get; }
 		public double progress { get; }
+		[NoAccessorMethod]
+		public bool self_scrolling { get; construct; }
 		public WebKit.WebSettings settings { get; set; }
 		public string title { get; }
 		public bool transparent { get; set; }
 		public string uri { get; }
+		public WebKit.WebViewViewMode view_mode { get; set; }
+		public WebKit.ViewportAttributes viewport_attributes { get; }
 		[NoAccessorMethod]
 		public WebKit.WebInspector web_inspector { owned get; }
 		[NoAccessorMethod]
@@ -454,6 +4552,9 @@ namespace WebKit {
 		public virtual signal void database_quota_exceeded (GLib.Object p0, GLib.Object p1);
 		public virtual signal void document_load_finished (WebKit.WebFrame p0);
 		public virtual signal bool download_requested (GLib.Object p0);
+		public virtual signal void editing_began ();
+		public virtual signal void editing_ended ();
+		public virtual signal void frame_created (WebKit.WebFrame p0);
 		public virtual signal void geolocation_policy_decision_cancelled (WebKit.WebFrame p0);
 		public virtual signal bool geolocation_policy_decision_requested (WebKit.WebFrame p0, WebKit.GeolocationPolicyDecision p1);
 		public virtual signal void hovering_over_link (string? p0, string? p1);
@@ -469,6 +4570,7 @@ namespace WebKit {
 		public virtual signal bool navigation_policy_decision_requested (WebKit.WebFrame p0, WebKit.NetworkRequest p1, WebKit.WebNavigationAction p2, WebKit.WebPolicyDecision p3);
 		public virtual signal WebKit.NavigationResponse navigation_requested (WebKit.WebFrame frame, WebKit.NetworkRequest request);
 		public virtual signal bool new_window_policy_decision_requested (WebKit.WebFrame p0, WebKit.NetworkRequest p1, WebKit.WebNavigationAction p2, WebKit.WebPolicyDecision p3);
+		public virtual signal void onload_event (WebKit.WebFrame p0);
 		[HasEmitter]
 		public virtual signal void paste_clipboard ();
 		public virtual signal void populate_popup (Gtk.Menu p0);
@@ -483,10 +4585,21 @@ namespace WebKit {
 		public virtual signal void select_all ();
 		public virtual signal void selection_changed ();
 		public virtual signal void set_scroll_adjustments (Gtk.Adjustment hadjustment, Gtk.Adjustment vadjustment);
+		public virtual signal bool should_apply_style (WebKit.DOMCSSStyleDeclaration p0, WebKit.DOMRange p1);
+		public virtual signal bool should_begin_editing (WebKit.DOMRange p0);
+		public virtual signal bool should_change_selected_range (WebKit.DOMRange p0, WebKit.DOMRange p1, WebKit.SelectionAffinity p2, bool p3);
+		public virtual signal bool should_delete_range (WebKit.DOMRange p0);
+		public virtual signal bool should_end_editing (WebKit.DOMRange p0);
+		public virtual signal bool should_insert_node (WebKit.DOMNode p0, WebKit.DOMRange p1, WebKit.InsertAction p2);
+		public virtual signal bool should_insert_text (string p0, WebKit.DOMRange p1, WebKit.InsertAction p2);
+		public virtual signal bool should_show_delete_interface_for_element (WebKit.DOMHTMLElement p0);
 		public virtual signal void status_bar_text_changed (string p0);
 		public virtual signal void title_changed (WebKit.WebFrame p0, string p1);
 		[HasEmitter]
 		public virtual signal void undo ();
+		public virtual signal void user_changed_contents ();
+		public virtual signal void viewport_attributes_changed (WebKit.ViewportAttributes p0);
+		public virtual signal void viewport_attributes_recompute_requested (WebKit.ViewportAttributes p0);
 		public virtual signal bool web_view_ready ();
 		public virtual signal void window_object_cleared (WebKit.WebFrame frame, void* context, void* window_object);
 	}
@@ -516,10 +4629,27 @@ namespace WebKit {
 		[NoAccessorMethod]
 		public int y { get; set construct; }
 	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public interface DOMEventTarget : GLib.Object {
+		public abstract bool add_event_listener (string eventName, GLib.Callback handler, bool bubble, void* userData);
+		public abstract void dispatch_event (WebKit.DOMEvent event) throws GLib.Error;
+		public abstract bool remove_event_listener (string eventName, GLib.Callback handler, bool bubble);
+	}
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public interface SpellChecker : GLib.Object {
+		public abstract void check_spelling_of_string (string str, int misspelling_location, int misspelling_length);
+		public abstract unowned string get_autocorrect_suggestions_for_misspelled_word (string word);
+		public abstract unowned string get_guesses_for_word (string word, string context);
+		public abstract void ignore_word (string word);
+		public abstract void learn_word (string word);
+		public abstract void update_spell_checking_languages (string languages);
+	}
 	[CCode (cheader_filename = "webkit/webkit.h", cprefix = "WEBKIT_CACHE_MODEL_")]
 	public enum CacheModel {
+		DEFAULT,
 		DOCUMENT_VIEWER,
-		WEB_BROWSER
+		WEB_BROWSER,
+		DOCUMENT_BROWSER
 	}
 	[CCode (cheader_filename = "webkit/webkit.h", cprefix = "WEBKIT_DOWNLOAD_ERROR_")]
 	public enum DownloadError {
@@ -538,7 +4668,8 @@ namespace WebKit {
 	[CCode (cheader_filename = "webkit/webkit.h", cprefix = "WEBKIT_EDITING_BEHAVIOR_")]
 	public enum EditingBehavior {
 		MAC,
-		WINDOWS
+		WINDOWS,
+		UNIX
 	}
 	[CCode (cheader_filename = "webkit/webkit.h", cprefix = "WEBKIT_HIT_TEST_RESULT_CONTEXT_")]
 	[Flags]
@@ -550,6 +4681,12 @@ namespace WebKit {
 		SELECTION,
 		EDITABLE
 	}
+	[CCode (cheader_filename = "webkit/webkit.h", cprefix = "WEBKIT_INSERT_ACTION_")]
+	public enum InsertAction {
+		TYPED,
+		PASTED,
+		DROPPED
+	}
 	[CCode (cheader_filename = "webkit/webkit.h", cprefix = "WEBKIT_LOAD_")]
 	public enum LoadStatus {
 		PROVISIONAL,
@@ -589,6 +4726,11 @@ namespace WebKit {
 		FRAME_LOAD_INTERRUPTED_BY_POLICY_CHANGE,
 		CANNOT_USE_RESTRICTED_PORT
 	}
+	[CCode (cheader_filename = "webkit/webkit.h", cprefix = "WEBKIT_SELECTION_AFFINITY_")]
+	public enum SelectionAffinity {
+		UPSTREAM,
+		DOWNSTREAM
+	}
 	[CCode (cheader_filename = "webkit/webkit.h", cprefix = "WEBKIT_WEB_NAVIGATION_REASON_")]
 	public enum WebNavigationReason {
 		LINK_CLICKED,
@@ -606,6 +4748,14 @@ namespace WebKit {
 		URI_LIST,
 		NETSCAPE_URL
 	}
+	[CCode (cheader_filename = "webkit/webkit.h", cprefix = "WEBKIT_WEB_VIEW_VIEW_MODE_")]
+	public enum WebViewViewMode {
+		WINDOWED,
+		FLOATING,
+		FULLSCREEN,
+		MAXIMIZED,
+		MINIMIZED
+	}
 	[CCode (cheader_filename = "webkit/webkit.h")]
 	public const int MAJOR_VERSION;
 	[CCode (cheader_filename = "webkit/webkit.h")]
@@ -617,6 +4767,12 @@ namespace WebKit {
 	[CCode (cheader_filename = "webkit/webkit.h")]
 	public const int USER_AGENT_MINOR_VERSION;
 	[CCode (cheader_filename = "webkit/webkit.h")]
+	public static unowned string application_cache_get_database_directory_path ();
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public static uint application_cache_get_maximum_size ();
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public static void application_cache_set_maximum_size (uint size);
+	[CCode (cheader_filename = "webkit/webkit.h")]
 	public static bool check_version (uint major, uint minor, uint micro);
 	[CCode (cheader_filename = "webkit/webkit.h")]
 	public static void geolocation_policy_allow (WebKit.GeolocationPolicyDecision decision);
@@ -629,8 +4785,14 @@ namespace WebKit {
 	[CCode (cheader_filename = "webkit/webkit.h")]
 	public static uint64 get_default_web_database_quota ();
 	[CCode (cheader_filename = "webkit/webkit.h")]
+	public static unowned WebKit.IconDatabase get_icon_database ();
+	[CCode (cheader_filename = "webkit/webkit.h")]
+	public static unowned GLib.Object get_text_checker ();
+	[CCode (cheader_filename = "webkit/webkit.h")]
 	public static unowned string get_web_database_directory_path ();
 	[CCode (cheader_filename = "webkit/webkit.h")]
+	public static unowned WebKit.WebPluginDatabase get_web_plugin_database ();
+	[CCode (cheader_filename = "webkit/webkit.h")]
 	public static uint major_version ();
 	[CCode (cheader_filename = "webkit/webkit.h")]
 	public static uint micro_version ();
@@ -649,5 +4811,7 @@ namespace WebKit {
 	[CCode (cheader_filename = "webkit/webkit.h")]
 	public static void set_default_web_database_quota (uint64 defaultQuota);
 	[CCode (cheader_filename = "webkit/webkit.h")]
+	public static void set_text_checker (GLib.Object checker);
+	[CCode (cheader_filename = "webkit/webkit.h")]
 	public static void set_web_database_directory_path (string path);
 }
diff --git a/vapi/x11.vapi b/vapi/x11.vapi
index 3656cc2..e056224 100644
--- a/vapi/x11.vapi
+++ b/vapi/x11.vapi
@@ -1,6 +1,7 @@
 /* x11.vapi
  *
  * Copyright (C) 2009  JÃrg Billeter
+ * Copyright (C) 2011  Alexander Kurtz
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -16,8 +17,9 @@
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
  *
- * Author:
+ * Authors:
  * 	JÃrg Billeter <j bitron ch>
+ * 	Alexander Kurtz <kurtz alex googlemail com>
  */
 
 [CCode (gir_namespace = "xlib", gir_version = "2.0", cprefix = "", lower_case_cprefix = "", cheader_filename = "X11/Xlib.h,X11/Xatom.h,X11/Xutil.h,X11/Xregion.h")]
@@ -313,6 +315,7 @@ namespace X {
 		// The server's max # of keys per modifier
 		public int max_keypermod;
 		// An 8 by max_keypermod array of modifiers
+		[CCode (array_length = false)]
 		public uchar[] modifiermap;
 	}
 
@@ -342,6 +345,7 @@ namespace X {
 	public struct Status {
 	}
 
+	[GIR (name = "XID")]
 	[SimpleType]
 	[IntegerType (rank = 9)]
 	[CCode (cname = "XID", type_id = "G_TYPE_INT",
@@ -384,6 +388,48 @@ namespace X {
 	public struct Pixmap : Drawable	{
 	}
 
+	[SimpleType]
+	[IntegerType (rank = 9)]
+	[CCode (cname = "Mask")]
+	public struct Mask {
+	}
+
+	[SimpleType]
+	[IntegerType (rank = 9)]
+	[CCode (cname = "VisualID")]
+	public struct VisualID {
+	}
+
+	[SimpleType]
+	[IntegerType (rank = 9)]
+	[CCode (cname = "Time")]
+	public struct Time {
+	}
+
+	[SimpleType]
+	[IntegerType (rank = 9)]
+	[CCode (cname = "Cursor")]
+	public struct Cursor {
+	}
+
+	[SimpleType]
+	[IntegerType (rank = 9)]
+	[CCode (cname = "GContext")]
+	public struct GContext {
+	}
+
+	[SimpleType]
+	[IntegerType (rank = 9)]
+	[CCode (cname = "KeySym")]
+	public struct KeySym {
+	}
+
+	[SimpleType]
+	[IntegerType (rank = 9)]
+	[CCode (cname = "KeyCode")]
+	public struct KeyCode {
+	}
+
 	[CCode (ref_function = "", unref_function = "")]
 	[Compact]
 	public class Visual {
@@ -411,9 +457,9 @@ namespace X {
 
 	[CCode (cname = "XSetWindowAttributes")]
 	public struct SetWindowAttributes {
-		// public Pixmap background_pixmap;	/* background or None or ParentRelative */
+		public Pixmap background_pixmap;	/* background or None or ParentRelative */
 		public ulong background_pixel;	/* background pixel */
-		// public Pixmap border_pixmap;	/* border of the window */
+		public Pixmap border_pixmap;	/* border of the window */
 		public ulong border_pixel;	/* border pixel value */
 		public int bit_gravity;		/* one of bit gravity values */
 		public int win_gravity;		/* one of the window gravity values */
@@ -424,8 +470,8 @@ namespace X {
 		public long event_mask;		/* set of events that should be saved */
 		public long do_not_propagate_mask;	/* set of events that should not propagate */
 		public bool override_redirect;	/* boolean value for override-redirect */
-		// public Colormap colormap;		/* color map to be associated with window */
-		// public Cursor cursor;		/* cursor to be displayed (or None) */
+		public Colormap colormap;		/* color map to be associated with window */
+		public Cursor cursor;		/* cursor to be displayed (or None) */
 	}
 
 	[CCode(cname = "XWindowAttributes",
@@ -446,14 +492,14 @@ namespace X {
 		public ulong backing_planes;/* planes to be preserved if possible */
 		public ulong backing_pixel;/* value to be used when restoring planes */
 		public bool save_under;		/* boolean, should bits under be saved? */
-		// public Colormap colormap;		/* color map to be associated with window */
+		public Colormap colormap;		/* color map to be associated with window */
 		public bool map_installed;		/* boolean, is color map currently installed*/
 		public int map_state;		/* IsUnmapped, IsUnviewable, IsViewable */
 		public long all_event_masks;	/* set of events all people have interest in*/
 		public long your_event_mask;	/* my event mask */
 		public long do_not_propagate_mask; /* set of events that should not propagate */
 		public bool override_redirect;	/* boolean value for override-redirect */
-		// public Screen screen;		/* back pointer to correct screen */
+		public Screen screen;		/* back pointer to correct screen */
 	}
 
 	[CCode (cname = "CopyFromParent")]
diff --git a/vapi/xtst.deps b/vapi/xtst.deps
new file mode 100644
index 0000000..e181da0
--- /dev/null
+++ b/vapi/xtst.deps
@@ -0,0 +1 @@
+x11
diff --git a/vapi/xtst.vapi b/vapi/xtst.vapi
new file mode 100644
index 0000000..a6c4bd0
--- /dev/null
+++ b/vapi/xtst.vapi
@@ -0,0 +1,56 @@
+/* xtst.vapi
+ *
+ * Copyright (C) 2012  Alexander Kurtz
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ *
+ * Author:
+ * 	Alexander Kurtz <kurtz alex googlemail com>
+ */
+
+namespace XTest {
+	[CCode (cheader_filename = "X11/extensions/XTest.h", cname = "XTestQueryExtension")]
+	public static bool query_extension (X.Display display, out int event_base_return, out int error_base_return, out int major_version_return, out int minor_version_return);
+
+	[CCode (cheader_filename = "X11/extensions/XTest.h", cname = "XTestCompareCursorWithWindow")]
+	public static bool compare_cursor_with_window (X.Display display, X.Window window, X.Cursor cursor);
+
+	[CCode (cheader_filename = "X11/extensions/XTest.h", cname = "XTestCompareCurrentCursorWithWindow")]
+	public static bool compare_current_cursor_with_window (X.Display display, X.Window window);
+
+	[CCode (cheader_filename = "X11/extensions/XTest.h", cname = "XTestFakeKeyEvent")]
+	public static int fake_key_event (X.Display display, uint keycode, bool is_press, ulong delay);
+
+	[CCode (cheader_filename = "X11/extensions/XTest.h", cname = "XTestFakeButtonEvent")]
+	public static int fake_button_event (X.Display display, uint button, bool is_press, ulong delay);
+
+	[CCode (cheader_filename = "X11/extensions/XTest.h", cname = "XTestFakeMotionEvent")]
+	public static int fake_motion_event (X.Display display, int screen_number, int x, int y, ulong delay);
+
+	[CCode (cheader_filename = "X11/extensions/XTest.h", cname = "XTestFakeRelativeMotionEvent")]
+	public static int fake_relative_motion_event (X.Display display, int screen_number, int x, int y, ulong delay);
+
+	[CCode (cheader_filename = "X11/extensions/XTest.h", cname = "XTestGrabControl")]
+	public static int grab_control (X.Display display, bool impervious);
+
+	[CCode (cheader_filename = "X11/extensions/XTest.h", cname = "XTestSetGContextOfGC")]
+	public static void set_g_context_of_gc (X.GC gc, X.GContext gid);
+
+	[CCode (cheader_filename = "X11/extensions/XTest.h", cname = "XTestSetVisualIDOfVisual")]
+	public static void set_visual_id_of_visual (X.Visual visual, X.VisualID visualid);
+
+	[CCode (cheader_filename = "X11/extensions/XTest.h", cname = "XTestDiscard")]
+	public static X.Status discard (X.Display display);
+}
diff --git a/vapigen/Makefile.am b/vapigen/Makefile.am
index 6122aed..2ef7512 100644
--- a/vapigen/Makefile.am
+++ b/vapigen/Makefile.am
@@ -66,12 +66,40 @@ vapicheck_LDADD = \
 	../gobject-introspection/libgidl.la \
 	$(NULL)
 
-EXTRA_DIST = $(vapigen_VALASOURCES) $(vapicheck_VALASOURCES) vapigen.vala.stamp vapicheck.vala.stamp
+if ENABLE_UNVERSIONED
+makedir = $(datadir)/vala
+make_DATA = Makefile.vapigen
+
+aclocaldir = $(datadir)/aclocal
+aclocal_DATA = vapigen.m4
+endif
+
+pkgconfigdir = $(datadir)/pkgconfig
+pkgconfig_DATA = vapigen PACKAGE_SUFFIX@.pc
+
+vapigen PACKAGE_SUFFIX@.pc: vapigen.pc
+	cp $< $@
+
+EXTRA_DIST = \
+	$(vapigen_VALASOURCES) \
+	$(vapicheck_VALASOURCES) \
+	Makefile.vapigen \
+	vapigen.m4 \
+	vapigen.vala.stamp \
+	vapicheck.vala.stamp \
+	$(NULL)
+
+CLEANFILES = \
+	vapigen PACKAGE_SUFFIX@.pc
+	$(NULL)
 
 if ENABLE_UNVERSIONED
 install-exec-hook:
 	cd $(DESTDIR)$(bindir) && $(LN_S) -f vapigen PACKAGE_SUFFIX@$(EXEEXT) vapigen$(EXEEXT)
 	cd $(DESTDIR)$(bindir) && $(LN_S) -f vapicheck PACKAGE_SUFFIX@$(EXEEXT) vapicheck$(EXEEXT)
+
+install-data-hook:
+	cd $(DESTDIR)$(pkgconfigdir) && $(LN_S) -f vapigen PACKAGE_SUFFIX@.pc vapigen.pc
 endif
 
 MAINTAINERCLEANFILES = \
diff --git a/vapigen/Makefile.in b/vapigen/Makefile.in
index 705497d..0666e60 100644
--- a/vapigen/Makefile.in
+++ b/vapigen/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -15,7 +14,25 @@
 
 @SET_MAKE@
 
+
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkglibexecdir = $(libexecdir)/@PACKAGE@
@@ -35,7 +52,8 @@ build_triplet = @build@
 host_triplet = @host@
 bin_PROGRAMS = vapigen$(EXEEXT) vapicheck$(EXEEXT) $(am__EXEEXT_1)
 subdir = vapigen
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/vapigen.pc.in $(top_srcdir)/build-aux/depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -45,10 +63,11 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_FILES = vapigen.pc
 CONFIG_CLEAN_VPATH_FILES =
 am__EXEEXT_1 =
-am__installdirs = "$(DESTDIR)$(bindir)"
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(aclocaldir)" \
+	"$(DESTDIR)$(makedir)" "$(DESTDIR)$(pkgconfigdir)"
 PROGRAMS = $(bin_PROGRAMS)
 am__objects_1 =
 am__objects_2 = valavapicheck.$(OBJEXT) $(am__objects_1)
@@ -58,8 +77,8 @@ am__DEPENDENCIES_1 =
 vapicheck_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	../codegen/libvala PACKAGE_SUFFIX@.la \
 	../gobject-introspection/libgidl.la $(am__DEPENDENCIES_1)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_ AM_V@)
+am__v_lt_ = $(am__v_lt_ AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__objects_3 = valagidlparser.$(OBJEXT) valavapigen.$(OBJEXT) \
 	$(am__objects_1)
@@ -78,22 +97,22 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
 	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
 	$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_CC = $(am__v_CC_ AM_V@)
+am__v_CC_ = $(am__v_CC_ AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+AM_V_at = $(am__v_at_ AM_V@)
+am__v_at_ = $(am__v_at_ AM_DEFAULT_V@)
 am__v_at_0 = @
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_CCLD = $(am__v_CCLD_ AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+AM_V_GEN = $(am__v_GEN_ AM_V@)
+am__v_GEN_ = $(am__v_GEN_ AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
 SOURCES = $(vapicheck_SOURCES) $(vapigen_SOURCES)
 DIST_SOURCES = $(vapicheck_SOURCES) $(vapigen_SOURCES)
 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
@@ -103,6 +122,39 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+DATA = $(aclocal_DATA) $(make_DATA) $(pkgconfig_DATA)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
 AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
@@ -260,7 +312,6 @@ libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 prefix = @prefix@
@@ -321,7 +372,24 @@ vapicheck_LDADD = \
 	../gobject-introspection/libgidl.la \
 	$(NULL)
 
-EXTRA_DIST = $(vapigen_VALASOURCES) $(vapicheck_VALASOURCES) vapigen.vala.stamp vapicheck.vala.stamp
+ ENABLE_UNVERSIONED_TRUE@makedir = $(datadir)/vala
+ ENABLE_UNVERSIONED_TRUE@make_DATA = Makefile.vapigen
+ ENABLE_UNVERSIONED_TRUE@aclocaldir = $(datadir)/aclocal
+ ENABLE_UNVERSIONED_TRUE@aclocal_DATA = vapigen.m4
+pkgconfigdir = $(datadir)/pkgconfig
+pkgconfig_DATA = vapigen PACKAGE_SUFFIX@.pc
+EXTRA_DIST = \
+	$(vapigen_VALASOURCES) \
+	$(vapicheck_VALASOURCES) \
+	Makefile.vapigen \
+	vapigen.m4 \
+	vapigen.vala.stamp \
+	vapicheck.vala.stamp \
+	$(NULL)
+
+CLEANFILES = \
+	vapigen PACKAGE_SUFFIX@.pc
+
 MAINTAINERCLEANFILES = \
 	$(vapigen_VALASOURCES:.vala=.c) \
 	$(vapicheck_VALASOURCES:.vala=.c) \
@@ -365,10 +433,15 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
 $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(am__aclocal_m4_deps):
+vapigen.pc: $(top_builddir)/config.status $(srcdir)/vapigen.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-binPROGRAMS: $(bin_PROGRAMS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do echo "$$p $$p"; done | \
 	sed 's/$(EXEEXT)$$//' | \
 	while read p p1; do if test -f $$p || test -f $$p1; \
@@ -408,10 +481,10 @@ clean-binPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-vapicheck$(EXEEXT): $(vapicheck_OBJECTS) $(vapicheck_DEPENDENCIES) 
+vapicheck$(EXEEXT): $(vapicheck_OBJECTS) $(vapicheck_DEPENDENCIES) $(EXTRA_vapicheck_DEPENDENCIES) 
 	@rm -f vapicheck$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(vapicheck_OBJECTS) $(vapicheck_LDADD) $(LIBS)
-vapigen$(EXEEXT): $(vapigen_OBJECTS) $(vapigen_DEPENDENCIES) 
+vapigen$(EXEEXT): $(vapigen_OBJECTS) $(vapigen_DEPENDENCIES) $(EXTRA_vapigen_DEPENDENCIES) 
 	@rm -f vapigen$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(vapigen_OBJECTS) $(vapigen_LDADD) $(LIBS)
 
@@ -428,39 +501,99 @@ distclean-compile:
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(COMPILE) -c $<
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- am__fastdepCC_FALSE@	$(AM_V_CC) @AM_BACKSLASH@
- AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+ am__fastdepCC_FALSE@	$(AM_V_CC am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 mostlyclean-libtool:
 	-rm -f *.lo
 
 clean-libtool:
 	-rm -rf .libs _libs
+install-aclocalDATA: $(aclocal_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(aclocal_DATA)'; test -n "$(aclocaldir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(aclocaldir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(aclocaldir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(aclocaldir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(aclocaldir)" || exit $$?; \
+	done
+
+uninstall-aclocalDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(aclocal_DATA)'; test -n "$(aclocaldir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(aclocaldir)'; $(am__uninstall_files_from_dir)
+install-makeDATA: $(make_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(make_DATA)'; test -n "$(makedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(makedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(makedir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(makedir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(makedir)" || exit $$?; \
+	done
+
+uninstall-makeDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(make_DATA)'; test -n "$(makedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(makedir)'; $(am__uninstall_files_from_dir)
+install-pkgconfigDATA: $(pkgconfig_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+	done
+
+uninstall-pkgconfigDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
 $(RECURSIVE_TARGETS):
 	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
@@ -524,6 +657,10 @@ ctags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
 	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
 	done
+cscopelist-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \
+	done
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -587,6 +724,20 @@ GTAGS:
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
 
+cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS) $(LISP)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
@@ -622,13 +773,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
@@ -651,10 +799,10 @@ distdir: $(DISTFILES)
 check-am: all-am
 check: $(BUILT_SOURCES)
 	$(MAKE) $(AM_MAKEFLAGS) check-recursive
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) $(DATA)
 installdirs: installdirs-recursive
 installdirs-am:
-	for dir in "$(DESTDIR)$(bindir)"; do \
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(aclocaldir)" "$(DESTDIR)$(makedir)" "$(DESTDIR)$(pkgconfigdir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: $(BUILT_SOURCES)
@@ -668,13 +816,19 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -686,6 +840,7 @@ maintainer-clean-generic:
 	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
 	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
 @ENABLE_UNVERSIONED_FALSE install-exec-hook:
+ ENABLE_UNVERSIONED_FALSE@install-data-hook:
 clean: clean-recursive
 
 clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
@@ -708,8 +863,10 @@ info: info-recursive
 
 info-am:
 
-install-data-am:
-
+install-data-am: install-aclocalDATA install-makeDATA \
+	install-pkgconfigDATA
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) install-data-hook
 install-dvi: install-dvi-recursive
 
 install-dvi-am:
@@ -755,27 +912,31 @@ ps: ps-recursive
 
 ps-am:
 
-uninstall-am: uninstall-binPROGRAMS
+uninstall-am: uninstall-aclocalDATA uninstall-binPROGRAMS \
+	uninstall-makeDATA uninstall-pkgconfigDATA
 
 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
-	ctags-recursive install install-am install-exec-am \
-	install-strip tags-recursive
+	cscopelist-recursive ctags-recursive install install-am \
+	install-data-am install-exec-am install-strip tags-recursive
 
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
 	all all-am check check-am clean clean-binPROGRAMS \
-	clean-generic clean-libtool ctags ctags-recursive distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-binPROGRAMS install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
+	clean-generic clean-libtool cscopelist cscopelist-recursive \
+	ctags ctags-recursive distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-aclocalDATA \
+	install-am install-binPROGRAMS install-data install-data-am \
+	install-data-hook install-dvi install-dvi-am install-exec \
 	install-exec-am install-exec-hook install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs installdirs-am \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
-	uninstall-binPROGRAMS
+	install-info install-info-am install-makeDATA install-man \
+	install-pdf install-pdf-am install-pkgconfigDATA install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-aclocalDATA \
+	uninstall-am uninstall-binPROGRAMS uninstall-makeDATA \
+	uninstall-pkgconfigDATA
 
 
 vapigen.vala.stamp: $(vapigen_VALASOURCES)
@@ -786,10 +947,17 @@ vapicheck.vala.stamp: $(vapicheck_VALASOURCES)
 	$(VALA_V)$(VALAC) $(VALAFLAGS) -C --vapidir $(srcdir)/../vapi --vapidir $(srcdir)/../gee --pkg gee --vapidir $(srcdir)/../ccode --pkg ccode --vapidir $(srcdir)/../vala --pkg vala --vapidir $(srcdir)/../gobject-introspection --pkg gidl --pkg config $^
 	@touch $@
 
+vapigen PACKAGE_SUFFIX@.pc: vapigen.pc
+	cp $< $@
+	$(NULL)
+
 @ENABLE_UNVERSIONED_TRUE install-exec-hook:
 @ENABLE_UNVERSIONED_TRUE@	cd $(DESTDIR)$(bindir) && $(LN_S) -f vapigen PACKAGE_SUFFIX@$(EXEEXT) vapigen$(EXEEXT)
 @ENABLE_UNVERSIONED_TRUE@	cd $(DESTDIR)$(bindir) && $(LN_S) -f vapicheck PACKAGE_SUFFIX@$(EXEEXT) vapicheck$(EXEEXT)
 
+ ENABLE_UNVERSIONED_TRUE@install-data-hook:
+ ENABLE_UNVERSIONED_TRUE@	cd $(DESTDIR)$(pkgconfigdir) && $(LN_S) -f vapigen PACKAGE_SUFFIX@.pc vapigen.pc
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/vapigen/Makefile.vapigen b/vapigen/Makefile.vapigen
new file mode 100644
index 0000000..30e515b
--- /dev/null
+++ b/vapigen/Makefile.vapigen
@@ -0,0 +1,60 @@
+# Makefile for Vala API Generator (vapigen)
+# Written by Evan Nemerson
+#
+# The author disclaims copyright to this source code.  In place of
+# a legal notice, here is a blessing:
+#
+#    May you do good and not evil.
+#    May you find forgiveness for yourself and forgive others.
+#    May you share freely, never taking more than you give.
+#
+# See http://live.gnome.org/Vala/UpstreamGuide for detailed documentation
+#
+# Variables:
+#
+#   VAPIGEN_FILES
+#
+#     VAPIs to create
+#
+#   *_DEPS / VAPIGEN_DEPS
+#
+#       The dependencies. Generally the pkg-config names.
+#
+#   *_METADATADIRS / VAPIGEN_METADATADIRS
+#
+#       Directory containing the metadata.
+#
+#   *_VAPIDIRS / VAPIGEN_VAPIDIRS
+#
+#       Additional location(s) to search for VAPI dependencies.
+#
+#   *_GIRDIRS / VAPIGEN_GIRDIRS
+#
+#       Additional location(s) to search for GIR dependencies.
+#
+#   *_FILES
+#
+#       The files which should be used to generate the VAPI.
+
+_vapigen_silent_prefix = $(_vapigen_silent_prefix_$(V))
+_vapigen_silent_prefix_ = $(_vapigen_silent_prefix_$(AM_DEFAULT_VERBOSITY))
+_vapigen_silent_prefix_0 = @echo " VAPIGEN $(1)";
+_vapigen_silent_opts = $(_vapigen_silent_opts_$(V))
+_vapigen_silent_opts_ = $(_vapigen_silent_opts_$(AM_DEFAULT_VERBOSITY))
+_vapigen_silent_opts_0 = --quiet
+
+$(if $(VAPIGEN),,$(error You must define VAPIGEN))
+
+_vapi_name = $(subst /,_,$(subst -,_,$(subst .,_,$(1))))
+
+define vapigen
+$(1): $$($(_vapi_name)_GIR)
+	$(_vapigen_silent_prefix) $(VAPIGEN) $(_vapigen_silent_opts) \
+	  --library $(1:.vapi=) \
+	  $(foreach _vapi_metadatadir_name,$(if $($(_vapi_name)_METADATADIRS),$($(_vapi_name)_METADATADIRS),$(VAPIGEN_METADATADIRS)),--metadatadir $(_vapi_metadatadir_name)) \
+	  $(foreach _vapi_dir_name,$(if $($(_vapi_name)_VAPIDIRS),$($(_vapi_name)_VAPIDIRS),$(VAPIGEN_VAPIDIRS)),--vapidir $(_vapi_dir_name)) \
+	  $(foreach _vapi_dep_name,$(if $($(_vapi_name)_DEPS),$($(_vapi_name)_DEPS),$(VAPIGEN_DEPS)),--pkg $(_vapi_dep_name)) \
+	  $$($(_vapi_name)_FILES)
+endef
+
+$(foreach vapi,$(VAPIGEN_VAPIS),$(eval $(call vapigen,$(vapi))))
diff --git a/vapigen/vala-gen-introspect/Makefile.in b/vapigen/vala-gen-introspect/Makefile.in
index 468fdf4..93f6f3e 100644
--- a/vapigen/vala-gen-introspect/Makefile.in
+++ b/vapigen/vala-gen-introspect/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.12.1 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,6 +15,23 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkglibexecdir = $(libexecdir)/@PACKAGE@
@@ -68,16 +84,27 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(bindir)"
 SCRIPTS = $(bin_SCRIPTS)
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_GEN = $(am__v_GEN_ AM_V@)
+am__v_GEN_ = $(am__v_GEN_ AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+AM_V_at = $(am__v_at_ AM_V@)
+am__v_at_ = $(am__v_at_ AM_DEFAULT_V@)
 am__v_at_0 = @
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 pkgdatadir = @pkgdatadir@
 ACLOCAL = @ACLOCAL@
@@ -202,7 +229,6 @@ libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
-mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
 pdfdir = @pdfdir@
 prefix = @prefix@
@@ -263,8 +289,11 @@ vala-gen-introspect: $(top_builddir)/config.status $(srcdir)/vala-gen-introspect
 	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 install-binSCRIPTS: $(bin_SCRIPTS)
 	@$(NORMAL_INSTALL)
-	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -292,9 +321,7 @@ uninstall-binSCRIPTS:
 	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
 	files=`for p in $$list; do echo "$$p"; done | \
 	       sed -e 's,.*/,,;$(transform)'`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -307,6 +334,8 @@ TAGS:
 ctags: CTAGS
 CTAGS:
 
+cscope cscopelist:
+
 
 distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -355,10 +384,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/vapigen/valagidlparser.c b/vapigen/valagidlparser.c
index 035d034..273a3c6 100644
--- a/vapigen/valagidlparser.c
+++ b/vapigen/valagidlparser.c
@@ -7681,11 +7681,11 @@ static void vala_gidl_parser_parse_enum (ValaGIdlParser* self, GIdlNodeEnum* en_
 	gint _en_attributes_size_;
 	gchar** _tmp114_;
 	gint _tmp114__length1;
-	ValaEnum* _tmp201_;
-	const gchar* _tmp202_;
-	GIdlNodeEnum* _tmp203_;
-	GList* _tmp204_;
-	gboolean _tmp235_;
+	ValaEnum* _tmp208_;
+	const gchar* _tmp209_;
+	GIdlNodeEnum* _tmp210_;
+	GList* _tmp211_;
+	gboolean _tmp242_;
 	g_return_if_fail (self != NULL);
 	g_return_if_fail (en_node != NULL);
 	g_return_if_fail (container != NULL);
@@ -8167,7 +8167,7 @@ static void vala_gidl_parser_parse_enum (ValaGIdlParser* self, GIdlNodeEnum* en_
 									_tmp147_ = nv;
 									_tmp147__length1 = nv_length1;
 									_tmp148_ = _tmp147_[0];
-									if (g_strcmp0 (_tmp148_, "replacement") == 0) {
+									if (g_strcmp0 (_tmp148_, "default_value") == 0) {
 										ValaEnum* _tmp149_;
 										gchar** _tmp150_;
 										gint _tmp150__length1;
@@ -8180,7 +8180,7 @@ static void vala_gidl_parser_parse_enum (ValaGIdlParser* self, GIdlNodeEnum* en_
 										_tmp151_ = _tmp150_[1];
 										_tmp152_ = vala_gidl_parser_eval (self, _tmp151_);
 										_tmp153_ = _tmp152_;
-										vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp149_, "Deprecated", "replacement", _tmp153_, NULL);
+										vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp149_, "CCode", "default_value", _tmp153_, NULL);
 										_g_free0 (_tmp153_);
 									} else {
 										gchar** _tmp154_;
@@ -8189,7 +8189,7 @@ static void vala_gidl_parser_parse_enum (ValaGIdlParser* self, GIdlNodeEnum* en_
 										_tmp154_ = nv;
 										_tmp154__length1 = nv_length1;
 										_tmp155_ = _tmp154_[0];
-										if (g_strcmp0 (_tmp155_, "deprecated_since") == 0) {
+										if (g_strcmp0 (_tmp155_, "replacement") == 0) {
 											ValaEnum* _tmp156_;
 											gchar** _tmp157_;
 											gint _tmp157__length1;
@@ -8202,7 +8202,7 @@ static void vala_gidl_parser_parse_enum (ValaGIdlParser* self, GIdlNodeEnum* en_
 											_tmp158_ = _tmp157_[1];
 											_tmp159_ = vala_gidl_parser_eval (self, _tmp158_);
 											_tmp160_ = _tmp159_;
-											vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp156_, "Deprecated", "since", _tmp160_, NULL);
+											vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp156_, "Deprecated", "replacement", _tmp160_, NULL);
 											_g_free0 (_tmp160_);
 										} else {
 											gchar** _tmp161_;
@@ -8211,7 +8211,7 @@ static void vala_gidl_parser_parse_enum (ValaGIdlParser* self, GIdlNodeEnum* en_
 											_tmp161_ = nv;
 											_tmp161__length1 = nv_length1;
 											_tmp162_ = _tmp161_[0];
-											if (g_strcmp0 (_tmp162_, "rename_to") == 0) {
+											if (g_strcmp0 (_tmp162_, "deprecated_since") == 0) {
 												ValaEnum* _tmp163_;
 												gchar** _tmp164_;
 												gint _tmp164__length1;
@@ -8224,7 +8224,7 @@ static void vala_gidl_parser_parse_enum (ValaGIdlParser* self, GIdlNodeEnum* en_
 												_tmp165_ = _tmp164_[1];
 												_tmp166_ = vala_gidl_parser_eval (self, _tmp165_);
 												_tmp167_ = _tmp166_;
-												vala_symbol_set_name ((ValaSymbol*) _tmp163_, _tmp167_);
+												vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp163_, "Deprecated", "since", _tmp167_, NULL);
 												_g_free0 (_tmp167_);
 											} else {
 												gchar** _tmp168_;
@@ -8233,23 +8233,21 @@ static void vala_gidl_parser_parse_enum (ValaGIdlParser* self, GIdlNodeEnum* en_
 												_tmp168_ = nv;
 												_tmp168__length1 = nv_length1;
 												_tmp169_ = _tmp168_[0];
-												if (g_strcmp0 (_tmp169_, "errordomain") == 0) {
-													gchar** _tmp170_;
-													gint _tmp170__length1;
-													const gchar* _tmp171_;
-													gchar* _tmp172_ = NULL;
-													gchar* _tmp173_;
-													gboolean _tmp174_;
-													_tmp170_ = nv;
-													_tmp170__length1 = nv_length1;
-													_tmp171_ = _tmp170_[1];
-													_tmp172_ = vala_gidl_parser_eval (self, _tmp171_);
-													_tmp173_ = _tmp172_;
-													_tmp174_ = g_strcmp0 (_tmp173_, "1") == 0;
-													_g_free0 (_tmp173_);
-													if (_tmp174_) {
-														is_errordomain = TRUE;
-													}
+												if (g_strcmp0 (_tmp169_, "rename_to") == 0) {
+													ValaEnum* _tmp170_;
+													gchar** _tmp171_;
+													gint _tmp171__length1;
+													const gchar* _tmp172_;
+													gchar* _tmp173_ = NULL;
+													gchar* _tmp174_;
+													_tmp170_ = en;
+													_tmp171_ = nv;
+													_tmp171__length1 = nv_length1;
+													_tmp172_ = _tmp171_[1];
+													_tmp173_ = vala_gidl_parser_eval (self, _tmp172_);
+													_tmp174_ = _tmp173_;
+													vala_symbol_set_name ((ValaSymbol*) _tmp170_, _tmp174_);
+													_g_free0 (_tmp174_);
 												} else {
 													gchar** _tmp175_;
 													gint _tmp175__length1;
@@ -8257,79 +8255,104 @@ static void vala_gidl_parser_parse_enum (ValaGIdlParser* self, GIdlNodeEnum* en_
 													_tmp175_ = nv;
 													_tmp175__length1 = nv_length1;
 													_tmp176_ = _tmp175_[0];
-													if (g_strcmp0 (_tmp176_, "to_string") == 0) {
-														ValaUnresolvedType* _tmp177_;
-														ValaUnresolvedType* return_type;
-														ValaUnresolvedType* _tmp178_;
-														ValaUnresolvedSymbol* _tmp179_;
-														ValaUnresolvedSymbol* _tmp180_;
-														ValaUnresolvedType* _tmp181_;
-														ValaUnresolvedType* _tmp182_;
-														ValaSourceReference* _tmp183_;
-														ValaMethod* _tmp184_;
-														ValaMethod* m;
-														ValaMethod* _tmp185_;
-														ValaMethod* _tmp186_;
-														gchar** _tmp187_;
-														gint _tmp187__length1;
-														const gchar* _tmp188_;
-														gchar* _tmp189_ = NULL;
-														gchar* _tmp190_;
-														ValaEnum* _tmp191_;
-														ValaMethod* _tmp192_;
-														_tmp177_ = vala_unresolved_type_new ();
-														return_type = _tmp177_;
-														_tmp178_ = return_type;
-														_tmp179_ = vala_unresolved_symbol_new (NULL, "string", NULL);
+													if (g_strcmp0 (_tmp176_, "errordomain") == 0) {
+														gchar** _tmp177_;
+														gint _tmp177__length1;
+														const gchar* _tmp178_;
+														gchar* _tmp179_ = NULL;
+														gchar* _tmp180_;
+														gboolean _tmp181_;
+														_tmp177_ = nv;
+														_tmp177__length1 = nv_length1;
+														_tmp178_ = _tmp177_[1];
+														_tmp179_ = vala_gidl_parser_eval (self, _tmp178_);
 														_tmp180_ = _tmp179_;
-														vala_unresolved_type_set_unresolved_symbol (_tmp178_, _tmp180_);
-														_vala_code_node_unref0 (_tmp180_);
-														_tmp181_ = return_type;
-														vala_data_type_set_value_owned ((ValaDataType*) _tmp181_, FALSE);
-														_tmp182_ = return_type;
-														_tmp183_ = self->priv->current_source_reference;
-														_tmp184_ = vala_method_new ("to_string", (ValaDataType*) _tmp182_, _tmp183_, NULL);
-														m = _tmp184_;
-														_tmp185_ = m;
-														vala_symbol_set_access ((ValaSymbol*) _tmp185_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
-														_tmp186_ = m;
-														_tmp187_ = nv;
-														_tmp187__length1 = nv_length1;
-														_tmp188_ = _tmp187_[1];
-														_tmp189_ = vala_gidl_parser_eval (self, _tmp188_);
-														_tmp190_ = _tmp189_;
-														vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp186_, "CCode", "cname", _tmp190_, NULL);
-														_g_free0 (_tmp190_);
-														_tmp191_ = en;
-														_tmp192_ = m;
-														vala_symbol_add_method ((ValaSymbol*) _tmp191_, _tmp192_);
-														_vala_code_node_unref0 (m);
-														_vala_code_node_unref0 (return_type);
+														_tmp181_ = g_strcmp0 (_tmp180_, "1") == 0;
+														_g_free0 (_tmp180_);
+														if (_tmp181_) {
+															is_errordomain = TRUE;
+														}
 													} else {
-														gchar** _tmp193_;
-														gint _tmp193__length1;
-														const gchar* _tmp194_;
-														_tmp193_ = nv;
-														_tmp193__length1 = nv_length1;
-														_tmp194_ = _tmp193_[0];
-														if (g_strcmp0 (_tmp194_, "experimental") == 0) {
-															gchar** _tmp195_;
-															gint _tmp195__length1;
-															const gchar* _tmp196_;
-															gchar* _tmp197_ = NULL;
-															gchar* _tmp198_;
-															gboolean _tmp199_;
-															_tmp195_ = nv;
-															_tmp195__length1 = nv_length1;
-															_tmp196_ = _tmp195_[1];
-															_tmp197_ = vala_gidl_parser_eval (self, _tmp196_);
-															_tmp198_ = _tmp197_;
-															_tmp199_ = g_strcmp0 (_tmp198_, "1") == 0;
-															_g_free0 (_tmp198_);
-															if (_tmp199_) {
-																ValaEnum* _tmp200_;
-																_tmp200_ = en;
-																vala_code_node_set_attribute ((ValaCodeNode*) _tmp200_, "Experimental", TRUE, NULL);
+														gchar** _tmp182_;
+														gint _tmp182__length1;
+														const gchar* _tmp183_;
+														_tmp182_ = nv;
+														_tmp182__length1 = nv_length1;
+														_tmp183_ = _tmp182_[0];
+														if (g_strcmp0 (_tmp183_, "to_string") == 0) {
+															ValaUnresolvedType* _tmp184_;
+															ValaUnresolvedType* return_type;
+															ValaUnresolvedType* _tmp185_;
+															ValaUnresolvedSymbol* _tmp186_;
+															ValaUnresolvedSymbol* _tmp187_;
+															ValaUnresolvedType* _tmp188_;
+															ValaUnresolvedType* _tmp189_;
+															ValaSourceReference* _tmp190_;
+															ValaMethod* _tmp191_;
+															ValaMethod* m;
+															ValaMethod* _tmp192_;
+															ValaMethod* _tmp193_;
+															gchar** _tmp194_;
+															gint _tmp194__length1;
+															const gchar* _tmp195_;
+															gchar* _tmp196_ = NULL;
+															gchar* _tmp197_;
+															ValaEnum* _tmp198_;
+															ValaMethod* _tmp199_;
+															_tmp184_ = vala_unresolved_type_new ();
+															return_type = _tmp184_;
+															_tmp185_ = return_type;
+															_tmp186_ = vala_unresolved_symbol_new (NULL, "string", NULL);
+															_tmp187_ = _tmp186_;
+															vala_unresolved_type_set_unresolved_symbol (_tmp185_, _tmp187_);
+															_vala_code_node_unref0 (_tmp187_);
+															_tmp188_ = return_type;
+															vala_data_type_set_value_owned ((ValaDataType*) _tmp188_, FALSE);
+															_tmp189_ = return_type;
+															_tmp190_ = self->priv->current_source_reference;
+															_tmp191_ = vala_method_new ("to_string", (ValaDataType*) _tmp189_, _tmp190_, NULL);
+															m = _tmp191_;
+															_tmp192_ = m;
+															vala_symbol_set_access ((ValaSymbol*) _tmp192_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
+															_tmp193_ = m;
+															_tmp194_ = nv;
+															_tmp194__length1 = nv_length1;
+															_tmp195_ = _tmp194_[1];
+															_tmp196_ = vala_gidl_parser_eval (self, _tmp195_);
+															_tmp197_ = _tmp196_;
+															vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp193_, "CCode", "cname", _tmp197_, NULL);
+															_g_free0 (_tmp197_);
+															_tmp198_ = en;
+															_tmp199_ = m;
+															vala_symbol_add_method ((ValaSymbol*) _tmp198_, _tmp199_);
+															_vala_code_node_unref0 (m);
+															_vala_code_node_unref0 (return_type);
+														} else {
+															gchar** _tmp200_;
+															gint _tmp200__length1;
+															const gchar* _tmp201_;
+															_tmp200_ = nv;
+															_tmp200__length1 = nv_length1;
+															_tmp201_ = _tmp200_[0];
+															if (g_strcmp0 (_tmp201_, "experimental") == 0) {
+																gchar** _tmp202_;
+																gint _tmp202__length1;
+																const gchar* _tmp203_;
+																gchar* _tmp204_ = NULL;
+																gchar* _tmp205_;
+																gboolean _tmp206_;
+																_tmp202_ = nv;
+																_tmp202__length1 = nv_length1;
+																_tmp203_ = _tmp202_[1];
+																_tmp204_ = vala_gidl_parser_eval (self, _tmp203_);
+																_tmp205_ = _tmp204_;
+																_tmp206_ = g_strcmp0 (_tmp205_, "1") == 0;
+																_g_free0 (_tmp205_);
+																if (_tmp206_) {
+																	ValaEnum* _tmp207_;
+																	_tmp207_ = en;
+																	vala_code_node_set_attribute ((ValaCodeNode*) _tmp207_, "Experimental", TRUE, NULL);
+																}
 															}
 														}
 													}
@@ -8347,94 +8370,94 @@ static void vala_gidl_parser_parse_enum (ValaGIdlParser* self, GIdlNodeEnum* en_
 			}
 		}
 	}
-	_tmp201_ = en;
-	_tmp202_ = common_prefix;
-	vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp201_, "CCode", "cprefix", _tmp202_, NULL);
-	_tmp203_ = en_node;
-	_tmp204_ = _tmp203_->values;
+	_tmp208_ = en;
+	_tmp209_ = common_prefix;
+	vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp208_, "CCode", "cprefix", _tmp209_, NULL);
+	_tmp210_ = en_node;
+	_tmp211_ = _tmp210_->values;
 	{
 		GList* value2_collection = NULL;
 		GList* value2_it = NULL;
-		value2_collection = _tmp204_;
+		value2_collection = _tmp211_;
 		for (value2_it = value2_collection; value2_it != NULL; value2_it = value2_it->next) {
 			GIdlNode* value2 = NULL;
 			value2 = (GIdlNode*) value2_it->data;
 			{
-				GIdlNode* _tmp205_;
-				const gchar* _tmp206_;
-				gint _tmp207_ = 0;
-				gchar** _tmp208_ = NULL;
+				GIdlNode* _tmp212_;
+				const gchar* _tmp213_;
+				gint _tmp214_ = 0;
+				gchar** _tmp215_ = NULL;
 				gchar** val_attributes;
 				gint val_attributes_length1;
 				gint _val_attributes_size_;
 				gboolean is_hidden;
-				gchar** _tmp209_;
-				gint _tmp209__length1;
-				gboolean _tmp223_;
-				_tmp205_ = value2;
-				_tmp206_ = _tmp205_->name;
-				_tmp208_ = vala_gidl_parser_get_attributes (self, _tmp206_, &_tmp207_);
-				val_attributes = _tmp208_;
-				val_attributes_length1 = _tmp207_;
+				gchar** _tmp216_;
+				gint _tmp216__length1;
+				gboolean _tmp230_;
+				_tmp212_ = value2;
+				_tmp213_ = _tmp212_->name;
+				_tmp215_ = vala_gidl_parser_get_attributes (self, _tmp213_, &_tmp214_);
+				val_attributes = _tmp215_;
+				val_attributes_length1 = _tmp214_;
 				_val_attributes_size_ = val_attributes_length1;
 				is_hidden = FALSE;
-				_tmp209_ = val_attributes;
-				_tmp209__length1 = val_attributes_length1;
-				if (_tmp209_ != NULL) {
-					gchar** _tmp210_;
-					gint _tmp210__length1;
-					_tmp210_ = val_attributes;
-					_tmp210__length1 = val_attributes_length1;
+				_tmp216_ = val_attributes;
+				_tmp216__length1 = val_attributes_length1;
+				if (_tmp216_ != NULL) {
+					gchar** _tmp217_;
+					gint _tmp217__length1;
+					_tmp217_ = val_attributes;
+					_tmp217__length1 = val_attributes_length1;
 					{
 						gchar** attr_collection = NULL;
 						gint attr_collection_length1 = 0;
 						gint _attr_collection_size_ = 0;
 						gint attr_it = 0;
-						attr_collection = _tmp210_;
-						attr_collection_length1 = _tmp210__length1;
-						for (attr_it = 0; attr_it < _tmp210__length1; attr_it = attr_it + 1) {
-							gchar* _tmp211_;
+						attr_collection = _tmp217_;
+						attr_collection_length1 = _tmp217__length1;
+						for (attr_it = 0; attr_it < _tmp217__length1; attr_it = attr_it + 1) {
+							gchar* _tmp218_;
 							gchar* attr = NULL;
-							_tmp211_ = g_strdup (attr_collection[attr_it]);
-							attr = _tmp211_;
+							_tmp218_ = g_strdup (attr_collection[attr_it]);
+							attr = _tmp218_;
 							{
-								const gchar* _tmp212_;
-								gchar** _tmp213_;
-								gchar** _tmp214_ = NULL;
+								const gchar* _tmp219_;
+								gchar** _tmp220_;
+								gchar** _tmp221_ = NULL;
 								gchar** nv;
 								gint nv_length1;
 								gint _nv_size_;
-								gboolean _tmp215_ = FALSE;
-								gchar** _tmp216_;
-								gint _tmp216__length1;
-								const gchar* _tmp217_;
-								gboolean _tmp222_;
-								_tmp212_ = attr;
-								_tmp214_ = _tmp213_ = g_strsplit (_tmp212_, "=", 2);
-								nv = _tmp214_;
-								nv_length1 = _vala_array_length (_tmp213_);
+								gboolean _tmp222_ = FALSE;
+								gchar** _tmp223_;
+								gint _tmp223__length1;
+								const gchar* _tmp224_;
+								gboolean _tmp229_;
+								_tmp219_ = attr;
+								_tmp221_ = _tmp220_ = g_strsplit (_tmp219_, "=", 2);
+								nv = _tmp221_;
+								nv_length1 = _vala_array_length (_tmp220_);
 								_nv_size_ = nv_length1;
-								_tmp216_ = nv;
-								_tmp216__length1 = nv_length1;
-								_tmp217_ = _tmp216_[0];
-								if (g_strcmp0 (_tmp217_, "hidden") == 0) {
-									gchar** _tmp218_;
-									gint _tmp218__length1;
-									const gchar* _tmp219_;
-									gchar* _tmp220_ = NULL;
-									gchar* _tmp221_;
-									_tmp218_ = nv;
-									_tmp218__length1 = nv_length1;
-									_tmp219_ = _tmp218_[1];
-									_tmp220_ = vala_gidl_parser_eval (self, _tmp219_);
-									_tmp221_ = _tmp220_;
-									_tmp215_ = g_strcmp0 (_tmp221_, "1") == 0;
-									_g_free0 (_tmp221_);
+								_tmp223_ = nv;
+								_tmp223__length1 = nv_length1;
+								_tmp224_ = _tmp223_[0];
+								if (g_strcmp0 (_tmp224_, "hidden") == 0) {
+									gchar** _tmp225_;
+									gint _tmp225__length1;
+									const gchar* _tmp226_;
+									gchar* _tmp227_ = NULL;
+									gchar* _tmp228_;
+									_tmp225_ = nv;
+									_tmp225__length1 = nv_length1;
+									_tmp226_ = _tmp225_[1];
+									_tmp227_ = vala_gidl_parser_eval (self, _tmp226_);
+									_tmp228_ = _tmp227_;
+									_tmp222_ = g_strcmp0 (_tmp228_, "1") == 0;
+									_g_free0 (_tmp228_);
 								} else {
-									_tmp215_ = FALSE;
+									_tmp222_ = FALSE;
 								}
-								_tmp222_ = _tmp215_;
-								if (_tmp222_) {
+								_tmp229_ = _tmp222_;
+								if (_tmp229_) {
 									is_hidden = TRUE;
 								}
 								nv = (_vala_array_free (nv, nv_length1, (GDestroyNotify) g_free), NULL);
@@ -8443,160 +8466,160 @@ static void vala_gidl_parser_parse_enum (ValaGIdlParser* self, GIdlNodeEnum* en_
 						}
 					}
 				}
-				_tmp223_ = is_hidden;
-				if (!_tmp223_) {
-					GIdlNode* _tmp224_;
-					const gchar* _tmp225_;
-					const gchar* _tmp226_;
-					gint _tmp227_;
-					gint _tmp228_;
-					gchar* _tmp229_ = NULL;
-					gchar* _tmp230_;
-					ValaEnumValue* _tmp231_;
-					ValaEnumValue* _tmp232_;
+				_tmp230_ = is_hidden;
+				if (!_tmp230_) {
+					GIdlNode* _tmp231_;
+					const gchar* _tmp232_;
+					const gchar* _tmp233_;
+					gint _tmp234_;
+					gint _tmp235_;
+					gchar* _tmp236_ = NULL;
+					gchar* _tmp237_;
+					ValaEnumValue* _tmp238_;
+					ValaEnumValue* _tmp239_;
 					ValaEnumValue* ev;
-					ValaEnum* _tmp233_;
-					ValaEnumValue* _tmp234_;
-					_tmp224_ = value2;
-					_tmp225_ = _tmp224_->name;
-					_tmp226_ = common_prefix;
-					_tmp227_ = strlen (_tmp226_);
-					_tmp228_ = _tmp227_;
-					_tmp229_ = string_substring (_tmp225_, (glong) _tmp228_, (glong) (-1));
-					_tmp230_ = _tmp229_;
-					_tmp231_ = vala_enum_value_new (_tmp230_, NULL, NULL, NULL);
-					_tmp232_ = _tmp231_;
-					_g_free0 (_tmp230_);
-					ev = _tmp232_;
-					_tmp233_ = en;
-					_tmp234_ = ev;
-					vala_enum_add_value (_tmp233_, _tmp234_);
+					ValaEnum* _tmp240_;
+					ValaEnumValue* _tmp241_;
+					_tmp231_ = value2;
+					_tmp232_ = _tmp231_->name;
+					_tmp233_ = common_prefix;
+					_tmp234_ = strlen (_tmp233_);
+					_tmp235_ = _tmp234_;
+					_tmp236_ = string_substring (_tmp232_, (glong) _tmp235_, (glong) (-1));
+					_tmp237_ = _tmp236_;
+					_tmp238_ = vala_enum_value_new (_tmp237_, NULL, NULL, NULL);
+					_tmp239_ = _tmp238_;
+					_g_free0 (_tmp237_);
+					ev = _tmp239_;
+					_tmp240_ = en;
+					_tmp241_ = ev;
+					vala_enum_add_value (_tmp240_, _tmp241_);
 					_vala_code_node_unref0 (ev);
 				}
 				val_attributes = (_vala_array_free (val_attributes, val_attributes_length1, (GDestroyNotify) g_free), NULL);
 			}
 		}
 	}
-	_tmp235_ = is_errordomain;
-	if (_tmp235_) {
-		ValaEnum* _tmp236_;
-		const gchar* _tmp237_;
-		const gchar* _tmp238_;
-		ValaSourceReference* _tmp239_;
-		ValaErrorDomain* _tmp240_;
-		ValaErrorDomain* ed;
-		ValaErrorDomain* _tmp241_;
-		ValaErrorDomain* _tmp242_;
-		const gchar* _tmp243_;
+	_tmp242_ = is_errordomain;
+	if (_tmp242_) {
+		ValaEnum* _tmp243_;
 		const gchar* _tmp244_;
-		ValaSourceFile* _tmp264_;
-		ValaErrorDomain* _tmp265_;
-		gboolean _tmp266_;
-		_tmp236_ = en;
-		_tmp237_ = vala_symbol_get_name ((ValaSymbol*) _tmp236_);
-		_tmp238_ = _tmp237_;
-		_tmp239_ = self->priv->current_source_reference;
-		_tmp240_ = vala_error_domain_new (_tmp238_, _tmp239_, NULL);
-		ed = _tmp240_;
-		_tmp241_ = ed;
-		vala_symbol_set_access ((ValaSymbol*) _tmp241_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
-		_tmp242_ = ed;
-		_tmp243_ = common_prefix;
-		vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp242_, "CCode", "cprefix", _tmp243_, NULL);
-		_tmp244_ = cheader_filename;
-		if (_tmp244_ != NULL) {
-			ValaErrorDomain* _tmp245_;
-			const gchar* _tmp246_;
-			_tmp245_ = ed;
-			_tmp246_ = cheader_filename;
-			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp245_, "CCode", "cheader_filename", _tmp246_, NULL);
+		const gchar* _tmp245_;
+		ValaSourceReference* _tmp246_;
+		ValaErrorDomain* _tmp247_;
+		ValaErrorDomain* ed;
+		ValaErrorDomain* _tmp248_;
+		ValaErrorDomain* _tmp249_;
+		const gchar* _tmp250_;
+		const gchar* _tmp251_;
+		ValaSourceFile* _tmp271_;
+		ValaErrorDomain* _tmp272_;
+		gboolean _tmp273_;
+		_tmp243_ = en;
+		_tmp244_ = vala_symbol_get_name ((ValaSymbol*) _tmp243_);
+		_tmp245_ = _tmp244_;
+		_tmp246_ = self->priv->current_source_reference;
+		_tmp247_ = vala_error_domain_new (_tmp245_, _tmp246_, NULL);
+		ed = _tmp247_;
+		_tmp248_ = ed;
+		vala_symbol_set_access ((ValaSymbol*) _tmp248_, VALA_SYMBOL_ACCESSIBILITY_PUBLIC);
+		_tmp249_ = ed;
+		_tmp250_ = common_prefix;
+		vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp249_, "CCode", "cprefix", _tmp250_, NULL);
+		_tmp251_ = cheader_filename;
+		if (_tmp251_ != NULL) {
+			ValaErrorDomain* _tmp252_;
+			const gchar* _tmp253_;
+			_tmp252_ = ed;
+			_tmp253_ = cheader_filename;
+			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp252_, "CCode", "cheader_filename", _tmp253_, NULL);
 		}
 		{
-			ValaEnum* _tmp247_;
-			ValaList* _tmp248_ = NULL;
+			ValaEnum* _tmp254_;
+			ValaList* _tmp255_ = NULL;
 			ValaList* _ev_list;
-			ValaList* _tmp249_;
-			gint _tmp250_;
-			gint _tmp251_;
+			ValaList* _tmp256_;
+			gint _tmp257_;
+			gint _tmp258_;
 			gint _ev_size;
 			gint _ev_index;
-			_tmp247_ = en;
-			_tmp248_ = vala_enum_get_values (_tmp247_);
-			_ev_list = _tmp248_;
-			_tmp249_ = _ev_list;
-			_tmp250_ = vala_collection_get_size ((ValaCollection*) _tmp249_);
-			_tmp251_ = _tmp250_;
-			_ev_size = _tmp251_;
+			_tmp254_ = en;
+			_tmp255_ = vala_enum_get_values (_tmp254_);
+			_ev_list = _tmp255_;
+			_tmp256_ = _ev_list;
+			_tmp257_ = vala_collection_get_size ((ValaCollection*) _tmp256_);
+			_tmp258_ = _tmp257_;
+			_ev_size = _tmp258_;
 			_ev_index = -1;
 			while (TRUE) {
-				gint _tmp252_;
-				gint _tmp253_;
-				gint _tmp254_;
-				ValaList* _tmp255_;
-				gint _tmp256_;
-				gpointer _tmp257_ = NULL;
+				gint _tmp259_;
+				gint _tmp260_;
+				gint _tmp261_;
+				ValaList* _tmp262_;
+				gint _tmp263_;
+				gpointer _tmp264_ = NULL;
 				ValaEnumValue* ev;
-				ValaErrorDomain* _tmp258_;
-				ValaEnumValue* _tmp259_;
-				const gchar* _tmp260_;
-				const gchar* _tmp261_;
-				ValaErrorCode* _tmp262_;
-				ValaErrorCode* _tmp263_;
-				_tmp252_ = _ev_index;
-				_ev_index = _tmp252_ + 1;
-				_tmp253_ = _ev_index;
-				_tmp254_ = _ev_size;
-				if (!(_tmp253_ < _tmp254_)) {
+				ValaErrorDomain* _tmp265_;
+				ValaEnumValue* _tmp266_;
+				const gchar* _tmp267_;
+				const gchar* _tmp268_;
+				ValaErrorCode* _tmp269_;
+				ValaErrorCode* _tmp270_;
+				_tmp259_ = _ev_index;
+				_ev_index = _tmp259_ + 1;
+				_tmp260_ = _ev_index;
+				_tmp261_ = _ev_size;
+				if (!(_tmp260_ < _tmp261_)) {
 					break;
 				}
-				_tmp255_ = _ev_list;
-				_tmp256_ = _ev_index;
-				_tmp257_ = vala_list_get (_tmp255_, _tmp256_);
-				ev = (ValaEnumValue*) _tmp257_;
-				_tmp258_ = ed;
-				_tmp259_ = ev;
-				_tmp260_ = vala_symbol_get_name ((ValaSymbol*) _tmp259_);
-				_tmp261_ = _tmp260_;
-				_tmp262_ = vala_error_code_new (_tmp261_, NULL, NULL);
-				_tmp263_ = _tmp262_;
-				vala_error_domain_add_code (_tmp258_, _tmp263_);
-				_vala_code_node_unref0 (_tmp263_);
+				_tmp262_ = _ev_list;
+				_tmp263_ = _ev_index;
+				_tmp264_ = vala_list_get (_tmp262_, _tmp263_);
+				ev = (ValaEnumValue*) _tmp264_;
+				_tmp265_ = ed;
+				_tmp266_ = ev;
+				_tmp267_ = vala_symbol_get_name ((ValaSymbol*) _tmp266_);
+				_tmp268_ = _tmp267_;
+				_tmp269_ = vala_error_code_new (_tmp268_, NULL, NULL);
+				_tmp270_ = _tmp269_;
+				vala_error_domain_add_code (_tmp265_, _tmp270_);
+				_vala_code_node_unref0 (_tmp270_);
 				_vala_code_node_unref0 (ev);
 			}
 			_vala_iterable_unref0 (_ev_list);
 		}
-		_tmp264_ = self->priv->current_source_file;
-		_tmp265_ = ed;
-		vala_source_file_add_node (_tmp264_, (ValaCodeNode*) _tmp265_);
-		_tmp266_ = existing;
-		if (!_tmp266_) {
-			ValaSymbol* _tmp267_;
-			ValaErrorDomain* _tmp268_;
-			_tmp267_ = container;
-			_tmp268_ = ed;
-			vala_gidl_parser_add_symbol_to_container (self, _tmp267_, (ValaSymbol*) _tmp268_);
-		}
-		_vala_code_node_unref0 (ed);
-	} else {
-		ValaEnum* _tmp269_;
-		gboolean _tmp270_;
-		ValaSourceFile* _tmp271_;
-		ValaEnum* _tmp272_;
-		gboolean _tmp273_;
-		_tmp269_ = en;
-		_tmp270_ = is_flags;
-		vala_code_node_set_attribute ((ValaCodeNode*) _tmp269_, "Flags", _tmp270_, NULL);
 		_tmp271_ = self->priv->current_source_file;
-		_tmp272_ = en;
+		_tmp272_ = ed;
 		vala_source_file_add_node (_tmp271_, (ValaCodeNode*) _tmp272_);
 		_tmp273_ = existing;
 		if (!_tmp273_) {
 			ValaSymbol* _tmp274_;
-			ValaEnum* _tmp275_;
+			ValaErrorDomain* _tmp275_;
 			_tmp274_ = container;
-			_tmp275_ = en;
+			_tmp275_ = ed;
 			vala_gidl_parser_add_symbol_to_container (self, _tmp274_, (ValaSymbol*) _tmp275_);
 		}
+		_vala_code_node_unref0 (ed);
+	} else {
+		ValaEnum* _tmp276_;
+		gboolean _tmp277_;
+		ValaSourceFile* _tmp278_;
+		ValaEnum* _tmp279_;
+		gboolean _tmp280_;
+		_tmp276_ = en;
+		_tmp277_ = is_flags;
+		vala_code_node_set_attribute ((ValaCodeNode*) _tmp276_, "Flags", _tmp277_, NULL);
+		_tmp278_ = self->priv->current_source_file;
+		_tmp279_ = en;
+		vala_source_file_add_node (_tmp278_, (ValaCodeNode*) _tmp279_);
+		_tmp280_ = existing;
+		if (!_tmp280_) {
+			ValaSymbol* _tmp281_;
+			ValaEnum* _tmp282_;
+			_tmp281_ = container;
+			_tmp282_ = en;
+			vala_gidl_parser_add_symbol_to_container (self, _tmp281_, (ValaSymbol*) _tmp282_);
+		}
 	}
 	en_attributes = (_vala_array_free (en_attributes, en_attributes_length1, (GDestroyNotify) g_free), NULL);
 	_g_free0 (cheader_filename);
@@ -12631,7 +12654,7 @@ static ValaDataType* vala_gidl_parser_parse_type_from_string (ValaGIdlParser* se
 			e = _inner_error_;
 			_inner_error_ = NULL;
 			_tmp3_ = e->message;
-			g_error ("valagidlparser.vala:2078: Unable to compile regex: %s", _tmp3_);
+			g_error ("valagidlparser.vala:2080: Unable to compile regex: %s", _tmp3_);
 			_g_error_free0 (e);
 		}
 		__finally2:
@@ -13053,21 +13076,21 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 	gboolean first;
 	ValaParameter* last_param;
 	ValaDataType* last_param_type;
-	GList* _tmp337_;
-	gboolean _tmp762_ = FALSE;
-	gboolean _tmp763_;
-	gboolean _tmp765_;
-	gboolean _tmp778_;
-	gboolean _tmp780_ = FALSE;
-	ValaParameter* _tmp781_;
-	gboolean _tmp786_;
-	ValaSymbol* _tmp792_;
-	const gchar* _tmp798_;
-	ValaMethod* _tmp799_;
-	ValaSymbol* _tmp800_;
-	gchar* _tmp801_ = NULL;
-	gchar* _tmp802_;
-	gboolean _tmp803_;
+	GList* _tmp344_;
+	gboolean _tmp769_ = FALSE;
+	gboolean _tmp770_;
+	gboolean _tmp772_;
+	gboolean _tmp785_;
+	gboolean _tmp787_ = FALSE;
+	ValaParameter* _tmp788_;
+	gboolean _tmp793_;
+	ValaSymbol* _tmp799_;
+	const gchar* _tmp805_;
+	ValaMethod* _tmp806_;
+	ValaSymbol* _tmp807_;
+	gchar* _tmp808_ = NULL;
+	gchar* _tmp809_;
+	gboolean _tmp810_;
 	g_return_val_if_fail (self != NULL, NULL);
 	g_return_val_if_fail (name != NULL, NULL);
 	g_return_val_if_fail (symbol != NULL, NULL);
@@ -13814,20 +13837,20 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 																					_tmp228_ = nv;
 																					_tmp228__length1 = nv_length1;
 																					_tmp229_ = _tmp228_[0];
-																					if (g_strcmp0 (_tmp229_, "type_arguments") == 0) {
-																						ValaDataType* _tmp230_;
+																					if (g_strcmp0 (_tmp229_, "ctype") == 0) {
+																						ValaMethod* _tmp230_;
 																						gchar** _tmp231_;
 																						gint _tmp231__length1;
 																						const gchar* _tmp232_;
 																						gchar* _tmp233_ = NULL;
 																						gchar* _tmp234_;
-																						_tmp230_ = return_type;
+																						_tmp230_ = m;
 																						_tmp231_ = nv;
 																						_tmp231__length1 = nv_length1;
 																						_tmp232_ = _tmp231_[1];
 																						_tmp233_ = vala_gidl_parser_eval (self, _tmp232_);
 																						_tmp234_ = _tmp233_;
-																						vala_gidl_parser_parse_type_arguments_from_string (self, _tmp230_, _tmp234_, NULL);
+																						vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp230_, "CCode", "type", _tmp234_, NULL);
 																						_g_free0 (_tmp234_);
 																					} else {
 																						gchar** _tmp235_;
@@ -13836,47 +13859,47 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 																						_tmp235_ = nv;
 																						_tmp235__length1 = nv_length1;
 																						_tmp236_ = _tmp235_[0];
-																						if (g_strcmp0 (_tmp236_, "deprecated") == 0) {
-																							gchar** _tmp237_;
-																							gint _tmp237__length1;
-																							const gchar* _tmp238_;
-																							gchar* _tmp239_ = NULL;
-																							gchar* _tmp240_;
-																							gboolean _tmp241_;
-																							_tmp237_ = nv;
-																							_tmp237__length1 = nv_length1;
-																							_tmp238_ = _tmp237_[1];
-																							_tmp239_ = vala_gidl_parser_eval (self, _tmp238_);
-																							_tmp240_ = _tmp239_;
-																							_tmp241_ = g_strcmp0 (_tmp240_, "1") == 0;
-																							_g_free0 (_tmp240_);
-																							if (_tmp241_) {
-																								ValaMethod* _tmp242_;
-																								_tmp242_ = m;
-																								vala_code_node_set_attribute ((ValaCodeNode*) _tmp242_, "Deprecated", TRUE, NULL);
-																							}
+																						if (g_strcmp0 (_tmp236_, "type_arguments") == 0) {
+																							ValaDataType* _tmp237_;
+																							gchar** _tmp238_;
+																							gint _tmp238__length1;
+																							const gchar* _tmp239_;
+																							gchar* _tmp240_ = NULL;
+																							gchar* _tmp241_;
+																							_tmp237_ = return_type;
+																							_tmp238_ = nv;
+																							_tmp238__length1 = nv_length1;
+																							_tmp239_ = _tmp238_[1];
+																							_tmp240_ = vala_gidl_parser_eval (self, _tmp239_);
+																							_tmp241_ = _tmp240_;
+																							vala_gidl_parser_parse_type_arguments_from_string (self, _tmp237_, _tmp241_, NULL);
+																							_g_free0 (_tmp241_);
 																						} else {
-																							gchar** _tmp243_;
-																							gint _tmp243__length1;
-																							const gchar* _tmp244_;
-																							_tmp243_ = nv;
-																							_tmp243__length1 = nv_length1;
-																							_tmp244_ = _tmp243_[0];
-																							if (g_strcmp0 (_tmp244_, "replacement") == 0) {
-																								ValaMethod* _tmp245_;
-																								gchar** _tmp246_;
-																								gint _tmp246__length1;
-																								const gchar* _tmp247_;
-																								gchar* _tmp248_ = NULL;
-																								gchar* _tmp249_;
-																								_tmp245_ = m;
-																								_tmp246_ = nv;
-																								_tmp246__length1 = nv_length1;
-																								_tmp247_ = _tmp246_[1];
-																								_tmp248_ = vala_gidl_parser_eval (self, _tmp247_);
-																								_tmp249_ = _tmp248_;
-																								vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp245_, "Deprecated", "replacement", _tmp249_, NULL);
-																								_g_free0 (_tmp249_);
+																							gchar** _tmp242_;
+																							gint _tmp242__length1;
+																							const gchar* _tmp243_;
+																							_tmp242_ = nv;
+																							_tmp242__length1 = nv_length1;
+																							_tmp243_ = _tmp242_[0];
+																							if (g_strcmp0 (_tmp243_, "deprecated") == 0) {
+																								gchar** _tmp244_;
+																								gint _tmp244__length1;
+																								const gchar* _tmp245_;
+																								gchar* _tmp246_ = NULL;
+																								gchar* _tmp247_;
+																								gboolean _tmp248_;
+																								_tmp244_ = nv;
+																								_tmp244__length1 = nv_length1;
+																								_tmp245_ = _tmp244_[1];
+																								_tmp246_ = vala_gidl_parser_eval (self, _tmp245_);
+																								_tmp247_ = _tmp246_;
+																								_tmp248_ = g_strcmp0 (_tmp247_, "1") == 0;
+																								_g_free0 (_tmp247_);
+																								if (_tmp248_) {
+																									ValaMethod* _tmp249_;
+																									_tmp249_ = m;
+																									vala_code_node_set_attribute ((ValaCodeNode*) _tmp249_, "Deprecated", TRUE, NULL);
+																								}
 																							} else {
 																								gchar** _tmp250_;
 																								gint _tmp250__length1;
@@ -13884,7 +13907,7 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 																								_tmp250_ = nv;
 																								_tmp250__length1 = nv_length1;
 																								_tmp251_ = _tmp250_[0];
-																								if (g_strcmp0 (_tmp251_, "deprecated_since") == 0) {
+																								if (g_strcmp0 (_tmp251_, "replacement") == 0) {
 																									ValaMethod* _tmp252_;
 																									gchar** _tmp253_;
 																									gint _tmp253__length1;
@@ -13897,7 +13920,7 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 																									_tmp254_ = _tmp253_[1];
 																									_tmp255_ = vala_gidl_parser_eval (self, _tmp254_);
 																									_tmp256_ = _tmp255_;
-																									vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp252_, "Deprecated", "since", _tmp256_, NULL);
+																									vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp252_, "Deprecated", "replacement", _tmp256_, NULL);
 																									_g_free0 (_tmp256_);
 																								} else {
 																									gchar** _tmp257_;
@@ -13906,7 +13929,7 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 																									_tmp257_ = nv;
 																									_tmp257__length1 = nv_length1;
 																									_tmp258_ = _tmp257_[0];
-																									if (g_strcmp0 (_tmp258_, "cheader_filename") == 0) {
+																									if (g_strcmp0 (_tmp258_, "deprecated_since") == 0) {
 																										ValaMethod* _tmp259_;
 																										gchar** _tmp260_;
 																										gint _tmp260__length1;
@@ -13919,7 +13942,7 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 																										_tmp261_ = _tmp260_[1];
 																										_tmp262_ = vala_gidl_parser_eval (self, _tmp261_);
 																										_tmp263_ = _tmp262_;
-																										vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp259_, "CCode", "cheader_filename", _tmp263_, NULL);
+																										vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp259_, "Deprecated", "since", _tmp263_, NULL);
 																										_g_free0 (_tmp263_);
 																									} else {
 																										gchar** _tmp264_;
@@ -13928,73 +13951,73 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 																										_tmp264_ = nv;
 																										_tmp264__length1 = nv_length1;
 																										_tmp265_ = _tmp264_[0];
-																										if (g_strcmp0 (_tmp265_, "abstract") == 0) {
-																											gchar** _tmp266_;
-																											gint _tmp266__length1;
-																											const gchar* _tmp267_;
-																											gchar* _tmp268_ = NULL;
-																											gchar* _tmp269_;
-																											gboolean _tmp270_;
-																											_tmp266_ = nv;
-																											_tmp266__length1 = nv_length1;
-																											_tmp267_ = _tmp266_[1];
-																											_tmp268_ = vala_gidl_parser_eval (self, _tmp267_);
-																											_tmp269_ = _tmp268_;
-																											_tmp270_ = g_strcmp0 (_tmp269_, "1") == 0;
-																											_g_free0 (_tmp269_);
-																											if (_tmp270_) {
-																												ValaMethod* _tmp271_;
-																												_tmp271_ = m;
-																												vala_method_set_is_abstract (_tmp271_, TRUE);
-																											}
+																										if (g_strcmp0 (_tmp265_, "cheader_filename") == 0) {
+																											ValaMethod* _tmp266_;
+																											gchar** _tmp267_;
+																											gint _tmp267__length1;
+																											const gchar* _tmp268_;
+																											gchar* _tmp269_ = NULL;
+																											gchar* _tmp270_;
+																											_tmp266_ = m;
+																											_tmp267_ = nv;
+																											_tmp267__length1 = nv_length1;
+																											_tmp268_ = _tmp267_[1];
+																											_tmp269_ = vala_gidl_parser_eval (self, _tmp268_);
+																											_tmp270_ = _tmp269_;
+																											vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp266_, "CCode", "cheader_filename", _tmp270_, NULL);
+																											_g_free0 (_tmp270_);
 																										} else {
-																											gchar** _tmp272_;
-																											gint _tmp272__length1;
-																											const gchar* _tmp273_;
-																											_tmp272_ = nv;
-																											_tmp272__length1 = nv_length1;
-																											_tmp273_ = _tmp272_[0];
-																											if (g_strcmp0 (_tmp273_, "virtual") == 0) {
-																												gchar** _tmp274_;
-																												gint _tmp274__length1;
-																												const gchar* _tmp275_;
-																												gchar* _tmp276_ = NULL;
-																												gchar* _tmp277_;
-																												gboolean _tmp278_;
-																												_tmp274_ = nv;
-																												_tmp274__length1 = nv_length1;
-																												_tmp275_ = _tmp274_[1];
-																												_tmp276_ = vala_gidl_parser_eval (self, _tmp275_);
-																												_tmp277_ = _tmp276_;
-																												_tmp278_ = g_strcmp0 (_tmp277_, "1") == 0;
-																												_g_free0 (_tmp277_);
-																												if (_tmp278_) {
-																													ValaMethod* _tmp279_;
-																													_tmp279_ = m;
-																													vala_method_set_is_virtual (_tmp279_, TRUE);
+																											gchar** _tmp271_;
+																											gint _tmp271__length1;
+																											const gchar* _tmp272_;
+																											_tmp271_ = nv;
+																											_tmp271__length1 = nv_length1;
+																											_tmp272_ = _tmp271_[0];
+																											if (g_strcmp0 (_tmp272_, "abstract") == 0) {
+																												gchar** _tmp273_;
+																												gint _tmp273__length1;
+																												const gchar* _tmp274_;
+																												gchar* _tmp275_ = NULL;
+																												gchar* _tmp276_;
+																												gboolean _tmp277_;
+																												_tmp273_ = nv;
+																												_tmp273__length1 = nv_length1;
+																												_tmp274_ = _tmp273_[1];
+																												_tmp275_ = vala_gidl_parser_eval (self, _tmp274_);
+																												_tmp276_ = _tmp275_;
+																												_tmp277_ = g_strcmp0 (_tmp276_, "1") == 0;
+																												_g_free0 (_tmp276_);
+																												if (_tmp277_) {
+																													ValaMethod* _tmp278_;
+																													_tmp278_ = m;
+																													vala_method_set_is_abstract (_tmp278_, TRUE);
 																												}
 																											} else {
-																												gchar** _tmp280_;
-																												gint _tmp280__length1;
-																												const gchar* _tmp281_;
-																												_tmp280_ = nv;
-																												_tmp280__length1 = nv_length1;
-																												_tmp281_ = _tmp280_[0];
-																												if (g_strcmp0 (_tmp281_, "vfunc_name") == 0) {
-																													ValaMethod* _tmp282_;
-																													gchar** _tmp283_;
-																													gint _tmp283__length1;
-																													const gchar* _tmp284_;
-																													gchar* _tmp285_ = NULL;
-																													gchar* _tmp286_;
-																													_tmp282_ = m;
-																													_tmp283_ = nv;
-																													_tmp283__length1 = nv_length1;
-																													_tmp284_ = _tmp283_[1];
-																													_tmp285_ = vala_gidl_parser_eval (self, _tmp284_);
-																													_tmp286_ = _tmp285_;
-																													vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp282_, "CCode", "vfunc_name", _tmp286_, NULL);
-																													_g_free0 (_tmp286_);
+																												gchar** _tmp279_;
+																												gint _tmp279__length1;
+																												const gchar* _tmp280_;
+																												_tmp279_ = nv;
+																												_tmp279__length1 = nv_length1;
+																												_tmp280_ = _tmp279_[0];
+																												if (g_strcmp0 (_tmp280_, "virtual") == 0) {
+																													gchar** _tmp281_;
+																													gint _tmp281__length1;
+																													const gchar* _tmp282_;
+																													gchar* _tmp283_ = NULL;
+																													gchar* _tmp284_;
+																													gboolean _tmp285_;
+																													_tmp281_ = nv;
+																													_tmp281__length1 = nv_length1;
+																													_tmp282_ = _tmp281_[1];
+																													_tmp283_ = vala_gidl_parser_eval (self, _tmp282_);
+																													_tmp284_ = _tmp283_;
+																													_tmp285_ = g_strcmp0 (_tmp284_, "1") == 0;
+																													_g_free0 (_tmp284_);
+																													if (_tmp285_) {
+																														ValaMethod* _tmp286_;
+																														_tmp286_ = m;
+																														vala_method_set_is_virtual (_tmp286_, TRUE);
+																													}
 																												} else {
 																													gchar** _tmp287_;
 																													gint _tmp287__length1;
@@ -14002,7 +14025,7 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 																													_tmp287_ = nv;
 																													_tmp287__length1 = nv_length1;
 																													_tmp288_ = _tmp287_[0];
-																													if (g_strcmp0 (_tmp288_, "finish_name") == 0) {
+																													if (g_strcmp0 (_tmp288_, "vfunc_name") == 0) {
 																														ValaMethod* _tmp289_;
 																														gchar** _tmp290_;
 																														gint _tmp290__length1;
@@ -14015,7 +14038,7 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 																														_tmp291_ = _tmp290_[1];
 																														_tmp292_ = vala_gidl_parser_eval (self, _tmp291_);
 																														_tmp293_ = _tmp292_;
-																														vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp289_, "CCode", "finish_name", _tmp293_, NULL);
+																														vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp289_, "CCode", "vfunc_name", _tmp293_, NULL);
 																														_g_free0 (_tmp293_);
 																													} else {
 																														gchar** _tmp294_;
@@ -14024,130 +14047,153 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 																														_tmp294_ = nv;
 																														_tmp294__length1 = nv_length1;
 																														_tmp295_ = _tmp294_[0];
-																														if (g_strcmp0 (_tmp295_, "async") == 0) {
-																															gchar** _tmp296_;
-																															gint _tmp296__length1;
-																															const gchar* _tmp297_;
-																															gchar* _tmp298_ = NULL;
-																															gchar* _tmp299_;
-																															gboolean _tmp300_;
-																															_tmp296_ = nv;
-																															_tmp296__length1 = nv_length1;
-																															_tmp297_ = _tmp296_[1];
-																															_tmp298_ = vala_gidl_parser_eval (self, _tmp297_);
-																															_tmp299_ = _tmp298_;
-																															_tmp300_ = g_strcmp0 (_tmp299_, "1") == 0;
-																															_g_free0 (_tmp299_);
-																															if (_tmp300_) {
-																																ValaMethod* _tmp301_;
-																																_tmp301_ = m;
-																																vala_method_set_coroutine (_tmp301_, TRUE);
-																															}
+																														if (g_strcmp0 (_tmp295_, "finish_name") == 0) {
+																															ValaMethod* _tmp296_;
+																															gchar** _tmp297_;
+																															gint _tmp297__length1;
+																															const gchar* _tmp298_;
+																															gchar* _tmp299_ = NULL;
+																															gchar* _tmp300_;
+																															_tmp296_ = m;
+																															_tmp297_ = nv;
+																															_tmp297__length1 = nv_length1;
+																															_tmp298_ = _tmp297_[1];
+																															_tmp299_ = vala_gidl_parser_eval (self, _tmp298_);
+																															_tmp300_ = _tmp299_;
+																															vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp296_, "CCode", "finish_name", _tmp300_, NULL);
+																															_g_free0 (_tmp300_);
 																														} else {
-																															gchar** _tmp302_;
-																															gint _tmp302__length1;
-																															const gchar* _tmp303_;
-																															_tmp302_ = nv;
-																															_tmp302__length1 = nv_length1;
-																															_tmp303_ = _tmp302_[0];
-																															if (g_strcmp0 (_tmp303_, "parent") == 0) {
-																																gchar** _tmp304_;
-																																gint _tmp304__length1;
-																																const gchar* _tmp305_;
-																																gchar* _tmp306_ = NULL;
-																																gchar* _tmp307_;
-																																ValaSymbol* _tmp308_ = NULL;
-																																ValaSymbol* _tmp309_;
-																																gchar* _tmp310_ = NULL;
-																																gchar* prefix;
-																																const gchar* _tmp311_;
-																																const gchar* _tmp312_;
-																																gboolean _tmp313_ = FALSE;
-																																_tmp304_ = nv;
-																																_tmp304__length1 = nv_length1;
-																																_tmp305_ = _tmp304_[1];
-																																_tmp306_ = vala_gidl_parser_eval (self, _tmp305_);
-																																_tmp307_ = _tmp306_;
-																																_tmp308_ = vala_gidl_parser_get_container_from_name (self, _tmp307_);
-																																_vala_code_node_unref0 (container);
-																																container = _tmp308_;
-																																_g_free0 (_tmp307_);
-																																_tmp309_ = container;
-																																_tmp310_ = vala_gidl_parser_get_lower_case_cprefix (self, _tmp309_);
-																																prefix = _tmp310_;
-																																_tmp311_ = symbol;
-																																_tmp312_ = prefix;
-																																_tmp313_ = g_str_has_prefix (_tmp311_, _tmp312_);
-																																if (_tmp313_) {
-																																	ValaMethod* _tmp314_;
-																																	const gchar* _tmp315_;
-																																	const gchar* _tmp316_;
-																																	gint _tmp317_;
-																																	gint _tmp318_;
-																																	gchar* _tmp319_ = NULL;
-																																	gchar* _tmp320_;
-																																	_tmp314_ = m;
-																																	_tmp315_ = symbol;
-																																	_tmp316_ = prefix;
-																																	_tmp317_ = strlen (_tmp316_);
-																																	_tmp318_ = _tmp317_;
-																																	_tmp319_ = string_substring (_tmp315_, (glong) _tmp318_, (glong) (-1));
-																																	_tmp320_ = _tmp319_;
-																																	vala_symbol_set_name ((ValaSymbol*) _tmp314_, _tmp320_);
-																																	_g_free0 (_tmp320_);
+																															gchar** _tmp301_;
+																															gint _tmp301__length1;
+																															const gchar* _tmp302_;
+																															_tmp301_ = nv;
+																															_tmp301__length1 = nv_length1;
+																															_tmp302_ = _tmp301_[0];
+																															if (g_strcmp0 (_tmp302_, "async") == 0) {
+																																gchar** _tmp303_;
+																																gint _tmp303__length1;
+																																const gchar* _tmp304_;
+																																gchar* _tmp305_ = NULL;
+																																gchar* _tmp306_;
+																																gboolean _tmp307_;
+																																_tmp303_ = nv;
+																																_tmp303__length1 = nv_length1;
+																																_tmp304_ = _tmp303_[1];
+																																_tmp305_ = vala_gidl_parser_eval (self, _tmp304_);
+																																_tmp306_ = _tmp305_;
+																																_tmp307_ = g_strcmp0 (_tmp306_, "1") == 0;
+																																_g_free0 (_tmp306_);
+																																if (_tmp307_) {
+																																	ValaMethod* _tmp308_;
+																																	_tmp308_ = m;
+																																	vala_method_set_coroutine (_tmp308_, TRUE);
 																																}
-																																_g_free0 (prefix);
 																															} else {
-																																gchar** _tmp321_;
-																																gint _tmp321__length1;
-																																const gchar* _tmp322_;
-																																_tmp321_ = nv;
-																																_tmp321__length1 = nv_length1;
-																																_tmp322_ = _tmp321_[0];
-																																if (g_strcmp0 (_tmp322_, "experimental") == 0) {
-																																	gchar** _tmp323_;
-																																	gint _tmp323__length1;
-																																	const gchar* _tmp324_;
-																																	gchar* _tmp325_ = NULL;
-																																	gchar* _tmp326_;
-																																	gboolean _tmp327_;
-																																	_tmp323_ = nv;
-																																	_tmp323__length1 = nv_length1;
-																																	_tmp324_ = _tmp323_[1];
-																																	_tmp325_ = vala_gidl_parser_eval (self, _tmp324_);
-																																	_tmp326_ = _tmp325_;
-																																	_tmp327_ = g_strcmp0 (_tmp326_, "1") == 0;
-																																	_g_free0 (_tmp326_);
-																																	if (_tmp327_) {
-																																		ValaMethod* _tmp328_;
-																																		_tmp328_ = m;
-																																		vala_code_node_set_attribute ((ValaCodeNode*) _tmp328_, "Experimental", TRUE, NULL);
+																																gchar** _tmp309_;
+																																gint _tmp309__length1;
+																																const gchar* _tmp310_;
+																																_tmp309_ = nv;
+																																_tmp309__length1 = nv_length1;
+																																_tmp310_ = _tmp309_[0];
+																																if (g_strcmp0 (_tmp310_, "parent") == 0) {
+																																	gchar** _tmp311_;
+																																	gint _tmp311__length1;
+																																	const gchar* _tmp312_;
+																																	gchar* _tmp313_ = NULL;
+																																	gchar* _tmp314_;
+																																	ValaSymbol* _tmp315_ = NULL;
+																																	ValaSymbol* _tmp316_;
+																																	gchar* _tmp317_ = NULL;
+																																	gchar* prefix;
+																																	const gchar* _tmp318_;
+																																	const gchar* _tmp319_;
+																																	gboolean _tmp320_ = FALSE;
+																																	_tmp311_ = nv;
+																																	_tmp311__length1 = nv_length1;
+																																	_tmp312_ = _tmp311_[1];
+																																	_tmp313_ = vala_gidl_parser_eval (self, _tmp312_);
+																																	_tmp314_ = _tmp313_;
+																																	_tmp315_ = vala_gidl_parser_get_container_from_name (self, _tmp314_);
+																																	_vala_code_node_unref0 (container);
+																																	container = _tmp315_;
+																																	_g_free0 (_tmp314_);
+																																	_tmp316_ = container;
+																																	_tmp317_ = vala_gidl_parser_get_lower_case_cprefix (self, _tmp316_);
+																																	prefix = _tmp317_;
+																																	_tmp318_ = symbol;
+																																	_tmp319_ = prefix;
+																																	_tmp320_ = g_str_has_prefix (_tmp318_, _tmp319_);
+																																	if (_tmp320_) {
+																																		ValaMethod* _tmp321_;
+																																		const gchar* _tmp322_;
+																																		const gchar* _tmp323_;
+																																		gint _tmp324_;
+																																		gint _tmp325_;
+																																		gchar* _tmp326_ = NULL;
+																																		gchar* _tmp327_;
+																																		_tmp321_ = m;
+																																		_tmp322_ = symbol;
+																																		_tmp323_ = prefix;
+																																		_tmp324_ = strlen (_tmp323_);
+																																		_tmp325_ = _tmp324_;
+																																		_tmp326_ = string_substring (_tmp322_, (glong) _tmp325_, (glong) (-1));
+																																		_tmp327_ = _tmp326_;
+																																		vala_symbol_set_name ((ValaSymbol*) _tmp321_, _tmp327_);
+																																		_g_free0 (_tmp327_);
 																																	}
+																																	_g_free0 (prefix);
 																																} else {
-																																	gchar** _tmp329_;
-																																	gint _tmp329__length1;
-																																	const gchar* _tmp330_;
-																																	_tmp329_ = nv;
-																																	_tmp329__length1 = nv_length1;
-																																	_tmp330_ = _tmp329_[0];
-																																	if (g_strcmp0 (_tmp330_, "simple_generics") == 0) {
-																																		gchar** _tmp331_;
-																																		gint _tmp331__length1;
-																																		const gchar* _tmp332_;
-																																		gchar* _tmp333_ = NULL;
-																																		gchar* _tmp334_;
-																																		gboolean _tmp335_;
-																																		_tmp331_ = nv;
-																																		_tmp331__length1 = nv_length1;
-																																		_tmp332_ = _tmp331_[1];
-																																		_tmp333_ = vala_gidl_parser_eval (self, _tmp332_);
-																																		_tmp334_ = _tmp333_;
-																																		_tmp335_ = g_strcmp0 (_tmp334_, "1") == 0;
-																																		_g_free0 (_tmp334_);
-																																		if (_tmp335_) {
-																																			ValaMethod* _tmp336_;
-																																			_tmp336_ = m;
-																																			vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp336_, "CCode", "simple_generics", TRUE, NULL);
+																																	gchar** _tmp328_;
+																																	gint _tmp328__length1;
+																																	const gchar* _tmp329_;
+																																	_tmp328_ = nv;
+																																	_tmp328__length1 = nv_length1;
+																																	_tmp329_ = _tmp328_[0];
+																																	if (g_strcmp0 (_tmp329_, "experimental") == 0) {
+																																		gchar** _tmp330_;
+																																		gint _tmp330__length1;
+																																		const gchar* _tmp331_;
+																																		gchar* _tmp332_ = NULL;
+																																		gchar* _tmp333_;
+																																		gboolean _tmp334_;
+																																		_tmp330_ = nv;
+																																		_tmp330__length1 = nv_length1;
+																																		_tmp331_ = _tmp330_[1];
+																																		_tmp332_ = vala_gidl_parser_eval (self, _tmp331_);
+																																		_tmp333_ = _tmp332_;
+																																		_tmp334_ = g_strcmp0 (_tmp333_, "1") == 0;
+																																		_g_free0 (_tmp333_);
+																																		if (_tmp334_) {
+																																			ValaMethod* _tmp335_;
+																																			_tmp335_ = m;
+																																			vala_code_node_set_attribute ((ValaCodeNode*) _tmp335_, "Experimental", TRUE, NULL);
+																																		}
+																																	} else {
+																																		gchar** _tmp336_;
+																																		gint _tmp336__length1;
+																																		const gchar* _tmp337_;
+																																		_tmp336_ = nv;
+																																		_tmp336__length1 = nv_length1;
+																																		_tmp337_ = _tmp336_[0];
+																																		if (g_strcmp0 (_tmp337_, "simple_generics") == 0) {
+																																			gchar** _tmp338_;
+																																			gint _tmp338__length1;
+																																			const gchar* _tmp339_;
+																																			gchar* _tmp340_ = NULL;
+																																			gchar* _tmp341_;
+																																			gboolean _tmp342_;
+																																			_tmp338_ = nv;
+																																			_tmp338__length1 = nv_length1;
+																																			_tmp339_ = _tmp338_[1];
+																																			_tmp340_ = vala_gidl_parser_eval (self, _tmp339_);
+																																			_tmp341_ = _tmp340_;
+																																			_tmp342_ = g_strcmp0 (_tmp341_, "1") == 0;
+																																			_g_free0 (_tmp341_);
+																																			if (_tmp342_) {
+																																				ValaMethod* _tmp343_;
+																																				_tmp343_ = m;
+																																				vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp343_, "CCode", "simple_generics", TRUE, NULL);
+																																			}
 																																		}
 																																	}
 																																}
@@ -14187,42 +14233,42 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 	first = TRUE;
 	last_param = NULL;
 	last_param_type = NULL;
-	_tmp337_ = parameters;
+	_tmp344_ = parameters;
 	{
 		GList* param_collection = NULL;
 		GList* param_it = NULL;
-		param_collection = _tmp337_;
+		param_collection = _tmp344_;
 		for (param_it = param_collection; param_it != NULL; param_it = param_it->next) {
 			GIdlNodeParam* param = NULL;
 			param = (GIdlNodeParam*) param_it->data;
 			{
-				GIdlNodeParam* _tmp338_;
+				GIdlNodeParam* _tmp345_;
 				GIdlNode* param_node;
-				gboolean _tmp339_;
-				gboolean _tmp407_ = FALSE;
-				GIdlNodeParam* _tmp408_;
-				GIdlNodeType* _tmp409_;
-				const gchar* _tmp410_;
-				gboolean _tmp418_;
-				gboolean _tmp420_ = FALSE;
-				gboolean _tmp421_;
-				gboolean _tmp424_;
-				GIdlNode* _tmp431_;
-				const gchar* _tmp432_;
-				gchar* _tmp433_;
+				gboolean _tmp346_;
+				gboolean _tmp414_ = FALSE;
+				GIdlNodeParam* _tmp415_;
+				GIdlNodeType* _tmp416_;
+				const gchar* _tmp417_;
+				gboolean _tmp425_;
+				gboolean _tmp427_ = FALSE;
+				gboolean _tmp428_;
+				gboolean _tmp431_;
+				GIdlNode* _tmp438_;
+				const gchar* _tmp439_;
+				gchar* _tmp440_;
 				gchar* param_name;
-				const gchar* _tmp434_;
+				const gchar* _tmp441_;
 				ValaParameterDirection direction = 0;
-				GIdlNodeParam* _tmp438_;
-				ValaParameterDirection _tmp439_ = 0;
-				ValaDataType* _tmp440_ = NULL;
+				GIdlNodeParam* _tmp445_;
+				ValaParameterDirection _tmp446_ = 0;
+				ValaDataType* _tmp447_ = NULL;
 				ValaDataType* param_type;
-				const gchar* _tmp441_;
-				ValaDataType* _tmp442_;
-				ValaParameter* _tmp443_;
+				const gchar* _tmp448_;
+				ValaDataType* _tmp449_;
+				ValaParameter* _tmp450_;
 				ValaParameter* p;
-				ValaParameter* _tmp444_;
-				ValaParameterDirection _tmp445_;
+				ValaParameter* _tmp451_;
+				ValaParameterDirection _tmp452_;
 				gboolean hide_param;
 				gboolean show_param;
 				gboolean set_array_length_pos;
@@ -14231,308 +14277,308 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 				gdouble delegate_target_pos;
 				gboolean array_requested;
 				gboolean out_requested;
-				const gchar* _tmp446_;
-				GIdlNode* _tmp447_;
-				const gchar* _tmp448_;
-				gchar* _tmp449_ = NULL;
-				gchar* _tmp450_;
-				gint _tmp451_ = 0;
-				gchar** _tmp452_ = NULL;
-				gchar** _tmp453_;
-				gint _tmp453__length1;
-				gboolean _tmp720_ = FALSE;
-				ValaParameter* _tmp721_;
-				gboolean _tmp730_;
-				gboolean _tmp746_ = FALSE;
-				gboolean _tmp747_;
-				gboolean _tmp749_;
-				ValaParameter* _tmp758_;
-				ValaParameter* _tmp759_;
-				ValaDataType* _tmp760_;
-				ValaDataType* _tmp761_;
-				_tmp338_ = param;
-				param_node = (GIdlNode*) _tmp338_;
-				_tmp339_ = first;
-				if (_tmp339_) {
-					gboolean _tmp340_ = FALSE;
-					gboolean _tmp341_ = FALSE;
-					gboolean _tmp342_ = FALSE;
-					ValaMethod* _tmp343_;
-					gboolean _tmp345_;
-					gboolean _tmp349_;
-					gboolean _tmp361_;
+				const gchar* _tmp453_;
+				GIdlNode* _tmp454_;
+				const gchar* _tmp455_;
+				gchar* _tmp456_ = NULL;
+				gchar* _tmp457_;
+				gint _tmp458_ = 0;
+				gchar** _tmp459_ = NULL;
+				gchar** _tmp460_;
+				gint _tmp460__length1;
+				gboolean _tmp727_ = FALSE;
+				ValaParameter* _tmp728_;
+				gboolean _tmp737_;
+				gboolean _tmp753_ = FALSE;
+				gboolean _tmp754_;
+				gboolean _tmp756_;
+				ValaParameter* _tmp765_;
+				ValaParameter* _tmp766_;
+				ValaDataType* _tmp767_;
+				ValaDataType* _tmp768_;
+				_tmp345_ = param;
+				param_node = (GIdlNode*) _tmp345_;
+				_tmp346_ = first;
+				if (_tmp346_) {
+					gboolean _tmp347_ = FALSE;
+					gboolean _tmp348_ = FALSE;
+					gboolean _tmp349_ = FALSE;
+					ValaMethod* _tmp350_;
+					gboolean _tmp352_;
+					gboolean _tmp356_;
+					gboolean _tmp368_;
 					first = FALSE;
-					_tmp343_ = m;
-					if (!VALA_IS_CREATION_METHOD (_tmp343_)) {
-						ValaTypeSymbol* _tmp344_;
-						_tmp344_ = self->priv->current_data_type;
-						_tmp342_ = _tmp344_ != NULL;
+					_tmp350_ = m;
+					if (!VALA_IS_CREATION_METHOD (_tmp350_)) {
+						ValaTypeSymbol* _tmp351_;
+						_tmp351_ = self->priv->current_data_type;
+						_tmp349_ = _tmp351_ != NULL;
 					} else {
-						_tmp342_ = FALSE;
+						_tmp349_ = FALSE;
 					}
-					_tmp345_ = _tmp342_;
-					if (_tmp345_) {
-						GIdlNodeParam* _tmp346_;
-						GIdlNodeType* _tmp347_;
-						gboolean _tmp348_;
-						_tmp346_ = param;
-						_tmp347_ = _tmp346_->type;
-						_tmp348_ = _tmp347_->is_interface;
-						_tmp341_ = _tmp348_;
+					_tmp352_ = _tmp349_;
+					if (_tmp352_) {
+						GIdlNodeParam* _tmp353_;
+						GIdlNodeType* _tmp354_;
+						gboolean _tmp355_;
+						_tmp353_ = param;
+						_tmp354_ = _tmp353_->type;
+						_tmp355_ = _tmp354_->is_interface;
+						_tmp348_ = _tmp355_;
 					} else {
-						_tmp341_ = FALSE;
+						_tmp348_ = FALSE;
 					}
-					_tmp349_ = _tmp341_;
-					if (_tmp349_) {
-						gboolean _tmp350_ = FALSE;
-						GIdlNode* _tmp351_;
-						const gchar* _tmp352_;
-						gboolean _tmp360_;
-						_tmp351_ = param_node;
-						_tmp352_ = _tmp351_->name;
-						if (g_strcmp0 (_tmp352_, "self") == 0) {
-							_tmp350_ = TRUE;
+					_tmp356_ = _tmp348_;
+					if (_tmp356_) {
+						gboolean _tmp357_ = FALSE;
+						GIdlNode* _tmp358_;
+						const gchar* _tmp359_;
+						gboolean _tmp367_;
+						_tmp358_ = param_node;
+						_tmp359_ = _tmp358_->name;
+						if (g_strcmp0 (_tmp359_, "self") == 0) {
+							_tmp357_ = TRUE;
 						} else {
-							GIdlNodeParam* _tmp353_;
-							GIdlNodeType* _tmp354_;
-							const gchar* _tmp355_;
-							ValaTypeSymbol* _tmp356_;
-							gchar* _tmp357_ = NULL;
-							gchar* _tmp358_;
-							gboolean _tmp359_ = FALSE;
-							_tmp353_ = param;
-							_tmp354_ = _tmp353_->type;
-							_tmp355_ = _tmp354_->interface;
-							_tmp356_ = self->priv->current_data_type;
-							_tmp357_ = vala_gidl_parser_get_cname (self, (ValaSymbol*) _tmp356_, NULL);
-							_tmp358_ = _tmp357_;
-							_tmp359_ = g_str_has_suffix (_tmp355_, _tmp358_);
-							_tmp350_ = _tmp359_;
-							_g_free0 (_tmp358_);
+							GIdlNodeParam* _tmp360_;
+							GIdlNodeType* _tmp361_;
+							const gchar* _tmp362_;
+							ValaTypeSymbol* _tmp363_;
+							gchar* _tmp364_ = NULL;
+							gchar* _tmp365_;
+							gboolean _tmp366_ = FALSE;
+							_tmp360_ = param;
+							_tmp361_ = _tmp360_->type;
+							_tmp362_ = _tmp361_->interface;
+							_tmp363_ = self->priv->current_data_type;
+							_tmp364_ = vala_gidl_parser_get_cname (self, (ValaSymbol*) _tmp363_, NULL);
+							_tmp365_ = _tmp364_;
+							_tmp366_ = g_str_has_suffix (_tmp362_, _tmp365_);
+							_tmp357_ = _tmp366_;
+							_g_free0 (_tmp365_);
 						}
-						_tmp360_ = _tmp350_;
-						_tmp340_ = _tmp360_;
+						_tmp367_ = _tmp357_;
+						_tmp347_ = _tmp367_;
 					} else {
-						_tmp340_ = FALSE;
+						_tmp347_ = FALSE;
 					}
-					_tmp361_ = _tmp340_;
-					if (_tmp361_) {
+					_tmp368_ = _tmp347_;
+					if (_tmp368_) {
 						continue;
 					} else {
-						gboolean _tmp362_ = FALSE;
-						gboolean _tmp363_ = FALSE;
-						gboolean _tmp364_ = FALSE;
-						ValaMethod* _tmp365_;
-						gboolean _tmp367_;
-						gboolean _tmp371_;
-						gboolean _tmp385_;
-						_tmp365_ = m;
-						if (!VALA_IS_CREATION_METHOD (_tmp365_)) {
-							ValaTypeSymbol* _tmp366_;
-							_tmp366_ = self->priv->current_data_type;
-							_tmp364_ = _tmp366_ != NULL;
+						gboolean _tmp369_ = FALSE;
+						gboolean _tmp370_ = FALSE;
+						gboolean _tmp371_ = FALSE;
+						ValaMethod* _tmp372_;
+						gboolean _tmp374_;
+						gboolean _tmp378_;
+						gboolean _tmp392_;
+						_tmp372_ = m;
+						if (!VALA_IS_CREATION_METHOD (_tmp372_)) {
+							ValaTypeSymbol* _tmp373_;
+							_tmp373_ = self->priv->current_data_type;
+							_tmp371_ = _tmp373_ != NULL;
 						} else {
-							_tmp364_ = FALSE;
+							_tmp371_ = FALSE;
 						}
-						_tmp367_ = _tmp364_;
-						if (_tmp367_) {
-							GIdlNodeParam* _tmp368_;
-							GIdlNodeType* _tmp369_;
-							gboolean _tmp370_;
-							_tmp368_ = param;
-							_tmp369_ = _tmp368_->type;
-							_tmp370_ = _tmp369_->is_interface;
-							_tmp363_ = _tmp370_;
+						_tmp374_ = _tmp371_;
+						if (_tmp374_) {
+							GIdlNodeParam* _tmp375_;
+							GIdlNodeType* _tmp376_;
+							gboolean _tmp377_;
+							_tmp375_ = param;
+							_tmp376_ = _tmp375_->type;
+							_tmp377_ = _tmp376_->is_interface;
+							_tmp370_ = _tmp377_;
 						} else {
-							_tmp363_ = FALSE;
+							_tmp370_ = FALSE;
 						}
-						_tmp371_ = _tmp363_;
-						if (_tmp371_) {
-							gboolean _tmp372_ = FALSE;
-							GIdlNode* _tmp373_;
-							const gchar* _tmp374_;
-							gboolean _tmp384_;
-							_tmp373_ = param_node;
-							_tmp374_ = _tmp373_->name;
-							if (g_strcmp0 (_tmp374_, "klass") == 0) {
-								_tmp372_ = TRUE;
+						_tmp378_ = _tmp370_;
+						if (_tmp378_) {
+							gboolean _tmp379_ = FALSE;
+							GIdlNode* _tmp380_;
+							const gchar* _tmp381_;
+							gboolean _tmp391_;
+							_tmp380_ = param_node;
+							_tmp381_ = _tmp380_->name;
+							if (g_strcmp0 (_tmp381_, "klass") == 0) {
+								_tmp379_ = TRUE;
 							} else {
-								GIdlNodeParam* _tmp375_;
-								GIdlNodeType* _tmp376_;
-								const gchar* _tmp377_;
-								ValaTypeSymbol* _tmp378_;
-								gchar* _tmp379_ = NULL;
-								gchar* _tmp380_;
-								gchar* _tmp381_ = NULL;
-								gchar* _tmp382_;
-								gboolean _tmp383_ = FALSE;
-								_tmp375_ = param;
-								_tmp376_ = _tmp375_->type;
-								_tmp377_ = _tmp376_->interface;
-								_tmp378_ = self->priv->current_data_type;
-								_tmp379_ = vala_gidl_parser_get_cname (self, (ValaSymbol*) _tmp378_, NULL);
-								_tmp380_ = _tmp379_;
-								_tmp381_ = g_strdup_printf ("%sClass", _tmp380_);
-								_tmp382_ = _tmp381_;
-								_tmp383_ = g_str_has_suffix (_tmp377_, _tmp382_);
-								_tmp372_ = _tmp383_;
-								_g_free0 (_tmp382_);
-								_g_free0 (_tmp380_);
+								GIdlNodeParam* _tmp382_;
+								GIdlNodeType* _tmp383_;
+								const gchar* _tmp384_;
+								ValaTypeSymbol* _tmp385_;
+								gchar* _tmp386_ = NULL;
+								gchar* _tmp387_;
+								gchar* _tmp388_ = NULL;
+								gchar* _tmp389_;
+								gboolean _tmp390_ = FALSE;
+								_tmp382_ = param;
+								_tmp383_ = _tmp382_->type;
+								_tmp384_ = _tmp383_->interface;
+								_tmp385_ = self->priv->current_data_type;
+								_tmp386_ = vala_gidl_parser_get_cname (self, (ValaSymbol*) _tmp385_, NULL);
+								_tmp387_ = _tmp386_;
+								_tmp388_ = g_strdup_printf ("%sClass", _tmp387_);
+								_tmp389_ = _tmp388_;
+								_tmp390_ = g_str_has_suffix (_tmp384_, _tmp389_);
+								_tmp379_ = _tmp390_;
+								_g_free0 (_tmp389_);
+								_g_free0 (_tmp387_);
 							}
-							_tmp384_ = _tmp372_;
-							_tmp362_ = _tmp384_;
+							_tmp391_ = _tmp379_;
+							_tmp369_ = _tmp391_;
 						} else {
-							_tmp362_ = FALSE;
+							_tmp369_ = FALSE;
 						}
-						_tmp385_ = _tmp362_;
-						if (_tmp385_) {
-							ValaMethod* _tmp386_;
-							ValaMethod* _tmp387_;
-							const gchar* _tmp388_;
-							const gchar* _tmp389_;
-							gboolean _tmp390_ = FALSE;
-							_tmp386_ = m;
-							vala_method_set_binding (_tmp386_, VALA_MEMBER_BINDING_CLASS);
-							_tmp387_ = m;
-							_tmp388_ = vala_symbol_get_name ((ValaSymbol*) _tmp387_);
-							_tmp389_ = _tmp388_;
-							_tmp390_ = g_str_has_prefix (_tmp389_, "class_");
-							if (_tmp390_) {
-								ValaMethod* _tmp391_;
-								ValaMethod* _tmp392_;
-								const gchar* _tmp393_;
-								const gchar* _tmp394_;
-								gint _tmp395_;
-								gint _tmp396_;
-								ValaMethod* _tmp397_;
-								const gchar* _tmp398_;
-								const gchar* _tmp399_;
-								gint _tmp400_;
-								gint _tmp401_;
+						_tmp392_ = _tmp369_;
+						if (_tmp392_) {
+							ValaMethod* _tmp393_;
+							ValaMethod* _tmp394_;
+							const gchar* _tmp395_;
+							const gchar* _tmp396_;
+							gboolean _tmp397_ = FALSE;
+							_tmp393_ = m;
+							vala_method_set_binding (_tmp393_, VALA_MEMBER_BINDING_CLASS);
+							_tmp394_ = m;
+							_tmp395_ = vala_symbol_get_name ((ValaSymbol*) _tmp394_);
+							_tmp396_ = _tmp395_;
+							_tmp397_ = g_str_has_prefix (_tmp396_, "class_");
+							if (_tmp397_) {
+								ValaMethod* _tmp398_;
+								ValaMethod* _tmp399_;
+								const gchar* _tmp400_;
+								const gchar* _tmp401_;
 								gint _tmp402_;
 								gint _tmp403_;
-								gchar* _tmp404_ = NULL;
-								gchar* _tmp405_;
-								_tmp391_ = m;
-								_tmp392_ = m;
-								_tmp393_ = vala_symbol_get_name ((ValaSymbol*) _tmp392_);
-								_tmp394_ = _tmp393_;
-								_tmp395_ = strlen ("class_");
-								_tmp396_ = _tmp395_;
-								_tmp397_ = m;
-								_tmp398_ = vala_symbol_get_name ((ValaSymbol*) _tmp397_);
-								_tmp399_ = _tmp398_;
-								_tmp400_ = strlen (_tmp399_);
+								ValaMethod* _tmp404_;
+								const gchar* _tmp405_;
+								const gchar* _tmp406_;
+								gint _tmp407_;
+								gint _tmp408_;
+								gint _tmp409_;
+								gint _tmp410_;
+								gchar* _tmp411_ = NULL;
+								gchar* _tmp412_;
+								_tmp398_ = m;
+								_tmp399_ = m;
+								_tmp400_ = vala_symbol_get_name ((ValaSymbol*) _tmp399_);
 								_tmp401_ = _tmp400_;
 								_tmp402_ = strlen ("class_");
 								_tmp403_ = _tmp402_;
-								_tmp404_ = string_substring (_tmp394_, (glong) _tmp396_, (glong) (_tmp401_ - _tmp403_));
-								_tmp405_ = _tmp404_;
-								vala_symbol_set_name ((ValaSymbol*) _tmp391_, _tmp405_);
-								_g_free0 (_tmp405_);
+								_tmp404_ = m;
+								_tmp405_ = vala_symbol_get_name ((ValaSymbol*) _tmp404_);
+								_tmp406_ = _tmp405_;
+								_tmp407_ = strlen (_tmp406_);
+								_tmp408_ = _tmp407_;
+								_tmp409_ = strlen ("class_");
+								_tmp410_ = _tmp409_;
+								_tmp411_ = string_substring (_tmp401_, (glong) _tmp403_, (glong) (_tmp408_ - _tmp410_));
+								_tmp412_ = _tmp411_;
+								vala_symbol_set_name ((ValaSymbol*) _tmp398_, _tmp412_);
+								_g_free0 (_tmp412_);
 							}
 							continue;
 						} else {
-							ValaMethod* _tmp406_;
-							_tmp406_ = m;
-							vala_method_set_binding (_tmp406_, VALA_MEMBER_BINDING_STATIC);
+							ValaMethod* _tmp413_;
+							_tmp413_ = m;
+							vala_method_set_binding (_tmp413_, VALA_MEMBER_BINDING_STATIC);
 						}
 					}
 				}
-				_tmp408_ = param;
-				_tmp409_ = _tmp408_->type;
-				_tmp410_ = _tmp409_->interface;
-				if (g_strcmp0 (_tmp410_, "GAsyncReadyCallback") == 0) {
-					gboolean _tmp411_ = FALSE;
-					const gchar* _tmp412_;
-					gboolean _tmp413_ = FALSE;
-					gboolean _tmp417_;
-					_tmp412_ = symbol;
-					_tmp413_ = g_str_has_suffix (_tmp412_, "_async");
-					if (_tmp413_) {
-						_tmp411_ = TRUE;
+				_tmp415_ = param;
+				_tmp416_ = _tmp415_->type;
+				_tmp417_ = _tmp416_->interface;
+				if (g_strcmp0 (_tmp417_, "GAsyncReadyCallback") == 0) {
+					gboolean _tmp418_ = FALSE;
+					const gchar* _tmp419_;
+					gboolean _tmp420_ = FALSE;
+					gboolean _tmp424_;
+					_tmp419_ = symbol;
+					_tmp420_ = g_str_has_suffix (_tmp419_, "_async");
+					if (_tmp420_) {
+						_tmp418_ = TRUE;
 					} else {
-						ValaMethod* _tmp414_;
-						gboolean _tmp415_;
-						gboolean _tmp416_;
-						_tmp414_ = m;
-						_tmp415_ = vala_method_get_coroutine (_tmp414_);
-						_tmp416_ = _tmp415_;
-						_tmp411_ = _tmp416_;
+						ValaMethod* _tmp421_;
+						gboolean _tmp422_;
+						gboolean _tmp423_;
+						_tmp421_ = m;
+						_tmp422_ = vala_method_get_coroutine (_tmp421_);
+						_tmp423_ = _tmp422_;
+						_tmp418_ = _tmp423_;
 					}
-					_tmp417_ = _tmp411_;
-					_tmp407_ = _tmp417_;
+					_tmp424_ = _tmp418_;
+					_tmp414_ = _tmp424_;
 				} else {
-					_tmp407_ = FALSE;
+					_tmp414_ = FALSE;
 				}
-				_tmp418_ = _tmp407_;
-				if (_tmp418_) {
-					ValaMethod* _tmp419_;
-					_tmp419_ = m;
-					vala_method_set_coroutine (_tmp419_, TRUE);
+				_tmp425_ = _tmp414_;
+				if (_tmp425_) {
+					ValaMethod* _tmp426_;
+					_tmp426_ = m;
+					vala_method_set_coroutine (_tmp426_, TRUE);
 					continue;
 				}
-				_tmp421_ = suppress_throws;
-				if (_tmp421_ == FALSE) {
-					GIdlNodeParam* _tmp422_;
-					gboolean _tmp423_ = FALSE;
-					_tmp422_ = param;
-					_tmp423_ = vala_gidl_parser_param_is_exception (self, _tmp422_);
-					_tmp420_ = _tmp423_;
+				_tmp428_ = suppress_throws;
+				if (_tmp428_ == FALSE) {
+					GIdlNodeParam* _tmp429_;
+					gboolean _tmp430_ = FALSE;
+					_tmp429_ = param;
+					_tmp430_ = vala_gidl_parser_param_is_exception (self, _tmp429_);
+					_tmp427_ = _tmp430_;
 				} else {
-					_tmp420_ = FALSE;
+					_tmp427_ = FALSE;
 				}
-				_tmp424_ = _tmp420_;
-				if (_tmp424_) {
-					const gchar* _tmp425_;
-					_tmp425_ = error_types;
-					if (_tmp425_ == NULL) {
-						ValaMethod* _tmp426_;
-						GIdlNodeParam* _tmp427_;
-						GIdlNodeType* _tmp428_;
-						ValaDataType* _tmp429_ = NULL;
-						ValaDataType* _tmp430_;
-						_tmp426_ = m;
-						_tmp427_ = param;
-						_tmp428_ = _tmp427_->type;
-						_tmp429_ = vala_gidl_parser_parse_type (self, _tmp428_, NULL);
-						_tmp430_ = _tmp429_;
-						vala_code_node_add_error_type ((ValaCodeNode*) _tmp426_, _tmp430_);
-						_vala_code_node_unref0 (_tmp430_);
+				_tmp431_ = _tmp427_;
+				if (_tmp431_) {
+					const gchar* _tmp432_;
+					_tmp432_ = error_types;
+					if (_tmp432_ == NULL) {
+						ValaMethod* _tmp433_;
+						GIdlNodeParam* _tmp434_;
+						GIdlNodeType* _tmp435_;
+						ValaDataType* _tmp436_ = NULL;
+						ValaDataType* _tmp437_;
+						_tmp433_ = m;
+						_tmp434_ = param;
+						_tmp435_ = _tmp434_->type;
+						_tmp436_ = vala_gidl_parser_parse_type (self, _tmp435_, NULL);
+						_tmp437_ = _tmp436_;
+						vala_code_node_add_error_type ((ValaCodeNode*) _tmp433_, _tmp437_);
+						_vala_code_node_unref0 (_tmp437_);
 					}
 					continue;
 				}
-				_tmp431_ = param_node;
-				_tmp432_ = _tmp431_->name;
-				_tmp433_ = g_strdup (_tmp432_);
-				param_name = _tmp433_;
-				_tmp434_ = param_name;
-				if (g_strcmp0 (_tmp434_, "result") == 0) {
-					gchar* _tmp435_;
-					_tmp435_ = g_strdup ("_result");
+				_tmp438_ = param_node;
+				_tmp439_ = _tmp438_->name;
+				_tmp440_ = g_strdup (_tmp439_);
+				param_name = _tmp440_;
+				_tmp441_ = param_name;
+				if (g_strcmp0 (_tmp441_, "result") == 0) {
+					gchar* _tmp442_;
+					_tmp442_ = g_strdup ("_result");
 					_g_free0 (param_name);
-					param_name = _tmp435_;
+					param_name = _tmp442_;
 				} else {
-					const gchar* _tmp436_;
-					_tmp436_ = param_name;
-					if (g_strcmp0 (_tmp436_, "string") == 0) {
-						gchar* _tmp437_;
-						_tmp437_ = g_strdup ("str");
+					const gchar* _tmp443_;
+					_tmp443_ = param_name;
+					if (g_strcmp0 (_tmp443_, "string") == 0) {
+						gchar* _tmp444_;
+						_tmp444_ = g_strdup ("str");
 						_g_free0 (param_name);
-						param_name = _tmp437_;
+						param_name = _tmp444_;
 					}
 				}
-				_tmp438_ = param;
-				_tmp440_ = vala_gidl_parser_parse_param (self, _tmp438_, &_tmp439_);
-				direction = _tmp439_;
-				param_type = _tmp440_;
-				_tmp441_ = param_name;
-				_tmp442_ = param_type;
-				_tmp443_ = vala_parameter_new (_tmp441_, _tmp442_, NULL);
-				p = _tmp443_;
-				_tmp444_ = p;
-				_tmp445_ = direction;
-				vala_parameter_set_direction (_tmp444_, _tmp445_);
+				_tmp445_ = param;
+				_tmp447_ = vala_gidl_parser_parse_param (self, _tmp445_, &_tmp446_);
+				direction = _tmp446_;
+				param_type = _tmp447_;
+				_tmp448_ = param_name;
+				_tmp449_ = param_type;
+				_tmp450_ = vala_parameter_new (_tmp448_, _tmp449_, NULL);
+				p = _tmp450_;
+				_tmp451_ = p;
+				_tmp452_ = direction;
+				vala_parameter_set_direction (_tmp451_, _tmp452_);
 				hide_param = FALSE;
 				show_param = FALSE;
 				set_array_length_pos = FALSE;
@@ -14541,439 +14587,414 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 				delegate_target_pos = (gdouble) 0;
 				array_requested = FALSE;
 				out_requested = FALSE;
-				_tmp446_ = symbol;
-				_tmp447_ = param_node;
-				_tmp448_ = _tmp447_->name;
-				_tmp449_ = g_strdup_printf ("%s.%s", _tmp446_, _tmp448_);
-				_tmp450_ = _tmp449_;
-				_tmp452_ = vala_gidl_parser_get_attributes (self, _tmp450_, &_tmp451_);
+				_tmp453_ = symbol;
+				_tmp454_ = param_node;
+				_tmp455_ = _tmp454_->name;
+				_tmp456_ = g_strdup_printf ("%s.%s", _tmp453_, _tmp455_);
+				_tmp457_ = _tmp456_;
+				_tmp459_ = vala_gidl_parser_get_attributes (self, _tmp457_, &_tmp458_);
 				attributes = (_vala_array_free (attributes, attributes_length1, (GDestroyNotify) g_free), NULL);
-				attributes = _tmp452_;
-				attributes_length1 = _tmp451_;
+				attributes = _tmp459_;
+				attributes_length1 = _tmp458_;
 				_attributes_size_ = attributes_length1;
-				_g_free0 (_tmp450_);
-				_tmp453_ = attributes;
-				_tmp453__length1 = attributes_length1;
-				if (_tmp453_ != NULL) {
-					gchar** _tmp454_;
-					gint _tmp454__length1;
-					_tmp454_ = attributes;
-					_tmp454__length1 = attributes_length1;
+				_g_free0 (_tmp457_);
+				_tmp460_ = attributes;
+				_tmp460__length1 = attributes_length1;
+				if (_tmp460_ != NULL) {
+					gchar** _tmp461_;
+					gint _tmp461__length1;
+					_tmp461_ = attributes;
+					_tmp461__length1 = attributes_length1;
 					{
 						gchar** attr_collection = NULL;
 						gint attr_collection_length1 = 0;
 						gint _attr_collection_size_ = 0;
 						gint attr_it = 0;
-						attr_collection = _tmp454_;
-						attr_collection_length1 = _tmp454__length1;
-						for (attr_it = 0; attr_it < _tmp454__length1; attr_it = attr_it + 1) {
-							gchar* _tmp455_;
+						attr_collection = _tmp461_;
+						attr_collection_length1 = _tmp461__length1;
+						for (attr_it = 0; attr_it < _tmp461__length1; attr_it = attr_it + 1) {
+							gchar* _tmp462_;
 							gchar* attr = NULL;
-							_tmp455_ = g_strdup (attr_collection[attr_it]);
-							attr = _tmp455_;
+							_tmp462_ = g_strdup (attr_collection[attr_it]);
+							attr = _tmp462_;
 							{
-								const gchar* _tmp456_;
-								gchar** _tmp457_;
-								gchar** _tmp458_ = NULL;
+								const gchar* _tmp463_;
+								gchar** _tmp464_;
+								gchar** _tmp465_ = NULL;
 								gchar** nv;
 								gint nv_length1;
 								gint _nv_size_;
-								gchar** _tmp459_;
-								gint _tmp459__length1;
-								const gchar* _tmp460_;
-								_tmp456_ = attr;
-								_tmp458_ = _tmp457_ = g_strsplit (_tmp456_, "=", 2);
-								nv = _tmp458_;
-								nv_length1 = _vala_array_length (_tmp457_);
+								gchar** _tmp466_;
+								gint _tmp466__length1;
+								const gchar* _tmp467_;
+								_tmp463_ = attr;
+								_tmp465_ = _tmp464_ = g_strsplit (_tmp463_, "=", 2);
+								nv = _tmp465_;
+								nv_length1 = _vala_array_length (_tmp464_);
 								_nv_size_ = nv_length1;
-								_tmp459_ = nv;
-								_tmp459__length1 = nv_length1;
-								_tmp460_ = _tmp459_[0];
-								if (g_strcmp0 (_tmp460_, "is_array") == 0) {
-									gchar** _tmp461_;
-									gint _tmp461__length1;
-									const gchar* _tmp462_;
-									gchar* _tmp463_ = NULL;
-									gchar* _tmp464_;
-									gboolean _tmp465_;
-									_tmp461_ = nv;
-									_tmp461__length1 = nv_length1;
-									_tmp462_ = _tmp461_[1];
-									_tmp463_ = vala_gidl_parser_eval (self, _tmp462_);
-									_tmp464_ = _tmp463_;
-									_tmp465_ = g_strcmp0 (_tmp464_, "1") == 0;
-									_g_free0 (_tmp464_);
-									if (_tmp465_) {
-										ValaDataType* _tmp466_;
-										ValaDataType* _tmp467_;
-										ValaSourceReference* _tmp468_;
-										ValaSourceReference* _tmp469_;
-										ValaArrayType* _tmp470_;
-										ValaParameter* _tmp471_;
-										ValaDataType* _tmp472_;
-										gboolean _tmp473_;
-										_tmp466_ = param_type;
-										_tmp467_ = param_type;
-										_tmp468_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp467_);
-										_tmp469_ = _tmp468_;
-										_tmp470_ = vala_array_type_new (_tmp466_, 1, _tmp469_);
+								_tmp466_ = nv;
+								_tmp466__length1 = nv_length1;
+								_tmp467_ = _tmp466_[0];
+								if (g_strcmp0 (_tmp467_, "is_array") == 0) {
+									gchar** _tmp468_;
+									gint _tmp468__length1;
+									const gchar* _tmp469_;
+									gchar* _tmp470_ = NULL;
+									gchar* _tmp471_;
+									gboolean _tmp472_;
+									_tmp468_ = nv;
+									_tmp468__length1 = nv_length1;
+									_tmp469_ = _tmp468_[1];
+									_tmp470_ = vala_gidl_parser_eval (self, _tmp469_);
+									_tmp471_ = _tmp470_;
+									_tmp472_ = g_strcmp0 (_tmp471_, "1") == 0;
+									_g_free0 (_tmp471_);
+									if (_tmp472_) {
+										ValaDataType* _tmp473_;
+										ValaDataType* _tmp474_;
+										ValaSourceReference* _tmp475_;
+										ValaSourceReference* _tmp476_;
+										ValaArrayType* _tmp477_;
+										ValaParameter* _tmp478_;
+										ValaDataType* _tmp479_;
+										gboolean _tmp480_;
+										_tmp473_ = param_type;
+										_tmp474_ = param_type;
+										_tmp475_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp474_);
+										_tmp476_ = _tmp475_;
+										_tmp477_ = vala_array_type_new (_tmp473_, 1, _tmp476_);
 										_vala_code_node_unref0 (param_type);
-										param_type = (ValaDataType*) _tmp470_;
-										_tmp471_ = p;
-										_tmp472_ = param_type;
-										vala_variable_set_variable_type ((ValaVariable*) _tmp471_, _tmp472_);
-										_tmp473_ = out_requested;
-										if (!_tmp473_) {
-											ValaParameter* _tmp474_;
-											_tmp474_ = p;
-											vala_parameter_set_direction (_tmp474_, VALA_PARAMETER_DIRECTION_IN);
+										param_type = (ValaDataType*) _tmp477_;
+										_tmp478_ = p;
+										_tmp479_ = param_type;
+										vala_variable_set_variable_type ((ValaVariable*) _tmp478_, _tmp479_);
+										_tmp480_ = out_requested;
+										if (!_tmp480_) {
+											ValaParameter* _tmp481_;
+											_tmp481_ = p;
+											vala_parameter_set_direction (_tmp481_, VALA_PARAMETER_DIRECTION_IN);
 										}
 										array_requested = TRUE;
 									}
 								} else {
-									gchar** _tmp475_;
-									gint _tmp475__length1;
-									const gchar* _tmp476_;
-									_tmp475_ = nv;
-									_tmp475__length1 = nv_length1;
-									_tmp476_ = _tmp475_[0];
-									if (g_strcmp0 (_tmp476_, "is_pointer") == 0) {
-										gchar** _tmp477_;
-										gint _tmp477__length1;
-										const gchar* _tmp478_;
-										gchar* _tmp479_ = NULL;
-										gchar* _tmp480_;
-										gboolean _tmp481_;
-										_tmp477_ = nv;
-										_tmp477__length1 = nv_length1;
-										_tmp478_ = _tmp477_[1];
-										_tmp479_ = vala_gidl_parser_eval (self, _tmp478_);
-										_tmp480_ = _tmp479_;
-										_tmp481_ = g_strcmp0 (_tmp480_, "1") == 0;
-										_g_free0 (_tmp480_);
-										if (_tmp481_) {
-											ValaDataType* _tmp482_;
-											ValaDataType* _tmp483_;
-											ValaSourceReference* _tmp484_;
-											ValaSourceReference* _tmp485_;
-											ValaPointerType* _tmp486_;
-											ValaParameter* _tmp487_;
-											ValaDataType* _tmp488_;
-											gboolean _tmp489_;
-											_tmp482_ = param_type;
-											_tmp483_ = return_type;
-											_tmp484_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp483_);
-											_tmp485_ = _tmp484_;
-											_tmp486_ = vala_pointer_type_new (_tmp482_, _tmp485_);
+									gchar** _tmp482_;
+									gint _tmp482__length1;
+									const gchar* _tmp483_;
+									_tmp482_ = nv;
+									_tmp482__length1 = nv_length1;
+									_tmp483_ = _tmp482_[0];
+									if (g_strcmp0 (_tmp483_, "is_pointer") == 0) {
+										gchar** _tmp484_;
+										gint _tmp484__length1;
+										const gchar* _tmp485_;
+										gchar* _tmp486_ = NULL;
+										gchar* _tmp487_;
+										gboolean _tmp488_;
+										_tmp484_ = nv;
+										_tmp484__length1 = nv_length1;
+										_tmp485_ = _tmp484_[1];
+										_tmp486_ = vala_gidl_parser_eval (self, _tmp485_);
+										_tmp487_ = _tmp486_;
+										_tmp488_ = g_strcmp0 (_tmp487_, "1") == 0;
+										_g_free0 (_tmp487_);
+										if (_tmp488_) {
+											ValaDataType* _tmp489_;
+											ValaDataType* _tmp490_;
+											ValaSourceReference* _tmp491_;
+											ValaSourceReference* _tmp492_;
+											ValaPointerType* _tmp493_;
+											ValaParameter* _tmp494_;
+											ValaDataType* _tmp495_;
+											gboolean _tmp496_;
+											_tmp489_ = param_type;
+											_tmp490_ = return_type;
+											_tmp491_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp490_);
+											_tmp492_ = _tmp491_;
+											_tmp493_ = vala_pointer_type_new (_tmp489_, _tmp492_);
 											_vala_code_node_unref0 (param_type);
-											param_type = (ValaDataType*) _tmp486_;
-											_tmp487_ = p;
-											_tmp488_ = param_type;
-											vala_variable_set_variable_type ((ValaVariable*) _tmp487_, _tmp488_);
-											_tmp489_ = out_requested;
-											if (!_tmp489_) {
-												ValaParameter* _tmp490_;
-												_tmp490_ = p;
-												vala_parameter_set_direction (_tmp490_, VALA_PARAMETER_DIRECTION_IN);
+											param_type = (ValaDataType*) _tmp493_;
+											_tmp494_ = p;
+											_tmp495_ = param_type;
+											vala_variable_set_variable_type ((ValaVariable*) _tmp494_, _tmp495_);
+											_tmp496_ = out_requested;
+											if (!_tmp496_) {
+												ValaParameter* _tmp497_;
+												_tmp497_ = p;
+												vala_parameter_set_direction (_tmp497_, VALA_PARAMETER_DIRECTION_IN);
 											}
 										}
 									} else {
-										gchar** _tmp491_;
-										gint _tmp491__length1;
-										const gchar* _tmp492_;
-										_tmp491_ = nv;
-										_tmp491__length1 = nv_length1;
-										_tmp492_ = _tmp491_[0];
-										if (g_strcmp0 (_tmp492_, "is_out") == 0) {
-											gchar** _tmp493_;
-											gint _tmp493__length1;
-											const gchar* _tmp494_;
-											gchar* _tmp495_ = NULL;
-											gchar* _tmp496_;
-											gboolean _tmp497_;
-											_tmp493_ = nv;
-											_tmp493__length1 = nv_length1;
-											_tmp494_ = _tmp493_[1];
-											_tmp495_ = vala_gidl_parser_eval (self, _tmp494_);
-											_tmp496_ = _tmp495_;
-											_tmp497_ = g_strcmp0 (_tmp496_, "1") == 0;
-											_g_free0 (_tmp496_);
-											if (_tmp497_) {
-												ValaParameter* _tmp498_;
-												gboolean _tmp499_ = FALSE;
-												gboolean _tmp500_;
-												gboolean _tmp502_;
-												_tmp498_ = p;
-												vala_parameter_set_direction (_tmp498_, VALA_PARAMETER_DIRECTION_OUT);
+										gchar** _tmp498_;
+										gint _tmp498__length1;
+										const gchar* _tmp499_;
+										_tmp498_ = nv;
+										_tmp498__length1 = nv_length1;
+										_tmp499_ = _tmp498_[0];
+										if (g_strcmp0 (_tmp499_, "is_out") == 0) {
+											gchar** _tmp500_;
+											gint _tmp500__length1;
+											const gchar* _tmp501_;
+											gchar* _tmp502_ = NULL;
+											gchar* _tmp503_;
+											gboolean _tmp504_;
+											_tmp500_ = nv;
+											_tmp500__length1 = nv_length1;
+											_tmp501_ = _tmp500_[1];
+											_tmp502_ = vala_gidl_parser_eval (self, _tmp501_);
+											_tmp503_ = _tmp502_;
+											_tmp504_ = g_strcmp0 (_tmp503_, "1") == 0;
+											_g_free0 (_tmp503_);
+											if (_tmp504_) {
+												ValaParameter* _tmp505_;
+												gboolean _tmp506_ = FALSE;
+												gboolean _tmp507_;
+												gboolean _tmp509_;
+												_tmp505_ = p;
+												vala_parameter_set_direction (_tmp505_, VALA_PARAMETER_DIRECTION_OUT);
 												out_requested = TRUE;
-												_tmp500_ = array_requested;
-												if (!_tmp500_) {
-													ValaDataType* _tmp501_;
-													_tmp501_ = param_type;
-													_tmp499_ = VALA_IS_ARRAY_TYPE (_tmp501_);
+												_tmp507_ = array_requested;
+												if (!_tmp507_) {
+													ValaDataType* _tmp508_;
+													_tmp508_ = param_type;
+													_tmp506_ = VALA_IS_ARRAY_TYPE (_tmp508_);
 												} else {
-													_tmp499_ = FALSE;
+													_tmp506_ = FALSE;
 												}
-												_tmp502_ = _tmp499_;
-												if (_tmp502_) {
-													ValaDataType* _tmp503_;
-													ValaArrayType* _tmp504_;
-													ValaArrayType* array_type;
-													ValaArrayType* _tmp505_;
-													ValaDataType* _tmp506_;
-													ValaDataType* _tmp507_;
-													ValaDataType* _tmp508_;
-													ValaParameter* _tmp509_;
+												_tmp509_ = _tmp506_;
+												if (_tmp509_) {
 													ValaDataType* _tmp510_;
-													_tmp503_ = param_type;
-													_tmp504_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp503_));
-													array_type = _tmp504_;
-													_tmp505_ = array_type;
-													_tmp506_ = vala_array_type_get_element_type (_tmp505_);
-													_tmp507_ = _tmp506_;
-													_tmp508_ = _vala_code_node_ref0 (_tmp507_);
-													_vala_code_node_unref0 (param_type);
-													param_type = _tmp508_;
-													_tmp509_ = p;
+													ValaArrayType* _tmp511_;
+													ValaArrayType* array_type;
+													ValaArrayType* _tmp512_;
+													ValaDataType* _tmp513_;
+													ValaDataType* _tmp514_;
+													ValaDataType* _tmp515_;
+													ValaParameter* _tmp516_;
+													ValaDataType* _tmp517_;
 													_tmp510_ = param_type;
-													vala_variable_set_variable_type ((ValaVariable*) _tmp509_, _tmp510_);
+													_tmp511_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp510_));
+													array_type = _tmp511_;
+													_tmp512_ = array_type;
+													_tmp513_ = vala_array_type_get_element_type (_tmp512_);
+													_tmp514_ = _tmp513_;
+													_tmp515_ = _vala_code_node_ref0 (_tmp514_);
+													_vala_code_node_unref0 (param_type);
+													param_type = _tmp515_;
+													_tmp516_ = p;
+													_tmp517_ = param_type;
+													vala_variable_set_variable_type ((ValaVariable*) _tmp516_, _tmp517_);
 													_vala_code_node_unref0 (array_type);
 												}
 											}
 										} else {
-											gchar** _tmp511_;
-											gint _tmp511__length1;
-											const gchar* _tmp512_;
-											_tmp511_ = nv;
-											_tmp511__length1 = nv_length1;
-											_tmp512_ = _tmp511_[0];
-											if (g_strcmp0 (_tmp512_, "is_ref") == 0) {
-												gchar** _tmp513_;
-												gint _tmp513__length1;
-												const gchar* _tmp514_;
-												gchar* _tmp515_ = NULL;
-												gchar* _tmp516_;
-												gboolean _tmp517_;
-												_tmp513_ = nv;
-												_tmp513__length1 = nv_length1;
-												_tmp514_ = _tmp513_[1];
-												_tmp515_ = vala_gidl_parser_eval (self, _tmp514_);
-												_tmp516_ = _tmp515_;
-												_tmp517_ = g_strcmp0 (_tmp516_, "1") == 0;
-												_g_free0 (_tmp516_);
-												if (_tmp517_) {
-													ValaParameter* _tmp518_;
-													gboolean _tmp519_ = FALSE;
-													gboolean _tmp520_;
-													gboolean _tmp522_;
-													_tmp518_ = p;
-													vala_parameter_set_direction (_tmp518_, VALA_PARAMETER_DIRECTION_REF);
-													_tmp520_ = array_requested;
-													if (!_tmp520_) {
-														ValaDataType* _tmp521_;
-														_tmp521_ = param_type;
-														_tmp519_ = VALA_IS_ARRAY_TYPE (_tmp521_);
+											gchar** _tmp518_;
+											gint _tmp518__length1;
+											const gchar* _tmp519_;
+											_tmp518_ = nv;
+											_tmp518__length1 = nv_length1;
+											_tmp519_ = _tmp518_[0];
+											if (g_strcmp0 (_tmp519_, "is_ref") == 0) {
+												gchar** _tmp520_;
+												gint _tmp520__length1;
+												const gchar* _tmp521_;
+												gchar* _tmp522_ = NULL;
+												gchar* _tmp523_;
+												gboolean _tmp524_;
+												_tmp520_ = nv;
+												_tmp520__length1 = nv_length1;
+												_tmp521_ = _tmp520_[1];
+												_tmp522_ = vala_gidl_parser_eval (self, _tmp521_);
+												_tmp523_ = _tmp522_;
+												_tmp524_ = g_strcmp0 (_tmp523_, "1") == 0;
+												_g_free0 (_tmp523_);
+												if (_tmp524_) {
+													ValaParameter* _tmp525_;
+													gboolean _tmp526_ = FALSE;
+													gboolean _tmp527_;
+													gboolean _tmp529_;
+													_tmp525_ = p;
+													vala_parameter_set_direction (_tmp525_, VALA_PARAMETER_DIRECTION_REF);
+													_tmp527_ = array_requested;
+													if (!_tmp527_) {
+														ValaDataType* _tmp528_;
+														_tmp528_ = param_type;
+														_tmp526_ = VALA_IS_ARRAY_TYPE (_tmp528_);
 													} else {
-														_tmp519_ = FALSE;
+														_tmp526_ = FALSE;
 													}
-													_tmp522_ = _tmp519_;
-													if (_tmp522_) {
-														ValaDataType* _tmp523_;
-														ValaArrayType* _tmp524_;
-														ValaArrayType* array_type;
-														ValaArrayType* _tmp525_;
-														ValaDataType* _tmp526_;
-														ValaDataType* _tmp527_;
-														ValaDataType* _tmp528_;
-														ValaParameter* _tmp529_;
+													_tmp529_ = _tmp526_;
+													if (_tmp529_) {
 														ValaDataType* _tmp530_;
-														_tmp523_ = param_type;
-														_tmp524_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp523_));
-														array_type = _tmp524_;
-														_tmp525_ = array_type;
-														_tmp526_ = vala_array_type_get_element_type (_tmp525_);
-														_tmp527_ = _tmp526_;
-														_tmp528_ = _vala_code_node_ref0 (_tmp527_);
-														_vala_code_node_unref0 (param_type);
-														param_type = _tmp528_;
-														_tmp529_ = p;
+														ValaArrayType* _tmp531_;
+														ValaArrayType* array_type;
+														ValaArrayType* _tmp532_;
+														ValaDataType* _tmp533_;
+														ValaDataType* _tmp534_;
+														ValaDataType* _tmp535_;
+														ValaParameter* _tmp536_;
+														ValaDataType* _tmp537_;
 														_tmp530_ = param_type;
-														vala_variable_set_variable_type ((ValaVariable*) _tmp529_, _tmp530_);
+														_tmp531_ = _vala_code_node_ref0 (VALA_ARRAY_TYPE (_tmp530_));
+														array_type = _tmp531_;
+														_tmp532_ = array_type;
+														_tmp533_ = vala_array_type_get_element_type (_tmp532_);
+														_tmp534_ = _tmp533_;
+														_tmp535_ = _vala_code_node_ref0 (_tmp534_);
+														_vala_code_node_unref0 (param_type);
+														param_type = _tmp535_;
+														_tmp536_ = p;
+														_tmp537_ = param_type;
+														vala_variable_set_variable_type ((ValaVariable*) _tmp536_, _tmp537_);
 														_vala_code_node_unref0 (array_type);
 													}
 												}
 											} else {
-												gchar** _tmp531_;
-												gint _tmp531__length1;
-												const gchar* _tmp532_;
-												_tmp531_ = nv;
-												_tmp531__length1 = nv_length1;
-												_tmp532_ = _tmp531_[0];
-												if (g_strcmp0 (_tmp532_, "nullable") == 0) {
-													gchar** _tmp533_;
-													gint _tmp533__length1;
-													const gchar* _tmp534_;
-													gchar* _tmp535_ = NULL;
-													gchar* _tmp536_;
-													gboolean _tmp537_;
-													_tmp533_ = nv;
-													_tmp533__length1 = nv_length1;
-													_tmp534_ = _tmp533_[1];
-													_tmp535_ = vala_gidl_parser_eval (self, _tmp534_);
-													_tmp536_ = _tmp535_;
-													_tmp537_ = g_strcmp0 (_tmp536_, "1") == 0;
-													_g_free0 (_tmp536_);
-													if (_tmp537_) {
-														ValaDataType* _tmp538_;
-														_tmp538_ = param_type;
-														vala_data_type_set_nullable (_tmp538_, TRUE);
+												gchar** _tmp538_;
+												gint _tmp538__length1;
+												const gchar* _tmp539_;
+												_tmp538_ = nv;
+												_tmp538__length1 = nv_length1;
+												_tmp539_ = _tmp538_[0];
+												if (g_strcmp0 (_tmp539_, "nullable") == 0) {
+													gchar** _tmp540_;
+													gint _tmp540__length1;
+													const gchar* _tmp541_;
+													gchar* _tmp542_ = NULL;
+													gchar* _tmp543_;
+													gboolean _tmp544_;
+													_tmp540_ = nv;
+													_tmp540__length1 = nv_length1;
+													_tmp541_ = _tmp540_[1];
+													_tmp542_ = vala_gidl_parser_eval (self, _tmp541_);
+													_tmp543_ = _tmp542_;
+													_tmp544_ = g_strcmp0 (_tmp543_, "1") == 0;
+													_g_free0 (_tmp543_);
+													if (_tmp544_) {
+														ValaDataType* _tmp545_;
+														_tmp545_ = param_type;
+														vala_data_type_set_nullable (_tmp545_, TRUE);
 													}
 												} else {
-													gchar** _tmp539_;
-													gint _tmp539__length1;
-													const gchar* _tmp540_;
-													_tmp539_ = nv;
-													_tmp539__length1 = nv_length1;
-													_tmp540_ = _tmp539_[0];
-													if (g_strcmp0 (_tmp540_, "transfer_ownership") == 0) {
-														gchar** _tmp541_;
-														gint _tmp541__length1;
-														const gchar* _tmp542_;
-														gchar* _tmp543_ = NULL;
-														gchar* _tmp544_;
-														gboolean _tmp545_;
-														_tmp541_ = nv;
-														_tmp541__length1 = nv_length1;
-														_tmp542_ = _tmp541_[1];
-														_tmp543_ = vala_gidl_parser_eval (self, _tmp542_);
-														_tmp544_ = _tmp543_;
-														_tmp545_ = g_strcmp0 (_tmp544_, "1") == 0;
-														_g_free0 (_tmp544_);
-														if (_tmp545_) {
-															ValaDataType* _tmp546_;
-															_tmp546_ = param_type;
-															vala_data_type_set_value_owned (_tmp546_, TRUE);
+													gchar** _tmp546_;
+													gint _tmp546__length1;
+													const gchar* _tmp547_;
+													_tmp546_ = nv;
+													_tmp546__length1 = nv_length1;
+													_tmp547_ = _tmp546_[0];
+													if (g_strcmp0 (_tmp547_, "transfer_ownership") == 0) {
+														gchar** _tmp548_;
+														gint _tmp548__length1;
+														const gchar* _tmp549_;
+														gchar* _tmp550_ = NULL;
+														gchar* _tmp551_;
+														gboolean _tmp552_;
+														_tmp548_ = nv;
+														_tmp548__length1 = nv_length1;
+														_tmp549_ = _tmp548_[1];
+														_tmp550_ = vala_gidl_parser_eval (self, _tmp549_);
+														_tmp551_ = _tmp550_;
+														_tmp552_ = g_strcmp0 (_tmp551_, "1") == 0;
+														_g_free0 (_tmp551_);
+														if (_tmp552_) {
+															ValaDataType* _tmp553_;
+															_tmp553_ = param_type;
+															vala_data_type_set_value_owned (_tmp553_, TRUE);
 														}
 													} else {
-														gchar** _tmp547_;
-														gint _tmp547__length1;
-														const gchar* _tmp548_;
-														_tmp547_ = nv;
-														_tmp547__length1 = nv_length1;
-														_tmp548_ = _tmp547_[0];
-														if (g_strcmp0 (_tmp548_, "takes_ownership") == 0) {
-															gchar** _tmp549_;
-															gint _tmp549__length1;
-															const gchar* _tmp550_;
-															gchar* _tmp551_ = NULL;
-															gchar* _tmp552_;
-															gboolean _tmp553_;
-															_tmp549_ = nv;
-															_tmp549__length1 = nv_length1;
-															_tmp550_ = _tmp549_[1];
-															_tmp551_ = vala_gidl_parser_eval (self, _tmp550_);
-															_tmp552_ = _tmp551_;
-															_tmp553_ = g_strcmp0 (_tmp552_, "1") == 0;
-															_g_free0 (_tmp552_);
-															if (_tmp553_) {
-																ValaDataType* _tmp554_;
-																_tmp554_ = param_type;
-																vala_data_type_set_value_owned (_tmp554_, TRUE);
+														gchar** _tmp554_;
+														gint _tmp554__length1;
+														const gchar* _tmp555_;
+														_tmp554_ = nv;
+														_tmp554__length1 = nv_length1;
+														_tmp555_ = _tmp554_[0];
+														if (g_strcmp0 (_tmp555_, "takes_ownership") == 0) {
+															gchar** _tmp556_;
+															gint _tmp556__length1;
+															const gchar* _tmp557_;
+															gchar* _tmp558_ = NULL;
+															gchar* _tmp559_;
+															gboolean _tmp560_;
+															_tmp556_ = nv;
+															_tmp556__length1 = nv_length1;
+															_tmp557_ = _tmp556_[1];
+															_tmp558_ = vala_gidl_parser_eval (self, _tmp557_);
+															_tmp559_ = _tmp558_;
+															_tmp560_ = g_strcmp0 (_tmp559_, "1") == 0;
+															_g_free0 (_tmp559_);
+															if (_tmp560_) {
+																ValaDataType* _tmp561_;
+																_tmp561_ = param_type;
+																vala_data_type_set_value_owned (_tmp561_, TRUE);
 															}
 														} else {
-															gchar** _tmp555_;
-															gint _tmp555__length1;
-															const gchar* _tmp556_;
-															_tmp555_ = nv;
-															_tmp555__length1 = nv_length1;
-															_tmp556_ = _tmp555_[0];
-															if (g_strcmp0 (_tmp556_, "value_owned") == 0) {
-																gchar** _tmp557_;
-																gint _tmp557__length1;
-																const gchar* _tmp558_;
-																gchar* _tmp559_ = NULL;
-																gchar* _tmp560_;
-																gboolean _tmp561_;
-																_tmp557_ = nv;
-																_tmp557__length1 = nv_length1;
-																_tmp558_ = _tmp557_[1];
-																_tmp559_ = vala_gidl_parser_eval (self, _tmp558_);
-																_tmp560_ = _tmp559_;
-																_tmp561_ = g_strcmp0 (_tmp560_, "0") == 0;
-																_g_free0 (_tmp560_);
-																if (_tmp561_) {
-																	ValaDataType* _tmp562_;
-																	_tmp562_ = param_type;
-																	vala_data_type_set_value_owned (_tmp562_, FALSE);
+															gchar** _tmp562_;
+															gint _tmp562__length1;
+															const gchar* _tmp563_;
+															_tmp562_ = nv;
+															_tmp562__length1 = nv_length1;
+															_tmp563_ = _tmp562_[0];
+															if (g_strcmp0 (_tmp563_, "value_owned") == 0) {
+																gchar** _tmp564_;
+																gint _tmp564__length1;
+																const gchar* _tmp565_;
+																gchar* _tmp566_ = NULL;
+																gchar* _tmp567_;
+																gboolean _tmp568_;
+																_tmp564_ = nv;
+																_tmp564__length1 = nv_length1;
+																_tmp565_ = _tmp564_[1];
+																_tmp566_ = vala_gidl_parser_eval (self, _tmp565_);
+																_tmp567_ = _tmp566_;
+																_tmp568_ = g_strcmp0 (_tmp567_, "0") == 0;
+																_g_free0 (_tmp567_);
+																if (_tmp568_) {
+																	ValaDataType* _tmp569_;
+																	_tmp569_ = param_type;
+																	vala_data_type_set_value_owned (_tmp569_, FALSE);
 																} else {
-																	gchar** _tmp563_;
-																	gint _tmp563__length1;
-																	const gchar* _tmp564_;
-																	gchar* _tmp565_ = NULL;
-																	gchar* _tmp566_;
-																	gboolean _tmp567_;
-																	_tmp563_ = nv;
-																	_tmp563__length1 = nv_length1;
-																	_tmp564_ = _tmp563_[1];
-																	_tmp565_ = vala_gidl_parser_eval (self, _tmp564_);
-																	_tmp566_ = _tmp565_;
-																	_tmp567_ = g_strcmp0 (_tmp566_, "1") == 0;
-																	_g_free0 (_tmp566_);
-																	if (_tmp567_) {
-																		ValaDataType* _tmp568_;
-																		_tmp568_ = param_type;
-																		vala_data_type_set_value_owned (_tmp568_, TRUE);
+																	gchar** _tmp570_;
+																	gint _tmp570__length1;
+																	const gchar* _tmp571_;
+																	gchar* _tmp572_ = NULL;
+																	gchar* _tmp573_;
+																	gboolean _tmp574_;
+																	_tmp570_ = nv;
+																	_tmp570__length1 = nv_length1;
+																	_tmp571_ = _tmp570_[1];
+																	_tmp572_ = vala_gidl_parser_eval (self, _tmp571_);
+																	_tmp573_ = _tmp572_;
+																	_tmp574_ = g_strcmp0 (_tmp573_, "1") == 0;
+																	_g_free0 (_tmp573_);
+																	if (_tmp574_) {
+																		ValaDataType* _tmp575_;
+																		_tmp575_ = param_type;
+																		vala_data_type_set_value_owned (_tmp575_, TRUE);
 																	}
 																}
 															} else {
-																gchar** _tmp569_;
-																gint _tmp569__length1;
-																const gchar* _tmp570_;
-																_tmp569_ = nv;
-																_tmp569__length1 = nv_length1;
-																_tmp570_ = _tmp569_[0];
-																if (g_strcmp0 (_tmp570_, "hidden") == 0) {
-																	gchar** _tmp571_;
-																	gint _tmp571__length1;
-																	const gchar* _tmp572_;
-																	gchar* _tmp573_ = NULL;
-																	gchar* _tmp574_;
-																	gboolean _tmp575_;
-																	_tmp571_ = nv;
-																	_tmp571__length1 = nv_length1;
-																	_tmp572_ = _tmp571_[1];
-																	_tmp573_ = vala_gidl_parser_eval (self, _tmp572_);
-																	_tmp574_ = _tmp573_;
-																	_tmp575_ = g_strcmp0 (_tmp574_, "1") == 0;
-																	_g_free0 (_tmp574_);
-																	if (_tmp575_) {
+																gchar** _tmp576_;
+																gint _tmp576__length1;
+																const gchar* _tmp577_;
+																_tmp576_ = nv;
+																_tmp576__length1 = nv_length1;
+																_tmp577_ = _tmp576_[0];
+																if (g_strcmp0 (_tmp577_, "hidden") == 0) {
+																	gchar** _tmp578_;
+																	gint _tmp578__length1;
+																	const gchar* _tmp579_;
+																	gchar* _tmp580_ = NULL;
+																	gchar* _tmp581_;
+																	gboolean _tmp582_;
+																	_tmp578_ = nv;
+																	_tmp578__length1 = nv_length1;
+																	_tmp579_ = _tmp578_[1];
+																	_tmp580_ = vala_gidl_parser_eval (self, _tmp579_);
+																	_tmp581_ = _tmp580_;
+																	_tmp582_ = g_strcmp0 (_tmp581_, "1") == 0;
+																	_g_free0 (_tmp581_);
+																	if (_tmp582_) {
 																		hide_param = TRUE;
 																	} else {
-																		gchar** _tmp576_;
-																		gint _tmp576__length1;
-																		const gchar* _tmp577_;
-																		gchar* _tmp578_ = NULL;
-																		gchar* _tmp579_;
-																		gboolean _tmp580_;
-																		_tmp576_ = nv;
-																		_tmp576__length1 = nv_length1;
-																		_tmp577_ = _tmp576_[1];
-																		_tmp578_ = vala_gidl_parser_eval (self, _tmp577_);
-																		_tmp579_ = _tmp578_;
-																		_tmp580_ = g_strcmp0 (_tmp579_, "0") == 0;
-																		_g_free0 (_tmp579_);
-																		if (_tmp580_) {
-																			show_param = TRUE;
-																		}
-																	}
-																} else {
-																	gchar** _tmp581_;
-																	gint _tmp581__length1;
-																	const gchar* _tmp582_;
-																	_tmp581_ = nv;
-																	_tmp581__length1 = nv_length1;
-																	_tmp582_ = _tmp581_[0];
-																	if (g_strcmp0 (_tmp582_, "no_array_length") == 0) {
 																		gchar** _tmp583_;
 																		gint _tmp583__length1;
 																		const gchar* _tmp584_;
@@ -14985,390 +15006,415 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 																		_tmp584_ = _tmp583_[1];
 																		_tmp585_ = vala_gidl_parser_eval (self, _tmp584_);
 																		_tmp586_ = _tmp585_;
-																		_tmp587_ = g_strcmp0 (_tmp586_, "1") == 0;
+																		_tmp587_ = g_strcmp0 (_tmp586_, "0") == 0;
 																		_g_free0 (_tmp586_);
 																		if (_tmp587_) {
-																			ValaParameter* _tmp588_;
-																			_tmp588_ = p;
-																			vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp588_, "CCode", "array_length", FALSE, NULL);
+																			show_param = TRUE;
+																		}
+																	}
+																} else {
+																	gchar** _tmp588_;
+																	gint _tmp588__length1;
+																	const gchar* _tmp589_;
+																	_tmp588_ = nv;
+																	_tmp588__length1 = nv_length1;
+																	_tmp589_ = _tmp588_[0];
+																	if (g_strcmp0 (_tmp589_, "no_array_length") == 0) {
+																		gchar** _tmp590_;
+																		gint _tmp590__length1;
+																		const gchar* _tmp591_;
+																		gchar* _tmp592_ = NULL;
+																		gchar* _tmp593_;
+																		gboolean _tmp594_;
+																		_tmp590_ = nv;
+																		_tmp590__length1 = nv_length1;
+																		_tmp591_ = _tmp590_[1];
+																		_tmp592_ = vala_gidl_parser_eval (self, _tmp591_);
+																		_tmp593_ = _tmp592_;
+																		_tmp594_ = g_strcmp0 (_tmp593_, "1") == 0;
+																		_g_free0 (_tmp593_);
+																		if (_tmp594_) {
+																			ValaParameter* _tmp595_;
+																			_tmp595_ = p;
+																			vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp595_, "CCode", "array_length", FALSE, NULL);
 																		}
 																	} else {
-																		gchar** _tmp589_;
-																		gint _tmp589__length1;
-																		const gchar* _tmp590_;
-																		_tmp589_ = nv;
-																		_tmp589__length1 = nv_length1;
-																		_tmp590_ = _tmp589_[0];
-																		if (g_strcmp0 (_tmp590_, "array_length_type") == 0) {
-																			ValaParameter* _tmp591_;
-																			gchar** _tmp592_;
-																			gint _tmp592__length1;
-																			const gchar* _tmp593_;
-																			gchar* _tmp594_ = NULL;
-																			gchar* _tmp595_;
-																			_tmp591_ = p;
-																			_tmp592_ = nv;
-																			_tmp592__length1 = nv_length1;
-																			_tmp593_ = _tmp592_[1];
-																			_tmp594_ = vala_gidl_parser_eval (self, _tmp593_);
-																			_tmp595_ = _tmp594_;
-																			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp591_, "CCode", "array_length_type", _tmp595_, NULL);
-																			_g_free0 (_tmp595_);
+																		gchar** _tmp596_;
+																		gint _tmp596__length1;
+																		const gchar* _tmp597_;
+																		_tmp596_ = nv;
+																		_tmp596__length1 = nv_length1;
+																		_tmp597_ = _tmp596_[0];
+																		if (g_strcmp0 (_tmp597_, "array_length_type") == 0) {
+																			ValaParameter* _tmp598_;
+																			gchar** _tmp599_;
+																			gint _tmp599__length1;
+																			const gchar* _tmp600_;
+																			gchar* _tmp601_ = NULL;
+																			gchar* _tmp602_;
+																			_tmp598_ = p;
+																			_tmp599_ = nv;
+																			_tmp599__length1 = nv_length1;
+																			_tmp600_ = _tmp599_[1];
+																			_tmp601_ = vala_gidl_parser_eval (self, _tmp600_);
+																			_tmp602_ = _tmp601_;
+																			vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp598_, "CCode", "array_length_type", _tmp602_, NULL);
+																			_g_free0 (_tmp602_);
 																		} else {
-																			gchar** _tmp596_;
-																			gint _tmp596__length1;
-																			const gchar* _tmp597_;
-																			_tmp596_ = nv;
-																			_tmp596__length1 = nv_length1;
-																			_tmp597_ = _tmp596_[0];
-																			if (g_strcmp0 (_tmp597_, "array_null_terminated") == 0) {
-																				gchar** _tmp598_;
-																				gint _tmp598__length1;
-																				const gchar* _tmp599_;
-																				gchar* _tmp600_ = NULL;
-																				gchar* _tmp601_;
-																				gboolean _tmp602_;
-																				_tmp598_ = nv;
-																				_tmp598__length1 = nv_length1;
-																				_tmp599_ = _tmp598_[1];
-																				_tmp600_ = vala_gidl_parser_eval (self, _tmp599_);
-																				_tmp601_ = _tmp600_;
-																				_tmp602_ = g_strcmp0 (_tmp601_, "1") == 0;
-																				_g_free0 (_tmp601_);
-																				if (_tmp602_) {
-																					ValaParameter* _tmp603_;
-																					ValaParameter* _tmp604_;
-																					_tmp603_ = p;
-																					vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp603_, "CCode", "array_length", FALSE, NULL);
-																					_tmp604_ = p;
-																					vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp604_, "CCode", "array_null_terminated", TRUE, NULL);
-																				}
-																			} else {
+																			gchar** _tmp603_;
+																			gint _tmp603__length1;
+																			const gchar* _tmp604_;
+																			_tmp603_ = nv;
+																			_tmp603__length1 = nv_length1;
+																			_tmp604_ = _tmp603_[0];
+																			if (g_strcmp0 (_tmp604_, "array_null_terminated") == 0) {
 																				gchar** _tmp605_;
 																				gint _tmp605__length1;
 																				const gchar* _tmp606_;
+																				gchar* _tmp607_ = NULL;
+																				gchar* _tmp608_;
+																				gboolean _tmp609_;
 																				_tmp605_ = nv;
 																				_tmp605__length1 = nv_length1;
-																				_tmp606_ = _tmp605_[0];
-																				if (g_strcmp0 (_tmp606_, "array_length_pos") == 0) {
-																					gchar** _tmp607_;
-																					gint _tmp607__length1;
-																					const gchar* _tmp608_;
-																					gchar* _tmp609_ = NULL;
-																					gchar* _tmp610_;
-																					gdouble _tmp611_ = 0.0;
+																				_tmp606_ = _tmp605_[1];
+																				_tmp607_ = vala_gidl_parser_eval (self, _tmp606_);
+																				_tmp608_ = _tmp607_;
+																				_tmp609_ = g_strcmp0 (_tmp608_, "1") == 0;
+																				_g_free0 (_tmp608_);
+																				if (_tmp609_) {
+																					ValaParameter* _tmp610_;
+																					ValaParameter* _tmp611_;
+																					_tmp610_ = p;
+																					vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp610_, "CCode", "array_length", FALSE, NULL);
+																					_tmp611_ = p;
+																					vala_code_node_set_attribute_bool ((ValaCodeNode*) _tmp611_, "CCode", "array_null_terminated", TRUE, NULL);
+																				}
+																			} else {
+																				gchar** _tmp612_;
+																				gint _tmp612__length1;
+																				const gchar* _tmp613_;
+																				_tmp612_ = nv;
+																				_tmp612__length1 = nv_length1;
+																				_tmp613_ = _tmp612_[0];
+																				if (g_strcmp0 (_tmp613_, "array_length_pos") == 0) {
+																					gchar** _tmp614_;
+																					gint _tmp614__length1;
+																					const gchar* _tmp615_;
+																					gchar* _tmp616_ = NULL;
+																					gchar* _tmp617_;
+																					gdouble _tmp618_ = 0.0;
 																					set_array_length_pos = TRUE;
-																					_tmp607_ = nv;
-																					_tmp607__length1 = nv_length1;
-																					_tmp608_ = _tmp607_[1];
-																					_tmp609_ = vala_gidl_parser_eval (self, _tmp608_);
-																					_tmp610_ = _tmp609_;
-																					_tmp611_ = double_parse (_tmp610_);
-																					array_length_pos = _tmp611_;
-																					_g_free0 (_tmp610_);
+																					_tmp614_ = nv;
+																					_tmp614__length1 = nv_length1;
+																					_tmp615_ = _tmp614_[1];
+																					_tmp616_ = vala_gidl_parser_eval (self, _tmp615_);
+																					_tmp617_ = _tmp616_;
+																					_tmp618_ = double_parse (_tmp617_);
+																					array_length_pos = _tmp618_;
+																					_g_free0 (_tmp617_);
 																				} else {
-																					gchar** _tmp612_;
-																					gint _tmp612__length1;
-																					const gchar* _tmp613_;
-																					_tmp612_ = nv;
-																					_tmp612__length1 = nv_length1;
-																					_tmp613_ = _tmp612_[0];
-																					if (g_strcmp0 (_tmp613_, "delegate_target_pos") == 0) {
-																						gchar** _tmp614_;
-																						gint _tmp614__length1;
-																						const gchar* _tmp615_;
-																						gchar* _tmp616_ = NULL;
-																						gchar* _tmp617_;
-																						gdouble _tmp618_ = 0.0;
+																					gchar** _tmp619_;
+																					gint _tmp619__length1;
+																					const gchar* _tmp620_;
+																					_tmp619_ = nv;
+																					_tmp619__length1 = nv_length1;
+																					_tmp620_ = _tmp619_[0];
+																					if (g_strcmp0 (_tmp620_, "delegate_target_pos") == 0) {
+																						gchar** _tmp621_;
+																						gint _tmp621__length1;
+																						const gchar* _tmp622_;
+																						gchar* _tmp623_ = NULL;
+																						gchar* _tmp624_;
+																						gdouble _tmp625_ = 0.0;
 																						set_delegate_target_pos = TRUE;
-																						_tmp614_ = nv;
-																						_tmp614__length1 = nv_length1;
-																						_tmp615_ = _tmp614_[1];
-																						_tmp616_ = vala_gidl_parser_eval (self, _tmp615_);
-																						_tmp617_ = _tmp616_;
-																						_tmp618_ = double_parse (_tmp617_);
-																						delegate_target_pos = _tmp618_;
-																						_g_free0 (_tmp617_);
+																						_tmp621_ = nv;
+																						_tmp621__length1 = nv_length1;
+																						_tmp622_ = _tmp621_[1];
+																						_tmp623_ = vala_gidl_parser_eval (self, _tmp622_);
+																						_tmp624_ = _tmp623_;
+																						_tmp625_ = double_parse (_tmp624_);
+																						delegate_target_pos = _tmp625_;
+																						_g_free0 (_tmp624_);
 																					} else {
-																						gchar** _tmp619_;
-																						gint _tmp619__length1;
-																						const gchar* _tmp620_;
-																						_tmp619_ = nv;
-																						_tmp619__length1 = nv_length1;
-																						_tmp620_ = _tmp619_[0];
-																						if (g_strcmp0 (_tmp620_, "type_name") == 0) {
-																							ValaParameter* _tmp621_;
-																							gchar** _tmp622_;
-																							gint _tmp622__length1;
-																							const gchar* _tmp623_;
-																							gchar* _tmp624_ = NULL;
-																							gchar* _tmp625_;
-																							ValaDataType* _tmp626_ = NULL;
-																							ValaDataType* _tmp627_;
-																							_tmp621_ = p;
-																							_tmp622_ = nv;
-																							_tmp622__length1 = nv_length1;
-																							_tmp623_ = _tmp622_[1];
-																							_tmp624_ = vala_gidl_parser_eval (self, _tmp623_);
-																							_tmp625_ = _tmp624_;
-																							_tmp626_ = vala_gidl_parser_parse_type_from_string (self, _tmp625_, FALSE, NULL);
+																						gchar** _tmp626_;
+																						gint _tmp626__length1;
+																						const gchar* _tmp627_;
+																						_tmp626_ = nv;
+																						_tmp626__length1 = nv_length1;
+																						_tmp627_ = _tmp626_[0];
+																						if (g_strcmp0 (_tmp627_, "type_name") == 0) {
+																							ValaParameter* _tmp628_;
+																							gchar** _tmp629_;
+																							gint _tmp629__length1;
+																							const gchar* _tmp630_;
+																							gchar* _tmp631_ = NULL;
+																							gchar* _tmp632_;
+																							ValaDataType* _tmp633_ = NULL;
+																							ValaDataType* _tmp634_;
+																							_tmp628_ = p;
+																							_tmp629_ = nv;
+																							_tmp629__length1 = nv_length1;
+																							_tmp630_ = _tmp629_[1];
+																							_tmp631_ = vala_gidl_parser_eval (self, _tmp630_);
+																							_tmp632_ = _tmp631_;
+																							_tmp633_ = vala_gidl_parser_parse_type_from_string (self, _tmp632_, FALSE, NULL);
 																							_vala_code_node_unref0 (param_type);
-																							param_type = _tmp626_;
-																							_tmp627_ = param_type;
-																							vala_variable_set_variable_type ((ValaVariable*) _tmp621_, _tmp627_);
-																							_g_free0 (_tmp625_);
+																							param_type = _tmp633_;
+																							_tmp634_ = param_type;
+																							vala_variable_set_variable_type ((ValaVariable*) _tmp628_, _tmp634_);
+																							_g_free0 (_tmp632_);
 																						} else {
-																							gchar** _tmp628_;
-																							gint _tmp628__length1;
-																							const gchar* _tmp629_;
-																							_tmp628_ = nv;
-																							_tmp628__length1 = nv_length1;
-																							_tmp629_ = _tmp628_[0];
-																							if (g_strcmp0 (_tmp629_, "ctype") == 0) {
-																								ValaParameter* _tmp630_;
-																								gchar** _tmp631_;
-																								gint _tmp631__length1;
-																								const gchar* _tmp632_;
-																								gchar* _tmp633_ = NULL;
-																								gchar* _tmp634_;
-																								_tmp630_ = p;
-																								_tmp631_ = nv;
-																								_tmp631__length1 = nv_length1;
-																								_tmp632_ = _tmp631_[1];
-																								_tmp633_ = vala_gidl_parser_eval (self, _tmp632_);
-																								_tmp634_ = _tmp633_;
-																								vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp630_, "CCode", "type", _tmp634_, NULL);
-																								_g_free0 (_tmp634_);
+																							gchar** _tmp635_;
+																							gint _tmp635__length1;
+																							const gchar* _tmp636_;
+																							_tmp635_ = nv;
+																							_tmp635__length1 = nv_length1;
+																							_tmp636_ = _tmp635_[0];
+																							if (g_strcmp0 (_tmp636_, "ctype") == 0) {
+																								ValaParameter* _tmp637_;
+																								gchar** _tmp638_;
+																								gint _tmp638__length1;
+																								const gchar* _tmp639_;
+																								gchar* _tmp640_ = NULL;
+																								gchar* _tmp641_;
+																								_tmp637_ = p;
+																								_tmp638_ = nv;
+																								_tmp638__length1 = nv_length1;
+																								_tmp639_ = _tmp638_[1];
+																								_tmp640_ = vala_gidl_parser_eval (self, _tmp639_);
+																								_tmp641_ = _tmp640_;
+																								vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp637_, "CCode", "type", _tmp641_, NULL);
+																								_g_free0 (_tmp641_);
 																							} else {
-																								gchar** _tmp635_;
-																								gint _tmp635__length1;
-																								const gchar* _tmp636_;
-																								_tmp635_ = nv;
-																								_tmp635__length1 = nv_length1;
-																								_tmp636_ = _tmp635_[0];
-																								if (g_strcmp0 (_tmp636_, "type_arguments") == 0) {
-																									ValaDataType* _tmp637_;
-																									gchar** _tmp638_;
-																									gint _tmp638__length1;
-																									const gchar* _tmp639_;
-																									gchar* _tmp640_ = NULL;
-																									gchar* _tmp641_;
-																									_tmp637_ = param_type;
-																									_tmp638_ = nv;
-																									_tmp638__length1 = nv_length1;
-																									_tmp639_ = _tmp638_[1];
-																									_tmp640_ = vala_gidl_parser_eval (self, _tmp639_);
-																									_tmp641_ = _tmp640_;
-																									vala_gidl_parser_parse_type_arguments_from_string (self, _tmp637_, _tmp641_, NULL);
-																									_g_free0 (_tmp641_);
+																								gchar** _tmp642_;
+																								gint _tmp642__length1;
+																								const gchar* _tmp643_;
+																								_tmp642_ = nv;
+																								_tmp642__length1 = nv_length1;
+																								_tmp643_ = _tmp642_[0];
+																								if (g_strcmp0 (_tmp643_, "type_arguments") == 0) {
+																									ValaDataType* _tmp644_;
+																									gchar** _tmp645_;
+																									gint _tmp645__length1;
+																									const gchar* _tmp646_;
+																									gchar* _tmp647_ = NULL;
+																									gchar* _tmp648_;
+																									_tmp644_ = param_type;
+																									_tmp645_ = nv;
+																									_tmp645__length1 = nv_length1;
+																									_tmp646_ = _tmp645_[1];
+																									_tmp647_ = vala_gidl_parser_eval (self, _tmp646_);
+																									_tmp648_ = _tmp647_;
+																									vala_gidl_parser_parse_type_arguments_from_string (self, _tmp644_, _tmp648_, NULL);
+																									_g_free0 (_tmp648_);
 																								} else {
-																									gchar** _tmp642_;
-																									gint _tmp642__length1;
-																									const gchar* _tmp643_;
-																									_tmp642_ = nv;
-																									_tmp642__length1 = nv_length1;
-																									_tmp643_ = _tmp642_[0];
-																									if (g_strcmp0 (_tmp643_, "default_value") == 0) {
-																										gchar** _tmp644_;
-																										gint _tmp644__length1;
-																										const gchar* _tmp645_;
-																										gchar* _tmp646_ = NULL;
+																									gchar** _tmp649_;
+																									gint _tmp649__length1;
+																									const gchar* _tmp650_;
+																									_tmp649_ = nv;
+																									_tmp649__length1 = nv_length1;
+																									_tmp650_ = _tmp649_[0];
+																									if (g_strcmp0 (_tmp650_, "default_value") == 0) {
+																										gchar** _tmp651_;
+																										gint _tmp651__length1;
+																										const gchar* _tmp652_;
+																										gchar* _tmp653_ = NULL;
 																										gchar* val;
-																										const gchar* _tmp647_;
-																										_tmp644_ = nv;
-																										_tmp644__length1 = nv_length1;
-																										_tmp645_ = _tmp644_[1];
-																										_tmp646_ = vala_gidl_parser_eval (self, _tmp645_);
-																										val = _tmp646_;
-																										_tmp647_ = val;
-																										if (g_strcmp0 (_tmp647_, "null") == 0) {
-																											ValaParameter* _tmp648_;
-																											ValaDataType* _tmp649_;
-																											ValaSourceReference* _tmp650_;
-																											ValaSourceReference* _tmp651_;
-																											ValaNullLiteral* _tmp652_;
-																											ValaNullLiteral* _tmp653_;
-																											_tmp648_ = p;
-																											_tmp649_ = param_type;
-																											_tmp650_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp649_);
-																											_tmp651_ = _tmp650_;
-																											_tmp652_ = vala_null_literal_new (_tmp651_);
-																											_tmp653_ = _tmp652_;
-																											vala_variable_set_initializer ((ValaVariable*) _tmp648_, (ValaExpression*) _tmp653_);
-																											_vala_code_node_unref0 (_tmp653_);
+																										const gchar* _tmp654_;
+																										_tmp651_ = nv;
+																										_tmp651__length1 = nv_length1;
+																										_tmp652_ = _tmp651_[1];
+																										_tmp653_ = vala_gidl_parser_eval (self, _tmp652_);
+																										val = _tmp653_;
+																										_tmp654_ = val;
+																										if (g_strcmp0 (_tmp654_, "null") == 0) {
+																											ValaParameter* _tmp655_;
+																											ValaDataType* _tmp656_;
+																											ValaSourceReference* _tmp657_;
+																											ValaSourceReference* _tmp658_;
+																											ValaNullLiteral* _tmp659_;
+																											ValaNullLiteral* _tmp660_;
+																											_tmp655_ = p;
+																											_tmp656_ = param_type;
+																											_tmp657_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp656_);
+																											_tmp658_ = _tmp657_;
+																											_tmp659_ = vala_null_literal_new (_tmp658_);
+																											_tmp660_ = _tmp659_;
+																											vala_variable_set_initializer ((ValaVariable*) _tmp655_, (ValaExpression*) _tmp660_);
+																											_vala_code_node_unref0 (_tmp660_);
 																										} else {
-																											const gchar* _tmp654_;
-																											_tmp654_ = val;
-																											if (g_strcmp0 (_tmp654_, "true") == 0) {
-																												ValaParameter* _tmp655_;
-																												ValaDataType* _tmp656_;
-																												ValaSourceReference* _tmp657_;
-																												ValaSourceReference* _tmp658_;
-																												ValaBooleanLiteral* _tmp659_;
-																												ValaBooleanLiteral* _tmp660_;
-																												_tmp655_ = p;
-																												_tmp656_ = param_type;
-																												_tmp657_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp656_);
-																												_tmp658_ = _tmp657_;
-																												_tmp659_ = vala_boolean_literal_new (TRUE, _tmp658_);
-																												_tmp660_ = _tmp659_;
-																												vala_variable_set_initializer ((ValaVariable*) _tmp655_, (ValaExpression*) _tmp660_);
-																												_vala_code_node_unref0 (_tmp660_);
+																											const gchar* _tmp661_;
+																											_tmp661_ = val;
+																											if (g_strcmp0 (_tmp661_, "true") == 0) {
+																												ValaParameter* _tmp662_;
+																												ValaDataType* _tmp663_;
+																												ValaSourceReference* _tmp664_;
+																												ValaSourceReference* _tmp665_;
+																												ValaBooleanLiteral* _tmp666_;
+																												ValaBooleanLiteral* _tmp667_;
+																												_tmp662_ = p;
+																												_tmp663_ = param_type;
+																												_tmp664_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp663_);
+																												_tmp665_ = _tmp664_;
+																												_tmp666_ = vala_boolean_literal_new (TRUE, _tmp665_);
+																												_tmp667_ = _tmp666_;
+																												vala_variable_set_initializer ((ValaVariable*) _tmp662_, (ValaExpression*) _tmp667_);
+																												_vala_code_node_unref0 (_tmp667_);
 																											} else {
-																												const gchar* _tmp661_;
-																												_tmp661_ = val;
-																												if (g_strcmp0 (_tmp661_, "false") == 0) {
-																													ValaParameter* _tmp662_;
-																													ValaDataType* _tmp663_;
-																													ValaSourceReference* _tmp664_;
-																													ValaSourceReference* _tmp665_;
-																													ValaBooleanLiteral* _tmp666_;
-																													ValaBooleanLiteral* _tmp667_;
-																													_tmp662_ = p;
-																													_tmp663_ = param_type;
-																													_tmp664_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp663_);
-																													_tmp665_ = _tmp664_;
-																													_tmp666_ = vala_boolean_literal_new (FALSE, _tmp665_);
-																													_tmp667_ = _tmp666_;
-																													vala_variable_set_initializer ((ValaVariable*) _tmp662_, (ValaExpression*) _tmp667_);
-																													_vala_code_node_unref0 (_tmp667_);
+																												const gchar* _tmp668_;
+																												_tmp668_ = val;
+																												if (g_strcmp0 (_tmp668_, "false") == 0) {
+																													ValaParameter* _tmp669_;
+																													ValaDataType* _tmp670_;
+																													ValaSourceReference* _tmp671_;
+																													ValaSourceReference* _tmp672_;
+																													ValaBooleanLiteral* _tmp673_;
+																													ValaBooleanLiteral* _tmp674_;
+																													_tmp669_ = p;
+																													_tmp670_ = param_type;
+																													_tmp671_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp670_);
+																													_tmp672_ = _tmp671_;
+																													_tmp673_ = vala_boolean_literal_new (FALSE, _tmp672_);
+																													_tmp674_ = _tmp673_;
+																													vala_variable_set_initializer ((ValaVariable*) _tmp669_, (ValaExpression*) _tmp674_);
+																													_vala_code_node_unref0 (_tmp674_);
 																												} else {
-																													const gchar* _tmp668_;
-																													_tmp668_ = val;
-																													if (g_strcmp0 (_tmp668_, "") == 0) {
-																														ValaParameter* _tmp669_;
-																														ValaDataType* _tmp670_;
-																														ValaSourceReference* _tmp671_;
-																														ValaSourceReference* _tmp672_;
-																														ValaStringLiteral* _tmp673_;
-																														ValaStringLiteral* _tmp674_;
-																														_tmp669_ = p;
-																														_tmp670_ = param_type;
-																														_tmp671_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp670_);
-																														_tmp672_ = _tmp671_;
-																														_tmp673_ = vala_string_literal_new ("\"\"", _tmp672_);
-																														_tmp674_ = _tmp673_;
-																														vala_variable_set_initializer ((ValaVariable*) _tmp669_, (ValaExpression*) _tmp674_);
-																														_vala_code_node_unref0 (_tmp674_);
+																													const gchar* _tmp675_;
+																													_tmp675_ = val;
+																													if (g_strcmp0 (_tmp675_, "") == 0) {
+																														ValaParameter* _tmp676_;
+																														ValaDataType* _tmp677_;
+																														ValaSourceReference* _tmp678_;
+																														ValaSourceReference* _tmp679_;
+																														ValaStringLiteral* _tmp680_;
+																														ValaStringLiteral* _tmp681_;
+																														_tmp676_ = p;
+																														_tmp677_ = param_type;
+																														_tmp678_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp677_);
+																														_tmp679_ = _tmp678_;
+																														_tmp680_ = vala_string_literal_new ("\"\"", _tmp679_);
+																														_tmp681_ = _tmp680_;
+																														vala_variable_set_initializer ((ValaVariable*) _tmp676_, (ValaExpression*) _tmp681_);
+																														_vala_code_node_unref0 (_tmp681_);
 																													} else {
-																														const gchar* _tmp675_;
-																														gboolean _tmp676_ = FALSE;
-																														_tmp675_ = val;
-																														_tmp676_ = int64_try_parse (_tmp675_, NULL);
-																														if (_tmp676_) {
-																															ValaParameter* _tmp677_;
-																															const gchar* _tmp678_;
-																															ValaDataType* _tmp679_;
-																															ValaSourceReference* _tmp680_;
-																															ValaSourceReference* _tmp681_;
-																															ValaIntegerLiteral* _tmp682_;
-																															ValaIntegerLiteral* _tmp683_;
-																															_tmp677_ = p;
-																															_tmp678_ = val;
-																															_tmp679_ = param_type;
-																															_tmp680_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp679_);
-																															_tmp681_ = _tmp680_;
-																															_tmp682_ = vala_integer_literal_new (_tmp678_, _tmp681_);
-																															_tmp683_ = _tmp682_;
-																															vala_variable_set_initializer ((ValaVariable*) _tmp677_, (ValaExpression*) _tmp683_);
-																															_vala_code_node_unref0 (_tmp683_);
+																														const gchar* _tmp682_;
+																														gboolean _tmp683_ = FALSE;
+																														_tmp682_ = val;
+																														_tmp683_ = int64_try_parse (_tmp682_, NULL);
+																														if (_tmp683_) {
+																															ValaParameter* _tmp684_;
+																															const gchar* _tmp685_;
+																															ValaDataType* _tmp686_;
+																															ValaSourceReference* _tmp687_;
+																															ValaSourceReference* _tmp688_;
+																															ValaIntegerLiteral* _tmp689_;
+																															ValaIntegerLiteral* _tmp690_;
+																															_tmp684_ = p;
+																															_tmp685_ = val;
+																															_tmp686_ = param_type;
+																															_tmp687_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp686_);
+																															_tmp688_ = _tmp687_;
+																															_tmp689_ = vala_integer_literal_new (_tmp685_, _tmp688_);
+																															_tmp690_ = _tmp689_;
+																															vala_variable_set_initializer ((ValaVariable*) _tmp684_, (ValaExpression*) _tmp690_);
+																															_vala_code_node_unref0 (_tmp690_);
 																														} else {
-																															const gchar* _tmp684_;
-																															gboolean _tmp685_ = FALSE;
-																															_tmp684_ = val;
-																															_tmp685_ = double_try_parse (_tmp684_, NULL);
-																															if (_tmp685_) {
-																																ValaParameter* _tmp686_;
-																																const gchar* _tmp687_;
-																																ValaDataType* _tmp688_;
-																																ValaSourceReference* _tmp689_;
-																																ValaSourceReference* _tmp690_;
-																																ValaRealLiteral* _tmp691_;
-																																ValaRealLiteral* _tmp692_;
-																																_tmp686_ = p;
-																																_tmp687_ = val;
-																																_tmp688_ = param_type;
-																																_tmp689_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp688_);
-																																_tmp690_ = _tmp689_;
-																																_tmp691_ = vala_real_literal_new (_tmp687_, _tmp690_);
-																																_tmp692_ = _tmp691_;
-																																vala_variable_set_initializer ((ValaVariable*) _tmp686_, (ValaExpression*) _tmp692_);
-																																_vala_code_node_unref0 (_tmp692_);
-																															} else {
-																																gboolean _tmp693_ = FALSE;
+																															const gchar* _tmp691_;
+																															gboolean _tmp692_ = FALSE;
+																															_tmp691_ = val;
+																															_tmp692_ = double_try_parse (_tmp691_, NULL);
+																															if (_tmp692_) {
+																																ValaParameter* _tmp693_;
 																																const gchar* _tmp694_;
-																																gboolean _tmp695_ = FALSE;
-																																gboolean _tmp698_;
+																																ValaDataType* _tmp695_;
+																																ValaSourceReference* _tmp696_;
+																																ValaSourceReference* _tmp697_;
+																																ValaRealLiteral* _tmp698_;
+																																ValaRealLiteral* _tmp699_;
+																																_tmp693_ = p;
 																																_tmp694_ = val;
-																																_tmp695_ = g_str_has_prefix (_tmp694_, "\"");
-																																if (_tmp695_) {
-																																	const gchar* _tmp696_;
-																																	gboolean _tmp697_ = FALSE;
-																																	_tmp696_ = val;
-																																	_tmp697_ = g_str_has_suffix (_tmp696_, "\"");
-																																	_tmp693_ = _tmp697_;
+																																_tmp695_ = param_type;
+																																_tmp696_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp695_);
+																																_tmp697_ = _tmp696_;
+																																_tmp698_ = vala_real_literal_new (_tmp694_, _tmp697_);
+																																_tmp699_ = _tmp698_;
+																																vala_variable_set_initializer ((ValaVariable*) _tmp693_, (ValaExpression*) _tmp699_);
+																																_vala_code_node_unref0 (_tmp699_);
+																															} else {
+																																gboolean _tmp700_ = FALSE;
+																																const gchar* _tmp701_;
+																																gboolean _tmp702_ = FALSE;
+																																gboolean _tmp705_;
+																																_tmp701_ = val;
+																																_tmp702_ = g_str_has_prefix (_tmp701_, "\"");
+																																if (_tmp702_) {
+																																	const gchar* _tmp703_;
+																																	gboolean _tmp704_ = FALSE;
+																																	_tmp703_ = val;
+																																	_tmp704_ = g_str_has_suffix (_tmp703_, "\"");
+																																	_tmp700_ = _tmp704_;
 																																} else {
-																																	_tmp693_ = FALSE;
+																																	_tmp700_ = FALSE;
 																																}
-																																_tmp698_ = _tmp693_;
-																																if (_tmp698_) {
-																																	ValaParameter* _tmp699_;
-																																	const gchar* _tmp700_;
-																																	ValaDataType* _tmp701_;
-																																	ValaSourceReference* _tmp702_;
-																																	ValaSourceReference* _tmp703_;
-																																	ValaStringLiteral* _tmp704_;
-																																	ValaStringLiteral* _tmp705_;
-																																	_tmp699_ = p;
-																																	_tmp700_ = val;
-																																	_tmp701_ = param_type;
-																																	_tmp702_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp701_);
-																																	_tmp703_ = _tmp702_;
-																																	_tmp704_ = vala_string_literal_new (_tmp700_, _tmp703_);
-																																	_tmp705_ = _tmp704_;
-																																	vala_variable_set_initializer ((ValaVariable*) _tmp699_, (ValaExpression*) _tmp705_);
-																																	_vala_code_node_unref0 (_tmp705_);
+																																_tmp705_ = _tmp700_;
+																																if (_tmp705_) {
+																																	ValaParameter* _tmp706_;
+																																	const gchar* _tmp707_;
+																																	ValaDataType* _tmp708_;
+																																	ValaSourceReference* _tmp709_;
+																																	ValaSourceReference* _tmp710_;
+																																	ValaStringLiteral* _tmp711_;
+																																	ValaStringLiteral* _tmp712_;
+																																	_tmp706_ = p;
+																																	_tmp707_ = val;
+																																	_tmp708_ = param_type;
+																																	_tmp709_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp708_);
+																																	_tmp710_ = _tmp709_;
+																																	_tmp711_ = vala_string_literal_new (_tmp707_, _tmp710_);
+																																	_tmp712_ = _tmp711_;
+																																	vala_variable_set_initializer ((ValaVariable*) _tmp706_, (ValaExpression*) _tmp712_);
+																																	_vala_code_node_unref0 (_tmp712_);
 																																} else {
-																																	const gchar* _tmp706_;
-																																	gchar** _tmp707_;
-																																	gchar** _tmp708_ = NULL;
-																																	_tmp706_ = val;
-																																	_tmp708_ = _tmp707_ = g_strsplit (_tmp706_, ".", 0);
+																																	const gchar* _tmp713_;
+																																	gchar** _tmp714_;
+																																	gchar** _tmp715_ = NULL;
+																																	_tmp713_ = val;
+																																	_tmp715_ = _tmp714_ = g_strsplit (_tmp713_, ".", 0);
 																																	{
 																																		gchar** member_collection = NULL;
 																																		gint member_collection_length1 = 0;
 																																		gint _member_collection_size_ = 0;
 																																		gint member_it = 0;
-																																		member_collection = _tmp708_;
-																																		member_collection_length1 = _vala_array_length (_tmp707_);
-																																		for (member_it = 0; member_it < _vala_array_length (_tmp707_); member_it = member_it + 1) {
-																																			gchar* _tmp709_;
+																																		member_collection = _tmp715_;
+																																		member_collection_length1 = _vala_array_length (_tmp714_);
+																																		for (member_it = 0; member_it < _vala_array_length (_tmp714_); member_it = member_it + 1) {
+																																			gchar* _tmp716_;
 																																			gchar* member = NULL;
-																																			_tmp709_ = g_strdup (member_collection[member_it]);
-																																			member = _tmp709_;
+																																			_tmp716_ = g_strdup (member_collection[member_it]);
+																																			member = _tmp716_;
 																																			{
-																																				ValaParameter* _tmp710_;
-																																				ValaParameter* _tmp711_;
-																																				ValaExpression* _tmp712_;
-																																				ValaExpression* _tmp713_;
-																																				const gchar* _tmp714_;
-																																				ValaDataType* _tmp715_;
-																																				ValaSourceReference* _tmp716_;
-																																				ValaSourceReference* _tmp717_;
-																																				ValaMemberAccess* _tmp718_;
-																																				ValaMemberAccess* _tmp719_;
-																																				_tmp710_ = p;
-																																				_tmp711_ = p;
-																																				_tmp712_ = vala_variable_get_initializer ((ValaVariable*) _tmp711_);
-																																				_tmp713_ = _tmp712_;
-																																				_tmp714_ = member;
-																																				_tmp715_ = param_type;
-																																				_tmp716_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp715_);
-																																				_tmp717_ = _tmp716_;
-																																				_tmp718_ = vala_member_access_new (_tmp713_, _tmp714_, _tmp717_);
-																																				_tmp719_ = _tmp718_;
-																																				vala_variable_set_initializer ((ValaVariable*) _tmp710_, (ValaExpression*) _tmp719_);
-																																				_vala_code_node_unref0 (_tmp719_);
+																																				ValaParameter* _tmp717_;
+																																				ValaParameter* _tmp718_;
+																																				ValaExpression* _tmp719_;
+																																				ValaExpression* _tmp720_;
+																																				const gchar* _tmp721_;
+																																				ValaDataType* _tmp722_;
+																																				ValaSourceReference* _tmp723_;
+																																				ValaSourceReference* _tmp724_;
+																																				ValaMemberAccess* _tmp725_;
+																																				ValaMemberAccess* _tmp726_;
+																																				_tmp717_ = p;
+																																				_tmp718_ = p;
+																																				_tmp719_ = vala_variable_get_initializer ((ValaVariable*) _tmp718_);
+																																				_tmp720_ = _tmp719_;
+																																				_tmp721_ = member;
+																																				_tmp722_ = param_type;
+																																				_tmp723_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp722_);
+																																				_tmp724_ = _tmp723_;
+																																				_tmp725_ = vala_member_access_new (_tmp720_, _tmp721_, _tmp724_);
+																																				_tmp726_ = _tmp725_;
+																																				vala_variable_set_initializer ((ValaVariable*) _tmp717_, (ValaExpression*) _tmp726_);
+																																				_vala_code_node_unref0 (_tmp726_);
 																																				_g_free0 (member);
 																																			}
 																																		}
@@ -15406,259 +15452,259 @@ static ValaMethod* vala_gidl_parser_create_method (ValaGIdlParser* self, const g
 						}
 					}
 				}
-				_tmp721_ = last_param;
-				if (_tmp721_ != NULL) {
-					ValaParameter* _tmp722_;
-					const gchar* _tmp723_;
-					const gchar* _tmp724_;
-					ValaParameter* _tmp725_;
-					const gchar* _tmp726_;
-					const gchar* _tmp727_;
-					gchar* _tmp728_;
-					gchar* _tmp729_;
-					_tmp722_ = p;
-					_tmp723_ = vala_symbol_get_name ((ValaSymbol*) _tmp722_);
-					_tmp724_ = _tmp723_;
-					_tmp725_ = last_param;
-					_tmp726_ = vala_symbol_get_name ((ValaSymbol*) _tmp725_);
-					_tmp727_ = _tmp726_;
-					_tmp728_ = g_strconcat ("n_", _tmp727_, NULL);
-					_tmp729_ = _tmp728_;
-					_tmp720_ = g_strcmp0 (_tmp724_, _tmp729_) == 0;
-					_g_free0 (_tmp729_);
+				_tmp728_ = last_param;
+				if (_tmp728_ != NULL) {
+					ValaParameter* _tmp729_;
+					const gchar* _tmp730_;
+					const gchar* _tmp731_;
+					ValaParameter* _tmp732_;
+					const gchar* _tmp733_;
+					const gchar* _tmp734_;
+					gchar* _tmp735_;
+					gchar* _tmp736_;
+					_tmp729_ = p;
+					_tmp730_ = vala_symbol_get_name ((ValaSymbol*) _tmp729_);
+					_tmp731_ = _tmp730_;
+					_tmp732_ = last_param;
+					_tmp733_ = vala_symbol_get_name ((ValaSymbol*) _tmp732_);
+					_tmp734_ = _tmp733_;
+					_tmp735_ = g_strconcat ("n_", _tmp734_, NULL);
+					_tmp736_ = _tmp735_;
+					_tmp727_ = g_strcmp0 (_tmp731_, _tmp736_) == 0;
+					_g_free0 (_tmp736_);
 				} else {
-					_tmp720_ = FALSE;
+					_tmp727_ = FALSE;
 				}
-				_tmp730_ = _tmp720_;
-				if (_tmp730_) {
-					ValaDataType* _tmp731_;
-					_tmp731_ = last_param_type;
-					if (!VALA_IS_ARRAY_TYPE (_tmp731_)) {
-						ValaDataType* _tmp732_;
-						ValaDataType* _tmp733_;
-						ValaSourceReference* _tmp734_;
-						ValaSourceReference* _tmp735_;
-						ValaArrayType* _tmp736_;
-						ValaParameter* _tmp737_;
-						ValaDataType* _tmp738_;
-						ValaParameter* _tmp739_;
-						_tmp732_ = last_param_type;
-						_tmp733_ = last_param_type;
-						_tmp734_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp733_);
-						_tmp735_ = _tmp734_;
-						_tmp736_ = vala_array_type_new (_tmp732_, 1, _tmp735_);
+				_tmp737_ = _tmp727_;
+				if (_tmp737_) {
+					ValaDataType* _tmp738_;
+					_tmp738_ = last_param_type;
+					if (!VALA_IS_ARRAY_TYPE (_tmp738_)) {
+						ValaDataType* _tmp739_;
+						ValaDataType* _tmp740_;
+						ValaSourceReference* _tmp741_;
+						ValaSourceReference* _tmp742_;
+						ValaArrayType* _tmp743_;
+						ValaParameter* _tmp744_;
+						ValaDataType* _tmp745_;
+						ValaParameter* _tmp746_;
+						_tmp739_ = last_param_type;
+						_tmp740_ = last_param_type;
+						_tmp741_ = vala_code_node_get_source_reference ((ValaCodeNode*) _tmp740_);
+						_tmp742_ = _tmp741_;
+						_tmp743_ = vala_array_type_new (_tmp739_, 1, _tmp742_);
 						_vala_code_node_unref0 (last_param_type);
-						last_param_type = (ValaDataType*) _tmp736_;
-						_tmp737_ = last_param;
-						_tmp738_ = last_param_type;
-						vala_variable_set_variable_type ((ValaVariable*) _tmp737_, _tmp738_);
-						_tmp739_ = last_param;
-						vala_parameter_set_direction (_tmp739_, VALA_PARAMETER_DIRECTION_IN);
+						last_param_type = (ValaDataType*) _tmp743_;
+						_tmp744_ = last_param;
+						_tmp745_ = last_param_type;
+						vala_variable_set_variable_type ((ValaVariable*) _tmp744_, _tmp745_);
+						_tmp746_ = last_param;
+						vala_parameter_set_direction (_tmp746_, VALA_PARAMETER_DIRECTION_IN);
 					}
 					hide_param = TRUE;
 				} else {
-					gboolean _tmp740_ = FALSE;
-					ValaParameter* _tmp741_;
-					gboolean _tmp745_;
-					_tmp741_ = last_param;
-					if (_tmp741_ != NULL) {
-						ValaParameter* _tmp742_;
-						const gchar* _tmp743_;
-						const gchar* _tmp744_;
-						_tmp742_ = p;
-						_tmp743_ = vala_symbol_get_name ((ValaSymbol*) _tmp742_);
-						_tmp744_ = _tmp743_;
-						_tmp740_ = g_strcmp0 (_tmp744_, "user_data") == 0;
+					gboolean _tmp747_ = FALSE;
+					ValaParameter* _tmp748_;
+					gboolean _tmp752_;
+					_tmp748_ = last_param;
+					if (_tmp748_ != NULL) {
+						ValaParameter* _tmp749_;
+						const gchar* _tmp750_;
+						const gchar* _tmp751_;
+						_tmp749_ = p;
+						_tmp750_ = vala_symbol_get_name ((ValaSymbol*) _tmp749_);
+						_tmp751_ = _tmp750_;
+						_tmp747_ = g_strcmp0 (_tmp751_, "user_data") == 0;
 					} else {
-						_tmp740_ = FALSE;
+						_tmp747_ = FALSE;
 					}
-					_tmp745_ = _tmp740_;
-					if (_tmp745_) {
+					_tmp752_ = _tmp747_;
+					if (_tmp752_) {
 						hide_param = TRUE;
 					}
 				}
-				_tmp747_ = show_param;
-				if (_tmp747_) {
-					_tmp746_ = TRUE;
+				_tmp754_ = show_param;
+				if (_tmp754_) {
+					_tmp753_ = TRUE;
 				} else {
-					gboolean _tmp748_;
-					_tmp748_ = hide_param;
-					_tmp746_ = !_tmp748_;
-				}
-				_tmp749_ = _tmp746_;
-				if (_tmp749_) {
-					ValaMethod* _tmp750_;
-					ValaParameter* _tmp751_;
-					gboolean _tmp752_;
 					gboolean _tmp755_;
-					_tmp750_ = m;
-					_tmp751_ = p;
-					vala_method_add_parameter (_tmp750_, _tmp751_);
-					_tmp752_ = set_array_length_pos;
-					if (_tmp752_) {
-						ValaParameter* _tmp753_;
-						gdouble _tmp754_;
-						_tmp753_ = p;
-						_tmp754_ = array_length_pos;
-						vala_code_node_set_attribute_double ((ValaCodeNode*) _tmp753_, "CCode", "array_length_pos", _tmp754_, NULL);
+					_tmp755_ = hide_param;
+					_tmp753_ = !_tmp755_;
+				}
+				_tmp756_ = _tmp753_;
+				if (_tmp756_) {
+					ValaMethod* _tmp757_;
+					ValaParameter* _tmp758_;
+					gboolean _tmp759_;
+					gboolean _tmp762_;
+					_tmp757_ = m;
+					_tmp758_ = p;
+					vala_method_add_parameter (_tmp757_, _tmp758_);
+					_tmp759_ = set_array_length_pos;
+					if (_tmp759_) {
+						ValaParameter* _tmp760_;
+						gdouble _tmp761_;
+						_tmp760_ = p;
+						_tmp761_ = array_length_pos;
+						vala_code_node_set_attribute_double ((ValaCodeNode*) _tmp760_, "CCode", "array_length_pos", _tmp761_, NULL);
 					}
-					_tmp755_ = set_delegate_target_pos;
-					if (_tmp755_) {
-						ValaParameter* _tmp756_;
-						gdouble _tmp757_;
-						_tmp756_ = p;
-						_tmp757_ = delegate_target_pos;
-						vala_code_node_set_attribute_double ((ValaCodeNode*) _tmp756_, "CCode", "delegate_target_pos", _tmp757_, NULL);
+					_tmp762_ = set_delegate_target_pos;
+					if (_tmp762_) {
+						ValaParameter* _tmp763_;
+						gdouble _tmp764_;
+						_tmp763_ = p;
+						_tmp764_ = delegate_target_pos;
+						vala_code_node_set_attribute_double ((ValaCodeNode*) _tmp763_, "CCode", "delegate_target_pos", _tmp764_, NULL);
 					}
 				}
-				_tmp758_ = p;
-				_tmp759_ = _vala_code_node_ref0 (_tmp758_);
+				_tmp765_ = p;
+				_tmp766_ = _vala_code_node_ref0 (_tmp765_);
 				_vala_code_node_unref0 (last_param);
-				last_param = _tmp759_;
-				_tmp760_ = param_type;
-				_tmp761_ = _vala_code_node_ref0 (_tmp760_);
+				last_param = _tmp766_;
+				_tmp767_ = param_type;
+				_tmp768_ = _vala_code_node_ref0 (_tmp767_);
 				_vala_code_node_unref0 (last_param_type);
-				last_param_type = _tmp761_;
+				last_param_type = _tmp768_;
 				_vala_code_node_unref0 (p);
 				_vala_code_node_unref0 (param_type);
 				_g_free0 (param_name);
 			}
 		}
 	}
-	_tmp763_ = suppress_throws;
-	if (_tmp763_ == FALSE) {
-		const gchar* _tmp764_;
-		_tmp764_ = error_types;
-		_tmp762_ = _tmp764_ != NULL;
+	_tmp770_ = suppress_throws;
+	if (_tmp770_ == FALSE) {
+		const gchar* _tmp771_;
+		_tmp771_ = error_types;
+		_tmp769_ = _tmp771_ != NULL;
 	} else {
-		_tmp762_ = FALSE;
+		_tmp769_ = FALSE;
 	}
-	_tmp765_ = _tmp762_;
-	if (_tmp765_) {
-		const gchar* _tmp766_;
-		gchar* _tmp767_ = NULL;
-		gchar* _tmp768_;
-		gchar** _tmp769_;
-		gchar** _tmp770_ = NULL;
-		gchar** _tmp771_;
-		gint _tmp771__length1;
+	_tmp772_ = _tmp769_;
+	if (_tmp772_) {
+		const gchar* _tmp773_;
+		gchar* _tmp774_ = NULL;
+		gchar* _tmp775_;
+		gchar** _tmp776_;
+		gchar** _tmp777_ = NULL;
+		gchar** _tmp778_;
+		gint _tmp778__length1;
 		gchar** type_args;
 		gint type_args_length1;
 		gint _type_args_size_;
-		gchar** _tmp772_;
-		gint _tmp772__length1;
-		_tmp766_ = error_types;
-		_tmp767_ = vala_gidl_parser_eval (self, _tmp766_);
-		_tmp768_ = _tmp767_;
-		_tmp770_ = _tmp769_ = g_strsplit (_tmp768_, ",", 0);
-		_tmp771_ = _tmp770_;
-		_tmp771__length1 = _vala_array_length (_tmp769_);
-		_g_free0 (_tmp768_);
-		type_args = _tmp771_;
-		type_args_length1 = _tmp771__length1;
+		gchar** _tmp779_;
+		gint _tmp779__length1;
+		_tmp773_ = error_types;
+		_tmp774_ = vala_gidl_parser_eval (self, _tmp773_);
+		_tmp775_ = _tmp774_;
+		_tmp777_ = _tmp776_ = g_strsplit (_tmp775_, ",", 0);
+		_tmp778_ = _tmp777_;
+		_tmp778__length1 = _vala_array_length (_tmp776_);
+		_g_free0 (_tmp775_);
+		type_args = _tmp778_;
+		type_args_length1 = _tmp778__length1;
 		_type_args_size_ = type_args_length1;
-		_tmp772_ = type_args;
-		_tmp772__length1 = type_args_length1;
+		_tmp779_ = type_args;
+		_tmp779__length1 = type_args_length1;
 		{
 			gchar** type_arg_collection = NULL;
 			gint type_arg_collection_length1 = 0;
 			gint _type_arg_collection_size_ = 0;
 			gint type_arg_it = 0;
-			type_arg_collection = _tmp772_;
-			type_arg_collection_length1 = _tmp772__length1;
-			for (type_arg_it = 0; type_arg_it < _tmp772__length1; type_arg_it = type_arg_it + 1) {
-				gchar* _tmp773_;
+			type_arg_collection = _tmp779_;
+			type_arg_collection_length1 = _tmp779__length1;
+			for (type_arg_it = 0; type_arg_it < _tmp779__length1; type_arg_it = type_arg_it + 1) {
+				gchar* _tmp780_;
 				gchar* type_arg = NULL;
-				_tmp773_ = g_strdup (type_arg_collection[type_arg_it]);
-				type_arg = _tmp773_;
+				_tmp780_ = g_strdup (type_arg_collection[type_arg_it]);
+				type_arg = _tmp780_;
 				{
-					ValaMethod* _tmp774_;
-					const gchar* _tmp775_;
-					ValaDataType* _tmp776_ = NULL;
-					ValaDataType* _tmp777_;
-					_tmp774_ = m;
-					_tmp775_ = type_arg;
-					_tmp776_ = vala_gidl_parser_parse_type_from_string (self, _tmp775_, TRUE, NULL);
-					_tmp777_ = _tmp776_;
-					vala_code_node_add_error_type ((ValaCodeNode*) _tmp774_, _tmp777_);
-					_vala_code_node_unref0 (_tmp777_);
+					ValaMethod* _tmp781_;
+					const gchar* _tmp782_;
+					ValaDataType* _tmp783_ = NULL;
+					ValaDataType* _tmp784_;
+					_tmp781_ = m;
+					_tmp782_ = type_arg;
+					_tmp783_ = vala_gidl_parser_parse_type_from_string (self, _tmp782_, TRUE, NULL);
+					_tmp784_ = _tmp783_;
+					vala_code_node_add_error_type ((ValaCodeNode*) _tmp781_, _tmp784_);
+					_vala_code_node_unref0 (_tmp784_);
 					_g_free0 (type_arg);
 				}
 			}
 		}
 		type_args = (_vala_array_free (type_args, type_args_length1, (GDestroyNotify) g_free), NULL);
 	}
-	_tmp778_ = first;
-	if (_tmp778_) {
-		ValaMethod* _tmp779_;
-		_tmp779_ = m;
-		vala_method_set_binding (_tmp779_, VALA_MEMBER_BINDING_STATIC);
+	_tmp785_ = first;
+	if (_tmp785_) {
+		ValaMethod* _tmp786_;
+		_tmp786_ = m;
+		vala_method_set_binding (_tmp786_, VALA_MEMBER_BINDING_STATIC);
 	}
-	_tmp781_ = last_param;
-	if (_tmp781_ != NULL) {
-		ValaParameter* _tmp782_;
-		const gchar* _tmp783_;
-		const gchar* _tmp784_;
-		gboolean _tmp785_ = FALSE;
-		_tmp782_ = last_param;
-		_tmp783_ = vala_symbol_get_name ((ValaSymbol*) _tmp782_);
-		_tmp784_ = _tmp783_;
-		_tmp785_ = g_str_has_prefix (_tmp784_, "first_");
-		_tmp780_ = _tmp785_;
+	_tmp788_ = last_param;
+	if (_tmp788_ != NULL) {
+		ValaParameter* _tmp789_;
+		const gchar* _tmp790_;
+		const gchar* _tmp791_;
+		gboolean _tmp792_ = FALSE;
+		_tmp789_ = last_param;
+		_tmp790_ = vala_symbol_get_name ((ValaSymbol*) _tmp789_);
+		_tmp791_ = _tmp790_;
+		_tmp792_ = g_str_has_prefix (_tmp791_, "first_");
+		_tmp787_ = _tmp792_;
 	} else {
-		_tmp780_ = FALSE;
+		_tmp787_ = FALSE;
 	}
-	_tmp786_ = _tmp780_;
-	if (_tmp786_) {
-		ValaParameter* _tmp787_;
-		_tmp787_ = last_param;
-		vala_parameter_set_ellipsis (_tmp787_, TRUE);
+	_tmp793_ = _tmp787_;
+	if (_tmp793_) {
+		ValaParameter* _tmp794_;
+		_tmp794_ = last_param;
+		vala_parameter_set_ellipsis (_tmp794_, TRUE);
 	} else {
-		gboolean _tmp788_;
-		_tmp788_ = add_ellipsis;
-		if (_tmp788_) {
-			ValaMethod* _tmp789_;
-			ValaParameter* _tmp790_;
-			ValaParameter* _tmp791_;
-			_tmp789_ = m;
-			_tmp790_ = vala_parameter_new_with_ellipsis (NULL);
-			_tmp791_ = _tmp790_;
-			vala_method_add_parameter (_tmp789_, _tmp791_);
-			_vala_code_node_unref0 (_tmp791_);
+		gboolean _tmp795_;
+		_tmp795_ = add_ellipsis;
+		if (_tmp795_) {
+			ValaMethod* _tmp796_;
+			ValaParameter* _tmp797_;
+			ValaParameter* _tmp798_;
+			_tmp796_ = m;
+			_tmp797_ = vala_parameter_new_with_ellipsis (NULL);
+			_tmp798_ = _tmp797_;
+			vala_method_add_parameter (_tmp796_, _tmp798_);
+			_vala_code_node_unref0 (_tmp798_);
 		}
 	}
-	_tmp792_ = container;
-	if (_tmp792_ == NULL) {
-		ValaTypeSymbol* _tmp793_;
-		ValaSymbol* _tmp794_;
-		ValaSymbol* _tmp795_;
-		_tmp793_ = self->priv->current_data_type;
-		_tmp794_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp793_);
+	_tmp799_ = container;
+	if (_tmp799_ == NULL) {
+		ValaTypeSymbol* _tmp800_;
+		ValaSymbol* _tmp801_;
+		ValaSymbol* _tmp802_;
+		_tmp800_ = self->priv->current_data_type;
+		_tmp801_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp800_);
 		_vala_code_node_unref0 (container);
-		container = _tmp794_;
-		_tmp795_ = container;
-		if (_tmp795_ == NULL) {
-			ValaNamespace* _tmp796_;
-			ValaSymbol* _tmp797_;
-			_tmp796_ = self->priv->current_namespace;
-			_tmp797_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp796_);
+		container = _tmp801_;
+		_tmp802_ = container;
+		if (_tmp802_ == NULL) {
+			ValaNamespace* _tmp803_;
+			ValaSymbol* _tmp804_;
+			_tmp803_ = self->priv->current_namespace;
+			_tmp804_ = _vala_code_node_ref0 ((ValaSymbol*) _tmp803_);
 			_vala_code_node_unref0 (container);
-			container = _tmp797_;
+			container = _tmp804_;
 		}
 	}
-	_tmp798_ = symbol;
-	_tmp799_ = m;
-	_tmp800_ = container;
-	_tmp801_ = vala_gidl_parser_get_cname (self, (ValaSymbol*) _tmp799_, _tmp800_);
-	_tmp802_ = _tmp801_;
-	_tmp803_ = g_strcmp0 (_tmp798_, _tmp802_) != 0;
-	_g_free0 (_tmp802_);
-	if (_tmp803_) {
-		ValaMethod* _tmp804_;
-		const gchar* _tmp805_;
-		_tmp804_ = m;
-		_tmp805_ = symbol;
-		vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp804_, "CCode", "cname", _tmp805_, NULL);
+	_tmp805_ = symbol;
+	_tmp806_ = m;
+	_tmp807_ = container;
+	_tmp808_ = vala_gidl_parser_get_cname (self, (ValaSymbol*) _tmp806_, _tmp807_);
+	_tmp809_ = _tmp808_;
+	_tmp810_ = g_strcmp0 (_tmp805_, _tmp809_) != 0;
+	_g_free0 (_tmp809_);
+	if (_tmp810_) {
+		ValaMethod* _tmp811_;
+		const gchar* _tmp812_;
+		_tmp811_ = m;
+		_tmp812_ = symbol;
+		vala_code_node_set_attribute_string ((ValaCodeNode*) _tmp811_, "CCode", "cname", _tmp812_, NULL);
 	}
 	result = m;
 	_vala_code_node_unref0 (last_param_type);
diff --git a/vapigen/valagidlparser.vala b/vapigen/valagidlparser.vala
index 1fbfc48..f93784d 100644
--- a/vapigen/valagidlparser.vala
+++ b/vapigen/valagidlparser.vala
@@ -1391,6 +1391,8 @@ public class Vala.GIdlParser : CodeVisitor {
 					if (eval (nv[1]) == "1") {
 						en.set_attribute ("Deprecated", true);
 					}
+				} else if (nv[0] == "default_value") {
+					en.set_attribute_string ("CCode", "default_value", eval (nv[1]));
 				} else if (nv[0] == "replacement") {
 					en.set_attribute_string ("Deprecated", "replacement", eval (nv[1]));
 				} else if (nv[0] == "deprecated_since") {
@@ -2258,6 +2260,8 @@ public class Vala.GIdlParser : CodeVisitor {
 					m.set_attribute_string ("CCode", "array_length_type", eval (nv[1]));
 				} else if (nv[0] == "type_name") {
 					m.return_type = return_type = parse_type_from_string (eval (nv[1]), return_type.value_owned);
+				} else if (nv[0] == "ctype") {
+					m.set_attribute_string ("CCode", "type", eval (nv[1]));
 				} else if (nv[0] == "type_arguments") {
 					parse_type_arguments_from_string (return_type, eval (nv[1]));
 				} else if (nv[0] == "deprecated") {
diff --git a/vapigen/vapigen.m4 b/vapigen/vapigen.m4
new file mode 100644
index 0000000..4805107
--- /dev/null
+++ b/vapigen/vapigen.m4
@@ -0,0 +1,88 @@
+dnl vala.m4
+dnl
+dnl Copyright 2012 Evan Nemerson
+dnl
+dnl This library is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Lesser General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2.1 of the License, or (at your option) any later version.
+dnl
+dnl This library is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+dnl Lesser General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU Lesser General Public
+dnl License along with this library; if not, write to the Free Software
+dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+
+# VAPIGEN_CHECK([VERSION], [API_VERSION], [FOUND-INTROSPECTION])
+# --------------------------------------
+# Check that vapigen existence and version
+#
+# See http://live.gnome.org/Vala/UpstreamGuide for detailed documentation
+AC_DEFUN([VAPIGEN_CHECK],
+[
+  AC_BEFORE([GOBJECT_INTROSPECTION_CHECK],[$0])
+  AC_BEFORE([GOBJECT_INTROSPECTION_REQUIRE],[$0])
+
+  AC_ARG_ENABLE([vala],
+    AS_HELP_STRING([--enable-vala[=@<:@no/auto/yes@:>@]],
+      [build Vala bindings [[default=auto]]]),,
+      [enable_vala=auto])
+
+  AS_CASE([$enable_vala], [no], [],
+      [yes], [
+        AS_IF([test "x$3" != "xyes" -a "x$found_introspection" != "xyes"], [
+            AC_MSG_ERROR([Vala bindings require GObject Introspection])
+          ])
+      ], [auto], [
+        AS_IF([test "x$3" != "xyes" -a "x$found_introspection" != "xyes"], [
+            enable_vala=no
+          ])
+      ], [
+        AC_MSG_ERROR([Invalid argument passed to --enable-vala, should be one of @<:@no/auto/yes@:>@])
+      ])
+
+  AS_IF([test "x$2" = "x"], [
+      vapigen_pkg_name=vapigen
+    ], [
+      vapigen_pkg_name=vapigen-$2
+    ])
+  AS_IF([test "x$1" = "x"], [
+      vapigen_pkg="$vapigen_pkg_name"
+    ], [
+      vapigen_pkg="$vapigen_pkg_name >= $1"
+    ])
+
+  PKG_PROG_PKG_CONFIG
+
+  PKG_CHECK_EXISTS([$vapigen_pkg], [
+      AS_IF([test "$enable_vala" = "auto"], [
+          enable_vala=yes
+        ])
+    ], [
+      AS_CASE([$enable_vala], [yes], [
+          AC_MSG_ERROR([$vapigen_pkg not found])
+        ], [auto], [
+          enable_vala=no
+        ])
+    ])
+
+  AS_CASE([$enable_vala],
+    [yes], [
+      VAPIGEN=`$PKG_CONFIG --variable=vapigen vapigen`
+      VAPIGEN_MAKEFILE=`$PKG_CONFIG --variable=datadir vapigen`/vala/Makefile.vapigen
+      AS_IF([test "x$2" = "x"], [
+          VAPIGEN_VAPIDIR=`$PKG_CONFIG --variable=vapidir vapigen`
+        ], [
+          VAPIGEN_VAPIDIR=`$PKG_CONFIG --variable=vapidir_versioned vapigen`
+        ])
+    ])
+
+  AC_SUBST([VAPIGEN])
+  AC_SUBST([VAPIGEN_VAPIDIR])
+  AC_SUBST([VAPIGEN_MAKEFILE])
+
+  AM_CONDITIONAL(ENABLE_VAPIGEN, test "x$enable_vala" = "xyes")
+])
diff --git a/vapigen/vapigen.pc.in b/vapigen/vapigen.pc.in
new file mode 100644
index 0000000..ecd54ce
--- /dev/null
+++ b/vapigen/vapigen.pc.in
@@ -0,0 +1,15 @@
+prefix= prefix@
+exec_prefix= exec_prefix@
+libdir= libdir@
+bindir= bindir@
+datarootdir= datarootdir@
+datadir= datadir@
+includedir= includedir@
+
+vapigen=${bindir}/vapigen PACKAGE_SUFFIX@
+vapidir=${datadir}/vala/vapi
+vapidir_versioned=${datadir}/vala PACKAGE_SUFFIX@/vapi
+
+Name: vapigen
+Description: Vala API Generator
+Version: @VERSION@



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]